This commit is contained in:
IT 老营长 @云轩领航-创始人 2025-03-22 12:57:22 +08:00
parent 1cb1ff466a
commit 7ad08c9362
13 changed files with 86 additions and 23 deletions

View File

@ -20,6 +20,8 @@ func (s Table) Inputs(m *ice.Message, arg ...string) {
s.InputsListRole(m, UserGroupRoleList, arg...)
case model.GROUP_TYPE:
s.InputsList(m, GroupTypeList, arg...)
case model.RECRUITMENT_TYPE:
s.InputsList(m, RecruitmentTypeList, arg...)
case model.COMPANY_UID:
m.Cmdy(company{}, s.Select).Cut(model.UID, model.NAME).RenameAppend(model.UID, arg[0])
m.DisplayInputKeyNameIconTitle()
@ -47,6 +49,8 @@ func (s Table) RewriteAppend(m *ice.Message, arg ...string) *ice.Message {
value = UserGroupRole(kit.Int(value)).String()
case model.GROUP_TYPE:
value = GroupType(kit.Int(value)).String()
case model.RECRUITMENT_TYPE:
value = RecruitmentType(kit.Int(value)).String()
case model.RECRUITMENT_STATUS:
value = RecruitmentStatus(kit.Int(value)).String()
case model.INTERVIEW_STATUS:

View File

@ -24,6 +24,7 @@ const (
MARKET_UID = "market_uid"
RECRUITMENT_UID = "recruitment_uid"
RECRUITMENT_STATUS = "recruitment_status"
RECRUITMENT_TYPE = "recruitment_type"
INTERVIEW_STATUS = "interview_status"
START_TIME = "start_time"
STOP_TIME = "stop_time"
@ -57,15 +58,26 @@ type Recruitment struct {
Salary string `gorm:"type:varchar(32)"`
Total int `gorm:"default:0"`
Count int `gorm:"default:0"`
Type uint8 `gorm:"default:0"`
Status uint8 `gorm:"default:0"`
}
type Resume struct {
db.ModelNameInfo
RecruitmentUID string `gorm:"type:char(32);index"`
GroupUID string `gorm:"type:char(32);index"`
Avatar string `gorm:"type:varchar(255)"`
Nick string `gorm:"type:varchar(32)"`
City string `gorm:"type:varchar(32)"`
Age int `gorm:"default:0"`
Work int `gorm:"default:0"`
Email string `gorm:"type:varchar(32)"`
Mobile string `gorm:"type:varchar(32)"`
Wechat string `gorm:"type:varchar(32)"`
Degree string `gorm:"type:varchar(32)"`
School string `gorm:"type:varchar(64)"`
Major string `gorm:"type:varchar(64)"`
Year string `gorm:"type:varchar(32)"`
Link string `gorm:"type:varchar(255)"`
}
type Interview struct {
db.ModelContent

View File

@ -22,9 +22,17 @@
"input": {
"My Group": "我的团队",
"user_group_role": "成员角色",
"wechat": "微信号",
"school": "学校",
"major": "专业",
"year": "学年",
"age": "年龄",
"work": "工龄",
"group_name": "团队名称",
"group_type": "团队类型",
"recruitment_type": "招聘类型",
"recruitment_status": "招聘状态",
"recruitment_title": "招聘岗位",
"interview_status": "面试状态",
"icons": {
"mobile": "bi bi-phone",
@ -96,6 +104,10 @@
"sales": "https://img.icons8.com/officel/80/administrator-male.png"
}
},
"recruitment_type": {
"fullTime": "全职",
"partTime": "兼职"
},
"recruitment_status": {
"create": "待启动",
"start": "招聘中",

View File

@ -10,13 +10,13 @@ import (
type recruitment struct {
Table
resume resume
fields string `data:"title,degree,seniority,salary,content,total,count,recruitment_status,user_uid"`
create string `name:"create title* degree* seniority* salary* content* total*=1" role:"leader,worker"`
fields string `data:"title,degree,seniority,salary,content,total,count,recruitment_type,recruitment_status"`
create string `name:"create recruitment_type* title* degree* seniority* salary* content* total*=1" role:"leader,worker"`
modify string `name:"modify content*" role:"leader,worker"`
remove string `name:"remove" role:"leader,worker"`
start string `name:"start" role:"leader"`
stop string `name:"stop" role:"leader"`
resumeInsert string `name:"create name* info mobile* email degree*" role:"void"`
resumeInsert string `name:"resumeInsert name* info avatar@img nick wechat mobile email city age work degree school major year link" role:"leader"`
}
func (s recruitment) Inputs(m *ice.Message, arg ...string) {
@ -74,6 +74,7 @@ func (s recruitment) List(m *ice.Message, arg ...string) {
}
m.PushButton(button...)
}).Display("")
m.Action(s.Create)
kit.If(m.Length() == 0, func() { s.Button(m.SetResult(), "") })
}
func (s recruitment) Start(m *ice.Message, arg ...string) {
@ -83,14 +84,33 @@ func (s recruitment) Stop(m *ice.Message, arg ...string) {
s.ValueModify(m, model.STATUS, kit.Format(RecruitmentStop))
}
func (s recruitment) ResumeInsert(m *ice.Message, arg ...string) {
if m.Warn(m.Cmd(s.resume, s.Select, model.RECRUITMENT_UID, m.Option(model.UID), m.OptionSimple(model.MOBILE)).Length() > 0, "已经投过简历,请勿重复投递,投递") {
return
}
/*
if m.Warn(m.Cmd(s.resume, s.Select, model.RECRUITMENT_UID, m.Option(model.UID), m.OptionSimple(model.MOBILE)).Length() > 0, "已经投过简历,请勿重复投递,投递") {
// return
}
*/
m.Cmdy(s.resume, s.Insert, arg, m.OptionSimple(model.GROUP_UID, model.USER_UID), model.RECRUITMENT_UID, m.Option(model.UID))
}
func (s recruitment) Upload(m *ice.Message, arg ...string) {
m.Echo(kit.MergeURL("/p/"+m.UploadSave("usr/image/"), ice.POD, m.Option(ice.MSG_USERPOD)))
}
func init() { ice.TeamCtxCmd(recruitment{}) }
type RecruitmentType int
const (
RecruitmentFullTime RecruitmentType = iota
RecruitmentPartTime
)
var RecruitmentTypeList = map[RecruitmentType]string{
RecruitmentFullTime: "fullTime",
RecruitmentPartTime: "partTime",
}
func (s RecruitmentType) String() string { return RecruitmentTypeList[s] }
type RecruitmentStatus int
const (

View File

@ -10,6 +10,7 @@ Volcanos(chat.ONIMPORT, {
can.onimport.textView(can, value, "degree", "status"),
can.onimport.textView(can, value, "seniority", "status"),
can.onimport.textView(can, value, "salary", "status"),
can.onimport.textView(can, value, "recruitment_type", "type"),
]},
{view: html.OUTPUT, list: [value.content]},
] })

View File

@ -2,6 +2,7 @@ package guanlixitong
import (
"shylinux.com/x/ice"
kit "shylinux.com/x/toolkits"
"shylinux.com/x/enterprise/src/guanlixitong/model"
)
@ -9,8 +10,8 @@ import (
type resume struct {
interview interview
Table
fields string `data:"name,info,mobile,email,degree,user_uid"`
create string `name:"create name* info mobile* email degree" role:"leader"`
fields string `data:"avatar,name,info,nick,wechat,city,age,work,mobile,email,degree,school,major,year,link,recruitment_uid"`
create string `name:"create name* info nick wechat mobile email degree school major" role:"leader"`
remove string `name:"remove" role:"leader"`
interviewInsert string `name:"create title* content begin_time*:select@date end_time*:select@date address" role:"leader"`
}
@ -28,7 +29,14 @@ func (s resume) Inputs(m *ice.Message, arg ...string) {
func (s resume) List(m *ice.Message, arg ...string) {
s.ValueList(m, arg).Table(func(value ice.Maps) {
m.PushButton(s.InterviewInsert)
}).Display("")
}).Action().Display("")
s.SelectJoin(m, recruitment{}, model.TITLE)
if len(arg) == 1 {
m.Sort("degree,age", []string{"博士", "硕士", "本科", "专科"}, ice.INT)
}
}
func (s resume) Upload(m *ice.Message, arg ...string) {
m.Echo(kit.MergeURL("/p/"+m.UploadSave("usr/image/"), ice.POD, m.Option(ice.MSG_USERPOD)))
}
func (s resume) InterviewInsert(m *ice.Message, arg ...string) {
m.Cmdy(s.interview, s.interview.Insert, arg, m.OptionSimple(model.GROUP_UID, model.USER_UID))

View File

@ -2,14 +2,20 @@ 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,
(value.title||value.name||value.user_name)+" ("+value.nick+")",
can.onimport.textView(can, value, "recruitment_title", "status"),
can.onimport.textView(can, value, "city", "status"),
can.onimport.textView(can, value, "age", "status"),
can.onimport.titleAction(can, value),
]},
{view: html.STATUS, list: [
can.onimport.timeView(can, value),
// can.onimport.timeView(can, value),
can.onimport.textView(can, value, "degree", "status"),
can.onimport.textView(can, value, "work", "status"),
can.onimport.textView(can, value, "seniority", "status"),
can.onimport.textView(can, value, "salary", "status"),
can.onimport.textView(can, value, "school", "status"),
can.onimport.textView(can, value, "major", "status"),
]},
{view: html.OUTPUT, list: [value.content||value.info]},
] })

