Compare commits
32 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eca22d3d01 | ||
|
|
2acaff3426 | ||
|
|
a7a97815cf | ||
|
|
681add24a7 | ||
|
|
0d7e2ee59c | ||
|
|
a29f316c2d | ||
|
|
d245229188 | ||
|
|
4ae990749a | ||
|
|
f922c35d72 | ||
|
|
ef87e2fdb3 | ||
|
|
bf571acf59 | ||
|
|
985efbe87e | ||
|
|
5a16a962d1 | ||
|
|
7b8cd49656 | ||
|
|
030ba5a88e | ||
|
|
fe40e5606f | ||
|
|
8107564d64 | ||
|
|
0b645c5f5f | ||
|
|
b1b0c4eda9 | ||
|
|
9d43610fe1 | ||
|
|
e6eae7bedc | ||
|
|
af1a72d359 | ||
|
|
255b722242 | ||
|
|
720a58e0d2 | ||
|
|
223a88ab0c | ||
|
|
93f20d8c3a | ||
|
|
037bb71a9b | ||
|
|
c4b1552228 | ||
|
|
3f46534db9 | ||
|
|
00a0e1eb48 | ||
|
|
cb31deccbd | ||
|
|
7c4d9da605 |
1
.env.development
Normal file
1
.env.development
Normal file
@@ -0,0 +1 @@
|
|||||||
|
process.env.TARO_API_API="/api"
|
||||||
1
.env.production
Normal file
1
.env.production
Normal file
@@ -0,0 +1 @@
|
|||||||
|
process.env.TARO_API_API="https://web.hackrobot.cn"
|
||||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,4 +1,4 @@
|
|||||||
dist/
|
# dist/
|
||||||
deploy_versions/
|
deploy_versions/
|
||||||
.temp/
|
.temp/
|
||||||
.rn_temp/
|
.rn_temp/
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ module.exports = {
|
|||||||
NODE_ENV: '"development"'
|
NODE_ENV: '"development"'
|
||||||
},
|
},
|
||||||
defineConstants: {
|
defineConstants: {
|
||||||
|
'process.env.TARO_API_API': JSON.stringify("/api")
|
||||||
},
|
},
|
||||||
mini: {},
|
mini: {},
|
||||||
h5: {}
|
h5: {}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
const config = {
|
const config = {
|
||||||
projectName: "cityh5",
|
projectName: "cityh5",
|
||||||
|
|
||||||
date: "2023-12-2",
|
date: "2023-12-2",
|
||||||
designWidth: 750,
|
designWidth: 750,
|
||||||
deviceRatio: {
|
deviceRatio: {
|
||||||
@@ -83,7 +84,7 @@ const config = {
|
|||||||
// },
|
// },
|
||||||
devServer: {
|
devServer: {
|
||||||
// host: 'nomad.hackrobot.cn', // 替换为您的域名
|
// host: 'nomad.hackrobot.cn', // 替换为您的域名
|
||||||
// port: 10086, // 选择一个适当的端口号
|
// port: 10087, // 选择一个适当的端口号
|
||||||
proxy: {
|
proxy: {
|
||||||
'/api/': {
|
'/api/': {
|
||||||
target: JSON.parse('"http://localhost:8700"'), //本地调试端口
|
target: JSON.parse('"http://localhost:8700"'), //本地调试端口
|
||||||
@@ -95,7 +96,7 @@ const config = {
|
|||||||
},
|
},
|
||||||
// 允许特定域名访问
|
// 允许特定域名访问
|
||||||
allowedHosts: [
|
allowedHosts: [
|
||||||
'nomad.hackrobot.cn'
|
'bot.hackrobot.cn'
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ module.exports = {
|
|||||||
NODE_ENV: '"production"'
|
NODE_ENV: '"production"'
|
||||||
},
|
},
|
||||||
defineConstants: {
|
defineConstants: {
|
||||||
|
'process.env.TARO_API_API': JSON.stringify("https://web.hackrobot.cn")
|
||||||
},
|
},
|
||||||
mini: {},
|
mini: {},
|
||||||
h5: {
|
h5: {
|
||||||
|
|||||||
@@ -7,8 +7,7 @@ export default {
|
|||||||
'pages/group/index',
|
'pages/group/index',
|
||||||
'pages/book/index',
|
'pages/book/index',
|
||||||
'pages/salon/index',
|
'pages/salon/index',
|
||||||
|
'pages/sphone/index'
|
||||||
|
|
||||||
],
|
],
|
||||||
window: {
|
window: {
|
||||||
backgroundTextStyle: 'light',
|
backgroundTextStyle: 'light',
|
||||||
|
|||||||
BIN
src/images/joinGroup.png
Normal file
BIN
src/images/joinGroup.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 50 KiB |
BIN
src/images/robot192.png
Normal file
BIN
src/images/robot192.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.6 KiB |
@@ -8,8 +8,21 @@
|
|||||||
<meta name="format-detection" content="telephone=no,address=no">
|
<meta name="format-detection" content="telephone=no,address=no">
|
||||||
<meta name="apple-mobile-web-app-status-bar-style" content="white">
|
<meta name="apple-mobile-web-app-status-bar-style" content="white">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" >
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" >
|
||||||
|
<link rel="apple-touch-icon" href="/static/images/images/touxiang.png" />
|
||||||
|
<link
|
||||||
|
rel="icon"
|
||||||
|
sizes="192x192"
|
||||||
|
href="/static/images/images/touxiang.png"
|
||||||
|
/>
|
||||||
<title>异度星球</title>
|
<title>异度星球</title>
|
||||||
|
<meta name="description" content="折腾技术,数字游民社区">
|
||||||
|
<meta property="og:description" content="折腾技术,数字游民社区">
|
||||||
|
<meta name="twitter:description" content="折腾技术,数字游民社区">
|
||||||
<script><%= htmlWebpackPlugin.options.script %></script>
|
<script><%= htmlWebpackPlugin.options.script %></script>
|
||||||
|
<!-- 禁止缓存 -->
|
||||||
|
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
|
||||||
|
<meta http-equiv="Pragma" content="no-cache">
|
||||||
|
<meta http-equiv="Expires" content="0">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="app"></div>
|
<div id="app"></div>
|
||||||
|
|||||||
@@ -41,9 +41,3 @@
|
|||||||
以youtube频道作为副资产获利
|
以youtube频道作为副资产获利
|
||||||
|
|
||||||
最近在策划`coffeechat以及小型沙龙`
|
最近在策划`coffeechat以及小型沙龙`
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 持续更新中
|
|
||||||
|
|
||||||
> 有建议请私聊
|
|
||||||
@@ -23,4 +23,15 @@
|
|||||||
// color: red;
|
// color: red;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.joinSalon {
|
||||||
|
// position: relative;
|
||||||
|
// bottom: 20px;
|
||||||
|
// position: fixed;
|
||||||
|
width: 700px;
|
||||||
|
font-weight: 600;
|
||||||
|
background-color:#72D572 ;
|
||||||
|
border-color: #72D572 ;;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,8 @@ import { AtTag } from "taro-ui";
|
|||||||
import { AtList, AtListItem } from "taro-ui";
|
import { AtList, AtListItem } from "taro-ui";
|
||||||
import { AtForm, AtMessage } from "taro-ui";
|
import { AtForm, AtMessage } from "taro-ui";
|
||||||
import { marked } from "marked";
|
import { marked } from "marked";
|
||||||
import markdownText from "./text.md";
|
import infoText from "./info.md";
|
||||||
|
import bookText from "./book.md";
|
||||||
|
|
||||||
marked.setOptions({
|
marked.setOptions({
|
||||||
breaks: true, // 是否回车换行
|
breaks: true, // 是否回车换行
|
||||||
@@ -39,22 +40,110 @@ marked.setOptions({
|
|||||||
// export default class Index extends Component {
|
// export default class Index extends Component {
|
||||||
const Book = () => {
|
const Book = () => {
|
||||||
const [markText, setmarkText] = useState();
|
const [markText, setmarkText] = useState();
|
||||||
|
const [isWeChat, setisWeChat] = useState(false);
|
||||||
|
|
||||||
useEffect(() => {}, []);
|
const [book, setbook] = useState(window.localStorage.getItem("book"));
|
||||||
|
|
||||||
const handleClick = (value) => {
|
useEffect(() => {
|
||||||
// 跳转到目的页面,在当前页面打开
|
isWeChatFun();
|
||||||
Taro.navigateTo({
|
}, []);
|
||||||
url: "/pages/index/index",
|
|
||||||
|
// const handleClick = (value) => {
|
||||||
|
// // 跳转到目的页面,在当前页面打开
|
||||||
|
// Taro.navigateTo({
|
||||||
|
// url: "/pages/index/index",
|
||||||
|
// });
|
||||||
|
// };
|
||||||
|
|
||||||
|
// 是否在微信客户端
|
||||||
|
const isWeChatFun = () => {
|
||||||
|
var ua = navigator.userAgent.toLowerCase();
|
||||||
|
if (ua.indexOf("micromessenger") != -1) {
|
||||||
|
setisWeChat(true);
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
setisWeChat(false);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const payh5 = (type, total_fee = 1000) => {
|
||||||
|
// console.log("111");
|
||||||
|
Taro.request({
|
||||||
|
method: "POST",
|
||||||
|
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");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View className="Book">
|
<View className="Book">
|
||||||
<View
|
<View
|
||||||
className="markdown-body" // 添加 GitHub Markdown 主题类
|
className="markdown-body" // 添加 GitHub Markdown 主题类
|
||||||
dangerouslySetInnerHTML={{ __html: marked(markdownText) }}
|
dangerouslySetInnerHTML={{
|
||||||
|
__html: marked(book == 1 ? bookText : infoText),
|
||||||
|
}}
|
||||||
></View>
|
></View>
|
||||||
|
|
||||||
|
<View className="bottomDiv"></View>
|
||||||
|
{/* 判断有没有wxid,是否女性 */}
|
||||||
|
{book != 1 ? (
|
||||||
|
<AtButton
|
||||||
|
type="primary"
|
||||||
|
size="normal"
|
||||||
|
className="joinSalon"
|
||||||
|
onClick={() => {
|
||||||
|
if (book == 1) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
if (!!isWeChat) {
|
||||||
|
// 19.8元
|
||||||
|
payh5("book", 1980);
|
||||||
|
} else {
|
||||||
|
// setmeetupQR(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{/* {meetup == 1 ? "已加入" : `立即加入`} */}
|
||||||
|
{`阅读更多`}
|
||||||
|
</AtButton>
|
||||||
|
) : null}
|
||||||
</View>
|
</View>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
43
src/pages/book/info.md
Normal file
43
src/pages/book/info.md
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
## 一人公司方法论
|
||||||
|
|
||||||
|
> 公司化运营业务,但并不是注册企业主体
|
||||||
|
|
||||||
|
<img src="https://hackrobot-1258475618.cos.ap-shenzhen-fsi.myqcloud.com/book.png?imageSlim" title="" alt="book.png" width="248">
|
||||||
|
|
||||||
|
这本书是基于H5页面的`单页书籍`,会不定时更新
|
||||||
|
|
||||||
|
本主要基于个人的学习,实践,总结一套方法论,包含了`道`和`术`
|
||||||
|
|
||||||
|
读者可以参考借鉴
|
||||||
|
|
||||||
|
主题包含并不限于以下:
|
||||||
|
|
||||||
|
- 云手机+微信机器人+AIGC+边缘计算
|
||||||
|
|
||||||
|
- youtube频道获利
|
||||||
|
|
||||||
|
- 独立开发者
|
||||||
|
|
||||||
|
- 跨境电商
|
||||||
|
|
||||||
|
- 旅行+远程办公
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 简介
|
||||||
|
|
||||||
|
> 数字游民实践者
|
||||||
|
|
||||||
|
<img src="https://hackrobot-1258475618.cos.ap-shenzhen-fsi.myqcloud.com/avatar.jpg?imageSlim" title="" alt="avatar.jpg" width="254">
|
||||||
|
|
||||||
|
曾经是程序员,业余开发软件工具
|
||||||
|
|
||||||
|
有公司主体,运营跨境电商亚马逊
|
||||||
|
|
||||||
|
平时爱折腾技术,以`树莓派`为主
|
||||||
|
|
||||||
|
目前方向是偏户外/旅行
|
||||||
|
|
||||||
|
以youtube频道作为副资产获利
|
||||||
|
|
||||||
|
最近在策划`coffeechat以及小型沙龙`
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
export default {
|
export default {
|
||||||
navigationBarTitleText: '数字游民工具箱'
|
navigationBarTitleText: '异度星球'
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ import meetup from "../../images/meetup.jpg";
|
|||||||
import bookqr from "../../images/bookqr.jpg";
|
import bookqr from "../../images/bookqr.jpg";
|
||||||
import loft from "../../images/loft.png";
|
import loft from "../../images/loft.png";
|
||||||
import AIGC from "../../images/AIGC.png";
|
import AIGC from "../../images/AIGC.png";
|
||||||
|
import robot192 from "../../images/robot192.png";
|
||||||
|
|
||||||
// export default class Index extends Component {
|
// export default class Index extends Component {
|
||||||
const Index = () => {
|
const Index = () => {
|
||||||
@@ -105,8 +105,8 @@ const Index = () => {
|
|||||||
// 查询数据库是否存在openid
|
// 查询数据库是否存在openid
|
||||||
Taro.request({
|
Taro.request({
|
||||||
method: "GET",
|
method: "GET",
|
||||||
url: `/api/user/${hashopenid}`, //仅为示例,并非真实的接口地址
|
url: `${process.env.TARO_API_API}/user/${hashopenid}`, //仅为示例,并非真实的接口地址
|
||||||
// url: `/api/user/${window.localStorage.getItem("openid")}`, //仅为示例,并非真实的接口地址
|
// url: `${process.env.TARO_API_API}/user/${window.localStorage.getItem("openid")}`, //仅为示例,并非真实的接口地址
|
||||||
success: function (res) {
|
success: function (res) {
|
||||||
if (res?.data?.userInfo) {
|
if (res?.data?.userInfo) {
|
||||||
// 有完整的用户信息userInfo
|
// 有完整的用户信息userInfo
|
||||||
@@ -131,8 +131,8 @@ const Index = () => {
|
|||||||
const getUserinfo = (wxid) => {
|
const getUserinfo = (wxid) => {
|
||||||
Taro.request({
|
Taro.request({
|
||||||
method: "GET",
|
method: "GET",
|
||||||
url: `/api/user/${wxid}`, //仅为示例,并非真实的接口地址
|
url: `${process.env.TARO_API_API}/user/${wxid}`, //仅为示例,并非真实的接口地址
|
||||||
// url: `/api/user/${window.localStorage.getItem("openid")}`, //仅为示例,并非真实的接口地址
|
// url: `${process.env.TARO_API_API}/user/${window.localStorage.getItem("openid")}`, //仅为示例,并非真实的接口地址
|
||||||
success: function (res) {
|
success: function (res) {
|
||||||
if (res?.data?.userInfo) {
|
if (res?.data?.userInfo) {
|
||||||
//判断wxid是否存在
|
//判断wxid是否存在
|
||||||
@@ -157,8 +157,8 @@ const Index = () => {
|
|||||||
// 优先查询openid是否存在数据库
|
// 优先查询openid是否存在数据库
|
||||||
Taro.request({
|
Taro.request({
|
||||||
method: "GET",
|
method: "GET",
|
||||||
url: `/api/user/${urlwxid}`, //仅为示例,并非真实的接口地址
|
url: `${process.env.TARO_API_API}/user/${urlwxid}`, //仅为示例,并非真实的接口地址
|
||||||
// url: `/api/user/${window.localStorage.getItem("openid")}`, //仅为示例,并非真实的接口地址
|
// url: `${process.env.TARO_API_API}/user/${window.localStorage.getItem("openid")}`, //仅为示例,并非真实的接口地址
|
||||||
success: function (res) {
|
success: function (res) {
|
||||||
if (res?.data?.userInfo) {
|
if (res?.data?.userInfo) {
|
||||||
//判断wxid是否存在
|
//判断wxid是否存在
|
||||||
@@ -207,8 +207,8 @@ const Index = () => {
|
|||||||
};
|
};
|
||||||
Taro.request({
|
Taro.request({
|
||||||
method: "PUT",
|
method: "PUT",
|
||||||
// url: `/api/user/${urlwxid}`, //仅为示例,并非真实的接口地址
|
// url: `${process.env.TARO_API_API}/user/${urlwxid}`, //仅为示例,并非真实的接口地址
|
||||||
url: `/api/user/${newWxid}`, //仅为示例,并非真实的接口地址
|
url: `${process.env.TARO_API_API}/user/${newWxid}`, //仅为示例,并非真实的接口地址
|
||||||
data: userUpdateData,
|
data: userUpdateData,
|
||||||
header: {
|
header: {
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
@@ -226,8 +226,10 @@ const Index = () => {
|
|||||||
};
|
};
|
||||||
Taro.request({
|
Taro.request({
|
||||||
method: "GET",
|
method: "GET",
|
||||||
// url: `/api/user/${urlwxid}`, //仅为示例,并非真实的接口地址
|
// url: `${process.env.TARO_API_API}/user/${urlwxid}`, //仅为示例,并非真实的接口地址
|
||||||
url: `/api/user/${window.localStorage.getItem("openid")}`, //仅为示例,并非真实的接口地址
|
url: `${process.env.TARO_API_API}/user/${window.localStorage.getItem(
|
||||||
|
"openid"
|
||||||
|
)}`, //仅为示例,并非真实的接口地址
|
||||||
data: userUpdateData,
|
data: userUpdateData,
|
||||||
header: {
|
header: {
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
@@ -242,8 +244,10 @@ const Index = () => {
|
|||||||
const tgMessage = () => {
|
const tgMessage = () => {
|
||||||
Taro.request({
|
Taro.request({
|
||||||
method: "GET",
|
method: "GET",
|
||||||
url: `/api/tgMessage?openid=${window.localStorage.getItem("openid")}`, //仅为示例,并非真实的接口地址
|
url: `${
|
||||||
// url: "https://pay.hackrobot.cn/api/payh5", //仅为示例,并非真实的接口地址
|
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) {
|
success: function (res) {
|
||||||
console.log("访问提醒发送成功");
|
console.log("访问提醒发送成功");
|
||||||
},
|
},
|
||||||
@@ -280,8 +284,10 @@ const Index = () => {
|
|||||||
// console.log("111");
|
// console.log("111");
|
||||||
Taro.request({
|
Taro.request({
|
||||||
method: "POST",
|
method: "POST",
|
||||||
url: "/api/payh5", //仅为示例,并非真实的接口地址
|
url: `${process.env.TARO_API_API}/payh5`,
|
||||||
// url: "https://pay.hackrobot.cn/api/payh5", //仅为示例,并非真实的接口地址
|
// url: "${process.env.TARO_API_API}/payh5",
|
||||||
|
|
||||||
|
// url: "https://pay.hackrobot.cn${process.env.TARO_API_API}/payh5", //仅为示例,并非真实的接口地址
|
||||||
|
|
||||||
data: {
|
data: {
|
||||||
callback_url: window.location.href,
|
callback_url: window.location.href,
|
||||||
@@ -368,7 +374,7 @@ const Index = () => {
|
|||||||
<br />
|
<br />
|
||||||
副业是做跨境电商
|
副业是做跨境电商
|
||||||
<br />
|
<br />
|
||||||
做一个<span className="spanText">数字游民</span>ing😎
|
做一个<span className="spanText">数字游民</span>ing
|
||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
|
|
||||||
@@ -376,14 +382,16 @@ const Index = () => {
|
|||||||
<View className="index-list">
|
<View className="index-list">
|
||||||
<AtList>
|
<AtList>
|
||||||
<AtListItem
|
<AtListItem
|
||||||
title="云手机"
|
title="云手机 🔥"
|
||||||
arrow="right"
|
arrow="right"
|
||||||
// hasBorder={false}
|
// hasBorder={false}
|
||||||
thumb={phone}
|
thumb={phone}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
window.location.href =
|
Taro.navigateTo({
|
||||||
// "https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzU4NTgyNDUxNw==&action=getalbum&album_id=3403853254399082501#wechat_redirect";
|
url: "/pages/sphone/index",
|
||||||
"https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzU4NTgyNDUxNw==&action=getalbum&album_id=3555705062712901639#wechat_redirect";
|
});
|
||||||
|
// window.location.href =
|
||||||
|
// "https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzU4NTgyNDUxNw==&action=getalbum&album_id=3555705062712901639#wechat_redirect";
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<AtListItem
|
<AtListItem
|
||||||
@@ -397,7 +405,7 @@ const Index = () => {
|
|||||||
"https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzU4NTgyNDUxNw==&action=getalbum&album_id=3629790245010128902#wechat_redirect";
|
"https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzU4NTgyNDUxNw==&action=getalbum&album_id=3629790245010128902#wechat_redirect";
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<AtListItem
|
<AtListItem
|
||||||
title="AIGC"
|
title="AIGC"
|
||||||
arrow="right"
|
arrow="right"
|
||||||
// hasBorder={false}
|
// hasBorder={false}
|
||||||
@@ -426,8 +434,8 @@ const Index = () => {
|
|||||||
<AtCard
|
<AtCard
|
||||||
// note="提示文字"
|
// note="提示文字"
|
||||||
// extra="2024/09/18"
|
// extra="2024/09/18"
|
||||||
extra="已报名:3人"
|
// extra="已加入:200+"
|
||||||
title="线下沙龙"
|
title="加群"
|
||||||
thumb="http://img12.360buyimg.com/jdphoto/s72x72_jfs/t10660/330/203667368/1672/801735d7/59c85643N31e68303.png"
|
thumb="http://img12.360buyimg.com/jdphoto/s72x72_jfs/t10660/330/203667368/1672/801735d7/59c85643N31e68303.png"
|
||||||
>
|
>
|
||||||
<View className="meetup-card">
|
<View className="meetup-card">
|
||||||
@@ -442,10 +450,10 @@ const Index = () => {
|
|||||||
|
|
||||||
{/* 右边 */}
|
{/* 右边 */}
|
||||||
<View className="meetup-right">
|
<View className="meetup-right">
|
||||||
<View className="title"> 自由交流&副业 | 沙龙(6人) </View>
|
<View className="title"> 技术交流:云手机/机器人/AI </View>
|
||||||
<View className="address">
|
<View className="address">
|
||||||
<AtIcon value="map-pin" size="30" color="#F00"></AtIcon>
|
<AtIcon value="map-pin" size="30" color="#F00"></AtIcon>
|
||||||
<span>深圳市龙华区</span>
|
<span>异度世界</span>
|
||||||
</View>
|
</View>
|
||||||
<View className="meetBtn">
|
<View className="meetBtn">
|
||||||
{/* <View>
|
{/* <View>
|
||||||
@@ -498,8 +506,8 @@ const Index = () => {
|
|||||||
};
|
};
|
||||||
Taro.request({
|
Taro.request({
|
||||||
method: "PUT",
|
method: "PUT",
|
||||||
// url: `/api/user/${urlwxid}`, //仅为示例,并非真实的接口地址
|
// url: `${process.env.TARO_API_API}/user/${urlwxid}`, //仅为示例,并非真实的接口地址
|
||||||
url: `/api/user/${wxid}`, //仅为示例,并非真实的接口地址
|
url: `${process.env.TARO_API_API}/user/${wxid}`, //仅为示例,并非真实的接口地址
|
||||||
data: userUpdateData,
|
data: userUpdateData,
|
||||||
header: {
|
header: {
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
@@ -531,7 +539,7 @@ const Index = () => {
|
|||||||
? "已报名"
|
? "已报名"
|
||||||
: // : "立即报名"}
|
: // : "立即报名"}
|
||||||
"已满"} */}
|
"已满"} */}
|
||||||
{`查看`}
|
{`加入`}
|
||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
@@ -594,8 +602,8 @@ const Index = () => {
|
|||||||
};
|
};
|
||||||
Taro.request({
|
Taro.request({
|
||||||
method: "PUT",
|
method: "PUT",
|
||||||
// url: `/api/user/${urlwxid}`, //仅为示例,并非真实的接口地址
|
// url: `${process.env.TARO_API_API}/user/${urlwxid}`, //仅为示例,并非真实的接口地址
|
||||||
url: `/api/user/${wxid}`, //仅为示例,并非真实的接口地址
|
url: `${process.env.TARO_API_API}/user/${wxid}`, //仅为示例,并非真实的接口地址
|
||||||
data: userUpdateData,
|
data: userUpdateData,
|
||||||
header: {
|
header: {
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
@@ -648,7 +656,22 @@ const Index = () => {
|
|||||||
<View className="emojitext">
|
<View className="emojitext">
|
||||||
<View>
|
<View>
|
||||||
<AtIcon value="file-generic" size="30" color="#F00"></AtIcon>{" "}
|
<AtIcon value="file-generic" size="30" color="#F00"></AtIcon>{" "}
|
||||||
markdown转emoji编辑器
|
数字游民cna (ios app)
|
||||||
|
</View>
|
||||||
|
{/* <AtIcon
|
||||||
|
value="download-cloud"
|
||||||
|
size="30"
|
||||||
|
color="#F00"
|
||||||
|
onClick={() => {
|
||||||
|
// setisOpened(true);
|
||||||
|
}}
|
||||||
|
></AtIcon> */}
|
||||||
|
<span>待上架</span>
|
||||||
|
</View>
|
||||||
|
<View className="emojitext">
|
||||||
|
<View>
|
||||||
|
<AtIcon value="file-generic" size="30" color="#F00"></AtIcon>{" "}
|
||||||
|
emoji图文编辑器 (pc客户端)
|
||||||
</View>
|
</View>
|
||||||
<AtIcon
|
<AtIcon
|
||||||
value="download-cloud"
|
value="download-cloud"
|
||||||
|
|||||||
@@ -72,8 +72,8 @@ const Detail = () => {
|
|||||||
// console.log("111");
|
// console.log("111");
|
||||||
Taro.request({
|
Taro.request({
|
||||||
method:'POST',
|
method:'POST',
|
||||||
url: "/api/payh5", //仅为示例,并非真实的接口地址
|
url: `${process.env.TARO_API_API}/payh5`, //仅为示例,并非真实的接口地址
|
||||||
// url: "https://pay.hackrobot.cn/api/payh5", //仅为示例,并非真实的接口地址
|
// url: "https://pay.hackrobot.cn${process.env.TARO_API_API}/payh5", //仅为示例,并非真实的接口地址
|
||||||
|
|
||||||
data: {
|
data: {
|
||||||
callback_url:window.location.href,
|
callback_url:window.location.href,
|
||||||
|
|||||||
3
src/pages/planet/index.config.js
Normal file
3
src/pages/planet/index.config.js
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
export default {
|
||||||
|
navigationBarTitleText: '副业沙龙'
|
||||||
|
}
|
||||||
23
src/pages/planet/index.scss
Normal file
23
src/pages/planet/index.scss
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
.Model {
|
||||||
|
padding: 20px;
|
||||||
|
|
||||||
|
.bottomDiv {
|
||||||
|
width: 100%;
|
||||||
|
height: 100px;
|
||||||
|
// background-color: yellow;
|
||||||
|
}
|
||||||
|
|
||||||
|
.joinSalon {
|
||||||
|
// position: relative;
|
||||||
|
bottom: 20px;
|
||||||
|
position: fixed;
|
||||||
|
width: 700px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.model-emoji {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
217
src/pages/planet/index.tsx
Normal file
217
src/pages/planet/index.tsx
Normal file
@@ -0,0 +1,217 @@
|
|||||||
|
// @ts-nocheck
|
||||||
|
import { Component } from "react";
|
||||||
|
import { View, Text, Image, Button } from "@tarojs/components";
|
||||||
|
import "./index.scss";
|
||||||
|
import { AtButton, AtInput, 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 Taro from "@tarojs/taro";
|
||||||
|
import { AtTag } from "taro-ui";
|
||||||
|
import { AtList, AtListItem } from "taro-ui";
|
||||||
|
import { AtForm, AtMessage } from "taro-ui";
|
||||||
|
import loft from "../../images/loft.png";
|
||||||
|
import nomadvloglife from "../../images/nomadvloglife.png";
|
||||||
|
|
||||||
|
import {
|
||||||
|
AtModal,
|
||||||
|
AtModalHeader,
|
||||||
|
AtModalContent,
|
||||||
|
AtModalAction,
|
||||||
|
AtAvatar,
|
||||||
|
AtAccordion,
|
||||||
|
} from "taro-ui";
|
||||||
|
|
||||||
|
import qrcode from "../../images/qrcode.png";
|
||||||
|
import joinGroup from "../../images/joinGroup.png";
|
||||||
|
|
||||||
|
// export default class Index extends Component {
|
||||||
|
const Salon = () => {
|
||||||
|
const [meetupQR, setmeetupQR] = useState(false);
|
||||||
|
const [isWeChat, setisWeChat] = useState(false);
|
||||||
|
const [meetup, setmeetup] = useState(window.localStorage.getItem("meetup"));
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
isWeChatFun();
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
// const handleClick = (value) => {
|
||||||
|
// // 跳转到目的页面,在当前页面打开
|
||||||
|
// Taro.navigateTo({
|
||||||
|
// url: "/pages/index/index",
|
||||||
|
// });
|
||||||
|
// };
|
||||||
|
|
||||||
|
// 是否在微信客户端
|
||||||
|
const isWeChatFun = () => {
|
||||||
|
var ua = navigator.userAgent.toLowerCase();
|
||||||
|
if (ua.indexOf("micromessenger") != -1) {
|
||||||
|
setisWeChat(true);
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
setisWeChat(false);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const payh5 = (type, total_fee = 1000) => {
|
||||||
|
// console.log("111");
|
||||||
|
Taro.request({
|
||||||
|
method: "POST",
|
||||||
|
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");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<View className="Model">
|
||||||
|
<View className="meetup-left">
|
||||||
|
<Image style="width: 100%;height: 100px;background: #fff;" src={loft} />
|
||||||
|
</View>
|
||||||
|
|
||||||
|
<View className="at-article">
|
||||||
|
<View className="at-article__h1">技术交流群</View>
|
||||||
|
<View className="at-article__info">
|
||||||
|
{/* 2017-05-07 */}
|
||||||
|
异度星球
|
||||||
|
</View>
|
||||||
|
<View className="at-article__content">
|
||||||
|
<View className="at-article__section">
|
||||||
|
<View className="at-article__h2">群简介</View>
|
||||||
|
<View className="at-article__h3">| 📣技术爱好者</View>
|
||||||
|
<View className="at-article__p">
|
||||||
|
微信群是一个交流技术的平台,不限软件/硬件
|
||||||
|
</View>
|
||||||
|
<br />
|
||||||
|
<View className="at-article__h3">| 📋入群须知</View>
|
||||||
|
<View className="at-article__p">
|
||||||
|
微信群只是一个沟通平台,与其他伙伴搭桥
|
||||||
|
<br />
|
||||||
|
可以讨论但不限于:
|
||||||
|
<br />
|
||||||
|
1️⃣云手机
|
||||||
|
<br />
|
||||||
|
2️⃣机器人
|
||||||
|
<br />
|
||||||
|
3️⃣AIGC /边缘计算
|
||||||
|
</View>
|
||||||
|
<br />
|
||||||
|
<View className="at-article__h3">| ❌禁止以下行为</View>
|
||||||
|
<View className="at-article__p">
|
||||||
|
🚫营销推广
|
||||||
|
<br />
|
||||||
|
🚫恶意捣乱
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
❗群主没有解答义务,勿随意@
|
||||||
|
{/* <br />
|
||||||
|
💰价格29元/人 (场地成本) */}
|
||||||
|
</View>
|
||||||
|
<br />
|
||||||
|
{meetup == 1 ? (
|
||||||
|
<View className="at-article__h3">| ☕入群口令:3399</View>
|
||||||
|
) : null}
|
||||||
|
{meetup == 1 ? (
|
||||||
|
<View className="at-article__p">
|
||||||
|
{`ID:${window.localStorage.getItem("openid")}`}
|
||||||
|
</View>
|
||||||
|
) : null}
|
||||||
|
{/* 已报名 */}
|
||||||
|
{meetup == 1 ? (
|
||||||
|
<View className="model-emoji">
|
||||||
|
<Image
|
||||||
|
style="width: 240px;height: 240px;background: #fff;"
|
||||||
|
// src={qrcode}
|
||||||
|
src={joinGroup}
|
||||||
|
/>
|
||||||
|
</View>
|
||||||
|
) : null}
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
<View className="bottomDiv"></View>
|
||||||
|
{/* 判断有没有wxid,是否女性 */}
|
||||||
|
<AtButton
|
||||||
|
type="primary"
|
||||||
|
size="normal"
|
||||||
|
className="joinSalon"
|
||||||
|
onClick={() => {
|
||||||
|
if (meetup == 1) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
if (!!isWeChat) {
|
||||||
|
payh5("meetup", 2900);
|
||||||
|
} else {
|
||||||
|
setmeetupQR(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{meetup == 1 ? "入群口令: 3399" : `立即加入`}
|
||||||
|
</AtButton>
|
||||||
|
|
||||||
|
<View className="meetupQR">
|
||||||
|
{/* 软件下载模态窗 */}
|
||||||
|
<AtModal isOpened={meetupQR}>
|
||||||
|
<AtModalHeader>咨询沙龙</AtModalHeader>
|
||||||
|
<AtModalContent>
|
||||||
|
<View className="model-emoji">
|
||||||
|
<Image
|
||||||
|
// style="width: 100%;height: 240px;background: #fff;"
|
||||||
|
src={qrcode}
|
||||||
|
/>
|
||||||
|
</View>
|
||||||
|
</AtModalContent>
|
||||||
|
<AtModalAction>
|
||||||
|
<Button
|
||||||
|
onClick={() => {
|
||||||
|
setmeetupQR(false);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
知道了
|
||||||
|
</Button>
|
||||||
|
</AtModalAction>
|
||||||
|
</AtModal>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Salon;
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
export default {
|
export default {
|
||||||
navigationBarTitleText: '副业沙龙'
|
navigationBarTitleText: '异度星球'
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,10 @@
|
|||||||
// position: relative;
|
// position: relative;
|
||||||
bottom: 20px;
|
bottom: 20px;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
width: 680px;
|
width: 700px;
|
||||||
|
font-weight: 600;
|
||||||
|
background-color:#72D572 ;
|
||||||
|
border-color: #72D572 ;;
|
||||||
}
|
}
|
||||||
|
|
||||||
.model-emoji {
|
.model-emoji {
|
||||||
@@ -21,3 +24,12 @@
|
|||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.no-border {
|
||||||
|
border: none;
|
||||||
|
overflow: hidden;
|
||||||
|
width: 100%;
|
||||||
|
height: 100vh;
|
||||||
|
scrollbar-width: none; /* Firefox */
|
||||||
|
}
|
||||||
@@ -25,6 +25,7 @@ import {
|
|||||||
} from "taro-ui";
|
} from "taro-ui";
|
||||||
|
|
||||||
import qrcode from "../../images/qrcode.png";
|
import qrcode from "../../images/qrcode.png";
|
||||||
|
import joinGroup from "../../images/joinGroup.png";
|
||||||
|
|
||||||
// export default class Index extends Component {
|
// export default class Index extends Component {
|
||||||
const Salon = () => {
|
const Salon = () => {
|
||||||
@@ -36,12 +37,12 @@ const Salon = () => {
|
|||||||
isWeChatFun();
|
isWeChatFun();
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const handleClick = (value) => {
|
// const handleClick = (value) => {
|
||||||
// 跳转到目的页面,在当前页面打开
|
// // 跳转到目的页面,在当前页面打开
|
||||||
Taro.navigateTo({
|
// Taro.navigateTo({
|
||||||
url: "/pages/index/index",
|
// url: "/pages/index/index",
|
||||||
});
|
// });
|
||||||
};
|
// };
|
||||||
|
|
||||||
// 是否在微信客户端
|
// 是否在微信客户端
|
||||||
const isWeChatFun = () => {
|
const isWeChatFun = () => {
|
||||||
@@ -59,8 +60,8 @@ const Salon = () => {
|
|||||||
// console.log("111");
|
// console.log("111");
|
||||||
Taro.request({
|
Taro.request({
|
||||||
method: "POST",
|
method: "POST",
|
||||||
url: "/api/payh5", //仅为示例,并非真实的接口地址
|
url: `${process.env.TARO_API_API}/payh5`, //仅为示例,并非真实的接口地址
|
||||||
// url: "https://pay.hackrobot.cn/api/payh5", //仅为示例,并非真实的接口地址
|
// url: "https://pay.hackrobot.cn${process.env.TARO_API_API}/payh5", //仅为示例,并非真实的接口地址
|
||||||
|
|
||||||
data: {
|
data: {
|
||||||
callback_url: window.location.href,
|
callback_url: window.location.href,
|
||||||
@@ -104,95 +105,123 @@ const Salon = () => {
|
|||||||
<Image style="width: 100%;height: 100px;background: #fff;" src={loft} />
|
<Image style="width: 100%;height: 100px;background: #fff;" src={loft} />
|
||||||
</View>
|
</View>
|
||||||
|
|
||||||
<View className="at-article">
|
{meetup != 1 ? (
|
||||||
<View className="at-article__h1">自由交流 | 沙龙</View>
|
<View className="at-article">
|
||||||
<View className="at-article__info">
|
<View className="at-article__h1">异度星球</View>
|
||||||
{/* 2017-05-07 */}
|
<View className="at-article__info">
|
||||||
异度星球
|
{/* 2017-05-07 */}
|
||||||
</View>
|
异度星球
|
||||||
<View className="at-article__content">
|
</View>
|
||||||
<View className="at-article__section">
|
<View className="at-article__content">
|
||||||
<View className="at-article__h2">活动介绍</View>
|
<View className="at-article__section">
|
||||||
<View className="at-article__h3">| 📣coffeechat</View>
|
<View className="at-article__h2">群简介</View>
|
||||||
<View className="at-article__p">
|
<View className="at-article__h3">| 📣技术爱好者</View>
|
||||||
本活动是个人基于coffeechat的另一种形式,由于很多小伙伴1V1交流会紧张,提议旁听,所以组织小型的沙龙(6人),自由交流
|
|
||||||
</View>
|
|
||||||
<br />
|
|
||||||
<View className="at-article__h3">| 📋时间地点</View>
|
|
||||||
<View className="at-article__p">
|
|
||||||
本沙龙不会与商业场地进行合作
|
|
||||||
<br />
|
|
||||||
1️⃣地点:龙华区-红山地铁口-民宿
|
|
||||||
<br />
|
|
||||||
2️⃣6人成行
|
|
||||||
<br />
|
|
||||||
3️⃣不固定日期
|
|
||||||
</View>
|
|
||||||
<br />
|
|
||||||
<View className="at-article__h3">| ❌非商业,非盈利性质</View>
|
|
||||||
<View className="at-article__p">
|
|
||||||
🚫禁止营销推广
|
|
||||||
<br />
|
|
||||||
🚫标榜:"留学海归""博士硕士""大咖大V""大厂"等
|
|
||||||
<br />
|
|
||||||
声明:"一人公司","自由职业","副业",有很多组织,或者个人,会举办专题的活动,以及"高端XX局",固定周期,流程体系化,并以此盈利.{" "}
|
|
||||||
<br />
|
|
||||||
本沙龙不属于此类
|
|
||||||
<br />
|
|
||||||
✅欢迎普通人,请对"职业/学历/成就"--祛魅
|
|
||||||
<br />
|
|
||||||
💰价格29元/人 (场地成本)
|
|
||||||
</View>
|
|
||||||
<br />
|
|
||||||
{meetup == 1 ? (
|
|
||||||
<View className="at-article__h3">| ☕已报名,请添加好友</View>
|
|
||||||
) : (
|
|
||||||
null
|
|
||||||
)}
|
|
||||||
{meetup == 1 ? (
|
|
||||||
<View className="at-article__p">
|
<View className="at-article__p">
|
||||||
{`ID:${window.localStorage.getItem("openid")}`}
|
{/* 微信群是一个交流技术的平台,不限软件/硬件 */}
|
||||||
|
交流灌水
|
||||||
|
<br />
|
||||||
|
践行『长期价值』和『杠杆主义』
|
||||||
|
<br />
|
||||||
|
折腾开源软件和开源硬件
|
||||||
|
{/* <br />
|
||||||
|
长期更新 */}
|
||||||
</View>
|
</View>
|
||||||
) : null}
|
<br />
|
||||||
{/* 已报名 */}
|
<View className="at-article__h3">| 📋核心主题</View>
|
||||||
{meetup == 1 ? (
|
<View className="at-article__p">
|
||||||
<View className="model-emoji">
|
{/* 微信群只是一个沟通平台,与其他伙伴搭桥
|
||||||
<Image
|
<br /> */}
|
||||||
style="width: 240px;height: 240px;background: #fff;"
|
包括但不限于:
|
||||||
// src={qrcode}
|
<br />
|
||||||
src={nomadvloglife}
|
1️⃣云手机
|
||||||
/>
|
<br />
|
||||||
|
2️⃣微信机器人
|
||||||
|
<br />
|
||||||
|
3️⃣AIGC /边缘计算
|
||||||
</View>
|
</View>
|
||||||
) : null}
|
<br />
|
||||||
|
<View className="at-article__h3">| 🟩微信群</View>
|
||||||
|
<View className="at-article__p">
|
||||||
|
{/* 『微信群』是一个沟通平台,
|
||||||
|
<br />
|
||||||
|
加入后,会显示『入群口令』
|
||||||
|
<br /> */}
|
||||||
|
机器人会自动邀请加群
|
||||||
|
</View>
|
||||||
|
<br />
|
||||||
|
<View className="at-article__h3">| 🔊声明</View>
|
||||||
|
<View className="at-article__p">
|
||||||
|
🚫禁止营销推广
|
||||||
|
<br />
|
||||||
|
{/* 🚫恶意捣乱
|
||||||
|
<br />
|
||||||
|
<br /> */}
|
||||||
|
❗请勿随意@群主
|
||||||
|
</View>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
</View>
|
||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
</View>
|
) : (
|
||||||
|
<View>
|
||||||
|
<View>
|
||||||
|
<View className="at-article__h3">| ☕微信自动入群口令:<span style={{color:"red"}}>3399</span></View>
|
||||||
|
<View className="at-article__p">
|
||||||
|
{`ID:${window.localStorage.getItem("openid")}`}
|
||||||
|
</View>
|
||||||
|
|
||||||
|
<View className="model-emoji">
|
||||||
|
<Image
|
||||||
|
// style="width: 100%;height: 240px;background: #fff;"
|
||||||
|
src={qrcode}
|
||||||
|
/>
|
||||||
|
</View>
|
||||||
|
<View className="model-emoji">
|
||||||
|
<Image
|
||||||
|
style="width: 240px;height: 240px;background: #fff;"
|
||||||
|
// src={qrcode}
|
||||||
|
src={joinGroup}
|
||||||
|
/>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
{/* webview=社区 */}
|
||||||
|
{/* <iframe
|
||||||
|
className="no-border"
|
||||||
|
src="https://memos.nomadcna.com/"
|
||||||
|
></iframe> */}
|
||||||
|
</View>
|
||||||
|
)}
|
||||||
|
|
||||||
<View className="bottomDiv"></View>
|
<View className="bottomDiv"></View>
|
||||||
{/* 判断有没有wxid,是否女性 */}
|
{/* 判断有没有wxid,是否女性 */}
|
||||||
<AtButton
|
{meetup != 1 ? (
|
||||||
type="primary"
|
<AtButton
|
||||||
size="normal"
|
type="primary"
|
||||||
className="joinSalon"
|
size="normal"
|
||||||
onClick={() => {
|
className="joinSalon"
|
||||||
if (meetup == 1) {
|
onClick={() => {
|
||||||
return false;
|
if (meetup == 1) {
|
||||||
} else {
|
return false;
|
||||||
if (!!isWeChat) {
|
|
||||||
payh5("meetup", 2900);
|
|
||||||
} else {
|
} else {
|
||||||
setmeetupQR(true);
|
if (!!isWeChat) {
|
||||||
|
// 1元
|
||||||
|
payh5("meetup", 100);
|
||||||
|
} else {
|
||||||
|
setmeetupQR(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}}
|
||||||
}}
|
>
|
||||||
>
|
{/* {meetup == 1 ? "已加入" : `立即加入`} */}
|
||||||
{meetup == 1 ? "已报名" : `立即报名`}
|
{`立即加入 ¥1`}
|
||||||
</AtButton>
|
</AtButton>
|
||||||
|
) : null}
|
||||||
|
|
||||||
<View className="meetupQR">
|
<View className="meetupQR">
|
||||||
{/* 软件下载模态窗 */}
|
{/* 软件下载模态窗 */}
|
||||||
<AtModal isOpened={meetupQR}>
|
<AtModal isOpened={meetupQR}>
|
||||||
<AtModalHeader>咨询沙龙</AtModalHeader>
|
<AtModalHeader>添加好友</AtModalHeader>
|
||||||
<AtModalContent>
|
<AtModalContent>
|
||||||
<View className="model-emoji">
|
<View className="model-emoji">
|
||||||
<Image
|
<Image
|
||||||
|
|||||||
3
src/pages/sphone/index.config.js
Normal file
3
src/pages/sphone/index.config.js
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
export default {
|
||||||
|
navigationBarTitleText: '云手机'
|
||||||
|
}
|
||||||
37
src/pages/sphone/index.scss
Normal file
37
src/pages/sphone/index.scss
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
|
||||||
|
// 在 src/index.scss 中引入 GitHub Markdown 主题
|
||||||
|
@import 'github-markdown-css/github-markdown.css';
|
||||||
|
|
||||||
|
.Sphone {
|
||||||
|
padding: 40px;
|
||||||
|
// font-size: 30px !important;
|
||||||
|
// color: #666;
|
||||||
|
|
||||||
|
.markdown-body{
|
||||||
|
font-size: 30px !important;
|
||||||
|
}
|
||||||
|
img {
|
||||||
|
max-width: 100%;
|
||||||
|
height: auto; /* 保持图像的纵横比 */
|
||||||
|
}
|
||||||
|
.formCode {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
.codeBtn {
|
||||||
|
background-color: aquamarine;
|
||||||
|
// height: 80px;
|
||||||
|
// color: red;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.joinSalon {
|
||||||
|
// position: relative;
|
||||||
|
// bottom: 20px;
|
||||||
|
// position: fixed;
|
||||||
|
width: 700px;
|
||||||
|
font-weight: 600;
|
||||||
|
background-color:#72D572 ;
|
||||||
|
border-color: #72D572 ;;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
151
src/pages/sphone/index.tsx
Normal file
151
src/pages/sphone/index.tsx
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
// @ts-nocheck
|
||||||
|
import { Component } from "react";
|
||||||
|
import { View, Text, Image } from "@tarojs/components";
|
||||||
|
import "./index.scss";
|
||||||
|
import { AtButton, AtInput, 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 Taro from "@tarojs/taro";
|
||||||
|
import { AtAvatar } from "taro-ui";
|
||||||
|
import { AtTag } from "taro-ui";
|
||||||
|
import { AtList, AtListItem } from "taro-ui";
|
||||||
|
import { AtForm, AtMessage } from "taro-ui";
|
||||||
|
import { marked } from "marked";
|
||||||
|
import infoText from "./info.md";
|
||||||
|
import payText from "./pay.md";
|
||||||
|
|
||||||
|
marked.setOptions({
|
||||||
|
breaks: true, // 是否回车换行
|
||||||
|
gfm: true, //使用经批准的 GitHub Flavored Markdown (GFM) 规范
|
||||||
|
// pedantic: true, //严格模式
|
||||||
|
// highlight(code:any, lang:any) {
|
||||||
|
// // 语法高亮
|
||||||
|
// let val = code;
|
||||||
|
// if (lang) {
|
||||||
|
// val = hljs.highlight(lang, code).value;
|
||||||
|
// } else {
|
||||||
|
// val = hljs.highlightAuto(code).value;
|
||||||
|
// }
|
||||||
|
// return val;
|
||||||
|
// },
|
||||||
|
});
|
||||||
|
|
||||||
|
// const renderer = new marked.Renderer();
|
||||||
|
// // 使用拓展
|
||||||
|
// marked.use({ renderer });
|
||||||
|
|
||||||
|
// export default class Index extends Component {
|
||||||
|
const Sphone = () => {
|
||||||
|
const [markText, setmarkText] = useState();
|
||||||
|
const [isWeChat, setisWeChat] = useState(false);
|
||||||
|
|
||||||
|
const [sphone, setsphone] = useState(window.localStorage.getItem("sphone"));
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
isWeChatFun();
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
// const handleClick = (value) => {
|
||||||
|
// // 跳转到目的页面,在当前页面打开
|
||||||
|
// Taro.navigateTo({
|
||||||
|
// url: "/pages/index/index",
|
||||||
|
// });
|
||||||
|
// };
|
||||||
|
|
||||||
|
// 是否在微信客户端
|
||||||
|
const isWeChatFun = () => {
|
||||||
|
var ua = navigator.userAgent.toLowerCase();
|
||||||
|
if (ua.indexOf("micromessenger") != -1) {
|
||||||
|
setisWeChat(true);
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
setisWeChat(false);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const payh5 = (type, total_fee = 1000) => {
|
||||||
|
// console.log("111");
|
||||||
|
Taro.request({
|
||||||
|
method: "POST",
|
||||||
|
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, //订单类型 sphone/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); //订单类型 sphone/meetup/video/vip
|
||||||
|
WeixinJSBridge.call("closeWindow");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
return (
|
||||||
|
<View className="Sphone">
|
||||||
|
<View
|
||||||
|
className="markdown-body" // 添加 GitHub Markdown 主题类
|
||||||
|
dangerouslySetInnerHTML={{
|
||||||
|
__html: marked(sphone == 1 ? payText : infoText),
|
||||||
|
}}
|
||||||
|
></View>
|
||||||
|
|
||||||
|
<View className="bottomDiv"></View>
|
||||||
|
{/* 判断有没有wxid,是否女性 */}
|
||||||
|
{sphone != 1 ? (
|
||||||
|
<AtButton
|
||||||
|
type="primary"
|
||||||
|
size="normal"
|
||||||
|
className="joinSalon"
|
||||||
|
onClick={() => {
|
||||||
|
if (sphone == 1) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
if (!!isWeChat) {
|
||||||
|
// 180元
|
||||||
|
payh5("sphone", 18000);
|
||||||
|
} else {
|
||||||
|
// setmeetupQR(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{/* {meetup == 1 ? "已加入" : `立即加入`} */}
|
||||||
|
{`阅读更多 ¥180`}
|
||||||
|
</AtButton>
|
||||||
|
) : null}
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Sphone;
|
||||||
51
src/pages/sphone/info.md
Normal file
51
src/pages/sphone/info.md
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
## 云手机教程
|
||||||
|
|
||||||
|
> docker部署
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
> 原生安卓AOSP
|
||||||
|
|
||||||
|
.png?imageSlim)
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
## 目录
|
||||||
|
|
||||||
|
- 云手机设备指北
|
||||||
|
|
||||||
|
- 硬件选型
|
||||||
|
|
||||||
|
- 方案1:docker容器化安卓
|
||||||
|
|
||||||
|
- 虚拟化的优缺点/设置
|
||||||
|
|
||||||
|
- 方案2:主板+原生AOSP
|
||||||
|
|
||||||
|
- root权限与magisk配置
|
||||||
|
|
||||||
|
- OTG外设配件
|
||||||
|
|
||||||
|
- 内网穿透
|
||||||
|
|
||||||
|
- 远程控制:云控
|
||||||
|
|
||||||
|
- 魔法:多开/群控/应用变量/gps/ip属地
|
||||||
|
|
||||||
|
- 应用场景:无人直播/机器人bot/RPA自动化+数据爬虫
|
||||||
|
|
||||||
|
- 杂谈~~
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
## 简述
|
||||||
|
|
||||||
|
教程属于`操作类,不是原理`
|
||||||
|
|
||||||
|
比如不涉及:内核编译,ROM定制,虚拟化
|
||||||
|
|
||||||
|
图文+视频录制
|
||||||
|
|
||||||
|
长期更新
|
||||||
|
|
||||||
|
|
||||||
79
src/pages/sphone/pay.md
Normal file
79
src/pages/sphone/pay.md
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
## 云手机教程
|
||||||
|
|
||||||
|
> docker部署
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
> 原生安卓AOSP
|
||||||
|
|
||||||
|
.png?imageSlim)
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
## 目录
|
||||||
|
|
||||||
|
- 云手机设备指北
|
||||||
|
|
||||||
|
- 硬件选型
|
||||||
|
|
||||||
|
- 方案1:docker容器化安卓
|
||||||
|
|
||||||
|
- 虚拟化的优缺点/设置
|
||||||
|
|
||||||
|
- 方案2:主板+原生AOSP
|
||||||
|
|
||||||
|
- root权限与magisk配置
|
||||||
|
|
||||||
|
- OTG外设配件
|
||||||
|
|
||||||
|
- 内网穿透
|
||||||
|
|
||||||
|
- 远程控制:云控
|
||||||
|
|
||||||
|
- 魔法:多开/群控/应用变量/gps/ip属地
|
||||||
|
|
||||||
|
- 应用场景:无人直播/机器人bot/RPA自动化+数据爬虫
|
||||||
|
|
||||||
|
- 杂谈~~
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
## 简述
|
||||||
|
|
||||||
|
教程属于`操作类,不是原理`
|
||||||
|
|
||||||
|
比如不涉及:内核编译,ROM定制,虚拟化
|
||||||
|
|
||||||
|
图文+视频录制
|
||||||
|
|
||||||
|
长期更新
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
## 云手机设备指北
|
||||||
|
|
||||||
|
这里说的云手机,默认指的
|
||||||
|
|
||||||
|
1. 开源硬件:ARM主板,
|
||||||
|
|
||||||
|
2. 设置安卓系统
|
||||||
|
|
||||||
|
3. 远程控制
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
## 硬件选型
|
||||||
|
|
||||||
|
建议购买RK3588芯片的开发板
|
||||||
|
|
||||||
|
- 香橙派5plus
|
||||||
|
|
||||||
|
- nvme ssd硬盘
|
||||||
|
|
||||||
|
- TF卡:用于测试系统
|
||||||
|
|
||||||
|
- 2个支持`uvc协议+带麦克风`的摄像头
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
教程正在更新中,视频录制操作过程,请等待
|
||||||
@@ -1653,7 +1653,7 @@
|
|||||||
|
|
||||||
"@tarojs/api@3.6.20":
|
"@tarojs/api@3.6.20":
|
||||||
version "3.6.20"
|
version "3.6.20"
|
||||||
resolved "https://registry.npmmirror.com/@tarojs/api/-/api-3.6.20.tgz#75198d1c0c8a78a896d234b368a5a69a6cff8114"
|
resolved "https://registry.npmmirror.com/@tarojs${process.env.TARO_API_API}/-/api-3.6.20.tgz#75198d1c0c8a78a896d234b368a5a69a6cff8114"
|
||||||
integrity sha512-LJLYthePWUsq+Xy7IqUKv29BI1is1K861oagGVoQW6xYyLnvQx4zwU4FwlttvkA0iOtSGKf9q/KdTmheeeVrJQ==
|
integrity sha512-LJLYthePWUsq+Xy7IqUKv29BI1is1K861oagGVoQW6xYyLnvQx4zwU4FwlttvkA0iOtSGKf9q/KdTmheeeVrJQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.14.5"
|
"@babel/runtime" "^7.14.5"
|
||||||
|
|||||||
Reference in New Issue
Block a user