import { Component } from "react"; import Taro from "@tarojs/taro"; import { View, Text, Image, Button } from "@tarojs/components"; import "./index.scss"; import { AtTabBar } from "taro-ui"; import React, { useCallback, useEffect, useState } from "react"; import { AtGrid } from "taro-ui"; import { Swiper, SwiperItem } from "@tarojs/components"; import { AtCard } from "taro-ui"; import { AtImagePicker } from "taro-ui"; import { AtButton } from "taro-ui"; import { AtSearchBar } from "taro-ui"; import { Picker } from "@tarojs/components"; import { AtList, AtListItem, AtNavBar, AtTag, AtMessage } from "taro-ui"; import { AtModal, AtModalHeader, AtModalContent, AtModalAction, AtAvatar, AtAccordion, } from "taro-ui"; import { AtToast } from "taro-ui"; import { AtIcon } from "taro-ui"; import { VIEW } from "@tarojs/runtime"; import "animate.css"; import youtubesvg from "../../images/youtube.svg"; import ytGpt from "../../images/ytGpt.png"; import ssh from "../../images/ssh.svg"; import robot from "../../images/robot.svg"; import host from "../../images/host.svg"; import man from "../../images/man.svg"; import woman from "../../images/woman.svg"; import live from "../../images/live.svg"; import income from "../../images/income.svg"; import code from "../../images/code.svg"; import dgnomad from "../../images/dgnomad.png"; import company from "../../images/company.png"; // export default class Index extends Component { const Index = () => { const [current, setcurrent] = useState(0); const [openId, setopenId] = useState(null); const [wxid, setwxid] = useState(null); const [userInfo, setuserInfo] = useState({}); const [open, setopen] = useState(false); const [referer, setreferer] = useState(window.document.referrer); const [isOpened, setisOpened] = useState(false); const [meetupQR, setmeetupQR] = useState(false); const [bookToast, setbookToast] = useState(false); const [meetupToast, setmeetupToast] = useState(false); const [joinMeetup, setjoinMeetup] = useState(false); const [bookpay, setbookpay] = useState(0); const [isWeChat, setisWeChat] = useState(false); const getOpenidFromUrl = (url) => { const pattern = /[?&]openid=([^&#]+)/; const match = url.match(pattern); if (match) { return match[1]; } return null; }; // 是否在微信客户端 const isWeChatFun = () => { var ua = navigator.userAgent.toLowerCase(); if (ua.indexOf("micromessenger") != -1) { setisWeChat(true); return true; } else { setisWeChat(false); return false; } }; // pwa安装弹窗 // useEffect(() => { // window.addEventListener("beforeinstallprompt", (event) => { // event.preventDefault(); // let installPrompt = event; // // 显示安装按钮 // document.getElementById("install-btn").addEventListener("click", () => { // installPrompt.prompt(); // }); // }); // }, []); // 获取openid const getOpenid = () => { // let newparams = Taro.getCurrentInstance().router.params; // let urlopenid = newparams.openid; // hash模式 // http://192.168.31.245:10086/?openid=o7LFAwR32hWGq9XOpd7ZxK1wZxq8#/pages/index/index let hashopenid = null; if (window.location.href.includes("openid")) { hashopenid = getOpenidFromUrl(window.location.href); } else { // hashopenid = window.localStorage.getItem("openid"); } if (!!hashopenid && hashopenid != "undefined" && hashopenid != "null") { // 获取到openid window.localStorage.setItem("openid", hashopenid); setopenId(hashopenid); // window.alert(hashopenid); // 查询数据库是否存在openid Taro.request({ method: "GET", url: `${process.env.TARO_API_API}/user/${hashopenid}`, //仅为示例,并非真实的接口地址 // url: `${process.env.TARO_API_API}/user/${window.localStorage.getItem("openid")}`, //仅为示例,并非真实的接口地址 success: function (res) { if (res?.data?.userInfo) { // 有完整的用户信息userInfo setuserInfo(res?.data?.userInfo); window.localStorage.setItem("userInfo", userInfo); } }, complete: function (finy) { // 获取wxid参数 getWxidFromUrl(); }, }); } else { let nowUrl = window.location.href; window.localStorage.removeItem("openid"); let payUrl = `https://payjs.cn/api/openid?mchid=1561724891&callback_url=${nowUrl}`; window.location.href = payUrl; } }; // 获取更新用户信息 const getUserinfo = (wxid) => { Taro.request({ method: "GET", url: `${process.env.TARO_API_API}/user/${wxid}`, //仅为示例,并非真实的接口地址 // url: `${process.env.TARO_API_API}/user/${window.localStorage.getItem("openid")}`, //仅为示例,并非真实的接口地址 success: function (res) { if (res?.data?.userInfo) { //判断wxid是否存在 if (res?.data?.userInfo?.openid) { // 有完整的用户信息userInfo setuserInfo(res?.data?.userInfo); window.localStorage.setItem("userInfo", userInfo); } } }, complete: function (finy) {}, }); }; // 获取url中的wxid const getWxidFromUrl = () => { const urlParams = new URLSearchParams(window.location.search); const urlwxid = urlParams.get("wxid"); if (!!urlwxid) { setwxid(urlwxid); window.localStorage.setItem("wxid", wxid); // 优先查询openid是否存在数据库 Taro.request({ method: "GET", url: `${process.env.TARO_API_API}/user/${urlwxid}`, //仅为示例,并非真实的接口地址 // url: `${process.env.TARO_API_API}/user/${window.localStorage.getItem("openid")}`, //仅为示例,并非真实的接口地址 success: function (res) { if (res?.data?.userInfo) { //判断wxid是否存在 if (res?.data?.userInfo?.openid) { // window.alert(res?.data?.userInfo?.openid); // window.alert(window.localStorage.getItem("openid")); if ( res?.data?.userInfo?.openid !== window.localStorage.getItem("openid") ) { // 删除其他用户的wxid window.localStorage.removeItem("userInfo"); window.localStorage.removeItem("openid"); window.localStorage.removeItem("wxid"); window.location.href = "http://nomad.hackrobot.cn"; } else { // 有完整的用户信息userInfo setuserInfo(res?.data?.userInfo); window.localStorage.setItem("userInfo", userInfo); } } else { // 绑定wxid与openid到数据库 wxidTapopenid(urlwxid); } } else { // 新增wxid用户 } }, complete: function (finy) { // tg消息通知 tgMessage(); }, }); } else { // tg消息通知 tgMessage(); } return wxid; }; // 绑定wxid与openid const wxidTapopenid = (newWxid) => { const userUpdateData = { openid: window.localStorage.getItem("openid"), // 只更新 openid 字段 }; Taro.request({ method: "PUT", // url: `${process.env.TARO_API_API}/user/${urlwxid}`, //仅为示例,并非真实的接口地址 url: `${process.env.TARO_API_API}/user/${newWxid}`, //仅为示例,并非真实的接口地址 data: userUpdateData, header: { "Content-Type": "application/json", }, success: function (res) {}, fail: function (err) {}, complete: function (finy) {}, }); }; // 新增openid用户 const addopenidUser = () => { const userUpdateData = { openid: window.localStorage.getItem("openid"), // 只更新 openid 字段 }; Taro.request({ method: "GET", // url: `${process.env.TARO_API_API}/user/${urlwxid}`, //仅为示例,并非真实的接口地址 url: `${process.env.TARO_API_API}/user/${window.localStorage.getItem( "openid" )}`, //仅为示例,并非真实的接口地址 data: userUpdateData, header: { "Content-Type": "application/json", }, success: function (res) {}, fail: function (err) {}, complete: function (finy) {}, }); }; // 网页查看通知 const tgMessage = () => { Taro.request({ method: "GET", url: `${ process.env.TARO_API_API }/tgMessage?openid=${window.localStorage.getItem("openid")}`, //仅为示例,并非真实的接口地址 // url: "https://pay.hackrobot.cn${process.env.TARO_API_API}/payh5", //仅为示例,并非真实的接口地址 success: function (res) { // console.log("访问提醒发送成功"); }, }); }; const sendNtfy = () => { // fetch("https://ntfy.nomadcna.com/awE5vPZI1LoRvsN1", { // method: "POST", // PUT works too // body: "Backup successful 😀", // }); Taro.request({ method: "POST", url: `${`https://ntfy.nomadcna.com/awE5vPZI1LoRvsN1`}`, success: function (res) { console.log("访问提醒发送成功"); }, }); }; useEffect(() => { let inwechat = isWeChatFun(); if (inwechat) { // 获取openId getOpenid(); } else { // window.alert('不在微信') } }, []); useEffect(() => { // alert(window.localStorage.getItem("bookpay")) setbookpay(window.localStorage.getItem("bookpay")); }, []); const goBack = () => { Taro.navigateBack({}); }; const handleClick = (value) => { // window.alert(value) setopen(value); }; const payh5 = (type, total_fee = 1000) => { // console.log("111"); Taro.request({ method: "POST", url: `${process.env.TARO_API_API}/payh5`, // url: "${process.env.TARO_API_API}/payh5", // url: "https://pay.hackrobot.cn${process.env.TARO_API_API}/payh5", //仅为示例,并非真实的接口地址 data: { callback_url: window.location.href, openid: window.localStorage.getItem("openid"), total_fee: total_fee, // 金额,单位:分 type: type, //订单类型 book/meetup/video/vip }, header: { "content-type": "application/json", // 默认值 }, success: function (res) { console.log(res.data); // window.alert(res.data.jsapi); WeixinJSBridge.invoke( "getBrandWCPayRequest", { // 以下6个支付参数通过payjs的jsapi接口获取 // appId: "wxc5205a653b0259bf", // timeStamp: "1701401644", // nonceStr: "KhOYB0wFV6j9qyQK", // package: "prepay_id=wx01113404850024729b35f4d69b73500000", // signType: "MD5", // paySign: "2A823C8D47CCF871C6C65A56DC228CF8", ...(res?.data?.jsapi ?? {}), }, function (res) { // 支付成功 if (res.err_msg == "get_brand_wcpay_request:ok") { window.localStorage.setItem(type, 1); //订单类型 book/meetup/video/vip WeixinJSBridge.call("closeWindow"); } } ); }, }); }; const goRead = () => { Taro.navigateTo({ url: "/pages/book/index", }); }; return ( <> {/* 在线图书 */} {/* 参考资料https://readmake.com/ */} 《一人公司》 数字游民-手册2 {/* 卡片 */} 创业方法论 随时随地,跟踪业务 自媒体 公域流量,私域运营 独立开发 sass产品,迭代更新 { try { sendNtfy(); } catch (err) { console.error("Error sending notification:", err); } goRead(); }} className="startRead" type="primary" size="small" circle > 开始阅读 {/* */} {" "} SSH远程 RPA自动化 虚拟化 {/* */} {/* Copyright © 2025 */} ); }; export default Index;