浏览代码

招聘求职功能上线正式环境

Jing 1 月之前
父节点
当前提交
51b8383f8c

+ 106 - 0
src/api/job.js

@@ -0,0 +1,106 @@
+import request from '@/utils/request'
+
+//获取岗位信息
+export function getJobRecruitingInfo(params) {
+    return request({
+        url: '/news/getJobRecruitingInfo',
+        method: 'get',
+        params
+    })
+}
+//获取工作性质
+export function getJobNature(params) {
+    return request({
+        url: '/news/getJobNature',
+        method: 'get',
+        params
+    })
+}
+//获取工作年限
+export function getExperience(params) {
+    return request({
+        url: '/news/getExperience',
+        method: 'get',
+        params
+    })
+}
+//获取学历文凭
+export function getEducation(params) {
+    return request({
+        url: '/news/getEducation',
+        method: 'get',
+        params
+    })
+}
+//获取语言能力
+export function getLanguage(params) {
+    return request({
+        url: `/news/getLanguage`,
+        method: 'get',
+        params
+    })
+}
+//获得薪资
+export function getSalary(params) {
+    return request({
+        url: `/news/getSalary`,
+        method: 'get',
+        params
+    })
+}
+//获得公司规模
+export function getCompanySize(params) {
+    return request({
+        url: `/news/getCompanySize`,
+        method: 'get',
+        params
+    })
+}
+//获得公司性质
+export function getCompanyNature(params) {
+    return request({
+        url: `/news/getCompanyNature`,
+        method: 'get',
+        params
+    })
+}
+//获得公司行业
+export function getIndustry(params) {
+    return request({
+        url: `/news/getIndustry`,
+        method: 'get',
+        params
+    })
+}
+//获得招聘岗位名称
+export function getPositionList(params) {
+    return request({
+        url: `/news/getPositionList`,
+        method: 'get',
+        params
+    })
+}
+//获得所在省
+export function getJobRecruitingArea(params) {
+    return request({
+        url: `/news/getJobRecruitingArea`,
+        method: 'get',
+        params
+    })
+}
+//获得职位机会列表
+export function getRecruitingList(params) {
+    return request({
+        url: `/news/getRecruitingList`,
+        method: 'get',
+        params
+    })
+}
+//获得我的沟通列表
+export function getJobResumeList(data) {
+        return request({
+            url: `/news/getJobResumeList`,
+            method: 'post',
+            data
+        })
+    }

二进制
src/assets/job/briefcase.png


二进制
src/assets/job/local.png


+ 192 - 0
src/router/index.js

@@ -780,6 +780,198 @@ export const constantRoutes = [
       }
     ]
   },
