Explorar el Código

request-解决冲突

rkljw hace 4 meses
padre
commit
690f069f25

+ 2 - 0
package.json

@@ -36,10 +36,12 @@
     "quill-image-resize-module": "^3.0.0",
     "screenfull": "4.2.0",
     "script-loader": "0.7.2",
+    "socket.io-client": "^4.7.5",
     "sortablejs": "1.8.4",
     "tui-editor": "1.3.3",
     "vue": "2.6.10",
     "vue-count-to": "1.0.13",
+    "vue-grid-layout": "^2.4.0",
     "vue-i18n": "7.3.2",
     "vue-quill-editor": "^3.0.6",
     "vue-router": "3.0.2",

+ 14 - 0
src/api/chat.js

@@ -0,0 +1,14 @@
+import request from '@/utils/request'
+
+//1.在线会话 start ------------------------------------->
+
+//1.1 获取消息列表
+export function getTalkSessionList(params) {
+  return request({
+    url: '/chat/getTalkSessionList',
+    method: 'get',
+    params
+  })
+}
+
+//1.在线会话 end ------------------------------------->

+ 11 - 0
src/api/unifiedLogin.js

@@ -0,0 +1,11 @@
+import request from '@/utils/request'
+
+export function login(params) {
+  return request({
+    url: '/auth/handler.php',
+    method: 'get',
+    params
+  })
+}
+
+

BIN
src/assets/public/check.png


BIN
src/assets/public/sidebar/default/index.png


+ 15 - 2
src/layout/components/Sidebar/SidebarItem.vue

@@ -92,6 +92,11 @@ export default {
     getIcon(item) {
       const currentPath = this.$route.path;
 
+      // 直接检查当前路径是否与一级菜单的路径匹配
+      if (this.resolvePath(item.path) === currentPath) {
+        return item.meta.selected_icon; // 如果一级菜单本身被选中,返回 selected_icon
+      }
+
       // 递归检查是否存在子路径匹配当前路径
       const isPathInChildren = (children) => {
         return children.some(child => {
@@ -104,9 +109,17 @@ export default {
 
       // 如果当前路径匹配第一级菜单的子路径,返回 selected_icon
       if (isPathInChildren(item.children || [])) {
-        return item.meta.selected_icon;
+        return item.meta.selected_icon; // 返回选中状态的图标
+      }
+
+      return item.meta.icon; // 返回默认图标
+    },
+    // 新增方法:获取只有一个子项的图标
+    getOnlyOneChildIcon() {
+      if (this.onlyOneChild) {
+        return this.getIcon(this.onlyOneChild);
       }
-      return item.meta.icon;
+      return ''; // 或者返回一个默认图标
     }
   }
 }

+ 33 - 2
src/router/index.js

@@ -81,10 +81,9 @@ export const constantRoutes = [
         name: '首页',
         meta: {
           title: '首页',
-          //icon: require('@/assets/public/sidebar/select/index.png'),
           icon: require('@/assets/public/sidebar/default/index.png'),
           selected_icon: require('@/assets/public/sidebar/select/index.png'),
-          affix: true ,
+          affix: true,
         }
       }
     ]
@@ -284,6 +283,38 @@ export const constantRoutes = [
       }
     ]
   },
+  {
+    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: '/documentation',
   //   component: Layout,

+ 31 - 0
src/store/modules/chat.js

@@ -0,0 +1,31 @@
+import {getTalkSessionList} from '@/api/chat'
+
+const state = {
+
+}
+
+const mutations = {
+
+}
+
+const actions = {
+  //在线会话 start ---------------------------------------->
+  getTalkSessionList({commit},data) {
+    return new Promise((resolve, reject) => {
+      getTalkSessionList(data).then(response => {
+        resolve(response)
+      }).catch(error => {
+        reject(error)
+      })
+    })
+  },
+  //在线会话 end ---------------------------------------->
+}
+
+
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions
+}

+ 13 - 0
src/store/modules/public.js

@@ -3,6 +3,7 @@ import {getInfo,changePassword} from '@/api/user'
 import {getDepartmentList,delDepartment,getDepartmentMain,
   getAllDepartment,addDepartment,upDepartment
 } from '@/api/system'
+import {login} from '@/api/unifiedLogin'
 
 const state = {
 
@@ -13,6 +14,18 @@ const mutations = {
 }
 
 const actions = {
+  //单点登录 start ---------------------------------------->
+  login({commit},data) {
+    return new Promise((resolve, reject) => {
+      login(data).then(response => {
+        resolve(response)
+      }).catch(error => {
+        reject(error)
+      })
+    })
+  },
+  //单点登录 end ---------------------------------------->
+  
   //公共api start ---------------------------------------->
   //首页数据
   getAdminIndex({commit},data) {

+ 99 - 0
src/styles/global.less

@@ -240,8 +240,107 @@
   margin:0 30px 30px 30px;
   text-align:center;
 }
+.disclaimerBox {
+  border: 1px solid #DCDFE6;
+  border-radius: 8px;
+  padding: 20px;
+  margin-left: 20px;
+  margin-bottom: 22px;
+  .el-checkbox__inner{
+    margin-right: 10px;
+  }
+  .disclaimerTitle {
+    font-size: 14px;
+    color: #606266;
+    margin-bottom: 10px;
+    display: flex;
+    align-items: center;
+    img {
+      margin-right: 10px;
+      width: 14px;
+      height: 14px;
+    }
+  }
+  .disclaimerText {
+    font-size: 12px;
+    color: #666666;
+  }
+}
 
 /*页面布局 end------------------------------------------------------------>*/
 
+/*quill汉化 start------------------------------------------------------------>*/
+ .ql-snow .ql-tooltip[data-mode=link]::before {
+  content: "请输入链接地址:" !important;
+}
+.ql-snow .ql-tooltip.ql-editing a.ql-action::after {
+    border-right: 0px;
+    content: '保存' !important;
+    padding-right: 0px;
+}
+
+.ql-snow .ql-tooltip[data-mode=video]::before {
+    content: "请输入视频地址:" !important;
+}
+
+.ql-snow .ql-picker.ql-size .ql-picker-label::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item::before {
+  content: '14px' !important;
+}
+.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=small]::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]::before {
+  content: '10px' !important;
+}
+.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=large]::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]::before {
+  content: '18px' !important;
+}
+.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=huge]::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]::before {
+  content: '32px' !important;
+}
+
+.ql-snow .ql-picker.ql-header .ql-picker-label::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item::before {
+  content: '文本' !important;
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
+  content: '标题1' !important;
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
+  content: '标题2' !important;
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
+  content: '标题3' !important;
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
+  content: '标题4' !important;
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
+  content: '标题5' !important;
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
+  content: '标题6' !important;
+}
+
+.ql-snow .ql-picker.ql-font .ql-picker-label::before,
+.ql-snow .ql-picker.ql-font .ql-picker-item::before {
+  content: '标准字体' !important;
+}
+.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=serif]::before,
+.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]::before {
+  content: '衬线字体' !important;
+}
+.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=monospace]::before,
+.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before {
+  content: '等宽字体' !important;
+}
+/*quill汉化 end------------------------------------------------------------>*/
 
 

+ 2 - 0
src/utils/baseUrl.js

@@ -1,6 +1,8 @@
 const URL = {
   testUrl: 'http://192.168.1.201:9501',//老刘服务器
   baseUrl: 'http://183.131.25.186:9501',//测试服务器
+  WebsocketUrl: 'ws://192.168.1.201:9506',//老刘websocket地址
+  //WebsocketUrl: 'ws://183.131.25.186:9506'//测试服务器websocket地址
 }
 
 export default URL;

+ 4 - 4
src/utils/request.js

@@ -7,11 +7,11 @@ import URL from '@/utils/baseUrl';
 // create an axios instance
 const service = axios.create({
   //千万不能在这里使用绝对地址,这会导致webpack的devserve不生效
-  baseURL: URL.testUrl, 
-  // baseURL: URL.baseUrl, 
+  //baseURL: URL.testUrl, //老刘服务器
+  baseURL: URL.baseUrl, //测试服务器
   //baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
   //withCredentials: true, // send cookies when cross-domain requests
-  timeout: 5000 // request timeout
+  timeout: 50000 // request timeout
 })
 
 // request interceptor
@@ -79,7 +79,7 @@ service.interceptors.response.use(
     Message({
       message: error.message,
       type: 'error',
-      duration: 5 * 1000
+      duration: 5 * 10000
     })
     return Promise.reject(error)
   }

+ 18 - 0
src/utils/validate.js

@@ -90,3 +90,21 @@ export function isArray(arg) {
   }
   return Array.isArray(arg)
 }
+
+/*验证是否为空 类型1 这个值是字符串*/
+export function validateEmpty(rule,value,callback){
+  if (value.length == 0) {
+    callback(new Error('该项不能为空!'))
+  } else {
+    callback()
+  }
+}
+
+/*验证是否为空 类型2 这个值是数组*/
+export function validateArray(rule,value,callback){
+  if (value.length === 0) {
+      callback(new Error('该项不能为空!'))
+  } else {
+      callback()
+  }
+}

+ 177 - 0
src/views/chat/hall.vue

