Jing 1 semana atrás
pai
commit
1857147c15

BIN
src/assets/public/nav/message-empty.png


BIN
src/assets/public/nav/message-goods.png


BIN
src/assets/public/nav/message-news.png


BIN
src/assets/public/nav/notice1.png


+ 399 - 19
src/layout/components/Navbar.vue

@@ -16,7 +16,156 @@
         </el-tooltip>
         <lang-select class="right-menu-item hover-effect" />
       </template> -->
-      
+      <div class="noticeIconBox">
+        <img src="@/assets/public/nav/notice1.png" class="noticeIconImg" @click="showTabs = !showTabs"/>
+        <span class="unreadCount">{{msg.count}}</span>
+        <!-- <img src="@/assets/public/nav/arrowDown.png" class="arrowDown" /> -->
+
+        <div class="noticeTabsBox" v-if="showTabs" ref="noticeTabsBox">
+          <div class="noticeTabsTitleBox">
+            <div :class="{'noticeTabs': true, 'active': tabsIndex == 1}" @click="changeTabs(1)">
+              <div class="noticeTabsItem">
+                资讯
+                <span class="noticeMessageNew" v-if="msg.apply_articale.length > 0"></span>
+              </div>
+            </div>
+            <div :class="{'noticeTabs': true, 'active': tabsIndex == 2}" @click="changeTabs(2)" v-if="msg.good">
+              <div class="noticeTabsItem">
+                商品
+                <span class="noticeMessageNew" v-if="msg.good.length > 0"></span>
+              </div>
+            </div>
+            <!-- <div :class="{'noticeTabs': true, 'active': tabsIndex == 3}" @click="changeTabs(3)">
+              <div class="noticeTabsItem">
+                求职招聘
+                <span class="noticeMessageNew"></span>
+              </div>
+            </div> -->
+          </div>
+          <div class="noticeTabsLinkLine">
+            <div v-if="userType == 10000">
+              <div v-if="tabsIndex == 1" @click="goToPath(1,0)">待审核列表</div>
+              <div v-if="tabsIndex == 2" @click="goToPath(2,0)">待审核列表</div>
+              <div v-if="tabsIndex == 3" @click="goToPath(3,0)">待审核列表</div>
+            </div>
+            <div v-else>
+              <div v-if="tabsIndex == 1" @click="goToPath(1,-1)">资讯列表</div>
+              <div v-if="tabsIndex == 2" @click="goToPath(2,-1)">商品列表</div>
+              <div v-if="tabsIndex == 3" @click="goToPath(3,-1)">求职招聘列表</div>
+            </div>
+          </div>
+          <div class="noticeTabsDataBox" v-if="tabsIndex==1">
+            <div v-if="msg.apply_articale && msg.apply_articale.length > 0">
+              <div class="noticeTabsDataItem" v-for="item in msg.apply_articale" :key="item.id" @click="goToPath(1,item.id)">
+                <div class="noticeTabsDataItemImg newsIcon">
+                  <img src="@/assets/public/nav/message-news.png">
+                </div>
+                <div class="noticeTabsDataItemContent">
+                  <div class="noticeNewsTitle">{{item.title}}</div>
+                  <div class="noticeNewsTime">{{item.updated_at}}</div>
+                </div>
+              </div>
+            </div>
+            <div v-else class="noticeTabsDataItemEmpty">
+              <div class="noticeEmpty">
+                <img src="@/assets/public/nav/message-empty.png">
+              </div>
+              <div class="noticeEmptyText">
+                暂无消息
+              </div>
+            </div>
+          </div>
+          <div class="noticeTabsDataBox" v-if="tabsIndex==2">
+            <div v-if="msg.good && msg.good.length > 0">
+              <div class="noticeTabsDataItem" v-for="item in msg.good" :key="item.id" @click="goToPath(2,item.id)">
+                <div class="noticeTabsDataItemImg newsIcon">
+                  <img src="@/assets/public/nav/message-news.png">
+                </div>
+                <div class="noticeTabsDataItemContent">
+                  <div class="noticeNewsTitle">{{item.name}}</div>
+                  <div class="noticeNewsTime">{{item.updated_at}}</div>
+                </div>
+              </div>
+            </div>
+            <div v-else class="noticeTabsDataItemEmpty">
+              <div class="noticeEmpty">
+                <img src="@/assets/public/nav/message-empty.png">
+              </div>
+              <div class="noticeEmptyText">
+                暂无消息
+              </div>
+            </div>
+          </div>
+          <!-- <div class="noticeTabsDataBox" v-if="tabsIndex==3">
+            
+          </div> -->
+        </div>
+      </div>
+
+      <!--刘剑 --> 
+      <!--<el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
+        <div class="avatar-wrapper">
+          <div class="avatar-wrapper">
+            <img src="@/assets/public/nav/notice1.png" class="user-notice" style="width:40px;height:40px;" />
+            <span class="unread-count">{{msg.count}}</span>
+            <img src="@/assets/public/nav/arrowDown.png" class="arrowDown" />
+          </div>
+        </div>
+        <el-dropdown-menu slot="dropdown" style="width: 200px;">
+          <router-link to="/examine" v-if="msg.apply_articale && msg.apply_articale.length > 0">
+            <div class="userMenuDownItem">
+              <el-dropdown-item>
+                <span style="display:block; text-align: center; width: 100%; color: #409EFF;">审核列表</span>
+              </el-dropdown-item>
+            </div>
+          </router-link>
+          <router-link :to="`/creatNews?id=${item.id}`" v-for="item in msg.apply_articale" :key="item.id">
+            <div class="userMenuDownItem" style="width: 200px;">
+              <el-dropdown-item divided style="width: 200px;">
+                <el-tooltip :content="item.title" effect="dark" placement="top">
+                  <span style="display:block;width: 150px;" :alt="item.title">{{ item.title.substring(0, 10) }}</span>
+                </el-tooltip>
+              </el-dropdown-item>
+            </div>
+          </router-link>
+          <router-link to="/hall" v-if="msg.chat && msg.chat.length > 0">
+            <div class="userMenuDownItem">
+              <el-dropdown-item>
+                <span style="display:block;  color: #409EFF;">未读单聊</span>
+              </el-dropdown-item>
+            </div>
+          </router-link>
+          <router-link to="/hall" v-for="item in msg.chat" :key="item.id">
+            <div class="userMenuDownItem" style="width: 200px;">
+              <el-dropdown-item divided style="width: 200px;">
+                <el-tooltip :content="item.content" effect="dark" placement="top">
+                  <span style="display:block;width: 150px;" :alt="item.content">{{ item.content.substring(0, 10)
+                  }}</span>
+                </el-tooltip>
+              </el-dropdown-item>
+            </div>
+          </router-link>
+          <router-link to="/hall" v-if="msg.chat_group && msg.chat_group.length > 0">
+            <div class="userMenuDownItem">
+              <el-dropdown-item>
+                <span style="display:block; color: #409EFF;">未读群聊</span>
+              </el-dropdown-item>
+            </div>
+          </router-link>
+          <router-link to="/hall" v-for="item in msg.chat_group" :key="item.id">
+            <div class="userMenuDownItem" style="width: 200px;">
+              <el-dropdown-item divided style="width: 200px;">
+                <el-tooltip :content="item.content" effect="dark" placement="top">
+                  <span style="display:block;width: 150px;" :alt="item.content">{{ item.content.substring(0, 10)
+                  }}</span>
+                </el-tooltip>
+              </el-dropdown-item>
+            </div>
+          </router-link>
+        </el-dropdown-menu>
+      </el-dropdown> -->
+
+      <!-- 用户头像和菜单 --> 
       <el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
         <div class="avatar-wrapper">
           <!-- <img src="@/assets/public/nav/notice.png" class="user-notice"> -->
@@ -56,6 +205,7 @@
           </el-dropdown-item>
         </el-dropdown-menu>
       </el-dropdown>
+
     </div>
   </div>
 </template>
@@ -72,6 +222,7 @@ import Search from '@/components/HeaderSearch'
 import axios from 'axios';
 import router, { resetRouter } from '@/router'
 import BASEURL from '@/utils/baseUrl'
+import { getUseType } from '@/utils/auth'
 
 export default {
   components: {
@@ -85,7 +236,10 @@ export default {
   },
   data() {
     return {
-      msg: {}
+      msg: {},
+      userType: '', //用户类型
+      tabsIndex: 1, //显示哪个选项卡
+      showTabs: false //是否显示悬浮菜单
     }
   },
   computed: {
@@ -97,28 +251,27 @@ export default {
   },
   mounted() {
     this.getMsg();
+    //获得用户类型
+    this.userType = getUseType();
+
+    // 添加点击事件监听器
+    document.addEventListener('click', this.handleClickOutside);
+  },
+  beforeDestroy() {
+    // 组件销毁前移除事件监听器
+    document.removeEventListener('click', this.handleClickOutside);
   },
   methods: {
-    getMsg() {
-      this.$store.dispatch('news/getMSG').then(response => {
-        console.log(response);
-        this.msg = response.data;
-        console.log(this.msg);
-      }).catch(error => {
-        console.log(error);
-      });
-    },
+    //0.收缩菜单 start---------------------------------------->
     toggleSideBar() {
       this.$store.dispatch('app/toggleSideBar')
     },
-    // async logout() {
-    //   await this.$store.dispatch('user/logout')
-    //   this.$router.push(`/login?redirect=${this.$route.fullPath}`)
-    // },
+    //0.收缩菜单 end---------------------------------------->
+
+    //1.退出登录 start---------------------------------------->
     logout() {
       //获取 token
       const token = this.getTokenFromCookie();
-
       // 新做的,待替换
       // this.$store.dispatch('user/logoutapi', {token: token}).then(response => {
       //   //重置访问过的路由
@@ -131,7 +284,6 @@ export default {
       //   this.$store.commit("user/LOGOUT");
       //   this.$router.push(`/login`);
       // });
-
       axios.get(BASEURL.WebCLogoutUrl, { params: { token: token } }).then(response => {
         console.log(response);
         this.$store.commit("user/LOGOUT");
@@ -143,6 +295,10 @@ export default {
         this.$message.error(response.message);
       });
     },
+    // async logout() {
+    //   await this.$store.dispatch('user/logout')
+    //   this.$router.push(`/login?redirect=${this.$route.fullPath}`)
+    // },
     getTokenFromCookie() {
       const name = "Admin-Token=";
       const decodedCookie = decodeURIComponent(document.cookie);
@@ -154,7 +310,65 @@ export default {
         }
       }
       return ""; // 如果没有找到 token,返回空字符串
-    }
+    },
+    //1.退出登录 end---------------------------------------->
+
+    //2.通知消息 start---------------------------------------->
+    //2.1 获取通知消息列表
+    getMsg() {
+      this.$store.dispatch('news/getMSG').then(response => {
+        console.log(response);
+        this.msg = response.data;
+        console.log(this.msg);
+      }).catch(error => {
+        console.log(error);
+      });
+    },
+    //2.2 切换
+    changeTabs(index) {
+      this.tabsIndex = index;
+    },
+    //2.3跳转方法
+    goToPath(type,id){
+      //如果id是0 跳转到列表
+      if(id==0){
+        if(type == 1){
+          this.$router.push(`/examine`);
+        }else if(type == 2){
+          this.$router.push(`/goodListApply`);
+        }else if(type == 3){
+          this.$router.push(`/jobHuntingList`);
+        }
+      }else if(id==-1){
+        if(type == 1){
+          this.$router.push(`/articleList`);
+        }else if(type == 2){
+          this.$router.push(`/goodList`);
+        }else if(type == 3){
+          this.$router.push(`/jobHuntingList`);
+        }
+      }else{
+        if(type == 1){
+          this.$router.push(`/creatNews?id=${id}`);
+        }else if(type == 2){
+          this.$router.push(`/addGood?id=${id}`);
+        }else if(type == 3){
+          this.$router.push(`/addJobHunting?id=${id}`);
+        }
+      }
+      this.showTabs = false;
+    },
+    // 添加处理点击外部的方法
+    handleClickOutside(event) {
+      const noticeTabsBox = this.$refs.noticeTabsBox;
+      const noticeIconImg = event.target.closest('.noticeIconImg');
+      
+      // 如果点击的不是通知图标,并且点击的区域不在通知框内,则关闭通知框
+      if (!noticeIconImg && noticeTabsBox && !noticeTabsBox.contains(event.target)) {
+        this.showTabs = false;
+      }
+    },
+    //2.通知消息 end---------------------------------------->
   }
 }
 </script>
@@ -162,7 +376,6 @@ export default {
 <style lang="scss" scoped>
 .navbar {
   height: 60px;
-  overflow: hidden;
   position: relative;
   display: flex;
   align-items: center;
@@ -212,6 +425,9 @@ export default {
     float: right;
     height: 100%;
     line-height: 50px;
+    display: flex;
+    align-items: center;
+    position: relative;
 
     &:focus {
       outline: none;
@@ -270,6 +486,149 @@ export default {
         }
       }
     }
+
+    //通知消息 图标
+    .noticeIconBox {
+      width: 45px;
+      height: 50px;
+      box-sizing: border-box;
+      padding-top: 8px;
+      position: relative;
+      .noticeIconImg {
+        width: 34px;
+        height: 34px;
+        cursor: pointer;
+      }
+      .unreadCount{
+        position: absolute;
+        top: 5px;
+        right: 10px;
+        width: 16px;
+        height: 16px;
+        background: #FF4E4E;
+        font-size: 12px;
+        line-height: 16px;
+        text-align: center;
+        color: #fff;
+        border-radius: 50%;
+      }
+      //通知消息 悬浮菜单
+      .noticeTabsBox {
+        position: absolute;
+        width: 380px;
+        height: 640px;
+        border-radius: 8px;
+        background: #fff;
+        z-index: 999;
+        right: 20px;
+        top: 50px;
+        box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.15);
+        padding:25px 20px;
+        box-sizing: border-box;
+        .noticeTabsTitleBox {
+          display: flex;
+          align-items: center;
+          border-bottom: 1px solid #E9EDF7;
+          .noticeTabs {
+            height: 41px;
+            border-bottom: 2px solid #fff;
+            margin-right: 40px;
+            display: flex;
+            cursor: pointer;
+            .noticeTabsItem {
+              height: 20px;
+              line-height: 20px;
+              font-size: 16px;
+              position: relative;
+              .noticeMessageNew {
+                width: 5px;
+                height: 5px;
+                border-radius: 50%;
+                background: #FF4E4E;
+                position: absolute;
+                right: -5px;
+                top: 0;
+              }
+            }
+          }
+          .active {
+            border-bottom: 2px solid #5570F1;
+          }
+        }
+        .noticeTabsLinkLine {
+          height: 38px;
+          box-sizing: border-box;
+          font-size: 14px;
+          cursor: pointer;
+          background: #F5F7FB;
+          border:1px solid #E3E8FA;
+          text-align: center;
+          line-height: 38px;
+          border-radius: 8px;
+          margin: 20px 0;
+        }
+        .noticeTabsDataBox {
+          .noticeTabsDataItem {
+            display: flex;
+            align-items: flex-start;
+            cursor: pointer;
+            border-radius: 8px;
+            box-sizing: border-box;
+            padding: 5px 10px;
+            &:hover {
+              background: #F5F7FB;
+            }
+            height: 95px;
+            .noticeTabsDataItemImg {
+              border-radius: 50%;
+              width: 26px;
+              height: 26px;
+              display: flex;
+              align-items: center;
+              justify-content: center;
+              margin-right: 15px;
+              margin-top: 6px;
+            }
+            .newsIcon{
+              background: #BAC5F8;
+            }
+            .noticeTabsDataItemContent{
+              flex: 1;
+              .noticeNewsTitle {
+                font-size: 14px;
+                line-height: 28px;
+                height: 56px;
+                color: #333;
+                overflow: hidden;
+                text-overflow: ellipsis;
+                display: -webkit-box;
+                -webkit-line-clamp: 2;
+                -webkit-box-orient: vertical;
+              }
+              .noticeNewsTime {
+                height: 30px;
+                line-height:30px;
+                font-size: 14px;
+                color:#999;
+              }
+            }
+          }
+          .noticeTabsDataItemEmpty {
+            .noticeEmpty {
+              text-align: center;
+              padding-top: 150px;
+              box-sizing: border-box;
+            }
+            .noticeEmptyText {
+              text-align: center;
+              color: #999;
+              font-size: 14px;
+            }
+          }
+        }
+      }
+    }
+
   }
 }
 
@@ -284,4 +643,25 @@ export default {
   background: none;
   color: #606266;
 }
+
+.unread-count {
+  position: relative;
+  display: inline-block;
+  width: 20px;
+  height: 20px;
+  border-radius: 50%;
+  background-color: red;
+  color: white;
+  font-size: 12px;
+  text-align: center;
+  line-height: 20px;
+  margin-left: -40px;
+  margin-top: -20px;
+  /* 调整位置,使其贴合通知图标 */
+}
+
+/* 如果未读数量为 0,则隐藏角标 */
+.unread-count:empty {
+  display: none;
+}
 </style>

+ 3 - 1
src/permission.js

@@ -3,8 +3,9 @@ import store from './store'
 import { Message } from 'element-ui'
 import NProgress from 'nprogress' // progress bar
 import 'nprogress/nprogress.css' // progress bar style
-import { getToken } from '@/utils/auth' // get token from cookie
+import { getToken,setUserUrl } from '@/utils/auth' // get token from cookie
 import getPageTitle from '@/utils/get-page-title'
+import URL from '@/utils/baseUrl';
 
 NProgress.configure({ showSpinner: false }) // NProgress Configuration
 
@@ -66,6 +67,7 @@ router.beforeEach(async(to, from, next) => {
       // other pages that do not have permission to access are redirected to the login page.
       next(`/login?redirect=${to.path}`)
       NProgress.done()
+      setUserUrl(URL.webUrl, 86400)
     }
   }
 })

