瀏覽代碼

解决冲突

Jing 5 月之前
父節點
當前提交
29a9dba347
共有 100 個文件被更改,包括 3594 次插入2484 次删除
  1. 7 0
      .env.dev
  2. 3 1
      .env.development
  3. 5 0
      .env.fengrui
  4. 7 0
      .env.liujian
  5. 7 0
      .env.liujiawei
  6. 7 0
      .env.master
  7. 7 0
      .env.mock
  8. 10 1
      .env.production
  9. 0 22
      html/index.html
  10. 二進制
      html/static/img/bottom1.4beac894.png
  11. 二進制
      html/static/img/bottom2.2ab2b933.png
  12. 二進制
      html/static/img/bottom3.dbdf6a22.png
  13. 二進制
      html/static/img/bottom4.8c29b6be.png
  14. 二進制
      html/static/img/link1.af832e99.png
  15. 二進制
      html/static/img/link2.0c9c4b61.png
  16. 二進制
      html/static/img/pic1.c51c22b6.png
  17. 二進制
      html/static/img/pic2.39705314.png
  18. 二進制
      html/static/img/pic3.856b5b57.png
  19. 二進制
      html/static/img/pic4.c837ef60.png
  20. 二進制
      html/static/img/sign1.eb76e48d.png
  21. 二進制
      html/static/img/sign2.31eb3bf2.png
  22. 0 10
      html/static/js/0.js
  23. 0 246
      html/static/js/app.js
  24. 0 58
      html/static/js/chunk-vendors.js
  25. 10 1
      package.json
  26. 7 0
      public/index.html
  27. 0 3
      src/api/advertise.js
  28. 27 0
      src/api/chat.js
  29. 87 0
      src/api/cms.js
  30. 48 0
      src/api/link.js
  31. 47 0
      src/api/module.js
  32. 47 0
      src/api/plate.js
  33. 56 0
      src/api/style.js
  34. 76 0
      src/api/tabbar.js
  35. 4 0
      src/api/template.js
  36. 9 0
      src/api/userMember.js
  37. 二進制
      src/assets/advertise/sample_graph.png
  38. 0 0
      src/assets/template/component/banner1.png
  39. 0 0
      src/assets/template/component/banner2.png
  40. 0 0
      src/assets/template/component/banner3.png
  41. 0 0
      src/assets/template/component/calendar.png
  42. 二進制
      src/assets/template/component/listyle.png
  43. 二進制
      src/assets/template/component/newsIcon.png
  44. 0 0
      src/assets/template/component/pictureTitle1.png
  45. 0 0
      src/assets/template/component/pictureTitle2.png
  46. 0 0
      src/assets/template/component/pictureTitle3.png
  47. 0 0
      src/assets/template/component/pictureTitle4.png
  48. 0 0
      src/assets/template/component/pictureTitle5.png
  49. 0 0
      src/assets/template/component/style1imgTitle.png
  50. 二進制
      src/assets/template/component/style1topLogo.png
  51. 0 0
      src/assets/template/component/style1topbg.png
  52. 0 0
      src/assets/template/component/titleStyle1.png
  53. 二進制
      src/assets/template/component/titleStyle2.png
  54. 二進制
      src/assets/template/component/titleStyle3.png
  55. 二進制
      src/assets/template/component/titleStyle4.png
  56. 二進制
      src/assets/template/preview.png
  57. 0 0
      src/assets/template/sector/bannerSector.png
  58. 0 0
      src/assets/template/sector/commentSector.png
  59. 0 0
      src/assets/template/sector/footerSector.png
  60. 0 0
      src/assets/template/sector/headSector.png
  61. 0 0
      src/assets/template/sector/imgSector.png
  62. 二進制
      src/assets/template/sector/imgTitleSector.png
  63. 0 0
      src/assets/template/sector/linkSector.png
  64. 0 0
      src/assets/template/sector/menuSector.png
  65. 0 0
      src/assets/template/sector/moreServicesSector.png
  66. 0 0
      src/assets/template/sector/newsSector.png
  67. 0 0
      src/assets/template/style1.png
  68. 0 0
      src/assets/template/style2.png
  69. 0 0
      src/assets/template/style3.png
  70. 0 0
      src/assets/template/style4.png
  71. 0 0
      src/assets/template/style5.png
  72. 0 0
      src/assets/template/style6.png
  73. 0 0
      src/assets/template/style7.png
  74. 0 0
      src/assets/template/style8.png
  75. 163 0
      src/layout/components/template/componentMenu.vue
  76. 104 0
      src/layout/creatWebsite.vue
  77. 1 0
      src/main.js
  78. 89 294
      src/router/index.js
  79. 345 0
      src/router/modules/dangyunlong.js
  80. 2 1
      src/store/getters.js
  81. 29 1
      src/store/modules/chat.js
  82. 11 1
      src/store/modules/pool.js
  83. 174 0
      src/store/modules/template.js
  84. 11 1
      src/store/modules/userMember.js
  85. 15 1
      src/styles/global.less
  86. 3 1
      src/utils/baseUrl.js
  87. 5 6
      src/utils/request.js
  88. 118 0
      src/views/advertise/adPlaceDetail.vue
  89. 392 356
      src/views/advertise/adPlaceList.vue
  90. 53 29
      src/views/advertise/advertiseList.vue
  91. 155 699
      src/views/chat/contacts.vue
  92. 79 182
      src/views/chat/creatTopic.vue
  93. 702 260
      src/views/chat/hall.vue
  94. 111 75
      src/views/chat/topic.vue
  95. 7 3
      src/views/crawler/webCrawler.vue
  96. 11 7
      src/views/crawler/webCrawlerList.vue
  97. 211 25
      src/views/crawler/webCrawlerListEdit.vue
  98. 312 194
      src/views/crawler/webRule.vue
  99. 2 2
      src/views/menu/menulist.vue
  100. 18 4
      src/views/news/creatNews.vue

+ 7 - 0
.env.dev

@@ -0,0 +1,7 @@
+# just a flag
+ENV = 'dev'
+
+# base api
+VUE_APP_BASE_API = 'http://183.131.25.186:9501'
+# base websocket
+VUE_APP_BASE_WEBSOCKET = 'ws://183.131.25.186:9506'

+ 3 - 1
.env.development

@@ -1,8 +1,10 @@
 # just a flag
 ENV = 'development'
 
+VUE_APP_BASE_WEBSOCKET = 'ws://183.131.25.186:9506'
 # base api
-VUE_APP_BASE_API = '/dev-api'
+VUE_APP_BASE_API = 'http://183.131.25.186:9501'
 '
 
 
+

+ 5 - 0
.env.fengrui

@@ -0,0 +1,5 @@
+# just a flag
+ENV = 'fengrui'
+
+# base api
+VUE_APP_BASE_API = 'http://192.168.1.115:9501'

+ 7 - 0
.env.liujian

@@ -0,0 +1,7 @@
+# just a flag
+ENV = 'liujian'
+
+# base api
+VUE_APP_BASE_API = 'http://192.168.1.127:9501'
+# base websocket
+VUE_APP_BASE_WEBSOCKET = 'ws://192.168.1.127:9506'

+ 7 - 0
.env.liujiawei

@@ -0,0 +1,7 @@
+# just a flag
+ENV = 'liujiawei'
+
+# base api
+VUE_APP_BASE_API = 'http://192.168.1.201:9501'
+# base websocket
+VUE_APP_BASE_WEBSOCKET = 'ws://192.168.1.201:9506'

+ 7 - 0
.env.master

@@ -0,0 +1,7 @@
+# just a flag
+ENV = 'master'
+
+# base api
+VUE_APP_BASE_API = 'https://admin.bjzxtw.org.cn/zxtapi'
+# base websocket
+VUE_APP_BASE_WEBSOCKET = 'ws://admin.bjzxtw.org.cn:9506'

+ 7 - 0
.env.mock

@@ -0,0 +1,7 @@
+# just a flag
+ENV = 'mock'
+
+# base api
+VUE_APP_BASE_API = 'http://127.0.0.1:4523/m1/4987755-4646495-default'
+# base websocket
+VUE_APP_BASE_WEBSOCKET = 'ws://127.0.0.1:4523/m1/4987755-4646495-default'

+ 10 - 1
.env.production

@@ -1,6 +1,15 @@
 # just a flag
 ENV = 'production'
 
+# 测试环境,当你需要打包到正式环境且需要开启Gzip的时候,你需要使用下面那个
 # base api
-VUE_APP_BASE_API = '/prod-api'
+VUE_APP_BASE_API = 'http://183.131.25.186:9501'
+# base websocket
+VUE_APP_BASE_WEBSOCKET = 'ws://183.131.25.186:9506'
+
+# 正式环境,当你需要打包到测试环境且需要开启Gzip的时候,你需要使用上面那个
+# base websocket
+# VUE_APP_BASE_WEBSOCKET = 'ws://admin.bjzxtw.org.cn:9506'
+# # base api
+# VUE_APP_BASE_API = 'https://admin.bjzxtw.org.cn/zxtapi'
 

+ 0 - 22
html/index.html

@@ -1,22 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="renderer" content="webkit">
-    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
-    <link rel="icon" href="/favicon.ico">
-    <title>政讯通运营管理平台</title>
-    <!-- 引入 Element UI -->
-    <!-- <link rel="stylesheet" href="https://unpkg.com/element-ui@2.13.2/lib/theme-chalk/index.css">
-    <script src="https://unpkg.com/element-ui@2.13.2/lib/index.js"></script>
-    <script src="https://unpkg.com/element-ui@2.13.2/lib/umd/locale/en.js"></script>
-    <script src="https://unpkg.com/element-ui@2.13.2/lib/umd/locale/zh-CN.js"></script> -->
-    <!-- 引入 ECharts -->
-    <!-- <script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script> -->
-  <link href="/static/js/app.js" rel="preload" as="script"><link href="/static/js/chunk-vendors.js" rel="preload" as="script"></head>
-  <body>
-    <div id="app"></div>
-    <!-- built files will be auto injected -->
-  <script type="text/javascript" src="/static/js/chunk-vendors.js"></script><script type="text/javascript" src="/static/js/app.js"></script></body>
-</html>

二進制
html/static/img/bottom1.4beac894.png


二進制
html/static/img/bottom2.2ab2b933.png


二進制
html/static/img/bottom3.dbdf6a22.png


二進制
html/static/img/bottom4.8c29b6be.png


二進制
html/static/img/link1.af832e99.png


二進制
html/static/img/link2.0c9c4b61.png


二進制
html/static/img/pic1.c51c22b6.png


二進制
html/static/img/pic2.39705314.png


二進制
html/static/img/pic3.856b5b57.png


二進制
html/static/img/pic4.c837ef60.png


二進制
html/static/img/sign1.eb76e48d.png


二進制
html/static/img/sign2.31eb3bf2.png


File diff suppressed because it is too large
+ 0 - 10
html/static/js/0.js


File diff suppressed because it is too large
+ 0 - 246
html/static/js/app.js


File diff suppressed because it is too large
+ 0 - 58
html/static/js/chunk-vendors.js


+ 10 - 1
package.json

@@ -7,17 +7,25 @@
     "dev": "vue-cli-service serve",
     "lint": "eslint --ext .js,.vue src",
     "build:prod": "vue-cli-service build",
+    "build:dev": "vue-cli-service build --mode dev",
+    "build:master": "vue-cli-service build --mode master",
     "build:stage": "vue-cli-service build --mode staging",
     "preview": "node build/index.js --preview",
     "new": "plop",
     "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml",
     "test:unit": "jest --clearCache && vue-cli-service test:unit",
-    "test:ci": "npm run lint && npm run test:unit"
+    "test:ci": "npm run lint && npm run test:unit",
+    "mock": "cross-env NODE_ENV=development vue-cli-service serve --mode mock",
+    "liujian": "cross-env NODE_ENV=development vue-cli-service serve --mode liujian",
+    "liujiawei": "cross-env NODE_ENV=development vue-cli-service serve --mode liujiawei",
+    "fengrui": "cross-env NODE_ENV=development vue-cli-service serve --mode fengrui",
+    "master": "cross-env NODE_ENV=development vue-cli-service serve --mode master"
   },
   "dependencies": {
     "axios": "0.18.1",
     "clipboard": "2.0.4",
     "codemirror": "5.45.0",
+    "compression-webpack-plugin": "^6.1.1",
     "core-js": "3.6.5",
     "driver.js": "0.9.5",
     "dropzone": "5.5.1",
@@ -63,6 +71,7 @@
     "chalk": "2.4.2",
     "chokidar": "2.1.5",
     "connect": "3.6.6",
+    "cross-env": "^7.0.3",
     "eslint": "6.7.2",
     "eslint-plugin-vue": "6.2.2",
     "html-webpack-plugin": "3.2.0",

+ 7 - 0
public/index.html

@@ -7,6 +7,13 @@
     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
     <link rel="icon" href="<%= BASE_URL %>favicon.ico">
     <title><%= webpackConfig.name %></title>
+    <!-- 引入 Element UI -->
+    <!-- <link rel="stylesheet" href="https://unpkg.com/element-ui@2.13.2/lib/theme-chalk/index.css">
+    <script src="https://unpkg.com/element-ui@2.13.2/lib/index.js"></script>
+    <script src="https://unpkg.com/element-ui@2.13.2/lib/umd/locale/en.js"></script>
+    <script src="https://unpkg.com/element-ui@2.13.2/lib/umd/locale/zh-CN.js"></script> -->
+    <!-- 引入 ECharts -->
+    <!-- <script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script> -->
   </head>
   <body>
     <div id="app"></div>

+ 0 - 3
src/api/advertise.js

@@ -79,8 +79,6 @@ export const delOrderAdmin = (data) => {
     method: 'post',
     data
   })
-<<<<<<< Updated upstream
-=======
 }
 
 
@@ -146,5 +144,4 @@ export const getSize = (data) => {
     method: 'post',
     data
   })
->>>>>>> Stashed changes
 }

+ 27 - 0
src/api/chat.js

@@ -190,6 +190,15 @@ export function updateGroup(data) {
     data
   })
 }
+
+//5.8 编辑群成员
+export function updateGroupMembers(data) {
+  return request({
+    url: '/chat/updateGroupMembers',
+    method: 'post',
+    data
+  })
+}
 //5.群聊 end ------------------------------------->
 
 //6.商圈 start ------------------------------------->
@@ -255,4 +264,22 @@ export function getTopicReply(data) {
     data
   })
 }
+
+//6.8 获取话题分类
+export function topicType(data) {
+  return request({
+    url: '/chat/topicType',
+    method: 'post',
+    data
+  })
+}
+
+//6.9 获取话题状态
+export function topicStatus(data) {
+  return request({
+    url: '/chat/topicStatus',
+    method: 'post',
+    data
+  })
+}
 //6.商圈 end ------------------------------------->

+ 87 - 0
src/api/cms.js

@@ -0,0 +1,87 @@
+import request from '@/utils/request'
+
+//C端网站请求无需token 但需要SiteId start ------------------------------------->
+
+//1.1 获取网站基本信息
+export function getSiteInfo(data) {
+  return request({
+    url: 'web/getSiteInfo',
+    method: 'post',
+    data
+  })
+}
+
+//1.2 获取网站导航池
+export function getSiteCategory(params) {
+  return request({
+    url: '/web/getSiteCategory',
+    method: 'get',
+    params
+  })
+}
+
+//1.3 获取网站底部导航
+export function getFooterCategoryList(params) {
+  return request({
+    url: '/web/getFooterCategoryList',
+    method: 'get',
+    params
+  })
+}
+
+//1.4 底部导航列表-详情
+export function getFooterContentList(params) {
+  return request({
+    url: '/web/getFooterContentList',
+    method: 'get',
+    params
+  })
+}
+
+//1.5 底部导航列表页-详情内容
+export function getFooterContentInfo(params) {
+  return request({
+    url: '/web/getFooterContentInfo',
+    method: 'get',
+    params
+  })
+}
+
+//1.6 获取行政区划
+export function selectWebsiteArea(params) {
+  return request({
+    url: '/web/selectWebsiteArea',
+    method: 'get',
+    params
+  })
+}
+
+//1.7 获取职能部门
+export function selectWebsiteDepartment(params) {
+  return request({
+    url: '/web/selectWebsiteDepartment',
+    method: 'get',
+    params
+  })
+}
+
+//1.8 获取某个站点下的新闻列表
+export function getWebsiteArticlesList(params) {
+  return request({
+    url: '/web/getWebsiteArticlesList',
+    method: 'get',
+    params
+  })
+}
+
+//1.9 获取新闻详情
+export function selectWebsiteArticleInfo(params) {
+  return request({
+    url: '/web/selectWebsiteArticleInfo',
+    method: 'get',
+    params
+  })
+}
+
+
+//C端网站请求无需token start ------------------------------------->

+ 48 - 0
src/api/link.js

@@ -0,0 +1,48 @@
+// 友情链接
+import request from '@/utils/request'
+
+// 获取并搜索友情链接
+export const getLinkList = (params) => {
+    return request({
+        url: '/link/getLinkList',
+        method: 'get',
+        params
+    })
+}
+
+// 获取友情链接详情
+export const getLinkInfo = (params) => {
+    return request({
+        url: '/link/getLinkInfo',
+        method: 'get',
+        params
+    })
+}
+
+// 创建友情链接
+export const createLink = (data) => {
+    return request({
+        url: '/link/createLink',
+        method: 'post',
+        data
+    })
+}
+
+// 删除友情链接
+export const delLink = (data) => {
+    return request({
+        url: '/link/delLink',
+        method: 'post',
+        data
+    })
+}
+
+
+// 修改友情链接
+export const updateLink = (data) => {
+    return request({
+        url: '/link/updateLink',
+        method: 'post',
+        data
+    })
+}

+ 47 - 0
src/api/module.js

@@ -0,0 +1,47 @@
+// 组件
+import request from '@/utils/request'
+
+//获取组件列表
+export const getComponentList = (data) => {
+    return request({
+        url: '/public/getComponentList',
+        method: 'post',
+        data
+    })
+}
+
+//新增组件
+export const addComponent = (data) => {
+    return request({
+        url: '/public/addComponent',
+        method: 'post',
+        data
+    })
+}
+
+//删除组件
+export const delComponent = (data) => {
+    return request({
+        url: '/public/delComponent',
+        method: 'post',
+        data
+    })
+}
+
+//编辑组件
+export const updateComponent = (data) => {
+    return request({
+        url: '/public/updateComponent',
+        method: 'post',
+        data
+    })
+}
+
+//获取组件详情
+export const getComponentInfo = (data) => {
+    return request({
+        url: '/public/getComponentInfo',
+        method: 'post',
+        data
+    })
+}

+ 47 - 0
src/api/plate.js

@@ -0,0 +1,47 @@
+// 版块
+import request from '@/utils/request'
+
+//获取版块列表
+export const getSectorList = (data) => {
+    return request({
+        url: '/public/getSectorList',
+        method: 'post',
+        data
+    })
+}
+
+//新增版块
+export const addSector = (data) => {
+    return request({
+        url: '/public/addSector',
+        method: 'post',
+        data
+    })
+}
+
+//删除版块
+export const delSector = (data) => {
+    return request({
+        url: '/public/delSector',
+        method: 'post',
+        data
+    })
+}
+
+//编辑版块
+export const updateSector = (data) => {
+    return request({
+        url: '/public/updateSector',
+        method: 'post',
+        data
+    })
+}
+
+//获取版块详情
+export const getSectorInfo = (data) => {
+    return request({
+        url: '/public/getSectorInfo',
+        method: 'post',
+        data
+    })
+}

+ 56 - 0
src/api/style.js

@@ -0,0 +1,56 @@
+// 风格
+import request from '@/utils/request'
+
+//获取风格名称
+export const getTemplateClass=(data)=>{
+    return request({
+        url:'/public/getTemplateClass',
+        method:'post',
+        data
+    })
+}
+
+//获取风格列表
+export const getTemplateList = (data) => {
+    return request({
+        url: '/public/getTemplateList',
+        method: 'post',
+        data
+    })
+}
+
+//新增风格
+export const addTemplate = (data) => {
+    return request({
+        url: '/public/addTemplate',
+        method: 'post',
+        data
+    })
+}
+
+//删除风格
+export const delTemplate=(data)=>{
+    return request({
+        url:'/public/delTemplate',
+        method:'post',
+        data
+    })
+}
+
+//更新风格
+export const updateTemplate = (data) => {
+    return request({
+        url: '/public/updateTemplate',
+        method: 'post',
+        data
+    })
+}
+
+//获取风格详情
+export const getTemplateInfo=(data)=>{
+    return request({
+        url:'/public/getTemplateInfo',
+        method:'post',
+        data
+    })
+}

+ 76 - 0
src/api/tabbar.js

@@ -0,0 +1,76 @@
+// 底部导航
+import request from '@/utils/request'
+
+//获取并搜索底部导航
+export const getFooterCategory = (data) => {
+    return request({
+        url: '/footer/getFooterCategory',
+        method: 'post',
+        data
+    })
+}
+
+//添加底部导航
+export const getTemplateClass = (data) => {
+    return request({
+        url: '/footer/addFooterCategory',
+        method: 'post',
+        data
+    })
+}
+
+//更新底部导航
+export const upFooterCategory = (data) => {
+    return request({
+        url: '/footer/upFooterCategory',
+        method: 'post',
+        data
+    })
+}
+
+//删除底部导航
+export const delFooterCategory = (data) => {
+    return request({
+        url: '/footer/delFooterCategory',
+        method: 'post',
+        data
+    })
+}
+
+
+//底部导航列表  -------------------------------------
+//添加导航列表
+export const addFooterContent = (data) => {
+    return request({
+        url: '/footer/addFooterContent',
+        method: 'post',
+        data
+    })
+}
+
+//搜索并获取列表
+export const getFooterContent = (data) => {
+    return request({
+        url: '/footer/getFooterContent',
+        method: 'post',
+        data
+    })
+}
+
+//修改导航列表
+export const upFooterContent = (data) => {
+    return request({
+        url: '/footer/upFooterContent',
+        method: 'post',
+        data
+    })
+}
+
+//删除导航列表
+export const delFooterContent = (data) => {
+    return request({
+        url: '/footer/delFooterContent',
+        method: 'post',
+        data
+    })
+}

+ 4 - 0
src/api/template.js

@@ -0,0 +1,4 @@
+import request from '@/utils/request'
+
+//mock
+

+ 9 - 0
src/api/userMember.js

@@ -64,4 +64,13 @@ export function updateUser(data) {
     data
   })
 }
+
+//1.8 重置用户密码
+export function resetPassword(data) {
+  return request({
+    url: '/user/resetPassword',
+    method: 'post',
+    data
+  })
+}
 //用户管理 end ------------------------------------->

二進制
src/assets/advertise/sample_graph.png


+ 0 - 0
html/static/img/banner1.81b17264.png → src/assets/template/component/banner1.png


+ 0 - 0
html/static/img/banner2.4b40b8ee.png → src/assets/template/component/banner2.png


+ 0 - 0
html/static/img/banner3.00f4e8b5.png → src/assets/template/component/banner3.png


+ 0 - 0
html/static/img/calendar.3e3aa850.png → src/assets/template/component/calendar.png


二進制
src/assets/template/component/listyle.png


二進制
src/assets/template/component/newsIcon.png


+ 0 - 0
html/static/img/pictureTitle1.2940b713.png → src/assets/template/component/pictureTitle1.png


+ 0 - 0
html/static/img/pictureTitle2.9411dbfa.png → src/assets/template/component/pictureTitle2.png


+ 0 - 0
html/static/img/pictureTitle3.55dd3c4a.png → src/assets/template/component/pictureTitle3.png


