This commit is contained in:
IT 老营长 @云轩领航-创始人 2025-06-17 14:54:40 +08:00
parent 455384a4fd
commit 52aa21e7ad
22 changed files with 204 additions and 158 deletions

View File

@ -1,8 +1,8 @@
Volcanos(chat.ONIMPORT, {
_init: function(can, msg) {
can.onimport.myView(can, msg, function(value) { return [
{view: html.TITLE, list: [value.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),
] })
},
})

View File

@ -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{}) }

View File

@ -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),
] })
},
})

View File

@ -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{}) }

View File

@ -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

View File

@ -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{}) }

View File

@ -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),
] })
},
})

View File

@ -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{}) }

View File

@ -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),
] })
},
})

View File

@ -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{}) }

View File

@ -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),
] })
},
})

View File

@ -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{}) }

View File

@ -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),
] })
},

View File

@ -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{})
}

View File

@ -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() {

View File

@ -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": {

View File

@ -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)))

View File

@ -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),
] })
},

View File

@ -1,3 +1 @@
$output div.info.action {
display:flex; flex-direction:column; align-items:center; row-gap:10px;
}
$output div.info.action { display:flex; flex-direction:column; align-items:center; row-gap:10px; }

View File

@ -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]) }
})
},
})

View File

@ -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{}) }

View File

@ -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),
] })
},
})