├── .nvmrc ├── tool ├── dummy.json ├── .gitignore ├── downloads │ └── .gitignore ├── composer.json ├── README.md └── convert.php ├── .node-version ├── components ├── flow │ └── .gitkeep ├── README.md ├── SvgCard.vue ├── NumberDisplay.vue ├── PrinterButton.vue ├── DataSelector.vue ├── PageHeader.vue ├── TextCard.vue ├── StaticInfo.vue ├── DataViewBasicInfoPanel.vue ├── DateSelectSlider.vue ├── MetroBarChart.vue ├── WhatsNew.vue ├── DataView.vue ├── DataTable.vue ├── ListItem.vue ├── SideNavigation.vue ├── TimeStackedBarChart.vue └── TimeBarChart.vue ├── .dockerignore ├── .eslintignore ├── .prettierrc ├── plugins ├── vuetify.ts └── vue-chart.ts ├── netlify.toml ├── static ├── .well-known │ └── pki-validation │ │ └── 06c9242ba3a94dc1e48d8ea4ad24b59c.txt ├── flow.png ├── icon.png ├── line.png ├── logo.png ├── ogp.png ├── favicon.ico ├── flow_sp.png ├── twitter.png ├── facebook.png ├── sakura-image.png ├── flow │ ├── sp │ │ ├── sp_flow_02@2x.png │ │ ├── sp_flow_03@2x.png │ │ ├── sp_flow_04@2x.png │ │ ├── sp_flow_06@2x.png │ │ ├── sp_flow_01_01@2x.png │ │ ├── sp_flow_01_02@2x.png │ │ ├── sp_flow_04_nav@2x.png │ │ ├── sp_flow_05_bg@2x.png │ │ ├── sp_flow_06_01@2x.png │ │ ├── sp_flow_06_02@2x.png │ │ ├── sp_flow_06_03@2x.png │ │ ├── sp_flow_tel_01@2x.png │ │ ├── sp_flow_tel_03@2x.png │ │ ├── sp_flow_06_nav_01@2x.png │ │ ├── sp_flow_06_nav_02@2x.png │ │ ├── sp_flow_06_nav_03@2x.png │ │ ├── sp_flow_06_nav_04@2x.png │ │ └── sp_flow_01_02_03_nav@2x.png │ ├── check_circle-24px.svg │ ├── arrow_forward-24px.svg │ ├── hotel-24px.svg │ ├── accessibility-24px.svg │ ├── house-24px.svg │ ├── flow_arrow.svg │ ├── directions_walk-24px.svg │ ├── phone-24px.svg │ ├── apartment-24px.svg │ ├── pregnant_woman-24px.svg │ ├── sentiment_very_dissatisfied-24px.svg │ └── accessible-24px.svg ├── apple-touch-icon-precomposed.png ├── parent.svg ├── printer.svg ├── covid.svg ├── data │ └── 130001_tokyo_covid19_patients.csv ├── site-qr.svg └── confirmed-cases-table.svg ├── types ├── shims-sfc.d.ts └── svg-shim.d.ts ├── assets ├── global.scss ├── README.md └── variables.scss ├── Dockerfile ├── .editorconfig ├── .babelrc ├── layouts ├── README.md ├── error.vue ├── default.vue └── print.vue ├── pages ├── README.md ├── print │ └── flow.vue ├── worker.vue ├── parent.vue ├── about.vue ├── flow.vue └── index.vue ├── docker-compose.yml ├── utils ├── formatDate.ts ├── formatGraph.ts ├── formatTable.ts └── formatConfirmedCases.ts ├── .vscode ├── settings.json └── cspell.json ├── .eslintrc ├── jest.config.js ├── .github ├── workflows │ ├── reviewdog.yml │ ├── build.yml │ ├── deploy.yml │ ├── staging.yml │ ├── develop.yml │ └── screenshot.yml ├── ISSUE_TEMPLATE │ ├── IMPROVE_SUGGESTIONS.md │ └── BUG_REPORT.md ├── CODE_OF_CONDUCT_ZH_TW.md ├── CODE_OF_CONDUCT.md ├── CODE_OF_CONDUCT_KO.md ├── PULL_REQUEST_TEMPLATE.md ├── CODE_OF_CONDUCT_EN.md ├── CODE_OF_CONDUCT_ES.md ├── CONTRIBUTING_ZH_TW.md ├── CONTRIBUTING.md ├── CONTRIBUTING_KO.md ├── CONTRIBUTING_ES.md └── CONTRIBUTING_EN.md ├── data ├── metro.json └── news.json ├── ui-test └── screenshot.py ├── CONTRIBUTORS.md ├── tsconfig.json ├── LICENSE.txt ├── README.md ├── README_ZH_CN.md ├── README_ZH_TW.md ├── README_KO.md ├── README_EN.md ├── .gitignore ├── README_ES.md ├── package.json └── nuxt.config.ts /.nvmrc: -------------------------------------------------------------------------------- 1 | 10.19.0 2 | -------------------------------------------------------------------------------- /tool/dummy.json: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.node-version: -------------------------------------------------------------------------------- 1 | 10.19.0 2 | -------------------------------------------------------------------------------- /components/flow/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tool/.gitignore: -------------------------------------------------------------------------------- 1 | vendor 2 | -------------------------------------------------------------------------------- /tool/downloads/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | .git 2 | node_modules 3 | .nuxt 4 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | .nuxt/ 2 | dist/ 3 | node_modules/ 4 | static/ 5 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "singleQuote": true 4 | } 5 | -------------------------------------------------------------------------------- /plugins/vuetify.ts: -------------------------------------------------------------------------------- 1 | import '@mdi/font/css/materialdesignicons.css' 2 | -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | [[redirects]] 2 | from = "/*" 3 | to = "/404.html" 4 | status = 404 5 | -------------------------------------------------------------------------------- /static/.well-known/pki-validation/06c9242ba3a94dc1e48d8ea4ad24b59c.txt: -------------------------------------------------------------------------------- 1 | 5b3416de8c02d5eb7669889d692d5184 -------------------------------------------------------------------------------- /static/flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/flow.png -------------------------------------------------------------------------------- /static/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/icon.png -------------------------------------------------------------------------------- /static/line.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/line.png -------------------------------------------------------------------------------- /static/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/logo.png -------------------------------------------------------------------------------- /static/ogp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/ogp.png -------------------------------------------------------------------------------- /static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/favicon.ico -------------------------------------------------------------------------------- /static/flow_sp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/flow_sp.png -------------------------------------------------------------------------------- /static/twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/twitter.png -------------------------------------------------------------------------------- /types/shims-sfc.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.vue' { 2 | import Vue from 'vue' 3 | export default Vue 4 | } 5 | -------------------------------------------------------------------------------- /types/svg-shim.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.svg' { 2 | const content: any 3 | export default content 4 | } 5 | -------------------------------------------------------------------------------- /static/facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/facebook.png -------------------------------------------------------------------------------- /static/sakura-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/sakura-image.png -------------------------------------------------------------------------------- /static/flow/sp/sp_flow_02@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/flow/sp/sp_flow_02@2x.png -------------------------------------------------------------------------------- /static/flow/sp/sp_flow_03@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/flow/sp/sp_flow_03@2x.png -------------------------------------------------------------------------------- /static/flow/sp/sp_flow_04@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/flow/sp/sp_flow_04@2x.png -------------------------------------------------------------------------------- /static/flow/sp/sp_flow_06@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/flow/sp/sp_flow_06@2x.png -------------------------------------------------------------------------------- /static/flow/sp/sp_flow_01_01@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/flow/sp/sp_flow_01_01@2x.png -------------------------------------------------------------------------------- /static/flow/sp/sp_flow_01_02@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/flow/sp/sp_flow_01_02@2x.png -------------------------------------------------------------------------------- /static/flow/sp/sp_flow_04_nav@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/flow/sp/sp_flow_04_nav@2x.png -------------------------------------------------------------------------------- /static/flow/sp/sp_flow_05_bg@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/flow/sp/sp_flow_05_bg@2x.png -------------------------------------------------------------------------------- /static/flow/sp/sp_flow_06_01@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/flow/sp/sp_flow_06_01@2x.png -------------------------------------------------------------------------------- /static/flow/sp/sp_flow_06_02@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/flow/sp/sp_flow_06_02@2x.png -------------------------------------------------------------------------------- /static/flow/sp/sp_flow_06_03@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/flow/sp/sp_flow_06_03@2x.png -------------------------------------------------------------------------------- /static/flow/sp/sp_flow_tel_01@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/flow/sp/sp_flow_tel_01@2x.png -------------------------------------------------------------------------------- /static/flow/sp/sp_flow_tel_03@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/flow/sp/sp_flow_tel_03@2x.png -------------------------------------------------------------------------------- /static/apple-touch-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/apple-touch-icon-precomposed.png -------------------------------------------------------------------------------- /static/flow/sp/sp_flow_06_nav_01@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/flow/sp/sp_flow_06_nav_01@2x.png -------------------------------------------------------------------------------- /static/flow/sp/sp_flow_06_nav_02@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/flow/sp/sp_flow_06_nav_02@2x.png -------------------------------------------------------------------------------- /static/flow/sp/sp_flow_06_nav_03@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/flow/sp/sp_flow_06_nav_03@2x.png -------------------------------------------------------------------------------- /static/flow/sp/sp_flow_06_nav_04@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/flow/sp/sp_flow_06_nav_04@2x.png -------------------------------------------------------------------------------- /static/flow/sp/sp_flow_01_02_03_nav@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlexiblePrintedCircuits/covid19-mie/HEAD/static/flow/sp/sp_flow_01_02_03_nav@2x.png -------------------------------------------------------------------------------- /tool/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "require": { 3 | "phpoffice/phpspreadsheet": "^1.10", 4 | "nesbot/carbon": "^2.30", 5 | "ext-json": "*", 6 | "tightenco/collect": "^6.17" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /assets/global.scss: -------------------------------------------------------------------------------- 1 | :root { 2 | box-sizing: border-box; 3 | } 4 | 5 | body { 6 | background-color: $gray-5; 7 | } 8 | 9 | img { 10 | max-width: 100%; 11 | height: auto; 12 | vertical-align: bottom; 13 | } 14 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:16.8-alpine3.11 2 | 3 | WORKDIR /app 4 | 5 | COPY package.json yarn.lock ./ 6 | 7 | RUN yarn install 8 | 9 | COPY . ./app 10 | 11 | EXPOSE 3000 12 | ENV HOST 0.0.0.0 13 | 14 | CMD ["yarn", "dev"] 15 | -------------------------------------------------------------------------------- /components/README.md: -------------------------------------------------------------------------------- 1 | # COMPONENTS 2 | 3 | **This directory is not required, you can delete it if you don't want to use it.** 4 | 5 | The components directory contains your Vue.js Components. 6 | 7 | _Nuxt.js doesn't supercharge these components._ 8 | -------------------------------------------------------------------------------- /tool/README.md: -------------------------------------------------------------------------------- 1 | # Need 2 | 3 | - php 7.x 4 | - composer 5 | 6 | # Usage 7 | 8 | - download source xlsx files to `downloads` dir 9 | - composer install 10 | - php convert.php 11 | - will be update data.json to {project_dir}/data/data.json 12 | 13 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "test": { 4 | "presets": [ 5 | [ 6 | "@babel/preset-env", 7 | { 8 | "targets": { 9 | "node": "current" 10 | } 11 | } 12 | ] 13 | ] 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /layouts/README.md: -------------------------------------------------------------------------------- 1 | # LAYOUTS 2 | 3 | **This directory is not required, you can delete it if you don't want to use it.** 4 | 5 | This directory contains your Application Layouts. 6 | 7 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/views#layouts). 8 | -------------------------------------------------------------------------------- /pages/README.md: -------------------------------------------------------------------------------- 1 | # PAGES 2 | 3 | This directory contains your Application Views and Routes. 4 | The framework reads all the `*.vue` files inside this directory and creates the router of your application. 5 | 6 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/routing). 7 | -------------------------------------------------------------------------------- /static/flow/check_circle-24px.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/flow/arrow_forward-24px.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/README.md: -------------------------------------------------------------------------------- 1 | # ASSETS 2 | 3 | **This directory is not required, you can delete it if you don't want to use it.** 4 | 5 | This directory contains your un-compiled assets such as LESS, SASS, or JavaScript. 6 | 7 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/assets#webpacked). 8 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | services: 3 | app: 4 | container_name: covid19-mie 5 | build: 6 | context: . 7 | dockerfile: Dockerfile 8 | tty: true 9 | ports: 10 | - 3000:3000 11 | volumes: 12 | - .:/app 13 | - node_modules:/app/node_modules 14 | volumes: 15 | node_modules: {} 16 | -------------------------------------------------------------------------------- /utils/formatDate.ts: -------------------------------------------------------------------------------- 1 | import dayjs from 'dayjs' 2 | 3 | export const convertDatetimeToISO8601Format = (dateString: string): string => { 4 | return dayjs(dateString).format('YYYY-MM-DDTHH:mm:ss') 5 | } 6 | 7 | export const convertDateToISO8601Format = (dateString: string): string => { 8 | return dayjs(dateString).format('YYYY-MM-DD') 9 | } 10 | -------------------------------------------------------------------------------- /pages/print/flow.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 17 | -------------------------------------------------------------------------------- /static/flow/hotel-24px.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.renderControlCharacters": true, 3 | "editor.formatOnSave": false, 4 | "editor.codeActionsOnSave": { 5 | "source.fixAll.eslint": true 6 | }, 7 | "eslint.format.enable": true, 8 | "eslint.packageManager": "yarn", 9 | "eslint.workingDirectories": ["./"], 10 | "eslint.validate": [ 11 | "javascript", 12 | "vue" 13 | ] 14 | } -------------------------------------------------------------------------------- /.vscode/cspell.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.1", 3 | "language": "en", 4 | "words": [ 5 | "asynciterable", 6 | "chartjs", 7 | "covid", 8 | "datasets", 9 | "esnext", 10 | "fullhuman", 11 | "interop", 12 | "mixins", 13 | "nullish", 14 | "nuxt", 15 | "nuxtjs", 16 | "precomposed", 17 | "purgecss", 18 | "querents", 19 | "tightenco", 20 | "vuetify" 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /static/flow/accessibility-24px.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/flow/house-24px.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "@nuxtjs/eslint-config-typescript", 4 | "prettier", 5 | "plugin:prettier/recommended" 6 | ], 7 | "rules": { 8 | "vue/max-attributes-per-line": "off", 9 | "vue/html-self-closing": ["error", { 10 | "html": { 11 | "void": "always" 12 | } 13 | }], 14 | "prettier/prettier": [ 15 | "error", { 16 | "semi": false, 17 | "singleQuote": true 18 | } 19 | ] 20 | } 21 | } -------------------------------------------------------------------------------- /static/parent.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | moduleNameMapper: { 3 | '^@/(.*)$': '/$1', 4 | '^~/(.*)$': '/$1', 5 | '^vue$': 'vue/dist/vue.common.js' 6 | }, 7 | moduleFileExtensions: ['js', 'vue', 'json'], 8 | transform: { 9 | '^.+\\.js$': 'babel-jest', 10 | '.*\\.(vue)$': 'vue-jest' 11 | }, 12 | collectCoverage: true, 13 | collectCoverageFrom: [ 14 | '/components/**/*.vue', 15 | '/pages/**/*.vue' 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /static/flow/flow_arrow.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.github/workflows/reviewdog.yml: -------------------------------------------------------------------------------- 1 | name: reviewdog 2 | 3 | on: 4 | pull_request: 5 | branches: 6 | - development 7 | 8 | jobs: 9 | eslint: 10 | name: check_eslint_error 11 | runs-on: ubuntu-18.04 12 | steps: 13 | - uses: actions/checkout@v2 14 | - name: eslint review 15 | uses: reviewdog/action-eslint@v1 16 | with: 17 | github_token: ${{ secrets.github_token }} 18 | reporter: github-pr-check 19 | eslint_flags: './**/*.{vue,ts,js}' 20 | -------------------------------------------------------------------------------- /static/flow/directions_walk-24px.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/metro.json: -------------------------------------------------------------------------------- 1 | { 2 | "date": "2020\/03\/06 21:00", 3 | "datasets": [ 4 | { 5 | "label": "2月10日~14日", 6 | "data": [-0.96, -2.94, -7.48] 7 | }, 8 | { 9 | "label": "2月17日~21日", 10 | "data": [-0.36, -4.11, -6.95] 11 | }, 12 | { 13 | "label": "2月25日~28日", 14 | "data": [3.06, -9.47, -7.31] 15 | }, 16 | { 17 | "label": "3月02日~05日", 18 | "data": [1.08, -21.64, -9.92] 19 | } 20 | ], 21 | "labels": ["6:30~7:30", "7:30~9:30", "9:30~10:30"], 22 | "base_period": "1月20日~1月24日" 23 | } 24 | -------------------------------------------------------------------------------- /static/flow/phone-24px.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ui-test/screenshot.py: -------------------------------------------------------------------------------- 1 | from selenium import webdriver 2 | import os 3 | 4 | os.mkdir('screenshots') 5 | 6 | SIZES = [[320,480],[375,812],[768,1024],[1024,768],[1920,1080]] 7 | PATHS = ['/', '/about'] 8 | BROWSERS = ['Chrome', 'Firefox'] 9 | 10 | for browser in BROWSERS: 11 | driver = getattr(webdriver, browser)() 12 | for size in SIZES: 13 | driver.set_window_size(size[0], size[1]) 14 | for path in PATHS: 15 | driver.get("http://localhost:8000"+path) 16 | driver.save_screenshot('screenshots/'+browser+'_'+str(size[0])+'x'+str(size[1])+'_'+path.replace('/', '_')+'.png') 17 | -------------------------------------------------------------------------------- /static/flow/apartment-24px.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/flow/pregnant_woman-24px.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/news.json: -------------------------------------------------------------------------------- 1 | { 2 | "newsItems": [ 3 | { 4 | "date": "2020/09/14", 5 | "url": "https://www.pref.mie.lg.jp/TOPICS/m0343800004.htm", 6 | "text": "三重県及び県内市町ホームページの閲覧障害について" 7 | }, 8 | { 9 | "date": "2020/07/31", 10 | "url": "https://www.pref.mie.lg.jp/KOHO/HP/m0006200082.htm", 11 | "text": "【県民の皆様へ】三重県の偽サイトにご注意ください " 12 | }, 13 | { 14 | "date": "2020/08/04", 15 | "url": "https://www.pref.mie.lg.jp/FUKUSHI/HP/m0329000047.htm", 16 | "text": "「令和2年7月豪雨に関する支援」" 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/IMPROVE_SUGGESTIONS.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: '改善提案 / Improvement Suggestions' 3 | about: '「こうするともっとよくなる」といったWebサイトへの提案はこちら' 4 | labels: improve 5 | --- 6 | 7 | ## 改善詳細 / Details of Improvement 8 | - xxxx(できるだけ簡潔に/as concise as possible) 9 | 10 | ## スクリーンショット / Screenshot 11 | 12 | 13 | 14 | ## 期待する見せ方・挙動 / Expected behavior 15 | - xxxx(できるだけ簡潔に/as concise as possible) 16 | 17 | ## 動作環境・ブラウザ / Environment 18 | - macOS / Windows / Linux / iOS / Android 19 | - Chrome / Safari / Firefox / Edge / Internet Explorer 20 | -------------------------------------------------------------------------------- /static/flow/sentiment_very_dissatisfied-24px.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /CONTRIBUTORS.md: -------------------------------------------------------------------------------- 1 | Mie Covid-19 response site contributors 2 | ============================================ 3 | 4 | 本サイトにご協力いただいた皆様 5 | 6 | | Name(link) | Contribution | 7 | | --- | --- | 8 | | [shoma3571](https://github.com/shoma3571) | | 9 | | [sakurum](https://github.com/sakurum) | | 10 | | [UEDEU](https://github.com/UEDEU) | | 11 | | [Akatsuki1910](https://github.com/Akatsuki1910) | | 12 | | [Shagamii](https://github.com/Shagamii) | | 13 | | [tsutorm](https://github.com/tsutorm) | | 14 | | [kaitohattori](https://github.com/kaitohattori) | | 15 | | -add your name here!- | -what did you do?- | 16 | 17 | ご協力に感謝です!!! 18 | 19 | ![nyan](https://i.gyazo.com/f04e7468ea6e4bb6e87f6817fea980f9.gif) 20 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/BUG_REPORT.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 'バグ報告 / Bug Report' 3 | about: '既存のWebサイトに不具合がある場合・更新しなければならないタスクなどはこちら' 4 | labels: bug 5 | --- 6 | 7 | ## 起こっている問題 / The Problem 8 | - xxxx(できるだけ簡潔に/as concise as possible) 9 | 10 | ## スクリーンショット / Screenshot 11 | 12 | 13 | 14 | ## 期待する見せ方・挙動 / Expected Behavior 15 | - xxxx(できるだけ簡潔に/as concise as possible) 16 | 17 | 18 | ## 起こっている問題の再現手段 / Steps to Reproduce 19 | 1. xxx 20 | 2. xxx 21 | 3. xxx 22 | 23 | ## 動作環境・ブラウザ / Environment 24 | - macOS / Windows / Linux / iOS / Android 25 | - Chrome / Safari / Firefox / Edge / Internet Explorer 26 | -------------------------------------------------------------------------------- /static/flow/accessible-24px.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2018", 4 | "module": "esnext", 5 | "moduleResolution": "node", 6 | "lib": [ 7 | "esnext", 8 | "esnext.asynciterable", 9 | "dom" 10 | ], 11 | "esModuleInterop": true, 12 | "allowJs": true, 13 | "sourceMap": true, 14 | "strict": true, 15 | "noEmit": true, 16 | "noImplicitThis": true, 17 | "experimentalDecorators": true, 18 | "baseUrl": ".", 19 | "paths": { 20 | "~/*": [ 21 | "./*" 22 | ], 23 | "@/*": [ 24 | "./*" 25 | ] 26 | }, 27 | "types": [ 28 | "@types/node", 29 | "@nuxt/types" 30 | ] 31 | }, 32 | "exclude": [ 33 | "node_modules" 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /.github/CODE_OF_CONDUCT_ZH_TW.md: -------------------------------------------------------------------------------- 1 | version 1.0, 2020/3/3 2 | 3 | # 我們的使命 4 | 5 | * 我們為了保護東京都都民的生命以及健康。 6 | * 我們為了向海內外人士提供正確的數據。 7 | * 我們將會展示我們的品德以及視覺化我們的工作成果。 8 | 9 | 10 | # 建立網站的行動原則 (CoC) 11 | 12 | ## User perspective 從用戶角度出發 13 | 14 | * 資訊只有在對人們傳達後才有意義。我們十分重視 UX(使用者體驗)。 15 | * 我們使用基於統計出來的證據來做出決策、例如存取分析、關鍵字數據以及社群媒體數據。 16 | 17 | ## No one left behind (沒有人被丟下) 18 | 19 | * 目標是成為一個無論國籍、年齡或是有障礙的人士,任何人都可以愉快地使用的網站。 20 | * 符合通用設計準則。 21 | 22 | ## International (國際化) 23 | 24 | * 使用外國人直覺的表達方式。 25 | * 提供多種語言。 26 | 27 | ## Be open (保持開放) 28 | 29 | * 開放原始碼:我們盡可能地開放網站相關的原始碼以及技術,並提供給其他的地方政府使用。 30 | * 公開資料:以容易理解、任何人都可以輕易上手的資料格式公開資料。 31 | 32 | ## Build with people (與人們共築) 33 | 34 | * 與形形色色的人們一起創造,而非僅僅是東京都政府的人們。 35 | * 歡迎民間工程師們提交貢獻。 36 | * 與需要資訊的人們共同發展網站。 37 | -------------------------------------------------------------------------------- /.github/CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | version 1.0, 2020/3/3 2 | 3 | # 我々はなぜここにいるのか 4 | 5 | * 都民の生命と健康を守るため 6 | * 正しいデータをオープンに国内/海外の人に伝える 7 | * 正しいものを正しく、ともに作るプロセスの効果を具体的に示す 8 | 9 | # サイト構築にあたっての行動原則 10 | 11 | ## User perspective 12 | 13 | * 情報は人に届けてこそ意味がある。UX(ユーザエクスペリエンス)を大切にする。 14 | * アクセス解析や検索語の分析、SNS分析などの数値分析を行い、数字で対応を判断する 15 | 16 | ## No one left behind 17 | 18 | * 国籍や年齢、障害の有無にかかわらず、誰もが快適に利用できるサイトを目指す 19 | * ユニバーサルデザインに関するガイドラインに準拠する 20 | 21 | ## International 22 | 23 | * 海外の人にも直感的にわかるような表現をする。 24 | * 多言語で展開する 25 | 26 | ## Be open 27 | 28 | * オープンソース:ソースコードやサイト構築に関するノウハウは可能な限り公開し、他の自治体でも利用できるようにする 29 | * オープンデータ:わかりやすいデータ形式で、誰でも使えるような形でデータを公開する。 30 | 31 | ## Build with people 32 | 33 | * 都庁の人だけではなく、様々な人々とともに作る 34 | * 市民エンジニアの貢献を歓迎する 35 | * 情報を求める人達とともに、サイトを育てていく 36 | -------------------------------------------------------------------------------- /utils/formatGraph.ts: -------------------------------------------------------------------------------- 1 | type DataType = { 2 | 日付: Date 3 | 小計: number 4 | } 5 | 6 | type GraphDataType = { 7 | label: string 8 | transition: number 9 | cumulative: number 10 | } 11 | 12 | export default (data: DataType[]) => { 13 | const graphData: GraphDataType[] = [] 14 | const today = new Date() 15 | let patSum = 0 16 | data 17 | .filter(d => new Date(d['日付']) < today) 18 | .forEach(d => { 19 | const date = new Date(d['日付']) 20 | const subTotal = d['小計'] 21 | if (!isNaN(subTotal)) { 22 | patSum += subTotal 23 | graphData.push({ 24 | label: `${date.getMonth() + 1}/${date.getDate()}`, 25 | transition: subTotal, 26 | cumulative: patSum 27 | }) 28 | } 29 | }) 30 | return graphData 31 | } 32 | -------------------------------------------------------------------------------- /static/printer.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.github/CODE_OF_CONDUCT_KO.md: -------------------------------------------------------------------------------- 1 | version 1.0, 2020/3/3 2 | 3 | # 왜 우리는 여기에 있는가(우리의 미션) 4 | 5 | * 도쿄도민의 생명과 건강을 지키기 위해 6 | * 정확한 데이터를 오픈하여 국내/해외의 모든 사람들에게 알리기 위해 7 | * 정직하게, 바르게, 함께만드를 프로세스의 효과를 구체적으로 나타내기 위해 8 | 9 | # 사이트 구축 행동강령 10 | 11 | ## User perspective 12 | 13 | * 정보는 전달되어져야 의미가있다. UX (사용자경험)을 중요시할것. 14 | * 샤이트 유입 분석, 검색어 분석, SNS 분석등의 수치분석을하여 수치를 기반으로 대응법을 판단할 것. 15 | 16 | ## No one left behind 17 | 18 | * 국적, 연령, 장애등의 유무에 관계없이, 누구나 쾌적히 이용가능한 사이트를 목표로함. 19 | * 유니버설디자인의 가이드라인을 준수. 20 | 21 | ## International 22 | 23 | * 해외의 유저들에게도 직감적으로 전달되는 표현을 사용 24 | * 다언어를 지원 25 | 26 | ## Be open 27 | 28 | * 오픈소스 : 소스코드나 사이트구축에 관한 노하우는 가능한 한 공개하고, 다른 지자체에서도 이용가능하도록 함. 29 | * 오픈데이터 : 알기쉬운 데이터형식으로 누구라도 사용하는한 형태의 데이터를 공개함. 30 | 31 | ## Build with people 32 | 33 | * 도쿄도청의 관계자뿐만아니라, 다양한 사람들과 함께 만들겠습니다. 34 | * 시민엔지니어의 기여를 환영합니다. 35 | * 정보를 원하는 분들과 함께, 사이트를 발전시켜가겠슴니다. 36 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## 📝 関連issue / Related Issues 2 | 3 | 10 | 14 | - close #{ISSUE_NUMBER} 15 | 16 | ## ⛏ 変更内容 / Details of Changes 17 | 18 | 19 | - xxxxxx 20 | - xxx 21 | 22 | ## 📸 スクリーンショット / Screenshots 23 | 24 | 25 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: build check 2 | 3 | on: 4 | pull_request: 5 | branches: 6 | - staging 7 | jobs: 8 | build: 9 | runs-on: ubuntu-18.04 10 | steps: 11 | - uses: actions/checkout@v2 12 | 13 | - name: Setup Node 14 | uses: actions/setup-node@v1 15 | with: 16 | node-version: '16' 17 | 18 | - name: Cache dependencies 19 | uses: actions/cache@v1 20 | with: 21 | path: ~/.cache/yarn 22 | key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} 23 | restore-keys: | 24 | ${{ runner.os }}-yarn- 25 | 26 | - run: yarn install --frozen-lockfile 27 | - run: yarn run test 28 | - run: yarn run generate:deploy --fail-on-page-error 29 | 30 | - name: archive dist 31 | uses: actions/upload-artifact@v1 32 | with: 33 | name: dist 34 | path: dist 35 | -------------------------------------------------------------------------------- /components/SvgCard.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 25 | 26 | 47 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: production deploy 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | 8 | jobs: 9 | deploy: 10 | runs-on: ubuntu-18.04 11 | steps: 12 | - uses: actions/checkout@v2 13 | 14 | - name: Setup Node 15 | uses: actions/setup-node@v1 16 | with: 17 | node-version: '16' 18 | 19 | - name: Cache dependencies 20 | uses: actions/cache@v1 21 | with: 22 | path: ~/.cache/yarn 23 | key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} 24 | restore-keys: | 25 | ${{ runner.os }}-yarn- 26 | 27 | - run: yarn install --frozen-lockfile 28 | - run: yarn run test 29 | - run: yarn run generate:deploy --fail-on-page-error 30 | - name: deploy 31 | uses: peaceiris/actions-gh-pages@v3 32 | with: 33 | github_token: ${{ secrets.GITHUB_TOKEN }} 34 | publish_dir: ./dist 35 | publish_branch: production 36 | -------------------------------------------------------------------------------- /.github/workflows/staging.yml: -------------------------------------------------------------------------------- 1 | name: staging deploy 2 | 3 | on: 4 | push: 5 | branches: 6 | - staging 7 | 8 | jobs: 9 | deploy: 10 | runs-on: ubuntu-18.04 11 | steps: 12 | - uses: actions/checkout@v2 13 | 14 | - name: Setup Node 15 | uses: actions/setup-node@v1 16 | with: 17 | node-version: '16' 18 | 19 | - name: Cache dependencies 20 | uses: actions/cache@v1 21 | with: 22 | path: ~/.cache/yarn 23 | key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} 24 | restore-keys: | 25 | ${{ runner.os }}-yarn- 26 | 27 | - run: yarn install --frozen-lockfile 28 | - run: yarn run test 29 | - run: yarn run generate:deploy --fail-on-page-error 30 | - run: "echo \"User-agent: *\nDisallow *\" > ./dist/robots.txt" 31 | 32 | - name: deploy 33 | uses: peaceiris/actions-gh-pages@v3 34 | with: 35 | github_token: ${{ secrets.GITHUB_TOKEN }} 36 | publish_dir: ./dist 37 | -------------------------------------------------------------------------------- /components/NumberDisplay.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 38 | 39 | 47 | -------------------------------------------------------------------------------- /.github/workflows/develop.yml: -------------------------------------------------------------------------------- 1 | name: development deploy 2 | 3 | on: 4 | push: 5 | branches: 6 | - develop 7 | 8 | jobs: 9 | deploy: 10 | runs-on: ubuntu-18.04 11 | steps: 12 | - uses: actions/checkout@v2 13 | 14 | - name: Setup Node 15 | uses: actions/setup-node@v1 16 | with: 17 | node-version: '16' 18 | 19 | - name: Cache dependencies 20 | uses: actions/cache@v1 21 | with: 22 | path: ~/.cache/yarn 23 | key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} 24 | restore-keys: | 25 | ${{ runner.os }}-yarn- 26 | 27 | - run: yarn install --frozen-lockfile 28 | - run: yarn run test 29 | - run: yarn run generate:deploy --fail-on-page-error 30 | - run: "echo \"User-agent: *\nDisallow *\" > ./dist/robots.txt" 31 | 32 | - name: deploy 33 | uses: peaceiris/actions-gh-pages@v3 34 | with: 35 | github_token: ${{ secrets.GITHUB_TOKEN }} 36 | publish_dir: ./dist 37 | publish_branch: dev_pages 38 | -------------------------------------------------------------------------------- /.github/workflows/screenshot.yml: -------------------------------------------------------------------------------- 1 | name: screenshot 2 | 3 | # on: pull_request 4 | on: 5 | push: 6 | branches: 7 | - dummy 8 | 9 | jobs: 10 | screenshot: 11 | runs-on: windows-latest 12 | steps: 13 | - uses: actions/checkout@v2 14 | - run: cp ui-test\dummy.json dist\data/\data.json 15 | - name: Setup Node 16 | uses: actions/setup-node@v1 17 | with: 18 | node-version: '10.x' 19 | - name: Cache dependencies 20 | uses: actions/cache@v1 21 | with: 22 | path: ~/.cache/yarn 23 | key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} 24 | restore-keys: | 25 | ${{ runner.os }}-yarn- 26 | 27 | - run: yarn install --frozen-lockfile 28 | - run: yarn run test 29 | - run: yarn run generate:deploy 30 | - run: pip install selenium 31 | - run: (python -m http.server --directory ./dist 8000 &) ; python ./ui-test/screenshot.py 32 | - name: Upload screenshot 33 | uses: actions/upload-artifact@v1 34 | with: 35 | name: screenshots 36 | path: screenshots 37 | -------------------------------------------------------------------------------- /utils/formatTable.ts: -------------------------------------------------------------------------------- 1 | import dayjs from 'dayjs' 2 | 3 | const headers = [ 4 | { text: '日付', value: '日付' }, 5 | { text: '居住地', value: '居住地' }, 6 | { text: '年代', value: '年代' }, 7 | { text: '性別', value: '性別' } 8 | ] 9 | 10 | type DataType = { 11 | リリース日: Date 12 | 居住地: string | null 13 | 年代: string | null 14 | 性別: '男性' | '女性' 15 | [key: string]: any 16 | } 17 | 18 | type TableDataType = { 19 | 日付: string 20 | 居住地: DataType['居住地'] 21 | 年代: DataType['年代'] 22 | 性別: DataType['性別'] | '不明' 23 | } 24 | 25 | type TableDateType = { 26 | headers: typeof headers 27 | datasets: TableDataType[] 28 | } 29 | 30 | export default (data: DataType[]) => { 31 | const tableDate: TableDateType = { 32 | headers, 33 | datasets: [] 34 | } 35 | data.forEach(d => { 36 | const TableRow: TableDataType = { 37 | 日付: dayjs(d['リリース日']).format('MM/DD') ?? '不明', 38 | 居住地: d['居住地'] ?? '不明', 39 | 年代: d['年代'] ?? '不明', 40 | 性別: d['性別'] ?? '不明' 41 | } 42 | tableDate.datasets.push(TableRow) 43 | }) 44 | tableDate.datasets.sort((a, b) => (a === b ? 0 : a < b ? 1 : -1)) 45 | return tableDate 46 | } 47 | -------------------------------------------------------------------------------- /static/covid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /components/PrinterButton.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 17 | { 18 | "ja": { 19 | "print": "印刷する" 20 | } 21 | } 22 | 23 | 24 | 40 | 41 | 57 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Tokyo Metropolitan Government 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 三重県 新型コロナウイルス感染症対策サイト 2 | [![Mie Prefecture COVID-19 Task Force website](https://user-images.githubusercontent.com/47916753/76599982-6f25fd00-6549-11ea-9fcb-87034c0b68a5.png)](https://mie.stopcovid19.jp) 3 | 4 | ### 日本語 | [English](./README_EN.md) | [Spanish](./README_ES.md) | [Korean](./README_KO.md) | [Chinese (Taiwan)](./README_ZH_TW.md) | [Chinese (Simplified)](./README_ZH_CN.md) 5 | 6 | これは、三重県の高専生有志チームが開発した、東京都の新型コロナウイルス感染症対策サイトの三重版です。東京都新型コロナウイルス対策サイトのリポジトリからフォークしています。 7 | 8 | ## ライセンス 9 | 本ソフトウェアは、[MITライセンス](./LICENSE.txt)の元提供されています。 10 | 11 | ## 開発者向け情報 12 | 13 | ### 環境構築の手順 14 | 15 | - 必要となるNode.jsのバージョン: 10.19.0以上 16 | 17 | **yarn を使う場合** 18 | ``` bash 19 | # install dependencies 20 | $ yarn install 21 | 22 | # serve with hot reload at localhost:3000 23 | $ yarn dev 24 | ``` 25 | 26 | **docker compose を使う場合** 27 | ```bash 28 | # serve with hot reload at localhost:3000 29 | $ docker-compose up --build 30 | ``` 31 | 32 | ### ステージング・本番環境への反映 33 | 34 | `master` ブランチがアップデートされると、自動的に `production` ブランチにHTML類がbuildされます。そして、本番サイト https://mie.stopcovid19.jp が更新されます。 35 | `develop`ブランチがアップデートされると、自動的に`dev_pages`ブランチにHTML類がbuildされます。そして、開発用サイト https://covid19-mie-dev.netlify.com/ が更新されます。 36 | -------------------------------------------------------------------------------- /README_ZH_CN.md: -------------------------------------------------------------------------------- 1 | # 三重县 新型冠状病毒对策网 2 | 3 | 4 | [![三重县 新型冠状病毒对策网](https://user-images.githubusercontent.com/47916753/76599982-6f25fd00-6549-11ea-9fcb-87034c0b68a5.png)](https://mie.stopcovid19.jp) 5 | 6 | ### [日本語](./README.md) | [English](./README_EN.md) | [Spanish](./README_ES.md) | [Korean](./README_KO.md) | [Chinese (Taiwan)](./README_ZH_TW.md) | Chinese (Simplified) 7 | 8 | ## 如何贡献 9 | 如果您能对 Issus 中做出各式各样的修改协助,我们将不胜感激。 10 | 11 | 详细请参照[如何贡献](./.github/CONTRIBUTING_ZH_CN.md)。 12 | 13 | 14 | ## 行动准则 15 | 详细请参照[建站行动原则](./.github/CODE_OF_CONDUCT_ZH_CN.md)。 16 | 17 | ## 授权 18 | 本软件采用[MIT授权条款](./LICENSE.txt)。 19 | 20 | ## 面向开发者信息 21 | 22 | ### 开发环境搭建 23 | 24 | - Node.js 版本最低需求: 10.19.0以上 25 | 26 | **使用 yarn 时** 27 | ``` bash 28 | # install dependencies 29 | $ yarn install 30 | 31 | # serve with hot reload at localhost:3000 32 | $ yarn dev 33 | ``` 34 | 35 | **使用 docker compose 时** 36 | ```bash 37 | # serve with hot reload at localhost:3000 38 | $ docker-compose up --build 39 | ``` 40 | 41 | ### 发布到 Staging环境以及正式环境的方法 42 | 43 | `master` 分支更新時,自动将 `production` 分支中的HTML类(build)后发布到正式版 https://mie.stopcovid19.jp 44 | `develop` 分支更新時,自动将 `dev_pages` 分支中的HTML类(build)后发布到正式版 https://covid19-mie-dev.netlify.com/ 45 | 46 | -------------------------------------------------------------------------------- /README_ZH_TW.md: -------------------------------------------------------------------------------- 1 | # 三重県 新型冠狀病毒疫情中心 2 | 3 | 4 | [![三重縣 新型冠狀病毒疫情中心](https://user-images.githubusercontent.com/47916753/76599982-6f25fd00-6549-11ea-9fcb-87034c0b68a5.png)](https://mie.stopcovid19.jp) 5 | 6 | ### [日本語](./README.md) | [English](./README_EN.md) | [Spanish](./README_ES.md) | [Korean](./README_KO.md) | Chinese (Taiwan) | [Chinese (Simplified)](./README_ZH_CN.md) 7 | 8 | ## 如何貢獻 9 | 如果您能對 Issus 中做出各式各樣的修正協助,我們將不勝感激。 10 | 11 | 詳情請洽[如何貢獻](./.github/CONTRIBUTING_ZH_TW.md)。 12 | 13 | 14 | ## 行動原則 15 | 詳情請洽[建立網站的行動原則](./.github/CODE_OF_CONDUCT_ZH_TW.md)。 16 | 17 | ## 授權 18 | 本軟體採[MIT授權條款](./LICENSE.txt)釋出。 19 | 20 | ## 給開發者的資訊 21 | 22 | ### 開發環境建置 23 | 24 | - Node.js 版本最低需求: 10.19.0以上 25 | 26 | **使用 yarn 的做法** 27 | ``` bash 28 | # install dependencies 29 | $ yarn install 30 | 31 | # serve with hot reload at localhost:3000 32 | $ yarn dev 33 | ``` 34 | 35 | **使用 docker compose 的做法** 36 | ```bash 37 | # serve with hot reload at localhost:3000 38 | $ docker-compose up --build 39 | ``` 40 | 41 | ### Deploy 到 Staging環境以及正式環境的方法 42 | 43 | 當 `master` 分支被更新時,HTML 檔案將會在 `production` 分支中被組建 (build)起來。然後正式版網站 https://mie.stopcovid19.jp 會被更新。 44 | 當 `develop` 分支被更新時,HTML 檔案將會在 `dev_pages` 分支中被組建 (build)起來。然後正式版網站 https://covid19-mie-dev.netlify.com/ 會被更新。 45 | 46 | -------------------------------------------------------------------------------- /components/DataSelector.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 41 | 42 | 54 | -------------------------------------------------------------------------------- /README_KO.md: -------------------------------------------------------------------------------- 1 | # 미에현 코로나19 대책 사이트 2 | 3 | [![미에현 코로나19 대책 사이트](https://user-images.githubusercontent.com/47916753/76599982-6f25fd00-6549-11ea-9fcb-87034c0b68a5.png)](https://mie.stopcovid19.jp) 4 | 5 | ### [日本語](./README.md) | [English](./README_EN.md) | [Spanish](./README_ES.md) | Korean | [Chinese (Taiwan)](./README_ZH_TW.md) | [Chinese (Simplified)](./README_ZH_CN.md) 6 | 7 | ## 기여방법 8 | 오픈상태의 Issue에 여러 가지 내용 추가 및 수정등으로 기여해주시면, 매우 감사하겠습니다. 9 | 10 | 자세한 내용은 다음의 [기여방법](./.github/CONTRIBUTING_KO.md) 링크를 참고해주세요. 11 | 12 | 13 | ## 행동강령 14 | 자세한 내용은 [사이트 구축 행동강령](./.github/CODE_OF_CONDUCT_KO.md)를 참고해주세요. 15 | 16 | 17 | ## 라이선스 18 | 이 소프트웨어는 [MIT 라이선스](./LICENSE.txt)를 따르고 있습니다. 19 | 20 | ## 개발자를 위한 개발 정보 21 | 22 | ### 개발환경을 구축하는 방법 23 | 24 | - 필요한 Node.js 버젼: 10.19.0이상 25 | 26 | **yarn을 사용할 경우** 27 | ``` bash 28 | # install dependencies 29 | $ yarn install 30 | 31 | # serve with hot reload at localhost:3000 32 | $ yarn dev 33 | ``` 34 | 35 | **docker compose를 사용할 경우** 36 | ```bash 37 | # serve with hot reload at localhost:3000 38 | $ docker-compose up --build 39 | ``` 40 | 41 | ### 스테이징 환경 및 운영 환경으로 반영 방법 42 | 43 | `master` 브랜치가 업데이트되면, 자동적으로 `production` 브랜치의 HTML 파일이 빌드됩니다. 이후, 운영 환경 사이트 https://mie.stopcovid19.jp 가 갱신됩니다. 44 | `develop` 브랜치가 업데이트되면, 자동적으로 `dev_pages` 브랜치의 HTML 파일이 빌드됩니다. 이후, 운영 환경 사이트 https://covid19-mie-dev.netlify.com/ 가 갱신됩니다. 45 | -------------------------------------------------------------------------------- /utils/formatConfirmedCases.ts: -------------------------------------------------------------------------------- 1 | type DataType = { 2 | attr: '検査実施人数' 3 | value: number 4 | children: [ 5 | { 6 | attr: '陽性患者数' 7 | value: number 8 | children: [ 9 | { 10 | attr: '入院中' 11 | value: number 12 | children: [ 13 | { 14 | attr: '軽症・中等症' 15 | value: number 16 | }, 17 | { 18 | attr: '重症' 19 | value: number 20 | } 21 | ] 22 | }, 23 | { 24 | attr: '退院' 25 | value: number 26 | }, 27 | { 28 | attr: '死亡' 29 | value: number 30 | } 31 | ] 32 | } 33 | ] 34 | } 35 | 36 | type ConfirmedCasesType = { 37 | 検査実施人数: number 38 | 陽性物数: number 39 | 入院中: number 40 | 軽症中等症: number 41 | 重症: number 42 | 死亡: number 43 | 退院: number 44 | } 45 | 46 | export default (data: DataType) => { 47 | const formattedData: ConfirmedCasesType = { 48 | 検査実施人数: data.value, 49 | 陽性物数: data.children[0].value, 50 | 入院中: data.children[0].children[0].value, 51 | 軽症中等症: data.children[0].children[0].children[0].value, 52 | 重症: data.children[0].children[0].children[1].value, 53 | 死亡: data.children[0].children[2].value, 54 | 退院: data.children[0].children[1].value 55 | } 56 | return formattedData 57 | } 58 | -------------------------------------------------------------------------------- /components/PageHeader.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 43 | 44 | 66 | -------------------------------------------------------------------------------- /plugins/vue-chart.ts: -------------------------------------------------------------------------------- 1 | import Vue, { PropType } from 'vue' 2 | import { ChartData, ChartOptions } from 'chart.js' 3 | import { Doughnut, Bar, mixins } from 'vue-chartjs' 4 | import { Plugin } from '@nuxt/types' 5 | 6 | type ChartVCData = { chartData: ChartData } 7 | type ChartVCMethod = { 8 | renderChart(chartData: ChartData, options: ChartOptions): void 9 | } 10 | type ChartVCComputed = unknown 11 | type ChartVCProps = { options: Object } 12 | 13 | const VueChartPlugin: Plugin = () => { 14 | const { reactiveProp } = mixins 15 | 16 | Vue.component( 17 | 'doughnut-chart', 18 | { 19 | extends: Doughnut, 20 | mixins: [reactiveProp], 21 | props: { 22 | options: { 23 | type: Object as PropType, 24 | default: () => {} 25 | } 26 | }, 27 | mounted(): void { 28 | this.renderChart(this.chartData, this.options) 29 | } 30 | } 31 | ) 32 | 33 | Vue.component( 34 | 'bar', 35 | { 36 | extends: Bar, 37 | mixins: [reactiveProp], 38 | props: { 39 | options: { 40 | type: Object, 41 | default: () => {} 42 | } 43 | }, 44 | mounted(): void { 45 | this.renderChart(this.chartData, this.options) 46 | } 47 | } 48 | ) 49 | } 50 | 51 | export default VueChartPlugin 52 | -------------------------------------------------------------------------------- /components/TextCard.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 43 | 44 | 68 | -------------------------------------------------------------------------------- /pages/worker.vue: -------------------------------------------------------------------------------- 1 | 11 | 44 | 57 | -------------------------------------------------------------------------------- /components/StaticInfo.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 36 | 37 | 61 | -------------------------------------------------------------------------------- /.github/CODE_OF_CONDUCT_EN.md: -------------------------------------------------------------------------------- 1 | version 1.0, 2020/3/3 2 | # Our mission 3 | 4 | * We will work to protect the life and well-being of the citizens of Tokyo. 5 | * We will work to provide the facts to everyone, both domestic and abroad. 6 | * We will demonstrate our integrity and visualise the outcomes of our work. 7 | 8 | # Code of conduct for developers 9 | 10 | ## User perspective 11 | 12 | * We will treat UX (User Experience) as a vital component, in order to make information easy to understand. 13 | * We will make decisions using evidence based on statistical sources such as access analytics, search keyword analytics, and analytics of social media. 14 | 15 | ## No one left behind 16 | 17 | * We will develop this site for everyone, regardless of nationality, age, gender, etc. 18 | * We will follow universal design guidelines to build this website. 19 | 20 | ## International 21 | 22 | * We will design this website be intuitive to use and understand. 23 | * We will provide the information in multiple languages. 24 | 25 | ## Be open 26 | 27 | * Open source: We will release most of our source codes and knowledge used to develop this website for free, to encourage other local authorities to utilise them. 28 | * Open data: We will release the data for free in reusable data form, which is available for everyone. 29 | 30 | ## Build with people 31 | 32 | * We will work together not only with Tokyo Metropolitan Government, but also with anyone who wants to contribute. 33 | * We will welcome any citizens' contributions. 34 | * We will continue improving this website with someone who needs information. 35 | -------------------------------------------------------------------------------- /README_EN.md: -------------------------------------------------------------------------------- 1 | # Mie Prefecture COVID-19 Task Force website 2 | 3 | [![Mie Prefecture COVID-19 Task Force website](https://user-images.githubusercontent.com/47916753/76599982-6f25fd00-6549-11ea-9fcb-87034c0b68a5.png)](https://mie.stopcovid19.jp) 4 | 5 | ### [日本語](./README.md) | English | [Spanish](./README_ES.md) | [Korean](./README_KO.md) | [Chinese (Taiwan)](./README_ZH_TW.md) | [Chinese (Simplified)](./README_ZH_CN.md) 6 | 7 | ## How to Contribute 8 | 9 | All contributions are welcome! 10 | Please check [How to contribute](./.github/CONTRIBUTING_EN.md) for details. 11 | 12 | ## Code of Conduct 13 | 14 | Please check [Code of conduct for developers](./.github/CODE_OF_CONDUCT_EN.md) for details. 15 | 16 | ## License 17 | This software is released under [the MIT License](./LICENSE.txt). 18 | 19 | ## For Developers 20 | 21 | ### How to Set Up Environments 22 | 23 | - Required Node.js version: 10.19.0 or higher 24 | 25 | **Use yarn** 26 | ``` bash 27 | # install dependencies 28 | $ yarn install 29 | 30 | # serve with hot reload at localhost:3000 31 | $ yarn dev 32 | ``` 33 | 34 | **Use docker** 35 | ```bash 36 | # serve with hot reload at localhost:3000 37 | $ docker-compose up --build 38 | ``` 39 | 40 | ### Deployment to Staging & Production Environments 41 | 42 | When `master` branch is updated, the HTML files will be automatically built onto `production` branch, 43 | and then the production site (https://mie.stopcovid19.jp) will be also updated. 44 | When `develop` branch is updated, the HTML files will be automatically built onto `dev_pages` branch, 45 | and then the production site (https://covid19-mie-dev.netlify.com/) will be also updated. 46 | 47 | -------------------------------------------------------------------------------- /components/DataViewBasicInfoPanel.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 58 | 59 | 69 | -------------------------------------------------------------------------------- /pages/parent.vue: -------------------------------------------------------------------------------- 1 | 11 | 44 | 57 | -------------------------------------------------------------------------------- /layouts/error.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 42 | 43 | 75 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | ### Node template 3 | # Logs 4 | /logs 5 | *.log 6 | npm-debug.log* 7 | yarn-debug.log* 8 | yarn-error.log* 9 | 10 | # Runtime data 11 | pids 12 | *.pid 13 | *.seed 14 | *.pid.lock 15 | 16 | # Directory for instrumented libs generated by jscoverage/JSCover 17 | lib-cov 18 | 19 | # Coverage directory used by tools like istanbul 20 | coverage 21 | 22 | # nyc test coverage 23 | .nyc_output 24 | 25 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 26 | .grunt 27 | 28 | # Bower dependency directory (https://bower.io/) 29 | bower_components 30 | 31 | # node-waf configuration 32 | .lock-wscript 33 | 34 | # Compiled binary addons (https://nodejs.org/api/addons.html) 35 | build/Release 36 | 37 | # Dependency directories 38 | node_modules/ 39 | jspm_packages/ 40 | 41 | # TypeScript v1 declaration files 42 | typings/ 43 | 44 | # Optional npm cache directory 45 | .npm 46 | 47 | # Optional eslint cache 48 | .eslintcache 49 | 50 | # Optional REPL history 51 | .node_repl_history 52 | 53 | # Output of 'npm pack' 54 | *.tgz 55 | 56 | # Yarn Integrity file 57 | .yarn-integrity 58 | 59 | # dotenv environment variables file 60 | .env 61 | 62 | # parcel-bundler cache (https://parceljs.org/) 63 | .cache 64 | 65 | # next.js build output 66 | .next 67 | 68 | # nuxt.js build output 69 | .nuxt 70 | 71 | # Nuxt generate 72 | dist/* 73 | # data 74 | !dist/data 75 | 76 | # vuepress build output 77 | .vuepress/dist 78 | 79 | # Serverless directories 80 | .serverless 81 | 82 | # IDE / Editor 83 | .idea 84 | 85 | # Service worker 86 | sw.* 87 | 88 | # macOS 89 | .DS_Store 90 | 91 | # Vim swap files 92 | *.swp 93 | 94 | # Netlify 95 | .netlify 96 | -------------------------------------------------------------------------------- /README_ES.md: -------------------------------------------------------------------------------- 1 | # Sitio web del Grupo de trabajo COVID-19 de Mie 2 | 3 | [![Mie COVID-19 Task Force website](https://user-images.githubusercontent.com/47916753/76599982-6f25fd00-6549-11ea-9fcb-87034c0b68a5.png)](https://mie.stopcovid19.jp) 4 | 5 | ### [日本語](./README.md) | [English](./README_EN.md) | Spanish | [Korean](./README_KO.md) | [Chinese (Taiwan)](./README_ZH_TW.md) | [Chinese (Simplified)](./README_ZH_CN.md) 6 | 7 | ## Cómo Contribuir 8 | 9 | Todas las contribuciones son bienvenidas.! 10 | Por favor, consulte [Cómo contribuir](./.github/CONTRIBUTING_ES.md) para obtener más detalles. 11 | 12 | ## Código de Conducta 13 | 14 | Por favor, consulte el [Código de conducta para desarrolladores](./.github/CODE_OF_CONDUCT_ES.md) para más detalles. 15 | 16 | ## Licencia 17 | Este software se publica bajo la [licencia MIT](./LICENSE.txt). 18 | 19 | ## Para Desarrolladoras 20 | 21 | ### Cómo Configurar Entornos 22 | 23 | - Versión requerida de Node.js: 10.19.0 o superior 24 | 25 | **Use yarn** 26 | ``` bash 27 | # install dependencies 28 | $ yarn install 29 | 30 | # serve with hot reload at localhost:3000 31 | $ yarn dev 32 | ``` 33 | 34 | **Use docker** 35 | ```bash 36 | # serve with hot reload at localhost:3000 37 | $ docker-compose up --build 38 | ``` 39 | 40 | ### Implementación en entornos de preparación y producción 41 | 42 | Cuando se actualiza la rama `master`, los archivos HTML se construirán automáticamente en la rama de `production`, 43 | y luego el sitio de producción (https://mie.stopcovid19.jp) también se actualizará. 44 | Cuando se actualiza la rama `develop`, los archivos HTML se construirán automáticamente en la rama de `dev_pages`, 45 | y luego el sitio de producción (https://covid19-mie-dev.netlify.com/ ) también se actualizará. 46 | -------------------------------------------------------------------------------- /.github/CODE_OF_CONDUCT_ES.md: -------------------------------------------------------------------------------- 1 | version 1.0, 2020/3/3 2 | # Nuestra misión 3 | 4 | * Trabajaremos para proteger la vida y la salud de los ciudadanos. 5 | * Trabajaremos para comunicar abiertamente los datos correctos a personas nacionales y extranjeras.. 6 | * Demostraremos nuestra integridad y visualizaremos los resultados de nuestro trabajo. 7 | 8 | # Código de conducta para desarrolladores 9 | 10 | ## Perspectiva del usuario 11 | 12 | * Le daremos importancia al UX (Experiencia del usuario) para que la información sea fácil de entender. 13 | * Tomaremos decisiones basadas en la evidencia usando análisis numéricos tales como análisis de acceso, análisis de búsqueda de palabras clave y análisis SNS. 14 | 15 | ## Nadie se queda atrás 16 | 17 | * Desarrollaremos este sitio para todos, independientemente de su nacionalidad, edad, género y otros atributos. 18 | * Seguiremos las pautas de diseño universal para construir este sitio web. 19 | 20 | ## Internacional 21 | 22 | * Diseñaremos este sitio web para que sea intuitivo de usar y comprender. 23 | * Proporcionaremos la información en varios idiomas. 24 | 25 | ## Estar abierto 26 | 27 | * Código abierto: publicaremos la mayoría de nuestros códigos fuente y conocimientos utilizados para desarrollar este sitio web de forma gratuita, para alentar a otras autoridades locales a utilizarlos. 28 | * Datos abiertos: publicaremos los datos de forma gratuita en forma de datos reutilizables, que está disponible para todos. 29 | 30 | ## Construir con personas 31 | 32 | * Trabajaremos juntos no solo con el Gobierno Metropolitano de Tokio sino también con cualquier otra persona que quiera contribuir. 33 | * Daremos la bienvenida a las contribuciones de cualquier ciudadano. 34 | * Continuaremos mejorando este sitio web con alguien que necesite información. 35 | -------------------------------------------------------------------------------- /components/DateSelectSlider.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 75 | -------------------------------------------------------------------------------- /.github/CONTRIBUTING_ZH_TW.md: -------------------------------------------------------------------------------- 1 | # 如何貢獻 2 | 3 | 貢獻者: 4 | 十分感謝您參與本計畫。 5 | 6 | 我是開發經理関(Seki)。如果您有任何問題,請隨時透過 Slack 進行諮詢。 7 | 8 | 這個頁面將會告訴您應該如何貢獻以及參與這個網站的開發: 9 | 10 | ## 對 Issue 的評論以及 Pull Request 的請求 11 | * 請自由的對 Issue 發表評論,我們也接受新的問題回報以及建議。 12 | * 新增新的 Issue 之前,請務必搜尋同樣的 Issue 不存在才開立新的 Issue. 13 | * Pull Request 發送時,請務必註記對應的 Issue 編號。我們不會接受沒有 Issue 編號的 Pull Request. 14 | * 請注意改善建議的 Issue (標籤為`improve`的) 可能不會每次都被接受。 (特別是針對 UI 的) 15 | * 如果能夠優先處理 `good first issue` / `help wanted` / `bug` 的話將會很有幫助。 16 | 17 | ## 如何參與交流 18 | * 如果你沒有 Code for Japan 的 Slack 帳號的話、請[點這邊註冊](https://cfjslackin.herokuapp.com/)。 19 | * 請參加 `#covid19` 頻道。 20 | 21 | ## 給參加者 22 | * 進行參與開發之前、請先閱讀[Principle/行動規範](CODE_OF_CONDUCT_ZH_TW.md) 。 23 | * 交流時也請先確認 Code for Japan 的[行動規範(日文網頁)](https://github.com/codeforjapan/codeofconduct) 。 24 | * 如果有自己可以做而且沒有被指派(assign)的 Issue 的話、請在 Issue 下回應「やります!(我來做)」後再開始開發。 25 | * [關於 good first issue 標籤](https://github.com/tokyo-metropolitan-gov/covid19/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) 是推薦給新手的。 26 | * 如果您可能要離開作業半天以上的話,請確保其他人可以接續您的工作。(如果長時間佔住 Issue, 那麼這個 Issue 會被卡住。) 27 | * 對於一天以上沒有更新的 Issue,我們可能會拔掉 Assignment。在工作中善用[Draft Pull Request (日文網頁)](https://qiita.com/tatane616/items/13da1b6797a7b871ad58) 的話可以讓大家更輕易地瞭解您目前的進度。 28 | * Issue 相關的問題請在 Issue 內回應欄討論(而不是 Slack)。 29 | * 我們也接受建議!請積極的開新的 Issue 吧。 30 | 31 | ## 補充 CONTRIBUTORS.md 的相關資訊 32 | 對於提供貢獻的大家、在[CONTRIBUTORS.md](https://github.com/tokyo-metropolitan-gov/covid19/blob/development/CONTRIBUTORS.md) 這份文件中記載了名字(暱稱)以及角色。 33 | 如果您有任何貢獻,請在此留下您的大名。 34 | 請在[#654](https://github.com/tokyo-metropolitan-gov/covid19/issues/654) 這個 Issue 留下您要公開的名字、連結(如果有的話)、角色。 35 | 36 | ## 開發相關的資訊 37 | * 開發環境 (Dev.) https://dev-covid19-tokyo.netlify.com/ 38 | * Stage 站 https://stg-covid19-tokyo.netlify.com/ 39 | * 正式環境 https://stopcovid19.metro.tokyo.lg.jp/ 40 | * [設計稿](https://www.figma.com/file/V7vt80p2gauhdgTZeVNbgj/UI%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3?node-id=121%3A156) 41 | 42 | 也很歡迎更新此文件! 43 | 44 | * 譯註: 如果需要中文翻譯可以在 CoJ 找到 Pichu Chen 45 | -------------------------------------------------------------------------------- /components/MetroBarChart.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 29 | 30 | 85 | -------------------------------------------------------------------------------- /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # 貢献の仕方 2 | 3 | コントリビューターの皆様、本プロジェクトにご参加いただきありがとうございます!! 4 | 5 | 開発責任者をしています、関です。何か質問があれば、Slack 等でお気軽に質問してください! 6 | 7 | 本サイトの開発に参加してくださる方に対して、参加方法をお伝えします。 8 | 9 | ## Issue へのコメントや Pull Request について 10 | * Issue へのコメントはご自由にどうぞ!新しい質問や提案なども受け付けます。 11 | * Issue を追加する場合、必ず既に同様の Issue が無いか検索をしてから作成してください。 12 | * Pull Reuqest を送る場合、必ず対応する Issue 番号を追記してください。単独の Pull Request は受け付けません。 13 | * improve(改善提案)がついたIssueについては必ず反映できると限りませんのでご了承ください(特にUI系について) 14 | * good first issue / help wanted / bug を優先して対応いただけると助かります 15 | 16 | ## コミュニケーションへの参加方法 17 | * Code for Japan の Slack アカウントを持っていない場合、[こちらから登録](https://cfjslackin.herokuapp.com/)してください 18 | * `#covid19` チャンネルにご参加ください。 19 | 20 | ## 参加にあたって 21 | * 開発に参加する前に、[Principle/行動規範](CODE_OF_CONDUCT.md) をご一読ください。 22 | * コミュニケーションにあたっては、Code for Japan の [行動規範](https://github.com/codeforjapan/codeofconduct) もご確認ください。 23 | * 自分ができそうな Issue に誰もアサインされていない場合、Issueに「やります!」等とコメントしてから開発をはじめてください。 24 | * [good first issue ラベルのついたもの](https://github.com/tokyo-metropolitan-gov/covid19/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)は初心者におすすめです 25 | * 半日以上作業から離れそうな場合は、他の人が作業を引き継げるようにしておいてください。(Issue を抱えたまま長時間オフになると、そのIssueがブロックされてしまいます。) 26 | * 1日以上更新されない Issue については、当方で assign を外させていただくことがあります。作業途中でも、[Draft Pull Request](https://qiita.com/tatane616/items/13da1b6797a7b871ad58) を送ってもらえると、動きが把握しやすくなります。 27 | * Issue に関連した質問等は、Slack より Issue 内のコメントを活用しましょう 28 | * 提案なども受け付けます!積極的に新しく Issue を作ってください。 29 | 30 | ## CONTRIBUTORS.md への追加について 31 | ご協力いただいた皆様のお名前(ハンドルネーム)や役割を記す、[CONTRIBUTORS.md](https://github.com/tokyo-metropolitan-gov/covid19/blob/development/CONTRIBUTORS.md) というファイルがあります。 32 | 何かしらの貢献を行った方は、ぜひこちらにもお名前をお載せください。 33 | [#654](https://github.com/tokyo-metropolitan-gov/covid19/issues/654) の Issue に、掲載名、リンク先(あれば)、役割をコメントください。 34 | 35 | ## 開発に関する情報 36 | * 開発サイト https://dev-covid19-tokyo.netlify.com/ 37 | * ステージングサイト https://stg-covid19-tokyo.netlify.com/ 38 | * 本番サイト https://stopcovid19.metro.tokyo.lg.jp/ 39 | * [デザイン](https://www.figma.com/file/V7vt80p2gauhdgTZeVNbgj/UI%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3?node-id=121%3A156) 40 | 41 | 本 ドキュメント の更新も大歓迎です! 42 | -------------------------------------------------------------------------------- /.github/CONTRIBUTING_KO.md: -------------------------------------------------------------------------------- 1 | # 기여방법 2 | 모든 컨트리뷰터분들, 이 프로젝트에 참가해주셔서 대단히 감사합니다.!! 3 | 4 | 개발책임을 맏고있는 Seki입니다. 무언가 질문이 있다면 Slack(슬랙)등으로 부담없이 질문해 주세요! 5 | 6 | 본 사이트의 개발에 참가를 원하시는 분들을 위해, 참가방법을 알려드립니다. 7 | 8 | ## Issue에의 코멘트나 Pull Request 9 | * Issue에의 코멘트는 자유롭게 이용해주세요! 새 질문이나 제안등도 받습니다. 10 | * Issue를 추가하는 경우, 반드시 기본에 이미 등록되어있는 Issue가 있는지 검색한 후에 작성해주세요. 11 | * Pull Request를 보내는 경우, 반드시 그 Pull Request과 연관된 Issue번호를 추가 기입 해주세요. 단독의 Pull Request는 받지않습니다. 12 | * improve(개선제안) 라벨이 붙은 Issue에 관해서는 반드시 대응한다는 보장을 할 수 없습니다. 양해해 주시기 바랍니다. 13 | * good first issue/ help wanted / bug를 우선으로 대응 해주시면 감사하겠습니다. 14 | 15 | ## 커뮤니케이션에의 참가방법 16 | * Code for Japan의 Slack어카운트를 가지고계시지않은 경우에는, [여기에서 등록](https://cfjslackin.herokuapp.com/)해주세요 17 | * `#covid19` 채널에 참가해주세요. 18 | 19 | ## 참여하기에 앞서 20 | * 개발에 참가하기 전에, [Principle/행동강령](CODE_OF_CONDUCT_KO.md) 를 일독해주시기를 바랍니다. 21 | * 커뮤니케이션에 관해서는, Code for Japan의 [행동강령](https://github.com/codeforjapan/codeofconduct) 도 확인해주세요. 22 | * 자신이 가능한 Issue에 누구도 배정되지않은 경우, Issue에 「제가 하겠습니다!」등의 코멘트를 해주신 후 개발을 시작해주세요. 23 | * [good first issue 라벨이 붙은이슈](https://github.com/tokyo-metropolitan-gov/covid19/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)는 초심자에게 추천드립니다. 24 | * 반나절이상 작업이 멈춰야하는 경우, 다른분이 작업을 계속 진행할 수 있도록 해주세요.(Issue를 배정받은 상태로 장시간 오프상태가 되면 그 Issue로 인해 다른 이슈가 블록이 되게 됩니다.) 25 | * 1일 이상 갱신이 없는 Issue에 관해서는, 배정을 취소하는 경우가 있습니다. 작업도중의 경우라도, [Draft Pull Request](https://qiita.com/tatane616/items/13da1b6797a7b871ad58)를 보내주시면 진척상황을 파악하기 좋습니다. 26 | * Issue에 관련한 질문들은, Slack보다는 Issue의 코멘트를 활용해주세요. 27 | * 제안등도 받고 있습니다. 적극적으로 새 Issue를 등록해주세요. 28 | 29 | ## CONTRIBUTORS.md 의 추가기제에 관해 30 | 협력해주신 모든분들의 성함(닉네임)과 역할을 넣은 [CONTRIBUTORS.md](https://github.com/tokyo-metropolitan-gov/covid19/blob/development/CONTRIBUTORS.md)라는 파일이 있습니다. 31 | 무언가 기여를 해주신분께서는 이름을 올려주세요. 32 | [#654](https://github.com/tokyo-metropolitan-gov/covid19/issues/654) 의 Issue에, 기재명、링크(원하는 경우), 역할을 기재해주세요. 33 | 34 | ## 개발에 관한 정보 35 | * 개발사이트 https://dev-covid19-tokyo.netlify.com/ 36 | * 스테이징 배포사이트 https://stg-covid19-tokyo.netlify.com/ 37 | * 운영 배포사이트 https://stopcovid19.metro.tokyo.lg.jp/ 38 | * [디자인](https://www.figma.com/file/V7vt80p2gauhdgTZeVNbgj/UI%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3?node-id=121%3A156) 39 | 40 | 이 문서의 갱신도 환영합니다! 41 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "covid19", 3 | "version": "1.0.0", 4 | "description": "三重県 新型コロナウイルス感染症 情報まとめサイト", 5 | "author": "三重県 有志チーム", 6 | "private": true, 7 | "engines": { 8 | "node": ">=10.19.0" 9 | }, 10 | "scripts": { 11 | "dev": "cross-env NODE_ENV=development nuxt-ts", 12 | "build": "nuxt-ts build", 13 | "start": "cross-env NODE_ENV=production nuxt-ts start", 14 | "generate:deploy": "nuxt-ts generate", 15 | "generate": "eslint './**/*.{js,ts,vue}' && nuxt-ts generate", 16 | "lint-and-generate": "eslint './**/*.{js,ts,vue}' && nuxt-ts generate", 17 | "test": "echo 'skip tests (there is no test)'", 18 | "lint": "eslint './**/*.{js,ts,vue}' --fix", 19 | "clean-hardsource": "rimraf ./node_modules/.cache/hard-source" 20 | }, 21 | "lint-staged": { 22 | "*.{js,ts,vue}": [ 23 | "eslint --fix", 24 | "git add" 25 | ] 26 | }, 27 | "husky": { 28 | "hooks": { 29 | "pre-commit": "lint-staged" 30 | } 31 | }, 32 | "dependencies": { 33 | "@nuxt/typescript-runtime": "^0.4.0", 34 | "@nuxtjs/axios": "^5.3.6", 35 | "@nuxtjs/dotenv": "^1.4.0", 36 | "@nuxtjs/pwa": "^3.0.0-0", 37 | "chart.js": "^2.9.4", 38 | "cross-env": "^5.2.0", 39 | "dayjs": "^1.8.21", 40 | "express": "^4.16.4", 41 | "nuxt": "^2.11.0", 42 | "nuxt-i18n": "^6.6.0", 43 | "vue-chartjs": "^3.5.0", 44 | "vue-property-decorator": "^8.4.0", 45 | "vue-scrollto": "^2.17.1", 46 | "vue-spinner": "^1.0.3" 47 | }, 48 | "devDependencies": { 49 | "@fullhuman/postcss-purgecss": "^2.1.0", 50 | "@mdi/font": "^4.9.95", 51 | "@nuxt/typescript-build": "^0.6.0", 52 | "@nuxtjs/eslint-config-typescript": "^1.0.2", 53 | "@nuxtjs/google-analytics": "^2.2.3", 54 | "@nuxtjs/vuetify": "^1.0.0", 55 | "@types/chart.js": "^2.9.14", 56 | "@vue/test-utils": "^1.0.0-beta.27", 57 | "autoprefixer": "^9.7.4", 58 | "babel-jest": "^24.1.0", 59 | "eslint": "^6.8.0", 60 | "eslint-config-prettier": "^6.10.0", 61 | "eslint-plugin-prettier": "^3.1.2", 62 | "husky": "^4.2.3", 63 | "jest": "^24.1.0", 64 | "lint-staged": "^10.0.8", 65 | "nodemon": "^1.18.9", 66 | "nuxt-purgecss": "^0.2.1", 67 | "nuxt-svg-loader": "^1.2.0", 68 | "prettier": "^1.19.1", 69 | "rimraf": "^3.0.2", 70 | "vue-jest": "^4.0.0-0" 71 | }, 72 | "browserslist": [ 73 | "defaults", 74 | "ie >=11" 75 | ] 76 | } 77 | -------------------------------------------------------------------------------- /.github/CONTRIBUTING_ES.md: -------------------------------------------------------------------------------- 1 | # Cómo Contribuir 2 | 3 | Colaboradores, ¡gracias por participar en este proyecto! 4 | 5 | Soy Seki, el gerente de desarrollo. Si tiene alguna pregunta, no dude en preguntarme en Slack, etc. 6 | 7 | Esta página muestra cómo puede contribuir al desarrollo de este sitio. 8 | 9 | ## Comentarios sobre Issues and Pull Requests 10 | * ¡Siéntase libre de comentar sobre el problema! Preguntas y sugerencias también son bienvenidas. 11 | * Puede solucionar algunos problemas usando Pull Request. 12 | * Tenga en cuenta que los problemas de sugerencias de mejora (etiquetados con `improve`) 13 | puede no ser siempre aceptado (especialmente los de la interfaz de usuario o UI) 14 | * Nos alegra que le dé prioridad a los problemas de [good first issue / help wanted / bug] 15 | 16 | ## Cómo participar en comunicaciones 17 | * Si no tiene una cuenta de Slack de "Código para Japón", regístrese [aquí](https://cfjslackin.herokuapp.com/) 18 | * Únete al canal `#covid19` 19 | 20 | ## Para participar 21 | * Por favor lea [Principio / Código de conducta](CODE_OF_CONDUCT_ES.md) antes de participar en desarrollos. 22 | * Para comunicaciones, verifique también el Código de Japón [Código de Conducta](https://github.com/codeforjapan/codeofconduct). 23 | * Si encuentra algunos problemas que puede hacer, ¡por favor, asigne usted mismo! 24 | * [good first issue label](https://github.com/tokyo-metropolitan-gov/covid19/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) se recomienda para principiantes 25 | * Si no puede progresar durante más de medio día, asegúrese de que otros puedan hacerse cargo de su trabajo. 26 | * En caso de que los problemas no se actualicen durante más de un día, podemos eliminar la asignación.[Draft Pull Request](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests#draft-pull-requests) Se recomienda para que todos conozcan la situación. 27 | * Para cualquier pregunta relacionada con el problema, debemos analizar en los comentarios del problema en Slack. 28 | * También aceptamos sugerencias! Por favor, siéntase libre de crear nuevos problemas. 29 | 30 | ## Información de desarrollo 31 | * Sitio en desarrollo https://dev-covid19-tokyo.netlify.com/ 32 | * Sitio de prueba https://stg-covid19-tokyo.netlify.com/ 33 | * Sitio en producción https://stopcovid19.metro.tokyo.lg.jp/ 34 | * [Design](https://www.figma.com/file/V7vt80p2gauhdgTZeVNbgj/UI%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3?node-id=121%3A156) 35 | 36 | ¡Las actualizaciones de este documento también son bienvenidas! 37 | -------------------------------------------------------------------------------- /.github/CONTRIBUTING_EN.md: -------------------------------------------------------------------------------- 1 | # How to contribute 2 | 3 | Contributors, thank you for participating in this project! 4 | 5 | I'm Seki, the development manager. If you have any questions, feel free to ask me on Slack etc. 6 | 7 | This page shows how you can contribute to the development of this site. 8 | 9 | ## Comments on Issues and Pull Requests 10 | * Feel free to comment on any Issues! Questions and suggestions are also welcome. 11 | * Please search existing issues to make sure there is no similar issues before making a new issue. 12 | * Note that Issues for improvement suggestions (labeled with `improve`) may not be always accepted (especially ones for UI) 13 | * When you send a new Pull Request, please specify a related issue ID. We don't accept Pull Requests which has no issue ID. 14 | * We appreciate if you give priority to the issues labelled [good first issue / help wanted / bug] 15 | 16 | ## How to participate in communications 17 | * If you do not have a "Code for Japan" Slack account, please register [here](https://cfjslackin.herokuapp.com/) 18 | * Join `#covid19` Channel 19 | 20 | ## For participation 21 | * Please read [Principle / Code of Conduct](CODE_OF_CONDUCT_EN.md) before participating in development. 22 | * For communication, please also check Code for Japan's [Code of Conduct](https://github.com/codeforjapan/codeofconduct). 23 | * If you plan to work on an issue, please leave a comment behind to give a heads-up. 24 | * [good first issue label](https://github.com/tokyo-metropolitan-gov/covid19/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) is recommended for beginners. 25 | * If you can't make any progress for more than half a day, make sure that others can take over your work. 26 | * If an issue is not updated for more than one day, we may remove the assignment. 27 | * A [Draft Pull Request](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests#draft-pull-requests) is recommended for any work in progress, so that everyone understands the situation. 28 | * Please discuss questions related to an Issue in the Issue comments instead of on Slack. 29 | * We also accept suggestions! Please feel free to create new issues. 30 | 31 | ## Development information 32 | * Development site https://dev-covid19-tokyo.netlify.com/ 33 | * Staging site https://stg-covid19-tokyo.netlify.com/ 34 | * Production site https://stopcovid19.metro.tokyo.lg.jp/ 35 | * [Design](https://www.figma.com/file/V7vt80p2gauhdgTZeVNbgj/UI%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3?node-id=121%3A156) 36 | 37 | Updates to this document are also welcome! 38 | -------------------------------------------------------------------------------- /assets/variables.scss: -------------------------------------------------------------------------------- 1 | // ================== 2 | // color 3 | $green-1: #FF4F02; 4 | $green-2: #f96b2c; 5 | $green-3: #ff8d5b; 6 | $green-4: #fcb190; 7 | $gray-1: #333333; 8 | $gray-2: #4D4D4D; 9 | $gray-3: #808080; 10 | $gray-4: #D9D9D9; 11 | $gray-5: #F8F9FA; 12 | $white: #FFFFFF; 13 | $link: #006CA8; 14 | 15 | // ================== 16 | // shadow 17 | $shadow: 0px 0px 2px rgba(0, 0, 0, 0.15); 18 | 19 | // ================== 20 | // break-points 21 | $huge: 1440; 22 | $large: 1170; 23 | $medium: 768; 24 | $small: 600; 25 | 26 | // ================== 27 | // z-index 28 | $z-index-map: ( 29 | opened-side-navigation: 101, 30 | sp-navigation: 100, 31 | ); 32 | @function z-index-of($key) { 33 | @return map-get($z-index-map, $key); 34 | } 35 | 36 | // ================== 37 | // media-query 38 | @mixin largerThan($width) { 39 | @media screen and (min-width: $width + 1 + px) { 40 | @content; 41 | } 42 | } 43 | 44 | @mixin lessThan($width) { 45 | @media screen and (max-width: $width + px) { 46 | @content; 47 | } 48 | } 49 | 50 | 51 | // ================== 52 | // font-size 53 | @mixin font-size($size, $base: 16) { 54 | font-size: $size + px; 55 | font-size: ($size / $base) + rem; 56 | } 57 | @mixin card-h1 { 58 | @include font-size(24); 59 | color: $gray-2; 60 | font-weight: bold; 61 | } 62 | @mixin card-h2 { 63 | @include font-size(19); 64 | color: $gray-2; 65 | font-weight: bold; 66 | } 67 | @mixin body-text { 68 | @include font-size(16); 69 | color: $gray-1; 70 | line-height: 160%; 71 | font-weight: normal; 72 | } 73 | 74 | // =================== 75 | // button 76 | @mixin text-link { 77 | @include font-size(14); 78 | color: $link !important; 79 | text-decoration: none; 80 | &:hover { 81 | text-decoration: underline; 82 | } 83 | } 84 | 85 | @mixin button-text($size: 'md') { 86 | @if ($size == 'sm') { 87 | padding: 4px 8px; 88 | } @else { 89 | padding: 24px 36px; 90 | } 91 | @include font-size(14); 92 | display: inline-block; 93 | border-radius: 4px; 94 | background-color: $white; 95 | border: 1px solid $green-1; 96 | color:$green-1; 97 | cursor: pointer; 98 | &:hover { 99 | background-color: $green-2; 100 | color: $white; 101 | > i { 102 | color: $white !important; 103 | } 104 | } 105 | } 106 | 107 | // =================== 108 | // card 109 | @mixin card-container { 110 | background-color: $white; 111 | box-shadow: $shadow; 112 | border: 0.5px solid $gray-4 !important; 113 | border-radius: 4px; 114 | } 115 | -------------------------------------------------------------------------------- /components/WhatsNew.vue: -------------------------------------------------------------------------------- 1 | 38 | 39 | 71 | 72 | 135 | -------------------------------------------------------------------------------- /static/data/130001_tokyo_covid19_patients.csv: -------------------------------------------------------------------------------- 1 | No,全国地方公共団体コード,都道府県名,市区町村名,公表_年月日,曜日,発症_年月日,居住地,年代,性別,患者_属性,患者_状態,患者_症状,患者_渡航歴の有無フラグ,備考,退院済フラグ 2 | 1,130001,東京都,,2020-01-24,金,,湖北省武漢市,40代,男性,,,,,,1 3 | 2,130001,東京都,,2020-01-25,土,,湖北省武漢市,30代,女性,,,,,,1 4 | 3,130001,東京都,,2020-01-30,木,,湖南省長沙市,30代,女性,,,,,,1 5 | 4,130001,東京都,,2020-02-13,木,,都内,70代,男性,,,,,,"" 6 | 5,130001,東京都,,2020-02-14,金,,都内,50代,女性,,,,,,1 7 | 6,130001,東京都,,2020-02-14,金,,都内,70代,男性,,,,,,1 8 | 7,130001,東京都,,2020-02-15,土,,都内,80代,男性,,,,,,1 9 | 8,130001,東京都,,2020-02-15,土,,都内,50代,女性,,,,,,1 10 | 9,130001,東京都,,2020-02-15,土,,都内,50代,男性,,,,,,1 11 | 10,130001,東京都,,2020-02-15,土,,都内,70代,男性,,,,,,1 12 | 11,130001,東京都,,2020-02-15,土,,都内,70代,男性,,,,,,1 13 | 12,130001,東京都,,2020-02-15,土,,都内,40代,男性,,,,,,1 14 | 13,130001,東京都,,2020-02-15,土,,都内,60代,女性,,,,,,1 15 | 14,130001,東京都,,2020-02-15,土,,都内,40代,男性,,,,,,1 16 | 15,130001,東京都,,2020-02-16,日,,都内,60代,男性,,,,,,"" 17 | 16,130001,東京都,,2020-02-16,日,,都内,30代,男性,,,,,,1 18 | 17,130001,東京都,,2020-02-16,日,,都内,60代,男性,,,,,,1 19 | 18,130001,東京都,,2020-02-16,日,,埼玉県,60代,男性,,,,,,1 20 | 19,130001,東京都,,2020-02-16,日,,都内,30代,男性,,,,,,1 21 | 20,130001,東京都,,2020-02-18,火,,都内,80代,男性,,,,,,1 22 | 21,130001,東京都,,2020-02-18,火,,都内,20代,男性,,,,,,1 23 | 22,130001,東京都,,2020-02-18,火,,都内,50代,男性,,,,,,"" 24 | 23,130001,東京都,,2020-02-19,水,,都内,70代,男性,,,,,,"" 25 | 24,130001,東京都,,2020-02-19,水,,都内,70代,女性,,,,,,1 26 | 25,130001,東京都,,2020-02-19,水,,都内,70代,女性,,,,,,"" 27 | 26,130001,東京都,,2020-02-21,金,,都内,50代,女性,,,,,,"" 28 | 27,130001,東京都,,2020-02-21,金,,都内,70代,女性,,,,,,1 29 | 28,130001,東京都,,2020-02-21,金,,都内,50代,女性,,,,,,1 30 | 29,130001,東京都,,2020-02-22,土,,都内,60代,男性,,,,,,"" 31 | 30,130001,東京都,,2020-02-24,月,,都内,40代,男性,,,,,,"" 32 | 31,130001,東京都,,2020-02-24,月,,都内,50代,男性,,,,,,"" 33 | 32,130001,東京都,,2020-02-24,月,,都内,30代,男性,,,,,,"" 34 | 33,130001,東京都,,2020-02-26,水,,都内,80代,男性,,,,,,"" 35 | 34,130001,東京都,,2020-02-26,水,,都内,70代,男性,,,,,,"" 36 | 35,130001,東京都,,2020-02-26,水,,都内,70代,男性,,,,,,"" 37 | 36,130001,東京都,,2020-02-27,木,,都外,60代,女性,,,,,,"" 38 | 37,130001,東京都,,2020-02-29,土,,都内,20代,女性,,,,,,"" 39 | 38,130001,東京都,,2020-03-01,日,,都内,50代,女性,,,,,,1 40 | 39,130001,東京都,,2020-03-01,日,,都内,70代,男性,,,,,,"" 41 | 40,130001,東京都,,2020-03-03,火,,都内,50代,女性,,,,,,"" 42 | 41,130001,東京都,,2020-03-04,水,,都内,80代,女性,,,,,,"" 43 | 42,130001,東京都,,2020-03-04,水,,都内,30代,女性,,,,,,"" 44 | 43,130001,東京都,,2020-03-04,水,,都内,50代,男性,,,,,,"" 45 | 44,130001,東京都,,2020-03-04,水,,都内,40代,女性,,,,,,"" 46 | 45,130001,東京都,,2020-03-05,木,,都内,10歳未満,女性,,,,,,"" 47 | 46,130001,東京都,,2020-03-05,木,,都内,10歳未満,男性,,,,,,"" 48 | 47,130001,東京都,,2020-03-05,木,,都内,30代,女性,,,,,,"" 49 | 48,130001,東京都,,2020-03-05,木,,都内,20代,女性,,,,,,"" 50 | 49,130001,東京都,,2020-03-05,木,,都内,70代,女性,,,,,,"" 51 | 50,130001,東京都,,2020-03-05,木,,都内,90代,男性,,,,,,"" 52 | 51,130001,東京都,,2020-03-05,木,,都内,70代,男性,,,,,,"" 53 | 52,130001,東京都,,2020-03-05,木,,都内,80代,男性,,,,,,"" 54 | 53,130001,東京都,,2020-03-06,金,,都内,70代,男性,,,,,,"" 55 | 54,130001,東京都,,2020-03-06,金,,都内,30代,女性,,,,,,"" 56 | 55,130001,東京都,,2020-03-06,金,,都内,40代,男性,,,,,,"" 57 | 56,130001,東京都,,2020-03-06,金,,都内,90代,男性,,,,,,1 58 | 57,130001,東京都,,2020-03-06,金,,都内,30代,女性,,,,,,"" 59 | 58,130001,東京都,,2020-03-06,金,,都内,50代,女性,,,,,,"" 60 | 59,130001,東京都,,2020-03-07,土,,都内,50代,女性,,,,,,"" 61 | 60,130001,東京都,,2020-03-07,土,,都内,70代,女性,,,,,,"" 62 | 61,130001,東京都,,2020-03-07,土,,都内,40代,女性,,,,,,"" 63 | 62,130001,東京都,,2020-03-07,土,,都内,50代,男性,,,,,,"" 64 | 63,130001,東京都,,2020-03-07,土,,都内,50代,女性,,,,,,"" 65 | 64,130001,東京都,,2020-03-07,土,,都内,70代,男性,,,,,,"" 66 | -------------------------------------------------------------------------------- /layouts/default.vue: -------------------------------------------------------------------------------- 1 | 24 | 72 | 142 | -------------------------------------------------------------------------------- /components/DataView.vue: -------------------------------------------------------------------------------- 1 | 37 | 38 | 54 | 55 | 131 | -------------------------------------------------------------------------------- /layouts/print.vue: -------------------------------------------------------------------------------- 1 | 45 | 87 | 105 | 106 | 148 | -------------------------------------------------------------------------------- /components/DataTable.vue: -------------------------------------------------------------------------------- 1 | 56 | 57 | 105 | 106 | 182 | -------------------------------------------------------------------------------- /components/ListItem.vue: -------------------------------------------------------------------------------- 1 | 45 | 46 | 99 | 100 | 177 | -------------------------------------------------------------------------------- /pages/about.vue: -------------------------------------------------------------------------------- 1 | 103 | 104 | 118 | 119 | 140 | -------------------------------------------------------------------------------- /nuxt.config.ts: -------------------------------------------------------------------------------- 1 | import { Configuration } from '@nuxt/types' 2 | const path = require('path') 3 | const purgecss = require('@fullhuman/postcss-purgecss') 4 | const autoprefixer = require('autoprefixer') 5 | 6 | const DOMAIN_URL = 'https://mie.stopcovid19.jp' 7 | 8 | const config: Configuration = { 9 | mode: 'universal', 10 | /* 11 | ** Headers of the page 12 | */ 13 | head: { 14 | htmlAttrs: { 15 | prefix: 'og: http://ogp.me/ns#' 16 | }, 17 | titleTemplate: '%s | 三重県 新型コロナウイルス感染症 情報まとめサイト', 18 | meta: [ 19 | { charset: 'utf-8' }, 20 | { name: 'viewport', content: 'width=device-width, initial-scale=1' }, 21 | { 22 | hid: 'description', 23 | name: 'description', 24 | content: 25 | '当サイトは新型コロナウイルス感染症(COVID-19)に関する最新情報を提供するために、三重県内の有志で集まったチームが開発したものです。' 26 | }, 27 | { 28 | hid: 'og:site_name', 29 | property: 'og:site_name', 30 | content: '三重県 新型コロナウイルス感染症 情報まとめサイト' 31 | }, 32 | { hid: 'og:type', property: 'og:type', content: 'website' }, 33 | { 34 | hid: 'og:url', 35 | property: 'og:url', 36 | content: DOMAIN_URL 37 | }, 38 | { 39 | hid: 'og:title', 40 | property: 'og:title', 41 | content: '三重県 新型コロナウイルス感染症 情報まとめサイト' 42 | }, 43 | { 44 | hid: 'og:description', 45 | property: 'og:description', 46 | content: 47 | '当サイトは新型コロナウイルス感染症(COVID-19)に関する最新情報を提供するために、三重県の有志で集まったチームが開設したものです。' 48 | }, 49 | { 50 | hid: 'og:image', 51 | property: 'og:image', 52 | content: path.join(DOMAIN_URL, 'ogp.png') 53 | }, 54 | { 55 | hid: 'twitter:card', 56 | name: 'twitter:card', 57 | content: 'summary_large_image' 58 | }, 59 | { 60 | hid: 'twitter:site', 61 | name: 'twitter:site', 62 | content: '@FPC_COMMUNITY' 63 | }, 64 | { 65 | hid: 'twitter:creator', 66 | name: 'twitter:creator', 67 | content: '@FPC_COMMUNITY' 68 | }, 69 | { 70 | hid: 'twitter:image', 71 | name: 'twitter:image', 72 | content: path.join(DOMAIN_URL, 'ogp.png') 73 | } 74 | ], 75 | link: [ 76 | { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }, 77 | { rel: 'apple-touch-icon', href: '/apple-touch-icon-precomposed.png' } 78 | ] 79 | }, 80 | /* 81 | ** Customize the progress-bar color 82 | */ 83 | loading: { color: '#fff' }, 84 | /* 85 | ** Global CSS 86 | */ 87 | css: ['~assets/global.scss'], 88 | /* 89 | ** Plugins to load before mounting the App 90 | */ 91 | plugins: [ 92 | { 93 | src: '@/plugins/vue-chart.ts', 94 | ssr: true 95 | }, 96 | { 97 | src: '@/plugins/vuetify.ts', 98 | ssr: true 99 | } 100 | ], 101 | /* 102 | ** Nuxt.js dev-modules 103 | */ 104 | buildModules: [ 105 | '@nuxtjs/vuetify', 106 | '@nuxt/typescript-build', 107 | '@nuxtjs/google-analytics' 108 | ], 109 | /* 110 | ** Nuxt.js modules 111 | */ 112 | modules: [ 113 | // Doc: https://axios.nuxtjs.org/usage 114 | '@nuxtjs/axios', 115 | '@nuxtjs/pwa', 116 | // Doc: https://github.com/nuxt-community/dotenv-module 117 | '@nuxtjs/dotenv', 118 | [ 119 | 'nuxt-i18n', 120 | { 121 | strategy: 'no_prefix', 122 | locales: [ 123 | { 124 | code: 'ja', 125 | iso: 'ja-JP' 126 | } 127 | ], 128 | defaultLocale: 'ja', 129 | vueI18n: { 130 | fallbackLocale: 'ja', 131 | formatFallbackMessages: true 132 | }, 133 | vueI18nLoader: true 134 | } 135 | ], 136 | 'nuxt-svg-loader', 137 | 'nuxt-purgecss', 138 | ['vue-scrollto/nuxt', { duration: 1000, offset: -72 }] 139 | ], 140 | /* 141 | ** Axios module configuration 142 | ** See https://axios.nuxtjs.org/options 143 | */ 144 | axios: {}, 145 | /* 146 | ** vuetify module configuration 147 | ** https://github.com/nuxt-community/vuetify-module 148 | */ 149 | vuetify: { 150 | customVariables: ['~/assets/variables.scss'], 151 | defaultAssets: { 152 | icons: false 153 | } 154 | }, 155 | googleAnalytics: { 156 | id: 'UA-160613146-1' 157 | }, 158 | build: { 159 | postcss: { 160 | plugins: [ 161 | autoprefixer({ grid: 'autoplace' }), 162 | purgecss({ 163 | content: [ 164 | './pages/**/*.vue', 165 | './layouts/**/*.vue', 166 | './components/**/*.vue', 167 | './node_modules/vuetify/dist/vuetify.js', 168 | './node_modules/vue-spinner/src/ScaleLoader.vue' 169 | ], 170 | whitelist: ['html', 'body', 'nuxt-progress', 'DataCard'], 171 | whitelistPatterns: [/(col|row)/] 172 | }) 173 | ] 174 | }, 175 | // https://ja.nuxtjs.org/api/configuration-build/#hardsource 176 | hardSource: process.env.NODE_ENV === 'development', 177 | extractCSS: { ignoreOrder: true } 178 | }, 179 | manifest: { 180 | name: '三重県 新型コロナウイルス感染症 情報まとめサイト', 181 | theme_color: '#ff8d5b', 182 | background_color: '#ffffff', 183 | display: 'standalone', 184 | Scope: '/', 185 | start_url: '/', 186 | splash_pages: null 187 | }, 188 | generate: { 189 | fallback: true 190 | }, 191 | // /* 192 | // ** hot read configuration for docker 193 | // */ 194 | watchers: { 195 | webpack: { 196 | poll: true 197 | } 198 | } 199 | } 200 | 201 | export default config 202 | -------------------------------------------------------------------------------- /static/site-qr.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /components/SideNavigation.vue: -------------------------------------------------------------------------------- 1 | 48 | 49 | 50 | { 51 | "ja": { 52 | "Navi Open": "サイドメニュー項目を開く", 53 | "Navi Close": "サイドメニュー項目を閉じる", 54 | "COVID-19": "新型コロナウイルス感染症", 55 | "Measures site": "対策サイト(非公式)", 56 | "MiePrefecture": "三重県", 57 | "Tokyo COVID-19 Task Force": "新型コロナウイルス感染症対策本部", 58 | "The latest updates": "県内の最新感染動向", 59 | "for Families with children": "お子様をお持ちの皆様へ", 60 | "for Citizens": "県民の皆様へ", 61 | "for Enterprises and Employees": "企業の皆様・はたらく皆様へ", 62 | "Government official website": "三重県公式ホームページ", 63 | "About us": "当サイトについて", 64 | "Ivents Info": "新型コロナウイルス感染症に係る県主催イベントの中止・延期情報", 65 | "Other local government sites":"他自治体の対策サイト", 66 | "Mie Coronavirus Countermeasures Official LINE":"三重県コロナウイルス対策公式LINE", 67 | "Evacuation response":"避難時の新型コロナウイルス感染症への対応について" 68 | } 69 | } 70 | 71 | 72 | 151 | 152 | 262 | -------------------------------------------------------------------------------- /components/TimeStackedBarChart.vue: -------------------------------------------------------------------------------- 1 | 24 | 25 | 276 | 277 | 284 | -------------------------------------------------------------------------------- /components/TimeBarChart.vue: -------------------------------------------------------------------------------- 1 | 51 | 52 | 57 | 58 | 362 | -------------------------------------------------------------------------------- /tool/convert.php: -------------------------------------------------------------------------------- 1 | diffInDays(Carbon::now()) == 0) { 12 | break; 13 | } else { 14 | $dates[$begin->addDay()->format('Y-m-d').'T08:00:00.000Z'] =0; 15 | 16 | } 17 | } 18 | return new Collection($dates); 19 | } 20 | function formatDate(string $date) :string 21 | { 22 | if (preg_match('#(\d+/\d+/\d+)/ (\d+:\d+)#', $date, $matches)) { 23 | $carbon = Carbon::parse($matches[1].' '.$matches[2]); 24 | return $carbon->format('Y/m/d H:i'); 25 | } else { 26 | throw new Exception('Can not parse date:'.$date); 27 | } 28 | } 29 | 30 | function xlsxToArray(string $path, string $sheet_name, string $range, $header_range = null) 31 | { 32 | $reader = new PhpOffice\PhpSpreadsheet\Reader\Xlsx(); 33 | $spreadsheet = $reader->load($path); 34 | $sheet = $spreadsheet->getSheetByName($sheet_name); 35 | $data = new Collection($sheet->rangeToArray($range)); 36 | $data = $data->map(function ($row) { 37 | return new Collection($row); 38 | }); 39 | if ($header_range !== null) { 40 | $headers = xlsxToArray($path, $sheet_name, $header_range)[0]; 41 | // TODO check same columns length 42 | return $data->map(function ($row) use($headers){ 43 | return $row->mapWithKeys(function ($cell, $idx) use($headers){ 44 | 45 | return [ 46 | $headers[$idx] => $cell 47 | ]; 48 | }); 49 | }); 50 | } 51 | 52 | return $data; 53 | } 54 | 55 | 56 | function readContacts() : array 57 | { 58 | 59 | $data = xlsxToArray(__DIR__.'/downloads/コールセンター相談件数-RAW.xlsx', 'Sheet1', 'A2:E100', 'A1:E1'); 60 | return [ 61 | 'date' => xlsxToArray(__DIR__.'/downloads/コールセンター相談件数-RAW.xlsx', 'Sheet1', 'H1')[0][0], 62 | 'data' => $data->filter(function ($row) { 63 | return $row['曜日'] && $row['17-21時']; 64 | })->map(function ($row) { 65 | $date = '2020-'.str_replace(['月', '日'], ['-', ''], $row['日付']); 66 | $carbon = Carbon::parse($date); 67 | $row['日付'] = $carbon->format('Y-m-d').'T08:00:00.000Z'; 68 | $row['date'] = $carbon->format('Y-m-d'); 69 | $row['w'] = $carbon->format('w'); 70 | $row['short_date'] = $carbon->format('m/d'); 71 | $row['小計'] = array_sum([ 72 | $row['9-13時'] ?? 0, 73 | $row['13-17時'] ?? 0, 74 | $row['17-21時'] ?? 0, 75 | ]); 76 | return $row; 77 | }) 78 | ]; 79 | } 80 | 81 | /* 82 | * 取り急ぎreadContactsからコピペ 83 | * 過渡期がすぎたら共通処理にしたい。→マクロ入ってる 84 | */ 85 | function readQuerents() : array 86 | { 87 | $data = xlsxToArray(__DIR__.'/downloads/帰国者・接触者センター相談件数-RAW.xlsx', 'RAW', 'A2:D100', 'A1:D1'); 88 | 89 | return [ 90 | 'date' => xlsxToArray(__DIR__.'/downloads/帰国者・接触者センター相談件数-RAW.xlsx', 'RAW', 'H1')[0][0], 91 | 'data' => $data->filter(function ($row) { 92 | 93 | return $row['曜日'] && $row['17-翌9時']; 94 | })->map(function ($row) { 95 | $date = '2020-'.str_replace(['月', '日'], ['-', ''], $row['日付']); 96 | $carbon = Carbon::parse($date); 97 | $row['日付'] = $carbon->format('Y-m-d').'T08:00:00.000Z'; 98 | $row['date'] = $carbon->format('Y-m-d'); 99 | $row['w'] = $carbon->format('w'); 100 | $row['short_date'] = $carbon->format('m/d'); 101 | $row['小計'] = array_sum([ 102 | $row['9-17時'] ?? 0, 103 | $row['17-翌9時'] ?? 0, 104 | ]); 105 | return $row; 106 | })->values() 107 | ]; 108 | } 109 | 110 | 111 | function readPatientsV2() : array 112 | { 113 | $data = xlsxToArray(__DIR__.'/downloads/東京都患者発生発表数-RAW.xlsx', 'RAW', 'A2:J100', 'A1:J1'); 114 | $base_data = $data->filter(function ($row) { 115 | return $row['リリース日']; 116 | })->map(function ($row) { 117 | $date = '2020-'.str_replace(['月', '日'], ['-', ''], $row['リリース日']); 118 | $carbon = Carbon::parse($date); 119 | $row['リリース日'] = $carbon->format('Y-m-d').'T08:00:00.000Z'; 120 | $row['date'] = $carbon->format('Y-m-d'); 121 | $row['w'] = $carbon->format('w'); 122 | $row['short_date'] = $carbon->format('m/d'); 123 | return $row; 124 | }); 125 | 126 | return [ 127 | 'date' => xlsxToArray(__DIR__.'/downloads/東京都患者発生発表数-RAW.xlsx', 'RAW', 'M1')[0][0], 128 | 'data' => [ 129 | '感染者数' => makeDateArray('2020-01-24')->merge($base_data->groupBy('リリース日')->map(function ($rows) { 130 | return $rows->count(); 131 | })), 132 | '退院者数' => makeDateArray('2020-01-24')->merge($base_data->filter(function ($row) { 133 | return $row['退院'] === '〇' && !preg_match('/死亡$/', trim($row['備考'])); 134 | })->groupBy('リリース日')->map(function ($rows) { 135 | return $rows->count(); 136 | })), 137 | '死亡者数' => makeDateArray('2020-01-24')->merge($base_data->filter(function ($row) { 138 | return preg_match('/死亡$/', trim($row['備考'])); 139 | })->groupBy('リリース日')->map(function ($rows) { 140 | return $rows->count(); 141 | })), 142 | '軽症' => makeDateArray('2020-01-24')->merge($base_data->filter(function ($row) { 143 | return $row['退院'] !== '〇' && trim($row['備考']) == ''; 144 | })->groupBy('リリース日')->map(function ($rows) { 145 | return $rows->count(); 146 | })), 147 | '中等症' => makeDateArray('2020-01-24')->merge($base_data->filter(function ($row) { 148 | return $row['退院'] !== '〇' && preg_match('/中等症$/', trim($row['備考'])); 149 | })->groupBy('リリース日')->map(function ($rows) { 150 | return $rows->count(); 151 | })), 152 | '重症' => makeDateArray('2020-01-24')->merge($base_data->filter(function ($row) { 153 | return $row['退院'] !== '〇' && preg_match('/重症$/', trim($row['備考'])); 154 | })->groupBy('リリース日')->map(function ($rows) { 155 | return $rows->count(); 156 | })) 157 | 158 | ] 159 | ]; 160 | } 161 | 162 | function readPatients() : array 163 | { 164 | $data = xlsxToArray(__DIR__.'/downloads/東京都患者発生発表数-RAW.xlsx', 'RAW', 'A2:J100', 'A1:J1'); 165 | 166 | return [ 167 | 'date' => xlsxToArray(__DIR__.'/downloads/東京都患者発生発表数-RAW.xlsx', 'RAW', 'M1')[0][0], 168 | 'data' => $data->filter(function ($row) { 169 | return $row['リリース日']; 170 | })->map(function ($row) { 171 | $date = '2020-'.str_replace(['月', '日'], ['-', ''], $row['リリース日']); 172 | $carbon = Carbon::parse($date); 173 | $row['リリース日'] = $carbon->format('Y-m-d').'T08:00:00.000Z'; 174 | $row['date'] = $carbon->format('Y-m-d'); 175 | $row['w'] = $carbon->format('w'); 176 | $row['short_date'] = $carbon->format('m/d'); 177 | return $row; 178 | }) 179 | ]; 180 | } 181 | function createSummary(array $patients) { 182 | $dates = makeDateArray('2020-01-23'); 183 | 184 | return [ 185 | 'date' => $patients['date'], 186 | 'data' => $dates->map(function ($val, $key) { 187 | return [ 188 | '日付' => $key, 189 | '小計' => $val 190 | ]; 191 | })->merge($patients['data']->groupBy('リリース日')->map(function ($group, $key) { 192 | return [ 193 | '日付' => $key, 194 | '小計' => $group->count() 195 | ]; 196 | }))->values() 197 | ]; 198 | 199 | 200 | } 201 | 202 | function discharges(array $patients) : array { 203 | 204 | return [ 205 | 'date' => $patients['date'], 206 | 'data' => $patients['data']->filter(function ($row) { 207 | return $row['退院'] === '〇'; 208 | })->values() 209 | ]; 210 | } 211 | 212 | function readInspections() : array{ 213 | $data = xlsxToArray(__DIR__.'/downloads/検査実施日別状況.xlsx', '入力シート', 'A2:J100', 'A1:J1'); 214 | $data = $data->filter(function ($row) { 215 | return $row['疑い例検査'] !== null; 216 | }); 217 | return [ 218 | 'date' => '2020/3/5/ 00:00', //TODO 現在のエクセルに更新日付がないので変更する必要あり 219 | 'data' => $data 220 | ]; 221 | } 222 | 223 | function readInspectionsSummary(array $inspections) : array 224 | { 225 | return [ 226 | 'date' => $inspections['date'], 227 | 'data' => [ 228 | '都内' => $inspections['data']->map(function ($row) { 229 | return str_replace(' ', '', $row['(小計①)']); 230 | }), 231 | 'その他' => $inspections['data']->map(function ($row) { 232 | return str_replace(' ', '', $row['(小計②)']); 233 | }), 234 | ], 235 | 'labels' =>$inspections['data']->map(function ($row) { 236 | return Carbon::parse($row['判明日'])->format('n/j'); 237 | }) 238 | ]; 239 | } 240 | 241 | 242 | $contacts = readContacts(); 243 | $querents = readQuerents(); 244 | 245 | $patients = readPatients(); 246 | $patients_summary = createSummary($patients); 247 | $better_patients_summary = readPatientsV2(); 248 | 249 | $discharges = discharges($patients); 250 | $discharges_summary = createSummary($discharges); 251 | 252 | $inspections =readInspections(); 253 | $inspections_summary =readInspectionsSummary($inspections); 254 | 255 | $data = compact([ 256 | 'contacts', 257 | 'querents', 258 | 'patients', 259 | 'patients_summary', 260 | 'discharges_summary', 261 | 'discharges', 262 | 'inspections', 263 | 'inspections_summary', 264 | 'better_patients_summary' 265 | ]); 266 | $lastUpdate = ''; 267 | $lastTime = 0; 268 | foreach ($data as $key => &$arr) { 269 | $arr['date'] = formatDate($arr['date']); 270 | $timestamp = Carbon::parse()->format('YmdHis'); 271 | if ($lastTime <= $timestamp) { 272 | $lastTime = $timestamp; 273 | $lastUpdate = Carbon::parse($arr['date'])->addDay()->format('Y/m/d 8:00'); 274 | } 275 | } 276 | $data['lastUpdate'] = $lastUpdate; 277 | 278 | $data['main_summary'] = [ 279 | 'attr' => '検査実施人数', 280 | 'value' => xlsxToArray(__DIR__.'/downloads/検査実施サマリ.xlsx', '検査実施サマリ', 'A2')[0][0], 281 | 'children' => [ 282 | [ 283 | 'attr' => '陽性患者数', 284 | 'value' => $better_patients_summary['data']['感染者数']->sum(), 285 | 'children' => [ 286 | [ 287 | 'attr' => '入院中', 288 | 'value' => $better_patients_summary['data']['感染者数']->sum() - $better_patients_summary['data']['退院者数']->sum() - $better_patients_summary['data']['死亡者数']->sum(), 289 | 'children' => [ 290 | [ 291 | 'attr' => '軽症・中等症', 292 | 'value' => $better_patients_summary['data']['軽症']->sum() + $better_patients_summary['data']['中等症']->sum() 293 | ], 294 | [ 295 | 'attr' => '重症', 296 | 'value' => $better_patients_summary['data']['重症']->sum() 297 | ] 298 | ] 299 | ], 300 | [ 301 | 'attr' => '退院', 302 | 'value' => $better_patients_summary['data']['退院者数']->sum() 303 | ], 304 | [ 305 | 'attr' => '死亡', 306 | 'value' => $better_patients_summary['data']['死亡者数']->sum() 307 | ] 308 | 309 | ] 310 | ] 311 | ] 312 | ]; 313 | 314 | file_put_contents(__DIR__.'/../data/data.json', json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_NUMERIC_CHECK)); 315 | -------------------------------------------------------------------------------- /pages/flow.vue: -------------------------------------------------------------------------------- 1 | 216 | 217 | 230 | 231 | 363 | -------------------------------------------------------------------------------- /pages/index.vue: -------------------------------------------------------------------------------- 1 | 119 | 120 | 352 | 353 | 368 | -------------------------------------------------------------------------------- /static/confirmed-cases-table.svg: -------------------------------------------------------------------------------- 1 | --------------------------------------------------------------------------------