diff --git a/etc/init.shy b/etc/init.shy index bafc0e1..a13a122 100644 --- a/etc/init.shy +++ b/etc/init.shy @@ -1,5 +1,5 @@ ~ssh source local.shy ~web.chat.macos - desktop create index web.team.gonganxitong.recent name recent icon "src/gonganxitong/recent.png" - desktop create index web.team.gonganxitong.service name service icon "src/gonganxitong/service.png" + desktop create index web.team.gonganxitong.recent name recent icon "src/gonganxitong/credit.png" + desktop create index web.team.gonganxitong.service name service icon "src/gonganxitong/setting.png" diff --git a/src/api/20240724-community.go b/src/api/20240724-community.go index 051f2e2..a029841 100644 --- a/src/api/20240724-community.go +++ b/src/api/20240724-community.go @@ -3,96 +3,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_CITY = "web.team.gonganxitong.city" -const GONGANXITONG_CONTRACT = "web.team.gonganxitong.contract" +const GONGANXITONG_CLEAN = "web.team.gonganxitong.clean" const GONGANXITONG_CREDIT = "web.team.gonganxitong.credit" -const GONGANXITONG_DOCUMENT = "web.team.gonganxitong.document" 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_MEETING = "web.team.gonganxitong.meeting" const GONGANXITONG_MEMBER = "web.team.gonganxitong.member" const GONGANXITONG_MESSAGE = "web.team.gonganxitong.message" const GONGANXITONG_NOTICE = "web.team.gonganxitong.notice" -const GONGANXITONG_PAYMENTLIST = "web.team.gonganxitong.paymentlist" -const GONGANXITONG_PHOTO = "web.team.gonganxitong.photo" 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_STREET = "web.team.gonganxitong.street" const GONGANXITONG_SUPPORT = "web.team.gonganxitong.support" -const GONGANXITONG_USER = "web.team.gonganxitong.user" 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_CONTRACT = "web.team.huodongzuzhi.contract" +const HUODONGZUZHI_CLEAN = "web.team.huodongzuzhi.clean" const HUODONGZUZHI_CREDIT = "web.team.huodongzuzhi.credit" -const HUODONGZUZHI_DOCUMENT = "web.team.huodongzuzhi.document" const HUODONGZUZHI_EVENT = "web.team.huodongzuzhi.event" const HUODONGZUZHI_MARKET = "web.team.huodongzuzhi.market" -const HUODONGZUZHI_MEETING = "web.team.huodongzuzhi.meeting" const HUODONGZUZHI_MEMBER = "web.team.huodongzuzhi.member" const HUODONGZUZHI_MESSAGE = "web.team.huodongzuzhi.message" const HUODONGZUZHI_NOTICE = "web.team.huodongzuzhi.notice" -const HUODONGZUZHI_PAYMENTLIST = "web.team.huodongzuzhi.paymentlist" -const HUODONGZUZHI_PHOTO = "web.team.huodongzuzhi.photo" 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_ACCOUNT = "web.team.renzhengshouquan.account" const RENZHENGSHOUQUAN_ADMIN = "web.team.renzhengshouquan.admin" 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_CONTRACT = "web.team.renzhengshouquan.contract" +const RENZHENGSHOUQUAN_CLEAN = "web.team.renzhengshouquan.clean" const RENZHENGSHOUQUAN_CREDIT = "web.team.renzhengshouquan.credit" -const RENZHENGSHOUQUAN_DOCUMENT = "web.team.renzhengshouquan.document" -const RENZHENGSHOUQUAN_DOMAIN = "web.team.renzhengshouquan.domain" const RENZHENGSHOUQUAN_EVENT = "web.team.renzhengshouquan.event" -const RENZHENGSHOUQUAN_EXTERNAL_TENCENT_MEETING = "web.team.renzhengshouquan.external.tencent.meeting" -const RENZHENGSHOUQUAN_EXTERNAL_TENCENTCLOUD_REALNAME_REALNAM = "web.team.renzhengshouquan.external.tencentcloud.realname.realnam" -const RENZHENGSHOUQUAN_EXTERNAL_TENCENTCLOUD_SMH_SMH = "web.team.renzhengshouquan.external.tencentcloud.smh.smh" -const RENZHENGSHOUQUAN_EXTERNAL_TENCENTCLOUD_SMS_SMS = "web.team.renzhengshouquan.external.tencentcloud.sms.sms" -const RENZHENGSHOUQUAN_EXTERNAL_TENCENTCLOUD_TENCENTCLOUD = "web.team.renzhengshouquan.external.tencentcloud.tencentcloud" -const RENZHENGSHOUQUAN_EXTERNAL_TENCENTDOCUMENT_TENCENTDOCUME = "web.team.renzhengshouquan.external.tencentdocument.tencentdocume" -const RENZHENGSHOUQUAN_EXTERNAL_TENCENTMEETING_TENCENTMEETING = "web.team.renzhengshouquan.external.tencentmeeting.tencentmeeting" -const RENZHENGSHOUQUAN_EXTERNAL_WEIXINPAYMENT_WEIXINPAYMENT = "web.team.renzhengshouquan.external.weixinpayment.weixinpayment" const RENZHENGSHOUQUAN_MARKET = "web.team.renzhengshouquan.market" -const RENZHENGSHOUQUAN_MEETING = "web.team.renzhengshouquan.meeting" const RENZHENGSHOUQUAN_MEMBER = "web.team.renzhengshouquan.member" const RENZHENGSHOUQUAN_MESSAGE = "web.team.renzhengshouquan.message" const RENZHENGSHOUQUAN_NOTICE = "web.team.renzhengshouquan.notice" -const RENZHENGSHOUQUAN_PAYMENTLIST = "web.team.renzhengshouquan.paymentlist" -const RENZHENGSHOUQUAN_PHOTO = "web.team.renzhengshouquan.photo" 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 RENZHENGSHOUQUAN_TRANSITION = "web.team.renzhengshouquan.transition" 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_CONTRACT = "web.team.yuehaoxitong.contract" +const YUEHAOXITONG_CLEAN = "web.team.yuehaoxitong.clean" const YUEHAOXITONG_CREDIT = "web.team.yuehaoxitong.credit" -const YUEHAOXITONG_DOCUMENT = "web.team.yuehaoxitong.document" const YUEHAOXITONG_EVENT = "web.team.yuehaoxitong.event" const YUEHAOXITONG_HISTORY = "web.team.yuehaoxitong.history" const YUEHAOXITONG_MARKET = "web.team.yuehaoxitong.market" -const YUEHAOXITONG_MEETING = "web.team.yuehaoxitong.meeting" 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_PAYMENTLIST = "web.team.yuehaoxitong.paymentlist" -const YUEHAOXITONG_PHOTO = "web.team.yuehaoxitong.photo" const YUEHAOXITONG_PLAN = "web.team.yuehaoxitong.plan" const YUEHAOXITONG_QRCODE = "web.team.yuehaoxitong.qrcode" const YUEHAOXITONG_RECENT = "web.team.yuehaoxitong.recent" diff --git a/src/api/20240724-education.go b/src/api/20240724-education.go index b56cab6..8a74d33 100644 --- a/src/api/20240724-education.go +++ b/src/api/20240724-education.go @@ -3,18 +3,16 @@ 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_CONTRACT = "web.team.jiaocaiziliao.contract" +const JIAOCAIZILIAO_CLEAN = "web.team.jiaocaiziliao.clean" +const JIAOCAIZILIAO_CONTENT = "web.team.jiaocaiziliao.content" const JIAOCAIZILIAO_CREDIT = "web.team.jiaocaiziliao.credit" const JIAOCAIZILIAO_DOCUMENT = "web.team.jiaocaiziliao.document" const JIAOCAIZILIAO_EVENT = "web.team.jiaocaiziliao.event" const JIAOCAIZILIAO_MARKET = "web.team.jiaocaiziliao.market" -const JIAOCAIZILIAO_MEETING = "web.team.jiaocaiziliao.meeting" 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_PAYMENTLIST = "web.team.jiaocaiziliao.paymentlist" -const JIAOCAIZILIAO_PHOTO = "web.team.jiaocaiziliao.photo" const JIAOCAIZILIAO_QRCODE = "web.team.jiaocaiziliao.qrcode" const JIAOCAIZILIAO_RECENT = "web.team.jiaocaiziliao.recent" const JIAOCAIZILIAO_SERVICE = "web.team.jiaocaiziliao.service" @@ -23,18 +21,14 @@ 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_CONTRACT = "web.team.jiaowuxitong.contract" +const JIAOWUXITONG_CLEAN = "web.team.jiaowuxitong.clean" const JIAOWUXITONG_CREDIT = "web.team.jiaowuxitong.credit" -const JIAOWUXITONG_DOCUMENT = "web.team.jiaowuxitong.document" const JIAOWUXITONG_EVENT = "web.team.jiaowuxitong.event" const JIAOWUXITONG_HOMEWORK = "web.team.jiaowuxitong.homework" const JIAOWUXITONG_MARKET = "web.team.jiaowuxitong.market" -const JIAOWUXITONG_MEETING = "web.team.jiaowuxitong.meeting" const JIAOWUXITONG_MEMBER = "web.team.jiaowuxitong.member" const JIAOWUXITONG_MESSAGE = "web.team.jiaowuxitong.message" const JIAOWUXITONG_NOTICE = "web.team.jiaowuxitong.notice" -const JIAOWUXITONG_PAYMENTLIST = "web.team.jiaowuxitong.paymentlist" -const JIAOWUXITONG_PHOTO = "web.team.jiaowuxitong.photo" const JIAOWUXITONG_QRCODE = "web.team.jiaowuxitong.qrcode" const JIAOWUXITONG_RECENT = "web.team.jiaowuxitong.recent" const JIAOWUXITONG_SERVICE = "web.team.jiaowuxitong.service" @@ -43,17 +37,13 @@ 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_CONTRACT = "web.team.kaoshixitong.contract" +const KAOSHIXITONG_CLEAN = "web.team.kaoshixitong.clean" const KAOSHIXITONG_CREDIT = "web.team.kaoshixitong.credit" -const KAOSHIXITONG_DOCUMENT = "web.team.kaoshixitong.document" const KAOSHIXITONG_EVENT = "web.team.kaoshixitong.event" const KAOSHIXITONG_MARKET = "web.team.kaoshixitong.market" -const KAOSHIXITONG_MEETING = "web.team.kaoshixitong.meeting" const KAOSHIXITONG_MEMBER = "web.team.kaoshixitong.member" const KAOSHIXITONG_MESSAGE = "web.team.kaoshixitong.message" const KAOSHIXITONG_NOTICE = "web.team.kaoshixitong.notice" -const KAOSHIXITONG_PAYMENTLIST = "web.team.kaoshixitong.paymentlist" -const KAOSHIXITONG_PHOTO = "web.team.kaoshixitong.photo" const KAOSHIXITONG_QRCODE = "web.team.kaoshixitong.qrcode" const KAOSHIXITONG_QUESTION = "web.team.kaoshixitong.question" const KAOSHIXITONG_RECENT = "web.team.kaoshixitong.recent" @@ -63,18 +53,14 @@ 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_CONTRACT = "web.team.zaixianketang.contract" +const ZAIXIANKETANG_CLEAN = "web.team.zaixianketang.clean" const ZAIXIANKETANG_CREDIT = "web.team.zaixianketang.credit" -const ZAIXIANKETANG_DOCUMENT = "web.team.zaixianketang.document" const ZAIXIANKETANG_EVENT = "web.team.zaixianketang.event" const ZAIXIANKETANG_LESSON = "web.team.zaixianketang.lesson" const ZAIXIANKETANG_MARKET = "web.team.zaixianketang.market" -const ZAIXIANKETANG_MEETING = "web.team.zaixianketang.meeting" const ZAIXIANKETANG_MEMBER = "web.team.zaixianketang.member" const ZAIXIANKETANG_MESSAGE = "web.team.zaixianketang.message" const ZAIXIANKETANG_NOTICE = "web.team.zaixianketang.notice" -const ZAIXIANKETANG_PAYMENTLIST = "web.team.zaixianketang.paymentlist" -const ZAIXIANKETANG_PHOTO = "web.team.zaixianketang.photo" const ZAIXIANKETANG_QRCODE = "web.team.zaixianketang.qrcode" const ZAIXIANKETANG_RECENT = "web.team.zaixianketang.recent" const ZAIXIANKETANG_SERVICE = "web.team.zaixianketang.service" diff --git a/src/api/20240724-enterprise.go b/src/api/20240724-enterprise.go index ae3f85e..62ce0fa 100644 --- a/src/api/20240724-enterprise.go +++ b/src/api/20240724-enterprise.go @@ -4,9 +4,8 @@ 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_CONTRACT = "web.team.gongyinglian.contract" +const GONGYINGLIAN_CLEAN = "web.team.gongyinglian.clean" const GONGYINGLIAN_CREDIT = "web.team.gongyinglian.credit" -const GONGYINGLIAN_DOCUMENT = "web.team.gongyinglian.document" const GONGYINGLIAN_EVENT = "web.team.gongyinglian.event" const GONGYINGLIAN_EXPENSE = "web.team.gongyinglian.expense" const GONGYINGLIAN_EXPRESS = "web.team.gongyinglian.express" @@ -14,14 +13,11 @@ 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_MEETING = "web.team.gongyinglian.meeting" 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_PAYMENTLIST = "web.team.gongyinglian.paymentlist" -const GONGYINGLIAN_PHOTO = "web.team.gongyinglian.photo" const GONGYINGLIAN_PRODUCE = "web.team.gongyinglian.produce" const GONGYINGLIAN_PRODUCT = "web.team.gongyinglian.product" const GONGYINGLIAN_PURCHASE = "web.team.gongyinglian.purchase" @@ -36,25 +32,34 @@ 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 GUANFANGWANGZHAN_PORTAL = "web.team.guanfangwangzhan.portal" +const GUANFANGWANGZHAN_ALLOW = "web.team.guanfangwangzhan.allow" +const GUANFANGWANGZHAN_APPLY = "web.team.guanfangwangzhan.apply" +const GUANFANGWANGZHAN_CLEAN = "web.team.guanfangwangzhan.clean" +const GUANFANGWANGZHAN_CREDIT = "web.team.guanfangwangzhan.credit" +const GUANFANGWANGZHAN_EVENT = "web.team.guanfangwangzhan.event" +const GUANFANGWANGZHAN_MARKET = "web.team.guanfangwangzhan.market" +const GUANFANGWANGZHAN_MEMBER = "web.team.guanfangwangzhan.member" +const GUANFANGWANGZHAN_MESSAGE = "web.team.guanfangwangzhan.message" +const GUANFANGWANGZHAN_NOTICE = "web.team.guanfangwangzhan.notice" +const GUANFANGWANGZHAN_QRCODE = "web.team.guanfangwangzhan.qrcode" +const GUANFANGWANGZHAN_RECENT = "web.team.guanfangwangzhan.recent" +const GUANFANGWANGZHAN_SERVICE = "web.team.guanfangwangzhan.service" +const GUANFANGWANGZHAN_SETTING = "web.team.guanfangwangzhan.setting" +const GUANFANGWANGZHAN_SUPPORT = "web.team.guanfangwangzhan.support" const GUANLIXITONG_PORTAL = "web.team.guanlixitong.portal" const GUANLIXITONG_ALLOW = "web.team.guanlixitong.allow" const GUANLIXITONG_APPLY = "web.team.guanlixitong.apply" -const GUANLIXITONG_CONFERENCE = "web.team.guanlixitong.conference" -const GUANLIXITONG_CONTRACT = "web.team.guanlixitong.contract" +const GUANLIXITONG_CLEAN = "web.team.guanlixitong.clean" const GUANLIXITONG_CREDIT = "web.team.guanlixitong.credit" -const GUANLIXITONG_DOCUMENT = "web.team.guanlixitong.document" const GUANLIXITONG_EMPLOYEE = "web.team.guanlixitong.employee" -const GUANLIXITONG_EQUIPMENT = "web.team.guanlixitong.equipment" const GUANLIXITONG_EVENT = "web.team.guanlixitong.event" const GUANLIXITONG_INTERVIEW = "web.team.guanlixitong.interview" const GUANLIXITONG_INVENTORY = "web.team.guanlixitong.inventory" const GUANLIXITONG_MARKET = "web.team.guanlixitong.market" -const GUANLIXITONG_MEETING = "web.team.guanlixitong.meeting" const GUANLIXITONG_MEMBER = "web.team.guanlixitong.member" const GUANLIXITONG_MESSAGE = "web.team.guanlixitong.message" const GUANLIXITONG_NOTICE = "web.team.guanlixitong.notice" -const GUANLIXITONG_PAYMENTLIST = "web.team.guanlixitong.paymentlist" -const GUANLIXITONG_PHOTO = "web.team.guanlixitong.photo" const GUANLIXITONG_PROCUREMENT = "web.team.guanlixitong.procurement" const GUANLIXITONG_QRCODE = "web.team.guanlixitong.qrcode" const GUANLIXITONG_RECENT = "web.team.guanlixitong.recent" @@ -64,41 +69,126 @@ 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 KEHUGUANLI_PORTAL = "web.team.kehuguanli.portal" +const KEHUGUANLI_ALLOW = "web.team.kehuguanli.allow" +const KEHUGUANLI_APPLY = "web.team.kehuguanli.apply" +const KEHUGUANLI_CLEAN = "web.team.kehuguanli.clean" +const KEHUGUANLI_CREDIT = "web.team.kehuguanli.credit" +const KEHUGUANLI_EVENT = "web.team.kehuguanli.event" +const KEHUGUANLI_MARKET = "web.team.kehuguanli.market" +const KEHUGUANLI_MEMBER = "web.team.kehuguanli.member" +const KEHUGUANLI_MESSAGE = "web.team.kehuguanli.message" +const KEHUGUANLI_NOTICE = "web.team.kehuguanli.notice" +const KEHUGUANLI_PRODUCT = "web.team.kehuguanli.product" +const KEHUGUANLI_QRCODE = "web.team.kehuguanli.qrcode" +const KEHUGUANLI_RECENT = "web.team.kehuguanli.recent" +const KEHUGUANLI_SERVICE = "web.team.kehuguanli.service" +const KEHUGUANLI_SETTING = "web.team.kehuguanli.setting" +const KEHUGUANLI_SUPPORT = "web.team.kehuguanli.support" +const PEIXUNGUANLI_PORTAL = "web.team.peixunguanli.portal" +const PEIXUNGUANLI_ALLOW = "web.team.peixunguanli.allow" +const PEIXUNGUANLI_APPLY = "web.team.peixunguanli.apply" +const PEIXUNGUANLI_CLEAN = "web.team.peixunguanli.clean" +const PEIXUNGUANLI_COURSE = "web.team.peixunguanli.course" +const PEIXUNGUANLI_CREDIT = "web.team.peixunguanli.credit" +const PEIXUNGUANLI_EVALUATION = "web.team.peixunguanli.evaluation" +const PEIXUNGUANLI_EVENT = "web.team.peixunguanli.event" +const PEIXUNGUANLI_FEEDBACK = "web.team.peixunguanli.feedback" +const PEIXUNGUANLI_MARKET = "web.team.peixunguanli.market" +const PEIXUNGUANLI_MEMBER = "web.team.peixunguanli.member" +const PEIXUNGUANLI_MESSAGE = "web.team.peixunguanli.message" +const PEIXUNGUANLI_NOTICE = "web.team.peixunguanli.notice" +const PEIXUNGUANLI_PLAN = "web.team.peixunguanli.plan" +const PEIXUNGUANLI_QRCODE = "web.team.peixunguanli.qrcode" +const PEIXUNGUANLI_RECENT = "web.team.peixunguanli.recent" +const PEIXUNGUANLI_RECORD = "web.team.peixunguanli.record" +const PEIXUNGUANLI_SERVICE = "web.team.peixunguanli.service" +const PEIXUNGUANLI_SETTING = "web.team.peixunguanli.setting" +const PEIXUNGUANLI_SUPPORT = "web.team.peixunguanli.support" +const RONGZIJIHUA_PORTAL = "web.team.rongzijihua.portal" +const RONGZIJIHUA_ALLOW = "web.team.rongzijihua.allow" +const RONGZIJIHUA_APPLY = "web.team.rongzijihua.apply" +const RONGZIJIHUA_CLEAN = "web.team.rongzijihua.clean" +const RONGZIJIHUA_CREDIT = "web.team.rongzijihua.credit" +const RONGZIJIHUA_EVENT = "web.team.rongzijihua.event" +const RONGZIJIHUA_MARKET = "web.team.rongzijihua.market" +const RONGZIJIHUA_MEMBER = "web.team.rongzijihua.member" +const RONGZIJIHUA_MESSAGE = "web.team.rongzijihua.message" +const RONGZIJIHUA_NOTICE = "web.team.rongzijihua.notice" +const RONGZIJIHUA_PRODUCT = "web.team.rongzijihua.product" +const RONGZIJIHUA_QRCODE = "web.team.rongzijihua.qrcode" +const RONGZIJIHUA_RECENT = "web.team.rongzijihua.recent" +const RONGZIJIHUA_SERVICE = "web.team.rongzijihua.service" +const RONGZIJIHUA_SETTING = "web.team.rongzijihua.setting" +const RONGZIJIHUA_SUPPORT = "web.team.rongzijihua.support" const SHICHANGYINGXIAO_PORTAL = "web.team.shichangyingxiao.portal" const SHICHANGYINGXIAO_ALLOW = "web.team.shichangyingxiao.allow" const SHICHANGYINGXIAO_APPLY = "web.team.shichangyingxiao.apply" -const SHICHANGYINGXIAO_CONTRACT = "web.team.shichangyingxiao.contract" +const SHICHANGYINGXIAO_CLEAN = "web.team.shichangyingxiao.clean" const SHICHANGYINGXIAO_CREDIT = "web.team.shichangyingxiao.credit" -const SHICHANGYINGXIAO_DOCUMENT = "web.team.shichangyingxiao.document" const SHICHANGYINGXIAO_EVENT = "web.team.shichangyingxiao.event" const SHICHANGYINGXIAO_MARKET = "web.team.shichangyingxiao.market" -const SHICHANGYINGXIAO_MEETING = "web.team.shichangyingxiao.meeting" const SHICHANGYINGXIAO_MEMBER = "web.team.shichangyingxiao.member" const SHICHANGYINGXIAO_MESSAGE = "web.team.shichangyingxiao.message" const SHICHANGYINGXIAO_NOTICE = "web.team.shichangyingxiao.notice" -const SHICHANGYINGXIAO_PAYMENTLIST = "web.team.shichangyingxiao.paymentlist" -const SHICHANGYINGXIAO_PHOTO = "web.team.shichangyingxiao.photo" 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 XIANGMUGUANLI_PORTAL = "web.team.xiangmuguanli.portal" +const XIANGMUGUANLI_ALLOW = "web.team.xiangmuguanli.allow" +const XIANGMUGUANLI_APPLY = "web.team.xiangmuguanli.apply" +const XIANGMUGUANLI_CLEAN = "web.team.xiangmuguanli.clean" +const XIANGMUGUANLI_CREDIT = "web.team.xiangmuguanli.credit" +const XIANGMUGUANLI_DATE = "web.team.xiangmuguanli.date" +const XIANGMUGUANLI_DONE = "web.team.xiangmuguanli.done" +const XIANGMUGUANLI_EVENT = "web.team.xiangmuguanli.event" +const XIANGMUGUANLI_MARKET = "web.team.xiangmuguanli.market" +const XIANGMUGUANLI_MEMBER = "web.team.xiangmuguanli.member" +const XIANGMUGUANLI_MESSAGE = "web.team.xiangmuguanli.message" +const XIANGMUGUANLI_NOTICE = "web.team.xiangmuguanli.notice" +const XIANGMUGUANLI_PLAN = "web.team.xiangmuguanli.plan" +const XIANGMUGUANLI_QRCODE = "web.team.xiangmuguanli.qrcode" +const XIANGMUGUANLI_RECENT = "web.team.xiangmuguanli.recent" +const XIANGMUGUANLI_SERVICE = "web.team.xiangmuguanli.service" +const XIANGMUGUANLI_SETTING = "web.team.xiangmuguanli.setting" +const XIANGMUGUANLI_SUPPORT = "web.team.xiangmuguanli.support" +const XIANGMUGUANLI_TASK = "web.team.xiangmuguanli.task" +const XIANGMUGUANLI_TODO = "web.team.xiangmuguanli.todo" +const XIANGMUGUANLI_WARN = "web.team.xiangmuguanli.warn" +const YINGXIAOTUIGUANG_PORTAL = "web.team.yingxiaotuiguang.portal" +const YINGXIAOTUIGUANG_ALLOW = "web.team.yingxiaotuiguang.allow" +const YINGXIAOTUIGUANG_APPLY = "web.team.yingxiaotuiguang.apply" +const YINGXIAOTUIGUANG_BONUS = "web.team.yingxiaotuiguang.bonus" +const YINGXIAOTUIGUANG_CHANNEL = "web.team.yingxiaotuiguang.channel" +const YINGXIAOTUIGUANG_CLEAN = "web.team.yingxiaotuiguang.clean" +const YINGXIAOTUIGUANG_CREDIT = "web.team.yingxiaotuiguang.credit" +const YINGXIAOTUIGUANG_EVENT = "web.team.yingxiaotuiguang.event" +const YINGXIAOTUIGUANG_INVITE = "web.team.yingxiaotuiguang.invite" +const YINGXIAOTUIGUANG_MARKET = "web.team.yingxiaotuiguang.market" +const YINGXIAOTUIGUANG_MEMBER = "web.team.yingxiaotuiguang.member" +const YINGXIAOTUIGUANG_MESSAGE = "web.team.yingxiaotuiguang.message" +const YINGXIAOTUIGUANG_NOTICE = "web.team.yingxiaotuiguang.notice" +const YINGXIAOTUIGUANG_PRODUCT = "web.team.yingxiaotuiguang.product" +const YINGXIAOTUIGUANG_QRCODE = "web.team.yingxiaotuiguang.qrcode" +const YINGXIAOTUIGUANG_RECENT = "web.team.yingxiaotuiguang.recent" +const YINGXIAOTUIGUANG_SERVICE = "web.team.yingxiaotuiguang.service" +const YINGXIAOTUIGUANG_SETTING = "web.team.yingxiaotuiguang.setting" +const YINGXIAOTUIGUANG_STAT = "web.team.yingxiaotuiguang.stat" +const YINGXIAOTUIGUANG_SUPPORT = "web.team.yingxiaotuiguang.support" const ZIJINLIAN_PORTAL = "web.team.zijinlian.portal" const ZIJINLIAN_ALLOW = "web.team.zijinlian.allow" const ZIJINLIAN_APPLY = "web.team.zijinlian.apply" -const ZIJINLIAN_CONTRACT = "web.team.zijinlian.contract" +const ZIJINLIAN_CLEAN = "web.team.zijinlian.clean" const ZIJINLIAN_CREDIT = "web.team.zijinlian.credit" -const ZIJINLIAN_DOCUMENT = "web.team.zijinlian.document" const ZIJINLIAN_EVENT = "web.team.zijinlian.event" const ZIJINLIAN_INVESTMENT = "web.team.zijinlian.investment" const ZIJINLIAN_MARKET = "web.team.zijinlian.market" -const ZIJINLIAN_MEETING = "web.team.zijinlian.meeting" const ZIJINLIAN_MEMBER = "web.team.zijinlian.member" const ZIJINLIAN_MESSAGE = "web.team.zijinlian.message" const ZIJINLIAN_NOTICE = "web.team.zijinlian.notice" -const ZIJINLIAN_PAYMENTLIST = "web.team.zijinlian.paymentlist" -const ZIJINLIAN_PHOTO = "web.team.zijinlian.photo" const ZIJINLIAN_QRCODE = "web.team.zijinlian.qrcode" const ZIJINLIAN_RECENT = "web.team.zijinlian.recent" const ZIJINLIAN_SERVICE = "web.team.zijinlian.service" diff --git a/src/api/20240903-operation.go b/src/api/20240903-operation.go index 7132061..8579928 100644 --- a/src/api/20240903-operation.go +++ b/src/api/20240903-operation.go @@ -3,17 +3,15 @@ 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_CONTRACT = "web.team.dashboard.contract" +const DASHBOARD_CLEAN = "web.team.dashboard.clean" +const DASHBOARD_CLEANUP = "web.team.dashboard.cleanup" const DASHBOARD_CREDIT = "web.team.dashboard.credit" const DASHBOARD_DASHBOARD = "web.team.dashboard.dashboard" const DASHBOARD_EVENT = "web.team.dashboard.event" const DASHBOARD_MARKET = "web.team.dashboard.market" -const DASHBOARD_MEETING = "web.team.dashboard.meeting" const DASHBOARD_MEMBER = "web.team.dashboard.member" const DASHBOARD_MESSAGE = "web.team.dashboard.message" const DASHBOARD_NOTICE = "web.team.dashboard.notice" -const DASHBOARD_PAYMENTLIST = "web.team.dashboard.paymentlist" -const DASHBOARD_PHOTO = "web.team.dashboard.photo" const DASHBOARD_QRCODE = "web.team.dashboard.qrcode" const DASHBOARD_RECENT = "web.team.dashboard.recent" const DASHBOARD_SERVICE = "web.team.dashboard.service" @@ -22,3 +20,80 @@ 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_CLEAN = "web.team.development.clean" +const DEVELOPMENT_CREDIT = "web.team.development.credit" +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_SERVE = "web.team.development.serve" +const DEVELOPMENT_SERVICE = "web.team.development.service" +const DEVELOPMENT_SETTING = "web.team.development.setting" +const DEVELOPMENT_SUPPORT = "web.team.development.support" +const OPERATION_PORTAL = "web.team.operation.portal" +const OPERATION_ALLOW = "web.team.operation.allow" +const OPERATION_APPLY = "web.team.operation.apply" +const OPERATION_CLEAN = "web.team.operation.clean" +const OPERATION_CLUSTER = "web.team.operation.cluster" +const OPERATION_CREDIT = "web.team.operation.credit" +const OPERATION_EVENT = "web.team.operation.event" +const OPERATION_GATEWAY = "web.team.operation.gateway" +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_PRODUCT = "web.team.operation.product" +const OPERATION_PROJECT = "web.team.operation.project" +const OPERATION_QRCODE = "web.team.operation.qrcode" +const OPERATION_RECENT = "web.team.operation.recent" +const OPERATION_SERVICE = "web.team.operation.service" +const OPERATION_SETTING = "web.team.operation.setting" +const OPERATION_SUPPORT = "web.team.operation.support" +const OPERATION_TEMPLATE = "web.team.operation.template" +const PRODUCTION_PORTAL = "web.team.production.portal" +const PRODUCTION_ALLOW = "web.team.production.allow" +const PRODUCTION_APPLY = "web.team.production.apply" +const PRODUCTION_CARE = "web.team.production.care" +const PRODUCTION_CASE = "web.team.production.case" +const PRODUCTION_CLEAN = "web.team.production.clean" +const PRODUCTION_CREDIT = "web.team.production.credit" +const PRODUCTION_DATE = "web.team.production.date" +const PRODUCTION_DEAL = "web.team.production.deal" +const PRODUCTION_DESIGN = "web.team.production.design" +const PRODUCTION_EVENT = "web.team.production.event" +const PRODUCTION_FILE = "web.team.production.file" +const PRODUCTION_ISSUE = "web.team.production.issue" +const PRODUCTION_MARKET = "web.team.production.market" +const PRODUCTION_MEET = "web.team.production.meet" +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_STAT = "web.team.production.stat" +const PRODUCTION_SUPPORT = "web.team.production.support" +const PRODUCTION_TAKE = "web.team.production.take" +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_CLEAN = "web.team.storage.clean" +const STORAGE_CREDIT = "web.team.storage.credit" +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" diff --git a/src/api/common.go b/src/api/common.go new file mode 100644 index 0000000..9647886 --- /dev/null +++ b/src/api/common.go @@ -0,0 +1,46 @@ +package api + +const GONGANXITONG_USER = "web.team.gonganxitong.user" +const GONGANXITONG_CITY = "web.team.gonganxitong.city" +const GONGANXITONG_STREET = "web.team.gonganxitong.street" +const GUANLIXITONG_COMPANY = "web.team.guanlixitong.company" + +type AuthStatus int + +const ( + AuthCreate AuthStatus = iota + AuthRequest + AuthIssued + AuthRevoked +) + +var AuthStatusList = map[AuthStatus]string{ + AuthCreate: "create", + AuthRequest: "request", + AuthIssued: "issued", + AuthRevoked: "revoked", +} + +func (s AuthStatus) String() string { return AuthStatusList[s] } + +type AuthType int + +const ( + AuthRoot AuthType = iota + AuthCity // 1 + AuthPersonal // 2 + AuthService // 3 + AuthCompany // 4 + AuthSchool // 5 + AuthStreet // 6 +) + +var AuthTypeList = map[AuthType]string{ + AuthRoot: "root", + AuthCity: "city", + AuthPersonal: "personal", + AuthService: "service", + AuthCompany: "company", + AuthSchool: "school", + AuthStreet: "street", +} diff --git a/src/gonganxitong/allow.go b/src/gonganxitong/allow.go index 0975079..84921d5 100644 --- a/src/gonganxitong/allow.go +++ b/src/gonganxitong/allow.go @@ -13,8 +13,8 @@ type allow struct { order string `data:"503"` role string `data:"leader"` create string `name:"create apply_uid* place_uid* user_uid* status*"` - reject string `name:"reject" role:"void"` - approve string `name:"approve" role:"void"` + reject string `name:"reject" role:"leader"` + approve string `name:"approve" role:"leader"` } func (s allow) Create(m *ice.Message, arg ...string) { diff --git a/src/gonganxitong/allow.js b/src/gonganxitong/allow.js index 286da9d..3bfde0f 100644 --- a/src/gonganxitong/allow.js +++ b/src/gonganxitong/allow.js @@ -2,8 +2,7 @@ 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, 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), can.onimport.textView(can, value)]}, - {view: html.STATUS, list: [value.begin_time.split(" ")[0], value.end_time.split(" ")[0]]}, + {view: html.STATUS, list: [can.onimport.uidView(can, value), can.onimport.timeView(can, value), can.onimport.textView(can, value)]}, ] }) }, }) diff --git a/src/gonganxitong/allow.png b/src/gonganxitong/allow.png deleted file mode 100644 index 924eaf1..0000000 Binary files a/src/gonganxitong/allow.png and /dev/null differ diff --git a/src/gonganxitong/apply.go b/src/gonganxitong/apply.go index bea42de..93436df 100644 --- a/src/gonganxitong/apply.go +++ b/src/gonganxitong/apply.go @@ -35,9 +35,7 @@ func (s apply) List(m *ice.Message, arg ...string) { s.AS(s.Key(s, model.ROLE), s.Keys(s.UserPlace, model.ROLE)), model.BEGIN_TIME, model.END_TIME) if len(arg) == 1 { s.Select(m, model.PLACE_UID, arg[0], model.USER_UID, m.Option(model.USER_UID)) - if m.Length() == 0 { - m.Action() - } + kit.If(m.Length() == 0, func() { m.Action() }) } else if len(arg) == 2 { s.SelectDetail(m, model.PLACE_UID, arg[0], model.USER_UID, m.Option(model.USER_UID), model.UID, arg[1]) switch ApplyStatus(kit.Int(m.Append(model.APPLY_STATUS))) { @@ -49,10 +47,7 @@ func (s apply) List(m *ice.Message, arg ...string) { case ApplyRejected, ApplyApproved: s.DoneMessage(m) } - } else { - return } - s.SelectJoinUser(m) s.DisplayBase(m, "") } func (s apply) Cancel(m *ice.Message, arg ...string) { diff --git a/src/gonganxitong/apply.js b/src/gonganxitong/apply.js index f4b44d4..8678f51 100644 --- a/src/gonganxitong/apply.js +++ b/src/gonganxitong/apply.js @@ -2,14 +2,16 @@ 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, can.onimport.textView(can, value, USER_PLACE_ROLE)]}, - {view: html.STATUS, list: [value.uid.slice(0, 6), can.onimport.timeView(can, value), can.onimport.textView(can, value)]}, - {view: html.STATUS, list: [value.begin_time.split(" ")[0], value.end_time.split(" ")[0]]}, + {view: html.STATUS, list: [can.onimport.uidView(can, value), can.onimport.timeView(can, value), can.onimport.textView(can, value)]}, ] }) if (msg.Length() == 0) { var target = can.page.Append(can, can._output, [{view: html.CODE, list: [{view: [mdb.INFO, "", "请创建权限申请"]}]}])._target can.runAction({}, mdb.INPUTS, [USER_PLACE_ROLE], function(msg) { msg.Table(function(value) { - can.onappend.input(can, {type: html.BUTTON, name: value.name, value: "我是"+can.user.trans(can, value.name, null, "value."+USER_PLACE_ROLE), style: value[USER_PLACE_ROLE] == "2"? html.DANGER: html.NOTICE, onclick: function(event) { - can.runAction(event, mdb.CREATE, [USER_PLACE_ROLE, value[USER_PLACE_ROLE]]) - }}, "", target) + can.onappend.input(can, { + type: html.BUTTON, name: value.name, + value: "我是"+can.user.trans(can, value.name, null, "value."+USER_PLACE_ROLE), + style: value[USER_PLACE_ROLE] == "2"? html.DANGER: html.NOTICE, + onclick: function(event) { can.runAction(event, mdb.CREATE, [USER_PLACE_ROLE, value[USER_PLACE_ROLE]]) }, + }, "", target) }) }), can.onappend.style(can, html.FORM) } }, diff --git a/src/gonganxitong/apply.png b/src/gonganxitong/apply.png deleted file mode 100644 index 6d01e89..0000000 Binary files a/src/gonganxitong/apply.png and /dev/null differ diff --git a/src/gonganxitong/city.go b/src/gonganxitong/city.go index 0dcf66e..230d0fe 100644 --- a/src/gonganxitong/city.go +++ b/src/gonganxitong/city.go @@ -9,8 +9,9 @@ import ( type city struct { Table - list string `name:"list city_name auto" role:"void"` - authCreate string `name:"authCreate" role:"tech"` + order string `data:"507"` + role string `data:"tech"` + list string `name:"list name auto"` } func (s user) Init(m *ice.Message, arg ...string) { @@ -32,7 +33,19 @@ func (s city) FindOrCreateByName(m *ice.Message, arg ...string) { } func (s city) List(m *ice.Message, arg ...string) { if len(arg) == 0 { - s.Select(m).Action() + s.Select(m) + s.SelectJoinAuth(m) + m.Table(func(value ice.Maps) { + switch value[model.AUTH_STATUS] { + case "create": + m.PushButton(s.AuthInfo, s.AuthMember, s.AuthClean) + case "issued": + m.PushButton(s.AuthInfo, s.AuthMember) + default: + m.PushButton(s.AuthCreate, s.Delete) + } + }).Action() + m.Sort("auth_status", []string{"issued", "create"}) } else if len(arg) == 1 { s.SelectDetail(m, model.NAME, arg[0]) if m.Append(model.AUTH_UID) == "" && m.IsTech() { @@ -41,6 +54,17 @@ func (s city) List(m *ice.Message, arg ...string) { } } func (s city) AuthCreate(m *ice.Message, arg ...string) { - s.Table.AuthCreate(m, 1, "", m.OptionSimple(model.NAME)...) + s.Table.AuthCreate(m, api.AuthCity, "", m.OptionSimple(model.NAME)...) } +func (s city) AuthInfo(m *ice.Message, arg ...string) { + m.ProcessOpen(s.SpaceLink(m, "20240724-community", api.RENZHENGSHOUQUAN_PORTAL, m.Option(model.AUTH_UID))) +} +func (s city) AuthMember(m *ice.Message, arg ...string) { + m.ProcessOpen(s.SpaceLink(m, "20240724-community", api.RENZHENGSHOUQUAN_PORTAL, m.Option(model.AUTH_UID), api.RENZHENGSHOUQUAN_MEMBER)) +} +func (s city) AuthClean(m *ice.Message, arg ...string) { + s.Update(m, ice.Map{model.AUTH_UID: ""}) + m.Cmd(api.RENZHENGSHOUQUAN_CLEAN, "prune", m.Option(model.AUTH_UID)) +} + func init() { ice.TeamCtxCmd(city{}) } diff --git a/src/gonganxitong/clean.go b/src/gonganxitong/clean.go index 1289bbd..9772304 100644 --- a/src/gonganxitong/clean.go +++ b/src/gonganxitong/clean.go @@ -6,72 +6,94 @@ import ( "shylinux.com/x/ice" kit "shylinux.com/x/toolkits" + "shylinux.com/x/community/src/api" "shylinux.com/x/community/src/gonganxitong/model" ) type clean struct { Tables - list string `name:"list place_uid uid auto" help:"清理" role:"tech"` + order string `data:"506"` + role string `data:"tech"` + list string `name:"list place_uid uid auto" help:"清理" role:"tech"` + member string `name:"member" icon:"bi bi-people"` + prune string `name:"prune" icon:"bi bi-trash"` } func (s clean) List(m *ice.Message, arg ...string) { - if !m.IsTech() { - return - } + m.Display("/plugin/table.js") if len(arg) == 0 { s.Tables.Tables(m, kit.Format("left join %s on %s = %s", s.TableNames(s.UserPlace), s.Key(s.UserPlace, s.Keys(s.Place, model.UID)), s.Key(s.Place, model.UID))) - s.Fields(m, s.Key(s.Place, model.UID), s.Key(s.Place, model.CREATED_AT), s.Key(s.Place, model.NAME), "count(*) AS count", s.Key(s.UserPlace, model.USER_UID)).Groups(m, s.Key(s.Place, model.UID)) - s.Orders(m, model.COUNT, s.Key(s.Place, model.CREATED_AT)).Limit(m, 300) - m.Cmdy(s.Place, s.Select) - m.RenameAppend(model.UID, s.Keys(s.Place, model.UID)) - m.PushAction(s.Open, s.Member).Action() + if s.PrefixPortal(m) == api.RENZHENGSHOUQUAN_PORTAL { + s.Fields(m, s.Key(s.Place, model.UID), s.Key(s.Place, model.CREATED_AT), s.Key(s.Place, model.NAME), "count(*) AS count", + model.AUTH_TYPE, model.AUTH_STATUS, s.Key(s.UserPlace, model.USER_UID)) + defer m.PushAction(s.Member, s.Open, s.Prune) + defer m.Sort(kit.JoinFields(model.AUTH_STATUS, model.AUTH_TYPE)) + } else { + s.Fields(m, s.Key(s.Place, model.UID), s.Key(s.Place, model.CREATED_AT), s.Key(s.Place, model.NAME), "count(*) AS count", + model.AUTH_UID, s.Key(s.UserPlace, model.USER_UID)) + defer m.PushAction(s.Member, s.Main, s.Open, s.Prune) + } + s.Groups(m, s.Key(s.Place, model.UID)).Orders(m, model.COUNT, s.Key(s.Place, model.CREATED_AT)).Limit(m, 300) + m.Cmdy(s.Place, s.Select).RenameAppend(model.UID, s.Keys(s.Place, model.UID)).Action() s.SelectJoinUser(m) + s.RewriteAppend(m) } else if len(arg) == 1 { for k, h := range m.Target().Commands { - if c, ok := m.Target().Configs[k]; !ok || kit.Value(c.Value, "meta.model") == nil { + if s.isSkip(m, k) { continue } - // m.Push("cmd", k) - m.Push("uid", k) - m.Push("name", h.Name) - m.Push("help", h.Help) + if k == kit.TypeName(s.Place) { + continue + } + m.Push(model.UID, k) + m.Push(model.NAME, h.Name) + m.Push(model.INFO, h.Help) m.Push("actions", len(h.Actions)) - PLACE_UID := kit.Split(h.Name)[1] - s.Fields(m, "count(*) AS count") - msg := m.Cmd(m.Prefix(k), s.Select, PLACE_UID, arg[0]) - m.Push("count", msg.Append("count")) + m.Push(model.COUNT, m.Cmd(m.Prefix(k), s.Fields(m, "count(*) AS count").Select, kit.Split(h.Name)[1], arg[0]).Append(model.COUNT)) } - m.Action(s.Prune).SortIntR("count,cmd") + m.Action(s.Prune).SortIntR("count,uid") } else { - h := m.Target().Commands[arg[1]] - PLACE_UID := kit.Split(h.Name)[1] if s.Fields(m, "*"); kit.TypeName(s.Place) == arg[1] { m.Cmdy(m.Prefix(arg[1]), s.Select, model.UID, arg[0]) } else { - m.Cmdy(m.Prefix(arg[1]), s.Select, PLACE_UID, arg[0]) + h := m.Target().Commands[arg[1]] + m.Cmdy(m.Prefix(arg[1]), s.Select, kit.Split(h.Name)[1], arg[0]) } } } +func (s clean) Member(m *ice.Message, arg ...string) { + m.ProcessOpen(m.MergePodCmd("", s.PrefixPortal(m), m.OptionSimple(s.Keys(s.Place, model.UID))) + + "#" + strings.Join([]string{m.Option(s.Keys(s.Place, model.UID)), s.PrefixMember(m)}, ":")) +} +func (s clean) Main(m *ice.Message, arg ...string) { + m.ProcessOpen(m.MergePodCmd("", api.RENZHENGSHOUQUAN_CLEAN, m.OptionSimple(model.AUTH_UID))) +} +func (s clean) Open(m *ice.Message, arg ...string) { + m.ProcessOpen(m.MergePodCmd("", s.PrefixPortal(m), m.OptionSimple(s.Keys(s.Place, model.UID)))) +} func (s clean) Prune(m *ice.Message, arg ...string) { + kit.If(len(arg) == 0, func() { arg = append(arg, m.Option(s.PLACE_UID)) }) for k, h := range m.Target().Commands { - if k == "service" { - continue - } - if c, ok := m.Target().Configs[k]; !ok || kit.Value(c.Value, "meta.model") == nil { + if s.isSkip(m, k) { continue } PLACE_UID := kit.Split(h.Name)[1] kit.If(k == kit.TypeName(s.Place), func() { PLACE_UID = model.UID }) m.Cmd(m.Prefix(k), s.Exec, kit.Format("update %s set deleted_at = %q where %s = %q", s.TableName(k), m.Time(), PLACE_UID, arg[0])) } - // m.Cmd(s.Prefix(m, s.Place), s.Exec, kit.Format("update %s set deleted_at = %q where %s = %q", s.TableNames(s.Place), m.Time(), model.UID, arg[0])) -} -func (s clean) Open(m *ice.Message, arg ...string) { - m.ProcessOpen(m.MergePodCmd("", s.PrefixPortal(m), m.OptionSimple(s.Keys(s.Place, model.UID)))) -} -func (s clean) Member(m *ice.Message, arg ...string) { - m.ProcessOpen(m.MergePodCmd("", s.PrefixPortal(m), m.OptionSimple(s.Keys(s.Place, model.UID))) + - "#" + strings.Join([]string{m.Option(s.Keys(s.Place, model.UID)), s.Prefix(m, member{})}, ":")) + if m.Option(model.AUTH_UID) != "" && m.PrefixKey() != api.RENZHENGSHOUQUAN_CLEAN { + m.Cmd(api.RENZHENGSHOUQUAN_CLEAN, m.ActionKey(), m.Option(model.AUTH_UID)) + } } func init() { ice.TeamCtxCmd(clean{Tables: newTables()}) } + +func (s clean) isSkip(m *ice.Message, k string) bool { + if kit.IsIn(k, "user", "sess", "domain", "service", "command", "city", "street") { + return true + } + if c, ok := m.Target().Configs[k]; !ok || kit.Value(c.Value, "meta.model") == nil { + return true + } + return false +} diff --git a/src/gonganxitong/common.go b/src/gonganxitong/common.go index 5913b17..8b742df 100644 --- a/src/gonganxitong/common.go +++ b/src/gonganxitong/common.go @@ -42,22 +42,23 @@ type Table struct { Street Container STREET_UID string PLACE_UID string - checkRole string `name:"checkRole role"` inputs string `name:"inputs" role:"void"` + upload string `name:"upload" role:"worker"` list string `name:"list place_uid uid auto" role:"void"` - marketInsert string `name:"marketInsert domain_uid* title* content" style:"notice" role:"leader"` - pushPublic string `name:"pushPublic domain_uid* title* content" role:"leader"` - memberList string `name:"memberList" role:"void"` - noticeList string `name:"noticeList" role:"void"` + pushPublic string `name:"pushPublic domain_uid*:select title* content price" role:"leader"` + marketInsert string `name:"marketInsert domain_uid*:select title* content price" style:"notice" role:"leader"` marketPlaceInfo string `name:"marketPlaceInfo" role:"void"` messagePlaceInfo string `name:"messagePlaceInfo" role:"void"` + sendMessage string `name:"sendMessage from_user_uid*:select to_user_uid*:select title* content price" style:"notice" role:"worker"` + userInfo string `name:"userInfo" help:"用户信息" role:"void"` + noticeList string `name:"noticeList" role:"void"` + memberList string `name:"memberList" role:"void"` applyCreate string `name:"applyCreate" role:"void"` - userInfo string `name:"userInfo" role:"void" help:"用户信息"` - upload string `name:"upload" role:"worker"` + checkRole string `name:"checkRole role"` + authCreate string `name:"authCreate" help:"申请认证"` } func (s Table) LoadTrans(m *ice.Message, arg ...string) { - // m.Option("_iconslib", "https://img.icons8.com/officel/80/") p := kit.FileLine(1, 100) if m.PrefixKey() != api.GONGANXITONG_PORTAL { ice.LoadTrans(m.Spawn(kit.Dict("_template", path.Join(path.Dir(p), "portal.json"))).Message, m.CommandKey(), m.GetCommand().Command) @@ -94,9 +95,18 @@ func (s Table) Inputs(m *ice.Message, arg ...string) { case model.DOMAIN_UID: s.AutoCmdy(m, api.GONGANXITONG_DOMAIN).DisplayInputKeyNameIconTitle() case model.FROM_USER_UID, model.TO_USER_UID: - m.Cmdy(s.Prefix(m, member{}), m.Option(model.PLACE_UID)).Cut(model.USER_UID, model.USER_NAME, model.USER_AVATAR) + m.Cmdy(s.PrefixMember(m), m.Option(model.PLACE_UID)).Option("_input_args", model.USER_UID, model.USER_NAME, model.USER_AVATAR) + s.RewriteAppend(m) + return + m.Cmdy(s.PrefixMember(m), m.Option(model.PLACE_UID)).Cut(model.USER_UID, model.USER_NAME, model.USER_AVATAR) m.RenameAppend(model.USER_UID, arg[0], model.NAME, model.USER_NAME, model.USER_AVATAR, mdb.ICONS) m.DisplayInputKeyNameIconTitle() + case model.CITY_NAME: + s.Orders(m, model.CREATED_AT) + m.Cmdy(city{}, s.Select, "auth_uid IS NOT NULL AND auth_uid != ''").CutTo(model.NAME, model.CITY_NAME) + case model.STREET_NAME: + msg := m.Cmd(city{}, s.Select, model.NAME, m.Option(model.CITY_NAME)) + m.Cmdy(street{}, s.Select, "auth_uid IS NOT NULL AND auth_uid != '' AND city_uid = ?", msg.Append(model.UID)).CutTo(model.NAME, model.STREET_NAME) case model.RECENT_UID: s.InputsRecent(m) case model.LANGUAGE: @@ -106,21 +116,6 @@ func (s Table) Inputs(m *ice.Message, arg ...string) { s.Table.Inputs(m, arg...) } } -func (s Table) InputsUID(m *ice.Message, arg []string, target ice.Any, args ...string) { - s.Fields(m, model.UID, model.TITLE, model.USER_UID).Limit(m, 300) - m.Cmdy(target, s.Select, args).RenameAppend(model.UID, arg[0]) - m.DisplayInputKeyNameIconTitle() -} -func (s Table) InputsRecent(m *ice.Message) string { - m.Cmdy(s.PrefixRecent(m)).Option("_input_args", model.UID, model.PLACE_NAME, model.PLACE_AVATAR) - return "" -} -func (s Table) InputsListCmd(m *ice.Message, target ice.Any, arg ...string) { - if len(arg) == 0 { - arg = append(arg, model.UID, model.NAME, model.ICON) - } - m.Cmdy(target, m.Option(model.PLACE_UID)).Option("_input_args", arg) -} func (s Table) InputsList(m *ice.Message, list ice.Any, arg ...string) { it := reflect.ValueOf(list).MapRange() for it.Next() { @@ -128,9 +123,6 @@ func (s Table) InputsList(m *ice.Message, list ice.Any, arg ...string) { } m.SortInt(arg[0]).DisplayInputKeyNameIconTitle() } -func (s Table) InputsListRole(m *ice.Message, list ice.Any, arg ...string) { - s.InputsListSkip(m, list, "1", arg...) -} func (s Table) InputsListSkip(m *ice.Message, list ice.Any, skip string, arg ...string) { it := reflect.ValueOf(list).MapRange() for it.Next() { @@ -140,6 +132,9 @@ func (s Table) InputsListSkip(m *ice.Message, list ice.Any, skip string, arg ... } m.SortInt(arg[0]).DisplayInputKeyNameIconTitle() } +func (s Table) InputsListRole(m *ice.Message, list ice.Any, arg ...string) { + s.InputsListSkip(m, list, "1", arg...) +} func (s Table) InputsListValue(m *ice.Message, list ice.Any, key string) string { k, e := strconv.ParseInt(key, 10, 64) if e != nil { @@ -153,14 +148,18 @@ func (s Table) InputsListValue(m *ice.Message, list ice.Any, key string) string } return "" } -func (s Table) TransPrice(m *ice.Message, arg []string, field ...string) []string { - kit.If(len(field) == 0, func() { field = append(field, "price", "amount") }) - for i := 0; i < len(arg)-1; i += 2 { - if kit.IndexOf(field, arg[i]) > -1 { - arg[i+1] = kit.Format(kit.Int(kit.Float(arg[i+1]) * 100)) - } - } - return arg +func (s Table) InputsListCmd(m *ice.Message, target ice.Any, arg ...string) { + kit.If(len(arg) == 0, func() { arg = append(arg, model.UID, model.NAME, model.ICON) }) + m.Cmdy(target, m.Option(model.PLACE_UID)).Option("_input_args", arg) +} +func (s Table) InputsUID(m *ice.Message, arg []string, target ice.Any, args ...string) { + s.Fields(m, model.UID, model.TITLE, model.USER_UID).Limit(m, 300) + m.Cmdy(target, s.Select, args).RenameAppend(model.UID, arg[0]) + m.DisplayInputKeyNameIconTitle() +} +func (s Table) InputsRecent(m *ice.Message) string { + m.Cmdy(s.PrefixRecent(m)).Option("_input_args", model.UID, model.PLACE_NAME, model.PLACE_AVATAR) + return "" } func (s Table) ValueModel(m *ice.Message, action ice.Any, arg ...string) *ice.Message { defer m.Options(db.DB, m.Configv(db.DB)).Set(ice.MSG_OPTION, db.DB) @@ -175,15 +174,15 @@ func (s Table) ValueCreate(m *ice.Message, arg ...string) { s.RecordEventWithName(m, "") s.UserPlaceInit(m) } -func (s Table) ValueRemove(m *ice.Message, arg ...string) { - s.ValueModel(m, s.ValueRemove, arg...) - s.RecordEventWithName(m, "") -} func (s Table) ValueModify(m *ice.Message, arg ...string) { s.TransPrice(m, arg) s.ValueModel(m, s.ValueModify, arg...) s.RecordEventWithName(m, "") } +func (s Table) ValueRemove(m *ice.Message, arg ...string) { + s.ValueModel(m, s.ValueRemove, arg...) + s.RecordEventWithName(m, "") +} func (s Table) ValueList(m *ice.Message, arg []string, fields ...ice.Any) *ice.Message { if len(arg) > 0 { kit.If(len(fields) == 0, func() { fields = kit.TransArgs(kit.Split(m.Config(mdb.FIELDS), ",", ",")) }) @@ -199,110 +198,11 @@ func (s Table) ValueList(m *ice.Message, arg []string, fields ...ice.Any) *ice.M return value }) return m - // return s.SelectJoinUser(m) -} -func (s Table) Create(m *ice.Message, arg ...string) { s.ValueCreate(m, arg...) } -func (s Table) Remove(m *ice.Message, arg ...string) { s.ValueRemove(m, arg...) } -func (s Table) Modify(m *ice.Message, arg ...string) { s.ValueModify(m, arg...) } -func (s Table) List(m *ice.Message, arg ...string) *ice.Message { - return s.ValueList(m, arg) -} -func (s Table) FieldsDefault(m *ice.Message, arg ...string) Table { - if m.Option(mdb.SELECT) == "" { - if fields := m.Config(mdb.FIELDS); fields != "" { - s.Table.FieldsWithCreatedAT(m, kit.Select(m.CommandKey(), m.Config(db.MODELS)), kit.TransArgs(kit.Split(fields, ",", ","))...) - } - } - return s -} -func (s Table) LeftJoinValue(m *ice.Message, value, place ice.Any, arg ...string) string { - model := s.ToLower(kit.TypeName(value)) - models := s.TableName(model) - _model := s.ToLower(kit.TypeName(place)) - _models := s.TableName(_model) - return kit.Format("LEFT JOIN %s ON %s.%s_uid = %s.uid AND %s.user_uid = '%s'", models, models, _model, _models, models, m.Option("user_uid")) -} -func (s Table) Select(m *ice.Message, arg ...string) *ice.Message { - s.FieldsDefault(m).Table.Select(m, arg...) - kit.If(m.Length() > 0, func() { s.UserPlaceInit(m) }) - return m -} -func (s Table) InsertIfNeed(m *ice.Message, arg ...string) { - kit.If(m.Cmd("", s.Select, arg).Length() == 0, func() { m.Cmd("", s.Insert, arg) }) -} -func (s Table) InsertOrUpdate(m *ice.Message, arg []string, args ...string) { - if s.Select(m, args...).Length() > 0 { - s.Update(m, arg, args...) - } else { - s.Insert(m, arg...) - } -} -func (s Table) SelectDetail(m *ice.Message, arg ...string) *ice.Message { - return s.FieldsDefault(m).Table.SelectDetail(m, arg...) -} -func (s Table) SelectJoinUser(m *ice.Message, arg ...string) *ice.Message { - kit.If(len(arg) == 0, func() { arg = append(arg, model.NAME, model.AVATAR) }) - if len(m.Appendv(model.USER_UID)) == 0 { - return m - } - return s.SelectJoin(m, user{}, arg...) -} -func (s Table) SelectJoinCity(m *ice.Message, arg ...string) *ice.Message { - kit.If(len(arg) == 0, func() { arg = append(arg, model.NAME) }) - return s.SelectJoin(m, city{}, arg...) -} -func (s Table) SelectJoinAuth(m *ice.Message, arg ...string) *ice.Message { - if kit.IndexOf(m.Appendv(model.AUTH_TYPE), model.AUTH_TYPE) > -1 { - return m - } - kit.If(len(arg) == 0, func() { - arg = append(arg, model.NAME, model.INFO, model.TYPE, model.STATUS, model.AVATAR, model.BACKGROUND, model.DASHBOARD_UID) - }) - defer s.SaveBack(m, ice.MSG_USERPOD, ice.MSG_USERROLE)() - return s.SelectJoin(m, s.findSpaceCmd(m, api.RENZHENGSHOUQUAN_AUTH), arg...) -} -func (s Table) SelectJoinSess(m *ice.Message, arg ...string) *ice.Message { - UID, TARGET_UID := model.USER_UID, model.USER_UID - target := sess{} - if m.Length() == 0 { - return m - } - list := []string{} - m.Table(func(value ice.Maps) { list = kit.AddUniq(list, value[UID]) }) - msg := m.Spawn() - arg = kit.Split("agent,system,ip,location,ua") - s.Fields(msg, append(arg, TARGET_UID)) - s.Orders(msg, s.Desc(model.CREATED_AT)) - s.Groups(msg, TARGET_UID) - s.Limit(msg, 3000) - data := msg.CmdMap(target, s.SelectList, TARGET_UID, list, TARGET_UID) - m.Table(func(value ice.Maps) { - recent := data[value[TARGET_UID]] - kit.For(arg, func(k string) { m.Push(k, recent[k]) }) - }) - return m -} -func (s Table) SelectJoinRecent(m *ice.Message, PLACE_UID string, arg ...string) *ice.Message { - PLACE_UID = kit.Select(model.PLACE_UID, PLACE_UID) - if m.Length() == 0 { - return m - } - kit.If(len(arg) == 0, func() { arg = append(arg, model.CITY_NAME, model.STREET_NAME, model.PLACE_NAME) }) - list := []string{} - m.Table(func(value ice.Maps) { kit.If(value[PLACE_UID], func(v string) { list = kit.AddUniq(list, v) }) }) - msg := m.Spawn() - s.Fields(msg, kit.JoinFields("DISTINCT place_uid", kit.JoinFields(arg...))) - recents := msg.CmdMap(recent{}, s.SelectList, model.PLACE_UID, list, model.PLACE_UID) - m.Table(func(value ice.Maps) { - recent := recents[value[PLACE_UID]] - kit.For(arg, func(k string) { m.Push(k, recent[k]) }) - }) - return m -} -func (s Table) SelectJoinService(m *ice.Message, arg ...string) *ice.Message { - kit.If(len(arg) == 0, func() { arg = append(arg, model.NODENAME, model.INDEX, model.NAME, model.ICON) }) - return s.SelectJoin(m, service{}, arg...) } +func (s Table) Create(m *ice.Message, arg ...string) { s.ValueCreate(m, arg...) } +func (s Table) Modify(m *ice.Message, arg ...string) { s.ValueModify(m, arg...) } +func (s Table) Remove(m *ice.Message, arg ...string) { s.ValueRemove(m, arg...) } +func (s Table) List(m *ice.Message, arg ...string) *ice.Message { return s.ValueList(m, arg) } func (s Table) RewriteAppend(m *ice.Message, arg ...string) *ice.Message { m.RewriteAppend(func(value, key string, index int) string { if value != "" && kit.IsIn(key, model.BACKGROUND, model.AVATAR) { @@ -318,6 +218,8 @@ func (s Table) RewriteAppend(m *ice.Message, arg ...string) *ice.Message { value = MemberStatus(kit.Int(value)).String() case model.PLACE_TYPE: value = PlaceType(kit.Int(value)).String() + case model.AUTH_TYPE: + value = AuthType(kit.Int(value)).String() case model.AUTH_STATUS: value = AuthStatus(kit.Int(value)).String() case model.APPLY_STATUS: @@ -328,8 +230,6 @@ func (s Table) RewriteAppend(m *ice.Message, arg ...string) *ice.Message { value = MessageStatus(kit.Int(value)).String() case model.SERVICE_STATUS: value = ServiceStatus(kit.Int(value)).String() - case model.PAYMENTLIST_STATUS: - value = PaymentStatus(kit.Int(value)).String() case model.PRICE, model.AMOUNT: value = kit.Format("%.2f", kit.Float(value)/100) } @@ -337,17 +237,73 @@ func (s Table) RewriteAppend(m *ice.Message, arg ...string) *ice.Message { }) return m } -func (s Table) OtherListCmd(m *ice.Message, arg ...ice.Any) *ice.Message { - kit.If(m.FieldsIsDetail() && m.Length() > 0 && s.IsWorker(m), func() { m.Option("otherList", kit.Fields(arg...)) }) +func (s Table) Select(m *ice.Message, arg ...string) *ice.Message { + s.FieldsDefault(m).Table.Select(m, arg...) + kit.If(m.Length() > 0, func() { s.UserPlaceInit(m) }) return m } -func (s Table) OtherList(m *ice.Message, target ice.Any, arg ...string) { - if len(arg) == 0 { - arg = append(arg, m.CommandKey()+"_uid", m.Option(model.UID)) +func (s Table) SelectDetail(m *ice.Message, arg ...string) *ice.Message { + return s.FieldsDefault(m).Table.SelectDetail(m, arg...) +} +func (s Table) SelectJoinCity(m *ice.Message, arg ...string) *ice.Message { + kit.If(len(arg) == 0, func() { arg = append(arg, model.NAME) }) + return s.SelectJoin(m, city{}, arg...) +} +func (s Table) SelectJoinUser(m *ice.Message, arg ...string) *ice.Message { + kit.If(len(arg) == 0, func() { arg = append(arg, model.NAME, model.AVATAR) }) + if len(m.Appendv(model.USER_UID)) == 0 { + return m } - m.Cmdy(target, s.Select, arg) - // s.Display(m, kit.Select("", strings.Split(ice.GetTypeKey(target), "."), -1)+".js") - m.Option("_other_cmd", ice.GetTypeKey(target)) + return s.SelectJoin(m, user{}, arg...) +} +func (s Table) SelectJoinAuth(m *ice.Message, arg ...string) *ice.Message { + if kit.IndexOf(m.Appendv(model.AUTH_TYPE), model.AUTH_TYPE) > -1 { + return m + } + kit.If(len(arg) == 0, func() { + arg = append(arg, model.NAME, model.INFO, model.TYPE, model.STATUS, model.AVATAR, model.BACKGROUND, model.DASHBOARD_UID) + }) + defer s.SaveBack(m, ice.MSG_USERPOD, ice.MSG_USERROLE)() + return s.SelectJoin(m, s.findSpaceCmd(m, api.RENZHENGSHOUQUAN_AUTH), arg...) +} +func (s Table) SelectJoinSess(m *ice.Message, arg ...string) *ice.Message { + if m.Length() == 0 { + return m + } + UID, TARGET_UID := model.USER_UID, model.USER_UID + target := sess{} + list := []string{} + m.Table(func(value ice.Maps) { list = kit.AddUniq(list, value[UID]) }) + msg := m.Spawn() + arg = kit.Split("agent,system,ip,location,ua") + s.Fields(msg, append(arg, TARGET_UID)).Orders(msg, s.Desc(model.CREATED_AT)).Groups(msg, TARGET_UID).Limit(msg, 3000) + data := msg.CmdMap(target, s.SelectList, TARGET_UID, list, TARGET_UID) + m.Table(func(value ice.Maps) { + recent := data[value[TARGET_UID]] + kit.For(arg, func(k string) { m.Push(k, recent[k]) }) + }) + return m +} +func (s Table) SelectJoinService(m *ice.Message, arg ...string) *ice.Message { + kit.If(len(arg) == 0, func() { arg = append(arg, model.NODENAME, model.INDEX, model.NAME, model.ICON) }) + return s.SelectJoin(m, service{}, arg...) +} +func (s Table) SelectJoinRecent(m *ice.Message, PLACE_UID string, arg ...string) *ice.Message { + if m.Length() == 0 { + return m + } + PLACE_UID = kit.Select(model.PLACE_UID, PLACE_UID) + kit.If(len(arg) == 0, func() { arg = append(arg, model.CITY_NAME, model.STREET_NAME, model.PLACE_NAME) }) + list := []string{} + m.Table(func(value ice.Maps) { kit.If(value[PLACE_UID], func(v string) { list = kit.AddUniq(list, v) }) }) + msg := m.Spawn() + s.Fields(msg, kit.JoinFields("DISTINCT place_uid", kit.JoinFields(arg...))) + recents := msg.CmdMap(recent{}, s.SelectList, model.PLACE_UID, list, model.PLACE_UID) + m.Table(func(value ice.Maps) { + recent := recents[value[PLACE_UID]] + kit.For(arg, func(k string) { m.Push(k, recent[k]) }) + }) + return m } func (s Table) Update(m *ice.Message, data ice.Any, arg ...string) { if len(arg) == 0 { @@ -364,12 +320,12 @@ func (s Table) UpdateField(m *ice.Message, arg ...string) { func (s Table) Upload(m *ice.Message, arg ...string) { m.Echo(m.Resource(m.UploadSaveHash("usr/image/"))) } -func (s Table) UploadUpdate(m *ice.Message, field, uid string, arg ...string) { +func (s Table) UploadUpdate(m *ice.Message, field, uid string) { if m.IsErr() { return } - p := m.UploadSave(path.Join(nfs.USR, kit.Select(field, m.Option(model.FIELD)), uid) + nfs.PS) - s.Update(m, kit.Dict(kit.Select(m.Option(model.FIELD), field), p), model.UID, uid) + p := m.UploadSaveHash(path.Join(nfs.USR, kit.Select(field, m.Option(model.FIELD))) + nfs.PS) + s.Update(m, kit.Dict(kit.Select(m.Option(model.FIELD), field), m.Resource(p)), model.UID, uid) } func (s Table) UploadCreate(m *ice.Message, field, uid string, arg ...string) string { if m.IsErr() { @@ -379,6 +335,16 @@ func (s Table) UploadCreate(m *ice.Message, field, uid string, arg ...string) st s.Create(m, kit.Select(m.Option(model.FIELD), field), p, model.UID, uid, model.USER_UID, m.Option(model.USER_UID)) return p } +func (s Table) InsertOrUpdate(m *ice.Message, arg []string, args ...string) { + if s.Select(m, args...).Length() > 0 { + s.Update(m, arg, args...) + } else { + s.Insert(m, arg...) + } +} +func (s Table) InsertIfNeed(m *ice.Message, arg ...string) { + kit.If(m.Cmd("", s.Select, arg).Length() == 0, func() { m.Cmd("", s.Insert, arg) }) +} func (s Table) 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 || from != kit.Int(msg.Append(mdb.STATUS)), kit.Format("%v != %v", from, kit.Int(msg.Append(mdb.STATUS)))) { @@ -386,172 +352,76 @@ func (s Table) ChangeStatus(m *ice.Message, place_uid, uid string, from, to int, } return m } -func (s Table) CheckRole(m *ice.Message, arg ...string) { - role := UserPlaceRole(s.UserPlaceRole(m)) - m.WarnNotRight(!kit.IsIn(role.String(), append(arg, UserPlaceCreator.String())...), role.String()) -} -func (s Table) IsVisitor(m *ice.Message) bool { - if role := kit.Int(m.Option(model.USER_ROLE)); role == 0 { - return true +func (s Table) TargetAddCount(m *ice.Message, target ice.Any, arg ...string) Table { + if !m.IsErr() { + m.Cmd(target, s.AddCount, kit.Select(s.Keys(m.CommandKey(), model.COUNT), arg, 0), kit.Select("-1", "1", m.ActionKey() == mdb.CREATE), m.Option(s.Keys(target, model.UID))) } - return false + return s } -func (s Table) IsCreator(m *ice.Message) bool { - if role := kit.Int(m.Option(model.USER_ROLE)); role == 1 { - return true - } - return false -} -func (s Table) IsLeader(m *ice.Message) bool { - if role := kit.Int(m.Option(model.USER_ROLE)); role == 1 || role == 2 { - return true - } - return false -} -func (s Table) IsWorker(m *ice.Message) bool { - if role := kit.Int(m.Option(model.USER_ROLE)); role == 1 || role == 2 || role == 3 { - return true - } - return false -} -func (s Table) UserPlaceRole(m *ice.Message) int { - return kit.Int(m.Cmdy(s.PrefixPortal(m), s.UserPlaceRole).Option(model.USER_ROLE)) -} -func (s Table) UserPlaceInit(m *ice.Message, arg ...string) { - if m.Option(model.PLACE_INIT) == "" || m.PrefixKey() != m.Option(ice.MSG_INDEX) { - return - } - m.Cmd(s.PrefixPortal(m), Portal{}.PlaceCmd, "addCount", model.INIT, 1, m.Option(model.PLACE_UID), m.Option(model.PLACE_INIT)) -} -func (s Table) RecordEvent(m *ice.Message, info string, arg ...string) { - m.Cmd(s.PrefixPortal(m), s.RecordEvent, info, arg) -} -func (s Table) RecordEventWithName(m *ice.Message, info string, arg ...string) { - uid := kit.Select(m.Result(), m.Option(model.UID)) - kit.If(info == "", func() { - switch info = m.ActionCmdTitle(); m.ActionKey() { - case "placeCreate", mdb.CREATE: - info = "✅ " + info - case "placeRemove", mdb.REMOVE: - info = "❌ " + info - case "placeAuth", mdb.MODIFY: - info = "🕑 " + info - default: - info = "🕑 " + info +func (s Table) FieldsDefault(m *ice.Message, arg ...string) Table { + if m.Option(mdb.SELECT) == "" { + if fields := m.Config(mdb.FIELDS); fields != "" { + s.Table.FieldsWithCreatedAT(m, kit.Select(m.CommandKey(), m.Config(db.MODELS)), kit.TransArgs(kit.Split(fields, ",", ","))...) } - }) - s.RecordEvent(m, kit.JoinWord(info, kit.Cut(uid, 6), kit.Select(m.Option(model.NAME), m.Option(model.TITLE))), uid) + } + return s } -func (s Table) MemberList(m *ice.Message, arg ...string) { - m.Cmdy(s.Prefix(m, member{}), arg) +func (s Table) LeftJoinValue(m *ice.Message, value, place ice.Any, arg ...string) string { + model := s.ToLower(kit.TypeName(value)) + models := s.TableName(model) + _model := s.ToLower(kit.TypeName(place)) + _models := s.TableName(_model) + return kit.Format("LEFT JOIN %s ON %s.%s_uid = %s.uid AND %s.user_uid = '%s'", models, models, _model, _models, models, m.Option("user_uid")) } -func (s Table) CityList(m *ice.Message, arg ...string) *ice.Message { - m.Cmdy(city{}, arg).RenameAppend(model.NAME, model.CITY_NAME) - return m -} -func (s Table) CityCmd(m *ice.Message, arg ...ice.Any) *ice.Message { - return m.Cmd(append([]ice.Any{city{}}, arg...)...) -} -func (s Table) CreditCmdy(m *ice.Message, arg ...ice.Any) *ice.Message { - return m.Cmdy(append([]ice.Any{s.Prefix(m, credit{})}, arg...)...) -} -func (s Table) SettingCmdy(m *ice.Message, arg ...ice.Any) *ice.Message { - return m.Cmdy(append([]ice.Any{s.Prefix(m, setting{})}, arg...)...) -} -func (s Table) AuthCreate(m *ice.Message, authType int, fromUID string, arg ...string) { - s.AutoCmdy(m, api.RENZHENGSHOUQUAN_PORTAL, Portal{}.PlaceCreate, - model.AUTH_NAME, m.Option(model.NAME), model.AUTH_INFO, m.Option(model.INFO), - model.AUTH_TYPE, authType, model.FROM_UID, kit.Select(ice.AUTO, fromUID), - model.SERVICE_UID, m.Option(model.SERVICE_UID), - ) - s.Update(m, kit.Dict(m.OptionSimple(model.AUTH_UID)), arg...) -} -func (s Table) SpideCreate(m *ice.Message, arg ...string) { - m.Cmd(web.SPIDE, mdb.CREATE, arg) -} -func (s Table) PlaceIsAuthed(m *ice.Message, arg ...string) *ice.Message { - if msg := m.Cmd(s.Place, s.Select, model.UID, arg[0]); msg.Append(model.AUTH_UID) == "" { - m.Echo("本服务暂未申请认证,请到<用户名片>申请认证") - return nil - } else if m.Cmd(api.RENZHENGSHOUQUAN_AUTH, s.Select, model.UID, msg.Append(model.AUTH_UID)).Append(model.AUTH_STATUS) != "2" { - m.Echo("本服务认证申请中,请等待审批") - return nil +func (s Table) TransValue(m *ice.Message, key string, arg ...string) string { + if value := kit.Select(m.Option(key), arg, 0); m.IsEnglish() { + return value } else { - return msg + return kit.Select(value, kit.Value(m.Target().Commands[m.CommandKey()].Meta, "_trans.value."+key+"."+value)) } } -func (s Table) StreetAuthUID(m *ice.Message, arg ...string) string { - if msg := s.PlaceIsAuthed(m, arg...); msg != nil { - return m.Cmd(s.Street, s.Select, model.UID, msg.Append(s.STREET_UID)).Append(model.AUTH_UID) +func (s Table) TransRole(m *ice.Message, arg ...string) string { + value := kit.Select(m.Option(s.Keys(s.UserPlace, model.ROLE)), arg, 0) + role := s.Place.TransValue(m, s.Keys(s.UserPlace, model.ROLE), arg...) + return kit.Format(`%s`, value, kit.Select("", arg, 1), role) +} +func (s Table) TransPrice(m *ice.Message, arg []string, field ...string) []string { + kit.If(len(field) == 0, func() { field = append(field, "price", "amount") }) + for i := 0; i < len(arg)-1; i += 2 { + if kit.IndexOf(field, arg[i]) > -1 { + arg[i+1] = kit.Format(kit.Int(kit.Float(arg[i+1]) * 100)) + } } - return "" -} -func (s Table) DashboardUpdate(m *ice.Message, arg ...string) { - if m.IsErr() { - return - } - m.Cmd(s.Prefix(m, Portal{}), s.DashboardUpdate) -} -func (s Table) MessagePlaceEnter(m *ice.Message, arg ...string) { - m.Cmdy(message{}, "placeEnter", arg) -} -func (s Table) MessagePlaceInfo(m *ice.Message, arg ...string) { - m.Cmdy(message{}, "placeInfo", arg) -} -func (s Table) MarketPlaceEnter(m *ice.Message, arg ...string) { - m.Cmdy(market{}, "placeEnter", arg) -} -func (s Table) MarketPlaceInfo(m *ice.Message, arg ...string) { - m.Cmdy(market{}, "placeInfo", arg) -} -func (s Table) MarketInsert(m *ice.Message, arg ...string) { - m.Cmdy(s.Prefix(m, Portal{}), s.MarketInsert, arg) -} -func (s Table) PushPublic(m *ice.Message, arg ...string) { - m.Cmdy(s.Prefix(m, Portal{}), s.PushPublic, arg) -} -func (s Table) ServiceList(m *ice.Message, arg ...string) *ice.Message { - return m.Cmd(s.Prefix(m, service{}), arg) -} -func (s Table) GetCommandUID(m *ice.Message, arg ...string) *ice.Message { - m.Option(model.COMMAND_UID, CommandUID(m, kit.Select(m.PrefixKey(), arg, 0))) - return m -} -func (s Table) SendMessage(m *ice.Message, from, to string, arg ...string) { - if m.IsErr() { - return - } - kit.If(len(arg) == 0, func() { arg = append(arg, m.Option(model.PLACE_UID), kit.Select(m.Option(model.UID), m.Result())) }) - m.Spawn(ice.Maps{db.DB: ""}).Cmd(s.Prefix(m, message{}), s.Create, - model.FROM_USER_UID, kit.Select(m.Option(model.USER_UID), from), model.TO_USER_UID, kit.Select(m.Option(model.USER_UID), to), - m.OptionSimple(model.COMMAND_UID), model.ARGS, kit.Join(arg), m.OptionSimple(model.TITLE, model.CONTENT), - ) -} -func (s Table) DoneMessage(m *ice.Message, arg ...string) { - if m.Option(model.MESSAGE_UID) != "" { - m.Spawn(ice.Maps{db.DB: ""}).Cmd(s.Prefix(m, message{}), message{}.Done, kit.Dict(model.UID, m.Option(model.MESSAGE_UID))) - } -} -func (s Table) SendTemplate(m *ice.Message, from, to, title string, arg ...string) { - if m.IsErr() { - return - } - m.Cmd(s.PrefixPortal(m), s.SendTemplate, m.PrefixKey(), from, to, title, arg) -} -func (s Portal) SendTemplate(m *ice.Message, arg ...string) { - name := kit.Select("", arg, 4) - if name == "" { - name = kit.JoinWord(m.Option(model.CITY_NAME), m.Option(model.STREET_NAME), kit.Select(m.Option(model.PLACE_NAME), m.Option(s.Keys(s.Place, model.NAME)))) - } - uid, place_uid := kit.Select(m.Option(model.UID), arg, 5), kit.Select("", arg, 6) - kit.If(place_uid == "", func() { place_uid = m.Option(s.Keys(s.Place, model.UID)) }) - link := m.Cmdx("", s.Link, place_uid, arg[0], uid) - s.AutoCmd(m, user{}, s.SendTemplate, arg[1], arg[2], link, kit.JoinWord(m.Option(model.PORTAL_NAME), arg[3]), name, kit.Cut(uid, 6)) + return arg } func (s Table) Button(m *ice.Message, info string, arg ...ice.Any) *ice.Message { kit.If(!m.IsErr() && m.Length() == 0, func() { m.Options(ctx.STYLE, html.FORM).EchoInfoButton(info, arg...).Action() }, func() { m.Action(arg...) }) return m } +func (s Table) EchoQRCodeIcon(m *ice.Message, link, icon, title string) { + m.EchoQRCode(link).Echo(title).EchoImages(icon, "32", "avatar") +} +func (s Table) Link(m *ice.Message, arg ...string) string { + return m.Cmdx(s.PrefixPortal(m), s.Link, arg) +} +func (s Table) WaitWorkerCreate(m *ice.Message, help string) { + kit.If(!s.IsWorker(m), func() { + kit.If(m.Action().Length() == 0, func() { m.SetResult("请等待「工作人员」创建" + help) }) + }) +} +func (s Table) WaitLeaderCreate(m *ice.Message, help string) { + kit.If(!s.IsLeader(m), func() { + kit.If(m.Action().Length() == 0, func() { m.SetResult("请等待「管理人员」创建" + help) }) + }) +} +func (s Table) OtherListCmd(m *ice.Message, arg ...ice.Any) *ice.Message { + kit.If(m.FieldsIsDetail() && m.Length() > 0 && s.IsWorker(m), func() { m.Option("otherList", kit.Fields(arg...)) }) + return m +} +func (s Table) OtherList(m *ice.Message, target ice.Any, arg ...string) { + kit.If(len(arg) == 0, func() { arg = append(arg, m.CommandKey()+"_uid", m.Option(model.UID)) }) + m.Cmdy(target, s.Select, arg).Option("_other_cmd", ice.GetTypeKey(target)) +} func (s Table) DisplayBase(m *ice.Message, file string) *ice.Message { if s.Place != nil { m.Option("_place_uid", s.ToLower(kit.TypeName(s.Place))+"_uid") @@ -583,61 +453,8 @@ func (s Table) Display(m *ice.Message, file string) *ice.Message { return file }))) } -func (s Table) TransValue(m *ice.Message, key string, arg ...string) string { - if value := kit.Select(m.Option(key), arg, 0); m.IsEnglish() { - return value - } else { - return kit.Select(value, kit.Value(m.Target().Commands[m.CommandKey()].Meta, "_trans.value."+key+"."+value)) - } -} -func (s Table) TransRole(m *ice.Message, arg ...string) string { - value := kit.Select(m.Option(s.Keys(s.UserPlace, model.ROLE)), arg, 0) - role := s.Place.TransValue(m, s.Keys(s.UserPlace, model.ROLE), arg...) - return kit.Format(`%s`, value, kit.Select("", arg, 1), role) -} - -func (s Table) Prefix(m *ice.Message, target ice.Any) string { return m.Prefix(kit.TypeName(target)) } -func (s Table) PrefixPortal(m *ice.Message) string { return m.Prefix(kit.TypeName(Portal{})) } -func (s Table) PrefixMember(m *ice.Message) string { return m.Prefix(kit.TypeName(member{})) } -func (s Table) PrefixRecent(m *ice.Message) string { return m.Prefix(kit.TypeName(recent{})) } -func (s Table) PrefixService(m *ice.Message) string { return m.Prefix(kit.TypeName(service{})) } - -func (s Table) findSpaceCmd(m *ice.Message, cmd ice.Any) ice.Any { - cmds := ice.GetTypeKey(cmd) - if space, ok := cmdSpace[cmds]; ok && space != ice.Info.NodeName { - m.Options(ice.MSG_USERROLE, aaa.TECH, ice.MSG_USERPOD, space) - return []string{web.SPACE, kit.Keys(ice.OPS, space), cmds} - } - return cmd -} -func (s Table) SaveBack(m *ice.Message, arg ...string) func() { - list := []string{} - kit.For(arg, func(k string) { list = append(list, m.Option(k)) }) - return func() { - kit.For(arg, func(i int, k string) { m.Option(k, list[i]) }) - } -} -func (s Table) TargetAddCount(m *ice.Message, target ice.Any, arg ...string) Table { - if !m.IsErr() { - m.Cmd(target, s.AddCount, kit.Select(s.Keys(m.CommandKey(), model.COUNT), arg, 0), kit.Select("-1", "1", m.ActionKey() == mdb.CREATE), m.Option(s.Keys(target, model.UID))) - } - return s -} -func (s Table) WaitWorkerCreate(m *ice.Message, help string) { - kit.If(!s.IsWorker(m), func() { - kit.If(m.Action().Length() == 0, func() { m.SetResult("请等待「工作人员」创建" + help) }) - }) -} -func (s Table) WaitLeaderCreate(m *ice.Message, help string) { - kit.If(!s.IsLeader(m), func() { - kit.If(m.Action().Length() == 0, func() { m.SetResult("请等待「管理人员」创建" + help) }) - }) -} -func (s Table) EchoQRCodeIcon(m *ice.Message, link, icon, title string) { - m.EchoQRCode(link).Echo(title).EchoImages(icon, "32", "avatar") -} -func (s Table) SpaceLink(m *ice.Message, space, index string, arg ...string) string { - return m.Cmdx(web.SPACE, space, index, s.Link, arg, ice.Maps{ice.MSG_USERPOD: space, ice.MSG_USERROLE: aaa.TECH}) +func (s Table) SpideCreate(m *ice.Message, arg ...string) { + m.Cmd(web.SPIDE, mdb.CREATE, arg) } func (s Table) SpaceOpsCmdy(m *ice.Message, arg ...ice.Any) *ice.Message { return s.SpaceCmdy(m, ice.OPS, arg...) @@ -645,6 +462,9 @@ func (s Table) SpaceOpsCmdy(m *ice.Message, arg ...ice.Any) *ice.Message { func (s Table) SpaceOpsCmd(m *ice.Message, arg ...ice.Any) *ice.Message { return s.SpaceCmd(m, ice.OPS, arg...) } +func (s Table) SpaceLink(m *ice.Message, space, index string, arg ...string) string { + return m.Cmdx(web.SPACE, space, index, s.Link, arg, ice.Maps{ice.MSG_USERPOD: space, ice.MSG_USERROLE: aaa.TECH}) +} func (s Table) SpaceCmdy(m *ice.Message, space string, arg ...ice.Any) *ice.Message { return m.Cmdy(append([]ice.Any{web.SPACE, space, kit.Dict(ice.MSG_USERROLE, aaa.TECH)}, arg...)...) } @@ -658,14 +478,207 @@ func (s Table) AutoCmdy(m *ice.Message, arg ...ice.Any) *ice.Message { func (s Table) AutoCmd(m *ice.Message, arg ...ice.Any) *ice.Message { return m.Cmd(append([]ice.Any{s.findSpaceCmd(m, arg[0])}, arg[1:]...)...) } +func (s Table) SaveBack(m *ice.Message, arg ...string) func() { + list := []string{} + kit.For(arg, func(k string) { list = append(list, m.Option(k)) }) + return func() { + kit.For(arg, func(i int, k string) { m.Option(k, list[i]) }) + } +} +func (s Table) findSpaceCmd(m *ice.Message, cmd ice.Any) ice.Any { + cmds := ice.GetTypeKey(cmd) + if space, ok := cmdSpace[cmds]; ok && space != ice.Info.NodeName { + m.Options(ice.MSG_USERROLE, aaa.TECH, ice.MSG_USERPOD, space) + return []string{web.SPACE, kit.Keys(ice.OPS, space), cmds} + } + return cmd +} + +func (s Table) DashboardUpdate(m *ice.Message, arg ...string) { + if m.IsErr() { + return + } + m.Cmd(s.PrefixPortal(m), s.DashboardUpdate) +} +func (s Table) UserPlaceInit(m *ice.Message, arg ...string) { + if m.Option(model.PLACE_INIT) == "" || m.PrefixKey() != m.Option(ice.MSG_INDEX) { + return + } + m.Cmd(s.PrefixPortal(m), Portal{}.PlaceCmd, "addCount", model.INIT, 1, m.Option(model.PLACE_UID), m.Option(model.PLACE_INIT)) +} +func (s Table) CityList(m *ice.Message, arg ...string) *ice.Message { + m.Cmdy(city{}, arg).RenameAppend(model.NAME, model.CITY_NAME) + return m +} +func (s Table) CityCmd(m *ice.Message, arg ...ice.Any) *ice.Message { + return m.Cmd(append([]ice.Any{city{}}, arg...)...) +} +func (s Table) CreditCmdy(m *ice.Message, arg ...ice.Any) *ice.Message { + return m.Cmdy(append([]ice.Any{s.Prefix(m, credit{})}, arg...)...) +} +func (s Table) AuthCreate(m *ice.Message, authType api.AuthType, fromUID string, arg ...string) { + s.AutoCmdy(m, api.RENZHENGSHOUQUAN_PORTAL, Portal{}.PlaceCreate, + model.AUTH_NAME, m.Option(model.NAME), model.AUTH_INFO, m.Option(model.INFO), + model.AUTH_TYPE, authType, model.FROM_UID, kit.Select(ice.AUTO, fromUID), + model.SERVICE_UID, m.Option(model.SERVICE_UID), + model.PLACE_UID, m.Option(model.PLACE_UID), + model.VALUE_UID, m.Option(model.UID), + ) + s.Update(m, kit.Dict(m.OptionSimple(model.AUTH_UID)), arg...) +} +func (s Table) PlaceIsAuthed(m *ice.Message, arg ...string) *ice.Message { + if msg := m.Cmd(s.Place, s.Select, model.UID, arg[0]); msg.Append(model.AUTH_UID) == "" { + m.Echo("本服务暂未申请认证,请到<用户名片>申请认证") + return nil + } else if m.Cmd(api.RENZHENGSHOUQUAN_AUTH, s.Select, model.UID, msg.Append(model.AUTH_UID)).Append(model.AUTH_STATUS) != "2" { + m.Echo("本服务认证申请中,请等待审批") + return nil + } else { + return msg + } +} +func (s Table) StreetAuthUID(m *ice.Message, arg ...string) string { + if msg := s.PlaceIsAuthed(m, arg...); msg != nil { + return m.Cmd(s.Street, s.Select, model.UID, msg.Append(s.STREET_UID)).Append(model.AUTH_UID) + } + return "" +} +func (s Table) MemberList(m *ice.Message, arg ...string) { + m.Cmdy(s.PrefixMember(m), arg) +} +func (s Table) UserPlaceRole(m *ice.Message) int { + return kit.Int(m.Cmdy(s.PrefixPortal(m), s.UserPlaceRole).Option(model.USER_ROLE)) +} +func (s Table) CheckRole(m *ice.Message, arg ...string) { + role := UserPlaceRole(s.UserPlaceRole(m)) + m.WarnNotRight(!kit.IsIn(role.String(), append(arg, UserPlaceCreator.String())...), role.String()) +} +func (s Table) IsVisitor(m *ice.Message) bool { + if role := kit.Int(m.Option(model.USER_ROLE)); role == 0 { + return true + } + return false +} +func (s Table) IsCreator(m *ice.Message) bool { + if role := kit.Int(m.Option(model.USER_ROLE)); role == 1 { + return true + } + return false +} +func (s Table) IsLeader(m *ice.Message) bool { + if role := kit.Int(m.Option(model.USER_ROLE)); role == 1 || role == 2 { + return true + } + return false +} +func (s Table) IsWorker(m *ice.Message) bool { + if role := kit.Int(m.Option(model.USER_ROLE)); role == 1 || role == 2 || role == 3 { + return true + } + return false +} +func (s Table) SettingCmdy(m *ice.Message, arg ...ice.Any) *ice.Message { + return m.Cmdy(append([]ice.Any{s.PrefixSetting(m)}, arg...)...) +} +func (s Table) RecordEvent(m *ice.Message, info string, arg ...string) { + m.Cmd(s.PrefixPortal(m), s.RecordEvent, info, arg) +} +func (s Table) RecordEventWithName(m *ice.Message, info string, arg ...string) { + uid := kit.Select(m.Result(), m.Option(model.UID)) + kit.If(info == "", func() { + switch info = m.ActionCmdTitle(); m.ActionKey() { + case "placeCreate", mdb.CREATE: + info = "✅ " + info + case "placeRemove", mdb.REMOVE: + info = "❌ " + info + case "placeAuth", mdb.MODIFY: + info = "🕑 " + info + default: + info = "🕑 " + info + } + }) + s.RecordEvent(m, kit.JoinWord(info, kit.Cut(uid, 6), kit.Select(m.Option(model.NAME), m.Option(model.TITLE))), uid) +} +func (s Table) NoticeList(m *ice.Message, arg ...string) { + s.Limit(m, 1) + m.Cmdy(s.PrefixNotice(m), arg) +} +func (s Table) PushPublic(m *ice.Message, arg ...string) { + m.Option(model.VALUE_UID, m.Option(model.UID)) + m.Cmdy(s.PrefixMarket(m), s.Create, arg) +} +func (s Table) MarketInsert(m *ice.Message, arg ...string) { + m.Option(model.VALUE_UID, m.Option(model.UID)) + m.Cmdy(s.PrefixMarket(m), s.Create, arg) +} +func (s Table) MarketPlaceInfo(m *ice.Message, arg ...string) { + m.Cmdy(market{}, "placeInfo", arg) +} +func (s Table) MarketPlaceEnter(m *ice.Message, arg ...string) { + m.Cmdy(market{}, "placeEnter", arg) +} +func (s Table) MessagePlaceEnter(m *ice.Message, arg ...string) { + m.Cmdy(message{}, "placeEnter", arg) +} +func (s Table) MessagePlaceInfo(m *ice.Message, arg ...string) { + m.Cmdy(message{}, "placeInfo", arg) +} +func (s Table) SendMessage(m *ice.Message, from, to string, arg ...string) { + if m.IsErr() { + return + } + m.Option(model.VALUE_UID, kit.Select(m.Option(model.UID), m.Result())) + m.Spawn(ice.Maps{db.DB: ""}).Cmd(s.PrefixMessage(m), s.Create, + model.FROM_USER_UID, kit.Select(m.Option(model.USER_UID), from), model.TO_USER_UID, kit.Select(m.Option(model.USER_UID), to), + m.OptionSimple(model.TITLE, model.CONTENT, model.PRICE), arg) +} +func (s Table) DoneMessage(m *ice.Message, arg ...string) { + if m.Option(model.MESSAGE_UID) != "" { + m.Spawn(ice.Maps{db.DB: ""}).Cmd(s.PrefixMessage(m), message{}.Done, kit.Dict(model.UID, m.Option(model.MESSAGE_UID))) + } +} func (s Table) ProcessPodCmd(m, msg *ice.Message, arg ...string) *ice.Message { - m.ProcessPodCmd(msg.Append(web.SPACE), msg.Append(ctx.INDEX), kit.Split(msg.Append(ctx.ARGS))) + if msg.Append(model.VALUE_UID) == "" { + m.ProcessPodCmd(msg.Append(web.SPACE), msg.Append(ctx.INDEX), kit.Split(msg.Append(ctx.ARGS))) + } else { + m.ProcessPodCmd(msg.Append(web.SPACE), msg.Append(ctx.INDEX), []string{msg.Append(model.PLACE_UID), msg.Append(model.VALUE_UID)}) + } m.Push(ice.FIELD_OPTION, kit.Format(kit.Dict(arg))) return m } -func (s Table) Link(m *ice.Message, arg ...string) string { - return m.Cmdx(s.PrefixPortal(m), s.Link, arg) +func (s Table) SendTemplate(m *ice.Message, from, to, title string, arg ...string) { // portal_name place_name + if m.IsErr() { + return + } + m.Cmd(s.PrefixPortal(m), s.SendTemplate, m.PrefixKey(), from, to, title, arg) } +func (s Portal) SendTemplate(m *ice.Message, arg ...string) { + name := kit.Select("", arg, 4) + if name == "" { + name = kit.JoinWord(m.Option(model.CITY_NAME), m.Option(model.STREET_NAME), kit.Select(m.Option(model.PLACE_NAME), m.Option(s.Keys(s.Place, model.NAME)))) + } + uid, place_uid := kit.Select(m.Option(model.UID), arg, 5), kit.Select("", arg, 6) + kit.If(place_uid == "", func() { place_uid = m.Option(s.Keys(s.Place, model.UID)) }) + link := m.Cmdx("", s.Link, place_uid, arg[0], uid) + s.AutoCmd(m, user{}, s.SendTemplate, arg[1], arg[2], link, kit.JoinWord(m.Option(model.PORTAL_NAME), arg[3]), name, kit.Cut(uid, 6)) +} +func (s Table) ServiceList(m *ice.Message, arg ...string) *ice.Message { + return m.Cmd(s.PrefixService(m), arg) +} +func (s Table) GetCommandUID(m *ice.Message, arg ...string) *ice.Message { + m.Option(model.COMMAND_UID, CommandUID(m, kit.Select(m.PrefixKey(), arg, 0))) + return m +} + +func (s Table) Prefix(m *ice.Message, target ice.Any) string { return m.Prefix(kit.TypeName(target)) } +func (s Table) PrefixPortal(m *ice.Message) string { return m.Prefix(kit.TypeName(Portal{})) } +func (s Table) PrefixMember(m *ice.Message) string { return m.Prefix(kit.TypeName(member{})) } +func (s Table) PrefixNotice(m *ice.Message) string { return m.Prefix(kit.TypeName(notice{})) } +func (s Table) PrefixMarket(m *ice.Message) string { return m.Prefix(kit.TypeName(market{})) } +func (s Table) PrefixRecent(m *ice.Message) string { return m.Prefix(kit.TypeName(recent{})) } +func (s Table) PrefixMessage(m *ice.Message) string { return m.Prefix(kit.TypeName(message{})) } +func (s Table) PrefixService(m *ice.Message) string { return m.Prefix(kit.TypeName(service{})) } +func (s Table) PrefixSetting(m *ice.Message) string { return m.Prefix(kit.TypeName(setting{})) } type Tables struct{ Table } @@ -705,28 +718,18 @@ func PortalCmd(portal ice.Any) { }, cmd.Actions[ice.CTX_INIT].Hand) } cmd("portal", portal) - - cmd("goodslist", goodslist{Table: table}) - cmd("quotalist", quotalist{Table: table}) - cmd("spendlist", spendlist{Table: table}) - cmd("paymentlist", paymentlist{Table: table}) - cmd("meeting", meeting{Table: table}) - cmd("document", document{Table: table}) - cmd("contract", contract{Table: table}) - cmd("photo", photo{Table: table}) - - cmd("clean", clean{Tables: tables}) - cmd("credit", credit{Tables: tables}) - cmd("member", member{Tables: tables}) - cmd("setting", setting{Table: table}) cmd("qrcode", qrcode{Tables: tables}) cmd("event", event{Table: table}) 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}) + cmd("credit", credit{Tables: tables}) cmd("market", market{Table: table}) cmd("message", message{Table: table}) cmd("recent", recent{Table: table}) cmd("service", service{Table: table}) cmd("support", support{Table: table}) + cmd("clean", clean{Tables: tables}) } diff --git a/src/gonganxitong/contract.go b/src/gonganxitong/contract.go deleted file mode 100644 index 82b661e..0000000 --- a/src/gonganxitong/contract.go +++ /dev/null @@ -1,19 +0,0 @@ -package gonganxitong - -import "shylinux.com/x/ice" - -type contract struct { - Table - order string `data:"95"` - auth string `data:"issued"` - role string `data:"leader,worker"` - fields string `data:"title"` - create string `name:"create title*" role:"leader"` - remove string `name:"remove" role:"leader"` -} - -func (s contract) List(m *ice.Message, arg ...string) { - m.Echo("功能正在开发中,敬请等待。") -} - -func init() { ice.TeamCtxCmd(contract{Table: newTable()}) } diff --git a/src/gonganxitong/contract.js b/src/gonganxitong/contract.js deleted file mode 100644 index bb277cb..0000000 --- a/src/gonganxitong/contract.js +++ /dev/null @@ -1,10 +0,0 @@ -Volcanos(chat.ONIMPORT, { - _init: function(can, msg) { - can.page.Append(can, can._output, [ - {view: html.ITEM, list: [{type: html.INPUT, data: {type: html.TEXT}, onblur: function() { - can.sup.onimport.size(can.sup, can.sup.ConfHeight(), can.sup.ConfWidth()) - can.onmotion.delay(can, function() { can._root.Action.onlayout._init(can) }) - }}]}, - ]) - }, -}) \ No newline at end of file diff --git a/src/gonganxitong/document.go b/src/gonganxitong/document.go deleted file mode 100644 index a50fe4e..0000000 --- a/src/gonganxitong/document.go +++ /dev/null @@ -1,47 +0,0 @@ -package gonganxitong - -import ( - "shylinux.com/x/ice" - - "shylinux.com/x/community/src/gonganxitong/model" -) - -type document struct { - Table - order string `data:"94"` - auth string `data:"issued"` - role string `data:"leader,worker"` - fields string `data:"folder_id,vendor,user_uid"` - open string `name:"open" style:"notice" role:"void"` -} - -func (s document) Config(m *ice.Message, arg ...string) { - s.InsertOrUpdate(m, arg, m.OptionSimple(model.PLACE_UID)...) -} -func (s document) List(m *ice.Message, arg ...string) { - s.cmdy(m, DocumentVendor.Folder).PushAction(s.Open).Display("") - if len(arg) == 1 { - s.SpendlistCheck(m, 0) - } -} -func (s document) Open(m *ice.Message, arg ...string) { - m.ProcessOpen(m.Option(model.LINK)) -} - -func init() { ice.TeamCtxCmd(document{Table: newTable()}) } - -func (s document) cmdy(m *ice.Message, action ice.Any, arg ...string) *ice.Message { - if m.Option(model.AUTH_UID, s.StreetAuthUID(m, m.Option(model.PLACE_UID))) == "" { - return m - } - if msg := s.Select(m.Spawn(), m.OptionSimple(model.PLACE_UID)...); msg.Append("folder_id") == "" { - m.Echo("本服务暂未配置,请联系公司管理员配置") - } else { - m.Cmdy(msg.Append(model.VENDOR), action, m.Option(model.AUTH_UID), msg.Append("folder_id")) - } - return m -} - -var DocumentVendor interface { - Folder(m *ice.Message, arg ...string) *ice.Message -} diff --git a/src/gonganxitong/document.js b/src/gonganxitong/document.js deleted file mode 100644 index 636f0e3..0000000 --- a/src/gonganxitong/document.js +++ /dev/null @@ -1,8 +0,0 @@ -Volcanos(chat.ONIMPORT, { - _init: function(can, msg) { - can.onimport.myView(can, msg, function(value) { return [ - {view: html.TITLE, list: [value.name+"."+value.type, can.onimport.titleAction(can, value)]}, - {view: html.STATUS, list: [value.ownerName, can.onimport.timeView(can, value)]}, - ] }) - }, -}) \ No newline at end of file diff --git a/src/gonganxitong/domain.go b/src/gonganxitong/domain.go index a3d1be5..7451304 100644 --- a/src/gonganxitong/domain.go +++ b/src/gonganxitong/domain.go @@ -8,10 +8,12 @@ import ( type domain struct { Table + order string `data:"508"` + role string `data:"tech"` fields string `name:"name,order"` create string `name:"create name* info" role:"tech"` remove string `name:"remove" role:"tech"` - list string `name:"list domain_uid auto" role:"void"` + list string `name:"list place_uid domain_uid auto" role:"void"` } func (s domain) Create(m *ice.Message, arg ...string) { s.Insert(m, arg...) } @@ -22,11 +24,12 @@ func (s domain) Remove(m *ice.Message, arg ...string) { s.Delete(m.Options(model.UID, m.Option(model.DOMAIN_UID))) } func (s domain) List(m *ice.Message, arg ...string) { + m.Display("/plugin/table.js") s.Fields(m, model.UID, model.NAME, "order") - if len(arg) == 0 { + if len(arg) < 2 { s.Select(m).RenameAppend(model.UID, model.DOMAIN_UID).Action() m.SortInt("order") - } else if len(arg) == 1 { + } else { s.SelectDetail(m, model.UID, arg[0]) } if m.IsTech() { diff --git a/src/gonganxitong/event.go b/src/gonganxitong/event.go index 4ce9e2f..72aaa8b 100644 --- a/src/gonganxitong/event.go +++ b/src/gonganxitong/event.go @@ -13,15 +13,11 @@ type event struct { } func (s event) List(m *ice.Message, arg ...string) { - s.FieldsWithCreatedAT(m, s, model.USER_UID, model.INFO) - if len(arg) == 1 { + if s.FieldsWithCreatedAT(m, s, model.INFO, model.USER_UID); len(arg) == 1 { s.Select(m, model.PLACE_UID, arg[0]).Action() } else if len(arg) == 2 { s.SelectDetail(m, model.PLACE_UID, arg[0], model.UID, arg[1]) - } else { - return } - s.SelectJoinUser(m) s.DisplayBase(m, "") } diff --git a/src/gonganxitong/event.png b/src/gonganxitong/event.png deleted file mode 100644 index e727327..0000000 Binary files a/src/gonganxitong/event.png and /dev/null differ diff --git a/src/gonganxitong/goodslist.go b/src/gonganxitong/goodslist.go deleted file mode 100644 index 2d5fda0..0000000 --- a/src/gonganxitong/goodslist.go +++ /dev/null @@ -1,118 +0,0 @@ -package gonganxitong - -import ( - "time" - - "shylinux.com/x/ice" - kit "shylinux.com/x/toolkits" - - "shylinux.com/x/community/src/api" - "shylinux.com/x/community/src/gonganxitong/model" -) - -type goodslist struct { - Table - quotalist quotalist - spendlist spendlist - paymentlist paymentlist - order string `data:"91"` - auth string `data:"issued"` - role string `data:"leader,worker"` - fields string `data:"name,amount,title,content,user_uid"` - create string `name:"create name* amount* title* content*" role:"leader"` - remove string `name:"remove" role:"leader"` - request string `name:"request" help:"购买" style:"notice" role:"void"` - response string `name:"response" role:"void"` -} - -func (s goodslist) AfterMigrate(m *ice.Message, arg ...string) { - s.Table.AfterMigrate(m, arg...) - if s.PrefixPortal(m) == api.RENZHENGSHOUQUAN_PORTAL { - s.insert(m, "service", "3-1", "1000", "基础版") - s.insert(m, "service", "3-2", "3000", "高级版") - s.insert(m, "service", "3-3", "5000", "旗舰版") - s.insert(m, "company", "4-1", "10000", "企业基础版") - s.insert(m, "company", "4-2", "30000", "企业高级版") - s.insert(m, "company", "4-3", "50000", "企业旗舰版") - s.insert(m, "school", "5-1", "10000", "教育基础版") - s.insert(m, "school", "5-2", "30000", "教育高级版") - s.insert(m, "school", "5-3", "50000", "教育旗舰版") - s.insert(m, "street", "6-1", "10000", "社区基础版") - s.insert(m, "street", "6-2", "30000", "社区高级版") - s.insert(m, "street", "6-3", "50000", "社区旗舰版") - } -} -func (s goodslist) Create(m *ice.Message, arg ...string) { - s.Insert(m, kit.Simple(s.TransPrice(m, arg, model.AMOUNT), m.OptionSimple(model.PLACE_UID, model.USER_UID))...) - s.RecordEventWithName(m, "") -} -func (s goodslist) List(m *ice.Message, arg ...string) { - if len(arg) == 1 { - if s.PrefixPortal(m) == api.RENZHENGSHOUQUAN_PORTAL { - msg := m.Cmd(api.RENZHENGSHOUQUAN_AUTH, s.Select, model.UID, arg[0]) - switch kit.Int(msg.Append(model.AUTH_TYPE)) { - case 3: - s.Select(m, model.PLACE_UID, "service") - case 4: - s.Select(m, model.PLACE_UID, "company") - case 5: - s.Select(m, model.PLACE_UID, "school") - case 6: - s.Select(m, model.PLACE_UID, "street") - } - m.PushAction(s.Request).Action() - } else { - if s.IsLeader(m) { - s.Select(m, model.PLACE_UID, "service") - m.PushAction(s.Request).Action() - } - msg := s.Select(m.Spawn(), model.PLACE_UID, arg[0]) - if s.IsLeader(m) { - msg.PushAction(s.Request, s.Remove).Action(s.Create) - } else { - msg.PushAction(s.Request).Action() - } - m.Copy(msg) - s.SelectJoinUser(m) - } - m.Display("") - } else if len(arg) == 2 { - m.Cmdy(s.Prefix(m, s.quotalist), s.Select, model.GOODSLIST_UID, arg[1]) - m.EchoInfoButton("请购买会员", s.Request).Action() - m.Display("quotalist.js") - } -} -func (s goodslist) Request(m *ice.Message, arg ...string) { - if msg := s.Select(m.Spawn(), m.OptionSimple(model.UID)...); msg.IsErr() { - m.Copy(msg) - } else if _msg := m.Cmd(s.Prefix(m, s.paymentlist), s.Create, model.GOODSLIST_UID, m.Option(model.UID), - model.AMOUNT, kit.Float(msg.Append(model.AMOUNT))/100, msg.AppendSimple(model.TITLE, model.CONTENT)); _msg.IsErr() { - m.Copy(_msg) - } else { - m.Options(msg.AppendSimple(model.AMOUNT, model.TITLE, model.CONTENT)) - m.Cmdy(s.Prefix(m, s.paymentlist), m.ActionKey(), m.PrefixKey(), "", m.Option(model.PLACE_UID), _msg.Result()) - m.Push(model.PAYMENTLIST_UID, _msg.Result()) - } -} -func (s goodslist) Response(m *ice.Message, arg ...string) { - if m.Cmdy(s.Prefix(m, s.paymentlist), m.ActionKey(), arg).IsErr() { - return - } - t := time.Now().AddDate(0, 1, 0) - msg := m.Cmd(s.Prefix(m, s.paymentlist), s.Select, model.UID, arg[1]) - m.Cmd(s.Prefix(m, s.quotalist), s.Select, msg.AppendSimple(model.GOODSLIST_UID)).Table(func(value ice.Maps) { - m.Cmd(s.Prefix(m, s.spendlist), s.Insert, model.PLACE_UID, arg[0], msg.AppendSimple(model.USER_UID), model.PAYMENTLIST_UID, arg[1], - model.QUOTALIST_UID, value[model.UID], model.EXPIRE_TIME, t.Format(ice.MOD_TIME), model.VENDOR, value[model.VENDOR], model.TOTAL, value[model.TOTAL]) - }) -} - -func init() { ice.TeamCtxCmd(goodslist{Table: newTable()}) } - -func (s goodslist) insert(m *ice.Message, auth, level, amount string, arg ...string) { - uid := kit.Hashs(auth, level) - if s.Select(m.Spawn(), model.UID, uid).Length() > 0 { - return - } - s.Insert(m, model.UID, uid, model.PLACE_UID, auth, model.NAME, level, - model.AMOUNT, amount, model.TITLE, kit.Select("", arg, 0), model.CONTENT, kit.Select("", arg, 1)) -} diff --git a/src/gonganxitong/goodslist.js b/src/gonganxitong/goodslist.js deleted file mode 100644 index 6b99f6f..0000000 --- a/src/gonganxitong/goodslist.js +++ /dev/null @@ -1,9 +0,0 @@ -Volcanos(chat.ONIMPORT, { - _init: function(can, msg) { - can.onimport.myView(can, msg, function(value) { return [ - {view: html.TITLE, list: [value.title, "¥ "+value.amount/100+" / 月", can.onimport.titleAction(can, value)]}, - {view: html.STATUS, list: [value.uid.slice(0, 6), can.onimport.timeView(can, value), value.user_name]}, - {view: html.OUTPUT, list: [value.content]}, - ] }) - }, -}) \ No newline at end of file diff --git a/src/gonganxitong/market.css b/src/gonganxitong/market.css index 6774a03..47c8cca 100644 --- a/src/gonganxitong/market.css +++ b/src/gonganxitong/market.css @@ -1,6 +1,2 @@ -$output div.item.card div.output div.title { - margin-top:10px; -} -$output div.item.card div.output { - padding:20px 10px; -} \ No newline at end of file +$output div.item.card div.output { padding:20px 10px; } +$output div.item.card div.output div.title { margin-top:10px; } \ No newline at end of file diff --git a/src/gonganxitong/market.go b/src/gonganxitong/market.go index 06d7baf..b6c080e 100644 --- a/src/gonganxitong/market.go +++ b/src/gonganxitong/market.go @@ -10,13 +10,13 @@ import ( type market struct { Table domain domain - command command - service service thumb thumb comment comment favor favor + command command + service service order string `data:"901"` - create string `name:"create domain_uid* title* content" role:"void"` + create string `name:"create domain_uid*:select title* content price" role:"void"` remove string `name:"remove" role:"void"` thumbToggle string `name:"thumbToggle" role:"void"` commentCreate string `name:"commentCreate content*" role:"void"` @@ -25,31 +25,34 @@ type market struct { } func (s market) Create(m *ice.Message, arg ...string) { - s.Insert(m, append(arg, m.OptionSimple(model.PLACE_UID, model.USER_UID, model.COMMAND_UID, model.ARGS)...)...) + s.Insert(m, append(s.TransPrice(m, arg), m.OptionSimple(model.USER_UID, model.PLACE_UID, model.VALUE_UID, model.COMMAND_UID)...)...) } func (s market) List(m *ice.Message, arg ...string) { s.Tables(m, s.command, s.service, s.LeftJoinValue(m, s.thumb, s), s.LeftJoinValue(m, s.favor, s)).FieldsWithCreatedAT(m, s, - s.Key(s, model.USER_UID), model.PLACE_UID, model.SERVICE_NAME, model.TITLE, model.CONTENT, + s.Key(s, model.USER_UID), model.TITLE, model.CONTENT, model.PRICE, + s.Key(s, model.PLACE_UID), model.VALUE_UID, model.COMMAND_NAME, model.SERVICE_NAME, model.THUMB_COUNT, model.COMMENT_COUNT, model.FAVOR_COUNT, model.SHARE_COUNT, model.THUMB_STATUS, model.FAVOR_STATUS, s.AS(model.NODENAME, model.SPACE), s.Key(s.command, model.INDEX), model.ARGS, - model.COMMAND_NAME, ) if len(arg) < 2 { - if m.Option(model.DOMAIN_UID) != "" { - s.Select(m, m.OptionSimple(model.DOMAIN_UID)...) - } else { + if m.Option(model.DOMAIN_UID) == "" { s.Select(m) + } else { + s.Select(m, m.OptionSimple(model.DOMAIN_UID)...) + } + if m.IsTech() { + m.Table(func(value ice.Maps) { + m.PushButton(s.Delete) + }) } m.Action() } else if len(arg) == 2 { msg := s.Select(m.Spawn(), s.Key(s, model.UID), arg[1]) s.ProcessPodCmd(m, msg, model.MARKET_UID, arg[1]) - } else { - return } - s.SelectJoinRecent(m, model.PLACE_UID) s.SelectJoinUser(m, model.NAME, model.AVATAR, model.AUTH_UID) s.SelectJoinAuth(m) + s.SelectJoinRecent(m, model.PLACE_UID) s.DisplayBase(m, "").DisplayCSS("") } func (s market) ThumbToggle(m *ice.Message, arg ...string) { @@ -76,21 +79,21 @@ func (s market) FavorToggle(m *ice.Message, arg ...string) { func (s market) ShareCreate(m *ice.Message, arg ...string) { s.AddCount(m, model.SHARE_COUNT, "1") } +func (s market) PlaceInfo(m *ice.Message, arg ...string) { + s.Tables(m, s.command, s.service, s.LeftJoinValue(m, s.thumb, s), s.LeftJoinValue(m, s.favor, s)).FieldsWithCreatedAT(m, s, + s.Key(s, model.USER_UID), model.TITLE, model.CONTENT, model.PRICE, + s.Key(s, model.PLACE_UID), model.VALUE_UID, model.COMMAND_NAME, model.SERVICE_NAME, + model.THUMB_COUNT, model.COMMENT_COUNT, model.FAVOR_COUNT, model.SHARE_COUNT, model.THUMB_STATUS, model.FAVOR_STATUS, + s.AS(model.NODENAME, model.SPACE), s.Key(s.command, model.INDEX), model.ARGS, + ) + s.Select(m, s.Key(s, model.UID), m.Option(model.MARKET_UID)) + s.SelectJoinUser(m, model.NAME, model.AVATAR, model.AUTH_UID) + s.SelectJoinAuth(m) + s.SelectJoinRecent(m, model.PLACE_UID) + m.PushAction(s.MarketPlaceEnter) +} func (s market) PlaceEnter(m *ice.Message, arg ...string) { // m.ProcessField() } -func (s market) PlaceInfo(m *ice.Message, arg ...string) { - s.Tables(m, s.command, s.service, s.LeftJoinValue(m, s.thumb, s), s.LeftJoinValue(m, s.favor, s)).FieldsWithCreatedAT(m, s, - s.Key(s, model.USER_UID), model.PLACE_UID, model.SERVICE_NAME, model.TITLE, model.CONTENT, - model.THUMB_COUNT, model.COMMENT_COUNT, model.FAVOR_COUNT, model.SHARE_COUNT, model.THUMB_STATUS, model.FAVOR_STATUS, - s.AS(model.NODENAME, model.SPACE), s.Key(s.command, model.INDEX), model.ARGS, - model.COMMAND_NAME, - ) - s.Select(m, s.Key(s, model.UID), m.Option(model.MARKET_UID)) - s.SelectJoinRecent(m, model.PLACE_UID) - s.SelectJoinUser(m, model.NAME, model.AVATAR, model.AUTH_UID) - s.SelectJoinAuth(m) - m.PushAction(s.MarketPlaceEnter) -} func init() { ice.TeamCtxCmd(market{Table: newTable()}) } diff --git a/src/gonganxitong/market.js b/src/gonganxitong/market.js index beb8b76..d1ae8f2 100644 --- a/src/gonganxitong/market.js +++ b/src/gonganxitong/market.js @@ -1,11 +1,11 @@ Volcanos(chat.ONIMPORT, { _init: function(can, msg) { can.ui = can.page.Append(can, can._output, [html.TABS, html.LIST]) - can.runAction({}, ctx.RUN, ["web.team.gonganxitong.domain"], function(msg) { var domain_uid = can.misc.Cookie(can, "domain_uid") - can.page.Append(can, can.ui.tabs, [{view: [[html.ITEM, domain_uid? "": html.SELECT], "", "全部"], onclick: function(event) { can.misc.Cookie(can, "domain_uid", "") + can.runAction({}, ctx.RUN, ["web.team.gonganxitong.domain"], function(msg) { var domain_uid = can.sup.Conf("option.domain_uid") + can.page.Append(can, can.ui.tabs, [{view: [[html.ITEM, domain_uid? "": html.SELECT], "", "全部"], onclick: function(event) { can.sup.Conf("option.domain_uid", "") can.onmotion.select(can, can.ui.tabs, html.DIV_ITEM, event.target), can.run(event, [], function(msg) { can.onimport._data(can, msg) }) }}]) can.page.Append(can, can.ui.tabs, msg.Table(function(value) { - return {view: [[html.ITEM, value.domain_uid == domain_uid? html.SELECT: ""], "", value.name], onclick: function(event) { can.misc.Cookie(can, "domain_uid", value.domain_uid) + return {view: [[html.ITEM, value.domain_uid == domain_uid? html.SELECT: ""], "", value.name], onclick: function(event) { can.sup.Conf("option.domain_uid", value.domain_uid) can.onmotion.select(can, can.ui.tabs, html.DIV_ITEM, event.target), can.run(event, [], function(msg) { can.onimport._data(can, msg) }) }} })) @@ -13,16 +13,9 @@ Volcanos(chat.ONIMPORT, { }, _data: function(can, msg) { can.onmotion.clear(can, can.ui.list) can.onimport.itemcards(can, msg, function(value) { return [ - {view: html.STATUS, list: [ - {text: [value.user_name, "", aaa.USERNAME]}, can.onimport.authView(can, value), can.onimport.timeView(can, value), - ]}, - {view: html.STATUS, list: [ - {text: [value.city_name, "", "city"]}, - {text: [value.street_name, "", "street"]}, - {text: [value.place_name, "", "place"]}, - {text: [value.service_name, "", "service"]}, - ]}, - {view: html.TITLE, list: [value.command_name, value.title]}, + {view: html.STATUS, list: [{text: [value.user_name, "", aaa.USERNAME]}, can.onimport.authView(can, value), can.onimport.timeView(can, value),]}, + can.onimport.shipView(can, value), + {view: html.TITLE, list: [value.command_name, value.title, value.price > 0 && can.onimport.moneyView(can, value)]}, {view: html.OUTPUT, list: [value.content]}, {view: html.ACTION, list: [ {view: html.ITEM, list: [{icon: "bi bi-hand-thumbs-up"}, {text: value.thumb_count||"点赞"}], onclick: function(event) { @@ -38,6 +31,7 @@ Volcanos(chat.ONIMPORT, { can.onimport.thumbs(event, can, value, "shareCreate") }}, ]}, + can.onimport.titleAction(can, value), ] }) }, thumbs: function(event, can, value, button) { can.onkeymap.prevent(event) diff --git a/src/gonganxitong/meeting.css b/src/gonganxitong/meeting.css deleted file mode 100644 index 1401567..0000000 --- a/src/gonganxitong/meeting.css +++ /dev/null @@ -1,16 +0,0 @@ -$fieldset.detail { margin-top:0 !important; height:100%; } -$output.detail { background-color:#646566 !important; text-align:center; height:100% !important; } -$output.detail div.detail { border-radius:10px; background-color:var(--output-bg-color); padding:10px 10px 40px; margin:80px auto 10px; max-width:360px; position:relative; } -$output.detail div.title { font-size:20px; } -$output.detail div.meeting_code { font-size:18px; margin:10px; } -$output.detail div.status { color:var(--notice-bg-color); } -$output.detail div.time { border-bottom:dashed 1px gray; font-size:24px; white-space:pre; padding-bottom:20px; display:flex; justify-content:space-around; align-items: center; } -$output.detail div.span_time { color:gray; font-size:12px; } -$output.detail div.span_time div.zone { margin-top:5px; } -$output.detail div.date { color:gray; font-size:12px; margin-top:5px; } -$output.detail img.qrcode { width:200px !important; } -$output.detail div.logo { background-color:white; position:absolute; padding:3px 3px 0; bottom:calc(170px - 23px); left: calc(50% - 23px); } -$output.detail div.logo img { height:40px; } -$output.detail div.action input { border:var(--box-notice); background-color:var(--notice-bg-color); color:var(--notice-fg-color); font-size:18px; height:40px; width:100%; max-width:360px; } -body.dark $output.detail { background-color:#33363a !important; } -body.width1 $output.detail img.qrcode { border:var(--box-border); border-radius:5px; margin:40px; margin-bottom:10px; } \ No newline at end of file diff --git a/src/gonganxitong/meeting.go b/src/gonganxitong/meeting.go deleted file mode 100644 index 3b896f5..0000000 --- a/src/gonganxitong/meeting.go +++ /dev/null @@ -1,68 +0,0 @@ -package gonganxitong - -import ( - "shylinux.com/x/ice" - - "shylinux.com/x/community/src/gonganxitong/model" -) - -type meeting struct { - Table - order string `data:"93"` - auth string `data:"issued"` - role string `data:"leader,worker"` - fields string `data:"user_id,vendor"` - config string `name:"config place_uid* user_uid* user_id* vendor*"` - create string `name:"create subject* start_time*:select@date end_time*:select@date" role:"worker"` - modify string `name:"modify subject* start_time*:select@date end_time*:select@date" role:"worker"` - cancel string `name:"cancel" role:"worker"` - enter string `name:"enter" help:"入会" style:"notice" role:"worker"` -} - -func (s meeting) Config(m *ice.Message, arg ...string) { - s.InsertOrUpdate(m, arg, m.OptionSimple(model.PLACE_UID)...) -} -func (s meeting) Create(m *ice.Message, arg ...string) { s.cmdy(m, s.MeetingPost, arg...) } -func (s meeting) Modify(m *ice.Message, arg ...string) { s.cmdy(m, s.MeetingPut, arg...) } -func (s meeting) Cancel(m *ice.Message, arg ...string) { s.cmdy(m, s.MeetingCancel, arg...) } -func (s meeting) Enter(m *ice.Message, arg ...string) { m.ProcessOpen(m.Option(model.LINK)) } -func (s meeting) List(m *ice.Message, arg ...string) { - if s.cmdy(m, s.MeetingList, arg[1:]...); m.Length() > 0 { - if len(arg) == 1 { - m.PushAction(s.Enter, s.Modify, s.Cancel).Action(s.Create).Display("").DisplayCSS("") - s.SpendlistCheck(m, 0) - } else if m.IsMobileUA() { - m.EchoQRCode(m.Append(model.LINK)).Display("").DisplayCSS("") - } else { - m.EchoQRCode(m.Append(model.LINK)).Display("").DisplayCSS("") - // m.EchoIFrame(m.Append(model.LINK)).SetAppend() - } - } -} -func (s meeting) MeetingList(m *ice.Message, arg ...string) {} -func (s meeting) MeetingPost(m *ice.Message, arg ...string) {} -func (s meeting) MeetingPut(m *ice.Message, arg ...string) {} -func (s meeting) MeetingCancel(m *ice.Message, arg ...string) {} - -func init() { ice.TeamCtxCmd(meeting{Table: newTable()}) } - -var MeetingVendor interface { - UserList(m *ice.Message, arg ...string) *ice.Message - MeetingList(m *ice.Message, arg ...string) *ice.Message - MeetingPost(m *ice.Message, arg ...string) *ice.Message - MeetingPut(m *ice.Message, arg ...string) *ice.Message - MeetingCancel(m *ice.Message, arg ...string) *ice.Message -} - -func (s meeting) cmdy(m *ice.Message, action ice.Any, arg ...string) { - if m.Option(model.AUTH_UID, s.StreetAuthUID(m, m.Option(model.PLACE_UID))) == "" { - return - } - msg := s.Select(m.Spawn(), m.OptionSimple(model.PLACE_UID)...) - if msg.Append(model.VENDOR) == "" { - m.Echo("本服务暂未配置,请联系公司管理员配置") - return - } else { - m.Cmdy(msg.Append(model.VENDOR), action, arg) - } -} diff --git a/src/gonganxitong/meeting.js b/src/gonganxitong/meeting.js deleted file mode 100644 index 557ce0f..0000000 --- a/src/gonganxitong/meeting.js +++ /dev/null @@ -1,34 +0,0 @@ -Volcanos(chat.ONIMPORT, { - _init: function(can, msg) { can.page.ClassList.del(can, can._fields, "detail"), can.page.ClassList.del(can, can._output, "detail") - if (can.Option(UID)) { can.page.ClassList.add(can, can._fields, "detail"), can.page.ClassList.add(can, can._target, "detail") - var start_time = msg.Append("start_time").split(" "), end_time = msg.Append("end_time").split(" ") - can.ui = can.page.Append(can, can._output, [ - {view: "detail", list: [ - {view: ["title", "", msg.Append("subject")]}, - {view: ["meeting_code", "", msg.Append(UID)]}, - {view: ["status", "", "待开始"]}, - {view: "time", list: [ - {view: "start_time", list: [{view: ["hour", "", start_time[1]]}, {view: ["date", "", start_time[0]]}]}, - {view: ["span_time"], list: [{view: ["span", "", msg.Append("span_time")]}, {view: ["zone", "", "(GMT+08:00)"]}]}, - {view: "end_time", list: [{view: ["hour", "", end_time[1]]}, {view: ["date", "", end_time[0]]}]}, - ]}, - {view: ["qrcode", "", msg.Result()]}, - {view: ["logo"], list: [{img: "https://meeting.tencent.com/static/imgs/detail/qrcode_icon2x.png"}]}, - {view: ["tips", "", "请使用手机端【腾讯会议App】扫码入会"]}, - ]}, - {view: "action", list: [ - {type: html.INPUT, data: {type: html.BUTTON}, name: "join", value: "入会", onclick: function(event) { - can.runAction(can.request(event, msg.Table()[0]), "join") - }}, - ]}, - ]) - msg.Option("_share_title", msg.Append("subject")) - msg.Option("_share_content", [msg.Append(UID), msg.Append("start_time")].join("\n")) - } else { - can.onimport.myView(can, msg, function(value) { return [ - {view: html.TITLE, list: [value.subject, can.onimport.titleAction(can, value)]}, - {view: html.STATUS, list: [value.start_time, "~", value.end_time.split(" ")[1]]}, - ] }) - } - }, -}) \ No newline at end of file diff --git a/src/gonganxitong/member.go b/src/gonganxitong/member.go index 3deeaa0..6143bf8 100644 --- a/src/gonganxitong/member.go +++ b/src/gonganxitong/member.go @@ -14,48 +14,49 @@ type member struct { user user order string `data:"102"` role string `data:"leader,worker,server"` - remove string `name:"remove" role:"void"` - enable string `name:"enable" role:"void"` - disable string `name:"disable" role:"void"` - promote string `name:"promote" role:"void"` - demote string `name:"demote" role:"void"` - setLanguage string `name:"setLanguage language" help:"语言" role:"void"` - setInfo string `name:"setInfo info" help:"备注" role:"void"` - setCookie string `name:"setCookie" help:"切换"` - main string `name:"main" help:"主页" role:"void"` + remove string `name:"remove" role:"leader"` + disable string `name:"disable" role:"leader"` + demote string `name:"demote" role:"creator"` + promote string `name:"promote" role:"creator"` + enable string `name:"enable" role:"leader"` auth string `name:"auth" help:"认证" role:"void"` - sessList string `name:"sessList" role:"void"` + main string `name:"main" help:"主页" role:"void"` + setCookie string `name:"setCookie" help:"切换"` + setInfo string `name:"setInfo info" help:"备注" role:"worker"` + setLanguage string `name:"setLanguage language" help:"语言" role:"worker"` + sessList string `name:"sessList" role:"leader"` } func (s member) Remove(m *ice.Message, arg ...string) { - if s.IsLeader(m) { - m.Cmdy(s.UserPlace, s.Delete, s.option(m, model.ROLE, kit.Format(UserPlaceTenant), model.STATUS, kit.Format(MemberDisabled))) - s.recordEvent(m, "❌", m.Trans("remove member", "删除成员"), html.DANGER) - } + m.Cmdy(s.UserPlace, s.Delete, s.option(m, model.ROLE, kit.Format(UserPlaceTenant), model.STATUS, kit.Format(MemberDisabled))) + s.recordEvent(m, "❌", m.Trans("remove member", "删除成员"), html.DANGER) } func (s member) Disable(m *ice.Message, arg ...string) { - if s.IsLeader(m) { - m.Cmdy(s.UserPlace, s.UpdateField, model.STATUS, MemberDisabled, s.option(m, model.ROLE, kit.Format(UserPlaceTenant))) - s.recordEvent(m, "❌", m.Trans("disable member", "禁用成员"), html.DANGER) - } + m.Cmdy(s.UserPlace, s.UpdateField, model.STATUS, MemberDisabled, s.option(m, model.ROLE, kit.Format(UserPlaceTenant))) + s.recordEvent(m, "❌", m.Trans("disable member", "禁用成员"), html.DANGER) } func (s member) Demote(m *ice.Message, arg ...string) { - if s.IsCreator(m) { - m.Cmdy(s.UserPlace, s.UpdateField, model.ROLE, kit.Format(UserPlaceTenant), s.option(m)) - s.recordEvent(m, "❌", m.Trans("demote worker", "降级成为工作人员"), html.DANGER) - } + m.Cmdy(s.UserPlace, s.UpdateField, model.ROLE, kit.Format(UserPlaceTenant), s.option(m)) + s.recordEvent(m, "❌", m.Trans("demote worker", "降级成为工作人员"), html.DANGER) } func (s member) Promote(m *ice.Message, arg ...string) { - if s.IsCreator(m) { - m.Cmdy(s.UserPlace, s.UpdateField, model.ROLE, kit.Format(UserPlaceLandlord), s.option(m)) - s.recordEvent(m, "✅", m.Trans("promote leader", "升级成为管理人员"), html.NOTICE) - } + m.Cmdy(s.UserPlace, s.UpdateField, model.ROLE, kit.Format(UserPlaceLandlord), s.option(m)) + s.recordEvent(m, "✅", m.Trans("promote leader", "升级成为管理人员"), html.NOTICE) } func (s member) Enable(m *ice.Message, arg ...string) { - if s.IsLeader(m) { - m.Cmdy(s.UserPlace, s.UpdateField, model.STATUS, MemberNormal, s.option(m, model.ROLE, kit.Format(UserPlaceTenant))) - s.recordEvent(m, "✅", m.Trans("enable member", "启用成员"), html.NOTICE) + m.Cmdy(s.UserPlace, s.UpdateField, model.STATUS, MemberNormal, s.option(m, model.ROLE, kit.Format(UserPlaceTenant))) + s.recordEvent(m, "✅", m.Trans("enable member", "启用成员"), html.NOTICE) +} + +func (s member) Auth(m *ice.Message, arg ...string) { + msg := m.Cmd(city{}, s.Select, model.NAME, m.Option(model.CITY_NAME)) + if m.WarnNotValid(msg.Append(model.AUTH_UID) == "") { + return } + m.Cmdy(user{}, s.AuthCreate, kit.Dict(msg.AppendSimple(model.AUTH_UID))) +} +func (s member) Main(m *ice.Message, arg ...string) { + m.ProcessField(api.RENZHENGSHOUQUAN_PORTAL, []string{m.Option(model.AUTH_UID)}) } func (s member) SetCookie(m *ice.Message, arg ...string) { m.Cmdy(s.UserPlace, s.Select, model.UID, m.Option(model.UID)) @@ -64,23 +65,6 @@ func (s member) SetCookie(m *ice.Message, arg ...string) { func (s member) SetInfo(m *ice.Message, arg ...string) { m.Cmdy(s.UserPlace, s.Modify, arg) } -func (s member) Main(m *ice.Message, arg ...string) { - m.ProcessField(api.RENZHENGSHOUQUAN_PORTAL, []string{m.Option(model.AUTH_UID)}) -} -func (s member) Auth(m *ice.Message, arg ...string) { - msg := m.Cmd(city{}, s.Select, model.NAME, m.Option(model.CITY_NAME)) - if m.WarnNotValid(msg.Append(model.AUTH_UID) == "") { - return - } - m.Cmdy(user{}, s.AuthCreate, kit.Dict(msg.AppendSimple(model.AUTH_UID))) -} -func (s Table) UserInfo(m *ice.Message, arg ...string) { - m.Cmdy(s.PrefixPortal(m), s.UserInfo, arg) -} -func (s Portal) UserInfo(m *ice.Message, arg ...string) { - msg := m.Cmd(s.UserPlace, s.Table.Select, s.Keys(s.Place, model.UID), m.Option(model.PLACE_UID), model.USER_UID, m.Option(model.UID)) - m.ProcessField(s.Prefix(m, member{}), []string{m.Option(model.PLACE_UID), msg.Append(model.UID)}, arg...) -} func (s member) UserInfo(m *ice.Message, arg ...string) { if msg := m.Cmd(api.RENZHENGSHOUQUAN_AUTH, s.Select, model.USER_UID, m.Option(model.UID)); msg.Append(model.UID) == "" { m.ProcessHold() @@ -88,6 +72,13 @@ func (s member) UserInfo(m *ice.Message, arg ...string) { m.ProcessField(api.RENZHENGSHOUQUAN_PORTAL, []string{msg.Append(model.UID)}, arg...) } } +func (s Portal) UserInfo(m *ice.Message, arg ...string) { + msg := m.Cmd(s.UserPlace, s.Table.Select, s.Keys(s.Place, model.UID), m.Option(model.PLACE_UID), model.USER_UID, m.Option(model.UID)) + m.ProcessField(s.PrefixMember(m), []string{m.Option(model.PLACE_UID), msg.Append(model.UID)}, arg...) +} +func (s Table) UserInfo(m *ice.Message, arg ...string) { + m.Cmdy(s.PrefixPortal(m), s.UserInfo, arg) +} func (s member) SetLanguage(m *ice.Message, arg ...string) { msg := m.Cmd(s.UserPlace, s.Select, s.Keys(s.Place, model.UID), m.Option(model.PLACE_UID), s.Key(s.UserPlace, model.UID), m.Option(model.UID)) m.Cmdy(user{}, s.UpdateField, arg, model.UID, msg.Append(model.USER_UID)) @@ -100,8 +91,7 @@ func (s member) SessList(m *ice.Message, arg ...string) { func (s member) List(m *ice.Message, arg ...string) { USER_PLACE_ROLE := s.Keys(s.UserPlace, model.ROLE) user_uid, isLeader, isCreator := m.Option(model.USER_UID), s.IsLeader(m), s.IsCreator(m) - s.FieldsWithCreatedAT(m, s.UserPlace, s.AS(s.Key(s.UserPlace, model.STATUS), model.MEMBER_STATUS), - USER_PLACE_ROLE, model.INFO, model.USER_UID).Limit(m, 300) + s.FieldsWithCreatedAT(m, s.UserPlace, s.AS(s.Key(s.UserPlace, model.STATUS), model.MEMBER_STATUS), USER_PLACE_ROLE, model.INFO, model.USER_UID).Limit(m, 300) if len(arg) == 1 { m.Cmdy(s.UserPlace, s.Select, s.Keys(s.Place, model.UID), arg[0]).Action() defer m.Sort(kit.Fields(model.MEMBER_STATUS, USER_PLACE_ROLE, model.AUTH_STATUS, model.CREATED_AT)) @@ -125,16 +115,22 @@ func (s member) List(m *ice.Message, arg ...string) { } } button := []ice.Any{} - kit.If(value[model.USER_UID] != user_uid && m.IsTech(), func() { - button = append(button, s.SetCookie) - }) if value[model.AUTH_UID] == "" { - kit.If(value[model.USER_UID] == user_uid, func() { + if value[model.USER_UID] == user_uid { button = append(button, s.Auth) - }) + } } else { button = append(button, s.Main) } + if value[model.USER_UID] != user_uid && m.IsTech() { + button = append(button, s.SetCookie) + } + if value[model.USER_UID] == user_uid || isLeader { + button = append(button, s.SetInfo) + } + if value[model.USER_UID] == user_uid { + button = append(button, s.SetLanguage) + } if MemberStatus(kit.Int(value[model.MEMBER_STATUS])) == MemberNormal { if isCreator { switch kit.Int(value[USER_PLACE_ROLE]) { @@ -144,10 +140,6 @@ func (s member) List(m *ice.Message, arg ...string) { button = append(button, s.Promote) } } - button = append(button, s.SetInfo) - kit.If(value[model.USER_UID] == user_uid, func() { - button = append(button, s.SetLanguage) - }) if isLeader { switch kit.Int(value[USER_PLACE_ROLE]) { case 3: @@ -209,3 +201,27 @@ var AuthStatusList = map[AuthStatus]string{ } func (s AuthStatus) String() string { return AuthStatusList[s] } + +type AuthType int + +const ( + AuthRoot AuthType = iota + AuthCity // 1 + AuthPersonal // 2 + AuthService // 3 + AuthCompany // 4 + AuthSchool // 5 + AuthStreet // 6 +) + +var AuthTypeList = map[AuthType]string{ + AuthRoot: "root", + AuthCity: "city", + AuthPersonal: "personal", + AuthService: "service", + AuthCompany: "company", + AuthSchool: "school", + AuthStreet: "street", +} + +func (s AuthType) String() string { return AuthTypeList[s] } diff --git a/src/gonganxitong/member.js b/src/gonganxitong/member.js index aee2e72..6c183b1 100644 --- a/src/gonganxitong/member.js +++ b/src/gonganxitong/member.js @@ -1,6 +1,6 @@ Volcanos(chat.ONIMPORT, { _init: function(can, msg) { var USER_PLACE_ROLE = msg.Option("_user_place_role") - if (msg.IsDetail()) { msg.Option("_share_title", msg.Append("user_name")) } + can.onimport.shareTitle(can, msg, "user_avatar", "user_name") can.onimport.myViewTabs(can, USER_PLACE_ROLE, msg, function(value) { value._style = [value[USER_PLACE_ROLE], value.member_status, value.who,] return [ diff --git a/src/gonganxitong/message.go b/src/gonganxitong/message.go index ad40638..05f84f3 100644 --- a/src/gonganxitong/message.go +++ b/src/gonganxitong/message.go @@ -12,7 +12,7 @@ type message struct { command command service service order string `data:"902"` - create string `name:"create from_user_uid to_user_uid"` + create string `name:"create from_user_uid* to_user_uid* title content price"` remove string `name:"remove" role:"void"` read string `name:"read" role:"void"` done string `name:"done" role:"void"` @@ -21,27 +21,18 @@ type message struct { } func (s message) Create(m *ice.Message, arg ...string) { - arg = append(arg, model.PLACE_UID, m.Option(s.Keys(s.Place, model.UID))) - kit.If(m.Option(model.ARGS) == "", func() { - arg = append(arg, model.ARGS, kit.JoinFields(m.Option(s.Keys(s.Place, model.UID)), m.Option(model.UID))) - }) - s.Insert(m, arg...) -} -func (s message) Remove(m *ice.Message, arg ...string) { - s.Delete(m, arg...) + s.Insert(m, append(s.TransPrice(m, arg), m.OptionSimple(model.PLACE_UID, model.VALUE_UID, model.COMMAND_UID)...)...) } func (s message) List(m *ice.Message, arg ...string) { s.Tables(m, s.command, s.service).FieldsWithCreatedAT(m, s, - model.FROM_USER_UID, model.COMMAND_NAME, model.MESSAGE_STATUS, model.SCORE, - model.PLACE_UID, model.SERVICE_NAME, - s.AS(model.NODENAME, model.SPACE), s.Key(s.command, model.INDEX), model.ARGS, - model.TITLE, model.CONTENT, - ) + model.FROM_USER_UID, model.TITLE, model.CONTENT, model.PRICE, model.MESSAGE_STATUS, model.SCORE, + model.PLACE_UID, model.VALUE_UID, model.COMMAND_NAME, model.SERVICE_NAME, + s.AS(model.NODENAME, model.SPACE), s.Key(s.command, model.INDEX), model.ARGS) if len(arg) < 2 { args := []string{model.TO_USER_UID, m.Option(model.USER_UID)} kit.If(m.Option(model.MESSAGE_STATUS), func(p string) { for i, v := range MessageStatusList { - kit.If(v == p, func() { args = append(args, model.STATUS, kit.Format(i)) }) + kit.If(v == p, func() { args = append(args, s.Key(s, model.STATUS), kit.Format(i)) }) } }) s.Orders(m, s.Desc(model.SCORE), s.Desc(model.CREATED_AT)) @@ -64,9 +55,7 @@ func (s message) List(m *ice.Message, arg ...string) { }).Action() m.RenameAppend(model.FROM_USER_UID, model.USER_UID) s.SelectJoinRecent(m, model.PLACE_UID) - // s.SelectJoinUser(m) s.DisplayBase(m, "") - msg := m.Spawn() s.Fields(msg, "status, count(*) AS count").Groups(msg, model.STATUS).Orders(msg, model.STATUS) s.Select(msg, args...).Table(func(value ice.Maps) { @@ -76,7 +65,6 @@ func (s message) List(m *ice.Message, arg ...string) { m.Echo(value[model.COUNT]).Echo("\n") } }) - } else if len(arg) == 2 { msg := s.SelectDetail(m.Spawn(), model.TO_USER_UID, m.Option(model.USER_UID), s.Key(s, model.UID), arg[1]) s.ProcessPodCmd(m, msg, model.MESSAGE_UID, arg[1]) @@ -97,23 +85,22 @@ func (s message) Sticky(m *ice.Message, arg ...string) { func (s message) UnSticky(m *ice.Message, arg ...string) { s.update(m, ice.Map{model.SCORE: 0}) } -func (s message) PlaceEnter(m *ice.Message, arg ...string) { - // m.ProcessField() -} func (s message) PlaceInfo(m *ice.Message, arg ...string) { s.Tables(m, s.command, s.service).FieldsWithCreatedAT(m, s, - model.FROM_USER_UID, model.COMMAND_NAME, model.MESSAGE_STATUS, model.SCORE, - model.PLACE_UID, model.SERVICE_NAME, + model.FROM_USER_UID, model.TITLE, model.CONTENT, model.PRICE, model.MESSAGE_STATUS, model.SCORE, + model.PLACE_UID, model.VALUE_UID, model.COMMAND_NAME, model.SERVICE_NAME, s.AS(model.NODENAME, model.SPACE), s.Key(s.command, model.INDEX), model.ARGS, - model.TITLE, model.CONTENT, ) s.Select(m, s.Key(s, model.UID), m.Option(model.MESSAGE_UID)) m.RenameAppend(model.FROM_USER_UID, model.USER_UID) - s.SelectJoinRecent(m, model.PLACE_UID) s.SelectJoinUser(m, model.NAME, model.AVATAR, model.AUTH_UID) s.SelectJoinAuth(m) + s.SelectJoinRecent(m, model.PLACE_UID) m.PushAction(s.MessagePlaceEnter) } +func (s message) PlaceEnter(m *ice.Message, arg ...string) { + // m.ProcessField() +} func init() { ice.TeamCtxCmd(message{Table: newTable()}) } diff --git a/src/gonganxitong/message.js b/src/gonganxitong/message.js index e336a0f..056f2b6 100644 --- a/src/gonganxitong/message.js +++ b/src/gonganxitong/message.js @@ -5,14 +5,8 @@ Volcanos(chat.ONIMPORT, { can.onimport.myView(can, msg, function(value) { var args = can.core.Split(value.args) value.icons = value.user_avatar||value.icons; if (value.score > 0) { value._style = ["sticky"] } return [ - {view: html.TITLE, list: [ - value.command_name, value.title, can.onimport.textView(can, value), - ]}, - {view: html.STATUS, list: [ - value.detail||(args[1]||"").slice(0, 6), - can.onimport.timeView(can, value), value.user_name, - ]}, - {view: html.STATUS, list: [value.city_name, value.street_name, value.place_name, value.service_name]}, + {view: html.TITLE, list: [value.command_name, value.title, can.onimport.textView(can, value)]}, + can.onimport.metaView(can, value), can.onimport.shipView(can, value), {view: html.OUTPUT, list: [value.content]}, ] }) diff --git a/src/gonganxitong/model/model.go b/src/gonganxitong/model/model.go index 4033a02..f61e875 100644 --- a/src/gonganxitong/model/model.go +++ b/src/gonganxitong/model/model.go @@ -3,133 +3,130 @@ package model import "shylinux.com/x/mysql-story/src/db" const ( - UID = "uid" - NAME = "name" - INFO = "info" - TYPE = "type" - HELP = "help" - ROLE = "role" - STATUS = "status" - TITLE = "title" - CONTENT = "content" - AVATAR = "avatar" - BACKGROUND = "background" - CREATED_AT = "created_at" - UPDATED_AT = "updated_at" - DELETED_AT = "deleted_at" - USER_UID = "user_uid" - USER_NAME = "user_name" - USER_INFO = "user_info" - USER_ROLE = "user_role" - 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_AVATAR = "place_avatar" - 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" - AUTH_AVATAR = "auth_avatar" - AUTH_BACKGROUND = "auth_background" - PAYMENTLIST_STATUS = "paymentlist_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" - DOMAIN_UID = "domain_uid" - DOMAIN_NAME = "domain_name" - MARKET_UID = "market_uid" - COMMAND_UID = "command_uid" - COMMAND_ICON = "command_icon" - COMMAND_NAME = "command_name" - MESSAGE_UID = "message_uid" - MESSAGE_STATUS = "message_status" - RECENT_UID = "recent_uid" - 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" - 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" - USER_ID = "user_id" - VENDOR = "vendor" - PHONE = "phone" - EMAIL = "email" - ADDRESS = "address" - PORTAL = "portal" - PORTAL_NAME = "portal_name" - NODE_NAME = "node_name" - NODENAME = "nodename" - NODETYPE = "nodetype" - SPACE = "space" - INDEX = "index" - FIELD = "field" - ICON = "icon" - ARGS = "args" - INIT = "init" - QUERY = "query" - VALUE = "value" - SCORE = "score" - LEVEL = "level" - UNIT = "unit" - LINK = "link" - AMOUNT = "amount" - ACCESS_TOKEN = "access_token" - EXPIRE_TIME = "expire_time" - PRICE = "price" - TOTAL = "total" - COUNT = "count" - GOODSLIST_UID = "goodslist_uid" - QUOTALIST_UID = "quotalist_uid" - PAYMENTLIST_UID = "paymentlist_uid" - SPENDLIST_UID = "spendlist_uid" - SPACE_ID = "space_id" - SIZE = "size" - LOCATION = "location" - IP = "ip" - UA = "ua" - AGENT = "agent" - SYSTEM = "system" - LANGUAGE = "language" + UID = "uid" + NAME = "name" + INFO = "info" + HELP = "help" + LINK = "link" + ICON = "icon" + TYPE = "type" + ROLE = "role" + STATUS = "status" + ORDER = "order" + TITLE = "title" + CONTENT = "content" + AVATAR = "avatar" + BACKGROUND = "background" + CREATED_AT = "created_at" + UPDATED_AT = "updated_at" + DELETED_AT = "deleted_at" + USER_UID = "user_uid" + USER_NAME = "user_name" + USER_INFO = "user_info" + USER_ROLE = "user_role" + USER_AVATAR = "user_avatar" + USER_BACKGROUND = "user_background" + USER_PLACE_ROLE = "user_place_role" + VALUE_UID = "value_uid" + PLACE_UID = "place_uid" + PLACE_NAME = "place_name" + PLACE_TYPE = "place_type" + PLACE_INIT = "place_init" + PLACE_AVATAR = "place_avatar" + 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" + AUTH_AVATAR = "auth_avatar" + AUTH_BACKGROUND = "auth_background" + 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" + MEMBER_UID = "member_uid" + MEMBER_STATUS = "member_status" + MARKET_UID = "market_uid" + DOMAIN_UID = "domain_uid" + DOMAIN_NAME = "domain_name" + THUMB_COUNT = "thumb_count" + COMMENT_COUNT = "comment_count" + FAVOR_COUNT = "favor_count" + SHARE_COUNT = "share_count" + THUMB_STATUS = "thumb_status" + FAVOR_STATUS = "favor_status" + MESSAGE_UID = "message_uid" + MESSAGE_STATUS = "message_status" + RECENT_UID = "recent_uid" + SERVICE_UID = "service_uid" + SERVICE_NAME = "service_name" + SERVICE_TYPE = "service_type" + SERVICE_STATUS = "service_status" + SERVICE_ICON = "service_icon" + COMMAND_UID = "command_uid" + COMMAND_NAME = "command_name" + COMMAND_ICON = "command_icon" + 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" + USER_ID = "user_id" + SPACE_ID = "space_id" + VENDOR = "vendor" + PHONE = "phone" + EMAIL = "email" + ADDRESS = "address" + PORTAL = "portal" + PORTAL_NAME = "portal_name" + NODE_NAME = "node_name" + NODENAME = "nodename" + NODETYPE = "nodetype" + SPACE = "space" + INDEX = "index" + FIELD = "field" + ARGS = "args" + INIT = "init" + QUERY = "query" + VALUE = "value" + LEVEL = "level" + SCORE = "score" + AMOUNT = "amount" + PRICE = "price" + TOTAL = "total" + COUNT = "count" + UNIT = "unit" + SIZE = "size" + ACCESS_TOKEN = "access_token" + EXPIRE_TIME = "expire_time" + LOCATION = "location" + IP = "ip" + UA = "ua" + AGENT = "agent" + SYSTEM = "system" + LANGUAGE = "language" ) type Sess struct { @@ -166,86 +163,6 @@ type City struct { Name string `gorm:"type:varchar(64);index"` } -type Goodslist struct { - db.ModelWithUID - PlaceUID string `gorm:"type:char(32);index"` - UserUID string `gorm:"type:char(32)"` - Name string `gorm:"type:varchar(32)"` - Title string `gorm:"type:varchar(64)"` - Content string `gorm:"type:varchar(128)"` - Amount int `gorm:"default:0"` - ExpireTime db.Time -} -type Paymentlist struct { - db.ModelWithUID - PlaceUID string `gorm:"type:char(32);index"` - UserUID string `gorm:"type:char(32)"` - GoodslistUID string `gorm:"type:char(32)"` - VendorUID string `gorm:"type:char(32)"` - Vendor string `gorm:"type:varchar(128)"` - Title string `gorm:"type:varchar(128)"` - Content string `gorm:"type:varchar(128)"` - Amount int32 `gorm:"default:0"` - Status uint8 `gorm:"default:0"` - Type uint8 `gorm:"default:0"` -} -type Quotalist struct { - db.ModelWithUID - PlaceUID string `gorm:"type:char(32);index"` - UserUID string `gorm:"type:char(32)"` - GoodslistUID string `gorm:"type:char(32);index"` - Title string `gorm:"type:varchar(64)"` - Content string `gorm:"type:varchar(128)"` - Vendor string `gorm:"type:varchar(128)"` - Total int `gorm:"default:0"` -} -type Spendlist struct { - db.ModelWithUID - PlaceUID string `gorm:"type:char(32);index"` - UserUID string `gorm:"type:char(32)"` - PaymentlistUID string `gorm:"type:char(32);index"` - QuotalistUID string `gorm:"type:char(32)"` - Vendor string `gorm:"type:varchar(128)"` - Total int `gorm:"default:0"` - Count int `gorm:"default:0"` - ExpireTime db.Time -} -type Meeting struct { - db.ModelWithUID - PlaceUID string `gorm:"type:char(32);index"` - UserUID string `gorm:"type:char(32)"` - Vendor string `gorm:"type:varchar(128)"` - UserID string `gorm:"type:varchar(32)"` -} -type Document struct { - db.ModelWithUID - PlaceUID string `gorm:"type:char(32);index"` - UserUID string `gorm:"type:char(32)"` - FolderID string `gorm:"type:varchar(128)"` - Vendor string `gorm:"type:varchar(128)"` -} -type Contract struct { - db.ModelWithUID - PlaceUID string `gorm:"type:char(32);index"` - UserUID string `gorm:"type:char(32)"` -} -type Photo struct { - db.ModelWithUID - PlaceUID string `gorm:"type:char(32);index"` - UserUID string `gorm:"type:char(32)"` - SpaceID string `gorm:"type:varchar(128)"` - AccessToken string `gorm:"type:varchar(512)"` - Vendor string `gorm:"type:varchar(128)"` - ExpireTime db.Time -} - -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 Apply struct { db.ModelWithUID PlaceUID string `gorm:"type:char(32);index:idx_place"` @@ -273,57 +190,64 @@ type Notice struct { PlaceUID string `gorm:"type:char(32);index"` UserUID string `gorm:"type:char(32)"` } - -type Domain struct { - db.ModelNameInfo - Order int `gorm:"default:0"` +type 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 Market struct { db.ModelContent DomainUID string `gorm:"type:char(32);index"` - CommandUID string `gorm:"type:char(32)"` PlaceUID string `gorm:"type:char(32)"` + ValueUID string `gorm:"type:char(32)";index` + CommandUID string `gorm:"type:char(32)"` Args string `gorm:"type:varchar(128)"` ThumbCount int `gorm:"default:0"` CommentCount int `gorm:"default:0"` FavorCount int `gorm:"default:0"` ShareCount int `gorm:"default:0"` + Price int `gorm:"default:0"` +} +type Domain struct { + db.ModelNameInfo + Order int `gorm:"default:0"` } type Thumb struct { db.ModelWithUID - MarketUID string `gorm:"type:char(32);index"` UserUID string `gorm:"type:char(32);index"` + PlaceUID string `gorm:"type:char(32);index"` + MarketUID string `gorm:"type:char(32);index"` Status uint `gorm:"default:0"` } type Comment struct { db.ModelWithUID - MarketUID string `gorm:"type:char(32);index"` UserUID string `gorm:"type:char(32);index"` + PlaceUID string `gorm:"type:char(32);index"` + MarketUID string `gorm:"type:char(32);index"` FromUID string `gorm:"type:char(32)"` Content string } type Favor struct { db.ModelWithUID - MarketUID string `gorm:"type:char(32);index"` UserUID string `gorm:"type:char(32);index"` + PlaceUID string `gorm:"type:char(32);index"` + MarketUID string `gorm:"type:char(32);index"` Status uint `gorm:"default:0"` } -type Command struct { - db.ModelWithUID - ServiceUID string `gorm:"type:char(32)"` - Index string `gorm:"type:varchar(128)"` - Name string `gorm:"type:varchar(32)"` - Icon string `gorm:"type:varchar(128)"` -} type Message struct { db.ModelContent FromUserUID string `gorm:"type:char(32)"` ToUserUID string `gorm:"type:char(32);index"` - CommandUID string `gorm:"type:char(32)"` PlaceUID string `gorm:"type:char(32)"` + ValueUID string `gorm:"type:char(32)";index` + CommandUID string `gorm:"type:char(32)"` Args string `gorm:"type:varchar(128)"` Status uint `gorm:"default:0"` Score uint `gorm:"default:0"` + Price int `gorm:"default:0"` } type Recent struct { db.ModelWithUID @@ -352,6 +276,13 @@ type Service struct { Hostname string `gorm:"type:varchar(32)"` Status uint8 `gorm:"default:0"` } +type Command struct { + db.ModelWithUID + ServiceUID string `gorm:"type:char(32)"` + Index string `gorm:"type:varchar(128)"` + Name string `gorm:"type:varchar(32)"` + Icon string `gorm:"type:varchar(128)"` +} type Support struct { db.ModelContent PlaceUID string `gorm:"type:char(32);index"` @@ -360,10 +291,8 @@ type Support struct { func init() { db.CmdModels("", &Sess{}, &User{}, &UserPlace{}, &Place{}, &Street{}, &City{}, - &Goodslist{}, &Paymentlist{}, &Quotalist{}, &Spendlist{}, - &Meeting{}, &Document{}, &Contract{}, &Photo{}, &Setting{}, &Apply{}, &Allow{}, &Event{}, &Notice{}, - &Domain{}, &Market{}, &Thumb{}, &Comment{}, &Favor{}, - &Command{}, &Message{}, &Recent{}, &Service{}, &Support{}, + &Market{}, &Domain{}, &Thumb{}, &Comment{}, &Favor{}, + &Message{}, &Recent{}, &Service{}, &Support{}, &Command{}, ) } diff --git a/src/gonganxitong/notice.go b/src/gonganxitong/notice.go index bb9dea9..35a93d7 100644 --- a/src/gonganxitong/notice.go +++ b/src/gonganxitong/notice.go @@ -18,7 +18,6 @@ type notice struct { } func (s notice) Create(m *ice.Message, arg ...string) { - // m.Option(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))...) s.RecordEventWithName(m, "") } @@ -26,24 +25,19 @@ func (s notice) Modify(m *ice.Message, arg ...string) { s.Update(m, arg, m.OptionSimple(model.UID, model.PLACE_UID)...) } func (s notice) Remove(m *ice.Message, arg ...string) { - // m.Option(model.PLACE_UID, m.Option(s.Keys(s.Place, model.UID))) - s.Delete(m, m.OptionSimple(model.PLACE_UID, model.UID)...) + s.Delete(m, m.OptionSimple(model.UID, model.PLACE_UID)...) s.RecordEventWithName(m, "") } func (s notice) List(m *ice.Message, arg ...string) { if len(arg) == 1 { - s.Orders(m, s.Desc(model.UPDATED_AT)) s.Select(m, model.PLACE_UID, arg[0]) } else if len(arg) == 2 { s.SelectDetail(m, model.PLACE_UID, arg[0], model.UID, arg[1]) } m.RewriteAppend(func(value, key string, index int) string { - if key == model.UPDATED_AT { - value = kit.Select(m.Appendv(model.CREATED_AT)[index], value) - } + kit.If(key == model.UPDATED_AT, func() { value = kit.Select(m.Appendv(model.CREATED_AT)[index], value) }) return value - }) - m.SortStrR(model.UPDATED_AT) + }).SortStrR(model.UPDATED_AT) kit.If(s.IsLeader(m), func() { if m.PushAction(s.Modify, s.Remove); m.Length() == 0 { s.Button(m, "") diff --git a/src/gonganxitong/notice.png b/src/gonganxitong/notice.png deleted file mode 100644 index 2d4a693..0000000 Binary files a/src/gonganxitong/notice.png and /dev/null differ diff --git a/src/gonganxitong/paymentlist.go b/src/gonganxitong/paymentlist.go deleted file mode 100644 index d3e4fc4..0000000 --- a/src/gonganxitong/paymentlist.go +++ /dev/null @@ -1,88 +0,0 @@ -package gonganxitong - -import ( - "shylinux.com/x/ice" - kit "shylinux.com/x/toolkits" - - "shylinux.com/x/community/src/gonganxitong/model" -) - -type paymentlist struct { - Table - order string `data:"92"` - auth string `data:"issued"` - role string `data:"leader,worker"` - fields string `data:"amount,title,content,paymentlist_status,goodslist_uid,user_uid"` - create string `name:"create amount* title* content" role:"leader"` - request string `name:"request" help:"支付" style:"notice" role:"void"` - response string `name:"response" role:"void"` -} - -func (s paymentlist) Create(m *ice.Message, arg ...string) { - s.Insert(m, kit.Simple(s.TransPrice(m, arg, model.AMOUNT), m.OptionSimple(model.PLACE_UID, model.USER_UID))...) - s.RecordEventWithName(m, "") -} -func (s paymentlist) List(m *ice.Message, arg ...string) { - if len(arg) == 1 { - s.Select(m, model.PLACE_UID, arg[0], model.USER_UID, m.Option(model.USER_UID)) - } else if len(arg) == 2 { - s.SelectDetail(m, model.PLACE_UID, arg[0], model.USER_UID, m.Option(model.USER_UID), model.UID, arg[1]) - if PaymentStatus(kit.Int(m.Append(model.PAYMENTLIST_STATUS))) == PaymentCreate { - if !m.IsWeixinUA() { - m.EchoQRCode(s.Link(m, arg[0], m.PrefixKey(), arg[1])).Echo("请用微信扫码支付") - } - } else { - m.SetAppend().Cmdy(s.Prefix(m, spendlist{}), arg).Action() - return - } - } else { - return - } - m.Table(func(value ice.Maps) { - switch PaymentStatus(kit.Int(value[model.PAYMENTLIST_STATUS])) { - case PaymentCreate: - m.PushButton(s.Request) - case PaymentSuccess: - m.PushButton() - default: - m.PushButton() - } - }).Display("").Action() - s.SelectJoinUser(m) -} -func (s paymentlist) Request(m *ice.Message, arg ...string) { - s.cmdy(m, m.ActionKey(), kit.Simple(kit.Select(m.PrefixKey(), arg, 0), kit.Select("", arg, 1), - kit.Select(m.Option(model.PLACE_UID), arg, 2), kit.Select(m.Option(model.UID), arg, 3), kit.Slice(arg, 4))...) -} -func (s paymentlist) Response(m *ice.Message, arg ...string) { - if !s.cmdy(m, m.ActionKey(), arg...).IsErr() { - s.Update(m, kit.Dict(model.STATUS, PaymentSuccess), model.PLACE_UID, arg[0], model.UID, arg[1]) - } -} - -func init() { ice.TeamCtxCmd(paymentlist{Table: newTable()}) } - -func (s paymentlist) cmdy(m *ice.Message, action ice.Any, arg ...string) *ice.Message { - return m.Cmdy(PaymentVendor, action, arg) -} - -type PaymentStatus int - -const ( - PaymentCreate PaymentStatus = iota - PaymentSuccess - PaymentFailure -) - -var PaymentStatusList = map[PaymentStatus]string{ - PaymentCreate: "create", - PaymentSuccess: "success", - PaymentFailure: "failure", -} - -func (s PaymentStatus) String() string { return PaymentStatusList[s] } - -var PaymentVendor interface { - Request(m *ice.Message, arg ...string) - Response(m *ice.Message, arg ...string) -} diff --git a/src/gonganxitong/paymentlist.js b/src/gonganxitong/paymentlist.js deleted file mode 100644 index feb7f1f..0000000 --- a/src/gonganxitong/paymentlist.js +++ /dev/null @@ -1,9 +0,0 @@ -Volcanos(chat.ONIMPORT, { - _init: function(can, msg) { - can.onimport.myView(can, msg, function(value) { return [ - {view: html.TITLE, list: [value.title, "¥ "+(value.amount/100), can.onimport.titleAction(can, value)]}, - {view: html.STATUS, list: [value.uid.slice(0, 6), can.onimport.timeView(can, value), value.user_name]}, - {view: html.OUTPUT, list: [value.content]}, - ] }) - }, -}) \ No newline at end of file diff --git a/src/gonganxitong/photo.go b/src/gonganxitong/photo.go deleted file mode 100644 index fc385ab..0000000 --- a/src/gonganxitong/photo.go +++ /dev/null @@ -1,67 +0,0 @@ -package gonganxitong - -import ( - "shylinux.com/x/ice" - kit "shylinux.com/x/toolkits" - - "shylinux.com/x/community/src/gonganxitong/model" -) - -type photo struct { - Table - order string `data:"96"` - auth string `data:"issued"` - role string `data:"leader,worker"` - fields string `data:"space_id,access_token,expire_time,vendor"` - upload string `name:"upload" role:"worker"` - rename string `name:"rename newname" role:"worker"` - trash string `name:"trash" role:"worker"` -} - -func (s photo) Config(m *ice.Message, arg ...string) { - s.InsertOrUpdate(m, arg, m.OptionSimple(model.PLACE_UID)...) -} -func (s photo) List(m *ice.Message, arg ...string) { - s.cmdy(m, PhotoVendor.Folder, kit.Slice(arg, 1)...) - m.PushAction(s.Rename, s.Trash).Display("") - if len(arg) == 1 { - s.Button(m, "请上传文件", s.Upload) - s.SpendlistCheck(m, 0) - } -} -func (s photo) Upload(m *ice.Message, arg ...string) { - if up := kit.Simple(m.Optionv(ice.MSG_UPLOAD)); s.SpendlistCheck(m, kit.Int(up[2])) { - s.cmdy(m, "") - s.SpendlistUpdate(m, m.Append(model.SIZE)) - } -} -func (s photo) Rename(m *ice.Message, arg ...string) { - s.cmdy(m, "") -} -func (s photo) Trash(m *ice.Message, arg ...string) { - s.cmdy(m, "") - s.SpendlistUpdate(m, m.Append(model.SIZE)) -} - -func init() { ice.TeamCtxCmd(photo{Table: newTable()}) } - -func (s photo) cmdy(m *ice.Message, action ice.Any, arg ...string) { - if m.Option(model.AUTH_UID, s.StreetAuthUID(m, m.Option(model.PLACE_UID))) == "" { - return - } - if msg := s.Select(m.Spawn(), m.OptionSimple(model.PLACE_UID)...); msg.Append(model.SPACE_ID) == "" { - m.Echo("本服务暂未配置,请联系公司管理员配置") - } else { - kit.If(action == "", func() { action = m.ActionKey() }) - _msg := m.Cmd(msg.Append(model.VENDOR), PhotoVendor.Token, msg.Append(model.SPACE_ID), msg.Append(model.ACCESS_TOKEN), msg.Append(model.EXPIRE_TIME)) - m.Cmdy(msg.Append(model.VENDOR), action, m.Option(model.AUTH_UID), msg.Append(model.SPACE_ID), _msg.Append(model.ACCESS_TOKEN), arg) - } -} - -var PhotoVendor interface { - Folder(m *ice.Message, arg ...string) - Upload(m *ice.Message, arg ...string) - Rename(m *ice.Message, arg ...string) - Trash(m *ice.Message, arg ...string) - Token(m *ice.Message, arg ...string) -} diff --git a/src/gonganxitong/photo.js b/src/gonganxitong/photo.js deleted file mode 100644 index 337482f..0000000 --- a/src/gonganxitong/photo.js +++ /dev/null @@ -1,8 +0,0 @@ -Volcanos(chat.ONIMPORT, { - _init: function(can, msg) { - can.onimport.myView(can, msg, function(value) { return [ - {view: html.TITLE, list: [value.name]}, - {view: html.STATUS, list: [can.base.Size(value.size), can.base.TimeTrim(value.modify_time)]}, - ] }) - }, -}) \ No newline at end of file diff --git a/src/gonganxitong/portal-header.png b/src/gonganxitong/portal-header.png deleted file mode 100644 index e81f50e..0000000 Binary files a/src/gonganxitong/portal-header.png and /dev/null differ diff --git a/src/gonganxitong/portal.css b/src/gonganxitong/portal.css index 082fcd2..833e1dc 100644 --- a/src/gonganxitong/portal.css +++ b/src/gonganxitong/portal.css @@ -1,71 +1,32 @@ -$body.dark:not(.width1) { background-color:var(--notice-bg-color); } $body.dark { --plugin-bg-color:#0d1117; --output-bg-color:#171a22; } -$body.light { background-color:#dbe7fe; --plugin-bg-color:#f3f3f4; --output-bg-color:white; --notice-bg-color:#006fff; } -$body.light { background-color:#dbe7fe; --plugin-bg-color:#f2f4f8; --output-bg-color:white; --notice-bg-color:#006fff; } -$body.width1 fieldset.Action div.input.float { position:static; } -$body.width1 fieldset.Action div.input.float table { width:100%; } -$body.width1 div.upload.float div.action { display:flex; } -$body.width1 div.upload.float div.action div.item.upload { flex-grow:1; } -$body.width1 div.upload.float div.action div.item.upload input { width:100%; } -$body.width1 $action div.item.text.filter { flex-grow:1; } -$body>div.inputs>div.input { - background-color:var(--output-bg-color); -} -$action { background-color:transparent; position:absolute; top:0; width:100%; z-index:1; display:none; } -$action div.item.filter input { border-radius:20px; border:none; } -// $action div.item:last-child { margin-right:10px; } -// $action div.item.text.filter { padding:0 10px; } +$body.light { --plugin-bg-color:#f2f4f8; --output-bg-color:white; --notice-bg-color:#006fff; } +// $body.light { --plugin-bg-color:#f2f4f8; --output-bg-color:white; --notice-bg-color:#006fff; background-color:#dbe7fe; } +body.light fieldset.web.team.portal>div.output>div.header { background-image:linear-gradient(#dbe7fe, var(--plugin-bg-color)); } +body.dark $output>div>div.list.mynotice>span:first-child { background-color:var(--hover-bg-color); color:yellow; white-space:pre; } +$action { width:100%; position:absolute; top:0; z-index:1; display:none; } +$action div.item { margin-right:0; height:48px; } +$action div.item input[type=button] { background-color:transparent; color:var(--notice-bg-color); height:48px; min-width:20px; padding:0 10px; } +$action div.item.danger input[type=button] { color:var(--danger-bg-color); } +$action div.item.button i { display:none; } +$action div.item.button span { display:none; } +$action div.item.button input { border:none; min-width:60px; display:unset; } $action div.item.text.filter:last-child { margin-right:10px; } $action div.item.text.filter i { padding-left:10px; } $action div.item.text.filter span { right:5px; } -$action div.item.text.filter input { padding-left:32px; padding-right:32px; width:100%; } +$action div.item.text.filter input { border-radius:20px; border:none; padding-left:32px; padding-right:32px; width:100%; } $action div.item.text.filter input:focus { border:var(--box-border); } -// $action div.item { margin-left:5px; margin-right:0; padding:0; height:48px; align-items:center; } -$action div.item { margin-right:0; padding:0; height:48px; align-items:center; } -$action div.item.button input { border:none; background-color:var(--plugin-bg-color); color:var(--notice-bg-color); min-width:60px; display:unset; } -$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 div.title div.action div.item.notice input { background-color:var(--notice-bg-color); color:var(--notice-fg-color); } $output { background-color:var(--plugin-bg-color); } $output>div.header { background-image:linear-gradient(var(--notice-bg-color), var(--plugin-bg-color)); height:240px; width:100%; position:absolute; left:0; } -body.light $output>div.header { background-image:linear-gradient(#dbe7fe, var(--plugin-bg-color)); height:240px; width:100%; position:absolute; left:0; } $output>div.header img { height:100%; width:100%; object-fit:cover; } $output>div.action>div.list { margin:0 10px; } -$output div.output>div.code { font-size:16px; position:relative; } -$output div.output>div.code img.avatar { - box-shadow:var(--box-shadow); border:solid 2px white; - border-radius:10px; object-fit:cover; --qrcode-icon-height:48px; - height:var(--qrcode-icon-height) !important; width:var(--qrcode-icon-height) !important; - position:absolute; top:calc(50% - var(--qrcode-icon-height) / 2 - 26px); left:calc(50% - var(--qrcode-icon-height) / 2); -} $output>div>div.code { margin-bottom:20px; display:flex; flex-direction:column; align-items:center; } $output>div>div.list { border-radius:10px; background-color:var(--output-bg-color); padding:10px; margin:10px; } -$output>div>div.list.myplace>div.output { padding:0 10px; max-height:320px; } -$output>div>div.list.myplace>div.output>div.item>div.output div.title span.type { line-height:18px; } -$output>div>div.list.myplace>div.output>div.item>div.output div.title span.role { line-height:18px; } -$output>div>div.list.myplace>div.output>div.item>div.output div.title { margin-bottom:5px; } -$output>div>div.list.mynotice { cursor:pointer; } -$output>div>div.list.mynotice:not(.hide) { display:flex; align-items:center; } -$output>div>div.list.mynotice>span.title { flex-grow:1; margin:0 5px; } -$output>div>div.list.mynotice>span:not(.title) { white-space:pre; } -$output>div>div.list.mynotice>span:first-child { background-color:var(--hover-bg-color); color:var(--notice-bg-color); padding:0 5px; margin-right:5px; } -$output>div>div.list.mynotice>span:last-child { color:gray; } -$output>div>div.list.mylist>fieldset>div.output { max-height:none !important; } -$output>div>div.list>div.title { font-weight:bold; display:flex; align-items:center; border-left:var(--box-notice3); padding-left:10px; } -body.width1 $output fieldset.story>div.output>div.place_info { min-height:68px; } -body.width1 $output fieldset.story>div.output>div.place_info>div.item>div.output { background-color:var(--plugin-bg-color); } -body.width1 $output fieldset.story>div.output>table.detail tr.user_name { display:none; } -body.width1 $output fieldset.story>div.output>table.detail tr.user_avatar { display:none; } -body.width1 $output fieldset.story>div.output>table.detail tr.created_at { display:none; } -body.width1 $output fieldset.story>div.output>table.detail tr.updated_at { display:none; } -$output>div>div.list.myallow>div.title { border-left:var(--box-danger3); padding-left:10px; } -$output>div>div.list.myorder>div.title { border-left:var(--box-danger3); padding-left:10px; } +$output>div>div.list>div.title { font-weight:bold; border-left:var(--box-notice3); padding-left:10px; display:flex; align-items:center; } $output>div>div.list>div.title span:first-child { flex-grow:1; } -$output>div>div.list>div.title div.action div.item.filter input:focus { width:320px; transition:width 0.5s; } -$output>div>div.list>div.title div.action div.item.filter input { transition:width 0.8s; } $output>div>div.list>div.title div.action { overflow:hidden; } $output>div>div.list>div.title div.action div.item { margin-right:5px; } +$output>div>div.list>div.title div.action div.item.filter input { transition:width 0.8s; } +$output>div>div.list>div.title div.action div.item.filter input:focus { width:320px; transition:width 0.5s; } $output>div>div.list>div.title div.action div.item.button.icons input { display:none; } $output>div>div.list>div.role:not(.hide) { display:flex; align-items:center; justify-content:space-around; } $output>div>div.list>div.role span { padding:5px; cursor:pointer; white-space:pre; } @@ -77,100 +38,112 @@ $output>div>div.list>div.role span.teacher.select { border-bottom:var(--box-dang $output>div>div.list>div.role span.leader.select { border-bottom:var(--box-danger); } $output>div>div.list>div.role span.boss.select { border-bottom:var(--box-danger); } $output>div>div.list>div.output>div.item.index:not(.hide) { padding:5px 10px; display:flex; flex-direction:column; align-items:center; float:left; } -$output>div>div.list>div.output>div.item.index img { height:36px; width:36px; object-fit:contain; } $output>div>div.list>div.output>div.item.index i { font-size:22px; padding:5px; } +$output>div>div.list>div.output>div.item.index img { height:40px; width:40px; object-fit:contain; } $output>div>div.list>div.output>div.item.index span { font-size:12px; white-space:pre; max-width:80px; } -body.en $output>div>div.list>div.output>div.item.index span { font-family:monospace; } $output>div>div.list div.code { text-align:center; } -$output>div>div.list div.code input { background-color:var(--notice-bg-color); color:var(--notice-fg-color); font-size:18px; margin:auto; min-width:200px; display:block; margin-top:10px; } +$output>div>div.list div.code input { background-color:var(--notice-bg-color); color:var(--notice-fg-color); font-size:18px; margin:auto; margin-top:10px; min-width:200px; display:block; } $output>div>div.list fieldset.story>div.output { background-color:var(--plugin-bg-color); } -// $output>div>div.list fieldset.story.web.team.dashboard.summary>div.output { min-height:64px; background-color:var(--output-bg-color); } -$output div.head>img { height:200px; width:100%; object-fit:cover; } -$output div.head div.item.card img { border-radius:25px; } -$output div.head>div.item.card div.title div.item.button i { display:none; } -$output div.tabs { height:32px; display:flex; position:unset; } -$output div.tabs span { padding:5px 10px; } -$output div.tabs span.select { background-color:var(--output-bg-color); color:var(--hover-fg-color); } +$output>div>div.list.myplace>div.output { max-height:320px; } +$output>div>div.list.myplace>div.output>div.item>div.output div.title { margin-bottom:5px; } +$output:not(.public)>div>div.list.myplace>div.output>div.item { padding:0 10px; } +$output>div>div.list.mynotice { cursor:pointer; } +$output>div>div.list.mynotice:not(.hide) { display:flex; align-items:center; } +$output>div>div.list.mynotice>span.title { flex-grow:1; margin:0 5px; } +$output>div>div.list.mynotice>span:not(.title) { white-space:pre; } +$output>div>div.list.mynotice>span:first-child { background-color:var(--hover-bg-color); color:var(--notice-bg-color); padding:0 5px; margin-right:5px; } +$output>div>div.list.mynotice>span:last-child { color:gray; } +$output>div>div.list.mylist>fieldset>div.output { max-height:none !important; } +$output>div>div.list.myallow>div.title { border-left:var(--box-danger3); padding-left:10px; } +$output>div>div.list.myorder>div.title { border-left:var(--box-danger3); padding-left:10px; display:none; } +body.width1 $output>div>div.list.myorder { border-radius:0; padding:0 20px 20px; margin:0; } $output div.item.card:not(:last-child) { margin-bottom:2px; } -$output div.item.card>div.output>div { width:100%; width:calc(100% - 53px); overflow:hidden; } -$output div.item.card div.title { width:100%; display:flex; position:relative; } +$output div.item.card.sticky { position:sticky; top:0; z-index:2; } +$output div.item.card.loaded { position:sticky; top:0; z-index:2; } +$output div.item.card div.title { width:100%; display:flex; align-items:center; position:relative; } +$output div.item.card div.title span:first-child { word-break:break-all; } $output div.item.card div.title span.type { line-height:18px; } $output div.item.card div.title span.status { line-height:18px; } $output div.item.card div.title span.price { color:var(--danger-bg-color); } -$output div.item.card div.title span.score { background-color:var(--hover-bg-color); color:var(--danger-bg-color); padding:0 5px; } body.width1 $output div.item.card div.title span.price { margin-left:auto; } -// $output div.item.card div.title span.auth { font-size:14px; padding:3px; } -$output div.item.card div.title span.time { position:absolute; right:0; font-size:12px; color:gray; } -$output div.item.card div.title div.space { flex-grow:1; } -$output div.item.card div.title span:first-child { word-break:break-all; } -$output fieldset.story>div.item.card div.title span { line-height:26px; } -$output fieldset.story>div.output { background-color:var(--plugin-bg-color); } -$output fieldset.story.web.team.dashboard.summary>div.output { min-height:64px; } -$output div.item.title { border-left:var(--box-notice3); margin-left:10px; padding:10px; background-color:var(--plugin-bg-color); } -$output div.item.title.dealList { border-left:var(--box-danger3); } -$output div.item.title.meetList { border-left:var(--box-danger3); } -$body div.inputs>div.input.float>div.action { display:flex; } +$output div.item.card div.title span.score { background-color:var(--hover-bg-color); color:var(--danger-bg-color); padding:0 5px; } +$output div.item.card div.title span.time { color:gray; font-size:12px; position:absolute; right:0; } +body.width1 $output div.item.card div.title div.space { flex-grow:1; } $output div.item.card div.title div.action input { margin-right:0; } -$output div.item.card div.action input { margin-left:0; margin-right:0; padding:0 10px; } +$output div.item.card div.action input { padding:0 10px; margin-left:0; margin-right:0; } +body.width1 $output div.item.card>div.action { max-width:240px; display:flex; flex-wrap:wrap; justify-content:center; } $output div.item.card div.status span { word-break:break-all; } $output div.item.card img { border-radius:5px; padding:0; margin:0; margin-right:10px; height:48px; width:48px; min-width:48px; object-fit:cover; } $output div.item.card div.container img { margin-right:0; height:100%; width:100%; } $output div.item.card div.container>div.action { position:relative; float:right; } -$output div.item.card div.container>div.action input { padding:0 10px; margin-left:0; margin-right:0; } -body:not(.mobile) $output div.item.card div.container>div.action { display:none; } -body.mobile $output div.item.card div.container>div.title>span.status { margin-left:auto; } +body:not(.width1) $output div.item.card div.title>div.action { display:none; } +$output div.item.card>div.output>div { width:100%; width:calc(100% - 53px); overflow:hidden; } $output div.item.card.sticky>div.output { background-color:var(--plugin-bg-color); color:var(--notice-bg-color); } -// $action div.item.notice input[type=button] { border:var(--box-notice); color:var(--notice-bg-color); } -$action div.item input[type=button] { min-width:20px; padding:0 10px; } -$action div.item input[type=button] { color:var(--notice-bg-color); } -// $action div.item input[type=button] { border:var(--box-notice); color:var(--notice-bg-color); } -// $action div.item.text input { border:var(--box-notice); color:var(--notice-bg-color); } -// $action div.item.text input { color:var(--notice-bg-color); } -// $action div.item.text i { color:var(--notice-bg-color); } -$action div.item.danger input[type=button] { color:var(--danger-bg-color); } -$output input.notice[type=button]:hover { background-color:var(--notice-bg-color); color:var(--notice-fg-color); } -$output input.notice[type=button]:not(:hover) { background-color:transparent; color:var(--notice-bg-color); } -$output input.danger[type=button]:not(:hover) { color:var(--danger-bg-color); } -$output input.danger[type=button]:hover { background-color:var(--danger-bg-color); color:var(--danger-fg-color); } +$output div.output>div.code { font-size:16px; position:relative; } +$output div.output>div.code>img { display:block; margin:10px auto; } +$output div.output>div.code>img.qrcode { box-shadow:var(--box-shadow); border-radius:10px; } +$output div.output>div.code>img.avatar { + box-shadow:var(--box-shadow); border-radius:10px; border:solid 2px white; object-fit:cover; --qrcode-icon-height:48px; + height:var(--qrcode-icon-height) !important; width:var(--qrcode-icon-height) !important; + position:absolute; top:calc(50% - var(--qrcode-icon-height) / 2 - 22px); left:calc(50% - var(--qrcode-icon-height) / 2); +} $output input[type=button][name=submit] { background-color:var(--notice-bg-color); color:var(--notice-fg-color); } -$output span.type { border:none; border-radius:5px; background-color:var(--hover-bg-color); color:var(--notice-bg-color); font-size:var(--status-font-size); line-height:22px; padding:2px 8px; } -$output span.role { border:none; border-radius:5px; background-color:var(--hover-bg-color); color:var(--notice-bg-color); font-size:var(--status-font-size); line-height:22px; padding:2px 8px; } -$output span.level { border:none; border-radius:5px; background-color:var(--hover-bg-color); color:var(--notice-bg-color); font-size:var(--status-font-size); line-height:22px; padding:2px 8px; } -$output span.status { border:none; border-radius:5px; background-color:var(--hover-bg-color); color:var(--notice-bg-color); font-size:var(--status-font-size); line-height:22px; padding:2px 8px; } +$output input.notice[type=button] { background-color:transparent; color:var(--notice-bg-color); } +$output input.danger[type=button] { color:var(--danger-bg-color); } +$output span.type { border:none; border-radius:5px; background-color:var(--hover-bg-color); color:var(--notice-bg-color); font-size:var(--status-font-size); line-height:18px; padding:2px 8px; } +$output span.role { border:none; border-radius:5px; background-color:var(--hover-bg-color); color:var(--notice-bg-color); font-size:var(--status-font-size); line-height:18px; padding:2px 8px; } +$output span.level { border:none; border-radius:5px; background-color:var(--hover-bg-color); color:var(--notice-bg-color); font-size:var(--status-font-size); line-height:18px; padding:2px 8px; } +$output span.status { border:none; border-radius:5px; background-color:var(--hover-bg-color); color:var(--notice-bg-color); font-size:var(--status-font-size); line-height:18px; padding:2px 8px; } $output span.type.danger { color:var(--danger-bg-color); } $output span.role.danger { color:var(--danger-bg-color); } $output span.level.danger { color:var(--danger-bg-color); } $output span.status.danger { color:var(--danger-bg-color); } $output table.content { background-color:var(--output-bg-color); } -$output table.content td.action input.icons { display:unset; } $output table.content td.action i { display:none; } -$output table.content.detail thead { display:none; } -// $output table.content.detail td.action input { padding:0 10px; min-width:60px; margin-right:0; } -$output table.content.detail tr.action input.icons { display:unset; } -$output table.content.detail tr.action i { display:none; } -$output table.content.detail tr.action input[type=button] { padding:0 10px; margin-right:0; } -$output table.content.detail tr.uid { display:none; } +$output table.content td.action input.icons { display:unset; } $output table.content.detail input { border:none; } - -$output fieldset.story.otherList>div.output { max-height:unset !important; } -$output fieldset.story.otherList>div.output>div.list { height:unset !important; } +$output table.content.detail thead { display:none; } +$output table.content.detail tr.uid { display:none; } +$output table.content.detail tr.action i { display:none; } +$output table.content.detail tr.action input.icons { display:unset; } +$output table.content.detail tr.action input[type=button] { padding:0 10px; margin-right:0; } +$output div.head>img { height:200px; width:100%; object-fit:cover; } +$output div.head div.item.card img { border-radius:25px; } +$output div.head div.item.card div.title div.item.button i { display:none; } +$output div.tabs { height:32px; display:flex; position:unset; } +$output div.tabs span { padding:5px 10px; } +$output div.tabs span.select { background-color:var(--output-bg-color); color:var(--hover-fg-color); } +$output div.item.title { border-left:var(--box-notice3); background-color:var(--plugin-bg-color); padding:10px; margin-left:10px; } +$output div.item.title.meetList { border-left:var(--box-danger3); } +$output div.item.title div.action div.item.notice input { background-color:var(--notice-bg-color); color:var(--notice-fg-color); } +$output fieldset.story>div.output { background-color:var(--plugin-bg-color); } $output fieldset.story>div.output>div.tabs { background-color:var(--plugin-bg-color); display:flex; overflow:auto; position:sticky; top:0; z-index:2; } $output fieldset.story>div.output>div.tabs>div.item { white-space:pre; line-height:22px; padding:5px; } $output fieldset.story>div.output>div.tabs>div.item.all { position:sticky; left:0; z-index:1; } $output fieldset.story>div.output>div.tabs>div.item.select { border-top:var(--box-notice); background-color:var(--output-bg-color); } $output fieldset.story>div.output>div.tabs>div.item.select { position:sticky; right:0; } $output fieldset.story>div.output>div.tabs>div.item.danger.select { border-top:var(--box-danger); background-color:var(--output-bg-color); } -$output fieldset.story>div.output>div.tabs>div.item:hover { background-color:var(--output-bg-color); } - -$output>div.output>div.code { padding:10px; } +$output>fieldset.market div.tabs { display:flex; width:100%; overflow:auto; height:30px; position:sticky; top:0; z-index:1; } +$output>fieldset.market div.tabs>div.item { padding:5px 10px; float:left; white-space:pre; } +$output>fieldset.market div.tabs>div.item.select { border-top:var(--box-danger); background-color:var(--output-bg-color); color:var(--danger-bg-color); font-weight:bold; position:sticky; left:0; right:0; } +$output>fieldset.message div.tabs span.select { border-top:var(--box-border); } +$output>fieldset.message div.tabs span.create.select { border-top:var(--box-danger); } +$output>fieldset.message div.tabs span.read.select { border-top:var(--box-notice); } +$output fieldset.story.otherList>div.output { max-height:unset !important; } +$output fieldset.story.otherList>div.output>div.list { height:unset !important; } $output>fieldset.story { margin-top:48px; } $output fieldset.story { box-shadow:none; } +$output fieldset.story>div.output>fieldset.story:not(.otherList) { margin-top:40px; } +$output fieldset.story>div.output>fieldset.story:not(.otherList)>legend { + display:block; box-shadow:none; border-left:var(--box-notice3); border-top-left-radius:unset; margin-left:10px; + padding:0 10px; +} +$output fieldset.story>div.output>fieldset.can.story>div.output { margin:10px; } $output fieldset.story>legend { display:none; } $output fieldset.story>form.option { display:none; } $output fieldset.story>div.action { display:none; } $output fieldset.story>div.status { display:none; } -$output>fieldset.story>div.output { background-color:var(--plugin-bg-color); } -$output fieldset.story>div.output div.code { padding:0; } +$output fieldset.story>div.output { background-color:var(--plugin-bg-color); } $output fieldset.story>div.output table.content td { box-shadow:none; } $output fieldset.story>div.output table.content.detail td:last-child { text-align:left; } $output fieldset.story>div.output table.content td img { max-width:100%; } @@ -178,61 +151,60 @@ $output fieldset.story>div.output table.content tr.icon td img { max-height:128p $output fieldset.story>div.output table.content tr.user_avatar td img { max-height:128px; max-width:128px; } $output fieldset.story>div.output table.content tr.auth_avatar td img { max-height:128px; max-width:128px; } $output fieldset.story>div.output>div.code { text-align:center; } -$output fieldset.story>div.output>div.code { display:flex; flex-direction:column; row-gap:10px; margin-top:20px; margin-bottom:20px; } -$output div.code>img { display:block; margin:10px auto; } -$output fieldset.story>div.output>div.info>input[type=button] { box-shadow:var(--box-shadow); border:none; background-color:var(--notice-bg-color); color:var(--notice-fg-color); font-size:20px; height:48px; width:100%; max-width:320px; } -$output div.output>div.code>img.qrcode { box-shadow:var(--box-shadow); border-radius:10px; } -$output fieldset.story>div.output>div.info { padding:10px 20px; text-align:center; } $output fieldset.story>div.output>div.code>input[type=button] { background-color:var(--notice-bg-color); color:var(--notice-fg-color); float:right; } $output fieldset.story>div.output>div.code>input[type=button].danger { border:var(--box-danger); background-color:transparent; color:var(--danger-bg-color); } $output fieldset.story>div.output>div.code div.item.button { margin-top:20px; } $output fieldset.story>div.output>div.code div.item.button input[type=button] { background-color:var(--notice-bg-color); color:var(--notice-fg-color); font-size:18px; min-width:240px; height:36px; } $output fieldset.story>div.output>div.code div.item.button input[type=button][name=cancel] { border:var(--box-border); background-color:var(--danger-bg-color); color:var(--danger-fg-color); } $output fieldset.story>div.output>div.code div.item.button.danger input[type=button] { background-color:var(--danger-bg-color); color:var(--danger-fg-color); } +$output fieldset.story>div.output>div.info>input[type=button] { box-shadow:var(--box-shadow); border:none; background-color:var(--notice-bg-color); color:var(--notice-fg-color); font-size:20px; height:48px; width:100%; max-width:320px; } +$output fieldset.story>div.output>div.info { padding:10px 20px; text-align:center; } $output>fieldset.story>div.output div.item.card>div.output { padding:10px; width:100%; } -$output>fieldset.story>div.output div.item.card.loaded>div.output { background-color:var(--plugin-bg-color); } $output>fieldset.story>div.output div.item.card>div.output div.output { padding:5px 0; white-space:pre-line; } +$output>fieldset.story>div.output div.item.card.loaded>div.output { background-color:var(--plugin-bg-color); } $output fieldset.story.form>div.output>div.code>input[type=button] { font-size:18px; margin:10px; height:36px; } -// $output>fieldset.story.web.team.renzhengshouquan.profile { margin-top:0; } -// $output>fieldset.story.web.team.credit { margin-top:0; } $output>fieldset.story.web.team.credit>div.output>div.code { margin-top:64px; } -$output>fieldset.message div.tabs span.select { border-top:var(--box-border); } -$output>fieldset.message div.tabs span.create.select { border-top:var(--box-danger); } -$output>fieldset.message div.tabs span.read.select { border-top:var(--box-notice); } +$output fieldset.story.web.team.dashboard.summary>div.output { min-height:64px; } $output>fieldset.qrcode table.content td { text-align:center; } -$output>fieldset.market>div.output>div.tabs { display:flex; width:100%; overflow:auto; height:30px; position:sticky; top:0; z-index:1; } -$output>fieldset.market>div.output>div.tabs>div.item { padding:5px 10px; float:left; white-space:pre; } -$output>fieldset.market>div.output>div.tabs>div.item.select { border-top:var(--box-danger); background-color:var(--output-bg-color); color:var(--danger-bg-color); font-weight:bold; position:sticky; left:0; right:0; } -$output>fieldset.market>div.output>div.list div.item.card img { border-radius:50%; height:40px; width:40px; min-width:40px; } -$output>fieldset.market>div.output>div.list div.item.card div.status { font-size:12px; } -$output>fieldset.market>div.output>div.list div.item.card div.status>span.username { color:var(--body-fg-color); font-size:14px; } -$output>fieldset.market>div.output>div.list div.item.card div.status>span.time { float:right; } +$output>fieldset.market>div.output>div.list div.item.card img { height:48px; width:48px; min-width:48px; } +$output>fieldset.market>div.output>div.list div.item.card div.status>span.username { + color:#576b95; font-weight:bold; font-size:14px; +} +$output>fieldset.market>div.output>div.list div.item.card div.status>span.time { float:right; line-height:20px; } $output>fieldset.market>div.output>div.list div.item.card div.output div.action { color:gray; font-size:14px; width:100%; max-width:100%; display:flex; justify-content:space-around; position:relative; } $output>fieldset.market>div.output>div.list div.item.card div.output div.action i { margin-right:5px; } $output>fieldset.market>div.output>div.list div.item.card div.output div.action div.item.done { color:var(--notice-bg-color); } $output.background>div.output { padding-top:80px; } -$output.public>div>div.list:not(.mylist)>div.title { display:none; } $output.public>div>div.list.myplace>div.output { padding:0; } $output.public>div>div.list.myplace div.item.card div.output { padding:0; } -body.dark $output>div>div.list.mynotice>span:first-child { background-color:var(--hover-bg-color); color:yellow; white-space:pre; } -body.width1 fieldset.panel.Action>div.output { background-color:var(--plugin-bg-color); } +$output.public>div>div.list:not(.mylist)>div.title { display:none; } body.width1 div.input.float { margin:0; width:100% !important; max-width:100% !important; } -body.width1 div.input.float input[name=submit] { background-color:var(--notice-bg-color); color:var(--notice-fg-color); } -body.width1 $output>div>div.list>div.title div.action div.item.filter input:focus { width:200px; transition:width 0.5s; } -body.width6 $output>div.output>div.code img.avatar { top:183px; } -body:not(.width1) $output div.item.card { flex-direction:row-reverse; } -body:not(.width1) $output div.item.card>div.action { position:static; flex-shrink:0; } -body:not(.width1) $output div.item.card>div.output { flex-grow:1; } -body:not(.width1) $output div.item.card div.title div.action { display:none; } -body:not(.mobile) $output fieldset.story>div.output div.item.card:not(:hover) { background-color:var(--output-bg-color); } -body:not(.mobile) $output div.tabs span:hover { background-color:var(--hover-bg-color); } -body:not(.mobile) $output>div>div.list>div.role span:hover { background-color:var(--hover-bg-color); } -body:not(.mobile) $output fieldset.story>div.output>div.code>input[type=button]:hover { border:var(--box-notice); background-color:transparent; color:var(--notice-bg-color); } +$body.width1.light div.inputs>div.input { background-color:var(--output-bg-color); height:100%; } +$body.width1.dark div.inputs>div.input { height:100%; } +$body.width1.dark div.inputs>div.input input[type=text] { border:none; } +$body.width1.dark div.inputs>div.input textarea { border:none; } +$body.width1 div.inputs>div.input.float>div.action { display:flex; } +$body.width1 div.upload.float { display:none; } +body.width1 $action div.item.text.filter { flex-grow:1; } +body.width1 $output div.item.card div.container>div.title>span.price { margin-left:auto; } +body.width1 $output div.item.card div.container>div.title>span.status { margin-left:auto; } +body.width1 $output fieldset.story>div.output>div.place_info { min-height:68px; } +body.width1 $output fieldset.story>div.output>div.place_info>div.item>div.output { background-color:var(--plugin-bg-color); } +body.width1 $output fieldset.story>div.output>table.detail tr.created_at { display:none; } +body.width1 $output fieldset.story>div.output>table.detail tr.updated_at { display:none; } +body.width1 $output fieldset.story>div.output>table.detail tr.user_name { display:none; } +body.width1 $output fieldset.story>div.output>table.detail tr.user_avatar { display:none; } +body:not(.mobile) $action div.item.button input:hover { background-color:var(--hover-bg-color); } body:not(.mobile) $action div.item.notice input[type=button]:hover { background-color:var(--notice-bg-color); color:var(--notice-fg-color); } -body.en $output>fieldset table.content td:first-child { max-width:190px; min-width:100px; width:unset;} -body.en $output>fieldset table.content td { padding: 10px 5px; } +body:not(.mobile) $output input.notice[type=button]:hover { background-color:var(--notice-bg-color); color:var(--notice-fg-color); } +body:not(.mobile) $output input.danger[type=button]:hover { background-color:var(--danger-bg-color); color:var(--danger-fg-color); } +body:not(.mobile) $output div.item.card div.container>div.action { display:none; } +body:not(.mobile) $output>div>div.list>div.role span:hover { background-color:var(--hover-bg-color); } +body:not(.mobile) $output div.tabs span:hover { background-color:var(--hover-bg-color); } +body:not(.mobile) $output fieldset.story>div.output>div.tabs>div.item:hover { background-color:var(--output-bg-color); } +body:not(.mobile) $output fieldset.story>div.output div.item.card:not(:hover) { background-color:var(--output-bg-color); } +body:not(.mobile) $output fieldset.story>div.output>div.code>input[type=button]:hover { border:var(--box-notice); background-color:transparent; color:var(--notice-bg-color); } +body.en $output>div>div.list>div.output>div.item.index span { font-family:monospace; } +body.en $output>fieldset.story table.content td { padding:10px 5px; } +body.en $output>fieldset.story table.content td:first-child { max-width:190px; min-width:100px; width:unset; } fieldset.web.team.storage.file div.item.card div.title span:first-child { flex-grow:1; } -body.width1>div.inputs>div.input { - height:100%; -} -$fieldset { box-shadow:none; } diff --git a/src/gonganxitong/portal.go b/src/gonganxitong/portal.go index 3315434..dd33e7d 100644 --- a/src/gonganxitong/portal.go +++ b/src/gonganxitong/portal.go @@ -7,7 +7,6 @@ import ( "shylinux.com/x/icebergs/base/aaa" "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/mdb" - "shylinux.com/x/icebergs/base/tcp" "shylinux.com/x/icebergs/base/web" kit "shylinux.com/x/toolkits" @@ -19,8 +18,8 @@ import ( type Portal struct { ice.Hash Table - user user city city + user user event event message message recent recent @@ -30,7 +29,7 @@ type Portal struct { field string `data:"time,icons,name,index,order,enable,type,auth,role,view,init,portal"` create string `name:"create index name icons"` list string `name:"list place_uid index uid auto" role:"void"` - placeCreate string `name:"placeCreate city_name* street_name* place_name* place_type:select address" icon:"bi bi-plus-circle" role:"void"` + placeCreate string `name:"placeCreate city_name*:select street_name* place_name* place_type:select address" icon:"bi bi-plus-circle" role:"void"` placeRemove string `name:"placeRemove" role:"void"` } @@ -44,19 +43,13 @@ func (s Portal) Exit(m *ice.Message, arg ...string) { s.Hash.Exit(m, arg...) } func (s Portal) BeforeMigrate(m *ice.Message, arg ...string) { - return - if m.Cmd(web.CODE_MYSQL_CLIENT).Length() == 0 { - if s.AutoCmd(m, web.CODE_MYSQL_CLIENT).Table(func(value ice.Maps) { m.Cmd(web.CODE_MYSQL_CLIENT, s.Create, aaa.SESS, "", kit.Simple(value)) }).Length() == 0 { - m.Cmd(web.CODE_MYSQL_CLIENT, s.Create, aaa.SESS, "mysql", "driver", "mysql", "database", "mysql", tcp.HOST, "localhost", tcp.PORT, "10001", aaa.USERNAME, "root", aaa.PASSWORD, "root") - } - } } func (s Portal) AfterMigrate(m *ice.Message, arg ...string) { if name := kit.Select("", kit.Split(m.PrefixKey(), "."), -2); !m.Exists("src/" + name) { return } cmd := m.GetCommand() - m.Cmdy(s.Prefix(m, s.service), s.Table.Update, ctx.INDEX, m.PrefixKey(), mdb.NAME, cmd.Help+" "+ice.Info.Title(), mdb.ICON, m.Resource(kit.Select(ice.Info.NodeIcon, cmd.Icon))) + m.Cmdy(s.PrefixService(m), s.Table.Update, ctx.INDEX, m.PrefixKey(), mdb.NAME, cmd.Help+" "+ice.Info.Title(), mdb.ICON, m.Resource(kit.Select(ice.Info.NodeIcon, cmd.Icon))) m.Cmd(command{}).Table(func(value ice.Maps) { if kit.HasSuffix(value[model.INDEX], ".allow") { cmdPortal[kit.ReplaceAll(value[model.INDEX], ".allow", ".portal")] = value[model.PORTAL] @@ -89,7 +82,7 @@ func (s Portal) Run(m *ice.Message, arg ...string) { s.DisplayBase(m, "common.js") m.Option(model.SERVICE_UID, ServiceUID(m)) m.Option(model.COMMAND_UID, CommandUID(m, arg[0])) - m.OptionDefault(ice.MSG_USERUID, m.Option(model.USER_UID)) + m.OptionDefault(model.USER_UID, m.Option(ice.MSG_USERUID)) m.OptionDefault(model.PLACE_UID, m.Option(s.Keys(s.Place, model.UID))) m.Search(arg[0], func(key string, cmd *ice.Command) { role := cmd.Role @@ -132,6 +125,7 @@ func (s Portal) Run(m *ice.Message, arg ...string) { }) } func (s Portal) List(m *ice.Message, arg ...string) { + m.OptionDefault(model.USER_UID, m.Option(ice.MSG_USERUID)) if m.Option(mdb.VIEW) == mdb.TABLE || len(arg) > 0 && arg[0] == mdb.TABLE { s.Hash.List(m, kit.Slice(arg, 1)...).PushAction(mdb.DETAIL, s.Hash.Remove).Action().SortInt(mdb.ORDER) return @@ -148,62 +142,59 @@ func (s Portal) List(m *ice.Message, arg ...string) { if m.Cmd(s.user, s.Table.Select, model.UID, m.Option(model.USER_UID)).Length() == 0 { m.Cmd(s.user, s.Table.Insert, model.UID, m.Option(model.USER_UID), model.OPEN_ID, m.Option(ice.MSG_USERNAME), model.NAME, m.OptionDefault(ice.MSG_USERNICK, m.Option(ice.MSG_USERNAME))) } - m.Option(model.SERVICE_UID, ServiceUID(m)) - if len(arg) == 0 { + if m.Option(model.SERVICE_UID, ServiceUID(m)); len(arg) == 0 { m.Cmdy(m.PrefixKey(), s.PlaceList, m.Option(model.USER_UID)).PushAction(s.PlaceRemove).Action(s.PlaceCreate) kit.If(m.Length() > 0, func() { m.EchoQRCode(m.Cmdx("", s.Link)) }) s.Button(m, "", s.PlaceCreate) } else { if msg := s.PlaceListOption(m, arg...); arg[0] != "" && msg.Length() > 0 { - defer s.AddRecent(msg, arg[0]) defer m.EchoQRCode(m.Cmdx("", s.Link, arg[0])) + defer s.AddRecent(msg, arg[0]) } s.Hash.List(m).SortInt(mdb.ORDER) m.RewriteAppend(func(value, key string, index int) string { - if key == "icons" { + kit.If(key == mdb.ICONS && !strings.Contains(value, "bi "), func() { value = m.Resource(value) - } + }) return value }) } s.Place.RewriteAppend(m) - if true { - p := kit.ExtChange(m.Resource(ctx.GetCmdFile(m.Message, m.PrefixKey())), "js") - defer func() { m.Option(ice.MSG_DISPLAY, p+","+m.Option(ice.MSG_DISPLAY)) }() - } + p := kit.ExtChange(m.Resource(ctx.GetCmdFile(m.Message, m.PrefixKey())), "js") + defer func() { m.Option(ice.MSG_DISPLAY, p+","+m.Option(ice.MSG_DISPLAY)) }() s.DisplayBase(m, "").DisplayCSS("") } -func (s Portal) PlaceListOption(m *ice.Message, arg ...string) *ice.Message { - msg := m.Cmd("", s.PlaceList, m.Option(model.USER_UID), arg[0]) - if msg.Length() == 0 { - msg = m.Cmd(s.Place, s.Table.Select, model.UID, arg[0]) - if msg.Length() == 0 { - return msg - } - msg.Push(s.Keys(s.UserPlace, model.ROLE), "0") - msg.RenameAppend(model.NAME, s.Keys(s.Place, model.NAME), - model.INFO, s.Keys(s.Place, model.INFO), - model.AVATAR, s.Keys(s.Place, model.AVATAR), - model.TYPE, s.Keys(s.Place, model.TYPE), - ) - s.SelectJoin(msg, s.Street, model.NAME, model.CITY_UID) - s.SelectJoinCity(msg) - s.SelectJoinAuth(msg) - } - if kit.Int(msg.Append(s.Keys(s.UserPlace, model.ROLE))) == 0 { - msg.Append(model.DASHBOARD_UID, "") - } - s.Place.RewriteAppend(msg) - m.Options(msg.AppendSimple(model.CITY_NAME, s.Keys(s.Street, model.NAME), - s.Keys(s.Place, model.NAME), s.Keys(s.Place, model.TYPE), s.Keys(s.UserPlace, model.ROLE), model.MEMBER_STATUS, - model.AUTH_STATUS, model.AUTH_NAME, model.AUTH_INFO, model.AUTH_AVATAR, model.AUTH_BACKGROUND, model.DASHBOARD_UID, - )) - m.Option(model.STREET_NAME, msg.Append(s.Keys(s.Street, model.NAME))) - m.Option(model.PLACE_NAME, msg.Append(s.Keys(s.Place, model.NAME))) - m.Option("portal_icon", m.Resource(kit.Select(ice.Info.NodeIcon, m.GetCommand().Icon))) - m.Option("space_title", ice.Info.Titles) - return msg + +func (s Portal) Create(m *ice.Message, arg ...string) { + args := m.OptionSimple(ctx.INDEX) + msg := s.Hash.Select(m.Spawn(), m.Option(ctx.INDEX)) + kit.If(msg.Length() > 0, func() { args = append(args, mdb.TIME, msg.Append(mdb.TIME)) }) + m.Search(m.Option(ctx.INDEX), func(key string, cmd *ice.Command) { + args = append(args, mdb.NAME, cmd.Help, mdb.ICONS, cmd.Icon) + kit.For([]string{mdb.ORDER, mdb.TYPE, aaa.AUTH, aaa.ROLE, mdb.VIEW, web.PORTAL}, func(key string) { + value := m.Conf(m.Option(ctx.INDEX), kit.Keym(key)) + args = append(args, key, kit.Select(value, msg.Append(key))) + }) + }) + s.Hash.Create(m, args...) } +func (s Portal) Remove(m *ice.Message, arg ...string) { s.Hash.Remove(m, arg...) } +func (s Portal) Modify(m *ice.Message, arg ...string) { s.Hash.Modify(m, arg...) } +func (s Portal) Show(m *ice.Message, arg ...string) { + m.Cmd(s.Prefix(m, s), s.Create, ctx.INDEX, m.PrefixKey()) +} +func (s Portal) Link(m *ice.Message, arg ...string) *ice.Message { + if len(arg) == 0 { + return m.Echo(m.MergePodCmd("", s.Prefix(m, s))) + } + p := m.MergePodCmd("", s.Prefix(m, s), s.Keys(s.Place, model.UID), arg[0]) + if len(arg) == 1 { + return m.Echo(p) + } + h := kit.TrimSuffix(kit.Join([]string{arg[0], kit.Select("", arg, 1), kit.Select("", arg, 2)}, ":"), ":", ":") + return m.Echo(p + "#" + h) +} + func (s Portal) PlaceCreate(m *ice.Message, arg ...string) { if s.city.FindOrCreateByName(m, arg...); m.IsErr() { return @@ -227,6 +218,56 @@ func (s Portal) PlaceRemove(m *ice.Message, arg ...string) { m.Cmd("", s.BeforePlaceRemove, m.OptionSimple(model.USER_UID, model.UID)) 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.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 { + m.FieldsSetDetail().Cmdy(s.UserPlace, s.Table.Select, model.USER_UID, arg[0], s.Keys(s.Place, model.UID), arg[1]) + } else { + return m + } + s.SelectJoin(m, s.Street, model.NAME, model.CITY_UID) + s.SelectJoinCity(m) + s.SelectJoinAuth(m) + return m +} +func (s Portal) PlaceListOption(m *ice.Message, arg ...string) *ice.Message { + msg := m.Cmd("", s.PlaceList, m.Option(model.USER_UID), arg[0]) + if msg.Length() == 0 { + msg = m.Cmd(s.Place, s.Table.Select, model.UID, arg[0]) + if msg.Length() == 0 { + return msg + } + msg.Push(s.Keys(s.UserPlace, model.ROLE), "0") + msg.RenameAppend( + model.NAME, s.Keys(s.Place, model.NAME), + model.INFO, s.Keys(s.Place, model.INFO), + model.TYPE, s.Keys(s.Place, model.TYPE), + model.AVATAR, s.Keys(s.Place, model.AVATAR), + ) + s.SelectJoin(msg, s.Street, model.NAME, model.CITY_UID) + s.SelectJoinCity(msg) + s.SelectJoinAuth(msg) + } + if kit.Int(msg.Append(s.Keys(s.UserPlace, model.ROLE))) == 0 { + msg.Append(model.DASHBOARD_UID, "") + } + s.Place.RewriteAppend(msg) + m.Options(msg.AppendSimple(model.CITY_NAME, s.Keys(s.Street, model.NAME), + s.Keys(s.Place, model.NAME), s.Keys(s.Place, model.TYPE), s.Keys(s.UserPlace, model.ROLE), model.MEMBER_STATUS, + model.AUTH_STATUS, model.AUTH_NAME, model.AUTH_INFO, model.AUTH_AVATAR, model.AUTH_BACKGROUND, model.DASHBOARD_UID, + )) + m.Option(model.PLACE_NAME, msg.Append(s.Keys(s.Place, model.NAME))) + m.Option(model.STREET_NAME, msg.Append(s.Keys(s.Street, model.NAME))) + m.Option("portal_icon", m.Resource(kit.Select(ice.Info.NodeIcon, m.GetCommand().Icon))) + m.Option("space_title", ice.Info.Titles) + return msg +} func (s Portal) PlaceCheck(m *ice.Message, arg ...string) { if m.PrefixKey() == api.RENZHENGSHOUQUAN_PORTAL { return @@ -281,24 +322,6 @@ func (s Table) PlaceTrash(m *ice.Message, arg ...string) { m.Push("table", s.TableNames(s.Place)).Push(model.PLACE_UID, "place_uid") } } -func (s Portal) PlaceList(m *ice.Message, arg ...string) *ice.Message { - 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 { - m.FieldsSetDetail().Cmdy(s.UserPlace, s.Table.Select, model.USER_UID, arg[0], s.Keys(s.Place, model.UID), arg[1]) - } else { - return m - } - s.SelectJoin(m, s.Street, model.NAME, model.CITY_UID) - s.SelectJoinCity(m) - s.SelectJoinAuth(m) - return m -} func (s Portal) PlaceAuth(m *ice.Message, arg ...string) { if m.Option(model.AUTH_UID) != "" { return @@ -317,6 +340,23 @@ func (s Portal) PlaceAuth(m *ice.Message, arg ...string) { msg.Append(model.AUTH_UID, m.Option(model.AUTH_UID)) msg.Cmd(s.Prefix(msg, s), s.AfterPlaceAuth) } +func (s Portal) PlaceCmd(m *ice.Message, arg ...string) { + m.Cmdy(s.Place, arg) +} +func (s Portal) UserPlaceCmd(m *ice.Message, arg ...string) { + m.Cmdy(s.UserPlace, arg) +} +func (s Portal) UserPlaceRole(m *ice.Message, arg ...string) *ice.Message { + if m.Option(model.USER_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 +} func (s Portal) ValueCreate(m *ice.Message, arg ...string) { s.Table.Insert(m, kit.Simple(arg, m.OptionSimple(s.Keys(s.Place, model.UID), model.USER_UID))...) @@ -352,6 +392,9 @@ func (s Portal) ValueList(m *ice.Message, arg ...string) { m.PushAction(s.Remove) } } + +func init() { ice.TeamCtxCmd(Portal{Table: newTable()}) } + func (s Portal) BeforePlaceCreate(m *ice.Message, arg ...string) {} func (s Portal) AfterPlaceCreate(m *ice.Message, arg ...string) {} func (s Portal) BeforePlaceRemove(m *ice.Message, arg ...string) {} @@ -361,26 +404,6 @@ func (s Portal) AfterPlaceTrash(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) { - args := kit.Simple(model.PLACE_UID, arg[0], model.PLACE_AVATAR, m.Resource(kit.Select( - ice.Info.NodeIcon, m.GetCommand().Icon, m.Option(model.AVATAR), m.Option(model.AUTH_AVATAR), - )), m.OptionSimple(model.SERVICE_UID, model.PLACE_NAME, model.STREET_NAME, model.CITY_NAME)) - kit.If(kit.IsIn(m.Append(model.AUTH_STATUS), "2", "issued"), func() { args = append(args, model.AUTH_STATUS, "2") }) - m.Cmd(s.Prefix(m, s.recent), s.Create, args) -} -func (s Portal) RecordEvent(m *ice.Message, arg ...string) { - s.event.Record(m.Spawn(kit.Dict(model.PLACE_UID, m.Option(s.Keys(s.Place, model.UID)))), arg[0], arg[1:]...) -} -func (s Portal) MarketInsert(m *ice.Message, arg ...string) { - // m.Option(model.PLACE_UID, m.Option(s.Keys(s.Place, model.UID))) - m.Option(ctx.ARGS, kit.Join([]string{m.Option(model.PLACE_UID), m.Option(model.UID)})) - m.Cmdy(s.Prefix(m, market{}), s.Create, arg) -} -func (s Portal) PushPublic(m *ice.Message, arg ...string) { - m.Option(model.PLACE_UID, m.Option(s.Keys(s.Place, model.UID))) - m.Option(ctx.ARGS, kit.Join([]string{m.Option(model.PLACE_UID), m.Option(model.UID)})) - m.Cmdy(s.Prefix(m, market{}), s.Create, arg) -} func (s Portal) DashboardCreate(m *ice.Message, name string, arg ...string) func() { defer s.SaveBack(m, ice.MSG_USERPOD)() kit.If(name == "", func() { name = m.Option(s.Keys(s.Place, model.NAME)) }) @@ -406,31 +429,16 @@ func (s Portal) StorageCreate(m *ice.Message, name string, arg ...string) { func (s Portal) StorageInsert(m *ice.Message, title, content string) { // s.AutoCmd(m, api.STORAGE_FILE, s.Insert, model.TITLE, title, model.CONTENT, content, m.OptionSimple(model.STORAGE_UID, model.USER_UID)) } -func (s Table) NoticeList(m *ice.Message, arg ...string) { - s.Limit(m, 1) - m.Cmdy(s.Prefix(m, notice{}), 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 init() { ice.TeamCtxCmd(Portal{Table: newTable()}) } - -func (s Portal) UserPlaceRole(m *ice.Message, arg ...string) *ice.Message { - if m.Option(model.USER_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 +func (s Portal) AddRecent(m *ice.Message, arg ...string) { + args := kit.Simple(model.PLACE_UID, arg[0], model.PLACE_AVATAR, m.Resource(kit.Select( + ice.Info.NodeIcon, m.GetCommand().Icon, m.Option(model.AVATAR), m.Option(model.AUTH_AVATAR), + )), m.OptionSimple(model.SERVICE_UID, model.PLACE_NAME, model.STREET_NAME, model.CITY_NAME)) + kit.If(kit.IsIn(m.Append(model.AUTH_STATUS), "2", "issued"), func() { args = append(args, model.AUTH_STATUS, "2") }) + m.Cmd(s.PrefixRecent(m), s.Create, args) } -func (s Portal) UserPlaceCmd(m *ice.Message, arg ...string) { - m.Cmdy(s.UserPlace, arg) -} -func (s Portal) PlaceCmd(m *ice.Message, arg ...string) { - m.Cmdy(s.Place, arg) -} - func (s Portal) CommandUpdate(m *ice.Message, arg ...string) { s.Hash.Select(m.Spawn()).Table(func(value ice.Maps) { m.Cmdx(command{}, s.Table.Modify, model.SERVICE_UID, arg[0], model.INDEX, value[model.INDEX], model.NAME, value[model.NAME], mdb.ICON, value[mdb.ICONS]) @@ -439,35 +447,3 @@ func (s Portal) CommandUpdate(m *ice.Message, arg ...string) { func (s Portal) CommandSelect(m *ice.Message, arg ...string) { s.Hash.Select(m, arg...) } - -func (s Portal) Create(m *ice.Message, arg ...string) { - args := m.OptionSimple(ctx.INDEX) - msg := s.Hash.Select(m.Spawn(), m.Option(ctx.INDEX)) - kit.If(msg.Length() > 0, func() { args = append(args, mdb.TIME, msg.Append(mdb.TIME)) }) - m.Search(m.Option(ctx.INDEX), func(key string, cmd *ice.Command) { - args = append(args, mdb.NAME, cmd.Help, mdb.ICONS, cmd.Icon) - kit.For([]string{mdb.ORDER, mdb.TYPE, aaa.ROLE, aaa.AUTH, mdb.VIEW}, func(key string) { - value := m.Conf(m.Option(ctx.INDEX), kit.Keym(key)) - args = append(args, key, kit.Select(value, msg.Append(key))) - }) - }) - s.Hash.Create(m, args...) -} -func (s Portal) Remove(m *ice.Message, arg ...string) { s.Hash.Remove(m, arg...) } -func (s Portal) Modify(m *ice.Message, arg ...string) { s.Hash.Modify(m, arg...) } -func (s Portal) Show(m *ice.Message, arg ...string) { - m.Cmd(s.Prefix(m, s), s.Create, ctx.INDEX, m.PrefixKey()) -} -func (s Portal) Link(m *ice.Message, arg ...string) *ice.Message { - if len(arg) == 0 { - return m.Echo(m.MergePodCmd("", s.Prefix(m, s))) - } - p := m.MergePodCmd("", s.Prefix(m, s), s.Keys(s.Place, model.UID), arg[0]) - if len(arg) == 1 { - return m.Echo(p) - } - h := kit.TrimSuffix(kit.Join([]string{arg[0], kit.Select("", arg, 1), kit.Select("", arg, 2)}, ":"), ":", ":") - return m.Echo(p + "#" + h) -} - -func init() { ice.TeamCtxCmd(Portal{Table: newTable()}) } diff --git a/src/gonganxitong/portal.js b/src/gonganxitong/portal.js index 2b66b81..97d7bb4 100644 --- a/src/gonganxitong/portal.js +++ b/src/gonganxitong/portal.js @@ -2,29 +2,7 @@ var UID = "uid", PLACE_UID = "place_uid", PLACE_NAME = "place_name", PLACE_TYPE var USER_UID = "user_uid", USER_ROLE = "user_role", AUTH_UID = "auth_uid", AUTH_TYPE = "auth_type" var TYPE = "type", ROLE = "role", STATUS = "status" Volcanos(chat.ONIMPORT, { - _init: function(can, msg) { - can.onappend.style(can, html.OUTPUT), can.onimport.myPortal(can, msg) - }, - otherList: function(can, msg, action) { - if (!msg.IsDetail()) { return } typeof action == "string" && (action = [action]) - can.core.Next(action, function(action, next) { - can.run(can.request({}, {uid: msg.Append(UID)}, msg.TableDetail()), action, function(msg) { if (msg.Length() == 0) { return next() } - can.page.Append(can, can._output, [{view: [[html.ITEM, html.TITLE, action], "", can.user.trans(can, action)]}]) - can.onappend.plugin(can, {index: can.ConfIndex()}, function(sub) { can.onimport.myField(can, sub) - can.onappend.style(sub, "otherList") - sub.run = function(event, cmds, cb) { - if (!cmds || cmds.length == 0) { cb(msg) } else { can.run(event, cmds, cb) } - }, next() - sub.onexport.output = function(_sub, msg) { - _sub.onaction.carddetail = function(event, _sub, value) { - can.onimport.myStory(can, {index: msg.Option("_other_cmd"), args: [value.place_uid||msg.Option("place_uid"), value.uid]}) - return true - } - } - }) - }) - }) - }, + _init: function(can, msg) { can.onappend.style(can, html.OUTPUT), can.onimport.myPortal(can, msg) }, qrcode: function(can, msg, avatar, target) { target = target||can.ui.output, can.onappend.board(can, msg, target) can.page.Append(can, can.page.SelectOne(can, target, "div.code"), [{img: can.misc.Resource(can, avatar||can.ConfIcons()||can.user.info.favicon), className: "avatar"}]) }, @@ -51,57 +29,49 @@ Volcanos(chat.ONIMPORT, { }, myPortal: function(can, msg) { can.sup.current = {} can.page.tagis(document.body, "body.width1") && (can.user.isMobile = true, can.sup.user.isMobile = true) - can.onmotion.delay(can, function() { - can.page.tagis(document.body, "body.width1") && (can.user.isMobile = true, can.sup.user.isMobile = true) - }, 300) + can.onmotion.delay(can, function() { can.page.tagis(document.body, "body.width1") && (can.user.isMobile = true, can.sup.user.isMobile = true) }, 300) can.core.List(["_place_uid", "_place_name", "_place_type", "_user_place_role", "_street_name"], function(key) { can.Conf(key, msg.Option(key)) }) var PLACE_UID = can.Conf("_place_uid"), PLACE_NAME = can.Conf("_place_name"), PLACE_TYPE = can.Conf("_place_type") var USER_PLACE_ROLE = can.Conf("_user_place_role"), STREET_NAME = can.Conf("_street_name") can.user.isMobile && (can.db.hash = []) - can.isCmdMode() && (can.db.hash = can.base.Obj(can.misc.SearchHash(can), can.db.hash)), can.db.hash[0] && can.onexport.place(can, can.db.hash[0]) + can.isCmdMode() && !can.sup._portal_init && (can.db.hash = can.base.Obj(can.misc.SearchHash(can), can.db.hash)), can.sup._portal_init = true, can.db.hash[0] && can.onexport.place(can, can.db.hash[0]) can.isCmdMode() && msg.Option("auth_avatar") && can.page.Append(can, document.head, [{type: "link", href: msg.Option("auth_avatar"), rel: "shortcut icon"}]) if (can.sup._goback) { can.db.hash = can.db.hash.slice(0, 1) } + if (can.db.hash.length == 1 && can.db.hash[0].length != 32) { can.db.hash = [can.Option(can.core.Item(can.Option())[0]), can.db.hash[0]] } if (can.db.hash.length > 1 && can.db.hash[1] && can.db.hash[1] != can.ConfIndex()) { can.sup.current = can.onimport.myTrans(can, kit.Dict(msg.OptionSimple(PLACE_UID, PLACE_NAME, PLACE_TYPE, USER_PLACE_ROLE, STREET_NAME, CITY_NAME))) return can.runAction({}, ctx.COMMAND, [can.db.hash[1]], function(msg) { msg.Table(function(value) { value.args = [can.db.hash[0]].concat(can.db.hash.slice(2)), can.onimport.myStory(can, value) }) }) - } else { } can.ui = can.page.Append(can, can._output, [{view: html.HEADER}, - {view: html.OUTPUT, list: ["myplace.list", "myinit.list", "mycount.list", "mynotice.list", "myindex.list", "myallow.list", "mylist.list"]}, + {view: html.OUTPUT, list: [ + "myplace.list", "myinit.list.hide", "mycount.list.hide", "mynotice.list.hide", + "myindex.list.hide", "myallow.list.hide", "mylist.list.hide", + ]}, {view: html.ACTION, list: ["myorder.list"]}, ]) - can.onmotion.hidden(can, can.ui.myinit) - can.onmotion.hidden(can, can.ui.mycount) - can.onmotion.hidden(can, can.ui.mynotice) - can.onmotion.hidden(can, can.ui.myallow) - can.onmotion.hidden(can, can.ui.mylist) function showIndex(msg) { if (msg.Length() == 0) { return } can.onimport.myCount(can, msg, can.ui.mycount) can.onimport.myNotice(can, msg, can.ui.mynotice) - can.onimport.myIndex(can, msg, can.ui.myindex), can.onexport.index(can, can.sup.current) - can.onimport.myAllow(can, msg, can.ui.myallow) + can.onimport.myIndex(can, msg, can.ui.myindex), can.onexport.index(can, can.sup.current, "", can.ui.myindex) + can.onimport.myAllow(can, msg, can.ui.myallow), can.onexport.index(can, can.sup.current, "", can.ui.myallow) can.onimport.myOrder(can, msg, can.ui.myorder) } if (can.Option(PLACE_UID) == "") { var uid = can.onimport.myPlace(can, msg, can.ui.myplace) if (msg.Length() > 0) { msg.Echo(can.ConfHelp()+" "+can.user.info.titles) can.misc.isDebug(can) && can.onimport.qrcode(can, msg) } else { - can.user.agent.init(can, location.hostname, can.misc.Resource(can, can.ConfIcons())) + // can.user.agent.init(can, location.hostname, can.misc.Resource(can, can.ConfIcons())) } msg.Length() > 0? can.run({}, [uid], function(msg) { showIndex(can._index_msg = msg) }): can.run({}, [uid], function(msg) { can.onimport.myOrder(can, can._index_msg = msg, can.ui.myorder) }) - } else { can.onappend.style(can, "public", can._output) - can.Conf(mdb.ICONS, msg.Option("portal_icon")) + } else { can.onappend.style(can, "public", can._output), can.Conf(mdb.ICONS, msg.Option("portal_icon")) var _msg = can.request({}); if (msg.Option(PLACE_NAME)) { _msg.Push(kit.Dict(UID, "", msg.OptionSimple( PLACE_UID, PLACE_NAME, PLACE_TYPE, USER_PLACE_ROLE, STREET_NAME, CITY_NAME, - "member_status", "auth_status", "auth_name", "auth_info", "auth_avatar", "auth_background", "dashboard_uid", - "space_title", + "member_status", "auth_status", "auth_name", "auth_info", "auth_avatar", "auth_background", "dashboard_uid", "space_title", ))) } can.onimport.myPlace(can, _msg, can.ui.myplace) if (_msg.Length() == 0) { can.onimport.myOrder(can, msg, can.ui.myorder) } else { showIndex(can._index_msg = msg) } - // can.user.agent.init(can, [msg.Option(CITY_NAME), msg.Option(STREET_NAME), msg.Option("auth_info")].join(" "), msg.Option("auth_avatar")) msg.Echo([msg.Option(CITY_NAME), msg.Option(STREET_NAME), msg.Option(PLACE_NAME)].join(" ")) - // can.onexport.value(can, can.sup.current) can.misc.isDebug(can) && can.onimport.qrcode(can, msg, can.sup.current.auth_avatar) } }, @@ -172,17 +142,7 @@ Volcanos(chat.ONIMPORT, { value.type? [mdb.TYPE]: [], can.core.Split(value.type||""), value.role? [aaa.ROLE]: [], can.core.Split(value.role||""), value.auth, value.view, )], style: {width: width}, list: [ - cmd == "market"? {icon: "bi bi-ubuntu"}: - cmd == "message"? {icon: "bi bi-card-checklist"}: - cmd == "recent"? {icon: "bi bi-clock-history"}: - cmd == "service"? {icon: "bi bi-box"}: - cmd == "support"? {icon: "bi bi-opencollective"}: - cmd == "qrcode"? {icon: "bi bi-qr-code"}: - cmd == "apply"? {icon: "bi bi-pencil-square"}: - cmd == "allow"? {icon: "bi bi-clipboard-check"}: - cmd == "event"? {icon: "bi bi-calendar4-week"}: - cmd == "notice"? {icon: "bi bi-megaphone"}: - {img: can.misc.ResourceIcons(can, value.icons)}, + can.onimport.imageView(can, value), {text: can.user.trans(can, value.index.split(".").pop(), value.name)}, ], onclick: function(event) { can.onimport.myStory(can, {space: can.ConfSpace(), index: value.index, args: [can.onexport.place(can)||can.misc.Search(can, can.Conf("_place_uid"))]}) @@ -215,10 +175,7 @@ Volcanos(chat.ONIMPORT, { }, layout: function(can) { can.ui.tabs && can.ui.list && can.page.styleHeight(can, can.ui.list, can.ConfHeight()-can.ui.tabs.offsetHeight) - if (can.ui.action && can.ui.output) { - // can.page.style(can, can.ui.output, html.HEIGHT, (can.user.isMobile? window.innerHeight: can.ConfHeight()) - can.ui.action.offsetHeight) - can.page.style(can, can.ui.output, html.HEIGHT, (can.ConfHeight()) - can.ui.action.offsetHeight) - } + if (can.ui.action && can.ui.output) { can.page.style(can, can.ui.output, html.HEIGHT, (can.ConfHeight()) - can.ui.action.offsetHeight) } }, }) Volcanos(chat.ONACTION, { @@ -227,9 +184,10 @@ Volcanos(chat.ONACTION, { can.user.isMobile && can.page.style(can, sub._target, html.MAX_HEIGHT, can.page.height()) can.user.isMobile && can._root.Inputs && can._root.Inputs.appendChild(sub._target) can.user.isMobile && can.page.style(can, can._root.Action._output, html.VISIBILITY, html.HIDDEN) + if (!can.misc.isDebug(can)) { return } + if (!can.user.isTechOrRoot(can)) { return } sub.Option("city_name", "深圳市") sub.Option("company_name", "云轩领航") - if (!can.misc.isDebug(can)) { return } sub.Option("street_name", "粤海街道") sub.Option("school_name", "深圳中学") sub.Option("place_name", "软件产业基地") @@ -269,7 +227,9 @@ Volcanos(chat.ONACTION, { }) 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.sup.current = value, can.onexport.index(can, can.sup.current) + value: function(can, value) { if (!value || !value._uid) { return } can.sup.current = value + can.onexport.index(can, can.sup.current) + can.onexport.index(can, can.sup.current, "", can.ui.myallow) can.onexport.place(can, value._uid), can.onexport.hash(can, value._uid), can.onexport.title(can, value._name, can.ConfHelp()) can.page.Select(can, can.ui._target, "div.item.card.uid-"+value._uid, function(target) { can.onmotion.select(can, can.ui._target, html.DIV_ITEM, target) @@ -279,18 +239,19 @@ Volcanos(chat.ONEXPORT, { can.ui.myinit && can.onimport.myInit(can, can._index_msg, value, can.ui.myinit) can.ui.mycount && can.onimport.myCount(can, value, can.ui.mycount) can.ui.mynotice && can.onimport.myNotice(can, value, can.ui.mynotice) - can.ui.myallow && can.onmotion.toggle(can, can.ui.myallow, status && (value._role == "creator" || parseInt(value._role) > 0 || can.page.Select(can, can.ui.myallow, "div.item.index.role."+value._role).length > 0)) + can.ui.myallow && can.onmotion.toggle(can, can.ui.myallow, can.user.isTechOrRoot(can) || status && (value._role == "creator" || parseInt(value._role) > 0 || can.page.Select(can, can.ui.myallow, "div.item.index.role."+value._role).length > 0)) can.ui.myindex && can.onmotion.toggle(can, can.ui.myindex, status) - if (!can.onmotion.cache(can, function() { return value._uid }, can.ui.header) && value.auth_background) { - // can.page.Append(can, can.ui.header, [{img: value.auth_background}]) - // can.page.ClassList.set(can, can._output, "background", !!can.ui.header.innerHTML) - } + if (!can.onmotion.cache(can, function() { return value._uid }, can.ui.header) && value.auth_background) {} can.onimport.myOption(can.sup) }, - index: function(can, value, role) { role = role||value._role + index: function(can, value, role, _target) { role = role||value._role can.ui.role && can.onmotion.toggle(can, can.ui.role, value._role == "creator") parseInt(role) > 0 || can.ui.role && can.onmotion.select(can, can.ui.role, html.SPAN, can.page.SelectOne(can, can.ui.role, "span."+role)) - can.page.Select(can, can.ui.myindex, html.DIV_ITEM, function(target) { var list = target.className.split(" ") + can.page.Select(can, _target||can.ui.myindex, html.DIV_ITEM, function(target) { var list = target.className.split(" ") + if (_target == can.ui.myallow && can.user.isTechOrRoot(can)) { + can.onmotion.toggle(can, target, true) + return + } if (list.indexOf(log.DEBUG) > -1 && !can.misc.isDebug(can)) { can.onmotion.toggle(can, target, false) } else if (list.indexOf(aaa.TECH) > -1 && !can.user.isTechOrRoot(can)) { diff --git a/src/gonganxitong/portal.json b/src/gonganxitong/portal.json index b819f8e..9a7a403 100644 --- a/src/gonganxitong/portal.json +++ b/src/gonganxitong/portal.json @@ -1,36 +1,40 @@ { "portal": "用户场景", "placeCreate": "创建", "placeRemove": "删除", - "credit": "用户名片", "member": "组织成员", - "goodslist": "在线商城", "paymentlist": "在线支付", - "meeting": "在线会议", "document": "在线文档", "contract": "在线合同", "photo": "在线相册", - "email": "邮箱配置", "setting": "服务配置", + "credit": "用户名片", "member": "组织成员", "setting": "服务配置", "qrcode": "场景码", "event": "事件流", "apply": "权限申请", "allow": "权限审批", "notice": "通知公告", - "domain": "领域分类", "market": "人民广场", "message": "消息待办", "recent": "最近访问", "service": "服务发现", "support": "客服支持", - "cancel": "取消", "submit": "提交", "finish": "完成", "reject": "驳回", "approve": "通过", - "read": "已读", "done": "完成", "sticky": "置顶", "unSticky": "取消置顶", - "autogen": "生成", "compile": "编译", "oauth": "授权", "project": "项目", - "marketInsert": "推广", - "marketPlaceEnter": "进入", - "pushPublic": "推广", - "process": "开始", - "applyCreate": "申请权限", - "commentCreate": "评论", "applyQRCode": "邀请码", - "user": "用户信息", "city": "城市信息", "street": "街道信息", "school": "学校信息", "company": "公司信息", + "market": "人民广场", "message": "消息待办", "recent": "最近访问", "service": "服务发现", "support": "客服支持", "auth": "认证", "authCreate": "认证申请", "authCity": "城市认证", "authPersonal": "个人认证", "authService": "服务认证", "authCompany": "公司认证", + "autogen": "生成", "compile": "编译", "oauth": "授权", "project": "项目", + "read": "已读", "done": "完成", "sticky": "置顶", "unSticky": "取消置顶", + "cancel": "取消", "submit": "提交", "finish": "完成", "reject": "驳回", "approve": "通过", "process": "开始", + "pushPublic": "推广", "marketInsert": "推广", + "marketPlaceEnter": "进入系统", + "messagePlaceEnter": "进入系统", + "applyCreate": "申请权限", "commentCreate": "评论", "applyQRCode": "邀请码", "config": "配置", "code": "编程", "data": "数据", "cache": "缓存", "promote": "升级", "demote": "降级", + "clean": "数据清理", "domain": "领域分类", + "city": "城市", + "user": "城市", "icons": { + "qrcode": "bi bi-qr-code", + "apply": "bi bi-pencil-square", + "allow": "bi bi-clipboard-check", + "event": "bi bi-calendar4-week", + "notice": "bi bi-megaphone", "market": "bi bi-ubuntu", "message": "bi bi-card-checklist", - "goodslist": "https://img.icons8.com/officel/80/online-store.png", - "paymentlist": "https://img.icons8.com/officel/80/online-payment-with-a-credit-card.png", - "meeting": "https://img.icons8.com/officel/80/video-conference.png", - "document": "https://img.icons8.com/officel/80/documents.png", - "contract": "https://img.icons8.com/officel/80/agreement.png", - "photo": "https://img.icons8.com/officel/80/ios-photos.png" + "recent": "bi bi-clock-history", + "service": "bi bi-box", + "support": "bi bi-opencollective", + "clean": "bi bi-recycle", + "user": "bi bi-recycle", + "city": "bi bi-recycle", + "domain": "bi bi-grid-3x2-gap" }, "style": { "marketPlaceEnter": "notice", + "messagePlaceEnter": "notice", "reject": "danger", "approve": "notice", "disable": "danger", @@ -41,9 +45,6 @@ }, "input": { "place": "场景", - "process_time": "开始时间", - "plan_status": "计划状态", - "task_count": "任务数量", "My Place": "我的场景", "user_uid": "用户", "user_name": "用户昵称", @@ -67,7 +68,6 @@ "auth_status": "认证状态", "auth_avatar": "认证头像", "auth_background": "认证背景", - "paymentlist_status": "支付状态", "qrcode_type": "链接类型", "apply_status": "申请状态", "allow_status": "审批状态", @@ -88,7 +88,10 @@ "init": "初始化", "info": "详情", "class": "基类", - "table": "应用" + "table": "应用", + "process_time": "开始时间", + "plan_status": "计划状态", + "task_count": "任务数量" }, "value": { "user_place_role": { diff --git a/src/gonganxitong/qrcode.go b/src/gonganxitong/qrcode.go index 4ab587e..7783d1d 100644 --- a/src/gonganxitong/qrcode.go +++ b/src/gonganxitong/qrcode.go @@ -18,8 +18,7 @@ type qrcode struct { } func (s qrcode) ApplyQRCode(m *ice.Message, arg ...string) { - m.Option(ice.MSG_FG, "blue") - s.info(m, arg[0], "apply") + s.info(m.Options(ice.MSG_FG, "blue"), arg[0], "apply") s.EchoQRCode(m, arg[0], s.Prefix(m, s.apply)).Echo("请让申请人扫码,然后审批权限") } func (s qrcode) PlaceQRCode(m *ice.Message, arg ...string) { diff --git a/src/gonganxitong/qrcode.png b/src/gonganxitong/qrcode.png deleted file mode 100644 index a51f377..0000000 Binary files a/src/gonganxitong/qrcode.png and /dev/null differ diff --git a/src/gonganxitong/quotalist.go b/src/gonganxitong/quotalist.go deleted file mode 100644 index eadb561..0000000 --- a/src/gonganxitong/quotalist.go +++ /dev/null @@ -1,78 +0,0 @@ -package gonganxitong - -import ( - "shylinux.com/x/ice" - kit "shylinux.com/x/toolkits" - - "shylinux.com/x/community/src/api" - "shylinux.com/x/community/src/gonganxitong/model" -) - -type quotalist struct { - Table - fields string `data:"place_uid,title,content,vendor,total"` -} - -func (s quotalist) AfterMigrate(m *ice.Message, arg ...string) { - s.Table.AfterMigrate(m, arg...) - if s.PrefixPortal(m) == api.RENZHENGSHOUQUAN_PORTAL { - s.insert(m, "service", "3-1", 10, "10人", "在线会议人数上限", api.GONGANXITONG_MEETING) - s.insert(m, "service", "3-2", 30, "30人", "在线会议人数上限", api.GONGANXITONG_MEETING) - s.insert(m, "service", "3-3", 50, "50人", "在线会议人数上限", api.GONGANXITONG_MEETING) - - s.insert(m, "service", "3-1", 100*1024*1024, "100M", "在线文档存储容量", api.GONGANXITONG_DOCUMENT) - s.insert(m, "service", "3-2", 300*1024*1024, "300M", "在线文档存储容量", api.GONGANXITONG_DOCUMENT) - s.insert(m, "service", "3-3", 500*1024*1024, "500M", "在线文档存储容量", api.GONGANXITONG_DOCUMENT) - - s.insert(m, "service", "3-1", 1024*1024*1024, "1G", "在线相册存储容量", api.GONGANXITONG_PHOTO) - s.insert(m, "service", "3-2", 3*1024*1024*1024, "3G", "在线相册存储容量", api.GONGANXITONG_PHOTO) - s.insert(m, "service", "3-3", 5*1024*1024*1024, "5G", "在线相册存储容量", api.GONGANXITONG_PHOTO) - - s.insert(m, "company", "4-1", 10, "10个", "服务认证数量上限", api.RENZHENGSHOUQUAN_AUTH) - s.insert(m, "company", "4-2", 30, "30个", "服务认证数量上限", api.RENZHENGSHOUQUAN_AUTH) - s.insert(m, "company", "4-3", 50, "50个", "服务认证数量上限", api.RENZHENGSHOUQUAN_AUTH) - - s.insert(m, "school", "5-1", 10, "10个", "服务认证数量上限", api.RENZHENGSHOUQUAN_AUTH) - s.insert(m, "school", "5-2", 30, "30个", "服务认证数量上限", api.RENZHENGSHOUQUAN_AUTH) - s.insert(m, "school", "5-3", 50, "50个", "服务认证数量上限", api.RENZHENGSHOUQUAN_AUTH) - - s.insert(m, "street", "6-1", 10, "10个", "服务认证数量上限", api.RENZHENGSHOUQUAN_AUTH) - s.insert(m, "street", "6-2", 30, "30个", "服务认证数量上限", api.RENZHENGSHOUQUAN_AUTH) - s.insert(m, "street", "6-3", 50, "50个", "服务认证数量上限", api.RENZHENGSHOUQUAN_AUTH) - } -} -func (s quotalist) Matrix(m *ice.Message, arg ...string) { - msg := m.Spawn() - s.Tables(msg, goodslist{}) - s.Fields(msg, "goodslist_title", "quotalist_title", "quotalists.content", "amount") - list := []string{} - data := kit.Dict() - amount := map[string]string{} - s.Select(msg).Table(func(value ice.Maps) { - kit.Value(data, kit.Keys(value["quotalist_title"], value["goodslist_title"]), value[model.CONTENT]) - kit.If(kit.IndexOf(list, value["goodslist_title"]) == -1, func() { list = append(list, value["goodslist_title"]) }) - amount[value["goodslist_title"]] = value[model.AMOUNT] - }) - kit.For(data, func(key string, value ice.Any) { - m.Push("会员定价", key) - kit.For(list, func(k string) { m.Push(k, kit.Format(kit.Value(value, k))) }) - }) - m.Push("会员定价", "会员价/月") - kit.For(list, func(k string) { m.Push(k, kit.Format("¥ %v", kit.Float(amount[k])/100)) }) - m.DisplayTable() -} -func (s quotalist) List(m *ice.Message, arg ...string) { - s.Matrix(m) -} - -func init() { ice.TeamCtxCmd(quotalist{Table: newTable()}) } - -func (s quotalist) insert(m *ice.Message, auth, level string, total int, content, title string, arg ...string) { - uid := kit.Hashs(auth, level, kit.Select(m.PrefixKey(), arg, 0)) - if s.Select(m.Spawn(), model.UID, uid).Length() > 0 { - return - } - s.Insert(m, model.UID, uid, model.PLACE_UID, auth, - model.GOODSLIST_UID, kit.Hashs(auth, level), model.TITLE, title, model.CONTENT, content, - model.TOTAL, kit.Format(total), model.VENDOR, kit.Select(m.PrefixKey(), arg, 0)) -} diff --git a/src/gonganxitong/quotalist.js b/src/gonganxitong/quotalist.js deleted file mode 100644 index 2cc8ca7..0000000 --- a/src/gonganxitong/quotalist.js +++ /dev/null @@ -1,8 +0,0 @@ -Volcanos(chat.ONIMPORT, { - _init: function(can, msg) { - can.onimport.myView(can, msg, function(value) { return [ - {view: html.TITLE, list: [value.title]}, - {view: html.OUTPUT, list: [value.content]}, - ] }, function(event) {}) - }, -}) \ No newline at end of file diff --git a/src/gonganxitong/recent.go b/src/gonganxitong/recent.go index 1a53ecc..883ce37 100644 --- a/src/gonganxitong/recent.go +++ b/src/gonganxitong/recent.go @@ -2,8 +2,7 @@ package gonganxitong import ( "shylinux.com/x/ice" - "shylinux.com/x/icebergs/base/ctx" - "shylinux.com/x/icebergs/base/web" + "shylinux.com/x/icebergs/base/web/html" kit "shylinux.com/x/toolkits" "shylinux.com/x/community/src/gonganxitong/model" @@ -28,14 +27,14 @@ func (s recent) Create(m *ice.Message, arg ...string) { } } func (s recent) Remove(m *ice.Message, arg ...string) { - s.Delete(m, m.OptionSimple(model.USER_UID, model.UID)...) + s.Delete(m, m.OptionSimple(model.UID, model.USER_UID)...) } func (s recent) List(m *ice.Message, arg ...string) { + m.Option(model.USER_UID, m.Option(ice.MSG_USERUID)) s.Tables(m, s.service).Fields(m, s.Key(s, model.UID), s.Key(s, model.UPDATED_AT), - model.PLACE_UID, s.Key(s, model.PLACE_NAME), s.Key(s, model.PLACE_AVATAR), - model.SERVICE_UID, + model.PLACE_UID, s.Key(s, model.PLACE_NAME), s.Key(s, model.PLACE_AVATAR), s.Key(s, model.AUTH_STATUS), model.SCORE, s.Key(s, model.CITY_NAME), s.Key(s, model.STREET_NAME), model.SERVICE_NAME, model.SERVICE_ICON, - s.Key(s, model.AUTH_STATUS), model.SCORE, s.AS(model.NODENAME, model.SPACE), model.INDEX, + s.AS(model.NODENAME, model.SPACE), model.INDEX, model.SERVICE_UID, ) if len(arg) < 2 { s.Orders(m, s.Desc(model.SCORE), s.Desc(s.Key(s, model.UPDATED_AT))) @@ -53,13 +52,9 @@ func (s recent) List(m *ice.Message, arg ...string) { s.DisplayBase(m, "") } func (s recent) Open(m *ice.Message, arg ...string) { - m.Option("style", "portal") - m.Option(model.TITLE, m.Option(model.PLACE_NAME)) - m.Option(ice.MSG_USERPOD, m.Option(web.SPACE)) - m.ProcessOpen(m.Cmdx(m.Option("index"), s.Link, m.Option(model.PLACE_UID))) - return - m.ProcessOpen(web.S(m.Option(web.SPACE)) + web.C(m.Option(ctx.INDEX)) + "?" + s.Keys(s.Place, model.UID) + "=" + m.Option("place_uid") + "#" + kit.Join(kit.Split(m.Option(ctx.ARGS)), ":")) - m.ProcessOpen(web.S(m.Option(web.SPACE)) + web.C(m.Option(ctx.INDEX)) + "?" + s.Keys(s.Place, model.UID) + "=" + m.Option("place_uid") + "#" + kit.Join(kit.Split(m.Option(ctx.ARGS)), ":")) + m.Options(html.STYLE, html.PORTAL, model.TITLE, m.Option(model.PLACE_NAME)) + s.Select(m, m.OptionSimple(model.UID)...) + m.ProcessOpen(s.SpaceLink(m, m.Option(model.SPACE), m.Option(model.INDEX), m.Append(model.PLACE_UID))) } func (s recent) Sticky(m *ice.Message, arg ...string) { s.Update(m, ice.Map{model.SCORE: 100}, m.OptionSimple(model.USER_UID, model.UID)...) diff --git a/src/gonganxitong/recent.png b/src/gonganxitong/recent.png deleted file mode 100644 index 78c98b9..0000000 Binary files a/src/gonganxitong/recent.png and /dev/null differ diff --git a/src/gonganxitong/search.go b/src/gonganxitong/search.go deleted file mode 100644 index 74d9a8e..0000000 --- a/src/gonganxitong/search.go +++ /dev/null @@ -1,24 +0,0 @@ -package gonganxitong - -import ( - "shylinux.com/x/ice" - - "shylinux.com/x/community/src/gonganxitong/model" -) - -type search struct{ Tables } - -func (s search) List(m *ice.Message, arg ...string) { - if len(arg) < 2 { - m.Cmdy(s.Place, s.Select).Action() - } else if len(arg) == 2 { - m.FieldsSetDetail().Cmdy(s.Place, s.Select, model.UID, arg[1]).Action() - } - m.RenameAppend(model.TYPE, s.Keys(s.Place, model.TYPE)) - s.SelectJoin(m, s.Street, model.NAME, model.CITY_UID) - s.SelectJoinCity(m) - s.SelectJoinUser(m) - s.DisplayBase(m, "") -} - -func init() { ice.TeamCtxCmd(search{Tables: newTables()}) } diff --git a/src/gonganxitong/search.js b/src/gonganxitong/search.js deleted file mode 100644 index fd5de8b..0000000 --- a/src/gonganxitong/search.js +++ /dev/null @@ -1,14 +0,0 @@ -Volcanos(chat.ONIMPORT, { - _init: function(can, msg) { - can.onimport.myView(can, msg, function(value) { - return [ - {view: html.TITLE, list: [value.name||value.title||value.user_name]}, - {view: html.STATUS, list: [value.uid && value.uid.slice(0, 6), can.onimport.timeView(can, value)]}, - {view: html.STATUS, list: [value.city_name, value.street_name, value.company_name]}, - {view: html.OUTPUT, list: [value.info||value.content]}, - ] - }, function(event, value) { can.onaction._goback(can) - can.onimport.plugin(can, {args: [value.uid]}) - }) - }, -}) \ No newline at end of file diff --git a/src/gonganxitong/service.go b/src/gonganxitong/service.go index 367041b..6a8e085 100644 --- a/src/gonganxitong/service.go +++ b/src/gonganxitong/service.go @@ -12,6 +12,7 @@ import ( "shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/tcp" "shylinux.com/x/icebergs/base/web" + "shylinux.com/x/icebergs/base/web/html" "shylinux.com/x/icebergs/core/code" kit "shylinux.com/x/toolkits" @@ -26,10 +27,10 @@ type service struct { autogen string `name:"autogen name* help* class* table* dream" icon:"bi bi-plus-square-dotted"` oauth string `name:"oauth" icon:"bi bi-shield-fill-check"` open string `name:"open" role:"void"` - conf string `name:"conf" role:"void"` - clean string `name:"clean" help:"清理" role:"void"` - online string `name:"online" help:"上架" style:"notice" role:"tech"` - offline string `name:"offline" help:"下架" style:"danger" role:"tech"` + conf string `name:"conf"` + clean string `name:"clean" help:"清理"` + online string `name:"online" help:"上架" style:"notice"` + offline string `name:"offline" help:"下架" style:"danger"` } func ServiceUID(m *ice.Message) string { @@ -44,7 +45,7 @@ func (s service) Inputs(m *ice.Message, arg ...string) { func (s service) Update(m *ice.Message, arg ...string) { uid := ServiceUID(m) if s.Select(m.Spawn(), model.UID, uid).Length() == 0 { - s.Insert(m, kit.Simple(model.UID, uid, model.INDEX, m.Prefix(web.PORTAL), tcp.NODETYPE, ice.Info.NodeType, tcp.NODENAME, ice.Info.NodeName, nfs.PATHNAME, ice.Info.Pwd, tcp.HOSTNAME, ice.Info.Hostname)...) + s.Insert(m, kit.Simple(model.UID, uid, model.INDEX, s.PrefixPortal(m), tcp.NODETYPE, ice.Info.NodeType, tcp.NODENAME, ice.Info.NodeName, nfs.PATHNAME, ice.Info.Pwd, tcp.HOSTNAME, ice.Info.Hostname)...) } s.Table.Update(m, kit.Dict(arg, m.OptionSimple(mdb.NAME, mdb.ICON), nfs.MODULE, ice.Info.Make.Module, nfs.VERSION, ice.Info.Make.Versions()), model.UID, uid) m.Cmd(s.PrefixPortal(m), Portal{}.CommandUpdate, uid) @@ -127,6 +128,7 @@ func (s service) List(m *ice.Message, arg ...string) { s.DisplayBase(m, "") } func (s service) Open(m *ice.Message, arg ...string) { + m.Options(html.STYLE, html.PORTAL, model.TITLE, m.Option(model.NAME)) s.spaceOpen(m, m.Option(ctx.INDEX)) } func (s service) Conf(m *ice.Message, arg ...string) { @@ -139,7 +141,7 @@ func (s service) Data(m *ice.Message, arg ...string) { s.spaceOpen(m, web.CODE_MYSQL_QUERY, aaa.SESS, "mysql", mdb.DATABASE, s.name(m)) } func (s service) Clean(m *ice.Message, arg ...string) { - s.spaceOpen(m, strings.ReplaceAll(m.Option(ctx.INDEX), "portal", "clean")) + s.spaceOpen(m, strings.ReplaceAll(m.Option(ctx.INDEX), web.PORTAL, "clean")) } func (s service) Online(m *ice.Message, arg ...string) { s.Table.Update(m, kit.Simple(model.STATUS, ServiceOnline), m.OptionSimple(model.UID)...) @@ -154,8 +156,6 @@ func (s service) name(m *ice.Message) string { return kit.Select("", strings.Split(m.Option(ctx.INDEX), "."), -2) } func (s service) spaceOpen(m *ice.Message, index string, arg ...ice.Any) { - m.Option("style", "portal") - m.Option(model.TITLE, m.Option(model.NAME)) m.ProcessOpen(kit.MergeURL(web.S(m.Option(web.SPACE))+web.C(index), arg...)) } diff --git a/src/gonganxitong/service.png b/src/gonganxitong/service.png deleted file mode 100644 index c9db81f..0000000 Binary files a/src/gonganxitong/service.png and /dev/null differ diff --git a/src/gonganxitong/sess.go b/src/gonganxitong/sess.go index c164217..d7c1011 100644 --- a/src/gonganxitong/sess.go +++ b/src/gonganxitong/sess.go @@ -14,16 +14,36 @@ type sess struct { user user fields string `data:"user_uid,agent,system,location,ip,ua"` create string `name:"create user_uid*"` - repair string `name:"repair"` + list string `name:"list uid auto" role:"tech"` } func (s sess) Create(m *ice.Message, arg ...string) { s.Insert(m, kit.Simple(model.USER_UID, m.Option(model.USER_UID), m.Options(web.ParseUA(m.Message)).OptionSimple(model.IP, model.UA, model.AGENT, model.SYSTEM), - model.LOCATION, kit.Format(web.PublicIP(m.Message, m.Option(ice.MSG_USERIP))), - )...) + model.LOCATION, kit.Format(web.PublicIP(m.Message, m.Option(ice.MSG_USERIP))))...) m.ProcessCookie(ice.MSG_SESSID, m.Option(ice.MSG_SESSID, kit.JoinWord(web.SPACE, m.Option(ice.MSG_USERPOD), m.PrefixKey(), aaa.CHECK, m.Result())), "-2") } +func (s sess) List(m *ice.Message, arg ...string) { + if len(arg) == 0 { + if m.IsTech() { + s.Tables(m, user{}).FieldsWithCreatedAT(m, s, kit.Split("user_uid,name,info,avatar,background,agent,system,location,ip,ua")).Limit(m, 3000) + s.Select(m, arg...).PushAction(s.Remove).Action(s.Repair) + } + } else { + s.SelectDetail(m, s.Key(s, model.UID), arg[0]) + } +} +func (s sess) Check(m *ice.Message, arg ...string) { + msg := s.Select(m.Spawn(), model.UID, arg[0]) + msg = m.Cmd(s.user, s.Select, model.UID, msg.Append(model.USER_UID)) + m.Option(ice.MSG_USERROLE, aaa.VOID) + m.Option(ice.MSG_USERNAME, msg.Append(model.UID)) + m.Option(ice.MSG_USERNICK, msg.Append(model.NAME)) + m.Option(ice.MSG_LANGUAGE, msg.Append(model.LANGUAGE)) + m.Option(ice.MSG_AVATAR, msg.Append(model.AVATAR)) + m.Option(ice.MSG_USERUID, msg.Append(model.UID)) + m.OptionDefault(model.USER_UID, msg.Append(model.UID)) +} func (s sess) Repair(m *ice.Message, arg ...string) { m.Cmdy("").Table(func(value ice.Maps) { if false { @@ -39,24 +59,5 @@ func (s sess) Repair(m *ice.Message, arg ...string) { } }) } -func (s sess) List(m *ice.Message, arg ...string) { - if len(arg) == 0 { - if m.IsTech() { - s.Tables(m, user{}).FieldsWithCreatedAT(m, s, kit.Split("user_uid,name,info,avatar,background,agent,system,location,ip,ua")).Limit(m, 3000) - s.Select(m, arg...).PushAction(s.Remove).Action(s.Repair) - } - } -} -func (s sess) Check(m *ice.Message, arg ...string) { - msg := s.Select(m.Spawn(), model.UID, arg[0]) - msg = m.Cmd(s.user, s.Select, model.UID, msg.Append(model.USER_UID)) - m.Option(ice.MSG_USERROLE, aaa.VOID) - m.Option(ice.MSG_USERNAME, msg.Append(model.UID)) - m.Option(ice.MSG_USERNICK, msg.Append(model.NAME)) - m.Option(ice.MSG_LANGUAGE, msg.Append(model.LANGUAGE)) - m.Option(ice.MSG_AVATAR, msg.Append(model.AVATAR)) - m.Option(ice.MSG_USERUID, msg.Append(model.UID)) - m.Option(model.USER_UID, msg.Append(model.UID)) -} func init() { ice.TeamCtxCmd(sess{}) } diff --git a/src/gonganxitong/setting.css b/src/gonganxitong/setting.css index b799565..21c7261 100644 --- a/src/gonganxitong/setting.css +++ b/src/gonganxitong/setting.css @@ -3,4 +3,7 @@ $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; } \ No newline at end of file +$output>div.item span.outer.on span.inner { float:right; } +$output>div.item.story { + flex-grow:1; +} \ No newline at end of file diff --git a/src/gonganxitong/setting.go b/src/gonganxitong/setting.go index 7af55bd..f4c0479 100644 --- a/src/gonganxitong/setting.go +++ b/src/gonganxitong/setting.go @@ -2,48 +2,38 @@ package gonganxitong import ( "shylinux.com/x/ice" + "shylinux.com/x/icebergs/base/aaa" kit "shylinux.com/x/toolkits" + "shylinux.com/x/community/src/api" "shylinux.com/x/community/src/gonganxitong/model" ) type setting struct { Table - recent recent - service service - order string `data:"103"` - role string `data:"leader,worker,server"` - short string `data:"name"` - field string `data:"name,type,help,role"` - fields string `data:"name,value,user_uid"` - create string `name:"create name* type* help" role:"tech"` - update string `name:"update" role:"void"` - placeTrash string `name:"placeTrash" help:"删除数据" style:"danger" role:"leader"` + recent recent + service service + order string `data:"103"` + role string `data:"leader,worker,server"` + short string `data:"name"` + field string `data:"name,type,help,role,order"` + fields string `data:"name,value,user_uid"` + create string `name:"create name* type* help"` + 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, SETTING_PROFILE, model.TYPE, SETTING_RADIO) + s.Create(m, model.NAME, SETTING_PROFILE, model.TYPE, SETTING_RADIO, model.ORDER, "1") } func (s setting) Create(m *ice.Message, arg ...string) { s.Hash.Create(m, arg...) } -func (s Table) SettingCreate(m *ice.Message, arg ...string) { - m.Cmdy(s.Prefix(m, setting{}), s.Create, model.NAME, arg[0], model.TYPE, arg[1], arg[2:]) -} -func (s Table) SettingSelect(m *ice.Message, arg ...string) { - m.Cmd(s.Prefix(m, setting{}), s.Select, m.OptionSimple(model.PLACE_UID)).Table(func(value ice.Maps) { - if value[model.USER_UID] != "" && value[model.USER_UID] != m.Option(model.USER_UID) { - return - } - m.Option(value[model.NAME], value[model.VALUE]) - }) -} func (s setting) Update(m *ice.Message, arg ...string) { msg := s.Hash.Select(m.Spawn(), m.Option(model.NAME)) args := m.OptionSimple(model.PLACE_UID, model.USER_UID, model.NAME) - switch msg.Append("role") { - case "tech": + switch msg.Append(model.ROLE) { + case aaa.TECH: if m.IsTech() { args = m.OptionSimple(model.PLACE_UID, model.NAME) } else { @@ -78,19 +68,35 @@ func (s setting) List(m *ice.Message, arg ...string) { msg := s.Select(m.Spawn(), args...) msg.Table(func(value ice.Maps) { data[value[model.NAME]] = value[model.VALUE] }) s.Hash.List(m.Spawn()).Table(func(value ice.Maps) { - if value["role"] == "tech" && !m.IsTech() { - // m.Push(model.VALUE, "") - } else if value["role"] == "creator" && !s.IsCreator(m) { - // m.Push(model.VALUE, "") - } else if value["role"] == "leader" && !s.IsLeader(m) { + if value[model.ROLE] == aaa.TECH && !m.IsTech() { + + } else if value[model.ROLE] == "creator" && !s.IsCreator(m) { + + } else if value[model.ROLE] == "leader" && !s.IsLeader(m) { } else { m.Push(model.NAME, value[model.NAME]) m.Push(model.TYPE, value[model.TYPE]) m.Push(model.HELP, value[model.HELP]) + m.Push(model.ORDER, value[model.ORDER]) m.Push(model.VALUE, data[value[model.NAME]]) } - }).Action() + }) + if msg := m.Cmd(s.Place, s.Select, model.UID, m.Option(model.PLACE_UID)); msg.Append(model.AUTH_UID) != "" { + m.Push(model.NAME, "authPortal") + m.Push(model.TYPE, SETTING_STORY) + m.Push(model.HELP, "进入服务认证的主页") + m.Push(model.ORDER, "10") + m.Push(model.VALUE, kit.Fields(api.RENZHENGSHOUQUAN_PORTAL, msg.Append(model.AUTH_UID))) + } + if msg := m.Cmd(user{}, s.Select, model.UID, m.Option(ice.MSG_USERUID)); msg.Append(model.AUTH_UID) != "" { + m.Push(model.NAME, "authPortal") + m.Push(model.TYPE, SETTING_STORY) + m.Push(model.HELP, "进入个人认证的主页") + m.Push(model.ORDER, "11") + m.Push(model.VALUE, kit.Fields(api.RENZHENGSHOUQUAN_PORTAL, msg.Append(model.AUTH_UID))) + } + m.Action().SortInt(model.ORDER) } 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]) } @@ -99,7 +105,25 @@ func (s setting) List(m *ice.Message, arg ...string) { func init() { ice.TeamCtxCmd(setting{Table: newTable()}) } +func (s Table) SettingCreate(m *ice.Message, arg ...string) { + m.Cmdy(s.PrefixSetting(m), s.Create, model.NAME, arg[0], + model.TYPE, kit.Select(SETTING_RADIO, arg, 1), + model.HELP, kit.Select("", arg, 2), + model.ROLE, kit.Select("", arg, 3), + model.ORDER, kit.Select("1000", arg, 4), + ) +} +func (s Table) SettingSelect(m *ice.Message, arg ...string) { + m.Cmd(s.PrefixSetting(m), s.Select, m.OptionSimple(model.PLACE_UID)).Table(func(value ice.Maps) { + if value[model.USER_UID] != "" && value[model.USER_UID] != m.Option(model.USER_UID) { + return + } + m.Option(value[model.NAME], value[model.VALUE]) + }) +} + const ( - SETTING_RADIO = "radio" SETTING_PROFILE = "profile" + SETTING_RADIO = "radio" + SETTING_STORY = "story" ) diff --git a/src/gonganxitong/setting.js b/src/gonganxitong/setting.js index f298700..b267437 100644 --- a/src/gonganxitong/setting.js +++ b/src/gonganxitong/setting.js @@ -1,8 +1,19 @@ Volcanos(chat.ONIMPORT, { _init: function(can, msg) { can.page.Append(can, can._output, msg.Table(function(value) { - return {view: html.ITEM, list: [{text: [value.help||can.user.trans(can, value.name, null, "value.setting"), "", mdb.NAME]}, can.onimport[value.type](can, value)]} + return {view: [[html.ITEM, value.type, value.name]], list: [{text: [value.help||can.user.trans(can, value.name, null, "value.setting"), "", mdb.NAME]}, can.onimport[value.type](can, value)]} })) + if (!can.misc.isDebug(can)) { return } + sessionStorage.length && can.onimport._plugin(can, {index: "can.sessionStorage"}) + localStorage.length && can.onimport._plugin(can, {index: "can.localStorage"}) + can.user.isTechOrRoot(can) && can.onimport._plugin(can, {index: "can.cookie"}) + }, + _plugin: function(can, value) { value.width = can.ConfWidth()-20 + can.onappend.plugin(can, value, function(sub) { + sub.onexport.output = function() { + if (!sub._output.innerHTML) { can.onmotion.hidden(can, sub._target) } + } + }) }, radio: function(can, value) { return {text: ["", "", ["outer", value.value]], list: [{text: ["", "", "inner"]}], onclick: function(event) { @@ -10,4 +21,12 @@ Volcanos(chat.ONIMPORT, { can.runAction(can.request(event, value, can.Option(), {_toast: value.name}), mdb.UPDATE, []) }} }, + story: function(can, value) { + return {text: ["", "i", "bi bi-chevron-double-right"], _init: function(target) { + target.parentNode.onclick = function() { + var list = can.core.Split(value.value) + can.onimport.myStory(can, {index: list[0], args: list.slice(1)}) + } + }} + }, }) \ No newline at end of file diff --git a/src/gonganxitong/spendlist.go b/src/gonganxitong/spendlist.go deleted file mode 100644 index 6dd1df3..0000000 --- a/src/gonganxitong/spendlist.go +++ /dev/null @@ -1,56 +0,0 @@ -package gonganxitong - -import ( - "strings" - - "shylinux.com/x/ice" - kit "shylinux.com/x/toolkits" - - "shylinux.com/x/community/src/gonganxitong/model" -) - -type spendlist struct { - Table - fields string `data:"vendor,total,count,expire_time"` -} - -func (s spendlist) List(m *ice.Message, arg ...string) { - if len(arg) == 2 { - s.Tables(m, quotalist{}) - s.Fields(m, "quotalists.title,quotalists.content,expire_time,spendlists.vendor,spendlists.total,count") - s.Select(m, s.Key(s, model.PLACE_UID), arg[0], model.PAYMENTLIST_UID, arg[1]).Display("") - } -} - -func init() { ice.TeamCtxCmd(spendlist{Table: newTable()}) } - -func (s Table) SpendlistCheck(m *ice.Message, size int) bool { - if size == 0 && m.Length() == 0 { - return true - } - if size == 0 && m.Result() != "" { - return true - } - msg := m.Cmd(s.Prefix(m, spendlist{}), s.Select, m.OptionSimple(model.PLACE_UID), model.VENDOR, m.PrefixKey()) - m.Echo("%s / %s", - strings.TrimSuffix(kit.FmtSize(kit.Int(msg.Append(model.COUNT))), "B"), - strings.TrimSuffix(kit.FmtSize(kit.Int(msg.Append(model.TOTAL))), "B"), - ) - m.Option(model.SPENDLIST_UID, msg.Option(model.UID)) - if kit.Int(msg.Append(model.COUNT))+size >= kit.Int(msg.Append(model.TOTAL)) { - if !m.Warn(size > 0, "存储空间不足,请及时续费或清理空间") { - m.SetResult() - m.Echo("存储空间不足,请及时续费或清理空间").Action() - } - return false - } - kit.If(size > 0, func() { s.SpendlistCount(m, size) }) - return true -} -func (s Table) SpendlistCount(m *ice.Message, size int) { - m.Cmd(s.Prefix(m, spendlist{}), s.AddCount, model.COUNT, size, m.Option(model.SPENDLIST_UID)) -} -func (s Table) SpendlistUpdate(m *ice.Message, size string) { - msg := m.Cmd(s.Prefix(m, spendlist{}), s.Select, model.PLACE_UID, m.Option(model.PLACE_UID), model.VENDOR, m.PrefixKey()) - m.Options(model.UID, msg.Append(model.UID)).Cmd(s.Prefix(m, spendlist{}), s.Modify, model.COUNT, size) -} diff --git a/src/gonganxitong/spendlist.js b/src/gonganxitong/spendlist.js deleted file mode 100644 index 7594966..0000000 --- a/src/gonganxitong/spendlist.js +++ /dev/null @@ -1,9 +0,0 @@ -Volcanos(chat.ONIMPORT, { - _init: function(can, msg) { - can.onimport.myView(can, msg, function(value) { return [ - {view: html.TITLE, list: [value.title||value.vendor]}, - {view: html.STATUS, list: [value.expire_time]}, - {view: html.OUTPUT, list: [can.base.Size(value.count), " / ", can.base.Size(value.total)]}, - ] }, function(event) {}) - }, -}) \ No newline at end of file diff --git a/src/gonganxitong/street.go b/src/gonganxitong/street.go index b434a03..73e4159 100644 --- a/src/gonganxitong/street.go +++ b/src/gonganxitong/street.go @@ -2,17 +2,14 @@ package gonganxitong import ( "shylinux.com/x/ice" - kit "shylinux.com/x/toolkits" + "shylinux.com/x/community/src/api" "shylinux.com/x/community/src/gonganxitong/model" ) type street struct { Table - city city - modify string `name:"modify info" role:"tech"` - list string `name:"list city_name street_name auto" role:"void"` - authCreate string `name:"authCreate" role:"tech"` + list string `name:"list uid auto"` } func (s street) FindOrCreateByName(m *ice.Message, arg ...string) { @@ -23,24 +20,25 @@ 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(m.OptionSimple(model.INFO)), m.OptionSimple(model.UID)...) -} func (s street) List(m *ice.Message, arg ...string) { if len(arg) == 0 { - m.Cmdy(s.city).RenameAppend(model.NAME, model.CITY_NAME) - } else if msg := m.Cmd(s.city, arg[0]); len(arg) == 1 { - s.Select(m, model.CITY_UID, msg.Append(model.UID)).Action() - } else if len(arg) == 2 { - s.SelectDetail(m, model.CITY_UID, msg.Append(model.UID), model.NAME, arg[1]) + s.Select(m).Table(func(value ice.Maps) { + if value[model.AUTH_UID] == "" && m.IsTech() { + m.PushButton(s.AuthCreate, s.Delete) + } else { + m.PushButton() + } + }).Action() + } else if len(arg) == 1 { + s.SelectDetail(m, model.UID, arg[0]) if m.Append(model.AUTH_UID) == "" && m.IsTech() { m.EchoInfoButton("请申请街道认证", s.AuthCreate) } } } func (s street) AuthCreate(m *ice.Message, arg ...string) { - msg := m.Cmd("web.team.gonganxitong.city", s.Select, model.UID, m.Option(model.CITY_UID)) - s.Table.AuthCreate(m, 6, msg.Append(model.AUTH_UID), m.OptionSimple(model.UID)...) + msg := m.Cmd(city{}, s.Select, model.UID, m.Option(model.CITY_UID)) + s.Table.AuthCreate(m, api.AuthStreet, msg.Append(model.AUTH_UID), m.OptionSimple(model.UID)...) } func init() { ice.TeamCtxCmd(street{}) } diff --git a/src/gonganxitong/support.png b/src/gonganxitong/support.png deleted file mode 100644 index d0a0c05..0000000 Binary files a/src/gonganxitong/support.png and /dev/null differ diff --git a/src/gonganxitong/user.go b/src/gonganxitong/user.go index c0040e0..a5ba43f 100644 --- a/src/gonganxitong/user.go +++ b/src/gonganxitong/user.go @@ -11,20 +11,24 @@ import ( "shylinux.com/x/icebergs/base/web" kit "shylinux.com/x/toolkits" + "shylinux.com/x/community/src/api" "shylinux.com/x/community/src/gonganxitong/model" ) type user struct { Table setting setting + order string `data:"509"` + role string `data:"tech"` template string `data:"4b-Z_r8dZmm1pHdd2h4A10VVYX4OIHvemlLjsHKBj2s"` fields string `data:"auth_uid,language,name,info,avatar,background"` create string `name:"create open_id* avatar usernick"` modify string `name:"modify info" role:"void"` - list string `name:"list uid auto" role:"void"` - email string `name:"email email*"` + list string `name:"list uid auto" role:"tech"` setCookie string `name:"setCookie" help:"切换"` sendCookie string `name:"sendCookie" help:"授权" role:"void"` + authRemove string `name:"authRemove" help:"删除认证" role:"void"` + email string `name:"email email*"` } func (s user) Create(m *ice.Message, arg ...string) { @@ -50,13 +54,7 @@ func (s user) List(m *ice.Message, arg ...string) { if len(arg) == 0 { if m.IsTech() { s.Limit(m, 3000) - s.Select(m, arg...).Table(func(value ice.Maps) { - if value[model.UID] != m.Option(model.USER_UID) { - m.PushButton(s.SetCookie, s.Remove) - } else { - m.PushButton() - } - }) + s.Select(m, arg...) m.EchoQRCode(m.MergePodCmd("", m.PrefixKey()+"/action/sendCookie", ice.FROM_DAEMON, m.Option(ice.MSG_DAEMON))).Echo("
").Echo("请扫码授权") m.StatusTimeCount(mdb.TOTAL, s.SelectTotal(m)) } @@ -66,15 +64,24 @@ func (s user) List(m *ice.Message, arg ...string) { m.EchoInfoButton("请申请个人认证", s.AuthCreate) } } + s.SelectJoinAuth(m) + m.Table(func(value ice.Maps) { + button := []ice.Any{} + defer func() { m.PushButton(button...) }() + if value[model.AUTH_UID] != "" && value[model.AUTH_STATUS] != "issued" && (value[model.UID] == m.Option(ice.MSG_USERUID) || m.IsTech()) { + button = append(button, s.AuthRemove) + } + button = append(button, s.AuthRemove) + if m.IsTech() && value[model.UID] != m.Option(ice.MSG_USERUID) { + button = append(button, s.SetCookie, s.Remove) + } + }) } func (s user) SelectTotal(m *ice.Message, arg ...string) string { msg := m.Spawn() s.Fields(msg, "count(*) AS total") return s.Select(msg, arg...).Append(model.TOTAL) } -func (s user) Email(m *ice.Message, arg ...string) { - s.Table.Update(m, kit.Dict(m.OptionSimple(model.EMAIL))) -} func (s user) AuthCreate(m *ice.Message, arg ...string) { msg := s.Select(m.Spawn(), model.UID, m.Option(model.USER_UID)) if msg.Length() == 0 { @@ -83,18 +90,29 @@ func (s user) AuthCreate(m *ice.Message, arg ...string) { } else { m.Options(msg.AppendSimple(model.NAME, model.INFO)) } - s.Table.AuthCreate(m, 2, m.Option(model.AUTH_UID)) + s.Table.AuthCreate(m, api.AuthPersonal, m.Option(model.AUTH_UID)) +} +func (s user) AuthRemove(m *ice.Message, arg ...string) { + if m.WarnNotRight(!m.IsTech() && m.Option(model.UID) != m.Option(ice.MSG_USERUID)) { + return + } + msg := s.Select(m.Spawn(), m.OptionSimple(model.UID)...) + if m.WarnNotValid(msg.Append(model.AUTH_UID) == "") { + return + } + m.Cmd(api.RENZHENGSHOUQUAN_CLEAN, "prune", msg.Option(model.AUTH_UID)) + s.Update(m, ice.Maps{model.AUTH_UID: ""}, m.OptionSimple(model.UID)...) +} +func (s user) SetCookie(m *ice.Message, arg ...string) { + m.ProcessCookie(ice.MSG_USERUID, m.Option(model.UID)) } func (s user) SendCookie(m *ice.Message, arg ...string) { if m.Option(ice.MSG_METHOD) == http.MethodGet { m.EchoInfoButton("请确认授权", s.SendCookie) } else { - m.Cmd(web.SPACE, m.Option(ice.FROM_DAEMON), "cookie", m.Option(model.USER_UID), model.USER_UID) + m.Cmd(web.SPACE, m.Option(ice.FROM_DAEMON), "cookie", m.Option(ice.MSG_USERUID), ice.MSG_USERUID) } } -func (s user) SetCookie(m *ice.Message, arg ...string) { - m.ProcessCookie(model.USER_UID, m.Option(model.UID)) -} func (s user) SendTemplate(m *ice.Message, arg ...string) { // from uid url type name hash msg := s.Select(m, model.UID, kit.Select(m.Option(model.USER_UID), arg, 1)) m.Cmdy("web.chat.wx.template", "", m.Config(nfs.TEMPLATE), msg.Append(model.OPEN_ID), kit.Select("", arg, 2), @@ -102,5 +120,8 @@ func (s user) SendTemplate(m *ice.Message, arg ...string) { // from uid url type "time11", time.Now().Format("2006年01月02日 15:04"), "thing18", kit.Select(kit.Select(m.Option(ice.MSG_USERNAME), m.Option(ice.MSG_USERNICK)), arg, 0), ) } +func (s user) Email(m *ice.Message, arg ...string) { + s.Table.Update(m, kit.Dict(m.OptionSimple(model.EMAIL))) +} func init() { ice.TeamCtxCmd(user{}) } diff --git a/src/main.go b/src/main.go index cfa4b57..014c4f8 100644 --- a/src/main.go +++ b/src/main.go @@ -12,6 +12,6 @@ import ( func main() { print(ice.Run()) } func init() { - ice.Info.CodeMain = "src/gonganxitong/portal.go" - ice.Info.NodeMain = "web.team.gonganxitong.portal" + ice.Info.CodeMain = "src/renzhengshouquan/portal.go" + ice.Info.NodeMain = "web.team.renzhengshouquan.portal" } diff --git a/src/main.shy b/src/main.shy index 63d9d50..1868f7d 100644 --- a/src/main.shy +++ b/src/main.shy @@ -14,4 +14,61 @@ field web.code.mysql.client field web.code.mysql.query args `mysql gonganxitong` field web.chat.wx.access field web.chat.wx.menu -field web.team.gonganxitong.service \ No newline at end of file +field web.team.gonganxitong.service + +order ` +sess.go +sess.js +user.go +userPlace.go +place.go +street.go +city.go + +qrcode.go +apply.go +apply.js +allow.css +allow.go +allow.js +event.go +event.js +notice.go +setting.css +setting.go +setting.js +member.css +member.go +member.js +credit.go + +market.css +market.go +market.js +domain.go +thumb.go +comment.go +favor.go +message.go +message.js +recent.go +recent.js +service.go +service.js +command.go +support.css +support.go +support.js +grant.go +clean.go +email.go + +model +portal.css +portal.go +portal.js +portal.json +common.go +common.js +template +` diff --git a/src/renzhengshouquan/auth.go b/src/renzhengshouquan/auth.go index 83e58dc..0dbb727 100644 --- a/src/renzhengshouquan/auth.go +++ b/src/renzhengshouquan/auth.go @@ -4,75 +4,109 @@ import ( "shylinux.com/x/ice" kit "shylinux.com/x/toolkits" + "shylinux.com/x/community/src/api" "shylinux.com/x/community/src/renzhengshouquan/model" ) type Auth struct { Table - cert cert - order string `data:"2"` - models string `data:"auth"` - fields string `data:"from_uid,score,name,info,auth_type,auth_status,avatar,background,service_uid,place_uid,user_uid"` - memberList string `name:"memberList" role:"worker"` - certList string `name:"certList" role:"worker"` - issue string `name:"issue" role:"worker"` - revoke string `name:"revoke" role:"worker"` - setScore string `name:"setScore score" role:"void"` + cert cert + order string `data:"2"` + models string `data:"auth"` + auth string `data:"issued"` + fields string `data:"from_uid,name,info,auth_type,auth_status,avatar,background,score,service_uid,place_uid,value_uid,user_uid"` + authMain string `name:"authMain" role:"worker"` + memberList string `name:"memberList" role:"worker"` + certList string `name:"certList" role:"worker"` + cityInfo string `name:"cityInfo" role:"worker"` + streetInfo string `name:"streetInfo" role:"worker"` + companyInfo string `name:"companyInfo" role:"worker"` + personalInfo string `name:"personalInfo" role:"worker"` + placeMain string `name:"placeMain" role:"worker"` + issue string `name:"issue" role:"worker"` + revoke string `name:"revoke" role:"worker"` + setScore string `name:"setScore score" role:"worker"` } -func (s Auth) Remove(m *ice.Message, arg ...string) { - s.Delete(m) -} -func (s Auth) SetScore(m *ice.Message, arg ...string) { - s.Update(m, arg, m.OptionSimple(model.UID)...) -} func (s Auth) List(m *ice.Message, arg ...string) { if len(arg) == 1 { s.Select(m, model.FROM_UID, arg[0]).Action() defer s.authSort(m) } else if len(arg) == 2 { - m.Cmdy(s.cert, arg[1]).PushAction().Action() - return - s.SelectDetail(m, model.FROM_UID, arg[0], model.UID, arg[1]).Action(s.CertList, s.MemberList) + s.SelectDetail(m, model.FROM_UID, arg[0], model.UID, arg[1]) } + kit.If(m.Length() == 0, func() { m.Echo("请等待认证申请") }) m.Table(func(value ice.Maps) { + button := []ice.Any{s.AuthMain, s.MemberList} + defer func() { m.PushButton(button...) }() + switch AuthType(kit.Int(value[model.AUTH_TYPE])) { + case AuthCity: + button = append(button, s.CityInfo) + case AuthStreet: + button = append(button, s.StreetInfo) + case AuthCompany: + button = append(button, s.CertList, s.CompanyInfo) + case AuthPersonal: + button = append(button, s.CertList, s.PersonalInfo) + case AuthService: + button = append(button, s.PlaceMain) + } switch AuthStatus(kit.Int(value[model.AUTH_STATUS])) { case AuthCreate: - m.PushButton(s.Issue, s.Remove) + button = append(button, s.Issue) case AuthIssued: - m.PushButton(s.SetScore, s.Revoke) + button = append(button, s.SetScore, s.Revoke) case AuthRevoked: - m.PushButton(s.Issue, s.Remove) - default: - m.PushButton() + button = append(button, s.Issue) } }).Display("").DisplayCSS("") } +func (s Auth) AuthMain(m *ice.Message, arg ...string) { + m.ProcessField(s.PrefixPortal(m), m.Option(model.UID)) +} +func (s Auth) MemberList(m *ice.Message, arg ...string) { + m.ProcessField(s.PrefixMember(m), m.Option(model.UID)) +} +func (s Auth) CertList(m *ice.Message, arg ...string) { + m.ProcessField(cert{}, m.Option(model.UID)) +} +func (s Auth) CityInfo(m *ice.Message, arg ...string) { + m.ProcessField(api.GONGANXITONG_CITY, m.Option(model.NAME)) +} +func (s Auth) StreetInfo(m *ice.Message, arg ...string) { + m.ProcessField(api.GONGANXITONG_STREET, m.Option(model.VALUE_UID)) +} +func (s Auth) CompanyInfo(m *ice.Message, arg ...string) { + m.ProcessField(api.GUANLIXITONG_COMPANY, m.Option(model.VALUE_UID)) +} +func (s Auth) PersonalInfo(m *ice.Message, arg ...string) { + msg := s.Select(m.Spawn(), m.OptionSimple(model.UID)...) + m.ProcessField(api.GONGANXITONG_USER, msg.Option(model.USER_UID)) +} +func (s Auth) PlaceMain(m *ice.Message, arg ...string) { + msg := s.SelectJoinService(m.Cmd("", s.Select, m.OptionSimple(model.UID))) + m.ProcessPodCmd(msg.Append("nodename"), msg.Append(model.INDEX), msg.Append(model.PLACE_UID)) +} +func (s Auth) Issue(m *ice.Message, arg ...string) { + msg := s.Select(m.Spawn(), model.UID, m.Option(model.AUTH_UID)) + if m.WarnNotValid(AuthStatus(kit.Int(msg.Append(model.AUTH_STATUS))) != AuthIssued, "本服务还未认证") { + return + } + s.Update(m, kit.Dict(model.STATUS, AuthIssued), model.UID, m.Option(model.UID), model.FROM_UID, m.Option(model.AUTH_UID)) +} +func (s Auth) Revoke(m *ice.Message, arg ...string) { + s.Update(m, kit.Dict(model.STATUS, AuthRevoked), model.UID, m.Option(model.UID), model.FROM_UID, m.Option(model.AUTH_UID)) +} +func (s Auth) SetScore(m *ice.Message, arg ...string) { + s.Update(m, arg, model.UID, m.Option(model.UID), model.FROM_UID, m.Option(model.AUTH_UID)) +} + +func init() { ice.TeamCtxCmd(Auth{}) } + func (s Auth) SelectList(m *ice.Message, arg ...string) { s.Table.SelectList(m, arg...).RenameAppend(model.TYPE, model.AUTH_TYPE, model.STATUS, model.AUTH_STATUS) s.RewriteAppend(m) } -func (s Auth) MemberList(m *ice.Message, arg ...string) { - m.Cmdy(m.Prefix("member"), arg[1]) -} -func (s Auth) CertList(m *ice.Message, arg ...string) { - m.Cmdy(s.cert, arg[1]).Action() - kit.If(m.Length() == 0, func() { m.Echo("没有上传证件") }) -} -func (s Auth) Issue(m *ice.Message, arg ...string) { - msg := s.Select(m.Spawn(), model.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, "本服务还未认证") { - return - } - } - s.Update(m, kit.Dict(model.STATUS, AuthIssued), model.FROM_UID, m.Option(model.AUTH_UID), model.UID, m.Option(model.UID)) -} -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 init() { ice.TeamCtxCmd(Auth{}) } type AuthType int diff --git a/src/renzhengshouquan/auth.js b/src/renzhengshouquan/auth.js index f8c7eda..44e20be 100644 --- a/src/renzhengshouquan/auth.js +++ b/src/renzhengshouquan/auth.js @@ -2,7 +2,8 @@ Volcanos(chat.ONIMPORT, { _init: function(can, msg) { can.onimport.myView(can, msg, function(value) { return [ {view: html.TITLE, list: [value.name, value.score, can.onimport.textView(can, value, AUTH_TYPE), can.onimport.titleAction(can, value)]}, - {view: html.STATUS, list: [value.uid.slice(0, 6), can.onimport.timeView(can, value), can.onimport.textView(can, value)]}, + {view: html.STATUS, list: [can.onimport.uidView(can, value), can.onimport.timeView(can, value), can.onimport.textView(can, value)]}, + {view: html.CONTENT, list: [value.info]}, ] }) }, }) \ No newline at end of file diff --git a/src/renzhengshouquan/common.go b/src/renzhengshouquan/common.go index 67e2e71..19cb304 100644 --- a/src/renzhengshouquan/common.go +++ b/src/renzhengshouquan/common.go @@ -35,22 +35,6 @@ func (s Table) Inputs(m *ice.Message, arg ...string) { s.Table.Inputs(m, arg...) } } -func (s Table) Config(m *ice.Message, arg ...string) { -} -func (s Table) AuthList(m *ice.Message, auth_uid string, cb func(value ice.Maps, auth bool)) { - m.Cmdy(api.RENZHENGSHOUQUAN_AUTH, auth_uid).Table(func(value ice.Maps) { - if value[model.AUTH_STATUS] == AuthIssued.String() { - cb(value, true) - } else { - cb(value, false) - } - }) -} -func (s Table) authSort(m *ice.Message, arg ...string) { - s.RewriteAppend(m) - m.Sort("auth_status,auth_type,score,created_at", []string{"issued"}, - []string{"personal", "root", "city", "street", "school", "company", "service"}, ice.INT_R, ice.STR_R) -} func (s Table) RewriteAppend(m *ice.Message, arg ...string) *ice.Message { m.RewriteAppend(func(value, key string, index int) string { if _, e := strconv.ParseInt(value, 10, 64); e != nil { @@ -74,13 +58,29 @@ func (s Table) RewriteAppend(m *ice.Message, arg ...string) *ice.Message { } func (s Table) GetAuthUID(m *ice.Message, arg ...string) string { - // auth_uid := m.Cmdx(ctx.CONFIG, api.RENZHENGSHOUQUAN_PORTAL, kit.Keym(model.AUTH_UID)) - // m.Info("default auth_uid %v", auth_uid) - // return auth_uid msg := m.Cmd(Auth{}, s.Select, model.TYPE, AuthRoot) m.Info("default auth_uid %v", msg.Append(model.UID)) return msg.Append(model.UID) } +func (s Table) Config(m *ice.Message, arg ...string) { +} +func (s Table) AuthList(m *ice.Message, auth_uid string, cb func(value ice.Maps, auth bool)) { + m.Cmdy(api.RENZHENGSHOUQUAN_AUTH, auth_uid).Table(func(value ice.Maps) { + if value[model.AUTH_STATUS] == AuthIssued.String() { + cb(value, true) + } else { + cb(value, false) + } + }) +} +func (s Table) authSort(m *ice.Message, arg ...string) { + if m.FieldsIsDetail() { + return + } + s.RewriteAppend(m) + m.Sort("auth_status,auth_type,score,created_at", + []string{"issued"}, []string{"root", "city", "street", "school", "company", "service", "personal"}, ice.INT_R, ice.STR_R) +} type Tables struct{ Table } diff --git a/src/renzhengshouquan/model/model.go b/src/renzhengshouquan/model/model.go index d883178..7100a26 100644 --- a/src/renzhengshouquan/model/model.go +++ b/src/renzhengshouquan/model/model.go @@ -36,10 +36,13 @@ const ( CITY_UID = "city_uid" CITY_NAME = "city_name" FROM_UID = "from_uid" - SERVICE_UID = "service_uid" + FROM_USER_UID = "from_user_uid" + TO_USER_UID = "to_user_uid" PLACE_UID = "place_uid" - STORAGE_UID = "storage_uid" + VALUE_UID = "value_uid" + SERVICE_UID = "service_uid" DASHBOARD_UID = "dashboard_uid" + STORAGE_UID = "storage_uid" SPACE = "space" INDEX = "index" VALUE = "value" @@ -66,6 +69,7 @@ type Auth struct { Background string `gorm:"type:varchar(255)"` ServiceUID string `gorm:"type:char(32)"` PlaceUID string `gorm:"type:char(32)"` + ValueUID string `gorm:"type:char(32)"` StorageUID string `gorm:"type:char(32)"` DashboardUID string `gorm:"type:char(32)"` Status uint8 `gorm:"default:0"` @@ -100,11 +104,11 @@ type Transition struct { db.ModelWithUID AuthUID string `gorm:"type:char(32);index"` UserUID string `gorm:"type:char(32);index"` + FromAccountUID string `gorm:"type:char(32);index"` + ToAccountUID string `gorm:"type:char(32);index"` Type uint8 `gorm:"default:0"` Status uint8 `gorm:"default:0"` Amount int `gorm:"default:0"` - FromAccountUID string `gorm:"type:char(32);index"` - ToAccountUID string `gorm:"type:char(32);index"` } func init() { db.CmdModels("", &UserAuth{}, &Auth{}, &Cert{}, &Account{}, &Transition{}) } diff --git a/src/renzhengshouquan/portal.go b/src/renzhengshouquan/portal.go index fbfcc49..989d5d8 100644 --- a/src/renzhengshouquan/portal.go +++ b/src/renzhengshouquan/portal.go @@ -45,9 +45,12 @@ func (s Portal) PlaceCreate(m *ice.Message, arg ...string) { func (s Portal) PlaceList(m *ice.Message, arg ...string) *ice.Message { s.Tables(m, s.Place).FieldsWithCreatedAT(m, s.UserPlace, model.AUTH_UID, model.AUTH_NAME, model.AUTH_INFO, model.AUTH_AVATAR, - model.AUTH_TYPE, model.AUTH_STATUS, model.USER_AUTH_ROLE) + model.AUTH_TYPE, model.AUTH_STATUS, model.USER_AUTH_ROLE, + model.SCORE, + ) if len(arg) == 1 { m.Cmdy(s.UserPlace, s.Table.Select, s.Key(s.UserPlace, model.USER_UID), arg[0]) + Auth{}.authSort(m) } else if len(arg) == 2 { m.FieldsSetDetail().Cmdy(s.UserPlace, s.Table.Select, s.Key(s.UserPlace, model.USER_UID), arg[0], s.Key(s.Place, model.UID), arg[1]) } else { diff --git a/src/renzhengshouquan/portal.json b/src/renzhengshouquan/portal.json index 7d4088c..a72a021 100644 --- a/src/renzhengshouquan/portal.json +++ b/src/renzhengshouquan/portal.json @@ -1,11 +1,11 @@ { "portal": "认证授权", - "cert": "上传证件", "auth": "认证授权", "admin": "管理后台", "profile": "用户名片", - "account": "账户", "transition": "账单", - "certList": "证件", "memberList": "成员", - "issue": "认证", "revoke": "吊销", "enter": "进入", - "verify": "验证", - "setScore": "排序", + "cert": "上传证件", "auth": "认证授权", "profile": "用户名片", "account": "账户", "transition": "账单", + "authMain": "认证主页", "memberList": "成员列表", "certList": "证件列表", + "cityInfo": "城市信息", "streetInfo": "街道信息", "companyInfo": "公司信息", "personalInfo": "个人信息", "placeMain": "服务主页", + "issue": "认证", "revoke": "吊销", "setScore": "排序", + "admin": "管理后台", + "enter": "进入", "verify": "验证", "style": { "issue": "notice", "revoke": "danger", diff --git a/src/renzhengshouquan/profile.go b/src/renzhengshouquan/profile.go index d7de935..ea33c54 100644 --- a/src/renzhengshouquan/profile.go +++ b/src/renzhengshouquan/profile.go @@ -11,8 +11,8 @@ import ( type profile struct { Auth order string `data:"3"` - modify string `name:"modify info" role:"leader,worker"` - upload string `name:"upload" role:"leader,worker"` + modify string `name:"modify info" role:"leader"` + upload string `name:"upload" role:"leader"` authList string `name:"authList" role:"void"` memberList string `name:"memberList" role:"void"` serviceList string `name:"serviceList" role:"void"` @@ -29,33 +29,24 @@ func (s profile) Upload(m *ice.Message, arg ...string) { } } func (s profile) List(m *ice.Message, arg ...string) { - if len(arg) == 0 { - s.Select(m).PushAction(s.Remove) - return - } s.Select(m, model.UID, arg[0]).Action() - name := m.Append(model.NAME) button := []ice.Any{} - if AuthType(kit.Int(m.Append(model.AUTH_TYPE))) == AuthService { - button = append(button, s.Enter) - } - kit.If(s.IsWorker(m), func() { button = append(button, s.Modify) }) + name := m.Append(model.NAME) switch AuthType(kit.Int(m.Append(model.AUTH_TYPE))) { case AuthService: s.SelectJoinRecent(m, "") s.SelectJoinService(m) + button = append(button, s.Enter) name = kit.JoinWord(m.Append(model.CITY_NAME), m.Append(model.STREET_NAME), m.Append(model.PLACE_NAME)) case AuthCompany: - // kit.If(s.IsWorker(m), func() { m.PushAction(s.Modify, s.Enter) }, func() { m.PushAction() }) case AuthPersonal: - s.SelectJoinUser(m) case AuthCity: case AuthRoot: } - m.PushAction(button...) - m.EchoQRCode(s.Link(m, arg[0], m.PrefixKey())).Echo(name) + kit.If(s.IsWorker(m), func() { button = append(button, s.Modify) }) + m.PushAction(button...).EchoQRCode(s.Link(m, arg[0], m.PrefixKey())).Echo(name) m.Display("").DisplayCSS("") - s.RewriteAppend(m) + // s.RewriteAppend(m) } func (s profile) AuthList(m *ice.Message, arg ...string) { m.Cmdy(s.Auth, arg[0]).Table(func(value ice.Maps) { @@ -70,24 +61,20 @@ func (s profile) AuthList(m *ice.Message, arg ...string) { s.authSort(m) } func (s profile) MemberList(m *ice.Message, arg ...string) { - user_uid := m.Option(model.USER_UID) + user_uid := m.Option(ice.MSG_USERUID) s.Fields(m, model.USER_UID) s.settingProfile(m, model.PLACE_UID, arg[0]) - if m.Length() == 0 { - return - } s.SelectJoinUser(m, model.NAME, model.INFO, model.AVATAR, model.BACKGROUND, model.AUTH_UID) s.SelectJoinAuth(m) m.Table(func(value ice.Maps) { if value[model.AUTH_STATUS] == "" && value[model.USER_UID] == user_uid { - // m.PushButton(s.AuthPersonal, s.Enter) - m.PushButton(s.AuthPersonal) + m.PushButton(s.AuthPersonal, s.Enter) } else { - // m.PushButton(s.Enter) + m.PushButton(s.Enter) } }) s.authSort(m) - s.RewriteAppend(m) + // s.RewriteAppend(m) } func (s profile) ServiceList(m *ice.Message, arg ...string) { msg := m.Spawn() @@ -100,8 +87,8 @@ func (s profile) ServiceList(m *ice.Message, arg ...string) { s.SelectList(m, kit.Simple(model.PLACE_UID, kit.Sort(list))...) s.SelectJoinRecent(m, "") s.SelectJoinService(m) - s.authSort(m) m.PushAction(s.Enter) + s.authSort(m) } func (s profile) FromList(m *ice.Message, arg ...string) { from := arg[0] diff --git a/src/renzhengshouquan/profile.js b/src/renzhengshouquan/profile.js index 4418639..b6c7790 100644 --- a/src/renzhengshouquan/profile.js +++ b/src/renzhengshouquan/profile.js @@ -22,7 +22,7 @@ Volcanos(chat.ONIMPORT, { if (!can.base.isIn(msg.Option(USER_ROLE), "1", "2", "3")) { delete(can.onaction.updateAvatar), delete(can.onaction.updateBackground) } }, authList: function(can, msg, action, uid, target) { - can.runAction({}, action||"authList", [uid||msg.Append(UID)], function(msg) { if (msg.Length() == 0) { return can.onmotion.hidden(can, target) } + can.runAction({}, action||"authList", [uid||msg.Append(UID)], function(msg) { if (msg.Length() == 0) { return target && can.onmotion.hidden(can, target) } can.onimport.myView(can, msg, function(value) { return [ {view: html.TITLE, list: [value.name, can.onimport.authView(can, value), can.onimport.textView(can, value, AUTH_TYPE), can.onimport.titleAction(can, value)]}, diff --git a/src/renzhengshouquan/transition.go b/src/renzhengshouquan/transition.go index 91e8246..db10b04 100644 --- a/src/renzhengshouquan/transition.go +++ b/src/renzhengshouquan/transition.go @@ -1,17 +1,31 @@ package renzhengshouquan -import "shylinux.com/x/ice" +import ( + "shylinux.com/x/ice" + + "shylinux.com/x/community/src/renzhengshouquan/model" +) type transition struct { Table - order string `data:"5"` - fields string `data:"transition_type,status,amount,from_account_uid,to_account_uid"` - create string `name:"create transition_type* amount* from_account_uid to_account_uid" role:"leader"` - remove string `name:"remove" role:"leader"` + order string `data:"5"` + fields string `data:"transition_type,status,amount,from_account_uid,to_account_uid"` + create string `name:"create transition_type* amount* from_account_uid to_account_uid" role:"leader"` + remove string `name:"remove" role:"leader"` + testMarket string `name:"testMarket domain_uid*:select title* content price" style:"notice" role:"leader"` + testMessage string `name:"testMessage from_user_uid*:select to_user_uid*:select title* content price" style:"notice" role:"worker"` + testTemplate string `name:"testMessage from_user_uid*:select to_user_uid*:select title*" style:"notice" role:"worker"` } func (s transition) List(m *ice.Message, arg ...string) { s.ValueList(m, arg).Display("") + m.PushAction(s.TestMessage, s.TestMarket) +} +func (s transition) TestMessage(m *ice.Message, arg ...string) { + s.SendMessage(m, m.Option(model.FROM_USER_UID), m.Option(model.TO_USER_UID), arg...) +} +func (s transition) TestMarket(m *ice.Message, arg ...string) { + s.MarketInsert(m, arg...) } func init() { ice.TeamCtxCmd(transition{}) }