You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

92 lines
1.9 KiB

function processObj(obj) {
for (var key in obj) {
if (!obj.hasOwnProperty(key) || typeof obj[key] != "object")
continue
processObj(obj[key]);
obj[key].__proto__ = obj;
}
}
const app = getApp();
const configMap={
text: "${course_act_type}",
type: "${course_act_type}",
color: "black",
CourseAttendance:{
text:"课堂签到开始了",
type:"签到",
color:"#09ad42"
},
HomeworkCommon:{
practice:{
type: "实训作业",
color: "#ce223e",
url:"{shixun_homework}?homework_id=${course_act_id}"
},
normal: {
type:"普通作业",
color:"#CC6633"
},
text: "${container_name}",
type:"作业",
color:"#ac3f8a"
},
CourseMessage: {
type:"课堂申请",
text:"申请加入课堂",
color:"#3333FF"
},
Course: {
type:"创建课堂",
text:"大家快来加入课堂学习吧",
color:"#33DDAA"
}
}
processObj(configMap);
function get(obj, key) {
if (typeof obj == "object" && key in obj)
return obj[key];
else
return {__proto__:obj};
}
function format(str, values){
return str.replace(/\$\{(.*?)\}/, function (match, key) {
return values[key] || "";
});
}
Component({
properties: {
data:{
type:Object,
observer:function(data){
let config = get(configMap, data.course_act_type);
config = get(config, data.container_type);
this.config = config;
data.text = format(config.text, data);
data.type = format(config.type, data);
data.color = config.color;
data.time = data.created_at.replace(/^.+ /,"");
this.setData(data);
//console.log(data);
}
}
},
data: {
eduImgDir:global.config.eduImgDir
},
methods: {
onTap(){
let {url} = this.config;
if(!url) return;
url = format(url, this.data);
app.navigateTo({url});
}
}
})