1
0
tangning 8 kuukautta sitten
vanhempi
commit
fdc810c1c9

+ 539 - 0
src/assets/font/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;
+}

+ 464 - 0
src/assets/font/demo_index.html

@@ -0,0 +1,464 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8"/>
+  <title>iconfont Demo</title>
+  <link rel="shortcut icon" href="//img.alicdn.com/imgextra/i4/O1CN01Z5paLz1O0zuCC7osS_!!6000000001644-55-tps-83-82.svg" type="image/x-icon"/>
+  <link rel="icon" type="image/svg+xml" href="//img.alicdn.com/imgextra/i4/O1CN01Z5paLz1O0zuCC7osS_!!6000000001644-55-tps-83-82.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=4789215" 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">&#xe603;</span>
+                <div class="name">价格保护</div>
+                <div class="code-name">&amp;#xe603;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe656;</span>
+                <div class="name">复制</div>
+                <div class="code-name">&amp;#xe656;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe61b;</span>
+                <div class="name">列表</div>
+                <div class="code-name">&amp;#xe61b;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe88c;</span>
+                <div class="name">09安全、保障-线性</div>
+                <div class="code-name">&amp;#xe88c;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe768;</span>
+                <div class="name">快速</div>
+                <div class="code-name">&amp;#xe768;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xeb66;</span>
+                <div class="name">使用文档</div>
+                <div class="code-name">&amp;#xeb66;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe618;</span>
+                <div class="name">照片</div>
+                <div class="code-name">&amp;#xe618;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe76f;</span>
+                <div class="name">资料</div>
+                <div class="code-name">&amp;#xe76f;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe60b;</span>
+                <div class="name">提档案</div>
+                <div class="code-name">&amp;#xe60b;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xeca1;</span>
+                <div class="name">爱心</div>
+                <div class="code-name">&amp;#xeca1;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe612;</span>
+                <div class="name">卷宗管理</div>
+                <div class="code-name">&amp;#xe612;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe610;</span>
+                <div class="name">查询</div>
+                <div class="code-name">&amp;#xe610;</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=1734689634265') format('woff2'),
+       url('iconfont.woff?t=1734689634265') format('woff'),
+       url('iconfont.ttf?t=1734689634265') 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 icon-jiagebaohu"></span>
+            <div class="name">
+              价格保护
+            </div>
+            <div class="code-name">.icon-jiagebaohu
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-fuzhi"></span>
+            <div class="name">
+              复制
+            </div>
+            <div class="code-name">.icon-fuzhi
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-liebiao"></span>
+            <div class="name">
+              列表
+            </div>
+            <div class="code-name">.icon-liebiao
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-anquanbaozhang-xianxing"></span>
+            <div class="name">
+              09安全、保障-线性
+            </div>
+            <div class="code-name">.icon-anquanbaozhang-xianxing
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-port-ks"></span>
+            <div class="name">
+              快速
+            </div>
+            <div class="code-name">.icon-port-ks
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-shiyongwendang"></span>
+            <div class="name">
+              使用文档
+            </div>
+            <div class="code-name">.icon-shiyongwendang
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-zhaopian"></span>
+            <div class="name">
+              照片
+            </div>
+            <div class="code-name">.icon-zhaopian
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-ziliao"></span>
+            <div class="name">
+              资料
+            </div>
+            <div class="code-name">.icon-ziliao
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-tidangan"></span>
+            <div class="name">
+              提档案
+            </div>
+            <div class="code-name">.icon-tidangan
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-aixin"></span>
+            <div class="name">
+              爱心
+            </div>
+            <div class="code-name">.icon-aixin
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-juanzongguanli"></span>
+            <div class="name">
+              卷宗管理
+            </div>
+            <div class="code-name">.icon-juanzongguanli
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-chaxun"></span>
+            <div class="name">
+              查询
+            </div>
+            <div class="code-name">.icon-chaxun
+            </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 icon-xxx"&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="#icon-jiagebaohu"></use>
+                </svg>
+                <div class="name">价格保护</div>
+                <div class="code-name">#icon-jiagebaohu</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-fuzhi"></use>
+                </svg>
+                <div class="name">复制</div>
+                <div class="code-name">#icon-fuzhi</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-liebiao"></use>
+                </svg>
+                <div class="name">列表</div>
+                <div class="code-name">#icon-liebiao</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-anquanbaozhang-xianxing"></use>
+                </svg>
+                <div class="name">09安全、保障-线性</div>
+                <div class="code-name">#icon-anquanbaozhang-xianxing</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-port-ks"></use>
+                </svg>
+                <div class="name">快速</div>
+                <div class="code-name">#icon-port-ks</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-shiyongwendang"></use>
+                </svg>
+                <div class="name">使用文档</div>
+                <div class="code-name">#icon-shiyongwendang</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-zhaopian"></use>
+                </svg>
+                <div class="name">照片</div>
+                <div class="code-name">#icon-zhaopian</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-ziliao"></use>
+                </svg>
+                <div class="name">资料</div>
+                <div class="code-name">#icon-ziliao</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-tidangan"></use>
+                </svg>
+                <div class="name">提档案</div>
+                <div class="code-name">#icon-tidangan</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-aixin"></use>
+                </svg>
+                <div class="name">爱心</div>
+                <div class="code-name">#icon-aixin</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-juanzongguanli"></use>
+                </svg>
+                <div class="name">卷宗管理</div>
+                <div class="code-name">#icon-juanzongguanli</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-chaxun"></use>
+                </svg>
+                <div class="name">查询</div>
+                <div class="code-name">#icon-chaxun</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>