+ 0 - 0
html/static/img/pictureTitle4.f2ccc53b.png → src/assets/template/component/pictureTitle4.png


+ 0 - 0
html/static/img/pictureTitle5.cb33d2eb.png → src/assets/template/component/pictureTitle5.png


+ 0 - 0
html/static/img/imgTitleSector.1b0946a5.png → src/assets/template/component/style1imgTitle.png


二進制
src/assets/template/component/style1topLogo.png


+ 0 - 0
html/static/img/style1topbg.de2443c2.png → src/assets/template/component/style1topbg.png


+ 0 - 0
html/static/img/titleStyle1.7967b2ea.png → src/assets/template/component/titleStyle1.png


二進制
src/assets/template/component/titleStyle2.png


二進制
src/assets/template/component/titleStyle3.png


二進制
src/assets/template/component/titleStyle4.png


二進制
src/assets/template/preview.png


+ 0 - 0
html/static/img/bannerSector.b82fa58f.png → src/assets/template/sector/bannerSector.png


+ 0 - 0
html/static/img/commentSector.b580cfee.png → src/assets/template/sector/commentSector.png


+ 0 - 0
html/static/img/footerSector.07d0551c.png → src/assets/template/sector/footerSector.png


+ 0 - 0
html/static/img/headSector.1b2d653f.png → src/assets/template/sector/headSector.png


+ 0 - 0
html/static/img/imgSector.8ac20f6a.png → src/assets/template/sector/imgSector.png


二進制
src/assets/template/sector/imgTitleSector.png


+ 0 - 0
html/static/img/linkSector.8ce40809.png → src/assets/template/sector/linkSector.png


+ 0 - 0
html/static/img/menuSector.3647fd2d.png → src/assets/template/sector/menuSector.png


+ 0 - 0
html/static/img/moreServicesSector.8bc11340.png → src/assets/template/sector/moreServicesSector.png


+ 0 - 0
html/static/img/newsSector.6fef6112.png → src/assets/template/sector/newsSector.png


+ 0 - 0
html/static/img/style1.48175d28.png → src/assets/template/style1.png


+ 0 - 0
html/static/img/style2.9e7f7324.png → src/assets/template/style2.png


+ 0 - 0
html/static/img/style3.a01877d4.png → src/assets/template/style3.png


+ 0 - 0
html/static/img/style4.e084cd61.png → src/assets/template/style4.png


+ 0 - 0
html/static/img/style5.72973140.png → src/assets/template/style5.png


+ 0 - 0
html/static/img/style6.964409a6.png → src/assets/template/style6.png


+ 0 - 0
html/static/img/style7.a8ee7c16.png → src/assets/template/style7.png


+ 0 - 0
html/static/img/style8.b65447cc.png → src/assets/template/style8.png


+ 163 - 0
src/layout/components/template/componentMenu.vue

@@ -0,0 +1,163 @@
+<template>
+  <div class="componentMenuBox" id="componentMenuBox">
+    <div class="componentMenuTitle">
+      <div v-if="type == 'sector'">可选板块:</div>
+      <div v-if="type == 'component'">可选组件:</div>
+    </div>
+    <div v-if="type == 'sector'">
+      <el-scrollbar wrap-class="scrollbar-wrapper">
+        <div class="sectorBox">
+          <div class="sectorItemBox" @click="addModule('headSector',19)">
+            <div class="sectorItem">
+              <img src="@/assets/template/sector/headSector.png" />
+            </div>
+            <div class="sectorItemTitle">页头</div>
+          </div>
+          <div class="sectorItemBox" @click="addModule('menuSector',2)">
+            <div class="sectorItem">
+              <img src="@/assets/template/sector/menuSector.png" />
+            </div>
+            <div class="sectorItemTitle">网站导航</div>
+          </div>
+          <div class="sectorItemBox" @click="addModule('imgTitleSector',6)">
+            <div class="sectorItem">
+              <img src="@/assets/template/sector/imgTitleSector.png" />
+            </div>
+            <div class="sectorItemTitle">图片标题</div>
+          </div>
+          <div class="sectorItemBox">
+            <div class="sectorItem">
+              <img src="@/assets/template/sector/bannerSector.png" @click="addModule('bannerSector',34)"/>
+            </div>
+            <div class="sectorItemTitle">焦点图</div>
+          </div>
+          <div class="sectorItemBox">
+            <div class="sectorItem">
+              <img src="@/assets/template/sector/moreServicesSector.png" @click="addModule('manyPictureSector',41)"/>
+            </div>
+            <div class="sectorItemTitle">多图菜单</div>
+          </div>
+          <div class="sectorItemBox">
+            <div class="sectorItem">
+              <img src="@/assets/template/sector/commentSector.png" @click="addModule('commentSector',40)"/>
+            </div>
+            <div class="sectorItemTitle">文章列表带评论</div>
+          </div>
+          <div class="sectorItemBox">
+            <div class="sectorItem">
+              <img src="@/assets/template/sector/newsSector.png" @click="addModule('listSector',20)"/>
+            </div>
+            <div class="sectorItemTitle">文章列表</div>
+          </div>
+          <div class="sectorItemBox">
+            <div class="sectorItem">
+              <img src="@/assets/template/sector/imgSector.png" />
+            </div>
+            <div class="sectorItemTitle">纯图片组合</div>
+          </div>
+          <div class="sectorItemBox">
+            <div class="sectorItem">
+              <img src="@/assets/template/sector/linkSector.png" />
+            </div>
+            <div class="sectorItemTitle">友情链接</div>
+          </div>
+          <div class="sectorItemBox">
+            <div class="sectorItem">
+              <img src="@/assets/template/sector/footerSector.png" />
+            </div>
+            <div class="sectorItemTitle">页尾板块</div>
+          </div>
+        </div>
+        
+      </el-scrollbar>
+    </div>
+    <!-- <div v-if="type == 'component'" class="componentBox">
+      组件
+    </div> -->
+  </div>
+</template>
+
+<script>
+
+export default {
+  name: 'componentMenu',
+  props: {
+    type: {
+      type: String, //sector component
+      required: true
+    },
+  },
+  data() {
+    return {
+      data: null
+    }
+  },
+  methods: {
+    addModule(type,h){
+      let data = {
+        type: type,
+        h: h
+      }
+      console.log(data);
+      this.$store.commit('template/addModule',data);
+    }
+  }
+}
+</script>
+
+<style scoped lang="less">
+  .componentMenuBox {
+    transition: width 0.28s;
+    width: 290px !important;
+    background: #2F2F2F;
+    height: 100%;
+    position: fixed;
+    font-size: 0px;
+    top: 0;
+    bottom: 0;
+    left: 0;
+    z-index: 1001;
+    overflow: hidden;
+    .sectorBox {
+      height: 100%;
+    }
+    .el-scrollbar {
+      height: calc(100vh - 100px);
+    }
+    .componentMenuTitle {
+      padding: 37px 0 30px 0;
+      color: #fff;
+      font-size: 18px;
+      div {
+        border-left: 3px solid #5570F1;
+        padding-left: 25px;
+      }
+    }
+    .sectorItemBox {
+      box-sizing: border-box;
+      padding: 0 20px 40px 20px;
+      height: 130px;
+      cursor: pointer;
+      .sectorItem {
+        border: 1px solid #333644;
+        padding: 10px;
+        border-radius: 8px;
+        &:hover {
+          background: #333644;
+          transform: scale(1.1);
+          transition: all 0.2s ease-in-out;
+        }
+        img {
+          display: block;
+          width: 100%;
+        }
+      }
+      .sectorItemTitle {
+        color: #fff;
+        font-size: 14px;
+        padding: 10px 0 0 0;
+        text-align: center;
+      }
+    }
+  }
+</style>

+ 104 - 0
src/layout/creatWebsite.vue

@@ -0,0 +1,104 @@
+<template>
+  <div :class="classObj" class="app-wrapper">
+    <div v-if="device==='mobile'&&sidebar.opened" class="drawer-bg" @click="handleClickOutside" />
+    <componentMenu :type="this.$store.state.template.menuType"/>
+    <div :class="{hasTagsView:needTagsView}" class="main-container">
+      <div :class="{'fixed-header':fixedHeader}">
+        <navbar />
+        <breadcrumb id="breadcrumb-container"/>
+      </div>
+      <app-main />
+    </div>
+  </div>
+</template>
+
+<script>
+import RightPanel from '@/components/RightPanel'
+import { AppMain, Navbar, Settings, Sidebar, TagsView } from './components'
+import ResizeMixin from './mixin/ResizeHandler'
+import { mapState } from 'vuex'
+import Breadcrumb from '@/components/Breadcrumb'
+import componentMenu from './components/template/componentMenu.vue'
+
+export default {
+  name: 'Layout',
+  components: {
+    AppMain,
+    Navbar,
+    RightPanel,
+    Settings,
+    Sidebar,
+    TagsView,
+    Breadcrumb,
+    componentMenu
+  },
+  mixins: [ResizeMixin],
+  computed: {
+    ...mapState({
+      sidebar: state => state.app.sidebar,
+      device: state => state.app.device,
+      showSettings: state => state.settings.showSettings,
+      needTagsView: state => state.settings.tagsView,
+      fixedHeader: state => state.settings.fixedHeader
+    }),
+    classObj() {
+      return {
+        hideSidebar: !this.sidebar.opened,
+        openSidebar: this.sidebar.opened,
+        withoutAnimation: this.sidebar.withoutAnimation,
+        mobile: this.device === 'mobile'
+      }
+    }
+  },
+  methods: {
+    handleClickOutside() {
+      this.$store.dispatch('app/closeSideBar', { withoutAnimation: false })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+  @import "~@/styles/mixin.scss";
+  @import "~@/styles/variables.scss";
+  
+
+  .app-wrapper {
+    @include clearfix;
+    position: relative;
+    height: 100%;
+    width: 100%;
+
+    &.mobile.openSidebar {
+      position: fixed;
+      top: 0;
+    }
+  }
+
+  .drawer-bg {
+    background: #000;
+    opacity: 0.3;
+    width: 100%;
+    top: 0;
+    height: 100%;
+    position: absolute;
+    z-index: 999;
+  }
+
+  .fixed-header {
+    position: fixed;
+    top: 0;
+    right: 0;
+    z-index: 9;
+    width: calc(100% - #{$sideBarWidth});
+    transition: width 0.28s;
+  }
+
+  .hideSidebar .fixed-header {
+    width: calc(100% - 54px)
+  }
+
+  .mobile .fixed-header {
+    width: 100%;
+  }
+</style>

+ 1 - 0
src/main.js

@@ -4,6 +4,7 @@ import Cookies from 'js-cookie'
 
 import 'normalize.css/normalize.css' // a modern alternative to CSS resets
 
+// 因为通过 CDN 加载,所以这里不需要直接 import ElementUI 和 ECharts
 import Element from 'element-ui'
 import './styles/element-variables.scss'
 

+ 89 - 294
src/router/index.js

@@ -5,12 +5,14 @@ Vue.use(Router)
 
 /* Layout */
 import Layout from '@/layout'
+import creatWebsite from '@/layout/creatWebsite'
 
 /* Router Modules */
 import componentsRouter from './modules/components'
 import chartsRouter from './modules/charts'
 import tableRouter from './modules/table'
 import nestedRouter from './modules/nested'
+import dangyunlong from './modules/dangyunlong'
 
 /**
  * Note: sub-menu only appear when route children.length >= 1
@@ -39,6 +41,7 @@ import nestedRouter from './modules/nested'
  * all roles can be accessed
  */
 export const constantRoutes = [
+  ...dangyunlong,
   {
     path: '/redirect',
     component: Layout,
@@ -91,246 +94,6 @@ export const constantRoutes = [
   //增加新的路由 站点列表
   //注意必须含有component:Layout项目否则会导致页面找不到模板
   //必须含有children中的path且两个path必须一致
-  {
-    path: '/website',
-    component: Layout,
-    children: [
-      {
-        name: '', //直接就是根目录所以为空
-        path: '',
-        component: () => import('@/views/website/WebsiteList'),
-        meta: {
-          title: '网站管理', // 设置菜单和面包屑显示的标题
-          hidden: true, // 不在侧边菜单显示
-          breadcrumb: true // 强制在面包屑中显示
-        }
-      }
-    ]
-  },
-  {
-    path: '/categoryList',
-    component: Layout,
-    children: [
-      {
-        name: '',
-        path: '',
-        component: () => import('@/views/website/categoryList'),
-        meta: {
-          title: '导航池',
-          hidden: true,
-          breadcrumb: true
-        }
-      }
-    ]
-  },
-  {
-    path: '/websiteColumn',
-    component: Layout,
-    children: [
-      {
-        name: '',
-        path: '',
-        component: () => import('@/views/website/websiteColumn'),
-        meta: {
-          title: '网站导航',
-          hidden: true,
-          breadcrumb: true
-        }
-      }
-    ]
-  },
-  {
-    path: '/editNavigation',
-    component: Layout,
-    children: [
-      {
-        name: '',
-        path: '',
-        component: () => import('@/views/website/editNavigation'),
-        meta: {
-          title: '导航详情',
-          hidden: true,
-          breadcrumb: true
-        }
-      }
-    ]
-  },
-  {
-    path: '/articleList',
-    component: Layout,
-    children: [
-      {
-        name: '',
-        path: '',
-        component: () => import('@/views/news/NewList'),
-        meta: {
-          title: '资讯列表',
-          hidden: true,
-          breadcrumb: true
-        }
-      }
-    ]
-  },
-  {
-    path: '/creatNews',
-    component: Layout,
-    children: [
-      {
-        name: '',
-        path: '',
-        component: () => import('@/views/news/creatNews'),
-        meta: {
-          title: '添加资讯',
-          hidden: true,
-          breadcrumb: true
-        }
-      }
-    ]
-  },
-  {
-    path: '/menuList',
-    component: Layout,
-    children: [
-      {
-        name: '',
-        path: '',
-        component: () => import('@/views/menu/menulist'),
-        meta: {
-          title: '菜单列表',
-          hidden: true,
-          breadcrumb: true
-        }
-      }
-    ]
-  },
-  {
-    path: '/complaintList',
-    component: Layout,
-    children: [
-      {
-        name: '',
-        path: '',
-        component: () => import('@/views/complaint/complaintList'),
-        meta: {
-          title: '投诉举报',
-          hidden: true,
-          breadcrumb: true
-        }
-      }
-    ]
-  },
-  {
-    path: '/roleList',
-    component: Layout,
-    children: [
-      {
-        name: '',
-        path: '',
-        component: () => import('@/views/role/roleList'),
-        meta: {
-          title: '角色管理',
-          hidden: true,
-          breadcrumb: true
-        }
-      }
-    ]
-  },
-  {
-    path: '/userList',
-    component: Layout,
-    children: [
-      {
-        name: '',
-        path: '',
-        component: () => import('@/views/role/userList'),
-        meta: {
-          title: '用户管理',
-          hidden: true,
-          breadcrumb: true
-        }
-      }
-    ]
-  },
-  {
-    path: '/creatUser',
-    component: Layout,
-    children: [
-      {
-        name: '',
-        path: '',
-        component: () => import('@/views/role/creatUser'),
-        meta: {
-          title: '添加用户',
-          hidden: true,
-          breadcrumb: true
-        }
-      }
-    ]
-  },
-  {
-    path: '/department',
-    component: Layout,
-    children: [
-      {
-        name: '',
-        path: '',
-        component: () => import('@/views/menu/department'),
-        meta: {
-          title: '行政职能',
-          hidden: true,
-          breadcrumb: true
-        }
-      }
-    ]
-  },
-  {
-    path: '/hall',
-    component: Layout,
-    children: [
-      {
-        name: '',
-        path: '',
-        component: () => import('@/views/chat/hall'),
-        meta: {
-          title: '聊天',
-          hidden: true,
-          breadcrumb: true
-        }
-      }
-    ]
-  },
-  {
-    path: '/creatWebsite',
-    component: Layout,
-    children: [
-      {
-        name: '',
-        path: '',
-        component: () => import('@/views/website/creatWebsite'),
-        meta: {
-          title: '搭建网站',
-          hidden: true,
-          breadcrumb: true
-        }
-      }
-    ]
-  },
-  {
-    path: '/contacts',
-    component: Layout,
-    children: [
-      {
-        name: '',
-        path: '',
-        component: () => import('@/views/chat/contacts'),
-        meta: {
-          title: '通讯录',
-          hidden: true,
-          breadcrumb: true
-        }
-      }
-    ]
-  },
   {
     path: '/webCrawler',
     component: Layout,
@@ -347,22 +110,6 @@ export const constantRoutes = [
       }
     ]
   },
-  {
-    path: '/topic',
-    component: Layout,
-    children: [
-      {
-        name: '',
-        path: '',
-        component: () => import('@/views/chat/topic'),
-        meta: {
-          title: '课题',
-          hidden: true,
-          breadcrumb: true
-        }
-      }
-    ]
-  },
   {
     path: '/webRule',
     component: Layout,
@@ -379,22 +126,6 @@ export const constantRoutes = [
       }
     ]
   },
-  {
-    path: '/creatTopic',
-    component: Layout,
-    children: [
-      {
-        name: '',
-        path: '',
-        component: () => import('@/views/chat/creatTopic'),
-        meta: {
-          title: '编辑课题',
-          hidden: true,
-          breadcrumb: true
-        }
-      }
-    ]
-  },
   {
     path: '/webCrawlerList',
     component: Layout,
@@ -408,7 +139,7 @@ export const constantRoutes = [
           hidden: true,
           breadcrumb: true
         }
-      }
+      },
     ]
   },
   {
@@ -459,8 +190,6 @@ export const constantRoutes = [
       }
     ]
   },
-<<<<<<< Updated upstream
-=======
   {
     path: '/blogroll',
     component: Layout,
@@ -493,6 +222,7 @@ export const constantRoutes = [
       }
     ]
   },
+
   {
     path: '/tabbar',
     component: Layout,
@@ -574,7 +304,89 @@ export const constantRoutes = [
     ]
   },
 
->>>>>>> Stashed changes
+
+  // {
+  //   path: '/tabbar',
+  //   component: Layout,
+  //   children: [
+  //     {
+  //       name: '',
+  //       path: '',
+  //       component: () => import('@/views/tabbar/tabbar.vue'),
+  //       meta: {
+  //         title: '底部导航栏',
+  //         hidden: true,
+  //         breadcrumb: true
+  //       }
+  //     }
+  //   ]
+  // },
+  // {
+  //   path: '/tabbarDetail',
+  //   component: Layout,
+  //   children: [
+  //     {
+  //       name: '',
+  //       path: '',
+  //       component: () => import('@/views/tabbar/tabbarDetail.vue'),
+  //       meta: {
+  //         title: '导航详情',
+  //         hidden: true,
+  //         breadcrumb: true
+  //       }
+  //     }
+  //   ]
+  // },
+  // {
+  //   path: '/style',
+  //   component: Layout,
+  //   children: [
+  //     {
+  //       name: '',
+  //       path: '',
+  //       component: () => import('@/views/componentGallery/style.vue'),
+  //       meta: {
+  //         title: '风格',
+  //         hidden: true,
+  //         breadcrumb: true
+  //       }
+  //     }
+  //   ]
+  // },
+  // {
+  //   path: '/plate',
+  //   component: Layout,
+  //   children: [
+  //     {
+  //       name: '',
+  //       path: '',
+  //       component: () => import('@/views/componentGallery/plate.vue'),
+  //       meta: {
+  //         title: '版块',
+  //         hidden: true,
+  //         breadcrumb: true
+  //       }
+  //     }
+  //   ]
+  // },
+  // {
+  //   path: '/module',
+  //   component: Layout,
+  //   children: [
+  //     {
+  //       name: '',
+  //       path: '',
+  //       component: () => import('@/views/componentGallery/module.vue'),
+  //       meta: {
+  //         title: '组件',
+  //         hidden: true,
+  //         breadcrumb: true
+  //       }
+  //     }
+  //   ]
+  // },
+
+
   // {
   //   path: '/documentation',
   //   component: Layout,
@@ -600,24 +412,7 @@ export const constantRoutes = [
   //     }
   //   ]
   // },
-  {
-    path: '/profile',
-    component: Layout,
-    redirect: '/profile/index',
-    hidden: true,
-    children: [
-      {
-        path: 'index',
-        component: () => import('@/views/profile/index'),
-        name: 'Profile',
-        meta: {
-          title: '个人中心',
-          hidden: true,
-          breadcrumb: true
-        }
-      }
-    ]
-  }
+
 ]
 
 /**

+ 345 - 0
src/router/modules/dangyunlong.js

@@ -0,0 +1,345 @@
+/** 引入模板 **/
+import Layout from '@/layout'
+import creatWebsite from '@/layout/creatWebsite'
+
+const dangyunlongRouter= [
+  {
+    path: '/website',
+    component: Layout,
+    children: [
+      {
+        name: '', //直接就是根目录所以为空
+        path: '',
+        component: () => import('@/views/website/WebsiteList'),
+        meta: {
+          title: '网站管理', // 设置菜单和面包屑显示的标题
+          hidden: true, // 不在侧边菜单显示
+          breadcrumb: true // 强制在面包屑中显示
+        }
+      }
+    ]
+  },
+  {
+    path: '/categoryList',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/website/categoryList'),
+        meta: {
+          title: '导航池',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/websiteColumn',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/website/websiteColumn'),
+        meta: {
+          title: '网站导航',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/editNavigation',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/website/editNavigation'),
+        meta: {
+          title: '导航详情',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/articleList',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/news/NewList'),
+        meta: {
+          title: '资讯列表',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/creatNews',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/news/creatNews'),
+        meta: {
+          title: '添加资讯',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/menuList',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/menu/menulist'),
+        meta: {
+          title: '菜单列表',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/complaintList',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/complaint/complaintList'),
+        meta: {
+          title: '投诉举报',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/roleList',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/role/roleList'),
+        meta: {
+          title: '角色管理',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/userList',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/role/userList'),
+        meta: {
+          title: '用户管理',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/creatUser',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/role/creatUser'),
+        meta: {
+          title: '添加用户',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/department',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/menu/department'),
+        meta: {
+          title: '行政职能',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/hall',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/chat/hall'),
+        meta: {
+          title: '聊天',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/contacts',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/chat/contacts'),
+        meta: {
+          title: '通讯录',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/topic',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/chat/topic'),
+        meta: {
+          title: '课题',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/creatTopic',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/chat/creatTopic'),
+        meta: {
+          title: '编辑课题',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/templateCreat',
+    component: creatWebsite,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/template/templateCreat'),
+        meta: {
+          title: '构建网站模板',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/templateBase',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/template/templateBase'),
+        meta: {
+          title: '填写模板基本信息',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/profile',
+    component: Layout,
+    redirect: '/profile/index',
+    hidden: true,
+    children: [
+      {
+        path: 'index',
+        component: () => import('@/views/profile/index'),
+        name: 'Profile',
+        meta: {
+          title: '个人中心',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/templateStyle',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/template/templateStyle'),
+        meta: {
+          title: '选择模板风格',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/templateList',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/template/templateList'),
+        meta: {
+          title: '网站模板',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+]
+export default dangyunlongRouter

+ 2 - 1
src/store/getters.js

@@ -11,6 +11,7 @@ const getters = {
   introduction: state => state.user.introduction,
   roles: state => state.user.roles,
   permission_routes: state => state.permission.routes,
-  errorLogs: state => state.errorLog.logs
+  errorLogs: state => state.errorLog.logs,
+  SiteId: state => state.template.editWebsiteId
 }
 export default getters

+ 29 - 1
src/store/modules/chat.js

@@ -1,7 +1,8 @@
 import {getTalkSessionList,addFriend,getFriendsList,delFriend,updateFriend,getFriendsApplyList,
   applyFriend,isFriend,getConversation,getChatRecords,addGroup,getGroupMembers,searchFriend,getFriendInfo,
   getGroupList,getGroupInfo,joinGroup,getGroupChatRecords,delGroup,updateGroup,
-  getTopicsList,addTopic,getTopicInfo,updateTopic,delTopic,addReply,getTopicReply
+  getTopicsList,addTopic,getTopicInfo,updateTopic,delTopic,addReply,getTopicReply,topicType,
+  topicStatus,updateGroupMembers
 } from '@/api/chat'
 
 const state = {
@@ -214,6 +215,15 @@ const actions = {
       })
     })
   },
+  updateGroupMembers({commit},data) {
+    return new Promise((resolve, reject) => {
+      updateGroupMembers(data).then(response => {
+        resolve(response)
+      }).catch(error => {
+        reject(error)
+      })
+    })
+  },
   //5.群聊 end ------------------------------------->
 
   //6.商圈 start ------------------------------------->
@@ -279,6 +289,24 @@ const actions = {
         reject(error)
       })
     })
