Update 17b87f59
13
Makefile
@ -1,13 +0,0 @@
|
||||
build: clean makeassets
|
||||
./build.sh
|
||||
|
||||
serve: makeassets
|
||||
sass --watch src/common/nav.scss src/common/nav.css &
|
||||
python3 -m http.server --directory src 80
|
||||
|
||||
makeassets:
|
||||
sed -i "s/\(\/\*\ BEGIN\ ASSETS\ \*\/\).*/\1/" src/service-worker.js || sed -i "" "s/\(\/\*\ BEGIN\ ASSETS\ \*\/\).*/\1/" src/service-worker.js
|
||||
./makeassets.sh >> src/service-worker.js
|
||||
|
||||
clean:
|
||||
rm -rf build
|
27
README.md
@ -1,27 +1,24 @@
|
||||
# health-code-simulator
|
||||
|
||||
常见问题:[FAQ.md](https://codeberg.org/ilovexjp/health-code-simulator/src/branch/main/docs/FAQ.md)
|
||||
## Installation
|
||||
|
||||
Telegram 频道:[@gh_ilovexjp](https://t.me/gh_ilovexjp)
|
||||
```shell
|
||||
npm install
|
||||
```
|
||||
|
||||
网页演示:[Cloudflare](https://ilovexjp.pages.dev)
|
||||
## Development
|
||||
|
||||
Reddit: [r/ILoveHealthCode](https://reddit.com/r/ILoveHealthCode)
|
||||
```shell
|
||||
npm run dev
|
||||
|
||||
# develop with https server
|
||||
npm run dev:https
|
||||
```
|
||||
|
||||
## Build
|
||||
|
||||
### Build for production
|
||||
|
||||
```shell
|
||||
npm i -g uglify-js clean-css-cli html-minifier sass
|
||||
make build
|
||||
```
|
||||
|
||||
### Launch local server
|
||||
|
||||
Requires python3.
|
||||
|
||||
```shell
|
||||
npm i -g sass
|
||||
make serve
|
||||
npm run build
|
||||
```
|
||||
|
91
build.mjs
Normal file
@ -0,0 +1,91 @@
|
||||
import { task, build, watch, serve } from './buildrunner.mjs';
|
||||
import { appendFile } from 'node:fs/promises';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import path from 'node:path';
|
||||
import HTMLMinifier from 'html-minifier';
|
||||
import CleanCSS from 'clean-css';
|
||||
import UglifyJS from 'uglify-js';
|
||||
import sass from 'sass';
|
||||
import _ from 'lodash';
|
||||
import { globby } from 'globby';
|
||||
|
||||
const htmlOptions = {
|
||||
collapseWhitespace: true,
|
||||
removeComments: true,
|
||||
removeOptionalTags: true,
|
||||
removeRedundantAttributes: true,
|
||||
removeScriptTypeAttributes: true,
|
||||
removeTagWhitespace: true,
|
||||
useShortDoctype: true,
|
||||
minifyCSS: true,
|
||||
minifyJS: true,
|
||||
};
|
||||
|
||||
const cssCleanner = new CleanCSS();
|
||||
|
||||
const isDev = process.argv.includes('--dev');
|
||||
|
||||
task('src/common/nav.scss')
|
||||
.transform((contents, ctx) => {
|
||||
const result = sass.compileString(contents.toString(), { loadPaths: [ctx.path()], sourceMap: false });
|
||||
ctx.watch(result.loadedUrls.map(fileURLToPath), { markAsBuilt: true });
|
||||
return result.css;
|
||||
})
|
||||
.staged('src/common/nav.css');
|
||||
|
||||
const selfDestroyingSW = `
|
||||
self.addEventListener('install', function(e) {
|
||||
self.skipWaiting();
|
||||
});
|
||||
self.addEventListener('activate', function(e) {
|
||||
self.registration.unregister()
|
||||
.then(function() {
|
||||
return self.clients.matchAll();
|
||||
})
|
||||
.then(function(clients) {
|
||||
clients.forEach(client => client.navigate(client.url))
|
||||
});
|
||||
});`
|
||||
|
||||
task('src/service-worker.js')
|
||||
.transform((contents) => isDev ? selfDestroyingSW : contents)
|
||||
.staged();
|
||||
|
||||
if(!isDev) {
|
||||
task('src/**/*.html')
|
||||
.transform((contents) => HTMLMinifier.minify(contents.toString(), htmlOptions));
|
||||
|
||||
task('src/**/*.css')
|
||||
.transform((contents) => cssCleanner.minify(contents.toString()).styles);
|
||||
|
||||
task('src/**/*.js')
|
||||
.transform((contents) => UglifyJS.minify(contents.toString()).code);
|
||||
}
|
||||
|
||||
// copy rest files
|
||||
task(['src/**/*']);
|
||||
|
||||
await build('build/');
|
||||
|
||||
if(!isDev) {
|
||||
const files = await globby(['build/**/*', '!build/service-worker.js']);
|
||||
const assets = _.groupBy(files.map(file => file.substring(6)), // strip 'build/'
|
||||
file => file.includes(path.sep) ? file.split(path.sep, 1)[0] : 'root');
|
||||
|
||||
await appendFile('build/service-worker.js', `;assets = ${JSON.stringify(assets)}`);
|
||||
}
|
||||
|
||||
if(process.argv.includes('--watch')) {
|
||||
watch();
|
||||
}
|
||||
|
||||
if(process.argv.includes('--serve')) {
|
||||
serve();
|
||||
} else if(process.argv.includes('--serve-https')) {
|
||||
serve({
|
||||
https: {
|
||||
key: './tools/local-https/key.pem',
|
||||
cert: './tools/local-https/cert.pem'
|
||||
}
|
||||
});
|
||||
}
|
32
build.sh
@ -1,32 +0,0 @@
|
||||
echo "Building project..."
|
||||
|
||||
BUILDPATH=./build
|
||||
mkdir $BUILDPATH
|
||||
|
||||
echo "Copying files..."
|
||||
cp -R ./src/* $BUILDPATH/
|
||||
|
||||
echo "Compiling..."
|
||||
sass --no-source-map ./src/common/nav.scss:./build/common/nav.css
|
||||
rm ./build/common/nav.css.map
|
||||
rm ./build/common/nav.scss
|
||||
rm -rf ./build/common/components
|
||||
|
||||
for file in $( find src -type f -name "*.html"); do
|
||||
html-minifier $file --collapse-whitespace --remove-comments --remove-optional-tags --remove-redundant-attributes --remove-script-type-attributes --remove-tag-whitespace --use-short-doctype --minify-css true --minify-js > $BUILDPATH/${file#*src/} &&
|
||||
echo "+"${file#*src/} &
|
||||
done
|
||||
|
||||
for file in $( find src -type f -name "*.css"); do
|
||||
cleancss -o $BUILDPATH/${file#*src/} $file &&
|
||||
echo "+"${file#*src/} &
|
||||
done
|
||||
|
||||
for file in $( find src -type f -name "*.js"); do
|
||||
uglifyjs $file -c -o $BUILDPATH/${file#*src/} &&
|
||||
echo "+"${file#*src/} &
|
||||
done
|
||||
|
||||
wait;
|
||||
|
||||
echo "Build complete"
|
223
buildrunner.mjs
Normal file
@ -0,0 +1,223 @@
|
||||
import { globby } from 'globby';
|
||||
import micromatch from 'micromatch';
|
||||
import { readFile, writeFile, copyFile, mkdir } from 'node:fs/promises';
|
||||
import path from 'node:path';
|
||||
import chokidar from 'chokidar';
|
||||
import { createServer } from 'http-server';
|
||||
|
||||
const tasks = [];
|
||||
|
||||
const STAGED_KEEP = Symbol();
|
||||
|
||||
class TaskRegister {
|
||||
constructor(src) {
|
||||
tasks.push({ src });
|
||||
this.index = tasks.length - 1;
|
||||
}
|
||||
|
||||
transform(cb) {
|
||||
tasks[this.index].transform = cb;
|
||||
return this;
|
||||
}
|
||||
|
||||
staged(val) {
|
||||
tasks[this.index].staged = val || STAGED_KEEP;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
export function task(src) {
|
||||
return new TaskRegister(src);
|
||||
}
|
||||
|
||||
function transformStagedFilename(staged, file) {
|
||||
if(staged === STAGED_KEEP) {
|
||||
return file;
|
||||
} else if(typeof staged === 'string' || staged instanceof String) {
|
||||
return staged.toString();
|
||||
} else if(typeof staged === 'function') {
|
||||
return staged(file);
|
||||
}
|
||||
|
||||
console.error('unrecognized staged type', typeof(staged));
|
||||
}
|
||||
|
||||
export function replaceExtension(file, newExtension) {
|
||||
return path.parse(file).name + newExtension;
|
||||
}
|
||||
|
||||
const history = new Map();
|
||||
const watches = new Map();
|
||||
let basePath = 'dist/';
|
||||
|
||||
async function getFileContent(file) {
|
||||
if(history.has(file)) {
|
||||
const item = history.get(file);
|
||||
if(item.content != null) {
|
||||
return item.content;
|
||||
}
|
||||
}
|
||||
|
||||
return await readFile(file);
|
||||
}
|
||||
|
||||
function getHistory(file) {
|
||||
if(!history.has(file)) history.set(file, {});
|
||||
return history.get(file);
|
||||
}
|
||||
|
||||
function getWatch(file) {
|
||||
if(!watches.has(file)) watches.set(file, {
|
||||
/**
|
||||
* task indexes
|
||||
*/
|
||||
passes: [],
|
||||
|
||||
/**
|
||||
* use another file as task entry
|
||||
*/
|
||||
entry: '',
|
||||
|
||||
/**
|
||||
* execute passes and redirect to another file
|
||||
*/
|
||||
redirect: '',
|
||||
});
|
||||
return watches.get(file);
|
||||
}
|
||||
|
||||
class TaskContext {
|
||||
constructor(index, file) {
|
||||
this.index = index;
|
||||
this.file = file;
|
||||
}
|
||||
|
||||
file() { return this.file; }
|
||||
|
||||
path() { return path.dirname(this.file); }
|
||||
|
||||
watch(file, { markAsBuilt = false } = {}) {
|
||||
const files = (Array.isArray(file) ? file : files).map(f => path.relative('.', f));
|
||||
|
||||
for(const f of files) {
|
||||
getWatch(f).entry = this.file;
|
||||
getWatch(f).passes.push(this.index);
|
||||
|
||||
if(markAsBuilt) {
|
||||
getHistory(f).built = true;
|
||||
|
||||
console.log(`[-] dependency ${f} marked as built`);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function doTask(index, file, addToWatch) {
|
||||
const task = tasks[index];
|
||||
const { dir } = path.parse(file);
|
||||
const destinationFolder = dir.replace(dir.split('/')[0], basePath);
|
||||
|
||||
await mkdir(destinationFolder, { recursive: true });
|
||||
const outFile = path.join(destinationFolder, path.basename(file));
|
||||
|
||||
const isDirectCopy = !task.staged && !task.transform && getHistory(file).content == null;
|
||||
if(isDirectCopy) {
|
||||
await copyFile(file, outFile);
|
||||
console.log(`[>] ${file} → ${outFile}`);
|
||||
return;
|
||||
}
|
||||
|
||||
let content = await getFileContent(file);
|
||||
if(task.transform) {
|
||||
const ctx = new TaskContext(index, file);
|
||||
content = task.transform(content, ctx);
|
||||
}
|
||||
|
||||
if(task.staged) {
|
||||
const newFile = transformStagedFilename(task.staged, file);
|
||||
getHistory(newFile).built = false;
|
||||
getHistory(newFile).content = content;
|
||||
addToWatch && getWatch(file).passes.push(index);
|
||||
|
||||
if(newFile !== file) {
|
||||
// set old file built so that it won't build again
|
||||
getHistory(file).built = true;
|
||||
addToWatch && (getWatch(file).redirect = newFile);
|
||||
|
||||
console.log(`[^] ${file} → ${newFile} staged`);
|
||||
} else {
|
||||
console.log(`[^] ${file} staged`);
|
||||
}
|
||||
} else {
|
||||
await writeFile(outFile, content);
|
||||
getHistory(file).built = true;
|
||||
addToWatch && getWatch(file).passes.push(index);
|
||||
|
||||
console.log(`[+] ${file} → ${outFile}`);
|
||||
}
|
||||
}
|
||||
|
||||
export async function build(outPath) {
|
||||
basePath = outPath;
|
||||
history.clear();
|
||||
watches.clear();
|
||||
|
||||
for(let i = 0; i < tasks.length; i++) {
|
||||
const files = [...new Set(
|
||||
(await globby(tasks[i].src)) // glob files
|
||||
.concat(micromatch([...history.keys()], tasks[i].src)) // staged files
|
||||
.filter(file => !getHistory(file).built)
|
||||
)];
|
||||
|
||||
await Promise.all(files.map(file => doTask(i, file, true)));
|
||||
}
|
||||
|
||||
console.log('[✓] build completed.');
|
||||
}
|
||||
|
||||
async function onFileChanged(file) {
|
||||
let curFile = file;
|
||||
|
||||
while(curFile) {
|
||||
const watch = watches.get(curFile);
|
||||
|
||||
if(watch.entry) {
|
||||
curFile = watch.entry;
|
||||
continue;
|
||||
}
|
||||
|
||||
for(let pass of watch.passes) {
|
||||
await doTask(pass, curFile, false);
|
||||
}
|
||||
|
||||
if(watch.redirect) {
|
||||
curFile = watch.redirect;
|
||||
continue;
|
||||
}
|
||||
|
||||
curFile = '';
|
||||
}
|
||||
}
|
||||
|
||||
export function watch() {
|
||||
// all built files and dependencies
|
||||
chokidar.watch([...watches.keys()], { ignoreInitial: true })
|
||||
.on('change', onFileChanged);
|
||||
|
||||
// watch new files
|
||||
for(let i = 0; i < tasks.length; i++) {
|
||||
chokidar.watch(tasks[i].src, { ignoreInitial: true })
|
||||
.on('add', file => doTask(i, file, true));
|
||||
}
|
||||
|
||||
console.log(`[ ] watching file changes`);
|
||||
}
|
||||
|
||||
export function serve({ host = '0.0.0.0', port = 3001, https } = {}) {
|
||||
createServer({
|
||||
root: basePath,
|
||||
https,
|
||||
}).listen(port, host);
|
||||
|
||||
console.log(`[ ] server started on ${https ? 'https' : 'http'}://${host}:${port}`);
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
cd src
|
||||
|
||||
printf "assets={"
|
||||
printf "\"root\":[\"./\","
|
||||
find . -maxdepth 1 -type f -not -path "*/.*" -not -path "./service-worker.js" | xargs printf "\"%s\"," "$@"
|
||||
printf "],"
|
||||
for DIR in $(find . -type d -mindepth 1 -maxdepth 1); do
|
||||
printf "\""${DIR#*./}"\":["
|
||||
printf "\"%s/\"," "${DIR#*./}"
|
||||
find $DIR -type f -not -path "*/.*" -not -name "*.scss" -not -name "*.css.map" | xargs printf "\"%s\"," "$@"
|
||||
# find $DIR -type d -not -path '*/.*' | xargs printf "\"%s/\"," "$@"
|
||||
printf "],"
|
||||
done
|
||||
printf "};"
|
1675
package-lock.json
generated
Normal file
32
package.json
Normal file
@ -0,0 +1,32 @@
|
||||
{
|
||||
"name": "health-code-simulator",
|
||||
"version": "0.0.1",
|
||||
"main": "index.js",
|
||||
"directories": {
|
||||
"doc": "docs"
|
||||
},
|
||||
"scripts": {
|
||||
"dev": "node build.mjs --dev --watch --serve",
|
||||
"dev:https": "node build.mjs --dev --watch --serve-https",
|
||||
"build": "node build.mjs",
|
||||
"build:serve": "node build.mjs --serve"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://codeberg.org/ilovexjp/health-code-simulator.git"
|
||||
},
|
||||
"homepage": "https://codeberg.org/ilovexjp/health-code-simulator",
|
||||
"devDependencies": {
|
||||
"chokidar": "^3.5.3",
|
||||
"clean-css": "^5.3.1",
|
||||
"globby": "^13.1.2",
|
||||
"html-minifier": "^4.0.0",
|
||||
"http-server": "^14.1.1",
|
||||
"micromatch": "^4.0.5",
|
||||
"sass": "^1.56.1",
|
||||
"uglify-js": "^3.17.4"
|
||||
},
|
||||
"dependencies": {
|
||||
"lodash": "^4.17.21"
|
||||
}
|
||||
}
|
32
src/app.css
@ -105,38 +105,6 @@ body {
|
||||
opacity: 0.6;
|
||||
}
|
||||
|
||||
.app:has(.app-menu-item.active[data-role="pin"]):not(.inactivated) {
|
||||
order: -1;
|
||||
}
|
||||
|
||||
.app.inactivated {
|
||||
order: 1000 !important;
|
||||
}
|
||||
|
||||
.app.inactivated .app-title {
|
||||
color: rgba(0, 0, 0, 0.6);
|
||||
font-size: 14px;
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
.app.inactivated .app-title::after {
|
||||
content: "暂不可用";
|
||||
margin-left: 5px;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.app.inactivated .app-menu {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.app.inactivated .app-content > img {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.app.inactivated .app-title-icon {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.app-content {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
|
119
src/app.js
@ -15,9 +15,9 @@ const apps = {
|
||||
help_text:
|
||||
"<p>点击姓名、城市、场所地址等可以修改对应<p>点击二维码可以切换 “粤康码” 及 “粤康码场所通行” 页面。</p>",
|
||||
menu: [
|
||||
{ title: "场所", icon: "place", link: "ykm/checkin.html" },
|
||||
{ title: "核酸", icon: "vaccines", link: "ykm/detail.html" },
|
||||
{ title: "广州", icon: "map", link: "gwongzau-hc/checkin.html" },
|
||||
{ title: "场所", icon: "@place", link: "ykm/checkin.html" },
|
||||
{ title: "核酸", icon: "@vaccines", link: "ykm/detail.html" },
|
||||
{ title: "广州", icon: "@map", link: "gwongzau-hc/checkin.html" },
|
||||
],
|
||||
},
|
||||
"skm": {
|
||||
@ -28,8 +28,8 @@ const apps = {
|
||||
help_text:
|
||||
"<p>点击姓名、证件号、场所地址等可以修改对应信息;</p><p>点击二维码可以展示签到页面。</p>",
|
||||
menu: [
|
||||
{ title: "场所", icon: "place", link: "skm/index.html#checkin" },
|
||||
{ title: "核酸", icon: "vaccines", link: "skm/detail.html" },
|
||||
{ title: "场所", icon: "@place", link: "skm/index.html#checkin" },
|
||||
{ title: "核酸", icon: "@vaccines", link: "skm/detail.html" },
|
||||
],
|
||||
},
|
||||
"jkb": {
|
||||
@ -40,8 +40,8 @@ const apps = {
|
||||
help_text:
|
||||
"<p>点击姓名、证件号可以修改对应信息;</p><p>点击照片可以更改或移除照片,超过 4MB 的图片可能无法在本地保存;</p><p>点击右上角二维码标志可以在 “本人健康码自查询” 和 “本人信息扫码登记” 间切换;</p><p>点击 “未见异常” 可以切换 “通勤” 标志。</p>",
|
||||
menu: [
|
||||
{ title: "扫描", icon: "qr_code_scanner", link: "jkb/scan.html" },
|
||||
{ title: "场所", icon: "place", link: "jkb/checkin.html" },
|
||||
{ title: "扫描", icon: "@qr_code_scanner", link: "jkb/scan.html" },
|
||||
{ title: "场所", icon: "@place", link: "jkb/checkin.html" },
|
||||
],
|
||||
},
|
||||
"tfjkt": {
|
||||
@ -51,9 +51,66 @@ const apps = {
|
||||
color: "#0ba099",
|
||||
help_text:
|
||||
"<p>点击姓名、证件号、场所地址等可以修改对应信息;</p><p>点击“扫场所码”展示场所码。</p>",
|
||||
menu: [{ title: "场所", icon: "place", link: "tfjkt/checkin.html" }],
|
||||
menu: [{ title: "场所", icon: "@place", link: "tfjkt/checkin.html" }],
|
||||
},
|
||||
"ssm": {
|
||||
html: `
|
||||
<div class="app" data-link="ssm/index.html" data-role="app" data-app-name="ssm"
|
||||
style="padding: 0 0 8px 0; margin: 18px 0 60px 0; border-radius: 8px; background-color: #eee; position: relative;">
|
||||
<div style="justify-content: space-between; padding: 6px 10px; color: white; background-color: blue;
|
||||
border-radius: 8px 8px 0 0; display: flex; align-items: center;">
|
||||
<span style="width: 20px; text-align: center;">北</span>
|
||||
<span style="font-weight: 500; font-size: 22px;">乌鲁木齐中路</span>
|
||||
<span style="width: 20px; text-align: center;">南</span>
|
||||
</div>
|
||||
<div style="justify-content: space-between; padding: 2px 10px; color: #777; background-color: white;
|
||||
border-radius: 0 0 8px 8px; display: flex; align-items: center;">
|
||||
<span style="width: 20px; text-align: center;">N</span>
|
||||
<span style="font-weight: 500; font-size: 16px;">Wulumuqi Rd.(M)</span>
|
||||
<span style="width: 20px; text-align: center;">S</span>
|
||||
</div>
|
||||
<div class="app-content" style="justify-content: center;">
|
||||
<div class="app-description">
|
||||
<div class="app-menu" style="width: 100%;justify-content: center;">
|
||||
<style>
|
||||
.app[data-app-name="ssm"] .app-menu-item:not(.active) { background: white; }
|
||||
</style>
|
||||
<div class="app-menu-item" data-role="link" data-link="ssm">
|
||||
<img class="app-menu-app-icon" src="ssm/static/ssbapp-logo.png"
|
||||
style="border-radius: 20px; margin-right: 2px;">
|
||||
<span class="app-menu-app-title">随申码</span>
|
||||
</div>
|
||||
<div class="app-menu-item" data-role="link" data-link="ssm/scan.html">
|
||||
<img class="app-menu-app-icon" src="common/icons/qr_code_scanner.svg">
|
||||
<span class="app-menu-app-title">扫描</span>
|
||||
</div>
|
||||
<div class="app-menu-item" data-role="link" data-link="ssm/checkin.html">
|
||||
<img class="app-menu-app-icon" src="common/icons/place.svg">
|
||||
<span class="app-menu-app-title">场所</span>
|
||||
</div>
|
||||
<div class="app-menu-item ${localStorage.getItem("pinned")
|
||||
&& localStorage.getItem("pinned").split(",").indexOf("ssm") >= 0
|
||||
&& "active" || ""}" data-role="pin">
|
||||
<img class="app-menu-app-icon" src="common/icons/push_pin.svg">
|
||||
</div>
|
||||
<div class="app-menu-item" data-role="help" style="margin-right: 0;">
|
||||
<img class="app-menu-app-icon" src="common/icons/info.svg">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="border-width: 0 3px 0 3px; border-color: #555; border-style: solid; background-color: #eee;
|
||||
width: 24px; height: 60px; align-self: center; position: absolute; top: 117.5px;"></div>
|
||||
<div class="app-help" style="position: fixed; bottom: 0; left: 0; margin: 30px 12px;
|
||||
background-color: #fff; border: 2px solid #000; z-index: 20;"
|
||||
onclick="this.style.display = 'none';
|
||||
this.closest('.app').querySelector('.app-menu-item[data-role=help]').classList.remove('active');">
|
||||
<div class="app-help-subtitle">随申码使用说明</div>
|
||||
<p>点击姓名、证件号、场所地址等可以修改对应信息;</p>
|
||||
<p>点击照片可以更改或移除照片,超过 4MB 的图片可能无法在本地保存;</p>
|
||||
<p>点击二维码展示场所码。</p>
|
||||
</div>
|
||||
</div>`,
|
||||
title: "随申码",
|
||||
icon: "ssm/static/ssbapp-logo.png",
|
||||
link: "ssm/index.html",
|
||||
@ -61,8 +118,9 @@ const apps = {
|
||||
help_text:
|
||||
"<p>点击姓名、证件号、场所地址等可以修改对应信息;</p><p>点击照片可以更改或移除照片,超过 4MB 的图片可能无法在本地保存;</p><p>点击二维码展示场所码。</p>",
|
||||
menu: [
|
||||
{ title: "扫描", icon: "qr_code_scanner", link: "ssm/scan.html" },
|
||||
{ title: "场所", icon: "place", link: "ssm/checkin.html" },
|
||||
// { title: "随申码", icon: "ssm/static/ssbapp-logo.png", link: "ssm" },
|
||||
{ title: "扫描", icon: "@qr_code_scanner", link: "ssm/scan.html" },
|
||||
{ title: "场所", icon: "@place", link: "ssm/checkin.html" },
|
||||
],
|
||||
},
|
||||
"shandong-hc": {
|
||||
@ -75,10 +133,10 @@ const apps = {
|
||||
menu: [
|
||||
{
|
||||
title: "场所",
|
||||
icon: "place",
|
||||
icon: "@place",
|
||||
link: "shandong-hc/index.html#checkin",
|
||||
},
|
||||
{ title: "威海", icon: "map", link: "weihai-hc/index.html" },
|
||||
{ title: "威海", icon: "@map", link: "weihai-hc/index.html" },
|
||||
],
|
||||
contributors: [
|
||||
{
|
||||
@ -109,7 +167,7 @@ const apps = {
|
||||
icon: "hunan-hc/static/logo-b18dcf7bf55c412ec04989061d0512ad.png",
|
||||
link: "hunan-hc/index.html",
|
||||
help_text: "<p>点击姓名、证件号、采样点、场所地址等可以修改对应信息。</p><p>点击“二维码”可以切换“健康卡”与“场所码”</p>",
|
||||
menu: [{ title: "场所", icon: "place", link: "hunan-hc/checkin.html"}],
|
||||
menu: [{ title: "场所", icon: "@place", link: "hunan-hc/checkin.html"}],
|
||||
contributors: [
|
||||
{ name: "uodedcli", description: "参与制作", style: "namestrip" },
|
||||
],
|
||||
@ -121,7 +179,7 @@ const apps = {
|
||||
color: "#3a5eff",
|
||||
help_text:
|
||||
"<p>点击姓名、证件号可以修改对应信息;</p><p>点击 “扫一扫” 进入场所张贴码。</p>",
|
||||
menu: [{ title: "场所", icon: "place", link: "fujian-hc/checkin.html" }],
|
||||
menu: [{ title: "场所", icon: "@place", link: "fujian-hc/checkin.html" }],
|
||||
},
|
||||
"zhejiang-hc": {
|
||||
title: "浙江健康码",
|
||||
@ -137,7 +195,7 @@ const apps = {
|
||||
color: "#e84336",
|
||||
help_text:
|
||||
"<p>点击城市名、姓名、证件号可以修改对应信息;</p><p>点击二维码可以切换至“疫情防控场所码”。</p>",
|
||||
menu: [{ title: "场所", icon: "place", link: "henan-hc/checkin.html" }],
|
||||
menu: [{ title: "场所", icon: "@place", link: "henan-hc/checkin.html" }],
|
||||
},
|
||||
"tianjin-hc": {
|
||||
title: "天津数字防疫",
|
||||
@ -153,7 +211,10 @@ const apps = {
|
||||
color: "#0bae81",
|
||||
help_text:
|
||||
"<p>点击地点名称、姓名、证件号可以修改对应信息;</p><p>点击核酸检测时间可以切换小时数;</p><p>点击“已采样”可以切换今日是否采样。</p>",
|
||||
menu: [{ title: "场所", icon: "place", link: "shaanxi-hc/checkin.html" }],
|
||||
menu: [
|
||||
{ title: "场所", icon: "@place", link: "shaanxi-hc/checkin.html" },
|
||||
{ title: "核酸", icon: "@vaccines", link: "shaanxi-hc/nucResult.html" },
|
||||
],
|
||||
},
|
||||
"chongqing-hc": {
|
||||
title: "渝康码",
|
||||
@ -162,8 +223,8 @@ const apps = {
|
||||
color: "#f5aa06",
|
||||
help_text: "<p>点击地点名称、姓名、证件号可以修改对应信息;</p><p>点击二维码可以切换至重庆市“场所码”。</p>",
|
||||
menu: [
|
||||
{ title: "场所", icon: "place", link: "chongqing-hc/checkin.html" },
|
||||
{ title: "核酸", icon: "vaccines", link: "chongqing-hc/detail.html" },
|
||||
{ title: "场所", icon: "@place", link: "chongqing-hc/checkin.html" },
|
||||
{ title: "核酸", icon: "@vaccines", link: "chongqing-hc/detail.html" },
|
||||
]
|
||||
},
|
||||
"hebei-hc": {
|
||||
@ -175,19 +236,20 @@ const apps = {
|
||||
},
|
||||
};
|
||||
|
||||
function onIconFail(t) {
|
||||
t.closest(".app").classList.add("inactivated");
|
||||
}
|
||||
|
||||
function render() {
|
||||
let html = "";
|
||||
for (const [name, app] of Object.entries(apps)) {
|
||||
if (app.html) { html += app.html; continue; }
|
||||
let menu_html = "";
|
||||
if (app.menu) {
|
||||
for (const menu_item of app.menu) {
|
||||
let icon = menu_item.icon || "@qr_code";
|
||||
if (icon.startsWith("@")) {
|
||||
icon = `common/icons/${icon.slice(1)}.svg`;
|
||||
}
|
||||
menu_html += `
|
||||
<div class="app-menu-item" data-role="link" data-link="${menu_item.link || ""}">
|
||||
<img class="app-menu-app-icon" src="common/icons/${menu_item.icon || "qr_code"}.svg"></img>
|
||||
<img class="app-menu-app-icon" src="${icon}"></img>
|
||||
<span class="app-menu-app-title">${menu_item.title}</span>
|
||||
</div>
|
||||
`;
|
||||
@ -231,7 +293,7 @@ function render() {
|
||||
html += `
|
||||
<div class="app" data-link="${app.link || ""}" data-role="app" data-app-name="${name}">
|
||||
<div class="app-content">
|
||||
<img src="${app.icon}" onerror="onIconFail(this);" style="border-color: ${app.color || "#aaa"};">
|
||||
${app.icon && `<img src="${app.icon}" style="border-color: ${app.color || "#aaa"};">` || ""}
|
||||
<div class="app-description">
|
||||
<div class="app-title-wrapper">
|
||||
<span class="app-title">${app.title}</span>
|
||||
@ -257,7 +319,7 @@ function render() {
|
||||
document.querySelector(".apps-list").innerHTML = html;
|
||||
|
||||
const elements = [
|
||||
...document.querySelectorAll(".app:not(.inactivated)"),
|
||||
...document.querySelectorAll(".app"),
|
||||
...document.getElementsByClassName("app-menu-item")
|
||||
];
|
||||
if (elements.length) {
|
||||
@ -268,7 +330,6 @@ function render() {
|
||||
if (data_link) {
|
||||
element.addEventListener("click", (e) => {
|
||||
e.stopPropagation();
|
||||
if (element.classList.contains("inactivated")) return;
|
||||
// try {
|
||||
// navigator.serviceWorker.controller.postMessage({
|
||||
// type: "download",
|
||||
@ -324,12 +385,12 @@ function render() {
|
||||
|
||||
const pinned_list = localStorage.getItem("pinned") ? localStorage.getItem("pinned").split(",") : [];
|
||||
if (pinned_list) {
|
||||
for (const element of document.querySelectorAll(".app:not(.inactivated)") || []) {
|
||||
for (const element of document.querySelectorAll(".app") || []) {
|
||||
if (pinned_list.includes(element.attributes["data-app-name"].value)) {
|
||||
element.style.order = -1;
|
||||
}
|
||||
element.addEventListener("touchstart", (e) => {
|
||||
if (!(e.target.classList && e.target.classList[0].startsWith("app-menu-item")))
|
||||
if (!(e.target.classList[0] && e.target.classList[0].startsWith("app-menu-item")))
|
||||
element.classList.add("selected");
|
||||
});
|
||||
element.addEventListener("touchmove", () => {
|
||||
@ -452,7 +513,7 @@ function render() {
|
||||
document.querySelector(".sw-status").innerHTML = `
|
||||
<div class="icon-align" onclick="toggleDisplay('#pwa-install-help');">
|
||||
<img class="icon" src="common/icons/add_box.svg">
|
||||
<span>添加至主屏幕</span>
|
||||
<span>全屏显示</span>
|
||||
</div>`;
|
||||
} else {
|
||||
document.querySelector(".sw-status").innerHTML = `
|
||||
|
@ -257,7 +257,7 @@
|
||||
<script>
|
||||
setDynamicTime("#datetime");
|
||||
setStaticTime(".covid-test-time", 0, 19, 12, 12)
|
||||
addStorageField("_name", "#name", "名字", "习近平", presetFilters.lastnameonly);
|
||||
addStorageField("_name", "#name", "名字", "习近平", presetFilters.name_preferlastname);
|
||||
addStorageField("_idcard", "#idcard", "身份证号", "110101195306153019", presetFilters.idcard(4, 4));
|
||||
addStorageField("_covid_test_institution", ".covid-test-institution", "检测机构", "河北省疾病预防控制中心");
|
||||
|
||||
|
@ -61,6 +61,9 @@
|
||||
<img src="common/icons/download_done.svg">
|
||||
后项目可离线使用
|
||||
</div>
|
||||
<div class="link-wrapper">
|
||||
由 <a href="https://twitter.com/RhgbuEaAsCCyPrA/status/1597142947774230530" style="margin-right: 6px;">境外势力</a> 强势驱动
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="links-list links-list-help">
|
||||
@ -74,7 +77,7 @@
|
||||
<a id="clear-local-data">清除本地数据</a>
|
||||
</div>
|
||||
<div class="link-wrapper">
|
||||
<span id="last-update" onclick="updateServiceWorker(this);">上次更新:2022-11-25<span id="last-update-version"></span></span>
|
||||
<span id="last-update" onclick="updateServiceWorker(this);">上次更新:2022-11-29<span id="last-update-version"></span></span>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
@ -186,7 +186,7 @@
|
||||
<span>获取到的所有信息均在本地处理</span>
|
||||
<br>
|
||||
<span>“扫描” 开始后</span>
|
||||
<span><b>轻触屏幕</b> 将会 <b>播放“绿码,核酸一天”提示音</b></span>
|
||||
<span><b>轻触屏幕</b> 将会播放 <b>“绿码,核酸一天”</b> 提示音</span>
|
||||
<span>并显示北京健康宝页面</span>
|
||||
<br><br>
|
||||
<p id="tap-to-continue">轻触屏幕继续...</p>
|
||||
|
@ -126,7 +126,7 @@
|
||||
<view style="width:50px;height:50px;border-radius:0px;overflow:visible;background-color:transparent"
|
||||
class="u-image data-v-042b391e">
|
||||
<image src="./static/index/hsjccx.png" mode="aspectFill"
|
||||
style="border-radius:0px;width:50px;height:50px;" role="img" class="u-image__image data-v-042b391e">
|
||||
style="border-radius:0px;width:50px;height:50px;" role="img" class="u-image__image data-v-042b391e" onclick="window.location.href='nucResult.html';">
|
||||
</image>
|
||||
</view>
|
||||
</view>
|
||||
|
@ -82,7 +82,7 @@
|
||||
<view style="width:50px;height:50px;border-radius:0px;overflow:visible;background-color:transparent"
|
||||
class="u-image data-v-042b391e">
|
||||
<image src="./static/index/hsjccx.png" mode="aspectFill"
|
||||
style="border-radius:0px;width:50px;height:50px;" role="img" class="u-image__image data-v-042b391e">
|
||||
style="border-radius:0px;width:50px;height:50px;" role="img" class="u-image__image data-v-042b391e" onclick="window.location.href='nucResult.html';">
|
||||
</image>
|
||||
</view>
|
||||
</view>
|
||||
|
132
src/shaanxi-hc/nucResult.html
Normal file
@ -0,0 +1,132 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<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="#0bae81">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
||||
<link rel="icon" type="image/png" href="./static/myCode/greenLogo.png">
|
||||
<link rel="manifest" href="manifest.json">
|
||||
<link rel="apple-touch-icon" sizes="145x144" href="./static/myCode/greenLogo.png">
|
||||
<link rel="stylesheet" href="../common/nav.css">
|
||||
<link rel="stylesheet" type="text/css" href="./static/css/main-menu.css">
|
||||
<link rel="stylesheet" type="text/css" href="./static/css/index.css">
|
||||
<link rel="stylesheet" type="text/css" href="./static/css/u-image.css">
|
||||
<link rel="stylesheet" type="text/css" href="./static/css/app.css">
|
||||
<link rel="stylesheet" type="text/css" href="./static/css/qrcode.css">
|
||||
<link rel="stylesheet" type="text/css" href="./static/css/nucResult.css">
|
||||
<script src="../common/base.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<view class="navbar navbar--wechat navbar--wechat-alternative">
|
||||
<view class="navbar__placeholder"></view>
|
||||
<view class="navbar__inner" style="background:#0bae81">
|
||||
<view class="navbar__left">
|
||||
<view class="navbar__buttons" onclick="history.back()">
|
||||
<view class="navbar__button-goback"></view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="navbar__center"><text>核酸检测查询</text></view>
|
||||
<view class="navbar__right"></view>
|
||||
</view>
|
||||
<view class="capsule capsule--wechat capsule--alternative" 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>
|
||||
<circle cx="54" cy="14" r="6"></circle>
|
||||
<circle cx="10" cy="14" r="6"></circle>
|
||||
</svg>
|
||||
<view class="capsule__splitter"></view><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>
|
||||
<circle cx="30" cy="30" r="23" stroke-width="6" fill="transparent"></circle>
|
||||
</svg>
|
||||
</view>
|
||||
</view>
|
||||
<view class="page-view nuc data-v-17195bd9">
|
||||
<view class="bg data-v-17195bd9">核酸检测结果由各医院和检测机构提供,纸质检验报告到检测单位获取</view>
|
||||
<view class="nuc-content data-v-17195bd9">
|
||||
<view class="data-v-17195bd9">
|
||||
<view class="data-v-17195bd9 today-result succuss">
|
||||
<view class="t-icon t-icon-duigouxiao data-v-17195bd9"></view>
|
||||
<text class="data-v-17195bd9" style="font-size:4.267vw">24小时内核酸采样已完成</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="Chinese-English data-v-17195bd9">
|
||||
<view class="tic data-v-17195bd9">48小时内核酸检测信息</view>
|
||||
</view>
|
||||
<view class="reportTip data-v-17195bd9">(以出具报告时间为准)</view>
|
||||
|
||||
<view class="nuc-item data-v-224fe6b7">
|
||||
<view class="data-v-224fe6b7">
|
||||
<view class="info data-v-224fe6b7">
|
||||
<view class="cell data-v-224fe6b7">
|
||||
<view class="label data-v-224fe6b7">姓名</view>
|
||||
<text class="va data-v-224fe6b7" id="name"></text>
|
||||
</view>
|
||||
<view class="cell data-v-224fe6b7">
|
||||
<view class="label data-v-224fe6b7">关系</view>
|
||||
<text class="va data-v-224fe6b7">本人</text>
|
||||
</view>
|
||||
<view class="cell data-v-224fe6b7">
|
||||
<view class="label data-v-224fe6b7">证件号码</view>
|
||||
<text class="va data-v-224fe6b7" id="idcard"></text>
|
||||
</view>
|
||||
<view class="data-v-224fe6b7 result t-icon t-icon-yinxing1"></view>
|
||||
<view class="ci l_ci data-v-224fe6b7"></view>
|
||||
<view class="ci r_ci data-v-224fe6b7"></view>
|
||||
</view>
|
||||
<view class="address data-v-224fe6b7">
|
||||
<view class="item data-v-224fe6b7">
|
||||
<text class="label data-v-224fe6b7">采样时间:</text>
|
||||
<text class="data-v-224fe6b7" id="sample-time"></text>
|
||||
|
||||
</view>
|
||||
<view class="item data-v-224fe6b7">
|
||||
<text class="label data-v-224fe6b7">检测时间:</text>
|
||||
<text class="data-v-224fe6b7" id="test-time"></text>
|
||||
</view>
|
||||
<view class="data-v-224fe6b7">
|
||||
<text class="label data-v-224fe6b7">检测机构:</text>
|
||||
<text class="data-v-224fe6b7" id="test-institution"></text>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="other-provinces data-v-17195bd9">
|
||||
<text class="mini-btn buttonStyle data-v-17195bd9" disabled="true" plain="true" size="mini" color="#3DA2FF" text-align="center" type="warn">查询外省市核酸检测结果并上传陕西一码通</text>
|
||||
</view>
|
||||
|
||||
<view class="data-v-17195bd9">
|
||||
<view class="box data-v-17195bd9">
|
||||
<text class="show-tit data-v-17195bd9">近14天全部核酸检测结果</text>
|
||||
<view class="u-icon__icon data-v-2ee87dc9 uicon-arrow-down"></view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tips-b data-v-17195bd9">
|
||||
<view class="data-v-17195bd9">核酸和抗体检测数据在不断汇聚和完善中</view>
|
||||
<view class="data-v-17195bd9">查询结果仅供参考</view>
|
||||
</view>
|
||||
<view class="bottom-btn data-v-17195bd9">
|
||||
<view class="t-icon t-icon-wenti data-v-17195bd9"></view>
|
||||
<text class="data-v-17195bd9">核酸检测结果异常帮助文档</text>
|
||||
</view>
|
||||
</view>
|
||||
<script>
|
||||
// addStorageField("_sample_time", "#sample-time", "采样时间", "2022-11-28 08:12:33");
|
||||
// addStorageField("_test_time", "#test-time", "检测时间", "2022-11-28 08:12:33");
|
||||
setStaticTime("#sample-time", 0, 19, 20, 8);
|
||||
setStaticTime("#test-time", 0, 19, 12, 8);
|
||||
addStorageField("_test_institution", "#test-institution", "检测机构", "西安中美弘康医学检验实验室");
|
||||
addStorageField('_name', '#name', '姓名', '习近平', presetFilters.name_preferfirstname);
|
||||
addStorageField('_idcard', '#idcard', '证件号码', '110101195306153019', presetFilters.idcard(1, 2));
|
||||
initServiceWorker('shaanxi-hc');
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
220
src/shaanxi-hc/static/css/nucResult.css
Normal file
@ -0,0 +1,220 @@
|
||||
.page-view.data-v-17195bd9 {
|
||||
background: #f7f7f7;
|
||||
min-height: 100vh;
|
||||
position: relative;
|
||||
}
|
||||
.nuc.data-v-17195bd9 {
|
||||
padding-bottom: 26.667vw;
|
||||
}
|
||||
.nuc .bg.data-v-17195bd9 {
|
||||
background: #0bae81;
|
||||
box-sizing: border-box;
|
||||
color: #fff;
|
||||
font-size: 3.733vw;
|
||||
height: 18.133vw;
|
||||
padding: 2.667vw 3.733vw;
|
||||
}
|
||||
.nuc .nuc-content.data-v-17195bd9 {
|
||||
background-color: #f7f7f7;
|
||||
border-radius: 2.667vw 2.667vw 0 0;
|
||||
margin-top: -2.667vw;
|
||||
padding: 2.667vw 3.733vw 0;
|
||||
}
|
||||
|
||||
.nuc .nuc-content .Chinese-English.data-v-17195bd9 {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: 2.667vw;
|
||||
}
|
||||
|
||||
.nuc .nuc-content .Chinese-English .tic.data-v-17195bd9 {
|
||||
color: #000;
|
||||
font-size: 4.267vw;
|
||||
font-weight: 600;
|
||||
}
|
||||
.nuc .reportTip.data-v-17195bd9 {
|
||||
color: #a6a6a6;
|
||||
font-family: PingFangSC-Regular,PingFang SC;
|
||||
font-size: 3.2vw;
|
||||
font-weight: 400;
|
||||
line-height: 5.333vw;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.nuc .today-result.data-v-17195bd9 {
|
||||
align-items: center;
|
||||
border-radius: 2.667vw;
|
||||
display: flex;
|
||||
font-size: 4.8vw;
|
||||
font-weight: 600;
|
||||
height: 13.867vw;
|
||||
justify-content: center;
|
||||
}
|
||||
.nuc .today-result .t-icon.data-v-17195bd9 {
|
||||
height: 4.8vw;
|
||||
margin-right: 1.6vw;
|
||||
width: 4.8vw;
|
||||
}
|
||||
|
||||
.nuc .today-result.succuss.data-v-17195bd9 {
|
||||
background-color: #e0f7f1;
|
||||
color: #0bae81;
|
||||
}
|
||||
|
||||
.nuc .buttonStyle.data-v-17195bd9 {
|
||||
background-color: #fff;
|
||||
border: 1px solid #fff;
|
||||
color: #3da2ff;
|
||||
font-size: 3.733vw;
|
||||
height: 8vw;
|
||||
line-height: 8vw;
|
||||
padding: 1.067vw 6.4vw;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.nuc-item.data-v-224fe6b7 {
|
||||
background: #fff;
|
||||
border-radius: 2.667vw;
|
||||
margin-bottom: 2.667vw;
|
||||
}
|
||||
|
||||
.nuc-item .info.data-v-224fe6b7 {
|
||||
border-bottom: 0.267vw dashed #a6a6a6;
|
||||
font-size: 4.267vw;
|
||||
padding: 2.933vw 0;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.nuc-item .info .cell.data-v-224fe6b7 {
|
||||
display: flex;
|
||||
padding: 1.867vw 3.733vw;
|
||||
}
|
||||
|
||||
.nuc-item .info .label.data-v-224fe6b7 {
|
||||
color: #a6a6a6;
|
||||
width: 22.4vw;
|
||||
}
|
||||
|
||||
.nuc-item .info .va.data-v-224fe6b7 {
|
||||
color: #343434;
|
||||
}
|
||||
|
||||
.nuc-item .info .result.data-v-224fe6b7 {
|
||||
height: 22.4vw;
|
||||
position: absolute;
|
||||
right: 4vw;
|
||||
top: 4vw;
|
||||
width: 22.4vw;
|
||||
}
|
||||
|
||||
.nuc-item .info .ci.data-v-224fe6b7 {
|
||||
background-color: #f7f7f7;
|
||||
bottom: -2.667vw;
|
||||
height: 5.333vw;
|
||||
position: absolute;
|
||||
width: 5.333vw;
|
||||
}
|
||||
|
||||
.nuc-item .info .ci.l_ci.data-v-224fe6b7 {
|
||||
border-radius: 0 50% 50% 0;
|
||||
left: -2.667vw;
|
||||
}
|
||||
|
||||
.nuc-item .info .ci.r_ci.data-v-224fe6b7 {
|
||||
border-radius: 50% 0 0 50%;
|
||||
right: -2.667vw;
|
||||
}
|
||||
|
||||
.nuc-item .address.data-v-224fe6b7 {
|
||||
color: #a6a6a6;
|
||||
font-size: 3.733vw;
|
||||
padding: 4.8vw 3.733vw;
|
||||
}
|
||||
|
||||
.nuc-item .address .item.data-v-224fe6b7 {
|
||||
margin-bottom: 1.6vw;
|
||||
}
|
||||
|
||||
.nuc-item .address .label.data-v-224fe6b7 {
|
||||
padding-right: 2.667vw;
|
||||
}
|
||||
|
||||
|
||||
.other-provinces.data-v-17195bd9 {
|
||||
background: #fff;
|
||||
border-radius: 2.667vw;
|
||||
color: #3da2ff;
|
||||
font-size: 3.733vw;
|
||||
font-weight: 400;
|
||||
margin-bottom: 2.133vw;
|
||||
padding: 3.2vw 0;
|
||||
text-align: center;
|
||||
|
||||
}
|
||||
|
||||
.nuc .box.data-v-17195bd9 {
|
||||
background: #fff;
|
||||
border-radius: 2.133vw;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
margin-bottom: 2.667vw;
|
||||
padding: 3.467vw 4.133vw;
|
||||
}
|
||||
|
||||
.nuc .show-tit.data-v-17195bd9 {
|
||||
color: #343434;
|
||||
padding-right: 1.067vw;
|
||||
}
|
||||
|
||||
|
||||
@font-face {
|
||||
font-family:uicon-iconfont;src:url("https://at.alicdn.com/t/font_2225171_8kdcwk4po24.ttf") format("truetype");
|
||||
}
|
||||
.u-icon__icon.data-v-2ee87dc9 {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
font-family: uicon-iconfont;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.nuc .tips-b.data-v-17195bd9 {
|
||||
color: #a6a6a6;
|
||||
font-size: 3.2vw;
|
||||
line-height: 1.8;
|
||||
padding: 0 0 18.667vw;
|
||||
text-align: center;
|
||||
}
|
||||
.nuc .bottom-btn.data-v-17195bd9 {
|
||||
align-items: center;
|
||||
color: #ff9500;
|
||||
font-size: 4.267vw;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.nuc .bottom-btn .t-icon.data-v-17195bd9 {
|
||||
height: 4.267vw;
|
||||
margin-right: 0.8vw;
|
||||
width: 4.267vw;
|
||||
}
|
||||
|
||||
.bottom-btn.data-v-17195bd9 {
|
||||
align-items: center;
|
||||
background: #fff;
|
||||
bottom: 0;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
height: calc(16.533vw + env(safe-area-inset-bottom));
|
||||
justify-content: space-between;
|
||||
left: 0;
|
||||
padding-bottom: env(safe-area-inset-bottom);
|
||||
padding-left: 4.533vw;
|
||||
padding-right: 4.533vw;
|
||||
position: fixed;
|
||||
width: 100vw;
|
||||
z-index: 2;
|
||||
}
|
||||
|
@ -79,7 +79,7 @@
|
||||
<div data-v-52870d82="" id="hours"><img data-v-52870d82="" src="./src/hours.dc948a63.png"></div>
|
||||
<div data-v-52870d82=""><span data-v-52870d82="">姓名:</span><span data-v-52870d82="" class="name"></span></div>
|
||||
<div data-v-52870d82=""><span data-v-52870d82="">采样点:</span><span data-v-52870d82="" class="sample-spot"></span></div>
|
||||
<div data-v-52870d82=""><span data-v-52870d82="">检测时间:</span><span data-v-52870d82="" class="_test_datetime" data-traceback-hours="10" data-traceback-range="4" id="red"></span>
|
||||
<div data-v-52870d82=""><span data-v-52870d82="">检测时间:</span><span data-v-52870d82="" class="_test_datetime" data-traceback-hours="10" data-traceback-range="6" id="red"></span>
|
||||
</div>
|
||||
<div data-v-52870d82=""><span data-v-52870d82="">检测结果:</span><span data-v-52870d82=""
|
||||
style="font-weight: bold; color: rgb(0, 201, 2);">阴性</span></div>
|
||||
@ -89,7 +89,16 @@
|
||||
<div data-v-52870d82="" id="hours"><img data-v-52870d82="" src="./src/hours.dc948a63.png"></div>
|
||||
<div data-v-52870d82=""><span data-v-52870d82="">姓名:</span><span data-v-52870d82="" class="name"></span></div>
|
||||
<div data-v-52870d82=""><span data-v-52870d82="">采样点:</span><span data-v-52870d82="" class="sample-spot"></span></div>
|
||||
<div data-v-52870d82=""><span data-v-52870d82="">检测时间:</span><span data-v-52870d82="" class="_test_datetime" data-traceback-hours="38" data-traceback-range="4" id="red"></span>
|
||||
<div data-v-52870d82=""><span data-v-52870d82="">检测时间:</span><span data-v-52870d82="" class="_test_datetime" data-traceback-hours="38" data-traceback-range="6" id="red"></span>
|
||||
</div>
|
||||
<div data-v-52870d82=""><span data-v-52870d82="">检测结果:</span><span data-v-52870d82=""
|
||||
style="font-weight: bold; color: rgb(0, 201, 2);">阴性</span></div>
|
||||
</div>
|
||||
<div data-v-52870d82="" class="list-container-item">
|
||||
<div data-v-52870d82="" class="bg">江苏省卫生健康委员会</div>
|
||||
<div data-v-52870d82=""><span data-v-52870d82="">姓名:</span><span data-v-52870d82="" class="name"></span></div>
|
||||
<div data-v-52870d82=""><span data-v-52870d82="">采样点:</span><span data-v-52870d82="" class="sample-spot"></span></div>
|
||||
<div data-v-52870d82=""><span data-v-52870d82="">检测时间:</span><span data-v-52870d82="" class="_test_datetime" data-traceback-hours="58" data-traceback-range="6"></span>
|
||||
</div>
|
||||
<div data-v-52870d82=""><span data-v-52870d82="">检测结果:</span><span data-v-52870d82=""
|
||||
style="font-weight: bold; color: rgb(0, 201, 2);">阴性</span></div>
|
||||
@ -102,7 +111,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div data-v-52870d82="" class="explain">
|
||||
<p data-v-52870d82="">数据来源:江苏省卫生健康委员会,反映近30天内核酸检测情况,数据在不断汇聚和完善中。</p>
|
||||
<p data-v-52870d82="">数据来源:江苏省卫生健康委员会,反映近7天内核酸检测情况,数据在不断汇聚和完善中。</p>
|
||||
</div><br data-v-52870d82="">
|
||||
<div data-v-52870d82="" class="footer">
|
||||
<div data-v-52870d82=""><span data-v-52870d82="">技术支持:江苏省卫生健康信息中心</span></div>
|
||||
|
@ -186,8 +186,10 @@
|
||||
<span>获取到的所有信息均在本地处理</span>
|
||||
<br>
|
||||
<span>“扫描” 开始后</span>
|
||||
<span><b>轻触屏幕</b> 将会 <b>播放“绿码,核酸24小时内阴性”提示音</b></span>
|
||||
<span><b>轻触屏幕</b> 将会播放 <b>“绿码,核酸24小时内阴性”</b>提示音</span>
|
||||
<span>并显示随申码场所码页面</span>
|
||||
<br>
|
||||
<span>目前 <b>不能识别</b> 场所码信息,请提前编辑场所名称及地址</span>
|
||||
<br><br>
|
||||
<p id="tap-to-continue">轻触屏幕继续...</p>
|
||||
<br><br>
|
||||
|
@ -48,7 +48,8 @@
|
||||
<!-- Begin Marquee -->
|
||||
<view class="wa-comp-tf-jkt-Marquee" id="id1" style="height: 6.4vw; color: black;">
|
||||
<view class="container" id="id4" style="display: flex; flex-direction: row; animation-duration: 10s;">
|
||||
<text class="text" id="id2" style="width: 100%; white-space: nowrap;">👉 场所码一定要扫吗?被赋黄码怎么办……四川疾控专家权威解答</text>
|
||||
<text class="text" id="id2" style="width: 100%; white-space: nowrap;">👉 四川疾控健康提示(2022年11月28日18时)【点击查看详情】</text>
|
||||
<!-- https://jiankangma-1301171536.file.myqcloud.com/res/Q9_59yNGHZ/region/notice.json -->
|
||||
</view>
|
||||
</view>
|
||||
<!-- End Marquee -->
|
||||
|
@ -1,139 +1,128 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang=en>
|
||||
|
||||
<head>
|
||||
<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=#004FFF>
|
||||
<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/img/logo.png>
|
||||
<link rel=apple-touch-icon href=./static/img/logo.png>
|
||||
<script src=../common/base.js></script>
|
||||
<style>
|
||||
* {
|
||||
<!DOCTYPE html><html lang=en><head><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=#004FFF><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/img/logo.png><link rel=apple-touch-icon href=./static/img/logo.png><script src=../common/base.js></script><style>* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/* p {
|
||||
color: #fff;
|
||||
font-family: sans-serif;
|
||||
text-align: center;
|
||||
font-weight: 600;
|
||||
} */
|
||||
html,
|
||||
body,
|
||||
.scanner-container {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.scanner-container {
|
||||
display: flex;
|
||||
.scan-wrapper {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.relative {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.square {
|
||||
#scan {
|
||||
width: 100%;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
transition: 0.3s;
|
||||
}
|
||||
|
||||
.square:after {
|
||||
content: '';
|
||||
top: 0;
|
||||
display: block;
|
||||
padding-bottom: 100%;
|
||||
}
|
||||
|
||||
.square>div {
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
top: 50%;
|
||||
background: radial-gradient(circle, rgba(93,200,148,1) 0%, rgba(0,0,0,0) 50%);
|
||||
}
|
||||
|
||||
.surround-cover {
|
||||
box-shadow: 0 0 0 99999px rgba(0, 0, 0, 0.8);
|
||||
}
|
||||
|
||||
.barcode-scanner--area--container {
|
||||
width: 80%;
|
||||
max-width: min(500px, 80vh);
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.barcode-scanner--area--outer {
|
||||
display: flex;
|
||||
border-radius: 1em;
|
||||
}
|
||||
|
||||
.barcode-scanner--area--inner {
|
||||
#scan-parent {
|
||||
width: 100%;
|
||||
margin: 1rem;
|
||||
border: 2px solid #fff;
|
||||
box-shadow: 0px 0px 2px 1px rgb(0 0 0 / 0.5),
|
||||
inset 0px 0px 2px 1px rgb(0 0 0 / 0.5);
|
||||
border-radius: 1rem;
|
||||
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 shake {
|
||||
0% {
|
||||
transform: translate(0, 0) rotate(0deg) scale(1);
|
||||
@keyframes scan {
|
||||
from {
|
||||
bottom: 40%;
|
||||
}
|
||||
|
||||
20% {
|
||||
transform: translate(5px, 5px) rotate(-1deg) scale(1.05);
|
||||
}
|
||||
|
||||
40% {
|
||||
transform: translate(5px, 5px) rotate(-2deg) scale(1.07);
|
||||
}
|
||||
|
||||
60% {
|
||||
transform: translate(2px, 2px) rotate(0deg) scale(1.04);
|
||||
}
|
||||
|
||||
80% {
|
||||
transform: translate(-1px, -1px) rotate(-2deg) scale(1.05);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: translate(0, 0) rotate(0deg) scale(1);
|
||||
to {
|
||||
bottom: -20%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<link href=static/css/app.75f3ec59.css rel=stylesheet>
|
||||
</head>
|
||||
@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;
|
||||
}
|
||||
|
||||
<body><noscript><strong>We're sorry but Webpack App doesn't work properly without JavaScript enabled. Please enable it
|
||||
to continue.</strong></noscript>
|
||||
<div id=app></div>
|
||||
<div class=scanner-container>
|
||||
<div class=barcode-scanner--area--container>
|
||||
<div class=relative>
|
||||
<p></p>
|
||||
</div>
|
||||
<div class="square surround-cover">
|
||||
<div class="barcode-scanner--area--outer surround-cover">
|
||||
<div class=barcode-scanner--area--inner></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src=static/js/runtime~app.2ae274cd.js></script>
|
||||
<script src=static/js/app.1faafef1.js></script>
|
||||
<script>initServiceWorker("tianjin-hc");</script>
|
||||
</body>
|
||||
body.scanner-active .scan-wrapper {
|
||||
visibility: visible;
|
||||
}
|
||||
body.scanner-active #app {
|
||||
background: transparent;
|
||||
visibility: hidden;
|
||||
}</style><link href=/tianjin-hc/static/css/chunk-058132aa.60a88c55.css rel=prefetch><link href=/tianjin-hc/static/css/chunk-10aabacd.0c0f497d.css rel=prefetch><link href=/tianjin-hc/static/css/chunk-48084dec.15052ed4.css rel=prefetch><link href=/tianjin-hc/static/css/chunk-4a6c042c.c61d4756.css rel=prefetch><link href=/tianjin-hc/static/css/chunk-7162b29a.a3cf78e6.css rel=prefetch><link href=/tianjin-hc/static/css/chunk-729dcadd.c112cd15.css rel=prefetch><link href=/tianjin-hc/static/css/chunk-7cef904f.61e7a339.css rel=prefetch><link href=/tianjin-hc/static/css/chunk-b6c841ba.1a0699ea.css rel=prefetch><link href=/tianjin-hc/static/js/chunk-058132aa.59160687.js rel=prefetch><link href=/tianjin-hc/static/js/chunk-10aabacd.c4180356.js rel=prefetch><link href=/tianjin-hc/static/js/chunk-15920e85.91c40b35.js rel=prefetch><link href=/tianjin-hc/static/js/chunk-2d0aba8a.97b14652.js rel=prefetch><link href=/tianjin-hc/static/js/chunk-2d0e6128.22197f0b.js rel=prefetch><link href=/tianjin-hc/static/js/chunk-2d0e93c0.e5590f8d.js rel=prefetch><link href=/tianjin-hc/static/js/chunk-48084dec.26aed5d0.js rel=prefetch><link href=/tianjin-hc/static/js/chunk-4a6c042c.481dfff5.js rel=prefetch><link href=/tianjin-hc/static/js/chunk-7162b29a.d5c616bc.js rel=prefetch><link href=/tianjin-hc/static/js/chunk-729dcadd.37078fff.js rel=prefetch><link href=/tianjin-hc/static/js/chunk-784448d2.2ff3b8e1.js rel=prefetch><link href=/tianjin-hc/static/js/chunk-7cef904f.47e43f2e.js rel=prefetch><link href=/tianjin-hc/static/js/chunk-b6c841ba.7f570979.js rel=prefetch><link href=/tianjin-hc/static/css/index.69aca790.css rel=preload as=style><link href=/tianjin-hc/static/js/index.abc09dc0.js rel=preload as=script><link href=/tianjin-hc/static/css/index.69aca790.css rel=stylesheet></head><body><noscript><strong>We're sorry but Webpack App doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><audio id=qrcode-found style="display: none;" src=./qrcode_found.wav></audio><div id=scan-wrapper class=scan-wrapper><video id=scanner-camera 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=""><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><script>const video = document.querySelector("#scanner-camera")
|
||||
function openScanner() {
|
||||
if (navigator.mediaDevices) {
|
||||
document.querySelector('body').classList.add('scanner-active');
|
||||
|
||||
</html>
|
||||
navigator.mediaDevices.getUserMedia({
|
||||
audio: false,
|
||||
video: {
|
||||
facingMode: "environment",
|
||||
}
|
||||
})
|
||||
.then((stream) => {
|
||||
video.srcObject = stream;
|
||||
video.onloadedmetadata = () => {
|
||||
video.play();
|
||||
};
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
}
|
||||
}
|
||||
function closeScanner() {
|
||||
video.srcObject && video.srcObject.getTracks().forEach(function(track) {
|
||||
track.stop();
|
||||
});
|
||||
document.querySelector('body').classList.remove('scanner-active');
|
||||
}
|
||||
|
||||
document.getElementById("scan-wrapper").addEventListener("click", closeScanner);</script><script>initServiceWorker("tianjin-hc");</script><script src=/tianjin-hc/static/js/index.abc09dc0.js></script></body></html>
|
@ -12,5 +12,6 @@
|
||||
"start_url": ".",
|
||||
"display": "standalone",
|
||||
"scope": "/",
|
||||
"description": "天津数字防疫模拟"
|
||||
}
|
||||
"description": "天津数字防疫模拟",
|
||||
"orientation": "portrait-primary"
|
||||
}
|
1
src/tianjin-hc/static/css/chunk-058132aa.60a88c55.css
Normal file
@ -0,0 +1 @@
|
||||
.page[data-v-9c16a7ca]{display:flex;flex-flow:column;padding-top:0}.head[data-v-9c16a7ca]{background:url(../../static/img/bg_me_top.2402edfe.png) no-repeat;background-size:cover;background-position-y:bottom;height:183px;padding:21px 16px;padding-top:calc(env(safe-area-inset-top) + 21px)}.head .caption[data-v-9c16a7ca]{color:#fff;font-size:15pt;font-weight:700}.head .avatar img[data-v-9c16a7ca]{width:50px}.head .info[data-v-9c16a7ca]{color:#fff;display:flex;flex-flow:row;align-items:center;font-size:16px;margin-top:20px}.head .info .names[data-v-9c16a7ca]{margin-left:8px;line-height:1.5em;display:flex;flex-flow:column}.head .info .names .name[data-v-9c16a7ca]{display:flex;flex-flow:row;align-items:center}.head .info .id[data-v-9c16a7ca]{display:flex;align-items:center}.main[data-v-9c16a7ca]{background-color:#f7f7f7;flex-grow:4}
|
1
src/tianjin-hc/static/css/chunk-10aabacd.0c0f497d.css
Normal file
@ -0,0 +1 @@
|
||||
.page[data-v-9d7bf948]{background:url(../../static/img/bg_health.cf16faaa.png) no-repeat;background-size:cover;padding-top:env(safe-area-inset-top);padding-left:14px;padding-right:14px}.head[data-v-9d7bf948]{font-size:20px;color:#fff;display:flex;justify-content:space-between;margin:21px 0}.head .name[data-v-9d7bf948]{font-weight:700}.days[data-v-9d7bf948]{padding-bottom:4px}.code[data-v-9d7bf948],.days[data-v-9d7bf948]{margin-top:18px;display:flex;background:#fff;border:1px solid #fff;border-radius:6px;width:100%;position:relative}.code[data-v-9d7bf948]{padding-bottom:18px;padding-top:30px;flex-direction:column}.code .time[data-v-9d7bf948]{text-align:center;width:100%}.code .time .line1[data-v-9d7bf948]{font-size:20px;font-weight:700}.code .time .line2[data-v-9d7bf948]{font-size:30px;font-weight:700}.code .core img[data-v-9d7bf948]{width:100%}.code .place[data-v-9d7bf948]{font-weight:700;line-height:1.8em;font-size:10.5pt;display:flex;justify-content:center}.code .place .place-text[data-v-9d7bf948]{max-width:calc(100% - 5em)}.code .place .txt[data-v-9d7bf948]{color:#3773f4}.others[data-v-9d7bf948]{display:flex;width:100%;position:relative;padding-bottom:18px;padding-top:18px;flex-direction:row;justify-content:space-between}.others .vaccine[data-v-9d7bf948],.others .xck[data-v-9d7bf948]{background:#fff;border:1px solid #fff;border-radius:6px;width:calc(50% - 6px);padding:4px}.others img[data-v-9d7bf948]{width:100%}.main[data-v-9d7bf948]{background:#fff;border:1px solid #fff;border-radius:6px}.member[data-v-9d7bf948]{display:flex;align-items:center;font-size:14px;width:100%;padding:0 8px;margin:12px 0}.member .icon img[data-v-9d7bf948]{height:40px}.member .texts[data-v-9d7bf948]{flex-grow:1;display:flex;flex-direction:column;padding-left:4px}.member .texts .line1[data-v-9d7bf948]{display:flex;align-items:center}.member .texts .line1 .name[data-v-9d7bf948]{padding-right:4px}.member .texts .id[data-v-9d7bf948]{line-height:1.5em}.member .actions[data-v-9d7bf948]{display:flex;justify-content:flex-end}.member .actions .tiny-button[data-v-9d7bf948]{font-size:11px}.van-button--mini[data-v-9d7bf948]{height:20px;padding:0 7px}.add-member-wrapper[data-v-9d7bf948]{display:flex;justify-content:center;padding:8px}.add-member-wrapper .van-button[data-v-9d7bf948]{width:90%}
|
@ -1 +0,0 @@
|
||||
.left-span[data-v-19f6d3d8]{font-size:1.1rem;color:#1989fa}.page[data-v-4182dabc]{display:flex;flex-direction:column;font-size:14pt}.topping[data-v-4182dabc] .van-nav-bar--fixed{top:auto}
|
@ -1 +0,0 @@
|
||||
.page[data-v-ed8c93d8]{background:url(../../static/img/bg_nucleic_acid.f1330aba.png) no-repeat;background-size:100%;height:100vh}.title[data-v-ed8c93d8]{margin:80px auto 40px auto;width:100%;padding:0 40px}.buttons[data-v-ed8c93d8]{display:flex;justify-content:space-evenly;margin:20px}.buttons img[data-v-ed8c93d8]{height:72px}
|
1
src/tianjin-hc/static/css/chunk-48084dec.15052ed4.css
Normal file
@ -0,0 +1 @@
|
||||
.page[data-v-1e4c9296]{background:url(../../static/img/bg_nucleic_acid.5895ec95.png) no-repeat;background-size:cover;height:100vh}.head[data-v-1e4c9296]{font-size:20px;color:#fff;display:flex;justify-content:space-between;margin:21px 0;padding-left:14px;padding-right:14px}.head .name[data-v-1e4c9296]{font-weight:700}.title[data-v-1e4c9296]{margin:60px auto 50px auto;width:100%;padding:0 30px}.buttons[data-v-1e4c9296]{display:flex;justify-content:space-evenly;margin:40px}.buttons img[data-v-1e4c9296]{height:76px}.member[data-v-1e4c9296]{display:flex;align-items:center;font-size:14px;width:100%;padding:0 8px;margin:12px 0}.member .icon img[data-v-1e4c9296]{height:40px}.member .texts[data-v-1e4c9296]{flex-grow:1;display:flex;flex-direction:column;padding-left:4px}.member .texts .line1[data-v-1e4c9296]{display:flex;align-items:center}.member .texts .line1 .name[data-v-1e4c9296]{padding-right:4px}.member .texts .id[data-v-1e4c9296]{line-height:1.5em}.member .actions[data-v-1e4c9296]{display:flex;justify-content:flex-end}.member .actions .tiny-button[data-v-1e4c9296]{font-size:11px}.van-button--mini[data-v-1e4c9296]{height:20px;padding:0 7px}.add-member-wrapper[data-v-1e4c9296]{display:flex;justify-content:center;padding:8px}.add-member-wrapper .van-button[data-v-1e4c9296]{width:90%}
|
@ -1 +0,0 @@
|
||||
.page[data-v-2eaf9ee6]{background:url(../../static/img/bg_health.cf16faaa.png) no-repeat;background-size:100%;padding-top:0}.main[data-v-2eaf9ee6]{background:#fff;border:1px solid #fff;border-radius:6px;margin:0 16px;display:flex;flex-direction:column;align-items:center;position:relative}.main .names[data-v-2eaf9ee6]{margin:12px;color:#424242;font-size:17px;width:100%}.main .names .line1[data-v-2eaf9ee6]{font-weight:700}.main .names p[data-v-2eaf9ee6]{margin:4px 0;text-indent:2em}.main .time[data-v-2eaf9ee6]{text-align:center;width:100%;font-size:24px;font-weight:700}.main .today[data-v-2eaf9ee6]{margin:12px}.main .query-button[data-v-2eaf9ee6]{background:#edf6fd;border:1px solid #9cbde0;color:#3f80f4;display:inline-flex;justify-content:center;align-items:center;padding:6px 16px;font-size:14px;font-weight:700}.main .query-button .txt[data-v-2eaf9ee6]{margin-left:6px;display:inline-block}.main .todayOK[data-v-2eaf9ee6]{color:#07a969;font-weight:700;font-size:28px}.main .qrcode-wrap[data-v-2eaf9ee6]{width:268px;height:268px;margin:0 auto;display:flex;flex-direction:column;justify-content:center;align-items:center;position:relative}.main .qrcode-wrap img[data-v-2eaf9ee6]{width:268px;height:268px}.main .qrcode-wrap .txt[data-v-2eaf9ee6]{color:#fff;font-size:24px;position:absolute}.buttons[data-v-2eaf9ee6]{display:flex;justify-content:space-evenly;margin:20px}.buttons img[data-v-2eaf9ee6]{height:72px}
|
1
src/tianjin-hc/static/css/chunk-729dcadd.c112cd15.css
Normal file
@ -0,0 +1 @@
|
||||
.page[data-v-b311319a]{background:url(../../static/img/bg_health.cf16faaa.png) no-repeat;background-size:cover;padding-top:calc(env(safe-area-inset-top) + 54px);padding-left:14px;padding-right:14px}.page-title[data-v-b311319a]{color:#fff;font-size:18px}.van-nav-bar[data-v-b311319a]{padding-top:env(safe-area-inset-top);background:none}.records[data-v-b311319a]{background:#fff;border:1px solid #fff;border-radius:6px;line-height:2em}.records .caption[data-v-b311319a]{font-size:17px;margin:6px 8px}.records .hairline-bottom[data-v-b311319a]{border-bottom:.5px solid #ccc}.records .negative[data-v-b311319a]{background-color:#61c05a;color:#fff;width:40px;height:40px;border:.5px solid #61c05a;border-radius:50%;display:flex;justify-content:center;align-items:center;font-weight:400;font-size:18px}.records .item[data-v-b311319a]{background:#f3f3f3;border:1px solid #f3f3f3;border-radius:6px;display:flex;justify-content:space-between;margin:10px 8px;padding:12px;font-size:16px}.records .item .captions[data-v-b311319a]{width:86px;flex-shrink:0}.records .item .content[data-v-b311319a]{flex-grow:3}.records .item .icon[data-v-b311319a]{display:flex;align-items:center;margin:0 8px;margin-right:0}.disclaimer[data-v-b311319a]{color:#fff;margin:12px;padding:0 20px;font-size:14px;text-align:center}
|
@ -1 +0,0 @@
|
||||
.page[data-v-6377acba]{background:url(../../static/img/bg_health.cf16faaa.png) no-repeat;background-size:100vh;padding-top:calc(env(safe-area-inset-top) + 54px);padding-left:14px;padding-right:14px}.page-title[data-v-6377acba]{color:#fff;font-size:18px}.van-nav-bar[data-v-6377acba]{padding-top:env(safe-area-inset-top);background:none}.records[data-v-6377acba]{background:#fff;border:1px solid #fff;border-radius:6px;line-height:2em}.records .caption[data-v-6377acba]{font-size:17px;margin:6px 8px}.records .hairline-bottom[data-v-6377acba]{border-bottom:.5px solid #ccc}.records .negative[data-v-6377acba]{background-color:#61c05a;color:#fff;width:40px;height:40px;border:.5px solid #61c05a;border-radius:50%;display:flex;justify-content:center;align-items:center;font-weight:400;font-size:18px}.records .item[data-v-6377acba]{background:#f3f3f3;border:1px solid #f3f3f3;border-radius:6px;display:flex;justify-content:space-between;margin:10px 8px;padding:12px;font-size:16px}.records .item .captions[data-v-6377acba]{width:86px;flex-shrink:0}.records .item .icon[data-v-6377acba]{display:flex;align-items:center;margin:0 8px;margin-right:0}.disclaimer[data-v-6377acba]{color:#fff;margin:12px;padding:0 20px;font-size:14px;text-align:center}
|
@ -1 +0,0 @@
|
||||
.page[data-v-5e92a1be]{background:url(../../static/img/bg_health.cf16faaa.png) no-repeat;background-size:100%;padding-top:env(safe-area-inset-top);padding-left:14px;padding-right:14px}.head[data-v-5e92a1be]{font-size:17px;color:#fff;display:flex;justify-content:space-between}.head .name[data-v-5e92a1be]{font-weight:700}.days[data-v-5e92a1be]{padding-bottom:4px}.code[data-v-5e92a1be],.days[data-v-5e92a1be]{margin-top:18px;display:flex;background:#fff;border:1px solid #fff;border-radius:6px;width:100%;position:relative}.code[data-v-5e92a1be]{padding-bottom:18px;padding-top:30px;flex-direction:column}.code .time[data-v-5e92a1be]{text-align:center;width:100%}.code .time .line1[data-v-5e92a1be]{font-size:20px;font-weight:700}.code .time .line2[data-v-5e92a1be]{font-size:28px;font-weight:700}.code .core img[data-v-5e92a1be]{width:100%}.code .place[data-v-5e92a1be]{font-weight:700;line-height:1.8em;font-size:10.5pt;display:flex;justify-content:center}.code .place .place-text[data-v-5e92a1be]{max-width:calc(100% - 5em)}.code .place .txt[data-v-5e92a1be]{color:#3773f4}.others[data-v-5e92a1be]{display:flex;width:100%;position:relative;padding-bottom:18px;padding-top:18px;flex-direction:row;justify-content:space-between}.others .vaccine[data-v-5e92a1be],.others .xck[data-v-5e92a1be]{background:#fff;border:1px solid #fff;border-radius:6px;width:calc(50% - 6px);padding:4px}.others img[data-v-5e92a1be]{width:100%}.main[data-v-5e92a1be]{background:#fff;border:1px solid #fff;border-radius:6px}.member[data-v-5e92a1be]{display:flex;align-items:center;font-size:14px;width:100%;padding:0 8px;margin:12px 0}.member .icon img[data-v-5e92a1be]{height:40px}.member .texts[data-v-5e92a1be]{flex-grow:1;display:flex;flex-direction:column;padding-left:4px}.member .texts .line1[data-v-5e92a1be]{display:flex;align-items:center}.member .texts .line1 .name[data-v-5e92a1be]{padding-right:4px}.member .texts .id[data-v-5e92a1be]{line-height:1.5em}.member .actions[data-v-5e92a1be]{display:flex;justify-content:flex-end}.member .actions .tiny-button[data-v-5e92a1be]{font-size:11px}.van-button--mini[data-v-5e92a1be]{height:20px;padding:0 7px}.add-member-wrapper[data-v-5e92a1be]{display:flex;justify-content:center;padding:8px}.add-member-wrapper .van-button[data-v-5e92a1be]{width:90%}
|
1
src/tianjin-hc/static/css/chunk-7cef904f.61e7a339.css
Normal file
@ -0,0 +1 @@
|
||||
.left-span[data-v-19f6d3d8]{font-size:1.1rem;color:#1989fa}.page[data-v-2029837e]{display:flex;flex-flow:column;font-size:14pt;padding-top:calc(env(safe-area-inset-top) + 21px)}.van-form[data-v-2029837e]{margin:8px 0}p.desc[data-v-2029837e]{font-size:14px;color:#666;margin:0;padding:12px 12px 6px 12px}p.desc ul[data-v-2029837e]{list-style-type:disc;margin-left:1.5em}
|
@ -1 +0,0 @@
|
||||
.page{background:url(../../static/img/bg_health.cf16faaa.png) no-repeat;background-size:100%}
|
1
src/tianjin-hc/static/css/chunk-b6c841ba.1a0699ea.css
Normal file
@ -0,0 +1 @@
|
||||
.page[data-v-415bc270]{background:url(../../static/img/bg_health.cf16faaa.png) no-repeat;background-size:100%;padding-top:0}.main[data-v-415bc270]{background:#fff;border:1px solid #fff;border-radius:6px;margin:0 16px;display:flex;flex-direction:column;align-items:center;position:relative}.main .van-notice-bar[data-v-415bc270]{width:100%;border-radius:6px}.main .van-notice-bar[data-v-415bc270] .van-notice-bar__content{font-size:17px;font-weight:700}.main .names[data-v-415bc270]{margin:12px;color:#424242;font-size:17px;width:100%}.main .names .line1[data-v-415bc270]{font-weight:700}.main .names p[data-v-415bc270]{margin:4px 0;text-indent:1.2em}.main .time[data-v-415bc270]{text-align:center;width:100%;font-size:24px;font-weight:700}.main .today[data-v-415bc270]{margin:12px}.main .query-button[data-v-415bc270]{background:#edf6fd;border:1px solid #9cbde0;color:#3f80f4;display:inline-flex;justify-content:center;align-items:center;padding:6px 16px;font-size:14px;font-weight:700}.main .query-button .txt[data-v-415bc270]{margin-left:6px;display:inline-block}.main .todayOK[data-v-415bc270]{color:#07a969;font-weight:700;font-size:28px}.main .qrcode-wrap[data-v-415bc270]{width:268px;height:268px;margin:0 auto;display:flex;flex-direction:column;justify-content:center;align-items:center;position:relative}.main .qrcode-wrap img[data-v-415bc270]{width:268px;height:268px}.main .qrcode-wrap .txt[data-v-415bc270]{color:#fff;font-size:24px;position:absolute}.buttons[data-v-415bc270]{display:flex;justify-content:space-evenly;margin:20px}.buttons img[data-v-415bc270]{height:72px}
|
1
src/tianjin-hc/static/css/index.69aca790.css
Normal file
BIN
src/tianjin-hc/static/img/bg_me_top.2402edfe.png
Normal file
After Width: | Height: | Size: 78 KiB |
BIN
src/tianjin-hc/static/img/bg_nucleic_acid.5895ec95.png
Normal file
After Width: | Height: | Size: 1.1 MiB |
Before Width: | Height: | Size: 563 KiB |
Before Width: | Height: | Size: 126 KiB After Width: | Height: | Size: 126 KiB |
Before Width: | Height: | Size: 214 KiB |
BIN
src/tianjin-hc/static/img/config-0.3b53e676.png
Normal file
After Width: | Height: | Size: 83 KiB |
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 112 KiB |
1
src/tianjin-hc/static/js/chunk-058132aa.59160687.js
Normal file
10
src/tianjin-hc/static/js/chunk-10aabacd.c4180356.js
Normal file
@ -1 +0,0 @@
|
||||
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-258b3eb3"],{"030e":function(t,e,a){"use strict";a("a1de")},"3c96":function(t,e,a){"use strict";a.d(e,"a",(function(){return i})),a.d(e,"b",(function(){return n}));a("456d"),a("ac6a"),a("f3e2");var i=function(){for(var t={},e=arguments.length,a=new Array(e),i=0;i<e;i++)a[i]=arguments[i];return a.forEach((function(e){t[e]=window.localStorage.getItem(e)||null})),t},n=function(t){Object.keys(t).forEach((function(e){var a=t[e];window.localStorage.setItem(e,a)}))}},"41e5":function(t,e,a){t.exports=a.p+"static/img/ic_get_report_gray.50a14653.png"},"456d":function(t,e,a){var i=a("4bf8"),n=a("0d58");a("5eda")("keys",(function(){return function(t){return n(i(t))}}))},"5eda":function(t,e,a){var i=a("5ca1"),n=a("8378"),r=a("79e5");t.exports=function(t,e){var a=(n.Object||{})[t]||Object[t],s={};s[t]=e(a),i(i.S+i.F*r((function(){a(1)})),"Object",s)}},"9a67":function(t,e,a){t.exports=a.p+"static/img/ic_nucleicacid_title.aa40abf8.png"},a1de:function(t,e,a){},ac6a:function(t,e,a){for(var i=a("cadf"),n=a("0d58"),r=a("2aba"),s=a("7726"),c=a("32e9"),o=a("84f2"),f=a("2b4c"),d=f("iterator"),u=f("toStringTag"),l=o.Array,m={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},g=n(m),p=0;p<g.length;p++){var h,L=g[p],S=m[L],T=s[L],b=T&&T.prototype;if(b&&(b[d]||c(b,d,l),b[u]||c(b,u,L),o[L]=l,S))for(h in i)b[h]||r(b,h,i[h],!0)}},bf77:function(t,e,a){t.exports=a.p+"static/img/ic_nucleicacid_save2.a7f9ae61.png"},de53:function(t,e,a){t.exports=a.p+"static/img/report-bg.74e16362.png"},e051:function(t,e,a){"use strict";a.r(e);var i=function(){var t=this,e=t._self._c;return e("div",{staticClass:"page"},[e("img",{staticClass:"page-part-2 title",attrs:{src:a("9a67")}}),e("img",{ref:"reportImage",staticStyle:{display:"none"},attrs:{src:a("de53")}}),e("canvas",{ref:"canvas",staticClass:"page-part-2",staticStyle:{display:"none"},attrs:{width:"1284",height:"907"}}),e("img",{ref:"finalImage",staticClass:"page-part-2"}),t._m(0)])},n=[function(){var t=this,e=t._self._c;return e("div",{staticClass:"buttons"},[e("img",{attrs:{src:a("bf77")}}),e("img",{attrs:{src:a("41e5")}})])}],r=(a("7f7f"),a("5a0c")),s=a.n(r),c=a("3c96"),o={data:function(){return{form:{},pcrTime1:s()().add(-1,"day").add(6,"hour").add(60*Math.random(),"minute").add(60*Math.random(),"second").format("YYYY-MM-DD HH:mm"),pcrTime2:s()().add(-1,"day").add(12,"hour").add(60*Math.random(),"minute").add(60*Math.random(),"second").format("YYYY-MM-DD HH:mm")}},mounted:function(){this.form=Object.assign(this.form,Object(c["a"])("name","id")),this.draw()},methods:{draw:function(){var t=this,e=this.$refs.canvas.getContext("2d");this.$refs.reportImage.addEventListener("load",(function(){e.drawImage(t.$refs.reportImage,0,0),e.font="20px sans-serif",e.fillText(t.form.name,314,220),e.fillText(t.form.id,370,260),e.fillText(t.pcrTime1,480,668),e.fillText(t.pcrTime2,960,668),t.$refs.finalImage.src=t.$refs.canvas.toDataURL()}))}}},f=o,d=(a("030e"),a("2877")),u=Object(d["a"])(f,i,n,!1,null,"ed8c93d8",null);e["default"]=u.exports},f3e2:function(t,e,a){"use strict";var i=a("5ca1"),n=a("0a49")(0),r=a("2f21")([].forEach,!0);i(i.P+i.F*!r,"Array",{forEach:function(t){return n(this,t,arguments[1])}})}}]);
|
1
src/tianjin-hc/static/js/chunk-48084dec.26aed5d0.js
Normal file
1
src/tianjin-hc/static/js/chunk-4a6c042c.481dfff5.js
Normal file
@ -1 +1 @@
|
||||
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-60ef386e"],{"4ac6":function(c,t,n){"use strict";n.r(t);var s=function(){var c=this;c._self._c;return c._m(0)},e=[function(){var c=this,t=c._self._c;return t("div",{staticClass:"page"},[t("img",{staticClass:"legend",attrs:{src:n("7ac2")}})])}],i=(n("9d55"),n("2877")),a={},r=Object(i["a"])(a,s,e,!1,null,"fc819e78",null);t["default"]=r.exports},"7ac2":function(c,t,n){c.exports=n.p+"static/img/bg_icon_describe.f59ddbec.png"},"9d55":function(c,t,n){"use strict";n("c955")},c955:function(c,t,n){}}]);
|
||||
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-7162b29a"],{"4ac6":function(c,t,n){"use strict";n.r(t);var s=function(){var c=this;c._self._c;return c._m(0)},i=[function(){var c=this,t=c._self._c;return t("div",{staticClass:"page"},[t("img",{staticClass:"legend",attrs:{src:n("7ac2")}})])}],e=(n("9d55"),n("2877")),a={},r=Object(e["a"])(a,s,i,!1,null,"fc819e78",null);t["default"]=r.exports},"7ac2":function(c,t,n){c.exports=n.p+"static/img/bg_icon_describe.f59ddbec.png"},"9d55":function(c,t,n){"use strict";n("c955")},c955:function(c,t,n){}}]);
|
1
src/tianjin-hc/static/js/chunk-729dcadd.37078fff.js
Normal file
3
src/tianjin-hc/static/js/chunk-784448d2.2ff3b8e1.js
Normal file
1
src/tianjin-hc/static/js/chunk-7cef904f.47e43f2e.js
Normal file
@ -1 +0,0 @@
|
||||
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-81baaa6e"],{2035:function(t,n,c){},"7d5e":function(t,n,c){t.exports=c.p+"static/img/config-0.221fb95a.png"},e8c7:function(t,n,c){"use strict";c("2035")},eb88:function(t,n,c){"use strict";c.r(n);var i=function(){var t=this,n=t._self._c;return n("div",{staticClass:"page",on:{click:t.gotoConfig}},[n("img",{staticClass:"page-part-2",attrs:{src:c("7d5e")}})])},o=[],s={methods:{gotoConfig:function(){this.$router.push("/config")}}},e=s,a=(c("e8c7"),c("2877")),u=Object(a["a"])(e,i,o,!1,null,null,null);n["default"]=u.exports}}]);
|
1
src/tianjin-hc/static/js/chunk-b6c841ba.7f570979.js
Normal file
20
src/tianjin-hc/static/js/index.abc09dc0.js
Normal file
@ -1 +0,0 @@
|
||||
(function(e){function n(n){for(var r,c,o=n[0],f=n[1],i=n[2],d=0,h=[];d<o.length;d++)c=o[d],Object.prototype.hasOwnProperty.call(a,c)&&a[c]&&h.push(a[c][0]),a[c]=0;for(r in f)Object.prototype.hasOwnProperty.call(f,r)&&(e[r]=f[r]);l&&l(n);while(h.length)h.shift()();return u.push.apply(u,i||[]),t()}function t(){for(var e,n=0;n<u.length;n++){for(var t=u[n],r=!0,c=1;c<t.length;c++){var o=t[c];0!==a[o]&&(r=!1)}r&&(u.splice(n--,1),e=f(f.s=t[0]))}return e}var r={},c={"runtime~app":0},a={"runtime~app":0},u=[];function o(e){return f.p+"static/js/"+({}[e]||e)+"."+{"chunk-138c822c":"ba9b8f0d","chunk-15920e85":"6eec9ac6","chunk-258b3eb3":"d9403a56","chunk-5870a64c":"7449e3ed","chunk-4bad5866":"f4231835","chunk-743435bd":"8ba2534d","chunk-79557ba2":"01fd515f","chunk-60ef386e":"1f86de1c","chunk-81baaa6e":"6f2d5070","chunk-e58f8fbe":"251b9f78","chunk-2d0e93c0":"e5590f8d","chunk-2d0aba8a":"97b14652","chunk-2d0e6128":"22197f0b"}[e]+".js"}function f(n){if(r[n])return r[n].exports;var t=r[n]={i:n,l:!1,exports:{}};return e[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}f.e=function(e){var n=[],t={"chunk-138c822c":1,"chunk-258b3eb3":1,"chunk-4bad5866":1,"chunk-743435bd":1,"chunk-79557ba2":1,"chunk-60ef386e":1,"chunk-81baaa6e":1,"chunk-e58f8fbe":1};c[e]?n.push(c[e]):0!==c[e]&&t[e]&&n.push(c[e]=new Promise((function(n,t){for(var r="static/css/"+({}[e]||e)+"."+{"chunk-138c822c":"e042f172","chunk-15920e85":"31d6cfe0","chunk-258b3eb3":"efb43758","chunk-5870a64c":"31d6cfe0","chunk-4bad5866":"2b261d97","chunk-743435bd":"83093c21","chunk-79557ba2":"7642c8d5","chunk-60ef386e":"a3cf78e6","chunk-81baaa6e":"9e9ecaa4","chunk-e58f8fbe":"c61d4756","chunk-2d0e93c0":"31d6cfe0","chunk-2d0aba8a":"31d6cfe0","chunk-2d0e6128":"31d6cfe0"}[e]+".css",a=f.p+r,u=document.getElementsByTagName("link"),o=0;o<u.length;o++){var i=u[o],d=i.getAttribute("data-href")||i.getAttribute("href");if("stylesheet"===i.rel&&(d===r||d===a))return n()}var h=document.getElementsByTagName("style");for(o=0;o<h.length;o++){i=h[o],d=i.getAttribute("data-href");if(d===r||d===a)return n()}var l=document.createElement("link");l.rel="stylesheet",l.type="text/css",l.onload=n,l.onerror=function(n){var r=n&&n.target&&n.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+r+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=r,delete c[e],l.parentNode.removeChild(l),t(u)},l.href=a;var s=document.getElementsByTagName("head")[0];s.appendChild(l)})).then((function(){c[e]=0})));var r=a[e];if(0!==r)if(r)n.push(r[2]);else{var u=new Promise((function(n,t){r=a[e]=[n,t]}));n.push(r[2]=u);var i,d=document.createElement("script");d.charset="utf-8",d.timeout=120,f.nc&&d.setAttribute("nonce",f.nc),d.src=o(e);var h=new Error;i=function(n){d.onerror=d.onload=null,clearTimeout(l);var t=a[e];if(0!==t){if(t){var r=n&&("load"===n.type?"missing":n.type),c=n&&n.target&&n.target.src;h.message="Loading chunk "+e+" failed.\n("+r+": "+c+")",h.name="ChunkLoadError",h.type=r,h.request=c,t[1](h)}a[e]=void 0}};var l=setTimeout((function(){i({type:"timeout",target:d})}),12e4);d.onerror=d.onload=i,document.head.appendChild(d)}return Promise.all(n)},f.m=e,f.c=r,f.d=function(e,n,t){f.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:t})},f.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"===typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(e){var n=e&&e.__esModule?function(){return e["default"]}:function(){return e};return f.d(n,"a",n),n},f.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},f.p="",f.oe=function(e){throw console.error(e),e};var i=window["webpackJsonp"]=window["webpackJsonp"]||[],d=i.push.bind(i);i.push=n,i=i.slice();for(var h=0;h<i.length;h++)n(i[h]);var l=d;t()})([]);
|
21
tools/local-https/cert.pem
Normal file
@ -0,0 +1,21 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDazCCAlOgAwIBAgIUJI9QRFOC7dy1Dqs+vbf0eE53p3QwDQYJKoZIhvcNAQEL
|
||||
BQAwRTELMAkGA1UEBhMCQ04xEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM
|
||||
GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yMjExMjYwNDQyNDZaFw0zMjEx
|
||||
MjMwNDQyNDZaMEUxCzAJBgNVBAYTAkNOMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw
|
||||
HwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggEiMA0GCSqGSIb3DQEB
|
||||
AQUAA4IBDwAwggEKAoIBAQDH1VXDiZjkgKcN3JoLy0JQyX81v5YVwS4myyy0Gaoc
|
||||
OT2dadAwQ1mJrNPGO39vtmWueK8M8Yqo7f6PtXj5lEsxEK9R3E/LdQtUAK/C3NYx
|
||||
lSnaRE7Suay07JoARawmXaAno0FFzbFLMh1TdlKO3TuzK8yPZc4i8IK7BKU3OFe7
|
||||
sPXGUVfJL5q0OaOwaHJVwv3Qi854+IL1xc7mkoCTlMdE74XVa5fTpIWq80SXSC2s
|
||||
Usq7f4FCnBVde0mNT+g2cFLEE25yNGYYXDTvtTR18mA79eqYL2VMnWFAW0cXSCzW
|
||||
7oVYL+5lr5AjzQfQGZq3kQykN1Oge+LPsJg3Pd9HpCcjAgMBAAGjUzBRMB0GA1Ud
|
||||
DgQWBBRvH2z78HnhknCwGa0zbIdSQ/AkIzAfBgNVHSMEGDAWgBRvH2z78HnhknCw
|
||||
Ga0zbIdSQ/AkIzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCe
|
||||
hlkw7PF1cmD9TcULwPA0UgmkpIGgXriW4VUrJ2DBSjFXTJKIkssOW+BhwwDcB9Xa
|
||||
Zt+lhRpPirUOlYd64ODRU4zFyiTpjP86C50zQwVQRep+vV3TBZ7e68uj2NhG8kgj
|
||||
DS4XsGKC2sAvsBAXv6qNDiGxaJhMkIv2k8MzHSuwpDFjxmkyJNb8fN3sy7o+zAL0
|
||||
rQSeDcJQDUqLQzHHPdKcsINF9O+Sd7qlyByRYbL3/143tSEf+d8qPtzhPBST3Gcx
|
||||
X+mVlaArRPSXkup5zqTBfrHEq1I26OTAhHgMjRMB8sCkJcL7SaUg/Qmoo+CvKDeu
|
||||
mE4nBtYM3j7sZzFgXZkf
|
||||
-----END CERTIFICATE-----
|
28
tools/local-https/key.pem
Normal file
@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEuwIBADANBgkqhkiG9w0BAQEFAASCBKUwggShAgEAAoIBAQDH1VXDiZjkgKcN
|
||||
3JoLy0JQyX81v5YVwS4myyy0GaocOT2dadAwQ1mJrNPGO39vtmWueK8M8Yqo7f6P
|
||||
tXj5lEsxEK9R3E/LdQtUAK/C3NYxlSnaRE7Suay07JoARawmXaAno0FFzbFLMh1T
|
||||
dlKO3TuzK8yPZc4i8IK7BKU3OFe7sPXGUVfJL5q0OaOwaHJVwv3Qi854+IL1xc7m
|
||||
koCTlMdE74XVa5fTpIWq80SXSC2sUsq7f4FCnBVde0mNT+g2cFLEE25yNGYYXDTv
|
||||
tTR18mA79eqYL2VMnWFAW0cXSCzW7oVYL+5lr5AjzQfQGZq3kQykN1Oge+LPsJg3
|
||||
Pd9HpCcjAgMBAAECggEBAMQdBM8isY7HB6td7TxX3Rwls5dPD38IGD/wM04Ixd5u
|
||||
+p4Ko0tKPYwUtb0c1QMQcRfZzomYXulMr//fK/tb4rMjWbuvyAu3MUfeaJ+HVRpR
|
||||
9kIDuYuqtujULorH1ZvNVIix+jQEGtPeOdOYEousaJN9D4NHeRbnDJV3iKD5xXgn
|
||||
Ba9gAuRdSagASDkB37LhGws7gD7qKW4giVSSmM1Q/A3REcLWDhP0hzb4NCv38Ip9
|
||||
6qNZ6v0Aa3d6B7FcW5Myw/xeg5itYXtJuUheFBG8TGMd31Egc53niS62N4LFugoj
|
||||
DYeIQWaD7nj3HXQjNTqC90/zVrXoS1uw+XGC94hx33ECgYEA63DszNTTYq6pAT2b
|
||||
AufaV1rxNxyb3GyfS/Piz7gxm24rNmVsNOxo6LXqZ1ByE9XjEgBcgDVp3D0afqjx
|
||||
22bLuC+Bn86qwDVaUdQdBf6yxSwqCdsOwysoQsL5hdDz7J/QYXdAMr9C+e54Mxcu
|
||||
hn/IOkrmj/nGciKBQ3IInSGc1fkCgYEA2UhuH01f5og+9lLncpYwp2W7eHG6/m1g
|
||||
Sp9fCnMWvouJ+RLaCSLGiEgV6UK6bY6ndP9XN1S9fMu0GWfWBB6zuGBQe54FZwLx
|
||||
wbqPxwLPzIwEHhpTp1Tdwqzw0UaH+bN8QFfkYaorFU+poBHzXU4V0Se27XaPKSKJ
|
||||
zW9KvWR4PPsCf2YVkJc/sGgZUy42h/+6h/FYfT5oKSxp7KgCF1X5h4jdO99aGpDX
|
||||
8KT2O6yQNOZk1w/3GCR/BGd6FwLUPgnjiHFUJ+Aiu+abO44/alYvGVRk0dV0JfJ5
|
||||
w/sujwJ2l00B/lhEXJGkXGYCABwm8QVgYnDkCRRkOKdETsfvqcx3xokCgYAy7nlx
|
||||
uO9b2F/52WELSQ1Kj9wr1Wzhqr3BgC4FAwk3zPmgerzFG3OyCkOok82jVKcIE7pb
|
||||
6+8my5EBy4ctHA1AkMMM1vOpO9Vzdcmx+oS/C6sDa2Rkes4ojeU9CO1iqKHdazzL
|
||||
b9n9etjl/o8vNdiDWG3Wp83S9JecohPA5UYR9QKBgGK6fqaOHZNI1YhvU0VCtpER
|
||||
rzNZHOJZIK+qUa0xakEWkvMdrMLcozIYGWuUztczOE9q0p6r9FfYZ1RnQ7zQ+w9P
|
||||
YEGYS91IN6t+cOmqfFzV8tJ1yS0osuxpu2kizNsGqSJVaAEyr6/NBZVejZdY+CQM
|
||||
CJwOSQQJVjZZykpE2Xda
|
||||
-----END PRIVATE KEY-----
|