+ 63 - 0
src/assets/font/iconfont.css

@@ -0,0 +1,63 @@
+@font-face {
+  font-family: "iconfont"; /* Project id 4789215 */
+  src: url('iconfont.woff2?t=1734689634265') format('woff2'),
+       url('iconfont.woff?t=1734689634265') format('woff'),
+       url('iconfont.ttf?t=1734689634265') format('truetype');
+}
+
+.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-jiagebaohu:before {
+  content: "\e603";
+}
+
+.icon-fuzhi:before {
+  content: "\e656";
+}
+
+.icon-liebiao:before {
+  content: "\e61b";
+}
+
+.icon-anquanbaozhang-xianxing:before {
+  content: "\e88c";
+}
+
+.icon-port-ks:before {
+  content: "\e768";
+}
+
+.icon-shiyongwendang:before {
+  content: "\eb66";
+}
+
+.icon-zhaopian:before {
+  content: "\e618";
+}
+
+.icon-ziliao:before {
+  content: "\e76f";
+}
+
+.icon-tidangan:before {
+  content: "\e60b";
+}
+
+.icon-aixin:before {
+  content: "\eca1";
+}
+
+.icon-juanzongguanli:before {
+  content: "\e612";
+}
+
+.icon-chaxun:before {
+  content: "\e610";
+}
+

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
src/assets/font/iconfont.js


+ 93 - 0
src/assets/font/iconfont.json

@@ -0,0 +1,93 @@
+{
+  "id": "4789215",
+  "name": "江门公安",
+  "font_family": "iconfont",
+  "css_prefix_text": "icon-",
+  "description": "",
+  "glyphs": [
+    {
+      "icon_id": "90509",
+      "name": "价格保护",
+      "font_class": "jiagebaohu",
+      "unicode": "e603",
+      "unicode_decimal": 58883
+    },
+    {
+      "icon_id": "658013",
+      "name": "复制",
+      "font_class": "fuzhi",
+      "unicode": "e656",
+      "unicode_decimal": 58966
+    },
+    {
+      "icon_id": "954024",
+      "name": "列表",
+      "font_class": "liebiao",
+      "unicode": "e61b",
+      "unicode_decimal": 58907
+    },
+    {
+      "icon_id": "1727279",
+      "name": "09安全、保障-线性",
+      "font_class": "anquanbaozhang-xianxing",
+      "unicode": "e88c",
+      "unicode_decimal": 59532
+    },
+    {
+      "icon_id": "2926748",
+      "name": "快速",
+      "font_class": "port-ks",
+      "unicode": "e768",
+      "unicode_decimal": 59240
+    },
+    {
+      "icon_id": "3868276",
+      "name": "使用文档",
+      "font_class": "shiyongwendang",
+      "unicode": "eb66",
+      "unicode_decimal": 60262
+    },
+    {
+      "icon_id": "3930490",
+      "name": "照片",
+      "font_class": "zhaopian",
+      "unicode": "e618",
+      "unicode_decimal": 58904
+    },
+    {
+      "icon_id": "4293108",
+      "name": "资料",
+      "font_class": "ziliao",
+      "unicode": "e76f",
+      "unicode_decimal": 59247
+    },
+    {
+      "icon_id": "6325386",
+      "name": "提档案",
+      "font_class": "tidangan",
+      "unicode": "e60b",
+      "unicode_decimal": 58891
+    },
+    {
+      "icon_id": "6775644",
+      "name": "爱心",
+      "font_class": "aixin",
+      "unicode": "eca1",
+      "unicode_decimal": 60577
+    },
+    {
+      "icon_id": "9165873",
+      "name": "卷宗管理",
+      "font_class": "juanzongguanli",
+      "unicode": "e612",
+      "unicode_decimal": 58898
+    },
+    {
+      "icon_id": "12719948",
+      "name": "查询",
+      "font_class": "chaxun",
+      "unicode": "e610",
+      "unicode_decimal": 58896
+    }
+  ]
+}