+  },
+  topicType({commit},data) {
+    return new Promise((resolve, reject) => {
+      topicType(data).then(response => {
+        resolve(response)
+      }).catch(error => {
+        reject(error)
+      })
+    })
+  },
+  topicStatus({commit},data) {
+    return new Promise((resolve, reject) => {
+      topicStatus(data).then(response => {
+        resolve(response)
+      }).catch(error => {
+        reject(error)
+      })
+    })
   }
   //6.商圈 end ------------------------------------->
 }

+ 11 - 1
src/store/modules/pool.js

@@ -3,7 +3,7 @@ getcityList,uploadFile,getTemplate,addWebsite,getWebsiteInfo,
 updateWebsite,getDepartment,getCategoryList,delCategory,
 getCategoryInfo,categoryList,addCategory,updateCategory,
 getNavWebList,addWebsiteCategory,getWebsiteCategoryList,
-getAdminWebsiteCategory,upWebsiteCategory,
+getAdminWebsiteCategory,upWebsiteCategory,delWebsiteCategory,
 getWebsiteAllCategory,getWebsiteCategoryOnes,upWebsiteCategoryones,
 checkWebsiteUrl,checkWebsiteName} from '@/api/pool'
 
@@ -253,6 +253,16 @@ const actions = {
       })
     })
   },
+  //删除网站导航
+  delWebsiteCategory({commit},data) {
+    return new Promise((resolve, reject) => {
+      delWebsiteCategory(data).then(response => {
+        resolve(response)
+      }).catch(error => {
+        reject(error)
+      })
+    })
+  },
   //网站导航管理 end ---------------------------------------->
 
   //4.关联导航池 start ---------------------------------------->

+ 174 - 0
src/store/modules/template.js

@@ -0,0 +1,174 @@
+import {getSiteInfo,getSiteCategory,selectWebsiteDepartment,selectWebsiteArea,getWebsiteArticlesList,
+  selectWebsiteArticleInfo} from '@/api/cms'
+
+const state = {
+  editWebsiteId: "",//创建网站的id
+  stepStatus: true,//true显示步骤 false不显示
+  menuType: "sector", //sector板块 component组件
+  layout: [
+    // i = id 
+    // w = 最大宽度是12
+    // { i: "0", x: 0, y: 0, w: 12, h: 2, content:""},
+    // { i: "1", x: 0, y: 0, w: 12, h: 2, content:""},
+  ],
+  webSiteInfo:"",//网站信息
+  webSiteMenu:"",//网站包含的导航池
+  area:{//地区
+    economize:[],//省区
+    market:[],//市区
+    county:[]//县区
+  },
+  departmentList:"",//职能部门
+}
+
+const mutations = {
+  //0.全局配置 start------------------------------------------------------------>
+  //设置创建网站的id
+  setEditWebsiteId(state,id){
+    state.editWebsiteId = id;
+  },
+  //展示步骤
+  showStepStatus(state){
+    state.stepStatus = true;
+  },
+  //隐藏步骤
+  hiddenStepStatus(state){
+    state.stepStatus = false;
+  },
+  //0.全局配置 start------------------------------------------------------------>
+  //1.配置模块 start------------------------------------------------------------>
+  //添加模块
+  addModule(state,data) {
+    //data.type 组件名称 data.h 模块高度 
+    // 计算当前布局的最大 y 值
+    const maxY = Math.max(...state.layout.map(item => item.y), 0);
+    state.layout.push({
+      i: state.layout.length, 
+      x: 0, 
+      y: maxY + 1, 
+      w: 12, 
+      h: data.h, 
+      type: data.type,
+      content:""
+    });
+  },
+  //删除模块
+  deleteModule(item) {
+    //找到对应的模块删除掉
+    for(let i = 0; i < state.layout.length; i++) {
+      if(state.layout[i].i == item.i) {
+        state.layout.splice(i, 1);
+      }
+    }
+  },
+  //1.配置模块 end------------------------------------------------------------>
+  //2.获取站点信息 start------------------------------------------------------------>
+  //获取站点详情
+  setWebsiteInfo(state,data){
+    state.webSiteInfo = data;
+  },
+  //获取站点导航池
+  setGetSiteCategory(state,data) {
+    state.webSiteMenu = data;
+  },
+  //设置地区
+  setArea(state,data){
+    //都没有的时候返回的是省
+    if(data.province==undefined){
+      state.area.economize = data;
+    }
+    //没有region的时候返回的是市
+    if(data.province!=undefined&&data.city!=undefined&&data.region==undefined){
+      state.area.market = data.city;
+    }
+    //有region的时候返回的是县
+    if(data.province!=undefined&&data.city!=undefined&&data.region!=undefined){
+      state.area.county = data.region;
+    }
+  },
+  //设置职能部门
+  setDepartmentList(state,data){
+    state.departmentList = data;
+  },
+  //修改模块高度
+  setModuleHeight(state,data){
+    console.log(data);
+    state.layout[data.i].h = data.h;
+    console.log(state.layout[data.i]);
+  },
+  //2.获取站点信息 end------------------------------------------------------------>
+}
+
+const actions = {
+  //获取网站基本信息
+  getSiteInfo({commit},data){
+    return new Promise((resolve, reject) => {
+      getSiteInfo(data).then(response => {
+        commit('setWebsiteInfo', response.data);
+        resolve(response)
+      }).catch(error => {
+        reject(error)
+      })
+    })
+  },
+  //获取网站导航池
+  getSiteCategory({commit},data){
+    return new Promise((resolve, reject) => {
+      getSiteCategory(data).then(response => {
+        commit('setGetSiteCategory', response.data);
+        resolve(response)
+      }).catch(error => {
+        reject(error)
+      })
+    })
+  },
+  //设置行政区划
+  selectWebsiteArea({commit},data){
+    return new Promise((resolve, reject) => {
+      selectWebsiteArea(data).then(response => {
+        commit('setArea', response.data);
+        resolve(response)
+      }).catch(error => {
+        reject(error)
+      })
+    })
+  },
+  //设置职能部门
+  selectWebsiteDepartment({commit},data){
+    return new Promise((resolve, reject) => {
+      selectWebsiteDepartment(data).then(response => {
+        commit('setDepartmentList', response.data);
+        resolve(response)
+      }).catch(error => {
+        reject(error)
+      })
+    })
+  },
+  //获取新闻列表
+  getWebsiteArticlesList({commit},data){
+    return new Promise((resolve, reject) => {
+      getWebsiteArticlesList(data).then(response => {
+        resolve(response)
+      }).catch(error => {
+        reject(error)
+      })
+    })
+  },
+  //获取新闻详情
+  selectWebsiteArticleInfo({commit},data){
+    return new Promise((resolve, reject) => {
+      selectWebsiteArticleInfo(data).then(response => {
+        resolve(response)
+      }).catch(error => {
+        reject(error)
+      })
+    })
+  }
+}
+
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions
+}

+ 11 - 1
src/store/modules/userMember.js

@@ -1,5 +1,5 @@
 import {getUserList,getUserInfo,createUser,verifyUserInfo,getUser,
-  upUserStatus,updateUser
+  upUserStatus,updateUser,resetPassword
 } from '@/api/userMember'
 
 const state = {
@@ -81,6 +81,16 @@ const actions = {
         reject(error)
       })
     })
+  },
+  //修改用户密码
+  resetPassword({commit},data) {
+    return new Promise((resolve, reject) => {
+      resetPassword(data).then(response => {
+        resolve(response)
+      }).catch(error => {
+        reject(error)
+      })
+    })
   }
   //用户管理管理 end ---------------------------------------->
 }

+ 15 - 1
src/styles/global.less

@@ -71,7 +71,7 @@
   align-items: center;
   justify-content: center;
 }
-.listDeleteBtn,.listEditBtn,.listMainBtn {
+.listDeleteBtn,.listEditBtn,.listMainBtn,.listSaveBtn {
   width:70px;
   height:28px;
   line-height:28px;
@@ -104,6 +104,13 @@
 .listMainBtn:hover {
   background:#CAD9CB;
 }
+.listSaveBtn{
+  color:#fff;
+  background:#2F2F2F;
+}
+.listSaveBtn:hover {
+  background:#646464;
+}
 
 //表单样式微调
 //1.网站列表
@@ -267,6 +274,8 @@
   }
 }
 
+
+
 /*页面布局 end------------------------------------------------------------>*/
 
 /*quill汉化 start------------------------------------------------------------>*/
@@ -344,3 +353,8 @@
 /*quill汉化 end------------------------------------------------------------>*/
 
 
+/*自助建站左侧菜单 el-scrollbar start------------------------------------------------------------>*/
+.el-scrollbar__wrap {
+  overflow-x: hidden !important; /* 强制隐藏横向滚动条 */
+}
+/*自助建站左侧菜单 el-scrollbar end------------------------------------------------------------>*/

+ 3 - 1
src/utils/baseUrl.js

@@ -5,7 +5,9 @@ const URL = {
   //baseUrl:'http://192.168.1.115:9501',//冯蕊的本地环境
   //baseUrl: 'http://192.168.1.127:9501',//刘剑的本地环境
   //WebsocketUrl: 'ws://192.168.1.201:9506',//刘佳伟websocket地址
-  WebsocketUrl: 'ws://192.168.1.127:9506'//刘剑websocket地址
+  //WebsocketUrl: 'ws://192.168.1.127:9506'//刘剑websocket地址
+  //WebsocketUrl: 'ws://admin.bjzxtw.org.cn:9506'//正式环境websocket地址
+  WebsocketUrl: 'ws://183.131.25.186:9506'//测试服务器websocket地址
 }
 
 export default URL;

+ 5 - 6
src/utils/request.js

@@ -7,12 +7,8 @@ import URL from '@/utils/baseUrl';
 // create an axios instance
 const service = axios.create({
   //千万不能在这里使用绝对地址,这会导致webpack的devserve不生效
-
-  //baseURL: URL.testUrl, //刘佳伟的电脑
-  //baseURL: URL.liuUrl, //刘剑的电脑
-  baseURL: URL.baseUrl, //测试服务器
-  //baseURL: URL.servUrl, //正式服务器
-  //baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
+  //baseURL: URL.baseUrl,
+  baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
   //withCredentials: true, // send cookies when cross-domain requests
   timeout: 50000 // request timeout
 })
@@ -27,6 +23,9 @@ service.interceptors.request.use(
       // please modify it according to the actual situation
       config.headers['token'] = getToken()
     }
