Bläddra i källkod

修改调研选题bug和创建工作人员

修改调研选题bug和创建工作人员
dangyunlong 1 vecka sedan
förälder
incheckning
59e170b540

+ 30 - 28
src/utils/baseUrl.js

@@ -1,32 +1,34 @@
 const URL = {
-  //baseUrl: 'http://103.105.201.2:9501',//正式环境ip
-  //baseUrl: 'https://flzxw.bjzxtw.org.cn',//正式环境域名
-  //baseUrl: 'http://183.131.25.186:9501',//测试环境ip
-  //baseUrl: 'http://admindev.bjzxtw.org.cn:9501',//测试域名
-  //baseUrl: 'http://116.131.8.26:9501',//pre环境ip
-  //baseUrl: 'http://adminpre.bjzxtw.org.cn:9501',//pre环境域名
-
-  webUrl: 'https://adminpre.bjzxtw.org.cn',//管理系统地址,如果用户因为某种原因以外退出,需要一个userurl用于请求接口
-  //baseUrl: 'https://apipre1.bjzxtw.org.cn',//pre环境域名2
-  baseUrl: 'http://bapi.t:9101',//政讯项目地址
-  //aiUrl: 'http://apipre3.bjzxtw.org.cn',//ai环境域名
-  //baseUrl: 'http://192.168.1.201:9501',//刘佳伟本地环境
-  //baseUrl:'http://192.168.1.159:9101',//冯蕊的本地环境
-  //baseUrl: 'http://192.168.1.129:9501',//刘剑的本地环境
-  // WebsocketUrl: 'ws://192.168.1.201:9506',//刘佳伟 -- websocket地址
-  // WebsocketUrl: 'ws://192.168.1.127:9506'//刘剑 -- websocket地址
-  //WebsocketUrl: 'ws://183.131.25.186:9506',//测试环境ip -- websocket地址
-  //WebsocketUrl: 'ws://admindev.bjzxtw.org.cn:9506',//测试环境域名
-  //WebsocketUrl: 'ws://116.131.8.26:9506'//pre环境ip -- websocket地址
-  //WebsocketUrl: 'ws://adminpre.bjzxtw.org.cn:9506'//pre环境域名 -- websocket地址
-  WebsocketUrl: 'wss://apipre1.bjzxtw.org.cn',//pre环境域名 -- websocket地址
-  // WebsocketUrl: 'ws://103.105.201.2:9506'//正式环境ip -- websocket地址
-  //WebsocketUrl: 'wss://flzxw.bjzxtw.org.cn'//正式环境域名 wss可用 -- websocket地址
-  WebCloginUrl: 'https://apipre1.bjzxtw.org.cn/api/loginapi', //单点登录地址
-  WebCLogoutUrl: 'https://apipre1.bjzxtw.org.cn/api/logoutapi', //单点登录退出
-  //webClogBackUrL: 'http://adminpre.bjzxtw.org.cn/auth/back_login.php' //单点登录返回地址 - 王鹏
-  webClogBackUrL: 'https://adminpre.bjzxtw.org.cn/adminapi/api/backlogin',//单点登录返回地址 - 刘佳伟
-  imUrl: 'https://imp.ncltw.org.cn/message', //im地址
+    //baseUrl: 'http://103.105.201.2:9501',//正式环境ip
+    //baseUrl: 'https://flzxw.bjzxtw.org.cn',//正式环境域名
+    //baseUrl: 'http://183.131.25.186:9501',//测试环境ip
+    //baseUrl: 'http://admindev.bjzxtw.org.cn:9501',//测试域名
+    //baseUrl: 'http://116.131.8.26:9501',//pre环境ip
+    //baseUrl: 'http://adminpre.bjzxtw.org.cn:9501',//pre环境域名
+    webUrl: 'https://admincs.fzxfb.org.cn',//管理系统地址,如果用户因为某种原因以外退出,需要一个userurl用于请求接口
+    //baseUrl: 'https://apipre1.bjzxtw.org.cn',//pre环境域名2
+    
+    baseUrl: 'http://bapi.t:9101',//政讯项目pre地址
+    //baseUrl: 'https://apics.fzxfb.org.cn',//政讯项目正式地址
+    
+    //aiUrl: 'http://apipre3.bjzxtw.org.cn',//ai环境域名
+    //baseUrl: 'http://192.168.1.201:9501',//刘佳伟本地环境
+    //baseUrl:'http://192.168.1.159:9101',//冯蕊的本地环境
+    //baseUrl: 'http://192.168.1.129:9501',//刘剑的本地环境
+    //WebsocketUrl: 'ws://192.168.1.201:9506',//刘佳伟 -- websocket地址
+    //WebsocketUrl: 'ws://192.168.1.127:9506'//刘剑 -- websocket地址
+    //WebsocketUrl: 'ws://183.131.25.186:9506',//测试环境ip -- websocket地址
+    //WebsocketUrl: 'ws://admindev.bjzxtw.org.cn:9506',//测试环境域名
+    //WebsocketUrl: 'ws://116.131.8.26:9506'//pre环境ip -- websocket地址
+    //WebsocketUrl: 'ws://adminpre.bjzxtw.org.cn:9506'//pre环境域名 -- websocket地址
+    WebsocketUrl: 'wss://apipre1.bjzxtw.org.cn',//pre环境域名 -- websocket地址
+    // WebsocketUrl: 'ws://103.105.201.2:9506'//正式环境ip -- websocket地址
+    //WebsocketUrl: 'wss://flzxw.bjzxtw.org.cn'//正式环境域名 wss可用 -- websocket地址
+    WebCloginUrl: 'https://apipre1.bjzxtw.org.cn/api/loginapi', //单点登录地址
+    WebCLogoutUrl: 'https://apipre1.bjzxtw.org.cn/api/logoutapi', //单点登录退出
+    //webClogBackUrL: 'http://adminpre.bjzxtw.org.cn/auth/back_login.php' //单点登录返回地址 - 王鹏
+    webClogBackUrL: 'https://adminpre.bjzxtw.org.cn/adminapi/api/backlogin',//单点登录返回地址 - 刘佳伟
+    imUrl: 'https://imp.ncltw.org.cn/message', //im地址
 }
 
 export default URL;

+ 263 - 82
src/views/news/topicAdd.vue

@@ -138,10 +138,15 @@
                                         </el-select>
                                     </div>
                                     <div>
-                                        <el-select v-model="form.city_id" placeholder="请选择市" :disabled="pageMode == 'view' || isme == false">
+                                        <el-select v-model="form.city_id" placeholder="请选择市" @change="city_change" :disabled="pageMode == 'view' || isme == false">
                                             <el-option v-for="item in city_array" :key="item.id" :label="item.name" :value="item.id"></el-option>
                                         </el-select>
                                     </div>
+                                    <div>
+                                        <el-select v-model="form.county_id" placeholder="请选择县" :disabled="pageMode == 'view' || isme == false">
+                                            <el-option v-for="item in county_array" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                                        </el-select>
+                                    </div>
                                 </div>
                             </el-form-item>
                         </div>
@@ -171,11 +176,11 @@
                         </div>
                         <!--9.添加组织机构-->
                         <el-form-item label="组织机构:" :label-width="formLabelWidth" prop="title" class="custom-align-right" v-if="pageMode == 'add'">
-                            <el-input v-model="form.title" autocomplete="off" placeholder="请输入组织机构(可输入多个)"></el-input>
+                            <el-input v-model="form.organization" autocomplete="off" placeholder="请输入组织机构(可输入多个)"></el-input>
                         </el-form-item>
                         <!--9.编辑组织机构-->
                         <el-form-item label="组织机构:" :label-width="formLabelWidth" prop="title" class="custom-align-right" v-else>
-                            <el-input v-model="form.title" autocomplete="off" placeholder="请输入组织机构(可输入多个)" :disabled="pageMode == 'view' || isme == false"></el-input>
+                            <el-input v-model="form.organization" autocomplete="off" placeholder="请输入组织机构(可输入多个)" :disabled="pageMode == 'view' || isme == false"></el-input>
                         </el-form-item>
                         <!--10.同行人员-->
                         <el-form-item label="同行人员:" :label-width="formLabelWidth" class="custom-align-right" v-if="pageMode == 'add'">
@@ -190,36 +195,42 @@
                                     </div>
                                 </div>
                             </div>
-                            <div class="personLiList">
+                            <div class="personLiList" v-for="item in form.users_id" :key="item.id">
                                 <div class="personLi">
-                                    <div class="personLiId">1</div>
-                                    <div class="personLiName">张三</div>
+                                    <div class="personLiId">{{ item.id }}</div>
+                                    <div class="personLiName">{{item.real_name}}</div>
                                 </div>
                                 <div class="personOption">
-                                    <span class="el-icon-delete"></span>
+                                    <span class="el-icon-delete" @click="delResearcher(item.id)"></span>
                                 </div>
                             </div>
-                            <div class="personLiList">
+                        </el-form-item>
+                        <!--10.同行人员-->
+                        <el-form-item label="同行人员:" :label-width="formLabelWidth" class="custom-align-right" v-else>
+                            <div class="personListBox">
+                                <div class="personLiTitle">
+                                    <div class="personLi">
+                                        <div class="personLiId">ID</div>
+                                        <div class="personLiName">姓名</div>
+                                    </div>
+                                    <div class="personOption">
+                                        <span class="el-icon-plus" @click="editPerson" v-if="pageMode != 'view' && isme == true"></span>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="personLiList" v-for="item in form.users_id" :key="item.id">
                                 <div class="personLi">
-                                    <div class="personLiId">2</div>
-                                    <div class="personLiName">李四</div>
+                                    <div class="personLiId">{{ item.id }}</div>
+                                    <div class="personLiName">{{item.real_name}}</div>
                                 </div>
                                 <div class="personOption">
-                                    <span class="el-icon-delete"></span>
+                                    <span class="el-icon-delete" @click="delResearcher(item.id)" v-if="pageMode != 'view' && isme == true"></span>
                                 </div>
                             </div>
                         </el-form-item>
-                        <!--10.同行人员-->
-                        <el-form-item label="同行人员:" :label-width="formLabelWidth" class="custom-align-right" v-else>
-                            
-                        </el-form-item>
-                        <!--11.添加联系人姓名-->
-                        <el-form-item label="证书编号:" class="custom-align-right" v-if="pageMode == 'add'">
-                            <el-input v-model="form.name" autocomplete="off" placeholder="请输入证书编号"></el-input>
-                        </el-form-item>
                         <!--11.编辑联系人姓名-->
-                        <el-form-item label="证书编号:" class="custom-align-right" v-else>
-                            <el-input v-model="form.name" autocomplete="off" placeholder="请输入证书编号" :disabled="pageMode == 'view' || isme == false"></el-input>
+                        <el-form-item label="证书编号:" class="custom-align-right">
+                            <el-input v-model="userNumber" autocomplete="off" placeholder="调研员自动生成" disabled="disabled"></el-input>
                         </el-form-item>
                     </div>
                 </div>
@@ -229,15 +240,13 @@
             <el-button type="info" @click="returnPage">返回</el-button>
             <el-button type="primary" @click="addToServe" v-if="pageMode == 'add'">确定</el-button>
             <!--管理员编辑-->
-            <el-button type="primary" @click="editToServe" v-else>编辑</el-button>
+            <el-button type="primary" @click="editToServe" v-if="pageMode != 'view' && isme == true">编辑</el-button>
         </div>
-        
         <!--选择同行人员弹出框-->
         <el-dialog
             title="选择同行人员"
             :visible.sync="personDialogVisible"
             width="50%"
-            :before-close="handleClose"
         >
             <div>
                 <div class="personDialogOption">