BIN
src/assets/font/iconfont.ttf


BIN
src/assets/font/iconfont.woff


BIN
src/assets/font/iconfont.woff2


+ 1 - 1
src/main.ts

@@ -10,7 +10,7 @@ import { router } from "./router";
 import { appConstant } from "./app";
 import 'virtual:windi.css'
 import "@/store/system";
-
+import '@/assets/font/iconfont.css'
 const app = createApp(App);
 
 for (const [key, component] of Object.entries(ElementPlusIconsVue)) {

+ 1 - 0
src/request/index.ts

@@ -48,6 +48,7 @@ axios.interceptors.request.use(async (config) => {
   console.log("token",getAuth, token, "userId", userId, config.url);
   if (!token && !~notLoginUrls.indexOf(config.url)) {
     // router.replace({ name: RouteName.login });
+    window.location.ref = window.location.origin + "/#/login";
     throw "用户未登录";
   }
   let caseId = router.currentRoute.value?.params?.caseId

+ 4 - 4
src/request/urls.ts

@@ -105,7 +105,7 @@ export const deleteExample = "/fusion/case/delete";
 export const caseSceneList = `/fusion/case/sceneList`;
 export const repCaseScenes = `/fusion/case/addScene`;
 export const syncInfo = `/fusion/caseLive/getTakeLookRoom`;
-
+export const sceneListHasAi = '/service/manage/case/sceneListHasAi'
 // 获取caseTaggings
 export const caseTaggingList = `/fusion/caseTag/allList`;
 
@@ -179,9 +179,9 @@ export const deleteCaseFile = "/fusion/caseFiles/delete";
 export const updateCaseFile = "/fusion/caseFiles/updateTitle";
 export const newFileupload = "/service/manage/common/upload/fileNew";
 //勘验笔录信息
-export const caseInquestInfoOld = "/fusion/caseInquest/info";
-export const caseInquestOpt = "/fusion/caseInquest/saveOrUpdate";
-export const caseInquestExport = "/fusion/caseInquest/downDocx";
+export const caseInquestInfoOld = "/fusion/caseInquestCriminal/info";
+export const caseInquestOpt = "/fusion/caseInquestCriminal/saveOrUpdate";
+export const caseInquestExport = "/fusion/caseInquestCriminal/downDocx";
 // 火调链接地址设置密码
 export const setCasePsw = "/fusion/web/fireProject/updateRandomCode";
 export const getCasePsw = "/fusion/web/fireProject/getRandCode";

+ 8 - 8
src/router/config.ts

@@ -47,43 +47,43 @@ export const routes: Routes = [
         path: "home/:caseId",
         component: () => import("@/view/vrmodel/index.vue"),
         
-        meta: { title: "场景管理", icon: "iconfire_scenes" },
+        meta: { title: "场景管理", icon: "icon-shiyongwendang" },
       },
       {
         name: RouteName.abstract,
         path: "abstract/:caseId",
         component: () => import("@/view/abstract/index.vue"),
-        meta: { title: "简要案情", icon: "iconfire_scenes" },
+        meta: { title: "简要案情", icon: "icon-liebiao" },
       },
       {
         name: RouteName.originalPhoto,
         path: "originalPhoto/:caseId",
         component: () => import("@/view/originalPhoto/index.vue"),
-        meta: { title: "原始照片", icon: "iconfire_scenes" },
+        meta: { title: "原始照片", icon: "icon-zhaopian" },
       },
       {
         name: RouteName.material,
         path: "material/:caseId",
         component: () => import("@/view/material/index.vue"),
-        meta: { title: "三录材料", icon: "iconfire_scenes" },
+        meta: { title: "三录材料", icon: "icon-tidangan" },
       },
       {
         name: RouteName.other,
         path: "other/:caseId",
         component: () => import("@/view/other/index.vue"),
-        meta: { title: "其他材料", icon: "iconfire_scenes" },
+        meta: { title: "其他材料", icon: "icon-fuzhi" },
       },
       {
         name: RouteName.aiList,
         path: "aiList/:caseId",
         component: () => import("@/view/aiList/index.vue"),
-        meta: { title: "AI 勘察", icon: "iconfire_scenes" },
+        meta: { title: "AI 勘察", icon: "icon-chaxun" },
       },
       {
         name: RouteName.dossier,
         path: "dossier/:caseId",
         component: () => import("@/view/dossier/index.vue"),
-        meta: { title: "案件卷宗", icon: "iconfire_scenes" },
+        meta: { title: "案件卷宗", icon: "icon-juanzongguanli" },
       },
       {
         name: RouteName.camera,
@@ -136,7 +136,7 @@ export const routes: Routes = [
       },
       {
         name: RouteName.records,
-        path: "/case/records/:caseId",
+        path: "/case/records/:caseId/:fileId",
         component: () => import("@/view/case/records/index.vue"),
         meta: { title: "现场勘验笔录" },
       },

+ 10 - 4
src/store/case.ts

@@ -30,6 +30,7 @@ import {
   caseInquestInfoOld,
   caseInquestOpt,
   caseInquestExport,
+  sceneListHasAi,
 } from "@/request";
 import { router } from "@/router";
 import { ModelScene, QuoteScene, Scene, SceneType } from "./scene";
@@ -140,14 +141,15 @@ export const getByTreeFileLists = async () => {
 };
 
 export const getCaseInquestInfoOld = (caseId: number) =>
-  axios.get(caseInquestInfoOld, { params: { caseId } });
+  axios.get(caseInquestInfoOld, { params: { inquestFileId: caseId } });
 
-export const saveCaseInquestInfo = (caseId: number, data) =>
-  axios.post(caseInquestOpt, { caseId, ...data });
+export const saveCaseInquestInfo = (params) =>
+  axios.post(caseInquestOpt, params
+  );
 
 export const exportCaseInquestInfo = (caseId: number) =>
   axios.get(caseInquestExport, {
-    params: { caseId, ingoreRes: true },
+    params: { inquestFileId: caseId, ingoreRes: true },
     responseType: "blob",
   });
 
@@ -211,5 +213,9 @@ export const saveCaseImgTagData = (params: any) =>
 export const getCaseImgTagData = (caseId: number) =>
   axios.get(getCaseImgTag, { params: { caseId } });
 
+export const getSceneListHasAi = (caseId: number) =>
+  axios.get(sceneListHasAi, { params: { caseId } });
+
+
 export const submitMergePhotos = (data) => axios.post(ffmpegMergeImage, { ...data })
 

+ 1 - 1
src/store/user.ts

@@ -50,7 +50,7 @@ export const getUsers = async (deptId?: string) =>
 // 当前用户的信息
 
 export const user = ref({
-  token: getLocal(`token`, "") || 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOjEsImRldmljZSI6ImRlZmF1bHQtZGV2aWNlIiwiZWZmIjotMSwicm5TdHIiOiJZS2Vsb2pleTZYQTBQNjU1VXRkeEdzQk95Wlpoc2JqTCIsImlkIjoxLCJ1c2VySWQiOjgxNywiaXNBZG1pbiI6MSwicGxhdGZvcm1JZCI6MSwidXNlck5hbWUiOiJzdXBlci1hZG1pbiIsIm5pY2tOYW1lIjoi6LaF57qn566h55CG5ZGYIn0.kFEPN80qudXaxdxqV4nbueKeRhEAjZSLobpbCsqPqTU',
+  token: getLocal(`token`, "") || 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOjEsImRldmljZSI6ImRlZmF1bHQtZGV2aWNlIiwiZWZmIjotMSwicm5TdHIiOiJlZ29vMmVJblc1ejRrVkRZbzc5NkpRSHk4SzVoZ2VOUSIsImlkIjoxLCJ1c2VySWQiOjgxNywiaXNBZG1pbiI6MSwicGxhdGZvcm1JZCI6MSwidXNlck5hbWUiOiJzdXBlci1hZG1pbiIsIm5pY2tOYW1lIjoi6LaF57qn566h55CG5ZGYIn0.kkU-OpFExNr0Xyp-n8F-dwPX1IV4szxvUgVACb_oC_A',
   info: getLocal("info", {} as UserInfo),
 });
 

+ 14 - 11
src/view/aiList/index.vue

@@ -7,11 +7,11 @@
         class="listItem p-2 cursor-pointer"
         v-for="(item, index) in list"
         :key="index"
-        :class="{ active: active == item }"
         @click="handleItem(item)"
       >
-        <div class="title1">{{ item.sceneName }}</div>
+        <div class="title1">{{ item.title }}</div>
       </div>
+      <span class="title1" v-if="!list.length"> 暂无数据</span>
     </div>
   </div>
 </template>
@@ -21,12 +21,14 @@ import { computed, ref, reactive } from "vue";
 import { addCaseFile } from "../originalPhoto/quisk";
 import { ElMessage, ElMessageBox } from "element-plus";
 import { useUpload } from "@/hook/upload";
-import { getSceneListData } from "@/store/case";
+import { RouteName, router } from "@/router";
+import { getSceneListHasAi } from "@/store/case";
 import { Delete, Edit } from "@element-plus/icons-vue";
 const srcList = [
   "https://07akioni.oss-cn-beijing.aliyuncs.com/07akioni.jpeg",
   "https://fuss10.elemecdn.com/a/3f/3302e58f9a181d2509f3dc0fa68b0jpeg.jpeg",
 ];
+const caseId = computed(() => (router.currentRoute.value?.params?.caseId));
 const active = ref(null);
 const list = ref([]);
 const ruleFormRef = ref(null);
@@ -38,17 +40,18 @@ const { size, fileList, upload, removeFile, previewFile, file, accept } =
     formats: [".doc", ".docx", , ".pdf"],
   });
 const handleItem = (item) => {
-  console.log("handleItem", item);
+  window.open(`/floorplan/index.html?m=${item.num}`)
   active.value = item;
 };
 const getList = async () => {
-  getSceneListData({
-    pageNum: 1,
-    pageSize: 99,
-    sceneType: "1",
-    type: "1",
-  }).then((res) => {
-    list.value = res.list;
+  getSceneListHasAi(caseId.value).then((res) => {
+    let newradioList = []
+    res.data.map(ele => {
+      if(ele.hasAi == 1){
+        newradioList.push(ele)
+      }
+    })
+    list.value = newradioList;
     console.log("getSceneListData", res);
   });
 };

+ 29 - 95
src/view/case/records/index.vue

@@ -1,96 +1,16 @@
 <template>
-  <!-- 勘验笔录{{ props.caseId }} -->
   <div class="records">
     <div class="header" style="flex-direction: row-reverse;">
-      <el-button style="margin-left: 10px" type="primary" @click="handleSave">保存</el-button>
+      <el-button  @click="backPageHandler">返回</el-button>
+      <el-button style="margin: 0px 10px" type="primary" @click="handleSave">保存</el-button>
       <el-button :disabled="isDisableExport" @click="handleExport"
         >导出</el-button
       >
     </div>
-    <!-- <h3 class="title">现场勘验笔录</h3>
-    <div class="content">
-      <div class="line" style="flex-direction: row-reverse;">
-        <el-input
-          class="input"
-          v-model="data.inquestNum"
-          placeholder=""
-          style="width: 280px"
-        />
-        <span>勘查号:</span>
-      </div>
-      <div class="line">
-        <span>发送单位:</span>
-        <el-input
-          class="input"
-          v-model="data.sendDept"
-          placeholder=""
-          style="width: 100%"
-        />
-      </div>
-
-      <div class="line">
-        <span>笔 录 人 :</span>
-        <el-input
-          class="input"
-          v-model="data.recorder"
-          placeholder=""
-          style="width: 120px"
-        />
-        <span>绘 图 人 :</span>
-        <el-input
-          class="input"
-          v-model="data.painter"
-          placeholder=""
-          style="width: 120px"
-        />
-        <span>照 相 人 :</span>
-        <el-input
-          class="input"
-          v-model="data.photographer"
-          placeholder=""
-          style="width: 120px"
-        />
-      </div>
-
-      <div class="line">
-        <span>份数: </span>
-        <el-input
-          class="input"
-          type="number"
-          v-model="data.issuanceCount"
-          placeholder=""
-          style="width: 120px"
-        />
-      </div>
-      <div class="line">
-        <span>制作时间: &nbsp; </span>
-        <div>
-          <el-date-picker
-            class="input"
-            v-model="data.makeTime"
-            type="datetime"
-            placeholder="制作时间"
-            style="width: 180px"
-          />
-        </div>
-      </div>
-      <div class="textarea">
-        <span>签发意见 :</span>
-        <el-input
-          type="textarea"
-          :rows="6"
-          v-model="data.issuanceOpinion"
-          placeholder=""
-          style="width: 100%"
-        />
-      </div>
-    </div> -->
-
     <h3 class="title">现 场 勘 验 笔 录</h3>
 
     <div class="content">
         <div class="line" style="flex-direction: row-reverse;">
-        <!-- <span>第</span> -->
         <el-input
           class="input"
           v-model="data.inquestNum"
@@ -102,7 +22,6 @@
 
       <div class="line">
         <span>现场勘验单位:</span>
-        <!-- <span>第</span> -->
         <el-input
           class="input"
           v-model="data.deptName"
@@ -113,7 +32,6 @@
 
       <div class="line">
         <span>指派/报告单位:</span>
-        <!-- <span>第</span> -->
         <el-input
           class="input"
           v-model="data.reportDept"
@@ -130,7 +48,7 @@
             v-model="data.inquestTime"
             type="datetime"
             placeholder="勘验时间"
-            style="width: 180px"
+            style="width: 200px"
           />
         </div>
       </div>
@@ -536,12 +454,14 @@
   </div>
 </template>
 <script setup>
-import { onMounted, ref, watch, h } from "vue";
+import { onMounted, ref, watch, h, computed  } from "vue";
 import { reactive } from "vue";
+import { router, RouteName } from "@/router";
 import {
   getCaseInquestInfo,
   saveCaseInquestInfo,
   exportCaseInquestInfo,
+  getCaseInquestInfoOld,
 } from "@/store/case";
 import { ElMessage, ElMessageBox } from "element-plus";
 import saveAs from "@/util/file-serve";
@@ -550,7 +470,8 @@ import { recorderInfoType, ChangeReasonType } from "./formData.ts";
 import { confirm } from "@/helper/message";
 const props = defineProps({ caseId: Number, title: String });
 
-console.log(props);
+const fileId = computed(() => router.currentRoute.value?.params?.fileId);
+const caseId = computed(() => router.currentRoute.value?.params?.caseId);
 const isDisableExport = ref(false);
 const data = reactive({
   title: "",
@@ -605,8 +526,8 @@ const witnessInfoNum = 2;
 const recorderInfoDialogShow = ref(false);
 const recorderInfoDialogSelect = ref();
 const initInfo = async () => {
-  const res = await getCaseInquestInfo(props.caseId);
-
+  const res = await getCaseInquestInfoOld(fileId.value);
+  console.log(res);
   if (!res.data) {
     isDisableExport.value = true;
   } else {
@@ -687,7 +608,9 @@ const addWitnessInfo = async () => {
     });
   }
 };
-
+const backPageHandler = () => {
+  router.back();
+};
 const removeWitnessInfo = async (index) => {
   if (await confirm("确定要删除此数据?")) {
     data.witnessInfo.splice(index, 1);
@@ -705,18 +628,29 @@ const handleSave = async () => {
       }
     }
   }
-  console.log("saveCaseInquestInfo", data);
-  const res = await saveCaseInquestInfo(props.caseId, data);
+  let inquestFileId = fileId.value == -1 ? '' : fileId.value;
+  let params = { ...data, caseId: caseId.value, inquestFileId };
+  const res = await saveCaseInquestInfo(params);
+  console.log("saveCaseInquestInfo", res);
+  if(fileId.value == -1){
+    router.replace({
+      name: RouteName.records,
+      params: { caseId: caseId.value, fileId: res.data?.inquestFileId },
+    });
+    return
+  }
   if (res.code === 0) {
     ElMessage.success("保存成功!");
     initInfo();
   }
 };
 const handleExport = async () => {
-  await saveCaseInquestInfo(props.caseId, data);
-  const res = await exportCaseInquestInfo(props.caseId);
+  let inquestFileId = fileId.value == -1 ? '' : fileId.value;
+  let params = { ...data, caseId: caseId.value, inquestFileId };
+  await saveCaseInquestInfo(params);
+  const res = await exportCaseInquestInfo(fileId.value);
   console.log("res", res);
-  saveAs(res, `${props.title}_勘验笔录.docx`);
+  saveAs(res, `勘验笔录.docx`);
 };
 </script>
 

+ 33 - 9
src/view/layout/top/index.vue

@@ -1,18 +1,19 @@
 <template>
   <div class="header-top">
     <div class="title">
-      <h2>
-        {{ title }}
-        <span>{{ desc }}</span>
-      </h2>
+      {{ title }}
+        <div class="edit">编辑</div>
     </div>
-    <div class="oper-btns" v-if="user.info">
+    <div class="oper-btns">
+      <el-button style="padding: 5px 10px" type="primary" @click="handlemtk">媒体库</el-button>
+      <el-button style="padding: 5px 10px" type="primary">预览案件</el-button>
+    </div>
+    <!-- <div class="oper-btns" v-if="user.info">
       <div class="user-menu">
         <img :src="user.info.avatar ? user.info.avatar : defAvatar" />
         <el-dropdown>
           <div style="outline: none">
             <span class="oper-down">{{ user.info.nickName }}</span>
-            <!-- <i class="el-icon-arrow-down el-icon--right"></i> -->
             <el-icon><ArrowDown /></el-icon>
           </div>
           <template v-slot:dropdown>
@@ -25,26 +26,49 @@
           </template>
         </el-dropdown>
       </div>
-    </div>
+    </div> -->
   </div>
 </template>
 <script lang="ts" setup>
 import { openErrorMsg } from "@/request";
 import { user, logout as logoutRaw } from "@/store/user";
 import defAvatar from "@/assets/image/top_my.png";
+import { getCaseInfo } from "@/store/case";
 import { refreshRole, roleId } from "@/store/role";
 import { RouteName, router } from "@/router";
 import { confirm } from "@/helper/message";
 import { updatePwd } from "@/view/system/quisk";
-import { title, desc } from "@/store/system";
+import { computed, ref, watch } from "vue";
+import { addCaseScenes } from "@/view/originalPhoto/quisk";
 
 refreshRole();
-
+const caseId = computed(() => {
+  const caseId = router.currentRoute.value.params.caseId;
+  if (caseId) {
+    return Number(caseId);
+  }
+});
+const title = ref('')
+const getInfo = async () => {
+  const res = await getCaseInfo(caseId.value);
+  console.log('getInfo', res)
+  title.value = res?.caseTitle || "";
+};
+getInfo();
+watch(() => caseId.value, () => {
+    getInfo();
+})
 const loginoutRaw = async () => {
   await logoutRaw();
   roleId.value = "";
   router.replace({ name: RouteName.login });
 };
+const handlemtk = () => {
+  window.open("/#/mediaLibrary/index");
+};
+const handleSee = () => {
+  window.open(`/code/index.html?caseId=${caseId.value}#/show`);
+};
 const logout = async () => {
   if (await confirm("确定要退出登录吗?")) {
     loginoutRaw();

+ 15 - 5
src/view/layout/top/style.scss

@@ -1,20 +1,30 @@
 .header-top {
+  background-color: #001529;
   &.system {
     background-color: #fff;
 
-    .title h2 {
-      color: #323233;
-    }
   }
 
   .title {
     display    : flex;
     align-items: center;
-
+    color: #FFFFFF;
+    font-weight: bold;
+    font-size: 24px;
+    margin-bottom: 0;
     img {
       width: 50px;
     }
-
+    .edit {
+      height: 24px;
+      line-height: 24px;
+      font-family: Roboto, Roboto;
+      font-weight: bold;
+      font-size: 24px;
+      margin: 0 12px;
+      padding: 0 12px;
+      border-left: 1px solid rgba(255, 255, 255, 0.30);
+    }
     h2 {
       font-size  : 1.14rem;
       color      : #fff;

+ 57 - 7
src/view/material/index.vue

@@ -13,7 +13,7 @@
           <el-button
             style="width: calc(50% - 6px)"
             type="primary"
-            @click="gotoDraw(BoardType.aimap, -1)"
+            @click="handleAiItem"
           >
             AI 平面图
           </el-button>
@@ -72,7 +72,7 @@
               <div class="">支持 pdf、word 格式图片上传</div>
             </div>
           </el-upload>
-          <el-button class="w-full mt-2" @click="handleRecords">在线填写</el-button>
+          <el-button class="w-full mt-2" @click="handleRecords(-1)">在线填写</el-button>
         </div>
         <div class="blList">
           <div class="bllistItem flex justify-between items-center mt-2" v-for="item,index in list.klbj" :key="index">
@@ -83,7 +83,7 @@
               </el-icon>
               <template #dropdown>
                 <el-dropdown-menu>
-                  <el-dropdown-item command="edit">编辑</el-dropdown-item>
+                  <el-dropdown-item v-if="item.createType == 'online'" command="edit">编辑</el-dropdown-item>
                   <el-dropdown-item command="delete">删除</el-dropdown-item>
                   <el-dropdown-item command="down">下载</el-dropdown-item>
                 </el-dropdown-menu>
@@ -93,11 +93,29 @@
         </div>
       </el-tab-pane>
     </el-tabs>
+    <el-dialog
+    v-model="dialogVisible"
+    title="请选择场景"
+    width="500"
+    :before-close="handleClose"
+  >
+    <div>
+      <el-radio-group v-model="radio">
+        <el-radio v-for="item,index in radioList" :key="index" :value="item.num">{{item.title}}</el-radio>
+      </el-radio-group>
+    </div>
+    <template #footer>
+      <div class="dialog-footer">
+        <el-button @click="dialogVisible = false">取消</el-button>
+        <el-button type="primary" @click="handleRadioItem"> 确认</el-button>
+      </div>
+    </template>
+  </el-dialog>
   </div>
 </template>
 
 <script setup lang="ts">
-import { uploadNewFile, addByMediaLiBrary } from "@/store/case";
+import { uploadNewFile, addByMediaLiBrary, getSceneListHasAi } from "@/store/case";
 import { computed, ref, reactive } from "vue";
 import { addCaseFile } from "../originalPhoto/quisk";
 import { ElMessage, ElMessageBox } from "element-plus";
@@ -110,6 +128,9 @@ import viewImg from "@/components/viewImg/index.vue"
 import { delCaseFile, } from "@/store/caseFile";
 const caseId = computed(() => (router.currentRoute.value?.params?.caseId));
 const active = ref(true);
+const radio = ref(null);
+const radioList = ref([]);
+const dialogVisible = ref(false);
 const list = ref({
   xct:[],
   xczp:[],
@@ -183,10 +204,10 @@ function handleSuccess(item) {
     getList();
   });
 }
-function handleRecords() {
+function handleRecords(fileId = -1) {
   router.push({
     name: RouteName.records,
-    params: { caseId: caseId.value! },
+    params: { caseId:caseId.value, fileId },
   });
 }
 async function handledrawCasePhotos() {
@@ -204,7 +225,7 @@ async function handleAdd(filesTypeName) {
 const handleCommand = (command: string | number | object, item) => {
   switch (command) {
     case "edit":
-      ElMessage(`click on item ${command}`)
+      handleRecords(item.filesId)
       break;
     case "delete":
       handleDel(item)
@@ -214,6 +235,35 @@ const handleCommand = (command: string | number | object, item) => {
   }
   // ElMessage(`click on item ${command}`)
 }
+function handleClose(e) {
+  console.log("handleClose", e);
+}
+function handleRadioItem() {
+  console.log('handleRadioItem', radio.value)
+  if(radio.value == null){
+    ElMessage.error('请选择对应的场景!');
+    return;
+  }
+  dialogVisible.value = false
+  window.open(`/floorplan/index.html?m=${radio.value}`)
+}
+function handleAiItem() {
+getSceneListHasAi(caseId.value).then((res) => {
+  console.log('getSceneListHasAi', res)
+  let newradioList = []
+  res.data.map(ele => {
+    if(ele.hasAi == 1){
+      newradioList.push(ele)
+    }
+  })
+  radioList.value = newradioList
+  if(newradioList.length){
+    dialogVisible.value = true
+  }else{
+    ElMessage.error('暂无支持AI 平面图的场景');
+  }
+});
+}
 function handleDel(item) {
   ElMessageBox.confirm("确定删除?", "提示", {
     confirmButtonText: "确定",

+ 1 - 1
src/view/originalPhoto/addScenes.vue

@@ -102,7 +102,7 @@ const changeSelection = (selectScenes: Scene[]) => {
 };
 // 初始化数据
 onMounted(async () => {
-  caseScenes.value = getCaseScenes(await getCaseSceneList(props.caseId));
+  // caseScenes.value = getCaseScenes(await getCaseSceneList(props.caseId));
 });
 const submit = () => {
   console.log(caseScenes.value);

+ 4 - 3
src/view/originalPhoto/list.vue

@@ -43,8 +43,9 @@ import { useScenePaggingParams } from "./pagging";
 import { useUpload } from "@/hook/upload";
 import { addLibraryFile } from "./quisk";
 
-const { pagging } = useScenePaggingParams();
-defineProps<{ params: ReturnType<typeof useScenePaggingParams> }>();
+// const { pagging } = useScenePaggingParams();
+const props = defineProps<{ params: ReturnType<typeof useScenePaggingParams> }>();
+
 const { size, fileList, upload, removeFile, previewFile, file, accept } =
   useUpload({
     maxSize: 2000 * 1024 * 1024,
@@ -61,6 +62,6 @@ const headOptions = [
 ];
 const handleAdd = async () => {
   await addLibraryFile();
-  pagging.refresh();
+  props.params.pagging.refresh();
 };
 </script>

+ 1 - 1
src/view/vrmodel/index.vue

@@ -45,7 +45,7 @@ async function geiList() {
   console.log("res", list.value);
 }
 function handlegotoEdit(record) {
-  let url = `/mega/index.html?m=${record.num}`
+  let url = `/epg.html?m=${record.num}`
   window.open(url);
 }
 function handleActive(params) {