View File

@ -28,7 +28,7 @@
"22574299a657140d473f0216b8d83710": {
"meta": {
"auth": "issued",
"icons": "https://img.icons8.com/officel/50/documents.png",
"icons": "https://img.icons8.com/officel/80/documents.png",
"index": "web.team.gonganxitong.document",
"name": "在线文档",
"order": "93",
@ -88,7 +88,7 @@
"882a999b4a72a9866d9e4eef110d335a": {
"meta": {
"auth": "issued",
"icons": "https://img.icons8.com/officel/50/ios-photos.png",
"icons": "https://img.icons8.com/officel/80/ios-photos.png",
"index": "web.team.gonganxitong.photo",
"name": "在线相册",
"order": "95",

View File

@ -31,7 +31,7 @@
"30d5192993edd954fbdc92e04d5c94cf": {
"meta": {
"auth": "issued",
"icons": "https://img.icons8.com/officel/50/documents.png",
"icons": "https://img.icons8.com/officel/80/documents.png",
"index": "web.team.gongyinglian.document",
"name": "在线文档",
"order": "94",
@ -320,7 +320,7 @@
"dcd78c4cec7021205b480f43cafde9c5": {
"meta": {
"auth": "issued",
"icons": "https://img.icons8.com/officel/50/ios-photos.png",
"icons": "https://img.icons8.com/officel/80/ios-photos.png",
"index": "web.team.gongyinglian.photo",
"name": "在线相册",
"order": "96",

View File

@ -135,7 +135,7 @@
"8548d5ce3faee7bd508d2fb53d57f35b": {
"meta": {
"auth": "issued",
"icons": "https://img.icons8.com/officel/50/ios-photos.png",
"icons": "https://img.icons8.com/officel/80/ios-photos.png",
"index": "web.team.guanlixitong.photo",
"name": "在线相册",
"order": "96",
@ -244,7 +244,7 @@
"meta": {
"auth": "issued",
"enable": "true",
"icons": "https://img.icons8.com/officel/50/documents.png",
"icons": "https://img.icons8.com/officel/80/documents.png",
"index": "web.team.guanlixitong.document",
"name": "在线文档",
"order": "94",

View File

@ -2,7 +2,7 @@
"015b4784c16b63975824abbb3ff4ec9f": {
"meta": {
"auth": "issued",
"icons": "https://img.icons8.com/officel/50/ios-photos.png",
"icons": "https://img.icons8.com/officel/80/ios-photos.png",
"index": "web.team.renzhengshouquan.photo",
"name": "在线相册",
"order": "95",
@ -23,7 +23,7 @@
"1c4fee90e6a7bdb8ab6f1ccb23f3273f": {
"meta": {
"auth": "issued",
"icons": "https://img.icons8.com/officel/50/documents.png",
"icons": "https://img.icons8.com/officel/80/documents.png",
"index": "web.team.renzhengshouquan.document",
"name": "在线文档",
"order": "93",

View File

@ -29,7 +29,7 @@
"39279d47b7be3e41775b5d6f15fc03f7": {
"meta": {
"auth": "issued",
"icons": "https://img.icons8.com/officel/50/ios-photos.png",
"icons": "https://img.icons8.com/officel/80/ios-photos.png",
"index": "web.team.shichangyingxiao.photo",
"name": "在线相册",
"order": "96",
@ -107,7 +107,7 @@
"9f4bf74150934b311a43064340be98cc": {
"meta": {
"auth": "issued",
"icons": "https://img.icons8.com/officel/50/documents.png",
"icons": "https://img.icons8.com/officel/80/documents.png",
"index": "web.team.shichangyingxiao.document",
"name": "在线文档",
"order": "94",

View File

@ -2,7 +2,7 @@
"04ea3d52aa1b49611600630b546fd848": {
"meta": {
"auth": "issued",
"icons": "https://img.icons8.com/officel/50/documents.png",
"icons": "https://img.icons8.com/officel/80/documents.png",
"index": "web.team.zijinlian.document",
"name": "在线文档",
"order": "94",
@ -76,7 +76,7 @@
"74c96f6ac5566510d44c5e28ceb80765": {
"meta": {
"auth": "issued",
"icons": "https://img.icons8.com/officel/50/ios-photos.png",
"icons": "https://img.icons8.com/officel/80/ios-photos.png",
"index": "web.team.zijinlian.photo",
"name": "在线相册",
"order": "96",