@@ -0,0 +1,177 @@
+<template>
+  <div class="mainBox">
+    <!--大厅 start------------------------------------------------------------>
+    <div class="layerBox">
+
+      
+      <el-container style="height: 100vh;">
+        <el-aside width="300px" style="background: #f2f2f2;">
+          <el-menu>
+            <div class="conversation-list">会话记录(100)</div>
+            <el-menu-item 
+              v-for="conversation in conversations" 
+              :key="conversation.session_id"
+              @click="selectConversation(conversation)"
+              :class="{ 'is-active': activeConversation && activeConversation.session_id === conversation.session_id }">
+              <div v-if="conversation.talk_type==1">
+                <el-avatar :src=conversation.user_avatar>{{ conversation.nickname }}</el-avatar> {{ conversation.nickname }}
+              </div>
+              <div v-if="conversation.talk_type==2">
+                <el-avatar :src=conversation.group_avatar>{{ conversation.group_name }}</el-avatar> {{ conversation.group_name }}
+              </div>
+            
+            </el-menu-item>
+          </el-menu>
+        </el-aside>
+
+        <el-container>
+          <el-main style="padding: 20px;">
+            <div v-if="activeConversation">
+              <div v-for="(message, index) in activeConversation.messages" :key="index"  class="message">
+                <div v-if="message.is_me==1" :class="{'is_me':message.is_me==1}">
+                  {{ message.content }} <el-avatar :src=message.user_avatar>{{ message.nickname }}</el-avatar>
+                </div>
+                <div  v-else>
+                  <el-avatar :src=message.user_avatar>{{ message.nickname }}</el-avatar>{{ message.content }}
+
+                </div>
+              </div> 
+            </div>
+            <div v-else>
+              请选择一个会话
+            </div>
+          </el-main>
+
+          <el-footer height="60px" style="padding: 10px; background: #fff;">
+            <el-input 
+              v-model="newMessage" 
+              placeholder="输入消息..."
+              @keyup.enter="sendMessage"
+              style="width: calc(100% - 100px); margin-right: 10px;">
+            </el-input>
+            <el-button @click="sendMessage" type="primary">发送</el-button>
+          </el-footer>
+        </el-container>
+      </el-container>
+
+
+    </div>
+    <!--大厅 end------------------------------------------------------------>
+  </div>
+</template>
+
+<script>
+//引入公用样式
+import '@/styles/global.less';
+// 引入baseUrl
+import URL from '@/utils/baseUrl';
+
+export default {
+  data() {
+    return {
+      activeConversation: null,
+      newMessage: '',
+      conversations: [
+       
+      ],
+      ws: null
+    };
+  },
+  methods: {
+    selectConversation(conversation) {
+      this.activeConversation = conversation;
+    },
+    sendMessage() {
+      if (this.newMessage.trim() !== '') {
+
+        //msg_type 消息类型  talk_type:聊天类型 1单聊 2群聊
+        const message = { 
+          msg_type:1,
+          talk_type:this.activeConversation.talk_type,
+          content:this.newMessage,
+          session_id:this.activeConversation.session_id,
+          msg_type:1,
+          receiver_id:this.activeConversation.user_id?this.activeConversation.user_id:this.activeConversation.group_id
+        };
+        // this.activeConversation.messages.push(message);
+        console.log("发送消息",this.ws,WebSocket.OPEN)
+        if (this.ws && this.ws.readyState === WebSocket.OPEN) {
+          this.ws.send(JSON.stringify(message));
+        }
+        this.newMessage = '';
+      }
+    },
+    handleIncomingMessage(event) {
+      const message = JSON.parse(event.data);
+      console.log("监听消息:",message)
+      const conversation = this.conversations.find(conv => conv.session_id === message.session_id); // 假设所有消息都发送给Alice
+      if (conversation) {
+        conversation.messages.push(message);
+      }
+    },
+    //获取会话列表
+    getTalkSessionList(){
+      let parames  = {
+        'page':1,
+        'pageSize':10
+      }
+      // this.$api.chat.getTalkSessionList(parames).then(res=>{
+      //     this.conversations =  res.data.row
+      // });
+      this.$store.dispatch('chat/getTalkSessionList',parames).then(res=> {
+        this.conversations =  res.data.row
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '获取聊天记录失败!'
+        });
+      })
+    },
+  },
+  mounted() {
+    //1.获取admin-token
+    const adminToken = document.cookie.split('; ').find(row => row.startsWith('Admin-Token=')).split('=')[1];
+    //console.log("Admin-Token:", adminToken);
+    //2.连接websocket 
+    let websocketNewUrl = URL.WebsocketUrl +"?token=" + adminToken;
+    this.ws = new WebSocket(websocketNewUrl);
+    this.ws.addEventListener('message', this.handleIncomingMessage);
+
+    this.ws.addEventListener('close', function (event) {
+      // 连接关闭时执行的操作
+      console.log("关闭链接",event)
+    });
+
+    this.getTalkSessionList()
+  },
+  beforeDestroy() {
+    if (this.ws) {
+      this.ws.removeEventListener('message', this.handleIncomingMessage);
+      this.ws.close();
+    }
+  }
+};
+
+</script>
+
+<style scoped lang="less">
+.layerBoxNoBg {
+  padding: 30px 0 0 0;
+}
+//表单微调 start------------------------------------------------------------>*/
+::v-deep .custom-form-item > .el-form-item__label {
+  line-height: 140px !important;
+}
+::v-deep .custom-textarea .el-textarea__inner {
+  resize: none; /* 禁止用拖拽调整大小 */
+}
+::v-deep .custom-align-right .el-form-item__label {
+  text-align: right; /* 设置标签文字右对齐 */
+}
+::v-deep .el-select-group__title {
+  color: #909399;
+}
+::v-deep .el-select {
+  width: 100% !important;
+}
+</style>

+ 8 - 13
src/views/complaint/complaintList.vue

@@ -150,7 +150,7 @@
     <!--表格内容 end------------------------------------------------------------>
 
     <!--弹出框start------------------------------------------------------------>
-    <el-dialog title="编辑投诉" :visible.sync="windowStatus">
+    <el-dialog title="编辑投诉" :visible.sync="windowStatus" :close-on-click-modal="false">
       <el-form :model="form" ref="form" :rules="formRules" autocomplete="off" label-position="left">
         <div class="formDiv">
           <el-form-item label="标题:" :label-width="formLabelWidth" prop="" class="custom-align-right">
@@ -199,7 +199,7 @@
             </el-select>
           </el-form-item>
           <el-form-item label="详细说明:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <el-input type="textarea" v-model="form.describe" class="custom-textarea" disabled></el-input>
+            <el-input type="textarea" v-model="form.describe" class="custom-textarea" disabled placeholder="请输入详细说明"></el-input>
           </el-form-item>
           <el-form-item label="判决书:" :label-width="formLabelWidth" prop="" class="custom-align-right">
             <div v-if="form.judgment" @click="downloadFile(form.judgment)" class="complaintListdownloadBtn">
@@ -230,16 +230,16 @@
             <div v-else>暂无数据</div>
           </el-form-item>
           <el-form-item label="涉案标的金额:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <el-input v-model="form.money" autocomplete="off" disabled></el-input>
+            <el-input v-model="form.money" autocomplete="off" disabled placeholder="请输入涉案标的金额"></el-input>
           </el-form-item>
           <el-form-item label="姓名:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <el-input v-model="form.name" autocomplete="off" disabled></el-input>
+            <el-input v-model="form.name" autocomplete="off" disabled placeholder="请输入姓名"></el-input>
           </el-form-item>
           <el-form-item label="身份证号:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <el-input v-model="form.id_card" autocomplete="off" disabled></el-input>
+            <el-input v-model="form.id_card" autocomplete="off" disabled placeholder="请输入身份证号"></el-input>
           </el-form-item>
           <el-form-item label="期待学习法律:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <el-input v-model="form.like_remark" autocomplete="off" disabled></el-input>
+            <el-input v-model="form.like_remark" autocomplete="off" disabled placeholder="请输入期待学习法律"></el-input>
           </el-form-item>
           <el-form-item label="状态:" :label-width="formLabelWidth" prop="status" class="custom-align-right">
             <el-radio-group v-model="form.status">
@@ -250,7 +250,7 @@
             </el-radio-group>
           </el-form-item>
           <el-form-item label="备注信息:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <el-input type="textarea" v-model="form.reason" class="custom-textarea"></el-input>
+            <el-input type="textarea" v-model="form.reason" class="custom-textarea" placeholder="请输入备注信息"></el-input>
           </el-form-item>
         </div>
       </el-form>
@@ -618,7 +618,7 @@ export default {
       this.form.name = "";
       this.form.id_card = "";
       this.form.like_remark = "";
-      this.from.reason = "";
+      this.form.reason = "";
     },
     //弹出框设置 end ------------------------------------------------------------>
 
@@ -756,11 +756,6 @@ export default {
               message: '修改成功!'
             });
             this.getData();
-          }).catch(() => {
-            this.$message({
-              type: 'warning',
-              message: '网络错误,请重试!'
-            });
           })
         }
       })

+ 78 - 0
src/views/login/index.vue

@@ -84,6 +84,7 @@
             <el-button :loading="loading" type="primary" class="loginBtn" @click.native.prevent="handleLogin">
               登录
             </el-button>
+            <div class="singleLogin" @click="singleLogin"><i class="el-icon-cloudy" /> 单点登录测试</div>
           </el-form>
           <!--开始验证表单 end-->
         </div>
@@ -241,12 +242,87 @@ export default {
         }
         return acc
       }, {})
+    },
+    // 单点登录 start ---------------------------------------->
+    // 使用字符串操作提取 backurl 参数的值
+    getBackUrl(url) {
+      const params = url.split('?')[1]; // 获取问号后面的部分
+      if (params) {
+        const paramArray = params.split('&'); // 分割参数
+        for (let param of paramArray) {
+          const [key, value] = param.split('='); // 分割键值对
+          if (key === 'backurl') {
+            return decodeURIComponent(value); // 返回解码后的 backurl 值
+          }
+        }
+      }
+      return null; // 如果没有找到 backurl 参数,返回 null
+    },
+    //测试单点登录
+    singleLogin() {
+      // 获取当前页面的 URL
+      const currentUrl = window.location.href;
+
+      const backurlValue = this.getBackUrl(currentUrl);
+      if (backurlValue) {
+        //console.log('backurl:', backurlValue); // 打印 backurl 的值
+        //存在backurl 准备进行单点登录
+        //回调地址backurlValue
+        
+        this.$refs.loginForm.validate(valid => {
+        if (valid) {
+            //console.log(this.loginForm)
+            //开始登录
+            this.loading = true
+            this.$store.dispatch('user/login', this.loginForm)
+              .then( res => {
+                this.loading = false
+                console.log(res)
+                if(res.code==0){
+                  this.$message({
+                    type:'error',
+                    message:"表单项有误,请检查!"
+                  })
+                }else if(res.code==200){
+                  console.log("单点登录成功,开始启动跳转!")
+                  // res.data.token
+                  // backurlValue
+                  window.location.href = 'https://admindev.bjzxtw.org.cn/auth/back_login.php?backurl=' + backurlValue + '&token='+res.data.token;
+
+                }else if(res.code!=0&&res.code!=200){
+                  this.$message({
+                    type:'error',
+                    message:"用户不存在!"
+                  })
+                }
+              })
+              .catch(() => {
+                this.loading = false
+              })
+          } else {
+            console.log('表单填写错误!请检查!')
+            return false
+          }
+        })
+      } else {
+        //没有backurl 直接走登录接口
+        this.handleLogin()
+      }
     }
