Quellcode durchsuchen

Merge branch 'feature/1.4.0-audio' into dev

gemercheung vor 2 Jahren
Ursprung
Commit
d52466764f
100 geänderte Dateien mit 1993 neuen und 20983 gelöschten Zeilen
  1. 2 1
      packages/qjkankan-editor/.env.eurtestprod
  2. 1 1
      packages/qjkankan-editor/.env.prod
  3. 2 1
      packages/qjkankan-editor/.env.testdev
  4. 2 1
      packages/qjkankan-editor/.env.testprod
  5. 4 0
      packages/qjkankan-editor/.eslintrc.js
  6. 5 0
      packages/qjkankan-editor/package.json
  7. 6 2
      packages/qjkankan-editor/public/edit.html
  8. 3 2
      packages/qjkankan-editor/public/eshow.html
  9. 3 2
      packages/qjkankan-editor/public/eshowMobile.html
  10. 4 2
      packages/qjkankan-editor/public/material.html
  11. 0 539
      packages/qjkankan-editor/public/static/lib/iconfont/demo.css
  12. 0 5161
      packages/qjkankan-editor/public/static/lib/iconfont/demo_index.html
  13. 0 885
      packages/qjkankan-editor/public/static/lib/iconfont/iconfont.css
  14. BIN
      packages/qjkankan-editor/public/static/lib/iconfont/iconfont.eot
  15. 0 1
      packages/qjkankan-editor/public/static/lib/iconfont/iconfont.js
  16. 0 1528
      packages/qjkankan-editor/public/static/lib/iconfont/iconfont.json
  17. 0 677
      packages/qjkankan-editor/public/static/lib/iconfont/iconfont.svg
  18. BIN
      packages/qjkankan-editor/public/static/lib/iconfont/iconfont.ttf
  19. BIN
      packages/qjkankan-editor/public/static/lib/iconfont/iconfont.woff
  20. BIN
      packages/qjkankan-editor/public/static/lib/iconfont/iconfont.woff2
  21. 0 539
      packages/qjkankan-editor/public/static/lib/iconfontQJ1.1.0/demo.css
  22. 0 3523
      packages/qjkankan-editor/public/static/lib/iconfontQJ1.1.0/demo_index.html
  23. 0 595
      packages/qjkankan-editor/public/static/lib/iconfontQJ1.1.0/iconfont.css
  24. 0 1
      packages/qjkankan-editor/public/static/lib/iconfontQJ1.1.0/iconfont.js
  25. 0 1024
      packages/qjkankan-editor/public/static/lib/iconfontQJ1.1.0/iconfont.json
  26. BIN
      packages/qjkankan-editor/public/static/lib/iconfontQJ1.1.0/iconfont.ttf
  27. BIN
      packages/qjkankan-editor/public/static/lib/iconfontQJ1.1.0/iconfont.woff
  28. BIN
      packages/qjkankan-editor/public/static/lib/iconfontQJ1.1.0/iconfont.woff2
  29. 0 193
      packages/qjkankan-editor/public/static/lib/iconfontVR/iconfont.css
  30. BIN
      packages/qjkankan-editor/public/static/lib/iconfontVR/iconfont.eot
  31. 0 1
      packages/qjkankan-editor/public/static/lib/iconfontVR/iconfont.js
  32. 0 317
      packages/qjkankan-editor/public/static/lib/iconfontVR/iconfont.json
  33. 0 158
      packages/qjkankan-editor/public/static/lib/iconfontVR/iconfont.svg
  34. BIN
      packages/qjkankan-editor/public/static/lib/iconfontVR/iconfont.ttf
  35. BIN
      packages/qjkankan-editor/public/static/lib/iconfontVR/iconfont.woff
  36. BIN
      packages/qjkankan-editor/public/static/lib/iconfontVR/iconfont.woff2
  37. BIN
      packages/qjkankan-editor/public/static/panoassets/images/hotspot/image_place_holder.png
  38. BIN
      packages/qjkankan-editor/public/static/panoassets/images/hotspot/image_place_holder_1.png
  39. 238 238
      packages/qjkankan-editor/public/static/template/static/js/vrshow.js
  40. 1 1
      packages/qjkankan-editor/someData.json
  41. 7 5
      packages/qjkankan-editor/src/Store/modules/index.js
  42. 72 0
      packages/qjkankan-editor/src/Store/modules/notice.js
  43. 4 1
      packages/qjkankan-editor/src/Store/modules/scene.js
  44. 11 0
      packages/qjkankan-editor/src/api/index.js
  45. 0 539
      packages/qjkankan-editor/src/assets/fonts/demo.css
  46. 0 2764
      packages/qjkankan-editor/src/assets/fonts/demo_index.html
  47. 0 463
      packages/qjkankan-editor/src/assets/fonts/iconfont.css
  48. 0 1
      packages/qjkankan-editor/src/assets/fonts/iconfont.js
  49. 0 793
      packages/qjkankan-editor/src/assets/fonts/iconfont.json
  50. BIN
      packages/qjkankan-editor/src/assets/fonts/iconfont.ttf
  51. BIN
      packages/qjkankan-editor/src/assets/fonts/iconfont.woff
  52. BIN
      packages/qjkankan-editor/src/assets/fonts/iconfont.woff2
  53. 1 1
      packages/qjkankan-editor/src/assets/style/style.pc.editor.less
  54. 0 0
      packages/qjkankan-editor/src/assets/videos/opa1_x264.mp4
  55. 0 0
      packages/qjkankan-editor/src/assets/videos/opa2_x264.mp4
  56. 0 0
      packages/qjkankan-editor/src/assets/videos/opa3_x264.mp4
  57. 0 0
      packages/qjkankan-editor/src/assets/videos/opa4_x264.mp4
  58. 0 0
      packages/qjkankan-editor/src/assets/videos/opa5_x264.mp4
  59. 3 2
      packages/qjkankan-editor/src/components/NestedFolder.vue
  60. 38 3
      packages/qjkankan-editor/src/components/RichTextEditor.vue
  61. 1 0
      packages/qjkankan-editor/src/components/insertPositionTipInEditor.vue
  62. 65 6
      packages/qjkankan-editor/src/components/materialListInMaterialSelector.vue
  63. 179 191
      packages/qjkankan-editor/src/components/materialSelector.vue
  64. 155 100
      packages/qjkankan-editor/src/components/materialSelectorFromWork.vue
  65. 144 0
      packages/qjkankan-editor/src/components/notify.vue
  66. 2 2
      packages/qjkankan-editor/src/components/preview/index.vue
  67. 0 1
      packages/qjkankan-editor/src/components/pulldownMenuInEditor.vue
  68. 31 11
      packages/qjkankan-editor/src/components/sceneGroupInEditor.vue
  69. 1 1
      packages/qjkankan-editor/src/components/selectedImageInEditor.vue
  70. 1 1
      packages/qjkankan-editor/src/components/shared/ImageCropper.vue
  71. 108 86
      packages/qjkankan-editor/src/components/shared/message/Alert.vue
  72. 1 1
      packages/qjkankan-editor/src/components/shared/message/Confirm.vue
  73. 1 1
      packages/qjkankan-editor/src/components/shared/message/XWindow.vue
  74. 4 4
      packages/qjkankan-editor/src/components/shared/uploads/UploadAudio.vue
  75. 4 4
      packages/qjkankan-editor/src/components/shared/uploads/UploadImage.vue
  76. 2 2
      packages/qjkankan-editor/src/components/shared/uploads/UploadImageMobile.vue
  77. 4 4
      packages/qjkankan-editor/src/components/shared/uploads/UploadVideo.vue
  78. 2 2
      packages/qjkankan-editor/src/components/tablist/index.vue
  79. 140 134
      packages/qjkankan-editor/src/core/hotspot.js
  80. 69 70
      packages/qjkankan-editor/src/core/utils.js
  81. 67 52
      packages/qjkankan-editor/src/directives/vTitleInEditor.js
  82. 67 52
      packages/qjkankan-editor/src/directives/vTitleInManageCenter.js
  83. 1 1
      packages/qjkankan-editor/src/directives/vTooltipInEditor.js
  84. 1 1
      packages/qjkankan-editor/src/directives/vTooltipInManageCenter.js
  85. 6 2
      packages/qjkankan-editor/src/framework/EditorAppLayout.vue
  86. 14 4
      packages/qjkankan-editor/src/framework/EditorHead.vue
  87. 8 3
      packages/qjkankan-editor/src/framework/EditorMain.vue
  88. 146 73
      packages/qjkankan-editor/src/framework/play/pano/components/list.vue
  89. 3 5
      packages/qjkankan-editor/src/framework/play/pano/index.vue
  90. 29 14
      packages/qjkankan-editor/src/framework/show/component/swp.vue
  91. 109 98
      packages/qjkankan-editor/src/framework/show/index.vue
  92. 123 56
      packages/qjkankan-editor/src/framework/show/list.vue
  93. 3 3
      packages/qjkankan-editor/src/framework/show/popup/index.vue
  94. 3 3
      packages/qjkankan-editor/src/framework/show/popup/password.vue
  95. 2 2
      packages/qjkankan-editor/src/framework/show/popup/preview.vue
  96. 83 21
      packages/qjkankan-editor/src/framework/showMobile/index.vue
  97. 3 3
      packages/qjkankan-editor/src/framework/showMobile/popup/index.vue
  98. 3 3
      packages/qjkankan-editor/src/framework/showMobile/popup/password.vue
  99. 1 1
      packages/qjkankan-editor/src/framework/showMobile/popup/preview.vue
  100. 0 0
      packages/qjkankan-editor/src/lang/_en.json

+ 2 - 1
packages/qjkankan-editor/.env.eurtestprod

@@ -7,4 +7,5 @@ VUE_APP_PROXY_URL_ROOT='https://testeur.4dkankan.com'
 VUE_APP_PROXY_URL='https://testeur.4dkankan.com/qjkankan/'
 VUE_APP_ORIGIN=aws
 
-VUE_APP_URL_FILL=/qjkankan
+VUE_APP_URL_FILL=/qjkankan
+VUE_APP_DEBBUG_FLAG=0516-01

+ 1 - 1
packages/qjkankan-editor/.env.prod

@@ -7,4 +7,4 @@ VUE_APP_PROXY_URL_ROOT='https://www.4dkankan.com'
 VUE_APP_PROXY_URL='https://www.4dkankan.com/qjkankan/'
 VUE_APP_ORIGIN=
 VUE_APP_URL_FILL=/qjkankan
-VUE_APP_DEBBUG_FLAG=0516-01
+VUE_APP_DEBBUG_FLAG=0627-01

+ 2 - 1
packages/qjkankan-editor/.env.testdev

@@ -6,4 +6,5 @@ VUE_APP_PROXY_URL_ROOT='https://test.4dkankan.com'
 VUE_APP_PROXY_URL='https://test.4dkankan.com/qjkankan/'
 VUE_APP_ORIGIN=
 VUE_APP_URL_FILL=
-VUE_APP_DEBBUG_FLAG=0425-02
+VUE_APP_DEBBUG_FLAG=0425-02
+VUE_APP_DEBBUG_NOTIFY=0

+ 2 - 1
packages/qjkankan-editor/.env.testprod

@@ -7,4 +7,5 @@ VUE_APP_PROXY_URL_ROOT='https://test.4dkankan.com'
 VUE_APP_PROXY_URL='https://test.4dkankan.com/qjkankan/'
 VUE_APP_ORIGIN=
 VUE_APP_URL_FILL=/qjkankan
-VUE_APP_DEBBUG_FLAG=0515-01
+VUE_APP_DEBBUG_FLAG=0626-02
+VUE_APP_DEBBUG_NOTIFY=0

+ 4 - 0
packages/qjkankan-editor/.eslintrc.js

@@ -15,4 +15,8 @@ module.exports = {
     'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
     'no-unused-vars': 'off',
   },
+  "parserOptions": {
+    "ecmaVersion": 2020,
+    "sourceType": "module"
+  }
 }

+ 5 - 0
packages/qjkankan-editor/package.json

