From 0ff5c2f63953dffa2e070a37c280f42bc3158adb Mon Sep 17 00:00:00 2001 From: "3321822538@qq.com" <3321822538@qq.com> Date: Fri, 16 May 2025 17:52:35 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=B5=E5=8A=A8=E8=BD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/http.interceptor.js | 2 +- components/network-status/network-status.vue | 53 ++ novel/万神之主.txt | 641 ------------------- page_fenbao/index.vue | 2 +- page_fenbao/storedlist/trueorder.vue | 99 ++- page_shanghu/admin_index.vue | 48 +- page_shanghu/gongzuotai/woke_deviceMgmt.vue | 109 +++- page_shanghu/guanli/admin_order.vue | 31 +- page_shanghu/guanli/admin_worke.vue | 16 +- page_shanghu/guanli/device_detail.vue | 6 +- page_shanghu/guanli/order_detail.vue | 230 +++++-- page_user/huanbike.vue | 32 +- page_user/shiming.vue | 9 - page_user/shiping/index.vue | 50 ++ pages.json | 7 + pages/myorder/returned/index.vue | 453 ++++++++++--- 16 files changed, 930 insertions(+), 858 deletions(-) create mode 100644 components/network-status/network-status.vue delete mode 100644 novel/万神之主.txt create mode 100644 page_user/shiping/index.vue diff --git a/common/http.interceptor.js b/common/http.interceptor.js index 5bb7f9b..5754c98 100644 --- a/common/http.interceptor.js +++ b/common/http.interceptor.js @@ -1,7 +1,7 @@ const install = (Vue, vm) => { uni.setStorageSync('deptId', 100); Vue.prototype.$u.http.setConfig({ - // baseUrl: 'http://192.168.2.139:4101', //键辉本地 + // baseUrl: 'http://192.168.2.14:4101', //键辉本地 // baseUrl: 'http://192.168.0.102:4101', //景森本地 baseUrl: 'https://ele.ccttiot.com/prod-api', //线上 loadingText: '努力加载中~', diff --git a/components/network-status/network-status.vue b/components/network-status/network-status.vue new file mode 100644 index 0000000..1f38150 --- /dev/null +++ b/components/network-status/network-status.vue @@ -0,0 +1,53 @@ + + + + + \ No newline at end of file diff --git a/novel/万神之主.txt b/novel/万神之主.txt deleted file mode 100644 index e74cb90..0000000 --- a/novel/万神之主.txt +++ /dev/null @@ -1,641 +0,0 @@ -《万神之主》 - -【故事大纲】 - -第一章:平凡少年 -- 主角林玄,一个普通山村少年 -- 意外获得上古神物"轮回珠" -- 觉醒特殊体质"混沌神体" -- 开始踏上修炼之路 - -第二章:初入江湖 -- 进入青云宗修炼 -- 结识红颜知己苏清月 -- 获得第一件神器"天玄剑" -- 突破筑基期 - -第三章:秘境奇遇 -- 进入上古秘境"神魔战场" -- 获得上古神兽"九尾天狐"认主 -- 习得绝世功法"混沌神诀" -- 突破金丹期 - -第四章:宗门大比 -- 在宗门大比中一鸣惊人 -- 击败宗门天才 -- 获得进入核心弟子资格 -- 结识神秘老者 - -第五章:神魔之战 -- 卷入神魔两界大战 -- 获得神界传承 -- 突破元婴期 -- 建立自己的势力 - -第六章:万界争霸 -- 统一下界 -- 飞升上界 -- 建立神国 -- 突破化神期 - -第七章:轮回之谜 -- 探索轮回奥秘 -- 领悟时间法则 -- 突破渡劫期 -- 成就真神之位 - -第八章:隐居世俗 -- 厌倦神界纷争 -- 隐居人间 -- 感悟人生百态 -- 寻找新的突破 - -第九章:再造巅峰 -- 领悟大道真谛 -- 突破神王境 -- 创造新的神话 -- 成为万神之主 - -【开篇章节】 - -第一章:轮回珠现 - -"轰!" - -一声巨响,打破了山村的宁静。 - -林玄从睡梦中惊醒,揉了揉惺忪的睡眼。窗外,一道金光划破夜空,坠落在村后的山林中。 - -"那是什么?"林玄心中一动,披上外衣,悄悄溜出家门。 - -月光如水,洒在山间小路上。林玄循着金光坠落的方向,来到一处幽深的山谷。 - -山谷中央,一颗散发着淡淡金光的珠子静静躺在那里。珠子通体晶莹,内部似有星辰流转,神秘莫测。 - -"这是..."林玄小心翼翼地捡起珠子。 - -就在他触碰到珠子的瞬间,一股浩瀚的信息涌入脑海。 - -"轮回珠,上古神物,可助人领悟轮回真谛..." - -林玄只觉得体内一股暖流涌动,全身经脉仿佛被重新塑造,一股前所未有的力量在体内流转。 - -"这是...混沌神体?"林玄震惊地感受着身体的变化。 - -就在这时,远处传来一阵脚步声。 - -"有人来了!"林玄连忙将轮回珠藏入怀中,转身就要离开。 - -"站住!"一个阴冷的声音响起。 - -林玄回头,只见三个黑衣人站在不远处,目光阴鸷地盯着他。 - -"小子,把轮回珠交出来,饶你不死!"为首的黑衣人冷冷道。 - -林玄心中一紧,但很快镇定下来。他感受到体内新生的力量,嘴角露出一丝冷笑。 - -"想要轮回珠?那就看你们有没有这个本事了!" - -话音未落,林玄身形一闪,主动向黑衣人冲去。 - -这一夜,注定是一个不平凡的夜晚。一个普通少年的命运,就此改变。 - -第二章:初入江湖 - -林玄与三个黑衣人的战斗,在山谷中掀起一阵狂风。 - -"这小子有古怪!"为首的黑衣人惊呼。 - -林玄只觉体内力量源源不断,每一拳都带着混沌之力。三个黑衣人虽然修为不弱,但在混沌神体的压制下,渐渐落入下风。 - -"撤!"黑衣人见势不妙,转身就要逃走。 - -"想走?"林玄冷笑一声,体内轮回珠微微震动,一道金光射出,直接将三个黑衣人定在原地。 - -"这是...轮回之力?"黑衣人惊恐万分。 - -林玄没有理会他们的求饶,直接了结了三人。他知道,从获得轮回珠的那一刻起,自己就已经卷入了一个巨大的漩涡。 - -回到家中,林玄开始研究轮回珠的奥秘。珠子中蕴含的信息告诉他,想要真正掌握轮回珠的力量,需要进入修炼宗门。 - -"青云宗..."林玄喃喃自语。 - -三日后,林玄告别父母,踏上了前往青云宗的路。 - -青云宗位于青云山脉之巅,是方圆千里内最大的修炼宗门。林玄跋山涉水,终于来到山门前。 - -"来者何人?"守门弟子拦住林玄。 - -"在下林玄,特来拜师学艺。"林玄恭敬道。 - -"就凭你?"守门弟子不屑地打量着他,"青云宗可不是什么人都能进的。" - -林玄微微一笑,体内混沌之力微微释放。守门弟子顿时脸色大变,连忙去通报。 - -不多时,一位白发老者飘然而至。 - -"混沌神体?"老者眼中精光一闪,"有意思,随我来吧。" - -老者是青云宗大长老,名为苏青云。他看出林玄的不凡,直接收为亲传弟子。 - -在青云宗的日子,林玄刻苦修炼。有轮回珠相助,他的修为一日千里。 - -这一日,林玄正在后山修炼,忽然听到一阵琴声。循声而去,只见一位白衣女子正在抚琴。 - -"好美的琴声。"林玄赞叹道。 - -女子抬头,露出一张倾国倾城的容颜。 - -"在下苏清月,不知公子如何称呼?" - -"林玄。" - -两人相谈甚欢,苏清月是青云宗宗主的女儿,琴棋书画样样精通,修为也不弱。 - -"林师弟,听说你获得了天玄剑的认可?"苏清月问道。 - -林玄点头。天玄剑是青云宗镇宗之宝,只有得到剑灵认可的人才能使用。 - -"那真是太好了,有了天玄剑,你的实力会更上一层楼。" - -就在两人交谈时,远处传来一阵骚动。 - -"不好,是魔教的人!"苏清月脸色一变。 - -林玄握紧天玄剑,眼中战意盎然。 - -"清月师姐,我们一起上!" - -这一战,林玄展现出惊人的实力。天玄剑在手,配合混沌神体,所向披靡。 - -战后,林玄成功突破筑基期,成为青云宗年轻一代的翘楚。 - -"林师弟,你的天赋真是惊人。"苏清月赞叹道。 - -林玄微微一笑,心中却明白,这只是开始。轮回珠的秘密,还有更多等待他去探索。 - -第三章:秘境奇遇 - -青云宗后山,一处隐秘的山洞中。 - -"林师弟,你真的要进入神魔战场?"苏清月担忧地看着林玄。 - -"嗯,轮回珠指引我,那里有我需要的东西。"林玄坚定地说。 - -神魔战场是上古时期神魔大战的遗迹,危险重重,但机缘也很多。林玄在轮回珠的指引下,发现了一处通往战场的入口。 - -"我陪你一起去。"苏清月说道。 - -林玄摇头:"太危险了,我一个人去就好。" - -告别苏清月,林玄踏入山洞。洞内幽深,空气中弥漫着古老的气息。轮回珠在胸前微微发光,指引着方向。 - -不知走了多久,眼前豁然开朗。一片荒芜的战场出现在眼前,残破的兵器散落一地,空气中还残留着当年大战的余威。 - -"这就是神魔战场..."林玄感叹道。 - -突然,轮回珠剧烈震动,指向战场深处。林玄循着指引,来到一座残破的神殿前。 - -神殿中央,一尊九尾天狐的雕像栩栩如生。 - -"人类,你终于来了。"一个空灵的声音响起。 - -林玄一惊,只见雕像竟然活了过来,化作一只通体雪白的九尾天狐。 - -"我是上古神兽九尾天狐,等待有缘人已经千年。"天狐说道,"轮回珠选择了你,说明你就是我要等的人。" - -"前辈..."林玄恭敬行礼。 - -"不必多礼,从今以后,你就是我的主人。"天狐说着,化作一道白光没入林玄体内。 - -林玄只觉体内多了一股强大的力量,与混沌神体完美融合。 - -"这是混沌神诀,上古最强功法。"天狐的声音在脑海中响起。 - -林玄盘膝而坐,开始修炼混沌神诀。功法运转,体内力量不断攀升。 - -不知过了多久,林玄睁开眼,眼中精光闪烁。 - -"金丹期!"他惊喜地发现,自己竟然直接突破到了金丹期。 - -就在这时,神殿深处传来一阵异动。 - -"不好,是魔气!"天狐提醒道。 - -林玄握紧天玄剑,警惕地看着前方。一个浑身笼罩在黑雾中的身影缓缓走出。 - -"桀桀,终于等到你了,轮回珠的持有者。"黑影阴笑道。 - -"你是谁?"林玄冷声问道。 - -"我是魔界使者,奉命来取轮回珠。"黑影说着,突然出手。 - -林玄早有准备,天玄剑一挥,混沌之力爆发。两人战在一起,打得天昏地暗。 - -"混沌神诀,第一式!"林玄大喝一声,体内力量爆发,直接将黑影击退。 - -"不可能!你怎么会混沌神诀?"黑影惊恐万分。 - -林玄没有给他喘息的机会,又是一剑斩出。黑影惨叫一声,化作黑雾消散。 - -"这只是开始,魔界不会善罢甘休的。"天狐提醒道。 - -林玄点头,他知道,更大的挑战还在后面。但有了九尾天狐和混沌神诀,他更有信心面对未来的挑战。 - -离开神魔战场,林玄回到青云宗。苏清月见到他平安归来,欣喜不已。 - -"林师弟,你突破了?"她惊讶地发现林玄的气息更加强大。 - -林玄点头,将秘境中的经历简单说了一遍。 - -"太好了,有了这些机缘,你在宗门大比中一定能大放异彩。"苏清月笑道。 - -林玄看着远方,眼中闪烁着坚定的光芒。他知道,自己的修炼之路才刚刚开始。 - -第四章:宗门大比 - -青云宗演武场,人声鼎沸。 - -三年一度的宗门大比如期而至,所有弟子都摩拳擦掌,准备一展身手。 - -"林师弟,这次大比,你可要小心。"苏清月叮嘱道,"听说这次有不少天才弟子参加。" - -林玄点头:"放心,我不会大意的。" - -大比开始,林玄一路过关斩将,轻松晋级。他的表现引起了宗门高层的注意。 - -"此子不简单啊。"宗主苏青云看着场中的林玄,眼中闪过一丝赞赏。 - -半决赛,林玄的对手是宗门第一天才,号称"青云剑"的赵无极。 - -"林玄,听说你获得了天玄剑的认可?"赵无极冷笑道,"可惜,在我面前,你什么都不是。" - -林玄淡然一笑:"是吗?那就让我见识见识你的实力。" - -两人交手,剑气纵横。赵无极的剑法确实了得,但林玄有混沌神体加持,丝毫不落下风。 - -"混沌神诀,第二式!"林玄突然变招,体内力量爆发。 - -赵无极大惊,连忙后退,但还是被剑气所伤。 - -"不可能!"他难以置信地看着林玄,"你怎么会这么强?" - -林玄没有回答,又是一剑斩出。赵无极败退,林玄晋级决赛。 - -决赛对手是宗门大长老的亲传弟子,号称"青云第一人"的李天阳。 - -"林玄,你的表现让我很意外。"李天阳说道,"不过,到此为止了。" - -林玄感受到对方强大的气息,知道这是一场硬仗。 - -两人交手,打得天昏地暗。李天阳的修为确实深厚,但林玄有九尾天狐相助,渐渐占据上风。 - -"混沌神诀,第三式!"林玄大喝一声,体内力量爆发到极致。 - -李天阳被这一击震退,脸色苍白。 - -"我认输。"他苦笑道,"林师弟,你赢了。" - -全场哗然,谁也没想到,一个刚入门不久的弟子,竟然能夺得大比第一。 - -"林玄,你很不错。"宗主苏青云亲自为林玄颁奖,"从今天起,你就是核心弟子了。" - -林玄恭敬行礼:"多谢宗主。" - -就在这时,一位神秘老者突然出现在场中。 - -"好一个天才少年。"老者笑道,"老夫观你天赋异禀,可愿随我修行?" - -林玄感受到老者深不可测的气息,知道这是一位高人。 - -"前辈是?"他问道。 - -"老夫乃天机老人,专门寻找有缘人。"老者说道,"你的轮回珠,与我有缘。" - -林玄心中一动,看来这位老者知道轮回珠的秘密。 - -"弟子愿意。"他恭敬道。 - -"好,三日后,我在后山等你。"老者说完,飘然而去。 - -大比结束,林玄成为宗门最耀眼的新星。但他知道,更大的机缘在等着他。 - -"林师弟,恭喜你。"苏清月笑道。 - -林玄点头:"清月师姐,我要离开一段时间。" - -"我知道,去吧,我等你回来。"苏清月眼中闪过一丝不舍。 - -林玄看着远方,心中充满期待。天机老人的出现,或许会给他带来新的机遇。 - -第五章:神魔之战 - -三日后,林玄如约来到后山。 - -天机老人早已等候多时,见到林玄,满意地点点头。 - -"很好,你来了。"老人说道,"随我来吧。" - -两人来到一处隐秘的山洞,洞内别有洞天。 - -"这里是天机阁,我的修炼之地。"老人介绍道,"从今天起,你就在这里修炼。" - -林玄点头,开始跟随天机老人学习。老人传授他许多上古秘术,让他的实力更上一层楼。 - -这一日,天机老人突然神色凝重。 - -"林玄,大事不好了。"老人说道,"魔界大军已经攻入神界,神魔之战即将爆发。" - -林玄一惊:"前辈,我们该怎么办?" - -"轮回珠是上古神物,与神界有莫大关联。"老人说道,"你必须前往神界,助神族一臂之力。" - -林玄点头:"弟子明白。" - -告别天机老人,林玄回到青云宗,向宗主说明情况。 - -"去吧,这是你的使命。"苏青云说道,"青云宗永远是你的后盾。" - -林玄又找到苏清月,两人依依惜别。 - -"清月师姐,等我回来。"林玄说道。 - -"一定要平安回来。"苏清月眼中含泪。 - -林玄点头,转身离去。他来到一处古老的传送阵,这是通往神界的通道。 - -传送阵启动,林玄只觉眼前一花,已经来到神界。 - -神界一片混乱,到处都是战斗的痕迹。林玄循着轮回珠的指引,来到神界中心。 - -"来者何人?"一位神将拦住林玄。 - -"在下林玄,特来助神界一臂之力。"林玄说道。 - -神将感受到林玄体内强大的气息,知道他不是普通人。 - -"随我来。"神将说道。 - -林玄被带到神王面前。神王是一位威严的中年人,看到林玄,眼中闪过一丝惊讶。 - -"轮回珠的持有者?"神王问道。 - -林玄点头:"正是。" - -"很好,有了轮回珠,我们就有希望了。"神王说道,"魔界大军即将攻来,你做好准备。" - -林玄点头,开始准备战斗。他感受到体内轮回珠的力量,知道这是自己的使命。 - -不久,魔界大军果然攻来。林玄站在城墙上,看着黑压压的魔军,心中毫无畏惧。 - -"混沌神诀,第四式!"林玄大喝一声,体内力量爆发。 - -他冲入魔军之中,所向披靡。天玄剑在手,配合混沌神体,无人能挡。 - -"那是谁?"魔界统帅惊讶地看着林玄。 - -"是轮回珠的持有者!"有魔将惊呼。 - -林玄一路杀到魔界统帅面前,两人展开激战。 - -"混沌神诀,第五式!"林玄再次爆发,直接将魔界统帅击退。 - -魔界大军见统帅败退,士气大减。神界趁机反攻,终于击退了魔界大军。 - -战后,神王亲自接见林玄。 - -"林玄,你立下大功,我代表神界感谢你。"神王说道。 - -林玄摇头:"这是我应该做的。" - -"从今以后,你就是神界的守护者。"神王说道,"这是神界传承,希望你能好好利用。" - -林玄接过传承,感受到一股强大的力量涌入体内。 - -"元婴期!"他惊喜地发现,自己竟然突破到了元婴期。 - -神王满意地点头:"你的潜力无限,未来或许能成为神界之主。" - -林玄心中一动,他知道,自己的使命才刚刚开始。 - -第六章:万界争霸 - -神界之战后,林玄的名声传遍万界。 - -"林玄,你现在的实力,已经可以统一下界了。"神王说道。 - -林玄点头,他知道这是自己的使命。他回到下界,开始统一之路。 - -青云宗成为他的第一个目标。宗主苏青云见到林玄归来,欣喜不已。 - -"林玄,你回来了。"苏青云说道。 - -林玄点头:"宗主,我这次回来,是要统一下界。" - -苏青云一愣,随即笑道:"好,青云宗全力支持你。" - -有了青云宗的支持,林玄开始征战四方。他凭借强大的实力,很快统一了下界各大宗门。 - -"林玄,你的实力已经达到化神期,可以飞升上界了。"九尾天狐提醒道。 - -林玄点头,开始准备飞升。他来到一处古老的祭坛,这是飞升的通道。 - -"清月师姐,我要飞升了。"林玄找到苏清月,说道。 - -苏清月眼中含泪:"去吧,我等你回来。" - -林玄点头,转身踏上祭坛。祭坛启动,一道金光冲天而起。 - -林玄只觉眼前一花,已经来到上界。 - -上界比下界更加广阔,强者如云。林玄开始在上界建立自己的势力。 - -"混沌神国,从今天起,正式成立。"林玄站在新建的宫殿前,宣布道。 - -混沌神国很快成为上界最强大的势力之一。林玄的实力也在不断提升,终于突破到化神期。 - -"林玄,你的实力已经达到化神期巅峰,可以尝试突破到渡劫期了。"神王的声音在脑海中响起。 - -林玄点头,开始准备突破。他来到一处隐秘的山洞,开始闭关。 - -闭关期间,林玄不断参悟轮回珠的奥秘。他感受到,轮回珠中蕴含着更加强大的力量。 - -"混沌神诀,第六式!"林玄大喝一声,体内力量爆发到极致。 - -一股强大的力量从体内涌出,林玄成功突破到渡劫期。 - -"太好了!"九尾天狐欣喜道,"你现在已经是上界最强者之一了。" - -林玄点头,但他知道,自己的目标不止于此。他要成为万界之主,创造新的神话。 - -"混沌神国,从今天起,正式向其他势力宣战。"林玄站在宫殿前,宣布道。 - -混沌神国的军队开始征战四方,所向披靡。林玄亲自出手,击败了一个又一个强大的对手。 - -"林玄,你的实力已经达到渡劫期巅峰,可以尝试突破到真神之位了。"神王的声音再次响起。 - -林玄点头,开始准备最后的突破。他知道,这将是他修炼之路上的最大挑战。 - -第七章:轮回之谜 - -林玄站在混沌神国的最高处,仰望星空。 - -"轮回珠,你到底隐藏着什么秘密?"他喃喃自语。 - -自从突破到渡劫期后,林玄就感受到轮回珠中有一股神秘的力量在召唤他。 - -"主人,我感受到轮回珠中有时间法则的气息。"九尾天狐说道。 - -林玄点头,开始参悟轮回珠中的奥秘。他盘膝而坐,心神沉入轮回珠中。 - -轮回珠中,仿佛有一个无尽的世界。林玄看到无数画面在眼前闪过,那是过去、现在、未来的片段。 - -"这就是轮回的奥秘吗?"林玄心中一动。 - -他开始尝试掌控这些画面,领悟时间法则。这是一个漫长的过程,需要极大的耐心和悟性。 - -不知过了多久,林玄终于有所领悟。 - -"时间法则,原来如此。"他睁开眼睛,眼中闪烁着智慧的光芒。 - -就在这时,轮回珠突然剧烈震动,一道金光冲天而起。 - -"这是...真神之位的召唤?"林玄惊讶道。 - -他感受到一股强大的力量在召唤他,那是真神之位的考验。 - -"主人,你要小心。"九尾天狐提醒道。 - -林玄点头,开始准备接受考验。他来到一处古老的祭坛,这是真神之位的考验之地。 - -祭坛上,一位神秘的老者出现。 - -"林玄,你终于来了。"老者说道。 - -"前辈是?"林玄问道。 - -"我是轮回之主,掌管轮回法则。"老者说道,"你的表现让我很满意,现在,接受最后的考验吧。" - -林玄点头,开始接受考验。考验分为三关:过去、现在、未来。 - -第一关,林玄回到过去,重新经历自己的人生。他看到了自己的成长,也看到了自己的不足。 - -第二关,林玄面对现在的自己,需要战胜内心的恐惧和欲望。 - -第三关,林玄看到未来的自己,那是一个站在万界之巅的强者。 - -"很好,你通过了考验。"轮回之主满意地点头,"从今天起,你就是新的轮回之主。" - -林玄感受到一股强大的力量涌入体内,那是真神之位的力量。 - -"真神之位!"他惊喜地发现,自己终于突破到了真神之位。 - -"林玄,你的使命才刚刚开始。"轮回之主说道,"轮回的奥秘,还有更多等待你去探索。" - -林玄点头,他知道,自己的修炼之路还很长。但他有信心,能够走得更远。 - -第八章:隐居世俗 - -成就真神之位后,林玄站在万界之巅,俯瞰众生。 - -"主人,你现在已经是万界最强者了。"九尾天狐说道。 - -林玄点头,但他心中却有一丝疲惫。多年的征战,让他感到厌倦。 - -"我想休息一段时间。"林玄说道。 - -他决定隐居世俗,体验平凡的生活。他来到一个普通的小镇,化名"林先生",开了一家小茶馆。 - -"林先生,您的茶真好喝。"镇上的居民称赞道。 - -林玄微笑点头,享受着这种平静的生活。他开始观察普通人的生活,感受他们的喜怒哀乐。 - -"原来,平凡的生活也有它的美好。"林玄感叹道。 - -他结识了许多朋友,听他们讲述生活中的故事。这些故事让他对人生有了新的感悟。 - -"林先生,您看起来不像普通人。"一位老者说道。 - -林玄笑而不语,继续泡茶。他知道,自己的身份迟早会暴露,但他并不在意。 - -这一日,小镇上来了一群不速之客。 - -"听说这里有一位高人,我们特来拜访。"为首的人说道。 - -林玄抬头,看到对方身上散发着强大的气息,知道他们是修炼者。 - -"我就是你们要找的人。"林玄说道。 - -对方一愣,随即恭敬行礼:"前辈,我们是来请教修炼之道的。" - -林玄点头,开始指点他们。他发现自己虽然隐居,但修炼之心从未改变。 - -"修炼之道,重在修心。"林玄说道,"只有心静,才能看清自己的路。" - -对方若有所思,感激地离开。 - -林玄继续过着平静的生活,但他知道,自己的使命还未完成。他开始思考,如何将修炼之道与平凡生活结合。 - -"或许,这就是新的突破。"他喃喃自语。 - -第九章:再造巅峰 - -隐居的日子一天天过去,林玄的心境越来越平和。 - -"主人,你似乎找到了新的方向。"九尾天狐说道。 - -林玄点头:"是的,我明白了修炼的真谛。" - -他开始尝试将修炼之道与平凡生活结合,创造出一种新的修炼方式。 - -"修炼不在高处,而在心中。"林玄说道。 - -这一日,他来到一处山顶,仰望星空。 - -"轮回珠,是时候了。"他喃喃自语。 - -轮回珠在胸前微微发光,似乎在回应他。林玄开始最后的突破。 - -"混沌神诀,第七式!"他大喝一声,体内力量爆发到极致。 - -一股强大的力量从体内涌出,林玄成功突破到神王境。 - -"神王境!"他惊喜地发现,自己终于达到了修炼的巅峰。 - -就在这时,天空中出现一道金光,一位神秘的老者出现。 - -"林玄,你终于领悟了大道真谛。"老者说道。 - -"前辈是?"林玄问道。 - -"我是大道之主,掌管万界法则。"老者说道,"你的表现让我很满意,现在,接受最后的考验吧。" - -林玄点头,开始接受考验。考验很简单,只需要回答一个问题。 - -"什么是修炼的真谛?"老者问道。 - -林玄沉思片刻,说道:"修炼的真谛,在于修心。心静则明,心明则通。修炼不在高处,而在心中。" - -老者满意地点头:"很好,你通过了考验。从今天起,你就是新的万神之主。" - -林玄感受到一股强大的力量涌入体内,那是万神之主的力量。 - -"万神之主!"他惊喜地发现,自己终于成为了万界最强者。 - -"林玄,你的使命才刚刚开始。"大道之主说道,"万界的未来,就交给你了。" - -林玄点头,他知道,自己的责任重大。但他有信心,能够带领万界走向更美好的未来。 - -回到小镇,林玄继续开着他的小茶馆。但他知道,自己已经不再是普通人。 - -"林先生,您的茶真好喝。"镇上的居民称赞道。 - -林玄微笑点头,享受着这种平静的生活。他知道,这就是他想要的。 - -"修炼之道,重在修心。"他说道,"只有心静,才能看清自己的路。" - -从此,林玄成为了万界的传说。他的故事被传颂千古,激励着无数修炼者。 - -而他,依然在那座小镇上,开着他的小茶馆,过着平凡而充实的生活。 - -【全文完】 \ No newline at end of file diff --git a/page_fenbao/index.vue b/page_fenbao/index.vue index e56fbc4..1f2da35 100644 --- a/page_fenbao/index.vue +++ b/page_fenbao/index.vue @@ -13,7 +13,7 @@ - + 确认开锁 diff --git a/page_fenbao/storedlist/trueorder.vue b/page_fenbao/storedlist/trueorder.vue index b789d79..87b6ae9 100644 --- a/page_fenbao/storedlist/trueorder.vue +++ b/page_fenbao/storedlist/trueorder.vue @@ -393,6 +393,8 @@ devicename: '', devicesarr: [], findDeviceTimer: null, + lat:'', + lon:'' } }, onLoad(option) { @@ -536,11 +538,34 @@ },1500) }, onShow() { + xBlufi.notifyConnectBle({ + isStart: false, + deviceId: this.deviceId, + name: this.name + }) xBlufi.notifyStartDiscoverBle({ 'isStart': true }) xBlufi.listenDeviceMsgEvent(true, this.funListenDeviceMsgEvent) }, + // onHide() { + // xBlufi.notifyConnectBle({ + // isStart: false, + // deviceId: this.deviceId, + // name: this.name + // }) + // xBlufi.notifyStartDiscoverBle({ + // 'isStart': true + // }) + // xBlufi.listenDeviceMsgEvent(true, this.funListenDeviceMsgEvent) + // }, + // onUnload() { + + // xBlufi.notifyStartDiscoverBle({ + // 'isStart': false + // }) + // xBlufi.listenDeviceMsgEvent(false, this.funListenDeviceMsgEvent) + // }, methods: { // 判断离线连接蓝牙 findDevice() { @@ -575,6 +600,7 @@ console.log('断开'); this.ver_dataflag = 1 console.log(this.ver_dataflag,'断开断开'); + this.findDevice() } break; case xBlufi.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS: @@ -599,9 +625,9 @@ this.findDevice() } break; - case xBlufi.XBLUFI_TYPE.TYPE_RECIEVE_CUSTON_DATA: - console.log("1收到设备发来的自定义数据结果:", options.data) - break; + // case xBlufi.XBLUFI_TYPE.TYPE_RECIEVE_CUSTON_DATA: + // console.log("1收到设备发来的自定义数据结果:", options.data) + // break; case xBlufi.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS_START: if (!options.result) { console.log('蓝牙未开启') @@ -665,6 +691,26 @@ title: '车辆连接中...', mask: true }) + setTimeout(()=>{ + if(this.ver_dataflag == 3){ + uni.hideLoading() + }else{ + uni.hideLoading() + let that = this + uni.showModal({ + title: '提示', + content: '连接失败,是否重新连接?', + showCancel: true, + success: function(res) { + if (res.confirm) { + that.btnzhifu() + } else if (res.cancel) { + + } + } + }) + } + },10000) } }else{ if (this.bikeobj.areaAuthentication == true) { //判断是否需要实名认证 @@ -941,6 +987,23 @@ }, // 蓝牙下单 getlyxd(){ + uni.getLocation({ + type: 'gcj02', // 国内地图更兼容 + isHighAccuracy: true, + accuracy:'best', + success: (res) => { + console.log('精确坐标:', res); + this.lat = res.latitude; + this.lon = res.longitude; + this.getfeiyong(); + }, + fail: (err) => { + console.error('获取位置失败:', err); + this.lat = null + this.lon = null + } + }); + if(this.ver_dataflag == 3){ let data = { deviceId: this.bikeobj.id, suitId: this.suitId, @@ -966,9 +1029,17 @@ customData: "11open@" }) console.log(respc, '支付成功') - // xBlufi.notifySendCustomData({ - // customData: "11open@" - // }) + let data = { + mac:this.mac, + reason:'还车', + command:'open', + longitude:this.lon, + latitude:this.lat, + result:'成功' + } + this.$u.post(`/app/commandLog/bluetooth`,data).then(res => { + console.log(res,'蓝牙'); + }) this.$u.put(`/app/pay/refreshPayResult?no=${resp.data.pay.no}`).then(( res) => { setTimeout(() => { @@ -997,6 +1068,20 @@ }).catch(e => { uni.hideLoading() }) + }else{ + uni.showModal({ + title: '提示', + content: '设备未连接,请靠近车辆等待连接', + showCancel: false, + success: function(res) { + if (res.confirm) { + + } else if (res.cancel) { + + } + } + }) + } }, // 下单 getzf() { @@ -2012,4 +2097,4 @@ } } } - + diff --git a/page_shanghu/admin_index.vue b/page_shanghu/admin_index.vue index d31471c..207ea72 100644 --- a/page_shanghu/admin_index.vue +++ b/page_shanghu/admin_index.vue @@ -751,26 +751,28 @@ } }) }) - // this.status9.forEach(item => { - // this.markers.push({ - // id: parseFloat(item.sn), - // latitude: parseFloat(item.latitude), - // longitude: parseFloat(item.longitude), - // // title: item.deviceName, - // width: 40, - // height: 40, - // iconPath: 'https://lxnapi.ccttiot.com/bike/img/static/u4UKmB47AxOj3YKIaajM', - // callout: { - // content: '离线', // 修改为你想要显示的文字内容 - // color: '#ffffff', // 修改为文字颜色 - // fontSize: 14, // 修改为文字大小 - // borderRadius: 10, // 修改为气泡圆角大小 - // bgColor: '#000000', // 修改为气泡背景颜色 - // padding: 6, // 修改为气泡内边距 - // display: 'ALWAYS', // 修改为气泡的显示策略 - // } - // }) - // }) + this.status9.forEach(item => { + this.markers.push({ + id: parseFloat(item.sn), + latitude: parseFloat(item.latitude), + longitude: parseFloat(item.longitude), + // title: item.deviceName, + width: 30, + height: 34, + iconPath: item.onlineStatus == 0 ? + 'https://api.ccttiot.com/smartmeter/img/static/uQPc1AJSqJ6ZbOWrrLrf' : + 'https://api.ccttiot.com/smartmeter/img/static/u392YZI3qzhhi3pORotr', + callout: { + content:'' + parseInt(item.remainingPower) + '%', // 修改为你想要显示的文字内容 + color: '#ffffff', // 修改为文字颜色 + fontSize: 10, // 修改为文字大小 + borderRadius: 10, // 修改为气泡圆角大小 + bgColor: '#000000', // 修改为气泡背景颜色 + padding: 3, // 修改为气泡内边距 + display: 'ALWAYS', // 修改为气泡的显示策略 + } + }) + }) }, getmarks() { this.markers = [] @@ -803,6 +805,8 @@ this.status6.push(item) } else if (item.status == 8) { this.status8.push(item) + }else if (item.status == 9) { + this.status9.push(item) } }) this.markstause() @@ -828,6 +832,8 @@ this.status6.push(item) } else if (item.status == 8) { this.status8.push(item) + }else if (item.status == 9) { + this.status9.push(item) } }) this.markstause() @@ -853,6 +859,8 @@ this.status6.push(item) } else if (item.status == 8) { this.status8.push(item) + }else if (item.status == 9) { + this.status9.push(item) } }) this.markstause() diff --git a/page_shanghu/gongzuotai/woke_deviceMgmt.vue b/page_shanghu/gongzuotai/woke_deviceMgmt.vue index 20a8bef..cda3483 100644 --- a/page_shanghu/gongzuotai/woke_deviceMgmt.vue +++ b/page_shanghu/gongzuotai/woke_deviceMgmt.vue @@ -28,7 +28,7 @@ - + @@ -150,6 +150,7 @@ export default { showdsc: false, sctit: '从高到低', scidx: 'desc', + isRefreshing: false, show: false, showtype: false, typeSort: 'remainingPower', @@ -220,7 +221,10 @@ export default { filteredList: [], areaId: 0, pageNum:1, - total:'' + total:'', + sousuoflag:true, + searchKeyword: '', + searchTimer: null, } }, onLoad() { @@ -273,38 +277,77 @@ export default { }, }, methods: { - - // 搜索 - search() { - // if (this.searchKeyword != '') { - this.pageNum = 1 - let data = { - isAsc: this.scidx, - status: this.typeidx, - areaId: this.areaId, - orderByColumn: this.typeSort, - refresh:true, - Keyword:this.searchKeyword - } - this.selectedItems = [] - this.$u.get(`/bst/device/list?pageNum=${this.pageNum}&pageSize=999`, data).then((res) => { - if (res.code == 200) { - this.total = res.total - this.deviceList = res.rows - this.filteredList = res.rows - } else { - uni.showToast({ - title: res.msg, - icon: 'none', - duration: 2000 - }) - } - }) - // } else { - // this.filteredList = this.deviceList; - // } - // console.log(this.filteredList) + // 下拉刷新 + onRefresh() { + this.isRefreshing = true + this.pageNum = 1 + this.getDevice() + setTimeout(() => { + this.isRefreshing = false + }, 1000) }, + search() { + // 清除之前的定时器 + clearTimeout(this.searchTimer) + // 设置新的定时器(500ms后执行) + this.searchTimer = setTimeout(() => { + this.doSearch() + }, 500) + }, + // 实际执行搜索的方法 + doSearch() { + this.pageNum = 1 + let data = { + isAsc: this.scidx, + status: this.typeidx, + areaId: this.areaId, + orderByColumn: this.typeSort, + refresh: true, + Keyword: this.searchKeyword + } + + this.selectedItems = [] + this.$u.get(`/bst/device/list?pageNum=${this.pageNum}&pageSize=999`, data).then((res) => { + if (res.code == 200) { + this.total = res.total + this.deviceList = res.rows + this.filteredList = res.rows + } else { + uni.showToast({ + title: res.msg, + icon: 'none', + duration: 2000 + }) + } + }) + }, + + // // 搜索 + // search() { + // this.pageNum = 1 + // let data = { + // isAsc: this.scidx, + // status: this.typeidx, + // areaId: this.areaId, + // orderByColumn: this.typeSort, + // refresh:true, + // Keyword:this.searchKeyword + // } + // this.selectedItems = [] + // this.$u.get(`/bst/device/list?pageNum=${this.pageNum}&pageSize=999`, data).then((res) => { + // if (res.code == 200) { + // this.total = res.total + // this.deviceList = res.rows + // this.filteredList = res.rows + // } else { + // uni.showToast({ + // title: res.msg, + // icon: 'none', + // duration: 2000 + // }) + // } + // }) + // }, todetail(item) { if (this.stepindex == 0) { console.log(item.id,item); diff --git a/page_shanghu/guanli/admin_order.vue b/page_shanghu/guanli/admin_order.vue index e010470..563c8c4 100644 --- a/page_shanghu/guanli/admin_order.vue +++ b/page_shanghu/guanli/admin_order.vue @@ -45,7 +45,7 @@ :default-time='pickertime'> - + @@ -112,7 +112,6 @@ 开始时间: - 租赁时长:{{formatDatess(item.startTime,item.endTime)}} @@ -168,6 +167,7 @@ showtk: false, orderInfo: {}, initialValues: {}, + isRefreshing: false, areaId: false, tit: '车牌号', shows: false, @@ -200,11 +200,7 @@ } }, onShow() { - // if (uni.getStorageSync('adminAreaid')) { - // this.areaId = uni.getStorageSync('adminAreaid') - // this.orderList() - // // this.getArea() - // } + }, watch: { @@ -231,6 +227,16 @@ }, methods: { + // 下拉刷新 + onRefresh() { + this.isRefreshing = true + this.pageNum = 1 + this.orderList() + setTimeout(() => { + this.isRefreshing = false + }, 1000) + }, + formatPayedAmount(payedAmount, payRefunded, payRefunding) { if (!payedAmount) return '0.00元'; @@ -295,17 +301,6 @@ this.typeidx = e[0].value this.tit = e[0].label }, - computedList(seconds, showSeconds = true) { - if (isNaN(seconds)) return "--"; - const h = Math.floor(seconds / 3600); - const m = Math.floor((seconds % 3600) / 60); - const s = seconds % 60; - const parts = []; - if (h > 0) parts.push(`${h}时`); - if (m > 0 || h > 0) parts.push(`${m}分`); // 如果有小时则始终显示分钟 - if (showSeconds) parts.push(`${s}秒`); - return parts.join("") || "0钟"; - }, toOrderDetail(id,orid) { uni.navigateTo({ url: '/page_shanghu/guanli/order_detail?id=' + id + '&orid=' + orid diff --git a/page_shanghu/guanli/admin_worke.vue b/page_shanghu/guanli/admin_worke.vue index 540d985..55eda3d 100644 --- a/page_shanghu/guanli/admin_worke.vue +++ b/page_shanghu/guanli/admin_worke.vue @@ -125,6 +125,12 @@ 客服设置 + + + + 视频教程 + + + + + + × + + + 该车辆未在停车区还车,是否收取调度费{{fuzhuobj.manageFee > 0 ? fuzhuobj.manageFee : fuzhuobj.dispatchFee > 0 ? fuzhuobj.dispatchFee : ''}}元? + + + + 不收取 + + + 收取 + + + + + + + + @@ -346,7 +373,6 @@ return { devicesList: [], searching: false, - texts: '正在扫描蓝牙设备...', btnflag: true, tishiflag: false, option: '', @@ -417,7 +443,10 @@ currentPolyline:[], trackPoints: [], // 存储轨迹点数据 - tkje:true + tkje:true, + + ddflag:false, + fuzhuobj:{} } }, onLoad(e) { @@ -492,6 +521,11 @@ } }, methods: { + btntz(id){ + uni.navigateTo({ + url:'/page_shanghu/guanli/device_detail?id=' + id + }) + }, formatSecondsToHMS(seconds) { const h = Math.floor(seconds / 3600).toString().padStart(2, '0'); const m = Math.floor((seconds % 3600) / 60).toString().padStart(2, '0'); @@ -697,38 +731,95 @@ console.log(11); } }, + btncha(){ + this.ddflag = false + }, + // 是否收取调度费 + btnfuzhus(flag){ + uni.showLoading({ + title: '还车中...', + mask: true + }) + let data = { + orderId:this.orid, + needDispatchFee:flag + } + this.$u.put(`/bst/order/end`,data).then(res =>{ + if(res.code == 200){ + uni.showToast({ + title: '辅助还车成功', + icon: 'success', + duration: 2000 + }) + uni.hideLoading() + this.ddflag = false + setTimeout(()=>{ + this.deviceInfo() + this.getorderxq() + },1500) + }else{ + uni.hideLoading() + uni.showToast({ + title: res.msg, + icon: 'none', + duration: 2000 + }) + } + }) + }, // 点击辅助还车 btnfuzhu(){ - let that = this - uni.showModal({ - title: '提示', - content: '您确定要进行辅助还车吗?', - showCancel: true, - success: function (res) { - if (res.confirm) { - let data = { - orderId:that.orid - } - that.$u.put(`/bst/order/end`,data).then(res =>{ - if(res.code == 200){ - uni.showToast({ - title: '辅助还车成功', - icon: 'success', - duration: 2000 - }) - that.deviceInfo() - that.getorderxq() - }else{ - uni.showToast({ - title: res.msg, - icon: 'none', - duration: 2000 - }) + let data = { + orderId: this.orid, + checkLocation:false + } + this.$u.post(`/app/order/calcFee`, data).then(res => { + if (res.code == 200) { + this.fuzhuobj = res.data + if (res.data.manageFee > 0 || res.data.dispatchFee > 0) { + this.ddflag = true + } else { + let that = this + uni.showModal({ + title: '提示', + content: '您确定要进行辅助还车吗?', + showCancel: true, + success: function (res) { + if (res.confirm) { + let data = { + orderId:that.orid + } + that.$u.put(`/bst/order/end`,data).then(res =>{ + if(res.code == 200){ + uni.showToast({ + title: '辅助还车成功', + icon: 'success', + duration: 2000 + }) + setTimeout(()=>{ + that.deviceInfo() + that.getorderxq() + },1500) + }else{ + uni.showToast({ + title: res.msg, + icon: 'none', + duration: 2000 + }) + } + }) + } else if (res.cancel) { + + } } }) - } else if (res.cancel) { - } + }else{ + uni.showToast({ + title: res.msg, + icon: 'none', + duration: 2000 + }) } }) }, @@ -1948,6 +2039,67 @@ overflow-x: hidden; background-color: #F3F3F3; } + .diaodu{ + position: fixed; + width: 560rpx; + background-color: #fff; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + border-radius: 24rpx; + overflow: hidden; + z-index: 999; + box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.1); + .top{ + width: 100%; + height: 80rpx; + display: flex; + align-items: center; + justify-content: flex-end; + padding: 0 30rpx; + box-sizing: border-box; + font-size: 40rpx; + color: #999; + } + .cen{ + font-size: 32rpx; + color: #333; + padding: 0 40rpx 40rpx; + box-sizing: border-box; + text-align: center; + line-height: 1.5; + } + .anniu{ + display: flex; + height: 100rpx; + border-top: 1px solid #f5f5f5; + view{ + flex: 1; + display: flex; + align-items: center; + justify-content: center; + font-size: 32rpx; + font-weight: 500; + } + .bu{ + color: #666; + background: #f8f8f8; + } + .shou{ + color: #fff; + background: #4C97E7; + } + } + } + .mask{ + width: 100%; + height: 100vh; + position: fixed; + top: 0; + left: 0; + z-index: 998; + background-color: rgba(0, 0, 0, 0.5); + } .xingchengxx{ width: 750rpx; max-height: 99999rpx; diff --git a/page_user/huanbike.vue b/page_user/huanbike.vue index dd7ed3e..42d37c6 100644 --- a/page_user/huanbike.vue +++ b/page_user/huanbike.vue @@ -150,14 +150,19 @@ export default { }, onShow() { uni.getLocation({ - type: 'wgs84', - success: (res) => { - this.latitude = res.latitude - this.longitude = res.longitude - }, - fail: (err) => { - console.error('获取位置失败:', err) - } + type: 'gcj02', // 国内地图更兼容 + isHighAccuracy: true, + accuracy:'best', + success: (res) => { + console.log('精确坐标:', res); + this.latitude = res.latitude + this.longitude = res.longitude + }, + fail: (err) => { + console.error('获取位置失败:', err); + this.latitude = null + this.longitude = null + } }) }, computed: { @@ -236,6 +241,17 @@ export default { xBlufi.notifySendCustomData({ customData: "11close@" }) + // let data = { + // mac:that.mac, + // reason:'换车', + // command:'close', + // longitude:that.lon, + // latitude:that.lat, + // result:'成功' + // } + // that.$u.post(`/app/commandLog/bluetooth`,data).then(res => { + // console.log(res,'蓝牙'); + // }) setTimeout(()=>{ xBlufi.notifyConnectBle({ isStart: false, diff --git a/page_user/shiming.vue b/page_user/shiming.vue index 00c421e..4342448 100644 --- a/page_user/shiming.vue +++ b/page_user/shiming.vue @@ -14,9 +14,6 @@ 身份证号 - 您当前还未完成实名认证 @@ -31,9 +28,6 @@ 身份证号 - 您当前已完成实名认证 @@ -52,7 +46,6 @@ bgc: { backgroundColor: "", }, - tel:'', name:'', zfzh:'', isReal:false, @@ -63,7 +56,6 @@ if(option.user){ console.log(option); this.isReal = JSON.parse(option.user).isReal - this.tel = JSON.parse(option.user).phonenumber this.name = JSON.parse(option.user).realName this.zfzh = JSON.parse(option.user).realIdCard } @@ -122,7 +114,6 @@ let data = { userName:this.name, idCard:this.zfzh, - // mobile:this.tel } this.$u.put(`/app/realName/twoElementRealName`,data).then(res =>{ //二要素 if(res.code == 200){ diff --git a/page_user/shiping/index.vue b/page_user/shiping/index.vue new file mode 100644 index 0000000..3dcea6c --- /dev/null +++ b/page_user/shiping/index.vue @@ -0,0 +1,50 @@ + + + + + \ No newline at end of file diff --git a/pages.json b/pages.json index 605e7fc..aa21676 100644 --- a/pages.json +++ b/pages.json @@ -82,6 +82,13 @@ "enablePullDownRefresh": false, "navigationStyle": "custom" } + },{ + "path": "shiping/index", + "style": { + "navigationBarTitleText": "上传", + "enablePullDownRefresh": false, + "navigationStyle": "custom" + } },{ "path": "zhaoshang", "style": { diff --git a/pages/myorder/returned/index.vue b/pages/myorder/returned/index.vue index 9991731..e9e1ca2 100644 --- a/pages/myorder/returned/index.vue +++ b/pages/myorder/returned/index.vue @@ -18,13 +18,13 @@ 车牌号:{{deivceobj.deviceVehicleNum == null ? '--' : deivceobj.deviceVehicleNum}} SN:{{deivceobj.deviceSn == null ? '--' : deivceobj.deviceSn}} - + + mode=""> 已连接 - + + mode=""> 连接中... @@ -138,7 +138,7 @@ 需支付{{fajinobj.manageFee > 0 ? fajinobj.manageFee : fajinobj.dispatchFee > 0 ? fajinobj.dispatchFee : ''}}元,你可查看最近停车点 - + @@ -217,7 +217,13 @@ name: '', kefuflag:false, kefulist:[], - ljflag:true + ljflag:true, + lslat:'', + lslon:'', + bluetoothData:{}, + uploadTimer: null, // 定时器ID + lastUploadTime: 0, // 上次上传时间戳 + isUploading: false // 上传状态锁 }; }, onLoad(option) { @@ -252,7 +258,7 @@ // 启动每分钟(60秒)执行一次的定时器 this.timer = setInterval(() => { this.executeTask(); - }, 60000); + }, 30000); xBlufi.notifyConnectBle({ isStart: false, deviceId: this.deviceId, @@ -277,6 +283,10 @@ console.log('清除定时器2'); } }, + // 组件销毁时清除定时器 + beforeDestroy() { + clearTimeout(this.uploadTimer); + }, methods: { // 点击咨询客服 btnkefu(){ @@ -322,6 +332,7 @@ if(this.ver_dataflag != 3){ console.log('离线离线'); setTimeout(()=>{ + console.log('11ly',this.ljflag); if(this.ljflag == true){ this.ljflag = false this.findDevice() @@ -368,6 +379,8 @@ if (!options.result) { this.ver_dataflag = 1 console.log(this.ver_dataflag,'断开断开'); + clearTimeout(this.uploadTimer) //清除每十秒传一次的定时 + this.findDevice() } break; case xBlufi.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS: @@ -387,10 +400,14 @@ }) this.deviceid = options.data.deviceId this.name = this.name + }else{ + this.ver_dataflag = 1 + this.ljflag = true } break; case xBlufi.XBLUFI_TYPE.TYPE_RECIEVE_CUSTON_DATA: console.log("1收到设备发来的自定义数据结果:", options.data) + this.getlysj(options.data) break; case xBlufi.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS_START: if (!options.result) { @@ -402,9 +419,138 @@ break; } }, + getlysj(data) { + if (!data) return; + // 1. 更健壮的数据解析 + const dataStr = data.toString(); + // console.log('原始数据:', dataStr); + const dataObj = {}; + dataStr.split(',').forEach(part => { + const [key, value] = part.split(':').map(item => item.trim()); + if (!key || value === undefined) return; + + switch (key) { + case 'status': dataObj.status = value; break; + case 'bat': dataObj.bat = parseFloat(value); break; + case 'csq': dataObj.csq = parseInt(value); break; + case 'lat': dataObj.lat = parseFloat(value); break; + case 'lon': dataObj.lon = parseFloat(value); break; + case 'q': dataObj.q = parseInt(value); break; + case 's': dataObj.s = parseInt(value); break; + } + }); + + // 2. 获取定位 + uni.getLocation({ + type: 'gcj02', + isHighAccuracy: true, + success: (res) => { + this.submitData({ + ...dataObj, + lon: res.longitude, + lat: res.latitude + }); + }, + fail: () => { + this.submitData({ + ...dataObj, + lon: 0, + lat: 0 + }); + } + }); + }, + + // 3. 单独封装数据提交 + submitData(data) { + const payload = { + mac: this.mac, + sys: { + bat: Number(data.bat) || 0, + csq: Number(data.csq) || 0, + s: Number(data.s) ?? null, + q: Number(data.q) ?? null, + status: String(data.status || '0'), + lon: Number(data.lon) || 0, + lat: Number(data.lat) || 0 + } + }; + this.bluetoothData = payload + // console.log('提交数据:', payload); + this.throttledUpload() + // 4. 带错误处理的上传 + // this.$u.put('/app/device/iot/bltUpload', payload) + // .then(res => { + // if (res.code !== 200) throw new Error(res.msg); + // console.log('上传成功'); + // }) + // .catch(err => { + // console.error('上传失败:', err); + // // uni.showToast({ title: err.message, icon: 'none' }); + // }); + }, + + // 节流上传控制 + throttledUpload() { + const now = Date.now(); + const throttleInterval = 10000; // 10秒 + + // 清除之前的定时器 + clearTimeout(this.uploadTimer); + + // 如果距离上次上传超过10秒且没有正在上传的请求 + if (now - this.lastUploadTime >= throttleInterval && !this.isUploading) { + this.doUpload(); + } else { + // 否则设置定时器,在剩余时间后执行 + const remainingTime = throttleInterval - (now - this.lastUploadTime); + this.uploadTimer = setTimeout(() => { + this.doUpload(); + }, remainingTime); + } + }, + + // 实际执行上传 + doUpload() { + if (!this.bluetoothData || this.isUploading) return; + + this.isUploading = true; + this.lastUploadTime = Date.now(); + console.log(this.bluetoothData,'this.bluetoothDatathis.bluetoothData'); + this.$u.put(`/app/device/iot/bltUpload`, this.bluetoothData) + .then(res => { + if(res.code == 200) { + console.log('上传蓝牙数据成功',this.bluetoothData, new Date().toLocaleTimeString()); + } else { + console.log('上传蓝牙数据失败', res.msg); + } + }) + .catch(err => { + console.error('上传异常:', err); + }) + .finally(() => { + this.isUploading = false; + }); + }, + // 点击启动and关闭 btnqd() { if (this.deivceobj.deviceLockStatus == 0) { + uni.getLocation({ + type: 'gcj02', // 国内地图更兼容 + isHighAccuracy: true, + accuracy:'best', + success: (res) => { + console.log('精确坐标:', res); + this.lslat = res.latitude; + this.lslon = res.longitude; + }, + fail: (err) => { + console.error('获取位置失败:', err); + this.lat = null + this.lon = null + } + }) let that = this uni.showModal({ title: '提示', @@ -412,29 +558,81 @@ showCancel: true, success: function(res) { if (res.confirm) { - that.$u.put(`/app/order/openDevice?orderId=${that.deivceobj.orderId}`).then((res) => { - if (res.code == 200) { - uni.showToast({ - title: '解锁成功', - icon: 'success', - duration: 2000 - }) - that.deivceobj.deviceLockStatus = 1 - that.getorderdevice() - } else if (res.code == 20001) { - console.log(that.ver_dataflag,'thatthat'); - if (that.ver_dataflag == 3) { - xBlufi.notifySendCustomData({ - customData: "11open@" - }) - that.deivceobj.deviceLockStatus = 1 + let flag = '' + if(that.ver_dataflag == 3){ + flag = false + }else{ + flag = true + } + that.$u.put(`/app/order/openDevice?orderId=${that.deivceobj.orderId}&lat=${that.lslat}&lon=${that.lslon}&requiredIot=${flag}`).then((res) => { + console.log(res,'0202020202'); + if (res.code == 200 && res.data.db >= 1) { + if (res.data.iot == false) { + console.log(that.lslat,that.lslon,'临时解锁'); + console.log(that.ver_dataflag,'thatthat'); + if (that.ver_dataflag == 3) { + xBlufi.notifySendCustomData({ + customData: "11open@" + }) + that.deivceobj.deviceLockStatus = 1 + + let data = { + mac:that.mac, + reason:'解锁', + command:'close', + longitude:that.lslon, + latitude:that.lslat, + result:'成功' + } + that.$u.post(`/app/commandLog/bluetooth`,data).then(res => {}) + } else { + let that = this + uni.showModal({ + title: '提示', + content: '设备未连接,请靠近车辆等待连接', + showCancel: false, + success: function(res) { + if (res.confirm) { + + } else if (res.cancel) { + + } + } + }) + let data = { + mac:that.mac, + reason:'解锁', + command:'close', + longitude:that.lslon, + latitude:that.lslat, + result:'蓝牙未连接' + } + that.$u.post(`/app/commandLog/bluetooth`,data).then(res => { + + }) + } } else { uni.showToast({ - title: '设备离线', - icon: 'none', + title: '解锁成功', + icon: 'success', duration: 2000 }) + that.deivceobj.deviceLockStatus = 1 + that.getorderdevice() } + } else if(res.code == 20001){ + uni.showModal({ + title: '提示', + content: '设备未连接,请靠近车辆等待连接', + showCancel: false, + success: function(res) { + if (res.confirm) { + + } else if (res.cancel) { + + } + } + }) } else { uni.showToast({ title: res.msg, @@ -450,46 +648,102 @@ }) } else if (this.deivceobj.deviceLockStatus == 1) { uni.getLocation({ - type: 'wgs84', - success: (res) => { - console.log(res); - this.lat = res.latitude - this.lon = res.longitude - }, - fail: (err) => { - console.error('获取位置失败:', err) - } + type: 'gcj02', // 国内地图更兼容 + isHighAccuracy: true, + accuracy:'best', + success: (res) => { + console.log('精确坐标:', res); + this.lat = res.latitude + this.lon = res.longitude + }, + fail: (err) => { + this.lat = null + this.lon = null + console.error('获取位置失败:', err); + } }) let that = this + let flag = '' + if(that.ver_dataflag == 3){ + flag = false + }else{ + flag = true + } uni.showModal({ title: '提示', content: '您是否要临时锁车?', showCancel: true, success: function(res) { if (res.confirm) { - that.$u.put(`/app/order/closeDevice?orderId=${that.deivceobj.orderId}&lat=${that.lat}&lon=${that.lon}`).then((res) => { - if (res.code == 200) { - uni.showToast({ - title: '临时锁车成功', - icon: 'success', - duration: 2000 - }) - that.deivceobj.deviceLockStatus = 0 - that.getorderdevice() - } else if (res.code == 20001) { - console.log(that.ver_dataflag,'thatthat'); - if (that.ver_dataflag == 3) { - xBlufi.notifySendCustomData({ - customData: "11close@" - }) - that.deivceobj.deviceLockStatus = 0 - } else { + that.$u.put(`/app/order/closeDevice?orderId=${that.deivceobj.orderId}&lat=${that.lat}&lon=${that.lon}&requiredIot=${flag}`).then((res) => { + if (res.code == 200 && res.data.db >= 1) { + if(res.data.iot == false){ + console.log(that.ver_dataflag,'thatthat'); + if (that.ver_dataflag == 3) { + xBlufi.notifySendCustomData({ + customData: "11llose@", + }) + that.deivceobj.deviceLockStatus = 0 + + let data = { + mac:that.mac, + reason:'临时锁车', + command:'close', + longitude:that.lon, + latitude:that.lat, + result:'成功' + } + that.$u.post(`/app/commandLog/bluetooth`,data).then(res => { + console.log(res,'蓝牙'); + }) + } else { + let that = this + uni.showModal({ + title: '提示', + content: '设备未连接,请靠近车辆等待连接', + showCancel: false, + success: function(res) { + if (res.confirm) { + + } else if (res.cancel) { + + } + } + }) + let data = { + mac:that.mac, + reason:'临时锁车', + command:'close', + longitude:that.lon, + latitude:that.lat, + result:'蓝牙未连接' + } + that.$u.post(`/app/commandLog/bluetooth`,data).then(res => { + console.log(res,'蓝牙'); + }) + } + }else{ uni.showToast({ - title: '设备离线', - icon: 'none', + title: '临时锁车成功', + icon: 'success', duration: 2000 }) + that.deivceobj.deviceLockStatus = 0 + that.getorderdevice() } + } else if(res.code == 20001){ + uni.showModal({ + title: '提示', + content: '设备未连接,请靠近车辆等待连接', + showCancel: false, + success: function(res) { + if (res.confirm) { + + } else if (res.cancel) { + + } + } + }) } else { uni.showToast({ title: res.msg, @@ -520,10 +774,18 @@ customData: "11play1@" }) } else { - uni.showToast({ - title: '设备离线', - icon: 'none', - duration: 2000 + let that = this + uni.showModal({ + title: '提示', + content: '设备未连接,请靠近车辆等待连接', + showCancel: false, + success: function(res) { + if (res.confirm) { + + } else if (res.cancel) { + + } + } }) } } else { @@ -543,10 +805,18 @@ url: '/page_user/huanbike?sn=' + this.deivceobj.deviceSn + '&orderid=' + this.deivceobj.orderId + '&deviceid=' + this.deviceid + '&devicename=' + this.devicename }) }else{ - uni.showToast({ - title: "设备离线,暂不支持换车", - icon: 'none', - duration: 2000 + let that = this + uni.showModal({ + title: '提示', + content: '设备未连接,请靠近车辆等待连接', + showCancel: false, + success: function(res) { + if (res.confirm) { + + } else if (res.cancel) { + + } + } }) } }else{ @@ -557,16 +827,16 @@ }, // 每过一分钟去请求车辆最新状态 executeTask() { - this.counter++; - console.log(`定时执行第 ${this.counter} 次`, ); + this.counter++ + console.log(`定时执行第 ${this.counter} 次`, ) // 这里替换为你的实际业务逻辑 this.getorderdevice() }, // 安全清除定时器 clearTimer() { if (this.timer) { - clearInterval(this.timer); - this.timer = null; + clearInterval(this.timer) + this.timer = null } }, // 点击缴纳罚金继续还车 @@ -587,6 +857,7 @@ uni.getLocation({ type: 'gcj02', // 国内地图更兼容 isHighAccuracy: true, + accuracy:'best', success: (res) => { console.log('精确坐标:', res); this.lat = res.latitude; @@ -595,8 +866,9 @@ }, fail: (err) => { console.error('获取位置失败:', err); - uni.showToast({ title: '定位失败,请重试', icon: 'none' }); - this.getfeiyong(); // 降级处理 + this.lat = null + this.lon = null + this.getfeiyong() // 降级处理 } }); } @@ -661,10 +933,17 @@ gethuan() { if(this.deivceobj.deviceOnlineStatus == 0){ if(this.ver_dataflag != 3){ - uni.showToast({ - title: '设备离线', - icon: 'success', - duration: 2000 + uni.showModal({ + title: '提示', + content: '设备未连接,请靠近车辆等待连接', + showCancel: false, + success: function(res) { + if (res.confirm) { + + } else if (res.cancel) { + + } + } }) }else{ let that = this @@ -699,8 +978,24 @@ customData: "11close@" }) setTimeout(()=>{ + xBlufi.notifyConnectBle({ + isStart: false, + deviceId: that.deviceId, + name: that.name + }) that.getorderdevice() },1000) + let data = { + mac:that.mac, + reason:'还车', + command:'close', + longitude:that.lon, + latitude:that.lat, + result:'成功' + } + that.$u.post(`/app/commandLog/bluetooth`,data).then(res => { + console.log(res,'蓝牙') + }) } }else if(res.msg == null) { uni.hideLoading() @@ -751,10 +1046,15 @@ }) setTimeout(()=>{ that.getorderdevice() + xBlufi.notifyConnectBle({ + isStart: false, + deviceId: that.deviceId, + name: that.name + }) },1000) }else{ xBlufi.notifySendCustomData({ - customData: "11close@" + customData: "11llose@" }) setTimeout(()=>{ that.getorderdevice() @@ -948,25 +1248,25 @@ width: 252rpx; height: 72rpx; border-radius: 45rpx 45rpx 45rpx 45rpx; - border: 2rpx solid #808080; font-weight: 600; font-size: 32rpx; - color: #808080; + color: #fff; text-align: center; line-height: 72rpx; + background: #4C97E7; } .qx { width: 252rpx; height: 72rpx; - background: #4C97E7; border-radius: 45rpx 45rpx 45rpx 45rpx; text-align: center; line-height: 72rpx; box-sizing: border-box; font-weight: 600; font-size: 32rpx; - color: #FFFFFF; + color: #808080; + border: 2rpx solid #808080; } } @@ -1277,6 +1577,7 @@ .ljimg { width: 60rpx; height: 60rpx; + margin-right: 10rpx; } } }