+    if (store.getters.SiteId) {
+      config.headers['SiteId'] = store.getters.SiteId
+    }
     return config
   },
   error => {

+ 118 - 0
src/views/advertise/adPlaceDetail.vue

@@ -0,0 +1,118 @@
+<template>
+    <!-- 广告位详情 -->
+    <div>
+        <!--表格内容 start------------------------------------------------------------>
+        <div class="layerBox">
+            <tableTitle :name="tableDivTitle" />
+            <el-table class="my-table" :data="tableData" style="width: 100%">
+                <el-table-column fixed prop="id" label="编号" width="90">
+                </el-table-column>
+                <el-table-column prop="website_name" label="网站名称" width="">
+                </el-table-column>
+                <el-table-column prop="name" label="广告名称" width="">
+                </el-table-column>
+                <!-- <el-table-column prop="image_src" label="广告图" width="">
+                </el-table-column> -->
+                <el-table-column label="广告图" width="">
+                    <template slot-scope="scope">
+                        <img :src="scope.row.image_src" alt="" class="uploadImage">
+                    </template>
+                </el-table-column>
+                <!-- <el-table-column prop="status" label="尺寸" width="">
+                </el-table-column> -->
+                <el-table-column prop="image_url" label="广告链接" width="">
+                </el-table-column>
+                <el-table-column prop="fromtime" label="开始时间" width="">
+                </el-table-column>
+                <el-table-column prop="totime" label="结束时间" width="">
+                </el-table-column>
+                <el-table-column prop="day" label="剩余时间 (天)" width="">
+                </el-table-column>
+            </el-table>
+        </div>
+        <!--分页 start------------------------------------------------------------>
+        <div class="alignBox">
+            <el-row>
+                <el-col :span="24">
+                    <el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
+                        :current-page="page" :page-size="pageSize" layout="total, prev, pager, next, jumper"
+                        :total="total">
+                    </el-pagination>
+                </el-col>
+            </el-row>
+        </div>
+        <!--分页 end------------------------------------------------------------>
+        <!--表格内容 end------------------------------------------------------------>
+    </div>
+
+</template>
+
+<script>
+//表格标题
+import tableTitle from './components/tableTitle'
+
+//引入公用样式
+import '@/styles/global.less';
+import { getAdList } from '@/api/advertise'
+export default {
+    components: {
+        tableTitle,//表格标题
+    },
+    data() {
+        return {
+            tableDivTitle: "广告位详情",  //列表标题
+
+            tableData: [],//表格数据
+
+            //活动id
+            activeid: "",
+
+            // 分页相关
+            page: 1,
+            pageSize: 10,
+            total: 0,
+
+        }
+    },
+
+    methods: {
+        //1.1 开始请求列表信息方法
+        getData() {
+            getAdList({
+                pid: this.activeid,
+                page: this.page,
+                pageSize: this.pageSize
+            }).then(data => {
+                console.log(data);
+                this.tableData = data.data.rows
+            })
+
+        },
+        //1.2 列表内容分页
+        //直接跳转
+        handleSizeChange(val) {
+            this.page = val;
+            this.getData();
+        },
+        //1.3 点击分页
+        handleCurrentChange(val) {
+            this.page = val;
+            this.getData();
+        },
+    },
+    mounted() {
+        this.activeid = this.$route.query.id
+        console.log(this.activeid);
+
+        this.getData()
+
+
+    },
+}
+</script>
+
+<style scoped lang="less">
+.layerBox {
+    padding: 30px 20px;
+}
+</style>

+ 392 - 356
src/views/advertise/adPlaceList.vue

@@ -1,44 +1,28 @@
 <template>
-    <!-- 广告列表 -->
+    <!-- 广告位管理 -->
     <div>
-        <!-- 提示信息 -->
-        <div class="tips">
-            <el-row>
-                <el-col :span="12">
-                    <i class="tipsIcon"></i>
-                    <span class="tipsText">7个工作日内,若运营没有操作用户的申请,则用户申请的时间、信息等将会释放。</span>
-                </el-col>
-            </el-row>
-        </div>
         <!-- 头部搜索框部分 -->
         <div class="title">
             <el-row>
                 <el-col :span="6" class="left">
                     <div class="searchBox">
-                        <div class="searchTitle">工单编号</div>
-                        <el-input class="input" v-model="order_code" placeholder="请输入工单编号"></el-input>
-                    </div>
-                </el-col>
-                <el-col :span="6" class="left">
-                    <div class="searchBox">
-                        <div class="searchTitle">审核状态</div>
-                        <el-select v-model="status" placeholder="请选择审核状态">
-                            <el-option v-for="item in order" :key="item.value" :label="item.label" :value="item.value">
+                        <div class="searchTitle">网站名称</div>
+                        <el-select v-model="webSiteName_id" :multiple="false" :multiple-limit="1" filterable remote
+                            reserve-keyword placeholder="请输入网站名称" :remote-method="getWebNavList"
+                            :loading="webSiteLoading" @change="selectWebSite">
+                            <el-option v-for="item in webSiteList" :key="item.value" :label="item.label"
+                                :value="item.value">
                             </el-option>
                         </el-select>
                     </div>
                 </el-col>
                 <el-col :span="6" class="left">
                     <div class="searchBox">
-                        <div class="searchTitle">广告状态</div>
-                        <el-select v-model="ad_status" placeholder="请选择广告状态">
-                            <el-option v-for="item in order_ad" :key="item.value" :label="item.label"
-                                :value="item.value">
-                            </el-option>
-                        </el-select>
+                        <div class="searchTitle">广告位名称</div>
+                        <el-input v-model="adPlaceName" class="input" placeholder="请输入广告位名称"></el-input>
                     </div>
                 </el-col>
-                <el-col :span="6" class="right">
+                <el-col :span="8" class="right">
                     <div class="btnList">
                         <button class="search" @click="goSearch">搜索</button>
                         <button class="reset" @click="goReset">重置</button>
@@ -49,36 +33,35 @@
         <!--表格内容 start------------------------------------------------------------>
         <div class="layerBox">
             <tableTitle :name="tableDivTitle" />
+            <button class="btn" @click="addWebsite">添加广告位</button>
             <el-row>
                 <template>
-                    <el-table class="my-table" :data="tableData" style="width: 100%">
+                    <el-table class="my-table" v-loading="loading" :data="tableData" style="width: 100%">
                         <el-table-column fixed prop="id" label="编号" width="90">
                         </el-table-column>
-                        <el-table-column prop="order_num" label="工单编号" width="120">
-                        </el-table-column>
-                        <el-table-column prop="user_name" label="广告名称" width="255">
+                        <el-table-column prop="website_name" label="网站名称" width="160">
                         </el-table-column>
-                        <el-table-column prop="status" label="审核状态" width="90" algin="center">
+                        <el-table-column prop="name" label="广告位名称" width="220">
                         </el-table-column>
-                        <el-table-column prop="ad_status" label="广告状态" width="90">
+                        <el-table-column prop="type_name" label="广告类型" width="110">
                         </el-table-column>
-                        <el-table-column prop="sttime" label="开始时间" width="120">
+                        <el-table-column prop="size" label="宽/高 (PX)" width="120">
                         </el-table-column>
-                        <el-table-column prop="edtime" label="结束时间" width="120">
+                        <el-table-column prop="price" label="价格 (天)" width="110">
                         </el-table-column>
-                        <el-table-column prop="cttime" label="创建时间" width="">
+                        <el-table-column prop="created_at" label="创建时间" width="190">
                         </el-table-column>
-                        <el-table-column prop="admin_user_name" label="操作人" width="100">
+                        <el-table-column prop="updated_at" label="修改时间" width="190">
                         </el-table-column>
-                        <el-table-column fixed="right" label="操作" width="330">
+                        <el-table-column fixed="right" label="操作" width="300">
                             <template slot-scope="scope">
                                 <div class="listBtnBox">
                                     <div class="listDeleteBtn" @click="deleteRow(scope.row.id)"><i
                                             class="el-icon-delete"></i>删除</div>
                                     <div class="listEditBtn" @click="goEdit(scope.row.id, scope.row)"><i
                                             class="el-icon-edit-outline"></i>编辑</div>
-                                    <div class="listReviewBtn" @click="goReview(scope.row.id, scope.row)"><i
-                                            class="review"></i>审核</div>
+                                    <div class="listLookBtn" @click="goLook(scope.row.id)"><i
+                                            class="el-icon-view"></i>查看</div>
                                 </div>
                             </template>
                         </el-table-column>
@@ -101,96 +84,82 @@
         <!--表格内容 end------------------------------------------------------------>
 
         <!-- 弹出框 编辑 start----------------------------------------------------------->
-        <el-dialog :title="dialogName" :visible.sync="dialogTableVisible" width="56%" top="8vh">
+        <el-dialog :title="dialogName" :visible.sync="dialogTableVisible" width="50%" top="8vh"
+            :close-on-click-modal="false">
             <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
                 <div class="dialogText">
-                    <el-form-item label="广告名称:" prop="">
-                        <el-input v-model="ruleForm.name" disabled placeholder="请输入网站名称"></el-input>
+                    <el-form-item label="网站名称:" prop="webName">
+                        <el-select v-model="ruleForm.webName" :multiple="false" :multiple-limit="1" filterable remote
+                            reserve-keyword placeholder="请输入网站名称" :remote-method="getWebNavList"
+                            :loading="webSiteLoading" @change="detectionWebSite">
+                            <el-option v-for="item in webSiteList" :key="item.value" :label="item.label"
+                                :value="item.value">
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item label="广告位名称:" prop="adName">
+                        <el-input v-model="ruleForm.adName" placeholder="请输入广告位名称"></el-input>
                     </el-form-item>
-                    <el-form-item label="广告网址:" prop="">
-                        <el-input v-model="ruleForm.name" disabled placeholder="请输入网站名称"></el-input>
+                    <el-form-item label="广告位介绍:" prop="adDesc">
+                        <el-input v-model="ruleForm.adDesc" type="textarea" :rows="2" placeholder="请输入广告位介绍"
+                            resize="none">
+                        </el-input>
                     </el-form-item>
-                    <el-form-item label="广告图:" prop="">
-                        <div class="adImage">
-                            <img src="../../assets/advertise/404.png" alt="">
+                    <el-form-item label="广告示例图:" prop="adPhoto" :label-width="formLabelWidth"
+                        :class="['custom-form-item']" class="custom-align-right">
+                        <div class="uploaderBox">
+                            <!--图片上传组件 start ------------------------------------------------------------>
+                            <div class="avatar-upload-container" @mouseenter="hovering = true"
+                                @mouseleave="hovering = false">
+                                <!-- 上传组件 -->
+                                <el-upload class="avatar-uploader" action="#" :show-file-list="false"
+                                    :before-upload="beforeAvatarUpload">
+                                    <!-- 预览图片 -->
+                                    <img v-if="logoUrl" :src="logoUrl" class="avatar">
+                                    <div v-else class="chooseImgDiv">
+                                        <div>
+                                            <img src="@/assets/public/upload/noImage.png">
+                                            <div>选择图片</div>
+                                        </div>
+                                    </div>
+                                    <input type="hidden" name="logo" v-model="ruleForm.adPhoto">
+                                </el-upload>
+                                <!-- 删除按钮,当鼠标悬浮时显示 -->
+                                <div v-if="hovering && logoUrl" class="delete-button" @click="handleDelete">
+                                    <i class="el-icon-delete"></i>
+                                </div>
+                            </div>
+                            <!--图片上传组件 end ------------------------------------------------------------>
                         </div>
                     </el-form-item>
-                    <el-form-item label="持续时间:" prop="">
-                        <el-date-picker v-model="ruleForm.startTime" type="datetime" disabled placeholder="选择日期时间">
-                        </el-date-picker> 至
-                        <el-date-picker v-model="ruleForm.endTime" type="datetime" disabled placeholder="选择日期时间">
-                        </el-date-picker>
+                    <el-form-item label="广告类型:" prop="adType">
+                        <el-radio v-model="ruleForm.adType" label='2'>图片</el-radio>
                     </el-form-item>
-                    <el-form-item label="广告尺寸:" prop="">
-                        <el-radio v-model="ruleForm.radio" label="1">1200x90px</el-radio>
-                        <el-radio v-model="ruleForm.radio" label="2">420x560px</el-radio>
+                    <el-form-item label="广告位大小:" prop="adSize">
+                        <el-select v-model="ruleForm.adSize" placeholder="请选择广告位大小" @change="change">
+                            <el-option v-for="item in options" :key="item.id" :label="item.size"
+                                :value="item.id" >
+                            </el-option>
+                        </el-select>
                     </el-form-item>
-
                     <el-form-item label="价格:" prop="price">
-                        <div class="price">
-                            <el-input v-model="ruleForm.price" placeholder="请输入价格"></el-input> 元 x
-                            <el-input v-model="ruleForm.days" disabled placeholder="请输入天数"></el-input> 天 x
-                            <el-input v-model="ruleForm.num" disabled placeholder="请输入个数"></el-input> 个
-                        </div>
+                        <el-input v-model="ruleForm.price" placeholder="请输入价格"></el-input>
                     </el-form-item>
-                    <el-form-item label="广告位置:" prop="">
-                        <span class="example" @click="goGraph">查看示例图</span>
-                        <div>
-                            <el-button disabled v-for="item in 12" class="el_btnList">中农兴业网 一号广告位</el-button>
-                        </div>
+                    <el-form-item label="状态:" prop="status">
+                        <el-radio v-model="ruleForm.status" label="1">通过</el-radio>
+                        <el-radio v-model="ruleForm.status" label="2">下架</el-radio>
                     </el-form-item>
                 </div>
                 <div class="dialogBtn">
-                    <button class="cancel" @click="cancelForm">取消</button>
-                    <button class="submit" @click="submitForm">提交</button>
+                    <!-- <button class="cancel" @click="cancelForm">取消</button>
+                    <button class="submit" @click="submitForm">提交</button> -->
+                    <el-button type="info" @click="cancelForm">取消</el-button>
+                    <el-button type="primary" @click="submitForm">提交</el-button>
                 </div>
             </el-form>
         </el-dialog>
         <!-- 弹出框 编辑 end----------------------------------------------------------->
-
-        <!-- 弹出框 广告位示例图 start----------------------------------------------------------->
-        <el-dialog title="审核状态" :visible.sync="dialogVisible" width="50%" top="25vh">
-            <ul class="graph">
-                <li>
-                    <h3>首页:</h3>
-                    <img src="../../assets/advertise/guanggaowei2.png" alt="">
-                </li>
-                <li>
-                    <h3>列表页:</h3>
-                    <img src="../../assets/advertise/guanggaowei1.png" alt="">
-                </li>
-            </ul>
-            <div slot="footer" class="dialog-footer">
-                <el-button @click="dialogVisible = false">取 消</el-button>
-                <el-button type="primary" @click="dialogVisible = false">确 定</el-button>
-            </div>
-        </el-dialog>
-        <!-- 弹出框 广告位示例图 end----------------------------------------------------------->
-
-        <!-- 弹出框 审核 start----------------------------------------------------------->
-        <el-dialog title="审核状态" :visible.sync="dialogFormVisible" width="35%" top="25vh">
-            <el-form ref="form" :model="form" label-width="80px">
-                <div class="radioGroup">
-                    <el-radio-group v-model="status_radio">
-                        <el-radio :label="3">通过</el-radio>
-                        <el-radio :label="6">驳回</el-radio>
-                    </el-radio-group>
-                    <el-form-item v-show="this.status_radio == 6" label="驳回原因:" :label-width="formLabelWidth"
-                        prop="name">
-                        <el-input v-model="textarea" type="textarea" resize="none" :rows="3" placeholder="请输入内容">
-                        </el-input>
-                    </el-form-item>
-                </div>
-
-            </el-form>
-            <div slot="footer" class="dialog-footer">
-                <el-button @click="dialogFormVisible = false">取 消</el-button>
-                <el-button type="primary" @click="subimtStatus">确 定</el-button>
-            </div>
-        </el-dialog>
-        <!-- 弹出框 审核 end----------------------------------------------------------->
     </div>
-
 </template>
 
 <script>
@@ -199,76 +168,36 @@ import tableTitle from './components/tableTitle.vue';
 
 //引入公用样式
 import '@/styles/global.less';
-import { getStatus, getOrderListAdmin, getOrderDetailAdmin, applyOrderStatusAdmin, editOrderAdmin, rejectOrderAdmin, endOrderAdmin, delOrderAdmin } from '@/api/advertise'
+import { createAdPlace, getAdPlaceList, delAdPlace, updateAdPlace, getAdList, getAdPlaceInfo,getSize } from '@/api/advertise'
 export default {
     components: {
         tableTitle,//表格标题-
     },
     data() {
+        const validateEmpty = (rule, value, callback) => {
+            if (value.length == 0) {
+                callback(new Error('该项不能为空!'))
+            } else {
+                callback()
+            }
+        }
         return {
             tableDivTitle: "广告列表",  //列表标题
             dialogTableVisible: false,      //编辑弹框
             dialogName: '编辑', //编辑弹窗名称
-            dialogFormVisible: false,     //审核弹框
-            dialogVisible: false,  //示例图弹窗
+            loading:true, //加载中
 
-            form: {},  //审核状态的ref属性名称
+            tableData: [],//表格数据
 
+            // 可以输入的搜索框相关
+            webSiteList: [],//获取关联网站列表
+            webSiteLoading: false,
 
-            tableData: [],//表格数据
+            //3.4 上传logo图片
+            logoUrl: '',
+            hovering: false, // 鼠标悬浮状态 悬浮时显示删除
 
-            // 搜索框相关
-            order_code: '', //工单编号 
-            status: '',//审核状态
-            ad_status: '',//广告状态
-            order: [ //审核状态数据
-                {
-                    value: 1,
-                    label: '已通过'
-                },
-                {
-                    value: 2,
-                    label: '已驳回'
-                },
-                {
-                    value: 5,
-                    label: '待审核'
-                },
-            ],
-            order_ad: [ //广告状态数据
-                {
-                    value: 1,
-                    label: '待投放'
-                },
-                {
-                    value: 2,
-                    label: '已驳回'
-                },
-                {
-                    value: 3,
-                    label: '已撤回'
-                },
-                {
-                    value: 4,
-                    label: '已修改'
-                },
-                {
-                    value: 5,
-                    label: '已过期'
-                },
-                {
-                    value: 6,
-                    label: '待审核'
-                },
-                {
-                    value: 7,
-                    label: '已结束'
-                },
-                {
-                    value: 8,
-                    label: '投放中'
-                }
-            ],
+            value: '',
 
             //活动id
             activeid: "",
@@ -276,118 +205,106 @@ export default {
             // 分页相关
             page: 1,
             pageSize: 10,
-            total: '',
+            total: 0,
 
-            // 审核弹窗相关
-            status_radio: "",   //审核状态
-            textarea: '',    //驳回原因
+            options: [], //广告尺寸
 
-            formLabelWidth: '',
+            formLabelWidth: '', //广告示例图相关
+
+
+            // 搜索框相关
+            webSiteName_id: '', //网站名称id
+            adPlaceName: '', //广告位名称
+            website_id: "", //网站id
 
             ruleForm: {
-                name: '', //广告名称
-                ad_url: '', //广告网址
-                radio: '',//广告尺寸
-                startTime: '', //开始时间
-                endTime: '',   //结束时间
+                webName: '', //网站名称
+                adName: '', //广告位名称
+                adDesc: '',//广告位介绍
+                adPhoto: '', //广告示例图
+                adType: '',//广告类型
+                adSize: '',   //广告位大小
                 price: '',  //价格
-                days: '',   //天数
-                num: '',   //个数
+                status: '',   //状态
             },
             rules: {
-                name: [
-                    { required: true, message: '请输入网站名称', trigger: 'blur' },
-                ],
-                price: [
-                    { required: true, message: '请输入要修改的价格', trigger: 'change' }
-                ]
+                webName: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+                adName: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+                adDesc: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+                adPhoto: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+                adType: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+                adSize: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+                price: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+                status: [{ required: true, trigger: 'blur', validator: validateEmpty }],
             }
         }
     },
-    watch: {
-        status_radio: {
-            handler(newVal, oldVal) {
-                // console.log(newVal);
-            },
-            deep: true,
-            immediate: true
-        }
-    },
     methods: {
         //1.列表和分页相关 start ------------------------------------------------------------>
         //1.1 开始请求列表信息方法
         getData() {
-            let data = new FormData()
-            data.append('page', this.page)
-            data.append('pageSize', this.pageSize)
-            console.log(data);
-
-            getOrderListAdmin(data).then(data => {
-                console.log("全部数据", data);
+            getAdPlaceList({
+                page: this.page,
+                pageSize: this.pageSize
+            }).then(data => {
                 console.log(data.data.rows);
                 this.tableData = data.data.rows
                 this.total = data.data.count
+                if(data.code==200){
+                    this.loading=false
+                }
                 for (let item of this.tableData) {
-                    if (item.status == 1) {
-                        item.status = "已通过"
-                    } else if (item.status == 2) {
-                        item.status = "已驳回"
-                    } else if (item.status == 6) {
-                        item.status = "待审核"
-                    }
+                    item.size = item.width + 'x' + item.height
+                }
+            })
+        },
 
-                    if (item.ad_status == 1) {
-                        item.ad_status = "待投放"
-                    } else if (item.ad_status == 2) {
-                        item.ad_status = "已驳回"
-                    } else if (item.ad_status == 3) {
-                        item.ad_status = "已撤回"
-                    } else if (item.ad_status == 4) {
-                        item.ad_status = "已修改"
-                    } else if (item.ad_status == 5) {
-                        item.ad_status = "已过期"
-                    } else if (item.ad_status == 6) {
-                        item.ad_status = "待审核"
-                    } else if (item.ad_status == 7) {
-                        item.ad_status = "已结束"
-                    } else if (item.ad_status == 8) {
-                        item.ad_status = "待投放"
-                    }
+        //获取广告尺寸
+        getSize(){
+            getSize().then(data=>{
+                console.log(data.data);
+                this.options=data.data
+                for(let item of this.options){
+                    item.size = item.width + 'x' + item.height
                 }
+                console.log(this.options);
+                
             })
         },
 
+        change(){
+            console.log(this.ruleForm.adSize);
+        },
+
         //1.2 删除内容
         deleteRow(id) {
             console.log(id);
             let data = new FormData()
             data.append('id', id)
-
             this.$confirm('注意:删除后,该条信息及其绑定关系全部删除', '是否确认删除该条信息?', {
                 confirmButtonText: '确定',
                 cancelButtonText: '取消',
             }).then(() => {
                 console.log("当前删除:" + id)
-                let data = new FormData()
-                data.append('id', id)
-                console.log(data);
 
-                delOrderAdmin(data).then(data => {
+                delAdPlace({
+                    id: id
+                }).then(data => {
                     console.log(data);
-                    if (data.code == 0) {
+                    if (data.code = 200) {
+                        this.$message({
+                            message: '删除成功',
+                            type: 'success'
+                        })
+                        this.getData()
+                    } else if (data.code == 0) {
                         this.$message({
                             message: data.message,
                             type: 'error'
                         })
                     }
-                    if (data.code == 200) {
-                        this.$message({
-                            type: 'success',
-                            message: '删除成功!'
-                        });
-                    }
-                    this.getData()
                 })
+
             }).catch(() => {
                 this.$message({
                     type: 'warning',
@@ -413,167 +330,275 @@ export default {
         },
         // 1.6 搜索按钮
         goSearch() {
-            console.log(this.status);
-            
-            let data = new FormData()
-            data.append('page', this.page)
-            data.append('pageSize', this.pageSize)
-            data.append('status', this.status)
-            data.append('ad_status', this.ad_status)
-            data.append('order_num', this.order_code)
-            data.append('sttime', "")
-            data.append('edtime', "")
-            console.log(data);
-
-            getOrderListAdmin(data).then(data => {
+            getAdPlaceList({
+                page: this.page,
+                pageSize: this.pageSize,
+                name: this.adPlaceName,
+                website_id: this.webSiteName_id, //广告位名称 id
+            }).then(data => {
                 console.log(data);
-                console.log(data.data.rows);
                 this.tableData = data.data.rows
                 this.total = data.data.count
                 for (let item of this.tableData) {
-                    if (item.status == 1) {
-                        item.status = "已通过"
-                    } else if (item.status == 2) {
-                        item.status = "已驳回"
-                    } else if (item.status == 6) {
-                        item.status = "待审核"
-                    }
-
-                    if (item.ad_status == 1) {
-                        item.ad_status = "待投放"
-                    } else if (item.ad_status == 2) {
-                        item.ad_status = "已驳回"
-                    } else if (item.ad_status == 3) {
-                        item.ad_status = "已撤回"
-                    } else if (item.ad_status == 4) {
-                        item.ad_status = "已修改"
-                    } else if (item.ad_status == 5) {
-                        item.ad_status = "已过期"
-                    } else if (item.ad_status == 6) {
-                        item.ad_status = "待审核"
-                    } else if (item.ad_status == 7) {
-                        item.ad_status = "已结束"
-                    } else if (item.ad_status == 8) {
-                        item.ad_status = "待投放"
-                    }
+                    item.size = item.width + 'x' + item.height
                 }
             })
+
         },
         //1.7 重置按钮
         goReset() {
-            this.order_code = '',
-                this.status = ''
-            this.ad_status = ''
-            this.getData();
+            this.webSiteName_id = ""
+            this.adPlaceName = ""
+            this.getData()
         },
         //列表和分页相关 end ------------------------------------------------------------>
 
-        //1.9 编辑
+        //1.8 编辑
         goEdit(id, val) {
-            console.log(id);
-
+            // console.log(id);
+            this.dialogName = '编辑'
             this.activeid = id
             this.dialogTableVisible = true
             console.log(id, val);
-            this.ruleForm.name = val.user_name
-            this.ruleForm.ad_url = val.ad_url
-            // this.ruleForm.radio = val.width
-            this.ruleForm.startTime = val.sttime
-            this.ruleForm.endTime = val.edtime
-            this.ruleForm.price = val.price
-            this.ruleForm.days = val.days
+            // console.log("状态", val.status);
+
+            //数据回显
+            this.website_id = val.website_id
+            this.ruleForm.webName = val.website_name //网站名称
+            this.ruleForm.adName = val.name //广告位名称
+            this.ruleForm.adDesc = val.introduce //广告位介绍
+            this.logoUrl = val.thumb //广告示例图
+            this.ruleForm.adPhoto = val.thumb //广告示例图
+            this.ruleForm.price = val.price //价格
+            this.ruleForm.status = val.status //状态
+
+            if (val.ad_size_id == 1) {
+                this.ruleForm.adSize = '1200x90'  //广告位大小
+            }else if (val.ad_size_id == 2) {
+                this.ruleForm.adSize = '420x560'  //广告位大小
+            }
+            if (val.typeid == 2) {
+                this.ruleForm.adType = '2' //广告类型
+            }
+            if (val.status == 1) {
+                this.ruleForm.status = '1' //状态
+            } else if (val.status == 2) {
+                this.ruleForm.status = '2' //状态
+            }
+
         },
 
-        //2.0 审核
-        goReview(id, val) {
+        //1.9 查看
+        goLook(id) {
             this.activeid = id
-            this.dialogFormVisible = true
+            this.$router.push({
+                path: '/adPlaceDetail',
+                query: {
+                    id: this.activeid
+                }
+            })
+        },
+
+        //2.0 添加
+        addWebsite() {
+            this.dialogTableVisible = true
+            this.dialogName = "添加"
+
+            //添加时清空回显回来的数据
+            this.ruleForm.webName = '' //网站名称
+            this.ruleForm.adName = '' //广告位名称
+            this.ruleForm.adDesc = '' //广告位介绍
+            this.ruleForm.adPhoto = '' //广告示例图
+            this.ruleForm.adSize = '' //广告尺寸
+            this.ruleForm.adType = '2' //广告类型
+            this.ruleForm.price = '' //价格
+            this.ruleForm.status = '' //状态
+            this.logoUrl = ''
         },
 
-        //审核中的确定
-        subimtStatus() {
-            if (this.status_radio == '3') {
-                let data = new FormData()
-                data.append('id', this.activeid)
-                applyOrderStatusAdmin(data).then(data => {
+
+        // 2.1 弹出层相关方法
+        // 提交表单
+        submitForm() {
+            // 判断用户是否输入数据
+            if (this.ruleForm.webName == '') {
+                this.$message({
+                    message: '请将数据填写完整',
+                    type: 'error'
+                })
+                return
+            }
+            if (this.dialogName == "添加") {
+                createAdPlace({
+                    name: this.ruleForm.adName,
+                    website_id: this.website_id,
+                    price: this.ruleForm.price,
+                    thumb: this.ruleForm.adPhoto,
+                    typeid: this.ruleForm.adType,
+                    ad_size_id: this.ruleForm.adSize,
+                    status: this.ruleForm.status,
+                    introduce: this.ruleForm.adDesc,
+                }).then(data => {
                     console.log(data);
                     if (data.code == 200) {
                         this.$message({
-                            message: '已修改审核状态',
+                            message: '添加成功',
                             type: 'success'
                         })
-                        this.dialogFormVisible = false
+                        this.dialogTableVisible = false
                         this.getData()
-                    }
-                    if (data.code == 0) {
+                    } else if (data.code == 0) {
                         this.$message({
                             message: data.message,
                             type: 'error'
                         })
+                        this.dialogTableVisible = true
+                        return
+                    } else {
+                        this.$message({
+                            message: data.message,
+                            type: 'error'
+                        })
+                        this.dialogTableVisible = true
+                        return
                     }
                 })
             }
-            if (this.status_radio == '6') {
-                let data = new FormData()
-                data.append('id', this.activeid)
-                data.append('reason', this.textarea)
-                rejectOrderAdmin(data).then(data=>{
+
+            if (this.website_id == '') {
+                this.$message({
+                    message: '请输入并选择网站名称',
+                    type: 'error'
+                })
+                this.dialogVisible = true
+            }
+            if (this.dialogName == "编辑") {
+                updateAdPlace({
+                    name: this.ruleForm.adName,
+                    website_id: this.website_id,
+                    price: this.ruleForm.price,
+                    thumb: this.ruleForm.adPhoto,
+                    typeid: this.ruleForm.adType,
+                    ad_size_id: this.ruleForm.adSize,
+                    status: this.ruleForm.status,
+                    introduce: this.ruleForm.adDesc,
+                    id: this.activeid
+                }).then(data => {
                     console.log(data);
-                    if(data.code==200){
+                    if (data.code == 200) {
                         this.$message({
-                            message:'修改成功',
-                            type:'success'
+                            message: '编辑成功',
+                            type: 'success'
                         })
-                        this.dialogFormVisible = false
-                        this.getData()
+                        this.dialogTableVisible = false
                     }
-                    if(data.code==0){
+                    if (data.code == 0) {
                         this.$message({
-                            message:data.message,
-                            type:'error'
+                            message: data.message,
+                            type: 'error'
                         })
+                        this.dialogTableVisible = true
                     }
+                    this.getData()
                 })
             }
 
         },
-        // 弹出层相关方法
-        // 提交表单
-        submitForm() {
-            let data = new FormData()
-            data.append('id', this.activeid)
-            data.append('price', this.ruleForm.price)
-            editOrderAdmin(data).then(data => {
-                console.log(data);
-                if (data.code == 200) {
-                    this.dialogTableVisible = false
-                    this.$message({
-                        message: '修改成功',
-                        type: 'success'
-                    })
-                }
-                if (data.code == 0) {
-                    this.$message({
-                        message: data.message + ',需要保留两位小数',
-                        type: 'error'
-                    })
-                    this.dialogTableVisible = true
-                }
-            })
-        },
         //取消添加或编辑
         cancelForm() {
             this.dialogTableVisible = false
         },
+        //3.6 上传图片操作
+        beforeAvatarUpload(file) {
+            const isJPG = file.type === 'image/jpeg';
+            const isPNG = file.type === 'image/png';
+            const isLt2M = file.size / 1024 / 1024 < 2;
+
+            if (!isJPG && !isPNG) {
+                this.$message.error('上传图片只能是 JPG 或 PNG 格式!');
+                return false;
+            }
+            if (!isLt2M) {
+                this.$message.error('上传图片大小不能超过 2MB!');
+                return false;
+            }
+
+            const formData = new FormData();
+            formData.append('file', file);
+
+            this.$store.dispatch('pool/uploadFile', formData).then(res => {
+                this.logoUrl = res.data.imgUrl;//显示缩略图
+                this.ruleForm.adPhoto = res.data.imgUrl;//提供表单地址
+                console.log(res.data.imgUrl)
+            }).catch(() => {
+                this.$message({
+                    type: 'info',
+                    message: '网络错误,请重试!'
+                });
+            })
+
+            // 阻止默认的上传行为
+            return false;
+        },
+        handleDelete() {
+            // 删除图片
+            this.logoUrl = ''; // 清空图片 URL
+        },
+
+        //搜索部分的输入关键词下拉框
+        selectWebSite(value) {
+            this.webSiteName_id = value
+        },
+
+        //添加 / 编辑弹窗中输入关键词下拉框 
+        // 判断是否已经关联了网站
+        detectionWebSite(value) {
+            console.log(value);
+            this.website_id = value
+            console.log(this.website_id);
+
+        },
 
+        //
+        getWebNavList(query) {
+            if (query !== '') {
+                this.webSiteLoading = true;
+                let data = { keyword: query }
+                let dataArr = [];
+                this.$store.dispatch('pool/getNavWebList', data).then(res => {
+                    console.log(res.data)
+                    for (let item of res.data) {
+                        let data = {};
+                        data.key = item.id;
+                        data.value = item.id;
+                        data.label = item.website_name;
+                        dataArr.push(data)
+                    }
+                    this.webSiteList = dataArr;
+                    this.webSiteLoading = false;
+                }).catch(() => {
+                    this.$message({
+                        type: 'info',
+                        message: '网络错误,请重试!'
+                    });
+                })
+            } else {
+                this.navList = [];
+            }
+        },
     },
     mounted() {
         this.getData()
+        this.getSize()
     },
 }
 </script>
 
 <style scoped lang="less">
+input[aria-hidden=true] {
+    display: none !important;
+}
+
 // 提示信息
 .tips {
     margin: 30px;
@@ -617,7 +642,7 @@ export default {
             position: relative;
             font-size: 14px;
             display: inline-block;
-            width: 73%;
+            width: 80%;
         }
 
         .searchTitle {
@@ -645,7 +670,7 @@ export default {
             height: 38px;
             border: none;
             border-radius: 8px;
-            padding: 0 20px;
+            padding: 0 30px;
         }
 
         .search {
@@ -690,7 +715,7 @@ export default {
 
     .listDeleteBtn,
     .listEditBtn,
-    .listReviewBtn {
+    .listLookBtn {
         margin-left: 0px;
         padding-left: 0px;
         margin-right: 20px;
@@ -700,20 +725,15 @@ export default {
     }
 
 
-    .listReviewBtn {
+    .listLookBtn {
         text-align: center;
         border-radius: 8px;
         cursor: pointer;
-        color: #519C66;
-        background-color: rgba(81, 156, 102, 0.16);
+        color: #55b5f1;
+        background-color: rgba(85, 181, 241, 0.16);
 
-        >.review {
-            display: inline-block;
-            width: 20px;
-            height: 20px;
-            background: url("../../assets/advertise/Shield.png");
-            margin-right: 6px;
-            vertical-align: -6px;
+        >i {
+            padding-right: 8px;
         }
     }
 
@@ -736,7 +756,8 @@ export default {
 .dialogText {
     margin: 0 7px 0 3px;
     padding-bottom: 1px;
-    padding: 0px 60px 1px 20px;
+    padding: 30px 60px 1px 20px;
+    background-color: #f5f7fb;
 
     .adImage {
         width: 140px;
@@ -751,6 +772,13 @@ export default {
         }
     }
 
+
+
+    ::v-deep .avatar {
+        width: 140px;
+        height: auto;
+    }
+
     .price {
         ::v-deep .el-input {
             width: 29%;
@@ -775,6 +803,14 @@ export default {
     ::v-deep .el-button+.el-button {
         margin-left: 0px;
     }
+
+    ::v-deep .el-select {
+        width: 100%;
+    }
+
+    ::v-deep .el-form-item {
+        margin-bottom: 50px;
+    }
 }
 
 // 弹出层按钮

+ 53 - 29
src/views/advertise/advertiseList.vue

@@ -4,7 +4,7 @@
         <!-- 提示信息 -->
         <div class="tips">
             <el-row>
-                <el-col :span="12">
+                <el-col :span="24">
                     <i class="tipsIcon"></i>
                     <span class="tipsText">24小时内,若运营没有操作用户的申请,则用户申请的时间、信息等将会释放。</span>
                 </el-col>
@@ -44,15 +44,14 @@
                     <el-table class="my-table" :data="tableData" style="width: 100%">
                         <el-table-column fixed prop="id" label="编号" width="80">
                         </el-table-column>
-<<<<<<< Updated upstream
+
                         <el-table-column prop="order_num" label="工单编号" width="120">
                         </el-table-column>
                         <el-table-column prop="user_name" label="广告名称" width="255">
-=======
-                        <el-table-column prop="order_num" label="工单编号" width="190">
+                        </el-table-column>
+                        <el-table-column prop="order_num" label="工单编号" width="175">
                         </el-table-column>
                         <el-table-column prop="name" label="广告名称" width="160">
->>>>>>> Stashed changes
                         </el-table-column>
                         <el-table-column prop="orderStatus" label="订单状态" width="100">
                         </el-table-column>
@@ -110,10 +109,17 @@
                         </div>
                     </el-form-item>
                     <el-form-item label="持续时间:" prop="">
-                        <el-date-picker v-model="ruleForm.startTime" type="datetime" disabled placeholder="选择日期时间">
-                        </el-date-picker> 至
-                        <el-date-picker v-model="ruleForm.endTime" type="datetime" disabled placeholder="选择日期时间">
-                        </el-date-picker>
+                        <el-col :span="11">
+                            <el-date-picker v-model="ruleForm.startTime" type="datetime" disabled placeholder="选择日期时间">
+                            </el-date-picker>
+                        </el-col>
+                        <el-col :span="2" class="zhi">
+                            至
+                        </el-col>
+                        <el-col :span="11">
+                            <el-date-picker v-model="ruleForm.endTime" type="datetime" disabled placeholder="选择日期时间">
+                            </el-date-picker>
+                        </el-col>
                     </el-form-item>
                     <el-form-item label="广告尺寸:" prop="">
                         <el-radio v-model="ruleForm.radio" label="1">1200x90px</el-radio>
@@ -122,9 +128,24 @@
 
                     <el-form-item label="价格:" prop="price">
                         <div class="price">
-                            <el-input v-model="ruleForm.price" placeholder="请输入价格"></el-input> 元 x
-                            <el-input v-model="ruleForm.days" disabled placeholder="请输入天数"></el-input> 天 x
-                            <el-input v-model="ruleForm.num" disabled placeholder="请输入个数"></el-input> 个
+                            <el-col :span="6">
+                                <el-input v-model="ruleForm.price" placeholder="请输入价格"></el-input>
+                            </el-col>
+                            <el-col :span="2" class="zhi">
+                                元 x
+                            </el-col>
+                            <el-col :span="6">
+                                <el-input v-model="ruleForm.days" disabled placeholder="请输入天数"></el-input>
+                            </el-col>
+                            <el-col :span="2" class="zhi">
+                                天 x
+                            </el-col>
+                            <el-col :span="6">
+                                <el-input v-model="ruleForm.num" disabled placeholder="请输入个数"></el-input>
+                            </el-col>
+                            <el-col :span="2" class="zhi">
+                                个
+                            </el-col>
                         </div>
                     </el-form-item>
                     <el-form-item label="广告位置:" prop="">
@@ -207,7 +228,6 @@ export default {
 
             form: {},  //审核状态的ref属性名称
 
-
             tableData: [],//表格数据
 
             // 搜索框相关
@@ -261,7 +281,7 @@ export default {
             // 分页相关
             page: 1,
             pageSize: 10,
-            total: '',
+            total: 0,
 
             orderads:[],
 
@@ -394,7 +414,7 @@ export default {
         // 1.6 搜索按钮
         goSearch() {
             console.log(this.status);
-            
+
             let data = new FormData()
             data.append('page', this.page)
             data.append('pageSize', this.pageSize)
@@ -509,20 +529,20 @@ export default {
                 let data = new FormData()
                 data.append('id', this.activeid)
                 data.append('reason', this.textarea)
-                rejectOrderAdmin(data).then(data=>{
+                rejectOrderAdmin(data).then(data => {
                     console.log(data);
-                    if(data.code==200){
+                    if (data.code == 200) {
                         this.$message({
-                            message:'修改成功',
-                            type:'success'
+                            message: '修改成功',
+                            type: 'success'
                         })
                         this.dialogFormVisible = false
                         this.getData()
                     }
-                    if(data.code==0){
+                    if (data.code == 0) {
                         this.$message({
-                            message:data.message,
-                            type:'error'
+                            message: data.message,
+                            type: 'error'
                         })
                     }
                 })
@@ -609,7 +629,7 @@ export default {
             position: relative;
             font-size: 14px;
             display: inline-block;
-            width: 73%;
+            width: 90%;
         }
 
         .searchTitle {
@@ -730,6 +750,10 @@ export default {
     padding-bottom: 1px;
     padding: 0px 60px 1px 20px;
 
+    .zhi {
+        text-align: center;
+    }
+
     .adImage {
         width: 140px;
         height: 140px;
@@ -743,11 +767,11 @@ export default {
         }
     }
 
-    .price {
-        ::v-deep .el-input {
-            width: 29%;
-        }
-    }
+    // .price {
+    //     ::v-deep .el-input {
+    //         width: 29%;
+    //     }
+    // }
 
     .example {
         font-family: Microsoft YaHei;
@@ -761,7 +785,7 @@ export default {
 
     //日期时间选择器的宽
     ::v-deep .el-date-editor.el-input {
-        width: 48%;
+        width: 100%;
     }
 
     ::v-deep .el-button+.el-button {

File diff suppressed because it is too large
+ 155 - 699
src/views/chat/contacts.vue


+ 79 - 182
src/views/chat/creatTopic.vue

@@ -5,11 +5,15 @@
       <el-form :model="form" ref="form" :rules="formRules" label-position="left" label-width="120px">
         <div class="formDiv">
           <div>
-            <el-form-item label="课题名称:" prop="cat_arr_id" class="custom-align-right">
-              <el-cascader :key="parentKey" v-model="form.cat_arr_id" placeholder="请选择课题名称" :props="parentData" filterable clearable></el-cascader>
+            <el-form-item label="课题分类:" prop="type" class="custom-align-right">
+              <el-select v-model="form.type" placeholder="请选择课题分类..">
+                <!-- <el-option label="科研" value="1"></el-option>
+                <el-option label="维权" value="2"></el-option> -->
+                <el-option :label="item.label" :value="item.value" v-for="item in topicType"></el-option>
+              </el-select>
             </el-form-item>  
-            <el-form-item label="课题标题:" prop="keyword" class="custom-align-right">
-              <el-input v-model="form.keyword" autocomplete="off" placeholder="请输入资讯关键词"></el-input>
+            <el-form-item label="课题标题:" prop="title" class="custom-align-right">
+              <el-input v-model="form.title" autocomplete="off" placeholder="请输入课题标题"></el-input>
             </el-form-item>
             <div class="QuillTitle">
               <span>* </span>课题内容:
@@ -17,7 +21,7 @@
                 {{ showHtml ? '切换到编辑模式' : '切换到源码模式' }}
               </div>
             </div>
-            <el-form-item label="" prop="content">
+            <el-form-item label="">
               <div class="editor-container">
                 <div v-if="showHtml">
                   <textarea v-model="editorHtml" style="width: 100%; height: 400px;"></textarea>
@@ -29,18 +33,18 @@
                 <input type="file" ref="multiFileInput" @change="handleMultipleFiles" multiple hidden accept="image/jpeg, image/png" />
               </div>
             </el-form-item>
-            <el-form-item label="建立群聊:" prop="is_original" class="custom-align-right">
-              <el-radio-group v-model="form.is_original">
-                <el-radio :label="1">是</el-radio>
-                <el-radio :label="0">否</el-radio>
+            <el-form-item label="建立群聊:" prop="is_group" class="custom-align-right">
+              <el-radio-group v-model="form.is_group" :disabled="groupStatus">
+                <el-radio :label="'1'">是</el-radio>
+                <el-radio :label="'0'">否</el-radio>
               </el-radio-group>
             </el-form-item>
             <div>
-              <el-form-item label="群聊名称:" prop="copyfrom" class="custom-align-right">
-                <el-input v-model="form.copyfrom" autocomplete="off" placeholder="请输入来源名称"></el-input>
+              <el-form-item label="群聊名称:" prop="group_name" class="custom-align-right" v-if="form.is_group=='1'">
+                <el-input v-model="form.group_name" autocomplete="off" placeholder="请输入群聊名称" :disabled="groupStatus"></el-input>
               </el-form-item>
-              <el-form-item label="作者:" prop="linkurl" class="custom-align-right">
-                <el-input v-model="form.linkurl" autocomplete="off" placeholder="请输入来源链接"></el-input>
+              <el-form-item label="作者:" class="custom-align-right">
+                <el-input v-model="form.author" autocomplete="off" placeholder="请输入作者名"></el-input>
               </el-form-item>
             </div>
           </div>
@@ -49,8 +53,8 @@
     </div>
     <div class="bottomBtnBox">
       <el-button type="info" @click="returnPage">返回</el-button>
-      <el-button type="primary" @click="editToServe" v-if="editStatus==true">确定</el-button>
-      <el-button type="primary" @click="addToServe" v-else>发布</el-button>
+      <el-button type="primary" @click="editToServe" v-if="editStatus==true">修改</el-button>
+      <el-button type="primary" @click="addToServe" v-else>创建</el-button>
     </div>
   </div>
 </template>
@@ -96,54 +100,27 @@ export default {
     //0.全局操作 end ------------------------------------------------------------>
     return {
       //1.表单项 start ------------------------------------------------------------>
-      editStatus:false,
+      editStatus:false,//是否为编辑状态
+      groupStatus:false,//是否可以编辑群信息
       tableDivTitle:"编辑课题",
       disclaimer:true,//免责声明
       //提交表单
       form: {
-        //1.1使用了外链
-        title: '',//资讯标题
-        islink:0,//是否使用外链 0非 1是
-        linkurl:"",//外链地址
-        //1.2没有使用外链
-        cat_arr_id:'',//导航池名称
-        level:"",//推荐等级
-        imgurl:"",//缩略图
-        keyword:"",//关键词
-        introduce:"",//描述
+        type:"",//课题分类
+        title:"",//课题标题
         content:"",//内容
+        is_group:"0",//是否创建群聊
+        group_name:"",//群聊名称
         author:"",//作者
-        hits:"",//浏览量
-        is_original:0,//是否为原创 0非 1是
-        copyfrom:"",//来源名称
-        fromurl:"",//来源地址
-        status:0//状态 0待发布 1已发布 404已删除
       },
+      topicType:[],//课题分类
+      topicStatus:[],//课题状态
       //1.2 表单验证规则
       formRules: {
-        //资讯名称不能为空
         title:[{required:true,trigger:'blur',validator:validateEmpty}],
-        //如果使用了外链,外链地址不能为空
-        linkurl:[{required:true,trigger:'blur',validator:validateEmpty}],
-        //导航池名称不能为空
-        cat_arr_id:[{required:true,trigger:'blur',validator:validateArray}],
-        //推荐等级不能为空
-        //level:[{required:true,trigger:'blur',validator:validateEmpty}],
-        //关键词不能为空
-        keyword:[{required:true,trigger:'blur',validator:validateEmpty}],
-        //描述不能为空
-        introduce:[{required:true,trigger:'blur',validator:validateEmpty}],
-        //内容不能为空
-        content:[{required:true,trigger:'blur',validator:validateEmpty}],
-        //作者不能为空
-        author:[{required:true,trigger:'blur',validator:validateEmpty}],
-        //是否原创不能为空
-        is_original:[{required:true,trigger:'blur',validator:validateEmpty}],
-        //来源名称和地址不能为空
-        copyfrom:[{required:true,trigger:'blur',validator:validateEmpty}],
-        fromurl:[{required:true,trigger:'blur',validator:validateEmpty}],
-        //缩略图不能为空
-        imgUrl:[{required:true,trigger:'blur',validator:validateEmpty}]
+        type:[{required:true,trigger:'blur',validator:validateArray}],
+        is_group:[{required:true,trigger:'blur',validator:validateEmpty}],
+        group_name:[{required:true,trigger:'blur',validator:validateEmpty}],
       },
       //1.3富文本编辑器配置
       showHtml: false, //用于保存源码内容
@@ -187,36 +164,6 @@ export default {
           }
         }
       },
-      //1.4图片上传
-      imgUrl:"",//在页面上显示缩略图
-      //获取父级导航池
-      parentKey:0,//获取父级导航
-      parentData: {
-        checkStrictly: true,
-        lazy: true,
-        async lazyLoad (node, resolve) {
-          const { level, data } = node;
-          if (data && data.children && data.children.length !== 0) {
-            return resolve(node)
-          }
-          console.log(level)
-          let parentId = level == 0 ? 0 : data.value
-          let parames = {
-            'pid':parentId
-          }
-          self.$store.dispatch('pool/categoryList',parames).then(res=> {
-            if (res.data) {
-              const nodes = res.data.map(item => ({
-                value: item.id,
-                label: item.name,
-                leaf: level >= 3,
-                children: []
-              }))
-              resolve(nodes)
-            }
-          })
-        }
-      },
       //表单项 end ------------------------------------------------------------>
     };
   },
@@ -250,32 +197,22 @@ export default {
           message: '网络错误,请重试!'
         });
       })
-
       // 阻止默认的上传行为
       return false;
     },
     //1.2 提交表单
     addToServe(){
-      //提交之前先判断是否为外链
-      //如果使用了外链,清理掉除了外链以外的内容
-      if(this.form.islink==true){
-        this.form.islink = 1;
-        this.cleatForm(1)
-      }else{
-        this.form.islink = 0;
-      }
-
       //先进行验证
       this.$refs.form.validate(valid => {
         if (valid) {
           //console.log(this.form)
-          this.$store.dispatch('news/addArticle',this.form).then(res=> {
+          this.$store.dispatch('chat/addTopic',this.form).then(res=> {
             //汇报结果
             this.$message({
               type: 'success',
-              message: '已成功添加资讯!'
+              message: '已成功创建商圈!'
             });
-            this.cleatForm(2);
+            this.cleatForm();
             //返回列表页
             this.returnPage()
           }).catch(() => {
@@ -288,47 +225,38 @@ export default {
       })
     },
     //1.3 清理表单
-    cleatForm(type){
-      if(type==1){
-        //使用了外链,进行部分表单清理
-        //this.form.cat_arr_id = "";
-        this.form.level = "";
-        this.form.imgurl = "";
-        this.form.keyword = "";
-        this.form.introduce = "";
-        this.form.content = "";
-        //this.form.author = "";
-        this.form.hits = "";
-        this.form.is_original = "";
-        this.form.copyfrom = "";
-        this.form.fromurl = "";
-        this.form.status = "";
-      }
-      if(type==2){
-        //完全清理表单
-        this.form.title = "";
-        this.form.islink = "";
-        this.form.linkurl = "";
-        this.form.cat_arr_id = "";
-        this.form.level = "";
-        this.form.imgurl = "";
-        this.form.keyword = "";
-        this.form.introduce = "";
-        this.form.content = "";
-        this.form.author = "";
-        this.form.hits = "";
-        this.form.is_original = "";
-        this.form.copyfrom = "";
-        this.form.fromurl = "";
-        this.form.status = "";
-      }
+    cleatForm(){
+      this.form.type = "";
+      this.form.title = "";
+      this.form.content = "";
+      this.form.is_group = "";
+      this.form.group_name = "";
+      this.form.author = "";
+    },
+    //1.4 查询商圈分类
+    getTopicType(){
+      this.$store.dispatch('chat/topicType',this.getApiData).then(res=> {
+        this.topicType = res.data;
+        console.log(this.topicType)
+      }).catch(() => {
+        this.$message.error("查询商圈分类失败!");
+      })
+    },
+    //1.5 查询商圈状态
+    getTopicStatus(){
+      this.$store.dispatch('chat/topicStatus',this.getApiData).then(res=> {
+        this.topicStatus = res.data;
+        console.log(res)
+      }).catch(() => {
+        this.$message.error("查询商圈状态失败!");
+      })
     },
     //提交表单 end ------------------------------------------------------------>
 
     //2.跳转操作 start ------------------------------------------------------------>
     returnPage(){
       this.$router.push({
-        path: '/articleList',
+        path: '/topic',
       });
     },
     //跳转操作 end ------------------------------------------------------------>
@@ -337,50 +265,20 @@ export default {
     //3.1回显数据
     getMainData() {
       let data = {
-        id: this.$route.query.id
+        id: this.$route.query.id + ""
       };
-      this.$store.dispatch('news/getArticleInfo', data).then(res => {
+      this.$store.dispatch('chat/getTopicInfo', data).then(res => {
         console.log(res);
         this.form.title = res.data.title;
-        //判断是否使用了外链
-        if(res.data.islink==1){
-          this.form.islink = true;
-        }else{  
-          this.form.islink = false;
-        }
-        //不是原创的时候显示来源
-        if(res.data.is_original==1){
-          this.form.is_original = 1;
-        }else{
-          this.form.is_original = 0;
-          this.$nextTick(() => {
-            this.form.is_original = 0;
-            console.log('is_original:', this.form.is_original); // 确保值已更新
-          });
-          // <el-radio v-model="form.is_original" label="1">是</el-radio>
-          // <el-radio v-model="form.is_original" label="0">不是</el-radio>
-          this.form.linkurl = res.data.linkurl;
-        }
-        
-
-
-        // 回显导航池
-        this.form.cat_arr_id = Array.isArray(res.data.cat_arr_id) ? res.data.cat_arr_id : JSON.parse(res.data.cat_arr_id);
-        this.parentKey += 1; // 触发级联选择器重新加载
-        this.loadCascaderPath(this.form.cat_arr_id); // 加载路径数据
-
-        this.form.level = res.data.level;
-        this.form.imgurl = res.data.imgurl;
-        this.imgUrl = res.data.imgurl;
-        this.form.keyword = res.data.keyword;
-        this.form.introduce = res.data.introduce;
+        this.form.type = res.data.type;
         this.form.content = res.data.content;
-        this.form.author = res.data.author;
-        this.form.hits = res.data.hits;
-        this.form.is_original = res.data.is_original;
-        this.form.copyfrom = res.data.copyfrom;
-        this.form.fromurl = res.data.fromurl;
-        this.form.status = res.data.status;
+        this.form.is_group = res.data.is_group;
+        this.form.group_name = res.data.group_name;
+        this.form.author = res.data.user_name;
+        //如果已经创建了群聊,阻止其修改
+        if(res.data.is_group=="1"){
+          this.groupStatus = true;
+        }
       }).catch(() => {
         this.$message({
           type: 'info',
@@ -411,24 +309,19 @@ export default {
     },
     //1.3提交修改
     editToServe(){
-      //提交之前先判断是否为外链
-      //如果使用了外链,清理掉除了外链以外的内容
-      if(this.form.islink==1){
-        this.cleatForm(1)
-      }
       //添加要修改的id
-      this.form.id = this.editId;
+      this.form.id = this.editId + "";
       //先进行验证
       this.$refs.form.validate(valid => {
         if (valid) {
           //console.log(this.form)
-          this.$store.dispatch('news/updateArticle',this.form).then(res=> {
+          this.$store.dispatch('chat/updateTopic',this.form).then(res=> {
             //汇报结果
             this.$message({
               type: 'success',
-              message: '已成功添加资讯!'
+              message: '已成功修改课题信息!'
             });
-            this.cleatForm(2);
+            this.cleatForm();
             //返回列表页
             this.returnPage()
           }).catch(() => {
@@ -549,15 +442,19 @@ export default {
 
   },
   mounted(){
+    //查询课题分类
+    this.getTopicType();
+
+    this.form.author = this.$store.state.user.name;
     //1.判断是新建还是回显
     if(this.$route.query.id!=undefined){
       this.editId = this.$route.query.id;
       this.editStatus = true;
-      console.log("编辑新闻!")
+      console.log("编辑商圈!")
       this.getMainData();
     }else{
       this.editStatus = false;
-      console.log("添加新闻!")
+      console.log("新建商圈!")
     }
 
     //复制内容到富文本 start ------------------------------------------------------------>

File diff suppressed because it is too large
+ 702 - 260
src/views/chat/hall.vue


+ 111 - 75
src/views/chat/topic.vue

@@ -7,19 +7,23 @@
           <el-col :span="8">
             <div class="searchBox">
               <div class="searchTitle">课题标题:</div>
-              <el-input placeholder="请输入资讯题目" autocomplete="off" v-model="getApiData.title"/>
+              <el-input placeholder="请输入课题标题" autocomplete="off" v-model="getApiData.title"/>
             </div>
           </el-col>
           <el-col :span="8">
             <div class="searchBox">
               <div class="searchTitle">课题分类:</div>
-              <el-input placeholder="请输入导航池名称" autocomplete="off" v-model="getApiData.category_name"/>
+              <el-select v-model="getApiData.type" placeholder="请选择课题分类..">
+                <!-- <el-option label="科研" value="1"></el-option>
+                <el-option label="维权" value="2"></el-option> -->
+                <el-option :label="item.label" :value="item.value" v-for="item in topicType"></el-option>
+              </el-select>
             </div>
           </el-col>
           <el-col :span="8">
             <div class="searchBox">
               <div class="searchTitle">作者:</div>
-              <el-input placeholder="请输入作者姓名" autocomplete="off" v-model="getApiData.author"/>
+              <el-input placeholder="请输入作者姓名" autocomplete="off" v-model="getApiData.nickname"/>
             </div>
           </el-col>
         </el-row>
@@ -29,9 +33,11 @@
           <el-col :span="8">
             <div class="searchBox">
               <div class="searchTitle">审核状态:</div>
-              <el-select v-model="getApiData.islink" placeholder="请选择..">
-                <el-option label="否" value="0"></el-option>
-                <el-option label="是" value="1"></el-option>
+              <el-select v-model="getApiData.status" placeholder="请选择审核状态..">
+                <!-- <el-option label="待审核" value="1"></el-option>
+                <el-option label="已通过" value="2"></el-option>
+                <el-option label="已拒绝" value="3"></el-option> -->
+                <el-option :label="item.label" :value="item.value" v-for="item in topicStatus"></el-option>
               </el-select>
             </div>
           </el-col>
@@ -57,28 +63,29 @@
           <el-table :data="tableData" style="width: 100%">
             <el-table-column fixed prop="id" label="编号" width="50"></el-table-column>
             <el-table-column prop="title" label="课题标题" width=""></el-table-column>
-            <el-table-column prop="category_name" label="课题分类" width=""></el-table-column>
-            <el-table-column prop="islink" label="作者" width=""></el-table-column>
-            <el-table-column prop="fromurl" label="创建时间" width=""></el-table-column>
-            <el-table-column prop="author" label="修改时间" width=""></el-table-column>
+            <el-table-column prop="type" label="课题分类" width="">
+              <template slot-scope="scope">
+                <div v-if="scope.row.type==1">科研</div>
+                <div v-if="scope.row.type==2">维权</div>
+                <div v-if="scope.row.type==3">讨论</div>
+              </template>
+            </el-table-column>
+            <el-table-column prop="user_name" label="作者" width=""></el-table-column>
+            <el-table-column prop="created_at" label="创建时间" width=""></el-table-column>
+            <el-table-column prop="updated_at" label="修改时间" width=""></el-table-column>
             <el-table-column prop="status" label="状态" width="">
               <template slot-scope="scope">
-                <span v-if="scope.row.status==404">404</span>
-                <el-switch
-                  v-else
-                  v-model="scope.row.status"
-                  :active-value="1"
-                  :inactive-value="0"
-                  @change="upRow(scope.row.id,scope.row.status)"
-                ></el-switch>
+                <div v-if="scope.row.status==1" class="status1">待审核</div>
+                <div v-if="scope.row.status==2" class="status2">已通过</div>
+                <div v-if="scope.row.status==3" class="status3">已拒绝</div>
               </template>
             </el-table-column>
             <el-table-column fixed="right" label="操作" width="280" header-align="center">
               <template slot-scope="scope">
                 <div class="listBtnBox">
-                  <div class="listDeleteBtn" @click="deleteRow(scope.row.id, tableData)"><i class="el-icon-delete"></i>移除</div>
-                  <div class="listEditBtn" @click="goEdit(scope.row.id, tableData)"><i class="el-icon-edit-outline"></i>编辑</div>
-                  <div class="listMainBtn" @click="auditStatus=true"><i class="el-icon-edit-outline"></i>审核</div>
+                  <div class="listDeleteBtn" @click="deleteRow(scope.row.id)"><i class="el-icon-delete"></i>删除</div>
+                  <div class="listEditBtn" @click="goEdit(scope.row.id)"><i class="el-icon-edit-outline"></i>编辑</div>
+                  <div class="listMainBtn" @click="openEditWindow(scope.row.id)"><i class="el-icon-edit-outline"></i>审核</div>
                 </div>
               </template>
             </el-table-column>
@@ -100,20 +107,19 @@
     <!--审核状态弹出框 start------------------------------------------------------------>
     <el-dialog :visible.sync="auditStatus" title="审核状态" :close-on-click-modal="false" width="420px">
       <div>
-        <div>
-          <el-radio-group v-model="radio">
-            <el-radio :label="1">通过</el-radio>
-            <el-radio :label="2">拒绝</el-radio>
+        <div class="contentBox">
+          <el-radio-group v-model="form.radio">
+            <el-radio :label="2">通过</el-radio>
+            <el-radio :label="3">拒绝</el-radio>
           </el-radio-group>
         </div>
         <div class="footerButtonBox">
-          <el-button type="info">取消</el-button>
-          <el-button type="primary">确定</el-button>
+          <el-button type="info" @click="auditStatus = false">取消</el-button>
+          <el-button type="primary" @click="editStatus">确定</el-button>
         </div>
       </div>
     </el-dialog>
     <!--审核状态弹出框 end------------------------------------------------------------>
-
   </div>
 </template>
 
@@ -130,18 +136,24 @@ export default {
   data() {
     return {
       //1.列表和分页相关 start ------------------------------------------------------------>
-      tableDivTitle:"资讯列表",
+      tableDivTitle:"课题列表",
       tableData:[],//内容
       editId:0,//要修改的网站id
+      topicType:[],//课题分类
+      topicStatus:[],//课题状态
       getApiData:{
+        title:"",//标题
+        type:"",//课题分类
+        nickname:"",//作者
+        status:"",//审核状态
         page:1,//当前是第几页
         page_size:10,//一共多少条
       },
       allCount:0,//总条数
-      form:{
-        radio:1 //1=通过 2=拒绝
-      },
       auditStatus:false,//审核状态弹出框
+      form:{
+        radio:2 //1=通过 2=拒绝
+      }
       //分页相关 end ------------------------------------------------------------>
     }
   },
@@ -153,20 +165,8 @@ export default {
         this.getApiData.page = 1;
       }
       this.$store.dispatch('chat/getTopicsList',this.getApiData).then(res=> {
-        console.log(res)
-        //格式化:islink=0为不使用外面 islink=1为使用外链
-        //status=1为显示 status=2为不显示
-        // let data = [];
-        // for(let item of res.data.rows){
-        //   // if(item.status==0){item.status="隐藏"}
-        //   // if(item.status==1){item.status="显示"}
-        //   // if(item.status==404){item.status="已删除"}
-        //   if(item.islink==0){item.islink="否"}
-        //   if(item.islink==1){item.islink="是"}
-        //   data.push(item)
-        // }
-        // this.tableData = res.data.rows; //给与内容
-        // this.allCount = res.data.count; //给与总条数
+        this.tableData = res.data.data; //给与内容
+        this.allCount = res.data.total; //给与总条数
       }).catch(() => {
         this.$message({
           type: 'warning',
@@ -174,7 +174,7 @@ export default {
         });
       })
     },
-    //1.2 删除内容
+    //1.2 删除商圈
     deleteRow(id){
       this.$confirm('此操作将永久删除该条数据, 是否继续?', '提示', {
         confirmButtonText: '确定',
@@ -182,7 +182,10 @@ export default {
         type: 'warning'
       }).then(() => {
         console.log("当前删除:" + id)
-        this.$store.dispatch('news/delArticle',{id:id}).then(res=> {
+        let data = {
+          id:id+""
+        }
+        this.$store.dispatch('chat/delTopic',data).then(res=> {
           this.getData();
           this.$message({
             type: 'success',
@@ -201,26 +204,6 @@ export default {
         });
       });
     },
-    //1.3 修改网站状态
-    upRow(id,status){
-      let data = {
-        id:id,
-        status:status
-      }
-      this.$store.dispatch('news/upArticleStatus',data).then(res=> {
-        if(res.code==200){
-          this.$message({
-            type: 'success',
-            message: '资讯状态已修改!'
-          });
-        }
-      }).catch(() => {
-        this.$message({
-          type: 'warning',
-          message: '已取消删除'
-        });
-      });
-    },
     //1.4 列表内容分页
     //直接跳转
     handleSizeChange(val) {
@@ -236,17 +219,34 @@ export default {
     clearSearchList(){
       this.tableData = [];
       this.getApiData.title = "";
-      this.getApiData.category_name = "";
-      this.getApiData.author = "";
-      this.getApiData.islink = "";
+      this.getApiData.type = "";
+      this.getApiData.nickname = "";
       this.getApiData.status = "";
       this.getApiData.page = 1;
       this.getApiData.pageSize = 10;
       this.getData();
     },
+    //1.7 查询商圈分类
+    getTopicType(){
+      this.$store.dispatch('chat/topicType',this.getApiData).then(res=> {
+        this.topicType = res.data;
+        console.log(this.topicType)
+      }).catch(() => {
+        this.$message.error("查询商圈分类失败!");
+      })
+    },
+    //1.8 查询商圈状态
+    getTopicStatus(){
+      this.$store.dispatch('chat/topicStatus',this.getApiData).then(res=> {
+        this.topicStatus = res.data;
+        console.log(res)
+      }).catch(() => {
+        this.$message.error("查询商圈状态失败!");
+      })
+    },
     //列表和分页相关 end ------------------------------------------------------------>
 
-    //2.添加新闻 start ------------------------------------------------------------>
+    //2.添加商圈 start ------------------------------------------------------------>
     //跳转到资讯发布页面
     goCreat(){
       this.$router.push({
@@ -261,16 +261,52 @@ export default {
         path: '/creatTopic',
         query: data
       });
-    }
-    //添加新闻 end ------------------------------------------------------------>
+    },
+    //添加商圈 end ------------------------------------------------------------>
+
+    //3.审核 start ------------------------------------------------------------>
+    openEditWindow(id){
+      this.editId = id;
+      this.auditStatus = true;
+    },
+    editStatus(){
+      let data = {
+        id:this.editId + "",
+        status:this.form.radio + ""
+      }
+      this.$store.dispatch('chat/updateTopic',data).then(res=> {
+        console.log(res)
+        this.getData();
+        this.auditStatus = false;
+      });
+    },
+    //3.审核 end ------------------------------------------------------------>
   },
   mounted(){
     //1.获得初始数据
     this.getData();
+    //2.查询课题分类
+    this.getTopicType();
+    // //3.查询课题状态
+    this.getTopicStatus();
   }
 }
 </script>
 
 <style scoped lang="less">
-
+  .contentBox {
+    padding: 0 0 20px 0;
+  }
+  .footerButtonBox {
+    text-align: right;
+  }
+  .status1 {
+    color: #F19655;
+  }
+  .status2 {
+    color: #519C66;
+  }
+  .status3 {
+    color: #CC5F5F;
+  }
 </style>

+ 7 - 3
src/views/crawler/webCrawler.vue

@@ -23,7 +23,7 @@
             <button class="btn" @click="addWebsite">添加网站</button>
             <el-row>
                 <template>
-                    <el-table class="my-table" :data="tableData" style="width: 100%">
+                    <el-table class="my-table"  v-loading="loading" :data="tableData" style="width: 100%">
                         <el-table-column fixed prop="id" label="编号" width="100">
                         </el-table-column>
                         <el-table-column prop="name" label="网站名称" width="">
@@ -79,8 +79,8 @@
                     <el-form-item label="规则类型:" prop="ruleType" class="keywords">
                         <el-select v-model="ruleForm.ruleType" placeholder="请选择规则类型" :disabled="disabledType">
                             <el-option label="一般规则" value="1"></el-option>
-                            <el-option label="接口规则" value="2"></el-option>
-                            <el-option label="自定义规则" value="3"></el-option>
+                            <!-- <el-option label="接口规则" value="2"></el-option>
+                            <el-option label="自定义规则" value="3"></el-option> -->
                         </el-select>
                         <el-tooltip class="item" effect="dark" content="列表翻页后,网址变化的为一般接口;列表翻页后,网址没变化的为接口规则。"
                             placement="top-start">
@@ -118,6 +118,7 @@ export default {
             activeId: '', // 被编辑的网站的id
             activeType: '', //被编辑网站的type
             disabled: true, //是否禁用
+            loading:true,
 
 
             // 分页器相关
@@ -161,6 +162,9 @@ export default {
                 page: this.page,
                 pageSize: this.pageSize,
             }).then(data => {
+                if(data.code==200){
+                    this.loading=false
+                }
                 console.log(data);
                 this.tableData = data.data.rep
                 this.total = data.data.count

+ 11 - 7
src/views/crawler/webCrawlerList.vue

@@ -43,20 +43,20 @@
 
             <el-row>
                 <template>
-                    <el-table class="my-table" :data="tableData" style="width: 100%">
+                    <el-table class="my-table" v-loading="loading" :data="tableData" style="width: 100%">
                         <el-table-column fixed prop="id" label="编号" width="80">
                         </el-table-column>
                         <el-table-column prop="title" label="资讯题目" width="230">
                         </el-table-column>
                         <el-table-column prop="oldtitle" label="原始资讯题目" width="230">
                         </el-table-column>
-                        <el-table-column prop="category.name" label="导航池名称" width="90">
+                        <el-table-column prop="category.name" label="导航池名称" width="120">
                         </el-table-column>
-                        <el-table-column prop="source" label="来源" width="180">
+                        <el-table-column prop="source" label="来源" width="120">
                         </el-table-column>
-                        <el-table-column label="导入状态" width="80" prop="state">
+                        <el-table-column label="导入状态" prop="state" width="100">
                         </el-table-column>
-                        <el-table-column prop="author" label="作者" width="80">
+                        <el-table-column prop="author" label="作者" width="90">
                         </el-table-column>
                         <el-table-column prop="created_at" label="采集时间" width="160">
                         </el-table-column>
@@ -128,6 +128,7 @@ export default {
             tableDivTitle: "任务规则列表",//表格标题
             // searchWebName: "", //搜索网站名称
             // dialogName:'关联导航池',
+            loading: true,
 
             //跳转传递的参数
             ruleId: "", //规则id
@@ -190,6 +191,9 @@ export default {
                 pageSize: this.pageSize
             }).then(data => {
                 console.log(data);
+                if (data.code == 200) {
+                    this.loading = false
+                }
                 this.total = data.data.count
                 this.tableData = data.data.rep
 
@@ -402,7 +406,7 @@ export default {
     }
 
     .searchBox {
-        margin-right: 100px;
+        margin-right: 30px;
 
         .searchTitle {
             padding-bottom: 10px;
@@ -429,7 +433,7 @@ export default {
             height: 38px;
             border: none;
             border-radius: 8px;
-            padding: 0 30px;
+            padding: 0 20px;
         }
 
         .search {

+ 211 - 25
src/views/crawler/webCrawlerListEdit.vue

@@ -26,32 +26,34 @@
                             <el-option v-for="item in options" :key="item.value" :label="item.label"
                                 :value="item.value">
                             </el-option>
-
                         </el-select>
                     </el-form-item>
                     <!-- 缩略图 -->
-                    <el-form-item label="缩略图:" prop="imgSrc">
+                    <el-form-item label="缩略图:" prop="imgSrc" :label-width="formLabelWidth"
+                        :class="['custom-form-item']" class="custom-align-right">
                         <div class="uploaderBox">
+                            <!--图片上传组件 start ------------------------------------------------------------>
                             <div class="avatar-upload-container" @mouseenter="hovering = true"
                                 @mouseleave="hovering = false">
                                 <!-- 上传组件 -->
                                 <el-upload class="avatar-uploader" action="#" :show-file-list="false"
                                     :before-upload="beforeAvatarUpload">
                                     <!-- 预览图片 -->
-                                    <img v-if="imgSrc" :src="imgSrc" class="avatar">
+                                    <img v-if="logoUrl" :src="logoUrl" class="avatar">
                                     <div v-else class="chooseImgDiv">
                                         <div>
                                             <img src="@/assets/public/upload/noImage.png">
-                                            <div>选择缩略图</div>
+                                            <div>选择图</div>
                                         </div>
                                     </div>
+                                    <input type="hidden" name="logo" v-model="ruleForm.imgSrc">
                                 </el-upload>
                                 <!-- 删除按钮,当鼠标悬浮时显示 -->
-                                <div v-if="hovering && iconSrc" class="delete-button" @click="handleDelete">
+                                <div v-if="hovering && logoUrl" class="delete-button" @click="handleDelete">
                                     <i class="el-icon-delete"></i>
                                 </div>
                             </div>
-                            <p class="imgTips">图片长宽比例为16:9, 大小不能超过500K。</p>
+                            <!--图片上传组件 end ------------------------------------------------------------>
                         </div>
                     </el-form-item>
                     <el-form-item label="资讯关键词:" prop="keywords" class="keywords">
@@ -73,30 +75,26 @@
                             <i class="el-icon-warning"></i>
                         </el-tooltip>
                     </el-form-item>
-                    <!-- 富文本 -->
-                    <!-- <div class="QuillTitle">
-                        <span>* </span>资讯内容
+                    <!-- 富文本编辑器配置 -->
+                    <div class="QuillTitle">
+                        <span>* </span>资讯内容:
                         <div @click="toggleSourceMode" class="QuillModelBtn">
                             {{ showHtml ? '切换到编辑模式' : '切换到源码模式' }}
                         </div>
                     </div>
-                    <el-form-item label="" prop="content">
+                    <el-form-item label="">
                         <div class="editor-container">
                             <div v-if="showHtml">
                                 <textarea v-model="editorHtml" style="width: 100%; height: 400px;"></textarea>
                             </div>
                             <div v-else>
-                                <quill-editor ref="quillEditor" v-model="form.content" :options="editorOptions"
+                                <quill-editor ref="quillEditor" v-model="ruleForm.content" :options="editorOptions"
                                     class="my-quill-editor" />
-                            </div> -->
+                            </div>
                             <!-- 多图上传隐藏的input -->
-                            <!-- <input type="file" ref="multiFileInput" @change="handleMultipleFiles" multiple hidden
+                            <input type="file" ref="multiFileInput" @change="handleMultipleFiles" multiple hidden
                                 accept="image/jpeg, image/png" />
                         </div>
-                    </el-form-item> -->
-                    <el-form-item label="资讯内容:" prop="content">
-                        <el-input type="textarea" v-model="ruleForm.content" placeholder="请输入资讯内容..."
-                            maxlength="5000"></el-input>
                     </el-form-item>
                     <el-form-item label="作者:" prop="author">
                         <el-input v-model="ruleForm.author" placeholder="请输入发布资讯的作者"></el-input>
@@ -123,7 +121,7 @@
                             <!-- <el-checkbox v-model="disclaimer" disabled="disabled"></el-checkbox> -->
                         </div>
                         <div class="disclaimerText">
-                            本文来源于网络转载,仅供学习交流使用,不构成商业目的。版权归作者所有,如涉及原作者所有,如涉及作品内容、版权和其他问题,请在30日内与本站联系,我们将在第一时间处理。</div>
+                            本文来源于网络转载,仅供学习交流使用,不构成商业目的。版权归原作者所有,如涉及作品内容、版权和其它问题,请在30日内与本网联系,我们将在第一时间处理。</div>
                     </div>
                 </el-form>
             </el-row>
@@ -152,6 +150,9 @@ import Quill from 'quill';  // 引入 Quill
 import Delta from 'quill-delta'; // 引入 Delta,用于手动修改文档
 import { options } from 'dropzone';
 
+// 注册 Image Resize 模块
+Quill.register('modules/imageResize', ImageResize);
+
 export default {
     components: {
         quillEditor,
@@ -170,9 +171,10 @@ export default {
             ruleId: '',
             source: '',
 
-            // beforeAvatarUpload: '',
-            imgSrc: '',
-            hovering: '',
+            //3.4 上传logo图片
+            logoUrl: '',
+            hovering: false, // 鼠标悬浮状态 悬浮时显示删除
+            
             options: [
                 {
                     value: 0,
@@ -332,7 +334,6 @@ export default {
         }
     },
     methods: {
-
         beforeAvatarUpload(file) {
             const isJPG = file.type === 'image/jpeg';
             const isPNG = file.type === 'image/png';
@@ -351,8 +352,8 @@ export default {
             formData.append('file', file);
 
             this.$store.dispatch('pool/uploadFile', formData).then(res => {
-                this.imgUrl = res.data.imgUrl;//显示缩略图
-                this.form.imgurl = res.data.imgUrl;//提供表单地址
+                this.logoUrl = res.data.imgUrl;//显示缩略图
+                this.ruleForm.imgSrc = res.data.imgUrl;//提供表单地址
                 console.log(res.data.imgUrl)
             }).catch(() => {
                 this.$message({
@@ -364,6 +365,10 @@ export default {
             // 阻止默认的上传行为
             return false;
         },
+        handleDelete() {
+            // 删除图片
+            this.logoUrl = ''; // 清空图片 URL
+        },
         // 提交表单
         goSubmit() {
             updateInfo({
@@ -410,7 +415,112 @@ export default {
         handleChange(value) {
             console.log(value);
             this.ruleForm.count = value
+        },
+
+        //4.富文本编辑器 start ------------------------------------------------------------>
+        //4.1 编辑器点击上传图片
+        handleImageClick() {
+            this.$refs.multiFileInput.click(); // 打开文件选择框
+        },
+        handleMultipleFiles(event) {
+            const files = event.target.files;
+            if (files.length) {
+                this.uploadMultipleImages(files); // 处理多图片上传
+            }
+        },
+        uploadMultipleImages(files) {
+            const uploadPromises = [];
+            for (let i = 0; i < files.length; i++) {
+                uploadPromises.push(this.uploadImage(files[i]));
+            }
+
+            Promise.all(uploadPromises).then(urls => {
+                const quillEditor = this.$refs.quillEditor.quill;
+                urls.forEach(url => {
+                    const range = quillEditor.getSelection();
+                    quillEditor.insertEmbed(range.index, 'image', url); // 在编辑器中插入图片
+                });
+            }).catch(error => {
+                this.$message.error('图片上传失败,请重试!');
+            });
+        },
+        uploadImage(file) {
+            const formData = new FormData();
+            formData.append('file', file);
+            return this.$store.dispatch('pool/uploadFile', formData)
+                .then(res => {
+                    if (res && res.data && res.data.imgUrl) {
+                        return res.data.imgUrl;
+                    } else {
+                        throw new Error('图片上传失败');
+                    }
+                })
+                .catch(error => {
+                    this.$message.error('图片上传失败,请重试!');
+                    throw error;
+                });
+        },
+
+        //4.2 图片粘贴上传
+        // 处理从网页粘贴的图片 URL
+        handleImageFromWeb(imageUrl) {
+            return new Promise((resolve) => {
+                console.log('开始下载图片:', imageUrl);
+
+                this.fetchImageAsBlob(imageUrl).then((blob) => {
+                    console.log('图片已下载为 Blob:', blob);
+
+                    const formData = new FormData();
+                    formData.append('file', blob, 'image.jpg');
+
+                    this.$store.dispatch('pool/uploadFile', formData).then((res) => {
+                        if (res && res.data && res.data.imgUrl) {
+                            console.log('图片上传成功:', res.data.imgUrl);
+                            resolve(res.data.imgUrl);
+                        } else {
+                            console.log('图片上传失败,保留原 URL:', imageUrl);
+                            resolve(imageUrl);
+                        }
+                    }).catch((error) => {
+                        console.error('图片上传时出现错误:', error);
+                        resolve(imageUrl);
+                    });
+                }).catch((error) => {
+                    console.error('图片下载失败:', error);
+                    resolve(imageUrl);
+                });
+            });
+        },
+        fetchImageAsBlob(url) {
+            return fetch(url)
+                .then(response => {
+                    if (!response.ok) {
+                        throw new Error('Failed to fetch image');
+                    }
+                    return response.blob();
+                });
+        },
+        //编辑源码
+        toggleSourceMode() {
+            if (!this.showHtml) {
+                // 切换到源码模式,将编辑器内容同步到 textarea 中
+                this.editorHtml = this.$refs.quillEditor.quill.root.innerHTML;
+                this.showHtml = true; // 显示 textarea
+            } else {
+                // 切换回富文本模式,将 textarea 内容同步回编辑器
+                this.showHtml = false; // 显示 Quill 编辑器
+
+                // Quill 编辑器可能被销毁,所以使用 $nextTick 确保 DOM 渲染完成后再操作编辑器
+                this.$nextTick(() => {
+                    if (this.$refs.quillEditor) {
+                        this.$refs.quillEditor.quill.root.innerHTML = this.editorHtml;
+                    } else {
+                        console.error('Quill 编辑器实例未找到');
+                    }
+                });
+            }
         }
+        //富文本编辑器 end ------------------------------------------------------------>
     },
     mounted() {
         this.ruleId = this.$route.query.ruleId
@@ -428,7 +538,7 @@ export default {
             this.ruleForm.url = data.data.linkurl
             this.ruleForm.name = data.data.category //导航池名称
             this.ruleForm.grade = data.data.level
-            this.ruleForm.imgSrc = data.data.imgurl
+            this.logoUrl = data.data.imgurl
             this.ruleForm.keywords = data.data.keyword
             this.ruleForm.desc = data.data.introduce
             this.ruleForm.content = data.data.content  //内容
@@ -437,6 +547,42 @@ export default {
             this.ruleForm.source = data.data.source
             this.ruleForm.link = data.data.copyfrom
         })
+
+        //复制内容到富文本 start ------------------------------------------------------------>
+        this.$nextTick(() => {
+            const quillEditor = this.$refs.quillEditor.quill;
+
+            if (quillEditor) {
+                console.log('Quill 编辑器已初始化');
+
+                // 在粘贴事件触发时,记录所有 img 的 src
+                quillEditor.clipboard.addMatcher(Node.ELEMENT_NODE, (node, delta) => {
+                    if (node.tagName === 'IMG') {
+                        const imageUrl = node.getAttribute('src');
+                        console.log('检测到粘贴的图片 URL:', imageUrl);
+
+                        if (imageUrl && !imageUrl.startsWith('data:') && !imageUrl.startsWith('file://')) {
+                            // 先处理图片上传
+                            this.handleImageFromWeb(imageUrl).then((uploadedImageUrl) => {
+                                // 查找编辑器中所有 img 标签并替换 src
+                                const imgs = quillEditor.root.querySelectorAll('img');
+                                imgs.forEach((img) => {
+                                    if (img.getAttribute('src') === imageUrl) {
+                                        img.setAttribute('src', uploadedImageUrl);  // 替换 src
+                                        console.log('图片 src 已替换为:', uploadedImageUrl);
+                                    }
+                                });
+                            });
+                        }
+                    }
+                    return delta;  // 返回原始 delta
+                });
+            } else {
+                console.error('Quill 初始化失败');
+            }
+
+        });
+        //复制富文本 end ------------------------------------------------------------>
     }
 }
 </script>
@@ -447,6 +593,42 @@ p {
     margin: 0;
 }
 
+//文本编辑器
+.QuillTitle {
+    line-height: 36px;
+    font-size: 14px;
+    color: #606266;
+    font-weight: bold;
+    padding-left: 30px;
+
+    span {
+        color: #ff4949
+    }
+
+    .QuillModelBtn {
+        display: inline-block;
+        margin-left: 10px;
+        font-size: 12px;
+        color: #999;
+        cursor: pointer;
+    }
+}
+
+.editor-container {
+    // height: 420px;
+    height: 375px;
+    padding-bottom: 20px;
+    background-color: #fff;
+}
+
+.my-quill-editor {
+    height: 320px;
+}
+
+.ql-editor {
+    height: 320px;
+}
+
 .layerBox {
     padding: 30px 20px;
     position: relative;
@@ -550,6 +732,10 @@ p {
 
     //缩略图
     .uploaderBox {
+        .avatar {
+            width: 140px;
+            height: auto;
+        }
 
         .chooseImgDiv {
             background-color: #fff;

+ 312 - 194
src/views/crawler/webRule.vue

@@ -23,7 +23,7 @@
             <button class="btn" @click="addCrawlerRule">设置采集规则</button>
             <el-row>
                 <template>
-                    <el-table class="my-table" :data="tableData" style="width: 100%">
+                    <el-table class="my-table" v-loading="loading" :data="tableData" style="width: 100%">
                         <el-table-column fixed prop="id" label="编号" width="100">
                         </el-table-column>
                         <el-table-column prop="name" label="任务规则名" width="">
@@ -78,7 +78,7 @@
 
         <!-- 弹出框 -->
         <el-dialog :title="dialogName" :visible.sync="dialogTableVisible" width="50%" :close-on-click-modal="false">
-            <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="120px" class="demo-ruleForm">
+            <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="130px" class="demo-ruleForm">
                 <div class="one" v-show="this.webType == 1">
                     <div class="dialogText">
                         <el-form-item label="任务规则名:" prop="ruleName" class="keywords">
@@ -99,17 +99,17 @@
                         </el-form-item>
                         <div class="pageTwo">
                             <el-form-item label="第2页网址:" required class="keywords">
-                                <el-col :span="6">
+                                <el-col :span="8">
                                     <el-form-item prop="second_start">
                                         <el-input v-model="ruleForm.second_start" placeholder="请输入网址开头"></el-input>
                                     </el-form-item>
                                 </el-col>
-                                <el-col :span="6">
+                                <el-col :span="8">
                                     <el-form-item prop="second_num">
                                         <el-input v-model="ruleForm.second_num" placeholder="请输入代码页数"></el-input>
                                     </el-form-item>
                                 </el-col>
-                                <el-col :span="6" class="el_col_6_end">
+                                <el-col :span="8" class="el_col_6_end">
                                     <el-form-item prop="second_end">
                                         <el-input v-model="ruleForm.second_end" placeholder="请输入网址结束字符串"
                                             class="lastInput"></el-input>
@@ -122,9 +122,6 @@
                                     </div>
                                     <i class="el-icon-warning"></i>
                                 </el-tooltip>
-                                <!-- <p class="tips" v-show="!this.ruleForm.second_start">请输入第2页网址</p>
-                                <p class="tips" v-show="!this.ruleForm.second_num">请输入第2页网址</p>
-                                <p class="tips" v-show="!this.ruleForm.second_end">请输入第2页网址</p> -->
                             </el-form-item>
                         </div>
                         <el-form-item label="起始代码:" prop="startCode" class="keywords">
@@ -132,8 +129,8 @@
                             <el-tooltip placement="top-start">
                                 <div slot="content">
                                     起始代码为文章列表第一篇文章上面几行代码中一段代码<br />
-                                    如<'div class="ej list box clear">,输入为 .ej list box clear 埴入输入框内<br />
-                                        如<'ul class="ej list box clear">,输入为 .ej list box clearul 埴入输入框内
+                                    如&lt;div class="ej list box clear">&lt;ul>&lt;li>,输入为 .ej list box clear ul li
+                                    埴入输入框内
                                 </div>
                                 <i class="el-icon-warning"></i>
                             </el-tooltip>
@@ -144,24 +141,48 @@
                     </div>
 
                     <div class="dialogText">
+                        <!-- start -->
+                        <el-form-item label="详情页网址前缀:" prop="webSite_start" class="keywords">
+                            <el-input v-model="ruleForm.webSite_start" placeholder=" 请输入详情页网址前缀"></el-input>
+                            <el-tooltip placement="top-start">
+                                <div slot="content">
+                                    网址1:https://www.mfa.gov.cn/web/wjdt_674879/gjldrhd_674881/202412/t20241205_11539110.shtml<br />
+                                    网址2:https://www.mfa.gov.cn/web/wjdt_674879/gjldrhd_674881/202412/t20241205_11539102.shtml<br />
+                                    详情页网址前缀为 https://www.mfa.gov.cn/web/wjdt_674879/gjldrhd_674881/202412/ 填入输入框<br />
+                                    (即重复代码之前的代码填入输入框)
+                                </div>
+                                <i class="el-icon-warning"></i>
+                            </el-tooltip>
+                        </el-form-item>
+                        <el-form-item label="详情页标签:" prop="" class="keywords">
+                            <el-input v-model="ruleForm.detailPage" placeholder=" 请输入详情页起始标签"></el-input>
+                            <el-tooltip placement="top-start">
+                                <div slot="content">
+                                    详情页两边有除资讯详情内容时,此项需要填写<br />
+                                    标签内容为&lt;div class="news_details">,详情页标签填入.news_details 填入框内
+                                </div>
+                                <i class="el-icon-warning"></i>
+                            </el-tooltip>
+                        </el-form-item>
+                        <!-- end -->
                         <el-form-item label="标题字符串:" prop="title" class="keywords">
-                            <el-input v-model="ruleForm.title" placeholder="请输入网站名称"></el-input>
+                            <el-input v-model="ruleForm.title" placeholder="请输入标题字符串"></el-input>
                             <el-tooltip placement="top-start">
                                 <div slot="content">
-                                    如标题代码:<'h1 class='news_art'>红枣滞销喂羊 电商帮忙促销</'h1>,标题字符串为 .news_art 填入输入框内<br />
-                                    如标题代码:<'h1 id='news at'>红枣滞销喂羊 电商帮忙促销</'h1>,标题字符串为 #news art 填入输入框内
+                                    如标题代码:&lt;h1 class='news_art'>红枣滞销喂羊 电商帮忙促销&lt;/h1>,标题字符串为 .news_art 填入输入框内<br />
+                                    如标题代码:&lt;h1 id='news at'>红枣滞销喂羊 电商帮忙促销&lt;/h1>,标题字符串为 #news art 填入输入框内
                                 </div>
                                 <i class="el-icon-warning"></i>
                             </el-tooltip>
                         </el-form-item>
                         <el-form-item label="内容字符串:" prop="content" class="keywords">
-                            <el-input v-model="ruleForm.content" placeholder="请输入标题字符串"></el-input>
+                            <el-input v-model="ruleForm.content" placeholder="请输入内容字符串"></el-input>
                             <el-tooltip placement="top-start">
                                 <div slot="content">
-                                    如内容代码:<'h1 class='news box'>
-                                        <' /h1>,内容字符串为.news box 填入输入框内<br />
-                                            如内容代码:<'h1 id='news_box'>
-                                                <' /h1>,内容字符串为 #news_box 填入输入框内
+                                    如内容代码:&lt;h1 class='news box'>
+                                    &lt;/h1>,内容字符串为.news box 填入输入框内<br />
+                                    如内容代码:&lt;h1 id='news_box'>
+                                    &lt;/h1>,内容字符串为 #news_box 填入输入框内
                                 </div>
                                 <i class="el-icon-warning"></i>
                             </el-tooltip>
@@ -262,7 +283,7 @@
 
                 <div class="three" v-show="this.webType == 3">
                     <div class="dialogText">
-                        <el-form-item label="任务规则名:" prop="ruleName" class="keywords">
+                        <el-form-item label="任务规则名:" prop="" class="keywords">
                             <el-input v-model="ruleForm.ruleName" placeholder="请输入任务规则名"></el-input>
                             <el-tooltip class="item" effect="dark" content="任务规则名,如中国农村网-时政要闻" placement="top-start">
                                 <i class="el-icon-warning"></i>
@@ -277,8 +298,9 @@
                 </div>
 
                 <div class="dialogBtn">
-                    <button class="cancel" @click="saveForm">保存</button>
-                    <button class="submit" @click="submitForm">确定</button>
+                    <el-button class="cancel" @click="saveForm">保存</el-button>
+                    <el-button type="primary" class="submit" :loading="submitDisabled"
+                        @click="submitForm('ruleForm')">确定</el-button>
                 </div>
             </el-form>
         </el-dialog>
@@ -300,139 +322,114 @@ export default {
     },
     data() {
         const validateCollect = (rule, value, callback) => {
-            if (/\s/.test(value)) {
-                callback(new Error('输入的文字包含空格,请删除空格'))
-            }
-            else if (value.length == 0) {
+            // if (/\s/.test(value)) {
+            //     callback(new Error('输入的文字包含空格,请删除空格'))
+            // }else 
+            if (value.length == 0) {
                 callback(new Error('请输入请求网址'))
             } else {
                 callback()
             }
         }
         const validateStartLabel = (rule, value, callback) => {
-            // const value = input.value;
-            if (/\s/.test(value)) {
-                callback(new Error('输入的文字包含空格,请删除空格'))
-            } else if (value.length == 0) {
+            if (value.length == 0) {
                 callback(new Error('请输入列表开始标签'))
             } else {
                 callback()
             }
         }
         const validateRuleName = (rule, value, callback) => {
-            // const value = input.value;
-            if (/\s/.test(value)) {
-                callback(new Error('输入的文字包含空格,请删除空格'))
-            } else if (value.length == 0) {
+            if (value.length == 0) {
                 callback(new Error('请输入任务规则名'))
             } else {
                 callback()
             }
         }
         const validateFirst_url = (rule, value, callback) => {
-            // const value = input.value;
-            if (/\s/.test(value)) {
-                callback(new Error('输入的文字包含空格,请删除空格'))
-            } else if (value.length == 0) {
+            if (value.length == 0) {
                 callback(new Error('请输入第1页网址'))
             } else {
                 callback()
             }
         }
         const validateStartCode = (rule, value, callback) => {
-            // const value = input.value;
-            if (/\s/.test(value)) {
-                callback(new Error('输入的文字包含空格,请删除空格'))
-            } else if (value.length == 0) {
+            if (value.length == 0) {
                 callback(new Error('请输入起始代码'))
             } else {
                 callback()
             }
         }
         const validateEndCode = (rule, value, callback) => {
-            // const value = input.value;
-            if (/\s/.test(value)) {
-                callback(new Error('输入的文字包含空格,请删除空格'))
-            } else if (value.length == 0) {
+            if (value.length == 0) {
                 callback(new Error('请输入结束页数'))
             } else {
                 callback()
             }
         }
         const validatTitle = (rule, value, callback) => {
-            // const value = input.value;
-            if (/\s/.test(value)) {
-                callback(new Error('输入的文字包含空格,请删除空格'))
-            } else if (value.length == 0) {
+            if (value.length == 0) {
                 callback(new Error('请输入标题字符串'))
             } else {
                 callback()
             }
         }
         const validatcontent = (rule, value, callback) => {
-            // const value = input.value;
-            if (/\s/.test(value)) {
-                callback(new Error('输入的文字包含空格,请删除空格'))
-            } else if (value.length == 0) {
+            if (value.length == 0) {
                 callback(new Error('请输入内容字符串'))
             } else {
                 callback()
             }
         }
         const validatsource = (rule, value, callback) => {
-            // const value = input.value;
-            if (/\s/.test(value)) {
-                callback(new Error('输入的文字包含空格,请删除空格'))
-            } else if (value.length == 0) {
+            if (value.length == 0) {
                 callback(new Error('请输入来源字符串'))
             } else {
                 callback()
             }
         }
         const validatauthor = (rule, value, callback) => {
-            // const value = input.value;
-            if (/\s/.test(value)) {
-                callback(new Error('输入的文字包含空格,请删除空格'))
-            } else if (value.length == 0) {
+            if (value.length == 0) {
                 callback(new Error('请输入作者字符串'))
             } else {
                 callback()
             }
         }
         const validatauthorName = (rule, value, callback) => {
-            // const value = input.value;
-            if (/\s/.test(value)) {
-                callback(new Error('输入的文字包含空格,请删除空格'))
-            } else if (value.length == 0) {
+            if (value.length == 0) {
                 callback(new Error('请输入作者替换名称'))
             } else {
                 callback()
             }
         }
         const validatparameter = (rule, value, callback) => {
-            // const value = input.value;
-            if (/\s/.test(value)) {
-                callback(new Error('输入的文字包含空格,请删除空格'))
-            } else if (value.length == 0) {
+            if (value.length == 0) {
                 callback(new Error('请输入接口参数'))
             } else {
                 callback()
             }
         }
         const validatsecondWeb = (rule, value, callback) => {
-            // const value = input.value;
             if (value.length == 0) {
                 callback(new Error('请输入第2页网址'))
             } else {
                 callback()
             }
         }
+        const validat_webSite_start = (rule, value, callback) => {
+            if (value.length == 0) {
+                callback(new Error('请输入详情页网址前缀'))
+            } else {
+                callback()
+            }
+        }
         return {
             tableDivTitle: "任务规则列表",  //表格标题
             dialogTableVisible: false, //弹窗是否显示
             dialogName: '设置采集规则', //弹窗名称
             dialogBoo: 'add',//判断当前是添加还是编辑
             searchRuleName: '',  //任务规则名
+            loading: true,  //表格加载中
+            submitDisabled: false, //添加按钮防抖
 
             // 建立网站页面传递的参数
             webId: '',
@@ -464,11 +461,13 @@ export default {
                 endPage: '', //结束页数
                 title: '',  //标题字符串
                 content: '', //内容字符串
+                detailPage: '', //详情页标签
+                webSite_start: '',  //详情页网址前缀
                 source: '', // 来源字符串
                 author: '', // 作者字符串
                 authorName: '', // 作者替换名称
                 parameter: '',  //接口类2 接口参数
-                diy_rule: '' //自定义类
+                diy_rule: '', //自定义类
             },
 
             rules: {  //规则
@@ -480,9 +479,11 @@ export default {
                 // second_start:[{ required: true, trigger: 'blur', validator: validatsecondWeb }],
                 // second_num:[{ required: true, trigger: 'blur', validator: validatsecondWeb }],
                 // second_end:[{ required: true, trigger: 'blur', validator: validatsecondWeb }],
-                second_start:[{ required: true, trigger: 'blur', message: '请输入网址开头' }],
-                second_num:[{ required: true, trigger: 'blur', message: '请输入代码页数' }],
-                second_end:[{ required: true, trigger: 'blur', message: '请输入网址结束字符串' }],
+                second_start: [{ required: true, trigger: 'blur', message: '请输入网址开头' }],
+                second_num: [{ required: true, trigger: 'blur', message: '请输入代码页数' }],
+                second_end: [{ required: true, trigger: 'blur', message: '请输入网址结束字符串' }],
+
+                webSite_start: [{ required: true, trigger: 'blur', validator: validat_webSite_start }],
 
                 startCode: [{ required: true, trigger: 'blur', validator: validateStartCode }],
                 endPage: [{ required: true, trigger: 'blur', validator: validateEndCode }],
@@ -504,6 +505,9 @@ export default {
                 pageSize: this.pageSize,
                 page: this.page,
             }).then(data => {
+                if (data.code == 200) {
+                    this.loading = false
+                }
                 console.log(data.data.rep);
                 this.tableData = data.data.rep
                 this.total = data.data.count
@@ -601,22 +605,132 @@ export default {
             }
             if (this.webType) {
                 this.dialogTableVisible = true
-                this.ruleForm.ruleName = ''
-                this.ruleForm.first_url = ''
-                this.ruleForm.collect = ''
-                this.ruleForm.second_start = ''
-                this.ruleForm.second_num = ''
-                this.ruleForm.second_end = ''
-                this.ruleForm.startCode = ''
-                this.ruleForm.startLabel = ''
-                this.ruleForm.endPage = ''
-                this.ruleForm.title = ''
-                this.ruleForm.content = ''
-                this.ruleForm.source = ''
-                this.ruleForm.author = ''
-                this.ruleForm.authorName = ''
-                this.ruleForm.parameter = ''
-                this.ruleForm.diy_rule = ''
+                //任务规则名 ruleName
+                const ruleName = sessionStorage.getItem("ruleName");
+                if (ruleName !== null) {
+                    this.ruleForm.ruleName = ruleName
+                } else {
+                    this.ruleForm.ruleName = ''
+                }
+                //第1页网址  接口类的开始采集地址 first_url
+                const first_url = sessionStorage.getItem("first_url");
+                if (first_url !== null) {
+                    this.ruleForm.first_url = first_url
+                } else {
+                    this.ruleForm.first_url = ''
+                }
+                //接口类 采集地址 collect
+                const collect = sessionStorage.getItem("collect");
+                if (collect !== null) {
+                    this.ruleForm.collect = collect
+                } else {
+                    this.ruleForm.collect = ''
+                }
+                //第2页网址开头 second_start
+                const second_start = sessionStorage.getItem("second_start");
+                if (second_start !== null) {
+                    this.ruleForm.second_start = second_start
+                } else {
+                    this.ruleForm.second_start = ''
+                }
+                //第2页代码页数 second_num
+                const second_num = sessionStorage.getItem("second_num");
+                if (second_num !== null) {
+                    this.ruleForm.second_num = second_num
+                } else {
+                    this.ruleForm.second_num = ''
+                }
+                //第2页网址结束字符串 second_end
+                const second_end = sessionStorage.getItem("second_end");
+                if (second_end !== null) {
+                    this.ruleForm.second_end = second_end
+                } else {
+                    this.ruleForm.second_end = ''
+                }
+                //startCode: '', 起始代码
+                const startCode = sessionStorage.getItem("startCode");
+                if (startCode !== null) {
+                    this.ruleForm.startCode = startCode
+                } else {
+                    this.ruleForm.startCode = ''
+                }
+                // startLabel: '',列表开始标签
+                const startLabel = sessionStorage.getItem("startLabel");
+                if (startLabel !== null) {
+                    this.ruleForm.startLabel = startLabel
+                } else {
+                    this.ruleForm.startLabel = ''
+                }
+                //endPage: '', //结束页数
+                const endPage = sessionStorage.getItem("endPage");
+                if (endPage !== null) {
+                    this.ruleForm.endPage = endPage
+                } else {
+                    this.ruleForm.endPage = ''
+                }
+                //title: '',  //标题字符串
+                const title = sessionStorage.getItem("title");
+                if (title !== null) {
+                    this.ruleForm.title = title
+                } else {
+                    this.ruleForm.title = ''
+                }
+                // content: '', //内容字符串
+                const content = sessionStorage.getItem("content");
+                if (content !== null) {
+                    this.ruleForm.content = content
+                } else {
+                    this.ruleForm.content = ''
+                }
+                // detailPage: '', //详情页标签
+                const detailPage = sessionStorage.getItem("detailPage");
+                if (detailPage !== null) {
+                    this.ruleForm.detailPage = detailPage
+                } else {
+                    this.ruleForm.detailPage = ''
+                }
+                // webSite_start: '',  //详情页网址前缀
+                const webSite_start = sessionStorage.getItem("webSite_start");
+                if (webSite_start !== null) {
+                    this.ruleForm.webSite_start = webSite_start
+                } else {
+                    this.ruleForm.webSite_start = ''
+                }
+                //source: '', // 来源字符串
+                const source = sessionStorage.getItem("source");
+                if (source !== null) {
+                    this.ruleForm.source = source
+                } else {
+                    this.ruleForm.source = ''
+                }
+                //author: '', // 作者字符串
+                const author = sessionStorage.getItem("author");
+                if (author !== null) {
+                    this.ruleForm.author = author
+                } else {
+                    this.ruleForm.author = ''
+                }
+                //authorName: '', // 作者替换名称
+                const authorName = sessionStorage.getItem("authorName");
+                if (authorName !== null) {
+                    this.ruleForm.authorName = authorName
+                } else {
+                    this.ruleForm.authorName = ''
+                }
+                //parameter: '',  //接口类2 接口参数
+                const parameter = sessionStorage.getItem("parameter");
+                if (parameter !== null) {
+                    this.ruleForm.parameter = parameter
+                } else {
+                    this.ruleForm.parameter = ''
+                }
+                //diy_rule: '',自定义类
+                const diy_rule = sessionStorage.getItem("diy_rule");
+                if (diy_rule !== null) {
+                    this.ruleForm.diy_rule = diy_rule
+                } else {
+                    this.ruleForm.diy_rule = ''
+                }
             }
         },
         //1.9 编辑采集规则
@@ -650,6 +764,8 @@ export default {
                 this.ruleForm.authorName = val.writer
                 this.ruleForm.parameter = val.parameter
                 this.ruleForm.diy_rule = val.diy_rule
+                this.ruleForm.webSite_start = val.con_url
+                this.ruleForm.detailPage = val.con_start
 
             } else if (this.webType == 2) {
                 this.dialogBoo = "update"
@@ -680,10 +796,8 @@ export default {
                 this.dialogBoo = "update"
                 this.dialogTableVisible = true
                 this.ruleForm.ruleName = val.name
-                this.ruleForm.diy_rule=val.diy_rule
+                this.ruleForm.diy_rule = val.diy_rule
             }
-
-
         },
         //采集
         goCollect(id, status) {
@@ -722,10 +836,22 @@ export default {
                 type: 'error'
             })
         },
-
+        // ab(){
+        //     let name = this.ruleForm.ruleName.trim();
+        //     console.log(name)
+        // },
         // 弹出层相关方法
         // 提交表单
-        submitForm() {
+        submitForm(formName) {
+            this.$refs[formName].validate((valid) => {
+                if (valid) {
+                    console.log('submit!');
+                    this.submitDisabled = true
+                } else {
+                    console.log('error submit!!');
+                    return false;
+                }
+            });
             //添加
             if (this.dialogBoo == 'add') {
                 if (this.webType == 1) {
@@ -734,31 +860,29 @@ export default {
                             name: this.ruleForm.ruleName,
                             web_id: this.webId,
                             type: this.webType,
-                            first_url: this.ruleForm.first_url,//规则型1:第1页网址  接口型2:开始采集地址
-                            second_start: this.ruleForm.second_start,//规则型1:第2页网址开头
-                            second_num: this.ruleForm.second_num,//规则型1:第2页代码页数
-                            second_end: this.ruleForm.second_end,//规则型1:第2页网址结束字符串
-                            start: this.ruleForm.startCode, //规则型1:列表标签类名  接口型2:列表标签
-                            title: this.ruleForm.title, //规则型1:标题标签类名  接口型2:标题标签
-                            content: this.ruleForm.content,//规则型1:内容标签类名  接口型2:内容标签
+                            first_url: this.ruleForm.first_url.trim(),//规则型1:第1页网址  接口型2:开始采集地址
+                            second_start: this.ruleForm.second_start.trim(),//规则型1:第2页网址开头
+                            second_num: this.ruleForm.second_num.trim(),//规则型1:第2页代码页数
+                            second_end: this.ruleForm.second_end.trim(),//规则型1:第2页网址结束字符串
+                            start: this.ruleForm.startCode.trim(), //规则型1:列表标签类名  接口型2:列表标签
+                            title: this.ruleForm.title.trim(), //规则型1:标题标签类名  接口型2:标题标签
+                            content: this.ruleForm.content.trim(),//规则型1:内容标签类名  接口型2:内容标签
                             source: this.ruleForm.source, //规则型1:来源标签类名  接口型2:来源标签
                             // writer_class: this.ruleForm.author,//规则型1:作者标签类名  接口型2:作者标签
-                            writer: this.ruleForm.authorName,//规则型1:接口型2:作者默认名称(若未采集到则设置默认作者)
-                            end_pagenum: this.ruleForm.endPage//规则型1:列表页结束页码
+                            writer: this.ruleForm.authorName.trim(),//规则型1:接口型2:作者默认名称(若未采集到则设置默认作者)
+                            end_pagenum: this.ruleForm.endPage,//规则型1:列表页结束页码
+                            con_url: this.ruleForm.webSite_start.trim(), //详情页标签
+                            con_start: this.ruleForm.detailPage, //详情页网址前缀
                         }).then(data => {
                             this.getData()
                             console.log(data);
                             if (data.code == 200) {
                                 this.dialogTableVisible = false
+                                this.submitDisabled = false
                                 this.$message({
                                     message: '添加成功',
                                     type: 'success'
                                 })
-                            } else if (data.code == 0) {
-                                this.$message({
-                                    message: data.message,
-                                    type: 'error'
-                                })
                             }
                         })
                     } else {
@@ -766,31 +890,29 @@ export default {
                             name: this.ruleForm.ruleName,
                             web_id: this.webId,
                             type: this.webType,
-                            first_url: this.ruleForm.first_url,//规则型1:第1页网址  接口型2:开始采集地址
-                            second_start: this.ruleForm.second_start,//规则型1:第2页网址开头
-                            second_num: this.ruleForm.second_num,//规则型1:第2页代码页数
-                            second_end: this.ruleForm.second_end,//规则型1:第2页网址结束字符串
-                            start: this.ruleForm.startCode, //规则型1:列表标签类名  接口型2:列表标签
-                            title: this.ruleForm.title, //规则型1:标题标签类名  接口型2:标题标签
-                            content: this.ruleForm.content,//规则型1:内容标签类名  接口型2:内容标签
+                            first_url: this.ruleForm.first_url.trim(),//规则型1:第1页网址  接口型2:开始采集地址
+                            second_start: this.ruleForm.second_start.trim(),//规则型1:第2页网址开头
+                            second_num: this.ruleForm.second_num.trim(),//规则型1:第2页代码页数
+                            second_end: this.ruleForm.second_end.trim(),//规则型1:第2页网址结束字符串
+                            start: this.ruleForm.startCode.trim(), //规则型1:列表标签类名  接口型2:列表标签
+                            title: this.ruleForm.title.trim(), //规则型1:标题标签类名  接口型2:标题标签
+                            content: this.ruleForm.content.trim(),//规则型1:内容标签类名  接口型2:内容标签
                             source: this.ruleForm.source, //规则型1:来源标签类名  接口型2:来源标签
                             writer_class: this.ruleForm.author,//规则型1:作者标签类名  接口型2:作者标签
-                            writer: this.ruleForm.authorName,//规则型1:接口型2:作者默认名称(若未采集到则设置默认作者)
-                            end_pagenum: this.ruleForm.endPage//规则型1:列表页结束页码
+                            writer: this.ruleForm.authorName.trim(),//规则型1:接口型2:作者默认名称(若未采集到则设置默认作者)
+                            end_pagenum: this.ruleForm.endPage,//规则型1:列表页结束页码
+                            con_url: this.ruleForm.webSite_start.trim(), //详情页标签
+                            con_start: this.ruleForm.detailPage, //详情页网址前缀
                         }).then(data => {
                             this.getData()
                             console.log(data);
                             if (data.code == 200) {
                                 this.dialogTableVisible = false
+                                this.submitDisabled = false
                                 this.$message({
                                     message: '添加成功',
                                     type: 'success'
                                 })
-                            } else if (data.code == 0) {
-                                this.$message({
-                                    message: data.message,
-                                    type: 'error'
-                                })
                             }
                         })
                     }
@@ -800,29 +922,25 @@ export default {
                         name: this.ruleForm.ruleName,
                         web_id: this.webId,
                         type: this.webType,
-                        first_url: this.ruleForm.collect,//规则型1:第1页网址  接口型2:开始采集地址
-                        parameter: this.ruleForm.parameter,//接口型2:接口参数
-                        start: this.ruleForm.startLabel, //规则型1:列表标签类名  接口型2:列表标签
-                        title: this.ruleForm.title, //规则型1:标题标签类名  接口型2:标题标签
-                        content: this.ruleForm.content,//规则型1:内容标签类名  接口型2:内容标签
+                        first_url: this.ruleForm.collect.trim(),//规则型1:第1页网址  接口型2:开始采集地址
+                        parameter: this.ruleForm.parameter.trim(),//接口型2:接口参数
+                        start: this.ruleForm.startLabel.trim(), //规则型1:列表标签类名  接口型2:列表标签
+                        title: this.ruleForm.title.trim(), //规则型1:标题标签类名  接口型2:标题标签
+                        content: this.ruleForm.content.trim(),//规则型1:内容标签类名  接口型2:内容标签
                         source: this.ruleForm.source, //规则型1:来源标签类名  接口型2:来源标签
-                        writer_class: this.ruleForm.author,//规则型1:作者标签类名  接口型2:作者标签
+                        writer_class: this.ruleForm.author.trim(),//规则型1:作者标签类名  接口型2:作者标签
                         // writer: this.ruleForm.authorName,//规则型1:接口型2:作者默认名称(若未采集到则设置默认作者)
                     }).then(data => {
                         this.getData()
                         console.log(data);
                         if (data.code == 200) {
+                            this.submitDisabled = false
                             this.dialogTableVisible = false
                             this.$message({
                                 message: '添加成功',
                                 type: 'success'
                             })
                             this.ruleForm.authorName = ''
-                        } else if (data.code == 0) {
-                            this.$message({
-                                message: data.message,
-                                type: 'error'
-                            })
                         }
                     })
 
@@ -831,29 +949,25 @@ export default {
                         name: this.ruleForm.ruleName,
                         web_id: this.webId,
                         type: this.webType,
-                        first_url: this.ruleForm.collect,//规则型1:第1页网址  接口型2:开始采集地址
-                        parameter: this.ruleForm.parameter,//接口型2:接口参数
-                        start: this.ruleForm.startLabel, //规则型1:列表标签类名  接口型2:列表标签
-                        title: this.ruleForm.title, //规则型1:标题标签类名  接口型2:标题标签
-                        content: this.ruleForm.content,//规则型1:内容标签类名  接口型2:内容标签
+                        first_url: this.ruleForm.collect.trim(),//规则型1:第1页网址  接口型2:开始采集地址
+                        parameter: this.ruleForm.parameter.trim(),//接口型2:接口参数
+                        start: this.ruleForm.startLabel.trim(), //规则型1:列表标签类名  接口型2:列表标签
+                        title: this.ruleForm.title.trim(), //规则型1:标题标签类名  接口型2:标题标签
+                        content: this.ruleForm.content.trim(),//规则型1:内容标签类名  接口型2:内容标签
                         source: this.ruleForm.source, //规则型1:来源标签类名  接口型2:来源标签
                         // writer_class: this.ruleForm.author,//规则型1:作者标签类名  接口型2:作者标签
-                        writer: this.ruleForm.authorName,//规则型1:接口型2:作者默认名称(若未采集到则设置默认作者)
+                        writer: this.ruleForm.authorName.trim(),//规则型1:接口型2:作者默认名称(若未采集到则设置默认作者)
                     }).then(data => {
                         this.getData()
                         console.log(data);
                         if (data.code == 200) {
                             this.dialogTableVisible = false
+                            this.submitDisabled = false
                             this.$message({
                                 message: '添加成功',
                                 type: 'success'
                             })
                             this.ruleForm.author = ''
-                        } else if (data.code == 0) {
-                            this.$message({
-                                message: data.message,
-                                type: 'error'
-                            })
                         }
                     })
 
@@ -868,17 +982,12 @@ export default {
                         this.getData()
                         if (data.code == 200) {
                             this.dialogTableVisible = false
+                            this.submitDisabled = false
                             this.$message({
                                 message: '添加成功',
                                 type: 'success'
                             })
-                        } else if (data.code == 0) {
-                            this.$message({
-                                message: data.message,
-                                type: 'error'
-                            })
                         }
-
                     })
                 }
             }
@@ -897,31 +1006,29 @@ export default {
                         name: this.ruleForm.ruleName,
                         id: this.activeId,
                         type: this.webType,
-                        first_url: this.ruleForm.first_url,//规则型1:第1页网址  接口型2:开始采集地址
-                        second_start: this.ruleForm.second_start,//规则型1:第2页网址开头
-                        second_num: this.ruleForm.second_num,//规则型1:第2页代码页数
-                        second_end: this.ruleForm.second_end,//规则型1:第2页网址结束字符串
-                        start: this.ruleForm.startCode, //规则型1:列表标签类名  接口型2:列表标签
-                        title: this.ruleForm.title, //规则型1:标题标签类名  接口型2:标题标签
-                        content: this.ruleForm.content,//规则型1:内容标签类名  接口型2:内容标签
+                        first_url: this.ruleForm.first_url.trim(),//规则型1:第1页网址  接口型2:开始采集地址
+                        second_start: this.ruleForm.second_start.trim(),//规则型1:第2页网址开头
+                        second_num: this.ruleForm.second_num.trim(),//规则型1:第2页代码页数
+                        second_end: this.ruleForm.second_end.trim(),//规则型1:第2页网址结束字符串
+                        start: this.ruleForm.startCode.trim(), //规则型1:列表标签类名  接口型2:列表标签
+                        title: this.ruleForm.title.trim(), //规则型1:标题标签类名  接口型2:标题标签
+                        content: this.ruleForm.content.trim(),//规则型1:内容标签类名  接口型2:内容标签
                         source: this.ruleForm.source, //规则型1:来源标签类名  接口型2:来源标签
                         writer_class: this.ruleForm.author,//规则型1:作者标签类名  接口型2:作者标签
-                        writer: this.ruleForm.authorName,//规则型1:接口型2:作者默认名称(若未采集到则设置默认作者)
-                        end_pagenum: this.ruleForm.endPage//规则型1:列表页结束页码
+                        writer: this.ruleForm.authorName.trim(),//规则型1:接口型2:作者默认名称(若未采集到则设置默认作者)
+                        end_pagenum: this.ruleForm.endPage,//规则型1:列表页结束页码
+                        con_url: this.ruleForm.webSite_start.trim(), //详情页标签
+                        con_start: this.ruleForm.detailPage, //详情页网址前缀
                     }).then(data => {
                         this.getData()
                         console.log(data);
                         if (data.code == 200) {
                             this.dialogTableVisible = false
+                            this.submitDisabled = false
                             this.$message({
                                 message: '修改成功',
                                 type: 'success'
                             })
-                        } else if (data.code == 0) {
-                            this.$message({
-                                message: data.message,
-                                type: 'error'
-                            })
                         }
                     })
                 } else if (this.webType == 2 && this.radio == 'true') {
@@ -929,29 +1036,25 @@ export default {
                         name: this.ruleForm.ruleName,
                         id: this.activeId,
                         type: this.webType,
-                        first_url: this.ruleForm.collect,//规则型1:第1页网址  接口型2:开始采集地址
-                        parameter: this.ruleForm.parameter,//接口型2:接口参数
-                        start: this.ruleForm.startCode, //规则型1:列表标签类名  接口型2:列表标签
-                        title: this.ruleForm.title, //规则型1:标题标签类名  接口型2:标题标签
-                        content: this.ruleForm.content,//规则型1:内容标签类名  接口型2:内容标签
+                        first_url: this.ruleForm.collect.trim(),//规则型1:第1页网址  接口型2:开始采集地址
+                        parameter: this.ruleForm.parameter.trim(),//接口型2:接口参数
+                        start: this.ruleForm.startCode.trim(), //规则型1:列表标签类名  接口型2:列表标签
+                        title: this.ruleForm.title.trim(), //规则型1:标题标签类名  接口型2:标题标签
+                        content: this.ruleForm.content.trim(),//规则型1:内容标签类名  接口型2:内容标签
                         source: this.ruleForm.source, //规则型1:来源标签类名  接口型2:来源标签
-                        writer_class: this.ruleForm.author,//规则型1:作者标签类名  接口型2:作者标签
+                        writer_class: this.ruleForm.author.trim(),//规则型1:作者标签类名  接口型2:作者标签
                         // writer: this.ruleForm.authorName,//规则型1:接口型2:作者默认名称(若未采集到则设置默认作者)
                     }).then(data => {
                         this.getData()
                         console.log(data);
                         if (data.code == 200) {
                             this.dialogTableVisible = false
+                            this.submitDisabled = false
                             this.$message({
                                 message: '修改成功',
                                 type: 'success'
                             })
                             this.ruleForm.authorName = ""
-                        } else if (data.code == 0) {
-                            this.$message({
-                                message: data.message,
-                                type: 'error'
-                            })
                         }
                     })
                 } else if (this.webType == 2 && this.radio == 'false') {
@@ -960,29 +1063,25 @@ export default {
                         name: this.ruleForm.ruleName,
                         id: this.activeId,
                         type: this.webType,
-                        first_url: this.ruleForm.collect,//规则型1:第1页网址  接口型2:开始采集地址
-                        parameter: this.ruleForm.parameter,//接口型2:接口参数
-                        start: this.ruleForm.startCode, //规则型1:列表标签类名  接口型2:列表标签
-                        title: this.ruleForm.title, //规则型1:标题标签类名  接口型2:标题标签
-                        content: this.ruleForm.content,//规则型1:内容标签类名  接口型2:内容标签
+                        first_url: this.ruleForm.collect.trim(),//规则型1:第1页网址  接口型2:开始采集地址
+                        parameter: this.ruleForm.parameter.trim(),//接口型2:接口参数
+                        start: this.ruleForm.startCode.trim(), //规则型1:列表标签类名  接口型2:列表标签
+                        title: this.ruleForm.title.trim(), //规则型1:标题标签类名  接口型2:标题标签
+                        content: this.ruleForm.content.trim(),//规则型1:内容标签类名  接口型2:内容标签
                         source: this.ruleForm.source, //规则型1:来源标签类名  接口型2:来源标签
                         // writer_class: this.ruleForm.author,//规则型1:作者标签类名  接口型2:作者标签
-                        writer: this.ruleForm.authorName,//规则型1:接口型2:作者默认名称(若未采集到则设置默认作者)
+                        writer: this.ruleForm.authorName.trim(),//规则型1:接口型2:作者默认名称(若未采集到则设置默认作者)
                     }).then(data => {
                         this.getData()
                         console.log(data);
                         if (data.code == 200) {
                             this.dialogTableVisible = false
+                            this.submitDisabled = false
                             this.$message({
                                 message: '修改成功',
                                 type: 'success'
                             })
                             this.ruleForm.author = ""
-                        } else if (data.code == 0) {
-                            this.$message({
-                                message: data.message,
-                                type: 'error'
-                            })
                         }
                     })
                 } else if (this.webType == 3) {
@@ -996,15 +1095,11 @@ export default {
                         this.getData()
                         if (data.code == 200) {
                             this.dialogTableVisible = false
+                            this.submitDisabled = false
                             this.$message({
                                 message: '修改成功',
                                 type: 'success'
                             })
-                        } else if (data.code == 0) {
-                            this.$message({
-                                message: data.message,
-                                type: 'error'
-                            })
                         }
                     })
                 }
@@ -1013,6 +1108,24 @@ export default {
         //保存
         saveForm() {
             this.dialogTableVisible = false
+            sessionStorage.setItem('ruleName', this.ruleForm.ruleName); //任务规则名
+            sessionStorage.setItem('first_url', this.ruleForm.first_url); //第一页网址 
+            sessionStorage.setItem('collect', this.ruleForm.collect); //接口类 采集地址
+            sessionStorage.setItem('second_start', this.ruleForm.second_start); //第2页网址开头
+            sessionStorage.setItem('second_num', this.ruleForm.second_num); //第2页代码页数
+            sessionStorage.setItem('second_end', this.ruleForm.second_end);//第2页网址结束字符串
+            sessionStorage.setItem('startCode', this.ruleForm.startCode);  //起始代码
+            sessionStorage.setItem('startLabel', this.ruleForm.startLabel); //列表开始标签
+            sessionStorage.setItem('endPage', this.ruleForm.endPage); //结束页数
+            sessionStorage.setItem('title', this.ruleForm.title); //标题字符串
+            sessionStorage.setItem('content', this.ruleForm.content); //内容字符串
+            sessionStorage.setItem('detailPage', this.ruleForm.detailPage); //详情页标签
+            sessionStorage.setItem('webSite_start', this.ruleForm.webSite_start); //详情页网址前缀
+            sessionStorage.setItem('source', this.ruleForm.source); // 来源字符串
+            sessionStorage.setItem('author', this.ruleForm.author); // 作者字符串
+            sessionStorage.setItem('authorName', this.ruleForm.authorName); // 作者替换名称
+            sessionStorage.setItem('parameter', this.ruleForm.parameter); //接口类2 接口参数
+            sessionStorage.setItem('diy_rule', this.ruleForm.diy_rule); //自定义类
         },
         // 查看
         goLook(id, val) {
@@ -1208,12 +1321,17 @@ export default {
     background-color: #f5f7fb;
 
     .pageTwo {
+        ::v-deep .el-col-8 {
+            height: 32px;
+        }
+
         ::v-deep .el-col-6 {
             width: 31%;
             height: 32px;
-            margin-right: 24px;
+            margin-right: 23px;
         }
-        .el_col_6_end{
+
+        .el_col_6_end {
             margin-right: 0;
         }
 

+ 2 - 2
src/views/menu/menulist.vue

@@ -65,7 +65,7 @@
           <el-form-item label="父级菜单名称" :label-width="formLabelWidth" prop="pid_arr" class="custom-align-right" v-if="radio === '2'">
             <el-cascader :key="parentKey" v-model="form.pid_arr" :props="{checkStrictly:true}" :options="pidArrData" clearable></el-cascader>
           </el-form-item>
-          <el-form-item label="默认图标" :label-width="formLabelWidth" prop="icon" class="custom-align-right">
+          <el-form-item label="默认图标" :label-width="formLabelWidth" prop="icon" class="custom-align-right" v-if="radio == '1'">
              <!--图片上传组件 start ------------------------------------------------------------>
               <div class="uploaderBox">
                 <div class="avatar-upload-container" @mouseenter="hovering = true" @mouseleave="hovering = false">
@@ -88,7 +88,7 @@
               </div>
               <!--图片上传组件 end ------------------------------------------------------------>
           </el-form-item>
-          <el-form-item label="选中时图标" :label-width="formLabelWidth" prop="selected_icon" class="custom-align-right">
+          <el-form-item label="选中时图标" :label-width="formLabelWidth" prop="selected_icon" class="custom-align-right" v-if="radio == '1'">
             <!--图片上传组件 start ------------------------------------------------------------>
             <div class="uploaderBox">
               <div class="avatar-upload-container" @mouseenter="hoveringTwo = true" @mouseleave="hoveringTwo = false">

+ 18 - 4
src/views/news/creatNews.vue

@@ -123,7 +123,7 @@
               <el-input v-model="form.hits" autocomplete="off" placeholder="请输入浏览量"></el-input>
             </el-form-item>
             <el-form-item label="是否为原创:" prop="is_original" class="custom-align-right">
-              <el-radio-group v-model="form.is_original">
+              <el-radio-group v-model="form.is_original" @change="changeIsOriginal">
                 <el-radio :label="1">是</el-radio>
                 <el-radio :label="0">否</el-radio>
               </el-radio-group>
@@ -140,9 +140,15 @@
                   <img src="@/assets/public/check.png"/>同意《免责声明》:
                   <!-- <el-checkbox v-model="disclaimer" disabled="disabled"></el-checkbox> -->
                 </div>
-                <div class="disclaimerText">本文来源于网络转载,仅供学习交流使用,不构成商业目的。版权归作者所有,如涉及原作者所有,如涉及作品内容、版权和其他问题,请在30日内与本站联系,我们将在第一时间处理。</div>
+                <div class="disclaimerText">本文来源于网络转载,仅供学习交流使用,不构成商业目的。版权归原作者所有,如涉及作品内容、版权和其他问题,请在30日内与本站联系,我们将在第一时间处理。</div>
               </div>
             </div>
+            <div v-if="form.is_original==1">
+              <el-form-item label="来源链接:" prop="linkurl" class="custom-align-right">
+                <el-input v-model="form.linkurl" autocomplete="off" placeholder="请输入来源链接" disabled="disabled"></el-input>
+              </el-form-item>
+            </div>
+
             <el-form-item label="资讯状态:" class="custom-align-right" style="width: 100%;">
               <el-select v-model="form.status" placeholder="请选择..">
                 <el-option label="已发布" :value="1"></el-option>
@@ -454,9 +460,11 @@ export default {
         }else{  
           this.form.islink = false;
         }
+
         //不是原创的时候显示来源
         if(res.data.is_original==1){
           this.form.is_original = 1;
+          this.form.linkurl = "本网";
         }else{
           this.form.is_original = 0;
           this.$nextTick(() => {
@@ -468,8 +476,6 @@ export default {
           this.form.linkurl = res.data.linkurl;
         }
         
-
-
         // 回显导航池
         this.form.cat_arr_id = Array.isArray(res.data.cat_arr_id) ? res.data.cat_arr_id : JSON.parse(res.data.cat_arr_id);
         this.parentKey += 1; // 触发级联选择器重新加载
@@ -546,6 +552,14 @@ export default {
         }
       })
     },
+    //1.4 修改是否原创
+    changeIsOriginal(){
+      if(this.form.is_original==1){
+        this.form.linkurl = "本网";
+      }else{
+        this.form.linkurl = "";
+      }
+    },
     //跳转操作 end ------------------------------------------------------------>
 
     //4.富文本编辑器 start ------------------------------------------------------------>

Some files were not shown because too many files changed in this diff