@@ -17,12 +17,14 @@
   },
   "dependencies": {
     "@floating-ui/dom": "^0.5.4",
+    "@ungap/structured-clone": "^1.2.0",
     "@wangeditor/editor": "^5.1.23",
     "@wangeditor/editor-for-vue": "^1.0.2",
     "core-js": "^3.8.2",
     "d3": "^7.8.0",
     "element-ui": "^2.15.1",
     "html2canvas": "^1.4.1",
+    "is-chinese-phone-number": "^0.1.9",
     "libphonenumber-js": "^1.10.19",
     "log-beautify": "^1.2.0",
     "photoswipe": "^4.1.3",
@@ -33,9 +35,12 @@
     "vue": "^2.6.12",
     "vue-awesome-swiper": "^4.1.1",
     "vue-cropperjs": "^4.2.0",
+    "vue-demi": "^0.14.5",
     "vue-i18n": "^8.22.3",
     "vue-photo-preview": "^1.1.3",
     "vue-router": "^3.4.9",
+    "vue-toast-notification": "^3.1.1",
+    "vue-toastification": "^1.7.14",
     "vuex": "^3.6.0"
   },
   "devDependencies": {

+ 6 - 2
packages/qjkankan-editor/public/edit.html

@@ -6,10 +6,14 @@
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width,initial-scale=1.0">
     <link rel="icon" href="./favicon.png" />
-    <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/lib/iconfont/iconfont.css"/>
+    <!-- <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/lib/iconfont/iconfont.css"/>
     <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/lib/iconfontQJ1.1.0/iconfont.css"/>
     <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/lib/iconfontVR/iconfont.css"/>
-    <link rel="stylesheet" href="//at.alicdn.com/t/font_2410347_3sp3zd6hsff.css"/>
+    <link rel="stylesheet" href="//at.alicdn.com/t/font_2410347_3sp3zd6hsff.css"/> -->
+    
+    <link rel="stylesheet" href="//at.alicdn.com/t/c/font_2625385_h1q9uyoxhsd.css"/>
+
+  
     <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/lib/quill/quill.snow.css" />
     <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/lib/animate/animate.min.css"/>
     <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/lib/mCustomScrollbar/jquery.mCustomScrollbar.min.css"/>

+ 3 - 2
packages/qjkankan-editor/public/eshow.html

@@ -5,10 +5,11 @@
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width,initial-scale=1.0">
-    <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/lib/iconfont/iconfont.css"/>
+    <!-- <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/lib/iconfont/iconfont.css"/>
     <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/lib/iconfontQJ1.1.0/iconfont.css"/>
     <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/lib/iconfontVR/iconfont.css"/>
-    <link rel="stylesheet" href="//at.alicdn.com/t/font_2410347_4htx35g8w1b.css"/>
+    <link rel="stylesheet" href="//at.alicdn.com/t/font_2410347_4htx35g8w1b.css"/> -->
+    <link rel="stylesheet" href="//at.alicdn.com/t/c/font_2625385_1un5khf0xqy.css"/>
     <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/lib/scrollbar/perfect-scrollbar.css"/>
     <link rel="icon" href="./favicon.ico" />
     <title>VR作品</title>

+ 3 - 2
packages/qjkankan-editor/public/eshowMobile.html

@@ -6,11 +6,12 @@
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta content="yes" name="apple-mobile-web-app-capable" />  
     <meta name="viewport" content="width=device-width,height=device-height,inital-scale=1.0,maximum-scale=1.0,user-scalable=no" />
-    <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/lib/iconfont/iconfont.css"/>
+    <!-- <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/lib/iconfont/iconfont.css"/>
     <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/lib/iconfontQJ1.1.0/iconfont.css"/>
     <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/lib/iconfontVR/iconfont.css"/>
     <link rel="stylesheet" href="//at.alicdn.com/t/font_2947721_fdnuf7rzr.css"/>
-    <link rel="stylesheet" href="//at.alicdn.com/t/font_1064953_6ikt2gc1snb.css"/>
+    <link rel="stylesheet" href="//at.alicdn.com/t/font_1064953_6ikt2gc1snb.css"/> -->
+    <link rel="stylesheet" href="//at.alicdn.com/t/c/font_2625385_1un5khf0xqy.css"/>
     <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/lib/animate/animate.min.css" />
     <link rel="icon" href="./favicon.ico" />
     <!-- <style>

+ 4 - 2
packages/qjkankan-editor/public/material.html

@@ -6,9 +6,11 @@
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width,initial-scale=1.0">
     <link rel="icon" href="./favicon.png" />
-    <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/lib/iconfont/iconfont.css"/>
+    <!-- <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/lib/iconfont/iconfont.css"/>
     <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/lib/iconfontQJ1.1.0/iconfont.css"/>
-    <link rel="stylesheet" href="//at.alicdn.com/t/font_2947721_fdnuf7rzr.css"/>
+    <link rel="stylesheet" href="//at.alicdn.com/t/font_2947721_fdnuf7rzr.css"/> -->
+
+    <link rel="stylesheet" href="//at.alicdn.com/t/c/font_2625385_h1q9uyoxhsd.css"/>
     <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/lib/animate/animate.min.css"/>
     <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/lib/mCustomScrollbar/jquery.mCustomScrollbar.min.css"/>
     <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/lib/scrollbar/perfect-scrollbar.css"/>

+ 0 - 539
packages/qjkankan-editor/public/static/lib/iconfont/demo.css

@@ -1,539 +0,0 @@
-/* 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;
-}

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 5161
packages/qjkankan-editor/public/static/lib/iconfont/demo_index.html


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 885
packages/qjkankan-editor/public/static/lib/iconfont/iconfont.css


BIN
packages/qjkankan-editor/public/static/lib/iconfont/iconfont.eot


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 1
packages/qjkankan-editor/public/static/lib/iconfont/iconfont.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 1528
packages/qjkankan-editor/public/static/lib/iconfont/iconfont.json


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 677
packages/qjkankan-editor/public/static/lib/iconfont/iconfont.svg


BIN
packages/qjkankan-editor/public/static/lib/iconfont/iconfont.ttf


BIN
packages/qjkankan-editor/public/static/lib/iconfont/iconfont.woff


BIN
packages/qjkankan-editor/public/static/lib/iconfont/iconfont.woff2


+ 0 - 539
packages/qjkankan-editor/public/static/lib/iconfontQJ1.1.0/demo.css

@@ -1,539 +0,0 @@
-/* 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;
-}

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 3523
packages/qjkankan-editor/public/static/lib/iconfontQJ1.1.0/demo_index.html


+ 0 - 595
packages/qjkankan-editor/public/static/lib/iconfontQJ1.1.0/iconfont.css

@@ -1,595 +0,0 @@
-@font-face {
-  font-family: "iconfont"; /* Project id 2947721 */
-  src: url('iconfont.woff2?t=1673001107875') format('woff2'),
-       url('iconfont.woff?t=1673001107875') format('woff'),
-       url('iconfont.ttf?t=1673001107875') format('truetype');
-}
-
-.iconfont {
-  font-family: "iconfont" !important;
-  font-size: 16px;
-  font-style: normal;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-
-.icon-down:before {
-  content: "\e720";
-}
-
-.icon-icon_graphic:before {
-  content: "\e721";
-}
-
-.icon-centering:before {
-  content: "\e722";
-}
-
-.icon-left:before {
-  content: "\e723";
-}
-
-.icon-right:before {
-  content: "\e724";
-}
-
-.icon-mobile:before {
-  content: "\e725";
-}
-
-.icon-full_screen:before {
-  content: "\e726";
-}
-
-.icon-text_down:before {
-  content: "\e727";
-}
-
-.icon-text_right:before {
-  content: "\e728";
-}
-
-.icon-up:before {
-  content: "\e729";
-}
-
-.icon-icon_pdf:before {
-  content: "\e72a";
-}
-
-.icon-logo_black:before {
-  content: "\e719";
-}
-
-.icon-logo_white:before {
-  content: "\e71a";
-}
-
-.icon-more:before {
-  content: "\e717";
-}
-
-.icon-collect:before {
-  content: "\e718";
-}
-
-.icon-checkbox-n:before {
-  content: "\e715";
-}
-
-.icon-checkbox-s:before {
-  content: "\e716";
-}
-
-.icon-player_volume01:before {
-  content: "\e710";
-}
-
-.icon-player_volume02:before {
-  content: "\e712";
-}
-
-.icon-player_volume03:before {
-  content: "\e713";
-}
-
-.icon-player_close:before {
-  content: "\e70c";
-}
-
-.icon-material_text:before {
-  content: "\e70d";
-}
-
-.icon-player_playback:before {
-  content: "\e70f";
-}
-
-.icon-player_pause:before {
-  content: "\e711";
-}
-
-.icon-material_reduction:before {
-  content: "\e70e";
-}
-
-.icon-a-help_:before {
-  content: "\e70a";
-}
-
-.icon-eye_on:before {
-  content: "\e6f4";
-}
-
-.icon-eye_off:before {
-  content: "\e6f5";
-}
-
-.icon-show_more_finish:before {
-  content: "\e67a";
-}
-
-.icon-show_more_music:before {
-  content: "\e67c";
-}
-
-.icon-show_more:before {
-  content: "\e67e";
-}
-
-.icon-show_more_vr:before {
-  content: "\e67f";
-}
-
-.icon-top:before {
-  content: "\e6f3";
-}
-
-.icon-editor_play:before {
-  content: "\e6ef";
-}
-
-.icon-editor_3d:before {
-  content: "\e6f0";
-}
-
-.icon-editor_update:before {
-  content: "\e6f1";
-}
-
-.icon-editor_list_delete:before {
-  content: "\e6f2";
-}
-
-.icon-material_panoramic_picture:before {
-  content: "\e6e8";
-}
-
-.icon-material_preview_upload:before {
-  content: "\e6e9";
-}
-
-.icon-toast_yellow:before {
-  content: "\e6ea";
-}
-
-.icon-works_search:before {
-  content: "\e6eb";
-}
-
-.icon-works_share:before {
-  content: "\e6ec";
-}
-
-.icon-works_look:before {
-  content: "\e6ed";
-}
-
-.icon-works_delete:before {
-  content: "\e6ee";
-}
-
-.icon-editor_folder_off:before {
-  content: "\e6c5";
-}
-
-.icon-editor_folder_on:before {
-  content: "\e6c6";
-}
-
-.icon-editor_add:before {
-  content: "\e6c7";
-}
-
-.icon-editor_hot_add:before {
-  content: "\e6c8";
-}
-
-.icon-editor_off:before {
-  content: "\e6c9";
-}
-
-.icon-editor_list_add:before {
-  content: "\e6ca";
-}
-
-.icon-editor_on:before {
-  content: "\e6cb";
-}
-
-.icon-editor_playback:before {
-  content: "\e6cc";
-}
-
-.icon-editor_list_edit:before {
-  content: "\e6cd";
-}
-
-.icon-material_image:before {
-  content: "\e6ce";
-}
-
-.icon-material_music:before {
-  content: "\e6cf";
-}
-
-.icon-editor_panoramic:before {
-  content: "\e6d0";
-}
-
-.icon-editor_list_image:before {
-  content: "\e6d1";
-}
-
-.icon-material_preview_drop_out:before {
-  content: "\e6d2";
-}
-
-.icon-editor_preview:before {
-  content: "\e6d3";
-}
-
-.icon-editor_search:before {
-  content: "\e6d4";
-}
-
-.icon-material_operation_delete:before {
-  content: "\e6d5";
-}
-
-.icon-material_operation_editor:before {
-  content: "\e6d6";
-}
-
-.icon-editor_return:before {
-  content: "\e6d7";
-}
-
-.icon-material_preview_full_screen:before {
-  content: "\e6d8";
-}
-
-.icon-material_preview_enlarge:before {
-  content: "\e6d9";
-}
-
-.icon-editor_save:before {
-  content: "\e6da";
-}
-
-.icon-material_preview_next1:before {
-  content: "\e6db";
-}
-
-.icon-material_preview_next:before {
-  content: "\e6dc";
-}
-
-.icon-material_preview_narrow:before {
-  content: "\e6dd";
-}
-
-.icon-material_preview_previous:before {
-  content: "\e6de";
-}
-
-.icon-material_operation_image:before {
-  content: "\e6df";
-}
-
-.icon-material_video:before {
-  content: "\e6e0";
-}
-
-.icon-material_preview_upload_collect:before {
-  content: "\e6e1";
-}
-
-.icon-pop-ups_shut-down:before {
-  content: "\e6e2";
-}
-
-.icon-toast_green:before {
-  content: "\e6e3";
-}
-
-.icon-toast_red:before {
-  content: "\e6e4";
-}
-
-.icon-works_editor:before {
-  content: "\e6e5";
-}
-
-.icon-pop-ups_crop:before {
-  content: "\e6e6";
-}
-
-.icon-material_prompt:before {
-  content: "\e6e7";
-}
-
-.icon-bs_close:before {
-  content: "\e74c";
-}
-
-.icon-bs_folder:before {
-  content: "\e74d";
-}
-
-.icon-bs_list_menu:before {
-  content: "\e74e";
-}
-
-.icon-bs_list_edit:before {
-  content: "\e74f";
-}
-
-.icon-bs_list_info:before {
-  content: "\e750";
-}
-
-.icon-bs_list_play:before {
-  content: "\e751";
-}
-
-.icon-bs_list_stop:before {
-  content: "\e752";
-}
-
-.icon-bs_plus:before {
-  content: "\e753";
-}
-
-.icon-bs_reduce:before {
-  content: "\e754";
-}
-
-.icon-bs_next:before {
-  content: "\e755";
-}
-
-.icon-bs_nav_panorama:before {
-  content: "\e756";
-}
-
-.icon-bs_upload:before {
-  content: "\e757";
-}
-
-.icon-bs_search:before {
-  content: "\e758";
-}
-
-.icon-bs_nav_photo:before {
-  content: "\e759";
-}
-
-.icon-bs_nav_video:before {
-  content: "\e75a";
-}
-
-.icon-edit_add:before {
-  content: "\e75b";
-}
-
-.icon-bs_nav_sound:before {
-  content: "\e75c";
-}
-
-.icon-edit_input_arrow:before {
-  content: "\e75d";
-}
-
-.icon-edit_close:before {
-  content: "\e75e";
-}
-
-.icon-edit_case_delete:before {
-  content: "\e75f";
-}
-
-.icon-bs_share:before {
-  content: "\e760";
-}
-
-.icon-edit_input_unvisible:before {
-  content: "\e761";
-}
-
-.icon-edit_input_visible:before {
-  content: "\e762";
-}
-
-.icon-edit_list_more:before {
-  content: "\e763";
-}
-
-.icon-edit_list_default:before {
-  content: "\e764";
-}
-
-.icon-edit_nav_hotpoint:before {
-  content: "\e765";
-}
-
-.icon-edit_nav_base:before {
-  content: "\e766";
-}
-
-.icon-edit_next:before {
-  content: "\e767";
-}
-
-.icon-edit_jumpsview:before {
-  content: "\e768";
-}
-
-.icon-edit_pre:before {
-  content: "\e769";
-}
-
-.icon-edit_linkview:before {
-  content: "\e76a";
-}
-
-.icon-edit_select:before {
-  content: "\e76b";
-}
-
-.icon-edit_nav_scenenav:before {
-  content: "\e76c";
-}
-
-.icon-edit_soundview:before {
-  content: "\e76d";
-}
-
-.icon-edit_photoview:before {
-  content: "\e76e";
-}
-
-.icon-edit_search:before {
-  content: "\e76f";
-}
-
-.icon-edit_textview:before {
-  content: "\e770";
-}
-
-.icon-edit_nav_screen:before {
-  content: "\e771";
-}
-
-.icon-edit_type_3d:before {
-  content: "\e772";
-}
-
-.icon-edit_top_save:before {
-  content: "\e773";
-}
-
-.icon-edit_type_panorama:before {
-  content: "\e774";
-}
-
-.icon-edit_top_view:before {
-  content: "\e775";
-}
-
-.icon-edit_videoview:before {
-  content: "\e776";
-}
-
-.icon-list_views:before {
-  content: "\e777";
-}
-
-.icon-nav_scene_down:before {
-  content: "\e778";
-}
-
-.icon-tool_about:before {
-  content: "\e779";
-}
-
-.icon-nav_scene_up:before {
-  content: "\e77a";
-}
-
-.icon-tool_vr:before {
-  content: "\e77b";
-}
-
-.icon-tool_window:before {
-  content: "\e77c";
-}
-
-.icon-tool_full:before {
-  content: "\e77d";
-}
-
-.icon-img_logo:before {
-  content: "\e77e";
-}
-
-.icon-bs_list_cover:before {
-  content: "\e77f";
-}
-
-.icon-list_delete:before {
-  content: "\e780";
-}
-
-.icon-bs_stop:before {
-  content: "\e781";
-}
-
-.icon-bs_play:before {
-  content: "\e782";
-}
-
-.icon-bs_list_circle:before {
-  content: "\e783";
-}
-
-.icon-show_playback:before {
-  content: "\e681";
-}
-
-.icon-show_suspension:before {
-  content: "\e683";
-}
-
-.icon-show_3d_normal:before {
-  content: "\e677";
-}
-
-.icon-show_plane_normal:before {
-  content: "\e67d";
-}
-
-.icon-show_roaming_selected:before {
-  content: "\e682";
-}
-
-.icon-show_plane_selected:before {
-  content: "\e684";
-}
-
-.icon-show_3d_selected:before {
-  content: "\e685";
-}
-
-.icon-show_roaming_normal:before {
-  content: "\e686";
-}
-
-.icon-show_function_collect:before {
-  content: "\e687";
-}
-
-.icon-show_drop-down:before {
-  content: "\e673";
-}
-

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 1
packages/qjkankan-editor/public/static/lib/iconfontQJ1.1.0/iconfont.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 1024
packages/qjkankan-editor/public/static/lib/iconfontQJ1.1.0/iconfont.json


BIN
packages/qjkankan-editor/public/static/lib/iconfontQJ1.1.0/iconfont.ttf


BIN
packages/qjkankan-editor/public/static/lib/iconfontQJ1.1.0/iconfont.woff


BIN
packages/qjkankan-editor/public/static/lib/iconfontQJ1.1.0/iconfont.woff2


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 193
packages/qjkankan-editor/public/static/lib/iconfontVR/iconfont.css


BIN
packages/qjkankan-editor/public/static/lib/iconfontVR/iconfont.eot


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 1
packages/qjkankan-editor/public/static/lib/iconfontVR/iconfont.js


+ 0 - 317
packages/qjkankan-editor/public/static/lib/iconfontVR/iconfont.json

@@ -1,317 +0,0 @@
-{
-  "id": "2410347",
-  "name": "四维·全景看看",
-  "font_family": "iconfont",
-  "css_prefix_text": "icon",
-  "description": "",
-  "glyphs": [
-    {
-      "icon_id": "20335636",
-      "name": "list_views",
-      "font_class": "list_views",
-      "unicode": "e777",
-      "unicode_decimal": 59255
-    },
-    {
-      "icon_id": "20281217",
-      "name": "edit_top_view",
-      "font_class": "edit_top_view",
-      "unicode": "e775",
-      "unicode_decimal": 59253
-    },
-    {
-      "icon_id": "20281218",
-      "name": "edit_videoview",
-      "font_class": "edit_videoview",
-      "unicode": "e776",
-      "unicode_decimal": 59254
-    },
-    {
-      "icon_id": "20281176",
-      "name": "bs_close",
-      "font_class": "bs_close",
-      "unicode": "e74c",
-      "unicode_decimal": 59212
-    },
-    {
-      "icon_id": "20281177",
-      "name": "bs_folder",
-      "font_class": "bs_folder",
-      "unicode": "e74d",
-      "unicode_decimal": 59213
-    },
-    {
-      "icon_id": "20281178",
-      "name": "bs_list_menu",
-      "font_class": "bs_list_menu",
-      "unicode": "e74e",
-      "unicode_decimal": 59214
-    },
-    {
-      "icon_id": "20281179",
-      "name": "bs_list_edit",
-      "font_class": "bs_list_edit",
-      "unicode": "e74f",
-      "unicode_decimal": 59215
-    },
-    {
-      "icon_id": "20281180",
-      "name": "bs_list_info",
-      "font_class": "bs_list_info",
-      "unicode": "e750",
-      "unicode_decimal": 59216
-    },
-    {
-      "icon_id": "20281181",
-      "name": "bs_list_play",
-      "font_class": "bs_list_play",
-      "unicode": "e751",
-      "unicode_decimal": 59217
-    },
-    {
-      "icon_id": "20281182",
-      "name": "bs_list_stop",
-      "font_class": "bs_list_stop",
-      "unicode": "e752",
-      "unicode_decimal": 59218
-    },
-    {
-      "icon_id": "20281183",
-      "name": "bs_plus",
-      "font_class": "bs_plus",
-      "unicode": "e753",
-      "unicode_decimal": 59219
-    },
-    {
-      "icon_id": "20281184",
-      "name": "bs_reduce",
-      "font_class": "bs_reduce",
-      "unicode": "e754",
-      "unicode_decimal": 59220
-    },
-    {
-      "icon_id": "20281185",
-      "name": "bs_next",
-      "font_class": "bs_next",
-      "unicode": "e755",
-      "unicode_decimal": 59221
-    },
-    {
-      "icon_id": "20281186",
-      "name": "bs_nav_panorama",
-      "font_class": "bs_nav_panorama",
-      "unicode": "e756",
-      "unicode_decimal": 59222
-    },
-    {
-      "icon_id": "20281187",
-      "name": "bs_upload",
-      "font_class": "bs_upload",
-      "unicode": "e757",
-      "unicode_decimal": 59223
-    },
-    {
-      "icon_id": "20281188",
-      "name": "bs_search",
-      "font_class": "bs_search",
-      "unicode": "e758",
-      "unicode_decimal": 59224
-    },
-    {
-      "icon_id": "20281189",
-      "name": "bs_nav_photo",
-      "font_class": "bs_nav_photo",
-      "unicode": "e759",
-      "unicode_decimal": 59225
-    },
-    {
-      "icon_id": "20281190",
-      "name": "bs_nav_video",
-      "font_class": "bs_nav_video",
-      "unicode": "e75a",
-      "unicode_decimal": 59226
-    },
-    {
-      "icon_id": "20281191",
-      "name": "edit_add",
-      "font_class": "edit_add",
-      "unicode": "e75b",
-      "unicode_decimal": 59227
-    },
-    {
-      "icon_id": "20281192",
-      "name": "bs_nav_sound",
-      "font_class": "bs_nav_sound",
-      "unicode": "e75c",
-      "unicode_decimal": 59228
-    },
-    {
-      "icon_id": "20281193",
-      "name": "edit_input_arrow",
-      "font_class": "edit_input_arrow",
-      "unicode": "e75d",
-      "unicode_decimal": 59229
-    },
-    {
-      "icon_id": "20281194",
-      "name": "edit_close",
-      "font_class": "edit_close",
-      "unicode": "e75e",
-      "unicode_decimal": 59230
-    },
-    {
-      "icon_id": "20281195",
-      "name": "edit_case_delete",
-      "font_class": "edit_case_delete",
-      "unicode": "e75f",
-      "unicode_decimal": 59231
-    },
-    {
-      "icon_id": "20281196",
-      "name": "bs_share",
-      "font_class": "bs_share",
-      "unicode": "e760",
-      "unicode_decimal": 59232
-    },
-    {
-      "icon_id": "20281197",
-      "name": "edit_input_unvisible",
-      "font_class": "edit_input_unvisible",
-      "unicode": "e761",
-      "unicode_decimal": 59233
-    },
-    {
-      "icon_id": "20281198",
-      "name": "edit_input_visible",
-      "font_class": "edit_input_visible",
-      "unicode": "e762",
-      "unicode_decimal": 59234
-    },
-    {
-      "icon_id": "20281199",
-      "name": "edit_list_more",
-      "font_class": "edit_list_more",
-      "unicode": "e763",
-      "unicode_decimal": 59235
-    },
-    {
-      "icon_id": "20281200",
-      "name": "edit_list_default",
-      "font_class": "edit_list_default",
-      "unicode": "e764",
-      "unicode_decimal": 59236
-    },
-    {
-      "icon_id": "20281201",
-      "name": "edit_nav_hotpoint",
-      "font_class": "edit_nav_hotpoint",
-      "unicode": "e765",
-      "unicode_decimal": 59237
-    },
-    {
-      "icon_id": "20281202",
-      "name": "edit_nav_base",
-      "font_class": "edit_nav_base",
-      "unicode": "e766",
-      "unicode_decimal": 59238
-    },
-    {
-      "icon_id": "20281203",
-      "name": "edit_next",
-      "font_class": "edit_next",
-      "unicode": "e767",
-      "unicode_decimal": 59239
-    },
-    {
-      "icon_id": "20281204",
-      "name": "edit_jumpsview",
-      "font_class": "edit_jumpsview",
-      "unicode": "e768",
-      "unicode_decimal": 59240
-    },
-    {
-      "icon_id": "20281205",
-      "name": "edit_pre",
-      "font_class": "edit_pre",
-      "unicode": "e769",
-      "unicode_decimal": 59241
-    },
-    {
-      "icon_id": "20281206",
-      "name": "edit_linkview",
-      "font_class": "edit_linkview",
-      "unicode": "e76a",
-      "unicode_decimal": 59242
-    },
-    {
-      "icon_id": "20281207",
-      "name": "edit_select",
-      "font_class": "edit_select",
-      "unicode": "e76b",
-      "unicode_decimal": 59243
-    },
-    {
-      "icon_id": "20281208",
-      "name": "edit_nav_scenenav",
-      "font_class": "edit_nav_scenenav",
-      "unicode": "e76c",
-      "unicode_decimal": 59244
-    },
-    {
-      "icon_id": "20281209",
-      "name": "edit_soundview",
-      "font_class": "edit_soundview",
-      "unicode": "e76d",
-      "unicode_decimal": 59245
-    },
-    {
-      "icon_id": "20281210",
-      "name": "edit_photoview",
-      "font_class": "edit_photoview",
-      "unicode": "e76e",
-      "unicode_decimal": 59246
-    },
-    {
-      "icon_id": "20281211",
-      "name": "edit_search",
-      "font_class": "edit_search",
-      "unicode": "e76f",
-      "unicode_decimal": 59247
-    },
-    {
-      "icon_id": "20281212",
-      "name": "edit_textview",
-      "font_class": "edit_textview",
-      "unicode": "e770",
-      "unicode_decimal": 59248
-    },
-    {
-      "icon_id": "20281213",
-      "name": "edit_nav_screen",
-      "font_class": "edit_nav_screen",
-      "unicode": "e771",
-      "unicode_decimal": 59249
-    },
-    {
-      "icon_id": "20281214",
-      "name": "edit_type_3d",
-      "font_class": "edit_type_3d",
-      "unicode": "e772",
-      "unicode_decimal": 59250
-    },
-    {
-      "icon_id": "20281215",
-      "name": "edit_top_save",
-      "font_class": "edit_top_save",
-      "unicode": "e773",
-      "unicode_decimal": 59251
-    },
-    {
-      "icon_id": "20281216",
-      "name": "edit_type_panorama",
-      "font_class": "edit_type_panorama",
-      "unicode": "e774",
-      "unicode_decimal": 59252
-    }
-  ]
-}

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 158
packages/qjkankan-editor/public/static/lib/iconfontVR/iconfont.svg


BIN
packages/qjkankan-editor/public/static/lib/iconfontVR/iconfont.ttf


BIN
packages/qjkankan-editor/public/static/lib/iconfontVR/iconfont.woff


BIN
packages/qjkankan-editor/public/static/lib/iconfontVR/iconfont.woff2


BIN
packages/qjkankan-editor/public/static/panoassets/images/hotspot/image_place_holder.png


BIN
packages/qjkankan-editor/public/static/panoassets/images/hotspot/image_place_holder_1.png


+ 238 - 238
packages/qjkankan-editor/public/static/template/static/js/vrshow.js

@@ -6,36 +6,36 @@ var _userList;
 var plugins_init_function = new Array();//接收显示时的init方法
 
 //krpano loadcomplete调用
-function showPanoBtns(sceneCount){
+function showPanoBtns(sceneCount) {
     if (sceneCount > 1) {
         $(".vrshow_container_3_min .img_desc_container_min:eq(0)").show();
-    }else{
+    } else {
         $(".vrshow_container_3_min .img_desc_container_min:eq(0)").hide();
     }
     $("#panoBtns").show();
 }
 
-function fullscreen(el){
+function fullscreen(el) {
     //krpano.call("switch(fullscreen);");
     //launchFullScreen(document.documentElement);
-    if($(el).hasClass('btn_fullscreen')){
+    if ($(el).hasClass('btn_fullscreen')) {
         launchFullScreen(document.getElementById('fullscreenid'));
         var krpano = document.getElementById('krpanoSWFObject');
         krpano.call("skin_showthumbs(false);");
-    }else{
+    } else {
         exitFullscreen();
     }
     toggleFullscreenBtn(el);
 }
 
 function launchFullScreen(element) {
-    if(element.requestFullscreen) {
+    if (element.requestFullscreen) {
         element.requestFullscreen();
-    } else if(element.mozRequestFullScreen) {
+    } else if (element.mozRequestFullScreen) {
         element.mozRequestFullScreen();
-    } else if(element.webkitRequestFullscreen) {
+    } else if (element.webkitRequestFullscreen) {
         element.webkitRequestFullscreen();
-    } else if(element.msRequestFullscreen) {
+    } else if (element.msRequestFullscreen) {
         element.msRequestFullscreen();
     }
 }
@@ -55,27 +55,27 @@ function exitFullscreen() {
     }
 }
 
-function toggleFullscreenBtn(el){
-    if($(el).hasClass("btn_fullscreen")){
+function toggleFullscreenBtn(el) {
+    if ($(el).hasClass("btn_fullscreen")) {
         $(el).removeClass("btn_fullscreen");
         $(el).addClass("btn_fullscreen_off");
-    }else{
+    } else {
         $(el).removeClass("btn_fullscreen_off");
         $(el).addClass("btn_fullscreen");
     }
 }
 
-function toggleBtns(flag){
-    if(flag){
+function toggleBtns(flag) {
+    if (flag) {
         $("#panoBtns").show();
-    }else{
+    } else {
         $("#panoBtns").hide();
         var krpano = document.getElementById('krpanoSWFObject');
         krpano.call('skin_showthumbs(false);');
     }
 }
 
-function showWebVR(){
+function showWebVR() {
     var krpano = document.getElementById('krpanoSWFObject');
     var webvr = krpano.get("webvr");
     webvr.entervr();
@@ -83,7 +83,7 @@ function showWebVR(){
 
 
 
-function showthumbs(){
+function showthumbs() {
     var krpano = document.getElementById('krpanoSWFObject');
     krpano.call("skin_showthumbs();");
 }
@@ -95,7 +95,7 @@ function hidePictext() {
     toggleBtns(true);
 }
 
-function showPictext(title,content) {
+function showPictext(title, content) {
     toggleBtns(false);
     //var data = $("body").data("panoData");
     // $('#pictextWorkName').text('');
@@ -107,7 +107,7 @@ function showPictext(title,content) {
 }
 
 //krpano调用 初始化高级设置
-function initAdvancedSetting(sceneName){
+function initAdvancedSetting(sceneName) {
     //initViewSetting(sceneName);
     initEffectSetting(sceneName);
     initHotspotSetting(sceneName);
@@ -117,271 +117,271 @@ function initAdvancedSetting(sceneName){
     // initAuthourInfo(sceneName);
 }
 
-function initTourGuideSetting(sceneName){
+function initTourGuideSetting(sceneName) {
     var krpano = document.getElementById('krpanoSWFObject');
     var tourGuideObj = $("body").data("panoData").tour_guide;
-    if(tourGuideObj.points.length > 0){
+    if (tourGuideObj.points.length > 0) {
         $('#pano .vrshow_tour_btn').show();
-    }else{
+    } else {
         $('#pano .vrshow_tour_btn').hide();
     }
 }
 
 var lsTourGuideObj = null;
-function startTourGuide(){
+function startTourGuide() {
     toggleBtns(false);
     lsTourGuideObj = $("body").data("panoData").tour_guide;
     var krpano = document.getElementById('krpanoSWFObject');
     //krpano.call('showlog(true)');
     var curSceneName = krpano.get('xml.scene');
     var firstPoint = lsTourGuideObj.points[0];
-    if(lsTourGuideObj.useStartImg){
-        krpano.call('show_tour_guide_alert('+lsTourGuideObj.startImgUrl+');');
+    if (lsTourGuideObj.useStartImg) {
+        krpano.call('show_tour_guide_alert(' + lsTourGuideObj.startImgUrl + ');');
     }
-    if(this.sceneName != curSceneName){
-        krpano.call('loadscene('+firstPoint.sceneName+', null, MERGE);');
+    if (this.sceneName != curSceneName) {
+        krpano.call('loadscene(' + firstPoint.sceneName + ', null, MERGE);');
     }
     var curfov = krpano.get('view.fov');
-    krpano.call('lookto('+firstPoint.ath+','+firstPoint.atv+','+curfov+',smooth(720,-720,720),true,true,js(looktoCallBack('+1+')));');
+    krpano.call('lookto(' + firstPoint.ath + ',' + firstPoint.atv + ',' + curfov + ',smooth(720,-720,720),true,true,js(looktoCallBack(' + 1 + ')));');
 }
 
-function looktoCallBack(idx){
+function looktoCallBack(idx) {
     var krpano = document.getElementById('krpanoSWFObject');
-    if(idx < lsTourGuideObj.points.length){
+    if (idx < lsTourGuideObj.points.length) {
         var pointObj = lsTourGuideObj.points[idx];
         var curSceneName = krpano.get('xml.scene');
         var curfov = krpano.get('view.fov');
-        if(pointObj.sceneName != curSceneName){
-            krpano.call('loadscene('+pointObj.sceneName+', null, MERGE);');
-            krpano.call('lookto('+pointObj.ath+','+pointObj.atv+','+curfov+',smooth(720,-720,720),true,true,js(looktoCallBack('+(parseInt(idx)+1)+')));');
-        }else{
-            krpano.call('lookto('+pointObj.ath+','+pointObj.atv+','+curfov+',tween(easeInOutQuad,'+parseInt(pointObj.moveTime)+'),true,true,js(looktoCallBack('+(parseInt(idx)+1)+')));');
+        if (pointObj.sceneName != curSceneName) {
+            krpano.call('loadscene(' + pointObj.sceneName + ', null, MERGE);');
+            krpano.call('lookto(' + pointObj.ath + ',' + pointObj.atv + ',' + curfov + ',smooth(720,-720,720),true,true,js(looktoCallBack(' + (parseInt(idx) + 1) + ')));');
+        } else {
+            krpano.call('lookto(' + pointObj.ath + ',' + pointObj.atv + ',' + curfov + ',tween(easeInOutQuad,' + parseInt(pointObj.moveTime) + '),true,true,js(looktoCallBack(' + (parseInt(idx) + 1) + ')));');
         }
-    }else{
-        if(lsTourGuideObj.useEndImg){
-            krpano.call('show_tour_guide_alert('+lsTourGuideObj.endImgUrl+');');
+    } else {
+        if (lsTourGuideObj.useEndImg) {
+            krpano.call('show_tour_guide_alert(' + lsTourGuideObj.endImgUrl + ');');
         }
         toggleBtns(true);
     }
 }
 
-function initSandTableSetting(sceneName){
+function initSandTableSetting(sceneName) {
     var krpano = document.getElementById('krpanoSWFObject');
     var sandTableObj = $("body").data("panoData").sand_table;
     var existFlag = false;
-    $(sandTableObj.sandTables).each(function(idx){
-        if(this.sceneOpt[sceneName]){
+    $(sandTableObj.sandTables).each(function (idx) {
+        if (this.sceneOpt[sceneName]) {
             //设置背景图片
-            krpano.set("layer[map].url",this.imgPath);
-            $.each(this.sceneOpt,function(sceneName,value){
-                var spotName = 'spot_'+sceneName;
-                addRadarSpot(spotName,value.krpLeft,value.krpTop);
+            krpano.set("layer[map].url", this.imgPath);
+            $.each(this.sceneOpt, function (sceneName, value) {
+                var spotName = 'spot_' + sceneName;
+                addRadarSpot(spotName, value.krpLeft, value.krpTop);
             });
             var hlookatIncre = krpano.get('view.hlookat') - this.sceneOpt[sceneName].hlookat;
-            krpano.call('activatespot('+(parseFloat(this.sceneOpt[sceneName].rotate)+parseFloat(hlookatIncre))+');');
+            krpano.call('activatespot(' + (parseFloat(this.sceneOpt[sceneName].rotate) + parseFloat(hlookatIncre)) + ');');
             existFlag = true;
             return false;
         }
     });
-    if(!existFlag){
+    if (!existFlag) {
         $('.vrshow_radar_btn').hide();
-        krpano.set('layer[mapcontainer].visible',false);
-    }else{
+        krpano.set('layer[mapcontainer].visible', false);
+    } else {
         $('.vrshow_radar_btn').show();
-        if(sandTableObj.isOpen){
-            krpano.set('layer[mapcontainer].visible',true);
+        if (sandTableObj.isOpen) {
+            krpano.set('layer[mapcontainer].visible', true);
         }
     }
 }
 
-function toggleKrpSandTable(){
+function toggleKrpSandTable() {
     var krpano = document.getElementById('krpanoSWFObject');
     var isVisible = krpano.get('layer[mapcontainer].visible');
-    if(isVisible){
-        krpano.set('layer[mapcontainer].visible',false);
-    }else{
-        krpano.set('layer[mapcontainer].visible',true);
+    if (isVisible) {
+        krpano.set('layer[mapcontainer].visible', false);
+    } else {
+        krpano.set('layer[mapcontainer].visible', true);
     }
 }
 
-function addRadarSpot(name,x,y){
+function addRadarSpot(name, x, y) {
     //console.log(x+','+y);
     var krpano = document.getElementById('krpanoSWFObject');
-    krpano.call('addlayer('+name+');');
-    krpano.set('layer['+name+'].style','spot');
-    krpano.set('layer['+name+'].x',x);
-    krpano.set('layer['+name+'].y',y);
-    krpano.set('layer['+name+'].parent','radarmask');
-    krpano.call('layer['+name+'].loadstyle(spot);');
+    krpano.call('addlayer(' + name + ');');
+    krpano.set('layer[' + name + '].style', 'spot');
+    krpano.set('layer[' + name + '].x', x);
+    krpano.set('layer[' + name + '].y', y);
+    krpano.set('layer[' + name + '].parent', 'radarmask');
+    krpano.call('layer[' + name + '].loadstyle(spot);');
     //krpano.set('layer['+name+'].keep','true');
     //krpano.set('layer['+name+'].visible','true');
 }
 
-function initHotspotSetting(sceneName){
+function initHotspotSetting(sceneName) {
     var krpano = document.getElementById('krpanoSWFObject');
     var hotspotObj = ($("body").data("panoData").hotspot)[sceneName];
-    if(hotspotObj){
-        $.each(hotspotObj,function(key,value){
-            if(key == 'scene'){
-                $(value).each(function(idx){
-                    krpano.call('addSceneChangeHotSpot("'+this.imgPath+'","'+ (this.name) +'",'+this.linkedscene+','+(this.ath)+','+(this.atv)+','+this.isDynamic+',false,true)');
+    if (hotspotObj) {
+        $.each(hotspotObj, function (key, value) {
+            if (key == 'scene') {
+                $(value).each(function (idx) {
+                    krpano.call('addSceneChangeHotSpot("' + this.imgPath + '","' + (this.name) + '",' + this.linkedscene + ',' + (this.ath) + ',' + (this.atv) + ',' + this.isDynamic + ',false,true)');
                 });
-            }else if(key == 'link'){
-                $(value).each(function(idx){
-                    krpano.call('addLinkHotSpot("'+this.imgPath+'","'+ (this.name) +'",'+html_encode(this.hotspotTitle)+','+(this.ath)+','+(this.atv)+','+this.isDynamic+',false,true,'+this.link+','+this.isShowSpotName+')');
+            } else if (key == 'link') {
+                $(value).each(function (idx) {
+                    krpano.call('addLinkHotSpot("' + this.imgPath + '","' + (this.name) + '",' + html_encode(this.hotspotTitle) + ',' + (this.ath) + ',' + (this.atv) + ',' + this.isDynamic + ',false,true,' + this.link + ',' + this.isShowSpotName + ')');
                 });
-            }else if(key == 'image'){
-                $(value).each(function(idx){
-                    krpano.call('addImgHotSpot("'+this.imgPath+'","'+ (this.name) +'",'+html_encode(this.hotspotTitle)+','+(this.ath)+','+(this.atv)+','+this.isDynamic+',false,true,'+this.galleryName+','+this.isShowSpotName+')');
+            } else if (key == 'image') {
+                $(value).each(function (idx) {
+                    krpano.call('addImgHotSpot("' + this.imgPath + '","' + (this.name) + '",' + html_encode(this.hotspotTitle) + ',' + (this.ath) + ',' + (this.atv) + ',' + this.isDynamic + ',false,true,' + this.galleryName + ',' + this.isShowSpotName + ')');
                 });
-            }else if(key == 'text'){
-                $(value).each(function(idx){
-                    krpano.call('addWordHotSpot("'+this.imgPath+'","'+ (this.name) +'",'+html_encode(this.hotspotTitle)+','+(this.ath)+','+(this.atv)+','+this.isDynamic+',false,true,'+html_encode(this.wordContent)+','+this.isShowSpotName+')');
+            } else if (key == 'text') {
+                $(value).each(function (idx) {
+                    krpano.call('addWordHotSpot("' + this.imgPath + '","' + (this.name) + '",' + html_encode(this.hotspotTitle) + ',' + (this.ath) + ',' + (this.atv) + ',' + this.isDynamic + ',false,true,' + html_encode(this.wordContent) + ',' + this.isShowSpotName + ')');
                 });
-            }else if(key == 'voice'){
-                $(value).each(function(idx){
-                    krpano.call('addVoiceHotSpot("'+this.imgPath+'","'+ (this.name) +'",'+html_encode(this.hotspotTitle)+','+(this.ath)+','+(this.atv)+','+this.isDynamic+',false,true,'+this.musicSrc+','+this.isShowSpotName+')');
+            } else if (key == 'voice') {
+                $(value).each(function (idx) {
+                    krpano.call('addVoiceHotSpot("' + this.imgPath + '","' + (this.name) + '",' + html_encode(this.hotspotTitle) + ',' + (this.ath) + ',' + (this.atv) + ',' + this.isDynamic + ',false,true,' + this.musicSrc + ',' + this.isShowSpotName + ')');
                 });
-            }else if(key == 'around'){
-                $(value).each(function(idx){
-                    krpano.call('addAroundHotSpot("'+this.imgPath+'","'+ (this.name) +'",'+html_encode(this.hotspotTitle)+','+(this.ath)+','+(this.atv)+','+this.isDynamic+',false,true,'+this.aroundPath+','+this.fileCount+','+this.isShowSpotName+')');
+            } else if (key == 'around') {
+                $(value).each(function (idx) {
+                    krpano.call('addAroundHotSpot("' + this.imgPath + '","' + (this.name) + '",' + html_encode(this.hotspotTitle) + ',' + (this.ath) + ',' + (this.atv) + ',' + this.isDynamic + ',false,true,' + this.aroundPath + ',' + this.fileCount + ',' + this.isShowSpotName + ')');
                 });
-            }else if(key == 'imgtext'){
-                $(value).each(function(idx){
-                    krpano.call('addImgTextHotSpot("'+this.imgPath+'","'+ (this.name) +'",'+html_encode(this.hotspotTitle)+','+(this.ath)+','+(this.atv)+','+this.isDynamic+',false,true,'+imgtext_encode(this.imgtext_wordContent)+','+this.isShowSpotName+')');
+            } else if (key == 'imgtext') {
+                $(value).each(function (idx) {
+                    krpano.call('addImgTextHotSpot("' + this.imgPath + '","' + (this.name) + '",' + html_encode(this.hotspotTitle) + ',' + (this.ath) + ',' + (this.atv) + ',' + this.isDynamic + ',false,true,' + imgtext_encode(this.imgtext_wordContent) + ',' + this.isShowSpotName + ')');
                 });
-            }else if(key == 'obj'){
-                $(value).each(function(idx){
-                    krpano.call('addObjHotSpot("'+this.imgPath+'","'+ (this.name) +'",'+html_encode(this.hotspotTitle)+','+(this.ath)+','+(this.atv)+','+this.isDynamic+',false,true,'+this.objid+','+this.isShowSpotName+')');
+            } else if (key == 'obj') {
+                $(value).each(function (idx) {
+                    krpano.call('addObjHotSpot("' + this.imgPath + '","' + (this.name) + '",' + html_encode(this.hotspotTitle) + ',' + (this.ath) + ',' + (this.atv) + ',' + this.isDynamic + ',false,true,' + this.objid + ',' + this.isShowSpotName + ')');
                 });
-            }else if(key == 'video'){
-                $(value).each(function(idx){
-                    krpano.call('addVideoHotSpot("'+this.imgPath+'","'+ (this.name) +'",'+html_encode(this.hotspotTitle)+','+(this.ath)+','+(this.atv)+','+this.isDynamic+',false,true,'+this.location+','+this.isShowSpotName+')');
+            } else if (key == 'video') {
+                $(value).each(function (idx) {
+                    krpano.call('addVideoHotSpot("' + this.imgPath + '","' + (this.name) + '",' + html_encode(this.hotspotTitle) + ',' + (this.ath) + ',' + (this.atv) + ',' + this.isDynamic + ',false,true,' + this.location + ',' + this.isShowSpotName + ')');
                 });
             }
         });
     }
 }
 
-function initEffectSetting(sceneName){
+function initEffectSetting(sceneName) {
     var krpano = document.getElementById('krpanoSWFObject');
     var effectObj = null;
     var effectData = $("body").data("panoData").special_effects;
-    $(effectData.effectSettings).each(function(idx){
-        if(this.sceneName == sceneName){
+    $(effectData.effectSettings).each(function (idx) {
+        if (this.sceneName == sceneName) {
             effectObj = this;
             return false;
         }
     });
-    if(effectObj){
-        if(effectObj.isOpen){
-            if(effectObj.effectType == 'sunshine'){
+    if (effectObj) {
+        if (effectObj.isOpen) {
+            if (effectObj.effectType == 'sunshine') {
                 //krpano.set('lensflares[obj].item[lensitemobj].scene',sceneName);
                 //krpano.set('lensflares[obj].item[lensitemobj].ath',effectObj.ath);
                 //krpano.set('lensflares[obj].item[lensitemobj].atv',effectObj.atv);
-                krpano.call('addLensflares('+effectObj.ath+','+effectObj.atv+')');
-            }else{
-                krpano.call('addEffect("'+effectObj.effectType+'","'+effectObj.effectImgPath+'")');
+                krpano.call('addLensflares(' + effectObj.ath + ',' + effectObj.atv + ')');
+            } else {
+                krpano.call('addEffect("' + effectObj.effectType + '","' + effectObj.effectImgPath + '")');
             }
         }
     }
 }
 
-function littlePlaneOpen(sceneName){
+function littlePlaneOpen(sceneName) {
     var krpano = document.getElementById('krpanoSWFObject');
     var lookatObj = null;
     var angleData = $("body").data("panoData").angle_of_view;
-    $(angleData.viewSettings).each(function(idx){
-        if(this.sceneName == sceneName){
+    $(angleData.viewSettings).each(function (idx) {
+        if (this.sceneName == sceneName) {
             lookatObj = this;
             return false;
         }
     });
-    if(lookatObj){
-        krpano.set('view.vlookat',lookatObj.vlookat);
-        krpano.set('view.hlookat',lookatObj.hlookat);
-        krpano.set('view.fov',lookatObj.fov);
-        krpano.set('view.fovmax',lookatObj.fovmax);
-        if(lookatObj.hlookatmin){
-            krpano.set('view.hlookatmin',lookatObj.hlookatmin);
+    if (lookatObj) {
+        krpano.set('view.vlookat', lookatObj.vlookat);
+        krpano.set('view.hlookat', lookatObj.hlookat);
+        krpano.set('view.fov', lookatObj.fov);
+        krpano.set('view.fovmax', lookatObj.fovmax);
+        if (lookatObj.hlookatmin) {
+            krpano.set('view.hlookatmin', lookatObj.hlookatmin);
         }
-        if(lookatObj.hlookatmax){
-            krpano.set('view.hlookatmax',lookatObj.hlookatmax);
+        if (lookatObj.hlookatmax) {
+            krpano.set('view.hlookatmax', lookatObj.hlookatmax);
         }
-        krpano.call('skin_setup_littleplanetintro('+lookatObj.fovmin+','+(-1*lookatObj.vlookatmax)+','+(-1*lookatObj.vlookatmin)+','+(lookatObj.keepView ? "off" : "0.0")+');');
-    }else{
+        krpano.call('skin_setup_littleplanetintro(' + lookatObj.fovmin + ',' + (-1 * lookatObj.vlookatmax) + ',' + (-1 * lookatObj.vlookatmin) + ',' + (lookatObj.keepView ? "off" : "0.0") + ');');
+    } else {
         krpano.call('skin_setup_littleplanetintro(5,-90,90,"0.0");');
     }
 }
 
 //场景载入时加载视角设置
-function initViewSetting(sceneName){
+function initViewSetting(sceneName) {
     var krpano = document.getElementById('krpanoSWFObject');
     var lookatObj = null;
     var angleData = $("body").data("panoData").angle_of_view;
-    $(angleData.viewSettings).each(function(idx){
-        if(this.sceneName == sceneName){
+    $(angleData.viewSettings).each(function (idx) {
+        if (this.sceneName == sceneName) {
             lookatObj = this;
             return false;
         }
     });
-    if(lookatObj){
-        krpano.set('view.vlookat',lookatObj.vlookat);
-        krpano.set('view.hlookat',lookatObj.hlookat);
-        krpano.set('view.fov',lookatObj.fov);
-        krpano.set('view.fovmin',lookatObj.fovmin);
-        krpano.set('view.fovmax',lookatObj.fovmax);
-        krpano.set('view.vlookatmin',-1*lookatObj.vlookatmax);
-        krpano.set('view.vlookatmax',-1*lookatObj.vlookatmin);
-        krpano.set('autorotate.horizon',lookatObj.keepView ? "off" : "0.0");
-        if(lookatObj.hlookatmin){
-            krpano.set('view.hlookatmin',lookatObj.hlookatmin);
+    if (lookatObj) {
+        krpano.set('view.vlookat', lookatObj.vlookat);
+        krpano.set('view.hlookat', lookatObj.hlookat);
+        krpano.set('view.fov', lookatObj.fov);
+        krpano.set('view.fovmin', lookatObj.fovmin);
+        krpano.set('view.fovmax', lookatObj.fovmax);
+        krpano.set('view.vlookatmin', -1 * lookatObj.vlookatmax);
+        krpano.set('view.vlookatmax', -1 * lookatObj.vlookatmin);
+        krpano.set('autorotate.horizon', lookatObj.keepView ? "off" : "0.0");
+        if (lookatObj.hlookatmin) {
+            krpano.set('view.hlookatmin', lookatObj.hlookatmin);
         }
-        if(lookatObj.hlookatmax){
-            krpano.set('view.hlookatmax',lookatObj.hlookatmax);
+        if (lookatObj.hlookatmax) {
+            krpano.set('view.hlookatmax', lookatObj.hlookatmax);
         }
     }
 }
 
-function loadGallery(){
+function loadGallery() {
     var krpano = document.getElementById('krpanoSWFObject');
     var hotspotObj = $("body").data("panoData").hotspot;
     //var xmlStr = '';
-    $.each(hotspotObj,function(sceneName,value){
-        if(value){
-            $(value.image).each(function(idx){
-                var xmlStr = '<gallery name="'+this.galleryName+'" title="">';
-                $(this.imgs).each(function(idx){
-                    xmlStr += '<img name="img'+idx+'" url="'+this.src+'" title="" />';
+    $.each(hotspotObj, function (sceneName, value) {
+        if (value) {
+            $(value.image).each(function (idx) {
+                var xmlStr = '<gallery name="' + this.galleryName + '" title="">';
+                $(this.imgs).each(function (idx) {
+                    xmlStr += '<img name="img' + idx + '" url="' + this.src + '" title="" />';
                 });
                 xmlStr += '</gallery>';
-                krpano.call('loadxml('+xmlStr+');');
+                krpano.call('loadxml(' + xmlStr + ');');
             });
         }
     });
 }
 
-function reloadGallery(gallery){
+function reloadGallery(gallery) {
     var krpano = document.getElementById('krpanoSWFObject');
     var ua = window.navigator.userAgent.toLowerCase();
-    if(typeof(wx)!='undefined' && ua.match(/MicroMessenger/i) == 'micromessenger'){
+    if (typeof (wx) != 'undefined' && ua.match(/MicroMessenger/i) == 'micromessenger') {
         //整合gallery的图片到数组 
         var urls = new Array();
-        for(var i=0; i<krpano.get('gallery['+gallery+'].img.count'); i++){
-            urls.push(krpano.get('gallery['+gallery+'].img['+i+'].url'));
+        for (var i = 0; i < krpano.get('gallery[' + gallery + '].img.count'); i++) {
+            urls.push(krpano.get('gallery[' + gallery + '].img[' + i + '].url'));
         }
         wx.previewImage({
-            current: krpano.get('gallery['+gallery+'].img[0].url'), // 当前显示图片的http链接
+            current: krpano.get('gallery[' + gallery + '].img[0].url'), // 当前显示图片的http链接
             urls: urls // 需要预览的图片http链接列表
-        }); 
+        });
     }
-    else{
+    else {
         toggleBtns();
-        krpano.call('show_gallery('+gallery+')');   
+        krpano.call('show_gallery(' + gallery + ')');
     }
 }
 
-function getWorkPrivacyFlag(){
+function getWorkPrivacyFlag() {
     var privacy_flag = '0';
 
     return privacy_flag;
@@ -389,74 +389,74 @@ function getWorkPrivacyFlag(){
 
 
 
-function initPano(){//TODO
-   
-   if(data.pk_works_main == undefined){
-       window.location.href = '/404.html';
-       return ;
-   }
-   //微信分享
-   // initWxConfig(data);
-   // initQQShare(data);
-   //存储作者的信息
-   // _user_view_uuid = data.user_view_uuid;
-   _user_view_uuid = "admin";
-
-   _name = data.name;
-   document.title = _name;
-   //$("#thumb_img").attr("src",data.absolutelocation);
-   //var descContent='';
-   //if(data.profile){
-   //    descContent = data.profile;
-   //}else{
-   //    descContent = data.name;
-   //}
-   //$("head").append('<meta name="description" content="'+descContent+'"/>');
-
-   $("body").data("panoData",data);
-   pk_works_main = data.pk_works_main;
-   var settings = {};
-   settings["events[skin_events].onloadcomplete"] = "skin_showloading(false);";
-   settings["onstart"] = '';
-   
-   //是否开始时弹出场景选择
-   if (data.scenechoose=='1') {
-       settings["events[skin_events].onloadcomplete"] += "open_show_scene_thumb();";
-   }
-   
-   //统计人气
-   if(data.browsing_num!='0'){
-       $("#user_viewNum").text(parseInt(data.browsing_num)+1);
-   }else{
-       $("#user_viewNum").text("1");
-   }
-   //启动画面
-   var loadingObj = data.loading_img;
-   if (loadingObj && loadingObj.useLoading) {
-       settings["onstart"] += "showloadingimg('" + loadingObj.loadingImgPathWebsite + "','" + loadingObj.loadingImgPathMobile + "');";
-   }
-   for(var i=0 ; i<plugins_init_function.length;i++){
-        plugins_init_function[i](data,settings);
-   }
-   if(data.scene_group.sceneGroups.length>0) {
-         $(".vrshow_container_3_min .img_desc_container_min:eq(0) img").attr('src',data.scene_group.sceneGroups[0].imgPath);
+function initPano() {
+    //TODO
+
+    if (data.pk_works_main == undefined) {
+        window.location.href = '/404.html';
+        return;
+    }
+    //微信分享
+    //    initWxConfig(data);
+    // initQQShare(data);
+    //存储作者的信息
+    // _user_view_uuid = data.user_view_uuid;
+    _user_view_uuid = "admin";
+
+    _name = data.name;
+    document.title = _name;
+    //$("#thumb_img").attr("src",data.absolutelocation);
+    //var descContent='';
+    //if(data.profile){
+    //    descContent = data.profile;
+    //}else{
+    //    descContent = data.name;
+    //}
+    //$("head").append('<meta name="description" content="'+descContent+'"/>');
+
+    $("body").data("panoData", data);
+    pk_works_main = data.pk_works_main;
+    var settings = {};
+    settings["events[skin_events].onloadcomplete"] = "skin_showloading(false);";
+    settings["onstart"] = '';
+
+    //是否开始时弹出场景选择
+    if (data.scenechoose == '1') {
+        settings["events[skin_events].onloadcomplete"] += "open_show_scene_thumb();";
+    }
+
+    //统计人气
+    if (data.browsing_num != '0') {
+        $("#user_viewNum").text(parseInt(data.browsing_num) + 1);
+    } else {
+        $("#user_viewNum").text("1");
+    }
+    //启动画面
+    var loadingObj = data.loading_img;
+    if (loadingObj && loadingObj.useLoading) {
+        settings["onstart"] += "showloadingimg('" + loadingObj.loadingImgPathWebsite + "','" + loadingObj.loadingImgPathMobile + "');";
+    }
+    for (var i = 0; i < plugins_init_function.length; i++) {
+        plugins_init_function[i](data, settings);
     }
-   settings['skin_settings.littleplanetintro'] = data.littleplanet=="1" ? true : false;
-
-   settings['autorotate.enabled'] = data.autorotate=="1" ? true : false;
-   embedpano({
-       swf: "tour.swf",
-       xml: "tour.xml",
-       target: "pano",
-       html5:'prefer',
-       //flash:'only',
-       wmode:'opaque-flash',
-       mobilescale:1,
-       vars: settings
-   });
-}
-function html_encode(str)
-  {
+    if (data.scene_group.sceneGroups.length > 0) {
+        $(".vrshow_container_3_min .img_desc_container_min:eq(0) img").attr('src', data.scene_group.sceneGroups[0].imgPath);
+    }
+    settings['skin_settings.littleplanetintro'] = data.littleplanet == "1" ? true : false;
+
+    settings['autorotate.enabled'] = data.autorotate == "1" ? true : false;
+    embedpano({
+        swf: "tour.swf",
+        xml: "tour.xml",
+        target: "pano",
+        html5: 'prefer',
+        //flash:'only',
+        wmode: 'opaque-flash',
+        mobilescale: 1,
+        vars: settings
+    });
+}
+function html_encode(str) {
     var s = "";
     if (str.length == 0) return "";
     s = str.replace(/\'/g, "&#39;");
@@ -465,54 +465,54 @@ function html_encode(str)
     s = s.replace(/\)/g, ")");
     s = s.replace(/,/g, ",");
     return s;
-  }
-function imgtext_encode(str){
-     var s = "";
+}
+function imgtext_encode(str) {
+    var s = "";
     if (str.length == 0) return "";
     s = str.replace(/\'/g, "&#39;");
     s = s.replace(/\"/g, "&quot;");
     s = s.replace(/\(/g, "(");
     s = s.replace(/\)/g, ")");
-    s = s.replace(/\,/g,"%2C");
+    s = s.replace(/\,/g, "%2C");
     return s;
 }
-function imgtext_decode(str){
-     var s = "";
+function imgtext_decode(str) {
+    var s = "";
     if (str.length == 0) return "";
     s = str.replace(/&quot;/g, "\"");
-     s = s.replace(/%2C/g,",");
+    s = s.replace(/%2C/g, ",");
     return s;
 }
 
-function showFullscreenBtn(){
+function showFullscreenBtn() {
     $(".btn_fullscreen").show();
 }
 
 
 
-function radarRotate(sceneName,hlookat){
+function radarRotate(sceneName, hlookat) {
 
 }
 
-function openSpeechVoiceBtn(){
+function openSpeechVoiceBtn() {
     var voiceOff = $('.btn_music_off');
     voiceOff.removeClass('btn_music_off');
     voiceOff.addClass('btn_music');
 }
-var player ;
-function playvideo(url){
-   var location = window.location.href;
-   url = location.substring(0,location.lastIndexOf("\/")+1)+url;
-   player = new prismplayer({
-      id: "J_prismPlayer", // 容器id
-      source:url,
-      autoplay: true,      // 自动播放
-      width: "100%",       // 播放器宽度
-      height: "400px"      // 播放器高度
+var player;
+function playvideo(url) {
+    var location = window.location.href;
+    url = location.substring(0, location.lastIndexOf("\/") + 1) + url;
+    player = new prismplayer({
+        id: "J_prismPlayer", // 容器id
+        source: url,
+        autoplay: true,      // 自动播放
+        width: "100%",       // 播放器宽度
+        height: "400px"      // 播放器高度
     });
-   $("#video_player_modal").modal('show');
+    $("#video_player_modal").modal('show');
 }
-function close_video_player(){
+function close_video_player() {
     player.pause();
     $("#video_player_modal").modal('hide');
 }

+ 1 - 1
packages/qjkankan-editor/someData.json

@@ -39,7 +39,7 @@
   "remindTime": 1,
   "status": 0,
   "isShowOpeningAnimation": false,
-  "openingAnimationType": "小行星开场",
+  "openingAnimationType": 1,
   "backgroundMusic": {
     "id": "",
     "name": "",

+ 7 - 5
packages/qjkankan-editor/src/Store/modules/index.js

@@ -1,6 +1,8 @@
-import scene from './scene'
-import tags from './tags'
+import scene from "./scene";
+import tags from "./tags";
+import notice from "./notice";
 export default {
-    scene,
-    tags
-}
+  scene,
+  tags,
+  notice,
+};

+ 72 - 0
packages/qjkankan-editor/src/Store/modules/notice.js

@@ -0,0 +1,72 @@
+import { getNoticeApi } from "@/api";
+
+export default {
+  namespaced: true,
+  state() {
+    return {
+      isOPen: false,
+      data: {
+        id: "",
+        tipEndTime: "",
+        tipStartTime: "",
+        imageUrl: "",
+        imageUrlEn: "",
+        title: "",
+        titleEn: "",
+        description: "",
+        descriptionEn: "",
+        infoUrl: "",
+        infoUrlEn: "",
+        version: "",
+      },
+    };
+  },
+  getters: {
+    content: (state) => state.data,
+    status: (state) => state.isOPen,
+  },
+  mutations: {
+    setData(state, payload) {
+      state.data = payload;
+    },
+    setStatus(state, payload) {
+      state.isOPen = payload;
+    },
+  },
+  actions: {
+    async getNotice({ commit, state }) {
+      const data = await getNoticeApi();
+      console.log("state", state);
+      const preState = state.data;
+      data.data &&
+        Object.keys(data.data).forEach((i) => {
+          if (i in preState) {
+            preState[i] = data.data[i];
+          }
+        });
+
+      if (preState.tipStartTime && preState.tipEndTime) {
+        const start = new Date(preState.tipStartTime);
+        const end = new Date(preState.tipEndTime);
+        const date = Date.now();
+        const noticeIds = localStorage.getItem("noticeIds")
+          ? Array.isArray(JSON.parse(localStorage.getItem("noticeIds")))
+            ? JSON.parse(localStorage.getItem("noticeIds"))
+            : []
+          : [];
+
+        if (date > start && date < end) {
+          if (!Array.from(noticeIds).includes(preState.id)) {
+            noticeIds.push(preState.id);
+            localStorage.setItem("noticeIds", JSON.stringify(noticeIds));
+            commit("setStatus", true);
+          }
+        } else {
+          commit("setStatus", false);
+        }
+      }
+      console.log("preState", preState);
+      commit("setData", preState);
+    },
+  },
+};

+ 4 - 1
packages/qjkankan-editor/src/Store/modules/scene.js

@@ -1,3 +1,6 @@
+import { i18n } from "@/lang";
+
+
 export default {
   namespaced: true,
   state() {
@@ -88,7 +91,7 @@ export default {
     setMetaData(state, payload) {
       state.metadata = payload;
       if (location.href.includes('show.html')) {
-        document.title = payload.name || '无标题'
+        document.title = payload.name || i18n.t('common.notit')
       }
     },
   },

+ 11 - 0
packages/qjkankan-editor/src/api/index.js

@@ -802,3 +802,14 @@ export async function checkUserSize() {
 export function uploadAttachment(data, ok, no) {
   return http.uploadFile(`${URL_FILL}/manage/work/uploadHot`, data, ok, no)
 }
+
+/**
+ * 更新通知
+ * @param {*} data 
+ * @param {*} ok 
+ * @param {*} no 
+ */
+
+export function getNoticeApi(data, ok, no) {
+  return http.getJson(`${URL_FILL}/manage/work/getServiceUpTip`, data, ok, no)
+}

+ 0 - 539
packages/qjkankan-editor/src/assets/fonts/demo.css

@@ -1,539 +0,0 @@
-/* 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;
-}

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 2764
packages/qjkankan-editor/src/assets/fonts/demo_index.html


+ 0 - 463
packages/qjkankan-editor/src/assets/fonts/iconfont.css

@@ -1,463 +0,0 @@
-@font-face {
-  font-family: "iconfont"; /* Project id 2947721 */
-  src: url('iconfont.woff2?t=1641276064619') format('woff2'),
-       url('iconfont.woff?t=1641276064619') format('woff'),
-       url('iconfont.ttf?t=1641276064619') format('truetype');
-}
-
-.iconfont {
-  font-family: "iconfont" !important;
-  font-size: 16px;
-  font-style: normal;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-
-.iconeditor_play:before {
-  content: "\e6ef";
-}
-
-.iconeditor_3d:before {
-  content: "\e6f0";
-}
-
-.iconeditor_update:before {
-  content: "\e6f1";
-}
-
-.iconeditor_list_delete:before {
-  content: "\e6f2";
-}
-
-.iconmaterial_panoramic_picture:before {
-  content: "\e6e8";
-}
-
-.iconmaterial_preview_upload:before {
-  content: "\e6e9";
-}
-
-.icontoast_yellow:before {
-  content: "\e6ea";
-}
-
-.iconworks_search:before {
-  content: "\e6eb";
-}
-
-.iconworks_share:before {
-  content: "\e6ec";
-}
-
-.iconworks_look:before {
-  content: "\e6ed";
-}
-
-.iconworks_delete:before {
-  content: "\e6ee";
-}
-
-.iconeditor_folder_off:before {
-  content: "\e6c5";
-}
-
-.iconeditor_folder_on:before {
-  content: "\e6c6";
-}
-
-.iconeditor_add:before {
-  content: "\e6c7";
-}
-
-.iconeditor_hot_add:before {
-  content: "\e6c8";
-}
-
-.iconeditor_off:before {
-  content: "\e6c9";
-}
-
-.iconeditor_list_add:before {
-  content: "\e6ca";
-}
-
-.iconeditor_on:before {
-  content: "\e6cb";
-}
-
-.iconeditor_playback:before {
-  content: "\e6cc";
-}
-
-.iconeditor_list_edit:before {
-  content: "\e6cd";
-}
-
-.iconmaterial_image:before {
-  content: "\e6ce";
-}
-
-.iconmaterial_music:before {
-  content: "\e6cf";
-}
-
-.iconeditor_panoramic:before {
-  content: "\e6d0";
-}
-
-.iconeditor_list_image:before {
-  content: "\e6d1";
-}
-
-.iconmaterial_preview_drop_out:before {
-  content: "\e6d2";
-}
-
-.iconeditor_preview:before {
-  content: "\e6d3";
-}
-
-.iconeditor_search:before {
-  content: "\e6d4";
-}
-
-.iconmaterial_operation_delete:before {
-  content: "\e6d5";
-}
-
-.iconmaterial_operation_editor:before {
-  content: "\e6d6";
-}
-
-.iconeditor_return:before {
-  content: "\e6d7";
-}
-
-.iconmaterial_preview_full_screen:before {
-  content: "\e6d8";
-}
-
-.iconmaterial_preview_enlarge:before {
-  content: "\e6d9";
-}
-
-.iconeditor_save:before {
-  content: "\e6da";
-}
-
-.iconmaterial_preview_next1:before {
-  content: "\e6db";
-}
-
-.iconmaterial_preview_next:before {
-  content: "\e6dc";
-}
-
-.iconmaterial_preview_narrow:before {
-  content: "\e6dd";
-}
-
-.iconmaterial_preview_previous:before {
-  content: "\e6de";
-}
-
-.iconmaterial_operation_image:before {
-  content: "\e6df";
-}
-
-.iconmaterial_video:before {
-  content: "\e6e0";
-}
-
-.iconmaterial_preview_upload_collect:before {
-  content: "\e6e1";
-}
-
-.iconpop-ups_shut-down:before {
-  content: "\e6e2";
-}
-
-.icontoast_green:before {
-  content: "\e6e3";
-}
-
-.icontoast_red:before {
-  content: "\e6e4";
-}
-
-.iconworks_editor:before {
-  content: "\e6e5";
-}
-
-.iconpop-ups_crop:before {
-  content: "\e6e6";
-}
-
-.iconmaterial_prompt:before {
-  content: "\e6e7";
-}
-
-.iconbs_close:before {
-  content: "\e74c";
-}
-
-.iconbs_folder:before {
-  content: "\e74d";
-}
-
-.iconbs_list_menu:before {
-  content: "\e74e";
-}
-
-.iconbs_list_edit:before {
-  content: "\e74f";
-}
-
-.iconbs_list_info:before {
-  content: "\e750";
-}
-
-.iconbs_list_play:before {
-  content: "\e751";
-}
-
-.iconbs_list_stop:before {
-  content: "\e752";
-}
-
-.iconbs_plus:before {
-  content: "\e753";
-}
-
-.iconbs_reduce:before {
-  content: "\e754";
-}
-
-.iconbs_next:before {
-  content: "\e755";
-}
-
-.iconbs_nav_panorama:before {
-  content: "\e756";
-}
-
-.iconbs_upload:before {
-  content: "\e757";
-}
-
-.iconbs_search:before {
-  content: "\e758";
-}
-
-.iconbs_nav_photo:before {
-  content: "\e759";
-}
-
-.iconbs_nav_video:before {
-  content: "\e75a";
-}
-
-.iconedit_add:before {
-  content: "\e75b";
-}
-
-.iconbs_nav_sound:before {
-  content: "\e75c";
-}
-
-.iconedit_input_arrow:before {
-  content: "\e75d";
-}
-
-.iconedit_close:before {
-  content: "\e75e";
-}
-
-.iconedit_case_delete:before {
-  content: "\e75f";
-}
-
-.iconbs_share:before {
-  content: "\e760";
-}
-
-.iconedit_input_unvisible:before {
-  content: "\e761";
-}
-
-.iconedit_input_visible:before {
-  content: "\e762";
-}
-
-.iconedit_list_more:before {
-  content: "\e763";
-}
-
-.iconedit_list_default:before {
-  content: "\e764";
-}
-
-.iconedit_nav_hotpoint:before {
-  content: "\e765";
-}
-
-.iconedit_nav_base:before {
-  content: "\e766";
-}
-
-.iconedit_next:before {
-  content: "\e767";
-}
-
-.iconedit_jumpsview:before {
-  content: "\e768";
-}
-
-.iconedit_pre:before {
-  content: "\e769";
-}
-
-.iconedit_linkview:before {
-  content: "\e76a";
-}
-
-.iconedit_select:before {
-  content: "\e76b";
-}
-
-.iconedit_nav_scenenav:before {
-  content: "\e76c";
-}
-
-.iconedit_soundview:before {
-  content: "\e76d";
-}
-
-.iconedit_photoview:before {
-  content: "\e76e";
-}
-
-.iconedit_search:before {
-  content: "\e76f";
-}
-
-.iconedit_textview:before {
-  content: "\e770";
-}
-
-.iconedit_nav_screen:before {
-  content: "\e771";
-}
-
-.iconedit_type_3d:before {
-  content: "\e772";
-}
-
-.iconedit_top_save:before {
-  content: "\e773";
-}
-
-.iconedit_type_panorama:before {
-  content: "\e774";
-}
-
-.iconedit_top_view:before {
-  content: "\e775";
-}
-
-.iconedit_videoview:before {
-  content: "\e776";
-}
-
-.iconlist_views:before {
-  content: "\e777";
-}
-
-.iconnav_scene_down:before {
-  content: "\e778";
-}
-
-.icontool_about:before {
-  content: "\e779";
-}
-
-.iconnav_scene_up:before {
-  content: "\e77a";
-}
-
-.icontool_vr:before {
-  content: "\e77b";
-}
-
-.icontool_window:before {
-  content: "\e77c";
-}
-
-.icontool_full:before {
-  content: "\e77d";
-}
-
-.iconimg_logo:before {
-  content: "\e77e";
-}
-
-.iconbs_list_cover:before {
-  content: "\e77f";
-}
-
-.iconlist_delete:before {
-  content: "\e780";
-}
-
-.iconbs_stop:before {
-  content: "\e781";
-}
-
-.iconbs_play:before {
-  content: "\e782";
-}
-
-.iconbs_list_circle:before {
-  content: "\e783";
-}
-
-.iconshow_playback:before {
-  content: "\e681";
-}
-
-.iconshow_suspension:before {
-  content: "\e683";
-}
-
-.iconshow_3d_normal:before {
-  content: "\e677";
-}
-
-.iconshow_plane_normal:before {
-  content: "\e67d";
-}
-
-.iconshow_roaming_selected:before {
-  content: "\e682";
-}
-
-.iconshow_plane_selected:before {
-  content: "\e684";
-}
-
-.iconshow_3d_selected:before {
-  content: "\e685";
-}
-
-.iconshow_roaming_normal:before {
-  content: "\e686";
-}
-
-.iconshow_function_collect:before {
-  content: "\e687";
-}
-
-.iconshow_drop-down:before {
-  content: "\e673";
-}
-

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 1
packages/qjkankan-editor/src/assets/fonts/iconfont.js


+ 0 - 793
packages/qjkankan-editor/src/assets/fonts/iconfont.json

@@ -1,793 +0,0 @@
-{
-  "id": "2947721",
-  "name": "全景看看1.1.0",
-  "font_family": "iconfont",
-  "css_prefix_text": "icon-",
-  "description": "全景看看1.1.0",
-  "glyphs": [
-    {
-      "icon_id": "25824857",
-      "name": "editor_play",
-      "font_class": "editor_play",
-      "unicode": "e6ef",
-      "unicode_decimal": 59119
-    },
-    {
-      "icon_id": "25824858",
-      "name": "editor_3d",
-      "font_class": "editor_3d",
-      "unicode": "e6f0",
-      "unicode_decimal": 59120
-    },
-    {
-      "icon_id": "25824859",
-      "name": "editor_update",
-      "font_class": "editor_update",
-      "unicode": "e6f1",
-      "unicode_decimal": 59121
-    },
-    {
-      "icon_id": "25824860",
-      "name": "editor_list_delete",
-      "font_class": "editor_list_delete",
-      "unicode": "e6f2",
-      "unicode_decimal": 59122
-    },
-    {
-      "icon_id": "25824816",
-      "name": "material_panoramic_picture",
-      "font_class": "material_panoramic_picture",
-      "unicode": "e6e8",
-      "unicode_decimal": 59112
-    },
-    {
-      "icon_id": "25824817",
-      "name": "material_preview_upload",
-      "font_class": "material_preview_upload",
-      "unicode": "e6e9",
-      "unicode_decimal": 59113
-    },
-    {
-      "icon_id": "25824818",
-      "name": "toast_yellow",
-      "font_class": "toast_yellow",
-      "unicode": "e6ea",
-      "unicode_decimal": 59114
-    },
-    {
-      "icon_id": "25824819",
-      "name": "works_search",
-      "font_class": "works_search",
-      "unicode": "e6eb",
-      "unicode_decimal": 59115
-    },
-    {
-      "icon_id": "25824820",
-      "name": "works_share",
-      "font_class": "works_share",
-      "unicode": "e6ec",
-      "unicode_decimal": 59116
-    },
-    {
-      "icon_id": "25824821",
-      "name": "works_look",
-      "font_class": "works_look",
-      "unicode": "e6ed",
-      "unicode_decimal": 59117
-    },
-    {
-      "icon_id": "25824822",
-      "name": "works_delete",
-      "font_class": "works_delete",
-      "unicode": "e6ee",
-      "unicode_decimal": 59118
-    },
-    {
-      "icon_id": "25824780",
-      "name": "editor_folder_off",
-      "font_class": "editor_folder_off",
-      "unicode": "e6c5",
-      "unicode_decimal": 59077
-    },
-    {
-      "icon_id": "25824781",
-      "name": "editor_folder_on",
-      "font_class": "editor_folder_on",
-      "unicode": "e6c6",
-      "unicode_decimal": 59078
-    },
-    {
-      "icon_id": "25824782",
-      "name": "editor_add",
-      "font_class": "editor_add",
-      "unicode": "e6c7",
-      "unicode_decimal": 59079
-    },
-    {
-      "icon_id": "25824783",
-      "name": "editor_hot_add",
-      "font_class": "editor_hot_add",
-      "unicode": "e6c8",
-      "unicode_decimal": 59080
-    },
-    {
-      "icon_id": "25824784",
-      "name": "editor_off",
-      "font_class": "editor_off",
-      "unicode": "e6c9",
-      "unicode_decimal": 59081
-    },
-    {
-      "icon_id": "25824785",
-      "name": "editor_list_add",
-      "font_class": "editor_list_add",
-      "unicode": "e6ca",
-      "unicode_decimal": 59082
-    },
-    {
-      "icon_id": "25824786",
-      "name": "editor_on",
-      "font_class": "editor_on",
-      "unicode": "e6cb",
-      "unicode_decimal": 59083
-    },
-    {
-      "icon_id": "25824787",
-      "name": "editor_playback",
-      "font_class": "editor_playback",
-      "unicode": "e6cc",
-      "unicode_decimal": 59084
-    },
-    {
-      "icon_id": "25824788",
-      "name": "editor_list_edit",
-      "font_class": "editor_list_edit",
-      "unicode": "e6cd",
-      "unicode_decimal": 59085
-    },
-    {
-      "icon_id": "25824789",
-      "name": "material_image",
-      "font_class": "material_image",
-      "unicode": "e6ce",
-      "unicode_decimal": 59086
-    },
-    {
-      "icon_id": "25824790",
-      "name": "material_music",
-      "font_class": "material_music",
-      "unicode": "e6cf",
-      "unicode_decimal": 59087
-    },
-    {
-      "icon_id": "25824791",
-      "name": "editor_panoramic",
-      "font_class": "editor_panoramic",
-      "unicode": "e6d0",
-      "unicode_decimal": 59088
-    },
-    {
-      "icon_id": "25824792",
-      "name": "editor_list_image",
-      "font_class": "editor_list_image",
-      "unicode": "e6d1",
-      "unicode_decimal": 59089
-    },
-    {
-      "icon_id": "25824793",
-      "name": "material_preview_drop_out",
-      "font_class": "material_preview_drop_out",
-      "unicode": "e6d2",
-      "unicode_decimal": 59090
-    },
-    {
-      "icon_id": "25824794",
-      "name": "editor_preview",
-      "font_class": "editor_preview",
-      "unicode": "e6d3",
-      "unicode_decimal": 59091
-    },
-    {
-      "icon_id": "25824795",
-      "name": "editor_search",
-      "font_class": "editor_search",
-      "unicode": "e6d4",
-      "unicode_decimal": 59092
-    },
-    {
-      "icon_id": "25824796",
-      "name": "material_operation_delete",
-      "font_class": "material_operation_delete",
-      "unicode": "e6d5",
-      "unicode_decimal": 59093
-    },
-    {
-      "icon_id": "25824797",
-      "name": "material_operation_editor",
-      "font_class": "material_operation_editor",
-      "unicode": "e6d6",
-      "unicode_decimal": 59094
-    },
-    {
-      "icon_id": "25824798",
-      "name": "editor_return",
-      "font_class": "editor_return",
-      "unicode": "e6d7",
-      "unicode_decimal": 59095
-    },
-    {
-      "icon_id": "25824799",
-      "name": "material_preview_full_screen",
-      "font_class": "material_preview_full_screen",
-      "unicode": "e6d8",
-      "unicode_decimal": 59096
-    },
-    {
-      "icon_id": "25824800",
-      "name": "material_preview_enlarge",
-      "font_class": "material_preview_enlarge",
-      "unicode": "e6d9",
-      "unicode_decimal": 59097
-    },
-    {
-      "icon_id": "25824801",
-      "name": "editor_save",
-      "font_class": "editor_save",
-      "unicode": "e6da",
-      "unicode_decimal": 59098
-    },
-    {
-      "icon_id": "25824803",
-      "name": "material_preview_next1",
-      "font_class": "material_preview_next1",
-      "unicode": "e6db",
-      "unicode_decimal": 59099
-    },
-    {
-      "icon_id": "25824804",
-      "name": "material_preview_next",
-      "font_class": "material_preview_next",
-      "unicode": "e6dc",
-      "unicode_decimal": 59100
-    },
-    {
-      "icon_id": "25824805",
-      "name": "material_preview_narrow",
-      "font_class": "material_preview_narrow",
-      "unicode": "e6dd",
-      "unicode_decimal": 59101
-    },
-    {
-      "icon_id": "25824806",
-      "name": "material_preview_previous",
-      "font_class": "material_preview_previous",
-      "unicode": "e6de",
-      "unicode_decimal": 59102
-    },
-    {
-      "icon_id": "25824807",
-      "name": "material_operation_image",
-      "font_class": "material_operation_image",
-      "unicode": "e6df",
-      "unicode_decimal": 59103
-    },
-    {
-      "icon_id": "25824808",
-      "name": "material_video",
-      "font_class": "material_video",
-      "unicode": "e6e0",
-      "unicode_decimal": 59104
-    },
-    {
-      "icon_id": "25824809",
-      "name": "material_preview_upload_collect",
-      "font_class": "material_preview_upload_collect",
-      "unicode": "e6e1",
-      "unicode_decimal": 59105
-    },
-    {
-      "icon_id": "25824810",
-      "name": "pop-ups_shut-down",
-      "font_class": "pop-ups_shut-down",
-      "unicode": "e6e2",
-      "unicode_decimal": 59106
-    },
-    {
-      "icon_id": "25824811",
-      "name": "toast_green",
-      "font_class": "toast_green",
-      "unicode": "e6e3",
-      "unicode_decimal": 59107
-    },
-    {
-      "icon_id": "25824812",
-      "name": "toast_red",
-      "font_class": "toast_red",
-      "unicode": "e6e4",
-      "unicode_decimal": 59108
-    },
-    {
-      "icon_id": "25824813",
-      "name": "works_editor",
-      "font_class": "works_editor",
-      "unicode": "e6e5",
-      "unicode_decimal": 59109
-    },
-    {
-      "icon_id": "25824814",
-      "name": "pop-ups_crop",
-      "font_class": "pop-ups_crop",
-      "unicode": "e6e6",
-      "unicode_decimal": 59110
-    },
-    {
-      "icon_id": "25824815",
-      "name": "material_prompt",
-      "font_class": "material_prompt",
-      "unicode": "e6e7",
-      "unicode_decimal": 59111
-    },
-    {
-      "icon_id": "20281176",
-      "name": "bs_close",
-      "font_class": "bs_close",
-      "unicode": "e74c",
-      "unicode_decimal": 59212
-    },
-    {
-      "icon_id": "20281177",
-      "name": "bs_folder",
-      "font_class": "bs_folder",
-      "unicode": "e74d",
-      "unicode_decimal": 59213
-    },
-    {
-      "icon_id": "20281178",
-      "name": "bs_list_menu",
-      "font_class": "bs_list_menu",
-      "unicode": "e74e",
-      "unicode_decimal": 59214
-    },
-    {
-      "icon_id": "20281179",
-      "name": "bs_list_edit",
-      "font_class": "bs_list_edit",
-      "unicode": "e74f",
-      "unicode_decimal": 59215
-    },
-    {
-      "icon_id": "20281180",
-      "name": "bs_list_info",
-      "font_class": "bs_list_info",
-      "unicode": "e750",
-      "unicode_decimal": 59216
-    },
-    {
-      "icon_id": "20281181",
-      "name": "bs_list_play",
-      "font_class": "bs_list_play",
-      "unicode": "e751",
-      "unicode_decimal": 59217
-    },
-    {
-      "icon_id": "20281182",
-      "name": "bs_list_stop",
-      "font_class": "bs_list_stop",
-      "unicode": "e752",
-      "unicode_decimal": 59218
-    },
-    {
-      "icon_id": "20281183",
-      "name": "bs_plus",
-      "font_class": "bs_plus",
-      "unicode": "e753",
-      "unicode_decimal": 59219
-    },
-    {
-      "icon_id": "20281184",
-      "name": "bs_reduce",
-      "font_class": "bs_reduce",
-      "unicode": "e754",
-      "unicode_decimal": 59220
-    },
-    {
-      "icon_id": "20281185",
-      "name": "bs_next",
-      "font_class": "bs_next",
-      "unicode": "e755",
-      "unicode_decimal": 59221
-    },
-    {
-      "icon_id": "20281186",
-      "name": "bs_nav_panorama",
-      "font_class": "bs_nav_panorama",
-      "unicode": "e756",
-      "unicode_decimal": 59222
-    },
-    {
-      "icon_id": "20281187",
-      "name": "bs_upload",
-      "font_class": "bs_upload",
-      "unicode": "e757",
-      "unicode_decimal": 59223
-    },
-    {
-      "icon_id": "20281188",
-      "name": "bs_search",
-      "font_class": "bs_search",
-      "unicode": "e758",
-      "unicode_decimal": 59224
-    },
-    {
-      "icon_id": "20281189",
-      "name": "bs_nav_photo",
-      "font_class": "bs_nav_photo",
-      "unicode": "e759",
-      "unicode_decimal": 59225
-    },
-    {
-      "icon_id": "20281190",
-      "name": "bs_nav_video",
-      "font_class": "bs_nav_video",
-      "unicode": "e75a",
-      "unicode_decimal": 59226
-    },
-    {
-      "icon_id": "20281191",
-      "name": "edit_add",
-      "font_class": "edit_add",
-      "unicode": "e75b",
-      "unicode_decimal": 59227
-    },
-    {
-      "icon_id": "20281192",
-      "name": "bs_nav_sound",
-      "font_class": "bs_nav_sound",
-      "unicode": "e75c",
-      "unicode_decimal": 59228
-    },
-    {
-      "icon_id": "20281193",
-      "name": "edit_input_arrow",
-      "font_class": "edit_input_arrow",
-      "unicode": "e75d",
-      "unicode_decimal": 59229
-    },
-    {
-      "icon_id": "20281194",
-      "name": "edit_close",
-      "font_class": "edit_close",
-      "unicode": "e75e",
-      "unicode_decimal": 59230
-    },
-    {
-      "icon_id": "20281195",
-      "name": "edit_case_delete",
-      "font_class": "edit_case_delete",
-      "unicode": "e75f",
-      "unicode_decimal": 59231
-    },
-    {
-      "icon_id": "20281196",
-      "name": "bs_share",
-      "font_class": "bs_share",
-      "unicode": "e760",
-      "unicode_decimal": 59232
-    },
-    {
-      "icon_id": "20281197",
-      "name": "edit_input_unvisible",
-      "font_class": "edit_input_unvisible",
-      "unicode": "e761",
-      "unicode_decimal": 59233
-    },
-    {
-      "icon_id": "20281198",
-      "name": "edit_input_visible",
-      "font_class": "edit_input_visible",
-      "unicode": "e762",
-      "unicode_decimal": 59234
-    },
-    {
-      "icon_id": "20281199",
-      "name": "edit_list_more",
-      "font_class": "edit_list_more",
-      "unicode": "e763",
-      "unicode_decimal": 59235
-    },
-    {
-      "icon_id": "20281200",
-      "name": "edit_list_default",
-      "font_class": "edit_list_default",
-      "unicode": "e764",
-      "unicode_decimal": 59236
-    },
-    {
-      "icon_id": "20281201",
-      "name": "edit_nav_hotpoint",
-      "font_class": "edit_nav_hotpoint",
-      "unicode": "e765",
-      "unicode_decimal": 59237
-    },
-    {
-      "icon_id": "20281202",
-      "name": "edit_nav_base",
-      "font_class": "edit_nav_base",
-      "unicode": "e766",
-      "unicode_decimal": 59238
-    },
-    {
-      "icon_id": "20281203",
-      "name": "edit_next",
-      "font_class": "edit_next",
-      "unicode": "e767",
-      "unicode_decimal": 59239
-    },
-    {
-      "icon_id": "20281204",
-      "name": "edit_jumpsview",
-      "font_class": "edit_jumpsview",
-      "unicode": "e768",
-      "unicode_decimal": 59240
-    },
-    {
-      "icon_id": "20281205",
-      "name": "edit_pre",
-      "font_class": "edit_pre",
-      "unicode": "e769",
-      "unicode_decimal": 59241
-    },
-    {
-      "icon_id": "20281206",
-      "name": "edit_linkview",
-      "font_class": "edit_linkview",
-      "unicode": "e76a",
-      "unicode_decimal": 59242
-    },
-    {
-      "icon_id": "20281207",
-      "name": "edit_select",
-      "font_class": "edit_select",
-      "unicode": "e76b",
-      "unicode_decimal": 59243
-    },
-    {
-      "icon_id": "20281208",
-      "name": "edit_nav_scenenav",
-      "font_class": "edit_nav_scenenav",
-      "unicode": "e76c",
-      "unicode_decimal": 59244
-    },
-    {
-      "icon_id": "20281209",
-      "name": "edit_soundview",
-      "font_class": "edit_soundview",
-      "unicode": "e76d",
-      "unicode_decimal": 59245
-    },
-    {
-      "icon_id": "20281210",
-      "name": "edit_photoview",
-      "font_class": "edit_photoview",
-      "unicode": "e76e",
-      "unicode_decimal": 59246
-    },
-    {
-      "icon_id": "20281211",
-      "name": "edit_search",
-      "font_class": "edit_search",
-      "unicode": "e76f",
-      "unicode_decimal": 59247
-    },
-    {
-      "icon_id": "20281212",
-      "name": "edit_textview",
-      "font_class": "edit_textview",
-      "unicode": "e770",
-      "unicode_decimal": 59248
-    },
-    {
-      "icon_id": "20281213",
-      "name": "edit_nav_screen",
-      "font_class": "edit_nav_screen",
-      "unicode": "e771",
-      "unicode_decimal": 59249
-    },
-    {
-      "icon_id": "20281214",
-      "name": "edit_type_3d",
-      "font_class": "edit_type_3d",
-      "unicode": "e772",
-      "unicode_decimal": 59250
-    },
-    {
-      "icon_id": "20281215",
-      "name": "edit_top_save",
-      "font_class": "edit_top_save",
-      "unicode": "e773",
-      "unicode_decimal": 59251
-    },
-    {
-      "icon_id": "20281216",
-      "name": "edit_type_panorama",
-      "font_class": "edit_type_panorama",
-      "unicode": "e774",
-      "unicode_decimal": 59252
-    },
-    {
-      "icon_id": "20281217",
-      "name": "edit_top_view",
-      "font_class": "edit_top_view",
-      "unicode": "e775",
-      "unicode_decimal": 59253
-    },
-    {
-      "icon_id": "20281218",
-      "name": "edit_videoview",
-      "font_class": "edit_videoview",
-      "unicode": "e776",
-      "unicode_decimal": 59254
-    },
-    {
-      "icon_id": "20335636",
-      "name": "list_views",
-      "font_class": "list_views",
-      "unicode": "e777",
-      "unicode_decimal": 59255
-    },
-    {
-      "icon_id": "20434823",
-      "name": "nav_scene_down",
-      "font_class": "nav_scene_down",
-      "unicode": "e778",
-      "unicode_decimal": 59256
-    },
-    {
-      "icon_id": "20434824",
-      "name": "tool_about",
-      "font_class": "tool_about",
-      "unicode": "e779",
-      "unicode_decimal": 59257
-    },
-    {
-      "icon_id": "20434825",
-      "name": "nav_scene_up",
-      "font_class": "nav_scene_up",
-      "unicode": "e77a",
-      "unicode_decimal": 59258
-    },
-    {
-      "icon_id": "20434826",
-      "name": "tool_vr",
-      "font_class": "tool_vr",
-      "unicode": "e77b",
-      "unicode_decimal": 59259
-    },
-    {
-      "icon_id": "20434827",
-      "name": "tool_window",
-      "font_class": "tool_window",
-      "unicode": "e77c",
-      "unicode_decimal": 59260
-    },
-    {
-      "icon_id": "20434829",
-      "name": "tool_full",
-      "font_class": "tool_full",
-      "unicode": "e77d",
-      "unicode_decimal": 59261
-    },
-    {
-      "icon_id": "20434835",
-      "name": "img_logo",
-      "font_class": "img_logo",
-      "unicode": "e77e",
-      "unicode_decimal": 59262
-    },
-    {
-      "icon_id": "20468141",
-      "name": "list_cover",
-      "font_class": "bs_list_cover",
-      "unicode": "e77f",
-      "unicode_decimal": 59263
-    },
-    {
-      "icon_id": "20468257",
-      "name": "list_delete",
-      "font_class": "list_delete",
-      "unicode": "e780",
-      "unicode_decimal": 59264
-    },
-    {
-      "icon_id": "20863638",
-      "name": "bs_stop",
-      "font_class": "bs_stop",
-      "unicode": "e781",
-      "unicode_decimal": 59265
-    },
-    {
-      "icon_id": "20863639",
-      "name": "bs_play",
-      "font_class": "bs_play",
-      "unicode": "e782",
-      "unicode_decimal": 59266
-    },
-    {
-      "icon_id": "20863640",
-      "name": "bs_list_circle",
-      "font_class": "bs_list_circle",
-      "unicode": "e783",
-      "unicode_decimal": 59267
-    },
-    {
-      "icon_id": "19543934",
-      "name": "show_playback",
-      "font_class": "show_playback",
-      "unicode": "e681",
-      "unicode_decimal": 59009
-    },
-    {
-      "icon_id": "19543936",
-      "name": "show_suspension",
-      "font_class": "show_suspension",
-      "unicode": "e683",
-      "unicode_decimal": 59011
-    },
-    {
-      "icon_id": "20066551",
-      "name": "show_3d_normal",
-      "font_class": "show_3d_normal",
-      "unicode": "e677",
-      "unicode_decimal": 58999
-    },
-    {
-      "icon_id": "20066554",
-      "name": "show_plane_normal",
-      "font_class": "show_plane_normal",
-      "unicode": "e67d",
-      "unicode_decimal": 59005
-    },
-    {
-      "icon_id": "20066556",
-      "name": "show_roaming_selected",
-      "font_class": "show_roaming_selected",
-      "unicode": "e682",
-      "unicode_decimal": 59010
-    },
-    {
-      "icon_id": "20066557",
-      "name": "show_plane_selected",
-      "font_class": "show_plane_selected",
-      "unicode": "e684",
-      "unicode_decimal": 59012
-    },
-    {
-      "icon_id": "20066558",
-      "name": "show_3d_selected",
-      "font_class": "show_3d_selected",
-      "unicode": "e685",
-      "unicode_decimal": 59013
-    },
-    {
-      "icon_id": "20066559",
-      "name": "show_roaming_normal",
-      "font_class": "show_roaming_normal",
-      "unicode": "e686",
-      "unicode_decimal": 59014
-    },
-    {
-      "icon_id": "20066572",
-      "name": "show_function_collect",
-      "font_class": "show_function_collect",
-      "unicode": "e687",
-      "unicode_decimal": 59015
-    },
-    {
-      "icon_id": "19543922",
-      "name": "show_drop-down",
-      "font_class": "show_drop-down",
-      "unicode": "e673",
-      "unicode_decimal": 58995
-    }
-  ]
-}

BIN
packages/qjkankan-editor/src/assets/fonts/iconfont.ttf


BIN
packages/qjkankan-editor/src/assets/fonts/iconfont.woff


BIN
packages/qjkankan-editor/src/assets/fonts/iconfont.woff2


+ 1 - 1
packages/qjkankan-editor/src/assets/style/style.pc.editor.less

@@ -793,7 +793,7 @@ textarea:-ms-input-placeholder {
   .ui-message-content {
     font-size: 14px;
     margin-top: 20px;
-    margin-bottom: 30px;
+    // margin-bottom: 30px;
     word-break: break-all;
   }
 }

packages/qjkankan-editor/src/assets/videos/小行星开场_x264.mp4 → packages/qjkankan-editor/src/assets/videos/opa1_x264.mp4


packages/qjkankan-editor/src/assets/videos/小行星巡游开场_x264.mp4 → packages/qjkankan-editor/src/assets/videos/opa2_x264.mp4


packages/qjkankan-editor/src/assets/videos/小行星缩放开场_x264.mp4 → packages/qjkankan-editor/src/assets/videos/opa3_x264.mp4


packages/qjkankan-editor/src/assets/videos/水平巡游开场_x264.mp4 → packages/qjkankan-editor/src/assets/videos/opa4_x264.mp4


packages/qjkankan-editor/src/assets/videos/水晶球开场_x264.mp4 → packages/qjkankan-editor/src/assets/videos/opa5_x264.mp4


+ 3 - 2
packages/qjkankan-editor/src/components/NestedFolder.vue

@@ -11,7 +11,6 @@
         paddingLeft: topBarPaddingLeft,
       }"
     >
-     
       <i
         class="iconfont icon-edit_input_arrow icon-expand"
         :class="isExpanded ? '' : 'collapsed'"
@@ -31,7 +30,9 @@
         draggable="false"
       />
       <span class="group-name">{{
-        folderInfo.id === 1 ? $i18n.t("gather.root_dir") : folderInfo.name
+        folderInfo.id === 1
+          ? $i18n.t("gather.root_dir")
+          : folderInfo.name
       }}</span>
     </div>
 

+ 38 - 3
packages/qjkankan-editor/src/components/RichTextEditor.vue

@@ -2,10 +2,13 @@
   <div class="rich-text-editor">
     <div class="editor-title">
       <div class="title">
-        <span> {{ $i18n.t("hotspot.edit_article_title") }}</span>
+        <span>
+          {{ title ? title : $i18n.t("hotspot.edit_article_title") }}
+        </span>
       </div>
     </div>
     <Toolbar
+      v-if="isShowToolbar"
       style="border-bottom: 1px solid #ccc"
       :editor="editor"
       :defaultConfig="toolbarConfig"
@@ -16,6 +19,9 @@
       v-model="html"
       :defaultConfig="editorConfig"
       :mode="mode"
+      class="editor"
+      @change="onEditorChange"
+      @onMaxLength="onEditorMaxLength"
       @onCreated="onEditorCreated"
     />
     <div class="bottom-bar">
@@ -65,18 +71,38 @@ export default Vue.extend({
     MaterialSelector,
   },
   props: {
+    title: {
+      type: String,
+      default: "",
+    },
+    limit: {
+      type: Number,
+      default: 0,
+    },
+    placeholder: {
+      type: String,
+      default: "",
+    },
+
     initialHtml: {
       type: String,
       default: "",
     },
+    isShowToolbar: {
+      type: Boolean,
+      default: true,
+    },
   },
   data() {
     return {
       editor: null,
       html: this.initialHtml,
+      size: 0,
       toolbarConfig: {},
       editorConfig: {
-        placeholder: "",
+        placeholder: this.placeholder,
+        maxLength: this.limit > 0 ? this.limit : null,
+
         MENU_CONF: {
           uploadImage: {
             customBrowseAndUpload: (insertFn) => {
@@ -137,6 +163,13 @@ export default Vue.extend({
         );
       }
     },
+    onEditorChange(content) {
+      console.log("content", content);
+      this.size = content.size;
+    },
+    onEditorMaxLength() {
+      console.log("超出大小");
+    },
   },
   mounted() {},
   beforeDestroy() {
@@ -152,6 +185,9 @@ export default Vue.extend({
 <style lang="less" scoped>
 .rich-text-editor {
   // border: 1px solid #ccc;
+  .editor {
+    border: 1px solid #545454;
+  }
   .editor-title {
     height: 64px;
     .title {
@@ -174,7 +210,6 @@ export default Vue.extend({
     align-items: center;
     > button {
       margin-left: 10px;
-   
     }
   }
 }

+ 1 - 0
packages/qjkankan-editor/src/components/insertPositionTipInEditor.vue

@@ -240,6 +240,7 @@ export default {
             const draggedGroup = this.info.catalogs.find((item) => {
               return item.id === this.dragInfo.node.id
             })
+            
             draggedGroup.name = '默认二级分组'
 
             /**

+ 65 - 6
packages/qjkankan-editor/src/components/materialListInMaterialSelector.vue

@@ -9,7 +9,7 @@
       class="crumbs"
       v-if="!searchKey"
       :isDarkTheme="isDarkTheme"
-      :list="folderPath"
+      :list="uniqueFolderList(folderPath)"
       :rootName="$i18n.t(`gather.${materialTypeAlias}`)"
       @click-path="onClickPath"
     />
@@ -35,7 +35,6 @@
             width: columnWidthList[idx],
           }"
         >
-          {{ item.name && $i18n.t(`zh_key.${item.name}`) }}
         </span>
       </div> -->
       <div
@@ -183,7 +182,7 @@
         <!-- 本组件内的列表数据 -->
         <div
           class="table-body-row"
-          v-for="(item, i) in list"
+          v-for="(item, i) in showList"
           :key="i"
           @click="
             (e) => {
@@ -276,7 +275,7 @@
             "
             alt=""
           />
-          <span>{{ $i18n.t("gather.no_serch_result") }}</span>
+          <span>{{ $i18n.t("gather.no_search_result") }}</span>
         </div>
         <div v-if="!latestUsedSearchKey">
           <img
@@ -305,7 +304,7 @@
       >
         <span>{{ $i18n.t("gather.upload_material") }}</span>
         <i
-          class="iconfont icon-material_prompt tool-tip-for-editor"
+          class="iconfont icon-help_i tool-tip-for-editor"
           v-tooltip="fileInputBtnTip"
         />
         <FileInput
@@ -443,6 +442,27 @@ export default {
     };
   },
   computed: {
+    uniqueFolderList() {
+      return (arr) => {
+        const tem = new Map();
+        let res = arr.filter(
+          (item) => !tem.has(item.id) && tem.set(item.id, 1)
+        );
+        return res;
+      };
+    },
+    showList() {
+      if (this.materialTypeAlias === "pano") {
+        return this.list.filter((i) => {
+          if (i.type !== "dir" && i.status < 3) {
+            return false;
+          } else {
+            return true;
+          }
+        });
+      }
+      return this.list;
+    },
     materialTypeAlias() {
       if (this.materialType === "3D") {
         return "scene";
@@ -547,18 +567,22 @@ export default {
       item.materialType = this.materialType; // 三维场景数据没有type字段来表明自己是三维场景。所以统一加一个字段。
       if (this.isMultiSelection) {
         if (v) {
+          // eslint-disable-next-line vue/no-mutating-props
           this.select.push(item);
         } else {
           const toDeleteIdx = this.select.findIndex((eachSelect) => {
             return eachSelect.id === item.id;
           });
           if (toDeleteIdx >= 0) {
+            // eslint-disable-next-line vue/no-mutating-props
             this.select.splice(toDeleteIdx, 1);
           }
         }
       } else {
+        // eslint-disable-next-line vue/no-mutating-props
         this.select.splice(0, this.select.length);
         if (v) {
+          // eslint-disable-next-line vue/no-mutating-props
           this.select.push(item);
         }
       }
@@ -607,7 +631,7 @@ export default {
             this.materialItemCustomProcess(i);
             return i;
           });
-          this.list = this.list.concat(newData);
+          this.preProessData(newData);
           if (this.listRealLength === data.data.total) {
             this.hasMoreData = false;
           }
@@ -620,6 +644,41 @@ export default {
         }
       );
     },
+    preProessData(newData) {
+      this.list = this.list.concat(newData);
+      //全景图
+      if (this.materialTypeAlias === "pano") {
+        const uploadlist = this.list
+          .filter((i) => i.status < 3 && i.type !== "dir")
+          .map((item) => {
+            let itemInUploadList = {
+              title: item.name,
+              ifKnowProgress: false,
+              progress: 0,
+              status: "LOADING",
+              statusText: this.$i18n.t(`gather.cutting`),
+              uid: `u_${this.$randomWord(true, 8, 8)}`,
+              abortHandler: null,
+              backendId: item.id, // 只用于全景图上传
+              parentFolderId: item.dirId,
+            };
+            return itemInUploadList;
+          });
+
+        const res = new Map();
+
+        const latestUploadlist = this.uploadStatusList
+          .concat(uploadlist)
+          .filter((a) => !res.has(a.backendId) && res.set(a.backendId, 1));
+        console.log("latestUploadlist", latestUploadlist);
+        // console.log("origin-list", this.list);
+        const capitalizedMaterialType = capitalize(this.materialType);
+        this.$store.commit(
+          `setUploadStatusList${capitalizedMaterialType}`,
+          latestUploadlist
+        );
+      }
+    },
     refreshMaterialList: debounce(
       function (type) {
         this.isRequestingMoreData = false;

+ 179 - 191
packages/qjkankan-editor/src/components/materialSelector.vue

@@ -1,10 +1,9 @@
 <template>
-  <div
-    class="table-select"
-    :class="isDarkTheme ? '' : 'bright'"
-  >
+  <div class="table-select" :class="isDarkTheme ? '' : 'bright'">
     <span class="title">{{ title }}</span>
-    <div class="close-btn"><i class="iconfont icon-pop-ups_shut-down" @click="$emit('cancle')"></i></div>
+    <div class="close-btn">
+      <i class="iconfont icon-close" @click="$emit('cancle')"></i>
+    </div>
 
     <div class="material-tab">
       <a
@@ -58,11 +57,8 @@
         <div v-if="currentMaterialType === '3D'" class="bottom-line"></div>
       </a>
     </div>
-    
-    <div
-      class="filter"
-      :class="{active: isSearchKeyInputActive}"
-    >
+
+    <div class="filter" :class="{ active: isSearchKeyInputActive }">
       <input
         type="text"
         :placeholder="$i18n.t('gather.keywords')"
@@ -71,25 +67,23 @@
         @blur="isSearchKeyInputActive = false"
       />
       <i v-if="!searchKey" class="iconfont icon-editor_search search-icon" />
-      <i v-if="searchKey" @click="searchKey=''" class="iconfont icontoast_red clear-icon"></i>
+      <i
+        v-if="searchKey"
+        @click="searchKey = ''"
+        class="iconfont icon-toast_red clear-icon"
+      ></i>
     </div>
 
     <MaterialList
       v-if="selectableType.includes('pano')"
       v-show="currentMaterialType === 'pano'"
-
       :isDarkTheme="isDarkTheme"
-      
       :currentMaterialType="currentMaterialType"
       :materialType="'pano'"
-      
       :tableHeaderKeyList="['icon', 'name']"
-
       :isMultiSelection="isMultiSelection"
       :select="select"
-
       :searchKey="searchKey"
-
       :canUpload="true"
       :fileInputCustomCheck="checkPanoFileInput"
       :fileUploadLongPollingCb="panoUploadLongPolling"
@@ -100,123 +94,118 @@
       :fileInputAcceptType="'image/png,image/jpeg,image/jpg'"
       :fileInputMediaType="'image'"
       :fileInputLimit="120"
-
-      @need-clear-filter="() => {searchKey = ''}"
+      @need-clear-filter="
+        () => {
+          searchKey = '';
+        }
+      "
     >
-      <template
-        v-slot:materialUploadSuccessIcon="slotProps"
-      >
+      <template v-slot:materialUploadSuccessIcon="slotProps">
         <img
-          :src="slotProps.uploadInfo.successInfo[slotProps.tableItemStructure.key] + $imgsuffix"
+          :src="
+            slotProps.uploadInfo.successInfo[slotProps.tableItemStructure.key] +
+            $imgsuffix
+          "
           alt=""
         />
       </template>
-      <template
-        v-slot:materialUploadingIcon
-      >
+      <template v-slot:materialUploadingIcon>
         <img
           src="@/assets/images/icons/upload-file-type-icon-image@2x.png"
-          style="object-fit: contain;"
+          style="object-fit: contain"
           alt=""
-        >
+        />
       </template>
-      <template
-        v-slot:materialUploadFailIcon
-      >
+      <template v-slot:materialUploadFailIcon>
         <img
           src="@/assets/images/icons/upload-file-type-icon-image@2x.png"
-          style="object-fit: contain;"
-        |  alt=""
-        >
+          style="object-fit: contain"
+          |
+          alt=""
+        />
       </template>
-      <template
-        v-slot:materialIcon="slotProps"
-      >
+      <template v-slot:materialIcon="slotProps">
         <img
-          :src="slotProps.materialInfo[slotProps.tableItemStructure.key] + $imgsuffix"
+          v-if="slotProps.materialInfo[slotProps.tableItemStructure.key]"
+          :src="
+            slotProps.materialInfo[slotProps.tableItemStructure.key] +
+            $imgsuffix
+          "
           alt=""
         />
+        <img v-else src="@/assets/img/list_placeholder.png" alt="" />
       </template>
     </MaterialList>
 
     <MaterialList
       v-if="selectableType.includes('image')"
       v-show="currentMaterialType === 'image'"
-
       :isDarkTheme="isDarkTheme"
-
       :currentMaterialType="currentMaterialType"
       :materialType="'image'"
-      
       :tableHeaderKeyList="['icon', 'name']"
-      
       :isMultiSelection="isMultiSelection"
       :select="select"
-
       :searchKey="searchKey"
-
       :canUpload="true"
       :fileInputBtnTip="$i18n.t(`gather.img_size`)"
       :fileInputFailString="$i18n.t(`gather.img_fail`)"
       :fileInputLimitFailStr="$i18n.t(`gather.img_limit`)"
-      :fileInputAcceptType="'image/png,image/jpeg,image/jpg'"
+      :fileInputAcceptType="'image/png,image/jpeg,image/jpg,image/gif'"
       :fileInputMediaType="'image'"
       :fileInputLimit="10"
-
-      @need-clear-filter="() => {searchKey = ''}"
+      @need-clear-filter="
+        () => {
+          searchKey = '';
+        }
+      "
     >
-      <template
-        v-slot:materialUploadSuccessIcon="slotProps"
-      >
+      <template v-slot:materialUploadSuccessIcon="slotProps">
         <img
-          :src="slotProps.uploadInfo.successInfo[slotProps.tableItemStructure.key] + $imgsuffix"
+          :src="
+            slotProps.uploadInfo.successInfo[slotProps.tableItemStructure.key] +
+            $imgsuffix
+          "
           alt=""
         />
       </template>
-      <template
-        v-slot:materialUploadingIcon
-      >
+      <template v-slot:materialUploadingIcon>
         <img
           src="@/assets/images/icons/upload-file-type-icon-image@2x.png"
-          style="object-fit: contain;"
+          style="object-fit: contain"
           alt=""
-        >
+        />
       </template>
-      <template
-        v-slot:materialUploadFailIcon
-      >
+      <template v-slot:materialUploadFailIcon>
         <img
           src="@/assets/images/icons/upload-file-type-icon-image@2x.png"
-          style="object-fit: contain;"
+          style="object-fit: contain"
           alt=""
-        >
+        />
       </template>
-      <template
-        v-slot:materialIcon="slotProps"
-      >
+      <template v-slot:materialIcon="slotProps">
         <img
-          :src="slotProps.materialInfo[slotProps.tableItemStructure.key] + $imgsuffix"
+          v-if="slotProps.materialInfo[slotProps.tableItemStructure.key]"
+          :src="
+            slotProps.materialInfo[slotProps.tableItemStructure.key] +
+            $imgsuffix
+          "
           alt=""
         />
+        <img v-else src="@/assets/img/list_placeholder.png" alt="" />
       </template>
     </MaterialList>
 
     <MaterialList
       v-if="selectableType.includes('audio')"
       v-show="currentMaterialType === 'audio'"
-
       :isDarkTheme="isDarkTheme"
-
       :currentMaterialType="currentMaterialType"
       :materialType="'audio'"
-      
       :tableHeaderKeyList="['ossPath', 'name']"
-      
       :isMultiSelection="isMultiSelection"
       :select="select"
-
       :searchKey="searchKey"
-
       :canUpload="true"
       :fileInputBtnTip="$i18n.t(`gather.audio_size`)"
       :fileInputFailString="$i18n.t(`gather.audio_fail`)"
@@ -224,12 +213,13 @@
       :fileInputAcceptType="'audio/mp3'"
       :fileInputMediaType="'audio'"
       :fileInputLimit="20"
-
-      @need-clear-filter="() => {searchKey = ''}"
+      @need-clear-filter="
+        () => {
+          searchKey = '';
+        }
+      "
     >
-      <template
-        v-slot:materialUploadSuccessIcon="slotProps"
-      >
+      <template v-slot:materialUploadSuccessIcon="slotProps">
         <AudioIconCanPlay
           class="audio-player"
           :vKey="slotProps.uploadInfo.successInfo.id"
@@ -238,27 +228,25 @@
           :myAudioUrl="slotProps.uploadInfo.successInfo.ossPath"
         />
       </template>
-      <template
-        v-slot:materialUploadingIcon
-      >
+      <template v-slot:materialUploadingIcon>
         <img
-          :src="require('@/assets/images/icons/upload-file-type-icon-audio@2x.png')"
-          style="object-fit: contain;"
+          :src="
+            require('@/assets/images/icons/upload-file-type-icon-audio@2x.png')
+          "
+          style="object-fit: contain"
           alt=""
-        >
+        />
       </template>
-      <template
-        v-slot:materialUploadFailIcon
-      >
+      <template v-slot:materialUploadFailIcon>
         <img
-          :src="require('@/assets/images/icons/upload-file-type-icon-audio@2x.png')"
-          style="object-fit: contain;"
+          :src="
+            require('@/assets/images/icons/upload-file-type-icon-audio@2x.png')
+          "
+          style="object-fit: contain"
           alt=""
-        >
+        />
       </template>
-      <template
-        v-slot:materialIcon="slotProps"
-      >
+      <template v-slot:materialIcon="slotProps">
         <AudioIconCanPlay
           class="audio-player"
           :vKey="slotProps.materialInfo.id"
@@ -272,20 +260,14 @@
     <MaterialList
       v-if="selectableType.includes('video')"
       v-show="currentMaterialType === 'video'"
-
       :isDarkTheme="isDarkTheme"
-
       :currentMaterialType="currentMaterialType"
       :materialType="'video'"
       :materialItemCustomProcess="videoMaterialItemCustomProcess"
-
       :tableHeaderKeyList="['icon', 'name']"
-      
       :isMultiSelection="isMultiSelection"
       :select="select"
-
       :searchKey="searchKey"
-
       :canUpload="true"
       :fileInputBtnTip="$i18n.t(`gather.video_size`)"
       :fileInputFailString="$i18n.t(`gather.video_fail`)"
@@ -293,70 +275,71 @@
       :fileInputAcceptType="'video/mp4'"
       :fileInputMediaType="'video'"
       :fileInputLimit="200"
-
-      @need-clear-filter="() => {searchKey = ''}"
+      @need-clear-filter="
+        () => {
+          searchKey = '';
+        }
+      "
     >
-      <template
-        v-slot:materialUploadSuccessIcon="slotProps"
-      >
+      <template v-slot:materialUploadSuccessIcon="slotProps">
         <img
-          :src="slotProps.uploadInfo.successInfo[slotProps.tableItemStructure.key]"
+          :src="
+            slotProps.uploadInfo.successInfo[slotProps.tableItemStructure.key]
+          "
           alt=""
         />
       </template>
-      <template
-        v-slot:materialUploadingIcon
-      >
+      <template v-slot:materialUploadingIcon>
         <img
           src="@/assets/images/icons/upload-file-type-icon-video@2x.png"
-          style="object-fit: contain;"
+          style="object-fit: contain"
           alt=""
-        >
+        />
       </template>
-      <template
-        v-slot:materialUploadFailIcon
-      >
+      <template v-slot:materialUploadFailIcon>
         <img
           src="@/assets/images/icons/upload-file-type-icon-video@2x.png"
-          style="object-fit: contain;"
+          style="object-fit: contain"
           alt=""
-        >
+        />
       </template>
-      <template
-        v-slot:materialIcon="slotProps"
-      >
+      <!-- 视频已带suffix -->
+      <template v-slot:materialIcon="slotProps">
         <img
+          v-if="slotProps.materialInfo[slotProps.tableItemStructure.key]"
           :src="slotProps.materialInfo[slotProps.tableItemStructure.key]"
           alt=""
         />
+        <img v-else src="@/assets/img/list_placeholder.png" alt="" />
       </template>
     </MaterialList>
 
     <MaterialList
       v-if="selectableType.includes('3D')"
       v-show="currentMaterialType === '3D'"
-
       :isDarkTheme="isDarkTheme"
-
       :currentMaterialType="currentMaterialType"
       :materialType="'3D'"
-
       :tableHeaderKeyList="['thumb', 'sceneName']"
-
       :isMultiSelection="isMultiSelection"
       :select="select"
-
       :searchKey="searchKey"
-
-      @need-clear-filter="() => {searchKey = ''}"
+      @need-clear-filter="
+        () => {
+          searchKey = '';
+        }
+      "
     >
-      <template
-        v-slot:materialIcon="slotProps"
-      >
+      <template v-slot:materialIcon="slotProps">
         <img
-          :src="slotProps.materialInfo[slotProps.tableItemStructure.key] + $imgsuffix"
+          v-if="slotProps.materialInfo[slotProps.tableItemStructure.key]"
+          :src="
+            slotProps.materialInfo[slotProps.tableItemStructure.key] +
+            $imgsuffix
+          "
           alt=""
         />
+        <img v-else src="@/assets/img/list_placeholder.png" alt="" />
       </template>
     </MaterialList>
 
@@ -365,8 +348,14 @@
         class="ui-button"
         :class="isDarkTheme ? 'deepcancel' : 'cancel'"
         @click="$emit('cancle')"
-      >{{ $i18n.t("gather.cancel") }}</button>
-      <button class="ui-button submit" :class="{ disable: !select.length }" @click="onClickComfirm">
+      >
+        {{ $i18n.t("gather.cancel") }}
+      </button>
+      <button
+        class="ui-button submit"
+        :class="{ disable: !select.length }"
+        @click="onClickComfirm"
+      >
         {{ $i18n.t("gather.comfirm"), }}
       </button>
     </div>
@@ -374,14 +363,12 @@
 </template>
 
 <script>
-import { mapMutations, } from "vuex";
+import { mapMutations } from "vuex";
 import MaterialList from "./materialListInMaterialSelector.vue";
 import AudioIconCanPlay from "@/components/audio/indexForEditor.vue";
 import { getImgWH, changeByteUnit } from "@/utils/file";
-import { debounce } from "@/utils/other.js"
-import {
-  checkMStatus,
-} from "@/api";
+import { debounce } from "@/utils/other.js";
+import { checkMStatus } from "@/api";
 
 export default {
   components: {
@@ -394,77 +381,70 @@ export default {
       default: true,
     },
     title: {
-      default: '',
-      type: String
+      default: "",
+      type: String,
     },
     selectableType: {
       type: Array,
-      default: function() {
-        return [
-          'image',
-          'pano',
-          'audio',
-          'video',
-          '3D',
-        ]
+      default: function () {
+        return ["image", "pano", "audio", "video", "3D"];
       },
     },
     initialMaterialType: {
       type: String,
-      default: 'image',
+      default: "image",
     },
     isMultiSelection: {
       type: Boolean,
       default: false,
     },
   },
-  data () {
+  data() {
     return {
       select: [],
       isSearchKeyInputActive: false,
-      searchKey: '', // 搜索关键词
-      latestUsedSearchKey: '',
+      searchKey: "", // 搜索关键词
+      latestUsedSearchKey: "",
 
       currentMaterialType: this.initialMaterialType,
-    }
-  },
-  watch: {
+    };
   },
+  watch: {},
   methods: {
-    ...mapMutations([
-      'clearUploadStatusLists',
-    ]),
+    ...mapMutations(["clearUploadStatusLists"]),
     async checkPanoFileInput(eachFile, i) {
-      let WHRate = null
+      let WHRate = null;
       try {
-        const { width, height } = await getImgWH(eachFile)
-        WHRate = width / height
+        const { width, height } = await getImgWH(eachFile);
+        WHRate = width / height;
       } catch (e) {
-        console.error('获取图像宽高失败:', e)
+        console.error("获取图像宽高失败:", e);
         setTimeout(() => {
           this.$msg({
             message: `“${eachFile.name}”${this.$i18n.t(`gather.pano_fail`)}`,
             type: "warning",
           });
         }, i * 100);
-        return false
+        return false;
       }
       if (WHRate !== 2) {
-        console.log('宽高比不对!');
+        console.log("宽高比不对!");
         setTimeout(() => {
           this.$msg({
             message: `“${eachFile.name}”${this.$i18n.t(`gather.pano_fail`)}`,
             type: "warning",
           });
         }, i * 100);
-        return false
+        return false;
       } else {
         console.log(WHRate);
-        return true
+        return true;
       }
     },
     panoUploadLongPolling(uploadStatusList) {
-      let needPollingTaskList = uploadStatusList.filter((item) => item.status === 'LOADING' && item.ifKnowProgress === false);
+      let needPollingTaskList = uploadStatusList.filter(
+        (item) => item.status === "LOADING" && item.ifKnowProgress === false
+      );
       if (needPollingTaskList.length > 0) {
         checkMStatus(
           {
@@ -473,26 +453,32 @@ export default {
           },
           (res) => {
             // 1切图中,2失败,3成功
-            res.data.forEach(eachRes => {
+            res.data.forEach((eachRes) => {
               if (eachRes.status === 2) {
-                const index = uploadStatusList.findIndex(eachTask => eachTask.backendId === eachRes.id)
+                const index = uploadStatusList.findIndex(
+                  (eachTask) => eachTask.backendId === eachRes.id
+                );
                 if (index >= 0) {
-                  const targetItem = uploadStatusList[index]
-                  targetItem.status = 'FAIL'
-                  targetItem.statusText = this.$i18n.t(`gather.material_cutting_fail`)
-                  targetItem.ifKnowProgress = true
+                  const targetItem = uploadStatusList[index];
+                  targetItem.status = "FAIL";
+                  targetItem.statusText = this.$i18n.t(
+                    `gather.material_cutting_fail`
+                  );
+                  targetItem.ifKnowProgress = true;
                 }
               } else if (eachRes.status === 3) {
-                const index = uploadStatusList.findIndex(eachTask => eachTask.backendId === eachRes.id)
+                const index = uploadStatusList.findIndex(
+                  (eachTask) => eachTask.backendId === eachRes.id
+                );
                 if (index >= 0) {
-                  const targetItem = uploadStatusList[index]
-                  targetItem.status = 'SUCCESS'
+                  const targetItem = uploadStatusList[index];
+                  targetItem.status = "SUCCESS";
                   if (eachRes.fileSize) {
                     eachRes.fileSize = changeByteUnit(Number(eachRes.fileSize));
                   } else {
-                    eachRes.fileSize = ''
+                    eachRes.fileSize = "";
                   }
-                  targetItem.successInfo = eachRes
+                  targetItem.successInfo = eachRes;
                 }
               }
             });
@@ -501,16 +487,19 @@ export default {
       }
     },
     videoMaterialItemCustomProcess(item) {
-      item.icon = process.env.VUE_APP_ORIGIN == 'aws' ? item.icon : (item.ossPath + this.$videoImg)
+      item.icon =
+        process.env.VUE_APP_ORIGIN == "aws"
+          ? item.icon
+          : item.ossPath + this.$videoImg;
     },
     onClickComfirm: debounce(function () {
-      this.$emit('submit', this.select)
+      this.$emit("submit", this.select);
     }, 250),
   },
   mounted() {
-    this.clearUploadStatusLists()
+    this.clearUploadStatusLists();
   },
-}
+};
 </script>
 
 <style lang="less" scoped>
@@ -522,7 +511,7 @@ export default {
   transform: translateX(-50%) translateY(-50%);
   width: 600px;
   height: 730px;
-  background: #1A1B1D;
+  background: #1a1b1d;
   border-radius: 4px;
   border: 1px solid #404040;
   padding: 26px;
@@ -545,7 +534,7 @@ export default {
   .material-tab {
     margin-top: 35px;
 
-      > .material-tab-item {
+    > .material-tab-item {
       display: inline-block;
       margin-right: 20px;
       position: relative;
@@ -567,7 +556,7 @@ export default {
         bottom: -4px;
         width: 16px;
         height: 2px;
-        background: #0076F6;
+        background: #0076f6;
         border-radius: 1px;
       }
     }
@@ -630,7 +619,7 @@ export default {
 }
 
 .table-select.bright {
-  border: 1px solid #EBEDF0;
+  border: 1px solid #ebedf0;
   background: #fff;
   .title {
     color: #323233;
@@ -639,8 +628,7 @@ export default {
   .close-btn {
   }
   .material-tab {
-
-      > .material-tab-item {
+    > .material-tab-item {
       > .text {
         color: #969799;
         &.active {
@@ -654,8 +642,8 @@ export default {
   }
 
   .filter {
-    background: #F7F8FA;
-    border: 1px solid #EBEDF0;
+    background: #f7f8fa;
+    border: 1px solid #ebedf0;
 
     > input {
       color: #323233;
@@ -663,18 +651,18 @@ export default {
     > input::placeholder,
     textarea::placeholder {
       font-size: 14px;
-      color: #C8C9CC !important;
+      color: #c8c9cc !important;
     }
-    
+
     > .search-icon {
-      color: #C8C9CC;
+      color: #c8c9cc;
     }
     > .clear-icon {
-      color: #C8C9CC;
+      color: #c8c9cc;
     }
   }
 
   .btns {
   }
 }
-</style>
+</style>

+ 155 - 100
packages/qjkankan-editor/src/components/materialSelectorFromWork.vue

@@ -1,23 +1,31 @@
 <template>
   <div class="table-select">
-    <span class="title">{{$i18n.t(`gather.select_material`)}}</span>
-    <div class="close-btn"><i class="iconfont icon-pop-ups_shut-down" @click="$emit('cancle')"></i></div>
+    <span class="title">{{ $i18n.t(`gather.select_material`) }}</span>
+    <div class="close-btn">
+      <i class="iconfont icon-close" @click="$emit('cancle')"></i>
+    </div>
 
     <div class="material-tab">
-      <a class="material-tab-item" @click.prevent="currentMaterialType = 'pano'">
-        <span class="text" :class="{ active: currentMaterialType === 'pano' }">{{$i18n.t(`gather.panorama`)}}</span>
+      <a
+        class="material-tab-item"
+        @click.prevent="currentMaterialType = 'pano'"
+      >
+        <span
+          class="text"
+          :class="{ active: currentMaterialType === 'pano' }"
+          >{{ $i18n.t(`gather.panorama`) }}</span
+        >
         <div v-if="currentMaterialType === 'pano'" class="bottom-line"></div>
       </a>
       <a class="material-tab-item" @click.prevent="currentMaterialType = '3D'">
-        <span class="text" :class="{ active: currentMaterialType === '3D' }">{{$i18n.t(`gather.scene`)}}</span>
+        <span class="text" :class="{ active: currentMaterialType === '3D' }">{{
+          $i18n.t(`gather.scene`)
+        }}</span>
         <div v-if="currentMaterialType === '3D'" class="bottom-line"></div>
       </a>
     </div>
-    
-    <div
-      class="filter"
-      :class="{active: isSearchKeyInputActive}"
-    >
+
+    <div class="filter" :class="{ active: isSearchKeyInputActive }">
       <input
         type="text"
         :placeholder="$i18n.t(`gather.keywords`)"
@@ -25,19 +33,28 @@
         @focus="isSearchKeyInputActive = true"
         @blur="isSearchKeyInputActive = false"
       />
-      <i v-if="!searchKey" class="iconfont icon-editor_search search-icon"/>
-      <i v-if="searchKey" @click="searchKey=''" class="iconfont icontoast_red clear-icon"></i>
+      <i v-if="!searchKey" class="iconfont icon-editor_search search-icon" />
+      <i
+        v-if="searchKey"
+        @click="searchKey = ''"
+        class="iconfont icon-toast_red clear-icon"
+      ></i>
     </div>
 
     <div class="table table-pano" v-show="currentMaterialType === 'pano'">
-      <div
-        v-show="panoList.length !== 0"
-        class="table-body"
-      >
+      <div v-show="panoList.length !== 0" class="table-body">
+       <!-- 测试数据-- {{
+          panoList.map((i) => {
+            let t = {};
+            t["id"] = i.id;
+            t["sceneTitle"] = i.sceneTitle;
+            return t;
+          })
+        }} -->
         <div
           class="table-body-row"
-          v-for="(item,i) in panoList"
-          :key="i"
+          v-for="(item) in panoList"
+          :key="`${item.id}`"
           @click="onClickRow"
         >
           <span class="table-data">
@@ -45,17 +62,19 @@
               class="checkbox"
               :isLightTheme="false"
               :isMultiSelection="false"
-              :isCheckedInitial="select.some(i => i.id === item.id)"
-              @change="v => selectItem(item, v)"
+              :isCheckedInitial="select.some((i) => i.id === item.id)"
+              @change="(v) => selectItem(item, v)"
             />
           </span>
           <span class="table-data">
             <div class="list-img">
-              <img :src="item.icon + $imgsuffix" alt="">
+              <img :src="item.icon + $imgsuffix" alt="" />
             </div>
           </span>
           <span class="table-data">
-            <span class="name ellipsis" v-title="item.sceneTitle">{{item.sceneTitle}}</span>
+            <span class="name ellipsis" v-title="item.sceneTitle">{{
+              item.sceneTitle
+            }}</span>
           </span>
         </div>
         <!-- <div class="no-more-data">
@@ -65,25 +84,28 @@
       <!-- 无数据时的提示 -->
       <div v-show="!(panoList.length !== 0)" class="no-data">
         <div v-if="latestUsedSearchKey">
-          <img :src="require('@/assets/images/default/empty_search_dark.png')" alt="">
-          <span>{{$i18n.t(`gather.no_serch_result`)}}</span>
+          <img
+            :src="require('@/assets/images/default/empty_search_dark.png')"
+            alt=""
+          />
+          <span>{{ $i18n.t(`gather.no_search_result`) }}</span>
         </div>
         <div v-if="!latestUsedSearchKey">
-          <img :src="require('@/assets/images/default/empty_dark.png')" alt="">
-          <span>{{$i18n.t(`gather.no_material_result`)}}</span>
+          <img
+            :src="require('@/assets/images/default/empty_dark.png')"
+            alt=""
+          />
+          <span>{{ $i18n.t(`gather.no_material_result`) }}</span>
         </div>
       </div>
     </div>
 
     <div class="table table-3D" v-show="currentMaterialType === '3D'">
-      <div
-        v-show="scene3DList.length !== 0"
-        class="table-body"
-      >
+      <div v-show="scene3DList.length !== 0" class="table-body">
         <div
           class="table-body-row"
-          v-for="(item,i) in scene3DList"
-          :key="i"
+          v-for="(item) in scene3DList"
+          :key="`${item.id}`"
           @click="onClickRow"
         >
           <span class="table-data">
@@ -91,17 +113,19 @@
               class="checkbox"
               :isLightTheme="false"
               :isMultiSelection="false"
-              :isCheckedInitial="select.some(i => i.id === item.id)"
-              @change="v => selectItem(item, v)"
+              :isCheckedInitial="select.some((i) => i.id === item.id)"
+              @change="(v) => selectItem(item, v)"
             />
           </span>
           <span class="table-data">
             <div class="list-img">
-              <img :src="item.icon + $imgsuffix" alt="">
+              <img :src="item.icon + $imgsuffix" alt="" />
             </div>
           </span>
           <span class="table-data">
-            <span class="name ellipsis" v-title="item.sceneTitle">{{item.sceneTitle}}</span>
+            <span class="name ellipsis" v-title="item.sceneTitle">{{
+              item.sceneTitle
+            }}</span>
           </span>
         </div>
         <!-- <div class="no-more-data">
@@ -111,21 +135,33 @@
       <!-- 无数据时的提示 -->
       <div v-show="!(scene3DList.length !== 0)" class="no-data">
         <div v-if="latestUsedSearchKey">
-          <img :src="require('@/assets/images/default/empty_search_dark.png')" alt="">
-          <span>{{$i18n.t(`gather.no_serch_result`)}}</span>
+          <img
+            :src="require('@/assets/images/default/empty_search_dark.png')"
+            alt=""
+          />
+          <span>{{ $i18n.t(`gather.no_search_result`) }}</span>
         </div>
         <div v-if="!latestUsedSearchKey">
-          <img :src="require('@/assets/images/default/empty_dark.png')" alt="">
-          <span>{{$i18n.t(`gather.no_material_result`)}}</span>
+          <img
+            :src="require('@/assets/images/default/empty_dark.png')"
+            alt=""
+          />
+          <span>{{ $i18n.t(`gather.no_material_result`) }}</span>
         </div>
       </div>
     </div>
 
     <div class="btns">
       <div>
-        <button class="ui-button deepcancel" @click="$emit('cancle')">{{$i18n.t(`gather.cancel`)}}</button>
-        <button class="ui-button submit" :class="{disable: !select.length}" @click="onClickComfirm">
-          {{$i18n.t(`gather.comfirm`)}}
+        <button class="ui-button deepcancel" @click="$emit('cancle')">
+          {{ $i18n.t(`gather.cancel`) }}
+        </button>
+        <button
+          class="ui-button submit"
+          :class="{ disable: !select.length }"
+          @click="onClickComfirm"
+        >
+          {{ $i18n.t(`gather.comfirm`) }}
         </button>
       </div>
     </div>
@@ -134,98 +170,111 @@
 
 <script>
 import { mapGetters } from "vuex";
-import { debounce } from "@/utils/other.js"
+import { debounce } from "@/utils/other.js";
 import RadioOrCheckbox from "@/components/shared/RadioOrCheckbox.vue";
 
 export default {
-  props:{
+  props: {
     primaryKey: {
-      default: 'id'
+      default: "id",
     },
     isMultiSelection: {
       type: Boolean,
       default: false,
-    }
+    },
   },
-  components:{
+  components: {
     RadioOrCheckbox,
   },
-  computed:{
-    ...mapGetters([
-      'info',
-    ]),
+  computed: {
+    ...mapGetters(["info"]),
     panoList() {
-      return this.info.scenes.filter((item) => {
-        return item.type === 'pano'
-      }).filter((item) => {
-        if (this.searchKey) {
-          return item.sceneTitle.includes(this.searchKey)
-        } else {
-          return item
-        }
-      })
+      return this.info.scenes
+        .filter((item) => {
+          return item.type === "pano";
+        })
+        .filter((item) => {
+          if (this.searchKey) {
+            return item.sceneTitle.includes(this.searchKey);
+          } else {
+            return item;
+          }
+        });
     },
     scene3DList() {
-      return this.info.scenes.filter((item) => {
-        return item.type === '4dkk'
-      }).filter((item) => {
-        if (this.searchKey) {
-          return item.sceneTitle.includes(this.searchKey)
-        } else {
-          return item
+      return this.info.scenes
+        .filter((item) => {
+          return item.type === "4dkk";
+        })
+        .filter((item) => {
+          if (this.searchKey) {
+            return item.sceneTitle.includes(this.searchKey);
+          } else {
+            return item;
+          }
+        });
+    },
+  },
+  watch: {
+    searchKey: {
+      handler(val, old) {
+        if (val && old !== val) {
+          console.log("need update");
+          // this.$forceUpdate();
         }
-      })
-    }
+      },
+    },
   },
-  data () {
+  data() {
     return {
       select: [],
       isSearchKeyInputActive: false,
-      searchKey:'', // 搜索关键词
-      latestUsedSearchKey: '',
-      currentMaterialType: 'pano',
-    }
+      searchKey: "", // 搜索关键词
+      latestUsedSearchKey: "",
+      currentMaterialType: "pano",
+    };
   },
 
   methods: {
     selectItem(item, v) {
-      item.materialType = this.currentMaterialType  // 三维场景数据没有type字段来表明自己是三维场景。所以统一加一个字段。
+      item.materialType = this.currentMaterialType; // 三维场景数据没有type字段来表明自己是三维场景。所以统一加一个字段。
       if (this.isMultiSelection) {
         if (v) {
-          this.select.push(item)
+          this.select.push(item);
         } else {
           const toDeleteIdx = this.select.findIndex((eachSelect) => {
-            return eachSelect.id === item.id
-          })
+            return eachSelect.id === item.id;
+          });
           if (toDeleteIdx >= 0) {
-            this.select.splice(toDeleteIdx, 1)
+            this.select.splice(toDeleteIdx, 1);
           }
         }
       } else {
         if (v) {
-          this.select = [item]
+          this.select = [item];
         } else {
-          this.select = []
+          this.select = [];
         }
       }
     },
     onClickRow(e) {
-      const checkboxNodeList = e.currentTarget.getElementsByClassName('selection-click-target')
+      const checkboxNodeList = e.currentTarget.getElementsByClassName(
+        "selection-click-target"
+      );
       if (checkboxNodeList && checkboxNodeList[0]) {
-        checkboxNodeList[0].click()
+        checkboxNodeList[0].click();
       }
     },
-    onClickComfirm: debounce(function() {
-      this.$emit('submit', this.select)
+    onClickComfirm: debounce(function () {
+      this.$emit("submit", this.select);
     }, 250),
   },
-  mounted() {
-  }
-}
+  mounted() {},
+};
 </script>
 
 <style lang="less" scoped>
-.ellipsis{
+.ellipsis {
   text-overflow: ellipsis;
   overflow: hidden;
   white-space: nowrap;
@@ -241,7 +290,7 @@ export default {
   transform: translateX(-50%) translateY(-50%);
   width: 600px;
   height: 730px;
-  background: #1A1B1D;
+  background: #1a1b1d;
   border-radius: 4px;
   border: 1px solid #404040;
   padding: 26px;
@@ -285,7 +334,7 @@ export default {
       bottom: -4px;
       width: 16px;
       height: 2px;
-      background: #0076F6;
+      background: #0076f6;
       border-radius: 1px;
     }
   }
@@ -341,11 +390,14 @@ export default {
 .table {
   margin-top: 20px;
   // border: @table-border-size solid #404040;
-  background: #1A1B1D;
+  background: #1a1b1d;
   width: 100%;
   height: @table-height;
   > .table-body {
-    height: calc(@table-height - @table-head-row-height - @table-border-size - @table-border-size);
+    height: calc(
+      @table-height - @table-head-row-height - @table-border-size -
+        @table-border-size
+    );
     overflow: auto;
     display: inline-block;
     width: 100%;
@@ -358,8 +410,8 @@ export default {
         background: #252526;
       }
       > .table-data {
-        font-size:14px;
-        line-height:50px;
+        font-size: 14px;
+        line-height: 50px;
         height: 100%;
         color: #fff;
         > .list-img {
@@ -399,7 +451,10 @@ export default {
     }
   }
   > .no-data {
-    height: calc(@table-height - @table-head-row-height - @table-border-size - @table-border-size);
+    height: calc(
+      @table-height - @table-head-row-height - @table-border-size -
+        @table-border-size
+    );
     width: 100%;
     position: relative;
     > div {
@@ -484,14 +539,14 @@ export default {
     top: 50%;
     transform: translate(-50%, -50%);
     border-radius: 50%;
-    background: #0076F6;
+    background: #0076f6;
     pointer-events: none;
     opacity: 0;
   }
 }
 
 .checkbox > input:checked ~ .for-outer-circle {
-  border: 1px solid #0076F6;
+  border: 1px solid #0076f6;
 }
 
 .checkbox > input:checked ~ .for-inner-circle {
@@ -512,4 +567,4 @@ export default {
     }
   }
 }
-</style>
+</style>

+ 144 - 0
packages/qjkankan-editor/src/components/notify.vue

@@ -0,0 +1,144 @@
+<template>
+  <div class="upgrade-popup" @click.stop="" v-if="status">
+    <h2 class="upgrade-text">
+      {{ $i18n.locale == "zh" ? upgradeInfo.title : upgradeInfo.titleEn }}
+    </h2>
+    <div
+      class="upgrade-image"
+      :style="`background-image:url(${
+        $i18n.locale == 'zh' ? upgradeInfo.imageUrl : upgradeInfo.imageUrlEn
+      });`"
+    ></div>
+    <div class="upgrade-content">
+      <div class="info">
+        <span class="info-text">{{
+          $i18n.t("components.user_guid.upgradeInfo")
+        }}</span>
+      </div>
+      <div
+        class="desc"
+        style="white-space: pre-wrap"
+        v-html="
+          $i18n.locale == 'zh'
+            ? upgradeInfo.description
+            : upgradeInfo.descriptionEn
+        "
+      ></div>
+    </div>
+    <div class="upgrade-btn">
+      <button class="ui-button primary" @click="close">
+        {{ $i18n.t("components.user_guid.set") }}
+      </button>
+
+      <button
+        class="ui-button submit"
+        @click.stop="
+          gotoView(
+            $i18n.locale == 'zh' ? upgradeInfo.infoUrl : upgradeInfo.infoUrlEn
+          )
+        "
+      >
+        {{ $i18n.t("components.user_guid.seeMore") }}
+      </button>
+    </div>
+  </div>
+</template>
+
+<script>
+import { mapGetters } from "vuex";
+
+export default {
+  name: "notify",
+  props: {},
+  computed: {
+    ...mapGetters({
+      upgradeInfo: "notice/content",
+      status: "notice/status",
+    }),
+  },
+  methods: {
+    gotoView(url) {
+      window.open(url);
+      close();
+    },
+    close() {
+      this.$store.commit("notice/setStatus", false);
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.upgrade-popup {
+  position: fixed;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  background: rgba(27, 27, 28, 0.9);
+  box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.25),
+    inset 0px 0px 0px 2px rgba(255, 255, 255, 0.1);
+  z-index: 10001;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  flex-flow: column;
+  color: #fff;
+  overflow-y: auto;
+  z-index: 10000000001;
+  .upgrade-text {
+    width: 560px;
+    font-size: 24px;
+    margin-bottom: 40px;
+    word-break: break-all;
+  }
+  .upgrade-image {
+    width: 560px;
+    height: 320px;
+    // background: #f2f2f2;
+    border-radius: 10px;
+    background-repeat: no-repeat;
+    background-size: cover;
+  }
+  .upgrade-content {
+    width: 560px;
+    margin-top: 30px;
+    .info {
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      .info-text {
+        font-size: 16px;
+      }
+      .info-time {
+        font-size: 12px;
+        color: rgba(255, 255, 255, 0.7);
+        .time {
+          margin-left: 5px;
+        }
+      }
+    }
+
+    .desc {
+      margin-top: 10px;
+      word-break: break-all;
+      font-size: 14px;
+      line-height: 28px;
+      max-height: 200px;
+      overflow: auto;
+    }
+  }
+  .upgrade-btn {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    margin-top: 40px;
+    .ui-button {
+      width: 160px;
+      height: 40px;
+      &:first-child {
+        margin-right: 30px;
+      }
+    }
+  }
+}
+</style>

+ 2 - 2
packages/qjkankan-editor/src/components/preview/index.vue

@@ -9,7 +9,7 @@
         <div class="ui-message-header">
           <span>{{work_preview}}</span>
           <span @click="$emit('close')">
-            <i class="iconfont icon_close"></i>
+            <i class="iconfont icon-close"></i>
           </span>
         </div>
         <div class="ui-message-main">
@@ -102,7 +102,7 @@ export default {
   width: 1250px;
   height: 838px;
   border-radius: 4px;
-  .icon_close{
+  .icon-close{
     color: #969799;
   }
   .ui-message-header{

+ 0 - 1
packages/qjkankan-editor/src/components/pulldownMenuInEditor.vue

@@ -13,7 +13,6 @@
         :key="index"
         @click="onSelect(item)"
       >
-        <!-- {{ $i18n.t(`zh_key.${item}`) }} -->
         {{ item.label }}
       </button>
     </div>

+ 31 - 11
packages/qjkankan-editor/src/components/sceneGroupInEditor.vue

@@ -29,19 +29,15 @@
         class="iconfont icon-editor_folder_off folder_collapsed"
       ></i>
       <template v-if="!isRenaming">
-        <span
-          class="group-name"
-          v-title="
-            $i18n.t(`zh_key.${groupNode.name}`).indexOf('zh_key') > -1
-              ? groupNode.name
-              : $i18n.t(`zh_key.${groupNode.name}`)
-          "
-          >{{
+        <span class="group-name" v-title="transTitle(groupNode.name)">
+          <!-- {{
             $i18n.t(`zh_key.${groupNode.name}`).indexOf("zh_key") > -1
               ? groupNode.name
               : $i18n.t(`zh_key.${groupNode.name}`)
-          }}</span
-        >
+          }} -->
+          {{ transTitle(groupNode.name) }}
+          <!-- {{ groupLv1name(groupNode.name) }} -->
+        </span>
         <i
           v-show="level === 1"
           class="iconfont icon-editor_list_add icon-add"
@@ -198,6 +194,7 @@ import SceneInGroup from "@/components/sceneInGroupInEditor.vue";
 import MaterialSelector from "@/components/materialSelector.vue";
 import InsertPositionTip from "@/components/insertPositionTipInEditor.vue";
 import { mapGetters, mapMutations } from "vuex";
+import { isUpgradeAdapter } from "@/utils/fixVersion";
 
 export default {
   name: "SceneGroup",
@@ -227,6 +224,29 @@ export default {
     };
   },
   computed: {
+    transTitle() {
+      return (name) => {
+        switch (name) {
+          case "默认一级分组":
+            return this.$i18n.t("navigation.default_group_one");
+          case "默认二级分组":
+            return this.$i18n.t("navigation.default_group_two");
+          case "一级分组":
+            return this.$i18n.t("navigation.group_one");
+          case "二级分组":
+            return this.$i18n.t("navigation.group_two");
+          default:
+            return name;
+        }
+      };
+    },
+    groupLv1name() {
+      return (name) => {
+        return name && name.length
+          ? name
+          : this.$i18n.t("navigation.group_one");
+      };
+    },
     ...mapGetters({
       info: "info",
       dragInfo: "editorNavDragInfo",
@@ -347,7 +367,7 @@ export default {
                 ? this.groupNode.children[0].id
                 : this.groupNode.id,
             type: "4dkk",
-            version: item.isUpgrade === 1 ? "V4" : "V3", // 'V3' OR 'V4'. 全景看看v1.3新增
+            version: isUpgradeAdapter(item.isUpgrade), // 'V3' OR 'V4'. 全景看看v1.3新增
             id: "s_" + this.$randomWord(true, 8, 8),
           });
         }

+ 1 - 1
packages/qjkankan-editor/src/components/selectedImageInEditor.vue

@@ -2,7 +2,7 @@
   <div class="img-wrapper">
     <img :src="realImage || defaultImgSrc" alt="" />
     <div v-if="realImage" class="cancel-btn-background" @click="handleCancel">
-      <i class="iconfont icon-pop-ups_shut-down"></i>
+      <i class="iconfont icon-close"></i>
     </div>
   </div>
 </template>

+ 1 - 1
packages/qjkankan-editor/src/components/shared/ImageCropper.vue

@@ -3,7 +3,7 @@
         <div class="com-image-cropper">
             <header app-border dir-bottom>
                 {{title}}
-                <i class="iconfont icon_close" @click="onClose"></i>
+                <i class="iconfont icon-close" @click="onClose"></i>
             </header>
             <div>
                 <vue-cropper

+ 108 - 86
packages/qjkankan-editor/src/components/shared/message/Alert.vue

@@ -1,99 +1,121 @@
 <template>
-    <popup ref="Message" :show="show">
-        <div class="ui-message ui-message-confirm" :style="{width:$lang=='zh'?'400px':'auto'}" :class="[isMaterial?'message-material':'dark']">
-            <div class="ui-message-header" :class="{'header-material':isMaterial}">
-                <span>{{title}}</span>
-                <span @click="onNo" v-if="showCloseIcon">
-                    <i class="iconfont icon_close"></i>
-                </span>
-            </div>
-            <div class="ui-message-main" :class="{'main-material':isMaterial}">
-                <!-- <div class="ui-message-icon" :class="[icon?icon:null]"></div> -->
-                <div class="ui-message-title">{{tips}}</div>
-                <div class="ui-message-content" v-html="content"></div>
-            </div>
-            <div class="ui-message-footer" :class="{'footer-material':isMaterial}" v-if="okLink">
-                <a
-                    :href="noLink"
-                    target="_blank"
-                    class="ui-button link cancel"
-                    @click="onNo"
-                >{{noText}}</a>
-                <a
-                    :href="okLink"
-                    target="_blank"
-                    class="ui-button link submit"
-                    @click="onOk"
-                >{{okText}}</a>
-            </div>
-            <div v-else class="ui-message-footer"  :class="{'footer-material':isMaterial}">
-                <!-- <button class="ui-button cancel" :class="{deepcancel:!isMaterial}" @click="onNo">{{noText}}</button> -->
-                <button class="ui-button submit" @click="onOk">{{okText}}</button>
-                <button v-if="ok2" class="ui-button submit" @click="onOk2">{{ok2Text}}</button>
-            </div>
-        </div>
-    </popup>
+  <popup ref="Message" :show="show">
+    <div
+      class="ui-message ui-message-confirm"
+      :style="{ width: $lang == 'zh' ? '400px' : 'auto' }"
+      :class="[isMaterial ? 'message-material' : 'dark']"
+    >
+      <div class="ui-message-header" :class="{ 'header-material': isMaterial }">
+        <span>{{ title }}</span>
+        <span @click="onNo" v-if="showCloseIcon">
+          <i class="iconfont icon-close"></i>
+        </span>
+      </div>
+      <div class="ui-message-main" :class="{ 'main-material': isMaterial }">
+        <!-- <div class="ui-message-icon" :class="[icon?icon:null]"></div> -->
+        <div class="ui-message-title">{{ tips }}</div>
+        <div class="ui-message-content" v-html="content"></div>
+      </div>
+      <div
+        class="ui-message-footer"
+        :class="{ 'footer-material': isMaterial }"
+        v-if="okLink"
+      >
+        <a
+          :href="noLink"
+          target="_blank"
+          class="ui-button link cancel"
+          @click="onNo"
+          >{{ noText }}</a
+        >
+        <a
+          :href="okLink"
+          target="_blank"
+          class="ui-button link submit"
+          @click="onOk"
+          >{{ okText }}</a
+        >
+      </div>
+      <div
+        v-else
+        class="ui-message-footer"
+        :class="{ 'footer-material': isMaterial }"
+      >
+        <!-- <button class="ui-button cancel" :class="{deepcancel:!isMaterial}" @click="onNo">{{noText}}</button> -->
+        <button class="ui-button submit" @click="onOk">{{ okText }}</button>
+        <button v-if="ok2" class="ui-button submit" @click="onOk2">
+          {{ ok2Text }}
+        </button>
+      </div>
+    </div>
+  </popup>
 </template>
 <script>
-import {i18n} from "@/lang"
+import { i18n } from "@/lang";
 import Popup from "../popup";
 export default {
-    name: "ui-confirm",
-    components: {
-        Popup
+  name: "ui-confirm",
+  components: {
+    Popup,
+  },
+  data() {
+    return {
+      isMaterial:
+        window.location.pathname.indexOf("material.html") > -1 ||
+        window.location.pathname.indexOf("showMobile.html") > -1 ||
+        window.location.pathname.indexOf("show.html") > -1,
+      show: false,
+      showCloseIcon: true,
+      duration: 0,
+      title: i18n.t("tips.title"),
+      tips: "",
+      icon: null,
+      content: "",
+      okText: i18n.t("common.set"),
+      ok2Text: i18n.t("common.set"),
+      noText: i18n.t("common.giveup"),
+      okLink: null,
+      noLink: null,
+      ok: null,
+      ok2: null,
+      no: null,
+    };
+  },
+  methods: {
+    onOk() {
+      if (this.ok && this.ok(this) === false) {
+        return;
+      }
+      this.onClose();
     },
-    data() {
-        return {
-            isMaterial: window.location.pathname.indexOf('material.html')>-1 || window.location.pathname.indexOf('showMobile.html')>-1 || window.location.pathname.indexOf('show.html')>-1,
-            show: false,
-            showCloseIcon: true,
-            duration: 0,
-            title: i18n.t("tips.title"),
-            tips: "",
-            icon: null,
-            content: "",
-            okText: i18n.t("common.set"),
-            ok2Text: i18n.t("common.set"),
-            noText: i18n.t("common.giveup"),
-            okLink: null,
-            noLink: null,
-            ok: null,
-            ok2: null,
-            no: null
-        };
+    onOk2() {
+      if (this.ok2 && this.ok2(this) === false) {
+        return;
+      }
+      this.onClose();
     },
-    methods: {
-        onOk() {
-            if (this.ok && this.ok(this) === false) {
-                return;
-            }
-            this.onClose();
-        },
-        onOk2() {
-          if (this.ok2 && this.ok2(this) === false) {
-              return;
-          }
-          this.onClose();
-        },
-        onNo() {
-            this.no && this.no();
-            this.onClose();
-        },
-        onClose() {
-            setTimeout(() => {
-                this.show = false;
-                document.body.removeChild(this.$el);
-                this.$destroy();
-            }, this.duration);
-        }
-    }
+    onNo() {
+      this.no && this.no();
+      this.onClose();
+    },
+    onClose() {
+      setTimeout(() => {
+        this.show = false;
+        document.body.removeChild(this.$el);
+        this.$destroy();
+      }, this.duration);
+    },
+  },
 };
 </script>
 
 <style lang="less" scoped>
 .ui-message {
-    width: 400px;
-    min-width: 400px;
-    height: 230px;
+  width: 400px;
+  min-width: 400px;
+
+  &:lang(en) {
+    height: 260px;
+}
 }
-</style>
+</style>

+ 1 - 1
packages/qjkankan-editor/src/components/shared/message/Confirm.vue

@@ -4,7 +4,7 @@
             <div class="ui-message-header" :class="{'header-material':isMaterial}">
                 <span>{{title}}</span>
                 <span @click="onNo" v-if="showCloseIcon">
-                    <i class="iconfont icon_close"></i>
+                    <i class="iconfont icon-close"></i>
                 </span>
             </div>
             <div class="ui-message-main" :class="{'main-material':isMaterial}">

+ 1 - 1
packages/qjkankan-editor/src/components/shared/message/XWindow.vue

@@ -4,7 +4,7 @@
             <div class="ui-message-header">
                 <span>{{title}}</span>
                 <span @click="onNo" v-if="showCloseIcon">
-                    <i class="iconfont icon_close"></i>
+                    <i class="iconfont icon-close"></i>
                 </span>
             </div>
             <div class="ui-message-main">

+ 4 - 4
packages/qjkankan-editor/src/components/shared/uploads/UploadAudio.vue

@@ -3,13 +3,13 @@
         <div>
             <upload ref="uploadFile" media-type="audio" @file-change="onFileChange"></upload>
             <div class="btn-push" v-show="!filename">
-                <i class="iconfont icon_plus"></i>
+                <i class="iconfont icon-works_add"></i>
                 <span>{{tips}}</span>
             </div>
             <div class="filename" v-show="filename"><span>{{filename}}</span></div>
             <button class="ui-button submit" v-show="filename">{{$t('common.change')}}</button>
             <a class="btn-clear" v-show="filename" @click.stop="onClear">
-                <i class="iconfont icon_close"></i>
+                <i class="iconfont icon-close"></i>
             </a>
         </div>
     </div>
@@ -113,10 +113,10 @@ export default {
         }
     }
 
-    .icon_plus {
+    .icon-works_add {
         font-size: 28px;
     }
-    .icon_close {
+    .icon-close {
         color: #fff;
         font-size: 12px;
     }

+ 4 - 4
packages/qjkankan-editor/src/components/shared/uploads/UploadImage.vue

@@ -8,13 +8,13 @@
         <div :class="{'has-image':dataSRC,hover:hover}">
             <upload ref="uploadFile" :limit="limit" media-type="image" :accept-type="acceptType" :to-url="toUrl" @file-change="onFileChange"></upload>
             <div class="btn-push" v-show="!dataSRC">
-                <i class="iconfont icon_plus"></i>
+                <i class="iconfont icon-works_add"></i>
                 <span>{{tips}}</span>
             </div>
             <div class="btn-change">
                 <button class="ui-button submit">{{$t('common.change')}}</button>
                 <a class="btn-clear" v-show="showClear" @click.stop="onClear">
-                    <i class="iconfont icon_close"></i>
+                    <i class="iconfont icon-close"></i>
                 </a>
             </div>
         </div>
@@ -137,10 +137,10 @@ export default {
         }
     }
 
-    .icon_plus {
+    .icon-works_add {
         font-size: 28px;
     }
-    .icon_close {
+    .icon-close {
         color: #fff;
         font-size: 12px;
     }

+ 2 - 2
packages/qjkankan-editor/src/components/shared/uploads/UploadImageMobile.vue

@@ -3,7 +3,7 @@
         <div>
             <upload ref="uploadFile" media-type="image" @file-change="onFileChange"></upload>
             <div class="btn-push" v-show="!dataURL">
-                <i class="iconfont icon_plus"></i>
+                <i class="iconfont icon-works_add"></i>
             </div>
         </div>
     </div>
@@ -67,7 +67,7 @@ export default {
         border-radius: 0.3rem;
     }
 
-    .icon_plus {
+    .icon-works_add {
         font-size: 0.9rem;
     }
 

+ 4 - 4
packages/qjkankan-editor/src/components/shared/uploads/UploadVideo.vue

@@ -8,13 +8,13 @@
         <div :class="{'has-image':cover,hover:hover}">
             <upload ref="uploadFile" media-type="video" @file-change="onFileChange"></upload>
             <div class="btn-push" v-show="!cover">
-                <i class="iconfont icon_plus"></i>
+                <i class="iconfont icon-works_add"></i>
                 <span>{{tips}}</span>
             </div>
             <div class="btn-change">
                 <button class="ui-button submit">{{$t("common.change")}}</button>
                 <a class="btn-clear" v-show="showClear" @click.stop="onClear">
-                    <i class="iconfont icon_close"></i>
+                    <i class="iconfont icon-close"></i>
                 </a>
             </div>
         </div>
@@ -183,10 +183,10 @@ export default {
         }
     }
 
-    .icon_plus {
+    .icon-works_add {
         font-size: 28px;
     }
-    .icon_close {
+    .icon-close {
         color: #fff;
         font-size: 12px;
     }

+ 2 - 2
packages/qjkankan-editor/src/components/tablist/index.vue

@@ -4,7 +4,7 @@
       <i class="iconfont icon_back" @click="moveSlide('forward')"></i>
       <i class="iconfont icon_forward" @click="moveSlide('back')"></i>
       <span class="addBtn" @click="$emit('addGroup')" v-if="!hiddenHover">
-          <i class="iconfont icon_plus"></i>
+          <i class="iconfont icon-works_add"></i>
       </span>
     </template>
     <div class="menu sub-menu" :class="(!isShowScroll&&!deviation?'sm-active ':(cls?'':'addBef')) + ' ' + `${cls}`" :id="id">
@@ -33,7 +33,7 @@
           class="li-add"
           @click="$emit('addGroup')"
         >
-          <i class="iconfont icon_plus"></i>
+          <i class="iconfont icon-works_add"></i>
         </li>
       </ul>
     </div>

+ 140 - 134
packages/qjkankan-editor/src/core/hotspot.js

@@ -1,157 +1,163 @@
 /**
  * krpano 1.20 全景hotspot统一schema
  *
- * 
+ *
  *  */
-import config from '../config'
+
+import config from "../config";
 
 const initState = {
-    id: "",
-    title: "",
-    type: 0, // 热点大类型 
-    ath: 0,
-    atv: 0,
-    link: "",
-    icon: "",
-    visible: true,
-    size: 0,
-    style: {
-        fontSize: 12,
-        position: "top",
-        isHover: false,
-        borderColor: "",
-        fillColor: "",
-        textColor: "",
-        isShowLine: "",
-        isTextWrap: "",
-        lineDirection: "",
-        textDirection: "",
-        textNumPerLine: "",
-        duration: 0,
-        frameNumber: 0,
-        frameWidth: 0,
-    }
-}
+  id: "",
+  title: "",
+  type: 0, // 热点大类型
+  ath: 0,
+  atv: 0,
+  link: "",
+  icon: "",
+  visible: true,
+  size: 0,
+  style: {
+    fontSize: 12,
+    position: "top",
+    isHover: false,
+    borderColor: "",
+    fillColor: "",
+    textColor: "",
+    isShowLine: "",
+    isTextWrap: "",
+    lineDirection: "",
+    textDirection: "",
+    textNumPerLine: "",
+    duration: 0,
+    frameNumber: 0,
+    frameWidth: 0,
+  },
+};
 //基本样式汇总
 const convertBaseStyle = (dest, origin) => {
-    if (dest) {
-        // normal
-        dest.style.fontSize = origin.fontSize
-        dest.style.position = origin.titlePosition
-        // 兼容旧数据
- 
-        if ('visible' in origin && typeof origin.visible == "boolean") {
-            dest.visible = origin.visible ? 0 : 1
-            origin.titleDisplayMode = origin.visible ? 'always' : 'never'
-            delete origin.visible
-            dest.style.position = "top"
-        }
-        if (origin && origin.titleDisplayMode == "always") {
-            dest.visible = 0
-        }
-        if (origin && origin.titleDisplayMode == "never") {
-            dest.visible = 1
-        }
-        if (origin && origin.titleDisplayMode == "hover") {
-            dest.visible = 2
-        }
+  if (dest) {
+    // normal
+
+    dest.style.fontSize = origin.fontSize;
+    dest.style.position = origin.titlePosition;
+    // 兼容旧数据
 
-        dest.style.borderColor = '';
-        dest.style.fillColor = 'rgba(0,0,0,0.8)';
-        dest.style.textColor = 'rgba(255,255,255,1)';
+    if ("visible" in origin && typeof origin.visible == "boolean") {
+      dest.visible = origin.visible ? 0 : 1;
+      origin.titleDisplayMode = origin.visible ? "always" : "never";
+      delete origin.visible;
+      dest.style.position = "top";
     }
-    //custom
-    if (origin && origin.hotspotIconType === 'serial_frame') {
-        dest.style.duration = origin.serialFrameInfo.duration
-        dest.style.frameNumber = origin.serialFrameInfo.frameNumber
-        dest.style.frameWidth = origin.serialFrameInfo.frameWidth
+    if (origin && origin.titleDisplayMode == "always") {
+      dest.visible = 0;
     }
-    //custom
-    if (origin && origin.hotspotIconType === 'personalized_tag') {
-        dest.style.borderColor = origin.personalizedTagInfo.borderColor;
-        dest.style.fillColor = origin.personalizedTagInfo.fillColor
-        dest.style.isTextWrap = origin.personalizedTagInfo.isTextWrap
-        dest.style.lineDirection = origin.personalizedTagInfo.lineDirection
-        dest.style.textColor = origin.personalizedTagInfo.textColor
-        dest.style.textDirection = origin.personalizedTagInfo.textDirection
-        dest.style.textNumPerLine = origin.personalizedTagInfo.textNumPerLine
-        dest.style.isShowLine = origin.personalizedTagInfo.isShowLine
+    if (origin && origin.titleDisplayMode == "never") {
+      dest.visible = 1;
+    }
+    if (origin && origin.titleDisplayMode == "hover") {
+      dest.visible = 2;
     }
 
-}
+    dest.style.borderColor = "";
+    dest.style.fillColor = "rgba(0,0,0,0.8)";
+    dest.style.textColor = "rgba(255,255,255,1)";
+  }
+  //custom
+  if (origin && origin.hotspotIconType === "serial_frame") {
+    dest.style.duration = origin.serialFrameInfo.duration;
+    dest.style.frameNumber = origin.serialFrameInfo.frameNumber;
+    dest.style.frameWidth = origin.serialFrameInfo.frameWidth;
+  }
+  //custom
+  if (origin && origin.hotspotIconType === "personalized_tag") {
+    dest.style.borderColor = origin.personalizedTagInfo.borderColor;
+    dest.style.fillColor = origin.personalizedTagInfo.fillColor;
+    dest.style.isTextWrap = origin.personalizedTagInfo.isTextWrap;
+    dest.style.lineDirection = origin.personalizedTagInfo.lineDirection;
+    dest.style.textColor = origin.personalizedTagInfo.textColor;
+    dest.style.textDirection = origin.personalizedTagInfo.textDirection;
+    dest.style.textNumPerLine = origin.personalizedTagInfo.textNumPerLine;
+    dest.style.isShowLine = origin.personalizedTagInfo.isShowLine;
+  }
+};
 
 const coverSystemIconPart = (origin) => {
-    const duplicate = structuredClone(initState)
-    duplicate.id = origin.name;
-    duplicate.title = origin.hotspotTitle;
-    duplicate.ath = origin.ath;
-    duplicate.atv = origin.atv;
-    duplicate.type = 0;
-    duplicate.icon = origin.img || '';
-    duplicate.link = origin.link || '';
-    duplicate.size = origin.size;
-    convertBaseStyle(duplicate, origin)
-    return duplicate;
-}
+  const duplicate = structuredClone(initState);
+  duplicate.id = origin.name;
+  duplicate.title = origin.hotspotTitle;
+  duplicate.ath = origin.ath;
+  duplicate.atv = origin.atv;
+  duplicate.type = 0;
+  duplicate.icon = origin.img || "";
+  duplicate.link = origin.link || "";
+  duplicate.size = origin.size;
+  convertBaseStyle(duplicate, origin);
+  return duplicate;
+};
 
 const coverImageconPart = (origin) => {
-    const defaultImage = config.getStaticResource('/panoassets/images/hotspot/image_place_holder.png');
-    const duplicate = structuredClone(initState)
-    duplicate.id = origin.name;
-    duplicate.title = origin.hotspotTitle;
-    duplicate.ath = origin.ath;
-    duplicate.atv = origin.atv;
-    duplicate.type = 1;
-    duplicate.icon = origin.customIconInfo.img || defaultImage;
-    duplicate.link = origin.link || '';
-    duplicate.size = origin.size;
-    convertBaseStyle(duplicate, origin)
-    return duplicate;
-}
+  const defaultImage = config.getStaticResource(
+    "/panoassets/images/hotspot/image_place_holder.png"
+  );
+  const duplicate = structuredClone(initState);
+  duplicate.id = origin.name;
+  duplicate.title = origin.hotspotTitle;
+  duplicate.ath = origin.ath;
+  duplicate.atv = origin.atv;
+  duplicate.type = 1;
+  duplicate.icon = origin.customIconInfo.img || defaultImage;
+  duplicate.link = origin.link || "";
+  duplicate.size = origin.size;
+  convertBaseStyle(duplicate, origin);
+  return duplicate;
+};
 const coverSerialFrame = (origin) => {
-    const duplicate = structuredClone(initState);
-    const defaultImage = config.getStaticResource('/panoassets/images/hotspot/image_place_holder.png');
-    // console.log('defaultImage', defaultImage);
-    duplicate.id = origin.name;
-    duplicate.title = origin.hotspotTitle;
-    duplicate.ath = origin.ath;
-    duplicate.atv = origin.atv;
-    duplicate.type = 2;
-    duplicate.icon = origin.serialFrameInfo.img || defaultImage;
-    duplicate.link = origin.link || '';
-    duplicate.size = origin.size;
-    convertBaseStyle(duplicate, origin)
-    return duplicate;
-}
+  const duplicate = structuredClone(initState);
+  const defaultImage = config.getStaticResource(
+    "/panoassets/images/hotspot/image_place_holder.png"
+  );
+  // console.log('defaultImage', defaultImage);
+  duplicate.id = origin.name;
+  duplicate.title = origin.hotspotTitle;
+  duplicate.ath = origin.ath;
+  duplicate.atv = origin.atv;
+  duplicate.type = 2;
 
+  duplicate.icon =
+    origin.serialFrameInfo.img +
+      "?x-oss-process=image/resize,w_128,q_80" ||
+    defaultImage;
+  duplicate.link = origin.link || "";
+  duplicate.size = origin.size;
+  convertBaseStyle(duplicate, origin);
+  return duplicate;
+};
 
 const coverpersonalizedTag = (origin) => {
-    const duplicate = structuredClone(initState);
-    duplicate.id = origin.name;
-    duplicate.title = origin.hotspotTitle;
-    duplicate.ath = origin.ath;
-    duplicate.atv = origin.atv;
-    duplicate.type = 3;
-    duplicate.link = origin.link || '';
-    duplicate.size = origin.size;
-    convertBaseStyle(duplicate, origin)
-    return duplicate;
-}
-
+  const duplicate = structuredClone(initState);
+  duplicate.id = origin.name;
+  duplicate.title = origin.hotspotTitle;
+  duplicate.ath = origin.ath;
+  duplicate.atv = origin.atv;
+  duplicate.type = 3;
+  duplicate.link = origin.link || "";
+  duplicate.size = origin.size;
+  convertBaseStyle(duplicate, origin);
+  return duplicate;
+};
 
 export const convertJQHotspot = (origin) => {
-    const type = origin.hotspotIconType
-    switch (type) {
-        case 'system_icon':
-            return coverSystemIconPart(origin);
-        case 'custom_image':
-            return coverImageconPart(origin);
-        case 'serial_frame':
-            return coverSerialFrame(origin);
-        case 'personalized_tag':
-            return coverpersonalizedTag(origin);
-        default:
-            return coverSystemIconPart(origin);
-    }
-}
-
+  const type = origin.hotspotIconType;
+  switch (type) {
+    case "system_icon":
+      return coverSystemIconPart(origin);
+    case "custom_image":
+      return coverImageconPart(origin);
+    case "serial_frame":
+      return coverSerialFrame(origin);
+    case "personalized_tag":
+      return coverpersonalizedTag(origin);
+    default:
+      return coverSystemIconPart(origin);
+  }
+};

+ 69 - 70
packages/qjkankan-editor/src/core/utils.js

@@ -1,30 +1,28 @@
-import Vue from 'vue'
-import { convertJQHotspot } from './hotspot'
+import Vue from "vue";
+import { convertJQHotspot } from "./hotspot";
 
-let vue = new Vue()
+let vue = new Vue();
 
 export default class Utils {
-  constructor() {
-
-  }
+  constructor() {}
   /**
    * 设置初始视角
    */
   setInitView(krpano, canvas) {
     let url = this.setInitAngleImg(canvas);
-    var sceneName = krpano.get('xml.scene');
+    var sceneName = krpano.get("xml.scene");
     var hlookat = krpano.get("view.hlookat");
     var vlookat = krpano.get("view.vlookat");
     return {
       sceneName,
       hlookat,
       vlookat,
-      url
-    }
+      url,
+    };
   }
 
   scaleCanvas(canvas, width, height) {
-    let w = canvas.width
+    let w = canvas.width;
     let h = canvas.height;
 
     if (width == undefined) {
@@ -33,8 +31,8 @@ export default class Utils {
     if (height == undefined) {
       height = h;
     }
-    var retCanvas = document.createElement('canvas');
-    var retCtx = retCanvas.getContext('2d');
+    var retCanvas = document.createElement("canvas");
+    var retCtx = retCanvas.getContext("2d");
     retCanvas.width = width;
     retCanvas.height = height;
     retCtx.drawImage(canvas, 0, 0, w, h, 0, 0, width, height);
@@ -48,7 +46,7 @@ export default class Utils {
 
   setInitAngleImg(mycanvas) {
     var url = this.getDataURL(mycanvas, "image/jpeg", 600, 400);
-    return url
+    return url;
   }
   radarRotate() {
     // console.log(sceneName,hlookat);
@@ -65,14 +63,15 @@ export default class Utils {
     try {
       const hotspot = convertJQHotspot(param);
       const hotspotStyle = Object.values(hotspot.style);
-      const hotspotString = hotspotStyle.join('|');
+      const hotspotString = hotspotStyle.join("|");
 
       const hotspotSize = (Number(hotspot.size) || 1) * 40;
-      let icon = hotspot.icon.replace(/,/g, '|');
+      let icon = hotspot.icon.replace(/,/g, "|");
+      let title = this.htmlEncode(hotspot.title);
       const callString = `editJQHotspot(
         ${hotspot.id},
         ${hotspot.type},
-        ${hotspot.title},
+        ${title},
         "${icon}",
         ${hotspot.ath},
         ${hotspot.atv},
@@ -84,11 +83,10 @@ export default class Utils {
       // krpano.stopcall(callString);
       krpano.call(callString);
     } catch (error) {
-      console.error('error', error);
+      console.error("error", error);
     }
   }
 
-
   /**
    * 添加热点
    */
@@ -98,20 +96,23 @@ export default class Utils {
      * type: 0,系统图标 , 1.自定义图际. 2.序列帧  3.个性标签
      */
     try {
-      krpano.set("curscreen_x", krpano.get('stagewidth') / 2);
-      krpano.set("curscreen_y", krpano.get('stageheight') / 2);
-      krpano.call("screentosphere(curscreen_x, curscreen_y, curscreen_ath, curscreen_atv);");
+      krpano.set("curscreen_x", krpano.get("stagewidth") / 2);
+      krpano.set("curscreen_y", krpano.get("stageheight") / 2);
+      krpano.call(
+        "screentosphere(curscreen_x, curscreen_y, curscreen_ath, curscreen_atv);"
+      );
       const hotspot = convertJQHotspot(param);
       const hotspotStyle = Object.values(hotspot.style);
-      const hotspotString = hotspotStyle.join('|');
+      const hotspotString = hotspotStyle.join("|");
       const hotspotSize = (Number(hotspot.size) || 1) * 40;
-      const ath = hotspot.ath != '' ? hotspot.ath : krpano.get("curscreen_ath");
-      const atv = hotspot.atv != '' ? hotspot.atv : krpano.get("curscreen_atv");
-      let icon = hotspot.icon.replace(/,/g, '|');
+      const ath = hotspot.ath != "" ? hotspot.ath : krpano.get("curscreen_ath");
+      const atv = hotspot.atv != "" ? hotspot.atv : krpano.get("curscreen_atv");
+      let icon = hotspot.icon.replace(/,/g, "|");
+      let title = this.htmlEncode(hotspot.title);
       const callString = `addJQHotspot(
         ${hotspot.id},
         ${hotspot.type},
-        ${hotspot.title},
+        ${title},
         "${icon}",
         ${ath},
         ${atv},
@@ -122,7 +123,7 @@ export default class Utils {
         )`;
       krpano.call(callString);
     } catch (error) {
-      console.error('error', error);
+      console.error("error", error);
     }
   }
 
@@ -131,20 +132,22 @@ export default class Utils {
    */
 
   getCurrentMousePosition(krpano, hotspotName) {
-    let panoW = krpano.get('stagewidth')
-    let panoH = krpano.get('stageheight')
+    let panoW = krpano.get("stagewidth");
+    let panoH = krpano.get("stageheight");
 
-    let stagex = krpano.get('mouse.stagex')
-    let stagey = krpano.get('mouse.stagey')
+    let stagex = krpano.get("mouse.stagex");
+    let stagey = krpano.get("mouse.stagey");
 
     if (stagex < 0 || stagex > panoW || stagey < 0 || stagey > panoH) {
-      return
+      return;
     }
-
-    krpano.call('screentosphere(mouse.stagex, mouse.stagey, toh, tov)')
-    krpano.set(`hotspot[${hotspotName}].ath`, krpano.get('toh'));
-    krpano.set(`hotspot[${hotspotName}].atv`, krpano.get('tov'));
-
+    krpano.call("screentosphere(mouse.stagex, mouse.stagey, toh, tov)");
+    // const toh = krpano.get('toh');
+    // const tov = krpano.get('tov');
+    // console.log('toh', toh);
+    // console.log('tov', tov);
+    krpano.set(`hotspot[${hotspotName}].ath`, krpano.get("toh"));
+    krpano.set(`hotspot[${hotspotName}].atv`, krpano.get("tov"));
   }
 
   htmlEncode(str) {
@@ -155,69 +158,67 @@ export default class Utils {
     s = s.replace(/\(/g, "(");
     s = s.replace(/\)/g, ")");
     s = s.replace(/,/g, ",");
+    s = s.replace(/</g, "◻");
+    s = s.replace(/>/g, "◻");
+    s = s.replace(/\*/g, "◻");
+    s = s.replace(/\*/g, "◻");
+
     return s;
   }
 
   /**
-   * 
-   * @param {*} 定位热点 
+   *
+   * @param {*} 定位热点
    */
 
   looktohotspot(krpano, hotspotName) {
-    var curFov = krpano.get('view.fov');
-    krpano.call('looktohotspot(' + hotspotName + ',' + curFov + ')');
+    var curFov = krpano.get("view.fov");
+    krpano.call("looktohotspot(" + hotspotName + "," + curFov + ")");
   }
 
-
   /**
-   * 
-   * @param {*} 定位热点 
+   *
+   * @param {*} 定位热点
    */
 
   getHotspotHV(krpano, hotspotName) {
     var ath = krpano.get(`hotspot[${hotspotName}].ath`);
     var atv = krpano.get(`hotspot[${hotspotName}].atv`);
-    return { ath, atv }
+    return { ath, atv };
   }
 
-
   /**
    * 打开热点链接
    */
 
   linkopen(sceneCode, id) {
-    if (window.location.pathname.indexOf('show') > -1) {
-      vue.$bus.emit('clickHotspot', id)
-    }
-    else if (window.location.pathname.indexOf('edit') > -1) {
-      vue.$bus.emit('openHotspot', id)
+    if (window.location.pathname.indexOf("show") > -1) {
+      vue.$bus.emit("clickHotspot", id);
+    } else if (window.location.pathname.indexOf("edit") > -1) {
+      vue.$bus.emit("openHotspot", id);
+    } else {
+      window.parent.postMessage(
+        { event: "hotspot", targetCode: sceneCode },
+        "*"
+      );
     }
-    else {
-      window.parent.postMessage({ event: 'hotspot', targetCode: sceneCode }, '*')
-    }
-
   }
 
-
-
-
-
   /**
    * 初始化
    */
 
   initHotspot(krpano, someData, type) {
-
     if (!someData) {
-      return
+      return;
     }
-    let mysd = someData
-    if (typeof someData == 'string') {
-      mysd = JSON.parse(someData)
+    let mysd = someData;
+    if (typeof someData == "string") {
+      mysd = JSON.parse(someData);
     }
 
-    mysd.hotspots.forEach(item => {
-      this.addhotspot(krpano, item, type)
+    mysd.hotspots.forEach((item) => {
+      this.addhotspot(krpano, item, type);
     });
   }
 
@@ -229,17 +230,15 @@ export default class Utils {
     try {
       krpano.call(`set_hotspot_visible(${toggle})`);
     } catch (e) {
-      e
+      e;
     }
   }
 
   /**
    * 显示隐藏热点
    */
-
 }
 
-
 // toggleHotspot(krpano,someData,toggle){
 //   if (!someData) {
 //     return
@@ -248,4 +247,4 @@ export default class Utils {
 //   mysd.hotspots.forEach(item => {
 //     krpano.set(`hotspot[${item.name}].visible`,toggle);
 //   });
-// }
+// }

+ 67 - 52
packages/qjkankan-editor/src/directives/vTitleInEditor.js

@@ -1,71 +1,86 @@
-import Vue from 'vue'
+import Vue from "vue";
 
-let timerId = null
-let intervalId = null
-let isShowTitle = false
-let titleNode = null
+let timerId = null;
+let intervalId = null;
+let isShowTitle = false;
+let titleNode = null;
 
 function removeTitle() {
   if (!isShowTitle) {
-    clearTimeout(timerId)
+    clearTimeout(timerId);
   } else {
-    isShowTitle = false
-    document.body.removeChild(titleNode)
-    clearInterval(intervalId)
+    isShowTitle = false;
+    document.body.removeChild(titleNode);
+    clearInterval(intervalId);
   }
 }
 
-Vue.directive('title', {
+Vue.directive("title", {
   bind: function (el, binding) {
     if (!binding.value) {
-      return
+      return;
     }
-    el.addEventListener('mousemove', function(e) {
-      if (!isShowTitle) {
-        clearTimeout(timerId)
-        timerId = setTimeout(() => {
-          isShowTitle = true
+    el.addEventListener(
+      "mousemove",
+      function (e) {
+        if (!isShowTitle) {
+          clearTimeout(timerId);
+          timerId = setTimeout(() => {
+            isShowTitle = true;
 
-          titleNode = document.createElement('div')
+            titleNode = document.createElement("div");
 
-          titleNode.style.position = 'fixed',
-          titleNode.style.zIndex = 100,
-          titleNode.style.backgroundColor = '#191A1C'
-          titleNode.style.borderRadius = '2px'
-          titleNode.style.border = '1px solid rgba(151, 151, 151, 0.2)'
-          titleNode.style.padding = '2px 6px'
-          titleNode.style.fontSize = '12px'
-          titleNode.style.color = 'rgba(255, 255, 255, 0.6)'
-          titleNode.innerText = binding.value
-          titleNode.style.left = e.clientX + 11 + 'px'
-          titleNode.style.top = e.clientY + 18 + 'px'
+            titleNode.style.position = "fixed";
+            titleNode.style.zIndex = 2147483647;
+            titleNode.style.backgroundColor = "#191A1C";
+            titleNode.style.borderRadius = "2px";
+            titleNode.style.border = "1px solid rgba(151, 151, 151, 0.2)";
+            titleNode.style.padding = "2px 6px";
+            titleNode.style.fontSize = "12px";
+            titleNode.style.color = "rgba(255, 255, 255, 0.6)";
+            titleNode.innerText = binding.value;
+            titleNode.style.left = e.clientX + 11 + "px";
+            titleNode.style.top = e.clientY + 18 + "px";
 
-          document.body.appendChild(titleNode)
+            document.body.appendChild(titleNode);
 
-          if (e.clientX + 11 + titleNode.offsetWidth > document.documentElement.clientWidth) {
-            titleNode.style.left = document.documentElement.clientWidth - titleNode.offsetWidth + 'px'
-          }
-          if (e.clientY + 18 + titleNode.offsetHeight > document.documentElement.clientHeight) {
-            titleNode.style.top = document.documentElement.clientHeight - titleNode.offsetHeight + 'px'
-          }
-
-          intervalId = setInterval(() => {
-            if (!document.contains(el)) {
-              removeTitle()
+            if (
+              e.clientX + 11 + titleNode.offsetWidth >
+              document.documentElement.clientWidth
+            ) {
+              titleNode.style.left =
+                document.documentElement.clientWidth -
+                titleNode.offsetWidth +
+                "px";
+            }
+            if (
+              e.clientY + 18 + titleNode.offsetHeight >
+              document.documentElement.clientHeight
+            ) {
+              titleNode.style.top =
+                document.documentElement.clientHeight -
+                titleNode.offsetHeight +
+                "px";
             }
-          }, 300);
-          
-        }, 500);
+
+            intervalId = setInterval(() => {
+              if (!document.contains(el)) {
+                removeTitle();
+              }
+            }, 300);
+          }, 500);
+        }
+      },
+      {
+        passive: false,
       }
-    }, {
-      passive: false,
-    })
+    );
 
-    el.addEventListener('mouseleave', removeTitle)
-    el.addEventListener('mousedown', removeTitle)
-    el.addEventListener('keydown', removeTitle)
-    el.addEventListener('scroll', removeTitle)
-    el.addEventListener('dragover', removeTitle)
-    el.addEventListener('dragleave', removeTitle)
+    el.addEventListener("mouseleave", removeTitle);
+    el.addEventListener("mousedown", removeTitle);
+    el.addEventListener("keydown", removeTitle);
+    el.addEventListener("scroll", removeTitle);
+    el.addEventListener("dragover", removeTitle);
+    el.addEventListener("dragleave", removeTitle);
   },
-})
+});

+ 67 - 52
packages/qjkankan-editor/src/directives/vTitleInManageCenter.js

@@ -1,70 +1,85 @@
-import Vue from 'vue'
+import Vue from "vue";
 
-let timerId = null
-let intervalId = null
-let isShowTitle = false
-let titleNode = null
+let timerId = null;
+let intervalId = null;
+let isShowTitle = false;
+let titleNode = null;
 
 function removeTitle() {
   if (!isShowTitle) {
-    clearTimeout(timerId)
+    clearTimeout(timerId);
   } else {
-    isShowTitle = false
-    document.body.removeChild(titleNode)
-    clearInterval(intervalId)
+    isShowTitle = false;
+    document.body.removeChild(titleNode);
+    clearInterval(intervalId);
   }
 }
 
-Vue.directive('title', {
+Vue.directive("title", {
   bind: function (el, binding) {
     if (!binding.value) {
-      return
+      return;
     }
-    el.addEventListener('mousemove', function(e) {
-      if (!isShowTitle) {
-        clearTimeout(timerId)
-        timerId = setTimeout(() => {
-          isShowTitle = true
+    el.addEventListener(
+      "mousemove",
+      function (e) {
+        if (!isShowTitle) {
+          clearTimeout(timerId);
+          timerId = setTimeout(() => {
+            isShowTitle = true;
 
-          titleNode = document.createElement('div')
+            titleNode = document.createElement("div");
 
-          titleNode.style.position = 'fixed',
-          titleNode.style.zIndex = 100,
-          titleNode.style.backgroundColor = '#ffffff'
-          titleNode.style.borderRadius = '2px'
-          titleNode.style.border = '1px solid rgba(151, 151, 151, 0.2)'
-          titleNode.style.padding = '2px 6px'
-          titleNode.style.fontSize = '12px'
-          titleNode.style.color = '#323233'
-          titleNode.innerText = binding.value
-          titleNode.style.left = e.clientX + 11 + 'px'
-          titleNode.style.top = e.clientY + 18 + 'px'
+            titleNode.style.position = "fixed";
+            titleNode.style.zIndex = 2147483647;
+            titleNode.style.backgroundColor = "#ffffff";
+            titleNode.style.borderRadius = "2px";
+            titleNode.style.border = "1px solid rgba(151, 151, 151, 0.2)";
+            titleNode.style.padding = "2px 6px";
+            titleNode.style.fontSize = "12px";
+            titleNode.style.color = "#323233";
+            titleNode.innerText = binding.value;
+            titleNode.style.left = e.clientX + 11 + "px";
+            titleNode.style.top = e.clientY + 18 + "px";
 
-          document.body.appendChild(titleNode)
-          if (e.clientX + 11 + titleNode.offsetWidth > document.documentElement.clientWidth) {
-            titleNode.style.left = document.documentElement.clientWidth - titleNode.offsetWidth + 'px'
-          }
-          if (e.clientY + 18 + titleNode.offsetHeight > document.documentElement.clientHeight) {
-            titleNode.style.top = document.documentElement.clientHeight - titleNode.offsetHeight + 'px'
-          }
-
-          intervalId = setInterval(() => {
-            if (!document.contains(el)) {
-              removeTitle()
+            document.body.appendChild(titleNode);
+            if (
+              e.clientX + 11 + titleNode.offsetWidth >
+              document.documentElement.clientWidth
+            ) {
+              titleNode.style.left =
+                document.documentElement.clientWidth -
+                titleNode.offsetWidth +
+                "px";
+            }
+            if (
+              e.clientY + 18 + titleNode.offsetHeight >
+              document.documentElement.clientHeight
+            ) {
+              titleNode.style.top =
+                document.documentElement.clientHeight -
+                titleNode.offsetHeight +
+                "px";
             }
-          }, 300);
-          
-        }, 500);
+
+            intervalId = setInterval(() => {
+              if (!document.contains(el)) {
+                removeTitle();
+              }
+            }, 300);
+          }, 500);
+        }
+      },
+      {
+        passive: false,
       }
-    }, {
-      passive: false,
-    })
+    );
 
-    el.addEventListener('mouseleave', removeTitle)
-    el.addEventListener('mousedown', removeTitle)
-    el.addEventListener('keydown', removeTitle)
-    el.addEventListener('scroll', removeTitle)
-    el.addEventListener('dragover', removeTitle)
-    el.addEventListener('dragleave', removeTitle)
+    el.addEventListener("mouseleave", removeTitle);
+    el.addEventListener("mousedown", removeTitle);
+    el.addEventListener("keydown", removeTitle);
+    el.addEventListener("scroll", removeTitle);
+    el.addEventListener("dragover", removeTitle);
+    el.addEventListener("dragleave", removeTitle);
   },
-})
+});

+ 1 - 1
packages/qjkankan-editor/src/directives/vTooltipInEditor.js

@@ -26,7 +26,7 @@ Vue.directive("tooltip", {
       function (e) {
         tooltipNode = document.createElement("div");
         tooltipNode.style.position = "fixed";
-        tooltipNode.style.zIndex = 100;
+        tooltipNode.style.zIndex = 2147483647;
         tooltipNode.style.backgroundColor = "#191A1C";
         tooltipNode.style.border = "1px solid rgba(151, 151, 151, 0.2)";
         tooltipNode.style.borderRadius = "3px";

+ 1 - 1
packages/qjkankan-editor/src/directives/vTooltipInManageCenter.js

@@ -21,7 +21,7 @@ Vue.directive('tooltip', {
     el.addEventListener('mouseenter', function(e) {
       tooltipNode = document.createElement('div')
       tooltipNode.style.position = 'fixed'
-      tooltipNode.style.zIndex = 100000
+      tooltipNode.style.zIndex = 2147483647
       tooltipNode.style.backgroundColor = '#ffffff'
       tooltipNode.style.border = '1px solid rgba(151, 151, 151, 0.2)'
       tooltipNode.style.borderRadius = '3px'

+ 6 - 2
packages/qjkankan-editor/src/framework/EditorAppLayout.vue

@@ -2,17 +2,21 @@
   <div class="app-layout">
     <app-head class="app-head"></app-head>
     <app-main></app-main>
+    <notify></notify>
   </div>
 </template>
 <script>
 import AppHead from "./EditorHead.vue";
 import AppMain from "./EditorMain.vue";
+import Notify from "@/components/notify.vue";
+
 export default {
   name: "app-layout",
   components: {
     AppHead,
-    AppMain
-  }
+    AppMain,
+    Notify
+  },
 };
 </script>
 <style lang="less">

+ 14 - 4
packages/qjkankan-editor/src/framework/EditorHead.vue

@@ -10,7 +10,7 @@
       @click="onView"
       :class="{ disable: !canLoad || isEditing }"
     >
-      <i class="iconfont iconeditor_preview"></i>
+      <i class="iconfont icon-editor_play"></i>
       {{ preview }}
     </div>
 
@@ -19,7 +19,7 @@
       @click="onSave"
       :class="{ disable: !canLoad || isEditing }"
     >
-      <i class="iconfont iconeditor_save"></i>
+      <i class="iconfont icon-editor_save"></i>
       {{ savetips }}
     </div>
     <preview
@@ -118,7 +118,8 @@ export default {
           },
           () => {
             this.$msg.success(this.$i18n.t("gather.save_done"));
-            document.title = this.info.name;
+            // document.title = this.info.name;
+            document.title = this.info.name || this.$i18n.t("gather.no_title");
             // this.getInfo().then((res) => {
             //   // getInfo里调用了后端接口,底层用了jquery的网络请求方法,为啥会导致promise嵌套没有展平,res拿到的不是promise 对象的resolve值而是promise对象本身????
             //   res.then(() => {
@@ -204,6 +205,14 @@ export default {
             return false;
           }
         }
+
+        //新增不上传背景底图限制
+        if (this.info.coverInfo.coverImgBac === "imgTile") {
+          if (!this.info.coverInfo.coverBac) {
+            this.$msg.warning(this.$i18n.t("gather.converinfo_no_valid"));
+            return false;
+          }
+        }
       }
       return true;
       // this.lockHotspotResourceTree();
@@ -266,7 +275,8 @@ export default {
           },
           () => {
             this.$msg.success(this.$i18n.t("gather.save_done"));
-            document.title = this.info.name;
+            // document.title = this.info.name;
+            document.title = this.info.name || this.$i18n.t("gather.no_title");
             $waiting.hide();
             // this.getInfo();
             // this.$store.commit("UpdateIsShowState", true);

+ 8 - 3
packages/qjkankan-editor/src/framework/EditorMain.vue

@@ -21,11 +21,11 @@ export default {
   name: "editor-main",
   components: {
     AppMenu,
-    AppPlay
+    AppPlay,
   },
   created() {},
   async mounted() {},
-  computed: {}
+  computed: {},
 };
 </script>
 
@@ -43,7 +43,12 @@ export default {
   > .app-view {
     position: relative;
     flex: 1 0 auto;
-    height: 100%;
+    min-height: 100%;
+    overflow-y: scroll;
+    display: flex;
+    > div {
+      flex: 1;
+    }
   }
 }
 </style>

+ 146 - 73
packages/qjkankan-editor/src/framework/play/pano/components/list.vue

@@ -1,58 +1,126 @@
 <template>
   <div class="bar-list" v-if="show" :class="{ disable: isEditing }">
-    <div class="top-con" v-show="currentScenesList.length > 0"
-    :style="`width:${(Math.max(scenesListW,secondaryW)>1150)?'100%':((Math.max(scenesListW,secondaryW) + 120)+'px')}`"
+    <div
+      class="top-con"
+      v-show="currentScenesList.length > 0"
+      :style="`width:${
+        Math.max(scenesListW, secondaryW) > 1150
+          ? '100%'
+          : Math.max(scenesListW, secondaryW) + 120 + 'px'
+      }`"
     >
-      <div class="swiper-container" 
-      :style="`width:${scenesListW>1150?'100%':(scenesListW+'px')}`"
-       id="swScenes" ref="sw"
-        v-swiper:mySwiper="swiperOptions" v-if="currentScenesList.length > 0">
+      <div
+        class="swiper-container"
+        :style="`width:${scenesListW > 1150 ? '100%' : scenesListW + 'px'}`"
+        id="swScenes"
+        ref="sw"
+        v-swiper:mySwiper="swiperOptions"
+        v-if="currentScenesList.length > 0"
+      >
         <ul class="swiper-wrapper">
           <li
-            v-tooltip="item.type === '4dkk' ? $i18n.t('navigation.scene_edit_tips') : ''" @click="tabCurrentScene(item)"
+            v-tooltip="
+              item.type === '4dkk' ? $i18n.t('navigation.scene_edit_tips') : ''
+            "
+            @click="tabCurrentScene(item)"
             class="swiper-slide"
             :class="{
               active: currentScene.id == item.id,
-              loopspan: item.sceneTitle.length > spanlength && currentScene.id == item.id,
+              loopspan:
+                item.sceneTitle.length > spanlength &&
+                currentScene.id == item.id,
             }"
-            :style="{ backgroundImage: `url(${item.icon})`,}"
-            v-for="(item, i) in currentScenesList" :key="item.id"
+            :style="{ backgroundImage: `url(${item.icon})` }"
+            v-for="(item, i) in currentScenesList"
+            :key="item.id"
           >
-            <i class="iconfont icon-edit_type_3d" :class="{ iconedit_type_panorama: item.type !== '4dkk' }"></i>
+            <i
+              class="iconfont icon-edit_type_3d"
+              :class="{ iconedit_type_panorama: item.type !== '4dkk' }"
+            ></i>
             <div>
-              <span v-if="currentScene.id == item.id">{{ item.sceneTitle }}</span>
-              <span v-else>{{ item.sceneTitle.length > spanlength ? item.sceneTitle.slice(0, spanlength) :
-                  item.sceneTitle
+              <span v-if="currentScene.id == item.id">{{
+                item.sceneTitle
+              }}</span>
+              <span v-else>{{
+                item.sceneTitle.length > spanlength
+                  ? item.sceneTitle.slice(0, spanlength)
+                  : item.sceneTitle
               }}</span>
             </div>
           </li>
         </ul>
       </div>
 
-      <div class="swiper-container" :style="`width:${secondaryW}px`" id="swSecondary" ref="sw1"
-        v-swiper:mySwipera="swiperOptions" v-if="!(secondaryList.length === 1 && (secondaryList[0].name === '默认二级分组'||secondaryList[0].name === $i18n.t('navigation.default_group_two')))">
+      <div
+        class="swiper-container"
+        :style="`width:${secondaryW}px`"
+        id="swSecondary"
+        ref="sw1"
+        v-swiper:mySwipera="swiperOptions"
+        v-if="
+          !(
+            secondaryList.length === 1 &&
+            (secondaryList[0].name === '默认二级分组' ||
+              secondaryList[0].name === $i18n.t('navigation.default_group_two'))
+          )
+        "
+      >
         <ul class="swiper-wrapper">
-          <li class="swiper-slide" @click="tabSecondary(item)" :class="{
-            active: currentSecondary.id == item.id,
-            loopspan: fixTitle(item.name).length > spanlength && currentSecondary.id == item.id,
-          }" v-for="(item, i) in secondaryList" :key="i">
-            <span v-if="currentSecondary.id == item.id">{{ fixTitle(item.name) }}</span>
-            <span v-else>{{ fixTitle(item.name).length > spanlength ? fixTitle(item.name).slice(0, spanlength) : fixTitle(item.name) }}</span>
+          <li
+            class="swiper-slide"
+            @click="tabSecondary(item)"
+            :class="{
+              active: currentSecondary.id == item.id,
+              loopspan:
+                fixTitle(item.name).length > spanlength &&
+                currentSecondary.id == item.id,
+            }"
+            v-for="(item, i) in secondaryList"
+            :key="i"
+          >
+            <span v-if="currentSecondary.id == item.id">{{
+              fixTitle(item.name)
+            }}</span>
+            <span v-else>{{
+              fixTitle(item.name).length > spanlength
+                ? fixTitle(item.name).slice(0, spanlength)
+                : fixTitle(item.name)
+            }}</span>
           </li>
         </ul>
       </div>
     </div>
 
-    <div class="swiper-container"
-    :style="`width:${catalogRootW>innerW?'100%':(catalogRootW+'px')}`" id="swcatalogRoot" ref="sw2"
-      v-swiper:mySwiperb="swiperOptions" v-if="metadata.catalogRoot.length > 0 && metadata.catalogs.length > 1">
+    <div
+      class="swiper-container"
+      :style="`width:${catalogRootW > innerW ? '100%' : catalogRootW + 'px'}`"
+      id="swcatalogRoot"
+      ref="sw2"
+      v-swiper:mySwiperb="swiperOptions"
+      v-if="metadata.catalogRoot.length > 0 && metadata.catalogs.length > 1"
+    >
       <ul class="swiper-wrapper" v-if="metadata.catalogRoot.length > 1">
-        <li class="swiper-slide" :class="{
-          active: currentCatalogRoot.id == item.id,
-          loopspan: fixTitle(item.name).length > spanlength && currentCatalogRoot.id == item.id,
-        }" @click="tabRoot(item)" v-for="(item, i) in metadata.catalogRoot" :key="i">
-          <span v-if="currentCatalogRoot.id == item.id">{{ fixTitle(item.name) }}</span>
-          <span v-else>{{ fixTitle(item.name).length > spanlength ? fixTitle(item.name).slice(0, spanlength) : fixTitle(item.name) }}</span>
+        <li
+          class="swiper-slide"
+          :class="{
+            active: currentCatalogRoot.id == item.id,
+            loopspan:
+              fixTitle(item.name).length > spanlength &&
+              currentCatalogRoot.id == item.id,
+          }"
+          @click="tabRoot(item)"
+          v-for="(item, i) in metadata.catalogRoot"
+          :key="i"
+        >
+          <span v-if="currentCatalogRoot.id == item.id">{{
+            fixTitle(item.name)
+          }}</span>
+          <span v-else>{{
+            fixTitle(item.name).length > spanlength
+              ? fixTitle(item.name).slice(0, spanlength)
+              : fixTitle(item.name)
+          }}</span>
         </li>
       </ul>
     </div>
@@ -66,18 +134,17 @@ import { directive } from "vue-awesome-swiper";
 // import style (<= Swiper 5.x)
 import "swiper/css/swiper.css";
 
-
 export default {
   data() {
     return {
       spanlength: 6,
       show: false,
-      innerW:1150,
+      innerW: 1150,
       swidth: {
-        "swcatalogRoot": 104,
-        "swSecondary": 84,
-        "swScenes": 72,
-      }
+        swcatalogRoot: 104,
+        swSecondary: 84,
+        swScenes: 72,
+      },
     };
   },
   directives: {
@@ -121,13 +188,15 @@ export default {
     }),
 
     scenesListW() {
-      return this.currentScenesList.length * (this.swidth['swScenes'] + 10)
+      return this.currentScenesList.length * (this.swidth["swScenes"] + 10);
     },
     secondaryW() {
-      return this.secondaryList.length * (this.swidth['swSecondary'] + 10)
+      return this.secondaryList.length * (this.swidth["swSecondary"] + 10);
     },
     catalogRootW() {
-      return this.metadata.catalogRoot.length * (this.swidth['swcatalogRoot'] + 10)
+      return (
+        this.metadata.catalogRoot.length * (this.swidth["swcatalogRoot"] + 10)
+      );
     },
     swiperOptions() {
       return {
@@ -135,20 +204,20 @@ export default {
         centeredSlides: true,
         centerInsufficientSlides: true,
         centeredSlidesBounds: true,
-        freeMode: true
+        freeMode: true,
       };
     },
   },
   methods: {
-    fixTitle(name){
-      if (name=='默认二级分组') {
-        name = this.$i18n.t('navigation.default_group_two')
-      } else if (name=='一级分组') {
-        name = this.$i18n.t('navigation.group_one')
-      } else{
-        name = name
+    fixTitle(name) {
+      if (name == "默认二级分组") {
+        name = this.$i18n.t("navigation.default_group_two");
+      } else if (name == "一级分组") {
+        name = this.$i18n.t("navigation.group_one");
+      } else {
+        name = name;
       }
-      return name
+      return name;
     },
     loadList() {
       this.$nextTick(() => {
@@ -204,31 +273,29 @@ export default {
     width: 100%;
     position: relative;
 
-    >ul {
+    > ul {
       margin: 0 auto;
-      >li {
+      > li {
         margin: 0 5px;
         white-space: nowrap;
 
-        >span,
-        >div>span {
+        > span,
+        > div > span {
           cursor: pointer;
           display: inline-block;
           color: rgba(255, 255, 255, 0.6);
         }
 
         &.loopspan {
-
-          >span,
-          >div>span {
+          > span,
+          > div > span {
             animation: 5s wordsLoop linear infinite normal;
           }
         }
 
         &.active {
-
-          >span,
-          >div>span {
+          > span,
+          > div > span {
             color: rgba(255, 255, 255, 1);
           }
         }
@@ -239,13 +306,18 @@ export default {
   .top-con {
     margin: 0 auto 10px;
     padding: 10px 0;
-    background: linear-gradient(268deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.4) 25%, rgba(0, 0, 0, 0.4) 75%, rgba(0, 0, 0, 0) 100%);
-
+    background: linear-gradient(
+      268deg,
+      rgba(0, 0, 0, 0) 0%,
+      rgba(0, 0, 0, 0.4) 25%,
+      rgba(0, 0, 0, 0.4) 75%,
+      rgba(0, 0, 0, 0) 100%
+    );
   }
 
   #swcatalogRoot {
-    >ul {
-      >li {
+    > ul {
+      > li {
         width: 104px;
         background: rgba(0, 0, 0, 0.5);
         border-radius: 4px;
@@ -254,7 +326,7 @@ export default {
         box-sizing: border-box;
         overflow: hidden;
 
-        >span {
+        > span {
           width: 100%;
           word-break: keep-all;
         }
@@ -269,14 +341,14 @@ export default {
   #swSecondary {
     margin: 20px auto 10px;
 
-    >ul {
-      >li {
+    > ul {
+      > li {
         width: 84px;
         box-sizing: border-box;
         overflow: hidden;
         padding-bottom: 6px;
 
-        >span {
+        > span {
           width: 100%;
           word-break: keep-all;
         }
@@ -302,8 +374,8 @@ export default {
   }
 
   #swScenes {
-    >ul {
-      >li {
+    > ul {
+      > li {
         cursor: pointer;
         width: 72px;
         height: 72px;
@@ -334,7 +406,7 @@ export default {
           }
         }
 
-        >div {
+        > div {
           position: absolute;
           bottom: 0;
           left: 0;
@@ -343,7 +415,7 @@ export default {
           width: 100%;
           overflow: hidden;
 
-          >span {
+          > span {
             width: 100%;
             line-height: 20px;
             word-break: keep-all;
@@ -353,8 +425,9 @@ export default {
         &.active {
           border: 1px solid @color;
 
-          >div {
-            >span {}
+          > div {
+            > span {
+            }
           }
         }
       }

+ 3 - 5
packages/qjkankan-editor/src/framework/play/pano/index.vue

@@ -52,6 +52,7 @@ import { $waiting } from "@/components/shared/loading";
 import Snapshot from "@/components/Snapshot";
 import { uploadCover, searchInAll3DScenes } from "@/api";
 import config from "@/config";
+import { isUpgradeAdapter } from "@/utils/fixVersion";
 
 let __krfn = krfn.default;
 
@@ -97,18 +98,15 @@ export default {
         $("#pano").empty();
         if (!newVal.version) {
           // v1.3之前在作品中新增的三维场景,没有version这个值,需要查询。
-
           searchInAll3DScenes(
             {
               searchKey: newVal.sceneTitle,
             },
             (res) => {
-              //@TODO 坑位,现时后端场景V4/V3 是以isUpgrade(Boolean)做为检验
               const originItem = res.data.list.find((item) => {
                 return item.num === newVal.sceneCode;
               });
-
-              const isVersion = originItem.isUpgrade === 1 ? "V4" : "V3";
+              const isVersion = isUpgradeAdapter(originItem.isUpgrade);
               newVal.version = isVersion;
               this.currentSceneVersion = isVersion;
             }
@@ -188,7 +186,7 @@ export default {
     isConfirmingPosi(newVal) {
       this.inter && clearInterval(this.inter);
       this.inter = null;
-      console.log(newVal, "isConfirmingPosiisConfirmingPosi");
+      console.log("isConfirmingPosi", newVal);
       if (newVal) {
         this.inter = setInterval(() => {
           __krfn.utils.getCurrentMousePosition(this.$getKrpano(), newVal);

+ 29 - 14
packages/qjkankan-editor/src/framework/show/component/swp.vue

@@ -1,19 +1,34 @@
 <template>
-    <div class="clip-scroller" ref="sw"  v-swiper:mySwiper="swiperOptions">
-      <ul class="pic-list swiper-wrapper"  v-if="scenes.length > 0" ref="pic">
-        <li class="swiper-slide" :title="item.sceneTitle" @click="handleVR(item)" v-for="(item, i) in scenes" :key="i">
-          <div :class="{ active: selected.sceneCode == item.sceneCode }">
-            <img :src="item.icon + `?${Math.random()}`" alt="" />
-            <i class="iconfont iconedit_type_3d" :class="{ iconedit_type_panorama: item.type !== '4dkk' }"></i>
-            <rollName :offset="20" :active="selected.sceneCode == item.sceneCode" class="pic-name" :myref="'subw' + item.id" :name="item.sceneTitle" />
-          </div>
-        </li>
-      </ul>
-    </div>
+  <div class="clip-scroller" ref="sw" v-swiper:mySwiper="swiperOptions">
+    <ul class="pic-list swiper-wrapper" v-if="scenes.length > 0" ref="pic">
+      <li
+        class="swiper-slide"
+        :title="item.sceneTitle"
+        @click="handleVR(item)"
+        v-for="(item, i) in scenes"
+        :key="i"
+      >
+        <div :class="{ active: selected.sceneCode == item.sceneCode }">
+          <img :src="item.icon + `?${Math.random()}`" alt="" />
+          <i
+            class="iconfont iconedit_type_3d"
+            :class="{ iconedit_type_panorama: item.type !== '4dkk' }"
+          ></i>
+          <rollName
+            :offset="20"
+            :active="selected.sceneCode == item.sceneCode"
+            class="pic-name"
+            :myref="'subw' + item.id"
+            :name="item.sceneTitle"
+          />
+        </div>
+      </li>
+    </ul>
+  </div>
 </template>
 
 <script>
 export default {
-  props:[]
-}
-</script>
+  props: [],
+};
+</script>

+ 109 - 98
packages/qjkankan-editor/src/framework/show/index.vue

@@ -1,15 +1,27 @@
 <template>
   <div class="panocon">
     <template v-if="showInfo">
-      <iframe allowfullscreen="true" v-if="activeItem.type=='4dkk'" 
-      :src="`/spc.html?m=${activeItem.sceneCode}&lang=zh`" frameborder="0"></iframe>
-      <div v-show="activeItem.type!='4dkk'" id="pano"></div>
+      <iframe
+        allowfullscreen="true"
+        v-if="activeItem.type == '4dkk'"
+        :src="`/spc.html?m=${activeItem.sceneCode}&lang=zh`"
+        frameborder="0"
+      ></iframe>
+      <div v-show="activeItem.type != '4dkk'" id="pano"></div>
 
-      <div class="pano-logo" v-if="showInfo.isLogo&&activeItem.type!='4dkk'">
-        <img :src="showInfo.logo||require('@/assets/images/default/img_logoshow@2x.png')" alt="" />
+      <div
+        class="pano-logo"
+        v-if="showInfo.isLogo && activeItem.type != '4dkk'"
+      >
+        <img
+          :src="
+            showInfo.logo ||
+            require('@/assets/images/default/img_logoshow@2x.png')
+          "
+          alt=""
+        />
       </div>
 
-
       <div
         class="oper-tips"
         :class="{ hidetips: !showTips }"
@@ -43,7 +55,7 @@
         @close="showPreview = false"
       />
 
-      <ul class="aside" v-if="activeItem.type!='4dkk'">
+      <ul class="aside" v-if="activeItem.type != '4dkk'">
         <li v-for="(item, i) in aside" :key="i">
           <span @click="handleItem(item)">
             <i class="iconfont" :class="item.icon"></i>
@@ -53,28 +65,27 @@
     </template>
     <template v-else>
       <div class="hasDel" v-if="loadFinish">
-      <div>
-        <img :src="$noresult" alt="">
-        <p>作品已被删除</p>
+        <div>
+          <img :src="$noresult" alt="" />
+          <p>作品已被删除</p>
+        </div>
       </div>
-    </div>
-
     </template>
   </div>
 </template>
 
 <script>
 import * as krfn from "@/core/index.js";
-import { getPanoInfo, checkPassword,checkWork } from "@/api";
+import { getPanoInfo, checkPassword, checkWork } from "@/api";
 import password from "./popup/password";
 import preview from "./popup/preview";
-import { $smallWaiting } from '@/components/shared/loading'
-
+import { $smallWaiting } from "@/components/shared/loading";
 
 import popup from "./popup/";
 import { mapGetters } from "vuex";
 
 import list from "./list";
+import { i18n } from "@/lang";
 
 let __krfn = krfn.default;
 
@@ -93,10 +104,10 @@ export default {
   data() {
     return {
       showPreview: false,
-      isFullscreen:false,
+      isFullscreen: false,
       showTips: false,
       canLoad: false,
-      loadFinish:false,
+      loadFinish: false,
       showPassword: false,
       showIntro: false,
       localRemind: false,
@@ -123,37 +134,37 @@ export default {
   },
   methods: {
     onFullScreen() {
-        let element = document.documentElement;
-        if (this.isFullscreen) {
-            if (document.exitFullscreen) {
-                document.exitFullscreen();
-            } else if (document.webkitCancelFullScreen) {
-                document.webkitCancelFullScreen();
-            } else if (document.mozCancelFullScreen) {
-                document.mozCancelFullScreen();
-            } else if (document.msExitFullscreen) {
-                document.msExitFullscreen();
-            }
-        } else {
-            if (element.requestFullscreen) {
-                element.requestFullscreen();
-            } else if (element.webkitRequestFullScreen) {
-                element.webkitRequestFullScreen();
-            } else if (element.mozRequestFullScreen) {
-                element.mozRequestFullScreen();
-            } else if (element.msRequestFullscreen) {
-                element.msRequestFullscreen();
-            }
+      let element = document.documentElement;
+      if (this.isFullscreen) {
+        if (document.exitFullscreen) {
+          document.exitFullscreen();
+        } else if (document.webkitCancelFullScreen) {
+          document.webkitCancelFullScreen();
+        } else if (document.mozCancelFullScreen) {
+          document.mozCancelFullScreen();
+        } else if (document.msExitFullscreen) {
+          document.msExitFullscreen();
         }
-          // 改变当前全屏状态
-        this.isFullscreen = !this.isFullscreen;
-      },
+      } else {
+        if (element.requestFullscreen) {
+          element.requestFullscreen();
+        } else if (element.webkitRequestFullScreen) {
+          element.webkitRequestFullScreen();
+        } else if (element.mozRequestFullScreen) {
+          element.mozRequestFullScreen();
+        } else if (element.msRequestFullscreen) {
+          element.msRequestFullscreen();
+        }
+      }
+      // 改变当前全屏状态
+      this.isFullscreen = !this.isFullscreen;
+    },
     handleItem(data) {
       if (data.id == "about") {
         this.showIntro = true;
       }
       if (data.id == "full") {
-        this.onFullScreen()
+        this.onFullScreen();
       }
       if (data.id == "vr") {
         var krpano = document.getElementById("krpanoSWFObject");
@@ -171,7 +182,7 @@ export default {
           if (res.code == 0) {
             this.showPassword = false;
             this.canLoad = true;
-          } 
+          }
         }
       );
     },
@@ -193,14 +204,13 @@ export default {
           }
         });
       });
-      tmp = this.$unique(tmp)
+      tmp = this.$unique(tmp);
 
       this.showInfo.catalogs = tmp;
       let rootmp = [];
       tmp.forEach((item) => {
         this.showInfo.catalogRoot.forEach((sub) => {
-
-          sub.children = this.$unique(sub.children)
+          sub.children = this.$unique(sub.children);
 
           if (sub.children.indexOf(item.id) > -1) {
             rootmp.push(sub);
@@ -208,18 +218,16 @@ export default {
         });
       });
 
+      rootmp = this.$unique(rootmp);
 
-      rootmp = this.$unique(rootmp)
-
-      let sortArr = this.showInfo.catalogRoot.map(item=>item.name)
-      rootmp.sort((a,b)=>{
-        return sortArr.indexOf(a.name) - sortArr.indexOf(b.name)
-      })
-
+      let sortArr = this.showInfo.catalogRoot.map((item) => item.name);
+      rootmp.sort((a, b) => {
+        return sortArr.indexOf(a.name) - sortArr.indexOf(b.name);
+      });
 
       this.showInfo.catalogRoot = rootmp.map((item) => {
         let temp = [];
-        item.children = this.$unique(item.children)
+        item.children = this.$unique(item.children);
         item.children.forEach((sub) => {
           tmp.forEach((jj) => {
             if (jj.id == sub) {
@@ -233,15 +241,15 @@ export default {
         };
       });
 
-      this.showInfo.catalogs = tmp
+      this.showInfo.catalogs = tmp;
 
-      let cid = 'c_'+this.$randomWord(true,8,8)
+      let cid = "c_" + this.$randomWord(true, 8, 8);
 
       if (this.showInfo.catalogRoot.length <= 0) {
         this.showInfo.catalogRoot.push({
-          id: 'r_'+this.$randomWord(true,8,8),
+          id: "r_" + this.$randomWord(true, 8, 8),
           name: "全部场景",
-          children:[cid]
+          children: [cid],
         });
       }
 
@@ -253,28 +261,27 @@ export default {
       }
 
       if (this.showInfo.firstScene) {
-        this.showInfo.firstScene = this.showInfo.scenes.find(item=>item.sceneCode==this.showInfo.firstScene.sceneCode)
+        this.showInfo.firstScene = this.showInfo.scenes.find(
+          (item) => item.sceneCode == this.showInfo.firstScene.sceneCode
+        );
       }
 
       this.$store.commit("SetShowInfo", this.showInfo);
     },
 
     getSceneInfo() {
-      checkWork("",data=>{
+      checkWork("", (data) => {
         if (data.data) {
-          getPanoInfo(
-            "",
-            (res) => {
-              this.$store.commit("SetShowInfo", res);
-              this.fixData()
-              this.loadFinish = true
-            }
-          );
-        } else{
-          this.loadFinish = true
+          getPanoInfo("", (res) => {
+            this.$store.commit("SetShowInfo", res);
+            this.fixData();
+            this.loadFinish = true;
+          });
+        } else {
+          this.loadFinish = true;
         }
-      })
-    }
+      });
+    },
   },
   watch: {
     currentHotspot: {
@@ -296,7 +303,7 @@ export default {
     canLoad(newVal) {
       if (newVal) {
         setTimeout(() => {
-          this.showTips = this.localRemind
+          this.showTips = this.localRemind;
           setTimeout(() => {
             this.showTips = false;
           }, this.showInfo.remindTime * 1000);
@@ -308,21 +315,25 @@ export default {
       immediate: true,
       handler: function (newVal) {
         if (newVal) {
-          document.title = newVal.name || '无标题'
-          let locoR = "localRemind"+newVal.id
+
+          document.title =
+            newVal.name && newVal.name.length > 0
+              ? newVal.nam
+              : i18n.t("gather.no_title");
+
+          let locoR = "localRemind" + newVal.id;
           if (!newVal.description) {
-            this.aside.shift()
+            this.aside.shift();
           }
-          if (newVal.isRemind==1) {
-            this.localRemind = localStorage.getItem(locoR) == 1 ? false : true
+          if (newVal.isRemind == 1) {
+            this.localRemind = localStorage.getItem(locoR) == 1 ? false : true;
             localStorage.setItem(locoR, 1);
-          }
-          else{
+          } else {
             this.localRemind = true;
             localStorage.setItem(locoR, 0);
           }
           if (this.showInfo.firstScene) {
-            if (this.showInfo.firstScene.type == '4dkk') {
+            if (this.showInfo.firstScene.type == "4dkk") {
               this.localRemind = false;
             }
           }
@@ -332,19 +343,19 @@ export default {
     },
     activeItem: {
       handler(newVal) {
-        this.currentHotspot = ''
+        this.currentHotspot = "";
         $("#pano").empty();
         window.vrInitFn = () => {
-          $smallWaiting.hide()
+          $smallWaiting.hide();
           var krpano = document.getElementById("krpanoSWFObject");
           __krfn.utils.initHotspot(krpano, newVal && newVal.someData, false);
         };
         window.vrViewFn = () => {
           try {
-            let tmp = newVal.initVisual||{};
+            let tmp = newVal.initVisual || {};
             var krpano = document.getElementById("krpanoSWFObject");
-            krpano.set("view.vlookat", tmp.vlookat||0);
-            krpano.set("view.hlookat", tmp.hlookat||0);
+            krpano.set("view.vlookat", tmp.vlookat || 0);
+            krpano.set("view.hlookat", tmp.hlookat || 0);
             krpano.set("autorotate.enabled", Boolean(this.showInfo.isAuto));
           } catch (error) {
             error;
@@ -355,13 +366,13 @@ export default {
           "events[skin_events].onloadcomplete": "js(window.vrInitFn());",
         };
         if (newVal) {
-          if (newVal.type=='4dkk') {
-              removepano("#pano");
-              $("#pano").empty();
-              return
+          if (newVal.type == "4dkk") {
+            removepano("#pano");
+            $("#pano").empty();
+            return;
           }
           removepano("#pano");
-          $smallWaiting.show()
+          $smallWaiting.show();
 
           embedpano({
             // xml: "%HTMLPATH%/static/template/tour.xml",
@@ -381,8 +392,8 @@ export default {
     window.__krfn = __krfn;
 
     this.$bus.on("clickHotspot", (data) => {
-      let someData = this.activeItem.someData
-      if (typeof someData == 'string') {
+      let someData = this.activeItem.someData;
+      if (typeof someData == "string") {
         someData = JSON.parse(this.activeItem.someData);
       }
       let idx = someData.hotspots.findIndex((item) => item.name == data);
@@ -398,20 +409,20 @@ export default {
 .panocon {
   width: 100%;
   height: 100%;
-  .hasDel{
+  .hasDel {
     background: #fff;
     width: 100%;
     height: 100%;
     position: relative;
-    >div{
+    > div {
       position: absolute;
       top: 50%;
       left: 50%;
-      transform: translate(-50%,-50%);
+      transform: translate(-50%, -50%);
       color: #909090;
       text-align: center;
       font-size: 18px;
-      >p{
+      > p {
         margin-top: 20px;
       }
     }
@@ -420,7 +431,7 @@ export default {
     width: 100%;
     height: 100%;
   }
-  >iframe{
+  > iframe {
     width: 100%;
     height: 100%;
   }

+ 123 - 56
packages/qjkankan-editor/src/framework/show/list.vue

@@ -1,22 +1,62 @@
 <template>
-  <div class="list" :style="{'max-width':isW ? '1396px':'100%'}">
-    <div class="l-con" :class="showList ? 'active' : ''" v-if="!(showInfo.catalogRoot.length == 1 && scenes.length == 1 && showInfo.catalogs.length == 1)">
+  <div class="list" :style="{ 'max-width': isW ? '1396px' : '100%' }">
+    <div
+      class="l-con"
+      :class="showList ? 'active' : ''"
+      v-if="
+        !(
+          showInfo.catalogRoot.length == 1 &&
+          scenes.length == 1 &&
+          showInfo.catalogs.length == 1
+        )
+      "
+    >
       <div class="pic-con">
-        <div class="clip-scroller" ref="sw" v-swiper:mySwiper="swiperOptions" v-if="scenes.length > 0">
+        <div
+          class="clip-scroller"
+          ref="sw"
+          v-swiper:mySwiper="swiperOptions"
+          v-if="scenes.length > 0"
+        >
           <ul class="pic-list swiper-wrapper">
-            <li class="swiper-slide" :title="item.sceneTitle" @click="handleVR(item,i)" v-for="(item, i) in scenes" :key="i">
+            <li
+              class="swiper-slide"
+              :title="item.sceneTitle"
+              @click="handleVR(item, i)"
+              v-for="(item, i) in scenes"
+              :key="i"
+            >
               <div :class="{ active: selected.sceneCode == item.sceneCode }">
                 <img :src="item.icon + `?${Math.random()}`" alt="" />
-                <i class="iconfont icon-edit_type_3d" :class="{ iconedit_type_panorama: item.type !== '4dkk' }"></i>
-                <rollName :offset="20" :active="selected.sceneCode == item.sceneCode" class="pic-name" :myref="'subw' + item.id" :name="item.sceneTitle" />
+                <i
+                  class="iconfont icon-edit_type_3d"
+                  :class="{ iconedit_type_panorama: item.type !== '4dkk' }"
+                ></i>
+                <rollName
+                  :offset="20"
+                  :active="selected.sceneCode == item.sceneCode"
+                  class="pic-name"
+                  :myref="'subw' + item.id"
+                  :name="item.sceneTitle"
+                />
               </div>
             </li>
           </ul>
         </div>
 
-        <div class="clip-scroller"  ref="sw1"  v-swiper:mySwipera="swiperOptions" v-if="childTab.length > 1">
+        <div
+          class="clip-scroller"
+          ref="sw1"
+          v-swiper:mySwipera="swiperOptions"
+          v-if="childTab.length > 1"
+        >
           <ul class="pp-tap swiper-wrapper">
-            <li class="swiper-slide" @click="handleTabtow(item,i)" v-for="(item, i) in childTab" :key="i">
+            <li
+              class="swiper-slide"
+              @click="handleTabtow(item, i)"
+              v-for="(item, i) in childTab"
+              :key="i"
+            >
               <rollName
                 :offset="30"
                 :mgin="20"
@@ -31,9 +71,20 @@
         </div>
       </div>
 
-      <div class="clip-scroller" ref="sw2" v-swiper:mySwiperb="swiperOptions" v-if="showInfo.catalogRoot.length > 0 && showInfo.catalogs.length > 1">
+      <div
+        class="clip-scroller"
+        ref="sw2"
+        v-swiper:mySwiperb="swiperOptions"
+        v-if="showInfo.catalogRoot.length > 0 && showInfo.catalogs.length > 1"
+      >
         <ul class="tap swiper-wrapper" v-if="showInfo.catalogRoot.length > 1">
-          <li  class="swiper-slide" @click="handleTabone(item,i)" :class="{ active: item.id == taboneActive.id }" v-for="(item, i) in showInfo.catalogRoot" :key="i">
+          <li
+            class="swiper-slide"
+            @click="handleTabone(item, i)"
+            :class="{ active: item.id == taboneActive.id }"
+            v-for="(item, i) in showInfo.catalogRoot"
+            :key="i"
+          >
             <rollName
               :offset="30"
               :mgin="20"
@@ -47,7 +98,24 @@
         </ul>
       </div>
     </div>
-    <div class="btn dl" :class="{deepbg:showList}" v-if="!(showInfo.catalogRoot.length == 1 && scenes.length == 1 && showInfo.catalogs.length == 1)" @click="showList = !showList"><i class="iconfont " :class="showList ? 'iconnav_scene_down' : 'iconnav_scene_up'"></i>场景导航</div>
+    <div
+      class="btn dl"
+      :class="{ deepbg: showList }"
+      v-if="
+        !(
+          showInfo.catalogRoot.length == 1 &&
+          scenes.length == 1 &&
+          showInfo.catalogs.length == 1
+        )
+      "
+      @click="showList = !showList"
+    >
+      <i
+        class="iconfont"
+        :class="showList ? 'iconnav_scene_down' : 'iconnav_scene_up'"
+      ></i
+      >场景导航
+    </div>
   </div>
 </template>
 
@@ -60,7 +128,6 @@ import { directive } from "vue-awesome-swiper";
 // import style (<= Swiper 5.x)
 import "swiper/css/swiper.css";
 
-
 let isW = window.innerWidth > 1400;
 
 console.log(window.innerWidth);
@@ -83,7 +150,7 @@ export default {
       loadFirst: true,
       menuWidth: 0,
       sceneNum: config.sceneNum,
-      SlyArr:[]
+      SlyArr: [],
     };
   },
   computed: {
@@ -99,10 +166,10 @@ export default {
         // initialSlide:0,
         // observer:true,
         // observeParents: true,
-        centeredSlides : true,
+        centeredSlides: true,
         centerInsufficientSlides: true,
         centeredSlidesBounds: true,
-        freeMode:true
+        freeMode: true,
       };
     },
   },
@@ -114,56 +181,55 @@ export default {
       }
     },
 
-    fixPosit(ref,i,prenum,nexnum){
-         if (i!==null) {
-        let acidx = this.$refs[ref].swiper.activeIndex
+    fixPosit(ref, i, prenum, nexnum) {
+      if (i !== null) {
+        let acidx = this.$refs[ref].swiper.activeIndex;
 
-
-        if (i - acidx > nexnum ) {
-          this.$refs[ref].swiper.slideNext()
+        if (i - acidx > nexnum) {
+          this.$refs[ref].swiper.slideNext();
         }
 
-        if (acidx - i > prenum ) {
-          this.$refs[ref].swiper.slidePrev()
+        if (acidx - i > prenum) {
+          this.$refs[ref].swiper.slidePrev();
         }
       }
     },
 
-    handleTabtow(item,i=null){
-      this.tabtowActive = item
-      this.fixPosit('sw1',i,3,3)
+    handleTabtow(item, i = null) {
+      this.tabtowActive = item;
+      this.fixPosit("sw1", i, 3, 3);
     },
 
-    handleTabone(item,i=null){
-      this.taboneActive = item
-      let pp = this.isW ? 5 : 4
-      let nn = this.isW ? 5 : 4
-
+    handleTabone(item, i = null) {
+      this.taboneActive = item;
+      let pp = this.isW ? 5 : 4;
+      let nn = this.isW ? 5 : 4;
 
-      this.fixPosit('sw2',i,pp,nn)
+      this.fixPosit("sw2", i, pp, nn);
     },
 
-    handleVR(item,i=null) {
-      history.replaceState(null, null, "".concat(window.location.pathname, "?").concat(`id=${this.showInfo.id}&vr=${item.sceneCode}`));
+    handleVR(item, i = null) {
+      history.replaceState(
+        null,
+        null,
+        ""
+          .concat(window.location.pathname, "?")
+          .concat(`id=${this.showInfo.id}&vr=${item.sceneCode}`)
+      );
       this.sceneNum = item.sceneCode;
 
-      let pp = this.isW ? 7 : 5
-      let nn = this.isW ? 7 : 5
+      let pp = this.isW ? 7 : 5;
+      let nn = this.isW ? 7 : 5;
 
-
-      this.fixPosit('sw',i,pp,nn)
-     
+      this.fixPosit("sw", i, pp, nn);
     },
-   
   },
 
-  mounted() {
-    
-  },
+  mounted() {},
 
   watch: {
     taboneActive: {
-      handler: function(newVal) {
+      handler: function (newVal) {
         let temp = [];
         newVal.children &&
           newVal.children.forEach((item) => {
@@ -181,7 +247,7 @@ export default {
     },
     tabtowActive: {
       deep: true,
-      handler: function(newVal) {
+      handler: function (newVal) {
         if (!newVal) {
           this.tabtowActive = this.childTab[0];
         } else {
@@ -196,14 +262,16 @@ export default {
     sceneNum: {
       deep: true,
       immediate: true,
-      handler: function(newVal) {
+      handler: function (newVal) {
         if (!newVal) {
           let tmp = this.showInfo.firstScene || this.showInfo.scenes[0];
           this.handleVR(tmp);
           return;
         }
         let val = this.showInfo.scenes.find((item) => item.sceneCode == newVal);
-        let tmp = this.showInfo.catalogs.find((item) => item.id == val.category);
+        let tmp = this.showInfo.catalogs.find(
+          (item) => item.id == val.category
+        );
         let rootTmp = this.showInfo.catalogRoot.find((item) => {
           return item.children.indexOf(tmp.id) > -1;
         });
@@ -218,7 +286,7 @@ export default {
     },
 
     selected: {
-      handler: function(newVal) {
+      handler: function (newVal) {
         this.handleVR(newVal);
         if (newVal.type == "4dkk") {
           this.showList = false;
@@ -313,7 +381,7 @@ export default {
     }
   }
 
-  .deepbg{
+  .deepbg {
     background: rgba(0, 0, 0, 0.5);
   }
   .l-con {
@@ -329,7 +397,7 @@ export default {
       padding: 0 20px;
     }
 
-    .clip-scroller{
+    .clip-scroller {
       position: relative;
       border-radius: 4px;
     }
@@ -348,7 +416,6 @@ export default {
       > li {
         width: 84px;
         margin: 0 10px;
-
       }
     }
     .tap {
@@ -357,7 +424,7 @@ export default {
       > li {
         position: relative;
         width: 104px;
-        .btn{
+        .btn {
           width: 100%;
           padding: 0;
         }
@@ -401,7 +468,7 @@ export default {
             left: 0;
             bottom: 0;
             font-size: 0;
-            /deep/ span{
+            /deep/ span {
               font-size: 12px;
               padding: 2px 0;
             }
@@ -419,16 +486,16 @@ export default {
             top: 4px;
             z-index: 99;
 
-            &::after{
+            &::after {
               background: rgba(0, 0, 0, 0.3);
-              content: '';
+              content: "";
               width: 14px;
               height: 14px;
               display: inline-block;
               position: absolute;
               top: 50%;
               left: 50%;
-              transform: translate(-50%,-50%);
+              transform: translate(-50%, -50%);
               z-index: -1;
               filter: blur(4px);
             }

+ 3 - 3
packages/qjkankan-editor/src/framework/show/popup/index.vue

@@ -4,7 +4,7 @@
         <div class="ui-message-header">
           <span>{{title}}</span>
           <span @click="$emit('close')">
-            <i class="iconfont icon_close"></i>
+            <i class="iconfont icon-close"></i>
           </span>
         </div>
         <div class="ui-message-main re-name">
@@ -41,7 +41,7 @@ export default {
 .ui-message-confirm{
   border-radius: 0;
   padding: 0;
-  .icon_close{
+  .icon-close{
     color: #909090;
   }
   
@@ -82,7 +82,7 @@ export default {
     display: flex;
     justify-content: space-between;
     align-items: center;
-    .icon_close{
+    .icon-close{
       color: #202020;
     }
   }

+ 3 - 3
packages/qjkankan-editor/src/framework/show/popup/password.vue

@@ -20,7 +20,7 @@
               @focusin="isPassWordFocus = true" 
               @focusout="isPassWordFocus = false"
             />
-            <i v-if="key" ref="isearch" class="iconfont icon_close" @click="key=''"></i>
+            <i v-if="key" ref="isearch" class="iconfont icon-close" @click="key=''"></i>
           </div>
         </div>
         <div class="ui-message-footer">
@@ -73,7 +73,7 @@ export default {
   border-radius: 4px;
   border: 1px solid #E4E7ED;
   height: 230px;
-  .icon_close{
+  .icon-close{
     color: #909090;
   }
   
@@ -138,7 +138,7 @@ export default {
     display: flex;
     justify-content: space-between;
     align-items: center;
-    .icon_close{
+    .icon-close{
       color: #202020;
     }
   }

+ 2 - 2
packages/qjkankan-editor/src/framework/show/popup/preview.vue

@@ -5,7 +5,7 @@
         <div class="ui-message-header">
           <span>{{item.hotspotTitle}}</span>
           <span @click="$emit('close')">
-            <i class="iconfont icon_close"></i>
+            <i class="iconfont icon-close"></i>
           </span>
         </div>
         <div class="ui-message-main">
@@ -75,7 +75,7 @@ export default {
   transform: none;
   padding: 0;
   border: none;
-  .icon_close{
+  .icon-close{
     color: #909090;
   }
   .ui-message-header{

+ 83 - 21
packages/qjkankan-editor/src/framework/showMobile/index.vue

@@ -8,17 +8,38 @@
         :bgmUrl="bgmUrl"
         :somedatainfo="somedatainfo"
         :key="embeM || activeItem.sceneCode"
-        :url="otherLink ? otherLink : `/embed.html?from=mingyuan&m=${embeM || activeItem.sceneCode}&lang=zh&scene-link=1&rnd=${rnd}`"
+        :url="
+          otherLink
+            ? otherLink
+            : `/embed.html?from=mingyuan&m=${
+                embeM || activeItem.sceneCode
+              }&lang=zh&scene-link=1&rnd=${rnd}`
+        "
       />
       <!-- -->
 
       <div v-show="activeItem.type != '4dkk'" id="pano"></div>
 
-      <div class="pano-logo" v-if="showInfo.isLogo && activeItem.type != '4dkk'">
-        <img :src="showInfo.logo || require('@/assets/images/default/img_logoshow@2x.png')" alt="" />
+      <div
+        class="pano-logo"
+        v-if="showInfo.isLogo && activeItem.type != '4dkk'"
+      >
+        <img
+          :src="
+            showInfo.logo ||
+            require('@/assets/images/default/img_logoshow@2x.png')
+          "
+          alt=""
+        />
       </div>
 
-      <list v-if="canLoad && !isVR" @select="handleSelect" :firstScene="firstScene" :select="activeItem" :mapvisit="mapvisit"></list>
+      <list
+        v-if="canLoad && !isVR"
+        @select="handleSelect"
+        :firstScene="firstScene"
+        :select="activeItem"
+        :mapvisit="mapvisit"
+      ></list>
 
       <ul class="aside" v-show="activeItem.type != '4dkk'">
         <li v-for="(item, i) in aside" :key="i">
@@ -27,20 +48,47 @@
           </span>
         </li>
       </ul>
-      <div class="oper-tips" :class="{ hidetips: !showTips }" v-if="localRemind">
-        <img :src="showInfo.appIcon || require('@/assets/images/default/show/img_tipsmb_default.png')" alt="" />
+      <div
+        class="oper-tips"
+        :class="{ hidetips: !showTips }"
+        v-if="localRemind"
+      >
+        <img
+          :src="
+            showInfo.appIcon ||
+            require('@/assets/images/default/show/img_tipsmb_default.png')
+          "
+          alt=""
+        />
       </div>
-      <password :bg="showInfo.icon" :show="showPassword" @submit="handlePassword" @close="showPassword = false" />
+      <password
+        :bg="showInfo.icon"
+        :show="showPassword"
+        @submit="handlePassword"
+        @close="showPassword = false"
+      />
       <popup :title="'简介'" :show="showIntro" @close="showIntro = false">
         <div slot="content" class="introcon">
           <span>{{ showInfo.description || "暂无简介" }}</span>
         </div>
       </popup>
-      <imgview @close="showImage = false" v-if="showImage" :image="currentHotspot.image" />
+      <imgview
+        @close="showImage = false"
+        v-if="showImage"
+        :image="currentHotspot.image"
+      />
 
-      <preview :item="currentHotspot" :show="showPreview" @close="showPreview = false" />
+      <preview
+        :item="currentHotspot"
+        :show="showPreview"
+        @close="showPreview = false"
+      />
 
-      <popup :title="currentHotspot.hotspotTitle" :show="showTextarea" @close="showTextarea = false">
+      <popup
+        :title="currentHotspot.hotspotTitle"
+        :show="showTextarea"
+        @close="showTextarea = false"
+      >
         <div slot="content" class="introcon">
           <span>{{ currentHotspot.textarea }}</span>
         </div>
@@ -75,7 +123,12 @@
 
 <script>
 import * as krfn from "@/core/index.js";
-import { getPanoInfo, checkPassword, checkWork, getSceneInfomation } from "@/api";
+import {
+  getPanoInfo,
+  checkPassword,
+  checkWork,
+  getSceneInfomation,
+} from "@/api";
 import password from "./popup/password";
 import preview from "./popup/preview";
 import { $smallWaiting } from "@/components/shared/loading";
@@ -122,7 +175,7 @@ export default {
     return {
       mapvisit: 0,
       bgmUrl: "",
-      somedatainfo:'',
+      somedatainfo: "",
       isVR: false,
       localRemind: false,
       showPreview: false,
@@ -168,17 +221,21 @@ export default {
     getSceneInfomation() {
       getSceneInfomation({ id: this.activeItem.sceneCode }, (data) => {
         this.mapvisit = data.data.mapVisi;
-        this.somedatainfo = data.data
+        this.somedatainfo = data.data;
         if (data.data.bgMusic) {
           if (bgmMap[data.data.bgMusic]) {
             this.bgmUrl =
               window.location.href.indexOf("www.4dkankan.com") > -1
                 ? `https://4dkk.4dage.com/v3/audio/${bgmMap[data.data.bgMusic]}`
-                : `https://4dkk.4dage.com/v3-test/audio/${bgmMap[data.data.bgMusic]}`;
+                : `https://4dkk.4dage.com/v3-test/audio/${
+                    bgmMap[data.data.bgMusic]
+                  }`;
           }
 
-          if (data.data.bgMusic == 'user') {
-            this.bgmUrl = data.data.bgMusic ? `https://4dkk.4dage.com/images/images${data.data.num}/${data.data.bgMusicName}` : "";
+          if (data.data.bgMusic == "user") {
+            this.bgmUrl = data.data.bgMusic
+              ? `https://4dkk.4dage.com/images/images${data.data.num}/${data.data.bgMusicName}`
+              : "";
           }
         }
       });
@@ -197,7 +254,10 @@ export default {
             var webvr = krpano.get("webvr");
             webvr.entervr();
           } else {
-            this.$alert({ content: "运动和方向访问失败,您需要完全关闭此应用,然后再次打开,并允许访问运动与方向" });
+            this.$alert({
+              content:
+                "运动和方向访问失败,您需要完全关闭此应用,然后再次打开,并允许访问运动与方向",
+            });
           }
         });
       }
@@ -285,7 +345,9 @@ export default {
       }
 
       if (this.showInfo.firstScene) {
-        this.showInfo.firstScene = this.showInfo.scenes.find((item) => item.sceneCode == this.showInfo.firstScene.sceneCode);
+        this.showInfo.firstScene = this.showInfo.scenes.find(
+          (item) => item.sceneCode == this.showInfo.firstScene.sceneCode
+        );
       }
 
       this.$store.commit("SetShowInfo", this.showInfo);
@@ -308,7 +370,7 @@ export default {
   watch: {
     currentHotspot: {
       deep: true,
-      handler: function(newVal) {
+      handler: function (newVal) {
         if (newVal) {
           this.audioUrl = "";
           if (newVal.hotspotType == "link") {
@@ -349,9 +411,9 @@ export default {
     showInfo: {
       deep: true,
       immediate: true,
-      handler: function(newVal) {
+      handler: function (newVal) {
         if (newVal) {
-          document.title = newVal.name || "无标题";
+          document.title = newVal.name || this.$i18n.t('common.no_title');
           let locoR = "localRemind" + newVal.id;
 
           if (!newVal.description) {

+ 3 - 3
packages/qjkankan-editor/src/framework/showMobile/popup/index.vue

@@ -4,7 +4,7 @@
         <div class="ui-message-header">
           <span>{{title}}</span>
           <span @click="$emit('close')">
-            <i class="iconfont icon_close"></i>
+            <i class="iconfont icon-close"></i>
           </span>
         </div>
         <div class="ui-message-main">
@@ -37,7 +37,7 @@ export default {
 .ui-message-confirm{
   padding: 0;
   border-radius: 0;
-  .icon_close{
+  .icon-close{
     color: #909090;
   }
   
@@ -77,7 +77,7 @@ export default {
     display: flex;
     justify-content: space-between;
     align-items: center;
-    .icon_close{
+    .icon-close{
       color: #202020;
     }
   }

+ 3 - 3
packages/qjkankan-editor/src/framework/showMobile/popup/password.vue

@@ -19,7 +19,7 @@
               @focusin="isPassWordFocus = true" 
               @focusout="isPassWordFocus = false"
             />
-            <i v-if="key" class="iconfont icon_close" @click="key=''"></i>
+            <i v-if="key" class="iconfont icon-close" @click="key=''"></i>
           </div>
         </div>
         <div class="ui-message-footer">
@@ -70,7 +70,7 @@ export default {
   box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.06);
   border-radius: 4px;
   border: 1px solid #E4E7ED;
-  .icon_close{
+  .icon-close{
     color: #909090;
   }
   
@@ -157,7 +157,7 @@ export default {
     display: flex;
     justify-content: space-between;
     align-items: center;
-    .icon_close{
+    .icon-close{
       color: #202020;
     }
   }

+ 1 - 1
packages/qjkankan-editor/src/framework/showMobile/popup/preview.vue

@@ -82,7 +82,7 @@ export default {
 }
 .ui-message-confirm{
   border-radius: 0;
-  .icon_close{
+  .icon-close{
     color: #909090;
   }
   .ui-message-main{

+ 0 - 0
packages/qjkankan-editor/src/lang/_en.json


Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.