Compare commits
12 Commits
dev/1.0.0
...
feat/marke
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e9b67be77b | ||
|
|
5a36dbab71 | ||
|
|
75bd1a3d6a | ||
|
|
c5071ca4c1 | ||
|
|
e3adf0e4d6 | ||
|
|
2d8abfa21b | ||
|
|
d697e58071 | ||
|
|
45027cc520 | ||
|
|
05e3dbb678 | ||
|
|
fa5c696c53 | ||
|
|
3bec52d5a5 | ||
|
|
700a45fbf7 |
@@ -44,6 +44,7 @@
|
|||||||
"@tarojs/runtime": "3.6.20",
|
"@tarojs/runtime": "3.6.20",
|
||||||
"@tarojs/shared": "3.6.20",
|
"@tarojs/shared": "3.6.20",
|
||||||
"@tarojs/taro": "3.6.20",
|
"@tarojs/taro": "3.6.20",
|
||||||
|
"marked": "^12.0.2",
|
||||||
"react": "^18.0.0",
|
"react": "^18.0.0",
|
||||||
"react-dom": "^18.0.0",
|
"react-dom": "^18.0.0",
|
||||||
"sr-sdk-h5": "^1.3.1",
|
"sr-sdk-h5": "^1.3.1",
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
html,body{
|
||||||
|
user-select: auto !important;
|
||||||
|
}
|
||||||
@@ -1,6 +1,14 @@
|
|||||||
import { Component } from "react";
|
import { Component } from "react";
|
||||||
import Taro from "@tarojs/taro";
|
import Taro from "@tarojs/taro";
|
||||||
import { View, Text, Image, Button } from "@tarojs/components";
|
import {
|
||||||
|
View,
|
||||||
|
Text,
|
||||||
|
Image,
|
||||||
|
Button,
|
||||||
|
Input,
|
||||||
|
Editor,
|
||||||
|
Textarea,
|
||||||
|
} from "@tarojs/components";
|
||||||
import "./index.scss";
|
import "./index.scss";
|
||||||
import { AtTabBar } from "taro-ui";
|
import { AtTabBar } from "taro-ui";
|
||||||
import React, { useCallback, useEffect, useState } from "react";
|
import React, { useCallback, useEffect, useState } from "react";
|
||||||
@@ -18,250 +26,267 @@ import { AtToast } from "taro-ui";
|
|||||||
import { AtIcon } from "taro-ui";
|
import { AtIcon } from "taro-ui";
|
||||||
import see from "../../images/see.png";
|
import see from "../../images/see.png";
|
||||||
import group from "../../images/group.png";
|
import group from "../../images/group.png";
|
||||||
|
import { marked } from "marked";
|
||||||
|
import _ from "lodash";
|
||||||
|
import OriginMark from "./conpoments/OriginMark/index";
|
||||||
|
|
||||||
|
// marked.use(`marked-code-jsx-renderer`);
|
||||||
|
// marked.use(`marked-extended-tables`);
|
||||||
|
|
||||||
|
// 
|
||||||
|
|
||||||
|
const markTextStr = `
|
||||||
|
## 标题
|
||||||
|
> 测试引用桔子的样子
|
||||||
|
随便测试普通的文本,要不要来个\`内敛\`的字符串
|
||||||
|
---
|
||||||
|
- 无序列表1
|
||||||
|
个人有看看
|
||||||
|
- 无序列表2
|
||||||
|
- [ ] 任务列表
|
||||||
|
- [x] 完成任务
|
||||||
|
1. 测试111
|
||||||
|
恶魔女哪里的请
|
||||||
|
2. 你好啊
|
||||||
|
3. iefw4t43t43t
|
||||||
|
永远不要相信一个
|
||||||
|
---
|
||||||
|
相信我
|
||||||
|
`;
|
||||||
|
|
||||||
|
let tablecellArr = [];
|
||||||
|
let tableRowArr = [];
|
||||||
|
let maxLengthCell = null;
|
||||||
|
let bodydata = null;
|
||||||
|
let headerdata = null;
|
||||||
|
let maxWidths = null;
|
||||||
|
|
||||||
|
marked.setOptions({
|
||||||
|
breaks: true, // 是否回车换行
|
||||||
|
gfm: true, //使用经批准的 GitHub Flavored Markdown (GFM) 规范
|
||||||
|
highlight(code, lang) {
|
||||||
|
// 语法高亮
|
||||||
|
let val = code;
|
||||||
|
if (lang) {
|
||||||
|
val = hljs.highlight(lang, code).value;
|
||||||
|
} else {
|
||||||
|
val = hljs.highlightAuto(code).value;
|
||||||
|
}
|
||||||
|
return val;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
// 符号
|
||||||
|
// 🔥❓👉
|
||||||
|
// 0️⃣1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣8️⃣9️⃣🔟
|
||||||
|
// ©️⭐🔍〰️➖
|
||||||
|
const renderer = new marked.Renderer();
|
||||||
|
const originRenderer = _.cloneDeep(renderer);
|
||||||
|
|
||||||
|
// 图片调整300px
|
||||||
|
renderer.image = function (href, title, text) {
|
||||||
|
// console.log("href, title, text", href, title, text);
|
||||||
|
// <div class="desc">${text}</div>
|
||||||
|
return `<img width="300px" src="${href}" alt="${text}"/>`;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// let listSinbal="▫️ "
|
||||||
|
let listSinbal="🔸"
|
||||||
|
|
||||||
|
// 有序列表
|
||||||
|
renderer.list = function (body, ordered, start) {
|
||||||
|
|
||||||
|
// console.log("body,ordered, start", body, ordered, start);
|
||||||
|
const type = ordered ? "ol" : "ul";
|
||||||
|
// console.log("type===>", type);
|
||||||
|
const startatt = ordered && start !== 1 ? ' start="' + start + '"' : "";
|
||||||
|
// 正则取值
|
||||||
|
// const regex = /▫️\s*(.*?)<br\/?>/g;
|
||||||
|
const regex = /([^<]*)<br\/?>/g;
|
||||||
|
const input = body;
|
||||||
|
const matches = [...input.matchAll(regex)];
|
||||||
|
const texts = matches.map((match) => match[1]);
|
||||||
|
// 不含▫️的元素数量
|
||||||
|
// const diffcCount=texts.length-texts.filter(item => item.includes('▫️')).length;
|
||||||
|
// console.log("texts===>", texts); // 输出: ["测试111", "测试222", "if"]
|
||||||
|
const newArray = texts.filter((item) => item.includes(listSinbal));
|
||||||
|
// 0️⃣',
|
||||||
|
const numbers = ["1️⃣", "2️⃣", "3️⃣", "4️⃣", "5️⃣", "6️⃣", "7️⃣", "8️⃣", "9️⃣", "🔟"];
|
||||||
|
const string = texts
|
||||||
|
.map((value, index) => {
|
||||||
|
// console.log("value, index==>", value, index);
|
||||||
|
// ${ value.indexOf("▫️ ") === -1 ? '<br/><span>111</sapn>' : ""}
|
||||||
|
return value.indexOf(listSinbal) !== -1
|
||||||
|
? `<div>${
|
||||||
|
type === "ol" ? numbers[newArray.indexOf(value)] : listSinbal
|
||||||
|
}${value.replace(listSinbal, "")} </div>`
|
||||||
|
: `<div style="white-space:pre;">\t${value}</div>`;
|
||||||
|
})
|
||||||
|
.join("");
|
||||||
|
// return `1️⃣`
|
||||||
|
// console.log("string===>", string);
|
||||||
|
|
||||||
|
return `${string}`;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 无序列表 ▫️
|
||||||
|
renderer.listitem = function (text, task, checked) {
|
||||||
|
// return `<li>${text}</li>\n`;
|
||||||
|
return `${listSinbal}${text}<br/>`
|
||||||
|
// return `➖${text}<br/>`;
|
||||||
|
;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// 任务列表
|
||||||
|
renderer.checkbox = function (checked) {
|
||||||
|
// ✅❌
|
||||||
|
return !!checked ? "✅" : "❌";
|
||||||
|
return (
|
||||||
|
"<input " + (checked ? 'checked="" ' : "") + 'disabled="" type="checkbox">'
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 标题
|
||||||
|
renderer.heading = function (text, level, raw) {
|
||||||
|
// ignore IDs
|
||||||
|
// return `📋<span>${text}</span> <br/>`;
|
||||||
|
return `🔥<span>${text}</span> <br/>`;
|
||||||
|
// return `<h${level}>${text}</h${level}>\n`;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 分隔符
|
||||||
|
renderer.hr = function () {
|
||||||
|
// return '<hr>\n';
|
||||||
|
return "➖➖➖➖➖<br/>";
|
||||||
|
};
|
||||||
|
|
||||||
|
// 内联样式,使用直角引号「」
|
||||||
|
renderer.codespan = function (text) {
|
||||||
|
// return `「${text}」`;
|
||||||
|
return `『${text}』`;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 引用符号
|
||||||
|
renderer.blockquote = function (quote) {
|
||||||
|
// console.log("quote", quote);
|
||||||
|
var regex = /<p>(.*?)<\/p>/;
|
||||||
|
var str = quote;
|
||||||
|
var match = regex.exec(str);
|
||||||
|
if (match != null) {
|
||||||
|
var content = match[1]; // 获取第一个捕获组的内容
|
||||||
|
// console.log(content);
|
||||||
|
}
|
||||||
|
// <pre></pre>
|
||||||
|
//
|
||||||
|
return `<span style="white-space:pre;" class="blockquote">\t 👉${content}</span><br/> `;
|
||||||
|
};
|
||||||
|
|
||||||
|
renderer.table = function (header, body) {
|
||||||
|
if (body) body = `<tbody>${body}</tbody>`;
|
||||||
|
|
||||||
|
return (
|
||||||
|
"📊 表格 📊<br/><table>\n" +
|
||||||
|
"<thead>\n" +
|
||||||
|
header +
|
||||||
|
"</thead>\n" +
|
||||||
|
body +
|
||||||
|
"</table>\n"
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
renderer.tablerow = function (content) {
|
||||||
|
return `<tr>\n${content}</tr>\n`;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
renderer.tablecell = function (content, flags) {
|
||||||
|
const type = flags.header ? "th" : "td";
|
||||||
|
const tag = flags.align ? `<${type} align="${flags.align}">` : `<${type}>`;
|
||||||
|
return tag + `|${content}` + `</${type}>\n`;
|
||||||
|
};
|
||||||
|
|
||||||
|
function cleanUrl(href) {
|
||||||
|
try {
|
||||||
|
href = encodeURI(href).replace(/%25/g, '%');
|
||||||
|
} catch (e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return href;
|
||||||
|
}
|
||||||
|
|
||||||
|
renderer.link = function (href, title, text) {
|
||||||
|
const cleanHref = cleanUrl(href);
|
||||||
|
if (cleanHref === null) {
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
href = cleanHref;
|
||||||
|
let out = '<a href="' + href + '"';
|
||||||
|
if (title) {
|
||||||
|
out += ' title="' + title + '"';
|
||||||
|
}
|
||||||
|
out += ">" +`🌐`+ text + "</a>";
|
||||||
|
// out += ">" +`🌐`+ text + "</a>"+`(${href})`;
|
||||||
|
|
||||||
|
return out;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 使用拓展
|
||||||
|
marked.use({ renderer });
|
||||||
|
|
||||||
// export default class Index extends Component {
|
// export default class Index extends Component {
|
||||||
const Index = () => {
|
const Index = () => {
|
||||||
const [current, setcurrent] = useState(0);
|
const [markText, setmarkText] = useState(``);
|
||||||
const [openId, setopenId] = useState(null);
|
const [oldmarkText, setoldmarkText] = useState(null);
|
||||||
const [h5openid, seth5openid] = useState(null);
|
const [currentRender, setcurrentRender] = useState(null);
|
||||||
|
const [markdownTable, setmarkdownTable] = useState();
|
||||||
const [wxid, setwxid] = useState(null);
|
const [tablecellArr, settablecellArr] = useState([]);
|
||||||
|
|
||||||
const [isOpened, setisOpened] = useState(false);
|
|
||||||
const [joinMeetup, setjoinMeetup] = useState(false);
|
|
||||||
|
|
||||||
const [id, setid] = useState(null);
|
|
||||||
const [userInfo, setuserInfo] = useState({
|
|
||||||
wxid: null,
|
|
||||||
openId: null,
|
|
||||||
h5openid: null,
|
|
||||||
bighead: null,
|
|
||||||
city: null,
|
|
||||||
country: null,
|
|
||||||
generator: null,
|
|
||||||
id: null,
|
|
||||||
labels: null,
|
|
||||||
nickname: null,
|
|
||||||
province: null,
|
|
||||||
remark: null,
|
|
||||||
sex: null, //男
|
|
||||||
smallhead: null,
|
|
||||||
source: null,
|
|
||||||
sourceStr: null,
|
|
||||||
usertype: null,
|
|
||||||
v1: null,
|
|
||||||
wxaccount: null,
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const onConfirm = (onConfirmtxt) => {
|
||||||
|
console.log("onConfirmtxt--->", onConfirmtxt.detail.value);
|
||||||
|
};
|
||||||
|
const onBlur = (onBlurtxt) => {
|
||||||
|
console.log("onBlurtxt--->", onBlurtxt.detail.value);
|
||||||
|
if (onBlurtxt.detail.value) {
|
||||||
|
setmarkText(onBlurtxt.detail.value);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const onInput = (onInputtxt) => {
|
||||||
|
console.log("onInputtxt--->", onInputtxt.detail.value);
|
||||||
|
if (onInputtxt.detail.value) {
|
||||||
|
setmarkText(onInputtxt.detail.value);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const onBridgeReady = () => {
|
const onBridgeReady = () => {
|
||||||
WeixinJSBridge.call("hideOptionMenu");
|
WeixinJSBridge.call("hideOptionMenu");
|
||||||
};
|
};
|
||||||
|
|
||||||
useEffect(()=>{
|
useEffect(() => {}, []);
|
||||||
// window.alert('1111')
|
|
||||||
getopenId()
|
|
||||||
},[])
|
|
||||||
|
|
||||||
const h5openidUser = () => {
|
|
||||||
try {
|
|
||||||
const params = Taro.getCurrentInstance().router.params;
|
|
||||||
let hashopenid = window.localStorage.getItem("h5openid");
|
|
||||||
let localwxid = window.localStorage.getItem("wxid");
|
|
||||||
//发起网络请求
|
|
||||||
Taro.request({
|
|
||||||
// url: "/api/addH5openid",
|
|
||||||
url: "https://kunpeng.hackrobot.cn/addH5openid",
|
|
||||||
data: {
|
|
||||||
h5openid: hashopenid ?? null,
|
|
||||||
wxid: localwxid ?? null, //debug eric 的wxid
|
|
||||||
},
|
|
||||||
success: function (resUser) {
|
|
||||||
console.log(resUser);
|
|
||||||
console.log(resUser.data);
|
|
||||||
setuserInfo({ ...resUser.data });
|
|
||||||
},
|
|
||||||
});
|
|
||||||
} catch (e) {
|
|
||||||
} finally {
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
let $instance = Taro.getCurrentInstance();
|
|
||||||
console.log($instance.router.params);
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
// 获取openid
|
|
||||||
const getopenId = () => {
|
|
||||||
let hashopenid = null;
|
|
||||||
if (window.location.href.includes("openid")) {
|
|
||||||
hashopenid = window.location.href
|
|
||||||
.split("#")[0]
|
|
||||||
.split("?")[1]
|
|
||||||
.split("=")[1];
|
|
||||||
} else {
|
|
||||||
hashopenid = window.localStorage.getItem("h5openid");
|
|
||||||
}
|
|
||||||
if (!!hashopenid && hashopenid != "undefined" && hashopenid != "null") {
|
|
||||||
window.localStorage.setItem("h5openid", hashopenid);
|
|
||||||
let localwxid = window.localStorage.getItem("wxid");
|
|
||||||
seth5openid(hashopenid);
|
|
||||||
// 查询用户信息
|
|
||||||
h5openidUser();
|
|
||||||
} else {
|
|
||||||
// 获取路由参数
|
|
||||||
const params = Taro.getCurrentInstance().router.params;
|
|
||||||
console.log("params", params);
|
|
||||||
|
|
||||||
if (params?.wxid) {
|
|
||||||
// 本地存储
|
|
||||||
window.localStorage.setItem("wxid", params?.wxid ?? "");
|
|
||||||
setwxid(params?.wxid);
|
|
||||||
let nowUrl = window.location.href;
|
|
||||||
let payUrl = `https://payjs.cn/api/openid?mchid=1561724891&callback_url=${nowUrl}`;
|
|
||||||
window.location.href = payUrl;
|
|
||||||
}else{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
const joinmeet = () => {
|
|
||||||
Taro.request({
|
|
||||||
method: "POST",
|
|
||||||
url: "/api/payh5", //仅为示例,并非真实的接口地址
|
|
||||||
// url: "https://pay.hackrobot.cn/api/payh5", //仅为示例,并非真实的接口地址
|
|
||||||
|
|
||||||
data: {
|
|
||||||
callback_url: window.location.href,
|
|
||||||
openid: window.localStorage.getItem("openid"),
|
|
||||||
},
|
|
||||||
header: {
|
|
||||||
"content-type": "application/json", // 默认值
|
|
||||||
},
|
|
||||||
success: function (res) {
|
|
||||||
console.log(res.data);
|
|
||||||
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") {
|
|
||||||
// 邀请加入微信群
|
|
||||||
joinWechat();
|
|
||||||
WeixinJSBridge.call("closeWindow");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
// 通过wxid加群微信群
|
|
||||||
const joinWechat = () => {
|
|
||||||
Taro.request({
|
|
||||||
url: "/api/joinwechat",
|
|
||||||
// url: "https://kunpeng.hackrobot.cn/joingroup",
|
|
||||||
data: {
|
|
||||||
// wxid: "wxid_haqoszjheyuz22",
|
|
||||||
wxid: wxid ?? null, //debug eric 的wxid
|
|
||||||
},
|
|
||||||
method: "POST",
|
|
||||||
header: {
|
|
||||||
"content-type": "application/json", // 默认值
|
|
||||||
},
|
|
||||||
success: function (resUser) {
|
|
||||||
console.log("resUser--", resUser);
|
|
||||||
console.log("加入微信群成功");
|
|
||||||
if (resUser?.data?.success == "fail") {
|
|
||||||
//已经在群聊中
|
|
||||||
handleClick("已经在群聊中", "warning");
|
|
||||||
setbtntext("已经在群聊中");
|
|
||||||
} else if (resUser?.data?.success == "ok") {
|
|
||||||
// 发送群聊邀请
|
|
||||||
handleClick("已发送群聊邀请", "warning");
|
|
||||||
setbtntext("已发送群聊邀请");
|
|
||||||
}
|
|
||||||
setdisabled(true);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View className="index">
|
<View className="index">
|
||||||
<View className="at-article">
|
<View className="left">
|
||||||
<View className="at-article__h1">微信群加入规则,请知悉</View>
|
<Textarea
|
||||||
<View className="at-article__info">
|
style="background:#fff;width:100%;min-height:80px;padding:0 30rpx;"
|
||||||
2024-04-10 hackrobot
|
autoHeight
|
||||||
</View>
|
autoFocus
|
||||||
<View className="at-article__content">
|
focus
|
||||||
<View className="at-article__section">
|
onConfirm={onConfirm}
|
||||||
<View className="at-article__h2">免费入群</View>
|
// onBlur={onBlur}
|
||||||
{/* <View className="at-article__h3">请给公众号文章点击:"在看"</View> */}
|
onInput={onInput}
|
||||||
|
maxlength={-1}
|
||||||
<View className="at-article__p">
|
showCount
|
||||||
为了防止营销广告,以及给订阅号增加曝光度,
|
/>
|
||||||
</View>
|
</View>
|
||||||
<View className="at-article__p">
|
{markText ? (
|
||||||
1. 请点击下方蓝色文字,跳转到公众号文章
|
<View
|
||||||
</View>
|
className="right"
|
||||||
<View className="at-article__p">2. 阅读到最底部,点击"在看"</View>
|
dangerouslySetInnerHTML={{ __html: marked(markText) }}
|
||||||
<View className="at-article__p">如图所示:</View>
|
></View>
|
||||||
<Image className="at-article__img" src={see} mode="widthFix" />
|
) : null}
|
||||||
<View className="at-article__p">
|
<View className="origin">
|
||||||
<span>点击跳转</span>
|
<OriginMark markText={markText} />
|
||||||
<AtIcon value="arrow-right" size="30" color="#F00"></AtIcon>
|
|
||||||
<a href="https://mp.weixin.qq.com/s/MttWjccHsMbLD0pMv1LfYQ">
|
|
||||||
云手机6:内网穿透-frp
|
|
||||||
</a>
|
|
||||||
</View>
|
|
||||||
<View className="at-article__p">
|
|
||||||
稍等几分钟.机器人检测后,会自动发送群聊邀请
|
|
||||||
</View>
|
|
||||||
<Image className="at-article__img" src={group} mode="widthFix" />
|
|
||||||
|
|
||||||
{/* <View className="at-article__p">
|
|
||||||
如果不想点击"在看",也可以选择点击
|
|
||||||
<AtIcon value="arrow-right" size="30" color="#F00"></AtIcon>
|
|
||||||
<Button
|
|
||||||
onClick={() => {
|
|
||||||
joinmeet();
|
|
||||||
}}
|
|
||||||
size="mini"
|
|
||||||
type="primary"
|
|
||||||
className="payBtn"
|
|
||||||
>
|
|
||||||
付费入群
|
|
||||||
</Button>
|
|
||||||
</View> */}
|
|
||||||
<br />
|
|
||||||
|
|
||||||
<View className="at-article__p lastWord">
|
|
||||||
声明:
|
|
||||||
<br />
|
|
||||||
本群是交流平台,请不要发送广告以及敏感内容
|
|
||||||
<br />
|
|
||||||
仅聊天,不承诺其他服务和支持
|
|
||||||
</View>
|
|
||||||
</View>
|
|
||||||
</View>
|
|
||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,13 +1,34 @@
|
|||||||
|
html,
|
||||||
|
body {
|
||||||
|
user-select: auto;
|
||||||
|
}
|
||||||
.index {
|
.index {
|
||||||
// font-size: 28px;
|
// font-size: 28px;
|
||||||
|
user-select: auto;
|
||||||
|
font-size: 16px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
// align-items: center;
|
||||||
|
// justify-content: space-between;
|
||||||
|
padding: 30px;
|
||||||
|
|
||||||
.payBtn{
|
.left {
|
||||||
// font-size: 30px;
|
width: 30%;
|
||||||
margin-left: 20px;
|
min-height: 500px;
|
||||||
top: 10px;
|
// background-color: yellow;
|
||||||
}
|
border: 1px solid red;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
.lastWord{
|
.right {
|
||||||
font-size: 25px;
|
flex: 1;
|
||||||
}
|
border: 1px solid red;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.origin{
|
||||||
|
flex: 1;
|
||||||
|
border: 1px solid red;
|
||||||
|
// padding: 20px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
36
yarn.lock
36
yarn.lock
@@ -8280,6 +8280,11 @@ markdown-table@^1.1.0:
|
|||||||
resolved "https://registry.npmmirror.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60"
|
resolved "https://registry.npmmirror.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60"
|
||||||
integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==
|
integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==
|
||||||
|
|
||||||
|
marked@^12.0.2:
|
||||||
|
version "12.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/marked/-/marked-12.0.2.tgz#b31578fe608b599944c69807b00f18edab84647e"
|
||||||
|
integrity sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==
|
||||||
|
|
||||||
math-random@^1.0.1:
|
math-random@^1.0.1:
|
||||||
version "1.0.4"
|
version "1.0.4"
|
||||||
resolved "https://registry.npmmirror.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c"
|
resolved "https://registry.npmmirror.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c"
|
||||||
@@ -11291,7 +11296,7 @@ strict-uri-encode@^2.0.0:
|
|||||||
resolved "https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
|
resolved "https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
|
||||||
integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==
|
integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==
|
||||||
|
|
||||||
"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2:
|
"string-width-cjs@npm:string-width@^4.2.0":
|
||||||
version "4.2.3"
|
version "4.2.3"
|
||||||
resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
||||||
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
||||||
@@ -11308,6 +11313,15 @@ string-width@^2.1.0, string-width@^2.1.1:
|
|||||||
is-fullwidth-code-point "^2.0.0"
|
is-fullwidth-code-point "^2.0.0"
|
||||||
strip-ansi "^4.0.0"
|
strip-ansi "^4.0.0"
|
||||||
|
|
||||||
|
string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2:
|
||||||
|
version "4.2.3"
|
||||||
|
resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
||||||
|
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
||||||
|
dependencies:
|
||||||
|
emoji-regex "^8.0.0"
|
||||||
|
is-fullwidth-code-point "^3.0.0"
|
||||||
|
strip-ansi "^6.0.1"
|
||||||
|
|
||||||
string-width@^5.0.1, string-width@^5.1.2:
|
string-width@^5.0.1, string-width@^5.1.2:
|
||||||
version "5.1.2"
|
version "5.1.2"
|
||||||
resolved "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
|
resolved "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
|
||||||
@@ -11388,7 +11402,7 @@ stringify-entities@^1.0.1:
|
|||||||
is-alphanumerical "^1.0.0"
|
is-alphanumerical "^1.0.0"
|
||||||
is-hexadecimal "^1.0.0"
|
is-hexadecimal "^1.0.0"
|
||||||
|
|
||||||
"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
|
"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
|
||||||
version "6.0.1"
|
version "6.0.1"
|
||||||
resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
|
resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
|
||||||
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
|
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
|
||||||
@@ -11409,6 +11423,13 @@ strip-ansi@^4.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
ansi-regex "^3.0.0"
|
ansi-regex "^3.0.0"
|
||||||
|
|
||||||
|
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
|
||||||
|
version "6.0.1"
|
||||||
|
resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
|
||||||
|
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
|
||||||
|
dependencies:
|
||||||
|
ansi-regex "^5.0.1"
|
||||||
|
|
||||||
strip-ansi@^7.0.1:
|
strip-ansi@^7.0.1:
|
||||||
version "7.1.0"
|
version "7.1.0"
|
||||||
resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
|
resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
|
||||||
@@ -12734,7 +12755,7 @@ widest-line@^3.1.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
string-width "^4.0.0"
|
string-width "^4.0.0"
|
||||||
|
|
||||||
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
|
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
|
||||||
version "7.0.0"
|
version "7.0.0"
|
||||||
resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
|
resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
|
||||||
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
|
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
|
||||||
@@ -12752,6 +12773,15 @@ wrap-ansi@^6.0.1:
|
|||||||
string-width "^4.1.0"
|
string-width "^4.1.0"
|
||||||
strip-ansi "^6.0.0"
|
strip-ansi "^6.0.0"
|
||||||
|
|
||||||
|
wrap-ansi@^7.0.0:
|
||||||
|
version "7.0.0"
|
||||||
|
resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
|
||||||
|
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
|
||||||
|
dependencies:
|
||||||
|
ansi-styles "^4.0.0"
|
||||||
|
string-width "^4.1.0"
|
||||||
|
strip-ansi "^6.0.0"
|
||||||
|
|
||||||
wrap-ansi@^8.1.0:
|
wrap-ansi@^8.1.0:
|
||||||
version "8.1.0"
|
version "8.1.0"
|
||||||
resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
|
resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
|
||||||
|
|||||||
Reference in New Issue
Block a user