@@ -249,35 +258,40 @@
                         <span>真实姓名:</span>
                         <el-input v-model="personDialogOption.name" autocomplete="off" placeholder="请输入真实姓名" ></el-input>
                     </div>
+                    <div>
+                        <el-button type="primary" @click="searchResearcher">搜索</el-button>
+                    </div>
                 </div>
                 <div class="personDialogListBox">
                     <el-table
                         ref="multipleTable"
-                        :data="tableData"
+                        :data="researcherList.users"
                         tooltip-effect="dark"
+                        height="300"
                         style="width: 100%"
-                        @selection-change="handleSelectionChange"
+                        :row-style="tableRowStyle"
+                        @selection-change="selectResearcher"
                     >
                         <el-table-column
                             type="selection"
                             width="55">
                         </el-table-column>
                         <el-table-column
-                            prop="name"
+                            prop="id"
                             label="编号"
                             width="60">
                         </el-table-column>
                         <el-table-column
-                            prop="address"
+                            prop="real_name"
                             label="真实姓名"
                         >
-                    </el-table-column>
-                </el-table>
+                        </el-table-column>
+                    </el-table>
                 </div>
             </div>
             <span slot="footer" class="dialog-footer">
                 <el-button @click="personDialogVisible = false">取 消</el-button>
-                <el-button type="primary" @click="personDialogVisible = false">确 定</el-button>
+                <el-button type="primary" @click="enterResearcher">确 定</el-button>
             </span>
         </el-dialog>
     </div>
@@ -293,6 +307,15 @@ import tagInput from '../../components/InputTag/index.vue';
 import '@/styles/global.less';
 //引入富文本编辑器
 import myEditor from '../../components/edit/myEditor.vue';