+    // 单点登录 end ---------------------------------------->
   }
 }
 </script>
 
 <style scoped lang="less">
+  .singleLogin {
+    font-size: 14px;
+    color: #666;
+    cursor: pointer;
+    margin-top: 30px;
+    width: 400px;
+    text-align: center;
+  }
   /*整体盒子模型 使用display flex布局保持中间主体始终居中*/
   .appBox{
     clear: both;
@@ -449,6 +525,8 @@ export default {
         color:#fff;
         border:0;
       }
+
+
     }
   }
 

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

@@ -41,7 +41,7 @@
     <!--表格内容 end------------------------------------------------------------>
 
     <!--弹出框 start------------------------------------------------------------>
-    <el-dialog title="添加职能部门" :visible.sync="windowStatus">
+    <el-dialog :title="editId ? '编辑职能部门' : '添加职能部门'" :visible.sync="windowStatus" :close-on-click-modal="false">
       <el-form :model="form" ref="form" :rules="formRules" autocomplete="off" label-position="left">
         <div class="formDiv">
           <el-form-item label="选择上级部门" :label-width="formLabelWidth" prop="pid" class="custom-align-right">
@@ -50,7 +50,7 @@
         </div>
         <div class="formDiv">
           <el-form-item label="部门名称:" :label-width="formLabelWidth" prop="name" class="custom-align-right">
-            <el-input v-model="form.name" autocomplete="off"></el-input>
+            <el-input v-model="form.name" autocomplete="off" placeholder="请输入职能部门名称"></el-input>
           </el-form-item>
         </div>
       </el-form>

+ 13 - 12
src/views/menu/menulist.vue

@@ -49,14 +49,21 @@
     <!--表格内容 end------------------------------------------------------------>
 
     <!--弹出框 start------------------------------------------------------------>
-    <el-dialog title="添加菜单" :visible.sync="windowStatus">
+    <el-dialog :title="editId ? '编辑菜单' : '添加菜单'" :visible.sync="windowStatus" :close-on-click-modal="false">
       <el-form :model="form" ref="form" :rules="formRules" label-position="left">
         <div class="formDiv">
           <el-form-item label="菜单名称" :label-width="formLabelWidth" prop="label" class="custom-align-right">
-            <el-input v-model="form.label" autocomplete="off"></el-input>
+            <el-input v-model="form.label" autocomplete="off" placeholder="请输入菜单名称"></el-input>
           </el-form-item>
-          <el-form-item label="菜单路由" :label-width="formLabelWidth" prop="url" class="custom-align-right">
-            <el-input v-model="form.url" autocomplete="off"></el-input>
+          <el-form-item label="是否为顶级菜单" :label-width="formLabelWidth" class="custom-align-right">
+            <el-radio v-model="radio" label="1">是</el-radio>
+            <el-radio v-model="radio" label="2">否</el-radio>
+          </el-form-item>
+          <el-form-item label="菜单路由" :label-width="formLabelWidth" prop="url" class="custom-align-right" v-if="radio === '2'">
+            <el-input v-model="form.url" autocomplete="off" placeholder="请输入菜单路由"></el-input>
+          </el-form-item>
+          <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">
              <!--图片上传组件 start ------------------------------------------------------------>
@@ -105,14 +112,7 @@
             <!--图片上传组件 end ------------------------------------------------------------>
           </el-form-item>
           <el-form-item label="权重" :label-width="formLabelWidth" prop="sort" class="custom-align-right">
-            <el-input v-model="form.sort" autocomplete="off"></el-input>
-          </el-form-item>
-          <el-form-item label="是否为顶级菜单" :label-width="formLabelWidth" class="custom-align-right">
-            <el-radio v-model="radio" label="1">是</el-radio>
-            <el-radio v-model="radio" label="2">否</el-radio>
-          </el-form-item>
-          <el-form-item label="父级菜单名称" :label-width="formLabelWidth" prop="pid_arr" class="custom-align-right">
-            <el-cascader :key="parentKey" v-model="form.pid_arr" :props="{checkStrictly:true}" :options="pidArrData" clearable :disabled="radio === '1'"></el-cascader>
+            <el-input v-model="form.sort" autocomplete="off" placeholder="请输入权重"></el-input>
           </el-form-item>
         </div>
       </el-form>
@@ -248,6 +248,7 @@ export default {
               type: 'success',
               message: '删除成功!'
             });