+ 48 - 0
src/router/index.js

@@ -630,6 +630,54 @@ export const constantRoutes = [
       }
     ]
   },
+  {
+    path: '/goodList',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/news/GoodList'),
+        meta: {
+          title: '商品列表',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/goodListApply',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/news/GoodListApply'),
+        meta: {
+          title: '商品待审核列表',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/addGood',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/news/addGood'),
+        meta: {
+          title: '添加商品',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
 ]
 
 /**

+ 2 - 0
src/utils/baseUrl.js

@@ -1,4 +1,5 @@
 const URL = {
+  webUrl:'admin.bjzxtw.org.cn',//管理系统地址,如果用户因为某种原因以外退出,需要一个userurl用于请求接口
   baseUrl: 'https://flzxw.bjzxtw.org.cn',//正式环境
   //baseUrl: 'http://116.131.8.26:9501',//正式环境
   //baseUrl: 'http://183.131.25.186:9501',//测试环境
@@ -12,6 +13,7 @@ const URL = {
   WebCLogoutUrl: 'https://flzxw.bjzxtw.org.cn/api/logoutapi', //单点登录退出
   //webClogBackUrL: 'https://admin.bjzxtw.org.cn/auth/back_login.php', //单点登录返回地址 - 王鹏
   webClogBackUrL: 'http://adminpre.bjzxtw.org.cn/adminapi/api/backlogin' //单点登录返回地址 - 刘佳伟
+  
 }
 
 export default URL;

+ 32 - 8
src/views/news/GoodList.vue

@@ -7,7 +7,7 @@
           <el-col :span="8">
             <div class="searchBox">
               <div class="searchTitle">发布类型:</div>
-              <el-select v-model="getApiData.type_id" placeholder="请选择..">
+              <el-select v-model="getApiData.type_id" placeholder="请选择发布类型..">
                 <el-option label="供应商品" value="1"></el-option>
                 <el-option label="求购商品" value="2"></el-option>
               </el-select>
@@ -31,11 +31,19 @@
         <el-row>
           <el-col :span="8">
             <div class="searchBox">
-              <div class="searchTitle">导航名称:</div>
-              <el-input placeholder="请输入网站名称" autocomplete="off" v-model="getApiData.category_name" />
+              <div class="searchTitle">栏目名称:</div>
+              <el-input placeholder="请输入栏目名称" autocomplete="off" v-model="getApiData.category_name" />
             </div>
           </el-col>
-
+          <!-- <el-col :span="8">
+            <div class="searchBox"></div>
+            <div class="searchTitle">审核状态:</div>
+            <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-select>
+          </el-col> -->
         </el-row>
       </div>
     </div>
@@ -74,17 +82,32 @@
             <el-table-column prop="website_name" label="网站名称" width="">
 
             </el-table-column>
-            <el-table-column prop="category_name" label="导航池名称" width=""></el-table-column>
-            <el-table-column prop="created_at" label="创建时间" width=""></el-table-column>
+            <el-table-column prop="category_name" label="栏目名称" width=""></el-table-column>
+            <el-table-column prop="status" label="审核状态" width="">
+              <template slot-scope="scope">
+                <span v-if="scope.row.status == 1">
+                  待审核
+                </span>
+                <span v-if="scope.row.status == 2">
+                  已审核
+                </span>
+                <span v-if="scope.row.status == 3">
+                  已拒绝
+                </span>
+              </template>
+            </el-table-column>
+
             <el-table-column prop="updated_at" label="修改时间" width=""></el-table-column>
 
             <el-table-column fixed="right" label="操作" width="200" 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>
+                      class="el-icon-delete"></i>删除
+                  </div>
                   <div class="listEditBtn" @click="goEdit(scope.row.id, tableData)"><i
-                      class="el-icon-edit-outline"></i>编辑</div>
+                      class="el-icon-edit-outline"></i>编辑
+                  </div>
                 </div>
               </template>
             </el-table-column>
@@ -128,6 +151,7 @@ export default {
         category_name: "",//导航池id
         website_name: "",//网站名称
         type_id: "",//发布类型
+        status: 2,//审核状态 1待审核 2已审核 3已拒绝
 
         page: 1,//当前是第几页
         page_size: 10,//一共多少条

+ 361 - 0
src/views/news/GoodListApply.vue

@@ -0,0 +1,361 @@
+<template>
+  <div class="mainBox">
+    <!--搜索功能 start------------------------------------------------------------>
+    <div class="layerBox_search">
+      <div class="layerBoxLine">
+        <el-row>
+          <el-col :span="8">
+            <div class="searchBox">
+              <div class="searchTitle">发布类型:</div>
+              <el-select v-model="getApiData.type_id" placeholder="请选择发布类型">
+                <el-option label="供应商品" value="1"></el-option>
+                <el-option label="求购商品" value="2"></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.name" />
+            </div>
+          </el-col>
+          <el-col :span="8">
+            <div class="searchBox">
+              <div class="searchTitle">网站名称:</div>
+              <el-input placeholder="请输入网站名称" autocomplete="off" v-model="getApiData.website_name" />
+            </div>
+          </el-col>
+        </el-row>
+      </div>
+      <div class="layerBoxLineTwo">
+        <el-row>
+          <el-col :span="8">
+            <div class="searchBox">
+              <div class="searchTitle">栏目名称:</div>
+              <el-input placeholder="请输入栏目名称" autocomplete="off" v-model="getApiData.category_name" />
+            </div>
+          </el-col>
+          <!-- <el-col :span="8">
+            <div class="searchBox"></div>
+            <div class="searchTitle">审核状态:</div>
+            <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-select>
+          </el-col> -->
+        </el-row>
+      </div>
+    </div>
+
+    <div class="layerBoxNoBg">
+      <div>
+        <!-- <el-button type="primary" @click="goCreat">发布商品</el-button> -->
+      </div>
+      <div>
+        <el-button @click="clearSearchList">重置</el-button>
+        <el-button type="primary" @click="getData('search')">搜索</el-button>
+      </div>
+    </div>
+    <!--搜索功能 end------------------------------------------------------------>
+
+    <!--表格内容 start------------------------------------------------------------>
+    <div class="layerBox">
+      <tableTitle :name="tableDivTitle" />
+      <el-row>
+        <template>
+          <el-table :data="tableData" style="width: 100%">
+            <el-table-column fixed prop="id" label="编号" width="50"></el-table-column>
+            <el-table-column prop="type_id" label="发布类型" width="">
+
+              <template slot-scope="scope">
+                <span v-if="scope.row.type_id == 1">
+                  供应商品
+                </span>
+                <span v-if="scope.row.type_id == 2">
+                  求购商品
+                </span>
+              </template>
+            </el-table-column>
+            <el-table-column prop="name" label="名称" width=""></el-table-column>
+            <el-table-column prop="cityname" label="发布地点" width=""></el-table-column>
+            <el-table-column prop="website_name" label="网站名称" width="">
+            </el-table-column>
+            <el-table-column prop="category_name" label="栏目名称" width=""></el-table-column>
+            <el-table-column prop="status" label="审核状态" width="">
+              <template slot-scope="scope">
+                <span v-if="scope.row.status == 1">
+                  待审核
+                </span>
+                <span v-if="scope.row.status == 2">
+                  已审核
+                </span>
+                <span v-if="scope.row.status == 3">
+                  已拒绝
+                </span>
+              </template>
+            </el-table-column>
+
+            <el-table-column prop="updated_at" label="修改时间" width=""></el-table-column>
+
+            <el-table-column fixed="right" label="操作" width="400" header-align="center">
+              <template slot-scope="scope">
+                <div class="listBtnBox">
+
+                  <div class="listMainBtn" @click="getUpRow(scope.row.id, tableData)"><i class="el-icon-check"></i>审核
+                  </div>
+                  <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>
+              </template>
+            </el-table-column>
+          </el-table>
+        </template>
+      </el-row>
+    </div>
+    <!--分页 start------------------------------------------------------------>
+    <div class="alignBox">
+      <el-row>
+        <el-col :span="24">
+          <el-pagination @size-change="handleSizeChange" :current-page="getApiData.page"
+            @current-change="handleCurrentChange" :page-size="10" layout="total, prev, pager, next, jumper"
+            :total="allCount"></el-pagination>
+        </el-col>
+      </el-row>
+    </div>
+    <!--分页 end------------------------------------------------------------>
+    <!--弹出框1:外部表单弹出框 start------------------------------------------------------------>
+    <el-dialog title="请输入驳回理由" :visible.sync="examineWindow" :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="reason" class="custom-align-right">
+            <el-input type="textarea" v-model="form.reason" class="custom-textarea" placeholder="请输入驳回原因"
+              :rows="3"></el-input>
+          </el-form-item>
+        </div>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <div>
+          <el-button type="info" @click="examineWindow = false">取消</el-button>
+          <el-button type="primary" @click="examineToServe">确定</el-button>
+        </div>
+      </div>
+    </el-dialog>
+    <!--弹出框1:外部表单弹出框 end------------------------------------------------------------>
+
+    <!--表格内容 end------------------------------------------------------------>
+  </div>
+</template>
+
+<script>
+//表格标题
+import tableTitle from './components/tableTitle';
+//引入公用样式
+import '@/styles/global.less';
+
+export default {
+  components: {
+    tableTitle,//表格标题
+  },
+  data() {
+    return {
+      //1.列表和分页相关 start ------------------------------------------------------------>
+      tableDivTitle: "商品列表",
+      tableData: [],//内容
+      editId: 0,//要修改的网站id.
+      examineWindow: false,//审核窗口
+      getApiData: {
+        name: "",//标题
+        category_name: "",//导航池id
+        website_name: "",//网站名称
+        type_id: "",//发布类型
+        status1: 1,//审核状态 1待审核 2已审核 3已拒绝
+
+        page: 1,//当前是第几页
+        page_size: 10,//一共多少条
+      },
+      //提交驳回
+      form: {
+        reason: ""
+      },
+      allCount: 0,//总条数
+      //分页相关 end ------------------------------------------------------------>
+
+    }
+  },
+  methods: {
+    //提交驳回内容
+    examineToServe(id) {
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          let data = {
+            id: this.editId,
+            status: 3,//驳回status
+            reason: this.form.reason
+          }
+          this.$store.dispatch('news/updateGoodStatus', data).then(res => {
+            if (res.code == 200) {
+              this.$message({
+                type: 'success',
+                message: '操作成功!'
+              });
+              this.getData();
+              this.form.reason = "";//清空上一次的输入
+              this.examineWindow = false;
+            }
+          })
+        } else {
+          this.$message.error("驳回理由不能为空!")
+        }
+      })
+    },
+    getUpRow(id) {
+      //设置待审核的id
+      this.editId = id;
+      console.log(id)
+      this.$confirm('将此商品通过审核吗?', '提示', {
+        confirmButtonText: '通过',
+        cancelButtonText: '拒绝',
+        type: 'warning'
+      }).then(() => {
+        this.upRow(id, 2)
+      }).catch(() => {
+        //输入驳回理由
+        console.log("驳回")
+        this.examineWindow = true;
+      })
+    },
+    //1.列表和分页相关 start ------------------------------------------------------------>
+    //1.1 开始请求列表信息方法
+    getData(type) {
+      if (type == "search") {
+        this.getApiData.page = 1;
+      }
+      console.log(this.getApiData, '---1--')
+      this.$store.dispatch('news/getGoodList', this.getApiData).then(res => {
+        //格式化:islink=0为不使用外面 islink=1为使用外链
+        //status=1为显示 status=2为不显示
+        console.log(this.getApiData, '---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; //给与总条数
+      }).catch(() => {
+        this.$message({
+          type: 'warning',
+          message: '网络错误,请重试!'
+        });
+      })
+    },
+    //1.2 删除内容
+    deleteRow(id) {
+      this.$confirm('此操作将永久删除该条数据, 是否继续?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        console.log("当前删除:" + id)
+        this.$store.dispatch('news/delGood', { id: id }).then(res => {
+          this.getData();
+          this.$message({
+            type: 'success',
+            message: '删除成功!'
+          });
+        }).catch(() => {
+          this.$message({
+            type: 'warning',
+            message: '网络错误,请重试!'
+          });
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'warning',
+          message: '已取消删除'
+        });
+      });
+    },
+    //1.3 修改网站状态
+    upRow(id, status) {
+      let data = {
+        id: id,
+        status: status
+      }
+      this.$store.dispatch('news/updateGoodStatus', data).then(res => {
+        if (res.code == 200) {
+          this.$message({
+            type: 'success',
+            message: '商品状态已修改!'
+          });
+          this.getData();
+        }
+      }).catch(() => {
+        this.$message({
+          type: 'warning',
+          message: '已取消删除'
+        });
+      });
+    },
+    //1.4 列表内容分页
+    //直接跳转
+    handleSizeChange(val) {
+      this.getApiData.page = val;
+      this.getData();
+    },
+    //1.5 点击分页
+    handleCurrentChange(val) {
+      this.getApiData.page = val;
+      this.getData();
+    },
+    //1.6 重置按钮
+    clearSearchList() {
+      this.tableData = [];
+      this.getApiData.name = "";
+      this.getApiData.category_name = "";
+      this.getApiData.type_id = "";
+      this.getApiData.website_name = "";
+
+      this.getApiData.page = 1;
+      this.getApiData.pageSize = 10;
+      this.getData();
+    },
+    //列表和分页相关 end ------------------------------------------------------------>
+
+    //2.添加新闻 start ------------------------------------------------------------>
+    //跳转到商品发布页面
+    goCreat() {
+      this.$router.push({
+        path: '/addGood',
+      });
+    },
+    goEdit(id) {
+      let data = {
+        id: id
+      }
+      this.$router.push({
+        path: '/addGood',
+        query: data
+      });
+    }
+    //添加新闻 end ------------------------------------------------------------>
+  },
+  mounted() {
+    //1.获得初始数据
+    this.getData();
+  }
+}
+</script>
+
+<style scoped lang="less">
+.listBtnBox div {}
+</style>

+ 172 - 40
src/views/news/addGood.vue

@@ -10,7 +10,6 @@
               <el-radio :label="2">求购商品</el-radio>
             </el-radio-group>
           </el-form-item>
-
           <el-form-item label="商品名称:" prop="name" class="custom-align-right">
             <template #label>
               <span class="askBox" v-if="form.type_id == 1">
@@ -23,20 +22,27 @@
             <el-input v-model="form.name" autocomplete="off" placeholder="请输入商品标题"></el-input>
           </el-form-item>
           <el-form-item label="发布地点:" 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-cascader :key="cascaderKey" v-model="form.city_arr_id" placeholder="请选择发布地点" :props="cityData"
+              filterable clearable></el-cascader>
           </el-form-item>
-          <el-form-item label="站:" prop="website_id" class="custom-align-right" v-if="userType != 10000">
-            <el-select v-model="form.website_id" placeholder="请选择站" filterable clearable>
+          <el-form-item label="站点名称:" prop="website_id" class="custom-align-right" v-if="userType == 10000">
+            <el-select v-model="form.website_id" placeholder="请选择站点名称" filterable clearable>
               <el-option v-for="item in websiteOptions" :key="item.value" :label="item.label" :value="item.value">
               </el-option>
             </el-select>
           </el-form-item>
-
-          <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"
+          <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>
+          <div v-if="user_type == 10000">
+            <el-form-item label="推荐等级:" class="custom-align-right">
+              <el-select v-model="form.level" multiple clearable placeholder="请选择推荐等级.." @change="levelChange">
+                <el-option label="为你精选" :value="1"></el-option>
+                <el-option label="热门产品" :value="2"></el-option>
+              </el-select>
+            </el-form-item>
+          </div>
           <div v-if="form.type_id == 1">
             <el-form-item label="商品单价:" prop="price" class="custom-align-right">
               <el-input type="number" v-model="form.price" autocomplete="off" placeholder="请输入商品单价">
@@ -48,7 +54,6 @@
             <el-form-item label="单位:" prop="unit" class="custom-align-right">
               <el-input v-model="form.unit" autocomplete="off" placeholder="请输入单位"></el-input>
             </el-form-item>
-
             <el-form-item label="最小定量:" prop="min" class="custom-align-right">
               <el-input v-model="form.min" autocomplete="off" placeholder="请输入最小定量"></el-input>
             </el-form-item>
@@ -58,40 +63,36 @@
             <el-form-item label="有效期:" prop="validity" class="custom-align-right">
               <el-date-picker v-model="form.validity" type="date" placeholder="选择日期" :disabled="form.islong == 1">
               </el-date-picker>
-
-              <el-checkbox v-model="form.islong">无期限</el-checkbox>
+              <el-checkbox v-model="form.islong" @change="checked => selectChange(checked)">无期限</el-checkbox>
             </el-form-item>
           </div>
           <div v-if="form.type_id == 2">
-
             <el-form-item label="截止日期:" prop="validity" class="custom-align-right">
               <el-date-picker v-model="form.validity" type="date" placeholder="选择日期" :disabled="form.islong == 1">
               </el-date-picker>
-              <el-checkbox v-model="form.islong">无期限</el-checkbox>
+              <el-checkbox v-model="form.islong" @change="checked => selectChange(checked)">无期限</el-checkbox>
             </el-form-item>
           </div>
-
           <el-form-item label="商品图:" class="custom-align-right" prop="imgurl">
             <div class="uploaderBox">
-
               <span v-if="imgurl.length > 0" class="uploaded-images">
-                <div v-for="(url, index) in imgurl" :key="index" style="display: inline;float: left; width: 150px;;">
-
+                <div v-for="(url, index) in imgurl" :key="index"
+                  style="display: inline;float: left; width: 150px; height:140px;">
                   <img :src="url" class="avatar" style="float: left; margin-right: 10px;">
                   <div style="position: relative;
-                                transform: translate(-50%, -50%);
-                                right: -120px;
-                                top: -20px;
-                                background-color: rgba(0, 0, 0, 0.5);
-                                color: white;
-                                border-radius: 50%;
-                                width: 24px;
-                                height: 24px;
-                                display: flex;
-                                align-items: center;
-                                justify-content: center;
-                                cursor: pointer;
-                                z-index: 10;" @click="deleteImage(index)">
+                    transform: translate(-50%, -50%);
+                    right: -120px;
+                    top: -20px;
+                    background-color: rgba(0, 0, 0, 0.5);
+                    color: white;
+                    border-radius: 50%;
+                    width: 24px;
+                    height: 24px;
+                    display: flex;
+                    align-items: center;
+                    justify-content: center;
+                    cursor: pointer;
+                    z-index: 10;" @click="deleteImage(index)">
                     <i class="el-icon-delete"></i>
                   </div>
                 </div>
@@ -102,17 +103,30 @@
                   <img src="@/assets/public/upload/noImage.png">
                   <div>选择图片</div>
                 </div>
-
               </el-upload>
             </div>
           </el-form-item>
           <div class="imgBox" style="margin-left: 100px ;margin-bottom: 20px; padding-top: -20px;">
             最多可上传5张,每张图片大小不能超过500K,推荐上传图片尺寸
             宽1000像素 高1000像素。(首张显示为商品头图)</div>
-          <el-form-item label="商品关键词:" prop="keyword" class="custom-align-right">
+          <!-- <el-form-item label="商品关键词:" prop="keyword" class="custom-align-right">
             <el-input v-model="form.keyword" autocomplete="off" placeholder="请输入商品关键词"></el-input>
+          </el-form-item> -->
+
+          <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>
+            <tagInput :initialTags="tags" @tags-updated="updateTags"></tagInput>
           </el-form-item>
 
+
+
           <el-form-item label="商品描述:" prop="description" class="custom-align-right">
             <el-input v-model="form.description" maxlength="300" autocomplete="off" placeholder="请输入商品描述"
               type="textarea" :rows="10"></el-input>
@@ -157,8 +171,11 @@
 </template>
 
 <script>
+import { getWebSiteId, getUseType } from '@/utils/auth'
 //表格标题
 import tableTitle from './components/tableTitle';
+//引入tag标签组件
+import tagInput from '../../components/InputTag/index.vue';
 //引入公用样式
 import '@/styles/global.less';
 //格式化时间
@@ -170,7 +187,8 @@ import myEditor from '../../components/edit/myEditor.vue';
 export default {
   components: {
     tableTitle,
-    myEditor
+    myEditor,
+    tagInput
   },
   data() {
     //0.全局操作 start ------------------------------------------------------------>
@@ -210,7 +228,9 @@ export default {
       tableDivTitle: "添加商品",
       searchCascaderKey: 0, //列表缓存key
       // imgurl: ['http://192.168.1.127:9501/image/20250227/1740674706184955.jpg', 'http://192.168.1.127:9501/image/20250227/1740674706184955.jpg'],//图片路径
-      website_id: 2,
+      website_id: "",
+      tags: [],//标签数组
+
       //提交表单
       form: {
         //1.1使用了外链
@@ -219,10 +239,11 @@ export default {
         city_arr_id: [],//行政区划
         city_id: '',//城市id
         cat_arr_id: '',//导航池名称
-        website_id: 2,
+        website_id: "",
         catid: "",
         cat_arr_id: "",
         name: "",
+        level: [],//推荐等级
         price: "",
         unit: "",
         min: null,
@@ -407,6 +428,30 @@ export default {
       ]
       //表单项 end ------------------------------------------------------------>
     };
+  },
+  watch: {
+    '$route'(to, from) {
+      console.log(from, '---------------------------------------');
+      // 监听路由参数中的 id 变化,若变化则更新页面状态并获取数据
+      if (to.query.id) {
+        this.getMainData();
+      }
+    },
+    // 监听路由参数中的 id 变化,若变化则更新页面状态并获取数据
+    // '$route.query.id': function (newVal, oldVal) {
+    //   console.log('当前 id:', newVal, '旧的 id:', oldVal);
+    //   if (newVal) {
+    //     this.editStatus = true;
+    //     this.tableDivTitle = "编辑资讯";
+    //     //     // 调用方法名保持大小写一致
+    //     this.getMainData();
+    //   } else {
+    //     this.editStatus = false;
+    //     this.tableDivTitle = "添加资讯";
+    //   }
+    // }
+
+
   },
   methods: {
     async fetchWebsiteOptions() {
@@ -427,9 +472,12 @@ export default {
       this.$store.dispatch('public/getInfo').then(res => {
         console.log(res)
         this.userType = res.data.type_id;
-        if (this.userType == 10000) {
-          this.form.website_id = res.data.website_id !== undefined ? res.data.website_id : 2;;
+        this.user_type = res.data.type_id;
+        
+        if (this.userType != 10000) {
+          this.form.website_id = getWebSiteId() 
         }
+       
         //if(res.data.type_id==10000){}//管理员
         //if(res.data.type_id==4){}//调研员
         //个人会员=1 政务会员=2 企业会员=3 调研员=4 管理员=10000 游客=20000
@@ -476,15 +524,23 @@ export default {
     },
     //1.2 提交表单
     addToServe() {
+      
+      this.form.website_id = getWebSiteId();
+      console.log("提交时获取网站id:",this.form.website_id)
       //先进行验证
       this.$refs.form.validate(valid => {
-
         console.log(this.form.validity, 'this.form.validity-----------------')
         if (this.form.islong == 1 && (this.form.validity == null || this.form.validity == '')) {
           this.form.validity = '1970-01-01 00:00:00';
         }
         console.log(this.form.validity, 'this.form.validity-----------------')
         if (valid) {
+          //如果推荐等级为空,则设置为0
+          if (this.form.level == "" || this.form.level == "[0]") {
+            this.form.level = "[0]";
+          } else {
+            this.form.level = JSON.stringify(this.form.level);
+          }
           if (this.form.validity) {
             console.log(this.form.validity, 'p0------------------')
             this.form.validity = formatLocalDate(this.form.validity);
@@ -504,6 +560,14 @@ export default {
             this.form.hits = null;
           }
           console.log(this.form, '提交的数据')
+          //判断用户身份
+          if (this.user_type == 10000) {
+            console.log("用户身份为管理员,无需审核直接发布!")
+            this.form.status = 2;
+          } else {
+            console.log("用户身份为其他用户,提交到审核!")
+            this.form.status = 1;
+          }
           this.$store.dispatch('news/addGood', this.form).then(res => {
             if (res.code == 200) {
               //汇报结果
@@ -563,10 +627,8 @@ export default {
         this.parentKey += 1; // 触发级联选择器重新加载
         this.loadCascaderPath(this.form.cat_arr_id); // 加载路径数据
         //回显推荐等级
-
         this.form.imgurl = Array.isArray(res.data.imgurl) ? res.data.imgurl : JSON.parse(res.data.imgurl);
         this.imgurl = Array.isArray(res.data.imgurl) ? res.data.imgurl : JSON.parse(res.data.imgurl);
-        this.form.keyword = res.data.keyword;
         this.form.type_id = res.data.type_id;
         this.form.website_id = res.data.website_id;
         this.form.catid = res.data.catid;
@@ -577,6 +639,7 @@ export default {
         this.form.islong = res.data.islong == 1 ? true : false;
         this.form.validity = res.data.validity;
         this.form.keyword = res.data.keyword;
+        this.tags = res.data.keyword ? res.data.keyword.split(",") : [];
         this.form.description = res.data.description;
         //回显编辑器内容
         this.$nextTick(() => {
@@ -589,6 +652,12 @@ export default {
         this.form.email = res.data.email;
         this.form.postal = res.data.postal;
         this.form.address = res.data.address;
+        this.form.level = res.data.level;
+        if (res.data.level == "[]" || res.data.level == "") {
+          this.form.level = [];
+        } else {
+          this.form.level = JSON.parse(res.data.level);
+        }
       })
     },
     async loadCascaderPath(path) {
@@ -634,6 +703,12 @@ export default {
       this.$refs.form.validate(valid => {
 
         if (valid) {
+          //如果推荐等级为空,则设置为0
+          if (this.form.level == "" || this.form.level == "[]" || this.form.level == null) {
+            this.form.level = "[]";
+          } else {
+            this.form.level = JSON.stringify(this.form.level);
+          }
           if (this.form.validity) {
             console.log(this.form.validity, 'p0------------------')
             this.form.validity = formatLocalDate(this.form.validity);
@@ -653,6 +728,15 @@ export default {
           }
           this.form.imgurl = this.imgurl;
           //console.log(this.form)
+          //判断用户身份
+          if (this.user_type == 10000) {
+            console.log("用户身份为管理员,无需审核直接发布!")
+            this.form.status = 2;
+          } else {
+            console.log("用户身份为其他用户,提交到审核!")
+            this.form.status = 1;
+          }
+
           this.$store.dispatch('news/updateGood', this.form).then(res => {
             if (res.code != 200) {
               this.$message.error("修改失败,请稍后再试!");
@@ -675,7 +759,24 @@ export default {
         }
       })
     },
+    //推荐等级选择
+    levelChange(value) {
+      this.form.level = value;
+    },
     //跳转操作 end ------------------------------------------------------------>
+    //商品关键词
+    updateTags(newTags) {
+      // this.foem.seo_keywords = newTags;
+      this.tags = newTags;
+      this.form.keyword = newTags.join(',');
+    },
+    selectChange(checked){
+      if(checked==true){
+        this.form.validity = '1970-01-01 00:00:00';
+      }else{
+        
+      }
+    }
   },
   watch: {
     'form.type_id': {
@@ -735,8 +836,10 @@ export default {
       },
       immediate: true // 立即执行一次
     }
+    
   },
   mounted() {
+    this.user_type = getUseType();
     //1.判断是新建还是回显
     if (this.$route.query.id != undefined) {
       this.editId = this.$route.query.id;
@@ -799,4 +902,33 @@ export default {
   }
 }
 
+::v-deep .el-upload {
+  display: inline-block;
+  text-align: center;
+  cursor: pointer;
+  outline: none;
+  border: 1px solid #ccc;
+  padding: 26px 20px;
+  border-radius: 10px;
+  width: 140px;
+  height: 140px;
+}
+
+::v-deep .avatar {
+  width: 140px;
+  height: 140px;
+  display: block;
+  border: 1px solid #ccc;
+  padding: 5px;
+  border-radius: 10px;
+  box-sizing: border-box;
+}
+
+::v-deep .el-checkbox {
+  margin-left: 20px;
+}
+.imgBox{
+  color: #999;
+}
+
 //执行v-deep穿透scope选择器 end------------------------------------------------------------>*/</style>

+ 10 - 1
src/views/news/creatNews.vue

@@ -1075,6 +1075,15 @@ export default {
     },
     //6.问卷 刘佳伟 end ------------------------------------------------------------>
   },