+  {
+    path: '/jobRecruitingList',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/job/jobRecruitingList'),
+        meta: {
+          title: '招聘列表',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/checkjobRecruitingList',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/job/checkjobRecruitingList'),
+        meta: {
+          title: '招聘待审核列表',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/jobResumeList',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/job/jobResumeList'),
+        meta: {
+          title: '我的沟通列表',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/creatJob',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/job/creatJob'),
+        meta: {
+          title: '发布职位',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/jobHuntingList',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/news/jobHuntingList'),
+        meta: {
+          title: '求职信息',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/jobHuntingListApply',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/news/jobHuntingListApply'),
+        meta: {
+          title: '求职待审核列表',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/addJobHunting',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/news/addJobHunting'),
+        meta: {
+          title: '添加求职',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/jobHuntingApplyList',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/news/jobHuntingApplyList'),
+        meta: {
+          title: '人才库',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/jobHuntingApplyDetil',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/news/jobHuntingApplyDetil'),
+        meta: {
+          title: '人才库',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/jobOpportunities',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/job/jobOpportunitiesList'),
+        meta: {
+          title: '职场机会',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/jobOpportunitiesDetails',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/job/jobOpportunitiesDetails'),
+        meta: {
+          title: '职场机会',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
+  {
+    path: '/myApplyList',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/news/myApplyList'),
+        meta: {
+          title: '我的申请',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
 ]
 
 /**

+ 139 - 0
src/store/modules/job.js

@@ -0,0 +1,139 @@
+import { getJobRecruitingInfo,getJobNature,getEducation,getLanguage,getSalary,getCompanySize,getCompanyNature,
+    getIndustry,getJobRecruitingArea,getPositionList,getExperience,getRecruitingList,getJobResumeList
+ } from '@/api/job'
+
+const state = {
+
+}
+
+const mutations = {
+
+}
+
+const actions = {
+    getJobRecruitingInfo({ commit }, data) {
+        return new Promise((resolve, reject) => {
+            getJobRecruitingInfo(data).then(response => {
+                resolve(response)
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    getJobNature({ commit }, data) {
+        return new Promise((resolve, reject) => {
+            getJobNature(data).then(response => {
+                resolve(response)
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    getEducation({ commit }, data) {
+        return new Promise((resolve, reject) => {
+            getEducation(data).then(response => {
+                resolve(response)
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    getLanguage({ commit }, data) {
+        return new Promise((resolve, reject) => {
+            getLanguage(data).then(response => {
+                resolve(response)
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    getSalary({ commit }, data) {
+        return new Promise((resolve, reject) => {
+            getSalary(data).then(response => {
+                resolve(response)
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    getCompanySize({ commit }, data) {
+        return new Promise((resolve, reject) => {
+            getCompanySize(data).then(response => {
+                resolve(response)
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    getCompanyNature({ commit }, data) {
+        return new Promise((resolve, reject) => {
+            getCompanyNature(data).then(response => {
+                resolve(response)
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    getIndustry({ commit }, data) {
+        return new Promise((resolve, reject) => {
+            getIndustry(data).then(response => {
+                resolve(response)
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    getJobRecruitingArea({ commit }, data) {
+        return new Promise((resolve, reject) => {
+            getJobRecruitingArea(data).then(response => {
+                resolve(response)
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    getPositionList({ commit }, data) {
+        return new Promise((resolve, reject) => {
+            getPositionList(data).then(response => {
+                resolve(response)
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    getExperience({ commit }, data) {
+        return new Promise((resolve, reject) => {
+            getExperience(data).then(response => {
+                resolve(response)
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    getRecruitingList({ commit }, data) {
+        return new Promise((resolve, reject) => {
+            getRecruitingList(data).then(response => {
+                resolve(response)
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    getJobResumeList({ commit }, data) {
+        return new Promise((resolve, reject) => {
+            getJobResumeList(data).then(response => {
+                resolve(response)
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+}
+
+
+export default {
+    namespaced: true,
+    state,
+    mutations,
+    actions
+}

+ 2 - 2
src/views/advertise/advertiseList.vue

@@ -195,10 +195,10 @@
             <div class="graph">
                 <el-carousel indicator-position="outside" autoplay loop>
                     <el-carousel-item>
-                        <img src="../../assets/advertise/001.png" alt="" class="shilitu">
+                        <img src="https://img.bjzxtw.org.cn/master/bjzxtw/public/ad/new1.png" alt="" class="shilitu">
                     </el-carousel-item>
                     <el-carousel-item>
-                        <img src="../../assets/advertise/002.png" alt="" class="shilitu">
+                        <img src="https://img.bjzxtw.org.cn/master/bjzxtw/public/ad/new2.png" alt="" class="shilitu">
                     </el-carousel-item>
                 </el-carousel>
             </div>

+ 173 - 137
src/views/dashboard/admin/index.vue

@@ -15,34 +15,34 @@
                             <div class="topDataLi1">
                                 <div class="topDataMain">
                                     <span @click="goToList(1)">待审核资讯</span>
-                                    <span @click="goToList(1)">{{articleCount}}</span>
+                                    <span @click="goToList(1)">{{ articleCount }}</span>
                                 </div>
                                 <div class="topDataMain">
                                     <span @click="goToList(8)">待审核广告</span>
-                                    <span @click="goToList(8)">{{adCount}}</span>
+                                    <span @click="goToList(8)">{{ adCount }}</span>
                                 </div>
                             </div>
                             <div class="topDataLi2">
                                 <div class="topDataMainCenter">
                                     <span @click="goToList(2)">待审核商品</span>
-                                    <span @click="goToList(2)">{{goodsCount}}</span>
+                                    <span @click="goToList(2)">{{ goodsCount }}</span>
                                 </div>
                                 <div class="topDataMainCenter">
                                     <span @click="goToList(3)">待审核书刊音像</span>
-                                    <span @click="goToList(3)">{{bookCount}}</span>
+                                    <span @click="goToList(3)">{{ bookCount }}</span>
                                 </div>
                             </div>
-                            <!-- <div class="topDataLi3">
+                            <div class="topDataLi3">
                                 <div class="topDataMainCenter">
                                     <span @click="goToList(4)">待审核招聘</span>
-                                    <span @click="goToList(4)">{{jobRecruitingCount}}</span>
+                                    <span @click="goToList(4)">{{ jobRecruitingCount }}</span>
                                 </div>
                                 <div class="topDataMainCenter">
                                     <span @click="goToList(5)">待审核求职</span>
-                                    <span @click="goToList(5)">{{jobHuntingCount}}</span>
+                                    <span @click="goToList(5)">{{ jobHuntingCount }}</span>
                                 </div>
                             </div>
-                            <div class="topDataLi4">
+                            <!-- <div class="topDataLi4">
                                 <div class="topDataMain">
                                     <span @click="goToList(6)">待审核行政通知</span>
                                     <span @click="goToList(6)">{{noticeCount}}</span>
@@ -65,7 +65,7 @@
                             </div>
                             网站数量
                         </div>
-                        <div class="twbNumber">{{allWebsiteCount}}</div>
+                        <div class="twbNumber">{{ allWebsiteCount }}</div>
                         <!-- <div class="twbStatus"><img src="@/assets/index/arrow-up.png"/> +12% <span>较上周</span></div> -->
                     </div>
                 </el-col>
@@ -77,7 +77,7 @@
                             </div>
                             栏目数量
                         </div>
-                        <div class="twbNumber">{{allCategoryCount}}</div>
+                        <div class="twbNumber">{{ allCategoryCount }}</div>
                         <!-- <div class="twbStatus"><img src="@/assets/index/arrow-up.png"/> +18% <span>较昨天</span></div> -->
                     </div>
                 </el-col>
@@ -89,7 +89,7 @@
                             </div>
                             资讯发布总数量
                         </div>
-                        <div class="twbNumber">{{allArticleCount}}</div>
+                        <div class="twbNumber">{{ allArticleCount }}</div>
                     </div>
                 </el-col>
                 <el-col :xs="24" :sm="24" :lg="6">
@@ -100,7 +100,7 @@
                             </div>
                             商品发布总数量
                         </div>
-                        <div class="twbNumber">{{allGoodsCount}}</div>
+                        <div class="twbNumber">{{ allGoodsCount }}</div>
                     </div>
                 </el-col>
             </el-row>
@@ -113,10 +113,10 @@
                             </div>
                             书刊音像发布总数量
                         </div>
-                        <div class="twbNumber">{{allBookCount}}</div>
+                        <div class="twbNumber">{{ allBookCount }}</div>
                     </div>
                 </el-col>
-                <!-- <el-col :xs="24" :sm="24" :lg="6">
+                <el-col :xs="24" :sm="24" :lg="6">
                     <div class="topWindowBox">
                         <div class="twbTitle">
                             <div class="twbIconbg bg6">
@@ -124,7 +124,7 @@
                             </div>
                             招聘发布总数量
                         </div>
-                        <div class="twbNumber">{{allJobRecruitingCount}}</div>
+                        <div class="twbNumber">{{ allJobRecruitingCount }}</div>
                     </div>
                 </el-col>
                 <el-col :xs="24" :sm="24" :lg="6">
@@ -135,27 +135,19 @@
                             </div>
                             求职发布总数量
                         </div>
-                        <div class="twbNumber">{{allJobHuntingCount}}</div>
+                        <div class="twbNumber">{{ allJobHuntingCount }}</div>
                     </div>
-                </el-col> -->
+                </el-col>
             </el-row>
             <el-row :gutter="32">
                 <el-col :xs="24" :sm="24" :lg="16">
                     <div class="chartBox">
                         <div class="chartTitle">
                             平台数据增长趋势
-                            <el-select 
-                                v-model="chatType" 
-                                placeholder="请选择" 
-                                class="chartSelectInput"
-                                @change="changeLineChartData"
-                            >
-                                <el-option 
-                                    v-for="item in indexDataOptions" 
-                                    :key="item.value" 
-                                    :label="item.label"
-                                    :value="item.value"
-                                >
+                            <el-select v-model="chatType" placeholder="请选择" class="chartSelectInput"
+                                @change="changeLineChartData">
+                                <el-option v-for="item in indexDataOptions" :key="item.value" :label="item.label"
+                                    :value="item.value">
                                 </el-option>
                             </el-select>
                         </div>
@@ -190,30 +182,30 @@
                             <div class="topDataLi1">
                                 <div class="topDataMain">
                                     <span @click="goToList(1)">待审核资讯</span>
-                                    <span @click="goToList(1)">{{articleCount}}</span>
+                                    <span @click="goToList(1)">{{ articleCount }}</span>
                                 </div>
                             </div>
                             <div class="topDataLi2">
                                 <div class="topDataMainCenter">
                                     <span @click="goToList(2)">待审核商品</span>
-                                    <span @click="goToList(2)">{{goodsCount}}</span>
+                                    <span @click="goToList(2)">{{ goodsCount }}</span>
                                 </div>
                                 <div class="topDataMainCenter">
                                     <span @click="goToList(3)">待审核书刊音像</span>
-                                    <span @click="goToList(3)">{{bookCount}}</span>
+                                    <span @click="goToList(3)">{{ bookCount }}</span>
                                 </div>
                             </div>
-                            <!-- <div class="topDataLi3">
+                            <div class="topDataLi3">
                                 <div class="topDataMainCenter">
                                     <span @click="goToList(4)">待审核招聘</span>
-                                    <span @click="goToList(4)">{{jobRecruitingCount}}</span>
+                                    <span @click="goToList(4)">{{ jobRecruitingCount }}</span>
                                 </div>
                                 <div class="topDataMainCenter">
                                     <span @click="goToList(5)">待审核求职</span>
-                                    <span @click="goToList(5)">{{jobHuntingCount}}</span>
+                                    <span @click="goToList(5)">{{ jobHuntingCount }}</span>
                                 </div>
                             </div>
-                            <div class="topDataLi4">
+                            <!-- <div class="topDataLi4">
                                 <div class="topDataMain">
                                     <span @click="goToList(6)">待审核行政通知</span>
                                     <span @click="goToList(6)">{{noticeCount}}</span>
@@ -236,7 +228,7 @@
                             </div>
                             资讯发布数量
                         </div>
-                        <div class="twbNumber">{{allArticleCount}}</div>
+                        <div class="twbNumber">{{ allArticleCount }}</div>
                     </div>
                 </el-col>
                 <el-col :xs="24" :sm="24" :lg="6">
@@ -247,7 +239,7 @@
                             </div>
                             商品发布数量
                         </div>
-                        <div class="twbNumber">{{allGoodsCount}}</div>
+                        <div class="twbNumber">{{ allGoodsCount }}</div>
                     </div>
                 </el-col>
                 <el-col :xs="24" :sm="24" :lg="6">
@@ -258,7 +250,7 @@
                             </div>
                             书刊音像发布数量
                         </div>
-                        <div class="twbNumber">{{allBookCount}}</div>
+                        <div class="twbNumber">{{ allBookCount }}</div>
                     </div>
                 </el-col>
                 <!-- <el-col :xs="24" :sm="24" :lg="6">
@@ -290,17 +282,17 @@
                             <div class="topDataLi1">
                                 <div class="topDataMain">
                                     <span @click="goToList(1)">待审核资讯</span>
-                                    <span @click="goToList(1)">{{articleCount}}</span>
+                                    <span @click="goToList(1)">{{ articleCount }}</span>
                                 </div>
                             </div>
                             <div class="topDataLi2">
                                 <div class="topDataMainCenter">
                                     <span @click="goToList(2)">待审核商品</span>
-                                    <span @click="goToList(2)">{{goodsCount}}</span>
+                                    <span @click="goToList(2)">{{ goodsCount }}</span>
                                 </div>
                                 <div class="topDataMainCenter">
                                     <span @click="goToList(3)">待审核书刊音像</span>
-                                    <span @click="goToList(3)">{{bookCount}}</span>
+                                    <span @click="goToList(3)">{{ bookCount }}</span>
                                 </div>
                             </div>
                             <!-- <div class="topDataLi4">
@@ -326,7 +318,7 @@
                             </div>
                             资讯发布数量
                         </div>
-                        <div class="twbNumber">{{allArticleCount}}</div>
+                        <div class="twbNumber">{{ allArticleCount }}</div>
                     </div>
                 </el-col>
                 <el-col :xs="24" :sm="24" :lg="6">
@@ -337,7 +329,7 @@
                             </div>
                             商品发布数量
                         </div>
-                        <div class="twbNumber">{{allGoodsCount}}</div>
+                        <div class="twbNumber">{{ allGoodsCount }}</div>
                     </div>
                 </el-col>
                 <el-col :xs="24" :sm="24" :lg="6">
@@ -348,7 +340,7 @@
                             </div>
                             书刊音像发布数量
                         </div>
-                        <div class="twbNumber">{{allBookCount}}</div>
+                        <div class="twbNumber">{{ allBookCount }}</div>
                     </div>
                 </el-col>
                 <!-- <el-col :xs="24" :sm="24" :lg="6">
@@ -389,10 +381,10 @@
                                 <el-tag :type="scope.row.status == 1 ? 'success' : 'danger'">{{ scope.row.status == 1 ? '已审核' :
                                 '未审核' }}</el-tag>
                             </template>
-                        </el-table-column>
-                    </el-table>
-                </div>
-            </div> -->
+</el-table-column>
+</el-table>
+</div>
+</div> -->
         </div>
 
         <!--超级管理员10000× 个人会员1× 政务会员2× 企业会员3√ 调研员4×-->
@@ -410,26 +402,26 @@
                             <div class="topDataLi1">
                                 <div class="topDataMain">
                                     <span @click="goToList(1)">待审核资讯</span>
-                                    <span @click="goToList(1)">{{articleCount}}</span>
+                                    <span @click="goToList(1)">{{ articleCount }}</span>
                                 </div>
                             </div>
                             <div class="topDataLi2">
                                 <div class="topDataMainCenter">
                                     <span @click="goToList(2)">待审核商品</span>
-                                    <span @click="goToList(2)">{{goodsCount}}</span>
+                                    <span @click="goToList(2)">{{ goodsCount }}</span>
                                 </div>
                                 <div class="topDataMainCenter">
                                     <span @click="goToList(3)">待审核书刊音像</span>
-                                    <span @click="goToList(3)">{{bookCount}}</span>
+                                    <span @click="goToList(3)">{{ bookCount }}</span>
                                 </div>
                             </div>
-                            <!-- <div class="topDataLi3">
+                            <div class="topDataLi3">
                                 <div class="topDataMainCenter">
                                     <span @click="goToList(4)">待审核招聘</span>
-                                    <span @click="goToList(4)">{{jobRecruitingCount}}</span>
+                                    <span @click="goToList(4)">{{ jobRecruitingCount }}</span>
                                 </div>
                             </div>
-                            <div class="topDataLi4">
+                            <!--<div class="topDataLi4">
                                 <div class="topDataMain">
                                     <span @click="goToList(6)">待审核行政通知</span>
                                     <span @click="goToList(6)">{{noticeCount}}</span>
@@ -452,7 +444,7 @@
                             </div>
                             资讯发布数量
                         </div>
-                        <div class="twbNumber">{{allWebsiteCount}}</div>
+                        <div class="twbNumber">{{ allWebsiteCount }}</div>
                     </div>
                 </el-col>
                 <el-col :xs="24" :sm="24" :lg="6">
@@ -463,7 +455,7 @@
                             </div>
                             商品发布数量
                         </div>
-                        <div class="twbNumber">{{allGoodsCount}}</div>
+                        <div class="twbNumber">{{ allGoodsCount }}</div>
                     </div>
                 </el-col>
                 <el-col :xs="24" :sm="24" :lg="6">
@@ -474,7 +466,7 @@
                             </div>
                             书刊音像发布数量
                         </div>
-                        <div class="twbNumber">{{allBookCount}}</div>
+                        <div class="twbNumber">{{ allBookCount }}</div>
                     </div>
                 </el-col>
                 <!-- <el-col :xs="24" :sm="24" :lg="6">
@@ -506,17 +498,17 @@
                             <div class="topDataLi1">
                                 <div class="topDataMain">
                                     <span @click="goToList(1)">待审核资讯</span>
-                                    <span @click="goToList(1)">{{articleCount}}</span>
+                                    <span @click="goToList(1)">{{ articleCount }}</span>
                                 </div>
                             </div>
                             <div class="topDataLi2">
                                 <div class="topDataMainCenter">
                                     <span @click="goToList(2)">待审核商品</span>
-                                    <span @click="goToList(2)">{{goodsCount}}</span>
+                                    <span @click="goToList(2)">{{ goodsCount }}</span>
                                 </div>
                                 <div class="topDataMainCenter">
                                     <span @click="goToList(3)">待审核书刊音像</span>
-                                    <span @click="goToList(3)">{{bookCount}}</span>
+                                    <span @click="goToList(3)">{{ bookCount }}</span>
                                 </div>
                             </div>
                             <!-- <div class="topDataLi4">
@@ -542,7 +534,7 @@
                             </div>
                             资讯发布数量
                         </div>
-                        <div class="twbNumber">{{allArticleCount}}</div>
+                        <div class="twbNumber">{{ allArticleCount }}</div>
                     </div>
                 </el-col>
                 <el-col :xs="24" :sm="24" :lg="8">
@@ -553,7 +545,7 @@
                             </div>
                             商品发布数量
                         </div>
-                        <div class="twbNumber">{{allGoodsCount}}</div>
+                        <div class="twbNumber">{{ allGoodsCount }}</div>
                     </div>
                 </el-col>
                 <el-col :xs="24" :sm="24" :lg="8">
@@ -564,7 +556,7 @@
                             </div>
                             书刊音像发布数量
                         </div>
-                        <div class="twbNumber">{{allBookCount}}</div>
+                        <div class="twbNumber">{{ allBookCount }}</div>
                     </div>
                 </el-col>
             </el-row>
@@ -624,13 +616,13 @@ export default {
             //折线图
             chatType: '1', //用户选择的哪个数据
             indexDataOptions: [
-                {label:'资讯',value:'1'},
-                {label:'商品',value:'2'},
-                {label:'书刊音像',value:'3'},
-                // {label:'招聘',value:'4'},
-                // {label:'求职',value:'5'}
+                { label: '资讯', value: '1' },
+                { label: '商品', value: '2' },
+                { label: '书刊音像', value: '3' },
+                { label: '招聘', value: '4' },
+                { label: '求职', value: '5' }
             ],
-            lineChartData:[],//折线图目前展示哪个数据
+            lineChartData: [],//折线图目前展示哪个数据
             lineChartData1: [],//折线图数据 - 资讯
             lineChartData2: [],//折线图数据 - 商品
             lineChartData3: [],//折线图数据 - 书刊音像
@@ -664,7 +656,7 @@ export default {
         getData() {
             //获取首页数据
             this.$store.dispatch('public/getAdminIndex').then(res => {
-                if(res.code==200){
+                if (res.code == 200) {
                     //待审核数据
                     this.articleCount = res.data.apply.article;
                     this.adCount = res.data.apply.order;
@@ -696,32 +688,32 @@ export default {
                 }
             })
         },
-        goToList(typenumber){
-            if(typenumber == 1){this.$router.push({path:'/examine'})}
-            if(typenumber == 2){this.$router.push({path:'/goodListApply'})}
-            if(typenumber == 3){this.$router.push({path:'/bookListApply'})}
-            if(typenumber == 4){this.$router.push({path:'/checkjobRecruitingList'})}
-            if(typenumber == 5){this.$router.push({path:'/jobHuntingListApply'})}
-            if(typenumber == 6){this.$router.push({path:'/noticeListApply'})}
-            if(typenumber == 7){this.$router.push({path:'/ncomplaintListApply'})}
-            if(typenumber == 8){this.$router.push({path:'/adList'})}
+        goToList(typenumber) {
+            if (typenumber == 1) { this.$router.push({ path: '/examine' }) }
+            if (typenumber == 2) { this.$router.push({ path: '/goodListApply' }) }
+            if (typenumber == 3) { this.$router.push({ path: '/bookListApply' }) }
+            if (typenumber == 4) { this.$router.push({ path: '/checkjobRecruitingList' }) }
+            if (typenumber == 5) { this.$router.push({ path: '/jobHuntingListApply' }) }
+            if (typenumber == 6) { this.$router.push({ path: '/noticeListApply' }) }
+            if (typenumber == 7) { this.$router.push({ path: '/ncomplaintListApply' }) }
+            if (typenumber == 8) { this.$router.push({ path: '/adList' }) }
         },
         //切换折线图数据
-        changeLineChartData(type){
+        changeLineChartData(type) {
             console.log(type)
-            if(type == 1){
+            if (type == 1) {
                 this.lineChartData = this.lineChartData1;
             }
-            if(type == 2){
+            if (type == 2) {
                 this.lineChartData = this.lineChartData2;
             }
-            if(type == 3){
+            if (type == 3) {
                 this.lineChartData = this.lineChartData3;
             }
-            if(type == 4){
+            if (type == 4) {
                 this.lineChartData = this.lineChartData4;
             }
-            if(type == 5){
+            if (type == 5) {
                 this.lineChartData = this.lineChartData5;
             }
         }
@@ -748,8 +740,9 @@ export default {
     align-items: center;
     justify-content: center;
 }
+
 .cibStyle1 {
-    background:#667EF2
+    background: #667EF2
 }
 
 //管理员顶部数据栏
@@ -767,9 +760,9 @@ export default {
 .topDataBoxTitle {
     display: flex;
     align-items: center;
-    margin-bottom:16px;
-    color:#fff;
-    font-size:16px;
+    margin-bottom: 16px;
+    color: #fff;
+    font-size: 16px;
 }
 
 .topDataBoxTitleText {
@@ -780,52 +773,69 @@ export default {
 .topDataBoxList {
     display: flex;
     align-items: center;
+
     .topDataLi1 {
-        width:268px;
+        width: 268px;
         border-right: 1px solid #fff;
-        height:70px;
+        height: 70px;
+
         .topDataMain:nth-child(1) {
-            margin-bottom:20px;
+            margin-bottom: 20px;
         }
     }
-    .topDataLi2,.topDataLi3{
-        width:359px;
-        //border-right: 1px solid #fff;
-        height:70px;
-        .topDataMainCenter:nth-child(1){
-            margin-bottom:20px
+
+    .topDataLi2 {
+        border-right: 1px solid #fff;
+    }
+
+    .topDataLi2,
+    .topDataLi3 {
+        width: 359px;
+        // border-right: 1px solid #fff;
+        height: 70px;
+
+        .topDataMainCenter:nth-child(1) {
+            margin-bottom: 20px
         }
     }
+
     .topDataLi4 {
-        width:268px;
-        height:70px;
+        width: 268px;
+        height: 70px;
+
         .topDataMain {
-            margin-left:90px;
+            margin-left: 90px;
         }
+
         .topDataMain:nth-child(1) {
-            margin-bottom:20px;
+            margin-bottom: 20px;
         }
     }
-    .topDataMain,.topDataMainCenter {
-        color:#fff;
-        height:26px;
-        line-height:26px;
-        width:177px;
-        display:flex;
+
+    .topDataMain,
+    .topDataMainCenter {
+        color: #fff;
+        height: 26px;
+        line-height: 26px;
+        width: 177px;
+        display: flex;
         align-items: center;
         justify-content: space-between;
-        span:nth-child(1){
-            font-size:16px;
+
+        span:nth-child(1) {
+            font-size: 16px;
             cursor: pointer;
         }
-        span:nth-child(2){
-            font-size:22px;
-            font-weight:bold;
+
+        span:nth-child(2) {
+            font-size: 22px;
+            font-weight: bold;
             cursor: pointer;
         }
     }
+
     .topDataMainCenter {
-        margin:0 auto;
+        margin: 0 auto;
     }
 }
 
@@ -845,24 +855,47 @@ export default {
         font-size: 16px;
         color: @title;
 
-        .twbIconbg{
+        .twbIconbg {
             width: 40px;
             height: 40px;
             border-radius: 50%;
             margin-right: 15px;
-            display:flex;
+            display: flex;
             align-items: center;
             justify-content: center;
         }
 
-        .bg1 {background: #FDF2F9;}
-        .bg2 {background: #E9F3FC;}
-        .bg3 {background: #F7F2FD;}
-        .bg4 {background: #FFF4F4;}
-        .bg5 {background: #E9F3FC;}
-        .bg6 {background: #F2EBFC;}
-        .bg7 {background: #FDF2F9;}
-        .bg8 {background: #FFFAF4;}
+        .bg1 {
+            background: #FDF2F9;
+        }
+
+        .bg2 {
+            background: #E9F3FC;
+        }
+
+        .bg3 {
+            background: #F7F2FD;
+        }
+
+        .bg4 {
+            background: #FFF4F4;
+        }
+
+        .bg5 {
+            background: #E9F3FC;
+        }
+
+        .bg6 {
+            background: #F2EBFC;
+        }
+
+        .bg7 {
+            background: #FDF2F9;
+        }
+
+        .bg8 {
+            background: #FFFAF4;
+        }
 
     }
 
@@ -879,18 +912,21 @@ export default {
         display: flex;
         align-items: center;
         justify-content: flex-start;
+
         .twbNumber2ItemNum {
-            font-size:30px;
-            margin-bottom:5px;
-            font-weight:1000;
+            font-size: 30px;
+            margin-bottom: 5px;
+            font-weight: 1000;
         }
+
         .twbNumber2Item {
-            font-size:16px;
-            width:70px;
-            font-weight:normal;
+            font-size: 16px;
+            width: 70px;
+            font-weight: normal;
         }
+
         .twbNumber2Item:nth-child(1) {
-            margin-right:130px;
+            margin-right: 130px;
         }
     }
 
@@ -969,11 +1005,11 @@ export default {
 }
 
 ::v-deep .chartSelectInput .el-input__inner {
-    background:#F2F4FE;
-    color:#5570F1;
-    border:none;
+    background: #F2F4FE;
+    color: #5570F1;
+    border: none;
     border-radius: 8px;
-    width:130px;
-    margin-left:20px;
+    width: 130px;
+    margin-left: 20px;
 }
 </style>

+ 307 - 0
src/views/job/checkjobRecruitingList.vue

@@ -0,0 +1,307 @@
+<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-input placeholder="请输入职位名称" autocomplete="off" v-model="getApiData.keyword" />
+            </div>
+          </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="100"></el-table-column>
+            <el-table-column prop="title" label="职位名称" width=""></el-table-column>
+            <el-table-column prop="website_name" label="网站名称" width=""></el-table-column>
+            <el-table-column prop="user_name" label="发布人" width=""></el-table-column>
+            <el-table-column prop="created_at" label="创建时间" width=""></el-table-column>
+            <el-table-column prop="updated_at" label="修改时间" width=""></el-table-column>
+            <el-table-column prop="status" label="审核状态" width="100">
+              <template slot-scope="scope">
+                <span v-if="scope.row.status == 0">待审核</span>
+                <span v-if="scope.row.status == 1">已审核</span>
+                <span v-if="scope.row.status == 2">已拒绝</span>
+              </template>
+            </el-table-column>
+            <el-table-column fixed="right" label="操作" width="300" header-align="center">
+              <template slot-scope="scope">
+                <div class="listBtnBox">
+                  <div class="listMainBtn" @click="getUpRow(scope.row.id, tableData)"
+                    v-if="creatNews_user_type == '10000'"><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------------------------------------------------------------>
+    <!--表格内容 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="refuse_reason" class="custom-align-right">
+            <el-input type="textarea" v-model="form.refuse_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------------------------------------------------------------>
+
+  </div>
+</template>
+
+<script>
+//表格标题
+import tableTitle from './components/tableTitle';
+//引入公用样式
+import '@/styles/global.less';
+import { getUseType } from '@/utils/auth';
+export default {
+  components: {
+    tableTitle,//表格标题
+  },
+  data() {
+    const validateEmpty = (rule, value, callback) => {
+      if (value == '') {
+        callback(new Error('该项不能为空!'))
+      } else {
+        callback()
+      }
+    }
+    return {
+      //1.列表和分页相关 start ------------------------------------------------------------>
+      tableDivTitle: "职位列表",
+      tableData: [],//内容
+      editId: 0,//要修改的网站id
+      examineWindow: false,//审核窗口
+      formLabelWidth: "120px",//表单label宽度
+      getApiData: {
+        title: "",//职位名称
+        website_name: "",//网站名称
+        user_name: "",//发布人
+        created_at: "",//创建时间
+        updated_at: "",//修改时间
+        page: 1,//当前是第几页
+        page_size: 10,//一共多少条
+        checkout: 0,//是否审核 0 未审核 
+
+      },
+      //提交驳回
+      form: {
+        refuse_reason: ""
+      },
+      formRules: {
+        //导航池名称不能为空
+        refuse_reason: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+      },
+      creatNews_user_type: '0',//用户类型
+      keyword: "",//搜索关键字
+      allCount: 0,//总条数
+      //分页相关 end ------------------------------------------------------------>
+    }
+  },
+  methods: {
+    //1.列表和分页相关 start ------------------------------------------------------------>
+    //1.1 开始请求列表信息方法
+    getData(type) {
+      if (type == "search") {
+        this.getApiData.page = 1;
+      }
+      this.getApiData.checkout = 0;
+      // this.getApiData.keyword = this.keyword;
+      this.$store.dispatch('news/getJobRecruitingList', this.getApiData).then(res => {
+        let data = [];
+        console.log(res.data.rows)
+        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/delJobRecruiting', { id: id }).then(res => {
+          this.getData();
+          this.$message({
+            type: 'success',
+            message: '删除成功!'
+          });
+        }).catch(() => {
+          this.$message({
+            type: 'warning',
+            message: '网络错误,请重试!'
+          });
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'warning',
+          message: '已取消删除'
+        });
+      });
+    },
+    //1.4 审核温江
+    getUpRow(id) {
+      //设置待审核的id
+      this.editId = id;
+      console.log(id)
+      this.$confirm('将此职位通过审核吗?', '提示', {
+        confirmButtonText: '通过',
+        cancelButtonText: '拒绝',
+        distinguishCancelAndClose: true,  // 关键配置项,用于区分取消和关闭按钮
+        type: 'warning'
+      }).then(() => {
+        this.upRow(id, 1)
+      }).catch((the_reback) => {
+        //输入驳回理由
+        console.log("驳回")
+
+        if (the_reback == "cancel") {
+          //输入驳回理由
+          // console.log("驳回" )
+          this.examineWindow = true;
+        }
+      })
+    },
+    //1.5 修改文章状态
+    upRow(id, status) {
+      let data = {
+        id: id,
+        status: status
+      }
+      this.$store.dispatch('news/checkJobRecruiting', data).then(res => {
+        if (res.code == 200) {
+          this.$message({
+            type: 'success',
+            message: '操作成功!'
+          });
+          this.getData();
+        }
+      })
+    },
+    //提交驳回内容
+    examineToServe(id) {
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          let data = {
+            id: this.editId,
+            status: 2,//驳回status
+            refuse_reason: this.form.refuse_reason
+          }
+          this.$store.dispatch('news/checkJobRecruiting', data).then(res => {
+            if (res.code == 200) {
+              this.$message({
+                type: 'success',
+                message: '操作成功!'
+              });
+              this.getData();
+              this.form.refuse_reason = "";//清空上一次的输入
+              this.examineWindow = false;
+            }
+          })
+        } else {
+          this.$message.error("驳回理由不能为空!")
+        }
+      })
+    },
+    //1.4 列表内容分页
+    //直接跳转
+    handleSizeChange(val) {
+      this.getApiData.page = val;
+      this.getData();
+    },
+    //1.5 点击分页
+    handleCurrentChange(val) {
+      this.getApiData.page = val;
+      this.getData();
+    },
+    //1.6 重置按钮
+    clearSearchList() {
+      this.getApiData.keyword = "";
+      this.getApiData.page = 1;
+      this.getApiData.page_size = 10;
+      this.getData();
+    },
+    //列表和分页相关 end ------------------------------------------------------------>
+
+    //2.添加新闻 start ------------------------------------------------------------>
+    //跳转到职位发布页面
+    goCreat() {
+      this.$router.push({
+        path: '/creatJob',
+      });
+    },
+    goEdit(id) {
+      let data = {
+        id: id,
+        to: "checkjob"
+      }
+      this.$router.push({
+        path: '/creatJob',
+        query: data
+      });
+    }
+    //添加新闻 end ------------------------------------------------------------>
+  },
+  mounted() {
+    this.creatNews_user_type = getUseType()
+    //1.获得初始数据
+    this.getData();
+  }
+}
+</script>
+
+<style scoped lang="less"></style>

+ 111 - 0
src/views/job/components/CityCascader.vue

@@ -0,0 +1,111 @@
+<template>
+  <el-cascader
+    :key="cascaderKey"
+    v-model="internalValue"
+    placeholder="请选择公司地址"
+    :props="SearchCityData"
+    filterable
+    clearable
+    :disabled="user_type !== '10000'"
+    @change="handleChange">
+  </el-cascader>
+</template>
+
+<script>
+export default {
+  props: {
+    value: { // 接收外部传递的 v-model 值
+      type: [Array, String], // 允许传入数组或字符串类型的数据
+      default: () => [],
+    },
+    user_type: { // 接收外部传递的 user_type 值
+      type: String, // 允许传入数组或字符串类型的数据
+      default: 1,
+    }
+  },
+  data() {
+    let self = this;
+    return {
+      internalValue: [], // 用于与级联选择器进行双向绑定的内部数据
+      cascaderKey: 0, // 用于强制刷新 cascader
+      SearchCityData: {
+        checkStrictly: true,
+        lazy: true,
+        async lazyLoad(node, resolve) {
+          const { level, data } = node;
+          let parentId = level == 0 ? 0 : data.value;
+          let parames = {
+            pid: parentId,
+          };
+          self.$store
+            .dispatch("pool/getcityList", parames)
+            .then((res) => {
+              if (res.data) {
+                const nodes = res.data.map((item) => ({
+                  value: item.id,
+                  label: item.name,
+                  leaf: level >= 3,
+                  children: [],
+                }));
+                resolve(nodes);
+              }
+            })
+            .catch(() => {
+              this.$message({
+                type: "info",
+                message: "网络错误,请重试!",
+              });
+            });
+        },
+      },
+    };
+  },
+  watch: {
+    value: {
+      immediate: true, // 组件挂载时立即执行
+      handler(newVal) {
+        try {
+          const parsedValue = Array.isArray(newVal) ? newVal : JSON.parse(newVal);
+          this.internalValue = parsedValue; // 设置内部值
+          if (parsedValue.length) {
+            this.loadCascaderPath(parsedValue); // 动态加载回显的路径
+          }
+        } catch (error) {
+          console.error("无法解析传入的值:", error);
+          this.internalValue = []; // 如果解析失败,重置为默认空数组
+        }
+      },
+    },
+  },
+  methods: {
+    handleChange(value) {
+      // 当选择变化时,向父组件发送更新的值
+      this.$emit("input", value); // v-model 双向绑定
+      this.$emit("update-city-id", value); // 额外事件,方便父组件监听
+    },
+    async loadCascaderPath(path) {
+      for (let i = 0; i < path.length; i++) {
+        const parentId = path[i - 1] || 0; // 获取当前层级的父级ID
+        const level = i; // 当前层级的索引
+        await this.$store.dispatch('pool/getcityList', { pid: parentId })
+          .then((res) => {
+            const nodes = res.data.map(item => ({
+              value: item.id,
+              label: item.name,
+              leaf: level >= 3, // 假设4层结构,设置叶子节点标记
+            }));
+            // 级联选择器加载数据
+            if (level === path.length - 1) {
+              this.internalValue = path; // 确保最后一级路径正确设置
+              this.cascaderKey += 1; // 强制刷新 cascader
+            }
+          });
+      }
+    },
+  },
+};
+</script>
+
+<style scoped>
+/* 可根据需要自定义样式 */
+</style>

+ 39 - 0
src/views/job/components/tableTitle.vue

@@ -0,0 +1,39 @@
+<template>
+  <div class="tableTitle">
+    <span class="tableFloatLine"></span>
+    {{name}}
+  </div>
+</template>
+
+<script>
+export default {
+  props: {
+    name: {
+      type: String,
+      required: true,
+    },
+  },
+  data() {
+    return {
+      someData: '',
+    };
+  },
+};
+</script>
+
+<style scoped lang="less">
+  .tableTitle {
+    color:#333333;
+    position: relative;
+    padding-bottom: 20px;
+    .tableFloatLine {
+      width: 3px;
+      height:16px;
+      background:#5570F1;
+      display: block;
+      position: absolute;
+      left:-20px;
+      top:1px;
+    }
+  }
+</style>

+ 1124 - 0
src/views/job/creatJob.vue

@@ -0,0 +1,1124 @@
+<template>
+  <div class="mainBox">
+    <div class="layerBox">
+      <tableTitle :name="tableDivTitle" />
+      <el-form :model="form" ref="form" :rules="formRules" label-position="left" label-width="120px">
+        <div class="formDiv">
+          <div v-if="creatNews_user_type == 10000">
+            <el-form-item label="站点名称:" prop="web_site_id" class="custom-align-right">
+              <el-cascader :key="parentKey" v-model="form.web_site_id" placeholder="请选择站点名称" popper-class="my_cascader"
+                :options="creatNews_nav_pool_arr" @change="creatNews_nav_pool_change_fun(form.web_site_id)" filterable
+                clearable></el-cascader>
+            </el-form-item>
+          </div>
+          <el-form-item label="栏目名称:" prop="cat_arr_id" class="custom-align-right">
+            <el-cascader :key="parentKey_2" v-model="form.cat_arr_id" placeholder="请选择栏目名称" :props="parentData_2"
+              popper-class="my_cascader" filterable clearable></el-cascader>
+          </el-form-item>
+          <div v-if="creatNews_user_type == 10000">
+            <el-form-item label="推荐等级:" prop="" class="custom-align-right">
+              <el-select v-model="form.job_level" clearable placeholder="请选择推荐等级">
+                <el-option v-for="item in gradeArr" :key="item.value" :label="item.label" :value="item.value">
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </div>
+          <el-form-item label="招聘职位名称:" prop="title" class="custom-align-right">
+            <el-input v-model="form.title" autocomplete="off" placeholder="请输入招聘职位名称"></el-input>
+          </el-form-item>
+          <el-form-item label="工作地点:" prop="province_id" class="custom-align-right">
+            <el-select v-model="form.province_id" placeholder="请选择省" style="display:inline-block;width:50%"
+              @change="province_change">
+              <el-option v-for="item in province_array" :key="item.id" :label="item.name" :value="item.id">
+              </el-option>
+            </el-select>
+            <el-select v-model="form.city_id" placeholder="请选择市" style="width:50%">
+              <el-option v-for="item in city_array" :key="item.id" :label="item.name" :value="item.id">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="行业类别:" prop="hy_id" class="custom-align-right">
+            <el-select v-model="form.hy_id" placeholder="请选择行业类别">
+              <el-option v-for="item in hy_array" :key="item.hyid" :label="item.hyname" :value="item.hyid">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="职位类别:" prop="zw_id" class="custom-align-right">
+            <el-select v-model="form.zw_id" placeholder="请选择职位类别" @change="zwid_change">
+              <el-option v-for="item in zw_array" :key="item.zwid" :label="item.zwname" :value="item.zwid">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="具体职位:" prop="jtzw_id" class="custom-align-right">
+            <el-select v-model="form.jtzw_id" placeholder="请选择具体职位">
+              <el-option v-for="item in jtzw_array" :key="item.zwid" :label="item.zwname" :value="item.zwid">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="职位性质:" prop="nature_id" class="custom-align-right">
+            <el-select v-model="form.nature_id" placeholder="请选择职位性质">
+              <el-option v-for="item in nature_array" :key="item.evalue" :label="item.ename" :value="item.evalue">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <div>
+            <el-form-item label="截止日期:" prop="due_data" class="custom-align-right">
+              <el-date-picker v-model="form.due_data" placeholder="请选择截止日期"> </el-date-picker>
+            </el-form-item>
+            <el-form-item label="工作经验:" prop="experience" class="custom-align-right">
+              <el-select v-model="form.experience" clearable placeholder="请选择工作经验">
+                <el-option v-for="item in experience_array" :key="item.evalue" :label="item.ename"
+                  :value="item.evalue"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="学历要求:" prop="educational" class="custom-align-right">
+              <el-select v-model="form.educational" clearable placeholder="请选择学历要求">
+                <el-option v-for="item in educational_array" :key="item.evalue" :label="item.ename"
+                  :value="item.evalue"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="月薪:" prop="salary" class="custom-align-right">
+              <el-select v-model="form.salary" clearable placeholder="请输入月薪">
+                <el-option v-for="item in salary_array" :key="item.evalue" :label="item.ename"
+                  :value="item.evalue"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="招聘人数:" prop="number" class="custom-align-right">
+              <el-input v-model="form.number" autocomplete="off" placeholder="请输入招聘人数"></el-input>
+            </el-form-item>
+
+            <el-form-item label="语言能力:" prop="language" class="custom-align-right"
+              style="width: 50%;display: inline-block;">
+              <el-select v-model="form.language" clearable placeholder="请选择语种">
+                <el-option v-for="item in language_array" :key="item.evalue" :label="item.ename"
+                  :value="item.evalue"></el-option>
+              </el-select>
+            </el-form-item>
+
+            <el-form-item label="掌握程度:" prop="level" class="custom-align-right"
+              style="width: 50%;display: inline-block;">
+              <el-select v-model="form.level" clearable placeholder="请选择掌握程度">
+                <el-option v-for="item in level_array" :key="item.evalue" :label="item.ename" :value="item.evalue">
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <!-- <el-form-item label="职位描述:" prop="description" class="custom-align-right">
+              <myEditor ref="myEditor" v-model="form.description"></myEditor>
+            </el-form-item> -->
+            <el-form-item label="职位描述:" prop="description" class="custom-align-right" style="display:block;">
+              <el-input v-model="form.description" type="textarea" :rows="2" placeholder="介绍公司对该职位的职位描述..."> </el-input>
+            </el-form-item>
+            <!-- <el-form-item label="具体要求:" prop="jt_description" class="custom-align-right">
+              <myEditor1 ref="myEditor1" v-model="form.jt_description"></myEditor1>
+            </el-form-item> -->
+            <el-form-item label="具体要求:" prop="jt_description" class="custom-align-right" style="display:block;">
+              <el-input v-model="form.jt_description" type="textarea" :rows="2" placeholder="介绍公司对该职位的具体要求...">
+              </el-input>
+            </el-form-item>
+          </div>
+          <div>
+            <!--公司信息  start-->
+            <el-form-item label="公司名称:" prop="business_name" class="custom-align-right">
+              <el-input v-model="form.business_name" autocomplete="off" placeholder="请输入公司名称"
+                :disabled="creatNews_user_type !== '10000'"></el-input>
+            </el-form-item>
+            <el-form-item label="所属行业:" prop="company_hy_id" class="custom-align-right">
+              <el-select v-model="form.company_hy_id" clearable placeholder="请选择公司所属的行业"
+                :disabled="creatNews_user_type !== '10000'">
+                <el-option v-for="item in hy_array" :key="item.hyid" :label="item.hyname" :value="item.hyid">
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="公司规模:" prop="company_size" class="custom-align-right">
+              <el-select v-model="form.company_size" clearable placeholder="请选择公司的规模"
+                :disabled="creatNews_user_type !== '10000'">
+                <el-option v-for="item in companysize_array" :key="item.evalue" :label="item.ename"
+                  :value="item.evalue">
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="公司性质:" prop="company_nature" class="custom-align-right">
+              <el-select v-model="form.company_nature" clearable placeholder="请选择公司的性质"
+                :disabled="creatNews_user_type !== '10000'">
+                <el-option v-for="item in companynature_array" :key="item.id" :label="item.nature_name"
+                  :value="item.id">
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="公司简介:" prop="introduction" class="custom-align-right">
+              <el-input v-model="form.introduction" autocomplete="off" :disabled="creatNews_user_type !== '10000'"
+                type="textarea" :rows="2" placeholder="请填写公司简介..."> </el-input>
+            </el-form-item>
+            <el-form-item label="联系人:" prop="real_name" class="custom-align-right">
+              <el-input v-model="form.real_name" autocomplete="off" :disabled="creatNews_user_type !== '10000'"
+                placeholder="请输入联系人"></el-input>
+            </el-form-item>
+            <el-form-item label="联系电话:" prop="mobile" class="custom-align-right">
+              <el-input v-model="form.mobile" autocomplete="off" :disabled="creatNews_user_type !== '10000'"
+                placeholder="请输入联系电话"></el-input>
+            </el-form-item>
+            <el-form-item label="公司网址:" prop="company_url" class="custom-align-right">
+              <el-input v-model="form.company_url" autocomplete="off" :disabled="creatNews_user_type !== '10000'"
+                placeholder="请输入公司网址"></el-input>
+            </el-form-item>
+            <el-form-item label="公司地址:" prop="address_arr_id" class="custom-align-right">
+              <CityCascader v-model="form.address_arr_id" @update-city-id="update_address_arr_id"
+                :user_type="creatNews_user_type"></CityCascader>
+            </el-form-item>
+            <el-form-item label="详细地址:" prop="address_arr_id" class="custom-align-right">
+              <el-input v-model="form.address" autocomplete="off" :disabled="creatNews_user_type !== '10000'"
+                placeholder="请输入详细地址"></el-input>
+            </el-form-item>
+            <el-form-item label="邮箱:" prop="email" class="custom-align-right">
+              <el-input v-model="form.email" autocomplete="off" :disabled="creatNews_user_type !== '10000'"
+                placeholder="请输入邮箱"></el-input>
+            </el-form-item>
+            <!--公司信息  end-->
+          </div>
+        </div>
+      </el-form>
+    </div>
+    <div class="bottomBtnBox">
+      <el-button type="info" @click="returnPage">返回</el-button>
+      <el-button type="primary" @click="editToServe" v-if="editStatus == true">确定</el-button>
+      <el-button type="primary" @click="addToServe" v-else>发布职位</el-button>
+    </div>
+  </div>
+</template>
+
+<script>
+import { getWebSiteId, getUseType } from '@/utils/auth'
+//表格标题
+import tableTitle from './components/tableTitle';
+//引入富文本编辑器
+import myEditor from '@/components/edit/myEditor.vue';
+//引入公用样式
+import '@/styles/global.less';
+import { create } from 'sortablejs';
+import CityCascader from './components/CityCascader';
+import { formatLocalDate } from '@/utils/public';
+import job from '@/store/modules/job';
+export default {
+  components: {
+    tableTitle,
+    CityCascader,
+    myEditor,
+  },
+  data() {
+
+    //0.全局操作 start ------------------------------------------------------------>
+    //表单验证
+    const validateEmpty = (rule, value, callback) => {
+      if (value.length == 0) {
+        callback(new Error('该项不能为空!'))
+      } else {
+        callback()
+      }
+    }
+    const validateArray = (rule, value, callback) => {
+      if (value.length == 0) {
+        callback(new Error('该项不能为空!'))
+      } else {
+        callback()
+      }
+    }
+    const validateZero = (rule, value, callback) => {
+      if (value == null || value.length == 0) {
+        callback(new Error('该项不能为空!'))
+      } else {
+        callback()
+      }
+    }
+    const validateMobile = (rule, value, callback) => {
+      if (value.length != 11) {
+        callback(new Error('请输入正确的手机号!'))
+      } else {
+        callback()
+      }
+    }
+    let self = this;
+    //0.全局操作 end ------------------------------------------------------------>
+    return {
+      websiteid: 0,
+      creatNews_pid_num: "0",//请求子导航用的pid
+      creatNews_nav_pool_arr: [],//
+      creatNews_add_nav_pool_arr: [],//
+      creatNews_son_website_id_num: "",
+      checked: false,
+      formLabelWidth: '80px',//表单的长度
+      //1.表单项 start ------------------------------------------------------------>
+      editStatus: false,
+      tableDivTitle: "添加职位",
+      // disclaimer: true,//免责声明
+      //提交表单
+      province_array: [],//省份
+      city_array: [],//城市
+      hy_array: [],//行业分类
+      zw_array: [],//职位类别
+      jtzw_array: [],//具体职位
+      nature_array: [],//职位性质
+      experience_array: [],//工作经验
+      educational_array: [],//学历
+      salary_array: [],//薪资
+      language_array: [],//语言能力
+      level_array: [],//掌握程度
+      companysize_array: [],//公司规模
+      companynature_array: [],//公司性质
+      address_arr_id: [],//地址
+      // company_hyid_array: [],//所属行业
+      creatNews_user_type: '0',//判断用户类型'
+
+      form: {
+        web_site_id: "",//站点名称
+        user_type: "??",//判断用户类型'
+        // cat_arr_id: 0,//栏目名称
+        nav_add_pool_id: [],//导航池子级
+        city_arr_id: [],//城市
+        // websiteName: "",//站点名称
+        cat_arr_id: [],//栏目名称
+        job_level: "",//推荐等级
+        title: "",//招聘职位名称
+        province_id: "",//省份
+        job_pronviceid: "",//省份id
+        city_id: "",//城市
+        hy_id: "",//行业分类
+        zw_id: "",//职位类别
+        jtzw_id: "",//具体职位
+        nature_id: "",//职位性质
+        createjob_pronvice: "",//工作省份
+        experience: null,//工作经验
+        educational: null,//学历
+        salary: null,//月薪
+        number: null,//招聘人数
+        language: null,//语言能力
+        level: null,//掌握程度
+        description: "",//职位描述
+        jt_description: "",//具体要求
+        due_data: "",//截止日期
+
+        business_name: "",//公司名称
+        company_hy_id: "",//所属行业
+        company_size: "",//公司规模
+        company_nature: null,//公司性质
+        introduction: "",//公司简介
+        real_name: "",//联系人
+        mobile: "",//联系电话
+        company_url: "",//公司网址
+        address_arr_id: [],//地址
+        address: "",//地址
+        email: "",//邮箱
+
+
+      },
+      //1.2 表单验证规则
+      formRules: {
+        // 站点名称
+        web_site_id: [{ required: true, trigger: 'change', validator: validateEmpty }],
+        //栏目名称不能为空
+        cat_arr_id: [{ required: true, trigger: 'change', validator: validateArray }],
+        province_id: [{ required: true, trigger: 'change', validator: validateEmpty }],
+        // 招聘职位名称
+        title: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+        // 职位类别
+        zw_id: [{ required: true, trigger: 'change', validator: validateEmpty }],
+        //具体职位
+        jtzw_id: [{ required: true, trigger: 'change', validator: validateEmpty }],
+        // 职位性质
+        nature_id: [{ required: true, trigger: 'change', validator: validateEmpty }],
+        // 工作省份
+        province_id: [{ required: true, trigger: 'change', validator: validateEmpty }],
+        // 工作城市
+        city_id: [{ required: true, trigger: 'change', validator: validateEmpty }],
+        // 行业分类
+        hy_id: [{ required: true, trigger: 'change', validator: validateEmpty }],
+        // 职位描述
+        description: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+        // 具体要求
+        jt_description: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+        // 截止日期
+        due_data: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+        // 薪水
+        salary: [{ required: true, trigger: 'change', validator: validateZero }],
+
+
+        // 公司名称
+        business_name: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+        // 所属行业
+        company_hy_id: [{ required: true, trigger: 'change', validator: validateEmpty }],
+        // 公司规模
+        company_size: [{ required: true, trigger: 'change', validator: validateEmpty }],
+        // 公司简介
+        introduction: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+        // 联系人
+        real_name: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+        // 联系电话
+        mobile: [{ required: true, trigger: 'blur', validator: validateMobile }],
+        // 地址
+        address_arr_id: [{ required: true, trigger: 'change', validator: validateArray }],
+        // 具体地址
+        address: [{ required: true, trigger: 'blur', message: '该项不能为空!' }],
+        // 邮箱
+        email: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+      },
+      gradeArr: [{
+        value: 1,
+        label: '推荐位'
+      }],
+
+      //获取父级导航池
+      parentKey: 0,//获取父级导航
+      parentData: {
+        checkStrictly: true,
+        lazy: true,
+        async lazyLoad(node, resolve) {
+          const { level, data } = node;
+          if (data && data.children && data.children.length !== 0) {
+            return resolve(node)
+          }
+          let parentId;
+          parentId = level == 0 ? 0 : data.value;
+          let parames = {
+            'type': 1,
+            'website_id': getWebSiteId(),
+            'pid': parentId
+          }
+          self.$store.dispatch('pool/get_creatNews_nav_son_actions', parames).then(res => {
+            if (res.data) {
+              const nodes = res.data.map(item => ({
+                value: item.category_id,
+                label: item.alias,
+                leaf: level >= 3,
+                children: [],
+                disabled: item.type != 1
+              }))
+              resolve(nodes)
+            }
+          })
+        }
+      },
+      parentKey_2: 0,//获取父级导航 
+      parentData_2: {
+        checkStrictly: true,
+        lazy: true,
+        async lazyLoad(node, resolve) {
+          const { level, data } = node;
+          if (data && data.children && data.children.length !== 0) {
+            return resolve(node)
+          }
+
+          let parentId;
+
+          if (data != undefined) {
+            parentId = data.value;
+          } else {
+            parentId = self.creatNews_pid_num.toString();
+          }
+          if (self.form.web_site_id) {
+            this.websiteid = self.form.web_site_id;
+          } else {
+
+            this.websiteid = getWebSiteId();
+          }
+
+          let parames = {
+            'type': 4,
+            'website_id': this.websiteid ? this.websiteid : 0,
+            'pid': parentId ? parentId : 0
+
+          }
+          self.$store.dispatch('news/getWebsiteNavList', parames).then(res => {
+
+            if (res.data) {
+              console.log('11111111112222222222222222', res.data);
+
+              const nodes = res.data.map(item => ({
+                value: item.category_id,
+                label: item.alias,
+                leaf: level >= 3,
+                children: []
+              }))
+              resolve(nodes)
+            }
+          })
+        }
+      },
+
+      inputList: [
+        { value: '' }
+      ]
+      //表单项 end ------------------------------------------------------------>
+    };
+
+  },
+  methods: {
+    //---------------------------
+    // 下拉列表
+    // 1.获取省
+    get_provinceid(value) {
+      this.$store.dispatch('news/getJobRecruitingArea').then(res => {
+        this.province_array = res.data;
+      })
+    },
+    province_change(value) {
+      this.form.city_id = ''; // 清空城市选择
+      this.$store.dispatch('news/getJobRecruitingArea', { pid: value }).then(res => {
+        this.city_array = res.data;
+      })
+    },
+    // 3.获取行业分类
+    get_hyid(value) {
+      this.$store.dispatch('news/getIndustry').then(res => {
+        this.hy_array = res.data;
+      })
+    },
+    // 4.获取职位类别
+    get_zwid(value) {
+      this.$store.dispatch('news/getPositionList').then(res => {
+        this.zw_array = res.data;
+
+      })
+    },
+    zwid_change(value) {
+      // 修改此处,确保传递的是正确的参数对象
+      this.form.jtzw_id = ''; // 清空具体职位选择
+      this.$store.dispatch('news/getPositionList', { zwpid: value }).then(res => {
+        this.jtzw_array = res.data;
+      })
+    },
+
+    // 6.获取职位性质
+    get_natureid(value) {
+      this.$store.dispatch('news/getJobNature').then(res => {
+        this.nature_array = res.data;
+      })
+    },
+    // 7.获取工作经验
+    get_experience(value) {
+      this.$store.dispatch('news/getExperience').then(res => {
+        this.experience_array = res.data;
+      })
+    },
+    // 8.获取学历
+    get_educational(value) {
+      this.$store.dispatch('news/getEducation').then(res => {
+        this.educational_array = res.data;
+      })
+    },
+    // 9.获取薪资
+    get_salary(value) {
+      this.$store.dispatch('news/getSalary').then(res => {
+        this.salary_array = res.data;
+      })
+    },
+    // 10.获取语言能力
+    get_language(value) {
+      this.$store.dispatch('news/getLanguage').then(res => {
+        this.language_array = res.data;
+      })
+    },
+    // 11.获取掌握程度
+    get_level(value) {
+      this.$store.dispatch('news/getLevel').then(res => {
+        this.level_array = res.data;
+      })
+    },
+    // 12.获取公司分类
+    get_company_hyid(value) {
+      this.$store.dispatch('news/getIndustry').then(res => {
+        this.hy_array = res.data;
+      })
+    },
+    //13.获取公司规模
+    get_company_size(value) {
+      this.$store.dispatch('news/getCompanySize').then(res => {
+        this.companysize_array = res.data;
+      })
+    },
+    //14.获取公司性质
+    get_company_nature(value) {
+      this.$store.dispatch('news/getCompanyNature').then(res => {
+        this.companynature_array = res.data;
+      })
+    },
+    //  15.获取地址
+    get_address_arr_id(value) {
+      this.$store.dispatch('news/getJobRecruitingArea').then(res => {
+        this.address_arr_id = res.data;
+      })
+    },
+    //1.提交表单 start ------------------------------------------------------------>
+    //1.2 提交表单
+    addToServe() {
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          // if(this.creatNews_user_type === '10000'){
+          this.form.user_type = this.creatNews_user_type;
+
+          // this.form.website_id = this.websiteid;
+
+          if (this.form.province_id != '' && this.form.province_id != null && this.form.province_id != undefined) {
+            this.form.city_arr_id[0] = this.form.province_id;
+          } else {
+            this.form.city_arr_id[0] = null;
+          }
+          if (this.form.city_id != '' && this.form.city_id != null && this.form.city_id != undefined) {
+            this.form.city_arr_id[1] = this.form.city_id;
+          } else {
+            this.form.city_arr_id[1] = null;
+          }
+          if (this.form.due_data != '' && this.form.due_data != null && this.form.due_data != undefined) {
+            this.form.due_data = formatLocalDate(this.form.due_data);
+          } else {
+            this.form.due_data = null;
+          }
+          delete this.form.nav_add_pool_id;
+          delete this.form.province_id;
+          delete this.form.job_pronviceid;
+          delete this.form.city_id;
+          delete this.form.createjob_pronvice;//工作省份
+
+          if (this.form.salary == null) {
+            this.form.salary = 0;
+          }
+
+          if (this.creatNews_user_type === '10000') {
+            this.form.website_id = this.form.web_site_id;
+          } else {
+            this.form.website_id = this.websiteid;
+          }
+          delete this.form.web_site_id;
+          console.log("提交的数据:", this.form);
+          this.$store.dispatch('news/addJobRecruiting', this.form).then(res => {
+            if (res.code == 200) {
+              //汇报结果
+              this.$message({
+                type: 'success',
+                message: '已成功发布职位!'
+              });
+              this.cleatForm(2);
+              //返回列表页
+              this.returnPage()
+            } else {
+              this.$message({
+                type: 'error',
+                message: ": '发布失败!'.".this.$message
+              });
+            }
+          }).catch(() => {
+            this.$message({
+              type: 'info',
+              message: '网络错误,请重试!'
+            });
+          })
+          // }
+        }
+      })
+    },
+
+    //1.3 清理表单
+    cleatForm(type) {
+      // if (type == 1) {
+      //使用了外链,进行部分表单清理
+      //this.form.cat_arr_id = "";
+      this.form.cat_arr_id = "";
+      this.form.province_id = "";
+      this.form.title = "";
+      this.form.zw_id = "";
+      this.form.jtzw_id = "";
+      this.form.nature_id = "";
+      this.form.city_id = "";
+      this.form.hy_id = "";
+      this.form.description = "";
+      this.form.due_data = "";
+      // }
+      if (this.creatNews_user_type == '10000') {
+        //完全清理表单
+        this.form.business_name = "";
+        this.form.company_hy_id = "";
+        this.form.company_size = "";
+        this.form.introduction = "";
+        this.form.real_name = "";
+        this.form.mobile = "";
+        this.form.address_arr_id = [];
+        this.form.address = "";
+      }
+    },
+    //1.4更新详细地址
+    update_address_arr_id(value) {
+      console.log("行政区划ID已更新:", value);
+      this.form.address_arr_id = value;
+    },
+    //提交表单 end ------------------------------------------------------------>
+
+    //2.跳转操作 start ------------------------------------------------------------>
+    returnPage() {
+      if (this.$route.query.to == "checkjob") {
+        this.$router.push({
+          path: '/checkjobRecruitingList',
+        });
+      } else {
+        this.$router.push({
+          path: '/jobRecruitingList',
+        });
+      }
+    },
+    //跳转操作 end ------------------------------------------------------------>
+
+    //3.回显操作 ------------------------------------------------------------>
+    //3.1回显数据
+    getMainData() {
+      if (this.creatNews_user_type === '10000' || this.$route.query.id != undefined) {
+        let data = {
+          id: this.$route.query.id
+        };
+        this.$store.dispatch('news/getJobRecruitingInfo', data).then(res => {
+          //判断web_site_id是否为字符串,如果是转换为数字、
+          //职位信息 
+          if (typeof res.data.web_site_id === 'string') {
+            this.form.web_site_id = Number(res.data.website_id);
+          } else {
+            this.form.web_site_id = res.data.website_id                           //站点名称
+          }
+          this.form.cat_arr_id = Array.isArray(res.data.cat_arr_id) ? res.data.cat_arr_id : JSON.parse(res.data.cat_arr_id);
+          this.parentKey_2 += 1; // 触发级联选择器重新加载
+          this.loadCascaderPath(this.form.cat_arr_id); // 加载路径数据
+          //回显行政区划
+          this.form.city_arr_id = Array.isArray(res.data.city_arr_id) ? res.data.city_arr_id : JSON.parse(res.data.city_arr_id);
+
+          this.form.title = res.data.title;                                       //职位名称
+
+          this.parentKey += 1; // 触发级联选择器重新加载
+          if (this.form.city_arr_id.length > 0) {
+            this.form.province_id = this.form.city_arr_id[0] ?? '';
+            if (this.form.city_arr_id.length > 1) {
+              this.province_change(this.form.city_arr_id[0]);
+              this.form.city_id = this.form.city_arr_id[1] == 0 ? '' : this.form.city_arr_id[1];
+            } else {
+              let data = {
+                'pid': this.form.city_arr_id[0]
+              }
+              this.$store.dispatch('news/getJobRecruitingArea', data).then(res => {
+                this.city_id = res.data;
+              })
+            }
+          }
+
+          this.form.hy_id = res.data.hy_id;                //行业分类
+          this.form.zw_id = res.data.zw_id;                //职位类别
+          this.zwid_change(this.form.zw_id);
+          this.form.jtzw_id = res.data.jtzw_id;            //具体职位
+          this.form.nature_id = res.data.nature_id;        //职位性质
+          this.form.due_data = res.data.due_data;          //截止日期
+          this.form.experience = res.data.experience;      //工作经验
+          this.form.educational = res.data.educational;    //学历
+          this.form.salary = res.data.salary;              //薪资
+          this.form.number = res.data.number;              //招聘人数
+          this.form.language = res.data.language;          //语言能力
+          this.form.level = res.data.level;                //掌握程度
+          this.form.description = res.data.description;    //职位描述
+          this.form.jt_description = res.data.jt_description;//具体要求
+          if (res.data.job_level == 0 || res.data.job_level == null || res.data.job_level == '') {
+            this.form.job_level = '';  //推荐等级
+          }else{
+            this.form.job_level = Number(res.data.job_level);  //推荐等级
+          }
+          this.form.business_name = res.data.business_name;
+          this.form.company_hy_id = res.data.company_hy_id;
+          this.form.company_size = res.data.company_size;
+          this.form.company_nature = res.data.company_nature;
+          this.form.introduction = res.data.introduction;
+          this.form.real_name = res.data.real_name;
+          this.form.mobile = res.data.mobile;
+          this.form.company_url = res.data.company_url;
+          this.form.address = res.data.address;
+          this.form.address_arr_id = Array.isArray(res.data.address_arr_id) ? res.data.address_arr_id : JSON.parse(res.data.address_arr_id);
+          this.form.email = res.data.email;
+          this.inputList = [];
+          console.log(this.inputList)
+        })
+      } else {
+        this.$store.dispatch('news/getJobCompany').then(res => {
+          // 企业信息
+          this.form.business_name = res.data.business_name;
+          this.form.company_hy_id = res.data.company_hy_id;
+          this.form.company_size = res.data.company_size;
+          this.form.company_nature = res.data.company_nature;
+          this.form.introduction = res.data.introduction;
+          this.form.real_name = res.data.real_name;
+          this.form.mobile = res.data.mobile;
+          this.form.company_url = res.data.company_url;
+          this.form.address = res.data.address;
+          this.form.address_arr_id = Array.isArray(res.data.address_arr_id) ? res.data.address_arr_id : JSON.parse(res.data.address_arr_id);
+          this.form.email = res.data.email;
+          this.inputList = [];
+        })
+      }
+
+    },
+    async loadCascaderPath(path) {
+      for (let i = 0; i < path.length; i++) {
+        const parentId = path[i - 1] || 0; // 获取当前层级的父级ID
+        const level = i; // 当前层级的索引
+
+        await this.$store.dispatch('pool/categoryList', { pid: parentId })
+          .then((res) => {
+            const nodes = res.data.map(item => ({
+              value: item.id,
+              label: item.name,
+              leaf: level >= 3, // 假设4层结构,设置叶子节点标记
+            }));
+
+            // 级联选择器加载数据
+            if (level === path.length - 1) {
+              this.form.cat_arr_id = path; // 确保最后一级路径正确设置
+              this.parentKey += 1; // 强制刷新 cascader
+            }
+          });
+      }
+    },
+    //1.3提交修改
+    editToServe() {
+      //添加要修改的id
+      this.form.id = this.editId;
+      this.form.website_id = this.form.web_site_id;
+      // console.log('===========editId==============',this.form.web_site_id)
+      //先进行验证
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          this.form.city_arr_id[0] = this.form.province_id;
+          if (this.form.city_id != '' && this.form.city_id != null && this.form.city_id != undefined) {
+            this.form.city_arr_id[1] = this.form.city_id;
+          }
+          // 假设你有一个 JSON 字符串变量 jsonStr,这里将其转换为数组
+          try {
+            this.form.address_arr_id = JSON.parse(this.form.address_arr_id);
+          } catch (error) {
+            console.error('JSON 解析出错:', error);
+          }
+
+          // console.log('===========city_arr_id==============', typeof(this.form.address_arr_id));
+          // console.log('===========city_arr_id==============', this.form.city_arr_id);
+          delete this.form.nav_add_pool_id;
+          delete this.form.province_id;
+          delete this.form.job_pronviceid;
+          delete this.form.city_id;
+          delete this.form.createjob_pronvice;
+          delete this.form.web_site_id;
+
+          this.$store.dispatch('news/upJobRecruiting', this.form).then(res => {
+            if (res.code != 200) {
+              this.$message.error("修改失败,请稍后再试!");
+            } else {
+              //汇报结果
+              this.$message({
+                type: 'success',
+                message: '已成功修改职位信息!'
+              });
+              this.cleatForm(2);
+              //返回列表页
+              this.returnPage()
+            }
+          }).catch(() => {
+            this.$message({
+              type: 'info',
+              message: '网络错误,请重试!'
+            });
+          })
+        }
+      })
+    },
+    //跳转操作 end ------------------------------------------------------------>
+    get_creatNews_form_id_fun() {//判断用户类型ajax
+      this.$store.dispatch('public/getInfo').then(res => {
+        this.form.user_type = res.data.type_id;
+
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '网络错误,请重试!'
+        });
+      })
+
+
+      // console.log("this.form.user_type==",this.form);
+      // console.log("this.form.user_type==2",this.form.user_type);
+
+    },
+    get_creatNews_nav_pool_arr_fun() {//xx
+      this.$store.dispatch('pool/get_creatNews_nav_actions', { page: 1, pageSize: 666666 }).then(res => {
+        res.data.rows.forEach((per_obj) => {
+          let new_per = {
+            label: per_obj.website_name,
+            value: per_obj.id,
+          }
+          this.creatNews_nav_pool_arr.push(new_per)
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '网络错误,请重试!'
+        });
+      })
+    },
+    creatNews_nav_pool_change_fun() {
+      //xx  导航池级
+      let that = this;
+      this.form.web_site_id = this.form.web_site_id[0]
+      that.parentKey_2 += 1;
+      // this.$store.dispatch('pool/get_creatNews_nav_son_actions', {
+      //   'type': 5,
+      //   pid: String(this.creatNews_pid_num), website_id: String(this.form.web_site_id)
+      // }).then(res => {
+      //   if (res.data.length == 0) {//没有导航池子级
+      //     // alert("没有导航池子级");
+      //     return
+      //   }
+      //   this.creatNews_add_nav_pool_arr = res.data;
+      //   this.creatNews_add_nav_pool_arr.forEach((per_obj) => {
+      //     per_obj.label = per_obj.name,
+      //       per_obj.value = per_obj.id,
+      //       this.creatNews_pid_num = per_obj.category_id
+      //   })
+      // }).catch(() => {
+      //   this.$message({
+      //     type: 'info',
+      //     message: '网络错误,请重试!'
+      //   });
+      // })
+    },
+  },
+  mounted() {
+    this.creatNews_user_type = getUseType()
+    this.websiteid = getWebSiteId()
+    if (this.creatNews_user_type !== '10000') {
+      this.form.web_site_id = this.websiteid;
+      // console.log("this.form.web_site_id==",this.websiteid)
+    }
+    // console.log("============================",this.creatNews_user_type)
+    //1.判断是新建还是回显
+    this.get_hyid()
+    this.get_provinceid()
+    this.get_zwid()
+    this.get_natureid()
+    this.get_experience()
+    this.get_educational()
+    this.get_salary()
+    this.get_language()
+    this.get_level()
+    this.get_company_hyid()
+    this.get_company_size()
+    this.get_company_nature()
+    // this.getMainData()
+    // this.get_createjob_pronvice ()
+    this.get_address_arr_id()
+    this.get_creatNews_form_id_fun()//
+    this.get_creatNews_nav_pool_arr_fun()//
+    if (this.$route.query.id != undefined) {
+      this.editId = this.$route.query.id;
+      this.editStatus = true;
+      console.log("编辑新闻!")
+      this.getMainData();
+    } else {
+      this.editStatus = false;
+      console.log(typeof (this.creatNews_user_type))
+      if (this.creatNews_user_type === '3') {
+        this.getMainData();
+        console.log("添加新闻!", this.creatNews_user_type)
+      }
+    }
+
+
+
+  },
+  watch: {
+    '$route'(to, from) {
+      console.log(from, '---------------------------------------');
+      // 监听路由参数中的 id 变化,若变化则更新页面状态并获取数据
+      if (to.query.id) {
+        this.getMainData();
+      }
+    },
+  }
+};
+</script>
+
+<style scoped lang="less">
+.language {
+  overflow: hidden;
+}
+
+//文本编辑器
+.QuillTitle {
+  line-height: 36px;
+  font-size: 14px;
+  color: #606266;
+  font-weight: bold;
+  padding-left: 30px;
+
+  span {
+    color: #ff4949
+  }
+
+  .QuillModelBtn {
+    display: inline-block;
+    margin-left: 10px;
+    font-size: 12px;
+    color: #999;
+    cursor: pointer;
+  }
+}
+
+.editor-container {
+  height: 420px;
+  padding-bottom: 20px;
+}
+
+.my-quill-editor {
+  height: 320px;
+}
+
+.ql-editor {
+  height: 320px;
+}
+
+/* 富文本对齐方式 */
+.ql-align-center {
+  text-align: center;
+}
+
+.ql-align-right {
+  text-align: right;
+}
+
+.ql-indent-1 {
+  padding-left: 16px;
+}
+
+.ql-indent-2 {
+  padding-left: 32px;
+}
+
+.ql-indent-3 {
+  padding-left: 48px;
+}
+
+.ql-indent-4 {
+  padding-left: 64px;
+}
+
+.ql-indent-5 {
+  padding-left: 80px;
+}
+
+.ql-indent-6 {
+  padding-left: 96px;
+}
+
+.ql-indent-7 {
+  padding-left: 112px;
+}
+
+.ql-indent-8 {
+  padding-left: 128px;
+}
+
+#company_list {
+  height: 500px;
+  overflow: auto;
+  padding: 20px 50px;
+}
+
+#company_list .descriptions {
+  line-height: 36px;
+  font-size: 16px;
+  color: #606266;
+  font-weight: bold;
+  padding-left: 30px;
+  width: 500px;
+  margin-right: 200px;
+  background-color: aquamarine;
+}
+
+
+
+//执行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 .el-select {
+  width: 100%;
+  /* 禁止用户拖拽调整大小 */
+}
+
+::v-deep .el-input-group__prepend {
+  color: black !important;
+}
+
+.formLabelFloatBox {
+  margin-bottom: 10px;
+  position: relative;
+
+  .formLabeladdIcon {
+    position: absolute;
+    right: 45px;
+    top: 5px;
+    width: 38px;
+    height: 24px;
+  }
+
+  .formLabelDelIcon {
+    position: absolute;
+    right: 5px;
+    top: 5px;
+    width: 38px;
+    height: 24px;
+  }
+}
+
+//该项不能为空几个字的位置
+::v-deep .el-form-item__error {
+  color: #ff4949;
+  font-size: 12px;
+  line-height: 1;
+  padding-top: 4px;
+  position: relative;
+}
+
+//输入框距离底部的距离
+::v-deep .el-form-item {
+  margin-bottom: 5px;
+}
+
+//图片提示文字样式
+.photo_tips {
+  font-size: 14px;
+  color: #999;
+}
+
+#educationExperience,
+#workExperience,
+#professionalSkills {
+  position: relative;
+}
+
+.addBtn {
+  position: absolute;
+  right: 0px;
+  top: -8px;
+  width: 78px;
+  // display: inline-block;
+  // margin-bottom: 0px;
+}
+
+//执行v-deep穿透scope选择器 end------------------------------------------------------------>*/</style>

+ 673 - 0
src/views/job/jobOpportunitiesDetails.vue

@@ -0,0 +1,673 @@
+<template>
+    <div class="mainBox">
+        <div class="layerBox">
+            <tableTitle :name="tableDivTitle" />
+            <div class="jobDetailsBox">
+                <div class="color_main">
+                    <div class="index_main">
+                        <section class="index_1 clearfix">
+                            <div class="cruit_head_box clearfix">
+                                <div class="cruit_head_left">
+                                    <a class="cruit_head_a cruit_head_only" title="">招聘信息</a>
+                                </div>
+                                <div class="seek_head_right_box clearfix">
+                                    <span class="seek_head_right_text">更新时间:{{ pageData.updated_at }}</span>
+                                </div>
+                            </div>
+                            <div class="index_1_box clearfix">
+                                <div class="demand_head_box clearfix">
+                                    <div class="demand_head_name">JAVA开发工程师</div>
+                                </div>
+                                <div class="cruit_li_2_foot clearfix">
+                                    <span class="cruit_li_2_foot_tag cruit_li_2_foot_exper">
+                                        {{ pageData.hy_id }}
+                                        &gt;
+                                        {{ pageData.jtzw_id }}
+                                    </span>
+                                    <span class="cruit_li_2_foot_tag cruit_li_2_foot_addres">{{ pageData.city_arr_id
+                                        }}</span>
+                                </div>
+                            </div>
+                        </section>
+                    </div>
+                </div>
+                <div class="index_main">
+                    <section class="index_2 clearfix">
+                        <div class="demand_1 clearfix">
+                            <div class="demand_left_1 clearfix">
+                                <div class="cruit_head_box clearfix">
+                                    <div class="cruit_head_left">
+                                        <a class="cruit_head_a cruit_head_only" title="">基本要求</a>
+                                    </div>
+                                </div>
+                                <div class="demand_ul_2">
+                                    <div class="demand_li_2 clearfix">
+                                        <div class="demand_li_2_label">工作性质:</div>
+                                        <div class="demand_li_2_text clearfix">{{ pageData.nature }}</div>
+                                    </div>
+                                    <div class="demand_li_2 clearfix">
+                                        <div class="demand_li_2_label">工作经验:</div>
+                                        <div class="demand_li_2_text clearfix">{{ pageData.experience }}工作经验</div>
+                                    </div>
+                                    <div class="demand_li_2 clearfix">
+                                        <div class="demand_li_2_label">学历文凭:</div>
+                                        <div class="demand_li_2_text clearfix">{{ pageData.education }}</div>
+                                    </div>
+                                    <div class="demand_li_2 clearfix">
+                                        <div class="demand_li_2_label">语言选择:</div>
+                                        <div class="demand_li_2_text clearfix">{{ pageData.language }}</div>
+                                    </div>
+                                    <div class="demand_li_2 clearfix">
+                                        <div class="demand_li_2_label">待遇选项:</div>
+                                        <div class="demand_li_2_text clearfix">{{ pageData.salary }}</div>
+                                    </div>
+                                    <div class="demand_li_2 clearfix">
+                                        <div class="demand_li_2_label">截止日期:</div>
+                                        <div class="demand_li_2_text clearfix">{{ pageData.due_data }}</div>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="demand_left_2 clearfix">
+                                <div class="cruit_head_box clearfix">
+                                    <div class="cruit_head_left">
+                                        <a class="cruit_head_a cruit_head_only" title="">岗位职责</a>
+                                    </div>
+                                </div>
+                                <div class="demand_article_1" v-html="pageData.description"></div>
+                            </div>
+                            <div class="demand_left_3 clearfix">
+                                <div class="cruit_head_box clearfix">
+                                    <div class="cruit_head_left">
+                                        <a class="cruit_head_a cruit_head_only" title="">具体要求</a>
+                                    </div>
+                                </div>
+                                <div class="demand_article_1" v-html="pageData.jt_description"></div>
+                            </div>
+                            <div class="demand_left_4 clearfix">
+                                <div class="cruit_head_box clearfix">
+                                    <div class="cruit_head_left">
+                                        <a class="cruit_head_a cruit_head_only" title="">联系方式</a>
+                                    </div>
+                                </div>
+                                <div class="demand_ul_2">
+                                    <div class="demand_li_2 clearfix">
+                                        <div class="demand_li_2_label">地址:</div>
+                                        <div class="demand_li_2_text clearfix">{{ pageData.address }}</div>
+                                    </div>
+                                    <div class="demand_li_2 clearfix">
+                                        <div class="demand_li_2_label">邮箱:</div>
+                                        <div class="demand_li_2_text clearfix">{{ pageData.email }}</div>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="demand_left_5 clearfix">
+                                <div class="cruit_head_box clearfix">
+                                    <div class="cruit_head_left">
+                                        <a class="cruit_head_a cruit_head_only" title="">公司介绍</a>
+                                    </div>
+                                </div>
+                                <div class="demand_ul_2">
+                                    <div class="demand_li_2 clearfix">
+                                        <div class="demand_li_2_label">公司规模:</div>
+                                        <div class="demand_li_2_text clearfix">{{ pageData.companySize }}</div>
+                                    </div>
+                                    <div class="demand_li_2 clearfix">
+                                        <div class="demand_li_2_label">公司性质:</div>
+                                        <div class="demand_li_2_text clearfix">{{ pageData.companyNature }}</div>
+                                    </div>
+                                    <div class="demand_li_2 clearfix">
+                                        <div class="demand_li_2_label">公司行业:</div>
+                                        <div class="demand_li_2_text clearfix">{{ pageData.industry }}</div>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </section>
+                </div>
+            </div>
+            <div class="jobDetailsBoxBtnBox">
+                <el-button type="info" @click="returnPage">返回</el-button>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script>
+//表格标题
+import tableTitle from './components/tableTitle';
+//引入公用样式
+import '@/styles/global.less';
+
+export default {
+    components: {
+        tableTitle
+    },
+    data() {
+        return {
+            tableDivTitle: "职位详情",
+            pageData: {
+                title: '',//职位名称
+                updated_at: '',//更新时间
+                hy_id: '',//行业分类
+                jtzw_id: '',//职业分类
+                city_arr_id: "",//城市id
+                nature: '',//工作性质
+                experience: '',//工作经验
+                education: '',//学历文凭
+                language: '',//语言能力
+                salary: '',//待遇选项
+                due_data: '',//截止日期
+                description: '',//岗位职责
+                jt_description: '',//具体要求
+                address: '',//地址
+                email: '',//邮箱
+                companySize: '',//公司规模
+                companyNature: '',//公司性质
+                industry: '',//公司行业
+            }
+        };
+    },
+    methods: {
+        returnPage() {
+            //返回列表页
+            this.$router.push('/jobOpportunities')
+        },
+        getData() {
+            let that = this;
+            let id = this.$route.query.id;
+            this.$store.dispatch('job/getJobRecruitingInfo', { id: id }).then(res => {
+                this.pageData.updated_at = res.data.updated_at;//更新时间
+                this.getIndustry(res.data.hy_id)//行业分类
+                this.getPositionList(res.data.zw_id, res.data.jtzw_id)//职业分类
+                this.pageData.city_arr_id = res.data.city//所在城市
+                this.getJobNature(res.data.nature_id)//工作性质
+                this.getExperience(res.data.experience)//获得工作年限
+                this.getEducation(res.data.educational)//获得学历文凭
+                this.getLanguage(res.data.language)//获得语言能力
+                this.getSalary(res.data.salary)//获得薪资待遇
+                this.pageData.city_arr_id = res.data.city//截止日期
+                this.pageData.due_data = res.data.due_data.split(' ')[0]//截止日期
+                this.pageData.description = res.data.description//岗位职责
+                this.pageData.jt_description = res.data.jt_description//具体要求
+                this.pageData.address = res.data.address_name//地址
+                this.pageData.email = res.data.email//邮箱
+                this.getCompanySize(res.data.company_size)//公司规模
+                this.getCompanyNature(res.data.company_nature)//公司性质
+                //company_hy_id 公司行业,目前使用的是hy_id
+            })
+        },
+        //获得公司行业
+        getIndustry(number) {
+            this.$store.dispatch('job/getIndustry').then(res => {
+                for (let item of res.data) {
+                    if (item.hyid == number) {
+                        this.pageData.hy_id = item.hyname
+                        this.pageData.industry = item.hyname
+                    }
+                }
+            })
+        },
+        //获得职业分类
+        getPositionList(zw_id, jtzw_id) {
+            //这里需要传入分类类型id和职业具体id
+            this.$store.dispatch('job/getPositionList', { zwpid: zw_id }).then(res => {
+                for (let item of res.data) {
+                    if (item.zwid == jtzw_id) {
+                        this.pageData.jtzw_id = item.zwname
+                    }
+                }
+            })
+        },
+        //获得所在城市
+        getJobRecruitingArea(city_arr_id) {
+            let cityArr = JSON.parse(city_arr_id);
+            this.$store.dispatch('job/getJobRecruitingArea', { id: cityArr[cityArr.length - 1] }).then(res => {
+                this.pageData.city_arr_id = res.data.city_name
+            })
+        },
+        //获得工作性质
+        getJobNature(number) {
+            this.$store.dispatch('job/getJobNature', { id: number }).then(res => {
+                for (let item of res.data) {
+                    if (item.evalue == number) {
+                        this.pageData.nature = item.ename
+                    }
+                }
+            })
+        },
+        //获得工作年限
+        getExperience(number) {
+            this.$store.dispatch('job/getExperience').then(res => {
+                for (let item of res.data) {
+                    if (item.evalue == number) {
+                        this.pageData.experience = item.ename
+                    }
+                }
+            })
+        },
+        //获得学历文凭
+        getEducation(number) {
+            this.$store.dispatch('job/getEducation').then(res => {
+                for (let item of res.data) {
+                    if (item.evalue == number) {
+                        this.pageData.education = item.ename
+                    }
+                }
+            })
+        },
+        //语言选择
+        getLanguage(number) {
+            this.$store.dispatch('job/getLanguage').then(res => {
+                for (let item of res.data) {
+                    if (item.evalue == number) {
+                        this.pageData.language = item.ename
+                    }
+                }
+            })
+        },
+        //获得薪资待遇
+        getSalary(number) {
+            this.$store.dispatch('job/getSalary').then(res => {
+                for (let item of res.data) {
+                    if (item.evalue == number) {
+                        this.pageData.salary = item.ename
+                    }
+                }
+            })
+        },
+        //获得公司规模
+        getCompanySize(number) {
+            this.$store.dispatch('job/getCompanySize').then(res => {
+                for (let item of res.data) {
+                    if (item.evalue == number) {
+                        this.pageData.companySize = item.ename
+                    }
+                }
+            })
+        },
+        //公司性质
+        getCompanyNature(number) {
+            this.$store.dispatch('job/getCompanyNature').then(res => {
+                for (let item of res.data) {
+                    if (item.id == number) {
+                        this.pageData.companyNature = item.nature_name
+                    }
+                }
+            })
+        },
+    },
+    mounted() {
+        this.getData();
+    },
+    watch: {
+        '$route'(to, from) {
+            console.log(from, '---------------------------------------');
+            // 监听路由参数中的 id 变化,若变化则更新页面状态并获取数据
+            if (to.query.id) {
+                this.getData();
+            }
+        },
+    }
+};
+</script>
+
+
+<style lang="less" scoped>
+.jobDetailsBox {
+    background: #F5F7FB;
+    padding: 30px;
+}
+
+.jobDetailsBoxBtnBox {
+    text-align: center;
+    margin-top: 50px;
+    margin-bottom: 30px;
+
+    button {
+        width: 180px;
+        height: 58px;
+        font-size: 20px;
+    }
+}
+
+.clearfix {
+    overflow: hidden;
+}
+
+.clearfix_2::after {
+    content: '';
+    display: block;
+    height: 0;
+    visibility: hidden;
+    clear: both;
+}
+
+.hiddenColor {
+    visibility: hidden;
+}
+
+.hand {
+    cursor: pointer;
+}
+
+.aTag_parent {
+    position: relative;
+}
+
+.aTag_parent>a,
+.aTag {
+    display: block;
+    width: 100%;
+    height: 100%;
+    position: absolute;
+    z-index: 99;
+    border: 0px;
+    top: 0px;
+    left: 0px;
+    background: rgba(0, 0, 0, 0);
+}
+
+.dot1 {
+    display: block;
+    word-break: keep-all;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}
+
+.dot2 {
+    overflow: hidden;
+    display: -webkit-box;
+    -webkit-box-orient: vertical;
+    -webkit-line-clamp: 2;
+}
+
+input,
+img {
+    border: none;
+}
+
+.cover100 img {
+    display: block;
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+}
+
+.back100 {
+    background-size: 100% 100%;
+    background-repeat: no-repeat;
+}
+
+.index_main {
+    margin: 0 auto;
+}
+
+.slow_6 {
+    -webkit-transition: all .6s;
+    -moz-transition: all .6s;
+    -ms-transition: all .6s;
+    -o-transition: all .6s;
+    transition: all .6s;
+}
+
+.color_main {
+    box-sizing: border-box;
+    border: solid 1px #fbfbfb;
+}
+
+.index_1 {
+    margin-top: 20px;
+}
+
+.cruit_head_box {
+    border-bottom: solid 1px #D9D9D9;
+}
+
+.cruit_head_left {
+    float: left;
+}
+
+.cruit_head_a {
+    float: left;
+    height: 55px;
+    line-height: 55px;
+    color: #333;
+    font-weight: bold;
+    font-size: 22px;
+    border-bottom: solid 3px rgba(0, 0, 0, 0);
+    margin-right: 40px;
+}
+
+.cruit_head_only {
+    float: left;
+    height: 55px;
+    line-height: 55px;
+    color: #5570F1;
+    font-weight: bold;
+    font-size: 22px;
+    border-bottom: solid 3px #5570F1;
+}
+
+.demand_head_box {
+    .demand_head_name {
+        float: left;
+        color: #333;
+        font-size: 28px;
+        margin-top: 30px;
+        font-weight: bold;
+    }
+
+    .demand_head_btn {
+        float: right;
+        height: 45px;
+        line-height: 45px;
+        color: #fff;
+        font-size: 16px;
+        border-radius: 4px;
+        overflow: hidden;
+        padding: 0px 20px 0px 43px;
+        margin-top: 30px;
+        background-size: 18px 18px;
+    }
+}
+
+.cruit_li_2_foot {
+    margin: 20px 0px 30px;
+
+    .cruit_li_2_foot_tag {
+        float: left;
+        margin-right: 30px;
+        height: 24px;
+        line-height: 24px;
+        color: #999;
+        font-size: 16px;
+        background: no-repeat left center;
+        background-size: 24px 100%;
+        padding-left: 30px;
+    }
+
+    .cruit_li_2_foot_addres {
+        background-image: url(../../../src/assets/job/local.png);
+    }
+
+    .cruit_li_2_foot_exper {
+        background-image: url(../../../src/assets/job/briefcase.png);
+    }
+
+    .cruit_li_2_foot_educat {}
+
+    .cruit_li_2_foot_tag_in {
+        height: 24px;
+        line-height: 24px;
+        color: #999;
+        font-size: 16px;
+        float: left;
+    }
+
+    .cruit_li_2_foot_tag_in:nth-of-type(2) {
+        padding-left: 24px;
+        position: relative;
+    }
+
+    .cruit_li_2_foot_tag_in:nth-of-type(2)::after {
+        content: '';
+        display: block;
+        position: absolute;
+        width: 2px;
+        height: 2px;
+        background: #999;
+        left: 11px;
+        top: 11px;
+    }
+}
+
+.index_2 {
+    margin-top: 11px;
+}
+
+.demand_2 {
+    float: right;
+    width: 380px;
+}
+
+.demand_right_2 {
+    margin-top: 11px;
+}
+
+.demand_left_1 {}
+
+.demand_left_2 {
+    margin-top: 30px;
+}
+
+.demand_left_3 {
+    margin-top: 30px;
+}
+
+.demand_left_4 {
+    margin-top: 30px;
+}
+
+.demand_left_5 {
+    margin-top: 11px;
+}
+
+.demand_ul_1 {
+    margin-top: 32px;
+
+    .demand_ul_1_a {
+        height: 21px;
+        line-height: 21px;
+        color: #333;
+        font-size: 18px;
+        margin-bottom: 33px;
+    }
+
+    .demand_ul_1_a:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+
+    .demand_ul_1_a:hover {
+        color: #5570F1;
+    }
+}
+
+.demand_ul_2 {
+    margin-top: 30px;
+
+    .demand_li_2 {
+        display: flex;
+        margin-bottom: 30px;
+    }
+
+    .demand_li_2_label {
+        word-break: keep-all;
+        white-space: nowrap;
+        height: 24px;
+        line-height: 24px;
+        margin-right: 16px;
+        color: #333;
+        font-size: 16px;
+    }
+
+    .demand_li_2_text {
+        line-height: 24px;
+        color: #333;
+        font-size: 16px;
+    }
+}
+
+.demand_article_1 {
+    margin-top: 30px;
+}
+
+.demand_li_2:nth-last-of-type(1) {
+    margin-bottom: 0px;
+}
+
+.banner_1 {
+    height: 90px;
+    width: 1200px;
+    overflow: hidden;
+    margin: 30px auto 0px;
+
+    .banner_1_a {
+        height: 90px;
+        width: 1200px;
+        display: block;
+    }
+
+    .banner_1_img {
+        display: block;
+        width: 1200px;
+    }
+}
+
+.demand_crumb_box {
+    height: 22px;
+    margin: 30px auto 20px;
+
+    .demand_crumb_text {
+        display: inline-block;
+        height: 22px;
+        line-height: 22px;
+        color: #666;
+        font-size: 20px;
+        margin-right: 15px;
+    }
+
+    a.demand_crumb_text:hover {
+        color: #5570F1;
+    }
+}
+
+.seek_head_right_box {
+    float: right;
+    margin-top: 19px;
+}
+
+.seek_head_right_text {
+    float: left;
+    height: 21px;
+    line-height: 21px;
+    color: #999;
+    font-size: 16px;
+    margin-left: 22px;
+}
+
+@media screen and (min-width:1200px) {
+    /*pc_1440*/
+    @media screen and (max-width:1440px) {
+        /*1200*/
+    }
+
+    .pc_none {
+        display: none;
+    }
+}
+
+@media screen and (max-width:599px) {}
+
+@media screen and (max-width:320px) {}
+</style>

+ 191 - 0
src/views/job/jobOpportunitiesList.vue

@@ -0,0 +1,191 @@
+<template>
+    <div class="mainBox">
+        <!--搜索功能 start------------------------------------------------------------>
+        <div class="layerBox_search">
+            <div class="layerBoxLine">
+                <el-row>
+                    <el-col :span="6">
+                        <div class="searchBox">
+                            <div class="searchTitle">公司名称</div>
+                            <el-input placeholder="请输入公司名称" autocomplete="off" v-model="getApiData.business_name" />
+                        </div>
+                    </el-col>
+                    <el-col :span="6">
+                        <div class="searchBox">
+                            <div class="searchTitle">工作经验</div>
+                            <el-select v-model="getApiData.experience" placeholder="请选择工作经验" style="width: 100%;">
+                                <el-option v-for="item in experience" :key="item.evalue" :label="item.ename"
+                                    :value="item.evalue">
+                                </el-option>
+                            </el-select>
+                        </div>
+                    </el-col>
+                    <el-col :span="6">
+                        <div class="searchBox">
+                            <div class="searchTitle">薪资范围</div>
+                            <el-select v-model="getApiData.salary" placeholder="请选择薪资范围" style="width: 100%;">
+                                <el-option v-for="item in salary" :key="item.evalue" :label="item.ename"
+                                    :value="item.evalue">
+                                </el-option>
+                            </el-select>
+                        </div>
+                    </el-col>
+                </el-row>
+            </div>
+        </div>
+        <div class=" " style="padding:0px 40px 0px 0px; overflow:hidden;">
+            <div style="float:right;">
+                <el-button @click="clearSearchList">重置</el-button>
+                <el-button type="primary" @click="getData">搜索</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="business_name" label="公司名称" width=""></el-table-column>
+                        <el-table-column prop="title" label="招聘职位名称" width=""></el-table-column>
+                        <el-table-column prop="experience_ename" label="工作经验" width=""></el-table-column>
+                        <el-table-column prop="salary_ename" label="薪资范围" width=""></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="listEditBtn" @click="goDetail(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------------------------------------------------------------>
+        <!--表格内容 end------------------------------------------------------------>
+    </div>
+</template>
+
+<script>
+//表格标题
+import tableTitle from './components/tableTitle';
+//引入公用样式
+import '@/styles/global.less';
+
+export default {
+    components: {
+        tableTitle,//表格标题
+    },
+    data() {
+        return {
+            //1.列表和分页相关 start ------------------------------------------------------------>
+            tableDivTitle: "求职信息列表",
+            tableData: [],//内容
+            experience: [],//工作经验列表
+            salary: [],//薪资范围列表
+            getApiData: {
+                business_name: "",//公司名称
+                experience: "",//工作经验
+                salary: "",//薪资
+                page: 1,//当前是第几页
+                pageSize: 10,//一共多少条
+            },
+            allCount: 0,//总条数
+            //分页相关 end ------------------------------------------------------------>
+        }
+    },
+    methods: {
+        //1.列表和分页相关 start ------------------------------------------------------------>
+        //1.1 开始请求列表信息方法
+        getData() {
+            this.$store.dispatch('job/getRecruitingList', this.getApiData).then(res => {
+                if (res.code == 200) {
+                    this.tableData = res.data.row;//给与内容
+                    this.allCount = res.data.count;//给与总条数
+                } else {
+                    // this.$message.error(res.message)
+                    this.tableData = "";//给与内容
+                    this.allCount = 0;//给与总条数
+                }
+            })
+        },
+        //1.2 获得工作经验
+        getExperience() {
+            this.$store.dispatch('job/getExperience', {}).then(res => {
+                if (res.code == 200) {
+                    this.experience = res.data;
+                }
+            })
+        },
+        //1.3 获得薪资范围
+        getSalary() {
+            this.$store.dispatch('job/getSalary', {}).then(res => {
+                if (res.code == 200) {
+                    this.salary = res.data;
+                }
+            })
+        },
+        //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.business_name = "";
+            this.getApiData.experience = "";
+            this.getApiData.salary = "";
+            this.getApiData.page = 1;
+            this.getApiData.pageSize = 10;
+            this.getData();
+        },
+        //列表和分页相关 end ------------------------------------------------------------>
+
+        //2.跳转到详情start ------------------------------------------------------------>
+        goDetail(id) {
+            this.$router.push({
+                path: '/jobOpportunitiesDetails',
+                query: { id: id }
+            });
+        },
+        //添加求职信息end ------------------------------------------------------------>
+    },
+    mounted() {
+        //1.获得初始数据
+        this.getData();
+        //2.获得工作经验
+        this.getExperience();
+        //3.获得薪资范围
+        this.getSalary();
+    }
+}
+</script>
+
+<style scoped lang="less"></style>

+ 227 - 0
src/views/job/jobRecruitingList.vue

@@ -0,0 +1,227 @@
+<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-input placeholder="请输入职位名称" autocomplete="off" v-model="getApiData.keyword"/>
+              </div>
+            </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="100"></el-table-column>
+              <el-table-column prop="title" label="职位名称" width=""></el-table-column>
+              <el-table-column prop="website_name" label="网站名称" width=""></el-table-column>
+              <el-table-column prop="user_name" label="发布人" width=""></el-table-column>
+              <el-table-column prop="status" label="审核状态" width="150">
+                <template slot-scope="scope">
+                  <span v-if="scope.row.status==0">待审核</span>
+                  <span v-if="scope.row.status==1">已通过</span>
+                  <span v-if="scope.row.status==2">已拒绝</span>
+                </template>
+              </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 fixed="right" label="操作" width="300" header-align="center">
+                <template slot-scope="scope">
+                  <div class="listBtnBox">
+                    <div class="listUpBtn" @click="returnRow(scope.row.id, tableData)" v-if="creatNews_user_type == 10000"><i class="el-icon-refresh-right"></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------------------------------------------------------------>
+      <!--表格内容 end------------------------------------------------------------>
+    </div>
+  </template>
+  
+  <script>
+  //表格标题
+  import tableTitle from './components/tableTitle';
+  //引入公用样式
+  import '@/styles/global.less';
+  //获得用户身份
+  import { getUseType } from '@/utils/auth';
+  export default {
+    components: {
+      tableTitle,//表格标题
+    },
+    data() {
+      return {
+        //1.列表和分页相关 start ------------------------------------------------------------>
+        tableDivTitle:"职位列表",
+        tableData:[],//内容
+        editId:0,//要修改的网站id
+        getApiData:{
+          checkout:1,//审核状态
+          title:"",//职位名称
+          website_name:"",//网站名称
+          user_name:"",//发布人
+          status:"",//审核状态
+          created_at:"",//创建时间
+          updated_at:"",//修改时间
+          page:1,//当前是第几页
+          page_size:10,//一共多少条
+        },
+        allCount:0,//总条数
+        //分页相关 end ------------------------------------------------------------>
+      }
+    },
+    methods: {
+      //1.列表和分页相关 start ------------------------------------------------------------>
+      //1.1 开始请求列表信息方法
+      getData(type){
+        if(type=="search"){
+          this.getApiData.page = 1;
+        }
+        this.getApiData.checkout = 1;
+        this.$store.dispatch('news/getJobRecruitingList',this.getApiData).then(res=> {
+          let data = [];
+          console.log(res.data.rows)
+          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/delJobRecruiting',{id:id}).then(res=> {
+            this.getData();
+            this.$message({
+              type: 'success',
+              message: '删除成功!'
+            });
+          }).catch(() => {
+            this.$message({
+              type: 'warning',
+              message: '网络错误,请重试!'
+            });
+          })
+        }).catch(() => {
+          this.$message({
+            type: 'warning',
+            message: '已取消删除'
+          });
+        });
+      },
+      //3.6 撤回审核
+      returnRow(id){
+        this.$confirm('确定要撤回吗?', '提示', {
+          confirmButtonText: '撤回',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          //撤回,把文章状态修改为0,重新进行审核
+          this.upRow(id,0)
+        })
+      },
+       //3.5 修改文章状态
+      upRow(id,status){
+        let data = {
+          id:id,
+          status:status
+        }
+        this.$store.dispatch('news/checkJobRecruiting',data).then(res=> {
+          if(res.code==200){
+            this.$message({
+              type: 'success',
+              message: '操作成功!'
+            });
+            this.getData();
+          }
+        })
+      },
+      //直接跳转
+      handleSizeChange(val) {
+        this.getApiData.page = val;
+        this.getData();
+      },
+      //1.5 点击分页
+      handleCurrentChange(val) {
+        this.getApiData.page = val;
+        this.getData();
+      },
+      //1.6 重置按钮
+      clearSearchList(){
+        this.getApiData.keyword = "";
+        this.getApiData.page = 1;
+        this.getApiData.page_size = 10;
+        this.getData();
+      },
+      //列表和分页相关 end ------------------------------------------------------------>
+  
+      //2.添加新闻 start ------------------------------------------------------------>
+      //跳转到职位发布页面
+      goCreat(){
+        this.$router.push({
+          path: '/creatJob',
+        });
+      },
+      goEdit(id){
+        let data = {
+          id:id
+        }
+        this.$router.push({
+          path: '/creatJob',
+          query: data
+        });
+      }
+      //添加新闻 end ------------------------------------------------------------>
+    },
+    mounted(){
+      this.creatNews_user_type = getUseType()
+      //1.获得初始数据
+      this.getData();
+    }
+  }
+  </script>
+  
+  <style scoped lang="less">
+  
+  </style>
+  

+ 207 - 0
src/views/job/jobResumeList.vue

@@ -0,0 +1,207 @@
+<template>
+    <div class="mainBox">
+      <!--搜索功能 start------------------------------------------------------------>
+      <div class="layerBox_search">
+        <div class="layerBoxLine">
+          <el-row>
+            <el-col :span="6">
+              <div class="searchBox">
+                <div class="searchTitle">标题名称</div>
+                <el-input placeholder="请输入标题名称" autocomplete="off" v-model="getApiData.user_name" />
+              </div>
+            </el-col>
+            <el-col :span="6">
+              <div class="searchBox">
+                <div class="searchTitle">薪资范围</div>
+                <el-select v-model="getApiData.salary" placeholder="请选择薪资范围" style="width: 100%;">
+                  <el-option v-for="item in incomes" :key="item.evalue" :label="item.ename" :value="item.evalue">
+                  </el-option>
+                </el-select>
+              </div>
+            </el-col>
+  
+          </el-row>
+        </div>
+      </div>
+      <div class=" " style="padding:0px 40px 0px 0px; overflow:hidden;">
+        <div style="float:right;">
+          <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="user_name" label="标题名称" width=""></el-table-column>
+              <el-table-column prop="job_name" label="具体职位" width=""></el-table-column>
+              <el-table-column prop="cityname" label="工作地点" width=""></el-table-column>
+              <el-table-column prop="salary_name" label="薪资范围" width=""></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="listEditBtn" @click="goDetail(scope.row.hunt_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------------------------------------------------------------>
+      <!--表格内容 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
+        incomes: [],//薪资范围
+        getApiData: {
+          user_name: "",//标题
+          salary: "",//导航池id
+        //   status: 2,//状态
+  
+          page: 1,//当前是第几页
+          pageSize: 10,//一共多少条
+        },
+        allCount: 0,//总条数
+        //分页相关 end ------------------------------------------------------------>
+      }
+    },
+    methods: {
+      //1.列表和分页相关 start ------------------------------------------------------------>
+      //1.1 开始请求列表信息方法
+      getData(type) {
+        if (type == "search") {
+          this.getApiData.page = 1;
+        }
+        this.$store.dispatch('job/getJobResumeList', this.getApiData).then(res => {
+          //格式化:islink=0为不使用外面 islink=1为使用外链
+          //status=1为显示 status=2为不显示
+            if(res.code == 0){
+                this.tableData = []; //给与内容
+                this.allCount = 0; //给与总条数
+            }else{
+                let data = [];
+                for (let item of res.data.row) {
+                    item.user_name = item.user_name + '简历'
+                    item.category_name = '我的沟通'
+                    item.job_name = item.jtzw_name || '暂无'
+                    item.cityname = item.hunt_cityname || '暂无'
+                    item.updated_at = item.updated_at || '暂无'
+                    data.push(item)
+                }
+                
+                this.tableData = res.data.row; //给与内容
+                this.allCount = res.data.count; //给与总条数
+            }
+        
+        }).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.user_name = "";
+        this.getApiData.salary = ""; //导航池id
+        this.getApiData.page = 1;
+        this.getApiData.pageSize = 10;
+        this.getData();
+      },
+      //列表和分页相关 end ------------------------------------------------------------>
+  
+      //2.添加求职信息start ------------------------------------------------------------>
+      //跳转到求职信息发布页面
+      goCreat() {
+        this.$router.push({
+          path: '/addJobHunting',
+        });
+      },
+      goDetail(id) {
+        console.log(id, '---3--')
+        let data = {
+          id: id
+        }
+        this.$router.push({
+          path: '/jobHuntingApplyDetil',
+          query: data
+        });
+      },
+      //添加求职信息end ------------------------------------------------------------>
+      getJobHuntingData() {
+        this.$store.dispatch('news/getJobHuntingData', {}).then(res => {
+          if (res.code == 200) {
+            this.jobEnum = res.data.jobEnum;
+            this.educations = this.jobEnum.filter(item => item.egroup === 'education');
+            this.languages = this.jobEnum.filter(item => item.egroup === 'language');
+            this.languagetypes = this.jobEnum.filter(item => item.egroup === 'languagetype');
+            this.natures = this.jobEnum.filter(item => item.egroup === 'nature');
+            this.maritals = this.jobEnum.filter(item => item.egroup === 'marital');
+            this.incomes = this.jobEnum.filter(item => item.egroup === 'income');
+            this.years = this.jobEnum.filter(item => item.egroup === 'years');
+  
+            this.jobIndustry = res.data.jobIndustry;
+            this.jobNature = res.data.jobNature;
+            this.jobPosition = res.data.jobPosition;
+          }
+        })
+      },
+  
+    },
+    mounted() {
+      //1.获得初始数据
+      this.getData();
+      this.getJobHuntingData();
+    }
+  }
+  </script>
+  
+  <style scoped lang="less"></style>
+  

+ 3 - 1
src/views/news/GoodList.vue

@@ -103,7 +103,7 @@
               <template slot-scope="scope">
                 <div class="listBtnBox">
 
-                  <div class="listUpBtn" @click="returnRow(scope.row.id, tableData)"><i
+                  <div class="listUpBtn" v-if="type_id == 10000" @click="returnRow(scope.row.id, tableData)"><i
                       class="el-icon-refresh-right"></i>撤回</div>
 
                   <div class="listDeleteBtn" @click="deleteRow(scope.row.id, tableData)"><i
@@ -152,6 +152,7 @@ export default {
       tableDivTitle: "商品列表",
       tableData: [],//内容
       editId: 0,//要修改的网站id
+      type_id: getUseType(),//发布类型
       getApiData: {
         name: "",//标题
         category_name: "",//导航池id
@@ -299,6 +300,7 @@ export default {
     //添加新闻 end ------------------------------------------------------------>
   },
   mounted() {
+    this.type_id = getUseType()
     //1.获得初始数据
     this.getData();
   }

+ 8 - 15
src/views/news/addBook.vue

@@ -8,14 +8,13 @@
         <div class="formDiv">
 
           <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 @change="get_WebSite_id">
+            <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>
           <el-form-item label="书刊音像标题:" prop="title" class="custom-align-right">
@@ -192,8 +191,8 @@ export default {
       }
     }
     const validateEmpty = (rule, value, callback) => {
-      console.log(value, '-------------------------------')
-      if (value.length == 0) {
+      console.log(value, '-----------validateEmpty--------------------')
+      if (value == '') {
         callback(new Error('该项不能为空!'))
       } else {
         callback()
@@ -355,6 +354,7 @@ export default {
           let website_id = self.form.website_id == '' ? 2 : self.form.website_id;
           console.log(website_id, 'website_id--111-----');
           let parames = {
+            'type': 3,
             'website_id': website_id,
             'pid': pid
           }
@@ -364,6 +364,7 @@ export default {
                 value: item.category_id,
                 label: item.alias,
                 leaf: level >= 3,
+                disabled: item.type != 3,
                 children: []
               }))
               resolve(nodes)
@@ -414,7 +415,6 @@ export default {
     async fetchWebsiteOptions() {
       try {
         const response = await this.$store.dispatch('news/websiteList', { page: 1, pageSize: 1000 });
-        console.log(response, 'response');
         if (response && response.data) {
           this.websiteOptions = response.data.rows.map(item => ({
             value: item.id,
@@ -439,10 +439,6 @@ export default {
         });
       })
     },
-    get_WebSite_id(val){
-      // this.form.website_id = val; //赋值
-      console.log(val, 'val')
-    },
     //1.提交表单 start ------------------------------------------------------------>
     beforeAvatarUpload(file) {
       const isJPG = file.type === 'image/jpeg';
@@ -508,8 +504,6 @@ export default {
           this.form.price == '' ? this.form.price = 0 : this.form.price = this.form.price;
           this.form.market_price == '' ? this.form.market_price = 0 : this.form.market_price = this.form.market_price;
           this.form.page == '' ? this.form.page = 0 : this.form.page = this.form.page;
-          console.log(this.form, 'this.form');
-          
           this.$store.dispatch('news/addBook', this.form).then(res => {
             if (res.code == 200) {
               //汇报结果
@@ -585,7 +579,7 @@ export default {
         this.form.cat_arr_id = Array.isArray(res.data.cat_arr_id) ? res.data.cat_arr_id : JSON.parse(res.data.cat_arr_id);
         this.form.city_arr_id = Array.isArray(res.data.city_arr_id) ? res.data.city_arr_id : JSON.parse(res.data.city_arr_id);
         this.parentKey += 1; // 触发级联选择器重新加载
-        this.loadCascaderPath(this.form.cat_arr_id); // 加载路径数据
+        // this.loadCascaderPath(this.form.cat_arr_id); // 加载路径数据
         //回显推荐等级
         this.form.title = res.data.title;
         this.form.website_id = res.data.website_id;
@@ -725,7 +719,6 @@ export default {
 
   },
   watch: {
-
     '$route'(to, from) {
       console.log(from, '---------------------------------------');
       // 监听路由参数中的 id 变化,若变化则更新页面状态并获取数据

+ 17 - 6
src/views/news/addGood.vue

@@ -31,8 +31,8 @@
               </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">
@@ -114,7 +114,7 @@
             <el-input v-model="form.keyword" autocomplete="off" placeholder="请输入商品关键词"></el-input>
           </el-form-item> -->
 
-          <el-form-item label="商品关键词:" prop="" class="custom-align-right">
+          <el-form-item label="商品关键词:" prop="keyword" class="custom-align-right">
             <template #label>
               <span class="askBox">
                 商品关键词:
@@ -128,7 +128,7 @@
 
 
 
-          <el-form-item label="商品描述:" prop="" class="custom-align-right">
+          <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>
           </el-form-item>
@@ -141,6 +141,10 @@
             <el-input type="number" v-model="form.hits" autocomplete="off" placeholder="请输入浏览量"></el-input>
           </el-form-item>
 
+          <el-form-item label="公司名称:" prop="com" class="custom-align-right">
+            <el-input v-model="form.com" autocomplete="off" placeholder="请输入公司名称"></el-input>
+          </el-form-item>
+
           <el-form-item label="联系人:" prop="contact" class="custom-align-right">
             <el-input v-model="form.contact" autocomplete="off" placeholder="请输入联系人"></el-input>
           </el-form-item>
@@ -162,6 +166,9 @@
           <el-form-item label="详细地址:" prop="address" class="custom-align-right">
             <el-input v-model="form.address" autocomplete="off" placeholder="请输入详细地址"></el-input>
           </el-form-item>
+
+
+
         </div>
       </el-form>
     </div>
@@ -223,6 +230,7 @@ export default {
     //0.全局操作 end ------------------------------------------------------------>
     return {
       userType: 0,
+      user_type: 0,
       websiteOptions: [],
       checked: false,
       formLabelWidth: '80px',//表单的长度
@@ -265,6 +273,7 @@ export default {
         address: '',
         city_id: '',
         imgurl: [],//缩略图
+        com: '',
       },
       //1.2 表单验证规则
       formRules: {
@@ -406,6 +415,7 @@ export default {
           let website_id = self.form.website_id == '' ? 2 : self.form.website_id;
           console.log(website_id, 'website_id--111-----');
           let parames = {
+            'type': 2,
             'website_id': website_id,
             'pid': pid
           }
@@ -415,6 +425,7 @@ export default {
                 value: item.category_id,
                 label: item.alias,
                 leaf: level >= 3,
+                disabled: item.type != 2,
                 children: []
               }))
               resolve(nodes)
@@ -668,6 +679,7 @@ export default {
         this.form.postal = res.data.postal;
         this.form.address = res.data.address;
         this.form.level = res.data.level;
+        this.form.com = res.data.com;
         if (res.data.level == "[0]" || res.data.level == "[]" || res.data.level == "") {
           this.form.level = [];
         } else {
@@ -692,7 +704,7 @@ export default {
           .then((res) => {
             const nodes = res.data.map(item => ({
               value: item.id,
-              label: item.name,
+              label: item.alias,
               leaf: level >= 3, // 假设4层结构,设置叶子节点标记
             }));
             // 级联选择器加载数据
@@ -948,7 +960,6 @@ export default {
 
 .imgBox {
   color: #999;
-  font-size: 14px;
 }
 
 //执行v-deep穿透scope选择器 end------------------------------------------------------------>*/</style>

+ 159 - 74
src/views/news/addJobHunting.vue

@@ -16,6 +16,32 @@
       </div>
       <el-form :model="form" ref="form" :rules="formRules" label-position="left" label-width="120px">
         <div class="formDiv">
+          <!-- <div v-if="creatNews_user_type != 10000">
+            <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> -->
+          <div v-if="creatNews_user_type == 10000">
+            <el-form-item label="站点名称:" prop="web_site_id" class="custom-align-right">
+              <el-cascader :key="parentKey" v-model="form.web_site_id" placeholder="请选择站点名称"
+                :options="creatNews_nav_pool_arr" @change="creatNews_nav_pool_change_fun(form.web_site_id)" filterable
+                clearable></el-cascader>
+            </el-form-item>
+          </div>
+          <el-form-item label="栏目名称:" prop="cat_arr_id" class="custom-align-right">
+            <el-cascader :key="parentKey_2" v-model="form.cat_arr_id" placeholder="请选择要绑定的栏目名称" :props="parentData_2"
+              filterable clearable></el-cascader>
+          </el-form-item>
+
+          <!-- <div v-if="creatNews_user_type == 10000">
+            <el-form-item label="推荐等级:" prop="" class="custom-align-right">
+              <el-select v-model="form.job_level" clearable placeholder="请选择推荐等级">
+                <el-option v-for="item in gradeArr" :key="item.value" :label="item.label" :value="item.value">
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </div> -->
           <el-form-item label="头像:" class="custom-align-right" prop="imgUrl">
             <div class="uploaderBox">
               <el-upload class="avatar-uploader" action="#" :show-file-list="false" :before-upload="beforeAvatarUpload">
@@ -44,34 +70,12 @@
             </template>
             <el-input v-model="form.name" autocomplete="off" placeholder="请输入姓名"></el-input>
           </el-form-item>
-          <div v-if="creatNews_user_type != 10000">
-            <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>
-          <div v-if="creatNews_user_type == 10000">
-
-            <el-form-item label="站点名称:" prop="cat_arr_id" class="custom-align-right">
-              <el-cascader :key="parentKey" v-model="form.web_site_id" placeholder="请选择站点名称"
-                :options="creatNews_nav_pool_arr" @change="creatNews_nav_pool_change_fun(form.web_site_id)" filterable
-                clearable></el-cascader>
-            </el-form-item>
-
-
-            <el-form-item label="展示名称:" prop="cat_arr_id" class="custom-align-right">
-              <el-cascader :key="parentKey_2" v-model="form.cat_arr_id" placeholder="请选择要绑定的父级导航" :props="parentData_2"
-                filterable clearable></el-cascader>
-            </el-form-item>
-
-          </div>
           <el-form-item label="性别:" prop="sexy" class="custom-align-right">
             <el-radio-group v-model="form.sexy">
               <el-radio :label="1">男</el-radio>
               <el-radio :label="2">女</el-radio>
             </el-radio-group>
           </el-form-item>
-
           <el-form-item label="参加工作时间:" prop="jobtime" class="custom-align-right">
             <el-date-picker v-model="form.jobtime" type="date" placeholder="选择参加工作时间">
             </el-date-picker>
@@ -84,8 +88,6 @@
             </el-select>
           </el-form-item>
 
-
-
           <el-form-item label="手机号:" prop="phone" class="custom-align-right">
             <el-input v-model="form.phone" autocomplete="off" placeholder="请输入手机号"></el-input>
           </el-form-item>
@@ -143,8 +145,6 @@
             </el-select>
           </el-form-item>
 
-
-
           <el-form-item label="所属行业:" prop="industry" class="custom-align-right" style="width: 100%;">
             <el-select v-model="form.industry" placeholder="请选择所属行业">
               <el-option v-for="item in jobIndustry" :key="item.hyid" :label="item.hyname"
@@ -205,13 +205,10 @@
           </div>
 
           <div v-for="(item, index) in form.job_experience" :key="index">
-
             <el-form-item label="公司名称:" prop="company_name" class="custom-align-right" style="width: 100%;">
               <el-input v-model="form.job_experience[index].company_name" autocomplete="off"
                 placeholder="请输入公司名称"></el-input>
             </el-form-item>
-
-
             <el-form-item label="所属行业:" prop="job_industry" class="custom-align-right" style="width: 100%;">
               <el-select v-model="form.job_experience[index].job_industry" placeholder="请选择所属行业"
                 @change='changeCompanyNature()'>
@@ -236,7 +233,6 @@
               <el-input v-model="form.job_experience[index].department" autocomplete="off"
                 placeholder="请输入所属部门"></el-input>
             </el-form-item>
-
             <el-form-item label="在职时间:" prop="job_timeList" class="custom-align-right">
               <el-date-picker v-model="form.job_experience[index].job_timeList" type="daterange" range-separator="至"
                 start-placeholder="开始日期" end-placeholder="结束日期" :picker-options="pickerOptions">
@@ -250,7 +246,7 @@
               <el-input v-model="form.job_experience[index].performance" autocomplete="off" type="textarea"
                 aria-rowspan="6" placeholder="请输入工作业绩"></el-input>
             </el-form-item>
-            <el-divider></el-divider>
+            <el-divider v-if="form.job_experience.length - 1"></el-divider>
           </div>
 
 
@@ -288,7 +284,7 @@
               <el-input v-model="form.education_experience[index].school_experience" autocomplete="off" type="textarea"
                 aria-rowspan="6" placeholder="请输入在校经历"></el-input>
             </el-form-item>
-            <!-- <el-divider content-position="right"> </el-divider> -->
+            <el-divider v-if="form.education_experience.length - 1"> </el-divider>
           </div>
         </div>
       </el-form>
@@ -453,22 +449,25 @@ export default {
       creatNews_user_type: 0,//判断用户类型'
 
       form: {
+        job_level: '',//推荐等级
+        status: '',//状态
         experience: '',//工作经验
         industry: '',//行业
         job: '',//职位
         self_evaluation: '',//自我评价
         city_arr_id: [],
+        salary: '',//薪资
         skillList: [{ 'skill': '' }],
         job_experience: [{
-          company_name: '',
-          job_industry: '',
-          job_name: '',
-          job_typename: '',
-          department: '',
+          company_name: '',//公司名称*
+          job_industry: '',//所属行业*
+          job_typename: '', //职位类别*
+          job_name: '', //具体职位*
+          department: '', //所属部门
           // job_timeList: ['2025-02-21 00:00:00', '2025-02-29 00:00:00'],
-          job_timeList: [],
-          performance: '',
-          job_content: ''
+          job_timeList: [], //在职时间*
+          job_content: '', //工作内容*
+          performance: '', //工作业绩
 
         }],//工作经验
         education_experience: [{
@@ -485,6 +484,12 @@ export default {
         web_site_id: 0,
         name: "",
         sexy: 1,
+        phone: "",
+        wx: "",
+        birth: "",
+        politic: "",
+        language: "",
+        educational: "",
         // jobtime: "2025-02-21 00:00:00",//工作时间
         jobtime: "",//工作时间
         origin: "",
@@ -503,25 +508,31 @@ export default {
       //1.2 表单验证规则
       formRules: {
         skillList: [{ required: true, trigger: 'blur', validator: validateArraySkill }],
-        salary: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+        salary: [{ required: true, trigger: 'change', validator: validateEmpty }],
         //求职名称不能为空
         name: [{ required: true, trigger: 'blur', validator: validateEmpty }],
         imgUrl: [{ required: true, trigger: 'blur', validator: validateEmpty }],
         sexy: [{ required: true, trigger: 'blur', validator: validateEmpty }],
         jobtime: [{ required: true, trigger: 'blur', validator: validateEmpty }],
         origin: [{ required: true, trigger: 'blur', validator: validateEmpty }],
-        city_arr_id: [{ required: true, trigger: 'blur', validator: validateEmpty }],
-        industry: [{ required: true, trigger: 'blur', validator: validateEmpty }],
-        job: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+        city_arr_id: [{ required: true, trigger: 'change', validator: validateEmpty }],
+        industry: [{ required: true, trigger: 'change', validator: validateEmpty }],
+        job: [{ required: true, trigger: 'change', validator: validateEmpty }],
+        job_name_get: [{ required: true, trigger: 'change', validator: validateEmpty }],
         slelf_evaluation: [{ required: true, trigger: 'blur', validator: validateEmpty }],
         company_name: [{ required: true, trigger: 'blur', validator: validateCompanyNameEmpty }],
-        job_industry: [{ required: true, trigger: 'blur', validator: validateJobIndustryEmpty }],
+        job_industry: [{ required: true, trigger: 'change', validator: validateJobIndustryEmpty }],
         // job_name: [{ required: true, trigger: 'blur', validator: validateEmpty }],
         job_timeList: [{ required: true, trigger: 'blur', validator: validateArray }],
         job_content: [{ required: true, trigger: 'blur', validator: validateArray }],
-        cat_arr_id: [{ required: true, trigger: 'blur', validator: validateArray }],
-        job_typename: [{ required: true, trigger: 'blur', validator: validateArray }],
+        web_site_id: [{ required: true, trigger: 'change', validator: validateEmpty }],
+        cat_arr_id: [{ required: true, trigger: 'change', validator: validateArray }],
+        job_typename: [{ required: true, trigger: 'change', validator: validateArray }],
       },
+      gradeArr: [{
+        value: 1,
+        label: '推荐位'
+      }],
       //1.3富文本编辑器配置
 
       //1.4图片上传
@@ -545,8 +556,9 @@ export default {
             if (res.data) {
               const nodes = res.data.map(item => ({
                 value: item.id,
-                label: item.name,
+                label: item.alias,
                 leaf: level >= 3,
+                disabled: item.type != 3,
                 children: []
               }))
               resolve(nodes)
@@ -571,22 +583,34 @@ export default {
           if (data && data.children && data.children.length !== 0) {
             return resolve(node)
           }
+
           let parentId;
+
           if (data != undefined) {
             parentId = data.value;
           } else {
             parentId = self.creatNews_pid_num.toString();
           }
-          let parames = {
-            'website_id': self.form.web_site_id ? self.form.web_site_id : self.websiteid,
-            'pid': parentId
+          if (self.form.web_site_id) {
+            this.websiteid = self.form.web_site_id;
+          } else {
+
+            this.websiteid = getWebSiteId();
+          }
 
+          let parames = {
+            'type': 5,
+            'website_id': this.websiteid ? this.websiteid : 0,
+            'pid': parentId ? parentId : 0
           }
-          self.$store.dispatch('pool/get_creatNews_nav_son_actions', parames).then(res => {
+          self.$store.dispatch('news/getWebsiteNavList', parames).then(res => {
+
             if (res.data) {
+              console.log('11111111112222222222222222', res.data);
+
               const nodes = res.data.map(item => ({
                 value: item.category_id,
-                label: item.name,
+                label: item.alias,
                 leaf: level >= 3,
                 children: []
               }))
@@ -686,7 +710,7 @@ export default {
     addExperience() {
       const hasEmptyExperience = this.form.job_experience.some(item => {
         // console.log(item, '-------------item--------')
-        if (item.company_name == '' || item.job_industry == '' || item.job_name == '' || item.job_timeList == '' || item.job_content == '' || item.job_typename == '') {
+        if (item.company_name == '' || item.job_industry == '' || item.job_timeList == '' || item.job_content == '' || item.job_typename == '') {
           this.$message.error('请先填写工作经历');
           return true; // 返回 true 表示找到了空的 skill
         }
@@ -708,9 +732,8 @@ export default {
     },
     addEducation() {
       const hasEmptyEducation = this.form.education_experience.some(item => {
-
-        if (item.school_name == '') {
-          this.$message.error('请先填写学校名称');
+        if (item.school_name == '' || item.school_education == '' || item.school_major == '' || item.school_timeList == '' || item.school_experience == '') {
+          this.$message.error('请将教育经历填写完整!');
           return true; // 返回 true 表示找到了空的 skill
         }
       })
@@ -783,7 +806,6 @@ export default {
             this.$message.error('请选择站点名称');
             return;
           }
-
           if (formCopy.jobtime != '' && formCopy.jobtime != null && formCopy.jobtime != undefined) {
             formCopy.jobtime = formatLocalDate(formCopy.jobtime);
           } else {
@@ -798,15 +820,22 @@ export default {
           formCopy.job_timeList.forEach(item => {
             item = formatLocalDate(item);
           });
+          if (formCopy.experience == '') {
+            formCopy.experience = 0;
+          }
           console.log(new Date().getTime(), '-------------------校验结束------------------');
           //判断用户身份
           if (this.creatNews_user_type == 10000) {
             console.log("用户身份为管理员,无需审核直接发布!")
             this.form.status = 2;
+            formCopy.status = 2;
           } else {
             console.log("用户身份为其他用户,提交到审核!")
             this.form.status = 1;
+            formCopy.status = 1;
+            this.form.web_site_id = formCopy.web_site_id;
           }
+          console.log(formCopy, '1111111111111-------------form2--------');
           this.$store.dispatch('news/addJobHunting', formCopy).then(res => {
             if (res.code == 200) {
               //汇报结果
@@ -818,10 +847,17 @@ export default {
               //返回列表页
               this.returnPage()
             } else {
-              this.$message({
-                type: 'error',
-                message: "求职发布失败,请稍后再试!"
-              });
+              if (res.code == 0 && res.message == '您已添加过求职信息') {
+                this.$message({
+                  type: 'error',
+                  message: "您已添加过求职信息!"
+                })
+              } else {
+                this.$message({
+                  type: 'error',
+                  message: "求职发布失败,请稍后再试!"
+                });
+              }
             }
           }).catch(() => {
             this.$message({
@@ -873,11 +909,18 @@ export default {
         id: this.$route.query.id
       };
       this.$store.dispatch('news/getJobHuntingInfo', data).then(res => {
-        console.log(res);
-
+        console.log('res', res);
+        // this.form.web_site_id = res.data.website_id;
+        if (typeof res.data.website_id === 'string') {
+          this.form.web_site_id = Number(res.data.website_id);
+        } else {
+          this.form.web_site_id = res.data.website_id//站点名称
+        }
         this.form.cat_arr_id = Array.isArray(res.data.cat_arr_id) ? res.data.cat_arr_id : JSON.parse(res.data.cat_arr_id);
         this.parentKey += 1; // 触发级联选择器重新加载
         this.loadCascaderPath(this.form.cat_arr_id); // 加载路径数据
+        this.parentKey_2 += 1; // 触发级联选择器重新加载
+        this.loadCascaderPath(this.form.cat_arr_id); // 加载路径数据
 
         this.form.name = res.data.name;
         this.form.sexy = res.data.sexy;
@@ -889,9 +932,30 @@ export default {
         this.form.salary = res.data.salary;
         this.form.self_evaluation = res.data.self_evaluation;
         this.form.job = parseInt(res.data.job);
+        if (res.data.job_level == 0 || res.data.job_level == null || res.data.job_level == '') {
+          this.form.job_level = '';  //推荐等级
+        } else {
+          this.form.job_level = Number(res.data.job_level);  //推荐等级
+        }
+        if (this.form.job) {
+          this.$store.dispatch('news/getPositionList', { zwpid: this.form.job }).then(res => {
+            this.job_name_arr = res.data;
+          })
+          if (parseInt(res.data.job_name_get)) {
+            for (let i = 0; i < this.job_name_arr.length; i++) {
+              if (this.job_name_arr[i].id == parseInt(res.data.job_name_get)) {
+                this.form.job_name_get = this.job_name_arr[i].id;
+              }
+            }
+          }
+        }
         this.form.industry = res.data.industry;
-        this.form.experience = res.data.experience;
-
+        if (res.data.experience == 0) {
+          this.form.experience = '';
+        } else {
+          this.form.experience = res.data.experience;
+        }
+        // this.form.experience = res.data.experience;
 
         this.form.educational = res.data.educationa == null ? "" : parseInt(res.data.educational);
         this.form.politic = res.data.politic;
@@ -903,7 +967,6 @@ export default {
         this.form.content = res.data.content;
         this.form.imgUrl = res.data.imgurl;
         this.imgUrl = res.data.imgurl;
-        this.form.web_site_id = res.data.website_id;
         this.form.jobtime = res.data.jobtime ? new Date(res.data.jobtime) : '';
         this.form.birth = res.data.birth ? new Date(res.data.birth) : '';
         this.form.origin = res.data.origin;
@@ -912,7 +975,7 @@ export default {
         // console.log(this.form.job_experience, '-----------------this.form.job_experience----------------------')
         this.form.education_experience = JSON.parse(res.data.education_experience);
         this.form.skillList = JSON.parse(res.data.skillList);
-        this.form.job_name_get = res.data.job_name_get == null ? '' : parseInt(res.data.job_name_get);
+        this.form.job_name_get = res.data.job_name_get == null || res.data.job_name_get == '' ? '' : parseInt(res.data.job_name_get);
 
       }).catch(() => {
         this.$message({
@@ -986,7 +1049,9 @@ export default {
             formCopy.birth = null;
           }
 
-
+          if (formCopy.experience == '') {
+            formCopy.experience = 0;
+          }
           formCopy.job_timeList.forEach(item => {
             item = formatLocalDate(item);
           });
@@ -995,9 +1060,12 @@ export default {
           if (this.creatNews_user_type == 10000) {
             console.log("用户身份为管理员,无需审核直接发布!")
             this.form.status = 2;
+            formCopy.status = 2;
           } else {
             console.log("用户身份为其他用户,提交到审核!")
             this.form.status = 1;
+            formCopy.status = 1;
+            this.form.web_site_id = formCopy.web_site_id;
           }
           this.$store.dispatch('news/updateJobHunting', formCopy).then(res => {
             //记录结束时间
@@ -1060,8 +1128,14 @@ export default {
       })
     },
     creatNews_nav_pool_change_fun() {      //xx  导航池级
-      let that = this; this.form.web_site_id = this.form.web_site_id[0]
-      that.parentKey_2 += 1; this.$store.dispatch('pool/get_creatNews_nav_son_actions', { pid: String(this.creatNews_pid_num), website_id: String(this.form.web_site_id) }).then(res => {
+      let that = this;
+      this.form.web_site_id = this.form.web_site_id[0]
+      that.parentKey_2 += 1;
+      this.$store.dispatch('pool/get_creatNews_nav_son_actions', {
+        'type': 5,
+        pid: String(this.creatNews_pid_num),
+        website_id: String(this.form.web_site_id)
+      }).then(res => {
         if (res.data.length == 0) {//没有导航池子级
           // alert("没有导航池子级");
           return
@@ -1113,12 +1187,23 @@ export default {
           // console.log(newVal[index].job_industry, '---job_industry---');
           this.form.company_name[index] = item.company_name;
           this.form.job_industry[index] = item.job_industry;
-          this.form.job_name[index] = item.job_name;
-          this.form.job_typename[index] = item.job_typename;
           this.form.department[index] = item.department;
           this.form.job_timeList[index] = item.job_timeList;
           this.form.job_content[index] = item.job_content;
-
+          this.form.job_typename[index] = item.job_typename;
+          if (item.job_typename) {
+            this.$store.dispatch('news/getPositionList', { zwpid: item.job_typename }).then(res => {
+              this.company_jobname_arr = res.data;
+            })
+            if (parseInt(res.data.job_name_get)) {
+              for (let i = 0; i < this.company_jobname_arr.length; i++) {
+                if (this.company_jobname_arr[i].id == parseInt(res.data.job_name_get)) {
+                  this.form.job_name[index] = this.company_jobname_arr[i].id;
+                }
+              }
+            }
+          }
+          this.form.job_name[index] = item.job_name;
 
           // console.log(this.form.job_industry, '-=-------job_industry---------');
           // console.log(this.form.company_name, '-=-------job_name---------');

+ 109 - 79
src/views/news/addNcomplaint.vue

@@ -13,18 +13,18 @@
 
           <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>
+              filterable clearable @change="changeData"></el-cascader>
           </el-form-item>
           <el-form-item label="行政职能:" prop="department_arr_id" class="custom-align-right">
             <el-cascader :key="searchDepartmentKey" v-model="form.department_arr_id" placeholder="请选择行政职能"
-              popper-class="my_cascader" :props="searchDepartmentData" filterable clearable></el-cascader>
+              popper-class="my_cascader" :props="searchDepartmentData" filterable clearable
+              @change="changeData"></el-cascader>
           </el-form-item>
-
           <el-form-item label="行政人员:" prop="re_user_ids" class="custom-align-right">
             <el-select v-model="form.re_user_ids" placeholder="请选择行政人员" multiple filterable clearable
               @visible-change="getDUser">
               <el-option v-for="item in re_user_ids" :key="item.id" :label="item.user_name + '/' + item.nickname"
-                :value="item.id">
+                :value="item.user_id">
               </el-option>
             </el-select>
           </el-form-item>
@@ -46,15 +46,16 @@
           </el-form-item>
 
           <el-form-item label="附件:" class="custom-align-right" prop="">
+            <div v-if="file && (fileType == 'pdf' || fileType == 'word' || fileType == 'zip')" class="chooseImgDiv1">
+
+              <div> {{ file }}
+                <div></div>
+              </div>
+            </div>
             <div class="uploaderBox" @mouseenter="hovering = true" mouseleave="hovering = false">
               <el-upload class="avatar-uploader" action="#" :show-file-list="false" :before-upload="beforeAvatarUpload">
                 <!-- 预览图片 -->
                 <img v-if="file && (fileType == 'jpeg' || fileType == 'png')" :src="file" class="avatar">
-                <div v-if="file && (fileType == 'pdf' || fileType == 'word')" class="chooseImgDiv1">
-                  <div>
-                    <div>{{ file }}</div>
-                  </div>
-                </div>
                 <div v-else class="chooseImgDiv">
                   <div>
                     <img src="@/assets/public/upload/noImage.png">
@@ -62,9 +63,9 @@
                   </div>
                 </div>
               </el-upload>
-              <input type="hidden" v-model="form.imgurl">
-              <span class="photo_tips">支持文件形式pdf,word,jpg,文件最大2M。</span>
-              <div v-if="hovering && imgUrl" class="delete-button" @click="handleDelete">
+              <input type="hidden" v-model="form.file">
+              <span class="photo_tips">支持文件形式pdf,word,jpg,zip文件最大2M。</span>
+              <div v-if="hovering && form.file" class="delete-button" @click="handleDelete">
                 <i class="el-icon-delete"></i>
               </div>
             </div>
@@ -147,6 +148,7 @@ export default {
       searchCascaderKey: 0, //列表缓存key
       website_id: 2,
       file: '',
+      re_user_ids: [],
       userType: 1, //用户类型 1:普通用户,
       pickerOptions: {
         selectableRange: '1900-01-01 to 2100-12-31', // 允许选择的日期范围
@@ -154,7 +156,7 @@ export default {
         //   return time.getTime() < Date.now() - 86400000; // 禁用今天之前的日期
         // },
       },
-
+      searchDepartmentKey: 0, //列表缓存key
       //提交表单
       form: {
         //1.1使用了外链
@@ -179,7 +181,7 @@ export default {
         city_arr_id: [{ required: true, trigger: 'blur', validator: validateArray }],
         department_arr_id: [{ required: true, trigger: 'blur', validator: validateArray }],
         re_user_ids: [{ required: true, trigger: 'blur', validator: validateArray }],
-
+        start: [{ required: true, trigger: 'blur', validator: validateNull }],
         level: [{ required: true, trigger: 'blur', validator: validateEmpty }],
         content: [{ required: true, trigger: 'blur', validator: validateEmpty }],
         address: [{ required: true, trigger: 'blur', validator: validateEmpty }],
@@ -318,9 +320,13 @@ export default {
     };
   },
   methods: {
+    changeData() {
+      this.form.re_user_ids = [];
+      this.getDUser();
+    },
     //获取行政人员
     getDUser() {
-      this.$forceUpdate();
+      // this.form.re_user_ids = [];
       let department_id = this.form.department_arr_id;
       let city_id = this.form.city_arr_id;
       if (department_id.length == 0) {
@@ -337,24 +343,7 @@ export default {
         'department_id': department_id,
         'city_id': city_id,
       }
-      //如果是编辑,就返回数据
-      // if (this.$route.query.id != undefined) {
-      //   let ids = Array.isArray(this.form.re_user_ids) ? this.form.re_user_ids : JSON.parse(this.form.re_user_ids)
-      //   if (ids.length > 0) {
-      //     parames = {
-      //       'ids': ids,
-      //     }
-      //   } else {
-      //     this.$message({
-      //       type: 'info',
-      //       message: '用户数据为空'
-      //     });
-      //     return;
-      //   }
-
-      // }
       this.$store.dispatch('news/getDUser', parames).then(res => {
-        // this.form.re_user_ids = res.data;
         this.re_user_ids = res.data;
         this.$forceUpdate();
       }).catch(() => {
@@ -398,15 +387,10 @@ export default {
       //word  pdf
       const isWord = file.type === 'application/msword' || file.type === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' || file.type === 'application/vnd.ms-word' || file.type === 'doc';
       const isPdf = file.type === 'application/pdf' || file.type === 'application/x-pdf' || file.type === 'application/acrobat' || file.type === 'pdf' || file.type === 'text/x-pdf' || file.type === 'application/x-download' || file.type === 'application/octet-stream';
+      const isZip = file.type === 'application/zip' || file.type === 'application/x-zip-compressed' || file.type === 'application/x-zip' || file.type === 'application/x-compress' || file.type === 'application/x-compressed' || file.type === 'multipart/x-zip' || file.type === 'multipart/x-zip-compressed' || file.type === 'zip';
       const isLt2M = file.size / 1024 / 1024 < 2;
-      console.log(this.imgurl.length, '-0--------------------------------')
-      if (this.imgurl.length > 4) {
-        this.$message.warning('只能上传5张图片');
-        return false;
-      }
-
-      if (!isJPG && !isPNG && !isWord && !isPdf) {
-        this.$message.error('上传文件只能是 JPG、PNG、WORD、PDF 格式!');
+      if (!isJPG && !isPNG && !isWord && !isPdf && !isZip) {
+        this.$message.error('上传文件只能是 JPG、PNG、WORD、PDF 、ZIP 格式!');
         return false;
       }
       if (!isLt2M) {
@@ -414,15 +398,23 @@ export default {
         return false;
       }
 
+
       const formData = new FormData();
       formData.append('file', file);
 
       this.$store.dispatch('pool/uploadFile', formData).then(res => {
+        if (res.code != 200) {
+          this.$message.error("上传失败,请稍后再试!");
+          return false;
+        }
+        this.$message({
+          type: 'success',
+          message: '上传成功!文件类型' + res.data.fileType
+        });
         this.file = res.data.imgUrl;//提供表单地址
+        this.form.file = res.data.imgUrl;
         this.fileType = res.data.fileType;
         this.oldFileName = res.data.oldFileName;
-        this.form.file.push(res.data.imgUrl);//提供表单地址
-        console.log(res.data.imgUrl, '00000')
       })
       // 阻止默认的上传行为
       return false;
@@ -455,6 +447,11 @@ export default {
             this.form.department_arr_id = JSON.stringify(this.form.department_arr_id);
           }
 
+          //re_user_ids
+          if (typeof this.form.re_user_ids == 'object') {
+            this.form.re_user_ids = JSON.stringify(this.form.re_user_ids);
+          }
+
           delete this.form.cat_arr_id;
           delete this.form.catid;
           this.form.file = this.file;
@@ -479,6 +476,7 @@ export default {
                 type: 'error',
                 message: "投诉举报发布失败,请稍后再试!"
               });
+              this.cleatForm();
             }
           })
         }
@@ -497,6 +495,25 @@ export default {
     },
     //1.3 清理表单
     cleatForm() {
+      this.form = {
+        title: '',
+        type: 1,
+        level: 1,
+        city_arr_id: [],
+        city_id: '',
+        content: "",
+        file: "",
+        department_arr_id: [],
+        department_id: '',
+        want: "",
+        type: 1,
+        start: '',
+        re_user_ids: [],
+      };
+      this.file = '';
+      this.imgurl = [];
+      this.re_user_ids = [];
+      this.parentKey += 1; // 触发级联选择器重新加载
     },
     //提交表单 end ------------------------------------------------------------>
 
@@ -543,6 +560,7 @@ export default {
         this.form.want = res.data.want;
         this.form.start = res.data.start ? new Date(res.data.start) : null; // 处理时间格式
         this.form.re_user_ids = Array.isArray(res.data.re_user_ids) ? res.data.re_user_ids : JSON.parse(res.data.re_user_ids);
+        this.getDUser();
       })
     },
     async loadCascaderPath(path) {
@@ -579,44 +597,49 @@ export default {
       //添加要修改的id
       this.form.id = this.editId;
       //先进行验证
-
       this.$refs.form.validate(valid => {
-
         if (valid) {
-          if (this.form.start) {
-            this.form.start = formatLocalDate(this.form.start);
+          // 拷贝对象form,处理另外的,并提交
+          const formData = { ...this.form };
+          if (formData.start) {
+            formData.start = formatLocalDate(formData.start);
           }
-          if (this.form.department_arr_id.length == 0) {
-            this.form.department_id = 0;
+          if (formData.department_arr_id.length == 0) {
+            formData.department_id = 0;
           }
-          if (this.form.city_arr_id.length == 0) {
-            this.form.city_id = 0;
+          if (formData.city_arr_id.length == 0) {
+            formData.city_id = 0;
           }
-          console.log(typeof this.form.city_arr_id, '---=-==-=')
-          if (typeof this.form.city_arr_id == 'object') {
-            this.form.city_id = this.form.city_arr_id.at(-1) || 0;
-            this.form.city_arr_id = JSON.stringify(this.form.city_arr_id);
+          console.log(typeof formData.city_arr_id, '---=-==-=')
+          if (typeof formData.city_arr_id == 'object') {
+            formData.city_id = formData.city_arr_id.at(-1) || 0;
+            formData.city_arr_id = JSON.stringify(formData.city_arr_id);
           }
-          if (typeof this.form.department_arr_id == 'object') {
-            this.form.department_id = this.form.department_arr_id.at(-1) || 0;
-            this.form.department_arr_id = JSON.stringify(this.form.department_arr_id);
+          if (typeof formData.department_arr_id == 'object') {
+            formData.department_id = formData.department_arr_id.at(-1) || 0;
+            formData.department_arr_id = JSON.stringify(formData.department_arr_id);
+          }
+          //re_user_ids
+          if (typeof formData.re_user_ids == 'object') {
+            formData.re_user_ids = JSON.stringify(formData.re_user_ids);
           }
 
-          delete this.form.cat_arr_id;
-          delete this.form.time;
-          delete this.form.catid;
-          this.form.file = this.file;
-          console.log(this.form, 'this.form-----------------')
+          delete formData.cat_arr_id;
+          delete formData.time;
+          delete formData.catid;
+          formData.file = this.file;
+          console.log(formData, 'formData-----------------')
 
           if (this.userType == 10000) {
-            this.form.status = 2
+            formData.status = 2
           } else {
-            this.form.status = 1
+            formData.status = 1
           }
 
-          this.$store.dispatch('news/updateComplaint', this.form).then(res => {
+          this.$store.dispatch('news/updateComplaint', formData).then(res => {
             if (res.code != 200) {
               this.$message.error("修改失败,请稍后再试!");
+              this.getMainData();
             } else {
               //汇报结果
               this.$message({
@@ -636,6 +659,11 @@ export default {
         }
       })
     },
+    handleDelete() {
+      // 删除图片
+      this.file = ''; // 清空图片 URL
+      this.form.file = ''; // 清空表单中的图片 URL
+    },
     //跳转操作 end ------------------------------------------------------------>
     //4.富文本编辑器 start ------------------------------------------------------------>
     //4.1 编辑器点击上传图片
@@ -645,19 +673,19 @@ export default {
 
   },
   watch: {
-    //监听发布范围和行政职能的变化,获取行政人员
-    'form.city_arr_id': function (newVal, oldVal) {
-      console.log(newVal, oldVal, 'newVal, oldVal')
-      if (newVal.length > 0) {
-        this.getDUser();
-      }
-    },
-    'form.department_arr_id': function (newVal, oldVal) {
-      console.log(newVal, oldVal, 'newVal, oldVal')
-      if (newVal.length > 0) {
-        this.getDUser();
-      }
-    },
+    //监听发布范围和行政职能的变化,获取行政人员 ,
+    // 'form.city_arr_id': function (newVal, oldVal) {
+    //   console.log(newVal, oldVal, 'newVal, oldVal', '到这里了-0---------1------------------')
+    //   if (newVal.length > 0) {
+    //     this.getDUser();
+    //   }
+    // },
+    // 'form.department_arr_id': function (newVal, oldVal) {
+    //   console.log(newVal, oldVal, 'newVal, oldVal', '到这里了-0----------2-----------------')
+    //   if (newVal.length > 0) {
+    //     this.getDUser();
+    //   }
+    // },
     '$route'(to, from) {
       console.log(from, '---------------------------------------');
       // 监听路由参数中的 id 变化,若变化则更新页面状态并获取数据
@@ -674,7 +702,8 @@ export default {
       this.editStatus = true;
       this.tableDivTitle = "编辑投诉举报";
       console.log("编辑投诉举报")
-      this.getMainData();
+      this.getMainData()
+
     } else {
       this.editStatus = false;
       console.log("添加投诉举报!")
@@ -686,6 +715,7 @@ export default {
     }
     this.fetchWebsiteOptions();
     this.getUserInfo();
+    console.log(this.isInitialized, '到了这里--------------')
     // this.getDUser();
     //复制内容到富文本 start ------------------------------------------------------------>
     //复制富文本 end ------------------------------------------------------------>

+ 59 - 39
src/views/news/addNotice.vue

@@ -23,8 +23,8 @@
             </el-radio-group>
           </el-form-item>
           <el-form-item label="内容:" prop="content" class="custom-align-right">
-            <el-input v-model="form.content" maxlength="500" autocomplete="off" placeholder="请输入内容" type="textarea"
-              rows="10"></el-input>
+            <!--这里是富文本-->
+            <myEditor ref="myEditor" v-model="form.content"></myEditor>
           </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"
@@ -34,22 +34,24 @@
             <el-cascader :key="searchDepartmentKey" v-model="form.department_arr_id" placeholder="请选择行政职能"
               popper-class="my_cascader" :props="searchDepartmentData" filterable clearable></el-cascader>
           </el-form-item>
-          <el-form-item label="发布日期:" prop="timeList" class="custom-align-right">
+          <el-form-item label="发布日期:" prop="time" class="custom-align-right">
             <el-date-picker v-model="form.time" type="daterange" range-separator="至" start-placeholder="开始日期"
               end-placeholder="结束日期" :picker-options="pickerOptions">
             </el-date-picker>
           </el-form-item>
-
+          <!-- {{ hovering }}{{ file }} -->
           <el-form-item label="附件:" class="custom-align-right" prop="">
+            <div v-if="file && (fileType == 'pdf' || fileType == 'word' || fileType == 'zip')" class="chooseImgDiv1">
+
+              <div> {{ file }}
+                <div></div>
+              </div>
+            </div>
             <div class="uploaderBox" @mouseenter="hovering = true" mouseleave="hovering = false">
               <el-upload class="avatar-uploader" action="#" :show-file-list="false" :before-upload="beforeAvatarUpload">
                 <!-- 预览图片 -->
                 <img v-if="file && (fileType == 'jpeg' || fileType == 'png')" :src="file" class="avatar">
-                <div v-if="file && (fileType == 'pdf' || fileType == 'word')" class="chooseImgDiv1">
-                  <div>
-                    <div>{{ file }}</div>
-                  </div>
-                </div>
+
                 <div v-else class="chooseImgDiv">
                   <div>
                     <img src="@/assets/public/upload/noImage.png">
@@ -57,9 +59,9 @@
                   </div>
                 </div>
               </el-upload>
-              <input type="hidden" v-model="form.imgurl">
-              <span class="photo_tips">支持文件形式pdf,word,jpg,文件最大2M。</span>
-              <div v-if="hovering && imgUrl" class="delete-button" @click="handleDelete">
+              <input type="hidden" v-model="form.file">
+              <span class="photo_tips">支持文件形式pdf,word,jpg,zip文件最大2M。</span>
+              <div v-if="hovering && form.file" class="delete-button" @click="handleDelete">
                 <i class="el-icon-delete"></i>
               </div>
             </div>
@@ -93,9 +95,11 @@ import tableTitle from './components/tableTitle';
 import '@/styles/global.less';
 //格式化时间
 import { formatLocalDate } from '@/utils/public';
-
+//引入富文本编辑器
+import myEditor from '../../components/edit/myEditor.vue';
 export default {
   components: {
+    myEditor,
     tableTitle
   },
   data() {
@@ -110,14 +114,15 @@ export default {
       }
     }
     const validateEmpty = (rule, value, callback) => {
-      console.log(value, '-------------------------------')
-      if (value.length == 0) {
+
+      if (value.length == '') {
         callback(new Error('该项不能为空!'))
       } else {
         callback()
       }
     }
     const validateArray = (rule, value, callback) => {
+      console.log(value, '----------1---------------------')
       if (value.length == 0) {
         callback(new Error('该项不能为空!'))
       } else {
@@ -138,10 +143,9 @@ export default {
       userType: 1, //用户类型 1:普通用户,
       pickerOptions: {
         selectableRange: '1900-01-01 to 2100-12-31', // 允许选择的日期范围
-        // disabledDate(time) {
-        //   return time.getTime() < Date.now() - 86400000; // 禁用今天之前的日期
-        // },
+
       },
+      imgUrl: '', //图片地址
 
       //提交表单
       form: {
@@ -152,12 +156,12 @@ export default {
         city_arr_id: [],//行政区划
         city_id: '',//城市id
         content: "",
-        timelist: "",
         file: "",//文件路径
         department_arr_id: [],//部门id
         department_id: '',//部门id
         is_group: 0,//是否创建群聊:1:是,0:否
         group_name: '',//群聊名称
+        time: [],//发布日期
       },
       //1.2 表单验证规则
       formRules: {
@@ -169,6 +173,7 @@ export default {
         content: [{ required: true, trigger: 'blur', validator: validateEmpty }],
         address: [{ required: true, trigger: 'blur', validator: validateEmpty }],
         is_group: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+        time: [{ required: true, trigger: 'blur', validator: validateArray }],
       },
       //1.3富文本编辑器配置
       showHtml: false, //用于保存源码内容
@@ -231,7 +236,6 @@ export default {
         }
       },
 
-      imgurl: [],
       //获取父级导航池
       parentKey: 0,//获取父级导航
       parentData: {
@@ -337,15 +341,10 @@ export default {
       //word  pdf
       const isWord = file.type === 'application/msword' || file.type === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' || file.type === 'application/vnd.ms-word' || file.type === 'doc';
       const isPdf = file.type === 'application/pdf' || file.type === 'application/x-pdf' || file.type === 'application/acrobat' || file.type === 'pdf' || file.type === 'text/x-pdf' || file.type === 'application/x-download' || file.type === 'application/octet-stream';
+      const isZip = file.type === 'application/zip' || file.type === 'application/x-zip-compressed' || file.type === 'application/x-zip' || file.type === 'application/x-compress' || file.type === 'application/x-compressed' || file.type === 'multipart/x-zip' || file.type === 'multipart/x-zip-compressed' || file.type === 'zip';
       const isLt2M = file.size / 1024 / 1024 < 2;
-      console.log(this.imgurl.length, '-0--------------------------------')
-      if (this.imgurl.length > 4) {
-        this.$message.warning('只能上传5张图片');
-        return false;
-      }
-
-      if (!isJPG && !isPNG && !isWord && !isPdf) {
-        this.$message.error('上传文件只能是 JPG、PNG、WORD、PDF 格式!');
+      if (!isJPG && !isPNG && !isWord && !isPdf && !isZip) {
+        this.$message.error('上传文件只能是 JPG、PNG、WORD、PDF 、ZIP 格式!');
         return false;
       }
       if (!isLt2M) {
@@ -353,15 +352,23 @@ export default {
         return false;
       }
 
+
       const formData = new FormData();
       formData.append('file', file);
 
       this.$store.dispatch('pool/uploadFile', formData).then(res => {
+        if (res.code != 200) {
+          this.$message.error("上传失败,请稍后再试!");
+          return false;
+        }
+        this.$message({
+          type: 'success',
+          message: '上传成功!文件类型' + res.data.fileType
+        });
         this.file = res.data.imgUrl;//提供表单地址
+        this.form.file = res.data.imgUrl;
         this.fileType = res.data.fileType;
         this.oldFileName = res.data.oldFileName;
-        this.form.file.push(res.data.imgUrl);//提供表单地址
-        console.log(res.data.imgUrl, '00000')
       })
       // 阻止默认的上传行为
       return false;
@@ -384,7 +391,6 @@ export default {
           if (this.form.city_arr_id.length == 0) {
             this.form.city_id = 0;
           }
-          console.log(typeof this.form.city_arr_id, '---=-==-=')
           if (typeof this.form.city_arr_id == 'object') {
             this.form.city_id = this.form.city_arr_id.at(-1) || 0;
             this.form.city_arr_id = JSON.stringify(this.form.city_arr_id);
@@ -393,8 +399,6 @@ export default {
             this.form.department_id = this.form.department_arr_id.at(-1) || 0;
             this.form.department_arr_id = JSON.stringify(this.form.department_arr_id);
           }
-          console.log(typeof this.form.time, '---=-==-=')
-          console.log(this.form.time.length, '---=-==-=')
           if (typeof this.form.time == 'object' && this.form.time.length > 0) {
             this.form.start = this.formatDate(this.form.time[0]);
             this.form.end = this.formatDate(this.form.time[1]);
@@ -404,7 +408,6 @@ export default {
           delete this.form.timelist;
           delete this.form.catid;
           this.form.file = this.file;
-          console.log(this.form, 'this.form-----------------')
           if (this.userType == 10000) {
             this.form.status = 2
           } else {
@@ -479,7 +482,10 @@ export default {
         this.form.city_id = res.data.city_id;
         this.form.department_id = res.data.department_id;
         this.form.cat_id = res.data.cat_id;
-        this.form.time = [res.data.start, res.data.end];
+        // res.data.start 可能null,变成''
+        if (res.data.start != null && res.data.end != null) {
+          this.form.time = [res.data.start, res.data.end];
+        }
         this.form.file = res.data.file;
         this.file = res.data.file;
         const filePath = res.data.file;
@@ -538,7 +544,7 @@ export default {
           if (this.form.city_arr_id.length == 0) {
             this.form.city_id = 0;
           }
-          console.log(typeof this.form.city_arr_id, '---=-==-=')
+          console.log(this.form, '---=-==-=')
           if (typeof this.form.city_arr_id == 'object') {
             this.form.city_id = this.form.city_arr_id.at(-1) || 0;
             this.form.city_arr_id = JSON.stringify(this.form.city_arr_id);
@@ -548,7 +554,7 @@ export default {
             this.form.department_arr_id = JSON.stringify(this.form.department_arr_id);
           }
           console.log(typeof this.form.time, '---=-==-=')
-          if (typeof this.form.time == 'object' && this.form.time.length > 0) {
+          if (typeof this.form.time == 'object' && this.form.time.length > 0 && this.form.time[0] != '' && this.form.time[1] != '') {
             this.form.start = this.formatDate(this.form.time[0]);
             this.form.end = this.formatDate(this.form.time[1]);
             delete this.form.time;
@@ -557,8 +563,6 @@ export default {
           delete this.form.timelist;
           delete this.form.catid;
           this.form.file = this.file;
-          console.log(this.form, 'this.form-----------------')
-
           if (this.userType == 10000) {
             this.form.status = 2
           } else {
@@ -583,10 +587,16 @@ export default {
               type: 'info',
               message: '网络错误,请重试!'
             });
+            this.getMainData();
           })
         }
       })
     },
+    handleDelete() {
+      // 删除图片
+      this.file = ''; // 清空图片 URL
+      this.form.file = ''; // 清空表单中的图片 URL
+    },
     //跳转操作 end ------------------------------------------------------------>
     //4.富文本编辑器 start ------------------------------------------------------------>
     //4.1 编辑器点击上传图片
@@ -596,6 +606,8 @@ export default {
 
   },
   watch: {
+
+
     '$route'(to, from) {
       console.log(from, '---------------------------------------');
       // 监听路由参数中的 id 变化,若变化则更新页面状态并获取数据
@@ -650,6 +662,12 @@ export default {
   color: black !important;
 }
 
+.photo_tips {
+  color: #999;
+  font-size: 12px;
+  margin-top: 5px;
+}
+
 .formLabelFloatBox {
   margin-bottom: 10px;
   position: relative;
@@ -669,6 +687,8 @@ export default {
     width: 38px;
     height: 24px;
   }
+
+
 }
 
 //执行v-deep穿透scope选择器 end------------------------------------------------------------>*/</style>

+ 31 - 12
src/views/news/creatNews.vue

@@ -16,8 +16,8 @@
                 :options="creatNews_nav_pool_arr" @change="creatNews_nav_pool_change_fun(form.web_site_id)" filterable
                 clearable></el-cascader>
             </el-form-item>
-            <el-form-item label="栏目名称:" prop="cat_arr_id" class="custom-align-right">
-              <el-cascader :key="parentKey_2" v-model="form.cat_arr_id" placeholder="请选择要绑定的栏目名称" :props="parentData_2"
+            <el-form-item label="展示名称:" prop="cat_arr_id" class="custom-align-right">
+              <el-cascader :key="parentKey_2" v-model="form.cat_arr_id" placeholder="请选择要绑定的展示名称" :props="parentData_2"
                 popper-class="my_cascader" filterable clearable></el-cascader>
             </el-form-item>
             <el-form-item label="外链地址:" prop="linkurl" class="custom-align-right">
@@ -29,9 +29,17 @@
           </div>
           <div v-if="form.islink == false">
             <div v-if="creatNews_user_type != 10000">
-              <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"
-                  popper-class="my_cascader" style="height: 100%;" filterable clearable></el-cascader>
+              <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"
+                    popper-class="my_cascader" 
+                    style="height: 100%;" 
+                    filterable 
+                    clearable>
+                </el-cascader>
               </el-form-item>
             </div>
             <div>
@@ -41,10 +49,17 @@
                     popper-class="my_cascader" :options="creatNews_nav_pool_arr"
                     @change="creatNews_nav_pool_change_fun(form.web_site_id)" filterable clearable></el-cascader>
                 </el-form-item>
-                <el-form-item label="栏目名称:" prop="cat_arr_id" class="custom-align-right">
-                  <el-cascader :key="parentKey_2" v-model="form.cat_arr_id" placeholder="请选择要绑定的栏目名称"
-                    popper-class="my_cascader" style="height: 100%;" :props="parentData_2" filterable
-                    clearable></el-cascader>
+                <el-form-item label="展示名称:" prop="cat_arr_id" class="custom-align-right">
+                    <el-cascader 
+                        :key="parentKey_2" 
+                        v-model="form.cat_arr_id" 
+                        placeholder="请选择要绑定的展示名称"
+                        popper-class="my_cascader" 
+                        style="height: 100%;" 
+                        :props="parentData_2" 
+                        filterable
+                        clearable>
+                    </el-cascader>
                 </el-form-item>
               </div>
               <el-form-item label="行政区划:" class="custom-align-right">
@@ -371,6 +386,7 @@ export default {
           let parentId;
           parentId = level == 0 ? 0 : data.value;
           let parames = {
+            'type': 1,
             'website_id': getWebSiteId(),
             'pid': parentId
           }
@@ -380,7 +396,8 @@ export default {
                 value: item.category_id,
                 label: item.name,
                 leaf: level >= 3,
-                children: []
+                children: [],
+                disabled: item.type != 1
               }))
               resolve(nodes)
             }
@@ -407,6 +424,7 @@ export default {
             self.ifwebsitId = false;
           }
           let parames = {
+            'type': 1,
             'website_id': self.form.web_site_id,
             'pid': parentId
           }
@@ -416,7 +434,8 @@ export default {
                 value: item.category_id,
                 label: item.alias,
                 leaf: level >= 3,
-                children: []
+                children: [],
+                disabled: item.type != 1
               }))
               resolve(nodes)
             }
@@ -998,7 +1017,7 @@ export default {
       let that = this;
       this.form.web_site_id = this.form.web_site_id[0]
       that.parentKey_2 += 1;
-      this.$store.dispatch('pool/get_creatNews_nav_son_actions', { pid: String(this.creatNews_pid_num), website_id: String(this.form.web_site_id) }).then(res => {
+      this.$store.dispatch('pool/get_creatNews_nav_son_actions', { type: 1, pid: String(this.creatNews_pid_num), website_id: String(this.form.web_site_id) }).then(res => {
         if (res.data.length == 0) {//没有导航池子级
           // alert("没有导航池子级");
           return

+ 1 - 1
src/views/news/jobHuntingApplyList.vue

@@ -83,7 +83,7 @@ export default {
   data() {
     return {
       //1.列表和分页相关 start ------------------------------------------------------------>
-      tableDivTitle: "求职信息列表",
+      tableDivTitle: "人才库列表",
       tableData: [],//内容
       editId: 0,//要修改的网站id
       incomes: [],//薪资范围

+ 39 - 2
src/views/news/jobHuntingList.vue

@@ -44,9 +44,12 @@
             </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">
+            <el-table-column fixed="right" label="操作" width="300" header-align="center">
               <template slot-scope="scope">
                 <div class="listBtnBox">
+
+                  <div class="listUpBtn" v-if="type_id == 10000" @click="returnRow(scope.row.id, tableData)"><i
+                      class="el-icon-refresh-right"></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
@@ -79,6 +82,8 @@ import tableTitle from './components/tableTitle';
 //引入公用样式
 import '@/styles/global.less';
 
+import { getUseType } from '@/utils/auth'
+
 export default {
   components: {
     tableTitle,//表格标题
@@ -104,7 +109,38 @@ export default {
     }
   },
   methods: {
-    //1.列表和分页相关 start ------------------------------------------------------------>
+    //1.列表和分页相关 start ------------------------------------------------------------>  
+    returnRow(id) {
+      this.$confirm('确定要撤回吗?', '提示', {
+        confirmButtonText: '撤回',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        //撤回,把文章状态修改为0,重新进行审核
+        this.upRow(id, 1)
+      })
+    },
+    //1.3 修改网站状态
+    upRow(id, status) {
+      let data = {
+        id: id,
+        status: status
+      }
+      this.$store.dispatch('news/updateJobHuntingStatus', data).then(res => {
+        if (res.code == 200) {
+          this.$message({
+            type: 'success',
+            message: '商品状态已修改!'
+          });
+          this.getData();
+        }
+      }).catch(() => {
+        this.$message({
+          type: 'warning',
+          message: '已取消删除'
+        });
+      });
+    },
     //1.1 开始请求列表信息方法
     getData(type) {
       if (type == "search") {
@@ -206,6 +242,7 @@ export default {
   mounted() {
     //1.获得初始数据
     this.getData();
+    this.type_id = getUseType()
   }
 }
 </script>

+ 9 - 3
src/views/news/jobHuntingListApply.vue

@@ -23,7 +23,7 @@
     </div>
     <div class="layerBoxNoBg">
       <div>
-        <el-button type="primary" @click="goCreat">发布求职信息</el-button>
+        <!-- <el-button type="primary" @click="goCreat">发布求职信息</el-button> -->
       </div>
       <div>
         <el-button @click="clearSearchList">重置</el-button>
@@ -172,13 +172,19 @@ export default {
       this.$confirm('将此商品通过审核吗?', '提示', {
         confirmButtonText: '通过',
         cancelButtonText: '拒绝',
+        distinguishCancelAndClose: true,  // 关键配置项,用于区分取消和关闭按钮
         type: 'warning'
       }).then(() => {
         this.upRow(id, 2)
-      }).catch(() => {
+      }).catch((the_reback) => {
         //输入驳回理由
         console.log("驳回")
-        this.examineWindow = true;
+
+        if (the_reback == "cancel") {
+          //输入驳回理由
+          // console.log("驳回" )
+          this.examineWindow = true;
+        }
       })
     },
     upRow(id, status) {

+ 49 - 11
src/views/news/ncomplaintList.vue

@@ -13,8 +13,12 @@
           </el-col>
           <el-col :span="6">
             <div class="searchBox">
-              <div class="searchTitle">投诉类型:</div>
-              <el-input placeholder="请输入投诉类型" autocomplete="off" v-model="getApiData.title" />
+              <div class="searchTitle">行政职能:</div>
+              <el-select v-model="getApiData.department_id" placeholder="请选择..">
+                <el-option v-for="department in department" :key="department.id" :label="department.name"
+                  :value="department.id"></el-option>
+
+              </el-select>
             </div>
           </el-col>
 
@@ -54,7 +58,7 @@
             <el-table-column fixed prop="id" label="编号" width="50"></el-table-column>
             <el-table-column prop="title" label="投诉主题" width="">
             </el-table-column>
-            <el-table-column prop="department_name" label="投诉类型" width="">
+            <el-table-column prop="department_name" label="行政职能" width="">
             </el-table-column>
             <el-table-column prop="cityname" label="接收人" width="">
             </el-table-column>
@@ -74,28 +78,31 @@
             </el-table-column>
             <el-table-column prop="deal" label="处理状态" width="">
               <template slot-scope="scope">
-                <span v-if="scope.row.deal == 1">
+                <span class="  listUpBtn" v-if="scope.row.deal == 1">
                   未处理
                 </span>
-                <span v-if="scope.row.deal == 2">
+                <span class="listDeleteBtn" v-if="scope.row.deal == 2">
                   处理中
                 </span>
-                <span v-if="scope.row.deal == 3">
+                <span class="listEditBtn" v-if="scope.row.deal == 3">
                   已完结
                 </span>
-                <span v-if="scope.row.deal == 4">
+                <span class="listDeleteBtn" v-if="scope.row.deal == 4">
                   不予处理
                 </span>
               </template>
             </el-table-column>
-            <el-table-column prop="start" label="投诉时间" width="">
+            <el-table-column prop="start" label="发生日期" width="">
 
             </el-table-column>
             <el-table-column prop="created_at" label="创建时间" width=""></el-table-column>
 
-            <el-table-column fixed="right" label="操作" width="200" header-align="center">
+            <el-table-column fixed="right" label="操作" width="300" header-align="center">
               <template slot-scope="scope">
                 <div class="listBtnBox">
+                  <div class="listUpBtn" v-if="type_id == 10000" @click="returnRow(scope.row.id, tableData)"><i
+                      class="el-icon-refresh-right"></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
@@ -142,12 +149,14 @@ export default {
       tableDivTitle: "投诉列表",
       tableData: [],//内容
       editId: 0,//要修改的网站id
+      department: [],//部门
       getApiData: {
         name: "",//标题
         category_name: "",//导航池id
         website_name: "",//网站名称
         type_id: "",//发布类型
         status: 2,//发布状态
+        department_id: "",//部门id
 
         page: 1,//当前是第几页
         page_size: 10,//一共多少条
@@ -160,6 +169,18 @@ export default {
   },
   methods: {
     //1.列表和分页相关 start ------------------------------------------------------------>
+    returnRow(id) {
+      this.$confirm('确定要撤回吗?', '提示', {
+        confirmButtonText: '撤回',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        //撤回,把文章状态修改为0,重新进行审核
+        this.upRow(id, 1)
+      })
+    },
+    //1.3 修改网站状态
+
     //1.1 开始请求列表信息方法
     getData(type) {
       if (type == "search") {
@@ -211,9 +232,10 @@ export default {
       }
       this.$store.dispatch('news/updateComplaintStatus', data).then(res => {
         if (res.code == 200) {
+          this.getData();
           this.$message({
             type: 'success',
-            message: '通知状态已修改!'
+            message: '举报状态已修改!'
           });
         }
       }).catch(() => {
@@ -239,6 +261,8 @@ export default {
       this.tableData = [];
       this.getApiData.title = "";
       this.getApiData.level = "";
+      this.getApiData.department_id = "";
+      this.getApiData.deal = "";
 
       this.getApiData.page = 1;
       this.getApiData.pageSize = 10;
@@ -246,7 +270,7 @@ export default {
     },
     //列表和分页相关 end ------------------------------------------------------------>
     //2.添加新闻 start ------------------------------------------------------------>
-    //跳转到通知发布页面
+    //跳转到举报发布页面
     goCreat() {
       this.$router.push({
         path: '/addNcomplaint',
@@ -260,6 +284,19 @@ export default {
         path: '/addNcomplaint',
         query: data
       });
+    },
+
+    getDepartment() {
+      this.$store.dispatch('pool/getDepartment', { 'pid': 0 }).then(res => {
+        if (res.code == 200) {
+          this.department = res.data;
+        }
+      }).catch(() => {
+        this.$message({
+          type: 'warning',
+          message: '网络错误,请重试!'
+        });
+      })
     }
     //添加新闻 end ------------------------------------------------------------>
   },
@@ -267,6 +304,7 @@ export default {
     this.type_id = getUseType()
     //1.获得初始数据
     this.getData();
+    this.getDepartment();
   }
 }
 </script>

+ 36 - 15
src/views/news/ncomplaintListApply.vue

@@ -13,18 +13,21 @@
           </el-col>
           <el-col :span="6">
             <div class="searchBox">
-              <div class="searchTitle">投诉类型:</div>
-              <el-input placeholder="请输入投诉类型" autocomplete="off" v-model="getApiData.title" />
+              <div class="searchTitle">行政职能:</div>
+              <el-select v-model="getApiData.department_id" placeholder="请选择..">
+                <el-option v-for="department in department" :key="department.id" :label="department.name"
+                  :value="department.id"></el-option>
+
+              </el-select>
             </div>
           </el-col>
           <el-col :span="6">
             <div class="searchBox">
-              <div class="searchTitle">处理状态:</div>
-              <el-select v-model="getApiData.deal" placeholder="请处理状态..">
-                <el-option label="未处理" value="1"></el-option>
-                <el-option label="处理中" value="2"></el-option>
-                <el-option label="已完结" value="3"></el-option>
-                <el-option label="不予处理" value="4"></el-option>
+              <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>
             </div>
           </el-col>
@@ -35,7 +38,6 @@
 
     <div class="layerBoxNoBg">
       <div>
-        <el-button type="primary" @click="goCreat">发布投诉举报</el-button>
       </div>
       <div>
         <el-button @click="clearSearchList">重置</el-button>
@@ -73,21 +75,21 @@
             </el-table-column>
             <el-table-column prop="deal" label="处理状态" width="">
               <template slot-scope="scope">
-                <span v-if="scope.row.deal == 1">
+                <span class="  listUpBtn" v-if="scope.row.deal == 1">
                   未处理
                 </span>
-                <span v-if="scope.row.deal == 2">
+                <span class="listDeleteBtn" v-if="scope.row.deal == 2">
                   处理中
                 </span>
-                <span v-if="scope.row.deal == 3">
+                <span class="listEditBtn" v-if="scope.row.deal == 3">
                   已完结
                 </span>
-                <span v-if="scope.row.deal == 4">
+                <span class="listDeleteBtn" v-if="scope.row.deal == 4">
                   不予处理
                 </span>
               </template>
             </el-table-column>
-            <el-table-column prop="start" label="投诉时间" width="">
+            <el-table-column prop="start" label="发生日期" width="">
 
             </el-table-column>
             <el-table-column prop="created_at" label="创建时间" width=""></el-table-column>
@@ -124,7 +126,7 @@
     <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-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>
@@ -164,6 +166,7 @@ export default {
       examineWindow: false,//审核窗口
       //提交驳回
       formLabelWidth: '80px',//表单的长度
+      department: [],//部门
       type_id: 0,//用户身份
       form: {
         reason: ""
@@ -176,6 +179,7 @@ export default {
         website_name: "",//网站名称
         type_id: "",//发布类型
         status1: 1,//审核状态
+        department_id: "",//部门id
         page: 1,//当前是第几页
         page_size: 10,//一共多少条
       },
@@ -315,6 +319,8 @@ export default {
       this.tableData = [];
       this.getApiData.title = "";
       this.getApiData.level = "";
+      this.getApiData.department_id = "";
+      this.getApiData.status = "";
 
       this.getApiData.page = 1;
       this.getApiData.pageSize = 10;
@@ -336,6 +342,20 @@ export default {
         path: '/addNComplaint',
         query: data
       });
+    },
+
+    getDepartment() {
+      this.$store.dispatch('pool/getDepartment', { 'pid': 0 }).then(res => {
+        if (res.code == 200) {
+          console.log(res.data, '---3-')
+          this.department = res.data;
+        }
+      }).catch(() => {
+        this.$message({
+          type: 'warning',
+          message: '网络错误,请重试!'
+        });
+      })
     }
     //添加新闻 end ------------------------------------------------------------>
   },
@@ -343,6 +363,7 @@ export default {
     this.type_id = getUseType()
     //1.获得初始数据
     this.getData();
+    this.getDepartment();
   }
 }
 </script>

+ 37 - 8
src/views/news/ncomplaintListDeal.vue

@@ -13,8 +13,12 @@
           </el-col>
           <el-col :span="6">
             <div class="searchBox">
-              <div class="searchTitle">投诉类型:</div>
-              <el-input placeholder="请输入投诉类型" autocomplete="off" v-model="getApiData.title" />
+              <div class="searchTitle">行政职能:</div>
+              <el-select v-model="getApiData.department_id" placeholder="请选择..">
+                <el-option v-for="department in department" :key="department.id" :label="department.name"
+                  :value="department.id"></el-option>
+
+              </el-select>
             </div>
           </el-col>
           <el-col :span="6">
@@ -35,7 +39,6 @@
 
     <div class="layerBoxNoBg">
       <div>
-        <el-button type="primary" @click="goCreat">发布投诉举报</el-button>
       </div>
       <div>
         <el-button @click="clearSearchList">重置</el-button>
@@ -72,21 +75,21 @@
             </el-table-column>
             <el-table-column prop="deal" label="处理状态" width="">
               <template slot-scope="scope">
-                <span v-if="scope.row.deal == 1">
+                <span class="  listUpBtn" v-if="scope.row.deal == 1">
                   未处理
                 </span>
-                <span v-if="scope.row.deal == 2">
+                <span class="listDeleteBtn" v-if="scope.row.deal == 2">
                   处理中
                 </span>
-                <span v-if="scope.row.deal == 3">
+                <span class="listEditBtn" v-if="scope.row.deal == 3">
                   已完结
                 </span>
-                <span v-if="scope.row.deal == 4">
+                <span class="listDeleteBtn" v-if="scope.row.deal == 4">
                   不予处理
                 </span>
               </template>
             </el-table-column>
-            <el-table-column prop="start" label="投诉时间" width="">
+            <el-table-column prop="start" label="发生日期" width="">
 
             </el-table-column>
             <el-table-column prop="created_at" label="创建时间" width=""></el-table-column>
@@ -165,6 +168,7 @@ export default {
       examineWindow: false,//审核窗口
       //提交驳回
       formLabelWidth: '80px',//表单的长度
+      department: [],//部门
       type_id: 0,//用户身份
       user_id: this.$store.state.user.userid,
       form: {
@@ -179,6 +183,8 @@ export default {
         type_id: "",//发布类型
         status: 2,//审核状态
         deal_user: 1,//处理状态
+
+        department_id: "",//部门id
         page: 1,//当前是第几页
         page_size: 10,//一共多少条
       },
@@ -268,7 +274,13 @@ export default {
             message: '投诉举报处理状态已修改!'
           });
           this.getData();
+        } else {
+          this.$message({
+            message: res.message,
+            type: 'error'
+          })
         }
+
       }).catch(() => {
         this.$message({
           type: 'warning',
@@ -339,6 +351,8 @@ export default {
       this.tableData = [];
       this.getApiData.title = "";
       this.getApiData.level = "";
+      this.getApiData.department_id = "";
+      this.getApiData.deal = "";
 
       this.getApiData.page = 1;
       this.getApiData.pageSize = 10;
@@ -362,6 +376,20 @@ export default {
         query: data
       });
     }
+    ,
+
+    getDepartment() {
+      this.$store.dispatch('pool/getDepartment', { 'pid': 0 }).then(res => {
+        if (res.code == 200) {
+          this.department = res.data;
+        }
+      }).catch(() => {
+        this.$message({
+          type: 'warning',
+          message: '网络错误,请重试!'
+        });
+      })
+    }
     //添加新闻 end ------------------------------------------------------------>
   },
   mounted() {
@@ -369,6 +397,7 @@ export default {
 
     //1.获得初始数据
     this.getData();
+    this.getDepartment();
   }
 }
 </script>

+ 24 - 3
src/views/news/noticeList.vue

@@ -91,9 +91,13 @@
             <el-table-column prop="end" label="到期时间" width=""></el-table-column>
             <el-table-column prop="created_at" label="创建时间" width=""></el-table-column>
 
-            <el-table-column fixed="right" label="操作" width="200" header-align="center">
+            <el-table-column fixed="right" label="操作" width="300" header-align="center">
               <template slot-scope="scope">
                 <div class="listBtnBox">
+
+                  <div class="listUpBtn" v-if="type_id == 10000" @click="returnRow(scope.row.id, tableData)"><i
+                      class="el-icon-refresh-right"></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
@@ -124,7 +128,8 @@
 //表格标题
 import tableTitle from './components/tableTitle';
 //引入公用样式
-import '@/styles/global.less';
+import '@/styles/global.less'; import { getUseType } from '@/utils/auth'
+
 
 export default {
   components: {
@@ -152,6 +157,20 @@ export default {
   },
   methods: {
     //1.列表和分页相关 start ------------------------------------------------------------>
+
+    returnRow(id) {
+      this.$confirm('确定要撤回吗?', '提示', {
+        confirmButtonText: '撤回',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        //撤回,把文章状态修改为0,重新进行审核
+        this.upRow(id, 1);
+        this.getData();
+      })
+    },
+    //1.3 修改网站状态
+
     //1.1 开始请求列表信息方法
     getData(type) {
       if (type == "search") {
@@ -201,8 +220,9 @@ export default {
         id: id,
         status: status
       }
-      this.$store.dispatch('news/upArticleStatus', data).then(res => {
+      this.$store.dispatch('news/updateNoticeStatus', data).then(res => {
         if (res.code == 200) {
+          this.getData();
           this.$message({
             type: 'success',
             message: '通知状态已修改!'
@@ -258,6 +278,7 @@ export default {
   mounted() {
     //1.获得初始数据
     this.getData();
+    this.type_id = getUseType()
   }
 }
 </script>

+ 11 - 25
src/views/news/noticeListApply.vue

@@ -209,39 +209,24 @@ export default {
       //设置待审核的id
       this.editId = id;
       console.log(id)
-      this.$confirm('将此商品通过审核吗?', '提示', {
+      this.$confirm('将此通知通过审核吗?', '提示', {
         confirmButtonText: '通过',
         cancelButtonText: '拒绝',
+        distinguishCancelAndClose: true,  // 关键配置项,用于区分取消和关闭按钮
         type: 'warning'
       }).then(() => {
+
         this.upRow(id, 2)
-      }).catch(() => {
+      }).catch((the_reback) => {
         //输入驳回理由
-        console.log("驳回")
-        this.examineWindow = true;
-      })
-    },
-    upRow(id, status) {
-      let data = {
-        id: id,
-        status: status
-      }
-      this.$store.dispatch('news/updateNoticeStatus', data).then(res => {
-        if (res.code == 200) {
-          this.$message({
-            type: 'success',
-            message: '商品状态已修改!'
-          });
-          this.getData();
+        if (the_reback == "cancel") {
+          //输入驳回理由
+          // console.log("驳回" )
+          this.examineWindow = true;
         }
-      }).catch(() => {
-        this.$message({
-          type: 'warning',
-          message: '已取消删除'
-        });
-      });
-    },
 
+      })
+    },
 
     //1.列表和分页相关 start ------------------------------------------------------------>
     //1.1 开始请求列表信息方法
@@ -295,6 +280,7 @@ export default {
       }
       this.$store.dispatch('news/updateNoticeStatus', data).then(res => {
         if (res.code == 200) {
+          this.getData();
           this.$message({
             type: 'success',
             message: '通知状态已修改!'