Commit 1c352eae authored by liujiangnan's avatar liujiangnan

feat: 数据渲染

parent c65d5f1d
...@@ -47,6 +47,7 @@ export default class SceneComponent extends MyCocosSceneComponent { ...@@ -47,6 +47,7 @@ export default class SceneComponent extends MyCocosSceneComponent {
this.token = cc.sys.localStorage.getItem("token"); this.token = cc.sys.localStorage.getItem("token");
} }
getFomartDate() { getFomartDate() {
const date = new Date(); const date = new Date();
date.setDate(date.getDate() - date.getDay() + 1); date.setDate(date.getDate() - date.getDay() + 1);
...@@ -60,13 +61,17 @@ export default class SceneComponent extends MyCocosSceneComponent { ...@@ -60,13 +61,17 @@ export default class SceneComponent extends MyCocosSceneComponent {
async initUserInfo() { async initUserInfo() {
const res: any = await asyncCallNetworkApiGet("/api/oxford/v1/kid/info", { token: this.token }); const res: any = await asyncCallNetworkApiGet("/api/oxford/v1/kid/info", { token: this.token });
const userInfo = JSON.parse(res).data; const userInfo = JSON.parse(res).data;
cc.sys.localStorage.setItem('userInfo', JSON.stringify(userInfo));
this.userInfo = userInfo; this.userInfo = userInfo;
const avatarIndex = userInfo.avatar_url ? parseInt(userInfo.avatar_url) - 1 : 0; const avatarIndex = userInfo.avatar_url ? parseInt(userInfo.avatar_url) - 1 : 0;
const usercenter = cc.find("Canvas/usercenter/view/content/scollpage/user_center"); const usercenter = cc.find("Canvas/usercenter/view/content/scollpage/user_center");
// 头像 // 头像
cc.find("avatar", usercenter).getComponent(cc.Sprite).spriteFrame = this.picture[avatarIndex]; cc.find("avatar", usercenter).getComponent(cc.Sprite).spriteFrame = this.picture[avatarIndex];
cc.find("Canvas/reportdetail/view/content/userdetail_scollpage/learnshow/avatarbg/avatar").getComponent(cc.Sprite).spriteFrame = this.picture[avatarIndex];
// 昵称 // 昵称
cc.find("nickname", usercenter).getComponent(cc.Label).string = userInfo.nick_name || ""; cc.find("nickname", usercenter).getComponent(cc.Label).string = userInfo.nick_name || "";
cc.find("Canvas/learnreport/nick_name").getComponent(cc.Label).string = userInfo.nick_name || "";
cc.find("Canvas/reportdetail/view/content/userdetail_scollpage/learnshow/avatarbg/namebg/nickname").getComponent(cc.Label).string = userInfo.nick_name || "";
// 日历牌 // 日历牌
cc.find("learndate", usercenter).getComponent(cc.Label).string = this.getFomartDate(); cc.find("learndate", usercenter).getComponent(cc.Label).string = this.getFomartDate();
// 当前学习进度 // 当前学习进度
......
import { asyncDelay, asyncCallNetworkApiGet, getSpriteFrimeByUrl } from "./util";
const { ccclass, property } = cc._decorator;
const levels = {
pdtd: [],
qwqd: [],
ydjyz: [],
};
@ccclass
export default class NewClass extends cc.Component {
start() {
}
async loadSyllabusTree() {
const res: any = await asyncCallNetworkApiGet("/api/syllabus/v1/list", { orgid: 507 });
const rows = JSON.parse(res).rows;
for (let i = 0; i < rows.length; i++) {
const row = rows[i];
if (row.name === "拼读天地") {
levels.pdtd = await this.loadData(row.id);
}
if (row.name === "趣问趣答") {
levels.qwqd = await this.loadData(row.id);
}
if (row.name === "阅读加油站") {
levels.ydjyz = await this.loadData(row.id);
}
}
}
async loadData(pid) {
const res: any = await asyncCallNetworkApiGet("/api/syllabus/v1/list", { pid });
const rows = JSON.parse(res).rows;
return rows;
}
reportType = "pdtd";
reportObj = {
"pdtd": "拼读天地",
"qwqd": "趣问趣答",
"ydjyz": "阅读加油站",
};
userInfo = null;
// 查看拼读天地详情
async onClickView(evt, type) {
const userInfo = cc.sys.localStorage.getItem("userInfo");
if (!userInfo) {
// TODO 弹出提示“用户未登录”并跳转到登录页
return;
}
this.userInfo = JSON.parse(userInfo);
this.reportType = type;
// TODO 需要一个遮罩
cc.find("Canvas/learnreport").active = true;
cc.find("Canvas/usercenter").active = false;
cc.find("Canvas/learnreport/avatar").getComponent(cc.Sprite).spriteFrame = cc.find(`Canvas/avatars/${this.userInfo.avatar_url||1}`).getComponent(cc.Sprite).spriteFrame;
await this.loadSyllabusTree();
await this.drawPage();
// TODO 隐藏遮罩
}
async drawPage() {
const node = cc.find("Canvas/learnreport");
cc.find("typeLabel", node).getComponent(cc.Label).string = this.reportObj[this.reportType];
// 激活索引为0的Level
await this.drawPageItems(0);
}
clearnContent() {
const node = cc.find("Canvas/learnreport");
const contentNode = cc.find("cardArea/pages/view/content", node);
const item = cc.find("Canvas/learnreport/cardArea/pages/view/content/item");
// 清理原来的数据
item.parent = node;
contentNode.removeAllChildren();
item.parent = contentNode;
}
async drawPageItems(index) {
const node = cc.find("Canvas/learnreport");
this.activeLevelIndex(index);
let rows = [];
if (levels[this.reportType][index]) {
rows = await this.loadData(levels[this.reportType][index].id);
}
const unLocks = this.getUnlockSyllabuses();
const contentNode = cc.find("cardArea/pages/view/content", node);
const item = cc.find("Canvas/learnreport/cardArea/pages/view/content/item");
// 清理原来的数据
item.parent = node;
contentNode.removeAllChildren();
item.parent = contentNode;
// 绘制
rows.forEach((row, i) => {
const itemClone = cc.instantiate(item);
itemClone.parent = contentNode;
itemClone.active = true;
itemClone.attr({folder_id: row.id, locked: true, kidid: this.userInfo.id});
cc.find(`number`, itemClone).getComponent(cc.Label).string = (i+1)+"";
if (unLocks.includes(row.id) || (index==0 && i==0)) {
itemClone.attr({folder_id: row.id, locked: false});
cc.find(`lock`, itemClone).active = false;
cc.find(`unlock`, itemClone).active = true;
cc.find(`unlock/text`, itemClone).getComponent(cc.Label).string = row.name;
getSpriteFrimeByUrl(row.cover, (spriteFrame) => {
cc.find(`unlock/cover`, itemClone).getComponent(cc.Sprite).spriteFrame = spriteFrame;
});
}
});
}
getUnlockSyllabuses() {
if(this.userInfo){
return this.userInfo.unlock_syllabuses?this.userInfo.unlock_syllabuses.split(","):[];
}
return [];
}
// 激活索引为index的Level
activeLevelIndex(index) {
const node = cc.find("Canvas/learnreport");
for (let i = 0; i < 5; i++) {
cc.find(`level${i+1}/level_active`, node).active = false;
}
cc.find(`level${index+1}/level_active`, node).active = true;
}
async onChangeLevel(evt: cc.Event, index) {
this.activeLevelIndex(parseInt(index));
await this.drawPageItems(parseInt(index));
}
async onShowLearnDetail(evt: cc.Event) {
const node = evt.currentTarget;
if (node.locked) {
// TODO 弹出提示框“未解锁”
return;
}
cc.find("Canvas/learnreport").active = false;
cc.find("Canvas/reportdetail").active = true;
const token = cc.sys.localStorage.getItem("token");
const res: any = await asyncCallNetworkApiGet("/api/oxford/v1/kid/learn/forder/report", { kidid: node.kidid, folderid: node.folder_id, token });
const {
learntimes,
recordcount,
kn_letters,
kn_words,
kn_sentences
} = JSON.parse(res).data;
cc.find("Canvas/reportdetail/view/content/userdetail_scollpage/learnshow/itembg/recordbg/recordcount").getComponent(cc.Label).string = learntimes;
cc.find("Canvas/reportdetail/view/content/userdetail_scollpage/learnshow/itembg/learnbg/learntime").getComponent(cc.Label).string = recordcount;
const resultNode = cc.find("Canvas/reportdetail/view/content/userdetail_scollpage/learnresult/itembg");
if (kn_letters) {
cc.find("letter_title", resultNode).active = true;
cc.find("letter_row", resultNode).active = true;
cc.find("split_line", resultNode).active = true;
const letterRow = cc.find("letter_row", resultNode);
const letterNode = cc.find("item", letterRow);
const letters = JSON.parse(kn_letters);
for (let i = 0; i < letters.length; i++) {
const letter = letters[i];
const itemClone = cc.instantiate(letterNode);
itemClone.parent = letterRow;
itemClone.active = true;
getSpriteFrimeByUrl(letter.pic_url, (spriteFrame) => {
itemClone.getComponent(cc.Sprite).spriteFrame = spriteFrame;
});
}
} else {
cc.find("letter_title", resultNode).active = false;
cc.find("letter_row", resultNode).active = false;
cc.find("split_line", resultNode).active = false;
}
if (kn_words) {
cc.find("word_title", resultNode).active = true;
cc.find("word_row", resultNode).active = true;
cc.find("split_line", resultNode).active = true;
const wordRow = cc.find("word_row", resultNode);
const wordNode = cc.find("item", wordRow);
const words = JSON.parse(kn_words);
for (let i = 0; i < words.length; i++) {
const word = words[i];
const itemClone = cc.instantiate(wordNode);
itemClone.parent = wordRow;
itemClone.active = true;
cc.find("word", itemClone).getComponent(cc.Label).string = word.text;
getSpriteFrimeByUrl(word.pic_url, (spriteFrame) => {
cc.find("pic", itemClone).getComponent(cc.Sprite).spriteFrame = spriteFrame;
});
}
} else {
cc.find("word_title", resultNode).active = false;
cc.find("word_row", resultNode).active = false;
cc.find("split_line", resultNode).active = false;
}
if (kn_sentences) {
cc.find("sentence_title", resultNode).active = true;
cc.find("sentence_row", resultNode).active = true;
cc.find("split_line", resultNode).active = true;
const sentenceRow = cc.find("sentence_row", resultNode);
const sentenceNode = cc.find("item", sentenceRow);
const sentences = JSON.parse(kn_sentences);
for (let i = 0; i < sentences.length; i++) {
const sentence = sentences[i];
const itemClone = cc.instantiate(sentenceNode);
itemClone.parent = sentenceRow;
itemClone.active = true;
cc.find("sentence", itemClone).getComponent(cc.Label).string = sentence.text;
}
} else {
cc.find("sentence_title", resultNode).active = false;
cc.find("sentence_row", resultNode).active = false;
cc.find("split_line", resultNode).active = false;
}
}
// 返回用户中心
async onClickBackToUserCenter() {
this.reportType = null;
this.clearnContent();
cc.find("Canvas/usercenter").active = true;
cc.find("Canvas/learnreport").active = false;
}
}
{
"ver": "1.0.8",
"uuid": "302a6c1e-d31b-4cf3-bb29-519671176951",
"isPlugin": false,
"loadPluginInWeb": true,
"loadPluginInNative": true,
"loadPluginInEditor": false,
"subMetas": {}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment