// index.ts // 获取应用实例 const app = getApp() const serverAddr = "http://127.0.0.1:5000" Page({ data: { miao_style:` --main-color:rgb(234, 234, 234); --secondary-color:rgb(247, 247, 247); --tertiary-color:rgb(255, 255, 255); --text-color:rgb(0, 0, 0); `, active_style:"skyline", // 也不会有人看到 style_lib:{ wechat:{ name:"Unknow Mother-Goose", intro:"", style:{ main:'rgb(234, 234, 234)', secondary:'rgb(247, 247, 247)', tertiary:'rgb(255, 255, 255)', text:'rgb(0, 0, 0)', } }, wechat_dark:{ name:"栖身之地", intro:"", style:{ main:'#4D4D4D', secondary:'#F1F1F1', tertiary:'#AAAAAA', text:'rgb(0, 0, 0)', } }, skyline:{ name:"陪你的猫睡午觉", intro:"", style:{ main:'rgb(210, 233, 233)', secondary:'rgb(248, 246, 244)', tertiary:'rgb(227, 244, 244)', text:'rgb(0, 0, 0)', } }, white:{ name:"他们说我是没有用的年轻人", intro:"", style:{ main:'rgb(205, 201, 195)', secondary:'#EBE3D5', tertiary:'rgb(251, 247, 240)', text:'rgb(0, 0, 0)', } }, purple:{ name:"或许我们都忘了最初说过的话", intro:"", style:{ main:'rgb(208, 162, 247)', secondary:'rgb(241, 234, 255)', tertiary:'rgb(229, 212, 255)', text:'rgb(0, 0, 0)', } }, shine:{ name:"至少我想感同你的身受", intro:"", style:{ main:'rgb(242, 190, 209)', secondary:'rgb(248, 232, 238)', tertiary:'rgb(253, 206, 223)', text:'rgb(0, 0, 0)', } }, warm:{ name:"被爱灌溉成长的人", intro:"", style:{ main:'rgb(206, 90, 103)', secondary:'rgb(252, 245, 237)', tertiary:'rgb(244, 191, 150)', text:'rgb(0, 0, 0)', } }, watermelon:{ name:"没有人在乎你在乎的事", intro:"", style:{ main:'rgb(255, 170, 167)', secondary:'rgb(213, 236, 194)', tertiary:'rgb(255, 211, 180)', text:'rgb(0, 0, 0)', } }, bin:{ name:"在游荡的路上学会宽容", intro:"", style:{ main:'rgb(57, 62, 70)', secondary:'rgb(238, 238, 238)', tertiary:'rgb(66, 125, 157)', text:'rgb(0, 0, 0)', } }, Ukraine:{ name:"我还年轻我还年轻", intro:"", style:{ main:'rgb(12, 53, 106)', secondary:'rgb(255, 196, 54)', tertiary:'rgb(1, 116, 190)', text:'rgb(0, 0, 0)', } }, tree:{ name:"我好想成为你的鹿", intro:"", style:{ main:'rgb(60, 98, 85)', secondary:'rgb(234, 231, 177)', tertiary:'rgb(97, 135, 110)', text:'rgb(0, 0, 0)', } }, cookie:{ name:"我爱你,却不能拯救你", intro:"", style:{ main:'rgb(92, 84, 112)', secondary:'rgb(250, 240, 230)', tertiary:'rgb(185, 180, 199)', text:'rgb(0, 0, 0)', } }, }, // motto: 'Hello World', text_startPage1: "知识库", imgUrl_startPage1: "./static/icons/lib.svg", function_startPage1: "popup_lib", imgUrl_startPage2: "./static/icons/history.svg", function_startPage2: "popup_history", imgUrl_startPage3: `./static/icons/heart.svg`, function_startPage3: "popup_collect", text_startPage4: "个性化", imgUrl_startPage4: "./static/icons/self.svg", function_startPage4: "popup_style", tip_content: "不吃饭会饿死", tip_hidden: false, active_Page: "startPage", currentDate: '', remarkTemp: '', resultTitle: "查询结果", // 没用到 pageStack: [], curtain_hidden: true, curtain2_hidden: true, imgUrl_test: "https://tse4-mm.cn.bing.net/th/id/OIP-C.2MyVJAPY4CWrMUIKfruz9AHaHa?w=199&h=199&c=7&r=0&o=5&dpr=1.3&pid=1.7", // 有点误导性 // 瞬间开启摄像头会导致卡顿,所以还是注释掉吧 // camera_hidden:true, // 历史记录data data_history: { // "2023.2.30": [ // { // // 时间复杂度需求哪有那么高。。。 // id: 1, // imgUrl: "https://tse3-mm.cn.bing.net/th/id/OIP-C.qM9D7c-Ow-C-xLARJdSwQwHaIO?pid=ImgDet&rs=1", res: { scores: 1, arr: ["山梨酸钾", "山梨酸钾", "山梨酸钾", "山梨酸钾", "山梨酸钾", "山梨酸钾", "山梨酸钾", "山梨酸钾", "山梨酸钾", "山梨酸钾", "山梨酸钾", "山梨酸钾", "山梨酸钾", "山梨酸钾", "山梨酸钾", "山梨酸钾",] }, // hasCollect: false,//目前全是false。。。 // }, { // id: 2, // imgUrl: "https://tse3-mm.cn.bing.net/th/id/OIP-C.qM9D7c-Ow-C-xLARJdSwQwHaIO?pid=ImgDet&rs=1", res: { scores: 75, arr: [] }, // hasCollect: false, // }, { // id: 3, // imgUrl: "https://tse3-mm.cn.bing.net/th/id/OIP-C.qM9D7c-Ow-C-xLARJdSwQwHaIO?pid=ImgDet&rs=1", res: { scores: 1, arr: [] }, // hasCollect: false, // }, { // id: 4, // imgUrl: "https://tse3-mm.cn.bing.net/th/id/OIP-C.qM9D7c-Ow-C-xLARJdSwQwHaIO?pid=ImgDet&rs=1", res: { scores: 1, arr: [] }, // hasCollect: false, // }, { // id: 5, // imgUrl: "https://tse3-mm.cn.bing.net/th/id/OIP-C.qM9D7c-Ow-C-xLARJdSwQwHaIO?pid=ImgDet&rs=1", res: { scores: 1, arr: [] }, // hasCollect: false, // }, { // id: 6, // imgUrl: "https://tse3-mm.cn.bing.net/th/id/OIP-C.qM9D7c-Ow-C-xLARJdSwQwHaIO?pid=ImgDet&rs=1", res: { scores: 1, arr: [] }, // hasCollect: false, // }, // ], "2023.2.10": [ // { // id: 7, // imgUrl: "https://tse3-mm.cn.bing.net/th/id/OIP-C.qM9D7c-Ow-C-xLARJdSwQwHaIO?pid=ImgDet&rs=1", res: { scores: 1, arr: [] }, // hasCollect: false, // } // ], "2023.2.11": [ // { // id: 8, // imgUrl: "https://tse3-mm.cn.bing.net/th/id/OIP-C.qM9D7c-Ow-C-xLARJdSwQwHaIO?pid=ImgDet&rs=1", res: { scores: 1, arr: [] }, // hasCollect: false, // } // ], "2023.2.12": [ // { // id: 9, // imgUrl: "https://tse3-mm.cn.bing.net/th/id/OIP-C.qM9D7c-Ow-C-xLARJdSwQwHaIO?pid=ImgDet&rs=1", res: { scores: 1, arr: [] }, // hasCollect: false, // } // ], "2023.2.13": [ // { // id: 10, // imgUrl: "https://tse3-mm.cn.bing.net/th/id/OIP-C.qM9D7c-Ow-C-xLARJdSwQwHaIO?pid=ImgDet&rs=1", res: { scores: 1, arr: [] }, // hasCollect: false, // } // ], }, //收藏夹data data_collect: [ // { // "id":1, // "date": "2023.15.16", // "res":{scores: 99, arr: []} , // "imgUrl": "./static/icons/history.svg", // "remark": "方师傅康便面", // "riskBgColor": "springgreen", // "riskStr": "低风险", // }, ], // 存储所有成分的信息, hidden: false, "riskBgColor": "springgreen", "riskStr": "低风险"由前端实现 data_lib: [ { name: { zh: "山梨酸钾", en: "Potassium sorbate" }, scores: 73, info: "山梨酸钾,又名2,4-己二烯酸钾,是山梨酸的钾盐,分子式为C6H7O2K,无色或白色鳞片状结晶或结晶性粉末。 [1] 无臭或微有臭味,长期暴露在空气中易吸潮、被氧化分解而变色。易溶于水(67.6g/100mL 20℃),溶于丙二醇(5.8g/100mL)和乙醇(0.3g/10 mL)。山梨酸钾和山梨酸是常用的有机防腐剂,广泛用于食品、化状品、饲料的防腐。易于被人体吸收代谢,在体内无残留,无毒性。", extra: [], ADI: "", // 搜索用,前端赋值 hidden: false, //前端赋值 "riskBgColor": "springgreen", "riskStr": "低风险" }, { name: { zh: "李宁", en: "L.N.G.N.M.S.L." }, scores: 45, info: "HAHA", extra: [ { type: "safe", name: "LPL" }, { type: "unsafe", name: "飞舞" }, { type: "unsafe", name: "精忠报国" }, ], ADI: "", hidden: false, riskBgColor: "sandybrown", riskStr: "中风险" }, { name: { zh: "丁基羟基茴香醚", en: "Butyl hydroxyanisole(BHA)" }, scores: 21, info: "丁基羟基茴香醚(BHA),又名叔丁基-4-羟基茴香醚,化学式为C11H16O2,有两种异构体:3-BHA和2-BHA,一般指二者的混合物。2017年10月27日,世界卫生组织国际癌症研究机构公布的致癌物清单初步整理参考,叔丁基对羟基茴香醚(BHA)在2B类致癌物清单中。", extra: [ { type: "unsafe", name: "2B类致癌物" } ], ADI: "0~0.5mg/kg bw", hidden: false, riskBgColor: "tomato", riskStr: "高风险" }, { name: { zh: "生牛乳", en: "Hatsune Miku" }, scores: 93, info: "HAHA", extra: [ { type: "safe", name: "好喝" }, ], ADI: "", // 搜索用,前端赋值 hidden: false, //前端赋值 "riskBgColor": "springgreen", "riskStr": "低风险" } ], // 知识库搜索用 hidden_lib: {}, // 查询结果搜索用 hidden_result: {}, data_lib_map: {}, //查询展示用 data_resultPage: { scores: 65, circleClip: "", circleColor: "", arr: [], tr: null,//top right }, //收藏/取消收藏用 resultId: -1, // 收到的查询结果信息 data_rcv: { scores: 1, arr: ["山梨酸钾"], }, session_key: "", userInfo: {}, hasUserInfo: false, canIUse: wx.canIUse('button.open-type.getUserInfo'), canIUseGetUserProfile: false, canIUseOpenData: wx.canIUse('open-data.type.userAvatarUrl') && wx.canIUse('open-data.type.userNickName') // 如需尝试获取用户信息可改为false }, // 启动时获取session async onLoad() { // this.data.session_key = wx.getStorageSync("session_key") // await this.updateSession() this.readStorageData() this.set_miaoStyle(this.data.active_style) // this.edit_svg_color() // this.updateLib() // this.updateCollection() // this.updateHistory() }, // 好像微信小程序没有atob处理base64,此函数放弃 edit_svg_color(rgb="#000000"){ return; rgb var lib=``; var history=``; var heart=``; var self=`` var camera=`` lib=(lib) this.setData({ imgUrl_startPage1: lib, imgUrl_startPage2: history, imgUrl_startPage3: heart, imgUrl_startPage4: self, }) }, // 编辑wxss那几个css变量实现风格转换 set_miaoStyle(e){ var name = '' if(typeof e == "string")name = e else{ name = e.currentTarget.dataset.index } // console.log(name) var style = this.data.style_lib[name].style var str = ` --main-color:${style.main}; --secondary-color:${style.secondary}; --tertiary-color:${style.tertiary}; --text-color:${style.text}; ` this.setData({ miao_style:str, active_style:name }) console.log("设置主题:"+this.data.style_lib[name].name) this.save2storage() }, //开始界面的按钮相关动画 startPage_Bottons_leave() { // var fd = wx.createSelectorQuery() var time = 700; var time1 = () => { return Math.random() * 200; } this.animate('#gotoSearch', [ { opacity: 1, translateY: 0, ease: 'ease-in' }, { opacity: 0, translateY: -300, ease: 'ease-in' }, ], time) this.animate('#tips_startPage', [ { opacity: 1, ease: 'ease-in' }, { opacity: 0, ease: 'ease-in' }, ], time, () => { // this.setData({ tip_hidden: true }) }) setTimeout(() => { this.animate('#buttom_startPage1', [ { opacity: 1, translateX: 0, ease: 'ease-in' }, { opacity: 0, translateX: -300, ease: 'ease-in' }, ], time) }, time1()) setTimeout(() => { this.animate('#buttom_startPage3', [ { opacity: 1, translateX: 0, ease: 'ease-in' }, { opacity: 0, translateX: -300, ease: 'ease-in' }, ], time) }, time1()) setTimeout(() => { this.animate('#buttom_startPage4', [ { opacity: 1, translateX: 0, ease: 'ease-in' }, { opacity: 0, translateX: 300, ease: 'ease-in' }, ], time) }, time1()) setTimeout(() => { this.animate('#buttom_startPage2', [ { opacity: 1, translateX: 0, ease: 'ease-in' }, { opacity: 0, translateX: 300, ease: 'ease-in' }, ], time) }, time1()) }, startPage_Bottons_in() { // var fd = wx.createSelectorQuery() var time = 700; var time1 = () => { return Math.random() * 200; } this.animate('#gotoSearch', [ { opacity: 0, translateY: -300, ease: 'ease-in' }, { opacity: 1, translateY: 0, ease: 'ease-out' }, ], time) // this.setData({ tip_hidden: false }) this.animate('#tips_startPage', [ { opacity: 0, ease: 'ease-in' }, { opacity: 1, ease: 'ease-out' }, ], time) setTimeout(() => { this.animate('#buttom_startPage1', [ { opacity: 0, translateX: -300, ease: 'ease-in' }, { opacity: 1, translateX: 0, ease: 'ease-out' }, ], time) }, time1()) setTimeout(() => { this.animate('#buttom_startPage3', [ { opacity: 0, translateX: -300, ease: 'ease-in' }, { opacity: 1, translateX: 0, ease: 'ease-out' }, ], time) }, time1()) setTimeout(() => { this.animate('#buttom_startPage4', [ { opacity: 0, translateX: 300, ease: 'ease-in' }, { opacity: 1, translateX: 0, ease: 'ease-out' }, ], time) }, time1()) setTimeout(() => { this.animate('#buttom_startPage2', [ { opacity: 0, translateX: 300, ease: 'ease-in' }, { opacity: 1, translateX: 0, ease: 'ease-out' }, ], time) }, time1()) }, popup_camera() { // this.setData({ // camera_hidden:false, // }) this.data.pageStack.push("camera") this.startPage_Bottons_leave() this.animate('#page_camera', [ { opacity: 0, translateY: 0 }, { opacity: 1, translateY: "-100%", ease: 'ease-in-out', }, ], 1000, () => { this.selectComponent('#page_camera') }) }, exit_camera() { this.data.pageStack.pop() this.startPage_Bottons_in() this.animate('#page_camera', [ { opacity: 1, translateY: "-100%" }, { opacity: 0, translateY: "0", ease: 'ease-in-out' }, ], 1000, () => { // this.setData({ // camera_hidden:false, // }) }) }, popup_history() { this.data.pageStack.push("history") this.startPage_Bottons_leave() this.animate('#page_history', [ { opacity: 0, translateY: 0 }, { opacity: 1, translateY: "-100%", ease: 'ease-in-out', }, ], 1000, () => { this.selectComponent('#page_history') }) }, exit_history() { this.data.pageStack.pop() this.startPage_Bottons_in() this.animate('#page_history', [ { opacity: 1, translateY: "-100%" }, { opacity: 0, translateY: "0", ease: 'ease-in-out' }, ], 1000) }, popup_collect() { this.data.pageStack.push("collect") this.startPage_Bottons_leave() this.animate('#page_collect', [ { opacity: 0, translateY: 0 }, { opacity: 1, translateY: "-100%", ease: 'ease-in-out', }, ], 1000, () => { this.selectComponent('#page_collect') }) }, exit_collect() { this.data.pageStack.pop() this.startPage_Bottons_in() this.animate('#page_collect', [ { opacity: 1, translateY: "-100%" }, { opacity: 0, translateY: "0", ease: 'ease-in-out' }, ], 1000) }, popup_lib() { this.data.pageStack.push("lib") this.startPage_Bottons_leave() this.animate('#page_lib', [ { opacity: 0, translateY: 0 }, { opacity: 1, translateY: "-100%", ease: 'ease-in-out', }, ], 1000, () => { this.selectComponent('#page_collect') }) }, exit_lib() { this.data.pageStack.pop() this.startPage_Bottons_in() this.animate('#page_lib', [ { opacity: 1, translateY: "-100%" }, { opacity: 0, translateY: "0", ease: 'ease-in-out' }, ], 1000, () => { // for(var n of this.data.data_lib){ // n.hidden=false // } // this.setData( // {"data.data_lib":this.data.data_lib} // ) }) }, popup_style() { this.data.pageStack.push("style") this.startPage_Bottons_leave() this.animate('#page_style', [ { opacity: 0, translateY: 0 }, { opacity: 1, translateY: "-100%", ease: 'ease-in-out', }, ], 1000, () => { this.selectComponent('#page_style') }) }, exit_style() { this.data.pageStack.pop() this.startPage_Bottons_in() this.animate('#page_style', [ { opacity: 1, translateY: "-100%" }, { opacity: 0, translateY: "0", ease: 'ease-in-out' }, ], 1000) }, //遮罩动画 show_curtain() { this.setData({ curtain_hidden: false }) this.animate('#page_curtain', [ { opacity: 0 }, { opacity: 1, ease: 'ease-in-out' }, ], 1000) }, hide_curtain() { this.animate('#page_curtain', [ { opacity: 1 }, { opacity: 0, ease: 'ease-in-out' }, ], 1000, () => { this.setData({ curtain_hidden: true }) console.log('suc') }) this.setData({ curtain_hidden: true }) }, //查询结果页面相关 popup_result() { this.data.data_resultPage.circleClip = this.calculate_clip_path(this.data.data_resultPage.scores * 3.6) this.data.data_resultPage.circleColor = this.scores2map(this.data.data_resultPage.scores).color this.setData({ data_resultPage: this.data.data_resultPage }) this.show_curtain() this.animate('#page_result', [ { opacity: 0, translateY: 0 }, { opacity: 1, translateY: "-100%", ease: 'ease-in-out', }, ], 600) }, exit_result() { this.hide_curtain() this.animate('#page_result', [ { opacity: 1, translateY: "-100%" }, { opacity: 0, translateY: "0", ease: 'ease-in-out' }, ], 600) }, //遮罩动画2 show_curtain2() { this.setData({ curtain2_hidden: false }) this.animate('#page_curtain2', [ { opacity: 0 }, { opacity: 1, ease: 'ease-in-out' }, ], 1000) }, hide_curtain2() { this.animate('#page_curtain2', [ { opacity: 1 }, { opacity: 0, ease: 'ease-in-out' }, ], 1000) this.setData({ curtain2_hidden: true }) }, // 设置备注 popup_setRemark() { this.show_curtain2() this.animate('#star_setRemark', [ { opacity: 0, translateY: 0 }, { opacity: 1, translateY: "-1300rpx", ease: 'ease-in-out', }, ], 600) }, exit_setRemark() { this.animate('#star_setRemark', [ { opacity: 1, translateY: "-1300rpx" }, { opacity: 0, translateY: "0", ease: 'ease-in-out' }, ], 600) this.hide_curtain2() }, popup_editRemark() { this.show_curtain2() this.animate('#editRemark', [ { opacity: 0, translateY: 0 }, { opacity: 1, translateY: "-1300rpx", ease: 'ease-in-out', }, ], 600) }, exit_editRemark() { this.animate('#editRemark', [ { opacity: 1, translateY: "-1300rpx" }, { opacity: 0, translateY: "0", ease: 'ease-in-out' }, ], 600) this.hide_curtain2() }, popup_removeCollectionVerify() { this.show_curtain2() this.animate('#removeCollectionVerify', [ { opacity: 0, translateY: 0 }, { opacity: 1, translateY: "-1300rpx", ease: 'ease-in-out', }, ], 600) }, exit_removeCollectionVerify() { this.animate('#removeCollectionVerify', [ { opacity: 1, translateY: "-1300rpx" }, { opacity: 0, translateY: "0", ease: 'ease-in-out' }, ], 600) this.hide_curtain2() }, // 根据传入的包含scores和arr的object更新this.data.data_resultPage并popup_result show_result(res: { scores: any, arr: Array }, tr: string) { // console.log(res) var data_resultPage = { scores: res.scores, arr: [], tr: tr, } console.log(tr) for (var name of res.arr) { // 有时间去写个时间复杂度更低的,不过感觉也够用了 for (var n of this.data.data_lib) { if (n.name.zh.includes(name) || n.name.en.includes(name)) { data_resultPage.arr.push(n) break } } } this.setData({ "data_resultPage": data_resultPage }) // console.log(data_resultPage) this.popup_result() }, show_result_wxml(e: any) { var res = e.currentTarget.dataset.index; console.log(res) this.data.resultId = res.id // console.log(this.data.resultId) var tr = "" // 不太好吧 switch (this.data.pageStack[this.data.pageStack.length - 1]) { case "collect": { tr = "delete" break; } case "history": { if (res.hasCollect) tr = "delete" else tr = "heart" break; } } res = res.res this.show_result(res, tr) }, show_result_byId(id: any) { for (var date in this.data.data_history) { for (var n of this.data.data_history[date]) { if (n.id == id) { this.data.resultId = id this.show_result(n.res, "heart") break; } } } }, getInputRemark(e: any) { this.data.remarkTemp = e.detail.value }, // 收藏当前页面 add_collection() { var r = this.id2resultAndDate(this.data.resultId) if (r == null) return var result = r.result var date = r.date var remark = this.data.remarkTemp console.log(result, date, remark) this.data.data_collect.push({ "id": this.data.resultId, "date": date, "res": result.res, "imgUrl": result.imgUrl, "remark": this.data.remarkTemp, "riskBgColor": this.scores2map(result.res.scores).color, "riskStr": this.scores2map(result.res.scores).content, }) result.hasCollect = true this.data.data_resultPage.tr = "delete" this.setData( { data_collect: this.data.data_collect, data_history: this.data.data_history, data_resultPage: this.data.data_resultPage } ) this.save2storage() this.uploadHistoryAndCollection() this.exit_setRemark() }, editRemark() { var r = this.id2resultAndDate(this.data.resultId) if (r == null) return var result = r.result var date = r.date var remark = this.data.remarkTemp for (var i in this.data.data_collect) { if (this.data.data_collect[i].id == this.data.resultId) { this.data.data_collect[i].remark = remark } } this.setData( { data_collect: this.data.data_collect, data_history: this.data.data_history, data_resultPage: this.data.data_resultPage } ) this.save2storage() this.uploadHistoryAndCollection() this.exit_editRemark() }, //取消收藏。。。。 remove_collection() { var flag = true var r = this.id2resultAndDate(this.data.resultId) if (r == null) flag = false if (flag) { var result = r.result result.hasCollect = false } for (var i in this.data.data_collect) { if (this.data.data_collect[i].id == this.data.resultId) { this.data.data_collect.splice(i, 1) } } this.data.data_resultPage.tr = "heart" this.setData( { data_collect: this.data.data_collect, data_history: this.data.data_history, data_resultPage: this.data.data_resultPage } ) this.save2storage() this.uploadHistoryAndCollection() this.exit_removeCollectionVerify() }, // 根据角度计算剪切路径,错了不怪我。。 calculate_clip_path(deg: number) { var res = "polygon(50% 50%,0 0" deg = deg % 360 if (deg < 90) { var x = -Math.cos(deg * Math.PI / 90) * 50 + 50; res = res + "," + x + "% 0" } else if (deg < 180) { deg -= 90 var y = -Math.cos(deg * Math.PI / 90) * 50 + 50; res = res + ",100% 0" + ",100% " + y + "%" } else if (deg < 270) { deg = 270 - deg var x = -Math.cos(deg * Math.PI / 90) * 50 + 50; res = res + ",100% 0" + ",100% 100%" + "," + x + "% 100%" } else { deg = 360 - deg var y = -Math.cos(deg * Math.PI / 90) * 50 + 50; res = res + ",100% 0" + ",100% 100%" + ",0 100%" + ",0 " + y + "%" } res = res + ");" return res }, //收到搜索结果处理(并没有写) receive_result() { }, //收到成分数据更新处理(并没有写) receive_lib() { }, //更新成分数据 updateLib() { wx.request({ url: serverAddr + '/getLib', //仅为示例,并非真实的接口地址 data: { session_key:this.data.session_key }, method: "GET", header: { 'content-type': 'application/json' // 默认值 }, success: res => { // console.log(res) var data = res.data // console.log(data) // 能跑 // name: { // zh: "山梨酸钾", // en: "Potassium sorbate" // }, // scores: 73, // info: "山梨酸钾,又名2,4-己二烯酸钾,是山梨酸的钾盐,分子式为C6H7O2K,无色或白色鳞片状结晶或结晶性粉末。 [1] 无臭或微有臭味,长期暴露在空气中易吸潮、被氧化分解而变色。易溶于水(67.6g/100mL 20℃),溶于丙二醇(5.8g/100mL)和乙醇(0.3g/10 mL)。山梨酸钾和山梨酸是常用的有机防腐剂,广泛用于食品、化状品、饲料的防腐。易于被人体吸收代谢,在体内无残留,无毒性。", // extra: [], // ADI: "", // 适配后端返回数据 for(var n of data){ n.name = {} n.name.zh = n.chinese_name n.name.en = n.english_name n.scores = n.rating n.extra = [] for(var i of n.effects){ n.extra.push({ 'type': "safe", 'name': i },) } for(var i of n.potential_risk_people){ n.extra.push({ 'type': "unsafe", 'name': "风险人群:" + i }) } n.ADI = n.daily_intake_recommendation } for (var n of data) { var scores = n.scores; var map = this.scores2map(scores) n.hidden = false n.riskBgColor = map.color n.riskStr = map.content } this.data.data_lib = data this.setData( { "data_lib": data } ) this.save2storage() }, fail(res) { console.log(res) } }) }, //更新历史记录 updateHistory() { wx.request({ url: '' + serverAddr + '/getHistory', //仅为示例,并非真实的接口地址 data: { session_key:this.data.session_key }, method: "POST", header: { 'content-type': 'application/json' // 默认值 }, success: res => { console.log(res) var data = res.data this.setData( { "data_history": data } ) this.sortHistory() this.save2storage() }, fail(res) { console.log(res) } }) }, //更新收藏 updateCollection() { wx.request({ url: '' + serverAddr + '/getCollection', //仅为示例,并非真实的接口地址 data: { session_key:this.data.session_key }, method: "POST", header: { 'content-type': 'application/json' // 默认值 }, success: res => { console.log(res) var data = res.data this.setData( { "data_collect": data } ) this.save2storage() }, fail(res) { console.log(res) } }) }, // 更新session updateSession() { return new Promise((resolve, reject) => { // 仅测试 if(this.data.session_key == '' || true){ this.getCode().then(code => { wx.request({ url: '' + serverAddr + '/updateSession', data: { userCode: code }, method: "POST", header: { 'content-type': 'application/json' }, success: res => { console.log(res) var data = res.data this.setData( { "session_key": data } ) resolve() // setTimeout(this.updateSession,1000*60*5) }, fail: res => { console.log(res) // setTimeout(this.updateSession,1000) reject() } }) }) }else{ wx.checkSession({ success:resolve, fail:()=>{ this.getCode().then(code => { wx.request({ url: '' + serverAddr + '/updateSession', data: { userCode: code }, method: "POST", header: { 'content-type': 'application/json' }, success: res => { console.log(res) var data = res.data this.setData( { "session_key": data } ) resolve() // setTimeout(this.updateSession,1000*60*5) }, fail: res => { console.log(res) // setTimeout(this.updateSession,1000) reject() } }) }) } }) } }) }, // 上传照片并展示收到的结果 uploadImg(tempImagePath: any) { wx.showLoading({ // 显示加载中loading效果 title: "查询中喵", mask: true //开启蒙版遮罩 }); // return setTimeout(()=>{ // wx.hideLoading(); // var fake_data = { // id:70582140, // imgUrl:"./static/icons/history.svg", // res:{ // scores: 93, // arr: ["生牛乳"], // } // } // var data = fake_data // var nowdate = new Date(); // var nowyear = nowdate.getFullYear(); // var nowmonth = nowdate.getMonth() + 1; // var nowday = nowdate.getDate(); // var dateStr = nowyear + '.' + nowmonth + '.' + nowday // if (!this.data.data_history[dateStr]) { // this.data.data_history[dateStr] = [] // } // var historyTemp = // { // id: data.id, // imgUrl: data.imgUrl, // res: data.res, // hasCollect: false, // } // this.data.data_history[dateStr].push(historyTemp) // this.setData({ // data_history: this.data.data_history // }) // this.sortHistory() // this.show_result_byId(data.id) // this.save2storage() // },3000) wx.getFileSystemManager().readFile({ filePath: tempImagePath, encoding: 'base64', success: res => { // console.log('data:image/png;base64,' + res.data) const imgBase64 = res.data console.log(res.data) wx.request({ url: '' + serverAddr + '/api/ocr', //仅为示例,并非真实的接口地址 data: { imgBase64: imgBase64, // session_key:this.data.session_key }, method: "POST", header: { 'content-type': 'application/json' // 默认值 }, success: res => { var data = res.data console.log(res.data) wx.hideLoading(); var nowdate = new Date(); var nowyear = nowdate.getFullYear(); var nowmonth = nowdate.getMonth() + 1; var nowday = nowdate.getDate(); var dateStr = nowyear + '.' + nowmonth + '.' + nowday if (!this.data.data_history[dateStr]) { this.data.data_history[dateStr] = [] } var historyTemp = { id: data.id, imgUrl: data.imgUrl, res: data.res, hasCollect: false,//目前全是false。。。 } this.data.data_history[dateStr].push(historyTemp) this.setData({ data_history: this.data.data_history }) this.sortHistory() this.show_result_byId(data.id) this.save2storage() }, fail: res => { console.log(res) } }) } }) // wx.uploadFile({ // url: '' + serverAddr + '/api/ocr', //仅为示例,并非真实的接口地址 // filePath: tempImagePath, // name: 'file', // // formData: { // // session_key:this.data.session_key // // }, // success:res=>{ // const data = res.data // wx.hideLoading(); // var nowdate = new Date(); // var nowyear = nowdate.getFullYear(); // var nowmonth = nowdate.getMonth() + 1; // var nowday = nowdate.getDate(); // var dateStr = nowyear + '.' + nowmonth + '.' + nowday // if (!this.data.data_history[dateStr]) { // this.data.data_history[dateStr] = [] // } // var historyTemp = // { // id: data.id, // imgUrl: data.imgUrl, // res: data.res, // hasCollect: false,//目前全是false。。。 // } // this.data.data_history[dateStr].push(historyTemp) // this.setData({ // data_history: this.data.data_history // }) // this.sortHistory() // this.show_result_byId(data.id) // this.save2storage() // } // }) }, // 向云发送历史记录和收藏记录数据 uploadHistoryAndCollection(){ wx.request({ url: '' + serverAddr + '/uploadHistoryAndCollection', //仅为示例,并非真实的接口地址 data: { history : this.data.data_history, collection:this.data.data_collect, session_key:this.data.session_key }, method: "POST", header: { 'content-type': 'application/json' // 默认值 }, success: res => { console.log(res) }, fail: res => { console.log(res) } }) }, //拍照 takePhoto() { const ctx = wx.createCameraContext() console.log('takePhoto..') ctx.takePhoto({ // quality: 'normal', quality: 'normal', //找时间把这里和choosePhoto的success合并一下(算了) success: res => { const tempImagePath = res.tempImagePath console.log(tempImagePath) console.log(res) this.uploadImg(tempImagePath) } }) }, //选择照片 choosePhoto() { wx.chooseMedia({ mediaType: ['image'], sourceType: ['album'], sizeType: ["compressed"], count: 1, success: res => { const tempImagePath = res.tempFiles[0].tempFilePath console.log(tempImagePath) console.log(res) this.uploadImg(tempImagePath) } }) }, scores2risk(scores: Number) { if (scores < 33) { return "high"; } else if (scores < 66) { return "middle"; } else { return "low"; } }, readInput_lib(e: any) { //其他搜索内容 var exf = (o: any, keyw: string) => { //搜索额外信息 for (var i of o.extra) { if (i.name.includes(keyw)) { return true } } //搜索风险 if (o.riskStr.includes(keyw)) { return true } return false } var key = e.detail.value for (var n of this.data.data_lib) { // console.log(n) if (n.name.zh.includes(key) || n.name.en.toLowerCase().includes(key.toLowerCase()) || exf(n, key)) { // n.hidden = false; this.data.hidden_lib[n.name.zh] = false // console.log(n.name.zh) } else { // n.hidden = true; this.data.hidden_lib[n.name.zh] = true } } this.setData({ hidden_lib: this.data.hidden_lib }) // console.log(this.data.data_lib) }, readInput_result(e: any) { //其他搜索内容 var exf = (o: any, keyw: string) => { //搜索额外信息 for (var i of o.extra) { if (i.name.includes(keyw)) { return true } } //搜索风险 if (o.riskStr.includes(keyw)) { return true } return false } var key = e.detail.value for (var n of this.data.data_lib) { // console.log(n) if (n.name.zh.includes(key) || n.name.en.toLowerCase().includes(key.toLowerCase()) || exf(n, key)) { // n.hidden = false; this.data.hidden_result[n.name.zh] = false // console.log(n.name.zh) } else { // n.hidden = true; this.data.hidden_result[n.name.zh] = true } } this.setData({ hidden_result: this.data.hidden_result }) // console.log(this.data.data_lib) }, //将risk转为存储color和content的map scores2map(scores: Number) { var risk = this.scores2risk(scores) switch (risk) { case "low": { return { "color": "springgreen", "content": "低风险" }; } case "middle": { return { "color": "sandybrown", "content": "中风险" }; } case "high": { return { "color": "tomato", "content": "高风险" }; } } return { "color": "tomato", "content": "高风险" }; }, //.. id2resultAndDate(id: number) { for (var i in this.data.data_history) { for (var n of this.data.data_history[i]) if (n.id == id) { return { result: n, date: i } } } return null; }, // 将各种数据存入本地 save2storage() { var list = ['data_history', 'data_collect', 'data_lib','active_style'] for (var k of list) { wx.setStorageSync(k,this.data[k]) // console.log(k,this.data[k]) } }, // 从本地读取各种数据 readStorageData(){ var list = ['data_history', 'data_collect', 'data_lib','active_style'] for (var k of list) { var m = {} m[k] = wx.getStorageSync(k) this.setData(m) // console.log(k,this.data[k]) // this.data[k]=wx.getStorageSync(k) // console.log(wx.getStorageSync(k)) } // this.setData( // { // data_history:this.data["data_history"], // data_collect:this.data["data_collect"], // data_lib:this.data["data_lib"], // active_style:this.data[''] // } // ) }, // 清空收藏,可以放在个性化里面,最好加个确认的选项 clearCollection(){ this.data.data_collect=[] this.setData({ data_collect:this.data.data_collect, }) this.save2storage() }, //清空历史记录,可以放在个性化里面,最好加个确认的选项 clearHistory(){ this.data.data_history=[] this.setData({ data_history:this.data.data_history, }) this.save2storage() }, // 事件处理函数 bindViewTap() { wx.navigateTo({ url: '../logs/logs', }) }, getUserProfile() { // 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认,开发者妥善保管用户快速填写的头像昵称,避免重复弹窗 wx.getUserProfile({ desc: '存储历史记录', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写 success: (res) => { console.log(res, 666) this.setData({ userInfo: res.userInfo, hasUserInfo: true }) } }) }, getUserInfo(e: any) { // 不推荐使用getUserInfo获取用户信息,预计自2021年4月13日起,getUserInfo将不再弹出弹窗,并直接返回匿名的用户个人信息 console.log(e) this.setData({ userInfo: e.detail.userInfo, hasUserInfo: true }) }, getDate: function () { var nowdate = new Date(); var nowyear = nowdate.getFullYear(); var nowmonth = nowdate.getMonth() + 1; var nowday = nowdate.getDate(); var nowdata1 = nowyear + '年' + nowmonth + '月' + nowday + '日' this.setData({ currentDate: nowdata1 }); }, // 根据日期排序历史记录 sortHistory: function () { let keysSorted = Object.keys(this.data.data_history).sort((a, b) => { return this.cmpDate(a, b) }) // console.log(keysSorted) var data_history_new = {} for (var i of keysSorted) { data_history_new[i] = this.data.data_history[i] } // console.log(data_history_new) // console.log(arrayObj) // var data_history_new = new Map(arrayObj.map(i => [i[0], i[1]])); this.setData({ data_history: data_history_new }) // console.log(this.data.data_history) // this.data.data_history.sort() }, cmpDate: function (date0: string, date1: string) { // console.log(date0,date1) date0 = date0.split('.') date1 = date1.split('.') var y0 = parseInt(date0[0]), y1 = parseInt(date1[0]), m0 = parseInt(date0[1]), m1 = parseInt(date1[1]), d0 = parseInt(date0[2]), d1 = parseInt(date1[2]) // console.log(date0, date1, y0, y1, m0, m1, d0, d1) var res = 0 if (y1 != y0) { if (y1 > y0) { res = -1 } else if (y1 < y0) { res = 1 } } else if (m1 != m0) { if (m1 > m0) { res = -1 } else if (m1 < m0) { res = 1 } } else if (d1 != d0) { if (d1 > d0) { res = -1 } else if (d1 < d0) { res = 1 } } res = -res // console.log(res) return res }, // 文字转语音 text2speech:function(e:any){ var str = e.target.dataset.name // console.log(e.target.dataset.name) // 个人小程序做不了 var plugin = requirePlugin("WechatSI") // plugin.textToSpeech({ // lang: "zh_CN", // tts: true, // content: str, // success: function(res:any) { // console.log("succ tts", res.filename) // const innerAudioContext = wx.createInnerAudioContext() // innerAudioContext.autoplay = true // innerAudioContext.src = res.filename // innerAudioContext.onPlay(() => { // console.log('开始播放') // }) // innerAudioContext.onError((res) => { // console.log(res.errMsg) // console.log(res.errCode) // }) // }, // fail: function(res:any) { // console.log("fail tts", res) // } // }) }, // 获取用户code,以给服务端换取openId getCode: async function () { var code await new Promise(function (res, rej) { wx.login({ success: rcv => { res(rcv.code) }, fail: rcv => { rej(rcv) } }) }).then(function (input: unknown) { code = input }).catch(function () { code = "" }) // console.log(code) return code }, testfunction: async function () { await this.getCode().then(code => { // code == "" => failed if (code == "") { this.testfunction() } else { console.log(code) wx.chooseImage({ success(res) { const tempFilePaths = res.tempFilePaths console.log(tempFilePaths) wx.uploadFile({ url: '' + serverAddr + '/rcvImg', //仅为示例,非真实的接口地址 filePath: tempFilePaths[0], name: 'Img', formData: { 'user': code }, success(res) { const data = res.data console.log(data) } }) } }) } }) } })