1
0
mirror of https://codeberg.org/ilovexjp/health-code-simulator.git synced 2024-11-25 12:17:37 +08:00
This commit is contained in:
ilovexjp 2022-11-25 14:14:50 +08:00
parent 19f10ba5d9
commit 29964454b5
91 changed files with 5747 additions and 416 deletions

View File

@ -247,7 +247,7 @@ footer {
}
.link-wrapper {
margin: 2px 8px;
margin: 4px 8px;
display: flex;
flex-direction: row;
align-items: center;

View File

@ -60,7 +60,10 @@ const apps = {
color: "#bf4046",
help_text:
"<p>点击姓名、证件号、场所地址等可以修改对应信息;</p><p>点击照片可以更改或移除照片,超过 4MB 的图片可能无法在本地保存;</p><p>点击二维码展示场所码。</p>",
menu: [{ title: "场所", icon: "place", link: "ssm/checkin.html" }],
menu: [
{ title: "扫描", icon: "qr_code_scanner", link: "ssm/scan.html" },
{ title: "场所", icon: "place", link: "ssm/checkin.html" },
],
},
"shandong-hc": {
title: "山东健康通行码",
@ -163,6 +166,13 @@ const apps = {
{ title: "核酸", icon: "vaccines", link: "chongqing-hc/detail.html" },
]
},
"hebei-hc": {
title: "河北健康码",
icon: "hebei-hc/static/logo.png",
link: "hebei-hc/index.html",
color: "#926266",
help_text: "<p>点击地点名称、姓名、证件号可以修改对应信息;</p><p>点击“扫码未见异常”可以隐藏该标识。</p>",
},
};
function onIconFail(t) {

View File

@ -69,7 +69,7 @@ body {
}
.top {
background-image: url("https://static-1300672061.file.myqcloud.com/cos/code_background.png");
background-image: url("./static/code_background.png");
background-repeat: no-repeat;
background-size: 100% 100%;
}

View File

@ -3,8 +3,8 @@
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta name="viewport"
content="width=device-width,height=device-height,viewport-fit=cover,initial-scale=1,maximum-scale=1,user-scalable=0">
<meta name="theme-color" content="#368CF5">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="theme-color" content="#FFFFFF">
<meta name="apple-mobile-web-app-status-bar-style" content="default">
<link rel="manifest" href="manifest.json">
<link rel="icon" type="image/png" href="./static/logo.png">
<link rel="apple-touch-icon" sizes="64x64" href="./static/logo.png">
@ -98,14 +98,15 @@
</view>
<view class="summary">
<view class="stitle">服务说明:</view>
<view class="stext" wx:if="{{incomeType==='inside'}}">相关查询结果基于卫生健康部门数据库,数据由各检测机构提供,正在不断汇聚更新中。若有疑问,请咨询核酸检测机构。</view>
<view class="stext" wx:if="{{incomeType==='external'}}">相关查询结果由卫生健康部门数据库提供,若有疑问,请咨询核酸检测机构。</view>
<view class="stext">相关查询结果基于卫生健康部门数据库,数据由各检测机构提供,正在不断汇聚更新中。若有疑问,请咨询核酸检测机构。</view>
</view>
</view>
<script>
addStorageField("_name", "#name", "名字", "习近平", presetFilters.lastnameonly);
addStorageField("_name", "#name", "名字", "习近平", function(n) {
return null == n ? "" : 2 == n.length ? "*" + n.substring(1, 2) : 3 == n.length ? n.substring(0, 1) + "*" + n.substring(2, 3) : n.length > 3 ? n.substring(0, 1) + "**" + n.substring(3, n.length) : void 0;
});
addStorageField("_idcard", "#idcard", "身份证号", "110101195306153019", presetFilters.idcard(6, 4));
addStorageField("_phone", "#phone", "手机号码", "13019890604", presetFilters.phone());
addStorageField("_phone", "#phone", "手机号码", "13019890604", presetFilters.phone(3, 3));
// addStorageField("_covid_test_id", "#covid-test-id", "检测报告编号", "000000000000");
addStorageField("_covid_test_method", "#covid-test-method", "采样方式", "咽拭子");

View File

@ -1,7 +1,8 @@
<!DOCTYPE html>
<title>我的渝康码</title>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta name="viewport" content="width=device-width,height=device-height,viewport-fit=cover,initial-scale=1,maximum-scale=1,user-scalable=0">
<meta name="viewport"
content="width=device-width,height=device-height,viewport-fit=cover,initial-scale=1,maximum-scale=1,user-scalable=0">
<meta name="theme-color" content="#368CF5">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<link rel="manifest" href="manifest.json">
@ -11,16 +12,16 @@
<link rel="stylesheet" href="../common/nav.css">
<script src="../common/base.js"></script>
<div class="capsule capsule--wechat capsule--alternative" onclick="navigateHome();">
<div class="capsule capsule--wechat" onclick="navigateHome();">
<svg class="capsule__menu-icon" viewBox="0 0 64 28" xmlns="http://www.w3.org/2000/svg">
<circle cx="32" cy="14" r="9.5"/>
<circle cx="54" cy="14" r="6"/>
<circle cx="10" cy="14" r="6"/>
<circle cx="32" cy="14" r="9.5" />
<circle cx="54" cy="14" r="6" />
<circle cx="10" cy="14" r="6" />
</svg>
<div class="capsule__splitter"></div>
<svg class="capsule__exit-icon" viewBox="0 0 60 60" xmlns="http://www.w3.org/2000/svg">
<circle cx="30" cy="30" r="9"/>
<circle cx="30" cy="30" r="23" stroke-width="6" fill="transparent"/>
<circle cx="30" cy="30" r="9" />
<circle cx="30" cy="30" r="23" stroke-width="6" fill="transparent" />
</svg>
</div>
@ -38,14 +39,14 @@
</div>
</div>
<div class="navbar__center">
<span>我的渝康码</span>
<span style="font-weight: normal;">我的渝康码</span>
</div>
<div class="navbar__right"></div>
</div>
</div>
</view>
<view class="light-code-container">
<view class="top top_bg_mine">
<view class="top">
<view class="top-tip">温馨提示:代人申领已移至首页防疫服务的“亲友代领”</view>
<view class="top-info">
<view class="top-info-name" id="masked-info">
@ -77,13 +78,11 @@
</view>
</view>
<view class="middle">
<view bindtap="handleNavigateTo"
class="block-item nucleic-block nucleic-block__active"
>
<view class="block-item nucleic-block nucleic-block__active" onclick="window.location.href = 'detail.html';">
<view class="block-title">
<text>核酸检测</text>
</view>
<view class="block-container" onclick="window.location.href = 'detail.html';">
<view class="block-container">
<view class="block-number">24</view>
<view class="block-des">
<view class="block-des-item">小时</view>
@ -95,9 +94,7 @@
<text wx:if="{{orderState}}">({{orderNumber}}s)</text>
</view> -->
</view>
<view bindtap="handleNavigateTo"
class="block-item vaccines-block vaccines-block__active"
>
<view bindtap="handleNavigateTo" class="block-item vaccines-block vaccines-block__active">
<view class="block-title">
<text>疫苗接种</text>
</view>

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

1754
src/hebei-hc/app.css Normal file

File diff suppressed because it is too large Load Diff

265
src/hebei-hc/index.html Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,16 @@
{
"short_name": "河北健康码",
"name": "河北健康码",
"icons": [
{
"src": "static/logo.png",
"type": "image/png",
"sizes": "460x460"
}
],
"id": "ilovexjp-hebei-hc-simulator",
"start_url": ".",
"display": "standalone",
"scope": "/",
"description": "河北健康码模拟"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 320 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 B

BIN
src/hebei-hc/static/csm.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

BIN
src/hebei-hc/static/dl.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 487 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 453 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

BIN
src/hebei-hc/static/map.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 460 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1013 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

File diff suppressed because it is too large Load Diff

View File

@ -188,11 +188,6 @@ img {
box-shadow: 0 1.333vw 2.667vw hsla(0, 0%, 84.7%, 0.5);
content: "viewport-units-buggyfill; -webkit-box-shadow: 0px 1.333vw 2.667vw rgba(216, 216, 216, .5); box-shadow: 0px 1.333vw 2.667vw rgba(216, 216, 216, .5)";
}
.container header .card-info.inline .card-info-normal > span[data-v-64f646d0],
.container header .card-info.inline .card-info-normal > span[data-v-8d952c2c],
.no-before:before {
display: none;
}
.item-arrow {
padding-bottom: 2.667vw;
height: 1.333vw;
@ -529,32 +524,57 @@ ul {
letter-spacing: 0.2em;
content: "viewport-units-buggyfill; width: 26.667vw; height: 8vw; font-size: 4.8vw";
}
.container header .card-info[data-v-64f646d0],
.container header .card-info[data-v-8d952c2c] {
font-weight: 700;
font-size: 4.8vw;
content: "viewport-units-buggyfill; font-size: 4.8vw";
.container header .card-info {
font-weight:700;
display:-webkit-box;
display:-webkit-flex;
display:-ms-flexbox;
display:flex;
-webkit-box-align:start;
-ms-flex-align:start;
align-items:flex-start
}
.container header .card-info.inline > div[data-v-64f646d0],
.container header .card-info.inline > div[data-v-8d952c2c] {
vertical-align: top;
display: inline-block;
}
.container header .card-info.inline > .card-info-name[data-v-64f646d0],
.container header .card-info.inline > .card-info-name[data-v-8d952c2c] {
margin-right: 9.333vw;
content: "viewport-units-buggyfill; margin-right: 9.333vw";
}
.container header .card-info .card-info-name[data-v-64f646d0],
.container header .card-info .card-info-name[data-v-8d952c2c] {
.container header .card-info .card-info-name {
margin-bottom:1.333vw;
font-size:4.8vw;
line-height:4.8vw;
content:"viewport-units-buggyfill";
margin-bottom: 1.333vw;
content: "viewport-units-buggyfill; margin-bottom: 1.333vw";
font-size: 4.8vw;
line-height: 4.8vw;
}
.container header .card-info .card-info-normal[data-v-64f646d0],
.container header .card-info .card-info-normal[data-v-8d952c2c] {
font-size: 3.733vw;
color: #656565;
content: "viewport-units-buggyfill; font-size: 3.733vw";
.container header .card-info .card-info-right {
margin-left:4vw;
content:"viewport-units-buggyfill";
margin-left: 4vw;
}
.container header .card-info .card-info-normal {
display:-webkit-box;
display:-webkit-flex;
display:-ms-flexbox;
display:flex;
-webkit-box-align:center;
-ms-flex-align:center;
align-items:center;
font-size:3.867vw;
font-weight:400;
color:#5d5d5d;
line-height:3.867vw;
margin-bottom:.8vw;
content:"viewport-units-buggyfill";
font-size: 3.867vw;
line-height: 3.867vw;
margin-bottom: 0.8vw;
}
.container header .card-info .card-info-normal .sfz-icon {
width:4.8vw;
height:4.8vw;
margin-right:2vw;
content:"viewport-units-buggyfill";
width: 4.8vw;
height: 4.8vw;
margin-right: 2vw;
}
.container header .qrcode[data-v-8d952c2c] {
position: relative;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -48,6 +48,11 @@
onclick='window.location.href="https://t.me/gh_ilovexjp"'>
<img src="common/images/telegram-logo.svg" /> <span>@gh_ilovexjp</span>
</div>
<div
class="link-wrapper"
onclick='window.location.href="https://www.reddit.com/r/ILoveHealthCode/"'>
<img src="common/images/reddit-logo.png" /> <span>r/ILoveHealthCode</span>
</div>
</div>
<div class="links-list links-list-help">
@ -60,7 +65,7 @@
<div class="links-list links-list-help">
<div class="link-wrapper">
<a href="https://www.reddit.com/r/ILoveHealthCode/">Reddit</a>
<a href="https://codeberg.org/ilovexjp/health-code-simulator/src/branch/main/docs/FAQ.md">常见问题</a>
</div>
<div class="link-wrapper">
<a href="https://t.me/s/gh_ilovexjp/23">捐赠</a>
@ -68,11 +73,8 @@
<div class="link-wrapper">
<a id="clear-local-data">清除本地数据</a>
</div>
</div>
<div class="links-list links-list-help">
<div class="link-wrapper">
<span id="last-update" onclick="updateServiceWorker(this);">上次更新2022-11-21<span id="last-update-version"></span></span>
<span id="last-update" onclick="updateServiceWorker(this);">上次更新2022-11-25<span id="last-update-version"></span></span>
</div>
</div>
</footer>

View File

@ -2,8 +2,11 @@
<title>扫一扫</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width,height=device-height,viewport-fit=cover,initial-scale=1,maximum-scale=1,user-scalable=0">
<meta name="theme-color" content="#000000">
<meta name="theme-color" content="#FFFFFF">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<link rel="manifest" href="manifest.json">
<link rel="icon" type="image/png" href="./static/logo_jiankangbao1@2x.png">
<link rel="apple-touch-icon" sizes="128x128" href="./static/logo_jiankangbao1@2x.png">
<link rel="stylesheet" href="../common/nav.css">
<script src="../common/base.js"></script>
<style>

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 184 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1665477087240" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5128" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M960.8 515c-0.2-11.7-5.5-23.2-15.4-30.9-17.5-13.7-42.8-10.7-56.6 6.8-5.7 7.3-8.5 15.8-8.6 24.4h-0.4c-0.6 78.3-26.1 157-78 223.3-124.9 159.2-356 187.1-515.2 62.3S99.4 445 224.3 285.8c124.9-159.2 356-187.1 515.2-62.3 29.6 23.2 54.6 50.1 75 79.5H741c-22.4 0-40.7 18.3-40.7 40.7v3c0 22.4 18.3 40.7 40.7 40.7h177.3c22.4 0 40.7-18.3 40.7-40.7V169.3c0-22.4-18.3-40.7-40.7-40.7h-3c-22.4 0-40.7 18.3-40.7 40.7v78.5c-24.1-32.9-52.6-62.4-85.2-88-47.6-37.3-101-64.2-158.9-79.9C574.6 64.8 517 60.7 459.3 67.6c-57.7 7-112.7 24.7-163.3 52.8-52.5 29-98 67.9-135.3 115.4-37.3 47.6-64.2 101-79.9 158.9-15.2 55.9-19.3 113.5-12.3 171.2 7 57.7 24.7 112.7 52.8 163.3 29 52.5 67.9 98 115.4 135.3 47.6 37.3 101 64.2 158.9 79.9 55.9 15.2 113.5 19.3 171.2 12.3 57.7-7 112.7-24.7 163.3-52.8 52.5-29 98-67.9 135.3-115.4 37.3-47.6 64.2-101 79.9-158.9 10.2-37.5 15.4-75.9 15.5-114.6z" p-id="5129" fill="#870101"></path></svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1665477087240" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5128" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M960.8 515c-0.2-11.7-5.5-23.2-15.4-30.9-17.5-13.7-42.8-10.7-56.6 6.8-5.7 7.3-8.5 15.8-8.6 24.4h-0.4c-0.6 78.3-26.1 157-78 223.3-124.9 159.2-356 187.1-515.2 62.3S99.4 445 224.3 285.8c124.9-159.2 356-187.1 515.2-62.3 29.6 23.2 54.6 50.1 75 79.5H741c-22.4 0-40.7 18.3-40.7 40.7v3c0 22.4 18.3 40.7 40.7 40.7h177.3c22.4 0 40.7-18.3 40.7-40.7V169.3c0-22.4-18.3-40.7-40.7-40.7h-3c-22.4 0-40.7 18.3-40.7 40.7v78.5c-24.1-32.9-52.6-62.4-85.2-88-47.6-37.3-101-64.2-158.9-79.9C574.6 64.8 517 60.7 459.3 67.6c-57.7 7-112.7 24.7-163.3 52.8-52.5 29-98 67.9-135.3 115.4-37.3 47.6-64.2 101-79.9 158.9-15.2 55.9-19.3 113.5-12.3 171.2 7 57.7 24.7 112.7 52.8 163.3 29 52.5 67.9 98 115.4 135.3 47.6 37.3 101 64.2 158.9 79.9 55.9 15.2 113.5 19.3 171.2 12.3 57.7-7 112.7-24.7 163.3-52.8 52.5-29 98-67.9 135.3-115.4 37.3-47.6 64.2-101 79.9-158.9 10.2-37.5 15.4-75.9 15.5-114.6z" p-id="5129" fill="#FFAD4E"></path></svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 364 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -1,206 +1,209 @@
<!DOCTYPE html>
<title>随申</title>
<title>场所</title>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta name="viewport" content="width=device-width,height=device-height,viewport-fit=cover,initial-scale=1,maximum-scale=1,user-scalable=0">
<meta name="theme-color" content="#DDC089">
<meta name="viewport"
content="width=device-width,height=device-height,viewport-fit=cover,initial-scale=1,maximum-scale=1,user-scalable=0">
<meta name="theme-color" content="#FFFFFF">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<link rel="manifest" href="manifest.json">
<link rel="icon" type="image/png" href="./static/ssbapp-logo.png">
<link rel="apple-touch-icon" sizes="492x492" href="./static/ssbapp-logo.png">
<link rel="stylesheet" href="app.css">
<link rel="stylesheet" href="../common/nav.css">
<link href="./static/app.cbd0be69.css" rel="stylesheet">
<script src="../common/base.js"></script>
<style>
.eyes-open #img-eyes-open {
display: block;
}
.eyes-open #img-eyes-closed {
display: none;
}
<body style="font-size: 12px;">
<div class="capsule capsule--wechat" onclick="navigateHome();">
<svg class="capsule__menu-icon" viewBox="0 0 64 28" xmlns="http://www.w3.org/2000/svg">
<circle cx="32" cy="14" r="9.5" />
<circle cx="54" cy="14" r="6" />
<circle cx="10" cy="14" r="6" />
</svg>
<div class="capsule__splitter"></div>
<svg class="capsule__exit-icon" viewBox="0 0 60 60" xmlns="http://www.w3.org/2000/svg">
<circle cx="30" cy="30" r="9" />
<circle cx="30" cy="30" r="23" stroke-width="6" fill="transparent" />
</svg>
</div>
#img-eyes-open {
display: none;
}
<div class="navbar navbar--wechat">
<div class="navbar__placeholder"></div>
<div class="navbar__inner" style="background: white;">
<div class="navbar__left">
<div class="navbar__buttons">
<div class="navbar__button-goback" onclick="history.back();"></div>
</div>
</div>
<div class="navbar__center">
<span>场所码</span>
</div>
<div class="navbar__right"></div>
</div>
</div>
#img-eyes-closed {
display: block;
}
</style>
<div class="capsule capsule--wechat" onclick="navigateHome();">
<svg class="capsule__menu-icon" viewBox="0 0 64 28" xmlns="http://www.w3.org/2000/svg">
<circle cx="32" cy="14" r="9.5" />
<circle cx="54" cy="14" r="6" />
<circle cx="10" cy="14" r="6" />
</svg>
<div class="capsule__splitter"></div>
<svg class="capsule__exit-icon" viewBox="0 0 60 60" xmlns="http://www.w3.org/2000/svg">
<circle cx="30" cy="30" r="9" />
<circle cx="30" cy="30" r="23" stroke-width="6" fill="transparent" />
</svg>
</div>
<view class="top" style="height: 58px; padding-top: env(safe-area-inset-top, 0); box-sizing: content-box;">
<image src="./static/suishenma_bg.png" style="width:100%;height:813.11px;"></image>
<view class="text" style="bottom:3.333vw">随申码</view>
<view bindtap="goBack" class="back">
<image src="./static/back.png" onclick="history.back();"></image>
</view>
</view>
<view class="page" style="padding-top: 58px; padding-top: calc(58px + env(safe-area-inset-top, 0));">
<canvas class="my-qrcode" id="myQrcode" type="2d"></canvas>
<view class="content contentBox">
<view style="height: 7.467vw;">
<image class="title" src="./static/suishenma_title.png"></image>
</view>
<view style="display: flex;justify-content: center;margin-top: 4.267vw;">
<view class="photo photoPicAfter">
<image class="photoPic" mode="aspectFit" src="./static/suishenma_logo.png" id="_img"></image>
</view>
</view>
<view class="nameBox">
<view class="tainerBox eyes-open">
<view class="name" id="_name"></view>
<view bindtap="handleShowName" class="nameHide" id="img-eyes-open" onclick="switchNameDisplay(false);">
<image src="./static/eysOpen.png" style="width:5.333vw;height:5.333vw;"></image>
</view>
<view bindtap="handleShowName" class="nameHide" id="img-eyes-closed" onclick="switchNameDisplay(true);">
<image src="./static/eyeClose.png" style="width:5.333vw;height:5.333vw;"></image>
</view>
</view>
</view>
<view class="time">
<span id="_date"></span>
<span id="_time"></span><span class="timeSecond" id="_sec"></span>
</view>
<view style="display: flex;justify-content: center;margin-top: 2.133vw;"
onclick="window.location.href = './index.html';">
<view class="qrCode">
<view
style="background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXIAAAFyCAIAAABnRsZeAAAIQElEQVR4nO3cMXLzuhWA0SijxllW9uIs6u3Fb1lpmfYvMnCBDwZIn9NqLFEU/Q2KO/f18fX5j2f577//Grz6r7//s+Vvx+54VWNn3o1d7njNM/65+wKAp5EVICYrQExWgJisADFZAWKyAsRkBYjJChB7j1+emZVcZ9305x3naNd97q7vO2PXE7tuUvaO/4NOK0BMVoCYrAAxWQFisgLEZAWIyQoQkxUgJitA7Jsp27HnTRbumv78bVtjz9zdO3bmxtkz/wedVoCYrAAxWQFisgLEZAWIyQoQkxUgJitATFaA2NSU7R3tmkrcNc86Zqfsn2au+cyNs7s4rQAxWQFisgLEZAWIyQoQkxUgJitATFaAmKwAsV83ZTu2bi/szN+eudt11w7ddXb9gs/jtALEZAWIyQoQkxUgJitATFaAmKwAMVkBYrICxKambJ83OzgzK7lu6nTXBOeuvbC7Zo7P3Dc8dub/oNMKEJMVICYrQExWgJisADFZAWKyAsRkBYjJChD7Zsp21+zgLs+b4Fw3oXvm932eO94NpxUgJitATFaAmKwAMVkBYrICxGQFiMkKEJMVIPa6rmv3NfyoXXthx9ZtjV03o7lrh+6Z21v5k9MKEJMVICYrQExWgJisADFZAWKyAsRkBYjJChB775poPHPX6bpp111mrmp8N86chV13VXfcKTu27m44rQAxWQFisgLEZAWIyQoQkxUgJitATFaAmKwAsW922Z45szgzg3vmLOzYuonkM3/BXc58Jnfd55lrdloBYrICxGQFiMkKEJMVICYrQExWgJisADFZAWLv8cu75v9mtqiOnTkbesc9qeuejTMng59n3X12WgFisgLEZAWIyQoQkxUgJitATFaAmKwAMVkBYq+Pr8/By2fOle7a0Hnm9OeuuzFj15088zc681cYs8sW+FGyAsRkBYjJChCTFSAmK0BMVoCYrAAxWQFi7zPn/8ZmrmrXNc/4bbO/Y2fuo73jczVj/Cs4rQAxWQFisgLEZAWIyQoQkxUgJitATFaAmKwAsdd1XYOX7zjReMc9qTOfu86ZO4PH1r3zjDOfjXX/R04rQExWgJisADFZAWKyAsRkBYjJChCTFSAmK0Ds9fH1OXh51ybUXc7cSLprp+yuSdkZ6yZHz/zbXUzZAj9KVoCYrAAxWQFisgLEZAWIyQoQkxUgJitAbOGU7Yxd+2jHnreB9bf9vmdOUY/d8blyWgFisgLEZAWIyQoQkxUgJitATFaAmKwAMVkBYq/rugYvP28j6ZnOvM8z7vgb3XFb7Zl7cJ1WgJisADFZAWKyAsRkBYjJChCTFSAmK0BMVoDYN1O2M3bNLI6tm2g883NnnHmvzpxYPfN53vXOTitATFaAmKwAMVkBYrICxGQFiMkKEJMVICYrQOw9fvnMjaQzV3XmFtXnTY6O7frbXdb9CrveecxpBYjJChCTFSAmK0BMVoCYrAAxWQFisgLEZAWIfbPL9sz9nWfa9X3vOHU6duZe2F3OfHLssgV+lKwAMVkBYrICxGQFiMkKEJMVICYrQExWgNjCKdsZZ847jq2b7zxzcvSO3/fM7cszzrxXTitATFaAmKwAMVkBYrICxGQFiMkKEJMVICYrQGxqynaXmV2nM++8zplTmDN2PTnrno11nvc8O60AMVkBYrICxGQFiMkKEJMVICYrQExWgJisALH3+OWZ+b8zN92eOYW5biPpmTOad9zOe+aE7tiuX99pBYjJChCTFSAmK0BMVoCYrAAxWQFisgLEZAWIvXdNyo6deVXPuxszE7rjz113Vesmv+84NT62a27YaQWIyQoQkxUgJitATFaAmKwAMVkBYrICxGQFiL1nZgd3bSQ9cxpy1wzujOdtb52x7m48779szGkFiMkKEJMVICYrQExWgJisADFZAWKyAsRkBYi9Pr4+By+fOXc4duZm0F13ctce3LEzJ5LP/BV2Pc8znFaAmKwAMVkBYrICxGQFiMkKEJMVICYrQExWgNjruq7d1/B/nDkpO/POu5x5J+84GTy26xuN7XqenVaAmKwAMVkBYrICxGQFiMkKEJMVICYrQExWgNh73VvPTBbecZJybNdV7Zr+3LWf9cx51ufNdo+v2WkFiMkKEJMVICYrQExWgJisADFZAWKyAsRkBYi9Pr4+F731mRs61znz++6adn3epttdd/JM47vhtALEZAWIyQoQkxUgJitATFaAmKwAMVkBYrICxF7Xde2+hh+1axpy19TpDBOrf9o1+zt25syx0woQkxUgJitATFaAmKwAMVkBYrICxGQFiMkKEHufOdE4Y91E48znztznO26cfd5k8Dq7JnTXcVoBYrICxGQFiMkKEJMVICYrQExWgJisADFZAWKvj6/PwctnTvjt2t+5zrqZ1DO3qO7627EzZ3/HzpySd1oBYrICxGQFiMkKEJMVICYrQExWgJisADFZAWLvmT9+3lTirqnidXO0u77v8z535j6fOQu7jtMKEJMVICYrQExWgJisADFZAWKyAsRkBYjJChCbmrK9o107VnfZtdt13eeeufd317Nx5ryy0woQkxUgJitATFaAmKwAMVkBYrICxGQFiMkKEPt1U7ZjZ05wjt1xMnjmc8/8vut+313zyjOcVoCYrAAxWQFisgLEZAWIyQoQkxUgJitATFaA2NSU7bopvV3WTWHumg294xzt2B03zo7dce/vmNMKEJMVICYrQExWgJisADFZAWKyAsRkBYjJChD7Zsp219zhOnf8Rmfuwb3j5+5yxx3JY+NrdloBYrICxGQFiMkKEJMVICYrQExWgJisADFZAWL/A32nk4AKWFFIAAAAAElFTkSuQmCC'); background-size: 85% 85%; background-position: center; background-repeat:no-repeat; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center;">
<img src="./static/logo.png" style="width: 12vw; height: 12vw;">
</view>
</view>
</view>
<view class="qrText"> 绿色 </view>
<view class="yimaduoyong">
<view class="btn3">
<view class="place" id="_place_address_line1"></view>
<view class="address" id="_place_address_line2"></view>
</view>
</view>
<view class="hesuan">
<view style="color: #333333;">
<text style="color: #09BD65;font-weight:bold;font-size:10.667vw;">24</text> 小时内核酸检测结果<text
style="color: #09BD65;font-weight:bold;">【阴性】</text>
</view>
</view>
</view>
<view class="more contentBox">
<view class="rec-swiper" style="height:19.467vw">
<view class="case">
<view bindtap="goHesuan" class="caseItem">
<view style="width:14.4vw;height:14.4vw;">
<image class="caseItemIcon" src="./static/nucleic_acid_vaccine.png"></image>
</view>
<view class="caseItemName">疫苗&核酸</view>
</view>
<view bindtap="handleClickMoreItem" class="caseItem">
<view style="width:14.4vw;height:14.4vw;">
<image class="caseItemIcon" src="./static/newhscyd.png"></image>
</view>
<view class="caseItemName">采样点</view>
</view>
<view bindtap="handleClickMoreItem" class="caseItem">
<view style="width:14.4vw;height:14.4vw;">
<image class="caseItemIcon" src="./static/kangyuan.png"></image>
</view>
<view class="caseItemName">抗原查询</view>
</view>
<view bindtap="goXingchengma" class="caseItem" onclick="navigateToTripCard();">
<view style="width:14.4vw;height:14.4vw;">
<image class="caseItemIcon" src="./static/icon_xingcheng.png"></image>
</view>
<view class="caseItemName">行程卡</view>
</view>
</view>
</view>
<view ariaHidden="true" class="dots-rec2" style="margin-top: 1.867vw;">
<view class="dot2 active"></view>
<view class="dot2"></view>
</view>
<view class="link">
<text bindtap="goQa">常见问题</text>
<text>|</text>
<text bindtap="goKf">智能客服</text>
<text>|</text>
<text bindtap="toScan">扫码记录</text>
<text>|</text>
<text bindtap="goShensu">我要申诉</text>
</view>
</view>
</view>
<input type="file" style="display: none;" id="upload" oninput="onInput(this);">
<script>
setDynamicTime("#_date", 0, 10);
setDynamicTime("#_time", 11, 17);
setDynamicTime("#_sec", 17, 19);
addStorageField("_place_address_line1", "#_place_address_line1", "场所地址(第一行)", "地铁");
addStorageField("_place_address_line2", "#_place_address_line2", "场所地址(第二行)", "地铁11号线");
let _name = localStorage.getItem("_name") || "习近平";
document.getElementById("_name").addEventListener("click", () => {
const res = window.prompt("修改名字:", _name);
if (res == "" || res == null) localStorage.removeItem("_name");
else localStorage.setItem("_name", res);
_name = res || "习近平";
switchNameDisplay(show_name);
});
let show_name = false;
function switchNameDisplay(t) {
show_name = t;
const hidden_name = new Array(_name.length).join("*") + _name.substr(-1);
document.getElementById("_name").innerText = show_name ? _name : hidden_name;
document.getElementsByClassName("tainerBox")[0].classList.add(t ? "eyes-open" : "eyes-closed");
document.getElementsByClassName("tainerBox")[0].classList.remove(t ? "eyes-closed" : "eyes-open");
}
switchNameDisplay(false);
const default_img = "./static/suishenma_logo.png";
document.getElementById("_img").attributes["src"].value = localStorage.getItem("_img") || default_img;
document.getElementById("_img").addEventListener("click", () => {
if (localStorage.getItem("_img")) {
localStorage.removeItem("_img");
document.getElementById("_img").attributes["src"].value = default_img;
return;
<div id="app">
<div>
<div class="qr-wap">
<div class="qr__main location">
<div class="qr__main__img">
<img src="./static/title.9e6c09b.png">
</div>
<div class="qr__main__logo">
<div class="qr__main__logo_img" id="_img" style="background-image: url(./static/default_head.59cc591.png);"></div>
<div class="qr__main__logo__idcard" style="display: none;"></div>
<input type="file" style="display: none;" id="upload" oninput="onInput(this);">
</div>
<div class="qr__main__name qr__main__name_no_service">
<span>
<span id="masked-name" style="display: inline;"></span>
<span id="name" style="display: none;"></span>
<i class="qr__main__name__open close" onclick="toggleMask();"></i>
</span>
</div>
<div class="qr__main__date location qr__main__date_no_service">
<span id="datetime"></span><strong id="sec"></strong>
</div>
<div class="qr__main__wapper">
<div class="qr__main__ewm" onclick="window.location.href = 'index.html';">
<div>
<div style="display: flex; align-items: center; justify-content: center;">
<img src="./static/logo.png" style="width: 11vw; height: 11vw; position: absolute;">
<img class="qr__main__ewm__obj" style="display: inline-block;"
src="data:image/png;base64,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">
</div>
</div>
</div>
</div>
<div class="qr__main__status-text" style="color: rgb(9, 189, 101);">
绿色
</div>
<div class="qr__main__tip strong qr__main__tip_no_service" style="letter-spacing: 0px; margin-bottom: 0px;">
<p class="qr__location-name"></p>
<p class="qr__location-address"></p>
</div>
<div class="qr__main__hesuan">
<p><strong style="color: rgb(9, 189, 101);">
24
</strong>
小时内核酸检测结果
<span style="color: rgb(9, 189, 101);">【阴性】</span>
</p>
</div>
</div>
<div class="qr__bottom">
<div class="more_service location">
<div class="my-swipe van-swipe">
<div class="van-swipe__track">
<div class="van-swipe-item">
<div class="more_service_ul location" style="justify-content: space-between;"><a href="javascript:;"
class="li"><img src="./static/hsym.png">
<div style="color: rgb(0, 0, 0);">
核酸&amp;疫苗
</div>
</a><a href="javascript:;" class="li" onclick="navigateToTripCard();"><img src="./static/xck.png">
<div style="color: rgb(0, 0, 0);">
行程卡
</div>
</a><a href="javascript:;" class="li"><img src="./static/txz.png">
<div style="color: rgb(0, 0, 0);">
通行证
</div>
</a><a href="javascript:;" class="li"><img src="./static/fkdj.png">
<div style="color: rgb(0, 0, 0);">
访客登记
</div>
</a></div>
</div>
</div>
</div>
</div>
<div class="qr__main__link"><span class="strong">常见问题</span> <span class="strong split">|</span> <span
class="strong">智能客服</span> <span class="strong split">|</span> <span class="strong">我要申诉</span></div>
</div>
</div>
</div>
</div>
<script>
(function (win, lib) { var doc = win.document; var docEl = doc.documentElement; var metaEl = doc.querySelector('meta[name="viewport"]'); var flexibleEl = doc.querySelector('meta[name="flexible"]'); var dpr = 0; var scale = 0; var tid; var flexible = lib.flexible || (lib.flexible = {}); if (metaEl) { console.warn("将根据已有的meta标签来设置缩放比例"); var match = metaEl.getAttribute("content").match(/initial\-scale=([\d\.]+)/); if (match) { scale = parseFloat(match[1]); dpr = parseInt(1 / scale) } } else { if (flexibleEl) { var content = flexibleEl.getAttribute("content"); if (content) { var initialDpr = content.match(/initial\-dpr=([\d\.]+)/); var maximumDpr = content.match(/maximum\-dpr=([\d\.]+)/); if (initialDpr) { dpr = parseFloat(initialDpr[1]); scale = parseFloat((1 / dpr).toFixed(2)) } if (maximumDpr) { dpr = parseFloat(maximumDpr[1]); scale = parseFloat((1 / dpr).toFixed(2)) } } } } if (!dpr && !scale) { var isAndroid = win.navigator.appVersion.match(/android/gi); var isIPhone = win.navigator.appVersion.match(/iphone/gi); var devicePixelRatio = win.devicePixelRatio; if (isIPhone) { if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) { dpr = 3 } else { if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)) { dpr = 2 } else { dpr = 1 } } } else { dpr = 1 } scale = 1 / dpr } docEl.setAttribute("data-dpr", dpr); if (!metaEl) { metaEl = doc.createElement("meta"); metaEl.setAttribute("name", "viewport"); metaEl.setAttribute("content", "initial-scale=" + scale + ", maximum-scale=" + scale + ", minimum-scale=" + scale + ", user-scalable=no"); if (docEl.firstElementChild) { docEl.firstElementChild.appendChild(metaEl) } else { var wrap = doc.createElement("div"); wrap.appendChild(metaEl); doc.write(wrap.innerHTML) } } function refreshRem() { var width = docEl.getBoundingClientRect().width; if (width / dpr > 540) { width = 540 * dpr } var rem = width / 10; docEl.style.fontSize = rem + "px"; flexible.rem = win.rem = rem } win.addEventListener("resize", function () { clearTimeout(tid); tid = setTimeout(refreshRem, 300) }, false); win.addEventListener("pageshow", function (e) { if (e.persisted) { clearTimeout(tid); tid = setTimeout(refreshRem, 300) } }, false); if (doc.readyState === "complete") { doc.body.style.fontSize = 12 * dpr + "px" } else { doc.addEventListener("DOMContentLoaded", function (e) { doc.body.style.fontSize = 12 * dpr + "px" }, false) } refreshRem(); flexible.dpr = win.dpr = dpr; flexible.refreshRem = refreshRem; flexible.rem2px = function (d) { var val = parseFloat(d) * this.rem; if (typeof d === "string" && d.match(/rem$/)) { val += "px" } return val }; flexible.px2rem = function (d) { var val = parseFloat(d) / this.rem; if (typeof d === "string" && d.match(/px$/)) { val += "rem" } return val } })(window, window["lib"] || (window["lib"] = {}));
</script>
<script>
function clip(n, t = 15) {
return {
first: n.substring(0, t),
second: n.length <= 2 * t ? n.substring(t) : n.substring(t, 2 * t) + "...",
};
}
const input = document.getElementById("upload");
input.click();
});
function onInput(t) {
// getting a hold of the file reference
const file = t.files[0];
setDynamicTime("#datetime", 0, 17);
setDynamicTime("#sec", 17, 19);
addStorageField("_name", "#masked-name", "名字", "习近平", (s) => {
return "* ".repeat(s.length - 1) + s.slice(-1);
});
addStorageField("_name", "#name", "名字", "习近平");
addStorageField("_place_address_line1", ".qr__location-name",
"场所名称(第一行)", "16号线华夏中路站", (s) => {
const res = clip(s, 15);
return `${res.first}<span style="white-space: nowrap;"><br>${res.second}</span>`;
}
);
addStorageField("_place_address_line2", ".qr__location-address",
"场所地址(第二行)", "上海市/浦东新区/北蔡镇/罗山路4151号", (s) => {
const res = clip(s, 17);
return `${res.first}<span style="white-space: nowrap;"><br>${res.second}</span>`;
}
);
// setting up the reader
const reader = new FileReader();
// here we tell the reader what to do when it's done reading...
reader.onload = readerEvent => {
const content = readerEvent.target.result; // this is the content!
if (content) {
try {
localStorage.setItem("_img", content);
} catch (e) {
alert("照片文件较大,暂时不能保存在本地。");
localStorage.setItem("_img", default_img);
}
document.getElementById("_img").attributes["src"].value = content;
function toggleMask() {
const eye_icon = document.querySelector(".qr__main__name__open");
if (eye_icon.classList.contains("close")) {
eye_icon.classList.remove("close");
document.getElementById("masked-name").style.display = "none";
document.getElementById("name").style.display = "inline";
} else {
eye_icon.classList.add("close");
document.getElementById("masked-name").style.display = "inline";
document.getElementById("name").style.display = "none";
}
}
reader.readAsDataURL(file); // this is reading as data url
}
const default_img = "./static/default_head.59cc591.png";
if (localStorage.getItem("_img")) {
document.getElementById("_img").style.backgroundImage = `url(${localStorage.getItem("_img")})`;
document.querySelector(".qr__main__logo__idcard").style.display = "block";
}
initServiceWorker("ssm");
</script>
document.getElementById("_img").addEventListener("click", () => {
if (localStorage.getItem("_img")) {
localStorage.removeItem("_img");
document.getElementById("_img").style.backgroundImage = `url(${default_img})`;
document.querySelector(".qr__main__logo__idcard").style.display = "none";
return;
}
const input = document.getElementById("upload");
input.click();
});
function onInput(t) {
const file = t.files[0];
const reader = new FileReader();
reader.onload = readerEvent => {
const content = readerEvent.target.result;
if (content) {
try {
localStorage.setItem("_img", content);
} catch (e) {
alert("照片文件较大,暂时不能保存在本地。");
localStorage.setItem("_img", default_img);
}
document.getElementById("_img").style.backgroundImage = `url(${content})`;
document.querySelector(".qr__main__logo__idcard").style.display = "block";
}
}
reader.readAsDataURL(file);
}
initServiceWorker("ssm");
</script>
</body>

View File

@ -50,7 +50,7 @@
<image class="title" src="./static/suishenma_title.png"></image>
</view>
<view style="display: flex;justify-content: center;margin-top: 4.267vw;">
<view class="photo photoPicAfter">
<view class="photo">
<image class="photoPic" mode="aspectFit" src="./static/suishenma_logo.png" id="_img"></image>
</view>
</view>
@ -75,7 +75,7 @@
<span id="_date"></span>
<span id="_time"></span><span class="timeSecond" id="_sec"></span>
</view>
<view style="display: flex;justify-content: center;margin-top: 2.133vw;" onclick="window.location.href = './checkin.html';">
<view style="display: flex;justify-content: center;margin-top: 2.133vw;" onclick="window.location.href = './scan.html';">
<view class="qrCode">
<view style="background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXIAAAFyCAIAAABnRsZeAAAIQElEQVR4nO3cMXLzuhWA0SijxllW9uIs6u3Fb1lpmfYvMnCBDwZIn9NqLFEU/Q2KO/f18fX5j2f577//Grz6r7//s+Vvx+54VWNn3o1d7njNM/65+wKAp5EVICYrQExWgJisADFZAWKyAsRkBYjJChB7j1+emZVcZ9305x3naNd97q7vO2PXE7tuUvaO/4NOK0BMVoCYrAAxWQFisgLEZAWIyQoQkxUgJitA7Jsp27HnTRbumv78bVtjz9zdO3bmxtkz/wedVoCYrAAxWQFisgLEZAWIyQoQkxUgJitATFaA2NSU7R3tmkrcNc86Zqfsn2au+cyNs7s4rQAxWQFisgLEZAWIyQoQkxUgJitATFaAmKwAsV83ZTu2bi/szN+eudt11w7ddXb9gs/jtALEZAWIyQoQkxUgJitATFaAmKwAMVkBYrICxKambJ83OzgzK7lu6nTXBOeuvbC7Zo7P3Dc8dub/oNMKEJMVICYrQExWgJisADFZAWKyAsRkBYjJChD7Zsp21+zgLs+b4Fw3oXvm932eO94NpxUgJitATFaAmKwAMVkBYrICxGQFiMkKEJMVIPa6rmv3NfyoXXthx9ZtjV03o7lrh+6Z21v5k9MKEJMVICYrQExWgJisADFZAWKyAsRkBYjJChB775poPHPX6bpp111mrmp8N86chV13VXfcKTu27m44rQAxWQFisgLEZAWIyQoQkxUgJitATFaAmKwAsW922Z45szgzg3vmLOzYuonkM3/BXc58Jnfd55lrdloBYrICxGQFiMkKEJMVICYrQExWgJisADFZAWLv8cu75v9mtqiOnTkbesc9qeuejTMng59n3X12WgFisgLEZAWIyQoQkxUgJitATFaAmKwAMVkBYq+Pr8/By2fOle7a0Hnm9OeuuzFj15088zc681cYs8sW+FGyAsRkBYjJChCTFSAmK0BMVoCYrAAxWQFi7zPn/8ZmrmrXNc/4bbO/Y2fuo73jczVj/Cs4rQAxWQFisgLEZAWIyQoQkxUgJitATFaAmKwAsdd1XYOX7zjReMc9qTOfu86ZO4PH1r3zjDOfjXX/R04rQExWgJisADFZAWKyAsRkBYjJChCTFSAmK0Ds9fH1OXh51ybUXc7cSLprp+yuSdkZ6yZHz/zbXUzZAj9KVoCYrAAxWQFisgLEZAWIyQoQkxUgJitAbOGU7Yxd+2jHnreB9bf9vmdOUY/d8blyWgFisgLEZAWIyQoQkxUgJitATFaAmKwAMVkBYq/rugYvP28j6ZnOvM8z7vgb3XFb7Zl7cJ1WgJisADFZAWKyAsRkBYjJChCTFSAmK0BMVoDYN1O2M3bNLI6tm2g883NnnHmvzpxYPfN53vXOTitATFaAmKwAMVkBYrICxGQFiMkKEJMVICYrQOw9fvnMjaQzV3XmFtXnTY6O7frbXdb9CrveecxpBYjJChCTFSAmK0BMVoCYrAAxWQFisgLEZAWIfbPL9sz9nWfa9X3vOHU6duZe2F3OfHLssgV+lKwAMVkBYrICxGQFiMkKEJMVICYrQExWgNjCKdsZZ847jq2b7zxzcvSO3/fM7cszzrxXTitATFaAmKwAMVkBYrICxGQFiMkKEJMVICYrQGxqynaXmV2nM++8zplTmDN2PTnrno11nvc8O60AMVkBYrICxGQFiMkKEJMVICYrQExWgJisALH3+OWZ+b8zN92eOYW5biPpmTOad9zOe+aE7tiuX99pBYjJChCTFSAmK0BMVoCYrAAxWQFisgLEZAWIvXdNyo6deVXPuxszE7rjz113Vesmv+84NT62a27YaQWIyQoQkxUgJitATFaAmKwAMVkBYrICxGQFiL1nZgd3bSQ9cxpy1wzujOdtb52x7m48779szGkFiMkKEJMVICYrQExWgJisADFZAWKyAsRkBYi9Pr4+By+fOXc4duZm0F13ctce3LEzJ5LP/BV2Pc8znFaAmKwAMVkBYrICxGQFiMkKEJMVICYrQExWgNjruq7d1/B/nDkpO/POu5x5J+84GTy26xuN7XqenVaAmKwAMVkBYrICxGQFiMkKEJMVICYrQExWgNh73VvPTBbecZJybNdV7Zr+3LWf9cx51ufNdo+v2WkFiMkKEJMVICYrQExWgJisADFZAWKyAsRkBYi9Pr4+F731mRs61znz++6adn3epttdd/JM47vhtALEZAWIyQoQkxUgJitATFaAmKwAMVkBYrICxF7Xde2+hh+1axpy19TpDBOrf9o1+zt25syx0woQkxUgJitATFaAmKwAMVkBYrICxGQFiMkKEHufOdE4Y91E48znztznO26cfd5k8Dq7JnTXcVoBYrICxGQFiMkKEJMVICYrQExWgJisADFZAWKvj6/PwctnTvjt2t+5zrqZ1DO3qO7627EzZ3/HzpySd1oBYrICxGQFiMkKEJMVICYrQExWgJisADFZAWLvmT9+3lTirqnidXO0u77v8z535j6fOQu7jtMKEJMVICYrQExWgJisADFZAWKyAsRkBYjJChCbmrK9o107VnfZtdt13eeeufd317Nx5ryy0woQkxUgJitATFaAmKwAMVkBYrICxGQFiMkKEPt1U7ZjZ05wjt1xMnjmc8/8vut+313zyjOcVoCYrAAxWQFisgLEZAWIyQoQkxUgJitATFaA2NSU7bopvV3WTWHumg294xzt2B03zo7dce/vmNMKEJMVICYrQExWgJisADFZAWKyAsRkBYjJChD7Zsp219zhOnf8Rmfuwb3j5+5yxx3JY+NrdloBYrICxGQFiMkKEJMVICYrQExWgJisADFZAWL/A32nk4AKWFFIAAAAAElFTkSuQmCC'); background-size: 85% 85%; background-position: center; background-repeat:no-repeat; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center;">
<img src="./static/logo.png" style="width: 12vw; height: 12vw;">
@ -175,11 +175,15 @@
switchNameDisplay(false);
const default_img = "./static/suishenma_logo.png";
document.getElementById("_img").attributes["src"].value = localStorage.getItem("_img") || default_img;
if (localStorage.getItem("_img")) {
document.getElementById("_img").attributes["src"].value = localStorage.getItem("_img");
document.querySelector(".photo").classList.add("photoPicAfter");
}
document.getElementById("_img").addEventListener("click", () => {
if (localStorage.getItem("_img")) {
localStorage.removeItem("_img");
document.getElementById("_img").attributes["src"].value = default_img;
document.querySelector(".photo").classList.remove("photoPicAfter");
return;
}
const input = document.getElementById("upload");
@ -204,6 +208,7 @@
localStorage.setItem("_img", default_img);
}
document.getElementById("_img").attributes["src"].value = content;
document.querySelector(".photo").classList.add("photoPicAfter");
}
}

287
src/ssm/scan.html Normal file
View File

@ -0,0 +1,287 @@
<!DOCTYPE html>
<title>扫一扫</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width,height=device-height,viewport-fit=cover,initial-scale=1,maximum-scale=1,user-scalable=0">
<meta name="theme-color" content="#FFFFFF">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<link rel="manifest" href="manifest.json">
<link rel="icon" type="image/png" href="./static/ssbapp-logo.png">
<link rel="apple-touch-icon" sizes="492x492" href="./static/ssbapp-logo.png">
<link rel="stylesheet" href="../common/nav.css">
<script src="../common/base.js"></script>
<style>
body {
margin: 0;
height: 100vh;
font-family: "PingFang SC", sans-serif;
}
#scan {
width: 100%;
height: 100%;
position: absolute;
top: 50%;
background: radial-gradient(circle, rgba(93,200,148,1) 0%, rgba(0,0,0,0) 50%);
}
#scan-parent {
width: 100%;
height: 100%;
position: fixed;
left: 0;
bottom: 30%;
transform: scale(1, 0.2);
overflow: hidden;
animation: scan 2s linear infinite, opacity 1s ease-out infinite alternate;
z-index: 30;
}
@keyframes scan {
from {
bottom: 40%;
}
to {
bottom: -20%;
}
}
@keyframes opacity {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
#mask {
width: 100%;
height: 100%;
position: fixed;
left: 0;
top: 0;
background-color: rgba(0, 0, 0, .2);
z-index: 10;
}
#scan-widgets > * {
z-index: 20;
}
#close-button {
position: fixed;
top: 36px;
top: calc(36px + env(safe-area-inset-top, 0));
left: 30px;
height: 26px;
width: 26px;
border-radius: 100px;
background-color: #fff;
color: rgba(0, 0, 0, .6);
display: flex;
justify-content: center;
align-items: center;
}
#album-button {
position: fixed;
right: 30px;
bottom: 90px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
color: rgba(255, 255, 255, .87);
font-size: 14px;
}
#album-button > div {
height: 48px;
width: 48px;
border-radius: 50px;
background-color: rgba(0, 0, 0, .4);
margin-bottom: 6px;
display: flex;
justify-content: center;
align-items: center;
}
video {
position: fixed;
top: 0;
}
#info {
background-color: rgba(255, 255, 255, .7);
box-sizing: border-box;
width: 100vw;
height: 100vh;
padding: 50px 20px 0 20px;
text-align: center;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
#info > span {
color: rgba(0, 0, 0, .6);
}
#info b {
color: rgba(0, 0, 0, 1);
}
#tap-to-continue {
color: rgba(0, 0, 0, 1);
font-style: italic;
animation: opacity 1.5s ease-out infinite alternate-reverse;
}
#transition {
position: fixed;
height: 100%;
width: 100%;
top: -10%;
display: none;
flex-direction: column;
justify-content: center;
align-items: center;
}
#transition > img {
width: 15vw;
height: 15vw;
border-radius: 20vw;
border: 1px solid #ccc;
margin-bottom: 20px;
}
#transition > span {
font-weight: bold;
font-size: 4vw;
}
#nav {
position: fixed;
z-index: 50;
}
iframe {
position: fixed;
border: 0;
z-index: 40;
height: 100%;
width: 100%;
top: 0;
left: 0;
display: none;
}
#skip-scan {
position: fixed;
bottom: 24px;
height: 28px;
width: fit-content;
padding: 6px 24px;
border-radius: 100px;
color: #777;
text-decoration: underline;
display: flex;
justify-content: center;
align-items: center;
}
#skip-scan:hover {
color: #fff;
background-color: #777;
}
</style>
<meta name="theme-color" content="#ffffff">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<audio style="display: none;" preload="auto" src="./static/绿码核酸24小时内阴性.mp3"></audio>
<div id="info">
<h2>场所码扫描</h2>
<br>
<span>“扫描” 时将使用摄像头</span>
<span>获取到的所有信息均在本地处理</span>
<br>
<span>“扫描” 开始后</span>
<span><b>轻触屏幕</b> 将会 <b>播放“绿码核酸24小时内阴性”提示音</b></span>
<span>并显示随申码场所码页面</span>
<br><br>
<p id="tap-to-continue">轻触屏幕继续...</p>
<br><br>
<div id="skip-scan">跳过扫描</div>
</div>
<div class="navbar navbar--wechat" id="nav">
<div class="navbar__placeholder"></div>
<div class="navbar__inner" style="color: black; background: white;">
<div class="navbar__left">
<div class="navbar__buttons" onclick="history.back();">
<div class="navbar__button-goback"></div>
</div>
</div>
<div class="navbar__center">
<text>随申码 - 场所码</text>
</div>
<div class="navbar__right">
</div>
</div>
<div class="capsule capsule--wechat" onclick="navigateHome();">
<svg class="capsule__menu-icon" viewBox="0 0 64 28" xmlns="http://www.w3.org/2000/svg">
<circle cx="32" cy="14" r="9.5"/>
<circle cx="54" cy="14" r="6"/>
<circle cx="10" cy="14" r="6"/>
</svg>
<div class="capsule__splitter"></div>
<svg class="capsule__exit-icon" viewBox="0 0 60 60" xmlns="http://www.w3.org/2000/svg">
<circle cx="30" cy="30" r="9"/>
<circle cx="30" cy="30" r="23" stroke-width="6" fill="transparent"/>
</svg>
</div>
</div>
<div id="scan-content" style="display: none;">
<video width="auto" height="100%" autoplay muted playsinline></video>
<div id="mask"></div>
<div id="scan-parent">
<div id="scan"></div>
</div>
<div id="scan-widgets">
<div id="close-button" onclick="window.location.reload();">
<svg xmlns="http://www.w3.org/2000/svg" height="14px" viewBox="0 0 24 24" width="14px" fill="rgba(0, 0, 0, .6)"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</div>
<div id="album-button">
<div>
<svg xmlns="http://www.w3.org/2000/svg" height="28px" viewBox="0 0 24 24" width="28px" fill="rgba(255, 255, 255, .87)"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-4.86 8.86l-3 3.87L9 13.14 6 17h12l-3.86-5.14z"/></svg>
</div>
<span>相册</span>
</div>
</div>
</div>
<iframe src="./checkin.html"></iframe>
<script>
document.getElementById("skip-scan").addEventListener("click", (e) => {
e.stopPropagation();
window.location.href = "./checkin.html";
});
const video = document.querySelector("video");
document.getElementById("info").addEventListener("click", () => {
document.getElementById("nav").style.display = "none";
if (!navigator.mediaDevices) {
alert("无法使用摄像头。请确保源码部署在 https 环境下。");
} else {
navigator.mediaDevices.getUserMedia({
audio: false,
video: {
facingMode: "environment",
}
})
.then((stream) => {
video.srcObject = stream;
video.onloadedmetadata = () => {
video.play();
};
})
.catch((err) => {
console.log(err);
});
}
document.getElementById("info").remove();
document.getElementById("scan-content").style.display = "block";
});
document.getElementById("scan-content").addEventListener("click", () => {
const audio = document.querySelector("audio");
audio.play();
document.getElementById("scan-content").remove();
document.querySelector("iframe").style.display = "block";
document.querySelector("iframe").onload = () => {
window.location.href = document.querySelector("iframe").contentWindow.location.pathname;
};
video.srcObject.getTracks().forEach(function(track) {
track.stop();
});
});
initServiceWorker("ssm");
</script>

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 712 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
src/ssm/static/fkdj.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
src/ssm/static/hsym.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
src/ssm/static/txz.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
src/ssm/static/xck.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -76,7 +76,7 @@
</view>
<view class="tabs__content">
<view class="tab-pane">
<view class="txt">说明:省内核酸数据来源于广东省新冠病毒检测信息系统,支持查询近一个月记录。我省核酸检测结果信息由省有关部门统一报送国家平台,无需群众自行上报。</view>
<view class="txt">说明:省内核酸数据来源于广东省新冠病毒检测信息系统,支持查询近7日记录。我省核酸检测结果信息由省有关部门统一报送国家平台,无需群众自行上报。</view>
<view class="member-list">
<view class="member-item">
<view class="member-top">
@ -177,6 +177,59 @@
</view>
</view>
<!-- <template is="t" data="{{item:item,key:'采样时间'}}" wx:if="{{type==='hesuan'&&item['采样时间']&&item['采样时间']!=item['检测时间']}}"></template>
<template is="t" data="{{item:item,key:'检测时间'}}" wx:if="{{type==='hesuan'&&item['检测时间']}}"></template>
<template is="t" data="{{item:item,key:'检测机构'}}"></template>
<template is="t" data="{{item:item,key:'数据来源'}}"></template>
<template is="t" data="{{item:item,key:'检测结果'}}"></template> -->
</view>
</view>
<view class="member-item">
<view class="member-top">
<view class="member-name">习近平</view>
</view>
<view class="preview g-preview" direction="row">
<view class="preview-item">
<view class="preview-item__label">
<text>采样时间</text>
</view>
<view class="preview-item__content preview-item__content__text-right">
<text class="sample-time" data-traceback-hours="64" data-traceback-range="8"></text>
</view>
</view>
<view class="preview-item">
<view class="preview-item__label">
<text>检测时间</text>
</view>
<view class="preview-item__content preview-item__content__text-right">
<text class="test-time" data-traceback-hours="54" data-traceback-range="8"></text>
</view>
</view>
<view class="preview-item">
<view class="preview-item__label">
<text>检测机构</text>
</view>
<view class="preview-item__content preview-item__content__text-right">
<text class="test-institution"></text>
</view>
</view>
<view class="preview-item">
<view class="preview-item__label">
<text>数据来源</text>
</view>
<view class="preview-item__content preview-item__content__text-right">
<text>广东省卫生健康委员会</text>
</view>
</view>
<view class="preview-item">
<view class="preview-item__label">
<text>检测结果</text>
</view>
<view class="preview-item__content preview-item__content__text-right">
<text style="color: #09BB07;">阴性</text>
</view>
</view>
<!-- <template is="t" data="{{item:item,key:'采样时间'}}" wx:if="{{type==='hesuan'&&item['采样时间']&&item['采样时间']!=item['检测时间']}}"></template>
<template is="t" data="{{item:item,key:'检测时间'}}" wx:if="{{type==='hesuan'&&item['检测时间']}}"></template>
<template is="t" data="{{item:item,key:'检测机构'}}"></template>

File diff suppressed because one or more lines are too long