bill před 2 roky
rodič
revize
501e60c06a
100 změnil soubory, kde provedl 8107 přidání a 0 odebrání
  1. 0 0
      .env
  2. 1 0
      .env.criminal
  3. 1 0
      .env.fire
  4. 24 0
      .gitignore
  5. 6 0
      .vscode/extensions.json
  6. 18 0
      README.md
  7. 13 0
      index.html
  8. 37 0
      package.json
  9. 1129 0
      pnpm-lock.yaml
  10. binární
      public/criminalBanner.png
  11. binární
      public/fireBanner.png
  12. 1 0
      public/vite.svg
  13. 15 0
      src/App.vue
  14. 21 0
      src/app/criminal/useStyle.scss
  15. 7 0
      src/app/fire/useStyle.scss
  16. 4 0
      src/app/index.ts
  17. 539 0
      src/assets/icon/fire/demo.css
  18. 878 0
      src/assets/icon/fire/demo_index.html
  19. 135 0
      src/assets/icon/fire/iconfont.css
  20. binární
      src/assets/icon/fire/iconfont.eot
  21. 1 0
      src/assets/icon/fire/iconfont.js
  22. 219 0
      src/assets/icon/fire/iconfont.json
  23. 101 0
      src/assets/icon/fire/iconfont.svg
  24. binární
      src/assets/icon/fire/iconfont.ttf
  25. binární
      src/assets/icon/fire/iconfont.woff
  26. binární
      src/assets/icon/fire/iconfont.woff2
  27. 539 0
      src/assets/icon/fuse/demo.css
  28. 1729 0
      src/assets/icon/fuse/demo_index.html
  29. 283 0
      src/assets/icon/fuse/iconfont.css
  30. 1 0
      src/assets/icon/fuse/iconfont.js
  31. 478 0
      src/assets/icon/fuse/iconfont.json
  32. binární
      src/assets/icon/fuse/iconfont.ttf
  33. binární
      src/assets/icon/fuse/iconfont.woff
  34. binární
      src/assets/icon/fuse/iconfont.woff2
  35. binární
      src/assets/image/close.png
  36. binární
      src/assets/image/code.png
  37. binární
      src/assets/image/decoration_collect@2x.png
  38. binární
      src/assets/image/edit_type_panorama.png
  39. binární
      src/assets/image/goto.png
  40. binární
      src/assets/image/home_bg.png
  41. binární
      src/assets/image/icon_add.png
  42. binární
      src/assets/image/img_login_logo.png
  43. binární
      src/assets/image/img_loginbg.png
  44. binární
      src/assets/image/img_loginbg1.png
  45. binární
      src/assets/image/img_loginbg2.png
  46. binární
      src/assets/image/list_arrow.png
  47. binární
      src/assets/image/logo_big.png
  48. binární
      src/assets/image/menu_vrhouse.png
  49. binární
      src/assets/image/page_arrow.png
  50. binární
      src/assets/image/pasword.png
  51. binární
      src/assets/image/photoview.png
  52. binární
      src/assets/image/scene.png
  53. binární
      src/assets/image/scene_error.png
  54. binární
      src/assets/image/scene_map_3d.png
  55. binární
      src/assets/image/scene_share.png
  56. binární
      src/assets/image/top-text.png
  57. binární
      src/assets/image/top_exit.png
  58. binární
      src/assets/image/top_my.png
  59. binární
      src/assets/image/top_my1.png
  60. binární
      src/assets/image/top_set.png
  61. binární
      src/assets/image/vrmodel-calc.png
  62. binární
      src/assets/image/vrmodel-err.png
  63. 549 0
      src/assets/style/public.scss
  64. 4 0
      src/assets/svg/arrow.svg
  65. 3 0
      src/assets/svg/brokenLine.svg
  66. 7 0
      src/assets/svg/cigarette.svg
  67. 3 0
      src/assets/svg/circular.svg
  68. 4 0
      src/assets/svg/compass.svg
  69. 4 0
      src/assets/svg/corpse.svg
  70. 6 0
      src/assets/svg/fingerPrint.svg
  71. 3 0
      src/assets/svg/fireoint.svg
  72. 8 0
      src/assets/svg/footPrint.svg
  73. 8 0
      src/assets/svg/footPrintRever.svg
  74. 4 0
      src/assets/svg/icon.svg
  75. 11 0
      src/assets/svg/n-compass.svg
  76. 3 0
      src/assets/svg/rect.svg
  77. 4 0
      src/assets/svg/shoePrint.svg
  78. 4 0
      src/assets/svg/shoePrintRever.svg
  79. 7 0
      src/assets/svg/table.svg
  80. 4 0
      src/assets/svg/text.svg
  81. 5 0
      src/assets/svg/theBlood.svg
  82. 1 0
      src/assets/vue.svg
  83. 112 0
      src/components.d.ts
  84. 53 0
      src/components/company-select/index.vue
  85. 66 0
      src/components/dialog/index.vue
  86. 51 0
      src/components/dialog/style.scss
  87. 11 0
      src/components/dialog/type.ts
  88. 6 0
      src/components/head/head.ts
  89. 115 0
      src/components/head/index.vue
  90. 158 0
      src/components/pagination/index.vue
  91. 21 0
      src/config/criminal.scss
  92. 7 0
      src/config/fire.scss
  93. 9 0
      src/config/locale.vue
  94. 17 0
      src/constant/REG.ts
  95. 28 0
      src/constant/app.ts
  96. 15 0
      src/constant/archive.ts
  97. 12 0
      src/constant/caseFile.ts
  98. 582 0
      src/constant/fire.ts
  99. 22 0
      src/constant/organization.ts
  100. 0 0
      src/constant/permission.ts

+ 0 - 0
.env


+ 1 - 0
.env.criminal

@@ -0,0 +1 @@
+VITE_APP_APP=2

+ 1 - 0
.env.fire

@@ -0,0 +1 @@
+VITE_APP_APP=1

+ 24 - 0
.gitignore

@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?

+ 6 - 0
.vscode/extensions.json

@@ -0,0 +1,6 @@
+{
+  "recommendations": [
+    "Vue.volar",
+    "Vue.vscode-typescript-vue-plugin"
+  ],
+}

+ 18 - 0
README.md

