From 52aa21e7adb4fe6a548558489eafe6355075a0ee Mon Sep 17 00:00:00 2001 From: shy Date: Tue, 17 Jun 2025 14:54:40 +0800 Subject: [PATCH] add some --- src/template/web.code.js/demo.js | 4 +- src/yingxiaotuiguang/bonus.go | 5 +- src/yingxiaotuiguang/bonus.js | 17 ++-- src/yingxiaotuiguang/channel.go | 4 +- src/yingxiaotuiguang/common.go | 128 +++++++++++++++------------- src/yingxiaotuiguang/deal.go | 23 ++--- src/yingxiaotuiguang/deal.js | 10 ++- src/yingxiaotuiguang/document.go | 10 ++- src/yingxiaotuiguang/document.js | 8 +- src/yingxiaotuiguang/feedback.go | 22 ++++- src/yingxiaotuiguang/feedback.js | 6 +- src/yingxiaotuiguang/invite.go | 23 ++--- src/yingxiaotuiguang/invite.js | 7 +- src/yingxiaotuiguang/model/model.go | 31 ++++--- src/yingxiaotuiguang/portal.go | 1 - src/yingxiaotuiguang/portal.json | 20 +++-- src/yingxiaotuiguang/product.go | 14 +-- src/yingxiaotuiguang/product.js | 2 +- src/yingxiaotuiguang/publish.css | 4 +- src/yingxiaotuiguang/publish.js | 4 +- src/yingxiaotuiguang/visite.go | 8 +- src/yingxiaotuiguang/visite.js | 11 ++- 22 files changed, 204 insertions(+), 158 deletions(-) diff --git a/src/template/web.code.js/demo.js b/src/template/web.code.js/demo.js index 731a375..b836372 100644 --- a/src/template/web.code.js/demo.js +++ b/src/template/web.code.js/demo.js @@ -1,8 +1,8 @@ Volcanos(chat.ONIMPORT, { _init: function(can, msg) { can.onimport.myView(can, msg, function(value) { return [ - {view: html.TITLE, list: [value.title||value.name||value.user_name, can.onimport.titleAction(can, value)]}, can.onimport.metaView(can, value), - {view: html.OUTPUT, list: [value.content||value.info]}, + {view: html.TITLE, list: [value.title||value.name||value.user_name]}, can.onimport.metaView(can, value), + {view: html.OUTPUT, list: [value.content||value.info]}, can.onimport.titleAction(can, value), ] }) }, }) \ No newline at end of file diff --git a/src/yingxiaotuiguang/bonus.go b/src/yingxiaotuiguang/bonus.go index 59cc1bb..3c992e2 100644 --- a/src/yingxiaotuiguang/bonus.go +++ b/src/yingxiaotuiguang/bonus.go @@ -7,7 +7,6 @@ import ( type bonus struct { Table order string `data:"4"` - fields string `data:"product_uid,channel_uid,title,content,count,price,user_uid"` create string `name:"create product_uid*:select channel_uid*:select title content price*=100 count*=10 total*=100" role:"leader"` modify string `name:"modify title content price* count* total*" role:"leader"` remove string `name:"remove" role:"leader"` @@ -19,8 +18,8 @@ func (s bonus) List(m *ice.Message, arg ...string) { } else { m.PushAction() } - s.WaitLeaderCreate(m, "奖励激励") - s.OtherListCmd(m, s.DealList) + s.WaitLeaderCreate(m, "") + s.OtherListCmd(m, s.ProductList, s.DealList) } func init() { ice.TeamCtxCmd(bonus{}) } diff --git a/src/yingxiaotuiguang/bonus.js b/src/yingxiaotuiguang/bonus.js index 4f8502e..71ea5a8 100644 --- a/src/yingxiaotuiguang/bonus.js +++ b/src/yingxiaotuiguang/bonus.js @@ -1,14 +1,15 @@ Volcanos(chat.ONIMPORT, { _init: function(can, msg) { - can.onimport.shareTitle(can, msg, "product_name", "product_content", "product_icon") - can.onimport.myView(can, msg, function(value) { value.icons = value.product_icon; return [ - {view: html.TITLE, list: [ - value.title||value.product_title||value.product_name, - // value.channel_name, - can.onimport.spaceView(can, value), - can.onimport.moneyView(can, value), "/", value.count, "*", value.total, can.onimport.titleAction(can, value), + if (msg.IsDetail()) { var value = msg.TableDetail() + msg.Option("_share_title", value.title||value.product_title||value.product_name) + msg.Option("_share_content", value.content||value.product_content) + } + can.onimport.myView(can, msg, function(value) { return [ + {view: html.TITLE, list: [value.title||value.product_title||value.product_name, can.onimport.spaceView(can, value), + can.onimport.moneyView(can, value), "/", value.count, "x", value.total, can.onimport.titleAction(can, value), ]}, can.onimport.metaView(can, value), - {view: html.OUTPUT, list: [value.content||value.product_content]}, + {view: html.STATUS, list: [value.channel_name, value.product_title||value.product_name, can.onimport.unitView(can, value, "deal_count")]}, + {view: html.OUTPUT, list: [value.content||value.product_content]}, can.onimport.titleAction(can, value), ] }) }, }) \ No newline at end of file diff --git a/src/yingxiaotuiguang/channel.go b/src/yingxiaotuiguang/channel.go index 52a0148..bde251b 100644 --- a/src/yingxiaotuiguang/channel.go +++ b/src/yingxiaotuiguang/channel.go @@ -11,7 +11,7 @@ type channel struct { Table order string `data:"2"` fields string `data:"icon,name,info,invite_count AS invite_count,user_uid"` - create string `name:"create name* info* icon@img" role:"leader"` + create string `name:"create name* info icon@img" role:"leader"` modify string `name:"modify name info" role:"leader"` remove string `name:"remove" role:"leader"` } @@ -27,7 +27,7 @@ func (s channel) List(m *ice.Message, arg ...string) { } }) s.WaitLeaderCreate(m, "渠道") - s.OtherListCmd(m, s.InviteList, s.VisiteList, s.BonusList) + s.OtherListCmd(m, s.FeedbackList, s.BonusList, s.DealList, s.InviteList, s.VisiteList) } func init() { ice.TeamCtxCmd(channel{}) } diff --git a/src/yingxiaotuiguang/common.go b/src/yingxiaotuiguang/common.go index 9cf1c1e..d2607ad 100644 --- a/src/yingxiaotuiguang/common.go +++ b/src/yingxiaotuiguang/common.go @@ -14,6 +14,7 @@ type Table struct { guanlixitong.Table list string `name:"list promotion_uid uid auto" role:"void"` enter string `name:"enter" help:"进入系统" style:"notice" role:"void"` + productList string `name:"productList" role:"worker"` documentList string `name:"documentList" role:"worker"` feedbackList string `name:"feedbackList" role:"worker"` inviteList string `name:"inviteList" role:"worker"` @@ -34,12 +35,9 @@ func (s Table) Inputs(m *ice.Message, arg ...string) { s.InputsListCmd(m, channel{}) case model.BONUS_UID: s.BonusFields(m) - m.Cmdy(bonus{}, s.Select, - s.Key(bonus{}, model.PROMOTION_UID), m.Option(model.PROMOTION_UID), - s.Key(bonus{}, model.PRODUCT_UID), m.Option(model.PRODUCT_UID), - s.Key(bonus{}, model.CHANNEL_UID), m.Option(model.CHANNEL_UID)) + m.Cmdy(bonus{}, s.Select, s.Key(bonus{}, model.PROMOTION_UID), m.Option(model.PROMOTION_UID), + s.Key(bonus{}, model.PRODUCT_UID), m.Option(model.PRODUCT_UID), s.Key(bonus{}, model.CHANNEL_UID), m.Option(model.CHANNEL_UID)) m.Option("_input_args", model.UID, model.PRICE, model.PRODUCT_ICON) - m.Display("bonus.js") s.RewriteAppend(m) default: s.Table.Inputs(m, arg...) @@ -60,103 +58,117 @@ func (s Table) RewriteAppend(m *ice.Message, arg ...string) *ice.Message { }) return s.Table.RewriteAppend(m) } -func (s Deal) InviteList(m *ice.Message, arg ...string) { - s.InviteFields(m).OtherList(m, invite{}, s.Key(invite{}, model.UID), m.Option(model.INVITE_UID), s.Key(invite{}, model.PROMOTION_UID), m.Option(model.PROMOTION_UID)) + +func (s Table) ProductList(m *ice.Message, arg ...string) { + s.OtherList(m, product{}, model.UID, m.Option(model.PRODUCT_UID)) + m.PushAction("enter") } func (s Table) InviteList(m *ice.Message, arg ...string) { - if s.IsLeader(m) { - s.InviteFields(m).OtherList(m, invite{}) + if s.InviteFields(m); m.Option(model.INVITE_UID) == "" { + if s.IsLeader(m) { + s.OtherList(m, invite{}, s.Key(invite{}, m.CommandKey()+"_uid"), m.Option(model.UID), s.Key(invite{}, model.PROMOTION_UID), m.Option(model.PROMOTION_UID)) + } else { + s.OtherList(m, invite{}, s.Key(invite{}, m.CommandKey()+"_uid"), m.Option(model.UID), s.Key(invite{}, model.PROMOTION_UID), m.Option(model.PROMOTION_UID), s.Key(invite{}, model.USER_UID), m.Option(ice.MSG_USERUID)) + } } else { - s.InviteFields(m).OtherList(m, invite{}, s.Key(invite{}, model.PROMOTION_UID), m.Option(model.PROMOTION_UID), s.Key(invite{}, model.USER_UID), m.Option(model.USER_UID)) + s.OtherList(m, invite{}, s.Key(invite{}, model.UID), m.Option(model.INVITE_UID), s.Key(invite{}, model.PROMOTION_UID), m.Option(model.PROMOTION_UID)) } } func (s Table) VisiteList(m *ice.Message, arg ...string) { - if s.IsLeader(m) { - s.VisiteFields(m).OtherList(m, visite{}) + key := s.Key(invite{}, m.CommandKey()+"_uid") + kit.If(m.CommandKey() == "invite", func() { key = s.Key(invite{}, model.UID) }) + if s.VisiteFields(m); s.IsLeader(m) { + s.OtherList(m, visite{}, key, m.Option(model.UID), s.Key(visite{}, model.PROMOTION_UID), m.Option(model.PROMOTION_UID)) } else { - s.VisiteFields(m).OtherList(m, visite{}, s.Key(invite{}, model.PROMOTION_UID), m.Option(model.PROMOTION_UID), s.Key(invite{}, model.USER_UID), m.Option(model.USER_UID)) + s.OtherList(m, visite{}, key, m.Option(model.UID), s.Key(visite{}, model.PROMOTION_UID), m.Option(model.PROMOTION_UID), + s.Key(invite{}, model.USER_UID), m.Option(ice.MSG_USERUID)) } } func (s Table) BonusList(m *ice.Message, arg ...string) { - s.BonusFields(m).OtherList(m, bonus{}) + if s.BonusFields(m); m.Option(model.BONUS_UID) == "" { + if m.CommandKey() == "invite" { + s.OtherList(m, bonus{}, m.OptionSimple(model.PRODUCT_UID, model.CHANNEL_UID)...) + } else { + s.OtherList(m, bonus{}) + } + } else { + s.OtherList(m, bonus{}, s.Key(bonus{}, model.UID), m.Option(model.BONUS_UID)) + } +} +func (s Table) DealList(m *ice.Message, arg ...string) { + key := s.Key(invite{}, m.CommandKey()+"_uid") + kit.If(m.CommandKey() == "invite", func() { key = s.Key(invite{}, model.UID) }) + kit.If(m.CommandKey() == "bonus", func() { key = s.Key(bonus{}, model.UID) }) + if s.DealFields(m); s.IsLeader(m) { + s.OtherList(m, Deal{}, key, m.Option(model.UID)) + } else { + s.OtherList(m, Deal{}, key, m.Option(model.UID), model.TO_USER_UID, m.Option(ice.MSG_USERUID)) + } + m.RenameAppend(model.TO_USER_UID, model.USER_UID) } func (s Table) DocumentList(m *ice.Message, arg ...string) { s.DocumentFields(m).OtherList(m, document{}) } func (s Table) FeedbackList(m *ice.Message, arg ...string) { - s.FeedbackFields(m).OtherList(m, feedback{}) -} -func (s product) FeedbackList(m *ice.Message, arg ...string) { - s.FeedbackFields(m).OtherList(m, feedback{}, model.PRODUCT_UID, m.Option(model.UID)) -} -func (s Table) DealList(m *ice.Message, arg ...string) { - if m.Display("deal.js"); s.IsLeader(m) { - s.OtherList(m, Deal{}) + if s.FeedbackFields(m); s.IsLeader(m) { + s.OtherList(m, feedback{}, m.CommandKey()+"_uid", m.Option(model.UID)) } else { - s.OtherList(m, Deal{}, model.TO_USER_UID, m.Option(model.USER_UID)) + s.OtherList(m, feedback{}, m.CommandKey()+"_uid", m.Option(model.UID), s.Key(invite{}, model.USER_UID), m.Option(ice.MSG_USERUID)) } - m.RenameAppend(model.TO_USER_UID, model.USER_UID) -} -func (s product) DealList(m *ice.Message, arg ...string) { - s.DealFields(m) - if m.Display("deal.js"); s.IsLeader(m) { - s.OtherList(m, Deal{}, model.PRODUCT_UID, m.Option(model.UID)) - } else { - s.OtherList(m, Deal{}, model.PRODUCT_UID, m.Option(model.UID), model.TO_USER_UID, m.Option(model.USER_UID)) - } - m.RenameAppend(model.TO_USER_UID, model.USER_UID) -} -func (s Table) DealFields(m *ice.Message, arg ...string) Table { - m.Display("invite.js") - s.Tables(m, invite{}, product{}, channel{}).FieldsWithCreatedAT(m, Deal{}, - model.PRODUCT_UID, model.CHANNEL_UID, - model.PRODUCT_ICON, model.PRODUCT_NAME, model.PRODUCT_TITLE, model.PRODUCT_CONTENT, - s.Key(Deal{}, model.TO_USER_UID), - s.Key(Deal{}, model.TITLE), s.Key(Deal{}, model.CONTENT), s.Key(Deal{}, model.PRICE)) - return s } func (s Table) InviteFields(m *ice.Message, arg ...string) Table { m.Display("invite.js") - s.Tables(m, product{}, channel{}).FieldsWithCreatedAT(m, invite{}, - model.PRODUCT_UID, model.CHANNEL_UID, - model.PRODUCT_ICON, model.PRODUCT_NAME, model.PRODUCT_TITLE, model.PRODUCT_CONTENT, - s.Key(invite{}, model.TITLE), s.Key(invite{}, model.CONTENT), - s.Key(invite{}, model.VISITE_COUNT), model.BEGIN_TIME, model.END_TIME, model.CHANNEL_NAME, + s.Tables(m, product{}, channel{}).FieldsWithCreatedAT(m, invite{}, model.PRODUCT_UID, model.CHANNEL_UID, + model.PRODUCT_ICON, model.PRODUCT_NAME, model.PRODUCT_TITLE, model.PRODUCT_CONTENT, model.CHANNEL_NAME, + s.Key(product{}, model.LINK), + s.Key(invite{}, model.TITLE), s.Key(invite{}, model.CONTENT), s.Key(invite{}, model.VISITE_COUNT), model.BEGIN_TIME, model.END_TIME, s.Key(invite{}, model.USER_UID)) return s } func (s Table) VisiteFields(m *ice.Message, arg ...string) Table { m.Display("visite.js") s.Tables(m, invite{}, product{}, channel{}).FieldsWithCreatedAT(m, visite{}, - model.PRODUCT_UID, model.CHANNEL_UID, - model.PRODUCT_NAME, model.PRODUCT_TITLE, model.CHANNEL_NAME, + s.Key(invite{}, model.PRODUCT_UID), s.Key(invite{}, model.CHANNEL_UID), + model.PRODUCT_ICON, model.PRODUCT_NAME, model.PRODUCT_TITLE, model.PRODUCT_CONTENT, model.CHANNEL_NAME, + model.INVITE_UID, model.INVITE_TITLE, model.INVITE_CONTENT, model.LOCATION, model.IP, model.UA, model.AGENT, model.SYSTEM, s.Key(visite{}, model.USER_UID)) return s } func (s Table) BonusFields(m *ice.Message, arg ...string) Table { m.Display("bonus.js") - s.Tables(m, product{}, channel{}).FieldsWithCreatedAT(m, bonus{}, - model.PRODUCT_UID, model.CHANNEL_UID, - model.PRODUCT_ICON, model.PRODUCT_NAME, model.PRODUCT_TITLE, model.CHANNEL_NAME, + s.Tables(m, product{}, channel{}).FieldsWithCreatedAT(m, bonus{}, model.PRODUCT_UID, model.CHANNEL_UID, + model.PRODUCT_ICON, model.PRODUCT_NAME, model.PRODUCT_TITLE, model.PRODUCT_CONTENT, model.CHANNEL_NAME, s.Key(bonus{}, model.TITLE), s.Key(bonus{}, model.CONTENT), model.PRICE, model.COUNT, model.TOTAL, + s.Key(bonus{}, model.DEAL_COUNT), s.Key(bonus{}, model.USER_UID)) return s } +func (s Table) DealFields(m *ice.Message, arg ...string) Table { + m.Display("deal.js") + s.Tables(m, bonus{}, invite{}, "LEFT JOIN products ON invites.product_uid = products.uid", "LEFT JOIN channels ON invites.channel_uid = channels.uid").FieldsWithCreatedAT(m, Deal{}, + s.Key(invite{}, model.PRODUCT_UID), s.Key(invite{}, model.CHANNEL_UID), + model.PRODUCT_ICON, model.PRODUCT_NAME, model.PRODUCT_TITLE, model.PRODUCT_CONTENT, model.CHANNEL_NAME, + model.INVITE_UID, model.INVITE_TITLE, model.INVITE_CONTENT, + model.BONUS_UID, model.BONUS_TITLE, model.BONUS_CONTENT, + // s.Key(Deal{}, model.TITLE), s.Key(Deal{}, model.CONTENT), + s.Key(Deal{}, model.PRICE), + s.Key(Deal{}, model.TO_USER_UID)) + return s +} func (s Table) DocumentFields(m *ice.Message, arg ...string) Table { m.Display("document.js") - s.Tables(m, product{}).FieldsWithCreatedAT(m, document{}, - model.PRODUCT_UID, - model.PRODUCT_ICON, model.PRODUCT_NAME, model.PRODUCT_TITLE, + s.Tables(m, product{}).FieldsWithCreatedAT(m, document{}, model.PRODUCT_UID, + model.PRODUCT_ICON, model.PRODUCT_NAME, model.PRODUCT_TITLE, model.PRODUCT_CONTENT, s.Key(document{}, model.TITLE), s.Key(document{}, model.CONTENT), s.Key(document{}, model.LINK), s.Key(document{}, model.USER_UID)) return s } func (s Table) FeedbackFields(m *ice.Message, arg ...string) Table { m.Display("feedback.js") - s.Tables(m, invite{}, product{}, channel{}).FieldsWithCreatedAT(m, feedback{}, - model.PRODUCT_UID, model.CHANNEL_UID, - model.PRODUCT_ICON, model.PRODUCT_NAME, model.PRODUCT_TITLE, model.CHANNEL_NAME, + s.Tables(m, invite{}, product{}, channel{}).FieldsWithCreatedAT(m, feedback{}, model.PRODUCT_UID, model.CHANNEL_UID, + model.PRODUCT_ICON, model.PRODUCT_NAME, model.PRODUCT_TITLE, model.PRODUCT_CONTENT, model.CHANNEL_NAME, + model.INVITE_UID, model.INVITE_TITLE, model.INVITE_CONTENT, s.Key(feedback{}, model.TITLE), s.Key(feedback{}, model.CONTENT), s.Key(feedback{}, model.USER_UID)) return s diff --git a/src/yingxiaotuiguang/deal.go b/src/yingxiaotuiguang/deal.go index 37cf9eb..d5393a6 100644 --- a/src/yingxiaotuiguang/deal.go +++ b/src/yingxiaotuiguang/deal.go @@ -2,7 +2,6 @@ package yingxiaotuiguang import ( "shylinux.com/x/ice" - kit "shylinux.com/x/toolkits" "shylinux.com/x/enterprise/src/yingxiaotuiguang/model" ) @@ -10,32 +9,36 @@ import ( type Deal struct { Table order string `data:"13"` - fields string `data:"from_user_uid,to_user_uid,price,title,content,invite_uid"` - create string `name:"create invite_uid* bonus_uid* from_user_uid* to_user_uid* price* title* content" role:"leader"` + create string `name:"create invite_uid* bonus_uid* from_user_uid* to_user_uid* title* content" role:"leader"` modify string `name:"modify title* content" role:"leader"` } func (s Deal) Create(m *ice.Message, arg ...string) { + msg := m.Cmd(bonus{}, s.Select, model.UID, m.Option(model.BONUS_UID)) + s.RewriteAppend(msg) + arg = append(arg, model.PRICE, msg.Append(model.PRICE)) s.ValueCreate(m, arg...) + s.TargetAddCount(m, bonus{}, model.BONUS_COUNT) } func (s Deal) List(m *ice.Message, arg ...string) { - if s.IsLeader(m) { + if s.DealFields(m); s.IsLeader(m) { s.ValueList(m, arg) - defer m.PushAction(s.Remove) } else { if len(arg) == 1 { - s.Select(m, model.PROMOTION_UID, arg[0], model.TO_USER_UID, m.Option(model.USER_UID)) - kit.If(m.Length() == 0, func() { m.Echo("请等待管理人员支付工钱") }) + s.Select(m, s.Key(s, model.PROMOTION_UID), arg[0], model.TO_USER_UID, m.Option(model.USER_UID)) } else { - s.SelectDetail(m, model.UID, arg[1], model.PROMOTION_UID, arg[0], model.TO_USER_UID, m.Option(model.USER_UID)) + s.SelectDetail(m, s.Key(s, model.UID), arg[1], s.Key(s, model.PROMOTION_UID), arg[0], model.TO_USER_UID, m.Option(model.USER_UID)) } } - if m.PushAction().Action().Display(""); s.IsLeader(m) { + if s.IsLeader(m) { m.RenameAppend(model.TO_USER_UID, model.USER_UID) + m.PushAction(s.Remove).Action() } else { m.RenameAppend(model.FROM_USER_UID, model.USER_UID) + m.PushAction().Action() } - s.OtherListCmd(m, s.InviteList) + s.WaitLeaderCreate(m, "") + s.OtherListCmd(m, s.ProductList, s.InviteList, s.BonusList) } func init() { ice.TeamCtxCmd(Deal{}) } diff --git a/src/yingxiaotuiguang/deal.js b/src/yingxiaotuiguang/deal.js index 0eeb054..977f46b 100644 --- a/src/yingxiaotuiguang/deal.js +++ b/src/yingxiaotuiguang/deal.js @@ -1,9 +1,13 @@ Volcanos(chat.ONIMPORT, { _init: function(can, msg) { + if (msg.IsDetail()) { var value = msg.TableDetail() + msg.Option("_share_title", value.title||value.bonus_title||value.invite_title||value.product_title||value.product_name) + msg.Option("_share_content", value.content||value.bonus_content||value.invite_content||value.product_content) + } can.onimport.myView(can, msg, function(value) { return [ - {view: html.TITLE, list: [value.title, can.onimport.moneyView(can, value)]}, - {view: html.STATUS, list: [can.onimport.uidView(can, value), can.onimport.timeView(can, value), value.user_name]}, - {view: html.OUTPUT, list: [value.content]}, + {view: html.TITLE, list: [value.product_title||value.product_name, value.title||value.bonus_title||value.invite_title||value.product_title||value.product_name, can.onimport.moneyView(can, value)]}, can.onimport.metaView(can, value), + // {view: html.STATUS, list: [value.channel_name, value.product_title||value.product_name]}, + // {view: html.OUTPUT, list: [value.content||value.bonus_content||value.invite_content||value.product_content]}, can.onimport.titleAction(can, value), ] }) }, }) diff --git a/src/yingxiaotuiguang/document.go b/src/yingxiaotuiguang/document.go index 33bd9bf..43131e6 100644 --- a/src/yingxiaotuiguang/document.go +++ b/src/yingxiaotuiguang/document.go @@ -1,17 +1,21 @@ package yingxiaotuiguang -import "shylinux.com/x/ice" +import ( + "shylinux.com/x/ice" + kit "shylinux.com/x/toolkits" +) type document struct { Table order string `data:"11"` - fields string `data:"product_uid,title,content,link,user_uid"` create string `name:"create product_uid*:select title content link" role:"worker"` - remove string `name:"remove" role:"worker"` + remove string `name:"remove" role:"leader"` } func (s document) List(m *ice.Message, arg ...string) { s.DocumentFields(m).ValueList(m, arg) + kit.If(!s.IsLeader(m), func() { m.PushAction() }) + s.OtherListCmd(m, s.ProductList) } func init() { ice.TeamCtxCmd(document{}) } diff --git a/src/yingxiaotuiguang/document.js b/src/yingxiaotuiguang/document.js index 731a375..6e775c5 100644 --- a/src/yingxiaotuiguang/document.js +++ b/src/yingxiaotuiguang/document.js @@ -1,8 +1,12 @@ Volcanos(chat.ONIMPORT, { _init: function(can, msg) { + if (msg.IsDetail()) { var value = msg.TableDetail() + msg.Option("_share_title", value.title||value.product_title||value.product_name) + msg.Option("_share_content", value.content||value.product_content) + } can.onimport.myView(can, msg, function(value) { return [ - {view: html.TITLE, list: [value.title||value.name||value.user_name, can.onimport.titleAction(can, value)]}, can.onimport.metaView(can, value), - {view: html.OUTPUT, list: [value.content||value.info]}, + {view: html.TITLE, list: [value.title||value.product_title||value.product_name]}, can.onimport.metaView(can, value), + {view: html.OUTPUT, list: [value.content||value.product_content]}, can.onimport.titleAction(can, value), ] }) }, }) \ No newline at end of file diff --git a/src/yingxiaotuiguang/feedback.go b/src/yingxiaotuiguang/feedback.go index bafc585..6a68d75 100644 --- a/src/yingxiaotuiguang/feedback.go +++ b/src/yingxiaotuiguang/feedback.go @@ -1,17 +1,31 @@ package yingxiaotuiguang -import "shylinux.com/x/ice" +import ( + "shylinux.com/x/ice" + + "shylinux.com/x/enterprise/src/yingxiaotuiguang/model" +) type feedback struct { Table order string `data:"12"` - fields string `data:"invite_uid,title,content,user_uid"` create string `name:"create invite_uid*:select title* content*" role:"void"` - remove string `name:"remove" role:"void"` + remove string `name:"remove" role:"leader"` } func (s feedback) List(m *ice.Message, arg ...string) { - s.FeedbackFields(m).ValueList(m, arg) + s.FeedbackFields(m) + if s.IsLeader(m) { + s.ValueList(m, arg) + } else { + if len(arg) == 1 { + s.Select(m, s.Key(s, model.PROMOTION_UID), arg[0], s.Key(invite{}, model.USER_UID), m.Option(ice.MSG_USERUID)) + } else { + s.SelectDetail(m, s.Key(s, model.UID), arg[1], s.Key(s, model.PROMOTION_UID), arg[0], s.Key(invite{}, model.USER_UID), m.Option(ice.MSG_USERUID)) + } + m.PushAction().Action() + } + s.OtherListCmd(m, s.ProductList, s.InviteList) } func init() { ice.TeamCtxCmd(feedback{}) } diff --git a/src/yingxiaotuiguang/feedback.js b/src/yingxiaotuiguang/feedback.js index b092f74..f57dc38 100644 --- a/src/yingxiaotuiguang/feedback.js +++ b/src/yingxiaotuiguang/feedback.js @@ -1,9 +1,9 @@ Volcanos(chat.ONIMPORT, { _init: function(can, msg) { can.onimport.myView(can, msg, function(value) { return [ - {view: html.TITLE, list: [value.title||value.name||value.user_name, can.onimport.titleAction(can, value)]}, can.onimport.metaView(can, value), - {view: html.STATUS, list: ["产品名称: ", value.product_title||value.product_name, "渠道名称: ", value.channel_name]}, - {view: html.OUTPUT, list: [value.content||value.info]}, + {view: html.TITLE, list: [value.title]}, can.onimport.metaView(can, value), + {view: html.STATUS, list: [value.channel_name, value.product_title||value.product_name]}, + {view: html.OUTPUT, list: [value.content]}, can.onimport.titleAction(can, value), ] }) }, }) \ No newline at end of file diff --git a/src/yingxiaotuiguang/invite.go b/src/yingxiaotuiguang/invite.go index 79feb48..a5ffff1 100644 --- a/src/yingxiaotuiguang/invite.go +++ b/src/yingxiaotuiguang/invite.go @@ -11,10 +11,8 @@ type invite struct { Table order string `data:"3"` portal string `data:"true"` - fields string `data:"product_uid,channel_uid,title,content,user_uid"` create string `name:"create product_uid*:select channel_uid*:select title content" role:"worker"` modify string `name:"modify title content" role:"worker"` - remove string `name:"remove" role:"worker"` publish string `name:"publish" help:"发布邀请" style:"notice" role:"worker"` payfor string `name:"payfor bonus_uid* title* content" help:"支付" style:"notice" role:"leader"` } @@ -25,6 +23,7 @@ func (s invite) Create(m *ice.Message, arg ...string) { s.TargetAddCount(m, product{}) s.TargetAddCount(m, channel{}) }) + m.ProcessField(publish{}, []string{m.Option(model.PROMOTION_UID), m.Result()}) } func (s invite) Remove(m *ice.Message, arg ...string) { s.Transaction(m, func() { @@ -44,9 +43,7 @@ func (s invite) List(m *ice.Message, arg ...string) { } else { if len(arg) == 1 { s.Select(m, s.Key(s, model.PROMOTION_UID), arg[0], s.Key(s, model.USER_UID), m.Option(model.USER_UID)) - if s.IsWorker(m) && m.Length() == 0 { - m.EchoInfoButton("") - } + kit.If(m.Length() == 0, func() { m.EchoInfoButton("") }) } else { s.SelectDetail(m, s.Key(s, model.UID), arg[1], s.Key(s, model.PROMOTION_UID), arg[0]) } @@ -54,22 +51,19 @@ func (s invite) List(m *ice.Message, arg ...string) { m.Table(func(value ice.Maps) { button := []ice.Any{s.Enter, s.Publish} defer func() { m.PushButton(button...) }() - if s.IsCreator(m) { - button = append(button, s.Payfor) - } + kit.If(s.IsCreator(m), func() { button = append(button, s.Payfor) }) if value[model.USER_UID] == m.Option(ice.MSG_USERUID) || s.IsLeader(m) { if button = append(button, s.Modify); kit.Int(value[model.VISITE_COUNT]) == 0 { button = append(button, s.Remove) } } }) - s.WaitWorkerCreate(m, "推广链接") - s.OtherListCmd(m, s.DealList, s.FeedbackList, s.VisiteList) + s.WaitWorkerCreate(m, "") + s.OtherListCmd(m, s.ProductList, s.FeedbackList, s.BonusList, s.DealList, s.VisiteList) } func (s invite) Enter(m *ice.Message, arg ...string) { defer m.Cmd(visite{}, s.Create, model.INVITE_UID, m.Option(model.UID)) - msg := m.Cmd(s, s.Select, m.OptionSimple(model.UID, model.PROMOTION_UID)) - m.Cmdy(product{}, m.ActionKey(), kit.Dict(model.UID, msg.Append(model.PRODUCT_UID))) + m.Cmdy(product{}, m.ActionKey(), kit.Dict(model.UID, m.Option(model.PRODUCT_UID))) } func (s invite) Publish(m *ice.Message, arg ...string) { m.ProcessField(publish{}, []string{m.Option(model.PLACE_UID), m.Option(model.UID)}, arg...) @@ -79,10 +73,7 @@ func (s invite) MarketInsert(m *ice.Message, arg ...string) { s.Table.MarketInsert(m, arg...) } func (s invite) Payfor(m *ice.Message, arg ...string) { - msg := m.Cmd(bonus{}, s.Select, model.UID, m.Option(model.BONUS_UID)) - s.RewriteAppend(msg) - arg = append(arg, model.PRICE, msg.Append(model.PRICE)) - m.Cmdy(Deal{}, s.Create, model.INVITE_UID, m.Option(model.UID), m.OptionSimple(model.BONUS_UID, model.FROM_USER_UID, model.TO_USER_UID), arg) + m.Cmdy(Deal{}, s.Create, model.INVITE_UID, m.Option(model.UID), m.OptionSimple(model.FROM_USER_UID, model.TO_USER_UID), arg) } func init() { ice.TeamCtxCmd(invite{}) } diff --git a/src/yingxiaotuiguang/invite.js b/src/yingxiaotuiguang/invite.js index 821b3fd..404c957 100644 --- a/src/yingxiaotuiguang/invite.js +++ b/src/yingxiaotuiguang/invite.js @@ -1,9 +1,12 @@ Volcanos(chat.ONIMPORT, { _init: function(can, msg) { - can.onimport.shareTitle(can, msg, msg.Append("product_title")? "product_tile": "product_name", "product_content", "product_icon") + if (msg.IsDetail()) { var value = msg.TableDetail() + msg.Option("_share_title", value.title||value.product_title||value.product_name) + msg.Option("_share_content", value.content||value.product_content) + } can.onimport.myView(can, msg, function(value) { return [ {view: html.TITLE, list: [value.title||value.product_title||value.product_name]}, can.onimport.metaView(can, value), - {view: html.STATUS, list: [can.onimport.unitView(can, value, "product_name"), value.channel_name, can.onimport.unitView(can, value, "visite_count")]}, + {view: html.STATUS, list: [value.channel_name, value.product_title||value.product_name, can.onimport.unitView(can, value, "visite_count")]}, {view: html.OUTPUT, list: [value.content||value.product_content]}, can.onimport.titleAction(can, value), ] }) }, diff --git a/src/yingxiaotuiguang/model/model.go b/src/yingxiaotuiguang/model/model.go index 5033d00..704e431 100644 --- a/src/yingxiaotuiguang/model/model.go +++ b/src/yingxiaotuiguang/model/model.go @@ -4,13 +4,14 @@ import "shylinux.com/x/mysql-story/src/db" const ( UID = "uid" + ICON = "icon" NAME = "name" INFO = "info" - ICON = "icon" TYPE = "type" STATUS = "status" - COUNT = "count" PRICE = "price" + COUNT = "count" + TOTAL = "total" LINK = "link" TITLE = "title" CONTENT = "content" @@ -28,28 +29,32 @@ const ( CHANNEL_NAME = "channel_name" INVITE_UID = "invite_uid" INVITE_COUNT = "invite_count" + INVITE_TITLE = "invite_title" + INVITE_CONTENT = "invite_content" VISITE_COUNT = "visite_count" + BONUS_UID = "bonus_uid" + BONUS_COUNT = "bonus_count" + BONUS_TITLE = "bonus_title" + BONUS_CONTENT = "bonus_content" + DEAL_COUNT = "deal_count" SERVICE_UID = "service_uid" RECENT_UID = "recent_uid" + PLACE_UID = "place_uid" + PLACE_NAME = "place_name" + PLACE_AVATAR = "place_avatar" LOCATION = "location" IP = "ip" UA = "ua" AGENT = "agent" SYSTEM = "system" - PLACE_UID = "place_uid" - PLACE_NAME = "place_name" - PLACE_AVATAR = "place_avatar" - BEGIN_TIME = "begin_time" - END_TIME = "end_time" SPACE = "space" INDEX = "index" SCORE = "score" - TOTAL = "total" - UPDATED_AT = "updated_at" - NODENAME = "nodename" FROM_USER_UID = "from_user_uid" TO_USER_UID = "to_user_uid" - BONUS_UID = "bonus_uid" + UPDATED_AT = "updated_at" + BEGIN_TIME = "begin_time" + END_TIME = "end_time" ) type UserPromotion struct { @@ -69,6 +74,7 @@ type Product struct { Index string `gorm:"type:varchar(128)"` Name string `gorm:"type:varchar(32)"` Icon string `gorm:"type:varchar(255)"` + Link string `gorm:"type:varchar(255)"` InviteCount int `gorm:"default:0"` BeginTime db.Time EndTime db.Time @@ -108,7 +114,6 @@ type Bonus struct { } type Deal struct { db.ModelContent - CompanyUID string `gorm:"type:char(32);index"` PromotionUID string `gorm:"type:char(32);index"` InviteUID string `gorm:"type:char(32);index"` BonusUID string `gorm:"type:char(32);index"` @@ -129,5 +134,5 @@ type Feedback struct { } func init() { - db.CmdModels("", &UserPromotion{}, &Promotion{}, &Product{}, &Channel{}, &Invite{}, &Visite{}, &Bonus{}, &Deal{}, &Feedback{}, &Document{}) + db.CmdModels("", &UserPromotion{}, &Promotion{}, &Product{}, &Channel{}, &Invite{}, &Visite{}, &Bonus{}, &Deal{}, &Document{}, &Feedback{}) } diff --git a/src/yingxiaotuiguang/portal.go b/src/yingxiaotuiguang/portal.go index 14e1484..86f3d84 100644 --- a/src/yingxiaotuiguang/portal.go +++ b/src/yingxiaotuiguang/portal.go @@ -8,7 +8,6 @@ import ( type Portal struct { guanlixitong.Portal placeCreate string `name:"placeCreate city_name* company_name* promotion_name*" role:"void"` - // placeCreate string `name:"placeCreate city_name* company_name* promotion_name* promotion_type:select" role:"void"` } func init() { diff --git a/src/yingxiaotuiguang/portal.json b/src/yingxiaotuiguang/portal.json index b7c1916..3180952 100644 --- a/src/yingxiaotuiguang/portal.json +++ b/src/yingxiaotuiguang/portal.json @@ -1,10 +1,10 @@ { "portal": "营销推广", - "product": "产品管理", "channel": "渠道管理", "invite": "推广链接", "visite": "访问记录", "bonus": "奖励激励", "deal": "支付记录", - "inviteList": "推广链接", "visiteList": "访问记录", "bonusList": "奖励激励", "dealList": "支付记录", - "publish": "发布邀请", + "product": "产品管理", "channel": "渠道管理", "invite": "邀请链接", "visite": "访客记录", "bonus": "奖励机制", "deal": "支付记录", "document": "文档教程", "feedback": "体验反馈", - "documentList": "文档教程", "feedbackList": "体验反馈", + "productList": "产品信息", "documentList": "文档教程", "feedbackList": "体验反馈", + "inviteList": "邀请链接", "visiteList": "访客记录", "bonusList": "奖励机制", "dealList": "支付记录", + "publish": "发布邀请", "icons": { "product": "product.png", "channel": "channel.png", @@ -12,9 +12,9 @@ "publish": "invite.png", "visite": "visite.png", "bonus": "bonus.png", + "deal": "deal.png", "document": "document.png", - "feedback": "feedback.png", - "deal": "deal.png" + "feedback": "feedback.png" }, "input": { "My Promotion": "我的营销", @@ -28,9 +28,15 @@ "product_content": "产品内容", "channel_uid": "渠道", "channel_name": "渠道名称", + "invite_uid": "推广链接", "invite_count": "邀请数量", + "invite_title": "邀请标题", + "invite_content": "邀请内容", "visite_count": "访客数量", - "recent_uid": "产品" + "deal_count": "奖励数量", + "bonus_uid": "奖励", + "bonus_title": "奖励标题", + "bonus_content": "奖励内容" }, "value": { "user_promotion_role": { diff --git a/src/yingxiaotuiguang/product.go b/src/yingxiaotuiguang/product.go index d717d7e..e883efd 100644 --- a/src/yingxiaotuiguang/product.go +++ b/src/yingxiaotuiguang/product.go @@ -11,8 +11,8 @@ import ( type product struct { Table order string `data:"1"` - fields string `data:"icon,name,title,content,invite_count AS invite_count,begin_time,end_time,user_uid"` - create string `name:"create service_uid*:select place_uid:select title content begin_time:select@date end_time:select@date" role:"leader"` + fields string `data:"icon,name,title,content,link,invite_count AS invite_count,begin_time,end_time,user_uid"` + create string `name:"create service_uid*:select place_uid:select title content link begin_time:select@date end_time:select@date" role:"leader"` modify string `name:"modify title content" role:"leader"` remove string `name:"remove" role:"leader"` document string `name:"document title content link" role:"leader"` @@ -36,15 +36,15 @@ func (s product) Inputs(m *ice.Message, arg ...string) { func (s product) Create(m *ice.Message, arg ...string) { m.Options(arg).OptionDefault(model.BEGIN_TIME, m.Time(), model.END_TIME, m.Time("720h")) if m.Option(model.PLACE_UID) == "" { - msg := m.Cmd(s.PrefixService(m), s.Select, model.UID, m.Option(model.SERVICE_UID)).RenameAppend(model.NODENAME, model.SPACE) + msg := m.Cmd(s.PrefixService(m), s.Select, model.UID, m.Option(model.SERVICE_UID)) s.ValueCreate(m, kit.Simple(msg.AppendSimple(model.SERVICE_UID, model.SPACE, model.INDEX, model.NAME, model.ICON), - m.OptionSimple(model.TITLE, model.CONTENT, model.BEGIN_TIME, model.END_TIME))...) + m.OptionSimple(model.TITLE, model.CONTENT, model.LINK, model.BEGIN_TIME, model.END_TIME))...) } else { msg := m.Cmd(s.PrefixRecent(m), s.Select, m.OptionSimple(model.PLACE_UID, model.SERVICE_UID, model.USER_UID)) s.SelectJoinService(msg) s.ValueCreate(m, kit.Simple(msg.AppendSimple(model.SERVICE_UID, model.PLACE_UID, model.SPACE, model.INDEX), model.ICON, msg.Append(model.PLACE_AVATAR), model.NAME, msg.Append(model.PLACE_NAME), - m.OptionSimple(model.TITLE, model.CONTENT, model.BEGIN_TIME, model.END_TIME))...) + m.OptionSimple(model.TITLE, model.CONTENT, model.LINK, model.BEGIN_TIME, model.END_TIME))...) } } func (s product) List(m *ice.Message, arg ...string) { @@ -61,6 +61,10 @@ func (s product) List(m *ice.Message, arg ...string) { s.OtherListCmd(m, s.DocumentList, s.FeedbackList, s.BonusList, s.DealList, s.InviteList, s.VisiteList) } func (s product) Enter(m *ice.Message, arg ...string) { + if m.Option(model.LINK) != "" { + m.ProcessOpen(m.Option(model.LINK)) + return + } s.Fields(m, model.SPACE, model.INDEX, model.PLACE_UID).Select(m, m.OptionSimple(model.UID, model.PROMOTION_UID)...) if m.Append(model.INDEX) != "" { m.ProcessOpen(s.SpaceLink(m, m.Append(model.SPACE), m.Append(model.INDEX), m.Append(model.PLACE_UID))) diff --git a/src/yingxiaotuiguang/product.js b/src/yingxiaotuiguang/product.js index 5dea422..a890faa 100644 --- a/src/yingxiaotuiguang/product.js +++ b/src/yingxiaotuiguang/product.js @@ -2,7 +2,7 @@ Volcanos(chat.ONIMPORT, { _init: function(can, msg) { can.onimport.myView(can, msg, function(value) { return [ {view: html.TITLE, list: [value.title||value.name]}, can.onimport.metaView(can, value), - {view: html.STATUS, list: [can.onimport.unitView(can, value, "invite_count"), "推广期:", can.onimport.beginTime(can, value)]}, + {view: html.STATUS, list: ["推广期:", can.onimport.beginTime(can, value), can.onimport.unitView(can, value, "invite_count")]}, {view: html.OUTPUT, list: [value.content]}, can.onimport.titleAction(can, value), ] }) }, diff --git a/src/yingxiaotuiguang/publish.css b/src/yingxiaotuiguang/publish.css index 287bc8a..d9888c8 100644 --- a/src/yingxiaotuiguang/publish.css +++ b/src/yingxiaotuiguang/publish.css @@ -1,3 +1 @@ -$output div.info.action { - display:flex; flex-direction:column; align-items:center; row-gap:10px; -} \ No newline at end of file +$output div.info.action { display:flex; flex-direction:column; align-items:center; row-gap:10px; } \ No newline at end of file diff --git a/src/yingxiaotuiguang/publish.js b/src/yingxiaotuiguang/publish.js index c5fada4..8b9937c 100644 --- a/src/yingxiaotuiguang/publish.js +++ b/src/yingxiaotuiguang/publish.js @@ -4,9 +4,7 @@ Volcanos(chat.ONIMPORT, { can.page.Append(can, can._output, [{view: "info", list: [{text: "推广期: "}, {text: can.onimport.beginTime(can, value)}]}]) can.page.Append(can, can._output, [{view: "info action", inner: value.action}]) can.page.Select(can, can._output, html.INPUT_BUTTON, function(target) { - target.onclick = function(event) { - can.run(can.request(event, value), [ctx.ACTION, target.name]) - } + target.onclick = function(event) { can.run(can.request(event, value), [ctx.ACTION, target.name]) } }) }, }) \ No newline at end of file diff --git a/src/yingxiaotuiguang/visite.go b/src/yingxiaotuiguang/visite.go index ee3a72a..30dddbe 100644 --- a/src/yingxiaotuiguang/visite.go +++ b/src/yingxiaotuiguang/visite.go @@ -10,10 +10,7 @@ import ( type visite struct { Table - order string `data:"4"` - fields string `data:"invite_uid,user_uid"` - create string `name:"create invite_uid*" role:"leader"` - remove string `name:"remove" role:"leader"` + order string `data:"4"` } func (s visite) Create(m *ice.Message, arg ...string) { @@ -28,8 +25,8 @@ func (s visite) Create(m *ice.Message, arg ...string) { }) } func (s visite) List(m *ice.Message, arg ...string) { - s.Limit(m, 3000) if s.VisiteFields(m); s.IsLeader(m) { + s.Limit(m, 3000) s.ValueList(m, arg) } else { if len(arg) == 1 { @@ -40,6 +37,7 @@ func (s visite) List(m *ice.Message, arg ...string) { } m.PushAction().Action() kit.If(m.Length() == 0, func() { m.SetResult("请等待用户访问") }) + s.OtherListCmd(m, s.ProductList, s.FeedbackList, s.InviteList) } func init() { ice.TeamCtxCmd(visite{}) } diff --git a/src/yingxiaotuiguang/visite.js b/src/yingxiaotuiguang/visite.js index 5191628..a5cd3a0 100644 --- a/src/yingxiaotuiguang/visite.js +++ b/src/yingxiaotuiguang/visite.js @@ -1,10 +1,13 @@ Volcanos(chat.ONIMPORT, { _init: function(can, msg) { - can.onimport.shareTitle(can, msg, "product_name", "product_content", "product_icon") + if (msg.IsDetail()) { var value = msg.TableDetail() + msg.Option("_share_title", value.invite_title||value.product_title||value.product_name) + msg.Option("_share_content", value.invite_content||value.product_content) + } can.onimport.myViewTabs(can, "system", msg, function(value) { return [ - {view: html.TITLE, list: [value.product_title||value.product_name, value.channel_name, can.onimport.titleAction(can, value)]}, can.onimport.metaView(can, value), - {view: html.STATUS, list: [value.agent, value.system, value.ip, value.location]}, - {view: html.OUTPUT, list: [value.ua]}, + {view: html.TITLE, list: [value.invite_title||value.product_title||value.product_name]}, can.onimport.metaView(can, value), + {view: html.STATUS, list: [value.product_title||value.product_name, value.channel_name, value.agent, value.system, value.ip, value.location]}, + {view: html.OUTPUT, list: [value.ua]}, can.onimport.titleAction(can, value), ] }) }, }) \ No newline at end of file