+//格式化时间
+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: {
@@ -326,39 +349,36 @@ export default {
             tags: [],//标签数组
             website_column_arr: [],//网系列表
             column_id: [],//选择的网系
-            
             province_array:[],//省列表
             city_array:[],//市列表
             county_array:[],//县列表
-            
             personDialogVisible:false,//编辑同行人员
             researcherList:[],//调研员列表
-            
+            userNumber:"",//调研员证书编号 管理员没有编号
+            selectedUsers:[],//选中的调研员
             form: {
+                title:"",//调研标题
                 column_id:0,//网站属性id
-                title:"",//留言标题
-                keyword: "",//留言关键词
-                name:"",//留言用户姓名
-                telephone:"",//留言用户电话
-                description: "",//留言描述
+                level:"",//推荐等级 1=推荐位
+                keyword: "",//调研关键词
+                description: "",//调研描述
                 content: "",//留言内容
-                reply:"",//回复内容
-                
                 province_id:"",//省id
                 city_id:"",//市id
                 county_id:"",//县id
+                due_time:"",//结束时间
+                users_id:[],//同行人员
+                organization:"",//组织机构
             },
             formRules: {
                 title: [{ required: true, trigger: 'blur', validator: validateEmpty }],
                 content: [{ required: true, trigger: 'blur', validator: validateEmpty }],
                 column_id: [{ type: 'array', required: true, trigger: 'change', message: '必须选择一个网系!' }],
             },
-            
             personDialogOption: {
                 id: "",//编号
                 name: "",//真实姓名
             },
-            
         };
     },
     methods: {
@@ -390,26 +410,42 @@ export default {
         },
         //提交表单
         addToServe() {
-            console.log(this.form)
-            this.form.telephone = Number(this.form.telephone);
             //表单验证
             this.$refs.form.validate(valid => {
                 if (valid) {
-                    let save = this.form.column_id;
+                    //组装数据
+                    let data = {
+                        title: this.form.title,
+                        column_id: this.form.column_id,
+                        level: this.form.level,
+                        keyword: this.form.keyword,
+                        description: this.form.description,
+                        content: this.form.content,
+                        province_id: this.form.province_id,
+                        city_id: this.form.city_id,
+                        county_id: this.form.county_id,
+                        due_time: formatDate(this.form.due_time),
+                        users_id: this.form.users_id,
+                        organization: this.form.organization,
+                    }
                     //获得最后一位
                     if (Array.isArray(this.form.column_id) && this.form.column_id.length > 0) {
-                        this.form.column_id = this.form.column_id[this.form.column_id.length - 1];
+                        data.column_id = this.form.column_id[this.form.column_id.length - 1];
+                    }
+                    //获得同行人id数据
+                    if (this.form.users_id.length > 0) {
+                        let u = this.form.users_id.map(item => item.id);
+                        data.users_id = '[' + String(u.join(',')) + ']';
                     }
-                    this.$store.dispatch('news/addMessage',this.form).then(res => {
+                    this.$store.dispatch('news/addResearchTopic',data).then(res => {
                         if(res.code == 200) {
                             console.log(res)
                             this.$router.push({
                                 path: '/' + this.$route.query.page,
                             })
-                            this.$message.success("留言添加成功!");
+                            this.$message.success("选题发布成功!");
                         } else {
                             this.$message.error(res.message);
-                            this.form.column_id = save;
                         }
                     })
                 }
@@ -417,23 +453,45 @@ export default {
         },
         //管理员编辑表单
         editToServe() {
-            console.log(this.form)
+            //编辑时转换column_id为数组
+            if(!Array.isArray(this.form.column_id)) {
+                this.form.column_id = [this.form.column_id];
+            }
             //表单验证
             this.$refs.form.validate(valid => {
                 if (valid) {
-                    //添加留言id
-                    this.form.id = this.$route.query.id;
+                    //组装数据
+                    let data = {
+                        id:this.$route.query.id,
+                        title: this.form.title,
+                        column_id: this.form.column_id,
+                        level: this.form.level,
+                        keyword: this.form.keyword,
+                        description: this.form.description,
+                        content: this.form.content,
+                        province_id: this.form.province_id,
+                        city_id: this.form.city_id,
+                        county_id: this.form.county_id,
+                        due_time: formatDate(this.form.due_time),
+                        users_id: this.form.users_id,
+                        organization: this.form.organization,
+                    }
                     //获得最后一位
                     if (Array.isArray(this.form.column_id) && this.form.column_id.length > 0) {
-                        this.form.column_id = this.form.column_id[this.form.column_id.length - 1];
+                        data.column_id = this.form.column_id[this.form.column_id.length - 1];
                     }
-                    this.$store.dispatch('news/upMessage',this.form).then(res => {
+                    //获得同行人id数据
+                    if (this.form.users_id.length > 0) {
+                        let u = this.form.users_id.map(item => item.id);
+                        data.users_id = '[' + String(u.join(',')) + ']';
+                    }
+                    this.$store.dispatch('news/upResearchTopic',data).then(res => {
                         if(res.code == 200) {
                             console.log(res)
                             this.$router.push({
                                 path: '/' + this.$route.query.page,
                             })
-                            this.$message.success("留言编辑成功!");
+                            this.$message.success("选题发布成功!");
                         } else {
                             this.$message.error(res.message);
                         }
@@ -446,39 +504,63 @@ export default {
             this.tags = [];
             this.website_column_arr = [];
             this.column_id = [];
-            this.form.column_id = 0;
             this.form.title = "";
+            this.form.column_id = 0;
+            this.form.level = "";
             this.form.keyword = "";
             this.form.description = "";
             this.form.content = "";
-            this.form.reply = "";
-            this.form.name = "";
-            this.form.telephone = "";
-            this.pageMode = "add"
+            this.form.province_id = "";
+            this.form.city_id = "";
+            this.form.county_id = "";
+            this.form.due_time = "";
+            this.form.users_id = [];
+            this.form.organization = "";
+            //删除编辑id
             delete this.form.id;
         },
         //回显数据
         getMainData(id) {
-            this.$store.dispatch('news/getMessageInfo',{id:id}).then(res => {
+            this.$store.dispatch('news/getResearchTopicInfo',{id:id}).then(res => {
                 if(res.code == 200) {
-                    this.form.column_id = res.data.column_arr_id;
-                    this.form.title = res.data.title;
-                    this.form.keyword = res.data.keyword;
-                    this.form.description = res.data.description;
-                    this.form.name = res.data.name;
-                    this.form.telephone = res.data.telephone;
-                    setTimeout(() => {
-                        this.form.content = res.data.content;
-                    }, 100);
-                    this.form.reply = res.data.reply;
-                    this.tags = res.data.keyword.split(',');
-                    
                     //判断当前的留言是否是自己发布的
                     if(res.data.user_id == this.$store.state.user.userid) {
                         this.isme = true;
                     } else {
                         this.isme = false;
                     }
+                    this.form.title = res.data.title;
+                    //如果this.form.column_id不是数组
+                    this.form.column_id = res.data.column_id;
+                    // 将level转换为数字,确保与option的value类型一致
+                    this.form.level = res.data.level ? Number(res.data.level) : "";
+                    this.tags = res.data.keyword.split(',');
+                    this.form.description = res.data.description;
+                    //还原省
+                    this.form.province_id = res.data.province_id;
+                    //如果市不为空
+                    if(res.data.city_id != "") {
+                        this.province_change(res.data.province_id,res.data.city_id)
+                    }
+                    //如果县不为空
+                    if(res.data.county_id){
+                        this.city_change(res.data.city_id,res.data.county_id)
+                    }
+                    this.form.due_time = res.data.due_time;
+                    this.form.organization = res.data.organization;
+                    //显示列表
+                    //this.form.users_id = res.data.retopic_users;
+                    for(let item of res.data.retopic_users) {
+                        this.selectedUsers.push(item.id);
+                        let data = {
+                            id: item.user_id,
+                            real_name: item.real_name,
+                        }
+                        this.form.users_id.push(data);
+                    }
+                    setTimeout(() => {
+                        this.form.content = res.data.content;
+                    }, 100);
                 } else {
                     this.$message.error(res.message);
                 }
@@ -499,40 +581,138 @@ export default {
             })
         },
         //获得市
-        province_change(value) {
+        province_change(value,city_id) {
             this.form.city_id = ''; // 清空城市选择
             this.form.county_id = ''; // 清空县选择
             this.$store.dispatch('news/getJobRecruitingArea', { pid: value }).then(res => {
                 this.city_array = res.data;
+                if(city_id){
+                    this.form.city_id = city_id;
+                }
             })
         },
         //获得县
-        city_change(value) {
+        city_change(value,county_id) {
             this.form.county_id = ''; // 清空县选择
             this.$store.dispatch('news/getJobRecruitingArea', { pid: value }).then(res => {
                 this.county_array = res.data;
+                if(county_id){
+                    this.form.county_id = county_id;
+                }
             })
         },
-        //编辑同行人员
+        //获取所有调研员 start ------------------------------------------------------------>
+        //打开随行人员窗口
         editPerson() {
             this.personDialogVisible = true;
             //获得所有调研员列表
-            this.getAllResearcher();
+            //this.getAllResearcher();
+            //同步el-table的选中状态
+            this.$nextTick(() => {
+                this.syncTableSelection();
+            });
         },
-        
-        //获取所有调研员 start ------------------------------------------------------------>
+        //同步表格选中状态
+        syncTableSelection() {
+            // 先清除所有选中状态
+            this.$refs.multipleTable.clearSelection();
+            // 重新选择
+            this.researcherList.users.forEach(row => {
+                const isSelected = this.form.users_id.some(item => item.id === row.id);
+                if (isSelected) {
+                    this.$refs.multipleTable.toggleRowSelection(row, true);
+                }
+            });
+        },
+        //拉取调研员列表
         getAllResearcher() {
             this.$store.dispatch('news/getAllResearcher').then(res => {
                 if(res.code == 200) {
+                    if (res.data && res.data.users) {
+                        res.data.users.forEach(item => {
+                            // 默认显示
+                            item.isVisible = true;
+                        });
+                    }
                     this.researcherList = res.data;
+                    this.searchResearcherList = res.data;
+                    this.userNumber = res.data.number;
                     console.log(this.researcherList)
                 } else {
                     this.$message.error(res.message);
                 }
             })
         },
+        //选择调研员
+        selectResearcher(val) {
+            this.selectedUsers = val;
+        },
+        //删除已经选择的调研员
+        delResearcher(id) {
+            console.log(id)
+            for(let item of this.form.users_id) {
+                if(item.id == id) {
+                    this.form.users_id.splice(this.form.users_id.indexOf(item), 1);
+                    break;
+                }
+            }
+        },
+        //保存选择的同行人员
+        enterResearcher() {
+            this.form.users_id = [];
+            for(let item of this.selectedUsers) {
+                this.form.users_id.push(item);
+            }
+            this.personDialogVisible = false;
+        },
+        //弹出框内搜索人员
+        searchResearcher() {
+            const idQuery = this.personDialogOption.id;
+            const nameQuery = this.personDialogOption.name;
+
+            // 如果搜索条件为空,显示所有
+            if (idQuery === '' && nameQuery === '') {
+                if (this.researcherList.users) {
+                    this.researcherList.users.forEach(item => {
+                        this.$set(item, 'isVisible', true);
+                    });
+                }
+            } else {
+                // 校验ID格式
+                if (idQuery !== '' && isNaN(Number(idQuery))) {
+                    this.$message.error("请输入正确的编号");
+                    return;
+                }
+
+                // 遍历数据设置可见性
+                if (this.researcherList.users) {
+                    this.researcherList.users.forEach(item => {
+                        let isVisible = true;
+                        // 匹配ID
+                        if (idQuery !== '') {
+                            if (item.id != idQuery) {
+                                isVisible = false;
+                            }
+                        }
+                        // 匹配姓名
+                        if (isVisible && nameQuery !== '') {
+                            if (item.real_name !== nameQuery) {
+                                isVisible = false;
+                            }
+                        }
+                        this.$set(item, 'isVisible', isVisible);
+                    });
+                }
+            }
+        },
+        // 表格行样式回调,用于控制显示隐藏
+        tableRowStyle({ row }) {
+            if (row.isVisible === false) {
+                return { display: 'none' };
+            }
+            return {};
+        },
         //获取所有调研员 end ------------------------------------------------------------>
-        
     },
     mounted() {
         //1.清理表单
@@ -561,9 +741,10 @@ export default {
             this.pageName = this.$route.query.page;
             this.getMainData(this.$route.query.id)
         }
-        
         //5.4 获得所有省
         this.get_provinceid();
+        //6.获得所有同行人员
+        this.getAllResearcher();
     }
 };
 </script>

+ 5 - 6
src/views/news/topicList.vue

@@ -37,7 +37,6 @@
                         <el-table-column prop="nickname" label="申报人" ></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="due_time" 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>
@@ -55,15 +54,15 @@
                                         <i class="el-icon-refresh-left"></i>撤回 
                                     </div>
                                     <!--非管理员且该留言已通过申请,则无法再次编辑-->
-                                    <div class="listMainBtn" @click="getDataMain(scope.row.id)" v-if="creatNews_user_type != 10000 && scope.row.is_update == 0">
+                                    <div class="listMainBtn" @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="creatNews_user_type != 10000 && scope.row.is_update == 1">
+                                    <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="gotoEdit(scope.row.id)" v-if="creatNews_user_type == 10000">
+                                    <!-- <div class="listEditBtn" @click="gotoEdit(scope.row.id)" v-if="creatNews_user_type == 10000">
                                         <i class="el-icon-edit-outline"></i>编辑
-                                    </div>
+                                    </div> -->
                                 </div>
                             </template>
                         </el-table-column>
@@ -151,7 +150,7 @@ export default {
                 type: 'warning'
             }).then(() => {
                 console.log("当前删除:" + id)
-                this.$store.dispatch('news/delMessage', {id:id}).then(res => {
+                this.$store.dispatch('news/delResearchTopic', {id:id}).then(res => {
                     if(res.code == 200) {
                         this.$message({
                             type: 'success',

+ 2 - 2
src/views/news/topicReview.vue

@@ -71,7 +71,7 @@
                                     <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="userid == scope.row.user_id">
+                                    <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="listMainBtn" @click="getDataMain(scope.row.id)" v-else>
@@ -173,7 +173,7 @@ export default {
                 type: 'warning'
             }).then(() => {
                 console.log("当前删除:" + id)
-                this.$store.dispatch('news/delMessage', {id:id}).then(res => {
+                this.$store.dispatch('news/delResearchTopic', {id:id}).then(res => {
                     if(res.code == 200) {
                         this.$message({
                             type: 'success',

+ 789 - 837
src/views/role/components/userInvestigate.vue

@@ -1,166 +1,177 @@
 <template>
-  <!-- 注册调研员组件 -->
-  <div class="mainBox">
-    <div class="layerBox">
-      <el-form ref="form" :model="form" :rules="loginRules" class="login-form" autocomplete="on" label-position="left"
-        label-width="120px">
-        <div class="formDiv">
-          <!--选择角色 start------------------------------------------>
-          <el-form-item label="所属角色:" :label-width="formLabelWidth" prop="role_id" class="custom-align-right">
-            <div class="formLabelFloatBox">
-              <el-select v-model="form.role_id" placeholder="请选择..">
-                <el-option v-for="item in role_idArr" :key="item.value" :label="item.label" :value="item.value">
-                </el-option>
-              </el-select>
-            </div>
-          </el-form-item>
-          <!--选择角色 end------------------------------------------>
-          <el-form-item label="登录账号:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <el-input v-model="form.user_name" autocomplete="off" placeholder="请输入登录账号.." ></el-input>
-          </el-form-item>
-          <div v-if="editId == ''">
-            <!--新密码 start------------------------------------------>
-            <div class="PasswordBox">
-              <el-form-item prop="password" label="登录密码:" class="custom-align-right">
-                <div class="PasswordBody">
-                  <el-input :key="passwordType1" ref="password1" v-model="form.password" :type="passwordType1"
-                    placeholder="请输入密码" name="password" tabindex="2" autocomplete="off" @blur="capsTooltip2 = false" />
-                  <span class="show-pwd" @click="showPwd(1)">
-                    <svg-icon :icon-class="passwordType1 === 'password' ? 'eye' : 'eye-open'" />
-                  </span>
-                </div>
-              </el-form-item>
-            </div>
-            <!--新密码 end------------------------------------------>
-            <!--新密码 start------------------------------------------>
-            <div class="PasswordBox">
-              <el-form-item prop="confirm_password" label="确认密码:" class="custom-align-right">
-                <div class="PasswordBody">
-                  <el-input :key="passwordType2" ref="password2" v-model="form.confirm_password" :type="passwordType2"
-                    placeholder="请输入密码" name="password" tabindex="2" autocomplete="off" @blur="capsTooltip2 = false" />
-                  <span class="show-pwd" @click="showPwd(2)">
-                    <svg-icon :icon-class="passwordType2 === 'password' ? 'eye' : 'eye-open'" />
-                  </span>
-                </div>
-              </el-form-item>
-            </div>
-            <!--新密码 end------------------------------------------>
-          </div>
-          <el-form-item label="调研员编号:" :label-width="formLabelWidth" prop="number" class="custom-align-right">
-            <el-input v-model="form.number" autocomplete="off" placeholder="请输入调研员编号.."></el-input>
-          </el-form-item>
-          <el-form-item label="真实姓名:" :label-width="formLabelWidth" prop="real_name" class="custom-align-right">
-            <el-input v-model="form.real_name" autocomplete="off" placeholder="请输入真实姓名.."></el-input>
-          </el-form-item>
-          <el-form-item label="照片:" :label-width="formLabelWidth" prop="avatar" :class="['custom-form-item']"
-            class="custom-align-right">
-            <div class="uploaderBox">
-              <!--图片上传组件 start ------------------------------------------------------------>
-              <div class="avatar-upload-container" @mouseenter="hovering = true" @mouseleave="hovering = false">
-                <!-- 上传组件 -->
-                <el-upload class="avatar-uploader" action="#" :show-file-list="false"
-                  :before-upload="beforeAvatarUpload">
-                  <!-- 预览图片 -->
-                  <img v-if="photoUrl" :src="photoUrl" class="avatar">
-                  <!-- 上传图标 -->
-                  <div v-else class="chooseImgDiv">
-                    <div>
-                      <img src="@/assets/public/upload/noImage.png">
-                      <div>选择图片</div>
+    <!-- 注册调研员组件 -->
+    <div class="mainBox">
+        <div class="layerBox">
+            <el-form ref="form" :model="form" :rules="loginRules" class="login-form" autocomplete="on"
+                label-position="left" label-width="120px">
+                <div class="formDiv">
+                    <!--选择角色 start------------------------------------------>
+                    <el-form-item label="所属角色:" :label-width="formLabelWidth" prop="role_id" class="custom-align-right">
+                        <div class="formLabelFloatBox">
+                            <el-select v-model="form.role_id" placeholder="请选择..">
+                                <el-option v-for="item in role_idArr" :key="item.value" :label="item.label"
+                                    :value="item.value">
+                                </el-option>
+                            </el-select>
+                        </div>
+                    </el-form-item>
+                    <!--选择角色 end------------------------------------------>
+                    <el-form-item label="登录账号:" :label-width="formLabelWidth" prop="" class="custom-align-right">
+                        <el-input v-model="form.user_name" autocomplete="off" placeholder="请输入登录账号.."
+                            disabled></el-input>
+                    </el-form-item>
+                    <div v-if="editId == ''">
+                        <!--新密码 start------------------------------------------>
+                        <div class="PasswordBox">
+                            <el-form-item prop="password" label="登录密码:" class="custom-align-right">
+                                <div class="PasswordBody">
+                                    <el-input :key="passwordType1" ref="password1" v-model="form.password"
+                                        :type="passwordType1" placeholder="请输入密码" name="password" tabindex="2"
+                                        autocomplete="off" @blur="capsTooltip2 = false" />
+                                    <span class="show-pwd" @click="showPwd(1)">
+                                        <svg-icon :icon-class="passwordType1 === 'password' ? 'eye' : 'eye-open'" />
+                                    </span>
+                                </div>
+                            </el-form-item>
+                        </div>
+                        <!--新密码 end------------------------------------------>
+                        <!--新密码 start------------------------------------------>
+                        <div class="PasswordBox">
+                            <el-form-item prop="confirm_password" label="确认密码:" class="custom-align-right">
+                                <div class="PasswordBody">
+                                    <el-input :key="passwordType2" ref="password2" v-model="form.confirm_password"
+                                        :type="passwordType2" placeholder="请输入密码" name="password" tabindex="2"
+                                        autocomplete="off" @blur="capsTooltip2 = false" />
+                                    <span class="show-pwd" @click="showPwd(2)">
+                                        <svg-icon :icon-class="passwordType2 === 'password' ? 'eye' : 'eye-open'" />
+                                    </span>
+                                </div>
+                            </el-form-item>
+                        </div>
+                        <!--新密码 end------------------------------------------>
                     </div>
-                  </div>
-                </el-upload>
-                <!-- 删除按钮,当鼠标悬浮时显示 -->
-                <div v-if="hovering && photoUrl" class="delete-button" @click="handleDelete">
-                  <i class="el-icon-delete"></i>
+                    <el-form-item label="证书编号:" :label-width="formLabelWidth" class="custom-align-right">
+                        <el-input v-model="form.number" autocomplete="off" placeholder="请输入证书编号.."></el-input>
+                    </el-form-item>
+                    <el-form-item label="真实姓名:" :label-width="formLabelWidth" class="custom-align-right">
+                        <el-input v-model="form.real_name" autocomplete="off" placeholder="请输入真实姓名.."></el-input>
+                    </el-form-item>
+                    <el-form-item label="照片:" :label-width="formLabelWidth" :class="['custom-form-item']"
+                        class="custom-align-right">
+                        <div class="uploaderBox">
+                            <!--图片上传组件 start ------------------------------------------------------------>
+                            <div class="avatar-upload-container" @mouseenter="hovering = true"
+                                @mouseleave="hovering = false">
+                                <!-- 上传组件 -->
+                                <el-upload class="avatar-uploader" action="#" :show-file-list="false"
+                                    :before-upload="beforeAvatarUpload">
+                                    <!-- 预览图片 -->
+                                    <img v-if="photoUrl" :src="photoUrl" class="avatar">
+                                    <!-- 上传图标 -->
+                                    <div v-else class="chooseImgDiv">
+                                        <div>
+                                            <img src="@/assets/public/upload/noImage.png">
+                                            <div>选择图片</div>
+                                        </div>
+                                    </div>
+                                </el-upload>
+                                <!-- 删除按钮,当鼠标悬浮时显示 -->
+                                <div v-if="hovering && photoUrl" class="delete-button" @click="handleDelete">
+                                    <i class="el-icon-delete"></i>
+                                </div>
+                                <input type="hidden" v-model="form.avatar">
+                            </div>
+                            <!--图片上传组件 end ------------------------------------------------------------>
+                        </div>
+                    </el-form-item>
+                    <el-form-item label="手机号:" :label-width="formLabelWidth" prop="mobile" class="custom-align-right">
+                        <el-input v-model="form.mobile" autocomplete="off" placeholder="请输入手机号.."></el-input>
+                    </el-form-item>
+                    <el-form-item label="身份证号:" :label-width="formLabelWidth" prop="id_card" class="custom-align-right">
+                        <el-input v-model="form.id_card" autocomplete="off" placeholder="请输入身份证号.."></el-input>
+                    </el-form-item>
+                    <el-form-item label="出生年月:" :label-width="formLabelWidth" class="custom-align-right">
+                        <el-date-picker v-model="form.birthday" type="date" placeholder="选择日期" disabled>
+                        </el-date-picker>
+                    </el-form-item>
+                    <el-form-item label="性别:" :label-width="formLabelWidth" class="custom-align-right">
+                        <el-radio v-model="form.gender" label="1">男</el-radio>
+                        <el-radio v-model="form.gender" label="2">女</el-radio>
+                    </el-form-item>
+                    <el-form-item label="工作区域:" :label-width="formLabelWidth" class="custom-align-right">
+                        <!-- 级联选择器 -->
+                        <CityCascader v-model="form.city_arr_id" @update-city-id="update_city_arr_id"
+                            v-if="isNational == 0">
+                        </CityCascader>
+                        <el-cascader :options="options" :show-all-levels="false" disabled v-else></el-cascader>
+                        <el-checkbox v-model="isNational" :true-label="1" :false-label="0"
+                            class="longTimeCheckbox">全国</el-checkbox>
+                    </el-form-item>
+                    <el-form-item label="站点标识:" :label-width="formLabelWidth" prop="sszq" class="custom-align-right">
+                        <!-- 级联选择器 xx-->
+                        <el-cascader v-model="form.sszq" :options="options_arr" filterable clearable></el-cascader>
+                    </el-form-item>
+                    <el-form-item label="有效期:" :label-width="formLabelWidth" class="custom-align-right">
+                        <el-date-picker v-model="timeList" type="daterange" :disabled="form.long_time === 1"
+                            range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"
+                            :picker-options="pickerOptions">
+                        </el-date-picker>
+                        <el-checkbox v-model="form.long_time" :true-label="1" :false-label="0"
+                            class="longTimeCheckbox">无限期</el-checkbox>
+                    </el-form-item>
+                    <el-form-item label="籍贯:" :label-width="formLabelWidth" prop="" class="custom-align-right">
+                        <CityCascader v-model="form.native_place_arr_id" @update-city-id="update_native_place_arr_id">
+                        </CityCascader>
+                    </el-form-item>
+                    <el-form-item label="QQ:" :label-width="formLabelWidth" prop="" class="custom-align-right">
+                        <el-input v-model="form.qq" autocomplete="off" placeholder="请输入QQ号.."></el-input>
+                    </el-form-item>
+                    <el-form-item label="电子邮箱:" :label-width="formLabelWidth" prop="" class="custom-align-right">
+                        <el-input v-model="form.email" autocomplete="off" placeholder="请输入电子邮箱.."></el-input>
+                    </el-form-item>
+                    <el-form-item label="邮编:" :label-width="formLabelWidth" prop="" class="custom-align-right">
+                        <el-input v-model="form.zip_code" autocomplete="off" placeholder="请输入邮编.."></el-input>
+                    </el-form-item>
+                    <el-form-item label="详细地址:" :label-width="formLabelWidth" prop="" class="custom-align-right">
+                        <CityCascader v-model="form.address_arr_id" @update-city-id="update_address_arr_id">
+                        </CityCascader>
+                    </el-form-item>
+                    <el-form-item label="" :label-width="formLabelWidth" prop="" class="custom-align-right">
+                        <el-input v-model="form.address" autocomplete="off" placeholder="请输入门牌号.."></el-input>
+                    </el-form-item>
+                    <el-form-item label="相关资料:" :label-width="formLabelWidth" prop="" class="custom-align-right">
+                        <el-upload class="upload-demo" :action="uploadFileUrl" :headers="headers"
+                            accept=".jpg, .jpeg, .png" :before-remove="beforeRemove" :on-success="handleUploadSuccess"
+                            multiple :limit="30" :on-exceed="handleExceed" :file-list="otherList" list-type="picture"
+                            :before-upload="beforeAvatarUpload1">
+                            <el-button size="small" type="primary">点击上传</el-button>
+                            <div slot="tip" class="el-upload__tip">每张图片最大2MB,最多上传30张图片。</div>
+                        </el-upload>
+                    </el-form-item>
+                    <el-form-item label="提示词:" :label-width="formLabelWidth" prop="" class="custom-align-right">
+                        <el-input type="textarea" v-model="form.remark" class="custom-textarea"
+                            placeholder="请输入提示词"></el-input>
+                    </el-form-item>
+                    <!-- <el-form-item label="网站选择" :label-width="formLabelWidth" prop="sszq" class="custom-align-right">
+                        <el-select v-model="form.sszq" multiple filterable placeholder="请选择">
+                        <el-option
+                            v-for="item in webSiteList"
+                            :key="item.value"
+                            :label="item.label"
+                            :value="item.value">
+                        </el-option>
+                        </el-select>
+                    </el-form-item> -->
                 </div>
-                <input type="hidden" v-model="form.avatar">
-              </div>
-              <!--图片上传组件 end ------------------------------------------------------------>
-            </div>
-          </el-form-item>
-          <el-form-item label="手机号:" :label-width="formLabelWidth" prop="mobile" class="custom-align-right">
-            <el-input v-model="form.mobile" autocomplete="off" placeholder="请输入手机号.."></el-input>
-          </el-form-item>
-          <el-form-item label="身份证号:" :label-width="formLabelWidth" prop="id_card" class="custom-align-right">
-            <el-input v-model="form.id_card" autocomplete="off" placeholder="请输入身份证号.."></el-input>
-          </el-form-item>
-          <el-form-item label="出生年月:" :label-width="formLabelWidth" prop="birthday" class="custom-align-right">
-            <el-date-picker v-model="form.birthday" type="date" placeholder="选择日期" disabled>
-            </el-date-picker>
-          </el-form-item>
-          <el-form-item label="性别:" :label-width="formLabelWidth" prop="gender" class="custom-align-right">
-            <el-radio v-model="form.gender" label="1">男</el-radio>
-            <el-radio v-model="form.gender" label="2">女</el-radio>
-          </el-form-item>
-          <el-form-item label="工作区域:" :label-width="formLabelWidth" prop="city_arr_id" class="custom-align-right">
-            <!-- 级联选择器 -->
-            <CityCascader v-model="form.city_arr_id" @update-city-id="update_city_arr_id" v-if="isNational == 0">
-            </CityCascader>
-            <el-cascader :options="options" :show-all-levels="false" disabled v-else></el-cascader>
-            <el-checkbox v-model="isNational" :true-label="1" :false-label="0" class="longTimeCheckbox">全国</el-checkbox>
-          </el-form-item>
-          <el-form-item label="站点标识:" :label-width="formLabelWidth" prop="sszq" class="custom-align-right">
-            <!-- 级联选择器 xx-->
-            <el-cascader v-model="form.sszq" :options="options_arr" filterable clearable></el-cascader>
-          </el-form-item>
-          <el-form-item label="有效期:" :label-width="formLabelWidth" prop="timeList" class="custom-align-right">
-            <el-date-picker v-model="timeList" type="daterange" :disabled="form.long_time === 1" range-separator="至"
-              start-placeholder="开始日期" end-placeholder="结束日期" :picker-options="pickerOptions">
-            </el-date-picker>
-            <el-checkbox v-model="form.long_time" :true-label="1" :false-label="0"
-              class="longTimeCheckbox">无限期</el-checkbox>
-          </el-form-item>
-          <el-form-item label="籍贯:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <CityCascader v-model="form.native_place_arr_id" @update-city-id="update_native_place_arr_id">
-            </CityCascader>
-          </el-form-item>
-          <el-form-item label="QQ:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <el-input v-model="form.qq" autocomplete="off" placeholder="请输入QQ号.."></el-input>
-          </el-form-item>
-          <el-form-item label="电子邮箱:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <el-input v-model="form.email" autocomplete="off" placeholder="请输入电子邮箱.."></el-input>
-          </el-form-item>
-          <el-form-item label="邮编:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <el-input v-model="form.zip_code" autocomplete="off" placeholder="请输入邮编.."></el-input>
-          </el-form-item>
-          <el-form-item label="详细地址:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <CityCascader v-model="form.address_arr_id" @update-city-id="update_address_arr_id"></CityCascader>
-          </el-form-item>
-          <el-form-item label="" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <el-input v-model="form.address" autocomplete="off" placeholder="请输入门牌号.."></el-input>
-          </el-form-item>
-          <el-form-item label="相关资料:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <el-upload class="upload-demo" :action="uploadFileUrl" :headers="headers" accept=".jpg, .jpeg, .png"
-              :before-remove="beforeRemove" :on-success="handleUploadSuccess" multiple :limit="30"
-              :on-exceed="handleExceed" :file-list="otherList" list-type="picture" :before-upload="beforeAvatarUpload1">
-              <el-button size="small" type="primary">点击上传</el-button>
-              <div slot="tip" class="el-upload__tip">每张图片最大2MB,最多上传30张图片。</div>
-            </el-upload>
-          </el-form-item>
-          <el-form-item label="提示词:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <el-input type="textarea" v-model="form.remark" class="custom-textarea" placeholder="请输入提示词"></el-input>
-          </el-form-item>
-          <!-- <el-form-item label="网站选择" :label-width="formLabelWidth" prop="sszq" class="custom-align-right">
-            <el-select v-model="form.sszq" multiple filterable placeholder="请选择">
-              <el-option
-                v-for="item in webSiteList"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value">
-              </el-option>
-            </el-select>
-          </el-form-item> -->
+            </el-form>
+        </div>
+        <div class="bottomBtnBox">
+            <el-button type="info" @click="goList">返回</el-button>
+            <el-button type="primary" @click="addData" v-if="editId == ''">提交</el-button>
+            <el-button type="primary" @click="editData" v-if="editId != ''">修改</el-button>
+            <el-button type="warning" @click="resetPassword" v-if="editId != ''">重置密码</el-button>
         </div>
-      </el-form>
-    </div>
-    <div class="bottomBtnBox">
-      <el-button type="info" @click="goList">返回</el-button>
-      <el-button type="primary" @click="addData" v-if="editId == ''">提交</el-button>
-      <el-button type="primary" @click="editData" v-if="editId != ''">修改</el-button>
-      <el-button type="warning" @click="resetPassword" v-if="editId != ''">重置密码</el-button>
     </div>
-  </div>
 </template>
 
 <script>
@@ -175,720 +186,661 @@ import { formatLocalDate } from '@/utils/public';
 // import cjs from 'compression-webpack-plugin';
 
 export default {
-  components: {
-    CityCascader, //城市级联选择器
-  },
-  data() {
-    let self = this;
-    // 配置验证规则:用于表单验证
-    const validatePassword = (rule, value, callback) => {
-      if (value.length < 6) {
-        callback(new Error('密码不能低于6位!'))
-      } else {
-        callback()
-      }
-    }
-    const validatePhone = (rule, value, callback) => {
-      const phoneRegex = /^1[34578]\d{9}$/g; // 正则表达式验证手机号
-      if (!value || value.trim() === "") {
-        callback(new Error('该项不能为空!'));
-      } else if (!phoneRegex.test(value.trim())) {
-        callback(new Error('请输入有效的手机号')); // 更新错误信息
-      } else {
-        console.log("手机号验证通过!")
-        callback();
-      }
-    }
-    const validateEmpty = (rule, value, callback) => {
-      if (!value || value.trim() === "") {
-        callback(new Error('该项不能为空!'));
-      } else {
-        callback();
-      }
-    }
-    const validateArray = (rule, value, callback) => {
-      if (value.length == 0) {
-        callback(new Error('该项不能为空!'))
-      } else {
-        callback()
-      }
-    }
-    const validateTime = (rule, value, callback) => {
-      if (value === "NaN-NaN-NaN NaN:NaN:NaN") {
-        callback(new Error('该项不能为空!'))
-      } else {
-        callback()
-      }
-    }
-    const validateTimeTo = (rule, value, callback) => {
-      // console.log(value)
-      // console.log(self.timeList)
-      // console.log(self.form.long_time)
-      if (self.timeList.length == 0 && self.form.long_time == 0) {
-        callback(new Error('该项不能为空!'))
-      } else {
-        callback()
-      }
-    }
-    const validateIdcard = (rule, value, callback) => {
-      const idCardRegex = /^(?:\d{15}|\d{18}|\d{17}[\dXx])$/; // 正则表达式验证身份证号
-      if (!value || value.trim() === "") {
-        callback(new Error('该项不能为空!'));
-      } else if (!idCardRegex.test(value.trim())) {
-        callback(new Error('请输入有效的身份证号')); // 更新错误信息
-      } else {
-        console.log("身份证号验证通过!");
-        self.extractBirthdayFromIdcard();
-        callback();
-      }
-    }
-    return {
-
-      options_arr: [],
-
-      props_1: { multiple: true },//下拉多选
-
-
-      formLabelWidth: "120px",
-      editId: "",
-      uploadFileUrl: URL.baseUrl + "/public/uploadFile",//获得上传地址
-      headers: {},
-
-
-      website_tag_params: {//xx
-        keyword: "",//网站名称查询
-        website_column_id: [],//使用网系id查询
-        city_id: [],//使用城市id查询
-
-        page: 1,//当前是第几页
-        pageSize: 666666,//一共多少条
-        name: "",
-      },
-
-
-      form: {
-
-        // websiteTag_arr_id:[],    //站点标识下拉id onlyxx
-
-        websiteTag_arr_id: [],    //站点标识下拉id only
-
-        websiteTag_reg: "",
-        sszq: [], //站点标识下拉id
-
-
-
-        type_id: 4,//调研员
-        role_id: "",//角色id 
-        user_name: "",//登录账号
-        password: "",//密码
-        confirm_password: "",//确认密码
-        number: "",//调研员编号
-        real_name: "",//真实姓名
-        avatar: "",//照片
-        id_card: "",//身份证号
-        birthday: "",//出生年月
-        gender: "1",//性别
-        mobile: "",//手机号
-        native_place_arr_id: [],//籍贯
-        city_arr_id: "",//工作区域
-        address_arr_id: [],//详细地址
-        address: "",//详细地址门牌号
-        from_time: "",//有效期开始时间
-        to_time: "",//有效期结束时间
-        long_time: 0,//是否为长期 //长期1:长期 0:非长期
-        qq: "",//QQ
-        email: "",//电子邮箱
-        other: [],//相关资料
-        remark: "",//提示词
-        zip_code: "",//邮编
-        //sszq: [],//所属网站
-      },
-      timeList: [],//时间段
-      otherList: [],//相关资料列表
-      role_idArr: [],//角色id池
-      isNational: 0,//是否为全国
-      //网站列表
-      webSiteList: [],
-      //上传照片
-      photoUrl: '',
-      hovering: false, // 鼠标悬浮状态 悬浮时显示删除
-      //密码验证
-      capsTooltip1: false,
-      capsTooltip2: false,
-      passwordType1: 'password',
-      passwordType2: 'password',
-      //配置from表单验证规则
-      loginRules: {
-
-
-        //   站点标识xx
-        websiteTag_arr_id: [{ type: 'array', required: true, trigger: 'blur', validator: validateArray }],
-
-
-
-
-        //1.角色id
-        role_id: [{ required: true, trigger: 'blur', validator: validateArray }],
-        //2.登录账号
-        user_name: [{ required: true, trigger: 'blur', validator: validatePhone }],
-        //3.密码和确认密码
-        password: [{ required: true, trigger: 'blur', validator: validatePassword }],
-        confirm_password: [{ required: true, trigger: 'blur', validator: validatePassword }],
-        //4.调研员编号
-        number: [{ required: true, trigger: 'blur', validator: validateEmpty }],
-        //5.真实姓名
-        real_name: [{ required: true, trigger: 'blur', validator: validateEmpty }],
-        //6.手机号
-        mobile: [{ required: true, trigger: 'blur', validator: validateEmpty }],
-        //7.身份证号
-        id_card: [{ required: true, trigger: 'blur', validator: validateIdcard }],
-        //8.性别
-        gender: [{ required: true, trigger: 'blur', validator: validateEmpty }],
-        //9.手机号
-        mobile: [{ required: true, trigger: 'blur', validator: validateEmpty }],
-        //10.工作区域
-        city_arr_id: [{ required: true, trigger: 'blur', validator: validateArray }],
-        //11.照片
-        avatar: [{ required: true, trigger: 'blur', validator: validateEmpty }],
-        //12.出生年月
-        birthday: [{ required: true, trigger: 'blur', validator: validateEmpty }],
-        //13.有效期
-        timeList: [{ required: true, trigger: 'blur', validator: validateTimeTo }],
-        //14.网站选择
-        sszq: [{ required: true, trigger: 'blur', validator: validateArray }]
-      },
-      //时间跨度
-      pickerOptions: {
-        selectableRange: '1900-01-01 to 2100-12-31', // 允许选择的日期范围
-        // disabledDate(time) {
-        //   return time.getTime() < Date.now() - 86400000; // 禁用今天之前的日期
-        // },
-      },
-    };
-  },
-  watch: {
-    // 同时监听多个属性
-    '$data': {
-      handler() {
-        this.form.user_name = "GR" + this.form.mobile.slice(-5) + this.form.id_card.slice(-5);
-      },
-      deep: true, // 深度监听对象变化
-      immediate: true // 初始化时立即执行一次
-    }
-  },
-  methods: {
-    //1.表单收集 start ------------------------------------------------------------>
-    //1.1切换密码框的显示与隐藏
-    showPwd(num) {
-      const passwordTypeKey = 'passwordType' + num; //动态生成 passwordType 的键
-      const passwordRefKey = 'password' + num; //动态生成 password 的引用
-      // 切换密码类型
-      if (this[passwordTypeKey] === 'password') {
-        this[passwordTypeKey] = ''; //显示密码
-      } else {
-        this[passwordTypeKey] = 'password'; //隐藏密码
-      }
-      // 使用 $nextTick 聚焦到对应的密码输入框
-      this.$nextTick(() => {
-        this.$refs[passwordRefKey].focus(); //聚焦到对应的密码输入框
-      });
-    },
-    //1.2获得角色列表池
-    getRoleList() {
-      let data = {
-        page: 1,
-        pageSize: 100
-      }
-      this.$store.dispatch('userRole/roleList', data).then(res => {
-        this.role_idArr = res.data.rows.map(item => ({
-          value: item.id,
-          label: item.role_name
-        }));
-      }).catch(error => {
-        this.$message({
-          type: 'warning',
-          message: '网络错误,请重试!'
-        });
-      })
-    },
-    //1.3更新工作区域
-    update_city_arr_id(value) {
-      console.log("工作区域ID已更新:", value);
-      this.form.city_arr_id = value;
-
-      console.log(this.form.city_arr_id);
-    },
-    //1.4更新籍贯
-    update_native_place_arr_id(value) {
-      console.log("籍贯ID已更新:", value);
-      this.form.native_place_arr_id = value;
-    },
-    //1.5更新详细地址
-    update_address_arr_id(value) {
-      console.log("详细地址ID已更新:", value);
-      this.form.address_arr_id = value;
-    },
-    //1.5重置表单
-    clearData() {
-
+    components: {
+        CityCascader, //城市级联选择器
     },
-    //表单收集 end ------------------------------------------------------------>
-    //2.提交表单 start ------------------------------------------------------------>
-    //2.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.photoUrl = res.data.imgUrl;//显示缩略图
-        this.form.avatar = res.data.imgUrl;//提供表单地址
-        console.log(res.data.imgUrl)
-      }).catch(() => {
-        this.$message({
-          type: 'warning',
-          message: '网络错误,请重试!'
-        });
-      })
-
-      // 阻止默认的上传行为
-      return false;
-    },
-    //2.2 删除图片
-    handleDelete() {
-      this.photoUrl = ''; // 清空图片 URL
-    },
-    //2.3 多文件上传
-    handleExceed(files, fileList) {
-      this.$message.warning(`当前限制选择 30 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
-    },
-    beforeRemove(file, fileList) {
-      console.log('file, fileList', file, fileList);
-      for (let item of fileList) {
-        this.form.other = this.form.other.filter(item => item !== file.url);
-      }
-      // return this.$confirm(`确定移除 ${file.name}?`);
-    },
-    //获取token
-    getTokenFromCookie() {
-      const name = "Admin-Token=";
-      const decodedCookie = decodeURIComponent(document.cookie);
-      const cookieArray = decodedCookie.split(';');
-      for (let i = 0; i < cookieArray.length; i++) {
-        let cookie = cookieArray[i].trim();
-        if (cookie.indexOf(name) === 0) {
-          return cookie.substring(name.length, cookie.length); // 返回 token
+    data() {
+        let self = this;
+        // 配置验证规则:用于表单验证
+        const validatePassword = (rule, value, callback) => {
+            if (value.length < 6) {
+                callback(new Error('密码不能低于6位!'))
+            } else {
+                callback()
+            }
         }
-      }
-      return ""; // 如果没有找到 token,返回空字符串
-    },
-    //设置token
-    setHeaders() {
-      this.token = this.getTokenFromCookie(); // 从 cookie 中获取 token
-      this.headers = { token: this.token }; // 设置 headers
-      console.log(this.headers); // 打印 headers
-    },
-    //上传成功以后
-    handleUploadSuccess(response) {
-      this.form.other.push(response.data.imgUrl)
-      console.log('上传成功:', response);
-      console.log(this.form.other);
-    },
-    //只能上传图片
-    beforeAvatarUpload1(file) {
-      const isLt2M = file.size / 1024 / 1024 < 2;
-
-      if (!isLt2M) {
-        this.$message.error('上传图片大小不能超过 2MB!');
-        return false;
-      }
-    },
-    //提交表单
-    addData() {
-
-      console.log(this.timeList)
-      //1.格式化时间戳
-      this.form.birthday = formatLocalDate(this.form.birthday);
-      if (this.form.long_time == 0) {
-        this.form.from_time = formatLocalDate(this.timeList[0]);
-        this.form.to_time = formatLocalDate(this.timeList[1]);
-      } else {
-        // this.form.from_time = "";
-        // this.form.to_time = "";
-        delete this.form.from_time;
-        delete this.form.to_time;
-      }
-      //判断用户工作区域是否为全国
-      if (this.isNational == 1) {
-        this.form.city_arr_id = [0];
-      }
-      console.log(this.form)
-      //2.开始验证
-      this.$refs.form.validate(valid => {
-        if (valid) {
-          //3.验证用户是否已经存在
-          this.$store.dispatch('userMember/verifyUserInfo', { user_name: this.form.user_name }).then(res => {
-
-            if (res.code == 0) {
-              //如果code为0表示用户不存在,提交表单
-
-
-              this.form.sszq = this.form.sszq[0]
-              console.log("this.form.sszq===", this.form.sszq)
-              console.log("this.form1===", this.form)
-
-              this.$store.dispatch('userMember/createUser', this.form).then(res => {
-
-                console.log("this.form222===res", res)
-
-                if (res.code == 200) {
-                  // console.log(res);
-                  this.$message({
-                    type: 'success',
-                    message: '用户添加成功!'
-                  });
-                  this.goList();
-                } else {
-                  this.$message({
-                    type: 'warning',
-                    message: res.message
-                  });
-                }
-              })
-            } else if (res.code == 200) {
-              //如果code==200 表示用户存在,阻止进一步提交
-              this.$message({
-                type: 'warning',
-                message: '该账号已被注册,请更换其他账号!'
-              });
+        const validatePhone = (rule, value, callback) => {
+            const phoneRegex = /^1[34578]\d{9}$/g; // 正则表达式验证手机号
+            if (!value || value.trim() === "") {
+                callback(new Error('该项不能为空!'));
+            } else if (!phoneRegex.test(value.trim())) {
+                callback(new Error('请输入有效的手机号')); // 更新错误信息
+            } else {
+                console.log("手机号验证通过!")
+                callback();
             }
-          }).catch(error => {
-            this.$message({
-              type: 'warning',
-              message: '网络错误,请重试!'
-            });
-          })
         }
-      })
-    },
-    //提交表单 start ------------------------------------------------------------>
-    //3.编辑表单 start ------------------------------------------------------------>
-    //获得网站列表
-    getWebsiteList(userWebList) {
-      this.$store.dispatch('pool/getWebList', { page: 1, pageSize: 1000 }).then(res => {
-        if (res.code != 200) {
-          this.$message.error(res.message)
-        } else {
-          for (let item of res.data.rows) {
-            let data = {
-              value: item.id,
-              label: item.website_name
+        const validateEmpty = (rule, value, callback) => {
+            if (!value || value.trim() === "") {
+                callback(new Error('该项不能为空!'));
+            } else {
+                callback();
             }
-            this.webSiteList.push(data)
-          }
-          // //如果有数据可以回显
-          // if (userWebList) {
-          //   console.log("显示编辑用户的所属网站!")
-          //   this.form.sszq = userWebList;
-          // }
         }
-      })
-    },
-    //获得用户信息
-    getUserInfo() {
-      // console.log("回显数据===");
-      this.$store.dispatch('userMember/getUser', { id: this.editId }).then(res => {
-
-
-        //   站点标识
-        this.form.sszq = Number(res.data.sszq);
-
-        this.form.type_id = res.data.type_id;
-        this.form.user_name = res.data.user_name;
-        this.form.role_id = res.data.role_id;
-        this.form.real_name = res.data.real_name;
-        this.form.mobile = res.data.mobile;
-        this.form.number = res.data.number;
-        this.photoUrl = res.data.avatar;
-        this.form.avatar = res.data.avatar;
-        this.form.id_card = res.data.id_card;
-        this.form.birthday = res.data.birthday;
-        this.form.address_arr_id = res.data.address_arr_id;
-
-        //判断用户工作区域是否为全国
-        if (typeof res.data.city_arr_id === 'string') {
-          this.form.city_arr_id = JSON.parse(res.data.city_arr_id);
+        const validateArray = (rule, value, callback) => {
+            if (value.length == 0) {
+                callback(new Error('该项不能为空!'))
+            } else {
+                callback()
+            }
         }
-        console.log(this.form.city_arr_id);
-        if (this.form.city_arr_id[0] == 0) {
-          this.isNational = 1
+        const validateTime = (rule, value, callback) => {
+            if (value === "NaN-NaN-NaN NaN:NaN:NaN") {
+                callback(new Error('该项不能为空!'))
+            } else {
+                callback()
+            }
         }
-
-        //还原有效期
-        if (res.data.long_time == 0) {
-          this.timeList = [
-            res.data.from_time,
-            res.data.to_time
-          ]
-          this.form.from_time = res.data.from_time;
-          this.form.to_time = res.data.to_time;
-          this.form.long_time = 0;
-        } else {
-          this.form.from_time = "";
-          this.form.to_time = "";
-          this.form.long_time = 1;
+        const validateTimeTo = (rule, value, callback) => {
+            // console.log(value)
+            // console.log(self.timeList)
+            // console.log(self.form.long_time)
+            if (self.timeList.length == 0 && self.form.long_time == 0) {
+                callback(new Error('该项不能为空!'))
+            } else {
+                callback()
+            }
         }
-        this.form.qq = res.data.qq;
-        this.form.email = res.data.email;
-        this.form.address = res.data.address;
-        this.form.zip_code = res.data.zip_code;
-        this.form.remark = res.data.remark;
-
-        this.form.native_place_arr_id = res.data.native_place_arr_id;
-        // 处理文件列表
-        const fileArrayString = res.data.other; // 假设这是一个字符串格式的数组
-        const fileArray = JSON.parse(fileArrayString); // 解析为数组
-        this.form.other.push(...fileArray); // 将解析出来的值 push 到 this.form.other
-        // 将文件列表赋值给 otherList,生成默认文件名
-        this.otherList = fileArray.map((url, index) => ({
-          name: `文件${index + 1}`, // 生成文件名
-          url: url,                // 文件的 URL
-          status: 'success'        // 设置状态为 success
-        }));
-
-        //获取所有网站列表
-        //this.getWebsiteList(res.data.sszq);
-
-
-      })
+        const validateIdcard = (rule, value, callback) => {
+            const idCardRegex = /^(?:\d{15}|\d{18}|\d{17}[\dXx])$/; // 正则表达式验证身份证号
+            if (!value || value.trim() === "") {
+                callback(new Error('该项不能为空!'));
+            } else if (!idCardRegex.test(value.trim())) {
+                callback(new Error('请输入有效的身份证号')); // 更新错误信息
+            } else {
+                console.log("身份证号验证通过!");
+                self.extractBirthdayFromIdcard();
+                callback();
+            }
+        }
+        return {
+            options_arr: [],
+            props_1: { multiple: true },//下拉多选
+            formLabelWidth: "120px",
+            editId: "",
+            uploadFileUrl: URL.baseUrl + "/public/uploadFile",//获得上传地址
+            headers: {},
+            website_tag_params: {//xx
+                keyword: "",//网站名称查询
+                website_column_id: [],//使用网系id查询
+                city_id: [],//使用城市id查询
+
+                page: 1,//当前是第几页
+                pageSize: 666666,//一共多少条
+                name: "",
+            },
+            form: {
+                // websiteTag_arr_id:[],    //站点标识下拉id onlyxx
+                websiteTag_arr_id: [],    //站点标识下拉id only
+                websiteTag_reg: "",
+                sszq: [], //站点标识下拉id
+                type_id: 4,//调研员
+                role_id: "",//角色id 
+                user_name: "",//登录账号
+                password: "",//密码
+                confirm_password: "",//确认密码
+                number: "",//调研员编号
+                real_name: "",//真实姓名
+                avatar: "",//照片
+                id_card: "",//身份证号
+                birthday: "",//出生年月
+                gender: "1",//性别
+                mobile: "",//手机号
+                native_place_arr_id: [],//籍贯
+                city_arr_id: [],//工作区域
+                address_arr_id: [],//详细地址
+                address: "",//详细地址门牌号
+                from_time: "",//有效期开始时间
+                to_time: "",//有效期结束时间
+                long_time: 0,//是否为长期 //长期1:长期 0:非长期
+                qq: "",//QQ
+                email: "",//电子邮箱
+                other: [],//相关资料
+                remark: "",//提示词
+                zip_code: "",//邮编
+                //sszq: [],//所属网站
+            },
+            timeList: [],//时间段
+            otherList: [],//相关资料列表
+            role_idArr: [],//角色id池
+            isNational: 0,//是否为全国
+            //网站列表
+            webSiteList: [],
+            //上传照片
+            photoUrl: '',
+            hovering: false, // 鼠标悬浮状态 悬浮时显示删除
+            //密码验证
+            capsTooltip1: false,
+            capsTooltip2: false,
+            passwordType1: 'password',
+            passwordType2: 'password',
+            //配置from表单验证规则
+            loginRules: {
+                //站点标识xx
+                websiteTag_arr_id: [{ type: 'array', required: true, trigger: 'blur', validator: validateArray }],
+                //1.角色id
+                role_id: [{ required: true, trigger: 'blur', validator: validateArray }],
+                //2.登录账号
+                user_name: [{ required: true, trigger: 'blur', validator: validatePhone }],
+                //3.密码和确认密码
+                password: [{ required: true, trigger: 'blur', validator: validatePassword }],
+                confirm_password: [{ required: true, trigger: 'blur', validator: validatePassword }],
+                //4.调研员编号
+                number: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+                //5.真实姓名
+                real_name: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+                //6.手机号
+                mobile: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+                //7.身份证号
+                id_card: [{ required: true, trigger: 'blur', validator: validateIdcard }],
+                //8.性别
+                gender: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+                //9.手机号
+                mobile: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+                //10.工作区域
+                city_arr_id: [{ required: true, trigger: 'blur', validator: validateArray }],
+                //11.照片
+                avatar: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+                //12.出生年月
+                birthday: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+                //13.有效期
+                timeList: [{ required: true, trigger: 'blur', validator: validateTimeTo }],
+                //14.网站选择
+                sszq: [{ required: true, trigger: 'blur', validator: validateArray }]
+            },
+            //时间跨度
+            pickerOptions: {
+                selectableRange: '1900-01-01 to 2100-12-31', // 允许选择的日期范围
+                // disabledDate(time) {
+                //   return time.getTime() < Date.now() - 86400000; // 禁用今天之前的日期
+                // },
+            },
+        };
     },
-    //修改用户
-    editData() {
-      //当有效期为长期的时候,去掉from_time和to_time字段
-      if (this.form.long_time == 0) {
-        this.form.from_time = formatLocalDate(this.timeList[0]);
-        this.form.to_time = formatLocalDate(this.timeList[1]);
-      } else {
-        // this.form.from_time = "";
-        // this.form.to_time = "";
-        delete this.form.from_time;
-        delete this.form.to_time;
-      }
-      this.$refs.form.validate(valid => {
-        if (valid) {
-          //1.验证用户是否存在
-          this.$store.dispatch('userMember/verifyUserInfo', { id: this.editId, user_name: this.form.user_name }).then(res => {
-            if (res.code == 0) {
-              console.log(this.form);
-              if (!Array.isArray(this.form.address_arr_id)) {
-                this.form.address_arr_id = JSON.parse(this.form.address_arr_id);
-              }
-              if (!Array.isArray(this.form.native_place_arr_id)) {
-                this.form.native_place_arr_id = JSON.parse(this.form.native_place_arr_id);
-              }
-              if (!Array.isArray(this.form.city_arr_id)) {
-                this.form.city_arr_id = JSON.parse(this.form.address_arr_id);
-              }
-              //this.form.address_arr_id = JSON.parse(this.form.address_arr_id);
-              //this.form.native_place_arr_id = JSON.parse(this.form.native_place_arr_id);
-              //this.form.city_arr_id = JSON.parse(this.form.address_arr_id);
-
-              //数组转换为数字
-              if (typeof (this.form.sszq) == 'number') {
-                this.form.sszq = this.form.sszq
-              } else {
-                this.form.sszq = this.form.sszq[0]
-              }
-
-              //2.设置修改的用户id
-              this.form.id = this.editId;
-              //判断用户工作区域是否为全国
-              if (this.isNational == 1) {
-                this.form.city_arr_id = [0];
-              }
-              //3.提交用户修改
-              //如果code为0表示用户不存在,提交表单
-              this.$store.dispatch('userMember/updateUser', this.form).then(res => {
-                console.log(res);
+    watch: {
+        // 同时监听多个属性
+        '$data': {
+            handler() {
+                this.form.user_name = "GR" + this.form.mobile.slice(-5) + this.form.id_card.slice(-5);
+            },
+            deep: true, // 深度监听对象变化
+            immediate: true // 初始化时立即执行一次
+        }
+    },
+    methods: {
+        //1.表单收集 start ------------------------------------------------------------>
+        //1.1切换密码框的显示与隐藏
+        showPwd(num) {
+            const passwordTypeKey = 'passwordType' + num; //动态生成 passwordType 的键
+            const passwordRefKey = 'password' + num; //动态生成 password 的引用
+            // 切换密码类型
+            if (this[passwordTypeKey] === 'password') {
+                this[passwordTypeKey] = ''; //显示密码
+            } else {
+                this[passwordTypeKey] = 'password'; //隐藏密码
+            }
+            // 使用 $nextTick 聚焦到对应的密码输入框
+            this.$nextTick(() => {
+                this.$refs[passwordRefKey].focus(); //聚焦到对应的密码输入框
+            });
+        },
+        //1.2获得角色列表池
+        getRoleList() {
+            let data = {
+                page: 1,
+                pageSize: 100
+            }
+            this.$store.dispatch('userRole/roleList', data).then(res => {
+                this.role_idArr = res.data.rows.map(item => ({
+                    value: item.id,
+                    label: item.role_name
+                }));
+            }).catch(error => {
+                this.$message({
+                    type: 'warning',
+                    message: '网络错误,请重试!'
+                });
+            })
+        },
+        //1.3更新工作区域
+        update_city_arr_id(value) {
+            console.log("工作区域ID已更新:", value);
+            this.form.city_arr_id = value;
+
+            console.log(this.form.city_arr_id);
+        },
+        //1.4更新籍贯
+        update_native_place_arr_id(value) {
+            console.log("籍贯ID已更新:", value);
+            this.form.native_place_arr_id = value;
+        },
+        //1.5更新详细地址
+        update_address_arr_id(value) {
+            console.log("详细地址ID已更新:", value);
+            this.form.address_arr_id = value;
+        },
+        //1.5重置表单
+        clearData() {
+
+        },
+        //表单收集 end ------------------------------------------------------------>
+        //2.提交表单 start ------------------------------------------------------------>
+        //2.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.photoUrl = res.data.imgUrl;//显示缩略图
+                this.form.avatar = res.data.imgUrl;//提供表单地址
+                console.log(res.data.imgUrl)
+            }).catch(() => {
                 this.$message({
-                  type: 'success',
-                  message: '用户添加成功!'
+                    type: 'warning',
+                    message: '网络错误,请重试!'
                 });
-                this.goList();
-              })
-            } else if (res.code == 200) {
-              //如果code==200 表示用户存在,阻止进一步提交
-              this.$message({
-                type: 'warning',
-                message: '该账号已被注册,请更换其他账号!'
-              });
+            })
+            // 阻止默认的上传行为
+            return false;
+        },
+        //2.2 删除图片
+        handleDelete() {
+            this.photoUrl = ''; // 清空图片 URL
+        },
+        //2.3 多文件上传
+        handleExceed(files, fileList) {
+            this.$message.warning(`当前限制选择 30 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
+        },
+        beforeRemove(file, fileList) {
+            console.log('file, fileList', file, fileList);
+            for (let item of fileList) {
+                this.form.other = this.form.other.filter(item => item !== file.url);
+            }
+            // return this.$confirm(`确定移除 ${file.name}?`);
+        },
+        //获取token
+        getTokenFromCookie() {
+            const name = "Admin-Token=";
+            const decodedCookie = decodeURIComponent(document.cookie);
+            const cookieArray = decodedCookie.split(';');
+            for (let i = 0; i < cookieArray.length; i++) {
+                let cookie = cookieArray[i].trim();
+                if (cookie.indexOf(name) === 0) {
+                    return cookie.substring(name.length, cookie.length); // 返回 token
+                }
+            }
+            return ""; // 如果没有找到 token,返回空字符串
+        },
+        //设置token
+        setHeaders() {
+            this.token = this.getTokenFromCookie(); // 从 cookie 中获取 token
+            this.headers = { token: this.token }; // 设置 headers
+            console.log(this.headers); // 打印 headers
+        },
+        //上传成功以后
+        handleUploadSuccess(response) {
+            this.form.other.push(response.data.imgUrl)
+            console.log('上传成功:', response);
+            console.log(this.form.other);
+        },
+        //只能上传图片
+        beforeAvatarUpload1(file) {
+            const isLt2M = file.size / 1024 / 1024 < 2;
+
+            if (!isLt2M) {
+                this.$message.error('上传图片大小不能超过 2MB!');
+                return false;
+            }
+        },
+        //提交表单
+        addData() {
+            console.log(this.form)
+            //2.开始验证
+            this.$refs.form.validate(valid => {
+                if (valid) {
+                    console.log(this.timeList)
+                    //1.格式化时间戳
+                    this.form.birthday = formatLocalDate(this.form.birthday);
+                    if (this.form.long_time == 0) {
+                        this.form.from_time = formatLocalDate(this.timeList[0]);
+                        this.form.to_time = formatLocalDate(this.timeList[1]);
+                    } else {
+                        // this.form.from_time = "";
+                        // this.form.to_time = "";
+                        delete this.form.from_time;
+                        delete this.form.to_time;
+                    }
+                    //判断用户工作区域是否为全国
+                    if (this.isNational == 1) {
+                        this.form.city_arr_id = [0];
+                    }
+                    //如果没选择日期,把日期改为空字符串
+                    if (this.form.birthday == "NaN-NaN-NaN NaN:NaN:NaN") {
+                        this.form.birthday = "";
+                    }
+                    if (this.form.from_time == "NaN-NaN-NaN NaN:NaN:NaN") {
+                        this.form.from_time = "";
+                    }
+                    if (this.form.to_time == "NaN-NaN-NaN NaN:NaN:NaN") {
+                        this.form.to_time = "";
+                    }
+                    //3.验证用户是否已经存在
+                    this.$store.dispatch('userMember/verifyUserInfo', { user_name: this.form.user_name }).then(res => {
+                        if (res.code == 0) {
+                            //如果code为0表示用户不存在,提交表单
+                            this.form.sszq = this.form.sszq[0]
+                            console.log("this.form.sszq===", this.form.sszq)
+                            console.log("this.form1===", this.form)
+                            this.$store.dispatch('userMember/createUser', this.form).then(res => {
+                                console.log("this.form222===res", res)
+                                if (res.code == 200) {
+                                    // console.log(res);
+                                    this.$message({
+                                        type: 'success',
+                                        message: '用户添加成功!'
+                                    });
+                                    this.goList();
+                                } else {
+                                    this.$message({
+                                        type: 'warning',
+                                        message: res.message
+                                    });
+                                }
+                            })
+                        } else if (res.code == 200) {
+                            //如果code==200 表示用户存在,阻止进一步提交
+                            this.$message({
+                                type: 'warning',
+                                message: '该账号已被注册,请更换其他账号!'
+                            });
+                        }
+                    }).catch(error => {
+                        this.$message({
+                            type: 'warning',
+                            message: '网络错误,请重试!'
+                        });
+                    })
+                }
+            })
+        },
+        //提交表单 start ------------------------------------------------------------>
+        //3.编辑表单 start ------------------------------------------------------------>
+        //获得网站列表
+        getWebsiteList(userWebList) {
+            this.$store.dispatch('pool/getWebList', { page: 1, pageSize: 1000 }).then(res => {
+                if (res.code != 200) {
+                    this.$message.error(res.message)
+                } else {
+                    for (let item of res.data.rows) {
+                        let data = {
+                            value: item.id,
+                            label: item.website_name
+                        }
+                        this.webSiteList.push(data)
+                    }
+                    // //如果有数据可以回显
+                    // if (userWebList) {
+                    //   console.log("显示编辑用户的所属网站!")
+                    //   this.form.sszq = userWebList;
+                    // }
+                }
+            })
+        },
+        //获得用户信息
+        getUserInfo() {
+            // console.log("回显数据===");
+            this.$store.dispatch('userMember/getUser', { id: this.editId }).then(res => {
+                //   站点标识
+                this.form.sszq = Number(res.data.sszq);
+                this.form.type_id = res.data.type_id;
+                this.form.user_name = res.data.user_name;
+                this.form.role_id = res.data.role_id;
+                this.form.real_name = res.data.real_name;
+                this.form.mobile = res.data.mobile;
+                this.form.number = res.data.number;
+                this.photoUrl = res.data.avatar;
+                this.form.avatar = res.data.avatar;
+                this.form.id_card = res.data.id_card;
+                this.form.birthday = res.data.birthday;
+                this.form.address_arr_id = res.data.address_arr_id;
+                //判断用户工作区域是否为全国
+                if (typeof res.data.city_arr_id === 'string') {
+                    this.form.city_arr_id = JSON.parse(res.data.city_arr_id);
+                }
+                console.log(this.form.city_arr_id);
+                if (this.form.city_arr_id[0] == 0) {
+                    this.isNational = 1
+                }
+                //还原有效期
+                if (res.data.long_time == 0) {
+                    this.timeList = [
+                        res.data.from_time,
+                        res.data.to_time
+                    ]
+                    this.form.from_time = res.data.from_time;
+                    this.form.to_time = res.data.to_time;
+                    this.form.long_time = 0;
+                } else {
+                    this.form.from_time = "";
+                    this.form.to_time = "";
+                    this.form.long_time = 1;
+                }
+                this.form.qq = res.data.qq;
+                this.form.email = res.data.email;
+                this.form.address = res.data.address;
+                this.form.zip_code = res.data.zip_code;
+                this.form.remark = res.data.remark;
+
+                this.form.native_place_arr_id = res.data.native_place_arr_id;
+                // 处理文件列表
+                const fileArrayString = res.data.other; // 假设这是一个字符串格式的数组
+                const fileArray = JSON.parse(fileArrayString); // 解析为数组
+                this.form.other.push(...fileArray); // 将解析出来的值 push 到 this.form.other
+                // 将文件列表赋值给 otherList,生成默认文件名
+                this.otherList = fileArray.map((url, index) => ({
+                    name: `文件${index + 1}`, // 生成文件名
+                    url: url,                // 文件的 URL
+                    status: 'success'        // 设置状态为 success
+                }));
+                //获取所有网站列表
+                //this.getWebsiteList(res.data.sszq);
+            })
+        },
+        //修改用户
+        editData() {
+            //当有效期为长期的时候,去掉from_time和to_time字段
+            if (this.form.long_time == 0) {
+                this.form.from_time = formatLocalDate(this.timeList[0]);
+                this.form.to_time = formatLocalDate(this.timeList[1]);
+            } else {
+                // this.form.from_time = "";
+                // this.form.to_time = "";
+                delete this.form.from_time;
+                delete this.form.to_time;
             }
-          }).catch(error => {
-            this.$message({
-              type: 'warning',
-              message: '网络错误,请重试!'
+            this.$refs.form.validate(valid => {
+                if (valid) {
+                    //1.验证用户是否存在
+                    this.$store.dispatch('userMember/verifyUserInfo', { id: this.editId, user_name: this.form.user_name }).then(res => {
+                        if (res.code == 0) {
+                            console.log(this.form);
+                            if (!Array.isArray(this.form.address_arr_id)) {
+                                this.form.address_arr_id = JSON.parse(this.form.address_arr_id);
+                            }
+                            if (!Array.isArray(this.form.native_place_arr_id)) {
+                                this.form.native_place_arr_id = JSON.parse(this.form.native_place_arr_id);
+                            }
+                            if (!Array.isArray(this.form.city_arr_id)) {
+                                this.form.city_arr_id = JSON.parse(this.form.address_arr_id);
+                            }
+                            //this.form.address_arr_id = JSON.parse(this.form.address_arr_id);
+                            //this.form.native_place_arr_id = JSON.parse(this.form.native_place_arr_id);
+                            //this.form.city_arr_id = JSON.parse(this.form.address_arr_id);
+                            //数组转换为数字
+                            if (typeof (this.form.sszq) == 'number') {
+                                this.form.sszq = this.form.sszq
+                            } else {
+                                this.form.sszq = this.form.sszq[0]
+                            }
+                            //2.设置修改的用户id
+                            this.form.id = this.editId;
+                            //判断用户工作区域是否为全国
+                            if (this.isNational == 1) {
+                                this.form.city_arr_id = [0];
+                            }
+                            //3.提交用户修改
+                            //如果code为0表示用户不存在,提交表单
+                            this.$store.dispatch('userMember/updateUser', this.form).then(res => {
+                                console.log(res);
+                                this.$message({
+                                    type: 'success',
+                                    message: '用户添加成功!'
+                                });
+                                this.goList();
+                            })
+                        } else if (res.code == 200) {
+                            //如果code==200 表示用户存在,阻止进一步提交
+                            this.$message({
+                                type: 'warning',
+                                message: '该账号已被注册,请更换其他账号!'
+                            });
+                        }
+                    }).catch(error => {
+                        this.$message({
+                            type: 'warning',
+                            message: '网络错误,请重试!'
+                        });
+                    })
+                }
+            })
+        },
+        //重置密码
+        resetPassword() {
+            let password = Math.random().toString(36).slice(-6); // 随机生成6个字母的组合
+            this.$store.dispatch('userMember/resetPassword', { id: this.editId, password: password }).then(res => {
+                if (res.code == 200) {
+                    this.$message({
+                        type: 'success',
+                        message: '密码重置为:' + password
+                    });
+                }
+            }).catch(() => {
+                this.$message({
+                    type: 'warning',
+                    message: '网络错误,请重试!'
+                });
+            })
+        },
+        //编辑表单 end ------------------------------------------------------------>
+        goList() {
+            this.$router.push({
+                path: '/userList',
             });
-          })
-        }
-      })
+        },
+        //提取身份证号中的出生日期
+        extractBirthdayFromIdcard() {
+            let idCard = this.form.id_card;
+            // 1. 取出身份证中的生日部分,例如 "20250129"
+            let birthStr = idCard.substring(6, 14);
+            // 2. 截取年、月、日
+            let year = birthStr.substring(0, 4);    // 2025
+            let month = birthStr.substring(4, 6);   // 01
+            let day = birthStr.substring(6, 8);     // 29
+            // 3. 拼接成需要的格式 "YYYY-MM-DD 00:00:00"
+            let birthDateTime = `${year}-${month}-${day} 00:00:00`;
+            this.form.birthday = birthDateTime;
+        },
+        get_website_tag_arr_fun() { //得到站点标识所有内容xx
+            this.$store.dispatch('pool/get_website_tag_arr_actions', this.website_tag_params).then(res => {
+                // console.log("res.data.listres.data.list",res.data.list)
+                res.data.list.forEach((per_obj) => {
+                    let new_per = {
+                        label: per_obj.name,
+                        value: per_obj.id,
+                    }
+                    this.options_arr.push(new_per)
+                })
+                // console.log("get_website_tag_arr_funget_website_tag_arr_fun")
+                // console.log("get_website_tag_arr_funget_website_tag_arr_fun",this.options_arr)
+            })
+        },
     },
-    //重置密码
-    resetPassword() {
-      let password = Math.random().toString(36).slice(-6); // 随机生成6个字母的组合
-
-      this.$store.dispatch('userMember/resetPassword', { id: this.editId, password: password }).then(res => {
-        if (res.code == 200) {
-          this.$message({
-            type: 'success',
-            message: '密码重置为:' + password
-          });
+    mounted() {
+        this.get_website_tag_arr_fun()//得到站点标识所有内容xx
+        // console.log("this.get_website_tag_arr_fun()==xx",this.get_website_tag_arr_fun())
+        this.getRoleList();
+        //判断是新建还是回显
+        if (this.$route.query.id != undefined) {
+            this.editId = this.$route.query.id;
+            console.log("编辑用户!")
+            this.getUserInfo();
+        } else {
+            console.log("添加用户!")
+            //获取所有网站列表
+            this.getWebsiteList();
         }
-      }).catch(() => {
-        this.$message({
-          type: 'warning',
-          message: '网络错误,请重试!'
-        });
-      })
-    },
-    //编辑表单 end ------------------------------------------------------------>
-    goList() {
-      this.$router.push({
-        path: '/userList',
-      });
-    },
-    //提取身份证号中的出生日期
-    extractBirthdayFromIdcard() {
-      let idCard = this.form.id_card;
-      // 1. 取出身份证中的生日部分,例如 "20250129"
-      let birthStr = idCard.substring(6, 14);
-      // 2. 截取年、月、日
-      let year = birthStr.substring(0, 4);    // 2025
-      let month = birthStr.substring(4, 6);   // 01
-      let day = birthStr.substring(6, 8);     // 29
-      // 3. 拼接成需要的格式 "YYYY-MM-DD 00:00:00"
-      let birthDateTime = `${year}-${month}-${day} 00:00:00`;
-      this.form.birthday = birthDateTime;
-    },
-
-
-
-    get_website_tag_arr_fun() { //得到站点标识所有内容xx
-      this.$store.dispatch('pool/get_website_tag_arr_actions', this.website_tag_params).then(res => {
-        // console.log("res.data.listres.data.list",res.data.list)
-
-        res.data.list.forEach((per_obj) => {
-
-          let new_per = {
-            label: per_obj.name,
-            value: per_obj.id,
-          }
-
-          this.options_arr.push(new_per)
-
-        })
-        // console.log("get_website_tag_arr_funget_website_tag_arr_fun")
-        // console.log("get_website_tag_arr_funget_website_tag_arr_fun",this.options_arr)
-      })
-
-    },
-
-
-  },
-
-
-
-
-
-  mounted() {
-
-    this.get_website_tag_arr_fun()//得到站点标识所有内容xx
-
-    // console.log("this.get_website_tag_arr_fun()==xx",this.get_website_tag_arr_fun())
-
-    this.getRoleList();
-    //判断是新建还是回显
-    if (this.$route.query.id != undefined) {
-      this.editId = this.$route.query.id;
-      console.log("编辑用户!")
-      this.getUserInfo();
-    } else {
-      console.log("添加用户!")
-      //获取所有网站列表
-      this.getWebsiteList();
+        //设置token
+        this.setHeaders(); // 在组件挂载时设置 headers
     }
-    //设置token
-    this.setHeaders(); // 在组件挂载时设置 headers
-  }
 };
 </script>
 
 <style scoped lang="less">
 .PasswordBox {
-  display: flex;
-  align-items: center;
-
-  .el-form-item {
-    flex: 1;
-  }
-
-  .PasswordTitle {
-    width: 120px;
-    text-align: right;
-    margin-right: 10px;
-    margin-bottom: 22px;
-  }
-
-  .PasswordBody {
-    flex: 1;
     display: flex;
     align-items: center;
-  }
-
-  .show-pwd {
-    margin-left: 10px;
-  }
+    .el-form-item {
+        flex: 1;
+    }
+    .PasswordTitle {
+        width: 120px;
+        text-align: right;
+        margin-right: 10px;
+        margin-bottom: 22px;
+    }
+    .PasswordBody {
+        flex: 1;
+        display: flex;
+        align-items: center;
+    }
+    .show-pwd {
+        margin-left: 10px;
+    }
 }
-
 .longTimeCheckbox {
-  margin-left: 10px;
+    margin-left: 10px;
 }
-
 //执行v-deep穿透scope选择器 start------------------------------------------------------------>*/
 ::v-deep .custom-form-item>.el-form-item__label {
-  line-height: 140px !important;
+    line-height: 140px !important;
 }
-
 ::v-deep .custom-textarea .el-textarea__inner {
-  resize: none;
-  /* 禁止用户拖拽调整大小 */
+    resize: none;
+    /* 禁止用户拖拽调整大小 */
 }
-
 ::v-deep .custom-align-right .el-form-item__label {
-  text-align: right;
-  /* 设置标签文字右对齐 */
+    text-align: right;
+    /* 设置标签文字右对齐 */
 }
-
 ::v-deep .el-select {
-  width: 100%;
-  /* 禁止用户拖拽调整大小 */
+    width: 100%;
+    /* 禁止用户拖拽调整大小 */
 }
-
 ::v-deep .el-upload-list__item {
-  width: 15%;
-  float: left;
-  margin-right: 20px;
+    width: 15%;
+    float: left;
+    margin-right: 20px;
 }
-
-//执行v-deep穿透scope选择器 end------------------------------------------------------------>*/</style>
+//执行v-deep穿透scope选择器 end------------------------------------------------------------>*/
+</style>

+ 3 - 3
src/views/role/creatUser.vue

@@ -26,7 +26,7 @@
 // 引入组件
 import tableTitle from './components/tableTitle';
 import userAdmin from './components/userAdmin'; // 引入管理员组件
-import userInvestigate from './components/userInvestigate'; // 引入调研员组件
+import userInvestigate from './components/userInvestigate'; // 引入工作人员组件
 import userDefault from './components/userDefault'; // 引入个人会员组件
 import userEnterprise from './components/userEnterprise'; // 引入企业会员组件
 import userPolitician from './components/userPolitician'; // 引入政务会员组件
@@ -37,7 +37,7 @@ export default {
   components: {
     tableTitle,
     userAdmin, // 注册管理员组件
-    userInvestigate, // 注册调研员组件
+    userInvestigate, // 注册工作人员组件
     userDefault, // 注册个人会员组件
     userEnterprise, // 注册企业会员组件
     userPolitician // 注册政务会员组件
@@ -48,7 +48,7 @@ export default {
       userType: "10000", // 用户类型
       radioOptions: [
         { label: '管理员', value: '10000' },
-        { label: '调研员', value: '4' },
+        { label: '工作人员', value: '4' },
         { label: '个人会员', value: '1' },
         { label: '企业会员', value: '3' },
         { label: '政务会员', value: '2' }

+ 1 - 1
src/views/website/categoryList.vue

@@ -843,4 +843,4 @@ export default {
   }
 }
 
-//表单微调 end------------------------------------------------------------>*/</style>
+//表单微调 end------------------------------------------------------------>*/</style>