+            this.getData();
           }else{
             this.$message({
               type: 'warning',

+ 0 - 1
src/views/news/NewList.vue

@@ -71,7 +71,6 @@
             <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="level" 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="">

+ 67 - 22
src/views/news/creatNews.vue

@@ -13,7 +13,7 @@
                 </el-tooltip>
               </span>
             </template>
-            <el-input v-model="form.title" autocomplete="off"></el-input>
+            <el-input v-model="form.title" autocomplete="off" placeholder="请输入资讯标题"></el-input>
             <el-checkbox v-model="form.islink">是否使用外链</el-checkbox>
           </el-form-item>
           <div v-if="form.islink==true"> 
@@ -21,17 +21,17 @@
               <el-cascader :key="parentKey" v-model="form.cat_arr_id" placeholder="请选择要绑定的父级导航" :props="parentData" filterable clearable></el-cascader>
             </el-form-item>
             <el-form-item label="外链地址:" prop="linkurl" class="custom-align-right">
-              <el-input v-model="form.linkurl" autocomplete="off"></el-input>
+              <el-input v-model="form.linkurl" autocomplete="off" placeholder="请输入外链地址"></el-input>
             </el-form-item>
             <el-form-item label="作者:" prop="author" class="custom-align-right">
-              <el-input v-model="form.author" autocomplete="off"></el-input>
+              <el-input v-model="form.author" autocomplete="off" placeholder="请输入作者"></el-input>
             </el-form-item>
           </div>
           <div v-if="form.islink==false">
             <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>  
-            <el-form-item label="推荐等级:" prop="level" class="custom-align-right">
+            <el-form-item label="推荐等级:" class="custom-align-right">
               <el-select v-model="form.level" placeholder="请选择推荐等级..">
                 <el-option label="头条" :value="1"></el-option>
                 <el-option label="轮播图" :value="2"></el-option>
@@ -40,7 +40,25 @@
                 <el-option label="资讯推荐" :value="5"></el-option>
               </el-select>
             </el-form-item>
-            <el-form-item label="缩略图:" class="custom-align-right">
+            <el-form-item label="缩略图:" class="custom-align-right" prop="imgUrl" v-if="form.level==2||form.level==3">
+              <div class="uploaderBox">
+                <el-upload class="avatar-uploader" action="#" :show-file-list="false" :before-upload="beforeAvatarUpload">
+                  <!-- <img v-if="imgUrl" :src="imgUrl" class="avatar">
+                  <i v-else class="el-icon-plus avatar-uploader-icon"></i> -->
+                  <!-- 预览图片 -->
+                  <img v-if="imgUrl" :src="imgUrl" class="avatar">
+                  <!-- 上传图标 -->
+                  <!-- <i v-else class="el-icon-plus avatar-uploader-icon"></i> -->
+                  <div v-else class="chooseImgDiv">
+                    <div>
+                      <img src="@/assets/public/upload/noImage.png">
+                      <div>选择图片</div>
+                    </div>
+                  </div>
+                </el-upload>
+              </div>
+            </el-form-item>
+            <el-form-item label="缩略图:" class="custom-align-right" v-else>
               <div class="uploaderBox">
                 <el-upload class="avatar-uploader" action="#" :show-file-list="false" :before-upload="beforeAvatarUpload">
                   <!-- <img v-if="imgUrl" :src="imgUrl" class="avatar">
@@ -61,24 +79,24 @@
             <el-form-item label="资讯关键词:" prop="keyword" class="custom-align-right">
               <template #label>
                 <span class="askBox">
-                  网站关键词:
+                  资讯关键词:
                   <el-tooltip class="item" effect="dark" content="资讯关键词,如:三农市场网、全国三农、信息一体化。" placement="top">
                     <i class="el-icon-question"></i>
                   </el-tooltip>
                 </span>
               </template>
-              <el-input v-model="form.keyword" autocomplete="off"></el-input>
+              <el-input v-model="form.keyword" autocomplete="off" placeholder="请输入资讯关键词"></el-input>
             </el-form-item>
             <el-form-item label="资讯描述:" prop="introduce" class="custom-align-right">
               <template #label>
                 <span class="askBox">
                   资讯描述:
-                  <el-tooltip class="item" effect="dark" content="网站描述,如:中国三农市场网创建以来,社会效益和会员经济效益贡献。" placement="top">
+                  <el-tooltip class="item" effect="dark" content="资讯描述,如:中国三农市场网创建以来,社会效益和会员经济效益贡献。" placement="top">
                     <i class="el-icon-question"></i>
                   </el-tooltip>
                 </span>
               </template>
-              <el-input type="textarea" v-model="form.introduce" class="custom-textarea"></el-input>
+              <el-input type="textarea" v-model="form.introduce" class="custom-textarea" placeholder="请输入资讯描述"></el-input>
             </el-form-item>
             <div class="QuillTitle">
               <span>* </span>资讯内容:
@@ -99,22 +117,31 @@
               </div>
             </el-form-item>
             <el-form-item label="作者:" prop="author" class="custom-align-right">
-              <el-input v-model="form.author" autocomplete="off"></el-input>
+              <el-input v-model="form.author" autocomplete="off" placeholder="请输入作者"></el-input>
             </el-form-item>
             <el-form-item label="浏览量:" class="custom-align-right">
-              <el-input v-model="form.hits" autocomplete="off"></el-input>
+              <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 v-model="form.is_original" label="1">是</el-radio>
-              <el-radio v-model="form.is_original" label="0">不是</el-radio>
+              <el-radio-group v-model="form.is_original">
+                <el-radio :label="1">是</el-radio>
+                <el-radio :label="0">否</el-radio>
+              </el-radio-group>
             </el-form-item>
             <div v-if="form.is_original==0">
               <el-form-item label="来源名称:" prop="copyfrom" class="custom-align-right">
-                <el-input v-model="form.copyfrom" autocomplete="off"></el-input>
+                <el-input v-model="form.copyfrom" autocomplete="off" placeholder="请输入来源名称"></el-input>
               </el-form-item>
               <el-form-item label="来源链接:" prop="linkurl" class="custom-align-right">
-                <el-input v-model="form.linkurl" autocomplete="off"></el-input>
+                <el-input v-model="form.linkurl" autocomplete="off" placeholder="请输入来源链接"></el-input>
               </el-form-item>
+              <div class="disclaimerBox">
+                <div class="disclaimerTitle">
+                  <img src="@/assets/public/check.png"/>同意《免责声明》:
+                  <!-- <el-checkbox v-model="disclaimer" disabled="disabled"></el-checkbox> -->
+                </div>
+                <div class="disclaimerText">本文来源于网络转载,仅供学习交流使用,不构成商业目的。版权归作者所有,如涉及原作者所有,如涉及作品内容、版权和其他问题,请在30日内与本站联系,我们将在第一时间处理。</div>
+              </div>
             </div>
             <el-form-item label="资讯状态:" class="custom-align-right" style="width: 100%;">
               <el-select v-model="form.status" placeholder="请选择..">
@@ -127,9 +154,9 @@
       </el-form>
     </div>
     <div class="bottomBtnBox">
-      <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="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>
     </div>
   </div>
 </template>
@@ -177,6 +204,7 @@ export default {
       //1.表单项 start ------------------------------------------------------------>
       editStatus:false,
       tableDivTitle:"添加资讯",
+      disclaimer:true,//免责声明
       //提交表单
       form: {
         //1.1使用了外链
@@ -192,10 +220,10 @@ export default {
         content:"",//内容
         author:"",//作者
         hits:"",//浏览量
-        is_original:"",//是否为原创 0非 1是
+        is_original:0,//是否为原创 0非 1是
         copyfrom:"",//来源名称
         fromurl:"",//来源地址
-        status:""//状态 0待发布 1已发布 404已删除
+        status:0//状态 0待发布 1已发布 404已删除
       },
       //1.2 表单验证规则
       formRules: {
@@ -206,7 +234,7 @@ export default {
         //导航池名称不能为空
         cat_arr_id:[{required:true,trigger:'blur',validator:validateArray}],
         //推荐等级不能为空
-        level:[{required:true,trigger:'blur',validator:validateEmpty}],
+        //level:[{required:true,trigger:'blur',validator:validateEmpty}],
         //关键词不能为空
         keyword:[{required:true,trigger:'blur',validator:validateEmpty}],
         //描述不能为空
@@ -219,7 +247,9 @@ export default {
         is_original:[{required:true,trigger:'blur',validator:validateEmpty}],
         //来源名称和地址不能为空
         copyfrom:[{required:true,trigger:'blur',validator:validateEmpty}],
-        fromurl:[{required:true,trigger:'blur',validator:validateEmpty}]
+        fromurl:[{required:true,trigger:'blur',validator:validateEmpty}],
+        //缩略图不能为空
+        imgUrl:[{required:true,trigger:'blur',validator:validateEmpty}]
       },
       //1.3富文本编辑器配置
       showHtml: false, //用于保存源码内容
@@ -418,12 +448,27 @@ export default {
       this.$store.dispatch('news/getArticleInfo', data).then(res => {
         console.log(res);
         this.form.title = res.data.title;
+        //判断是否使用了外链
         if(res.data.islink==1){
           this.form.islink = true;
-          this.form.linkurl = res.data.linkurl;
         }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);

+ 2 - 2
src/views/role/components/userAdmin.vue

@@ -69,7 +69,7 @@
           <el-form-item label="真实姓名:" :label-width="formLabelWidth" prop="real_name" class="custom-align-right">
             <el-input v-model="form.real_name" autocomplete="off" placeholder="请输入真实姓名.."></el-input>
           </el-form-item>
-          <el-form-item label="手机号:" :label-width="formLabelWidth" prop="mobile" class="custom-align-right">
+          <el-form-item label="手机号:" :label-width="formLabelWidth" class="custom-align-right">
             <el-input v-model="form.mobile" autocomplete="off" placeholder="请输入手机号.."></el-input>
           </el-form-item>
         </div>
@@ -130,7 +130,7 @@ export default {
         password: [{ required: true, trigger: 'blur', validator: validatePassword }],
         confirm_password: [{ required: true, trigger: 'blur', validator: validatePassword }],
         real_name: [{ required: true, trigger: 'blur', validator: validateEmpty }],
-        mobile: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+        //mobile: [{ required: true, trigger: 'blur', validator: validateEmpty }],
       }
     };
   },

+ 1 - 1
src/views/role/components/userDefault.vue

@@ -164,7 +164,7 @@
             </el-upload>
           </el-form-item>
           <el-form-item label="提示词:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <el-input type="textarea" v-model="form.remark" class="custom-textarea"></el-input>
+            <el-input type="textarea" v-model="form.remark" class="custom-textarea" placeholder="请输入提示词"></el-input>
           </el-form-item>
         </div>
       </el-form>

+ 1 - 1
src/views/role/components/userEnterprise.vue

@@ -138,7 +138,7 @@
             </el-upload>
           </el-form-item>
           <el-form-item label="提示词:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <el-input type="textarea" v-model="form.remark" class="custom-textarea"></el-input>
+            <el-input type="textarea" v-model="form.remark" class="custom-textarea" placeholder="请输入提示词"></el-input>
           </el-form-item>
         </div>
       </el-form>

+ 1 - 6
src/views/role/components/userInvestigate.vue

@@ -172,7 +172,7 @@
             </el-upload>
           </el-form-item>
           <el-form-item label="提示词:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <el-input type="textarea" v-model="form.remark" class="custom-textarea"></el-input>
+            <el-input type="textarea" v-model="form.remark" class="custom-textarea" placeholder="请输入提示词"></el-input>
           </el-form-item>
         </div>
       </el-form>
@@ -542,11 +542,6 @@ export default {
           url: url,                // 文件的 URL
           status: 'success'        // 设置状态为 success
         }));
-      }).catch(error=>{
-        this.$message({
-          type: 'warning',
-          message: '网络错误,请重试!'
-        });
       })
     },
     //修改用户

+ 1 - 1
src/views/role/components/userPolitician.vue

@@ -141,7 +141,7 @@
             </el-upload>
           </el-form-item>
           <el-form-item label="提示词:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <el-input type="textarea" v-model="form.remark" class="custom-textarea"></el-input>
+            <el-input type="textarea" v-model="form.remark" class="custom-textarea" placeholder="请输入提示词"></el-input>
           </el-form-item>
         </div>
       </el-form>

+ 4 - 5
src/views/role/roleList.vue

@@ -45,17 +45,17 @@
     <!--表格内容 end------------------------------------------------------------>
 
     <!--弹出框 start------------------------------------------------------------>
-    <el-dialog title="添加角色" :visible.sync="windowStatus">
+    <el-dialog :title="editId ? '编辑角色' : '添加角色'" :visible.sync="windowStatus" :close-on-click-modal="false">
       <el-form :model="form" ref="form" :rules="formRules" autocomplete="off" label-position="left">
         <div class="formDiv">
           <el-form-item label="角色名称:" :label-width="formLabelWidth" prop="role_name" class="custom-align-right">
-            <el-input v-model="form.role_name" autocomplete="off"></el-input>
+            <el-input v-model="form.role_name" autocomplete="off" placeholder="请输入角色名称"></el-input>
           </el-form-item>
           <el-form-item label="职能描述:" :label-width="formLabelWidth" prop="remark" class="custom-align-right">
-            <el-input type="textarea" v-model="form.remark" class="custom-textarea"></el-input>
+            <el-input type="textarea" v-model="form.remark" class="custom-textarea" placeholder="请输入职能描述"></el-input>
           </el-form-item>
           <el-form-item label="排序:" :label-width="formLabelWidth" prop="sort" class="custom-align-right">
-            <el-input v-model="form.sort" autocomplete="off"></el-input>
+            <el-input v-model="form.sort" autocomplete="off" placeholder="请输入排序"></el-input>
           </el-form-item>
           <el-form-item label="权限:" :label-width="formLabelWidth" prop="" class="custom-align-right">
             <div class="treeBox">
@@ -261,7 +261,6 @@ export default {
 
     //4.添加 start ------------------------------------------------------------>
     addData(){
-      this.openWindow();
       //获取选中的节点
       let checkedArr = this.$refs.tree.getCheckedKeys();
       this.form.rule = checkedArr;

+ 60 - 31
src/views/website/WebsiteList.vue

@@ -56,11 +56,12 @@
             <el-table-column prop="city_name" label="网站城市"></el-table-column>
             <el-table-column prop="created_at" label="创建时间"></el-table-column>
             <el-table-column prop="updated_at" label="修改时间"></el-table-column>
-            <el-table-column fixed="right" label="操作" width="200" header-align="center">
+            <el-table-column fixed="right" label="操作" width="280" header-align="center">
               <template slot-scope="scope">
                 <div class="listBtnBox">
                   <div class="listDeleteBtn" @click="deleteData(scope.row.id, tableData)"><i class="el-icon-delete"></i>移除</div>
                   <div class="listEditBtn" @click="getDataMain(scope.row.id, tableData)"><i class="el-icon-edit-outline"></i>编辑</div>
+                  <div class="listMainBtn" @click="creatWebsite(scope.row.id)"><i class="el-icon-brush"></i>搭建</div>
                 </div>
                 <!-- <div class="listMainBtn"><i class="el-icon-view"></i>详情</div> -->
                 <!-- <el-button @click.native.prevent="deleteData(scope.row.id, tableData)" type="text" size="small">移除</el-button>
@@ -80,7 +81,7 @@
     </div>
     <!--表格内容 end------------------------------------------------------------>
     <!--弹出框1:外部表单弹出框 start------------------------------------------------------------>
-    <el-dialog title="添加网站" :visible.sync="windowStatus">
+    <el-dialog :title="editId ? '编辑网站' : '添加网站'" :visible.sync="windowStatus" :close-on-click-modal="false">
       <!--弹出框2:内部模板弹出框 start------------------------------------------------------------>
       <el-dialog width="39%" title="皮肤库" :visible.sync="innerVisible" append-to-body>
         <div class="templateBox">
@@ -107,39 +108,39 @@
       <el-form :model="form" ref="form" :rules="formRules" autocomplete="off" label-position="left">
         <div class="formDiv">
           <el-form-item label="网站名称:" :label-width="formLabelWidth" prop="website_name" class="custom-align-right">
-            <el-input v-model="form.website_name" autocomplete="off" @blur="checkWebsiteName(form.website_name)"></el-input>
+            <el-input v-model="form.website_name" autocomplete="off" @blur="checkWebsiteName(form.website_name)" placeholder="请输入网站名称"></el-input>
           </el-form-item>
           <el-form-item label="网站地址1:" :label-width="formLabelWidth" prop="website_url[0].url" class="custom-align-right">
             <div class="formLabelFloatBox">
-              <el-input v-model="form.website_url[0].url" autocomplete="off" @blur="checkWebsiteUrl(form.website_url[0].url,0)"></el-input>
+              <el-input v-model="form.website_url[0].url" autocomplete="off" @blur="checkWebsiteUrl(form.website_url[0].url,0)" placeholder="请输入网站地址1"></el-input>
               <el-button type="info" icon="el-icon-plus" circle size="mini" @click="addUrlInput(1)" class="formLabeladdIcon"></el-button>
               <el-button type="info" icon="el-icon-delete" circle size="mini" @click="" class="formLabelDelIcon" disabled></el-button>
             </div>
           </el-form-item>
           <el-form-item label="网站地址2:" :label-width="formLabelWidth" v-if="form.website_url[1].show==true" class="custom-align-right">
             <div class="formLabelFloatBox">
-              <el-input v-model="form.website_url[1].url" autocomplete="off" @blur="checkWebsiteUrl(form.website_url[1].url,1)"></el-input>
+              <el-input v-model="form.website_url[1].url" autocomplete="off" @blur="checkWebsiteUrl(form.website_url[1].url,1)"  placeholder="请输入网站地址2"></el-input>
               <el-button type="info" icon="el-icon-plus" circle size="mini" @click="addUrlInput(2)" class="formLabeladdIcon"></el-button>
               <el-button type="info" icon="el-icon-delete" circle size="mini" @click="deleteUrlInput(1)" class="formLabelDelIcon"></el-button>
             </div>
           </el-form-item>
           <el-form-item label="网站地址3:" :label-width="formLabelWidth" v-if="form.website_url[2].show==true" class="custom-align-right">
             <div class="formLabelFloatBox">
-              <el-input v-model="form.website_url[2].url" autocomplete="off" @blur="checkWebsiteUrl(form.website_url[2].url,2)"></el-input>
+              <el-input v-model="form.website_url[2].url" autocomplete="off" @blur="checkWebsiteUrl(form.website_url[2].url,2)"  placeholder="请输入网站地址3"></el-input>
               <el-button type="info" icon="el-icon-plus" circle size="mini" @click="addUrlInput(3)" class="formLabeladdIcon"></el-button>
               <el-button type="info" icon="el-icon-delete" circle size="mini" @click="deleteUrlInput(2)" class="formLabelDelIcon"></el-button>
             </div>
           </el-form-item>
           <el-form-item label="网站地址4:" :label-width="formLabelWidth" v-if="form.website_url[3].show==true" class="custom-align-right">
             <div class="formLabelFloatBox">
-              <el-input v-model="form.website_url[3].url" autocomplete="off" @blur="checkWebsiteUrl(form.website_url[3].url,3)"></el-input>
+              <el-input v-model="form.website_url[3].url" autocomplete="off" @blur="checkWebsiteUrl(form.website_url[3].url,3)"  placeholder="请输入网站地址4"></el-input>
               <el-button type="info" icon="el-icon-plus" circle size="mini" @click="addUrlInput(4)" class="formLabeladdIcon"></el-button>
               <el-button type="info" icon="el-icon-delete" circle size="mini" @click="deleteUrlInput(3)" class="formLabelDelIcon"></el-button>
             </div>
           </el-form-item>
           <el-form-item label="网站地址5:" :label-width="formLabelWidth" v-if="form.website_url[4].show==true" class="custom-align-right">
             <div class="formLabelFloatBox">
-              <el-input v-model="form.website_url[4].url" autocomplete="off" @blur="checkWebsiteUrl(form.website_url[4].url,4)"></el-input>
+              <el-input v-model="form.website_url[4].url" autocomplete="off" @blur="checkWebsiteUrl(form.website_url[4].url,4)"  placeholder="请输入网站地址5"></el-input>
               <el-button type="info" icon="el-icon-plus" circle size="mini" @click="" class="formLabeladdIcon" disabled></el-button>
               <el-button type="info" icon="el-icon-delete" circle size="mini" @click="deleteUrlInput(4)" class="formLabelDelIcon"></el-button>
             </div>
@@ -150,7 +151,7 @@
           <el-form-item label="城市:" :label-width="formLabelWidth" class="custom-align-right">
             <CityCascader v-model="form.city_arr_id" @update-city-id="updateFormCityId"></CityCascader>
           </el-form-item>
-          <el-form-item label="网站logo:" :label-width="formLabelWidth" :class="['custom-form-item']" class="custom-align-right">
+          <el-form-item label="网站logo:" prop="logo" :label-width="formLabelWidth" :class="['custom-form-item']" class="custom-align-right">
             <div class="uploaderBox">
               <!-- <el-upload class="avatar-uploader" action="#" :show-file-list="false" :before-upload="beforeAvatarUpload">
                 <img v-if="logoUrl" :src="logoUrl" class="avatar">
@@ -175,6 +176,7 @@
                       <div>选择图片</div>
                     </div>
                   </div>
+                  <input type="hidden" name="logo" v-model="form.logo">
                 </el-upload>
                 <!-- 删除按钮,当鼠标悬浮时显示 -->
                 <div v-if="hovering && logoUrl" class="delete-button" @click="handleDelete">
@@ -193,7 +195,7 @@
                 </el-tooltip>
               </span>
             </template>
-            <el-input v-model="form.title" autocomplete="off"></el-input>
+            <el-input v-model="form.title" autocomplete="off"  placeholder="请输入网站标题"></el-input>
           </el-form-item>
           <el-form-item label="网站关键词:" :label-width="formLabelWidth" prop="keywords" class="custom-align-right">
             <template #label>
@@ -204,7 +206,7 @@
                 </el-tooltip>
               </span>
             </template>
-            <el-input v-model="form.keywords" autocomplete="off"></el-input>
+            <el-input v-model="form.keywords" autocomplete="off"  placeholder="请输入网站关键词"></el-input>
           </el-form-item>
           <el-form-item label="网站描述:" :label-width="formLabelWidth" prop="description" class="custom-align-right">
             <template #label>
@@ -215,20 +217,23 @@
                 </el-tooltip>
               </span>
             </template>
-            <el-input type="textarea" v-model="form.description" class="custom-textarea"></el-input>
+            <el-input type="textarea" v-model="form.description" class="custom-textarea" placeholder="请输入网站描述"></el-input>
           </el-form-item>
-          <div class="webSiteTemplate" @click="getTemplateList">
-            <div class="webSiteTitle">模板:</div>
-            <div class="webSiteTemplateImg">
-              <div>
-                <img v-if="TemplateImg" :src="TemplateImg" class="selectWebSiteTemplateImg">
-                <div v-else>
-                  <img src="@/assets/public/upload/noImage.png">
-                  <div class="webSiteTemplateText">皮肤库</div>
+          <el-form-item label="模板:" :label-width="formLabelWidth" class="custom-align-right" prop="template_id">
+            <div class="webSiteTemplate" @click="getTemplateList">
+              <!-- <div class="webSiteTitle"></div> -->
+              <div class="webSiteTemplateImg">
+                <div>
+                  <img v-if="TemplateImg" :src="TemplateImg" class="selectWebSiteTemplateImg">
+                  <div v-else>
+                    <img src="@/assets/public/upload/noImage.png">
+                    <div class="webSiteTemplateText">皮肤库</div>
+                  </div>
+                  <input type="hidden" name="template_id" v-model="form.template_id">
                 </div>
               </div>
             </div>
-          </div>
+          </el-form-item>
         </div>
       </el-form>
       <div slot="footer" class="dialog-footer">
@@ -340,6 +345,8 @@ export default {
         title:[{required:true,trigger:'blur',validator:validateEmpty}],
         keywords:[{required:true,trigger:'blur',validator:validateEmpty}],
         description:[{required:true,trigger:'blur',validator:validateEmpty}],
+        logoUrl:[{required:true,trigger:'blur',validator:validateEmpty}],
+        template_id:[{required:true,trigger:'blur',validator:validateEmpty}],
       },
       //3.3 通过api获的的数据 弹窗
       website_column_arr:[],//api获得的网系列表
@@ -587,6 +594,7 @@ export default {
     },
     //3.7 提交表单
     addToServe(){
+      console.log(this.form)
       //先进行验证
       this.$refs.form.validate(valid => {
         if (valid) {
@@ -600,17 +608,28 @@ export default {
           //循环完毕 重置提交的url
           this.form.website_url = webSiteArray;
           //console.log(webSiteArray)
+          console.log(this.form)
           //提交表单
           this.$store.dispatch('pool/addWebsite',this.form).then(res=> {
-            //汇报结果
-            this.$message({
-              type: 'success',
-              message: '已成功添加网站!'
-            });
-            //重新获取表单
-            this.getData();
-            //清空并退出
-            this.closeWindow();
+            if(res.code==200){
+              //汇报结果
+              this.$message({
+                type: 'success',
+                message: '已成功添加网站!'
+              });
+              //重新获取表单
+              this.getData();
+              //清空并退出
+              this.closeWindow();
+            }else{
+              this.$message({
+                type: 'success',
+                message: '添加失败!请检查网络!'
+              });
+              //清空并退出
+              this.closeWindow();
+            }
+            
           }).catch(() => {
             this.$message({
               type: 'info',
@@ -750,7 +769,7 @@ export default {
         //存放城市id
         this.form.city_arr_id = res.data.city_arr_id;
         //当cascaderKey的值改变的时候 级联选择器会重置里面的内容
-        this.cascaderKey += 1;
+        //this.cascaderKey += 1;
         //回显网站标题,描述,关键词
         console.log(res.data.title,res.data.keywords,res.data.description)
         this.form.title = res.data.title;
@@ -800,6 +819,15 @@ export default {
       }) 
     },
     //编辑旧网站 end ------------------------------------------------------------>
+
+    //6.搭建网站 start ------------------------------------------------------------>
+    creatWebsite(id){
+      this.$router.push({ 
+        path: '/creatWebsite', 
+        query: {id:id} 
+      });
+    } 
+    //编辑旧网站 end ------------------------------------------------------------>
   },
   mounted(){
     //1.获得初始数据
@@ -905,6 +933,7 @@ export default {
   .webSiteTemplateImg {
     width: 140px;
     height: 140px;
+    cursor: pointer;
     display: flex;
     align-items: center;
     justify-content: center;

+ 27 - 23
src/views/website/categoryList.vue

@@ -25,7 +25,7 @@
     </div>
     <div class="layerBoxNoBg">
       <div>
-        <el-button type="primary" @click="openWindow">添加导航池名称</el-button>
+        <el-button type="primary" @click="openWindow">添加导航池</el-button>
       </div>
       <div>
         <el-button @click="clearSearchList">重置</el-button>
@@ -73,28 +73,28 @@
     <!--表格内容 end------------------------------------------------------------>
 
     <!--弹出框 start------------------------------------------------------------>
-    <el-dialog title="添加导航池名称" :visible.sync="windowStatus">
+    <el-dialog :title="editId ? '编辑导航池' : '添加导航池'" :visible.sync="windowStatus" :close-on-click-modal="false">
       <el-form :model="form" ref="form" :rules="formRules" autocomplete="off" label-position="left">
         <div class="formDiv">
           <el-form-item label="导航池名称:" :label-width="formLabelWidth" prop="name" class="custom-align-right">
-            <el-input v-model="form.name" autocomplete="off"></el-input>
+            <el-input v-model="form.name" autocomplete="off" placeholder="请输入导航池名称"></el-input>
             <el-checkbox v-model="show_url" @change="ifUrl">引用外链</el-checkbox>
           </el-form-item>
           <div v-if="show_url==1">
             <el-form-item label="外链地址:" :label-width="formLabelWidth" prop="web_url" class="custom-align-right">
-              <el-input v-model="form.web_url" autocomplete="off"></el-input>
+              <el-input v-model="form.web_url" autocomplete="off" placeholder="请输入外链地址"></el-input>
             </el-form-item>
             <el-form-item label="导航标题:" :label-width="formLabelWidth" prop="seo_title" class="custom-align-right">
-              <el-input v-model="form.seo_title" autocomplete="off"></el-input>
+              <el-input v-model="form.seo_title" autocomplete="off" placeholder="请输入导航标题"></el-input>
             </el-form-item>
             <el-form-item label="导航关键词:" :label-width="formLabelWidth" prop="seo_keywords" class="custom-align-right">
-              <el-input v-model="form.seo_keywords" autocomplete="off"></el-input>
+              <el-input v-model="form.seo_keywords" autocomplete="off" placeholder="请输入导航关键词"></el-input>
             </el-form-item>
             <el-form-item label="导航描述:" :label-width="formLabelWidth" prop="seo_description" class="custom-align-right">
-              <el-input type="textarea" v-model="form.seo_description"></el-input>
+              <el-input type="textarea" v-model="form.seo_description" placeholder="请输入导航描述"></el-input>
             </el-form-item>
             <el-form-item label="排序:" :label-width="formLabelWidth" class="custom-align-right">
-              <el-input v-model="form.sort" autocomplete="off"></el-input>
+              <el-input v-model="form.sort" autocomplete="off" placeholder="请输入排序"></el-input>
             </el-form-item>
           </div>
           <div v-if="show_url==0">
@@ -104,44 +104,44 @@
             <el-form-item label="关联行政区划:" :label-width="formLabelWidth" prop="city_arr_id" class="custom-align-right">
               <el-cascader :key="cascaderKey" v-model="form.city_arr_id" placeholder="选择要绑定行政区划" :props="cityData" filterable clearable></el-cascader>
             </el-form-item>
-            <el-form-item label="父级导航:" :label-width="formLabelWidth" prop="pid_arr" class="custom-align-right">
+            <el-form-item label="父级导航:" :label-width="formLabelWidth" class="custom-align-right">
               <el-cascader :key="parentKey" v-model="form.pid_arr" placeholder="请选择要绑定的父级导航" :props="parentData" filterable clearable></el-cascader>
             </el-form-item>
             <el-form-item label="导航标题:" :label-width="formLabelWidth" prop="seo_title" class="custom-align-right">
               <template #label>
                 <span class="askBox">
-                  网站标题:
-                  <el-tooltip class="item" effect="dark" content="网站标题,如:三农市场网_网站列表_全国信息一体化网络平台_项目大全。" placement="top">
+                  导航池标题:
+                  <el-tooltip class="item" effect="dark" content="导航池标题,如:三农市场网_农资产品商城_网站列表_全国信息一体化网络平台_项目大全。" placement="top">
                     <i class="el-icon-question"></i>
                   </el-tooltip>
                 </span>
               </template>
-              <el-input v-model="form.seo_title" autocomplete="off"></el-input>
+              <el-input v-model="form.seo_title" autocomplete="off" placeholder="请输入导航标题"></el-input>
             </el-form-item>
             <el-form-item label="导航关键词:" :label-width="formLabelWidth" prop="seo_keywords" class="custom-align-right">
               <template #label>
                 <span class="askBox">
-                  网站关键词:
-                  <el-tooltip class="item" effect="dark" content="网站关键词,如:三农市场网、全国三农、信息一体化。" placement="top">
+                  导航池关键词:
+                  <el-tooltip class="item" effect="dark" content="导航池关键词,如:三农市场网、农资产品商城、全国三农、信息一体化。" placement="top">
                     <i class="el-icon-question"></i>
                   </el-tooltip>
                 </span>
               </template>
-              <el-input v-model="form.seo_keywords" autocomplete="off"></el-input>
+              <el-input v-model="form.seo_keywords" autocomplete="off" placeholder="请输入导航关键词"></el-input>
             </el-form-item>
             <el-form-item label="导航描述:" :label-width="formLabelWidth" prop="seo_description" class="custom-align-right">
               <template #label>
                 <span class="askBox">
-                  网站描述:
-                  <el-tooltip class="item" effect="dark" content="网站描述,如:中国三农市场网创建以来,社会效益和会员经济效益贡献。" placement="top">
+                  导航池描述:
+                  <el-tooltip class="item" effect="dark" content="导航池描述,如:中国三农市场网,农资产品商城属市场类频道,共有5个栏目。" placement="top">
                     <i class="el-icon-question"></i>
                   </el-tooltip>
                 </span>
               </template>
-              <el-input type="textarea" v-model="form.seo_description" class="custom-textarea"></el-input>
+              <el-input type="textarea" v-model="form.seo_description" class="custom-textarea" placeholder="请输入导航描述"></el-input>
             </el-form-item>
             <el-form-item label="排序:" :label-width="formLabelWidth" class="custom-align-right">
-              <el-input v-model="form.sort" autocomplete="off"></el-input>
+              <el-input v-model="form.sort" autocomplete="off" placeholder="请输入排序"></el-input>
             </el-form-item>
           </div>
         </div>
@@ -202,7 +202,7 @@ export default {
     //0.全局操作 end ------------------------------------------------------------>
     return {
       //1.列表和分页相关 start ------------------------------------------------------------>
-      tableDivTitle:"导航列表",
+      tableDivTitle:"导航列表",
       tableData:[],//内容
       allCount:0,//总条数
       editId:0,//要修改的网站id
@@ -276,7 +276,7 @@ export default {
 
       //3.弹出框设置 start ------------------------------------------------------------>
       windowStatus:false, //显示弹出框
-      formLabelWidth: '120px',
+      formLabelWidth: '140px',
       show_url:false, //是否显示外链输入框
       editBtn:false,//当显示编辑按钮的时候,就不显示提交
       //弹出框设置 end ------------------------------------------------------------>
@@ -303,7 +303,7 @@ export default {
         web_url:[{required:true,trigger:'blur',validator:validateEmpty}],//外链地址���能为空
         department_arr_id: [{type:'array',required:true,trigger:'change',message:'请选择职能部门!',validator:validateDepartment}],
         city_arr_id: [{type:'array',required:true,trigger:'change',message:'请选择行政区划!',validator:validateCity}],
-        pid_arr: [{type:'array',required:true,trigger:'change',message:'请选择父级导航!',validator:validatePid}],
+        //pid_arr: [{type:'array',required:true,trigger:'change',message:'请选择父级导航!',validator:validatePid}],
         seo_title:[{required:true,trigger:'blur',validator:validateEmpty}],//标题不能为空
         seo_keywords:[{required:true,trigger:'blur',validator:validateEmpty}],//关键词不能为空
         seo_description:[{required:true,trigger:'blur',validator:validateEmpty}],//描述不能为空
@@ -529,6 +529,10 @@ export default {
       if(this.show_url == true){
         this.clearToServe(1)
       }
+      //判断有没有添加父级导航
+      if(this.form.pid_arr.length==0){
+        this.form.pid_arr = [0];
+      }
       this.$refs.form.validate(valid => {
         if (valid) {
           this.$store.dispatch('pool/addCategory',this.form).then(res=> {
@@ -575,7 +579,7 @@ export default {
         }else if(res.data.is_url==0||res.data.is_url==null){
           this.show_url = false;
         }
-        console.log(111111111111111111111111)
+       
         console.log(res.data.is_url)
 
         //回显外链

+ 251 - 0
src/views/website/creatWebsite.vue

@@ -0,0 +1,251 @@
+<template>
+  <div class="mainBox">
+    <div class="layerBox">
+      <tableTitle :name="headerTitle"/>
+      <div class="menuTopBox">
+        <div class="menuItem" @click="addModule(1)">
+          <img src="@/assets/public/sidebar/default/index.png">
+          顶部菜单(含登录)
+        </div>
+        <div class="menuItem" @click="addModule(2)">
+          <img src="@/assets/public/sidebar/default/index.png">
+          Logo栏
+        </div>
+        <div class="menuItem" @click="addModule(3)">
+          <img src="@/assets/public/sidebar/default/index.png">
+          导航菜单
+        </div>
+        <div class="menuItem" @click="addModule(4)">
+          <img src="@/assets/public/sidebar/default/index.png">
+          轮播图
+        </div>
+        <div class="menuItem" @click="addModule(5)">
+          <img src="@/assets/public/sidebar/default/index.png">
+          多分类列表
+        </div>
+        <div class="menuItem" @click="addModule(6)">
+          <img src="@/assets/public/sidebar/default/index.png">
+          多图列表
+        </div>
+        <div class="menuItem" @click="addModule(7)">
+          <img src="@/assets/public/sidebar/default/index.png">
+          纯文本列表
+        </div>
+        <div class="menuItem" @click="addModule(8)">
+          <img src="@/assets/public/sidebar/default/index.png">
+          图文列表
+        </div>
+        <div class="menuItem" @click="addModule(9)">
+          <img src="@/assets/public/sidebar/default/index.png">
+          排行榜列表
+        </div>
+        <div class="menuItem" @click="addModule(10)">
+          <img src="@/assets/public/sidebar/default/index.png">
+          友情链接
+        </div>
+        <div class="menuItem" @click="addModule(11)">
+          <img src="@/assets/public/sidebar/default/index.png">
+          纯文本
+        </div>
+      </div>
+    </div>
+    <div class="layerBox">
+      <tableTitle :name="websiteTitle"/>
+      <!-- 栅格布局 start ---------------------------------------->
+      <div class="grid-layout-demo">
+        <grid-layout :layout="layout" :col-num="12" :row-height="30" :is-draggable="true" :is-resizable="true">
+          <grid-item
+            v-for="(item, index) in layout"
+            :key="item.i"
+            :i="item.i"
+            :x="item.x"
+            :y="item.y"
+            :w="item.w"
+            :h="item.h"
+          >
+            <div class="grid-item-content">
+              <!-- 模块内容 --> 
+              <div v-if="item.type == 1">
+                111
+              </div>
+
+
+
+              {{ item.content }}
+              <button @click="openWindow(item)">编辑</button>
+            </div>
+          </grid-item>
+        </grid-layout>
+      </div>
+      <!-- 栅格布局 end ---------------------------------------->
+    </div>
+
+    <!--弹出框 start------------------------------------------------------------>
+    <el-dialog title="编辑模块" :visible.sync="windowStatus">
+      <el-form :model="form" ref="form" autocomplete="off" label-position="left">
+        <div class="formDiv">
+          <el-form-item label="内容" :label-width="formLabelWidth" prop="alias" class="custom-align-right">
+            <el-input v-model="form.content" autocomplete="off"></el-input>
+            <input type="hidden" v-model="form.seo_title">
+          </el-form-item>
+        </div>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <div>
+          <el-button @click="closeWindow">取 消</el-button>
+          <el-button type="primary" @click="editGridItem">确定</el-button>
+        </div>
+      </div>
+    </el-dialog>
+    <!--弹出框 end------------------------------------------------------------>
+
+  </div>
+</template>
+
+<script>
+//引入公用样式
+import '@/styles/global.less';
+//引入vue-grid-layout
+import { GridLayout, GridItem } from 'vue-grid-layout';
+//标题
+import tableTitle from './components/tableTitle';
+
+export default {
+  components: {
+    GridLayout,
+    GridItem,
+    tableTitle
+  },
+  data() {
+    return {
+      //页面 start------------------------------------------------------------>
+      headerTitle: '模块',
+      websiteTitle: '预览',
+      windowStatus: false,
+      //页面 end------------------------------------------------------------>
+
+      //弹出框 start------------------------------------------------------------>
+      formLabelWidth: '120px',
+      editModule: "",//待编辑的模块
+      form: {
+        content: '',
+      },
+      //弹出框 end------------------------------------------------------------>
+
+      //预览 start------------------------------------------------------------>
+      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:""},
+        // { i: "2", x: 3, y: 0, w: 3, h: 2, content:""},
+        // { i: "3", x: 6, y: 0, w: 3, h: 2, content:""}
+      ]
+      //预览 end------------------------------------------------------------>
+    }
+  },
+  methods: {
+    //添加模块
+    addModule(type) {
+      console.log(type);
+      this.layout.push({
+         i: this.layout.length, 
+         x: 0, 
+         y: 0, 
+         w: 12, 
+         h: 1, 
+         type: type, //1=顶部菜单(含登录) ..
+         content:""});
+    },
+
+
+
+
+
+    //打开弹出框
+    openWindow(item) {
+      this.editModule = item.i;
+      this.windowStatus = true;
+    },
+
+    //编辑栅格布局
+    editGridItem() {
+      console.log(this.editModule);
+      //找对在栅栏中对应的窗口,把编辑的值放进去
+      for(let i = 0; i < this.layout.length; i++) {
+        if(this.layout[i].i == this.editModule) {
+          this.layout[i].content = this.form.content;
+        }
+      }
+      //关闭窗口
+      this.windowStatus = false;
+    },
+
+    //关闭弹出框
+    closeWindow() {
+      this.windowStatus = false;
+    }
+
+  },
+  mounted(){
+    const id = this.$route.query.id;
+    console.log('Retrieved ID from route:', id);
+  }
+}
+</script>
+
+<style scoped lang="less">
+
+
+  //菜单 start------------------------------------------------------------> 
+  .layerBox {
+    padding-bottom: 10px;
+  }
+  .menuTopBox{
+    display: flex;
+    flex-wrap: wrap;
+  }
+  .menuItem{
+    display: flex;
+    align-items: center;
+    border-radius:10px;
+    padding: 5px 10px;
+    cursor: pointer;
+    background: #f0f2f5;
+    font-size: 14px;
+    color: #666;
+    margin-right: 10px;
+    margin-bottom: 10px;
+    img {
+      margin-right: 5px;
+    }
+  }
+
+  //栅格布局 start------------------------------------------------------------> 
+  .grid-layout-demo {
+    background-color: #f0f2f5;
+    padding: 20px;
+  }
+  .grid-item-content {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    background-color: #fff;
+    border: 1px solid #d9d9d9;
+    height: 100%;
+  }
+  //栅格布局 end------------------------------------------------------------> 
+
+  //执行v-deep穿透scope选择器 start------------------------------------------------------------>*/
+  ::v-deep .custom-form-item > .el-form-item__label {
+    line-height: 140px !important;
+  }
+  ::v-deep .custom-textarea .el-textarea__inner {
+    resize: none; /* 禁止用户拖拽调整大小 */
+  }
+  ::v-deep .custom-align-right .el-form-item__label {
+    text-align: right; /* 设置标签文字右对齐 */
+  }
+  //执行v-deep穿透scope选择器 end------------------------------------------------------------>*/
+</style>  
+

+ 10 - 7
src/views/website/editNavigation.vue

@@ -19,7 +19,7 @@
           <el-col :span="8">
             <div class="searchBox">
               <div class="searchTitle">行政职能部门:</div>
-              <el-cascader :key="searchDepartmentKey" v-model="getApiData.department_id" placeholder="选择导航池所属行政区划" :props="searchDepartmentData" filterable clearable></el-cascader>
+              <el-cascader :key="searchDepartmentKey" v-model="getApiData.department_id" placeholder="请选择行政职能部门" :props="searchDepartmentData" filterable clearable></el-cascader>
             </div>
           </el-col>
         </el-row>
@@ -51,8 +51,8 @@
         <template>
           <el-table :data="tableData" style="width: 100%">
             <el-table-column fixed prop="id" label="编号" width="50"></el-table-column>
-            <el-table-column prop="alias" label="网站导航"></el-table-column>
-            <el-table-column prop="name" label="导航名称"></el-table-column>
+            <el-table-column prop="name" label="导航池名称"></el-table-column>
+            <el-table-column prop="alias" label="导航名称"></el-table-column>
             <el-table-column prop="created_at" label="创建时间"></el-table-column>
             <el-table-column prop="updated_at" label="修改时间"></el-table-column>
             <el-table-column fixed="right" label="操作" width="120" header-align="center">
@@ -79,17 +79,18 @@
     <!--表格内容 end------------------------------------------------------------>
 
     <!--弹出框start------------------------------------------------------------>
-    <el-dialog title="编辑导航" :visible.sync="windowStatus">
+    <el-dialog title="编辑导航" :visible.sync="windowStatus">
       <el-form :model="form" ref="form" :rules="formRules" autocomplete="off" label-position="left">
         <div class="formDiv">
           <el-form-item label="导航名称:" :label-width="formLabelWidth" prop="alias" class="custom-align-right">
             <el-input v-model="form.alias" autocomplete="off"></el-input>
+            <input type="hidden" v-model="form.seo_title">
           </el-form-item>
-          <el-form-item label="导航seo名称:" :label-width="formLabelWidth" prop="seo_title" class="custom-align-right">
+          <!-- <el-form-item label="导航名称:" :label-width="formLabelWidth" prop="seo_title" class="custom-align-right">
             <div class="formLabelFloatBox">
               <el-input v-model="form.seo_title" autocomplete="off"></el-input>
             </div>
-          </el-form-item>
+          </el-form-item> -->
           <el-form-item label="导航关键词:" :label-width="formLabelWidth" prop="seo_keywords" class="custom-align-right">
             <div class="formLabelFloatBox">
               <el-input v-model="form.seo_keywords" autocomplete="off"></el-input>
@@ -234,7 +235,7 @@ export default {
         //网站名称不能为空
         alias:[{required:true,trigger:'blur',validator:validateEmpty}],
         //网站标题,关键词,描述不能为空
-        seo_title:[{required:true,trigger:'blur',validator:validateEmpty}],
+        //seo_title:[{required:true,trigger:'blur',validator:validateEmpty}],
         seo_keywords:[{required:true,trigger:'blur',validator:validateEmpty}],
         seo_description:[{required:true,trigger:'blur',validator:validateEmpty}],
       },
@@ -327,6 +328,8 @@ export default {
     },
     //提交编辑的数据
     addToServe(){
+      //把标题的值给与seo_title
+      this.form.seo_title = this.form.alias;
       this.$refs.form.validate(valid => {
         if (valid) {
           this.$store.dispatch('pool/upWebsiteCategoryones',this.form).then(res=> {

+ 62 - 25
src/views/website/websiteColumn.vue

@@ -9,17 +9,17 @@
             <el-input placeholder="请输入网站名称" autocomplete="off" v-model="getApiData.keyword"/>
           </div>
         </el-col>
-        <el-col :span="8">
+        <!-- <el-col :span="8">
           <div class="searchBox">
             <div class="searchTitle">网系名称:</div>
             <el-cascader v-model="getApiData.website_column_id" :props="{checkStrictly:true}" :options="website_column_arr" clearable></el-cascader>
           </div>
-        </el-col>
+        </el-col> -->
       </el-row>
     </div>
     <div class="layerBoxNoBg">
       <div>
-        <el-button type="primary" @click="openWindow">添加导航名称</el-button>
+        <el-button type="primary" @click="openWindow">关联导航池</el-button>
       </div>
       <div>
         <el-button @click="clearSearch">重置</el-button>
@@ -35,8 +35,9 @@
         <template>
           <el-table :data="tableData" style="width: 100%">
             <el-table-column fixed prop="id" label="编号" width="50"></el-table-column>
-            <el-table-column prop="website_category" label="导航名称"></el-table-column>
+            <el-table-column prop="website_category" label="导航名称"></el-table-column>
             <el-table-column prop="website_name" label="网站名称"></el-table-column>
+            <el-table-column prop="website_nav" label="导航名称"></el-table-column>
             <el-table-column prop="created_at" label="创建时间"></el-table-column>
             <el-table-column prop="updated_at" label="修改时间"></el-table-column>
             <el-table-column fixed="right" label="操作" width="280" header-align="center">
@@ -68,12 +69,12 @@
     <!--表格内容 end------------------------------------------------------------>
 
     <!--弹出框 start------------------------------------------------------------>
-    <el-dialog title="编辑导航名称" :visible.sync="windowStatus">
+    <el-dialog :title="editId ? '关联导航池' : '编辑关联导航池'" :visible.sync="windowStatus" :close-on-click-modal="false">
       <el-form :model="form" ref="form" :rules="formRules" label-position="left">
         <div class="formDiv">
           <el-form-item label="关联网站名称:" :label-width="formLabelWidth" prop="webSiteName" class="custom-align-right">
-            <el-select v-model="form.webSiteName" :multiple="false" :multiple-limit="1" filterable remote reserve-keyword placeholder="请输入关键词"
-                :remote-method="getWebNavList" :loading="webSiteLoading">
+            <el-select v-model="form.webSiteName" :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"
@@ -83,7 +84,7 @@
               </el-select>
           </el-form-item>
           <el-form-item label="导航名称:" :label-width="formLabelWidth" prop="navNames" class="custom-align-right">
-            <el-select v-model="form.navNames" multiple filterable remote reserve-keyword placeholder="请输入关键词"
+            <el-select v-model="form.navNames" multiple filterable remote reserve-keyword placeholder="请输入导航关键词"
                 :remote-method="getWebsiteList" :loading="navNamesLoading">
                 <el-option
                   v-for="item in navList"
@@ -98,7 +99,7 @@
       <div slot="footer" class="dialog-footer">
         <div>
           <el-button @click="closeWindow">取 消</el-button>
-          <el-button type="warning" @click="editToServe" v-if="editBtn==true">编辑</el-button>
+          <el-button type="warning" @click="editToServe" v-if="editBtn==true" :loading="editLoading" :disabled="editLoading">编辑</el-button>
           <el-button type="primary" @click="addToServe" v-else>提交</el-button>
         </div>
       </div>
@@ -136,7 +137,7 @@ export default {
      //0.全局操作 end ------------------------------------------------------------>
     return {
       //1.列表和分页相关 start ------------------------------------------------------------>
-      tableDivTitle:"导航列表",
+      tableDivTitle:"网站导航列表",
       tableData: [],//列表
       allCount:0,//总条数
       editId:0,//要修改的网站id
@@ -154,6 +155,7 @@ export default {
       windowStatus:false,
       formLabelWidth: '120px',
       editBtn:false,//当显示编辑按钮的时候,就不显示提交
+      editLoading:false,//编辑按钮的加载中  
       //弹出框设置 end ------------------------------------------------------------>
 
       //3.弹出框中的表单设置 start ------------------------------------------------------------>
@@ -188,6 +190,23 @@ export default {
       }
       this.$store.dispatch('pool/getWebsiteCategoryList',this.getApiData).then(res=> {
         let data = res.data.rows;
+        //给数据得
+        for(let item of res.data.rows){
+          item.website_nav = "";
+        }
+        //显示导航名称
+        data.forEach(item => {
+          if (item.website_category && item.website_category.length > 0) {
+            // 如果 website_category 有值,提取 name 并用逗号隔开
+            const categoryNames = item.website_category.map(category => category.alias);
+            // 将结果存储在一个新的属性上,去掉两端的方括号
+            item.website_nav = categoryNames.join(', ');
+          } else {
+            // 如果没有值,可以设置为空数组或其他处理
+            item.website_nav = '';
+          }
+        });
+        //显示导航池名称
         data.forEach(item => {
           if (item.website_category && item.website_category.length > 0) {
             // 如果 website_category 有值,提取 name 并用逗号隔开
@@ -350,8 +369,8 @@ export default {
           console.log(res.data)
           for(let item of res.data){
             let data = {};
-            data.key = item.id;
-            data.value = item.id;
+            data.key = item.category_id;
+            data.value = item.category_id;
             data.label = item.name;
             dataArr.push(data)
           }
@@ -431,15 +450,15 @@ export default {
         this.navList = categories.map(item => {
           return {
             label: item.name,// 显示的名称
-            value: item.id// 选项的唯一标识符
+            value: item.category_id// 选项的唯一标识符
           };
         });
         //将选中的导航 ID 列表设置到 form.navNames 中
-        this.form.navNames = categories.map(item => item.id);
+        this.form.navNames = categories.map(item => item.category_id);
         //把老的导航存起来
         if(res.data.length>0){
           for(let item of res.data){
-            this.ordArr.push(item.id)
+            this.ordArr.push(item.category_id) //之前拿的是id 现在改为category_id
           }
         }
       }).catch(() => {
@@ -451,19 +470,20 @@ export default {
     },
     //更新网站导航
     editToServe() {
-      //把��的和新的都提交过去
-      //检查新数组,如果新数组中包含老数组的数据,就把老数组中的数组删除掉
-      this.ordArr = this.ordArr.filter(item => {
-        // 只有当 item 不在 this.form.navNames 中时才保留
-        return !this.form.navNames.includes(item);
-      });
-      //console.log(this.ordArr)
-      //console.log(this.form.navNames)
+      this.editLoading = true;
+      //把老数组和新数组都提交过去
+      console.log(this.ordArr)
+      const olddata = this.ordArr.filter(id => !this.form.navNames.includes(id));
+      this.ordArr = olddata;
+      console.log("老数组为:"+ olddata)
+      console.log("新数组为:"+ this.form.navNames)
       let data = {
-        old_category_arr_id:this.ordArr,
+        //old_category_arr_id:this.ordArr,
+        old_category_arr_id:[],
         new_category_arr_id:this.form.navNames,
         website_id:this.editId
       }
+      console.log(data)
       this.$refs.form.validate(valid => {
         if (valid) {
           this.$store.dispatch('pool/upWebsiteCategory',data).then(res=> {
@@ -477,11 +497,13 @@ export default {
             this.closeWindow();
             //重新请求页面
             this.getData();
+            this.editLoading = false;
           }).catch(() => {
             this.$message({
               type: 'info',
               message: '网络错误,请重试!'
             });
+            this.editLoading = false;
           })
         }
       })
@@ -501,9 +523,24 @@ export default {
         path: '/editNavigation',
         query: data
       });
+    },
+    //判断是否已经关联了网站
+    detectionWebSite(value){
+      let data  = {
+        website_id:value
+      }
+      //验证一下是不是存在了关联网站名称
+      this.$store.dispatch('pool/getAdminWebsiteCategory',data).then(res=> {
+        if(res.data.length>0){
+          this.form.webSiteName = "";
+          this.$message({
+            type: 'warning',
+            message: '该网站已经关联了导航,请重新选择!'
+          });
+        }
+      })
     }
     //编辑网站 end ------------------------------------------------------------>
-
   },
   mounted(){
     //1.获得初始数据