main
han 9 months ago
parent ba70910bd0
commit d6e75ca0b2
  1. 2
      .env.dev
  2. 20
      src/api/cjy/columninfo/index.js
  3. BIN
      src/assets/images/content-bg.jpg
  4. BIN
      src/assets/images/culture-img01.png
  5. BIN
      src/assets/images/culture-img02.png
  6. 1
      src/assets/images/icon-content-tel.svg
  7. 14
      src/assets/images/icon-culture01.svg
  8. 30
      src/assets/images/icon-culture02.svg
  9. 33
      src/assets/images/icon-culture03.svg
  10. 14
      src/assets/images/icon-culture04.svg
  11. BIN
      src/assets/images/logo-red.png
  12. 3
      src/assets/styles/v-global.scss
  13. 188
      src/assets/styles/v-vision.scss
  14. 2
      src/components/Editor/index.vue
  15. 251
      src/views/cjy/columninfo/ColumnInfoForm.vue
  16. 80
      src/views/cjy/columninfo/index.vue
  17. 7
      src/views/components/v-header/index.vue
  18. 46
      src/views/pages/case-detail.vue
  19. 53
      src/views/pages/case-list.vue
  20. 55
      src/views/pages/news-detail.vue
  21. 71
      src/views/pages/news-list.vue
  22. 175
      src/views/pages/theme/about-us.vue
  23. 2
      vue.config.js

@ -5,7 +5,7 @@ ENV = 'development'
VUE_APP_TITLE = 芋道管理系统
# 芋道管理系统/开发环境
VUE_APP_BASE_API = 'https://eluyou.ailuquan.cn:80/prod-api'
VUE_APP_BASE_API = 'http://192.168.130.157:48080'
# 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true