@@ -0,0 +1,18 @@
+# Vue 3 + TypeScript + Vite
+
+This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
+
+## Recommended IDE Setup
+
+- [VS Code](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin).
+
+## Type Support For `.vue` Imports in TS
+
+TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin) to make the TypeScript language service aware of `.vue` types.
+
+If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps:
+
+1. Disable the built-in TypeScript Extension
+   1. Run `Extensions: Show Built-in Extensions` from VSCode's command palette
+   2. Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)`
+2. Reload the VSCode window by running `Developer: Reload Window` from the command palette.

+ 13 - 0
index.html

@@ -0,0 +1,13 @@
+<!doctype html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <link rel="icon" type="image/svg+xml" href="/vite.svg" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>Vite + Vue + TS</title>
+  </head>
+  <body>
+    <div id="app"></div>
+    <script type="module" src="/src/main.ts"></script>
+  </body>
+</html>

+ 37 - 0
package.json

@@ -0,0 +1,37 @@
+{
+  "name": "public-service",
+  "private": true,
+  "version": "0.0.0",
+  "type": "module",
+  "scripts": {
+    "dev": "vite --mode fire",
+    "dev-criminal": "vite --mode criminal",
+    "build-fire": "vue-tsc && vite build --mode fire",
+    "build-criminal": "vue-tsc && vite build --mode criminal",
+    "build": "pnpm run build-fire && pnpm run build-criminal",
+    "preview": "vite preview"
+  },
+  "dependencies": {
+    "@amap/amap-jsapi-loader": "^1.0.1",
+    "@element-plus/icons-vue": "^2.1.0",
+    "@types/qs": "^6.9.7",
+    "axios": "^1.4.0",
+    "element-plus": "^2.3.8",
+    "js-base64": "^3.7.5",
+    "mitt": "^3.0.1",
+    "qs": "^6.11.2",
+    "sass": "^1.64.2",
+    "unplugin-element-plus": "^0.7.2",
+    "unplugin-vue-define-options": "^1.3.12",
+    "vue": "^3.3.4",
+    "vue-cropper": "^1.0.9",
+    "vue-router": "^4.2.4"
+  },
+  "devDependencies": {
+    "@types/node": "^20.4.5",
+    "@vitejs/plugin-vue": "^4.2.3",
+    "typescript": "^5.0.2",
+    "vite": "^4.4.5",
+    "vue-tsc": "^1.8.5"
+  }
+}

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1129 - 0
pnpm-lock.yaml


binární
public/criminalBanner.png


binární
public/fireBanner.png


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
public/vite.svg


+ 15 - 0
src/App.vue

@@ -0,0 +1,15 @@
+<template>
+  <Locale>
+    <router-view v-slot="{ Component }">
+      <component :is="Component" />
+    </router-view>
+    <div id="dialog"></div>
+  </Locale>
+</template>
+
+<script setup lang="ts">
+import Locale from "@/config/locale.vue";
+import { appConfig } from "@/store/system";
+
+document.title = appConfig.title;
+</script>

+ 21 - 0
src/app/criminal/useStyle.scss

@@ -0,0 +1,21 @@
+@forward 'element-plus/theme-chalk/src/common/var.scss'with ($colors: ('primary': ('base': #26559B, )),
+  $common-component-size: ('default': 40px));
+
+.delBtn {
+  color   : #26559B;
+  // color: rgb(250, 85, 85);
+}
+
+body {
+
+
+  .home-content h1,
+  .info h1 {
+    color: rgba(0, 0, 0, 0.85);
+  }
+
+  .home-content p,
+  .info p {
+    color: rgba(0, 0, 0, 0.45);
+  }
+}

+ 7 - 0
src/app/fire/useStyle.scss

@@ -0,0 +1,7 @@
+@forward 'element-plus/theme-chalk/src/common/var.scss'with ($colors: ('primary': ('base': #D8000A, )),
+  $common-component-size: ('default': 40px));
+
+.delBtn {
+  color   : #D8000A;
+  // color: rgb(250, 85, 85);
+}

+ 4 - 0
src/app/index.ts

@@ -0,0 +1,4 @@
+export const enum AppType {
+  fire = "1",
+  criminal = "2",
+}

+ 539 - 0
src/assets/icon/fire/demo.css

@@ -0,0 +1,539 @@
+/* Logo 字体 */
+@font-face {
+  font-family: "iconfont logo";
+  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
+  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
+}
+
+.logo {
+  font-family: "iconfont logo";
+  font-size: 160px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+/* tabs */
+.nav-tabs {
+  position: relative;
+}
+
+.nav-tabs .nav-more {
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  height: 42px;
+  line-height: 42px;
+  color: #666;
+}
+
+#tabs {
+  border-bottom: 1px solid #eee;
+}
+
+#tabs li {
+  cursor: pointer;
+  width: 100px;
+  height: 40px;
+  line-height: 40px;
+  text-align: center;
+  font-size: 16px;
+  border-bottom: 2px solid transparent;
+  position: relative;
+  z-index: 1;
+  margin-bottom: -1px;
+  color: #666;
+}
+
+
+#tabs .active {
+  border-bottom-color: #f00;
+  color: #222;
+}
+
+.tab-container .content {
+  display: none;
+}
+
+/* 页面布局 */
+.main {
+  padding: 30px 100px;
+  width: 960px;
+  margin: 0 auto;
+}
+
+.main .logo {
+  color: #333;
+  text-align: left;
+  margin-bottom: 30px;
+  line-height: 1;
+  height: 110px;
+  margin-top: -50px;
+  overflow: hidden;
+  *zoom: 1;
+}
+
+.main .logo a {
+  font-size: 160px;
+  color: #333;
+}
+
+.helps {
+  margin-top: 40px;
+}
+
+.helps pre {
+  padding: 20px;
+  margin: 10px 0;
+  border: solid 1px #e7e1cd;
+  background-color: #fffdef;
+  overflow: auto;
+}
+
+.icon_lists {
+  width: 100% !important;
+  overflow: hidden;
+  *zoom: 1;
+}
+
+.icon_lists li {
+  width: 100px;
+  margin-bottom: 10px;
+  margin-right: 20px;
+  text-align: center;
+  list-style: none !important;
+  cursor: default;
+}
+
+.icon_lists li .code-name {
+  line-height: 1.2;
+}
+
+.icon_lists .icon {
+  display: block;
+  height: 100px;
+  line-height: 100px;
+  font-size: 42px;
+  margin: 10px auto;
+  color: #333;
+  -webkit-transition: font-size 0.25s linear, width 0.25s linear;
+  -moz-transition: font-size 0.25s linear, width 0.25s linear;
+  transition: font-size 0.25s linear, width 0.25s linear;
+}
+
+.icon_lists .icon:hover {
+  font-size: 100px;
+}
+
+.icon_lists .svg-icon {
+  /* 通过设置 font-size 来改变图标大小 */
+  width: 1em;
+  /* 图标和文字相邻时,垂直对齐 */
+  vertical-align: -0.15em;
+  /* 通过设置 color 来改变 SVG 的颜色/fill */
+  fill: currentColor;
+  /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
+      normalize.css 中也包含这行 */
+  overflow: hidden;
+}
+
+.icon_lists li .name,
+.icon_lists li .code-name {
+  color: #666;
+}
+
+/* markdown 样式 */
+.markdown {
+  color: #666;
+  font-size: 14px;
+  line-height: 1.8;
+}
+
+.highlight {
+  line-height: 1.5;
+}
+
+.markdown img {
+  vertical-align: middle;
+  max-width: 100%;
+}
+
+.markdown h1 {
+  color: #404040;
+  font-weight: 500;
+  line-height: 40px;
+  margin-bottom: 24px;
+}
+
+.markdown h2,
+.markdown h3,
+.markdown h4,
+.markdown h5,
+.markdown h6 {
+  color: #404040;
+  margin: 1.6em 0 0.6em 0;
+  font-weight: 500;
+  clear: both;
+}
+
+.markdown h1 {
+  font-size: 28px;
+}
+
+.markdown h2 {
+  font-size: 22px;
+}
+
+.markdown h3 {
+  font-size: 16px;
+}
+
+.markdown h4 {
+  font-size: 14px;
+}
+
+.markdown h5 {
+  font-size: 12px;
+}
+
+.markdown h6 {
+  font-size: 12px;
+}
+
+.markdown hr {
+  height: 1px;
+  border: 0;
+  background: #e9e9e9;
+  margin: 16px 0;
+  clear: both;
+}
+
+.markdown p {
+  margin: 1em 0;
+}
+
+.markdown>p,
+.markdown>blockquote,
+.markdown>.highlight,
+.markdown>ol,
+.markdown>ul {
+  width: 80%;
+}
+
+.markdown ul>li {
+  list-style: circle;
+}
+
+.markdown>ul li,
+.markdown blockquote ul>li {
+  margin-left: 20px;
+  padding-left: 4px;
+}
+
+.markdown>ul li p,
+.markdown>ol li p {
+  margin: 0.6em 0;
+}
+
+.markdown ol>li {
+  list-style: decimal;
+}
+
+.markdown>ol li,
+.markdown blockquote ol>li {
+  margin-left: 20px;
+  padding-left: 4px;
+}
+
+.markdown code {
+  margin: 0 3px;
+  padding: 0 5px;
+  background: #eee;
+  border-radius: 3px;
+}
+
+.markdown strong,
+.markdown b {
+  font-weight: 600;
+}
+
+.markdown>table {
+  border-collapse: collapse;
+  border-spacing: 0px;
+  empty-cells: show;
+  border: 1px solid #e9e9e9;
+  width: 95%;
+  margin-bottom: 24px;
+}
+
+.markdown>table th {
+  white-space: nowrap;
+  color: #333;
+  font-weight: 600;
+}
+
+.markdown>table th,
+.markdown>table td {
+  border: 1px solid #e9e9e9;
+  padding: 8px 16px;
+  text-align: left;
+}
+
+.markdown>table th {
+  background: #F7F7F7;
+}
+
+.markdown blockquote {
+  font-size: 90%;
+  color: #999;
+  border-left: 4px solid #e9e9e9;
+  padding-left: 0.8em;
+  margin: 1em 0;
+}
+
+.markdown blockquote p {
+  margin: 0;
+}
+
+.markdown .anchor {
+  opacity: 0;
+  transition: opacity 0.3s ease;
+  margin-left: 8px;
+}
+
+.markdown .waiting {
+  color: #ccc;
+}
+
+.markdown h1:hover .anchor,
+.markdown h2:hover .anchor,
+.markdown h3:hover .anchor,
+.markdown h4:hover .anchor,
+.markdown h5:hover .anchor,
+.markdown h6:hover .anchor {
+  opacity: 1;
+  display: inline-block;
+}
+
+.markdown>br,
+.markdown>p>br {
+  clear: both;
+}
+
+
+.hljs {
+  display: block;
+  background: white;
+  padding: 0.5em;
+  color: #333333;
+  overflow-x: auto;
+}
+
+.hljs-comment,
+.hljs-meta {
+  color: #969896;
+}
+
+.hljs-string,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-strong,
+.hljs-emphasis,
+.hljs-quote {
+  color: #df5000;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-type {
+  color: #a71d5d;
+}
+
+.hljs-literal,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-attribute {
+  color: #0086b3;
+}
+
+.hljs-section,
+.hljs-name {
+  color: #63a35c;
+}
+
+.hljs-tag {
+  color: #333333;
+}
+
+.hljs-title,
+.hljs-attr,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-selector-attr,
+.hljs-selector-pseudo {
+  color: #795da3;
+}
+
+.hljs-addition {
+  color: #55a532;
+  background-color: #eaffea;
+}
+
+.hljs-deletion {
+  color: #bd2c00;
+  background-color: #ffecec;
+}
+
+.hljs-link {
+  text-decoration: underline;
+}
+
+/* 代码高亮 */
+/* PrismJS 1.15.0
+https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
+/**
+ * prism.js default theme for JavaScript, CSS and HTML
+ * Based on dabblet (http://dabblet.com)
+ * @author Lea Verou
+ */
+code[class*="language-"],
+pre[class*="language-"] {
+  color: black;
+  background: none;
+  text-shadow: 0 1px white;
+  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+  text-align: left;
+  white-space: pre;
+  word-spacing: normal;
+  word-break: normal;
+  word-wrap: normal;
+  line-height: 1.5;
+
+  -moz-tab-size: 4;
+  -o-tab-size: 4;
+  tab-size: 4;
+
+  -webkit-hyphens: none;
+  -moz-hyphens: none;
+  -ms-hyphens: none;
+  hyphens: none;
+}
+
+pre[class*="language-"]::-moz-selection,
+pre[class*="language-"] ::-moz-selection,
+code[class*="language-"]::-moz-selection,
+code[class*="language-"] ::-moz-selection {
+  text-shadow: none;
+  background: #b3d4fc;
+}
+
+pre[class*="language-"]::selection,
+pre[class*="language-"] ::selection,
+code[class*="language-"]::selection,
+code[class*="language-"] ::selection {
+  text-shadow: none;
+  background: #b3d4fc;
+}
+
+@media print {
+
+  code[class*="language-"],
+  pre[class*="language-"] {
+    text-shadow: none;
+  }
+}
+
+/* Code blocks */
+pre[class*="language-"] {
+  padding: 1em;
+  margin: .5em 0;
+  overflow: auto;
+}
+
+:not(pre)>code[class*="language-"],
+pre[class*="language-"] {
+  background: #f5f2f0;
+}
+
+/* Inline code */
+:not(pre)>code[class*="language-"] {
+  padding: .1em;
+  border-radius: .3em;
+  white-space: normal;
+}
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+  color: slategray;
+}
+
+.token.punctuation {
+  color: #999;
+}
+
+.namespace {
+  opacity: .7;
+}
+
+.token.property,
+.token.tag,
+.token.boolean,
+.token.number,
+.token.constant,
+.token.symbol,
+.token.deleted {
+  color: #905;
+}
+
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+  color: #690;
+}
+
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string {
+  color: #9a6e3a;
+  background: hsla(0, 0%, 100%, .5);
+}
+
+.token.atrule,
+.token.attr-value,
+.token.keyword {
+  color: #07a;
+}
+
+.token.function,
+.token.class-name {
+  color: #DD4A68;
+}
+
+.token.regex,
+.token.important,
+.token.variable {
+  color: #e90;
+}
+
+.token.important,
+.token.bold {
+  font-weight: bold;
+}
+
+.token.italic {
+  font-style: italic;
+}
+
+.token.entity {
+  cursor: help;
+}

+ 878 - 0
src/assets/icon/fire/demo_index.html

@@ -0,0 +1,878 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8"/>
+  <title>iconfont Demo</title>
+  <link rel="shortcut icon" href="//img.alicdn.com/imgextra/i2/O1CN01ZyAlrn1MwaMhqz36G_!!6000000001499-73-tps-64-64.ico" type="image/x-icon"/>
+  <link rel="icon" type="image/svg+xml" href="//img.alicdn.com/imgextra/i4/O1CN01EYTRnJ297D6vehehJ_!!6000000008020-55-tps-64-64.svg"/>
+  <link rel="stylesheet" href="https://g.alicdn.com/thx/cube/1.3.2/cube.min.css">
+  <link rel="stylesheet" href="demo.css">
+  <link rel="stylesheet" href="iconfont.css">
+  <script src="iconfont.js"></script>
+  <!-- jQuery -->
+  <script src="https://a1.alicdn.com/oss/uploads/2018/12/26/7bfddb60-08e8-11e9-9b04-53e73bb6408b.js"></script>
+  <!-- 代码高亮 -->
+  <script src="https://a1.alicdn.com/oss/uploads/2018/12/26/a3f714d0-08e6-11e9-8a15-ebf944d7534c.js"></script>
+  <style>
+    .main .logo {
+      margin-top: 0;
+      height: auto;
+    }
+
+    .main .logo a {
+      display: flex;
+      align-items: center;
+    }
+
+    .main .logo .sub-title {
+      margin-left: 0.5em;
+      font-size: 22px;
+      color: #fff;
+      background: linear-gradient(-45deg, #3967FF, #B500FE);
+      -webkit-background-clip: text;
+      -webkit-text-fill-color: transparent;
+    }
+  </style>
+</head>
+<body>
+  <div class="main">
+    <h1 class="logo"><a href="https://www.iconfont.cn/" title="iconfont 首页" target="_blank">
+      <img width="200" src="https://img.alicdn.com/imgextra/i3/O1CN01Mn65HV1FfSEzR6DKv_!!6000000000514-55-tps-228-59.svg">
+      
+    </a></h1>
+    <div class="nav-tabs">
+      <ul id="tabs" class="dib-box">
+        <li class="dib active"><span>Unicode</span></li>
+        <li class="dib"><span>Font class</span></li>
+        <li class="dib"><span>Symbol</span></li>
+      </ul>
+      
+      <a href="https://www.iconfont.cn/manage/index?manage_type=myprojects&projectId=2466491" target="_blank" class="nav-more">查看项目</a>
+      
+    </div>
+    <div class="tab-container">
+      <div class="content unicode" style="display: block;">
+          <ul class="icon_lists dib-box">
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe6e2;</span>
+                <div class="name">fire_role_management</div>
+                <div class="code-name">&amp;#xe6e2;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe6e0;</span>
+                <div class="name">fire_organization</div>
+                <div class="code-name">&amp;#xe6e0;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe6a0;</span>
+                <div class="name">fire_home_study</div>
+                <div class="code-name">&amp;#xe6a0;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe6a1;</span>
+                <div class="name">fire_home_vr</div>
+                <div class="code-name">&amp;#xe6a1;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe69f;</span>
+                <div class="name">collect</div>
+                <div class="code-name">&amp;#xe69f;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe695;</span>
+                <div class="name">fire_mic_off</div>
+                <div class="code-name">&amp;#xe695;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe696;</span>
+                <div class="name">fire_cancel</div>
+                <div class="code-name">&amp;#xe696;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe697;</span>
+                <div class="name">fire_pen_open</div>
+                <div class="code-name">&amp;#xe697;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe698;</span>
+                <div class="name">fire_pen_off</div>
+                <div class="code-name">&amp;#xe698;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe699;</span>
+                <div class="name">fire_cross</div>
+                <div class="code-name">&amp;#xe699;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe69a;</span>
+                <div class="name">fire_exit</div>
+                <div class="code-name">&amp;#xe69a;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe69b;</span>
+                <div class="name">fire_share</div>
+                <div class="code-name">&amp;#xe69b;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe69c;</span>
+                <div class="name">fire_vr</div>
+                <div class="code-name">&amp;#xe69c;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe69d;</span>
+                <div class="name">fire_mic_on</div>
+                <div class="code-name">&amp;#xe69d;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe69e;</span>
+                <div class="name">fire_appendix</div>
+                <div class="code-name">&amp;#xe69e;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe68f;</span>
+                <div class="name">fire_119</div>
+                <div class="code-name">&amp;#xe68f;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe690;</span>
+                <div class="name">fire_arrow</div>
+                <div class="code-name">&amp;#xe690;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe691;</span>
+                <div class="name">fire_building</div>
+                <div class="code-name">&amp;#xe691;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe692;</span>
+                <div class="name">fire_other</div>
+                <div class="code-name">&amp;#xe692;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe693;</span>
+                <div class="name">fire_bus</div>
+                <div class="code-name">&amp;#xe693;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe694;</span>
+                <div class="name">fire_recycle</div>
+                <div class="code-name">&amp;#xe694;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe686;</span>
+                <div class="name">fire_user</div>
+                <div class="code-name">&amp;#xe686;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe687;</span>
+                <div class="name">fire_camera</div>
+                <div class="code-name">&amp;#xe687;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe688;</span>
+                <div class="name">log_eye_normal</div>
+                <div class="code-name">&amp;#xe688;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe689;</span>
+                <div class="name">log_eye_selected</div>
+                <div class="code-name">&amp;#xe689;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe68a;</span>
+                <div class="name">fire_home</div>
+                <div class="code-name">&amp;#xe68a;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe68b;</span>
+                <div class="name">fire_annex</div>
+                <div class="code-name">&amp;#xe68b;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe68c;</span>
+                <div class="name">fire_management </div>
+                <div class="code-name">&amp;#xe68c;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe68d;</span>
+                <div class="name">fire_study</div>
+                <div class="code-name">&amp;#xe68d;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe68e;</span>
+                <div class="name">fire_scenes</div>
+                <div class="code-name">&amp;#xe68e;</div>
+              </li>
+          
+          </ul>
+          <div class="article markdown">
+          <h2 id="unicode-">Unicode 引用</h2>
+          <hr>
+
+          <p>Unicode 是字体在网页端最原始的应用方式,特点是:</p>
+          <ul>
+            <li>支持按字体的方式去动态调整图标大小,颜色等等。</li>
+            <li>默认情况下不支持多色,直接添加多色图标会自动去色。</li>
+          </ul>
+          <blockquote>
+            <p>注意:新版 iconfont 支持两种方式引用多色图标:SVG symbol 引用方式和彩色字体图标模式。(使用彩色字体图标需要在「编辑项目」中开启「彩色」选项后并重新生成。)</p>
+          </blockquote>
+          <p>Unicode 使用步骤如下:</p>
+          <h3 id="-font-face">第一步:拷贝项目下面生成的 <code>@font-face</code></h3>
+<pre><code class="language-css"
+>@font-face {
+  font-family: 'iconfont';
+  src: url('iconfont.woff2?t=1639981610282') format('woff2'),
+       url('iconfont.woff?t=1639981610282') format('woff'),
+       url('iconfont.ttf?t=1639981610282') format('truetype');
+}
+</code></pre>
+          <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
+<pre><code class="language-css"
+>.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+</code></pre>
+          <h3 id="-">第三步:挑选相应图标并获取字体编码,应用于页面</h3>
+<pre>
+<code class="language-html"
+>&lt;span class="iconfont"&gt;&amp;#x33;&lt;/span&gt;
+</code></pre>
+          <blockquote>
+            <p>"iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。</p>
+          </blockquote>
+          </div>
+      </div>
+      <div class="content font-class">
+        <ul class="icon_lists dib-box">
+          
+          <li class="dib">
+            <span class="icon iconfont iconfire_role_management"></span>
+            <div class="name">
+              fire_role_management
+            </div>
+            <div class="code-name">.iconfire_role_management
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfire_organization"></span>
+            <div class="name">
+              fire_organization
+            </div>
+            <div class="code-name">.iconfire_organization
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfire_home_study"></span>
+            <div class="name">
+              fire_home_study
+            </div>
+            <div class="code-name">.iconfire_home_study
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfire_home_vr"></span>
+            <div class="name">
+              fire_home_vr
+            </div>
+            <div class="code-name">.iconfire_home_vr
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconcollect"></span>
+            <div class="name">
+              collect
+            </div>
+            <div class="code-name">.iconcollect
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfire_mic_off"></span>
+            <div class="name">
+              fire_mic_off
+            </div>
+            <div class="code-name">.iconfire_mic_off
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfire_cancel"></span>
+            <div class="name">
+              fire_cancel
+            </div>
+            <div class="code-name">.iconfire_cancel
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfire_pen_on"></span>
+            <div class="name">
+              fire_pen_open
+            </div>
+            <div class="code-name">.iconfire_pen_on
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfire_pen_off"></span>
+            <div class="name">
+              fire_pen_off
+            </div>
+            <div class="code-name">.iconfire_pen_off
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfire_cross"></span>
+            <div class="name">
+              fire_cross
+            </div>
+            <div class="code-name">.iconfire_cross
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfire_exit"></span>
+            <div class="name">
+              fire_exit
+            </div>
+            <div class="code-name">.iconfire_exit
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfire_share"></span>
+            <div class="name">
+              fire_share
+            </div>
+            <div class="code-name">.iconfire_share
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfire_vr"></span>
+            <div class="name">
+              fire_vr
+            </div>
+            <div class="code-name">.iconfire_vr
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfire_mic_on"></span>
+            <div class="name">
+              fire_mic_on
+            </div>
+            <div class="code-name">.iconfire_mic_on
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfire_appendix"></span>
+            <div class="name">
+              fire_appendix
+            </div>
+            <div class="code-name">.iconfire_appendix
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfire_119"></span>
+            <div class="name">
+              fire_119
+            </div>
+            <div class="code-name">.iconfire_119
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfire_arrow"></span>
+            <div class="name">
+              fire_arrow
+            </div>
+            <div class="code-name">.iconfire_arrow
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfire_building"></span>
+            <div class="name">
+              fire_building
+            </div>
+            <div class="code-name">.iconfire_building
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfire_other"></span>
+            <div class="name">
+              fire_other
+            </div>
+            <div class="code-name">.iconfire_other
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfire_bus"></span>
+            <div class="name">
+              fire_bus
+            </div>
+            <div class="code-name">.iconfire_bus
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfire_recycle"></span>
+            <div class="name">
+              fire_recycle
+            </div>
+            <div class="code-name">.iconfire_recycle
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfire_user"></span>
+            <div class="name">
+              fire_user
+            </div>
+            <div class="code-name">.iconfire_user
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfire_camera"></span>
+            <div class="name">
+              fire_camera
+            </div>
+            <div class="code-name">.iconfire_camera
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconlog_eye_normal"></span>
+            <div class="name">
+              log_eye_normal
+            </div>
+            <div class="code-name">.iconlog_eye_normal
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconlog_eye_selected"></span>
+            <div class="name">
+              log_eye_selected
+            </div>
+            <div class="code-name">.iconlog_eye_selected
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfire_home"></span>
+            <div class="name">
+              fire_home
+            </div>
+            <div class="code-name">.iconfire_home
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfire_annex"></span>
+            <div class="name">
+              fire_annex
+            </div>
+            <div class="code-name">.iconfire_annex
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfire_management"></span>
+            <div class="name">
+              fire_management 
+            </div>
+            <div class="code-name">.iconfire_management
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfire_study"></span>
+            <div class="name">
+              fire_study
+            </div>
+            <div class="code-name">.iconfire_study
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont iconfire_scenes"></span>
+            <div class="name">
+              fire_scenes
+            </div>
+            <div class="code-name">.iconfire_scenes
+            </div>
+          </li>
+          
+        </ul>
+        <div class="article markdown">
+        <h2 id="font-class-">font-class 引用</h2>
+        <hr>
+
+        <p>font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。</p>
+        <p>与 Unicode 使用方式相比,具有如下特点:</p>
+        <ul>
+          <li>相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。</li>
+          <li>因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。</li>
+        </ul>
+        <p>使用步骤如下:</p>
+        <h3 id="-fontclass-">第一步:引入项目下面生成的 fontclass 代码:</h3>
+<pre><code class="language-html">&lt;link rel="stylesheet" href="./iconfont.css"&gt;
+</code></pre>
+        <h3 id="-">第二步:挑选相应图标并获取类名,应用于页面:</h3>
+<pre><code class="language-html">&lt;span class="iconfont iconxxx"&gt;&lt;/span&gt;
+</code></pre>
+        <blockquote>
+          <p>"
+            iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。</p>
+        </blockquote>
+      </div>
+      </div>
+      <div class="content symbol">
+          <ul class="icon_lists dib-box">
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfire_role_management"></use>
+                </svg>
+                <div class="name">fire_role_management</div>
+                <div class="code-name">#iconfire_role_management</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfire_organization"></use>
+                </svg>
+                <div class="name">fire_organization</div>
+                <div class="code-name">#iconfire_organization</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfire_home_study"></use>
+                </svg>
+                <div class="name">fire_home_study</div>
+                <div class="code-name">#iconfire_home_study</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfire_home_vr"></use>
+                </svg>
+                <div class="name">fire_home_vr</div>
+                <div class="code-name">#iconfire_home_vr</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconcollect"></use>
+                </svg>
+                <div class="name">collect</div>
+                <div class="code-name">#iconcollect</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfire_mic_off"></use>
+                </svg>
+                <div class="name">fire_mic_off</div>
+                <div class="code-name">#iconfire_mic_off</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfire_cancel"></use>
+                </svg>
+                <div class="name">fire_cancel</div>
+                <div class="code-name">#iconfire_cancel</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfire_pen_on"></use>
+                </svg>
+                <div class="name">fire_pen_open</div>
+                <div class="code-name">#iconfire_pen_on</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfire_pen_off"></use>
+                </svg>
+                <div class="name">fire_pen_off</div>
+                <div class="code-name">#iconfire_pen_off</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfire_cross"></use>
+                </svg>
+                <div class="name">fire_cross</div>
+                <div class="code-name">#iconfire_cross</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfire_exit"></use>
+                </svg>
+                <div class="name">fire_exit</div>
+                <div class="code-name">#iconfire_exit</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfire_share"></use>
+                </svg>
+                <div class="name">fire_share</div>
+                <div class="code-name">#iconfire_share</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfire_vr"></use>
+                </svg>
+                <div class="name">fire_vr</div>
+                <div class="code-name">#iconfire_vr</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfire_mic_on"></use>
+                </svg>
+                <div class="name">fire_mic_on</div>
+                <div class="code-name">#iconfire_mic_on</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfire_appendix"></use>
+                </svg>
+                <div class="name">fire_appendix</div>
+                <div class="code-name">#iconfire_appendix</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfire_119"></use>
+                </svg>
+                <div class="name">fire_119</div>
+                <div class="code-name">#iconfire_119</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfire_arrow"></use>
+                </svg>
+                <div class="name">fire_arrow</div>
+                <div class="code-name">#iconfire_arrow</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfire_building"></use>
+                </svg>
+                <div class="name">fire_building</div>
+                <div class="code-name">#iconfire_building</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfire_other"></use>
+                </svg>
+                <div class="name">fire_other</div>
+                <div class="code-name">#iconfire_other</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfire_bus"></use>
+                </svg>
+                <div class="name">fire_bus</div>
+                <div class="code-name">#iconfire_bus</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfire_recycle"></use>
+                </svg>
+                <div class="name">fire_recycle</div>
+                <div class="code-name">#iconfire_recycle</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfire_user"></use>
+                </svg>
+                <div class="name">fire_user</div>
+                <div class="code-name">#iconfire_user</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfire_camera"></use>
+                </svg>
+                <div class="name">fire_camera</div>
+                <div class="code-name">#iconfire_camera</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconlog_eye_normal"></use>
+                </svg>
+                <div class="name">log_eye_normal</div>
+                <div class="code-name">#iconlog_eye_normal</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconlog_eye_selected"></use>
+                </svg>
+                <div class="name">log_eye_selected</div>
+                <div class="code-name">#iconlog_eye_selected</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfire_home"></use>
+                </svg>
+                <div class="name">fire_home</div>
+                <div class="code-name">#iconfire_home</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfire_annex"></use>
+                </svg>
+                <div class="name">fire_annex</div>
+                <div class="code-name">#iconfire_annex</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfire_management"></use>
+                </svg>
+                <div class="name">fire_management </div>
+                <div class="code-name">#iconfire_management</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfire_study"></use>
+                </svg>
+                <div class="name">fire_study</div>
+                <div class="code-name">#iconfire_study</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#iconfire_scenes"></use>
+                </svg>
+                <div class="name">fire_scenes</div>
+                <div class="code-name">#iconfire_scenes</div>
+            </li>
+          
+          </ul>
+          <div class="article markdown">
+          <h2 id="symbol-">Symbol 引用</h2>
+          <hr>
+
+          <p>这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇<a href="">文章</a>
+            这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:</p>
+          <ul>
+            <li>支持多色图标了,不再受单色限制。</li>
+            <li>通过一些技巧,支持像字体那样,通过 <code>font-size</code>, <code>color</code> 来调整样式。</li>
+            <li>兼容性较差,支持 IE9+,及现代浏览器。</li>
+            <li>浏览器渲染 SVG 的性能一般,还不如 png。</li>
+          </ul>
+          <p>使用步骤如下:</p>
+          <h3 id="-symbol-">第一步:引入项目下面生成的 symbol 代码:</h3>
+<pre><code class="language-html">&lt;script src="./iconfont.js"&gt;&lt;/script&gt;
+</code></pre>
+          <h3 id="-css-">第二步:加入通用 CSS 代码(引入一次就行):</h3>
+<pre><code class="language-html">&lt;style&gt;
+.icon {
+  width: 1em;
+  height: 1em;
+  vertical-align: -0.15em;
+  fill: currentColor;
+  overflow: hidden;
+}
+&lt;/style&gt;
+</code></pre>
+          <h3 id="-">第三步:挑选相应图标并获取类名,应用于页面:</h3>
+<pre><code class="language-html">&lt;svg class="icon" aria-hidden="true"&gt;
+  &lt;use xlink:href="#icon-xxx"&gt;&lt;/use&gt;
+&lt;/svg&gt;
+</code></pre>
+          </div>
+      </div>
+
+    </div>
+  </div>
+  <script>
+  $(document).ready(function () {
+      $('.tab-container .content:first').show()
+
+      $('#tabs li').click(function (e) {
+        var tabContent = $('.tab-container .content')
+        var index = $(this).index()
+
+        if ($(this).hasClass('active')) {
+          return
+        } else {
+          $('#tabs li').removeClass('active')
+          $(this).addClass('active')
+
+          tabContent.hide().eq(index).fadeIn()
+        }
+      })
+    })
+  </script>
+</body>
+</html>

+ 135 - 0
src/assets/icon/fire/iconfont.css

@@ -0,0 +1,135 @@
+@font-face {
+  font-family: "iconfont"; /* Project id 2466491 */
+  src: url('iconfont.woff2?t=1639981610282') format('woff2'),
+       url('iconfont.woff?t=1639981610282') format('woff'),
+       url('iconfont.ttf?t=1639981610282') format('truetype');
+}
+
+.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.iconfire_role_management:before {
+  content: "\e6e2";
+}
+
+.iconfire_organization:before {
+  content: "\e6e0";
+}
+
+.iconfire_home_study:before {
+  content: "\e6a0";
+}
+
+.iconfire_home_vr:before {
+  content: "\e6a1";
+}
+
+.iconcollect:before {
+  content: "\e69f";
+}
+
+.iconfire_mic_off:before {
+  content: "\e695";
+}
+
+.iconfire_cancel:before {
+  content: "\e696";
+}
+
+.iconfire_pen_on:before {
+  content: "\e697";
+}
+
+.iconfire_pen_off:before {
+  content: "\e698";
+}
+
+.iconfire_cross:before {
+  content: "\e699";
+}
+
+.iconfire_exit:before {
+  content: "\e69a";
+}
+
+.iconfire_share:before {
+  content: "\e69b";
+}
+
+.iconfire_vr:before {
+  content: "\e69c";
+}
+
+.iconfire_mic_on:before {
+  content: "\e69d";
+}
+
+.iconfire_appendix:before {
+  content: "\e69e";
+}
+
+.iconfire_119:before {
+  content: "\e68f";
+}
+
+.iconfire_arrow:before {
+  content: "\e690";
+}
+
+.iconfire_building:before {
+  content: "\e691";
+}
+
+.iconfire_other:before {
+  content: "\e692";
+}
+
+.iconfire_bus:before {
+  content: "\e693";
+}
+
+.iconfire_recycle:before {
+  content: "\e694";
+}
+
+.iconfire_user:before {
+  content: "\e686";
+}
+
+.iconfire_camera:before {
+  content: "\e687";
+}
+
+.iconlog_eye_normal:before {
+  content: "\e688";
+}
+
+.iconlog_eye_selected:before {
+  content: "\e689";
+}
+
+.iconfire_home:before {
+  content: "\e68a";
+}
+
+.iconfire_annex:before {
+  content: "\e68b";
+}
+
+.iconfire_management:before {
+  content: "\e68c";
+}
+
+.iconfire_study:before {
+  content: "\e68d";
+}
+
+.iconfire_scenes:before {
+  content: "\e68e";
+}
+

binární
src/assets/icon/fire/iconfont.eot


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
src/assets/icon/fire/iconfont.js


+ 219 - 0
src/assets/icon/fire/iconfont.json

@@ -0,0 +1,219 @@
+{
+  "id": "2466491",
+  "name": "消防火调VR",
+  "font_family": "iconfont",
+  "css_prefix_text": "icon",
+  "description": "",
+  "glyphs": [
+    {
+      "icon_id": "26624915",
+      "name": "fire_role_management",
+      "font_class": "fire_role_management",
+      "unicode": "e6e2",
+      "unicode_decimal": 59106
+    },
+    {
+      "icon_id": "26624684",
+      "name": "fire_organization",
+      "font_class": "fire_organization",
+      "unicode": "e6e0",
+      "unicode_decimal": 59104
+    },
+    {
+      "icon_id": "21445457",
+      "name": "fire_home_study",
+      "font_class": "fire_home_study",
+      "unicode": "e6a0",
+      "unicode_decimal": 59040
+    },
+    {
+      "icon_id": "21445458",
+      "name": "fire_home_vr",
+      "font_class": "fire_home_vr",
+      "unicode": "e6a1",
+      "unicode_decimal": 59041
+    },
+    {
+      "icon_id": "21104009",
+      "name": "collect",
+      "font_class": "collect",
+      "unicode": "e69f",
+      "unicode_decimal": 59039
+    },
+    {
+      "icon_id": "20808329",
+      "name": "fire_mic_off",
+      "font_class": "fire_mic_off",
+      "unicode": "e695",
+      "unicode_decimal": 59029
+    },
+    {
+      "icon_id": "20808330",
+      "name": "fire_cancel",
+      "font_class": "fire_cancel",
+      "unicode": "e696",
+      "unicode_decimal": 59030
+    },
+    {
+      "icon_id": "20808331",
+      "name": "fire_pen_open",
+      "font_class": "fire_pen_on",
+      "unicode": "e697",
+      "unicode_decimal": 59031
+    },
+    {
+      "icon_id": "20808332",
+      "name": "fire_pen_off",
+      "font_class": "fire_pen_off",
+      "unicode": "e698",
+      "unicode_decimal": 59032
+    },
+    {
+      "icon_id": "20808333",
+      "name": "fire_cross",
+      "font_class": "fire_cross",
+      "unicode": "e699",
+      "unicode_decimal": 59033
+    },
+    {
+      "icon_id": "20808334",
+      "name": "fire_exit",
+      "font_class": "fire_exit",
+      "unicode": "e69a",
+      "unicode_decimal": 59034
+    },
+    {
+      "icon_id": "20808335",
+      "name": "fire_share",
+      "font_class": "fire_share",
+      "unicode": "e69b",
+      "unicode_decimal": 59035
+    },
+    {
+      "icon_id": "20808336",
+      "name": "fire_vr",
+      "font_class": "fire_vr",
+      "unicode": "e69c",
+      "unicode_decimal": 59036
+    },
+    {
+      "icon_id": "20808338",
+      "name": "fire_mic_on",
+      "font_class": "fire_mic_on",
+      "unicode": "e69d",
+      "unicode_decimal": 59037
+    },
+    {
+      "icon_id": "20808339",
+      "name": "fire_appendix",
+      "font_class": "fire_appendix",
+      "unicode": "e69e",
+      "unicode_decimal": 59038
+    },
+    {
+      "icon_id": "20806963",
+      "name": "fire_119",
+      "font_class": "fire_119",
+      "unicode": "e68f",
+      "unicode_decimal": 59023
+    },
+    {
+      "icon_id": "20806964",
+      "name": "fire_arrow",
+      "font_class": "fire_arrow",
+      "unicode": "e690",
+      "unicode_decimal": 59024
+    },
+    {
+      "icon_id": "20806965",
+      "name": "fire_building",
+      "font_class": "fire_building",
+      "unicode": "e691",
+      "unicode_decimal": 59025
+    },
+    {
+      "icon_id": "20806966",
+      "name": "fire_other",
+      "font_class": "fire_other",
+      "unicode": "e692",
+      "unicode_decimal": 59026
+    },
+    {
+      "icon_id": "20806967",
+      "name": "fire_bus",
+      "font_class": "fire_bus",
+      "unicode": "e693",
+      "unicode_decimal": 59027
+    },
+    {
+      "icon_id": "20806968",
+      "name": "fire_recycle",
+      "font_class": "fire_recycle",
+      "unicode": "e694",
+      "unicode_decimal": 59028
+    },
+    {
+      "icon_id": "20805833",
+      "name": "fire_user",
+      "font_class": "fire_user",
+      "unicode": "e686",
+      "unicode_decimal": 59014
+    },
+    {
+      "icon_id": "20805834",
+      "name": "fire_camera",
+      "font_class": "fire_camera",
+      "unicode": "e687",
+      "unicode_decimal": 59015
+    },
+    {
+      "icon_id": "20805835",
+      "name": "log_eye_normal",
+      "font_class": "log_eye_normal",
+      "unicode": "e688",
+      "unicode_decimal": 59016
+    },
+    {
+      "icon_id": "20805836",
+      "name": "log_eye_selected",
+      "font_class": "log_eye_selected",
+      "unicode": "e689",
+      "unicode_decimal": 59017
+    },
+    {
+      "icon_id": "20805837",
+      "name": "fire_home",
+      "font_class": "fire_home",
+      "unicode": "e68a",
+      "unicode_decimal": 59018
+    },
+    {
+      "icon_id": "20805838",
+      "name": "fire_annex",
+      "font_class": "fire_annex",
+      "unicode": "e68b",
+      "unicode_decimal": 59019
+    },
+    {
+      "icon_id": "20805839",
+      "name": "fire_management ",
+      "font_class": "fire_management",
+      "unicode": "e68c",
+      "unicode_decimal": 59020
+    },
+    {
+      "icon_id": "20805840",
+      "name": "fire_study",
+      "font_class": "fire_study",
+      "unicode": "e68d",
+      "unicode_decimal": 59021
+    },
+    {
+      "icon_id": "20805841",
+      "name": "fire_scenes",
+      "font_class": "fire_scenes",
+      "unicode": "e68e",
+      "unicode_decimal": 59022
+    }
+  ]
+}

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 101 - 0
src/assets/icon/fire/iconfont.svg


binární
src/assets/icon/fire/iconfont.ttf


binární
src/assets/icon/fire/iconfont.woff


binární
src/assets/icon/fire/iconfont.woff2


+ 539 - 0
src/assets/icon/fuse/demo.css

@@ -0,0 +1,539 @@
+/* Logo 字体 */
+@font-face {
+  font-family: "iconfont logo";
+  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
+  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
+}
+
+.logo {
+  font-family: "iconfont logo";
+  font-size: 160px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+/* tabs */
+.nav-tabs {
+  position: relative;
+}
+
+.nav-tabs .nav-more {
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  height: 42px;
+  line-height: 42px;
+  color: #666;
+}
+
+#tabs {
+  border-bottom: 1px solid #eee;
+}
+
+#tabs li {
+  cursor: pointer;
+  width: 100px;
+  height: 40px;
+  line-height: 40px;
+  text-align: center;
+  font-size: 16px;
+  border-bottom: 2px solid transparent;
+  position: relative;
+  z-index: 1;
+  margin-bottom: -1px;
+  color: #666;
+}
+
+
+#tabs .active {
+  border-bottom-color: #f00;
+  color: #222;
+}
+
+.tab-container .content {
+  display: none;
+}
+
+/* 页面布局 */
+.main {
+  padding: 30px 100px;
+  width: 960px;
+  margin: 0 auto;
+}
+
+.main .logo {
+  color: #333;
+  text-align: left;
+  margin-bottom: 30px;
+  line-height: 1;
+  height: 110px;
+  margin-top: -50px;
+  overflow: hidden;
+  *zoom: 1;
+}
+
+.main .logo a {
+  font-size: 160px;
+  color: #333;
+}
+
+.helps {
+  margin-top: 40px;
+}
+
+.helps pre {
+  padding: 20px;
+  margin: 10px 0;
+  border: solid 1px #e7e1cd;
+  background-color: #fffdef;
+  overflow: auto;
+}
+
+.icon_lists {
+  width: 100% !important;
+  overflow: hidden;
+  *zoom: 1;
+}
+
+.icon_lists li {
+  width: 100px;
+  margin-bottom: 10px;
+  margin-right: 20px;
+  text-align: center;
+  list-style: none !important;
+  cursor: default;
+}
+
+.icon_lists li .code-name {
+  line-height: 1.2;
+}
+
+.icon_lists .icon {
+  display: block;
+  height: 100px;
+  line-height: 100px;
+  font-size: 42px;
+  margin: 10px auto;
+  color: #333;
+  -webkit-transition: font-size 0.25s linear, width 0.25s linear;
+  -moz-transition: font-size 0.25s linear, width 0.25s linear;
+  transition: font-size 0.25s linear, width 0.25s linear;
+}
+
+.icon_lists .icon:hover {
+  font-size: 100px;
+}
+
+.icon_lists .svg-icon {
+  /* 通过设置 font-size 来改变图标大小 */
+  width: 1em;
+  /* 图标和文字相邻时,垂直对齐 */
+  vertical-align: -0.15em;
+  /* 通过设置 color 来改变 SVG 的颜色/fill */
+  fill: currentColor;
+  /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
+      normalize.css 中也包含这行 */
+  overflow: hidden;
+}
+
+.icon_lists li .name,
+.icon_lists li .code-name {
+  color: #666;
+}
+
+/* markdown 样式 */
+.markdown {
+  color: #666;
+  font-size: 14px;
+  line-height: 1.8;
+}
+
+.highlight {
+  line-height: 1.5;
+}
+
+.markdown img {
+  vertical-align: middle;
+  max-width: 100%;
+}
+
+.markdown h1 {
+  color: #404040;
+  font-weight: 500;
+  line-height: 40px;
+  margin-bottom: 24px;
+}
+
+.markdown h2,
+.markdown h3,
+.markdown h4,
+.markdown h5,
+.markdown h6 {
+  color: #404040;
+  margin: 1.6em 0 0.6em 0;
+  font-weight: 500;
+  clear: both;
+}
+
+.markdown h1 {
+  font-size: 28px;
+}
+
+.markdown h2 {
+  font-size: 22px;
+}
+
+.markdown h3 {
+  font-size: 16px;
+}
+
+.markdown h4 {
+  font-size: 14px;
+}
+
+.markdown h5 {
+  font-size: 12px;
+}
+
+.markdown h6 {
+  font-size: 12px;
+}
+
+.markdown hr {
+  height: 1px;
+  border: 0;
+  background: #e9e9e9;
+  margin: 16px 0;
+  clear: both;
+}
+
+.markdown p {
+  margin: 1em 0;
+}
+
+.markdown>p,
+.markdown>blockquote,
+.markdown>.highlight,
+.markdown>ol,
+.markdown>ul {
+  width: 80%;
+}
+
+.markdown ul>li {
+  list-style: circle;
+}
+
+.markdown>ul li,
+.markdown blockquote ul>li {
+  margin-left: 20px;
+  padding-left: 4px;
+}
+
+.markdown>ul li p,
+.markdown>ol li p {
+  margin: 0.6em 0;
+}
+
+.markdown ol>li {
+  list-style: decimal;
+}
+
+.markdown>ol li,
+.markdown blockquote ol>li {
+  margin-left: 20px;
+  padding-left: 4px;
+}
+
+.markdown code {
+  margin: 0 3px;
+  padding: 0 5px;
+  background: #eee;
+  border-radius: 3px;
+}
+
+.markdown strong,
+.markdown b {
+  font-weight: 600;
+}
+
+.markdown>table {
+  border-collapse: collapse;
+  border-spacing: 0px;
+  empty-cells: show;
+  border: 1px solid #e9e9e9;
+  width: 95%;
+  margin-bottom: 24px;
+}
+
+.markdown>table th {
+  white-space: nowrap;
+  color: #333;
+  font-weight: 600;
+}
+
+.markdown>table th,
+.markdown>table td {
+  border: 1px solid #e9e9e9;
+  padding: 8px 16px;
+  text-align: left;
+}
+
+.markdown>table th {
+  background: #F7F7F7;
+}
+
+.markdown blockquote {
+  font-size: 90%;
+  color: #999;
+  border-left: 4px solid #e9e9e9;
+  padding-left: 0.8em;
+  margin: 1em 0;
+}
+
+.markdown blockquote p {
+  margin: 0;
+}
+
+.markdown .anchor {
+  opacity: 0;
+  transition: opacity 0.3s ease;
+  margin-left: 8px;
+}
+
+.markdown .waiting {
+  color: #ccc;
+}
+
+.markdown h1:hover .anchor,
+.markdown h2:hover .anchor,
+.markdown h3:hover .anchor,
+.markdown h4:hover .anchor,
+.markdown h5:hover .anchor,
+.markdown h6:hover .anchor {
+  opacity: 1;
+  display: inline-block;
+}
+
+.markdown>br,
+.markdown>p>br {
+  clear: both;
+}
+
+
+.hljs {
+  display: block;
+  background: white;
+  padding: 0.5em;
+  color: #333333;
+  overflow-x: auto;
+}
+
+.hljs-comment,
+.hljs-meta {
+  color: #969896;
+}
+
+.hljs-string,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-strong,
+.hljs-emphasis,
+.hljs-quote {
+  color: #df5000;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-type {
+  color: #a71d5d;
+}
+
+.hljs-literal,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-attribute {
+  color: #0086b3;
+}
+
+.hljs-section,
+.hljs-name {
+  color: #63a35c;
+}
+
+.hljs-tag {
+  color: #333333;
+}
+
+.hljs-title,
+.hljs-attr,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-selector-attr,
+.hljs-selector-pseudo {
+  color: #795da3;
+}
+
+.hljs-addition {
+  color: #55a532;
+  background-color: #eaffea;
+}
+
+.hljs-deletion {
+  color: #bd2c00;
+  background-color: #ffecec;
+}
+
+.hljs-link {
+  text-decoration: underline;
+}
+
+/* 代码高亮 */
+/* PrismJS 1.15.0
+https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
+/**
+ * prism.js default theme for JavaScript, CSS and HTML
+ * Based on dabblet (http://dabblet.com)
+ * @author Lea Verou
+ */
+code[class*="language-"],
+pre[class*="language-"] {
+  color: black;
+  background: none;
+  text-shadow: 0 1px white;
+  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+  text-align: left;
+  white-space: pre;
+  word-spacing: normal;
+  word-break: normal;
+  word-wrap: normal;
+  line-height: 1.5;
+
+  -moz-tab-size: 4;
+  -o-tab-size: 4;
+  tab-size: 4;
+
+  -webkit-hyphens: none;
+  -moz-hyphens: none;
+  -ms-hyphens: none;
+  hyphens: none;
+}
+
+pre[class*="language-"]::-moz-selection,
+pre[class*="language-"] ::-moz-selection,
+code[class*="language-"]::-moz-selection,
+code[class*="language-"] ::-moz-selection {
+  text-shadow: none;
+  background: #b3d4fc;
+}
+
+pre[class*="language-"]::selection,
+pre[class*="language-"] ::selection,
+code[class*="language-"]::selection,
+code[class*="language-"] ::selection {
+  text-shadow: none;
+  background: #b3d4fc;
+}
+
+@media print {
+
+  code[class*="language-"],
+  pre[class*="language-"] {
+    text-shadow: none;
+  }
+}
+
+/* Code blocks */
+pre[class*="language-"] {
+  padding: 1em;
+  margin: .5em 0;
+  overflow: auto;
+}
+
+:not(pre)>code[class*="language-"],
+pre[class*="language-"] {
+  background: #f5f2f0;
+}
+
+/* Inline code */
+:not(pre)>code[class*="language-"] {
+  padding: .1em;
+  border-radius: .3em;
+  white-space: normal;
+}
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+  color: slategray;
+}
+
+.token.punctuation {
+  color: #999;
+}
+
+.namespace {
+  opacity: .7;
+}
+
+.token.property,
+.token.tag,
+.token.boolean,
+.token.number,
+.token.constant,
+.token.symbol,
+.token.deleted {
+  color: #905;
+}
+
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+  color: #690;
+}
+
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string {
+  color: #9a6e3a;
+  background: hsla(0, 0%, 100%, .5);
+}
+
+.token.atrule,
+.token.attr-value,
+.token.keyword {
+  color: #07a;
+}
+
+.token.function,
+.token.class-name {
+  color: #DD4A68;
+}
+
+.token.regex,
+.token.important,
+.token.variable {
+  color: #e90;
+}
+
+.token.important,
+.token.bold {
+  font-weight: bold;
+}
+
+.token.italic {
+  font-style: italic;
+}
+
+.token.entity {
+  cursor: help;
+}

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1729 - 0
src/assets/icon/fuse/demo_index.html


+ 283 - 0
src/assets/icon/fuse/iconfont.css

@@ -0,0 +1,283 @@
+@font-face {
+  font-family: "iconfont"; /* Project id 3549513 */
+  src: url('iconfont.woff2?t=1692171577992') format('woff2'),
+       url('iconfont.woff?t=1692171577992') format('woff'),
+       url('iconfont.ttf?t=1692171577992') format('truetype');
+}
+
+.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-without:before {
+  content: "\e70e";
+}
+
+.icon-keyboard:before {
+  content: "\e70d";
+}
+
+.icon-recover:before {
+  content: "\e693";
+}
+
+.icon-repeal:before {
+  content: "\e694";
+}
+
+.icon-broken_l:before {
+  content: "\e6fd";
+}
+
+.icon-arrows:before {
+  content: "\e6fe";
+}
+
+.icon-blood:before {
+  content: "\e6ff";
+}
+
+.icon-circle:before {
+  content: "\e700";
+}
+
+.icon-cigarette_e:before {
+  content: "\e701";
+}
+
+.icon-corpse:before {
+  content: "\e702";
+}
+
+.icon-icon_n:before {
+  content: "\e703";
+}
+
+.icon-form:before {
+  content: "\e704";
+}
+
+.icon-footprint_l:before {
+  content: "\e705";
+}
+
+.icon-footprint_r:before {
+  content: "\e706";
+}
+
+.icon-fire_p:before {
+  content: "\e707";
+}
+
+.icon-rectangle:before {
+  content: "\e708";
+}
+
+.icon-shoeprints_l:before {
+  content: "\e709";
+}
+
+.icon-text:before {
+  content: "\e70a";
+}
+
+.icon-fingerprint:before {
+  content: "\e70b";
+}
+
+.icon-shoeprints_r:before {
+  content: "\e70c";
+}
+
+.icon-nav-setup:before {
+  content: "\e64b";
+}
+
+.icon-a-film:before {
+  content: "\e6e8";
+}
+
+.icon-nav-edit:before {
+  content: "\e642";
+}
+
+.icon-pic:before {
+  content: "\e648";
+}
+
+.icon-list-scene:before {
+  content: "\e6e4";
+}
+
+.icon-list-file:before {
+  content: "\e6e5";
+}
+
+.icon-list-record:before {
+  content: "\e6e6";
+}
+
+.icon-list-view:before {
+  content: "\e6e7";
+}
+
+.icon-video1:before {
+  content: "\e63b";
+}
+
+.icon-order:before {
+  content: "\e6dd";
+}
+
+.icon-pin1:before {
+  content: "\e6e3";
+}
+
+.icon-nav-measure:before {
+  content: "\e64a";
+}
+
+.icon-v-l:before {
+  content: "\e66f";
+}
+
+.icon-h-r:before {
+  content: "\e670";
+}
+
+.icon-f-l:before {
+  content: "\e673";
+}
+
+.icon-search:before {
+  content: "\e64c";
+}
+
+.icon-left1:before {
+  content: "\e6ae";
+}
+
+.icon-right:before {
+  content: "\e6af";
+}
+
+.icon-state_e:before {
+  content: "\e624";
+}
+
+.icon-state_f:before {
+  content: "\e625";
+}
+
+.icon-state_s:before {
+  content: "\e626";
+}
+
+.icon-eye-n:before {
+  content: "\e621";
+}
+
+.icon-eye-s:before {
+  content: "\e622";
+}
+
+.icon-more:before {
+  content: "\e600";
+}
+
+.icon-element:before {
+  content: "\e666";
+}
+
+.icon-extend:before {
+  content: "\e690";
+}
+
+.icon-shrink:before {
+  content: "\e691";
+}
+
+.icon-pause:before {
+  content: "\e636";
+}
+
+.icon-preview:before {
+  content: "\e63a";
+}
+
+.icon-clear:before {
+  content: "\e63f";
+}
+
+.icon-play_stop:before {
+  content: "\e6b4";
+}
+
+.icon-transparency:before {
+  content: "\e6d7";
+}
+
+.icon-pull-down:before {
+  content: "\e61d";
+}
+
+.icon-pull-up:before {
+  content: "\e61e";
+}
+
+.icon-add:before {
+  content: "\e631";
+}
+
+.icon-close:before {
+  content: "\e633";
+}
+
+.icon-pin:before {
+  content: "\e67c";
+}
+
+.icon-flip:before {
+  content: "\e67e";
+}
+
+.icon-move:before {
+  content: "\e680";
+}
+
+.icon-del:before {
+  content: "\e632";
+}
+
+.icon-checkbox:before {
+  content: "\e649";
+}
+
+.icon-nor:before {
+  content: "\e696";
+}
+
+.icon-joint:before {
+  content: "\e6e0";
+}
+
+.icon-path:before {
+  content: "\e6e1";
+}
+
+.icon-label:before {
+  content: "\e6e2";
+}
+
+.icon-case:before {
+  content: "\e6da";
+}
+
+.icon-scene:before {
+  content: "\e6db";
+}
+

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
src/assets/icon/fuse/iconfont.js


+ 478 - 0
src/assets/icon/fuse/iconfont.json

@@ -0,0 +1,478 @@
+{
+  "id": "3549513",
+  "name": "融合平台",
+  "font_family": "iconfont",
+  "css_prefix_text": "icon-",
+  "description": "",
+  "glyphs": [
+    {
+      "icon_id": "33692561",
+      "name": "without",
+      "font_class": "without",
+      "unicode": "e70e",
+      "unicode_decimal": 59150
+    },
+    {
+      "icon_id": "33322597",
+      "name": "keyboard",
+      "font_class": "keyboard",
+      "unicode": "e70d",
+      "unicode_decimal": 59149
+    },
+    {
+      "icon_id": "27198776",
+      "name": "recover",
+      "font_class": "recover",
+      "unicode": "e693",
+      "unicode_decimal": 59027
+    },
+    {
+      "icon_id": "27198777",
+      "name": "repeal",
+      "font_class": "repeal",
+      "unicode": "e694",
+      "unicode_decimal": 59028
+    },
+    {
+      "icon_id": "33292114",
+      "name": "broken_l",
+      "font_class": "broken_l",
+      "unicode": "e6fd",
+      "unicode_decimal": 59133
+    },
+    {
+      "icon_id": "33292115",
+      "name": "arrows",
+      "font_class": "arrows",
+      "unicode": "e6fe",
+      "unicode_decimal": 59134
+    },
+    {
+      "icon_id": "33292116",
+      "name": "blood",
+      "font_class": "blood",
+      "unicode": "e6ff",
+      "unicode_decimal": 59135
+    },
+    {
+      "icon_id": "33292117",
+      "name": "circle",
+      "font_class": "circle",
+      "unicode": "e700",
+      "unicode_decimal": 59136
+    },
+    {
+      "icon_id": "33292118",
+      "name": "cigarette_e",
+      "font_class": "cigarette_e",
+      "unicode": "e701",
+      "unicode_decimal": 59137
+    },
+    {
+      "icon_id": "33292119",
+      "name": "corpse",
+      "font_class": "corpse",
+      "unicode": "e702",
+      "unicode_decimal": 59138
+    },
+    {
+      "icon_id": "33292120",
+      "name": "icon_n",
+      "font_class": "icon_n",
+      "unicode": "e703",
+      "unicode_decimal": 59139
+    },
+    {
+      "icon_id": "33292121",
+      "name": "form",
+      "font_class": "form",
+      "unicode": "e704",
+      "unicode_decimal": 59140
+    },
+    {
+      "icon_id": "33292122",
+      "name": "footprint_l",
+      "font_class": "footprint_l",
+      "unicode": "e705",
+      "unicode_decimal": 59141
+    },
+    {
+      "icon_id": "33292123",
+      "name": "footprint_r",
+      "font_class": "footprint_r",
+      "unicode": "e706",
+      "unicode_decimal": 59142
+    },
+    {
+      "icon_id": "33292124",
+      "name": "fire_p",
+      "font_class": "fire_p",
+      "unicode": "e707",
+      "unicode_decimal": 59143
+    },
+    {
+      "icon_id": "33292125",
+      "name": "rectangle",
+      "font_class": "rectangle",
+      "unicode": "e708",
+      "unicode_decimal": 59144
+    },
+    {
+      "icon_id": "33292126",
+      "name": "shoeprints_l",
+      "font_class": "shoeprints_l",
+      "unicode": "e709",
+      "unicode_decimal": 59145
+    },
+    {
+      "icon_id": "33292127",
+      "name": "text",
+      "font_class": "text",
+      "unicode": "e70a",
+      "unicode_decimal": 59146
+    },
+    {
+      "icon_id": "33292128",
+      "name": "fingerprint",
+      "font_class": "fingerprint",
+      "unicode": "e70b",
+      "unicode_decimal": 59147
+    },
+    {
+      "icon_id": "33292129",
+      "name": "shoeprints_r",
+      "font_class": "shoeprints_r",
+      "unicode": "e70c",
+      "unicode_decimal": 59148
+    },
+    {
+      "icon_id": "25631133",
+      "name": "nav-setup",
+      "font_class": "nav-setup",
+      "unicode": "e64b",
+      "unicode_decimal": 58955
+    },
+    {
+      "icon_id": "31503933",
+      "name": "a-film",
+      "font_class": "a-film",
+      "unicode": "e6e8",
+      "unicode_decimal": 59112
+    },
+    {
+      "icon_id": "25631122",
+      "name": "nav-edit",
+      "font_class": "nav-edit",
+      "unicode": "e642",
+      "unicode_decimal": 58946
+    },
+    {
+      "icon_id": "23786363",
+      "name": "pic",
+      "font_class": "pic",
+      "unicode": "e648",
+      "unicode_decimal": 58952
+    },
+    {
+      "icon_id": "31485449",
+      "name": "list-scene",
+      "font_class": "list-scene",
+      "unicode": "e6e4",
+      "unicode_decimal": 59108
+    },
+    {
+      "icon_id": "31485450",
+      "name": "list-file",
+      "font_class": "list-file",
+      "unicode": "e6e5",
+      "unicode_decimal": 59109
+    },
+    {
+      "icon_id": "31485451",
+      "name": "list-record",
+      "font_class": "list-record",
+      "unicode": "e6e6",
+      "unicode_decimal": 59110
+    },
+    {
+      "icon_id": "31485452",
+      "name": "list-view",
+      "font_class": "list-view",
+      "unicode": "e6e7",
+      "unicode_decimal": 59111
+    },
+    {
+      "icon_id": "23781429",
+      "name": "video",
+      "font_class": "video1",
+      "unicode": "e63b",
+      "unicode_decimal": 58939
+    },
+    {
+      "icon_id": "30948192",
+      "name": "order",
+      "font_class": "order",
+      "unicode": "e6dd",
+      "unicode_decimal": 59101
+    },
+    {
+      "icon_id": "31365069",
+      "name": "pin",
+      "font_class": "pin1",
+      "unicode": "e6e3",
+      "unicode_decimal": 59107
+    },
+    {
+      "icon_id": "25631400",
+      "name": "nav-measure",
+      "font_class": "nav-measure",
+      "unicode": "e64a",
+      "unicode_decimal": 58954
+    },
+    {
+      "icon_id": "26077352",
+      "name": "v-l",
+      "font_class": "v-l",
+      "unicode": "e66f",
+      "unicode_decimal": 58991
+    },
+    {
+      "icon_id": "26077353",
+      "name": "h-r",
+      "font_class": "h-r",
+      "unicode": "e670",
+      "unicode_decimal": 58992
+    },
+    {
+      "icon_id": "26077356",
+      "name": "f-l",
+      "font_class": "f-l",
+      "unicode": "e673",
+      "unicode_decimal": 58995
+    },
+    {
+      "icon_id": "25631464",
+      "name": "search",
+      "font_class": "search",
+      "unicode": "e64c",
+      "unicode_decimal": 58956
+    },
+    {
+      "icon_id": "27765016",
+      "name": "left",
+      "font_class": "left1",
+      "unicode": "e6ae",
+      "unicode_decimal": 59054
+    },
+    {
+      "icon_id": "27765017",
+      "name": "right",
+      "font_class": "right",
+      "unicode": "e6af",
+      "unicode_decimal": 59055
+    },
+    {
+      "icon_id": "22132762",
+      "name": "state_e",
+      "font_class": "state_e",
+      "unicode": "e624",
+      "unicode_decimal": 58916
+    },
+    {
+      "icon_id": "22132763",
+      "name": "state_f",
+      "font_class": "state_f",
+      "unicode": "e625",
+      "unicode_decimal": 58917
+    },
+    {
+      "icon_id": "22132764",
+      "name": "state_s",
+      "font_class": "state_s",
+      "unicode": "e626",
+      "unicode_decimal": 58918
+    },
+    {
+      "icon_id": "22099675",
+      "name": "eye-n",
+      "font_class": "eye-n",
+      "unicode": "e621",
+      "unicode_decimal": 58913
+    },
+    {
+      "icon_id": "22099676",
+      "name": "eye-s",
+      "font_class": "eye-s",
+      "unicode": "e622",
+      "unicode_decimal": 58914
+    },
+    {
+      "icon_id": "11304931",
+      "name": "more read",
+      "font_class": "more",
+      "unicode": "e600",
+      "unicode_decimal": 58880
+    },
+    {
+      "icon_id": "25764812",
+      "name": "element",
+      "font_class": "element",
+      "unicode": "e666",
+      "unicode_decimal": 58982
+    },
+    {
+      "icon_id": "27032625",
+      "name": "extend",
+      "font_class": "extend",
+      "unicode": "e690",
+      "unicode_decimal": 59024
+    },
+    {
+      "icon_id": "27032630",
+      "name": "shrink",
+      "font_class": "shrink",
+      "unicode": "e691",
+      "unicode_decimal": 59025
+    },
+    {
+      "icon_id": "23773343",
+      "name": "pause",
+      "font_class": "pause",
+      "unicode": "e636",
+      "unicode_decimal": 58934
+    },
+    {
+      "icon_id": "23773344",
+      "name": "preview",
+      "font_class": "preview",
+      "unicode": "e63a",
+      "unicode_decimal": 58938
+    },
+    {
+      "icon_id": "23781433",
+      "name": "clear",
+      "font_class": "clear",
+      "unicode": "e63f",
+      "unicode_decimal": 58943
+    },
+    {
+      "icon_id": "29255507",
+      "name": "play_stop",
+      "font_class": "play_stop",
+      "unicode": "e6b4",
+      "unicode_decimal": 59060
+    },
+    {
+      "icon_id": "30499411",
+      "name": "transparency",
+      "font_class": "transparency",
+      "unicode": "e6d7",
+      "unicode_decimal": 59095
+    },
+    {
+      "icon_id": "22099518",
+      "name": "pull-down",
+      "font_class": "pull-down",
+      "unicode": "e61d",
+      "unicode_decimal": 58909
+    },
+    {
+      "icon_id": "22099519",
+      "name": "pull-up",
+      "font_class": "pull-up",
+      "unicode": "e61e",
+      "unicode_decimal": 58910
+    },
+    {
+      "icon_id": "23773068",
+      "name": "add",
+      "font_class": "add",
+      "unicode": "e631",
+      "unicode_decimal": 58929
+    },
+    {
+      "icon_id": "23773070",
+      "name": "close",
+      "font_class": "close",
+      "unicode": "e633",
+      "unicode_decimal": 58931
+    },
+    {
+      "icon_id": "26621105",
+      "name": "pin",
+      "font_class": "pin",
+      "unicode": "e67c",
+      "unicode_decimal": 59004
+    },
+    {
+      "icon_id": "26625827",
+      "name": "flip",
+      "font_class": "flip",
+      "unicode": "e67e",
+      "unicode_decimal": 59006
+    },
+    {
+      "icon_id": "26625859",
+      "name": "move",
+      "font_class": "move",
+      "unicode": "e680",
+      "unicode_decimal": 59008
+    },
+    {
+      "icon_id": "23773069",
+      "name": "del",
+      "font_class": "del",
+      "unicode": "e632",
+      "unicode_decimal": 58930
+    },
+    {
+      "icon_id": "23842269",
+      "name": "sel",
+      "font_class": "checkbox",
+      "unicode": "e649",
+      "unicode_decimal": 58953
+    },
+    {
+      "icon_id": "27200779",
+      "name": "nor",
+      "font_class": "nor",
+      "unicode": "e696",
+      "unicode_decimal": 59030
+    },
+    {
+      "icon_id": "31132312",
+      "name": "joint",
+      "font_class": "joint",
+      "unicode": "e6e0",
+      "unicode_decimal": 59104
+    },
+    {
+      "icon_id": "31132318",
+      "name": "path",
+      "font_class": "path",
+      "unicode": "e6e1",
+      "unicode_decimal": 59105
+    },
+    {
+      "icon_id": "31132319",
+      "name": "label",
+      "font_class": "label",
+      "unicode": "e6e2",
+      "unicode_decimal": 59106
+    },
+    {
+      "icon_id": "30885164",
+      "name": "case",
+      "font_class": "case",
+      "unicode": "e6da",
+      "unicode_decimal": 59098
+    },
+    {
+      "icon_id": "30885165",
+      "name": "scene",
+      "font_class": "scene",
+      "unicode": "e6db",
+      "unicode_decimal": 59099
+    }
+  ]
+}

binární
src/assets/icon/fuse/iconfont.ttf


binární
src/assets/icon/fuse/iconfont.woff


binární
src/assets/icon/fuse/iconfont.woff2


binární
src/assets/image/close.png


binární
src/assets/image/code.png


binární
src/assets/image/decoration_collect@2x.png


binární
src/assets/image/edit_type_panorama.png


binární
src/assets/image/goto.png


binární
src/assets/image/home_bg.png


binární
src/assets/image/icon_add.png


binární
src/assets/image/img_login_logo.png


binární
src/assets/image/img_loginbg.png


binární
src/assets/image/img_loginbg1.png


binární
src/assets/image/img_loginbg2.png


binární
src/assets/image/list_arrow.png


binární
src/assets/image/logo_big.png


binární
src/assets/image/menu_vrhouse.png


binární
src/assets/image/page_arrow.png


binární
src/assets/image/pasword.png


binární
src/assets/image/photoview.png


binární
src/assets/image/scene.png


binární
src/assets/image/scene_error.png


binární
src/assets/image/scene_map_3d.png


binární
src/assets/image/scene_share.png


binární
src/assets/image/top-text.png


binární
src/assets/image/top_exit.png


binární
src/assets/image/top_my.png


binární
src/assets/image/top_my1.png


binární
src/assets/image/top_set.png


binární
src/assets/image/vrmodel-calc.png


binární
src/assets/image/vrmodel-err.png


+ 549 - 0
src/assets/style/public.scss

@@ -0,0 +1,549 @@
+@import "../icon/fire/iconfont.css";
+@import "../icon/fuse/iconfont.css";
+
+* {
+  margin : 0;
+  padding: 0;
+}
+
+html {
+  font-size: 14px;
+}
+
+html,
+body {
+  width : 100%;
+  height: 100%;
+}
+
+body {
+  --primaryColor: var(--el-color-primary);
+  --colorColor  : #303133;
+  --bgColor     : #f0f2f5;
+
+  font-family: "Microsoft YaHei";
+  color      : var(--colorColor);
+}
+
+.fill.el-button {
+  width: 100%;
+}
+
+.slide {
+  .el-menu {
+    border-right: none;
+    background  : #fff;
+
+    i {
+      color       : inherit;
+      margin-right: 8px;
+    }
+  }
+
+  .el-menu-item.is-active {
+    position  : relative;
+    background: var(--el-menu-hover-bg-color);
+
+    &::after {
+      content         : "";
+      position        : absolute;
+      top             : 0;
+      bottom          : 0;
+      width           : 2px;
+      right           : 0;
+      background-color: var(--primaryColor);
+    }
+  }
+
+  .el-menu-item,
+  .el-menu-item i {
+    transition: none;
+  }
+
+  .el-submenu__title {
+    background-color: #fff !important;
+  }
+
+  .el-submenu__title,
+  .el-submenu__title i {
+    color: rgb(191, 191, 191) !important;
+  }
+
+  .el-submenu i {
+    vertical-align: baseline;
+  }
+}
+
+.head-layer {
+  flex: 0 0 auto;
+}
+
+.body-layer {
+  flex            : 1;
+  overflow-y      : auto;
+  margin-top      : 8px;
+  background-color: #fff;
+  border-radius   : 4px;
+  padding         : 0 24px;
+  display         : flex;
+  flex-direction  : column;
+
+  .body-head {
+    display        : flex;
+    justify-content: space-between;
+    align-items    : center;
+
+    h3 {
+      font-size  : 1.14rem;
+      font-weight: normal;
+      padding    : 17px 0;
+      color      : var(--colorColor);
+    }
+  }
+
+  >* {
+    flex: 0 0 auto;
+  }
+
+  >.el-table {
+    flex          : 1;
+    display       : flex;
+    flex-direction: column;
+    border        : 1px solid #d9d9d9;
+
+    .el-table__header-wrapper {
+      background-color: #fafafa;
+    }
+
+    >* {
+      flex: 0 0 auto;
+    }
+
+    .el-table__body-wrapper {
+      flex      : 1;
+      overflow-y: auto;
+    }
+  }
+}
+
+.el-table th {
+  background: #fafafa;
+
+  .cell {
+    font-size  : 0.825rem;
+    color      : var(--colorColor);
+    font-weight: normal;
+  }
+}
+
+.pag-block {
+  margin-top   : 16px;
+  margin-bottom: 16px;
+
+  .el-pagination {
+    display: flex;
+  }
+
+  &.no-sizes {
+    .el-pagination__total {
+      flex      : 1;
+      text-align: left;
+    }
+  }
+
+  .el-pagination__sizes {
+    flex      : 1;
+    text-align: left;
+  }
+}
+
+.head-layer .el-tabs__nav-wrap {
+  padding: 0 24px;
+}
+
+.el-tabs__item {
+  font-size  : 16px;
+  line-height: 56px;
+  height     : 56px;
+}
+
+.el-tabs__nav-wrap::after {
+  height: 1px;
+}
+
+.stop-psw {
+  position: absolute;
+  left    : -9999999999px;
+  top     : -999999999px;
+}
+
+.oper-span {
+  --color  : #26559b !important;
+  color    : #26559b;
+  font-size: 0.825rem;
+  outline  : none !important;
+
+  margin: 0 8px;
+
+  &:first-child {
+    margin-left: 0;
+  }
+
+  &:not(.disable) {
+    cursor: pointer;
+  }
+}
+
+.el-dropdown-menu {
+  position : initial;
+  transform: none;
+  margin   : 0;
+}
+
+.el-dropdown-menu__item {
+  word-break: keep-all;
+}
+
+.head-content {
+  .el-form {
+    display              : grid;
+    grid-gap             : 20px;
+    grid-template-columns: repeat(3, 1fr) 160px;
+  }
+
+  .el-form-item {
+    display: flex;
+    flex   : 0 0 auto;
+  }
+
+  .el-form-item__label {
+    flex: 0 0 auto;
+  }
+
+  .el-form-item__content {
+    flex: 1;
+  }
+
+  .el-select {
+    display: block;
+  }
+
+  .el-date-editor--daterange.el-input__inner,
+  .el-form-item__content {
+    width    : 100%;
+    max-width: 300px;
+  }
+
+  .searh-btns {
+    min-width: 153px;
+    grid-area: 1 / 4 / 2 / 5;
+
+    .el-form-item__content {
+      width      : 100%;
+      max-width  : inherit;
+      margin-left: 0 !important;
+      align-items: flex-start;
+    }
+  }
+}
+
+.mandatory {
+  .el-form-item__label {
+    position: relative;
+
+    &::before {
+      content: "*";
+      color  : var(--primaryColor);
+    }
+  }
+}
+
+.el-autocomplete-suggestion,
+.el-select-dropdown {
+  // margin-top: -10px;
+}
+
+.info-from {
+  width : 380px;
+  margin: 0 auto;
+}
+
+.loading {
+
+  i,
+  .el-loading-text {
+    color: inherit;
+  }
+}
+
+/*滚动条整体部分,必须要设置*/
+::-webkit-scrollbar {
+  width : 5px;
+  height: 5px;
+}
+
+/*滚动条的滑块按钮*/
+::-webkit-scrollbar-thumb {
+  border-radius: 10px;
+  background   : var(--bgColor);
+}
+
+/*滚动条的上下两端的按钮*/
+::-webkit-scrollbar-button {
+  display: none;
+}
+
+.el-message-box__message {
+  min-height: 50px;
+  padding   : 0 30px;
+}
+
+.el-message-box__status {
+  top: -31px !important;
+}
+
+.el-message-box__title span::before {
+  content               : "\e7a3";
+  font-size             : 1.5rem;
+  margin-right          : 5px;
+  color                 : #faad14;
+  font-family           : "element-icons" !important;
+  speak                 : none;
+  font-style            : normal;
+  font-weight           : normal;
+  font-variant          : normal;
+  text-transform        : none;
+  line-height           : 1;
+  vertical-align        : text-bottom;
+  display               : inline-block;
+  -webkit-font-smoothing: antialiased;
+}
+
+.click-row .el-table__body td:not(:first-child) {
+  cursor: pointer;
+}
+
+.stop-psw {
+  position: absolute;
+  left    : -9999999999px;
+  top     : -999999999px;
+}
+
+.el-popper.is-dark {
+  position     : absolute;
+  border-radius: 4px;
+  padding      : 10px;
+  z-index      : 2000;
+  font-size    : 12px;
+  line-height  : 1.2;
+  min-width    : 10px;
+  word-wrap    : break-word;
+  background   : #303133;
+  color        : #fff;
+}
+
+.el-popper:not(.el-cascader__dropdown, .el-picker__popper, .el-dropdown__popper) {
+  max-width       : 500px;
+  // background: #EFEFEF;
+  // box-shadow: 0px 2px 4px 0px #e4e4e4;
+  // border-radius: 2px;
+  // border: 1px solid #D7D7D7;
+  padding         : 2px 6px;
+  word-break      : break-all;
+  overflow        : hidden;
+}
+
+// .is-light.el-popper{
+//   max-width: 500px;
+//   background: #EFEFEF;
+//   box-shadow: 0px 2px 4px 0px #e4e4e4;
+//   border-radius: 2px;
+//   border: 1px solid #D7D7D7;
+//   padding: 2px 6px;
+// }
+
+.oper-link {
+  cursor: pointer;
+
+  &:hover {
+    color: #3366ff;
+  }
+}
+
+.el-table::before {
+  background: none;
+}
+
+.el-date-editor--daterange {
+  position: relative;
+
+  .el-range-separator {
+    display: none;
+  }
+
+  &::after {
+    content       : "\e6d2";
+    font-size     : 14px;
+    color         : #303133;
+    position      : absolute;
+    left          : 50%;
+    top           : 50%;
+    transform     : translate(-50%, -50%) rotate(90deg);
+    margin-left   : -10px;
+    font-family   : element-icons !important;
+    speak         : none;
+    font-style    : normal;
+    font-weight   : 400;
+    font-variant  : normal;
+    text-transform: none;
+    line-height   : 1;
+    vertical-align: baseline;
+  }
+}
+
+.el-input {
+  position: relative;
+
+  .input-inner-btn {
+    position   : absolute;
+    right      : 0;
+    top        : 50%;
+    height     : 36px;
+    line-height: 36px;
+    font-size  : 14px;
+    padding    : 0 15px;
+    text-align : center;
+    transform  : translateY(-50%);
+  }
+}
+
+.head-content .el-date-editor--daterange.el-input__inner {
+  min-width: 260px;
+}
+
+.el-message-box__header {
+  padding       : 34px;
+  padding-bottom: 0;
+}
+
+.el-message-box__headerbtn .el-message-box__close {
+  display: none;
+}
+
+.el-message-box__title {
+  color    : #000;
+  font-size: 16px;
+}
+
+.el-message-box__content {
+  font-size  : 14px;
+  font-family: PingFangSC-Regular, PingFang SC;
+  font-weight: 400;
+  color      : rgba(0, 0, 0, 0.65);
+}
+
+.el-message-box {
+  padding-bottom: 24px;
+}
+
+.el-message-box__content {
+  padding: 12px 32px 24px 62px;
+}
+
+.el-message-box__message {
+  padding: 0;
+}
+
+.el-message-box__btns {
+  padding: 0 16px;
+}
+
+.el-date-editor--date {
+  &.el-input--prefix .el-input__inner {
+    padding-left: 15px;
+  }
+
+  .el-input__prefix {
+    position      : absolute;
+    height        : 100%;
+    right         : 5px;
+    top           : 0;
+    left          : inherit;
+    text-align    : center;
+    transition    : all 0.3s;
+    pointer-events: none;
+  }
+}
+
+.el-date-editor--daterange {
+  padding-right: 28px !important;
+
+  input {
+    width: 50% !important;
+  }
+}
+
+.el-date-editor--daterange .el-range__icon {
+  position: absolute;
+  right   : 5px;
+}
+
+.el-date-editor--daterange .el-range__close-icon {
+  display: none;
+}
+
+.el-upload-list__item-name .el-icon-document {
+  display: none;
+}
+
+.el-upload-list__item-name {
+  font-size   : 14px;
+  font-family : PingFangSC-Regular, PingFang SC;
+  font-weight : 400;
+  line-height : 20px;
+  margin-right: 20px;
+}
+
+.el-upload-list__item .el-icon-close {
+  display: inherit;
+}
+
+.el-upload-list__item .el-upload-list__item-status-label {
+  display: none !important;
+}
+
+.el-table th .cell .el-checkbox {
+  margin-left: 4px;
+}
+
+.el-select-dropdown__empty {
+  padding: 20px 0 10px;
+}
+
+.el-table th.el-table__cell {
+  background-color: #fafafa;
+}
+
+.disable {
+  opacity       : 0.3 !important;
+  pointer-events: none !important;
+}
+
+.body-but {
+  text-align   : right;
+  margin-bottom: 15px;
+}
+
+.el-dropdown {
+  vertical-align: inherit;
+}
+
+.header-top {
+  background-color: var(--primaryColor);
+  display         : flex;
+  align-items     : center;
+  justify-content : space-between;
+  padding         : 15px 40px;
+  height          : 5.33rem;
+  box-sizing      : border-box;
+}

+ 4 - 0
src/assets/svg/arrow.svg

@@ -0,0 +1,4 @@
+<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M45 24H6" stroke="black" stroke-width="2"/>
+<path d="M16.3137 13L5.00001 24.3137L16.3137 35.6274" stroke="black" stroke-width="2"/>
+</svg>

+ 3 - 0
src/assets/svg/brokenLine.svg

@@ -0,0 +1,3 @@
+<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M4 43H25V5H44" stroke="black" stroke-width="2"/>
+</svg>

+ 7 - 0
src/assets/svg/cigarette.svg

@@ -0,0 +1,7 @@
+<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M38.6342 4C38.6342 4 41.1545 9.5 39.1546 12.5C37.1547 15.5 39.1546 19 39.1546 19C36.0776 15.923 34.9395 14 37.1547 10.5C39.3699 7 38.6342 4 38.6342 4Z" fill="black"/>
+<path d="M4 29C2.89543 29 2 29.8954 2 31V39C2 40.1046 2.89543 41 4 41H34V29H4Z" fill="black"/>
+<path d="M40.7714 20.5C38.7716 17.5 41.2918 12 41.2918 12C41.2918 12 40.5561 15 42.7713 18.5C44.9866 22 43.8485 23.923 40.7714 27C40.7714 27 42.7713 23.5 40.7714 20.5Z" fill="black"/>
+<path d="M37.5 29C36.6716 29 36 29.6716 36 30.5V39.5C36 40.3284 36.6716 41 37.5 41C38.3284 41 39 40.3284 39 39.5V30.5C39 29.6716 38.3284 29 37.5 29Z" fill="black"/>
+<path d="M42 29C41.1716 29 40.5 29.6716 40.5 30.5V39.5C40.5 40.3284 41.1716 41 42 41C42.8284 41 43.5 40.3284 43.5 39.5V30.5C43.5 29.6716 42.8284 29 42 29Z" fill="black"/>
+</svg>

+ 3 - 0
src/assets/svg/circular.svg

@@ -0,0 +1,3 @@
+<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect x="4" y="4" width="40" height="40" rx="20" stroke="black" stroke-width="2"/>
+</svg>

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 4 - 0
src/assets/svg/compass.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 4 - 0
src/assets/svg/corpse.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 6 - 0
src/assets/svg/fingerPrint.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 3 - 0
src/assets/svg/fireoint.svg


+ 8 - 0
src/assets/svg/footPrint.svg

@@ -0,0 +1,8 @@
+<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M26.5 7C25.1193 7 24 5.88071 24 4.5C24 3.11929 25.1193 2 26.5 2C27.8807 2 29 3.11929 29 4.5C29 5.88071 27.8807 7 26.5 7Z" fill="black"/>
+<path d="M32 12C30.3431 12 29 10.6569 29 9C29 7.34315 30.3431 6 32 6C33.6569 6 35 7.34315 35 9C35 10.6569 33.6569 12 32 12Z" fill="black"/>
+<path d="M18 5C18 6.10457 18.8954 7 20 7C21.1046 7 22 6.10457 22 5C22 3.89543 21.1046 3 20 3C18.8954 3 18 3.89543 18 5Z" fill="black"/>
+<path d="M15 10C13.8954 10 13 9.10457 13 8C13 6.89543 13.8954 6 15 6C16.1046 6 17 6.89543 17 8C17 9.10457 16.1046 10 15 10Z" fill="black"/>
+<path d="M10 12.5C10 13.3284 10.6716 14 11.5 14C12.3284 14 13 13.3284 13 12.5C13 11.6716 12.3284 11 11.5 11C10.6716 11 10 11.6716 10 12.5Z" fill="black"/>
+<path d="M29.0721 31.5068C29.0721 31.5068 28.037 29.0085 29.0721 27.2243C30.1072 25.4402 30.9125 23.8936 31.6392 20.6224C32.3658 17.3511 30.3143 9.73826 22.1998 10.0059C14.0852 10.2735 13.2572 17.4108 13.0088 21.4254C12.7604 25.44 17.8113 38.0193 21.4544 42.1233C25.0975 46.2273 27.6647 46.5838 29.9831 45.424C32.3016 44.2642 33.3778 42.5692 32.881 40.4282C32.3842 38.2873 29.0721 31.5068 29.0721 31.5068Z" fill="black"/>
+</svg>

+ 8 - 0
src/assets/svg/footPrintRever.svg

@@ -0,0 +1,8 @@
+<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M18.5 7C19.8807 7 21 5.88071 21 4.5C21 3.11929 19.8807 2 18.5 2C17.1193 2 16 3.11929 16 4.5C16 5.88071 17.1193 7 18.5 7Z" fill="black"/>
+<path d="M13 12C14.6569 12 16 10.6569 16 9C16 7.34315 14.6569 6 13 6C11.3431 6 10 7.34315 10 9C10 10.6569 11.3431 12 13 12Z" fill="black"/>
+<path d="M27 5C27 6.10457 26.1046 7 25 7C23.8954 7 23 6.10457 23 5C23 3.89543 23.8954 3 25 3C26.1046 3 27 3.89543 27 5Z" fill="black"/>
+<path d="M30 10C31.1046 10 32 9.10457 32 8C32 6.89543 31.1046 6 30 6C28.8954 6 28 6.89543 28 8C28 9.10457 28.8954 10 30 10Z" fill="black"/>
+<path d="M35 12.5C35 13.3284 34.3284 14 33.5 14C32.6716 14 32 13.3284 32 12.5C32 11.6716 32.6716 11 33.5 11C34.3284 11 35 11.6716 35 12.5Z" fill="black"/>
+<path d="M15.9279 31.5068C15.9279 31.5068 16.963 29.0085 15.9279 27.2243C14.8928 25.4402 14.0875 23.8936 13.3608 20.6224C12.6342 17.3511 14.6857 9.73826 22.8002 10.0059C30.9148 10.2735 31.7428 17.4108 31.9912 21.4254C32.2396 25.44 27.1887 38.0193 23.5456 42.1233C19.9025 46.2273 17.3353 46.5838 15.0169 45.424C12.6984 44.2642 11.6222 42.5692 12.119 40.4282C12.6158 38.2873 15.9279 31.5068 15.9279 31.5068Z" fill="black"/>
+</svg>

+ 4 - 0
src/assets/svg/icon.svg

@@ -0,0 +1,4 @@
+<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect x="4" y="4" width="40" height="40" rx="20" stroke="black" stroke-width="2"/>
+<path d="M20.76 32H28.8V30.48H25.86V17.34H24.46C23.66 17.8 22.72 18.14 21.42 18.38V19.54H24.02V30.48H20.76V32Z" fill="black"/>
+</svg>

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 11 - 0
src/assets/svg/n-compass.svg


+ 3 - 0
src/assets/svg/rect.svg

@@ -0,0 +1,3 @@
+<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect x="4" y="4" width="40" height="40" stroke="black" stroke-width="2"/>
+</svg>

+ 4 - 0
src/assets/svg/shoePrint.svg

@@ -0,0 +1,4 @@
+<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M29.9064 30.2635L18.3897 31.999C18.3897 31.999 14 24.0766 14 18.5101C14 9.43774 16.8732 1.75238 22.3803 2.00508C28.3968 2.28117 31 9.00467 31 15.3264C31 18.8919 30.7015 20.0653 29.9867 22.8753C29.7961 23.6244 29.5759 24.4898 29.3239 25.5478C28.9957 26.926 29.9064 30.2635 29.9064 30.2635Z" fill="black"/>
+<path d="M30.5 34L19 35.4383C19 35.4383 19.316 39.7531 19.8057 42.3198C20.2953 44.8865 22.9828 46.465 26.2418 45.8773C29.5007 45.2895 32.4426 43.1091 31.9447 40.287C31.4469 37.4649 30.5 34 30.5 34Z" fill="black"/>
+</svg>

+ 4 - 0
src/assets/svg/shoePrintRever.svg

@@ -0,0 +1,4 @@
+<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M16.0936 30.2635L27.6103 31.999C27.6103 31.999 32 24.0766 32 18.5101C32 9.43774 29.1268 1.75238 23.6197 2.00508C17.6032 2.28117 15 9.00467 15 15.3264C15 18.8919 15.2985 20.0653 16.0133 22.8753C16.2039 23.6244 16.4241 24.4898 16.6761 25.5478C17.0043 26.926 16.0936 30.2635 16.0936 30.2635Z" fill="black"/>
+<path d="M15.5 34L27 35.4383C27 35.4383 26.684 39.7531 26.1943 42.3198C25.7047 44.8865 23.0172 46.465 19.7582 45.8773C16.4993 45.2895 13.5574 43.1091 14.0553 40.287C14.5531 37.4649 15.5 34 15.5 34Z" fill="black"/>
+</svg>

+ 7 - 0
src/assets/svg/table.svg

@@ -0,0 +1,7 @@
+<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect x="4" y="4" width="40" height="40" rx="4" stroke="black" stroke-width="2"/>
+<path d="M4 14H44" stroke="black" stroke-width="2"/>
+<path d="M4 24H44" stroke="black" stroke-width="2"/>
+<path d="M4 34H44" stroke="black" stroke-width="2"/>
+<path d="M17 4V44" stroke="black" stroke-width="2"/>
+</svg>

+ 4 - 0
src/assets/svg/text.svg

@@ -0,0 +1,4 @@
+<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M44 4H4" stroke="black" stroke-width="2"/>
+<path d="M24 5V44" stroke="black" stroke-width="2"/>
+</svg>

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5 - 0
src/assets/svg/theBlood.svg


+ 1 - 0
src/assets/vue.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="37.07" height="36" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 198"><path fill="#41B883" d="M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0h47.36Z"></path><path fill="#41B883" d="m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0H0Z"></path><path fill="#35495E" d="M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0H50.56Z"></path></svg>

+ 112 - 0
src/components.d.ts

@@ -0,0 +1,112 @@
+// GlobalComponents for Volar
+declare module '@vue/runtime-core' {
+  export interface GlobalComponents {
+    ElAffix: typeof import('element-plus')['ElAffix']
+    ElAlert: typeof import('element-plus')['ElAlert']
+    ElAside: typeof import('element-plus')['ElAside']
+    ElAutocomplete: typeof import('element-plus')['ElAutocomplete']
+    ElAvatar: typeof import('element-plus')['ElAvatar']
+    ElBacktop: typeof import('element-plus')['ElBacktop']
+    ElBadge: typeof import('element-plus')['ElBadge']
+    ElBreadcrumb: typeof import('element-plus')['ElBreadcrumb']
+    ElBreadcrumbItem: typeof import('element-plus')['ElBreadcrumbItem']
+    ElButton: typeof import('element-plus')['ElButton']
+    ElButtonGroup: typeof import('element-plus')['ElButtonGroup']
+    ElCalendar: typeof import('element-plus')['ElCalendar']
+    ElCard: typeof import('element-plus')['ElCard']
+    ElCarousel: typeof import('element-plus')['ElCarousel']
+    ElCarouselItem: typeof import('element-plus')['ElCarouselItem']
+    ElCascader: typeof import('element-plus')['ElCascader']
+    ElCascaderPanel: typeof import('element-plus')['ElCascaderPanel']
+    ElCheckbox: typeof import('element-plus')['ElCheckbox']
+    ElCheckboxButton: typeof import('element-plus')['ElCheckboxButton']
+    ElCheckboxGroup: typeof import('element-plus')['ElCheckboxGroup']
+    ElCol: typeof import('element-plus')['ElCol']
+    ElCollapse: typeof import('element-plus')['ElCollapse']
+    ElCollapseItem: typeof import('element-plus')['ElCollapseItem']
+    ElCollapseTransition: typeof import('element-plus')['ElCollapseTransition']
+    ElColorPicker: typeof import('element-plus')['ElColorPicker']
+    ElContainer: typeof import('element-plus')['ElContainer']
+    ElConfigProvider: typeof import('element-plus')['ElConfigProvider']
+    ElDatePicker: typeof import('element-plus')['ElDatePicker']
+    ElDialog: typeof import('element-plus')['ElDialog']
+    ElDivider: typeof import('element-plus')['ElDivider']
+    ElDrawer: typeof import('element-plus')['ElDrawer']
+    ElDropdown: typeof import('element-plus')['ElDropdown']
+    ElDropdownItem: typeof import('element-plus')['ElDropdownItem']
+    ElDropdownMenu: typeof import('element-plus')['ElDropdownMenu']
+    ElEmpty: typeof import('element-plus')['ElEmpty']
+    ElFooter: typeof import('element-plus')['ElFooter']
+    ElForm: typeof import('element-plus')['ElForm']
+    ElFormItem: typeof import('element-plus')['ElFormItem']
+    ElHeader: typeof import('element-plus')['ElHeader']
+    ElIcon: typeof import('element-plus')['ElIcon']
+    ElImage: typeof import('element-plus')['ElImage']
+    ElImageViewer: typeof import('element-plus')['ElImageViewer']
+    ElInput: typeof import('element-plus')['ElInput']
+    ElInputNumber: typeof import('element-plus')['ElInputNumber']
+    ElLink: typeof import('element-plus')['ElLink']
+    ElMain: typeof import('element-plus')['ElMain']
+    ElMenu: typeof import('element-plus')['ElMenu']
+    ElMenuItem: typeof import('element-plus')['ElMenuItem']
+    ElMenuItemGroup: typeof import('element-plus')['ElMenuItemGroup']
+    ElOption: typeof import('element-plus')['ElOption']
+    ElOptionGroup: typeof import('element-plus')['ElOptionGroup']
+    ElPageHeader: typeof import('element-plus')['ElPageHeader']
+    ElPagination: typeof import('element-plus')['ElPagination']
+    ElPopconfirm: typeof import('element-plus')['ElPopconfirm']
+    ElPopper: typeof import('element-plus')['ElPopper']
+    ElPopover: typeof import('element-plus')['ElPopover']
+    ElProgress: typeof import('element-plus')['ElProgress']
+    ElRadio: typeof import('element-plus')['ElRadio']
+    ElRadioButton: typeof import('element-plus')['ElRadioButton']
+    ElRadioGroup: typeof import('element-plus')['ElRadioGroup']
+    ElRate: typeof import('element-plus')['ElRate']
+    ElRow: typeof import('element-plus')['ElRow']
+    ElScrollbar: typeof import('element-plus')['ElScrollbar']
+    ElSelect: typeof import('element-plus')['ElSelect']
+    ElSlider: typeof import('element-plus')['ElSlider']
+    ElStep: typeof import('element-plus')['ElStep']
+    ElSteps: typeof import('element-plus')['ElSteps']
+    ElSubMenu: typeof import('element-plus')['ElSubMenu']
+    ElSwitch: typeof import('element-plus')['ElSwitch']
+    ElTabPane: typeof import('element-plus')['ElTabPane']
+    ElTable: typeof import('element-plus')['ElTable']
+    ElTableColumn: typeof import('element-plus')['ElTableColumn']
+    ElTabs: typeof import('element-plus')['ElTabs']
+    ElTag: typeof import('element-plus')['ElTag']
+    ElText: typeof import('element-plus')['ElText']
+    ElTimePicker: typeof import('element-plus')['ElTimePicker']
+    ElTimeSelect: typeof import('element-plus')['ElTimeSelect']
+    ElTimeline: typeof import('element-plus')['ElTimeline']
+    ElTimelineItem: typeof import('element-plus')['ElTimelineItem']
+    ElTooltip: typeof import('element-plus')['ElTooltip']
+    ElTransfer: typeof import('element-plus')['ElTransfer']
+    ElTree: typeof import('element-plus')['ElTree']
+    ElTreeV2: typeof import('element-plus')['ElTreeV2']
+    ElTreeSelect: typeof import('element-plus')['ElTreeSelect']
+    ElUpload: typeof import('element-plus')['ElUpload']
+    ElSpace: typeof import('element-plus')['ElSpace']
+    ElSkeleton: typeof import('element-plus')['ElSkeleton']
+    ElSkeletonItem: typeof import('element-plus')['ElSkeletonItem']
+    ElStatistic: typeof import('element-plus')['ElStatistic']
+    ElCheckTag: typeof import('element-plus')['ElCheckTag']
+    ElDescriptions: typeof import('element-plus')['ElDescriptions']
+    ElDescriptionsItem: typeof import('element-plus')['ElDescriptionsItem']
+    ElResult: typeof import('element-plus')['ElResult']
+    ElSelectV2: typeof import('element-plus')['ElSelectV2']
+  }
+
+  interface ComponentCustomProperties {
+    $message: typeof import('element-plus')['ElMessage']
+    $notify: typeof import('element-plus')['ElNotification']
+    $msgbox: typeof import('element-plus')['ElMessageBox']
+    $messageBox: typeof import('element-plus')['ElMessageBox']
+    $alert: typeof import('element-plus')['ElMessageBox']['alert']
+    $confirm: typeof import('element-plus')['ElMessageBox']['confirm']
+    $prompt: typeof import('element-plus')['ElMessageBox']['prompt']
+    $loading: typeof import('element-plus')['ElLoadingService']
+  }
+}
+
+export {}

+ 53 - 0
src/components/company-select/index.vue

@@ -0,0 +1,53 @@
+<template>
+  <el-cascader
+    style="width: 100%"
+    v-model="state.path"
+    :disabled="disabled"
+    placeholder="承办单位:"
+    :options="state.options"
+    :props="{ expandTrigger: 'hover', checkStrictly: true }"
+  />
+</template>
+
+<script setup lang="ts">
+import { useTreeSelect, Props, TreeOption } from "@/hook/treeSelect";
+import { getOrganizationTree } from "@/store/organization";
+import { watchEffect } from "vue";
+
+const emit = defineEmits<{
+  (e: "update:data", data: TreeOption | null): void;
+  (e: "update:modelValue", value: string): void;
+  (e: "update:label", value: string): void;
+  (e: "update:path", path: string[]): void;
+}>();
+const props = defineProps<Props>();
+
+const state = useTreeSelect(props, getOrganizationTree, {
+  label: "name",
+  level: "level",
+});
+
+watchEffect(() => {
+  emit("update:data", state.currentOption);
+});
+watchEffect(() => {
+  emit("update:modelValue", state.value);
+});
+watchEffect(() => {
+  emit("update:label", state.label);
+});
+watchEffect(() => {
+  emit("update:path", state.path);
+});
+</script>
+
+<style scoped>
+.aaa::after {
+  content: "";
+  position: absolute;
+  left: 0;
+  right: 0;
+  top: 0;
+  bottom: 0;
+}
+</style>

+ 66 - 0
src/components/dialog/index.vue

@@ -0,0 +1,66 @@
+<template>
+  <teleport to="#dialog">
+    <div class="dialog-bg" v-if="show">
+      <div class="dialog" :style="{ width: width + 'px' }">
+        <div class="head">
+          <h3>{{ title }}</h3>
+          <el-icon @click="closeHandle" v-if="showClose || cornerClose">
+            <Close />
+          </el-icon>
+        </div>
+        <div class="content">
+          <slot />
+        </div>
+        <div class="floot" v-if="showFloor">
+          <el-button type="danger" v-if="showDel" @click="deleteHandle">删 除</el-button>
+          <el-button @click="closeHandle" v-if="showClose">取 消</el-button>
+          <el-button type="primary" :disabled="!!disabled" @click="enterHandle">
+            {{ enterText }}
+          </el-button>
+        </div>
+      </div>
+    </div>
+  </teleport>
+</template>
+
+<script setup lang="ts">
+import { computed, ref, watch, watchEffect } from "vue";
+import { user } from "@/store/user";
+import { operateIsPermissionByPath } from "@/directive/permission";
+import { DialogProps } from "./type";
+
+const props = withDefaults(defineProps<DialogProps>(), {
+  width: 680,
+  show: false,
+  hideFloor: false,
+  showClose: true,
+  enterText: "保 存",
+});
+
+const emit = defineEmits<{
+  (e: "update:show", show: boolean): void;
+  (e: "quit"): void;
+  (e: "submit"): void;
+  (e: "delete"): void;
+}>();
+
+const showDel = ref(props.showDelete);
+const showFloor = computed(() => !props.hideFloor);
+
+const closeHandle = () => {
+  emit("update:show", false);
+  emit("quit");
+};
+const enterHandle = () => {
+  emit("submit");
+};
+const deleteHandle = () => {
+  emit("delete");
+};
+
+const disabled = computed(() => props.power && !operateIsPermissionByPath(props.power));
+</script>
+
+<style lang="scss" scoped>
+@import "./style.scss";
+</style>

+ 51 - 0
src/components/dialog/style.scss

@@ -0,0 +1,51 @@
+.dialog-bg {
+  background-color: rgba(0,0,0,0.5);
+  position: fixed;
+  left: 0;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  z-index: 99;
+
+}
+
+.dialog {
+  $padding: 16px;
+  width: 680px;
+  background-color: #fff;
+  border-radius: 4px;
+
+  .head {
+    padding: $padding;
+    display: flex;
+    justify-content: space-between;
+
+    h3 {
+      font-size: 16px;
+      color: var(--colorColor);
+      font-weight: normal;
+    }
+
+    i {
+      font-size: 2rem;
+      color: rgb(145,148,154);
+      cursor: pointer;
+    }
+  }
+
+  .content {
+    padding: 24px 30px;
+    border-top: 1px solid var(--bgColor);
+    border-bottom: 1px solid var(--bgColor);
+    max-height: 600px;
+    overflow-y: auto;
+  }
+
+  .floot {
+    float: right;
+    padding: $padding;
+  }
+}

+ 11 - 0
src/components/dialog/type.ts

@@ -0,0 +1,11 @@
+export type DialogProps = {
+  show?: boolean;
+  title: string;
+  hideFloor?: boolean;
+  enterText?: string;
+  width?: number;
+  power?: string;
+  showClose?: boolean;
+  showDelete?: boolean;
+  cornerClose?: boolean;
+};

+ 6 - 0
src/components/head/head.ts

@@ -0,0 +1,6 @@
+export type Option = {
+  value: any;
+  name: string;
+};
+
+export type Options = Option[];

+ 115 - 0
src/components/head/index.vue

@@ -0,0 +1,115 @@
+<template>
+  <div class="head-layer">
+    <el-tabs
+      :modelValue="modelValue"
+      @update:modelValue="(str: any) => updateModelValue(str)"
+    >
+      <el-tab-pane
+        v-for="item in options"
+        :key="item.value"
+        :label="item.name"
+        :name="item.value"
+      >
+      </el-tab-pane>
+    </el-tabs>
+    <div class="head-content-layer" :class="{ show: show }" v-if="!notContent">
+      <div class="head-content">
+        <slot />
+      </div>
+      <div class="display" @click="show = !show" v-if="showCtrl">
+        <template v-if="show">
+          <span>收起</span>
+          <i class="el-icon-arrow-up"></i>
+        </template>
+        <template v-else>
+          <span>展开</span>
+          <i class="el-icon-arrow-down"></i>
+        </template>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script lang="ts" setup>
+import { ref } from "vue";
+import { Options } from "./head";
+
+const props = withDefaults(
+  defineProps<{
+    options: Options;
+    modelValue?: any;
+    showCtrl?: boolean;
+    notContent?: boolean;
+  }>(),
+  {
+    notContent: false,
+    showCtrl: false,
+  }
+);
+
+const activeValue = ref(props.modelValue || props.options[0].value);
+const emit = defineEmits<{ (e: "update:modelValue", modelValue: string): void }>();
+const updateModelValue = (modelValue: string) => {
+  if ("modelValue" in props) {
+    console.log(modelValue, props);
+    emit("update:modelValue", modelValue);
+  } else {
+    activeValue.value = modelValue;
+  }
+};
+const show = ref(true);
+</script>
+
+<style lang="scss" scoped>
+.head-layer {
+  background-color: #fff;
+  border-radius: 4px;
+}
+
+.head-content-layer {
+  padding: 16px 154px 16px 16px;
+  position: relative;
+
+  .head-content {
+    overflow: hidden;
+    height: 42px;
+  }
+
+  &.show {
+    padding-bottom: 16px;
+
+    .head-content {
+      height: auto;
+    }
+  }
+
+  .display {
+    position: absolute;
+    top: 16px;
+    right: 16px;
+    color: var(--primaryColor);
+    font-size: 0.85rem;
+    cursor: pointer;
+
+    i {
+      color: currentColor;
+      font-size: 1em;
+      margin-left: 5px;
+    }
+  }
+}
+</style>
+
+<style>
+.head-layer .el-tabs__nav-wrap {
+  padding: 0 16px;
+}
+
+.head-layer .el-tabs__header {
+  margin-bottom: 0;
+}
+
+.head-layer .el-form-item {
+  margin-bottom: 0;
+}
+</style>

+ 158 - 0
src/components/pagination/index.vue

@@ -0,0 +1,158 @@
+<template>
+  <div class="pag-block no-sizes">
+    <el-pagination
+      layout="total, prev, pager, next"
+      @current-change="(data) => emit('current-change', data)"
+      :current-page="currentPage"
+      :page-size="currSize"
+      background
+      :total="total"
+    >
+    </el-pagination>
+
+    <div
+      class="sizes-down"
+      :style="{ left: 40 + total.toString().length * 10 + 'px' }"
+      v-if="!hideSizes"
+    >
+      <span class="el-dropdown-link" @click.stop="show = !show">
+        {{ currSize }} 条/页
+        <i :class="show ? 'el-icon-arrow-up' : 'el-icon-arrow-down'"></i>
+      </span>
+      <ul @click.stop v-if="show">
+        <li
+          v-for="num in csizes"
+          :key="num"
+          :class="{ selected: num === currSize }"
+          @click="clickHandle(num)"
+        >
+          {{ num }}条/页
+        </li>
+      </ul>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { onActivated, onUnmounted, ref, watch, watchEffect } from "vue";
+
+const props = withDefaults(
+  defineProps<{
+    currentPage: number;
+    size?: number;
+    total: number;
+    hideSizes?: boolean;
+    csizes?: number[];
+  }>(),
+  {
+    hideSizes: true,
+    csizes: () => [12, 24],
+  }
+);
+
+const emit = defineEmits<{
+  (e: "size-change", size: number): void;
+  (e: "current-change", size: number): void;
+}>();
+
+const currSize = ref(props.size || props.csizes[0]);
+const show = ref(false);
+
+watchEffect(() => {
+  if (currSize.value != props.size) {
+    emit("size-change", currSize.value);
+  }
+});
+
+const clickHandle = (num: number) => {
+  currSize.value = num;
+  show.value = false;
+};
+
+const docClick = () => (show.value = false);
+
+onActivated(() => {
+  document.documentElement.addEventListener("click", docClick, false);
+});
+onUnmounted(() => {
+  document.documentElement.removeEventListener("click", docClick, false);
+});
+</script>
+
+<style lang="scss" scope>
+.pag-block {
+  position: relative;
+  z-index: 88;
+
+  .sizes-down {
+    position: absolute;
+    top: 50%;
+    transform: translateY(-50%);
+
+    span {
+      box-sizing: border-box;
+      font-size: 13px;
+      appearance: none;
+      color: rgb(96, 98, 102);
+      display: inline-block;
+      height: 30px;
+      line-height: 30px;
+      min-width: 100px;
+      border: 1px solid rgb(220, 223, 230);
+      border-radius: 4px;
+      outline: none;
+      padding: 0px 35px 0 15px;
+      cursor: pointer;
+
+      i {
+        position: absolute;
+        right: 15px;
+        top: 50%;
+        transform: translateY(-50%);
+        color: inherit;
+      }
+    }
+
+    ul {
+      width: 100%;
+      bottom: 100%;
+
+      position: absolute;
+      z-index: 1001;
+      border: solid 1px #e4e7ed;
+      border-radius: 4px;
+      background-color: #ffffff;
+      box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+      box-sizing: border-box;
+      margin: 5px 0;
+      list-style: none;
+      padding: 6px 0;
+      margin: 0;
+      box-sizing: border-box;
+
+      li {
+        font-size: 14px;
+        padding: 0 20px;
+        position: relative;
+        white-space: nowrap;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        color: #606266;
+        height: 34px;
+        line-height: 34px;
+        box-sizing: border-box;
+        cursor: pointer;
+
+        &:hover {
+          background-color: #f5f7fa;
+        }
+
+        &.selected {
+          color: #d6000f;
+          font-weight: bold;
+        }
+      }
+    }
+  }
+}
+</style>

+ 21 - 0
src/config/criminal.scss

@@ -0,0 +1,21 @@
+@forward 'element-plus/theme-chalk/src/common/var.scss'with ($colors: ('primary': ('base': #26559B, )),
+  $common-component-size: ('default': 40px));
+
+.delBtn {
+  color   : #26559B;
+  // color: rgb(250, 85, 85);
+}
+
+body {
+
+
+  .home-content h1,
+  .info h1 {
+    color: rgba(0, 0, 0, 0.85);
+  }
+
+  .home-content p,
+  .info p {
+    color: rgba(0, 0, 0, 0.45);
+  }
+}

+ 7 - 0
src/config/fire.scss

@@ -0,0 +1,7 @@
+@forward 'element-plus/theme-chalk/src/common/var.scss'with ($colors: ('primary': ('base': #D8000A, )),
+  $common-component-size: ('default': 40px));
+
+.delBtn {
+  color   : #D8000A;
+  // color: rgb(250, 85, 85);
+}

+ 9 - 0
src/config/locale.vue

@@ -0,0 +1,9 @@
+<template>
+  <el-config-provider :locale="zhCn" :message="{ max: 3 }">
+    <slot />
+  </el-config-provider>
+</template>
+
+<script lang="ts" setup>
+import zhCn from "element-plus/dist/locale/zh-cn.mjs";
+</script>

+ 17 - 0
src/constant/REG.ts

@@ -0,0 +1,17 @@
+// 至少8-16个字符,至少1个小写字母和1个数字,其他可以是任意字符:
+export const PSW ={
+  REG: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[^]{8,16}$/,
+  tip: '请输入8-16位数字、英文大小写组合密码'
+}
+
+// 手机号校验
+export const PHONE = {
+  REG: /^1(3|4|5|6|7|8|9)\d{9}$/,
+  // REG: /^((13[0-9]|14[01456879]|15[0-3,5-9]|16[2567]|17[0-8]|18[0-9]|19[0-3,5-9])\d{8})|(8){11}$/,
+  tip: '手机号格式不正确!'
+}
+
+export const EPSW = {
+  REG: /^[0-9a-zA-Z]*$/,
+  tip: '仅支持数字或字母组合密码'
+}

+ 28 - 0
src/constant/app.ts

@@ -0,0 +1,28 @@
+export const enum AppType {
+  fire = "1",
+  criminal = "2",
+}
+
+export type AppConfigType = {
+  [key in AppType]: {
+    useScssPath: string;
+    title: string;
+    desc: string;
+    banner: string;
+  };
+};
+
+export const AppConfig: AppConfigType = {
+  [AppType.criminal]: {
+    useScssPath: "@/config/criminal.scss",
+    title: "刑侦三维远程勘验平台",
+    desc: "dimensional remote prospecting platform of fire scene of Fire Rescue",
+    banner: "./public/criminalBanner.png",
+  },
+  [AppType.fire]: {
+    useScssPath: "@/config/fire.scss",
+    title: "消防火调三维远程勘验平台",
+    desc: "dimensional remote prospecting platform of fire scene of Fire Rescue",
+    banner: "./public/fireBanner.png",
+  },
+};

+ 15 - 0
src/constant/archive.ts

@@ -0,0 +1,15 @@
+import { ArchiveType } from "@/store/archive";
+import { uploadAttachFile, uploadAttachImage } from "@/request";
+
+export const types = [
+  { name: "现场调查证据材料", value: ArchiveType.evidence },
+  { name: "火灾事故认定", value: ArchiveType.cert },
+  { name: "其他", value: ArchiveType.other },
+];
+
+export const maxFileSize = 100 * 1024 * 1024;
+export const defaultFileType = 2;
+export const fileTypes = [
+  { type: 1, formats: ["jpeg", "jpg"], url: uploadAttachImage },
+  { type: 2, formats: ["pdf", "word"], url: uploadAttachFile },
+];

+ 12 - 0
src/constant/caseFile.ts

@@ -0,0 +1,12 @@
+import { BoardType } from "@/store/caseFile";
+
+export const FileDrawType = 1;
+export const DrawFormats = [".pdf", ".doc", ".docx"];
+export const OtherFormats = [".jpg", ".png"];
+
+export const BoardTypeDesc = {
+  [BoardType.scene]: "现场图",
+  [BoardType.map]: "方位图",
+};
+
+export const maxFileSize = 100 * 1024 * 1024;

+ 582 - 0
src/constant/fire.ts

@@ -0,0 +1,582 @@
+import { FireStatus } from "@/store/fire";
+
+// 火灾原因
+export const reason = [
+  {
+    label: "放火",
+    value: "放火",
+    children: [
+      { value: "刑事防火", label: "刑事防火" },
+      { value: "精神病、智障等人士防火", label: "精神病、智障等人士防火" },
+      { value: "自焚", label: "自焚" },
+      { value: "其他", label: "其他" },
+    ],
+  },
+  {
+    value: "电气火灾",
+    label: "电气火灾",
+    children: [
+      { label: "蓄电池故障(热失控)", value: "蓄电池故障(热失控)" },
+      {
+        label: "电气线路故障(线路接插件、配电盘、控制装置等) ",
+        value: "电气线路故障(线路接插件、配电盘、控制装置等) ",
+      },
+      { label: "电动机及其他工业设备", value: "电动机及其他工业设备" },
+      { label: "电器设备故障", value: "电器设备故障" },
+      { label: "电加热器具火灾", value: "电加热器具火灾" },
+      { label: "其他", value: "其他" },
+    ],
+  },
+  {
+    value: "产作业",
+    label: "产作业",
+    children: [
+      { label: "焊割", value: "焊割" },
+      { label: "熬炼", value: "熬炼" },
+      { label: "化工生产", value: "化工生产" },
+      { label: "机械设备类故障", value: "机械设备类故障" },
+      { label: "烘烤", value: "烘烤" },
+      { label: "接触高温", value: "接触高温" },
+      { label: "其他", value: "其他" },
+    ],
+  },
+  {
+    value: "用火不慎",
+    label: "用火不慎",
+    children: [
+      { label: "余火复燃", value: "余火复燃" },
+      { label: "照明不慎", value: "照明不慎" },
+      { label: "烘烤不慎", value: "烘烤不慎" },
+      { label: "敬神祭祖", value: "敬神祭祖" },
+      { label: "油锅起火", value: "油锅起火" },
+      { label: "燃气炉具故障及使用不当", value: "燃气炉具故障及使用不当" },
+      { label: "燃油炉具故障及使用不当", value: "燃油炉具故障及使用不当" },
+      { label: "其他炉具故障及使用不当", value: "其他炉具故障及使用不当" },
+      { label: "烟道过热窜火、飞火等", value: "烟道过热窜火、飞火等" },
+      { label: "烧荒、野外生火不慎", value: "烧荒、野外生火不慎" },
+      { label: "使用蚊香不慎", value: "使用蚊香不慎" },
+      { label: "其他", value: "其他" },
+    ],
+  },
+  {
+    value: "吸烟",
+    label: "吸烟",
+    children: [
+      { label: "违章吸烟", value: "违章吸烟" },
+      { label: "乱扔烟头、火柴等", value: "乱扔烟头、火柴等" },
+      { label: "卧床吸烟", value: "卧床吸烟" },
+      { label: "其他", value: "其他" },
+    ],
+  },
+  {
+    value: "玩火",
+    label: "玩火",
+    children: [
+      { label: "小孩玩火", value: "小孩玩火" },
+      { label: "其他", value: "其他" },
+    ],
+  },
+  { label: "燃放烟花爆竹", value: "燃放烟花爆竹" },
+  { label: "自燃", value: "自燃" },
+  { label: "雷击", value: "雷击" },
+  { label: "静电", value: "静电" },
+  { label: "遗留火种", value: "遗留火种" },
+  { label: "其他", value: "其他" },
+  { label: "不排除原因", value: "不排除原因" },
+];
+
+// 起火场所
+export const place = [
+  {
+    label: "非建构筑物",
+    value: "非建构筑物",
+    children: [
+      { label: "室外集贸市场", value: "室外集贸市场" },
+      { label: "露天堆垛", value: "露天堆垛" },
+      {
+        label: "露天农副业场所",
+        value: "露天农副业场所",
+        children: [
+          { label: "农田", value: "农田" },
+          { label: "经济林木(含果园)", value: "经济林木(含果园)" },
+          { label: "苗圃", value: "苗圃" },
+          { label: "花卉", value: "花卉" },
+          { label: "养殖场", value: "养殖场" },
+          { label: "大棚", value: "大棚" },
+          { label: "其他", value: "其他" },
+        ],
+      },
+      {
+        label: "室外独立生产设施设备",
+        value: "室外独立生产设施设备",
+        children: [
+          { label: "风力发电设施", value: "风力发电设施" },
+          { label: "光伏发电设施", value: "光伏发电设施" },
+          {
+            label: "小型变压器、配电柜等室外输配电设备",
+            value: "小型变压器、配电柜等室外输配电设备",
+          },
+          { label: "变电站", value: "变电站" },
+          { label: "通讯基站", value: "通讯基站" },
+          { label: "其他室外独立式生产设施", value: "其他室外独立式生产设施" },
+        ],
+      },
+      { label: "公园", value: "公园" },
+      { label: "森林", value: "森林" },
+      { label: "草原", value: "草原" },
+      { label: "道路绿化带、隔离带", value: "道路绿化带、隔离带" },
+      { label: "其他", value: "其他" },
+    ],
+  },
+  {
+    label: "交通工具",
+    value: "交通工具",
+    children: [
+      {
+        label: "客车",
+        value: "客车",
+        children: [
+          { label: "燃油车", value: "燃油车" },
+          { label: "燃气车", value: "燃气车" },
+          { label: "电动车", value: "电动车" },
+          { label: "混合电动车", value: "混合电动车" },
+        ],
+      },
+      {
+        label: "货车",
+        value: "货车",
+        children: [
+          { label: "燃油车", value: "燃油车" },
+          { label: "燃气车", value: "燃气车" },
+          { label: "电动车", value: "电动车" },
+          { label: "混合电动车", value: "混合电动车" },
+        ],
+      },
+      {
+        label: "轿车",
+        value: "轿车",
+        children: [
+          { label: "燃油车", value: "燃油车" },
+          { label: "燃气车", value: "燃气车" },
+          { label: "电动车", value: "电动车" },
+          { label: "混合电动车", value: "混合电动车" },
+        ],
+      },
+      {
+        label: "特种车",
+        value: "特种车",
+        children: [
+          { label: "燃油车", value: "燃油车" },
+          { label: "燃气车", value: "燃气车" },
+          { label: "电动车", value: "电动车" },
+          { label: "混合电动车", value: "混合电动车" },
+        ],
+      },
+      { label: "摩托车", value: "摩托车" },
+      { label: "铁路列车", value: "铁路列车" },
+      { label: "船舶", value: "船舶" },
+      { label: "航空(天)", value: "航空(天)" },
+      { label: "城市轨道交通工具", value: "城市轨道交通工具" },
+      { label: "农用机械", value: "农用机械" },
+      {
+        label: "电动助力车(三轮车、自行车)",
+        value: "电动助力车(三轮车、自行车)",
+      },
+      { label: "其他", value: "其他" },
+    ],
+  },
+  {
+    label: "建构筑物",
+    value: "建构筑物",
+    children: [
+      {
+        label: "居住场所",
+        value: "居住场所",
+        children: [
+          { label: "自建住宅", value: "自建住宅" },
+          {
+            label: "非自建住宅",
+            value: "非自建住宅",
+            children: [
+              { label: "商品房	", value: "商品房	" },
+              { label: "经适房	", value: "经适房	" },
+              { label: "集资房	", value: "集资房	" },
+              { label: "公寓房	", value: "公寓房	" },
+            ],
+          },
+          { label: "员工集体宿舍", value: "员工集体宿舍" },
+        ],
+      },
+      { label: "办公场所", value: "办公场所" },
+      {
+        label: "学校",
+        value: "学校",
+        children: [
+          {
+            label: "幼儿园托儿所",
+            value: "幼儿园托儿所",
+            children: [
+              { label: "教学场所	", value: "教学场所	" },
+              { label: "实验场所	", value: "实验场所	" },
+              { label: "学生集体宿舍	", value: "学生集体宿舍	" },
+              { label: "食堂	", value: "食堂	" },
+              { label: "礼堂等室内活动场馆	", value: "礼堂等室内活动场馆	" },
+              { label: "其他	", value: "其他	" },
+            ],
+          },
+          {
+            label: "小学",
+            value: "小学",
+            children: [
+              { label: "教学场所	", value: "教学场所	" },
+              { label: "实验场所	", value: "实验场所	" },
+              { label: "学生集体宿舍	", value: "学生集体宿舍	" },
+              { label: "食堂	", value: "食堂	" },
+              { label: "礼堂等室内活动场馆	", value: "礼堂等室内活动场馆	" },
+              { label: "其他	", value: "其他	" },
+            ],
+          },
+          {
+            label: "中学",
+            value: "中学",
+            children: [
+              { label: "教学场所	", value: "教学场所	" },
+              { label: "实验场所	", value: "实验场所	" },
+              { label: "学生集体宿舍	", value: "学生集体宿舍	" },
+              { label: "食堂	", value: "食堂	" },
+              { label: "礼堂等室内活动场馆	", value: "礼堂等室内活动场馆	" },
+              { label: "其他	", value: "其他	" },
+            ],
+          },
+          {
+            label: "大学",
+            value: "大学",
+            children: [
+              { label: "教学场所	", value: "教学场所	" },
+              { label: "实验场所	", value: "实验场所	" },
+              { label: "学生集体宿舍	", value: "学生集体宿舍	" },
+              { label: "食堂	", value: "食堂	" },
+              { label: "礼堂等室内活动场馆	", value: "礼堂等室内活动场馆	" },
+              { label: "其他	", value: "其他	" },
+            ],
+          },
+          {
+            label: "校外培训机构",
+            value: "校外培训机构",
+            children: [
+              { label: "教学场所	", value: "教学场所	" },
+              { label: "实验场所	", value: "实验场所	" },
+              { label: "学生集体宿舍	", value: "学生集体宿舍	" },
+              { label: "食堂	", value: "食堂	" },
+              { label: "礼堂等室内活动场馆	", value: "礼堂等室内活动场馆	" },
+              { label: "其他	", value: "其他	" },
+            ],
+          },
+          {
+            label: "成人教育机构",
+            value: "成人教育机构",
+            children: [
+              { label: "教学场所	", value: "教学场所	" },
+              { label: "实验场所	", value: "实验场所	" },
+              { label: "学生集体宿舍	", value: "学生集体宿舍	" },
+              { label: "食堂	", value: "食堂	" },
+              { label: "礼堂等室内活动场馆	", value: "礼堂等室内活动场馆	" },
+              { label: "其他	", value: "其他	" },
+            ],
+          },
+        ],
+      },
+      {
+        label: "商业场所",
+        value: "商业场所",
+        children: [
+          { label: "商场", value: "商场" },
+          { label: "超市", value: "超市" },
+          { label: "室内市场", value: "室内市场" },
+          { label: "经营性小场所", value: "经营性小场所" },
+          { label: "其他", value: "其他" },
+        ],
+      },
+      {
+        label: "宾馆、饭店、招待所",
+        value: "宾馆、饭店、招待所",
+        children: [
+          { label: "客房", value: "客房" },
+          { label: "餐饮", value: "餐饮" },
+          { label: "办公室", value: "办公室" },
+          { label: "会议室", value: "会议室" },
+          { label: "民宿", value: "民宿" },
+        ],
+      },
+      {
+        label: "纯餐饮场所",
+        value: "纯餐饮场所",
+        children: [
+          { label: "餐馆酒家", value: "餐馆酒家" },
+          { label: "农家乐", value: "农家乐" },
+          { label: "露天大排档", value: "露天大排档" },
+          { label: "私房菜馆", value: "私房菜馆" },
+        ],
+      },
+      {
+        label: "医疗机构",
+        value: "医疗机构",
+        children: [
+          { label: "医院", value: "医院" },
+          { label: "诊所", value: "诊所" },
+          { label: "康复中心", value: "康复中心" },
+          { label: "精神病院", value: "精神病院" },
+        ],
+      },
+      {
+        label: "养老院",
+        value: "养老院",
+        children: [
+          { label: "公办养老院", value: "公办养老院" },
+          { label: "私营养老院", value: "私营养老院" },
+        ],
+      },
+      { label: "福利院", value: "福利院" },
+      {
+        label: "公共娱乐场所",
+        value: "公共娱乐场所",
+        children: [
+          {
+            label: "影剧院、礼堂等演出、放映场所",
+            value: "影剧院、礼堂等演出、放映场所",
+          },
+          {
+            label: "舞厅、卡拉OK厅等歌舞娱乐场所",
+            value: "舞厅、卡拉OK厅等歌舞娱乐场所",
+          },
+          {
+            label: "具有娱乐功能的夜总会、音乐茶座场所",
+            value: "具有娱乐功能的夜总会、音乐茶座场所",
+          },
+          {
+            label:
+              "保龄球馆、旱冰场、按摩、沐足、棋牌、桑拿浴室等营业性健身、休闲场所",
+            value:
+              "保龄球馆、旱冰场、按摩、沐足、棋牌、桑拿浴室等营业性健身、休闲场所",
+          },
+          { label: "儿童娱乐、活动场所", value: "儿童娱乐、活动场所" },
+          { label: "游艺等其他公共娱乐场所", value: "游艺等其他公共娱乐场所" },
+        ],
+      },
+      {
+        label: "体育场馆",
+        value: "体育场馆",
+        children: [
+          { label: "室内部分", value: "室内部分" },
+          { label: "露天部分", value: "露天部分" },
+        ],
+      },
+      {
+        label: "金融交易场所",
+        value: "金融交易场所",
+        children: [
+          { label: "证券交易所", value: "证券交易所" },
+          { label: "银行网点", value: "银行网点" },
+        ],
+      },
+      {
+        label: "交通枢纽(站)",
+        value: "交通枢纽(站)",
+        children: [
+          { label: "候机场所", value: "候机场所" },
+          { label: "候船场所", value: "候船场所" },
+          {
+            label: "候车场所",
+            value: "候车场所",
+            children: [
+              { label: "汽车客运站	", value: "汽车客运站	" },
+              {
+                label: "铁路、高铁、城轨候车场所	",
+                value: "铁路、高铁、城轨候车场所	",
+              },
+            ],
+          },
+          { label: "地铁站", value: "地铁站" },
+          { label: "公交站", value: "公交站" },
+          { label: "交通综合枢纽", value: "交通综合枢纽" },
+        ],
+      },
+      {
+        label: "文物古建筑",
+        value: "文物古建筑",
+        children: [
+          { label: "国家级", value: "国家级" },
+          { label: "省级", value: "省级" },
+          { label: "市、县级", value: "市、县级" },
+          { label: "其他", value: "其他" },
+        ],
+      },
+      {
+        label: "文博馆(图书馆、博物馆、档案馆等)",
+        value: "文博馆(图书馆、博物馆、档案馆等)",
+      },
+      { label: "科研试验场所", value: "科研试验场所" },
+      { label: "广播电视中心", value: "广播电视中心" },
+      {
+        label: "通信场所",
+        value: "通信场所",
+        children: [
+          { label: "营业厅", value: "营业厅" },
+          { label: "机房", value: "机房" },
+          { label: "其他", value: "其他" },
+        ],
+      },
+      {
+        label: "宗教场所",
+        value: "宗教场所",
+        children: [
+          { label: "寺庙", value: "寺庙" },
+          { label: "教堂", value: "教堂" },
+          { label: "道观", value: "道观" },
+          { label: "其他民间信仰场所", value: "其他民间信仰场所" },
+        ],
+      },
+      { label: "会议、展览中心", value: "会议、展览中心" },
+      {
+        label: "物资仓储场所",
+        value: "物资仓储场所",
+        children: [
+          {
+            label: "危险品",
+            value: "危险品",
+            children: [
+              { label: "甲类	", value: "甲类	" },
+              { label: "乙类	", value: "乙类	" },
+              { label: "丙类	", value: "丙类	" },
+              { label: "丁类	", value: "丁类	" },
+              { label: "戊类	", value: "戊类	" },
+            ],
+          },
+          { label: "棉花", value: "棉花" },
+          { label: "粮食", value: "粮食" },
+          { label: "百货", value: "百货" },
+          { label: "综合", value: "综合" },
+          { label: "物流快递", value: "物流快递" },
+          { label: "三合一、多合一", value: "三合一、多合一" },
+          { label: "经营性小场所", value: "经营性小场所" },
+        ],
+      },
+      {
+        label: "厂房",
+        value: "厂房",
+        children: [
+          { label: "甲乙类生产", value: "甲乙类生产" },
+          { label: "丙类生产", value: "丙类生产" },
+          { label: "丁戊类生产", value: "丁戊类生产" },
+          { label: "劳动密集型", value: "劳动密集型" },
+          { label: "三合一、多合一", value: "三合一、多合一" },
+          { label: "经营性小场所", value: "经营性小场所" },
+          { label: "其他", value: "其他" },
+        ],
+      },
+      {
+        label: "加油加气站充电站",
+        value: "加油加气站充电站",
+        children: [
+          { label: "加油站", value: "加油站" },
+          { label: "加气站", value: "加气站" },
+          { label: "充电站", value: "充电站" },
+          { label: "加油加气站", value: "加油加气站" },
+          { label: "其他", value: "其他" },
+        ],
+      },
+      {
+        label: "汽车库",
+        value: "汽车库",
+        children: [
+          { label: "高层", value: "高层" },
+          { label: "多层", value: "多层" },
+          { label: "地下", value: "地下" },
+          { label: "半地下", value: "半地下" },
+          { label: "机械", value: "机械" },
+          { label: "敞开式", value: "敞开式" },
+        ],
+      },
+      {
+        label: "修车库",
+        value: "修车库",
+        children: [
+          { label: "简易修理厂", value: "简易修理厂" },
+          { label: "临时搭建修理厂", value: "临时搭建修理厂" },
+        ],
+      },
+      {
+        label: "工地",
+        value: "工地",
+        children: [
+          {
+            label: "建设工地",
+            value: "建设工地",
+            children: [
+              {
+                label: "建筑物、构筑物、设施等	",
+                value: "建筑物、构筑物、设施等	",
+              },
+              { label: "临时宿舍	", value: "临时宿舍	" },
+              { label: "临时办公场所	", value: "临时办公场所	" },
+              { label: "临时食堂	", value: "临时食堂	" },
+              { label: "临时室内仓库	", value: "临时室内仓库	" },
+              { label: "临时建材堆放场所	", value: "临时建材堆放场所	" },
+            ],
+          },
+          { label: "装修、改造工地", value: "装修、改造工地" },
+          { label: "动拆迁工地", value: "动拆迁工地" },
+        ],
+      },
+      {
+        label: "室内农副业场所",
+        value: "室内农副业场所",
+        children: [
+          { label: "温室", value: "温室" },
+          { label: "养殖场", value: "养殖场" },
+        ],
+      },
+      {
+        label: "石油化工企业",
+        value: "石油化工企业",
+        children: [
+          { label: "生产装置", value: "生产装置" },
+          { label: "储罐区", value: "储罐区" },
+          { label: "生活区", value: "生活区" },
+          { label: "办公区", value: "办公区" },
+        ],
+      },
+      { label: "其他", value: "其他" },
+    ],
+  },
+  {
+    label: "垃圾及废弃物",
+    value: "垃圾及废弃物",
+    children: [
+      { label: "垃圾箱", value: "垃圾箱" },
+      { label: "垃圾堆", value: "垃圾堆" },
+      { label: "垃圾场", value: "垃圾场" },
+      { label: "垃圾中转站", value: "垃圾中转站" },
+      { label: "废品回收场所", value: "废品回收场所" },
+      { label: "其他", value: "其他" },
+    ],
+  },
+];
+
+export const fireStatusDesc = {
+  [FireStatus.all]: "全部",
+  [FireStatus.incomplete]: "未认定",
+  [FireStatus.complete]: "已认定",
+};
+
+export const fireStatuOptions = [
+  {
+    value: FireStatus.all,
+    label: fireStatusDesc[FireStatus.all],
+  },
+  {
+    value: FireStatus.incomplete,
+    label: fireStatusDesc[FireStatus.incomplete],
+  },
+  { value: FireStatus.complete, label: fireStatusDesc[FireStatus.complete] },
+];

+ 22 - 0
src/constant/organization.ts

@@ -0,0 +1,22 @@
+import { DeptType } from "@/store/organization";
+
+export const deptTypeDesc = {
+  [DeptType.corps]: "总队",
+  [DeptType.detachment]: "支队",
+  [DeptType.brigade]: "大队",
+};
+
+export const deptTypeOptions = [
+  {
+    label: deptTypeDesc[DeptType.corps],
+    value: DeptType.corps,
+  },
+  {
+    label: deptTypeDesc[DeptType.detachment],
+    value: DeptType.detachment,
+  },
+  {
+    label: deptTypeDesc[DeptType.brigade],
+    value: DeptType.brigade,
+  },
+];

+ 0 - 0
src/constant/permission.ts


Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů