Browse Source

修改bug

修改bug
dangyunlong 15 giờ trước cách đây
mục cha
commit
0ce5d9fde8

+ 20 - 2
src/api/news.js

@@ -563,7 +563,9 @@ export function checkJobRecruiting(data) {
         data
     })
 }
-//3.留言
+// 招聘列表 end  fr ------------------------------------->
+
+//3.在线留言
 //3.1 留言列表
 export function getMessageList(params) {
     return request({
@@ -726,4 +728,20 @@ export function upWebCateinfo(data) {
         data
     })
 }
-// 招聘列表 end  fr ------------------------------------->
+// 6.招聘管理
+//6.1 添加招聘信息
+export function addSinglePage(data) {
+    return request({
+        url: '/news/addSinglePage',
+        method: 'post',
+        data
+    })
+}
+//6.2 获得招聘信息列表
+export function getSinglePageList(params) {
+    return request({
+        url: '/news/getSinglePageList',
+        method: 'get',
+        params
+    })
+}

+ 49 - 0
src/router/modules/zx.js

@@ -247,5 +247,54 @@ const zx= [
             }
         ]
     },
+    //求职管理
+    {
+        path: '/jobManagementList',
+        component: Layout,
+        children: [
+            {
+                name: '',
+                path: '',
+                component: () => import('@/views/news/jobManagementList'),
+                meta: {
+                    title: '招聘列表',
+                    hidden: true,
+                    breadcrumb: true
+                }
+            }
+        ]
+    },
+    {
+        path: '/jobManagementAdd',
+        component: Layout,
+        children: [
+            {
+                name: '',
+                path: '',
+                component: () => import('@/views/news/jobManagementAdd'),
+                meta: {
+                    title: '发布招聘',
+                    hidden: true,
+                    breadcrumb: true
+                }
+            }
+        ]
+    },
+    {
+        path: '/jobManagementReview',
+        component: Layout,
+        children: [
+            {
+                name: '',
+                path: '',
+                component: () => import('@/views/news/jobManagementReview'),
+                meta: {
+                    title: '待审核列表',
+                    hidden: true,
+                    breadcrumb: true
+                }
+            }
+        ]
+    }
 ]
 export default zx

+ 28 - 12
src/store/modules/news.js

@@ -1,17 +1,15 @@
 import { addComplaint } from '@/api/complaint'
 import {
-    getArticleList, addArticle, delArticle, getArticleInfo, updateArticle, upArticleStatus, getGoodList, addGood, delGood,
-    getGoodInfo, updateGood, websiteList, getWebsiteNavList, getWebsiteNavPool, getWebsiteNavPoolSite,
-    getSurveyList, getSurveyInfo, getJobHuntingList, getJobHuntingInfo, addJobHunting, delJobHunting, updateJobHunting, getJobHuntingData,
-    getComplaintList,
-    getComplaintInfo, updateComplaint, deleteComplaint, addComplaint1, getMSG, getNoticeList, getNoticeInfo, addNotice, updateNotice, deleteNotice,
-    updateGoodStatus, updateJobHuntingStatus, updateNoticeStatus, updateComplaintStatus, getDUser,
-    noticeList, complaintList, readComplaint, readNotice,
-    getJobRecruitingList, addJobRecruiting, getJobRecruitingInfo, upJobRecruiting, delJobRecruiting, getIndustry, getJobCompany, upJobCompany, getPositionList, getJobRecruitingArea, getJobNature, getExperience, getEducation, getSalary, getLanguage, getLevel, getCompanySize, getCompanyNature, checkJobRecruiting,
-    getBookList, getBookInfo, addBook, deleteBook, updateBook, updateBookStatus, getJobHuntingApply, myApplyList, getArticleCommend,
-    getMessageList, getMessageInfo, upMessageStatus, delMessage, upMessage, addMessage, checkMessageEdit,
-    getResearchTopicList, getResearchTopicInfo, checkResearchTopic, delResearchTopic, upResearchTopic, addResearchTopic, getAllResearcher, 
-    getWebCateinfoList, getWebCateinfoDetail, checkWebCateinfo, delWebCateinfo, addWebCateinfo, upWebCateinfo
+    getArticleList, addArticle, delArticle, getArticleInfo, updateArticle, upArticleStatus, getGoodList, addGood, delGood,getGoodInfo, updateGood, 
+    websiteList, getWebsiteNavList, getWebsiteNavPool, getWebsiteNavPoolSite,getSurveyList, getSurveyInfo, getJobHuntingList, getJobHuntingInfo, 
+    addJobHunting, delJobHunting, updateJobHunting, getJobHuntingData, getComplaintList, getComplaintInfo, updateComplaint, deleteComplaint, addComplaint1, 
+    getMSG, getNoticeList, getNoticeInfo, addNotice, updateNotice, deleteNotice, updateGoodStatus, updateJobHuntingStatus, updateNoticeStatus, 
+    updateComplaintStatus, getDUser, noticeList, complaintList, readComplaint, readNotice, getJobRecruitingList, addJobRecruiting, getJobRecruitingInfo, 
+    upJobRecruiting, delJobRecruiting, getIndustry, getJobCompany, upJobCompany, getPositionList, getJobRecruitingArea, getJobNature, getExperience, getEducation, 
+    getSalary, getLanguage, getLevel, getCompanySize, getCompanyNature, checkJobRecruiting, getBookList, getBookInfo, addBook, deleteBook, updateBook, updateBookStatus, 
+    getJobHuntingApply, myApplyList, getArticleCommend,getMessageList, getMessageInfo, upMessageStatus, delMessage, upMessage, addMessage, checkMessageEdit,
+    getResearchTopicList, getResearchTopicInfo, checkResearchTopic, delResearchTopic, upResearchTopic, addResearchTopic, getAllResearcher, getWebCateinfoList, 
+    getWebCateinfoDetail, checkWebCateinfo, delWebCateinfo, addWebCateinfo, upWebCateinfo, addSinglePage, getSinglePageList,
 } from '@/api/news'
 
 const state = {
@@ -969,6 +967,24 @@ const actions = {
             })
         })
     },
+    addSinglePage({ commit }, data) {
+        return new Promise((resolve, reject) => {
+            addSinglePage(data).then(response => {
+                resolve(response)
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    getSinglePageList({ commit }, data) {
+        return new Promise((resolve, reject) => {
+            getSinglePageList(data).then(response => {
+                resolve(response)
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
 }
 
 export default {

+ 922 - 0
src/views/news/jobManagementAdd.vue

@@ -0,0 +1,922 @@
+<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">
+                    <el-form-item label="招聘标题:" prop="title" class="custom-align-right">
+                        <el-input v-model="form.title" autocomplete="off" placeholder="请输入招聘标题"></el-input>
+                        <!-- <el-checkbox v-model="form.islink">是否使用外链</el-checkbox> -->
+                        <el-checkbox v-model="form.islink" v-if="creatNews_user_type == 10000">是否使用外链</el-checkbox>
+                    </el-form-item>
+                    <div v-if="form.islink == true">
+                        <el-form-item label="站点名称:" prop="website_id" class="custom-align-right">
+                            <el-cascader :key="parentKey" v-model="form.website_id" placeholder="请选择站点名称"
+                                popper-class="my_cascader" :options="creatNews_nav_pool_arr"
+                                @change="creatNews_nav_pool_change_fun(form.website_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" popper-class="my_cascader" filterable clearable></el-cascader>
+                        </el-form-item>
+                        <el-form-item label="外链地址:" prop="linkurl" class="custom-align-right">
+                            <el-input v-model="form.linkurl" autocomplete="off" placeholder="请输入外链地址"></el-input>
+                        </el-form-item>
+                        <el-form-item label="作者:" class="custom-align-right">
+                            <el-input v-model="form.author" autocomplete="off" placeholder="请输入作者"></el-input>
+                        </el-form-item>
+                    </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>
+                        </div>
+                        <div>
+                            <div v-if="creatNews_user_type == 10000">
+                                <el-form-item label="站点名称:" prop="website_id" class="custom-align-right">
+                                    <el-cascader :key="parentKey" v-model="form.website_id" placeholder="请选择站点名称"
+                                        popper-class="my_cascader" :options="creatNews_nav_pool_arr"
+                                        @change="creatNews_nav_pool_change_fun(form.website_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>
+                            </div>
+                            <el-form-item label="缩略图:" class="custom-align-right" prop="">
+                                <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="imgUrl" :src="imgUrl" class="avatar">
+                                        <div v-else class="chooseImgDiv">
+                                            <div>
+                                                <img src="@/assets/public/upload/noImage.png">
+                                                <div>选择图片</div>
+                                            </div>
+                                        </div>
+                                    </el-upload>
+                                    <input type="hidden" v-model="form.imgurl">
+                                    <span class="photo_tips">推荐图片长宽比例为 16:9,大小不能超过 500 K。</span>
+                                    <div v-if="hovering && imgUrl" class="delete-button" @click="handleDelete">
+                                        <i class="el-icon-delete"></i>
+                                    </div>
+                                </div>
+                            </el-form-item>
+                            <el-form-item label="资讯关键词:" prop="" class="custom-align-right">
+                                <template #label>
+                                    <span class="askBox">
+                                        资讯关键词:
+                                        <el-tooltip class="item" effect="dark" content="资讯关键词,如:三农市场网、全国三农、信息一体化。"
+                                            placement="top">
+                                            <i class="el-icon-question"></i>
+                                        </el-tooltip>
+                                    </span>
+                                </template>
+                                <tagInput :initialTags="tags" @tags-updated="updateTags"></tagInput>
+                            </el-form-item>
+                            <el-form-item label="资讯描述:" prop="" class="custom-align-right">
+                                <template #label>
+                                    <span class="askBox">
+                                        资讯描述:
+                                        <el-tooltip class="item" effect="dark"
+                                            content="资讯描述,如:中国三农市场网创建以来,社会效益和会员经济效益贡献。" placement="top">
+                                            <i class="el-icon-question"></i>
+                                        </el-tooltip>
+                                    </span>
+                                </template>
+                                <el-input type="textarea" v-model="form.description" class="custom-textarea"
+                                    placeholder="请输入资讯描述"></el-input>
+                            </el-form-item>
+                            <el-form-item label="作者:" class="custom-align-right">
+                                <el-input v-model="form.author" autocomplete="off" placeholder="请输入作者"></el-input>
+                            </el-form-item>
+                            <el-form-item label="是否为原创:" prop="is_original" class="custom-align-right">
+                                <el-radio-group v-model="form.is_original" @change="changeIsOriginal">
+                                    <el-radio :label="1">是</el-radio>
+                                    <el-radio :label="0">否</el-radio>
+                                </el-radio-group>
+                            </el-form-item>
+                            <div v-if="form.is_original == 0">
+                                <el-form-item label="来源名称:" prop="copyfrom" class="custom-align-right">
+                                    <el-input v-model="form.copyfrom" autocomplete="off"
+                                        placeholder="请输入来源名称"></el-input>
+                                </el-form-item>
+                                <el-form-item label="来源链接:" prop="fromurl" class="custom-align-right">
+                                    <el-input v-model="form.fromurl" autocomplete="off"
+                                        placeholder="请输入来源链接"></el-input>
+                                </el-form-item>
+                                <div class="disclaimerBox">
+                                    <div class="disclaimerTitle">
+                                        <img src="@/assets/public/check.png" />同意《免责声明》:
+                                    </div>
+                                    <div class="disclaimerText">
+                                        本文来源于网络转载,仅供学习交流使用,不构成商业目的。版权归原作者所有,如涉及作品内容、版权和其他问题,请在30日内与本站联系,我们将在第一时间处理。
+                                    </div>
+                                </div>
+                            </div>
+                            <div v-if="form.is_original == 1">
+                                <el-form-item label="来源名称:" prop="copyfrom" class="custom-align-right">
+                                    <el-input v-model="form.copyfrom" autocomplete="off" placeholder="请输入来源名称"
+                                        disabled="disabled"></el-input>
+                                </el-form-item>
+                            </div>
+                            <el-form-item label="招聘内容:" prop="content" class="custom-align-right">
+                                <myEditor ref="myEditor" v-model="form.content"></myEditor>
+                            </el-form-item>
+                            <el-form-item label="手动推荐:" prop="commend_id" class="custom-align-right">
+                                <el-select v-model="form.commend_id" placeholder="请选择手动推荐名称" multiple filterable
+                                    clearable remote :remote-method="remoteMethod" :loading="loading">
+                                    <el-option v-for="item in commend_article" :key="item.id" :label="item.title"
+                                        :value="item.id"></el-option>
+                                </el-select>
+                            </el-form-item>
+                            <el-form-item label="" prop="commend_id" class="custom-align-right">
+                                <draggable v-model="form.commend_id" @end="onDragEnd">
+                                    <el-tag :key="item.id" v-for="item in form.commend_id" closable
+                                        :disable-transitions="false" @close="handleClose(item)"> {{ item }}
+                                    </el-tag>
+                                </draggable>
+                            </el-form-item>
+                            <el-form-item label="创建时间:" class="custom-align-right" v-if="created_at">
+                                <el-input v-model="created_at" autocomplete="off" disabled></el-input>
+                            </el-form-item>
+                            <el-form-item label="发布时间:" class="custom-align-right">
+                                <el-date-picker v-model="form.publiced_at" type="date" placeholder="请选择发布时间"
+                                    :picker-options="pickerOptions" value-format="yyyy-MM-dd">
+                                </el-date-picker>
+                            </el-form-item>
+                            <el-form-item label="附件:" class="custom-align-right" prop="">
+                                <div v-if="fjUrl" class="chooseImgDiv1">
+                                    <div>
+                                        {{this.fjUrl}}
+                                        <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="beforeAvatarUpload1">
+                                        <!-- 预览图片 -->
+                                        <div v-if="fjUrl" class="notchooseImgDiv">
+                                            <img
+                                                src="http://192.168.1.234:19000/pre/image/png/20260107/1767778011971130.png">
+                                            <div class="notchooseImgDivText">已上传文档</div>
+                                        </div>
+                                        <div v-else class="chooseImgDiv">
+                                            <div>
+                                                <img src="@/assets/public/upload/noImage.png">
+                                                <div>选择文档</div>
+                                            </div>
+                                        </div>
+                                    </el-upload>
+                                    <input type="hidden" v-model="form.fujian">
+                                    <span class="photo_tips">支持文件形式pdf,word,jpg,zip文件最大50M。</span>
+                                    <div v-if="hovering && form.fujian" class="delete-button" @click="handleDelete1">
+                                        <i class="el-icon-delete"></i>
+                                    </div>
+                                </div>
+                            </el-form-item>
+                        </div>
+                    </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.vue';
+//引入tag标签组件
+import tagInput from '../../components/InputTag/index.vue';
+//引入公用样式
+import '@/styles/global.less';
+//城市级联选择器
+import CityCascader from './components/CityCascader';
+//引入富文本编辑器
+import myEditor from '../../components/edit/myEditor.vue';
+//引入拖拽组件
+import draggable from 'vuedraggable';
+
+export default {
+    components: {
+        tableTitle,
+        CityCascader,
+        tagInput,
+        myEditor,
+        draggable
+    },
+    data() {
+        //0.全局操作 start ------------------------------------------------------------>
+        //表单验证
+        const validateEmpty = (rule, value, callback) => {
+            if (value == '') {
+                callback(new Error('该项不能为空!'))
+            } else {
+                callback()
+            }
+        }
+        const validateArray = (rule, value, callback) => {
+            if (value.length == 0) {
+                callback(new Error('该项不能为空!'))
+            } else {
+                callback()
+            }
+        }
+        const validateRadio = (rule, value, callback) => {
+            if (value != '1' || value != '0') {
+                callback()
+            } else {
+                callback()
+            }
+        }
+        const validateZero = (rule, value, callback) => {
+            if (value == 0 || value == '' || value == "0") {
+                callback(new Error('该项不能为空!'))
+            } else {
+                callback()
+            }
+        }
+        let self = this;
+        //0.全局操作 end ------------------------------------------------------------>
+        return {
+            pickerOptions: {
+                disabledDate(time) {
+                    return time.getTime() > Date.now();
+                }
+            },
+            website_id: "",
+            loading: false,
+            logoUrl: '',
+            hovering: false, // 鼠标悬浮状态 悬浮时显示删除
+            tags: [],//标签数组
+            websiteid: getWebSiteId() ? getWebSiteId() : 2,
+            creatNews_pid_num: "0",//请求子导航用的pid
+            creatNews_nav_pool_arr: [],//
+            creatNews_add_nav_pool_arr: [],//
+            creatNews_son_website_id_num: "",
+            formLabelWidth: '80px',//表单的长度
+            //1.表单项 start ------------------------------------------------------------>
+            editStatus: false,
+            tableDivTitle: "发布招聘",
+            disclaimer: true,//免责声明
+            //提交表单
+            creatNews_user_type: 0,//判断用户类型'
+            created_at: "",//创建时间
+            commend_article: [],//手动推荐
+            form: {
+                title: '',//资讯标题
+                cat_arr_id: [],//导航池名称
+                website_id: 0,//站点id
+                imgurl: "",//缩略图
+                keyword: "",//关键词
+                description: "",//描述
+                author: "",//作者
+                is_original: 1,//是否为原创 0非 1是
+                copyfrom: "本网",//来源名称
+                fromurl: "",//来源地址
+                islink: 0,//是否使用外链 0非 1是
+                linkurl: "",//外链地址
+                content: "",//内容
+                commend_id: [],//手动推荐文章id
+                fujian: "",//附件
+                publiced_at: null,//发布时间
+            },
+            //1.2 表单验证规则
+            formRules: {
+                //导航池名称不能为空
+                website_id: [{ required: true, trigger: 'blur', validator: validateZero }],
+                //资讯名称不能为空
+                title: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+                //如果使用了外链,外链地址不能为空
+                linkurl: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+                //导航池名称不能为空
+                cat_arr_id: [{ required: true, trigger: 'blur', validator: validateArray }],
+                //内容不能为空
+                content: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+                //作者不能为空
+                //author: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+                //是否原创不能为空
+                is_original: [{ required: true, trigger: 'blur', validator: validateRadio }],
+                //来源名称和地址不能为空
+                copyfrom: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+                fromurl: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+                //缩略图不能为空
+                imgUrl: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+            },
+            //1.4图片上传
+            imgUrl: "",//在页面上显示缩略图
+            fjUrl: "",//在页面上显示附件
+            //获取父级导航池
+            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 (self.ifwebsitId == true) {
+                        console.log("网站选择已经改变!")
+                        parentId = 0;
+                        self.ifwebsitId = false;
+                        self.cat_arr_id = [];
+                    } else {
+                        parentId = level == 0 ? 0 : data.value;
+                        self.ifwebsitId = false;
+                    }
+                    let parames = {
+                        'type': 1,
+                        'website_id': self.form.website_id,
+                        '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)
+                        }
+                    })
+                }
+            },
+            //表单项 end ------------------------------------------------------------>
+        };
+    },
+    watch: {
+        '$route'(to, from) {
+            console.log(from, '---------------------------------------');
+            // 监听路由参数中的 id 变化,若变化则更新页面状态并获取数据
+            if (to.query.id) {
+                this.getMainData();
+            }
+        },
+    },
+    methods: {
+        //1.提交表单 start ------------------------------------------------------------>
+        //1.1 直接上传图片
+        beforeAvatarUpload(file) {
+            const isJPG = file.type === 'image/jpeg';
+            const isPNG = file.type === 'image/png';
+            const isLt2M = file.size / 1024 / 1024 < 2;
+            if (!isJPG && !isPNG) {
+                this.$message.error('上传缩略图只能是 JPG 或 PNG 格式!');
+                return false;
+            }
+            if (!isLt2M) {
+                this.$message.error('上传缩略图大小不能超过 2MB!');
+                return false;
+            }
+            const formData = new FormData();
+            formData.append('file', file);
+            this.$store.dispatch('pool/uploadFile', formData).then(res => {
+                this.imgUrl = res.data.imgUrl;//显示缩略图
+                this.form.imgurl = res.data.imgUrl;//提供表单地址
+                console.log(res.data.imgUrl)
+            }).catch(() => {
+                this.$message({
+                    type: 'info',
+                    message: '网络错误,请重试!'
+                });
+            })
+            // 阻止默认的上传行为
+            return false;
+        },
+        //1.1.1 直接上传文件
+        beforeAvatarUpload1(file) {
+            const isWord = file.type === 'application/msword' || 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' || 'application/vnd.ms-word' || '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 isLt50M = file.size / 1024 / 1024 < 50;
+            console.log('文件类型', file.type)
+            if (!isWord && !isExcel && !isPdf && !isZip) {
+                this.$message.error('上传文件只能是 Word/Excel/Pdf/压缩包 格式!');
+                return false;
+            }
+            if (!isLt50M) {
+                this.$message.error('上传文件大小不能超过 50MB!');
+                return false;
+            }
+            const formData = new FormData();
+            formData.append('file', file);
+
+            this.$store.dispatch('pool/uploadFile', formData).then(res => {
+                this.fjUrl = res.data.imgUrl;//显示缩略图
+                this.form.fujian = res.data.imgUrl;//提供表单地址
+                console.log(res.data.imgUrl)
+            }).catch(() => {
+                this.$message({
+                    type: 'info',
+                    message: '网络错误,请重试!'
+                });
+            })
+            // 阻止默认的上传行为
+            return false;
+        },
+        //1.2 提交表单
+        addToServe() {
+            if (this.form.islink == true) {
+                this.form.islink = 1;
+                this.cleatForm(1)
+            } else {
+                this.form.islink = 0;
+            }
+            console.log(this.form)
+            this.$refs.form.validate(valid => {
+                if (valid) {
+                    const formData = { ...this.form };
+                    if (formData.commend_id != undefined && formData.commend_id.length > 0) {
+                        formData.commend_id = JSON.stringify(formData.commend_id); // 提取推荐ID
+                    }
+                    if (formData.commend_id.length == 0) {
+                        formData.commend_id = '[]';
+                    }
+                    this.$store.dispatch('news/addSinglePage', formData).then(res => {//
+                        if (res.code == 200) {
+                            this.$message({
+                                type: 'success',
+                                message: "招聘信息发布成功!"
+                            });
+                            
+                            
+                            //this.returnPage()
+                        } else {
+                            this.$message({
+                                type: 'error',
+                                message: res.message
+                            });
+                        }
+                    }).catch(() => {
+                        this.$message({
+                            type: 'info',
+                            message: '网络错误,请重试!'
+                        });
+                    })
+                }
+            })
+        },
+        //1.3 清理表单
+        cleatForm(type) {
+            if (type == 1) {
+                //使用了外链,进行部分表单清理
+                this.form.imgurl = "";
+                this.form.keyword = "";
+                this.form.description = "";
+                this.form.content = "";
+                this.form.is_original = "";
+                this.form.copyfrom = "";
+                this.form.fromurl = "";
+            }
+            if (type == 2) {
+                //完全清理表单
+                this.form.title = "";
+                this.form.islink = "";
+                this.form.linkurl = "";
+                this.form.cat_arr_id = "";
+                this.form.imgurl = "";
+                this.form.keyword = "";
+                this.form.description = "";
+                this.form.content = "";
+                this.form.author = "";
+                this.form.is_original = "";
+                this.form.copyfrom = "";
+                this.form.fromurl = "";
+                this.form.fujian = "";//清空附件 URL
+            }
+        },
+        //1.5 删除图片
+        handleDelete() {
+            // 删除图片
+            this.imgUrl = ''; // 清空图片 URL
+            this.form.imgurl = ''; // 清空表单中的图片 URL
+        },
+        //1.5 删除附件
+        handleDelete1() {
+            // 删除附件
+            this.fjUrl = ''; // 清空附件 URL
+            this.form.fujian = ''; // 清空表单中的附件 URL
+        },
+        //提交表单 end ------------------------------------------------------------>
+
+        //2.跳转操作 start ------------------------------------------------------------>
+        returnPage() {
+            if (this.$route.query.to == "examine") {
+                this.$router.push({
+                    path: '/examine',
+                });
+            } else {
+                this.$router.push({
+                    path: '/articleList',
+                });
+            }
+        },
+        //跳转操作 end ------------------------------------------------------------>
+        //3.回显操作 ------------------------------------------------------------>
+        //3.1回显数据
+        getMainData() {
+            let data = {
+                id: this.$route.query.id
+            };
+            this.$store.dispatch('news/getArticleInfo', data).then(res => {
+                this.form.title = res.data.title;
+                this.fjUrl = res.data.fujian; // 回显附件 URL
+                //判断是否使用了外链
+                if (res.data.islink == 1) {
+                    this.form.islink = true;
+                } else {
+                    this.form.islink = false;
+                }
+                //不是原创的时候显示来源
+                if (res.data.is_original == 1) {
+                    this.form.is_original = 1;
+                    this.form.copyfrom = "本网";
+                } else {
+                    this.form.is_original = 0;
+                    this.$nextTick(() => {
+                        this.form.is_original = 0;
+                        console.log('is_original:', this.form.is_original); // 确保值已更新
+                    });
+                    this.form.copyfrom = res.data.copyfrom;
+                    this.form.linkurl = res.data.linkurl;
+                }
+                //回显站点名称
+                //判断website_id是否为字符串,如果是转换为数字
+                if (typeof res.data.website_id === 'string') {
+                    this.form.website_id = Number(res.data.website_id);
+                } else {
+                    this.form.website_id = res.data.website_id//站点名称
+                }
+                this.created_at = res.data.created_at;
+                this.form.cat_arr_id = Array.isArray(res.data.cat_arr_id) ? res.data.cat_arr_id : JSON.parse(res.data.cat_arr_id);
+                console.log(this.form.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.imgurl = res.data.imgurl;
+                this.imgUrl = res.data.imgurl;
+                this.form.keyword = res.data.keyword;
+                this.tags = res.data.keyword ? res.data.keyword.split(",") : [];
+                this.form.description = res.data.description;
+                //回显编辑器内容
+                this.$nextTick(() => {
+                    this.form.content = res.data.content;
+                });
+                this.form.author = res.data.author;
+                this.form.is_original = res.data.is_original;
+                this.form.copyfrom = res.data.copyfrom;
+                this.form.fromurl = res.data.fromurl;
+                this.form.commend_id = JSON.parse(res.data.commend_id);
+                this.form.fujian = res.data.fujian;
+                this.form.publiced_at = res.data.publiced_at;
+            })
+        },
+        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() {
+
+            if (this.form.islink == 1) {
+                this.cleatForm(1)
+            }
+            //添加要修改的id
+            this.form.id = this.editId;
+
+            //先进行验证
+            this.$refs.form.validate(valid => {
+                if (valid) {
+                    const formData = { ...this.form };
+                    if (formData.commend_id != undefined && formData.commend_id.length > 0) {
+                        formData.commend_id = JSON.stringify(formData.commend_id); // 提取推荐ID
+                    }
+                    if (formData.commend_id.length == 0) {
+                        formData.commend_id = '[]';
+                    }
+                    //console.log(this.form)
+                    this.$store.dispatch('news/updateArticle', formData).then(res => {
+                        if (res.code != 200) {
+
+
+                        } else {
+                            
+                        }
+                    }).catch(() => {
+                        this.$message({
+                            type: 'info',
+                            message: '网络错误,请重试!'
+                        });
+                    })
+                }
+            })
+        },
+        //1.4 修改是否原创
+        changeIsOriginal() {
+            if (this.form.is_original == 1) {
+                this.form.copyfrom = "本网";
+            } else {
+                this.form.copyfrom = "";
+                this.form.fromurl = "";
+            }
+        },
+        //跳转操作 end ------------------------------------------------------------>
+        //5.站点选择 曹国庆 start ------------------------------------------------------------>
+        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: '网络错误,请重试!'
+                });
+            })
+        },
+        get_creatNews_nav_pool_arr_fun() {//
+            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() {
+            //开启导航池级联选择器
+            this.ifwebsitId = true;
+            console.log(this.ifwebsitId)
+            //  导航池级
+            let that = this;
+            this.form.website_id = this.form.website_id[0]
+            that.parentKey_2 += 1;
+            this.$store.dispatch('pool/get_creatNews_nav_son_actions', { type: 1, pid: String(this.creatNews_pid_num), website_id: String(this.form.website_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: '网络错误,请重试!'
+                });
+            })
+        },
+        updateTags(newTags) {
+            // this.foem.seo_keywords = newTags;
+            this.tags = newTags;
+            this.form.keyword = newTags.join(',');
+        },
+        getNews() {
+            this.$store.dispatch('news/getArticleCommend', {
+                'page': 1,
+                'pageSize': 20,
+                'website_id': this.website_id,
+            }).then(res => {
+                console.log("手动推荐", res)
+                let data = [];
+                for (let item of res.data.rows) {
+                    data.push(item)
+                }
+                this.commend_article = data;
+            }).catch(() => {
+                // this.$message({
+                //   type: 'info',
+                //   message: '网络错误,请重试!'
+                // });
+            })
+        },
+        // 远程搜索方法
+        remoteMethod(query) {
+            console.log("query", query);
+            const artical_params = {
+                page: 1,
+                pageSize: 20,
+                website_id: this.website_id,
+            }
+            if (query !== '') {
+                this.loading = true;
+                //如果全是数字,就id,其他就是搜title
+                let reg = /^[0-9]+$/;
+                let isNum = reg.test(query);
+                if (isNum) {
+                    delete artical_params.title;
+                    artical_params.id = query;
+                } else {
+                    delete artical_params.id;
+                    artical_params.title = String(query);
+                }
+                this.$store.dispatch('news/getArticleCommend', artical_params).then(res => {
+                    this.loading = false;
+                    let data = [];
+                    for (let item of res.data.rows) {
+                        data.push(item);
+                    }
+                    this.commend_article = data;
+                }).catch(() => {
+                    this.loading = false;
+                    // this.$message({
+                    //   type: 'info',
+                    //   message: '网络错误,请重试!'
+                    // });
+                });
+            } else {
+                this.getNews()
+            }
+        },
+        //5.站点选择 曹国庆 end ------------------------------------------------------------>
+        onDragEnd() {
+            // 处理拖拽结束事件(如果需要)
+            console.log('拖拽结束', this.commend_article);
+        },
+        handleClose(item) {
+            const index = this.form.commend_id.indexOf(item);
+            if (index > -1) {
+                this.form.commend_id.splice(index, 1);
+            }
+        },
+    },
+    mounted() {
+        console.log("mounted")
+        console.log(this.commend_article, '-------news-------');
+        this.creatNews_user_type = getUseType()
+        this.websiteid = getWebSiteId()
+        //1.获得站点标识
+        //this.get_creatNews_form_id_fun()
+        this.get_creatNews_nav_pool_arr_fun()
+        //2.判断是新建还是回显
+        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("添加新闻!")
+        }
+    },
+    watch: {
+        'form.website_id': {
+            handler(newVal, oldVal) {
+                this.website_id = this.form.website_id ? newVal : this.websiteid
+                this.getNews()
+                console.log('websiteid', this.website_id);
+            },
+            immediate: true,
+            deep: true
+        }
+    },
+};
+</script>
+
+<style scoped lang="less">
+//执行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-popper {
+    height: 500px;
+}
+::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: 12px;
+    color: #999;
+}
+.notchooseImgDiv img {
+    width: 120px;
+    height: 120px;
+    margin-left: 11px;
+}
+.notchooseImgDiv .notchooseImgDivText {
+    font-size: 14px;
+    margin-top: -25px;
+}
+// 执行v-deep穿透scope选择器 end------------------------------------------------------------>
+</style>

+ 305 - 0
src/views/news/jobManagementList.vue

@@ -0,0 +1,305 @@
+<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.title" />
+                        </div>
+                    </el-col>
+                    <el-col :span="15">
+                        <div class="tag_webSite_head_btn_box">
+                            <div class="searchTitle"><span></span></div>
+                            <el-button type="primary" @click="getData('search')">搜索</el-button>
+                            <el-button type="info" @click="clearSearchList">重置</el-button>
+                        </div>
+                    </el-col>
+                </el-row>
+            </div>
+        </div>
+        <div class="layerBoxNoBg">
+            <div>
+                <el-button type="primary" @click="gotoCreat">发布招聘</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="title" label="招聘标题" width="400"></el-table-column>
+                        <el-table-column prop="nickname" label="栏目名称" ></el-table-column>
+                        <el-table-column prop="updated_at" label="修改时间" ></el-table-column>
+                        <el-table-column prop="status" label="状态" width="100">
+                            <template slot-scope="scope">
+                                <span v-if="scope.row.status == 0" class="status0">待审核</span>
+                                <span v-if="scope.row.status == 1" class="status1">已通过</span>
+                                <span v-if="scope.row.status == 2" class="status2">已拒绝</span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="txry_users" label="发布人" ></el-table-column>
+                        <el-table-column fixed="right" label="操作" width="350" header-align="center">
+                            <template slot-scope="scope">
+                                <div class="listBtnBox">
+                                    <div class="listDeleteBtn" @click="deleteData(scope.row.id)">
+                                        <i class="el-icon-delete"></i>删除
+                                    </div>
+                                    <div class="listUpBtn" @click="upData(scope.row.id)">
+                                        <i class="el-icon-refresh-left"></i>撤回 
+                                    </div>
+                                    <!--非管理员且该留言已通过申请,则无法再次编辑-->
+                                    <div class="listEditBtn" @click="getDataMain(scope.row.id)" v-if="scope.row.is_update == 0">
+                                        <i class="el-icon-view"></i>查看
+                                    </div>
+                                    <div class="listEditBtn" @click="gotoEdit(scope.row.id)" v-if="scope.row.is_update == 1">
+                                        <i class="el-icon-edit-outline"></i>编辑
+                                    </div>
+                                </div>
+                            </template>
+                        </el-table-column>
+                    </el-table>
+                </template>
+            </el-row>
+        </div>
+        <div class="alignBox">
+            <el-row>
+                <el-col :span="24">
+                    <el-pagination 
+                        :current-page="getApiData.page" @size-change="handleSizeChange"
+                        @current-change="handleCurrentChange" 
+                        :page-size="10" 
+                        layout="total, prev, pager, next, jumper"
+                        :total="allCount">
+                    </el-pagination>
+                </el-col>
+            </el-row>
+        </div>
+        <!--表格内容 end------------------------------------------------------------>
+    </div>
+</template>
+
+<script>
+//获得用户身份
+import { getWebSiteId, getUseType } from '@/utils/auth'
+//表格标题
+import tableTitle from './components/tableTitle';
+//引入公用样式
+import '@/styles/global.less';
+
+export default {
+    components: {
+        tableTitle,//表格标题
+    },
+    data() {
+        //0.全局操作 start ------------------------------------------------------------>
+        let self = this;
+        //0.全局操作 end ------------------------------------------------------------>
+        return {
+            //1.列表和分页相关 start ------------------------------------------------------------>
+            tableDivTitle: "选题列表",
+            tableData: [],//内容
+            getApiData: {
+                //website_id:0,//站点id
+                is_master: 1,//是否审核列表 0:全部 1:已审核;2:已拒绝;3:未审核;
+                title: "",//留言标题
+                page: 1,//当前是第几页
+                page_size: 10,//一共多少条
+                due_time:"",//结束时间
+            },
+            allCount: 0,//总条数
+            //分页相关 end ------------------------------------------------------------>
+            
+            //用户身份
+            creatNews_user_type:0
+        }
+    },
+    methods: {
+        //1.列表和分页相关 start ------------------------------------------------------------>
+        //1.1 开始请求列表信息方法
+        getData(type) {
+            //如果是搜索,重新加载第一页==搜索
+            if (type == "search") {
+                this.getApiData.page = 1;
+            }
+            this.$store.dispatch('news/getSinglePageList', this.getApiData).then(res => {
+                //列表
+                this.tableData = res.data.rows;
+                //页数
+                this.allCount = res.data.count;
+            }).catch(() => {
+                this.$message({
+                    type: 'info',
+                    message: '网络错误,请重试!'
+                });
+            })
+        },
+        //1.2 删除内容
+        deleteData(id) {
+            this.$confirm('此操作将永久删除该条数据, 是否继续?', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                console.log("当前删除:" + id)
+                this.$store.dispatch('news/delResearchTopic', {id:id}).then(res => {
+                    if(res.code == 200) {
+                        this.$message({
+                            type: 'success',
+                            message: '删除成功!'
+                        });
+                    } else {
+                        this.$message.error(res.message);
+                    }
+                    this.getData();
+                })
+            }).catch(() => {
+                this.$message({
+                    type: 'warning',
+                    message: '已取消删除操作!'
+                });
+            });
+        },
+        //1.3 撤回消息
+        upData(id) {
+            //拒绝消息
+            this.$confirm('此操作将撤回该条数据至待审核列表, 是否继续?', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                console.log("当前撤回:" + id)
+                let data = {
+                    id:id,
+                    status:0,
+                    reason:""
+                }
+                this.$store.dispatch('news/checkResearchTopic', data).then(res => {
+                    if(res.code == 200) {
+                        this.$message({
+                            type: 'success',
+                            message: '撤回成功!'
+                        });
+                    } else {
+                        this.$message.error(res.message);
+                    }
+                    this.getData();
+                })
+            }).catch(() => {
+                this.$message({
+                    type: 'warning',
+                    message: '已取消撤回操作!'
+                });
+            });
+            
+        },
+        //1.4 列表内容分页
+        handleSizeChange(val) {
+            this.getApiData.page = val;
+            this.getData();
+        },
+        //1.5 点击分页
+        handleCurrentChange(val) {
+            this.getApiData.page = val;
+            this.getData();
+        },
+        //1.6 重置按钮
+        clearSearchList() {
+            this.getApiData.is_master = 1;
+            this.getApiData.title = "";
+            this.getApiData.page = 1;
+            this.getApiData.page_size = 10;
+            this.getData();
+        },
+        //列表和分页相关 end ------------------------------------------------------------>
+        //跳转到添加留言页面 start ------------------------------------------------------------>
+        //创建
+        gotoCreat() {
+            this.$router.push({
+                path: '/jobManagementAdd',
+                query: {
+                    type: 'add',
+                    page: 'topicList'
+                }
+            });
+        },
+        //编辑
+        gotoEdit(id) {
+            this.$router.push({
+                path: '/jobManagementAdd',
+                query: {
+                    id: id,
+                    type: 'edit',
+                    page: 'topicList'
+                }
+            });
+        },
+        //查看
+        getDataMain(id) {
+            this.$router.push({
+                path: '/jobManagementAdd',
+                query: {
+                    id: id,
+                    type: 'view',
+                    page: 'topicList'
+                }
+            });
+        },
+        //跳转到添加留言页面 end ------------------------------------------------------------>
+    },
+    mounted() {
+        //获得第一页
+        this.getData();
+        //1.获得用户身份
+        this.creatNews_user_type = getUseType()
+        //2.获得站点id
+        this.getApiData.website_id = getWebSiteId();
+    },
+}
+</script>
+
+<style scoped lang="less">
+.status0 {
+    color: #5570F1;
+}
+.status1 {
+    color: #519C66;
+}
+.status2 {
+    color: #CC5F5F;
+}
+//执行v-deep穿透scope选择器 start------------------------------------------------------------>*/
+::v-deep .custom-form-item>.el-form-item__label {
+    line-height: 140px !important;
+}
+::v-deep .custom-textarea .el-textarea__inner {
+    resize: none;
+    /* 禁止用户拖拽调整大小 */
+}
+::v-deep .custom-align-right .el-form-item__label {
+    text-align: right;
+    /* 设置标签文字右对齐 */
+}
+//执行v-deep穿透scope选择器 end------------------------------------------------------------>*/
+.tag_webSite_head_btn_box {
+    overflow: hidden;
+}
+.tag_webSite_head_btn_box .searchTitle {
+    opacity: 0;
+    span {
+        display: block;
+        height: 16px;
+    }
+}
+.tag_webSite_head_btn_box button {
+    float: right;
+}
+.tag_webSite_head_btn_box button:nth-of-type(1) {
+    margin-left: 10px;
+}
+</style>

+ 351 - 0
src/views/news/jobManagementReview.vue

@@ -0,0 +1,351 @@
+<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.title" />
+                        </div>
+                    </el-col>
+                    <el-col :span="6">
+                        <div class="searchBox">
+                            <div class="searchTitle">审核状态:</div>
+                            <el-select v-model="getApiData.is_master" placeholder="请选择..">
+                                <el-option label="全部" value="0"></el-option>
+                                <el-option label="已拒绝" value="2"></el-option>
+                                <el-option label="待审核" value="3"></el-option>
+                            </el-select>
+                        </div>
+                    </el-col>
+                    <el-col :span="11">
+                        <div class="tag_webSite_head_btn_box">
+                            <div class="searchTitle"><span></span></div>
+                            <el-button type="primary" @click="getData('search')">搜索</el-button>
+                            <el-button type="info" @click="clearSearchList">重置</el-button>
+                        </div>
+                    </el-col>
+                </el-row>
+            </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="title" label="招聘标题" width="500"></el-table-column>
+                        <el-table-column prop="txry_users" label="栏目名称" ></el-table-column>
+                        <el-table-column prop="updated_at" label="修改时间" ></el-table-column>
+                        <el-table-column prop="status" label="状态" width="100">
+                            <template slot-scope="scope">
+                                <span v-if="scope.row.status == 0" class="status0">待审核</span>
+                                <span v-if="scope.row.status == 1" class="status1">已通过</span>
+                                <span v-if="scope.row.status == 2" class="status2">已拒绝</span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="txry_users" label="同行人" ></el-table-column>
+                        <el-table-column fixed="right" label="操作" width="350" header-align="center">
+                            <template slot-scope="scope">
+                                <div class="listBtnBox">
+                                    <div class="listMainBtn" @click="editData(scope.row.id)" v-if="creatNews_user_type==10000">
+                                        <i class="el-icon-check"></i>审核
+                                    </div>
+                                    <div class="listDeleteBtn" @click="deleteData(scope.row.id)">
+                                        <i class="el-icon-delete"></i>删除
+                                    </div>
+                                    <div class="listEditBtn" @click="gotoEdit(scope.row.id)" v-if="scope.row.is_update == 1">
+                                        <i class="el-icon-edit-outline"></i>编辑
+                                    </div>
+                                    <div class="listEditBtn" @click="getDataMain(scope.row.id)" v-else>
+                                        <i class="el-icon-view"></i>查看
+                                    </div>
+                                </div>
+                            </template>
+                        </el-table-column>
+                    </el-table>
+                </template>
+            </el-row>
+        </div>
+        <div class="alignBox">
+            <el-row>
+                <el-col :span="24">
+                    <el-pagination 
+                        :current-page="getApiData.page" 
+                        @size-change="handleSizeChange"
+                        @current-change="handleCurrentChange" 
+                        :page-size="10" 
+                        layout="total, prev, pager, next, jumper"
+                        :total="allCount">
+                    </el-pagination>
+                </el-col>
+            </el-row>
+        </div>
+        <!--表格内容 end------------------------------------------------------------>
+    </div>
+</template>
+
+<script>
+//获得用户身份
+import { getWebSiteId, getUseType } from '@/utils/auth'
+//表格标题
+import tableTitle from './components/tableTitle';
+//引入公用样式
+import '@/styles/global.less';
+
+// function formatDate(date) {
+//   if (!date) return '';
+//   const d = new Date(date);
+//   const year = d.getFullYear();
+//   const month = String(d.getMonth() + 1).padStart(2, '0');
+//   const day = String(d.getDate()).padStart(2, '0');
+//   return `${year}-${month}-${day}`;
+// }
+
+export default {
+    components: {
+        tableTitle,//表格标题
+    },
+    data() {
+        //0.全局操作 start ------------------------------------------------------------>
+        let self = this;
+        //0.全局操作 end ------------------------------------------------------------>
+        return {
+            userid:0,//用户id
+            creatNews_user_type:0,//用户身份
+            //1.列表和分页相关 start ------------------------------------------------------------>
+            tableDivTitle: "待审核列表",
+            tableData: [],//内容
+            getApiData: {
+                //website_id: 0,
+                is_master: "0",//是否审核列表 0:全部 1:已审核;2:已拒绝;3:未审核;
+                title: "",//留言标题
+                page: 1,//当前是第几页
+                page_size: 10,//一共多少条
+                //due_time:"",//结束时间
+            },
+            allCount: 0,//总条数
+            //分页相关 end ------------------------------------------------------------>
+        }
+    },
+
+    methods: {
+        //1.列表和分页相关 start ------------------------------------------------------------>
+        //1.1 开始请求列表信息方法
+        getData(type) {
+            //如果是搜索,重新加载第一页==搜索
+            if (type == "search") {
+                this.getApiData.page = 1;
+            }
+            //格式化日期
+            // if(this.getApiData.due_time!=''){
+            //     this.getApiData.due_time = formatDate(this.getApiData.due_time);
+            // }
+            this.$store.dispatch('news/getResearchTopicList', this.getApiData).then(res => {
+                //列表
+                this.tableData = res.data.rows;
+                //页数
+                this.allCount = res.data.count;
+            }).catch(() => {
+                this.$message({
+                    type: 'info',
+                    message: '网络错误,请重试!'
+                });
+            })
+        },
+        //1.2 删除内容
+        deleteData(id) {
+            this.$confirm('此操作将永久删除该条数据, 是否继续?', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                console.log("当前删除:" + id)
+                this.$store.dispatch('news/delResearchTopic', {id:id}).then(res => {
+                    if(res.code == 200) {
+                        this.$message({
+                            type: 'success',
+                            message: '删除成功!'
+                        });
+                    } else {
+                        this.$message.error(res.message);
+                    }
+                    this.getData();
+                })
+            }).catch(() => {
+                this.$message({
+                    type: 'warning',
+                    message: '已取消删除'
+                });
+            });
+        },
+        //审核
+        editData(id){
+            this.$confirm('允许该留言通过审核吗?', '提示', {
+                showCancelButton: true,
+                showClose: false,
+                closeOnClickModal: false,
+                closeOnPressEscape: false,
+                confirmButtonText: '审核',
+                cancelButtonText: '拒绝',
+                confirmButtonClass: 'el-button--primary',
+                cancelButtonClass: 'el-button--danger',
+                type: 'warning'
+            }).then(() => {
+                let data = {
+                    id:id,
+                    status:1,
+                    reason:""
+                }
+                this.$store.dispatch('news/checkResearchTopic', data).then(res => {
+                    if(res.code == 200) {
+                        this.$message({
+                            type: 'success',
+                            message: '审核已通过!'
+                        });
+                    } else {
+                        this.$message.error(res.message);
+                    }
+                    this.getData();
+                })
+            }).catch(() => {
+                // this.$message({
+                //     type: 'warning',
+                //     message: '已取消操作'
+                // });
+                this.refuseData();
+            });
+        },
+        refuseData(id){
+            this.$prompt('请输入拒绝理由', '拒绝', {
+                confirmButtonText: '拒绝',
+                cancelButtonText: '取消',
+                inputPlaceholder: '请输入拒绝理由',
+                inputPattern: /\S+/, // 匹配非空内容(至少一个非空白字符)
+                inputErrorMessage: '拒绝理由不能为空',
+                confirmButtonClass: 'el-button--danger',
+                type: 'warning'
+            }).then(({ value }) => {
+                let data = {
+                    id:id,
+                    status:2,
+                    reason:value
+                }
+                this.$store.dispatch('news/checkResearchTopic', data).then(res => {
+                    if(res.code == 200) {
+                        this.$message({
+                            type: 'success',
+                            message: '已拒绝该留言!'
+                        });
+                        this.getData();
+                    } else {
+                        this.$message.error(res.message);
+                    }
+                })
+            })
+        },
+        //1.3 列表内容分页
+        handleSizeChange(val) {
+            this.getApiData.page = val;
+            this.getData();
+        },
+        //1.4 点击分页
+        handleCurrentChange(val) {
+            this.getApiData.page = val;
+            this.getData();
+        },
+        //1.6 重置按钮
+        clearSearchList() {
+            this.tableData = [];
+            this.getApiData.title = "";
+            this.getApiData.page = 1;
+            this.getApiData.pageSize = 10;
+            this.getApiData.is_master = "0";
+            this.getApiData.due_time = "";
+            this.getData();
+        },
+        //列表和分页相关 end ------------------------------------------------------------>
+        //跳转到添加留言页面 start ------------------------------------------------------------>
+        //编辑
+        gotoEdit(id) {
+            this.$router.push({
+                path: '/topicAdd',
+                query: {
+                    id: id,
+                    type: 'edit',
+                    page: 'topicReview'
+                }
+            });
+        },
+        //查看
+        getDataMain(id) {
+            this.$router.push({
+                path: '/topicAdd',
+                query: {
+                    id: id,
+                    type: 'view',
+                    page: 'topicReview'
+                }
+            });
+        },
+        //跳转到添加留言页面 end ------------------------------------------------------------>
+    },
+    mounted() {
+        //获得第一页
+        this.getData();
+        //1.获得用户身份
+        this.creatNews_user_type = getUseType();
+        //2.获得站点id
+        this.getApiData.website_id = getWebSiteId();
+        //3.获得页面操作方式
+        this.behavior = this.$route.query.behavior;
+        //4.获得用户id
+        this.userid = this.$store.state.user.userid;
+    },
+}
+</script>
+
+<style scoped lang="less">
+.status0 {
+    color: #5570F1;
+}
+.status1 {
+    color: #519C66;
+}
+.status2 {
+    color: #CC5F5F;
+}
+//执行v-deep穿透scope选择器 start------------------------------------------------------------>*/
+::v-deep .custom-form-item>.el-form-item__label {
+    line-height: 140px !important;
+}
+::v-deep .custom-textarea .el-textarea__inner {
+    resize: none;
+    /* 禁止用户拖拽调整大小 */
+}
+::v-deep .custom-align-right .el-form-item__label {
+    text-align: right;
+    /* 设置标签文字右对齐 */
+}
+//执行v-deep穿透scope选择器 end------------------------------------------------------------>*/
+.tag_webSite_head_btn_box {
+    overflow: hidden;
+}
+.tag_webSite_head_btn_box .searchTitle {
+    opacity: 0;
+    span {
+        display: block;
+        height: 16px;
+    }
+}
+.tag_webSite_head_btn_box button {
+    float: right;
+}
+.tag_webSite_head_btn_box button:nth-of-type(1) {
+    margin-left: 10px;
+}
+</style>

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

@@ -101,7 +101,7 @@
                   <div class="listEditBtn" @click="goEdit(scope.row.id, tableData)" v-if="scope.row.user_id == userId">
                     <i class="el-icon-edit-outline"></i>编辑
                   </div>
-                  <div class="listLookBtn" @click="goLook(scope.row.id, scope.row)" v-else>
+                  <div class="listEditBtn" @click="goLook(scope.row.id, scope.row)" v-else>
                     <i class="el-icon-view"></i>
                     查看
                   </div>

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

@@ -54,7 +54,7 @@
                                         <i class="el-icon-refresh-left"></i>撤回 
                                     </div>
                                     <!--非管理员且该留言已通过申请,则无法再次编辑-->
-                                    <div class="listMainBtn" @click="getDataMain(scope.row.id)" v-if="scope.row.is_update == 0">
+                                    <div class="listEditBtn" @click="getDataMain(scope.row.id)" v-if="scope.row.is_update == 0">
                                         <i class="el-icon-view"></i>查看
                                     </div>
                                     <div class="listEditBtn" @click="gotoEdit(scope.row.id)" v-if="scope.row.is_update == 1">

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

@@ -59,7 +59,7 @@
                                         <i class="el-icon-refresh-left"></i>撤回 
                                     </div>
                                     <!--非管理员且该留言已通过申请,则无法再次编辑-->
-                                    <div class="listMainBtn" @click="getDataMain(scope.row.id)" v-if="scope.row.is_update == 0">
+                                    <div class="listEditBtn" @click="getDataMain(scope.row.id)" v-if="scope.row.is_update == 0">
                                         <i class="el-icon-view"></i>查看
                                     </div>
                                     <div class="listEditBtn" @click="gotoEdit(scope.row.id)" v-if="scope.row.is_update == 1">

+ 21 - 5
src/views/website/WebsiteList.vue

@@ -94,11 +94,18 @@
                 <div class="listBtnBox">
                   <!-- <div class="listDeleteBtn" @click="deleteData(scope.row.id, tableData)"><i
                       class="el-icon-delete"></i>删除</div> -->
-                  <div class="listEditBtn" @click="getDataMain(scope.row, tableData)"><i
-                      class="el-icon-edit-outline"></i>编辑</div>
-                  <div class="listUpBtn"
-                    v-if="scope.row.website_column_arr_id && !scope.row.website_column_arr_id.includes(3)"
-                    @click="cloneWebsite(scope.row.id, tableData)"><i class="el-icon-copy-document"></i>克隆</div>
+                    <div class="listEditBtn" @click="getDataMain(scope.row, tableData)">
+                        <i class="el-icon-edit-outline"></i>编辑
+                    </div>
+                    <div v-if="ifOfficial(scope.row)">
+                        <div 
+                            class="listUpBtn" 
+                            v-if="scope.row.website_column_arr_id && !scope.row.website_column_arr_id.includes(3)"
+                            @click="cloneWebsite(scope.row.id, tableData)"
+                        >
+                            <i class="el-icon-copy-document"></i>克隆
+                        </div>
+                    </div>
                   <!-- <div class="listMainBtn" @click="creatWebsite(scope.row.id)"><i class="el-icon-brush"></i>模板</div> -->
                 </div>
                 <!-- <div class="listMainBtn"><i class="el-icon-view"></i>详情</div> -->
@@ -1007,6 +1014,15 @@ export default {
         });
       });
     },
+    //判断当前网站是否为官网,官网不可克隆
+    ifOfficial(row){
+        let officialData = [7,16,19,22,25,28,31,34,37];
+        if(officialData.includes(row.website_column_id)){
+            return false;
+        }else{
+            return true;
+        }
+    },
   },
   mounted() {
     //1.获得初始数据

+ 3 - 0
src/views/website/addWebsite.vue

@@ -1164,6 +1164,9 @@ export default {
                             webSiteArray.push(item.url)
                         }
                     }
+                    if(this.form.web_type==""){
+                        this.form.web_type = 0
+                    }
                     //循环完毕 重置提交的url
                     this.form.website_url = webSiteArray;
                     this.form.id = this.activeid;