@ -50,4 +50,22 @@ export function exportColumnInfoExcel(params) {
params,
responseType: 'blob'
})
}
}
// 获得栏目列表
export function getColumnInfoList(params) {
return request({
url: '/cjy/column-info/list',
method: 'get',
params
})
}
// 获得栏目管理
export function getDetail(id) {
return request({
url: '/cjy/column-info/getDetail?id=' + id,
method: 'get'
})
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1736999495453" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="15295" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M947.4 45h-865c-19.1 0-37.5 7.3-51 20.4-13.5 13.1-21.1 30.8-21.1 49.3v593.1c0 18.5 7.6 36.3 21.1 49.3 13.5 13.1 31.9 20.4 51 20.4h180.2V987L659 777.7h288.4c19.1 0 37.5-7.3 51-20.4 13.5-13.1 21.1-30.8 21.1-49.3V114.8c0-18.5-7.6-36.3-21.1-49.3-13.5-13.1-31.8-20.5-51-20.5zM262.6 463.7c-19.1 0-37.5-7.4-51-20.4-13.5-13.1-21.1-30.8-21.1-49.3 0-38.5 32.3-69.8 72.1-69.8 19.1 0 37.5 7.3 51 20.4 13.5 13.1 21.1 30.8 21.1 49.3 0 18.5-7.6 36.3-21.1 49.3-13.5 13.1-31.9 20.5-51 20.5z m252.3 0c-19.1 0-37.5-7.4-51-20.4-13.5-13.1-21.1-30.8-21.1-49.3 0-38.5 32.3-69.8 72.1-69.8 19.1 0 37.5 7.3 51 20.4 13.5 13.1 21.1 30.8 21.1 49.3 0 38.5-32.3 69.8-72.1 69.8z m252.3 0c-19.1 0-37.5-7.4-51-20.4-13.5-13.1-21.1-30.8-21.1-49.3 0-38.5 32.3-69.8 72.1-69.8 19.1 0 37.5 7.3 51 20.4 13.5 13.1 21.1 30.8 21.1 49.3 0 18.5-7.6 36.3-21.1 49.3-13.5 13.1-31.9 20.5-51 20.5z m0 0" fill="#ffffff" p-id="15296"></path></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 26.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="_x37_621f7a3-78ac-4968-bc8b-ad605dde3f6d"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 48 48"
style="enable-background:new 0 0 48 48;" xml:space="preserve">
<style type="text/css">
.st0{fill:#0B59B3;}
</style>
<path class="st0" d="M47.3,20.5L1.8,0.1H1.7H1.6L1.5,0C1.4,0,1.3,0,1.2,0H0.9L0.8,0.1l-0.1,0c-0.1,0-0.2,0.1-0.3,0.2L0.4,0.3l0,0
C0.2,0.5,0.1,0.6,0.1,0.8c0,0,0,0.1-0.1,0.1C0,0.9,0,1,0,1l0,0l0,0c0,0.1,0,0.2,0,0.3v0.1c0,0,0,0,0,0.1L7.2,47
c0.1,0.4,0.3,0.7,0.7,0.9C8.1,48,8.3,48,8.4,48c0.2,0,0.5-0.1,0.6-0.2l13.8-9l6.1,7.2c0.2,0.3,0.6,0.4,0.9,0.4c0.1,0,0.2,0,0.3,0
c0.5-0.1,0.8-0.5,0.9-1l2-13.2l14.5-9.5c0.6-0.4,0.7-1.1,0.3-1.7C47.7,20.8,47.6,20.6,47.3,20.5L47.3,20.5z M22.5,36.1L22.5,36.1
L9.3,44.8L3,4.6l27,26.6L22.5,36.1z M29,42.3l-4.2-4.9l5.4-3.5L29,42.3z M32,29.9L6.8,5l37.5,16.8L32,29.9z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 26.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="_x33_4a46022-93c3-4544-9396-35ab39c77773"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 48 48"
style="enable-background:new 0 0 48 48;" xml:space="preserve">
<style type="text/css">
.st0{fill:#0B59B3;}
</style>
<path class="st0" d="M23.9,42c-0.6,0-1,0.4-1.1,0.9c0,0,0,0.1,0,0.1v4c0,0.6,0.5,1.1,1.1,1.1c0.6,0,1.1-0.5,1.1-1.1v-4
C25,42.4,24.6,42,23.9,42C24,42,23.9,42,23.9,42z"/>
<path class="st0" d="M19.2,42c-0.6,0-1,0.4-1.1,0.9c0,0,0,0,0,0.1v2.5c0,0.3,0.1,0.5,0.3,0.7c0.2,0.2,0.5,0.3,0.8,0.3
c0.3,0,0.6-0.1,0.8-0.3c0.2-0.2,0.3-0.4,0.3-0.7V43c0-0.6-0.4-1-0.9-1.1C19.3,42,19.3,42,19.2,42z"/>
<path class="st0" d="M28.6,42c-0.6,0-1,0.4-1.1,0.9c0,0,0,0.1,0,0.1v2.5c0,0.3,0.1,0.5,0.3,0.7c0.2,0.2,0.5,0.3,0.8,0.3
c0.3,0,0.6-0.1,0.8-0.3c0.2-0.2,0.3-0.4,0.3-0.7V43c0-0.6-0.4-1-0.9-1.1C28.7,42,28.7,42,28.6,42z"/>
<path class="st0" d="M23.9,19.7c3,0,5.5-2.5,5.5-5.5c0-3-2.5-5.5-5.5-5.5s-5.5,2.5-5.5,5.5c0,0,0,0,0,0
C18.4,17.3,20.9,19.7,23.9,19.7z M23.9,10.9c1.9,0,3.4,1.5,3.4,3.4s-1.5,3.4-3.4,3.4s-3.4-1.5-3.4-3.4S22.1,10.9,23.9,10.9
L23.9,10.9z"/>
<path class="st0" d="M43.3,25.8c-1.2-2.4-3.5-4.1-6.1-4.5c0-0.2,0-0.4,0-0.6C37,12,32.1,4.1,24.5,0.1c-0.3-0.2-0.7-0.2-1.1,0
C16.9,3.5,12.3,9.7,11,16.9c-0.2,1.4-0.3,2.9-0.3,4.4c-2.6,0.5-4.8,2.1-5.9,4.5c-1.2,2.6-0.9,5.6,0.9,7.8C5.9,33.9,6.2,34,6.6,34
h0.2c0.4,0,0.7-0.3,0.9-0.7c0.8-2.1,2.5-3.8,4.7-4.5c1.1,2.6,2.6,5.1,4.5,7.1c-0.3,0.4-0.4,0.9-0.4,1.3v1.6c0.1,1.5,1.3,2.6,2.8,2.6
h9.5c1.5,0.1,2.7-1.1,2.8-2.6v-1.5c0-0.5-0.1-1-0.4-1.4c2-2.1,3.5-4.6,4.6-7.2c2.2,0.7,4,2.4,4.8,4.6c0.1,0.4,0.5,0.6,0.9,0.7h0.2
c0.3,0,0.7-0.1,0.9-0.4C44.1,31.4,44.5,28.4,43.3,25.8z M13.1,17.3c1.2-6.4,5.1-12,10.8-15.1C30.7,5.9,34.9,13,35,20.6
c0,5.2-2,10.3-5.6,14.1h-11c-1.9-2.1-3.4-4.6-4.4-7.2c0-0.1,0-0.2-0.1-0.3c-0.1-0.3-0.2-0.6-0.4-1C12.8,23.3,12.6,20.3,13.1,17.3z
M6.5,30.8c-0.2-0.6-0.3-1.2-0.3-1.8c0.1-2.7,1.9-5,4.6-5.6c0.1,0.9,0.3,1.8,0.6,2.7c0.1,0.3,0.2,0.6,0.2,0.9
C9.5,27.6,7.7,29,6.5,30.8z M29.3,38.9c0,0.3-0.3,0.6-0.6,0.6h-9.5c-0.3,0-0.6-0.3-0.6-0.6v-1.5c0-0.3,0.3-0.6,0.6-0.6h9.5
c0.3,0,0.6,0.3,0.6,0.6V38.9z M41.5,30.8c-1.2-1.8-3-3.2-5.1-3.9c0.4-1.2,0.7-2.4,0.9-3.6c1.6,0.4,3,1.5,3.8,2.9
C41.9,27.6,42.1,29.3,41.5,30.8z"/>
<path class="st0" d="M23.9,21.9c-0.6,0-1,0.4-1.1,0.9c0,0,0,0.1,0,0.1v7c0,0.6,0.4,1,1,1c0,0,0.1,0,0.1,0c0.3,0,0.6-0.1,0.8-0.3
c0.2-0.2,0.3-0.4,0.3-0.7v-7C25,22.3,24.6,21.9,23.9,21.9C24,21.9,24,21.9,23.9,21.9z"/>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 26.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="cfba49ce-ebef-4c60-aafd-1a06ec0f9839"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 48 48"
style="enable-background:new 0 0 48 48;" xml:space="preserve">
<style type="text/css">
.st0{fill:#0B59B3;}
</style>
<path class="st0" d="M34.3,10.6c-6.2-5.5-15.6-5.2-21.4,0.8C8.1,16.3,7,23.7,10.1,29.9c1.1,2.2,2.6,4,4.5,5.5c0,0,0,0,0,0.1
c0.2,0.2,0.6,0.4,0.9,0.4h16.9c0.3,0,0.6-0.1,0.9-0.4c0.1-0.1,0.1-0.2,0.2-0.3c0.1,0,0.2-0.1,0.3-0.2c3.7-3,5.8-7.6,5.8-12.4
c0-4.2-1.6-8.2-4.5-11.3C34.8,11.1,34.6,10.8,34.3,10.6z M22.9,20.9C22.9,20.9,22.9,20.9,22.9,20.9v4.5l-3.3-3.2
c-0.4-0.4-0.7-0.9-0.6-1.5c0.1-0.6,0.4-1.2,1-1.4c0.3-0.1,0.6-0.2,0.9-0.2H21c0.4,0,0.7,0.1,1,0.3C22.6,19.6,22.9,20.2,22.9,20.9
L22.9,20.9z M32.2,33.1c-0.1,0.1-0.1,0.1-0.2,0.2h-6.7v-4.5l5.1-5c1.7-1.7,1.7-4.3,0-6c-0.3-0.3-0.6-0.5-1-0.7
c-1.4-0.7-3-0.7-4.4,0.2c-0.4,0.2-0.7,0.5-1,0.8c-0.3-0.4-0.7-0.7-1.1-0.9c-1.7-1-3.9-0.7-5.3,0.7c-1.7,1.6-1.7,4.3-0.1,5.9
c0,0,0.1,0.1,0.1,0.1l5.3,5v4.5h-6.8c-3.3-2.6-5.2-6.6-5.2-10.8c-0.2-7.2,5.5-13.2,12.7-13.4c7.2-0.2,13.2,5.5,13.4,12.7
c0,0.2,0,0.5,0,0.7C37.1,26.7,35.3,30.5,32.2,33.1z M25.3,25.4v-4.6c0-0.7,0.3-1.3,0.9-1.6c0.3-0.2,0.6-0.3,0.9-0.3h0.1l0.1,0.1
c0.3,0,0.6,0.1,0.8,0.2c0.5,0.3,0.9,0.8,0.9,1.4c0.1,0.6-0.1,1.1-0.5,1.5L25.3,25.4z"/>
<path class="st0" d="M24,5.6h0.1c0.7,0,1.2-0.5,1.2-1.2c0,0,0,0,0,0V1c-0.1-0.5-0.5-0.9-1-1h-0.2c-0.6,0-1.1,0.4-1.2,1v3.4
C23,5,23.4,5.5,24,5.6z"/>
<path class="st0" d="M5.4,23.1H1.9c-0.3,0-0.6,0.1-0.9,0.3c-0.2,0.2-0.3,0.5-0.4,0.8c0,0.7,0.6,1.2,1.2,1.2h3.6
c0.3,0,0.6-0.1,0.8-0.3c0.2-0.2,0.4-0.5,0.4-0.8C6.6,23.6,6.1,23.1,5.4,23.1z"/>
<path class="st0" d="M42.6,23.1h3.6c0.3,0,0.6,0.1,0.9,0.3c0.2,0.2,0.3,0.5,0.3,0.8c0,0.7-0.6,1.2-1.2,1.2h-3.6
c-0.3,0-0.6-0.1-0.8-0.3c-0.2-0.2-0.4-0.5-0.4-0.8C41.4,23.6,41.9,23.1,42.6,23.1z"/>
<path class="st0" d="M9.5,11.3c0.6,0,1.1-0.5,1.1-1.1c0-0.3-0.1-0.7-0.4-0.9L7.9,6.9c-0.5-0.4-1.1-0.4-1.6,0C5.8,7.3,5.7,8,6.2,8.6
c0,0,0,0,0,0L8.7,11C8.9,11.2,9.2,11.4,9.5,11.3L9.5,11.3z"/>
<path class="st0" d="M42.3,7.8c0-0.3-0.1-0.6-0.4-0.8c-0.5-0.5-1.2-0.5-1.7,0l-2.5,2.4c-0.4,0.5-0.4,1.3,0.1,1.7
c0.2,0.2,0.5,0.3,0.8,0.3h0.1c0.3,0,0.6-0.1,0.8-0.3l2.5-2.4C42.2,8.4,42.3,8.1,42.3,7.8z"/>
<path class="st0" d="M31.1,37.3H16.9c-0.7,0-1.2,0.5-1.2,1.2c0,0,0,0,0,0l0,0c0,0.3,0.1,0.6,0.3,0.9c0.2,0.2,0.6,0.4,0.9,0.4h14.2
c0.3,0,0.7-0.2,0.9-0.4c0.3-0.4,0.4-0.9,0.2-1.4C32,37.6,31.5,37.3,31.1,37.3z"/>
<path class="st0" d="M30,41.5H17.9c-0.5,0.1-1,0.5-1.1,1c-0.1,0.3,0,0.6,0.2,0.9c0.2,0.3,0.5,0.5,0.8,0.5h0.8l0.8,2.1
c0.4,1.1,1.4,1.9,2.6,1.9h3.8c1.2,0,2.3-0.8,2.6-1.9l0.7-2.1h0.8c0.5-0.1,1-0.5,1.1-1c0-0.3,0-0.6-0.2-0.9
C30.7,41.8,30.4,41.6,30,41.5z M26.3,45.5h-4.4l-0.4-1h4.8V45.5z"/>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 26.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="_x39_5911ed8-5178-4829-ac49-5ab9b45f1a7f"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 48 48"
style="enable-background:new 0 0 48 48;" xml:space="preserve">
<style type="text/css">
.st0{fill:#0B59B3;}
</style>
<path class="st0" d="M47.2,11.5l-5-7.9c-0.9-1.4-2.5-2.3-4.2-2.3H9.1c-1.8,0-3.5,1-4.3,2.6l-4.2,7.8c-0.9,1.7-0.8,3.7,0.3,5.3
l19.9,28.2c0.6,0.9,1.6,1.4,2.7,1.4l0,0c0.7,0,1.4-0.2,2-0.7c0.3-0.2,0.5-0.4,0.8-0.7L47,17.2C48.2,15.5,48.3,13.3,47.2,11.5z
M30,15.5l-6.4,24l-6.4-24L30,15.5z M17.2,12.9l6.5-8.9l6.1,8.9L17.2,12.9z M26.6,3.7h10.7L32,11.5L26.6,3.7z M34.1,13l5.8-8.4
C40,4.7,40.1,4.8,40.2,5l5,7.9v0.1h-5V13H34.1z M45.3,15.5c0,0.1-0.1,0.2-0.2,0.3L25.7,41.9l7-26.4h7.9l0,0L45.3,15.5z M14.4,15.5
l7,26.4L2.9,15.6l-0.1-0.1L14.4,15.5z M7,4.9l5.9,8H2.7v-0.1l4.2-7.8L7,4.9z M9.3,3.7h11.6l-5.7,7.9L9.3,3.7z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

@ -217,4 +217,5 @@ a:not([href]):not([class]):hover{color:inherit;text-decoration:none}
.min-vh-100{min-height:100vh !important}
.m-t-normal{margin-top: 16px;}
.m-t-large{margin-top: 80px;}
.m-t-large{margin-top: 100px;}
.m-b-large{margin-bottom: 100px;}

@ -1,6 +1,6 @@
img{width: 100%}
.v-container {
width: 1280px;
width: 1220px;
margin: 0 auto;
}
@ -12,11 +12,9 @@
}
@media (max-width: 768px) {
.cjy-banner {
.img {
width: 100% !important;
}
.cjy-banner {
.img {
width: 100% !important;
}
}
@ -470,14 +468,71 @@
.el-tabs__nav-next {
display: none
}
.el-tabs__nav-prev {
display: none
}
}
.cjy-about-title {
font-size: 36px;
font-weight: 600
font-weight: 600;
}
.cjy-about-box {
margin-top: 30px;
width: 400px;
padding: 20px;
border-radius: 10px;
background-color: rgba(255, 255, 255, .05);
border: 1px solid rgba(255, 255, 255, .5);
.title {
font-size: 36px;
font-weight: 600;
color: #fff
}
.info {
color: #fff
}
.tel {
position: relative;
display: inline-block;
margin-top: 20px;
padding: 5px 20px 5px 55px;
background-color: #0B59B3;
font-size: 32px;
font-weight: bold;
border-radius: 8px;
color: #fff;
&:before {
content: "";
width: 20px;
height: 20px;
position: absolute;
left: 20px;
top: 20px;
background: url("~@/assets/images/icon-content-tel.svg");
background-size: cover;
background-repeat: no-repeat;
}
}
}
.el-carousel.certificate {
.el-carousel__container {
height: 400px;
}
}
.cjy-about-certificate {
margin: 0 80px;
.list-item {
display: flex;
padding: 10px 20px;
@ -502,7 +557,7 @@
.cjy-about-demeanou-info {
color: #2A333D;
margin: 20px 0;
font-size: 14px;
font-size: 16px;
line-height: 28px;
}
@ -519,7 +574,10 @@
.step-item {
position: relative;
margin-right: 50px;
&:not(:last-child) {
margin-right: 80px;
}
&:before {
content: "";
@ -570,6 +628,7 @@
list-style: none;
padding: 0;
margin: 0 auto;
&.ul-item {
display: flex;
@ -628,3 +687,112 @@
}
}
}
.cjy-about-brief {
.logo {
width: 120px;
}
.date {
margin-top: 80px;
.top {
color: #0B59B3;
font-size: 36px;
font-weight: bold;
}
.bottom {
font-size: 16px;
color: #2A333D;
margin-top: 10px;
}
}
.title {
margin-top: 30px;
font-size: 36px;
font-weight: bold;
color: #1B1B1B
}
.info {
p {
font-size: 16px;
color: #4D5E70;
line-height: 28px;
}
}
}
.culture-top {
margin-top: 60px;
position: relative;
&:before {
content: "";
position: absolute;
left: 0;
top: 70px;
width: 100%;
height: 1px;
border-bottom: 1px dotted #4D5E70;
}
.icon {
position: relative;
z-index: 9;
width: 140px;
height: 140px;
border-radius: 140px;
background-color: #E5F1FF;
margin: 0 auto;
}
.el-col-6:nth-child(1) .icon {
background-image: url("~@/assets/images/icon-culture01.svg");
background-repeat: no-repeat;
background-position: center;
background-size: 50%;
}
.el-col-6:nth-child(2) .icon {
background-image: url("~@/assets/images/icon-culture02.svg");
background-repeat: no-repeat;
background-position: center;
background-size: 50%;
}
.el-col-6:nth-child(3) .icon {
background-image: url("~@/assets/images/icon-culture03.svg");
background-repeat: no-repeat;
background-position: center;
background-size: 50%;
}
.el-col-6:nth-child(4) .icon {
background-image: url("~@/assets/images/icon-culture04.svg");
background-repeat: no-repeat;
background-position: center;
background-size: 50%;
}
.title {
margin-top: 10px;
font-size: 22px;
color: #1B1B1B;
font-weight: bold;
text-align: center
}
.info {
margin-top: 10px;
text-align: center;
font-size: 16px;
color: #2A333D
}
}
.culture-bot {
margin-top: 50px;
}

@ -228,7 +228,7 @@ export default {
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="large"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="large"]::before {
content: "18px";
content: "16px";
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="huge"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="huge"]::before {

@ -3,41 +3,41 @@
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="45%" v-dialogDrag append-to-body>
<el-form ref="formRef" :model="formData" :rules="formRules" v-loading="formLoading" label-width="100px">
<el-form-item label="模块类型" prop="type">
<el-select v-model="formData.type" placeholder="请选择模块类型">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.COLUMN_TYPE)"
:key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="资讯类型" prop="infoType">
<el-select v-model="formData.infoType" placeholder="请选择资讯类型">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.INFO_TYPE)"
:key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="标题" prop="title">
<el-input v-model="formData.title" placeholder="请输入标题" />
</el-form-item>
<el-form-item label="副标题" prop="subtitle">
<el-input v-model="formData.subtitle" placeholder="请输入副标题" />
</el-form-item>
<el-form-item label="跳转链接" prop="url">
<el-input v-model="formData.url" placeholder="请输入跳转链接" />
</el-form-item>
<el-form-item label="简介">
<Editor v-model="formData.introduction" :min-height="192"/>
</el-form-item>
<el-form-item label="logo">
<ImageUpload v-model="formData.logo"/>
</el-form-item>
<el-form-item label="图库">
<ImageUpload v-model="formData.image"/>
</el-form-item>
<el-form-item label="内容">
<Editor v-model="formData.content" :min-height="192"/>
</el-form-item>
<el-form-item label="模块类型" prop="type">
<el-select v-model="formData.type" placeholder="请选择模块类型">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.COLUMN_TYPE)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="资讯类型" prop="infoType">
<el-select v-model="formData.infoType" placeholder="请选择资讯类型">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.INFO_TYPE)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="标题" prop="title">
<el-input v-model="formData.title" placeholder="请输入标题"/>
</el-form-item>
<el-form-item label="副标题" prop="subtitle">
<el-input v-model="formData.subtitle" placeholder="请输入副标题"/>
</el-form-item>
<el-form-item label="跳转链接" prop="url">
<el-input v-model="formData.url" placeholder="请输入跳转链接"/>
</el-form-item>
<el-form-item label="简介">
<Editor v-model="formData.introduction" :min-height="192"/>
</el-form-item>
<el-form-item label="logo">
<ImageUpload v-model="formData.logo"/>
</el-form-item>
<el-form-item label="图库">
<ImageUpload v-model="formData.image"/>
</el-form-item>
<el-form-item label="内容">
<Editor v-model="formData.content" :min-height="192"/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</div>
@ -46,101 +46,102 @@
</template>
<script>
import * as ColumnInfoApi from '@/api/cjy/columninfo';
import ImageUpload from '@/components/ImageUpload';
import Editor from '@/components/Editor';
import { DICT_TYPE, getDictDatas } from "@/utils/dict";
export default {
name: "ColumnInfoForm",
components: {
ImageUpload,
Editor,
},
data() {
return {
//
dialogTitle: "",
//
dialogVisible: false,
// 12
formLoading: false,
//
formData: {
id: undefined,
type: undefined,
infoType: undefined,
title: undefined,
subtitle: undefined,
url: undefined,
introduction: undefined,
logo: undefined,
image: undefined,
content: undefined,
},
//
formRules: {
type: [{ required: true, message: '模块类型不能为空', trigger: 'change' }],
},
};
},
methods: {
/** 打开弹窗 */
async open(id) {
this.dialogVisible = true;
this.reset();
//
if (id) {
this.formLoading = true;
try {
const res = await ColumnInfoApi.getColumnInfo(id);
this.formData = res.data;
this.title = "修改栏目管理";
} finally {
this.formLoading = false;
}
}
this.title = "新增栏目管理";
},
/** 提交按钮 */
async submitForm() {
//
await this.$refs["formRef"].validate();
this.formLoading = true;
import * as ColumnInfoApi from '@/api/cjy/columninfo';
import ImageUpload from '@/components/ImageUpload';
import Editor from '@/components/Editor';
import {DICT_TYPE, getDictDatas} from "@/utils/dict";
export default {
name: "ColumnInfoForm",
components: {
ImageUpload,
Editor,
},
data() {
return {
//
dialogTitle: "",
//
dialogVisible: false,
// 12
formLoading: false,
//
formData: {
id: undefined,
type: undefined,
infoType: undefined,
title: undefined,
subtitle: undefined,
url: undefined,
introduction: undefined,
logo: undefined,
image: undefined,
content: undefined,
},
//
formRules: {
type: [{required: true, message: '模块类型不能为空', trigger: 'change'}],
},
};
},
methods: {
/** 打开弹窗 */
async open(id) {
this.dialogVisible = true;
this.reset();
//
if (id) {
this.formLoading = true;
try {
const data = this.formData;
//
if (data.id) {
await ColumnInfoApi.updateColumnInfo(data);
this.$modal.msgSuccess("修改成功");
this.dialogVisible = false;
this.$emit('success');
return;
}
//
await ColumnInfoApi.createColumnInfo(data);
this.$modal.msgSuccess("新增成功");
this.dialogVisible = false;
this.$emit('success');
const res = await ColumnInfoApi.getColumnInfo(id);
this.formData = res.data;
this.title = "修改栏目管理";
} finally {
this.formLoading = false;
}
},
/** 表单重置 */
reset() {
this.formData = {
id: undefined,
type: undefined,
infoType: undefined,
title: undefined,
subtitle: undefined,
url: undefined,
introduction: undefined,
logo: undefined,
image: undefined,
content: undefined,
};
this.resetForm("formRef");
}
this.title = "新增栏目管理";
},
/** 提交按钮 */
async submitForm() {
//
await this.$refs["formRef"].validate();
this.formLoading = true;
try {
const data = this.formData;
//
if (data.id) {
await ColumnInfoApi.updateColumnInfo(data);
this.$modal.msgSuccess("修改成功");
this.dialogVisible = false;
this.$emit('success');
return;
}
//
await ColumnInfoApi.createColumnInfo(data);
this.$modal.msgSuccess("新增成功");
this.dialogVisible = false;
this.$emit('success');
} finally {
this.formLoading = false;
}
},
/** 表单重置 */
reset() {
this.formData = {
id: undefined,
type: undefined,
infoType: undefined,
title: undefined,
subtitle: undefined,
url: undefined,
introduction: undefined,
logo: undefined,
image: undefined,
content: undefined,
};
this.resetForm("formRef");
}
};
}
};
</script>

@ -5,14 +5,15 @@
<el-form-item label="模块类型" prop="type">
<el-select v-model="queryParams.type" placeholder="请选择模块类型" clearable size="small">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.COLUMN_TYPE)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="标题" prop="title">
<el-input v-model="queryParams.title" placeholder="请输入标题" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="副标题" prop="subtitle">
<el-input v-model="queryParams.subtitle" placeholder="请输入副标题" clearable @keyup.enter.native="handleQuery"/>
<el-input v-model="queryParams.subtitle" placeholder="请输入副标题" clearable
@keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
@ -24,35 +25,38 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="openForm(undefined)"
v-hasPermi="['cjy:column-info:create']">新增</el-button>
v-hasPermi="['cjy:column-info:create']">新增
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['cjy:column-info:export']">导出</el-button>
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
:loading="exportLoading"
v-hasPermi="['cjy:column-info:export']">导出
</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="主键" align="center" prop="id" />
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="主键" align="center" prop="id"/>
<el-table-column label="模块类型" align="center" prop="type">
<template v-slot="scope">
<dict-tag :type="DICT_TYPE.COLUMN_TYPE" :value="scope.row.type" />
<dict-tag :type="DICT_TYPE.COLUMN_TYPE" :value="scope.row.type"/>
</template>
</el-table-column>
<el-table-column label="标题" align="center" prop="title" />
<el-table-column label="副标题" align="center" prop="subtitle" />
<el-table-column label="跳转链接" align="center" prop="url" />
<el-table-column label="标题" align="center" prop="title"/>
<el-table-column label="副标题" align="center" prop="subtitle"/>
<el-table-column label="跳转链接" align="center" prop="url"/>
<el-table-column label="是否推荐" align="center" prop="recommend">
<template v-slot="scope">
<el-switch
v-model="scope.row.recommend"
active-color="#13ce66"
:active-value="1"
:inactive-value="0"
@change="handleRecommendChange(scope.row)"
inactive-color="#ff4949">
</el-switch>
<el-switch
v-model="scope.row.recommend"
active-color="#13ce66"
:active-value="1"
:inactive-value="0"
@change="handleRecommendChange(scope.row)"
inactive-color="#ff4949">
</el-switch>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
@ -63,9 +67,11 @@
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template v-slot="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="openForm(scope.row.id)"
v-hasPermi="['cjy:column-info:update']">修改</el-button>
v-hasPermi="['cjy:column-info:update']">修改
</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['cjy:column-info:delete']">删除</el-button>
v-hasPermi="['cjy:column-info:delete']">删除
</el-button>
</template>
</el-table-column>
</el-table>
@ -73,17 +79,18 @@
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<ColumnInfoForm ref="formRef" @success="getList" />
</div>
<ColumnInfoForm ref="formRef" @success="getList"/>
</div>
</template>
<script>
import * as ColumnInfoApi from '@/api/cjy/columninfo';
import ColumnInfoForm from './ColumnInfoForm.vue';
export default {
name: "ColumnInfo",
components: {
ColumnInfoForm
ColumnInfoForm
},
data() {
return {
@ -93,8 +100,8 @@ export default {
exportLoading: false,
//
showSearch: true,
//
total: 0,
//
total: 0,
//
list: [],
//
@ -105,13 +112,13 @@ export default {
currentRow: {},
//
queryParams: {
pageNo: 1,
pageSize: 10,
pageNo: 1,
pageSize: 10,
type: null,
title: null,
subtitle: null,
},
};
};
},
created() {
this.getList();
@ -120,7 +127,7 @@ export default {
/** 查询列表 */
async getList() {
try {
this.loading = true;
this.loading = true;
const res = await ColumnInfoApi.getColumnInfoPage(this.queryParams);
console.log(res);
this.list = res.data.list;
@ -164,10 +171,11 @@ export default {
const id = row.id;
await this.$modal.confirm('是否确认删除栏目管理编号为"' + id + '"的数据项?')
try {
await ColumnInfoApi.deleteColumnInfo(id);
await this.getList();
this.$modal.msgSuccess("删除成功");
} catch {}
await ColumnInfoApi.deleteColumnInfo(id);
await this.getList();
this.$modal.msgSuccess("删除成功");
} catch {
}
},
/** 导出按钮操作 */
async handleExport() {
@ -181,6 +189,6 @@ export default {
this.exportLoading = false;
}
},
}
}
};
</script>

@ -1,7 +1,7 @@
<template>
<div class="cjy-header">
<div class="v-container row">
<div class="cjy-header-logo"></div>
<div class="v-container cjy-header-box row flex-align-center">
<div class="cjy-header-logo"><img src="@/assets/images/logo-red.png" class="img" /></div>
<div class="cjy-header-nav row">
<div class="nav-item" v-for="(item,index) in nav_list" :key="index" @click="gotoPages(item.url)">{{ item.title }}</div>
</div>
@ -42,10 +42,11 @@ export default {
.cjy-header {
height: 100px;
background-color: #fff;
.cjy-header-box{height: 100%}
.cjy-header-logo{.img{width: 125px}}
.cjy-header-nav {
margin-left: 40px;
padding-top: 35px;
.nav-item {
margin: 0 30px;

@ -41,8 +41,9 @@
</div>
</template>
<script>
import * as Api from "@/api/cjy/columninfo"
export default {
name: "Case-list",
name: "case-list",
data() {
return {
case_id: null,
@ -72,51 +73,16 @@ export default {
]
},
//
getCaseData(id,active) {
async getCaseData(id,active) {
if(active){
this.active_menu = active
}
this.case_data = {
title: "电子票务系统",
date: "发布时间:2024-02-22",
content: " <div class=\"\">\n" +
" <img alt=\"\" class=\"contentBanner\" src=\"https://www.lutongwulian.com/uploads/allimg/230321/1-230321112I2E9.png\"\n" +
" style=\" height: 314px;\">\n" +
" <p class=\"msg\">\n" +
" 安防监控系统框架</p>\n" +
" <p class=\"title\">\n" +
" 产品简介</p>\n" +
" <p class=\"describe\">\n" +
" 随着行业信息化建设不断发展,园区安防业务系统及其延伸应用越来越受重视,在业务管理需求不断延伸的同时,园区安防监控系统实现对整个生产园区日常生活管理、生产作业、运输等各个环节的统一监管。视频监控系统与安防管理系统集成,构建整个生产园区的可视化安防管控平台。<br>\n" +
" 系统的综合安防管理(如远程视频联网、移动可视化监管等)可以帮助园区优化传统安防管理方式,减少中间环节和中间管理人员,从而建立起精良、敏捷的“扁平”型组织结构,让园区安防信息畅通、及时,使信息反馈更加迅速,提高了园区对安全隐患及生产现场问题的快速反应能力,从而更好地适应竞争日益激烈的市场环境。\n" +
" </p>\n" +
" <p class=\"title\">\n" +
" 优势提炼</p>\n" +
" <img alt=\"\" class=\"contentImg\" src=\"https://www.lutongwulian.com/uploads/allimg/230321/1-230321112IR27.png\"\n" +
" style=\" height: 462px;\">\n" +
" <p class=\"title\">\n" +
" 应用场景</p>\n" +
" <p class=\"titleContent\">\n" +
" 1、适用场景</p>\n" +
" <p class=\"describe circle\">\n" +
" 1.远程管理<br>\n" +
" <br>\n" +
" 系统具有远程管理功能,园区管理员可以通过监控计算机网络进行远程的操作或察看,全局统一权限控制,可查看、可配置、可操作权限分离,分设备、分摄像头、分组别。<br>\n" +
" <br>\n" +
" 2.自动报警<br>\n" +
" <br>\n" +
" 自动报警系统的作用在于监控园区周边环境,规避杜绝各种不法分子违法行为。自动红外探测器安装于园区围墙,通过红外线探测并将入侵预警信号发送至物业管理中心计算机显示器,系统接收到入侵信号便会远程操控启动探照灯、录像设备,工作人员可根据预警提示通知巡逻人员赶赴现场进行处理。<br>\n" +
" <br>\n" +
" 3.&nbsp;闭路电视监控<br>\n" +
" <br>\n" +
" 系统由三大部件构成,分别是监视部件、传输部件、控制部件。将多类型摄像机安装于园区内不同位置,实时监控园区概况并将监控画面储存备份。例如,高清的数字摄像机可安置在园区出入口;超低照明度的摄像机安装在楼梯走道、地下停车场等。\n" +
" </p>\n" +
" </div>"
}
let res = await Api.getDetail(this.case_id)
this.case_data = res.data
},
//
gotoPages(val) {
this.$router.push("/Case-detail?id" + val)
this.$router.push("/case-detail?id" + val)
}
}
}

@ -16,12 +16,12 @@
<!-- 新闻 列表 -->
<div class="v-container">
<div class="cjy-case-list row">
<div class="list-item col-8" v-for="(item,index) in news_list" :key="index" @click="gotoPages(item.id)">
<div class="list-item col-8" v-for="(item,index) in case_list" :key="index" @click="gotoPages(item.id)">
<div class="item-box">
<div class="item-image"><img :src="item.image" class="img"></div>
<div class="item-image"><img :src="item.logo" class="img"></div>
<div class="item-content">
<div class="title">{{ item.title }}</div>
<div class="info">{{ item.info }}</div>
<div class="info" v-html="item.introduction"></div>
<div class="more"><span class="text">查询详情</span></div>
</div>
</div>
@ -34,49 +34,26 @@
</template>
<script>
import * as Api from "@/api/cjy/columninfo"
export default {
name: "list",
name: "case-list",
data() {
return {
news_list: []
queryParams: {
pageNo: 1,
pageSize: 10,
type: 5,
},
case_list: [],
}
},
mounted() {
this.getNewsList()
this.getList()
},
methods: {
getNewsList() {
this.news_list = [{
id: 1,
image: 'https://www.lutongwulian.com/uploads/241226/4-241226132054560.jpg',
title: "云南丽江丨拉市海(4A)",
info: "智慧旅游作为旅游业与现代信息技术深度融合的产物,正逐步改变着旅游业的运营模式和服务方式。在智慧旅游的框架下,跨区域资源整合与营销策略创新成为提升旅游业竞争力的关键。 本文旨在探讨智慧旅游如何实现跨区域资源整合,并在此基础上推动文旅营销策略"
}, {
id: 2,
image: 'https://www.lutongwulian.com/uploads/250107/4-25010G444102P.jpg',
title: "云南德钦丨飞来寺国家森林公园",
info: "智慧文旅AI大模型作为AI+旅游的新兴产物,强大的搜索功能为游客提供了便捷、全面、个性化的旅游信息,当我们利用文旅AI大模型搜索平台探寻信息时,这些精准且丰富的搜索结果数据究竟是从哪里得来呢? 本文将深入探讨智慧文旅AI大模型搜索的结果数据来源,谈谈"
}, {
id: 3,
image: 'https://www.lutongwulian.com/uploads/241224/4-241224152Q5914.jpg',
title: "云南西双版纳州丨“智游西双版纳”",
info: " 众多热门景区、演出和重要赛事等场合,黄牛党的身影屡见不鲜,通过大量囤积门票,利用了游客急于购票的心理,恶意哄抬价格,从中攫取高额利润。 这种行为不仅严重扭曲了市场的正常秩序,使门票价格远远背离了其实际价值,也公然违背了公平交易的基本原则,..."
}, {
id: 4,
image: 'https://www.lutongwulian.com/uploads/241226/4-241226132054560.jpg',
title: "云南丽江丨拉市海(4A)",
info: "智慧旅游作为旅游业与现代信息技术深度融合的产物,正逐步改变着旅游业的运营模式和服务方式。在智慧旅游的框架下,跨区域资源整合与营销策略创新成为提升旅游业竞争力的关键。 本文旨在探讨智慧旅游如何实现跨区域资源整合,并在此基础上推动文旅营销策略"
}, {
id: 5,
image: 'https://www.lutongwulian.com/uploads/250107/4-25010G444102P.jpg',
title: "云南德钦丨飞来寺国家森林公园",
info: "智慧文旅AI大模型作为AI+旅游的新兴产物,强大的搜索功能为游客提供了便捷、全面、个性化的旅游信息,当我们利用文旅AI大模型搜索平台探寻信息时,这些精准且丰富的搜索结果数据究竟是从哪里得来呢? 本文将深入探讨智慧文旅AI大模型搜索的结果数据来源,谈谈"
}, {
id: 6,
image: 'https://www.lutongwulian.com/uploads/241224/4-241224152Q5914.jpg',
title: "云南西双版纳州丨“智游西双版纳”",
info: " 众多热门景区、演出和重要赛事等场合,黄牛党的身影屡见不鲜,通过大量囤积门票,利用了游客急于购票的心理,恶意哄抬价格,从中攫取高额利润。 这种行为不仅严重扭曲了市场的正常秩序,使门票价格远远背离了其实际价值,也公然违背了公平交易的基本原则,..."
}]
async getList() {
let res = await Api.getColumnInfoList(this.queryParams)
this.case_list = res.data.list
},
//
gotoPages(val) {

@ -41,8 +41,10 @@
</div>
</template>
<script>
import * as Api from "@/api/cjy/columninfo"
export default {
name: "news-list",
name: "news-detail",
data() {
return {
news_id:null,
@ -60,54 +62,9 @@ export default {
},
methods: {
//
getNewsData() {
this.news_data = {
title: "智慧旅游线上布局:从“流量”到“留量”的转化策略",
date: "发布时间:2024-02-22",
content: "<div class=\"aboutR-content clearfix\">\n" +
" <div>\n" +
"\t<span style=\"font-size:16px;\">智慧旅游的核心目标是构建一个高效、个性化且用户粘性强的线上旅游生态系统,通过多渠道、多平台的整合策略,将广泛的游客流量有效转化为持续增长的留存量,推动旅游业务的长期发展。<br>\n" +
"\t<br>\n" +
"\t<img alt=\"\" src=\"https://www.lutongwulian.com/uploads/250113/4-25011313093XT.jpg\" style=\"width: 100%; height: 100%;\"><br>\n" +
"\t<br>\n" +
"\t<strong>一、构建文旅全渠道营销矩阵</strong><br>\n" +
"\t<strong>1.景区官方网站迭代升级</strong><br>\n" +
"\t官方网站作为景区的门户,在设计上需要遵循用户体验至上的原则,首先需要确保网站界面的美观、交互流畅,能够提供详尽的旅游信息和服务指南,合理利用SEO技术优化网站结构,提升搜索引擎排名,自然引流。<br>\n" +
"\t<br>\n" +
"\t<strong>2.社交媒体策略部署</strong><br>\n" +
"\t社交媒体平台是触达潜在用户的关键渠道,可以制定差异化的社交媒体营销策略,根据不同平台的特性定制内容,如微博的旅游攻略、微信的互动活动、抖音的短视频展示等,与KOL合作,利用其影响力扩大文旅品牌的曝光度,引导流量到景区官方渠道。<br>\n" +
"\t<br>\n" +
"\t<strong>3.短视频与直播赛道创新内容质量</strong><br>\n" +
"\t当下短视频和直播是吸引年轻用户的重要手段,可以创作高质量的短视频内容,利用短视频平台的算法推荐机制,精准定位目标用户,也可以尝试直播互动,去增强用户的参与感和粘性。<br>\n" +
"\t<br>\n" +
"\t<strong>4.完善景区官方小程序的功能</strong><br>\n" +
"\t智慧景区小程序要能够具备一站式服务功能,包括门票预订、酒店预订、景区内导航导览等。通过用户行为数据分析,不断优化功能布局和操作流程,提升用户体验,利用小程序收集用户数据,也可以为后续的个性化推荐和精准营销提供基础。<br>\n" +
"\t<br>\n" +
"\t<img alt=\"\" src=\"https://www.lutongwulian.com/uploads/250113/4-250113131001P3.jpg\" style=\"width: 100%; height: 100%;\"><br>\n" +
"\t<br>\n" +
"\t<strong>二、深度挖掘文旅品牌IP与景区故事</strong><br>\n" +
"\t<strong>1.打造文旅品牌独树一帜的IP形象</strong><br>\n" +
"\t深入挖掘旅游目的地的文化底蕴和特色元素,打造独特的品牌IP,通过策划主题节庆、艺术展览等活动,强化品牌形象,提升用户认知度,通过IP的衍生产品,如文创商品、主题酒店等,拓宽收入来源。<br>\n" +
"\t<br>\n" +
"\t<strong>2.景区故事与会员体系建设</strong><br>\n" +
"\t鼓励用户分享旅游故事和体验,通过UGC(用户生成内容)丰富社区内容,增强用户间的互动和粘性。设立用户激励机制,如积分兑换、会员特权等,提升用户活跃度和忠诚度。<br>\n" +
"\t<br>\n" +
"\t<strong>三、服务体验与个性化推荐的双重提升</strong><br>\n" +
"\t<strong>1.优化景区的服务流程</strong><br>\n" +
"\t通过智能客服、自助预订等功能,简化服务流程,提升用户体验,建立用户反馈机制,及时响应和处理用户问题,提升游客满意度。<br>\n" +
"\t<br>\n" +
"\t<strong>2.个性化推荐系统</strong><br>\n" +
"\t利用大数据和人工智能技术,构建个性化推荐系统。通过分析用户行为数据,提供精准的旅游推荐和服务,满足用户的个性化需求,提升用户粘性和复购率。<br>\n" +
"\t<br>\n" +
"\t<img alt=\"\" src=\"https://www.lutongwulian.com/uploads/250113/4-2501131310232F.png\" style=\"width: 100%; height: 100%;\"><br>\n" +
"\t<br>\n" +
"\t<strong>四、智慧化系统构建运营提升效率</strong><br>\n" +
"\t<strong>1.智慧化系统整合</strong><br>\n" +
"\t整合物联网、人工智能等先进技术,构建智慧化旅游系统,通过智能监控、预警和调度等功能,提升景区运营效率,降低运营成本。<br>\n" +
"\t<br>\n" +
"\t<strong>2.景区大数据分析</strong><br>\n" +
"\t建立数据分析平台,对游客行为、偏好和需求进行深入分析。通过数据洞察,为精准营销、产品迭代和决策制定提供科学依据。<br>\n"
}
async getNewsData() {
let res = await Api.getDetail(this.news_id)
this.news_data = res.data
},
//
getNewsList() {

@ -15,30 +15,30 @@
</div>
<!-- 新闻 列表 -->
<div class="v-container cjy-news-list">
<el-tabs v-model="active" @tab-click="getNewsList" class="cjy-tabs">
<el-tabs v-model="active" @tab-click="getNewsList()" class="cjy-tabs">
<el-tab-pane label="公司动态" name="first">
<div class="list-item" v-for="(item,index) in news_list" :key="index">
<div class="item-box row" @click="gotoPages(item.id)">
<div class="item-image"><img :src="item.image" class="img"></div>
<div class="item-content">
<div class="title">{{ item.title }}</div>
<div class="info">{{ item.info }}</div>
<div class="more"><span class="text">查询详情</span></div>
</div>
<div class="list-item" v-for="(item,index) in news_list" :key="index">
<div class="item-box row" @click="gotoPages(item.id)">
<div class="item-image"><img :src="item.logo" class="img"></div>
<div class="item-content">
<div class="title">{{ item.title }}</div>
<div class="info" v-html="item.introduction"></div>
<div class="more"><span class="text">查询详情</span></div>
</div>
</div>
</div>
</el-tab-pane>
<el-tab-pane label="行业资讯" name="second">
<div class="list-item"v-for="(item,index) in news_list" :key="index">
<div class="item-box row" @click="gotoPages(item.id)">
<div class="item-image"><img :src="item.image" class="img"></div>
<div class="item-content">
<div class="title">1{{ item.title }}</div>
<div class="info">{{ item.info }}</div>
<div class="more">查询详情</div>
</div>
<div class="list-item" v-for="(item,index) in news_list" :key="index">
<div class="item-box row" @click="gotoPages(item.id)">
<div class="item-image"><img :src="item.logo" class="img"></div>
<div class="item-content">
<div class="title">{{ item.title }}</div>
<div class="info" v-html="item.introduction"></div>
<div class="more"><span class="text">查询详情</span></div>
</div>
</div>
</div>
</el-tab-pane>
</el-tabs>
</div>
@ -48,11 +48,19 @@
</template>
<script>
import * as Api from "@/api/cjy/columninfo"
export default {
name: "list",
data() {
return {
active:"first",
queryParams: {
pageNo: 1,
pageSize: 10,
type: 7,
infoType: null
},
active: "first",
//
news_list: []
}
@ -63,24 +71,21 @@ export default {
},
methods: {
//
getNewsList() {
this.news_list = [{
image: 'https://www.lutongwulian.com/uploads/250110/4-2501100932105Q-lp.jpg',
title: "智慧旅游如何实现跨区域资源整合与营销策略创新",
info: "智慧旅游作为旅游业与现代信息技术深度融合的产物,正逐步改变着旅游业的运营模式和服务方式。在智慧旅游的框架下,跨区域资源整合与营销策略创新成为提升旅游业竞争力的关键。 本文旨在探讨智慧旅游如何实现跨区域资源整合,并在此基础上推动文旅营销策略"
}, {
image: 'https://www.lutongwulian.com/uploads/250109/4-250109130U0Q0-lp.jpg',
title: "智慧文旅AI大模型搜索的结果数据来自哪里?",
info: "智慧文旅AI大模型作为AI+旅游的新兴产物,强大的搜索功能为游客提供了便捷、全面、个性化的旅游信息,当我们利用文旅AI大模型搜索平台探寻信息时,这些精准且丰富的搜索结果数据究竟是从哪里得来呢? 本文将深入探讨智慧文旅AI大模型搜索的结果数据来源,谈谈"
}, {
image: 'https://www.lutongwulian.com/uploads/250106/4-2501060Z616350-lp.png',
title: "景区电子票务系统:“票务防黄牛”科技手段回应景区管理难点",
info: " 众多热门景区、演出和重要赛事等场合,黄牛党的身影屡见不鲜,通过大量囤积门票,利用了游客急于购票的心理,恶意哄抬价格,从中攫取高额利润。 这种行为不仅严重扭曲了市场的正常秩序,使门票价格远远背离了其实际价值,也公然违背了公平交易的基本原则,..."
}]
async getNewsList() {
switch (this.active) {
case "first":
this.queryParams.infoType = 1
break;
case "second":
this.queryParams.infoType = 2
break;
}
let res = await Api.getColumnInfoList(this.queryParams)
this.news_list = res.data.list
},
//
gotoPages(val) {
this.$router.push("/news-detail?id" + val)
this.$router.push("/news-detail?id=" + val)
}
}
}

@ -15,66 +15,126 @@
</div>
<div class="cjy-page-item1">
<div class="v-container">
<div class="row">
<div class="col-12">
<div>一家致力于文旅产业 软件研发及系统集成的服务商</div>
</div>
<div class="col-12">
<div> 创巨圆成立于2006年地处河北省石家庄市长安区中山东路583号瑞城国际广场7号楼1508室以石家庄为中心辐射河北</div>
<div> 创巨圆成立16年以来多次与河北省文化和旅游厅联通公司以及雄安新区衡水沽源饶阳安平崇礼等多个市县文旅局</div>
<div> 多年的技术沉淀与产品创新创巨圆现已有成熟的电商营销平台一部手机游平台产业监测平台大数据分析平台景区应</div>
</div>
</div> </div>
<el-row :gutter="150" class=" cjy-about-brief">
<el-col :span="12">
<img src="@/assets/images/logo-red.png" class="logo"/>
<div class="title">一家致力于文旅产业<br/>软件研发及系统集成的服务商</div>
<div class="row date">
<div class="col-8">
<div class="top">2006</div>
<div class="bottom">公司成立()</div>
</div>
<div class="col-8">
<div class="top">120</div>
<div class="bottom">荣誉资质</div>
</div>
<div class="col-8">
<div class="top">20+</div>
<div class="bottom">研发产品</div>
</div>
</div>
</el-col>
<el-col :span="12" class="info">
<p>
创巨圆成立于2006年地处河北省石家庄市长安区中山东路583号瑞城国际广场7号楼1508室以石家庄为中心辐射河北11个地市是一家专业的文旅产业软件研发及系统集成服务商现拥有近百名员工其中高效专业的研发团队超过40人有着多年技术锤炼和海量服务经验
</p>
<p>
创巨圆成立16年以来多次与河北省文化和旅游厅联通公司以及雄安新区衡水沽源饶阳安平崇礼等多个市县文旅局企事业单位合作首创河北省首届旅发大会全域旅游三位一体新模式构建了多维度多样化的旅游智慧管理体系并通过多年技术锤炼积累海量服务经验为各单位提供具有专业性针对性严谨性覆盖智慧文旅产业的行业信息化解决方案和服务
</p>
<p>
多年的技术沉淀与产品创新创巨圆现已有成熟的电商营销平台一部手机游平台产业监测平台大数据分析平台景区应急指挥平台等多个产品序列拥有数十项大数据应用核心技术著作权成为有能力有实力专注产品精研技术笃志品质的高精企业
</p>
</el-col>
</el-row>
</div>
</div>
<!-- 案例 详情 -->
<div class="v-container">
<div class="cjy-about-title text-center m-t-large">企业文化</div>
</div>
<div class="cjy-page-item3">
<div class="v-container">
<div class="cjy-about-title">企业历程</div>
<div class="cjy-about-step-info">投入资源提升技术满足客户需求</div>
<div class="cjy-about-step row">
<div class="step-item active">
<div class="title">第四阶段</div>
<div class="info">数字创新未来可期</div>
</div>
<div class="step-item">
<div class="title">第三阶段</div>
<div class="info">步入发展快速道乘势而上奋进突破</div>
</div>
<div class="step-item">
<div class="title">第二阶段</div>
<div class="info">步入发展阶段顺势而行主动作为</div>
</div>
<div class="step-item">
<div class="title">第一阶段</div>
<div class="info">初创阶段顺势而为打下基础</div>
<div class="v-container">
<div class="cjy-about-title">企业历程</div>
<div class="cjy-about-step-info">投入资源提升技术满足客户需求</div>
<div class="cjy-about-step row">
<div class="step-item active">
<div class="title">第四阶段</div>
<div class="info">数字创新未来可期</div>
</div>
<div class="step-item">
<div class="title">第三阶段</div>
<div class="info">步入发展快速道乘势而上奋进突破</div>
</div>
<div class="step-item">
<div class="title">第二阶段</div>
<div class="info">步入发展阶段顺势而行主动作为</div>
</div>
<div class="step-item">
<div class="title">第一阶段</div>
<div class="info">初创阶段顺势而为打下基础</div>
</div>
</div>
<vue-seamless-scroll
:data="step_data"
:class-option="classOption"
class="cjy-about-step-date"
>
<ul class="ul-item">
<li class="li-item" v-for="(item, index) in step_data" :key="index">
<div class="date">{{ item.date }}</div>
<div class="content">{{ item.content }}</div>
</li>
</ul>
</vue-seamless-scroll>
</div>
<vue-seamless-scroll
:data="step_data"
:class-option="classOption"
class="cjy-about-step-date"
>
<ul class="ul-item">
<li class="li-item" v-for="(item, index) in step_data" :key="index">
<div class="date">{{ item.date }}</div>
<div class="content">{{ item.content }}</div>
</li>
</ul>
</vue-seamless-scroll>
</div>
<div class="v-container">
<div class="cjy-about-title text-center m-t-large">企业文化</div>
<div class="cjy-about-culture">
<div class="culture-top">
<el-row>
<el-col :span="6">
<div class="icon"></div>
<div class="title">定位</div>
<div class="info">文旅产业软件研发<br/>及系统集成服务商</div>
</el-col>
<el-col :span="6">
<div class="icon"></div>
<div class="title">愿景</div>
<div class="info">成为一家小而美<br/>的科技型创新企业</div>
</el-col>
<el-col :span="6">
<div class="icon"></div>
<div class="title">使命</div>
<div class="info">为文旅业态赋能<br/>让文旅产业更智慧</div>
</el-col>
<el-col :span="6">
<div class="icon"></div>
<div class="title">精神</div>
<div class="info">诚信守义<br/>规矩方圆</div>
</el-col>
</el-row>
</div>
<el-row :gutter="30" class="culture-bot">
<el-col :span="12"> <img src="@/assets/images/culture-img01.png" class="img"/></el-col>
<el-col :span="12"> <img src="@/assets/images/culture-img02.png" class="img"/></el-col>
</el-row>
</div>
</div>
<div class="v-container">
<div class="cjy-about-title text-center m-t-large">资质证书及相关软著</div>
<div class="row cjy-about-certificate">
<div class="col-77" v-for="(item,index) in certificate" :key="index">
<div class="list-item flex-align-center">
<img :src="item.url" class="img"/>
<el-carousel :interval="5000" arrow="always" class="certificate">
<el-carousel-item v-for="item in 4" :key="item">
<div class="row cjy-about-certificate">
<div class="col-77" v-for="(item,index) in certificate" :key="index">
<div class="list-item flex-align-center">
<img :src="item.url" class="img"/>
</div>
</div>
</div>
</div>
</div>
</el-carousel-item>
</el-carousel>
</div>
<div class="v-container">
<div class="cjy-about-title text-center m-t-large">企业风采</div>
@ -87,6 +147,15 @@
</el-carousel-item>
</el-carousel>
</div>
<div class="v-container">
<div class="cjy-page-item4 m-t-large m-b-large">
<div class="cjy-about-box">
<div class="title">联系我们</div>
<div class="info">我们期待您的来信一起携手建设智慧城市</div>
<div class="tel">400-6661947</div>
</div>
</div>
</div>
<!-- 页面 底部 -->
<VBottom></VBottom>
</div>
@ -166,19 +235,25 @@ export default {
</script>
<style scoped lang="scss">
.cjy-page-item1{
.cjy-page-item1 {
height: 600px;
padding-top: 100px;
padding-top: 120px;
margin-top: -30px;
background: url("~@/assets/images/about-item1-bg.jpg");
background-size: contain;
background-position: left;
background-repeat: no-repeat;
}
.cjy-page-item3{
.cjy-page-item3 {
background: url("~@/assets/images/about-step-bg.jpg");
background-size: contain;
background-position: left;
background-repeat: no-repeat;
}
.cjy-page-item4{ padding: 50px;height: 360px; background: url("~@/assets/images/content-bg.jpg");
background-size: contain;
background-position: left;
background-repeat: no-repeat;}
</style>

@ -36,7 +36,7 @@ module.exports = {
proxy: {
// detail: https://cli.vuejs.org/config/#devserver-proxy
['/proxy-api']: {
target: `https://eluyou.ailuquan.cn:80/prod-api/`, //luquan Lqzhly@2024!
target: `http://192.168.130.157:48080/`, //luquan Lqzhly@2024!
// target: `http://api-dashboard.yudao.iocoder.cn`,
changeOrigin: true,
pathRewrite: {

Loading…
Cancel
Save