+  watch: {
+    '$route'(to, from) {
+      console.log(from, '---------------------------------------');
+      // 监听路由参数中的 id 变化,若变化则更新页面状态并获取数据
+      if (to.query.id) {
+        this.getMainData();
+      }
+    },
+  },
   mounted() {
     console.log("mounted")
     this.getNews()
@@ -1095,7 +1104,7 @@ export default {
       console.log("添加新闻!")
     }
   },
-};
+}
 </script>
 
 <style scoped lang="less">

+ 17 - 5
src/views/tabbar/tabbarDetail.vue

@@ -84,11 +84,14 @@
                     <el-form-item label="内容标题:" prop="contentTitle">
                         <el-input v-model="ruleForm.contentTitle" placeholder="请输入内容标题"></el-input>
                     </el-form-item>
-                    <el-form-item label="内容详情:" prop="contentDetail">
-                        <el-input v-model="ruleForm.contentDetail" type="textarea" :rows="10" placeholder="请输入内容详情"
-                            resize="none">
-                        </el-input>
+                    <el-form-item label="内容详情" prop="contentDetail">
+                        <myEditor ref="myEditor" v-model="ruleForm.contentDetail"></myEditor>
                     </el-form-item>
+                    <!--el-form-item label="内容详情:" prop="contentDetail">
+                         <el-input v-model="ruleForm.contentDetail" type="textarea" :rows="10" placeholder="请输入内容详情"
+                             resize="none">
+                         </el-input>
+                    </el-form-item-->
                 </div>
                 <div class="dialogBtn">
                     <el-button type="info" @click="cancelForm">取消</el-button>
@@ -107,9 +110,12 @@ import tableTitle from './components/tableTitle.vue';
 //引入公用样式
 import '@/styles/global.less';
 import { addFooterContent, getFooterContent, upFooterContent, delFooterContent } from '@/api/tabbar'
+//引入富文本编辑器
+import myEditor from '../../components/edit/myEditor.vue';
 export default {
     components: {
         tableTitle,//表格标题
+        myEditor,
     },
     data() {
         const validateEmpty = (rule, value, callback) => {
@@ -250,7 +256,10 @@ export default {
             //数据回显
             this.ruleForm.listTitle = val.list_title //列表标题
             this.ruleForm.contentTitle = val.con_title //内容标题
-            this.ruleForm.contentDetail = val.content //内容详情
+            // this.ruleForm.contentDetail = val.content //内容详情
+            this.$nextTick(() => {
+                this.ruleForm.contentDetail = val.content //内容详情
+            });
         },
 
         //1.8 添加
@@ -259,6 +268,9 @@ export default {
             this.dialogName = "添加"
 
             //添加时清空回显回来的数据
+            if(this.tabbarType==1){
+                this.ruleForm.listTitle = '' //列表标题
+            }
             this.ruleForm.contentTitle = '' //内容标题
             this.ruleForm.contentDetail = '' //内容详情
         },