Jing преди 3 седмици
родител
ревизия
87af881c6f
променени са 3 файла, в които са добавени 577 реда и са изтрити 542 реда
  1. 265 272
      src/views/role/components/userDefault.vue
  2. 53 5
      src/views/role/components/userEnterprise.vue
  3. 259 265
      src/views/role/components/userInvestigate.vue

+ 265 - 272
src/views/role/components/userDefault.vue

@@ -1,17 +1,14 @@
 <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">
+      <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 v-for="item in role_idArr" :key="item.value" :label="item.label" :value="item.value">
                 </el-option>
               </el-select>
             </div>
@@ -20,22 +17,13 @@
           <el-form-item label="登录账号:" :label-width="formLabelWidth" prop="user_name" class="custom-align-right">
             <el-input v-model="form.user_name" autocomplete="off" placeholder="请输入登录账号.."></el-input>
           </el-form-item>
-          <div v-if="editId==''">
+          <div v-if="editId == ''">
             <!--新密码 start------------------------------------------>
             <div class="PasswordBox">
-              <el-form-item prop="password" label="登录密码:"  class="custom-align-right">
+              <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"
-                  />
+                  <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>
@@ -45,19 +33,10 @@
             <!--新密码 end------------------------------------------>
             <!--新密码 start------------------------------------------>
             <div class="PasswordBox">
-              <el-form-item prop="confirm_password" label="确认密码:"  class="custom-align-right">
+              <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"
-                  />
+                  <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>
@@ -69,17 +48,14 @@
           <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">
+          <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"
-                >
+                <el-upload class="avatar-uploader" action="#" :show-file-list="false"
+                  :before-upload="beforeAvatarUpload">
                   <!-- 预览图片 -->
                   <img v-if="photoUrl" :src="photoUrl" class="avatar">
                   <!-- 上传图标 -->
@@ -103,31 +79,23 @@
             <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 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-radio v-model="form.gender" label="2">女</el-radio>
           </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="timeList" class="custom-align-right" v-if="form.long_time==0">
-            <el-date-picker
-              v-model="timeList"
-              type="daterange"
-              range-separator="至"
-              start-placeholder="开始日期"
-              end-placeholder="结束日期"
-              :picker-options="pickerOptions">
+          <el-form-item label="有效期:" :label-width="formLabelWidth" prop="timeList" class="custom-align-right"
+            v-if="form.long_time == 0">
+            <el-date-picker v-model="timeList" type="daterange" 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-checkbox v-model="form.long_time" :true-label="1" :false-label="0"
+              class="longTimeCheckbox">无限期</el-checkbox>
           </el-form-item>
 
 
@@ -136,30 +104,27 @@
 
           <div class="timeBox" v-else>
             <div class="timeTitle"><span>*</span>有效期:</div>
-            <el-date-picker
-              type="daterange"
-              :disabled="form.long_time === 1"
-              range-separator="至"
-              start-placeholder="开始日期"
-              end-placeholder="结束日期"
-              :picker-options="pickerOptions">
+            <el-date-picker 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-checkbox v-model="form.long_time" :true-label="1" :false-label="0"
+              class="longTimeCheckbox">无限期</el-checkbox>
           </div>
 
 
-            
-            <el-form-item label="站点标识:" :label-width="formLabelWidth" prop="sszq" class="custom-align-right">
-             
+
+          <el-form-item label="站点标识:" :label-width="formLabelWidth" prop="sszq" class="custom-align-right">
+
             <el-cascader v-model="form.sszq" :options="options_arr" filterable clearable></el-cascader>
- 
+
           </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>
+            <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>
@@ -178,18 +143,10 @@
           </el-form-item>
 
           <el-form-item label="相关资料:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <el-upload
-              class="upload-demo"
-              :action="uploadFileUrl"
-              :headers="headers"
-              :on-preview="handlePreview"
-              :on-remove="handleRemove"
-              :before-remove="beforeRemove"
-              :on-success="handleUploadSuccess"
-              multiple
-              :limit="30"
-              :on-exceed="handleExceed"
-              :file-list="otherList">
+            <el-upload class="upload-demo" :action="uploadFileUrl" :headers="headers" :on-preview="handlePreview"
+              :on-remove="handleRemove" :before-remove="beforeRemove" :on-success="handleUploadSuccess" multiple
+              :limit="30" :on-exceed="handleExceed" :file-list="otherList" list-type="picture"
+              :before-upload="beforeAvatarUpload">
               <el-button size="small" type="primary">点击上传</el-button>
               <div slot="tip" class="el-upload__tip">每张图片最大1MB,最多上传30张图片。</div>
             </el-upload>
@@ -210,12 +167,12 @@
            -->
         </div>
       </el-form>
-    </div>  
+    </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>
+      <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>
@@ -245,7 +202,7 @@ export default {
         callback()
       }
     }
-    const validateEmpty = (rule,value,callback) => {
+    const validateEmpty = (rule, value, callback) => {
       console.log(value)
       if (!value || value.trim() === "") {
         callback(new Error('该项不能为空!'));
@@ -253,28 +210,28 @@ export default {
         callback();
       }
     }
-    const validateArray = (rule,value,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"){
+    const validateTime = (rule, value, callback) => {
+      if (value === "NaN-NaN-NaN NaN:NaN:NaN") {
         callback(new Error('该项不能为空!'))
-      }else{
+      } else {
         callback()
       }
     }
-    const validateTimeTo = (rule,value,callback) => {
-      if(self.timeList.length == 0&&self.form.long_time==0){
+    const validateTimeTo = (rule, value, callback) => {
+      if (self.timeList.length == 0 && self.form.long_time == 0) {
         callback(new Error('该项不能为空!'))
-      }else{
+      } else {
         callback()
       }
     }
-    const validateIdcard = (rule,value,callback) => {
+    const validateIdcard = (rule, value, callback) => {
       const idCardRegex = /^(?:\d{15}|\d{18}|\d{17}[\dXx])$/; // 正则表达式验证身份证号
       if (!value || value.trim() === "") {
         callback(new Error('该项不能为空!'));
@@ -288,69 +245,69 @@ export default {
     }
     return {
 
-      options_arr:[],
+      options_arr: [],
 
-      formLabelWidth:"120px",
-      editId:"",
-      uploadFileUrl:URL.baseUrl+"/public/uploadFile",//获得上传地址
+      formLabelWidth: "120px",
+      editId: "",
+      uploadFileUrl: URL.baseUrl + "/public/uploadFile",//获得上传地址
       headers: {},
 
 
 
 
-      website_tag_params:{//xx
-            keyword:"",//网站名称查询
-            website_column_id:[],//使用网系id查询
-            city_id:[],//使用城市id查询
+      website_tag_params: {//xx
+        keyword: "",//网站名称查询
+        website_column_id: [],//使用网系id查询
+        city_id: [],//使用城市id查询
+
+        page: 1,//当前是第几页
+        pageSize: 666666,//一共多少条
+        name: "",
+      },
 
-            page:1,//当前是第几页
-            pageSize:666666,//一共多少条
-            name:"",
-       },
 
 
+      form: {
 
-      form:{
 
-                
-        websiteTag_arr_id:[],    //站点标识下拉id only
-        websiteTag_reg:"",    
-        sszq:"", //站点标识下拉id
-        
+        websiteTag_arr_id: [],    //站点标识下拉id only
+        websiteTag_reg: "",
+        sszq: "", //站点标识下拉id
 
 
 
-        type_id:1,//个人会员
-        role_id:"",//角色id 
-        user_name:"",//登录账号
-        password:"",//密码
-        confirm_password:"",//确认密码
-        real_name:"",//真实姓名
-        avatar:"",//照片
-        id_card:"",//身份证号
-        birthday:"",//出生年月
-        gender:"1",//性别
-        mobile:"",//手机号
-        native_place_arr_id:[],//籍贯
-        address_arr_id:[],//详细地址
-        address:"",//详细地址
-        from_time:"",//有效期开始时间
-        to_time:"",//有效期结束时间
-        long_time:0,//是否为长期 //长期1:长期 0:非长期
-        qq:"",//QQ
-        email:"",//电子邮箱
-        other:[],//相关资料
-        remark:"",//提示词
-        zip_code:"",//邮编
-      //   sszq:[]//网站选择
+
+        type_id: 1,//个人会员
+        role_id: "",//角色id 
+        user_name: "",//登录账号
+        password: "",//密码
+        confirm_password: "",//确认密码
+        real_name: "",//真实姓名
+        avatar: "",//照片
+        id_card: "",//身份证号
+        birthday: "",//出生年月
+        gender: "1",//性别
+        mobile: "",//手机号
+        native_place_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池
+      timeList: [],//时间段
+      otherList: [],//相关资料列表
+      role_idArr: [],//角色id池
       //网站列表
       webSiteList: [],
       //上传照片
-      photoUrl:'',
+      photoUrl: '',
       hovering: false, // 鼠标悬浮状态 悬浮时显示删除
       //密码验证
       capsTooltip1: false,
@@ -358,10 +315,10 @@ export default {
       passwordType1: 'password',
       passwordType2: 'password',
       //配置from表单验证规则
-      loginRules: { 
+      loginRules: {
 
-      //   站点标识xx
-      websiteTag_arr_id: [{ type:'array',required: true, trigger: 'blur', validator: validateArray }],
+        //   站点标识xx
+        websiteTag_arr_id: [{ type: 'array', required: true, trigger: 'blur', validator: validateArray }],
 
 
         //1.角色id
@@ -386,7 +343,7 @@ export default {
         //11.出生年月
         birthday: [{ required: true, trigger: 'blur', validator: validateTime }],
         //12.有效期
-        timeList:[{ required: true, trigger: 'blur', validator: validateTimeTo }],
+        timeList: [{ required: true, trigger: 'blur', validator: validateTimeTo }],
         //13.网站选择
         sszq: [{ required: true, trigger: 'blur', validator: validateArray }]
       },
@@ -417,17 +374,17 @@ export default {
       });
     },
     //1.2获得角色列表池
-    getRoleList(){
+    getRoleList() {
       let data = {
-        page:1,
-        pageSize:100
+        page: 1,
+        pageSize: 100
       }
-      this.$store.dispatch('userRole/roleList',data).then(res=>{
+      this.$store.dispatch('userRole/roleList', data).then(res => {
         this.role_idArr = res.data.rows.map(item => ({
           value: item.id,
-          label: item.role_name 
+          label: item.role_name
         }));
-      }).catch(error=>{
+      }).catch(error => {
         this.$message({
           type: 'warning',
           message: '网络错误,请重试!'
@@ -435,18 +392,18 @@ export default {
       })
     },
     //1.4更新籍贯
-    update_native_place_arr_id(value){
+    update_native_place_arr_id(value) {
       console.log("籍贯ID已更新:", value);
       this.form.native_place_arr_id = value;
     },
     //1.5更新详细地址
-    update_address_arr_id(value){
+    update_address_arr_id(value) {
       console.log("详细地址ID已更新:", value);
       this.form.address_arr_id = value;
     },
     //1.5重置表单
-    clearData(){
-     
+    clearData() {
+
     },
     //表单收集 end ------------------------------------------------------------>
     //2.提交表单 start ------------------------------------------------------------>
@@ -468,7 +425,7 @@ export default {
       const formData = new FormData();
       formData.append('file', file);
 
-      this.$store.dispatch('pool/uploadFile',formData).then(res=> {
+      this.$store.dispatch('pool/uploadFile', formData).then(res => {
         this.photoUrl = res.data.imgUrl;//显示缩略图
         this.form.avatar = res.data.imgUrl;//提供表单地址
         console.log(res.data.imgUrl)
@@ -497,7 +454,7 @@ export default {
       this.$message.warning(`当前限制选择 30 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
     },
     beforeRemove(file, fileList) {
-      return this.$confirm(`确定移除 ${ file.name }?`);
+      return this.$confirm(`确定移除 ${file.name}?`);
     },
     //获取token
     getTokenFromCookie() {
@@ -524,17 +481,32 @@ export default {
       console.log('上传成功:', response);
       console.log(this.form.other);
     },
+    //只能上传图片
+    beforeAvatarUpload(file) {
+      const isJPG = file.type === 'image/jpeg';
+      const isPNG = file.type === 'image/png';
+      const isLt1M = file.size / 1024 / 1024 < 1;
+
+      if (!isJPG && !isPNG) {
+        this.$message.error('上传图片只能是 JPG 或 PNG 格式!');
+        return false;
+      }
+      if (!isLt1M) {
+        this.$message.error('上传图片大小不能超过 1MB!');
+        return false;
+      }
+    },
     //提交表单
-    addData(){
+    addData() {
 
-      this.form.sszq=this.form.sszq[0]
+      this.form.sszq = this.form.sszq[0]
 
       //1.格式化时间戳
       this.form.birthday = formatLocalDate(this.form.birthday);
-      if(this.form.long_time==0){
+      if (this.form.long_time == 0) {
         this.form.from_time = formatLocalDate(this.timeList[0]);
         this.form.to_time = formatLocalDate(this.timeList[1]);
-      }else{
+      } else {
         this.form.from_time = "";
         this.form.to_time = "";
         delete this.form.from_time;
@@ -544,32 +516,32 @@ export default {
       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){
+          this.$store.dispatch('userMember/verifyUserInfo', { user_name: this.form.user_name }).then(res => {
+            if (res.code == 0) {
               //如果code为0表示用户不存在,提交表单
-              this.$store.dispatch('userMember/createUser',this.form).then(res=>{
-                if(res.code==200){
+              this.$store.dispatch('userMember/createUser', this.form).then(res => {
+                if (res.code == 200) {
                   console.log(res);
                   this.$message({
                     type: 'success',
                     message: '用户添加成功!'
                   });
                   this.goList();
-                }else{
+                } else {
                   this.$message({
                     type: 'warning',
                     message: res.message
                   });
                 }
               })
-            }else if(res.code==200){
+            } else if (res.code == 200) {
               //如果code==200 表示用户存在,阻止进一步提交
               this.$message({
                 type: 'warning',
                 message: '该账号已被注册,请更换其他账号!'
               });
             }
-          }).catch(error=>{
+          }).catch(error => {
             this.$message({
               type: 'warning',
               message: '网络错误,请重试!'
@@ -581,15 +553,15 @@ export default {
     //提交表单 start ------------------------------------------------------------>
     //3.编辑表单 start ------------------------------------------------------------>
     //获得网站列表
-    getWebsiteList(){
-      this.$store.dispatch('pool/getWebList',{page:1,pageSize:1000}).then(res=>{
-        if(res.code!=200){
+    getWebsiteList() {
+      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){
+        } else {
+          for (let item of res.data.rows) {
             let data = {
-              value:item.id,
-              label:item.website_name
+              value: item.id,
+              label: item.website_name
             }
             this.webSiteList.push(data)
           }
@@ -597,8 +569,8 @@ export default {
       })
     },
     //获得用户信息
-    getUserInfo(){
-      this.$store.dispatch('userMember/getUser',{id:this.editId}).then(res=>{
+    getUserInfo() {
+      this.$store.dispatch('userMember/getUser', { id: this.editId }).then(res => {
         console.log(res);
         //回显数据
         this.form.type_id = res.data.type_id;
@@ -618,7 +590,7 @@ export default {
 
 
         //还原有效期
-        if(res.data.long_time==0){
+        if (res.data.long_time == 0) {
           this.timeList = [
             res.data.from_time,
             res.data.to_time
@@ -626,7 +598,7 @@ export default {
           this.form.from_time = res.data.from_time;
           this.form.to_time = res.data.to_time;
           this.form.long_time = 0;
-        }else{
+        } else {
           this.form.from_time = "";
           this.form.to_time = "";
           this.form.long_time = 1;
@@ -647,7 +619,7 @@ export default {
           url: url,                // 文件的 URL
           status: 'success'        // 设置状态为 success
         }));
-      }).catch(error=>{
+      }).catch(error => {
         this.$message({
           type: 'warning',
           message: '网络错误,请重试!'
@@ -655,36 +627,36 @@ export default {
       })
     },
     //修改用户
-    editData(){
+    editData() {
       //1.格式化时间戳
       this.form.birthday = formatLocalDate(this.form.birthday);
-      if(this.form.long_time==0){
+      if (this.form.long_time == 0) {
         this.form.from_time = formatLocalDate(this.timeList[0]);
         this.form.to_time = formatLocalDate(this.timeList[1]);
-      }else{
+      } else {
         this.form.from_time = "";
         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){
+          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(this.form.native_place_arr_id == ""){
+
+              if (this.form.native_place_arr_id == "") {
                 this.form.native_place_arr_id = [];
-              }else{
+              } else {
                 this.form.native_place_arr_id = JSON.parse(this.form.native_place_arr_id);
               }
 
-              this.form.sszq=this.form.sszq[0]
-              
+              this.form.sszq = this.form.sszq[0]
+
               //2.设置修改的用户id
               this.form.id = this.editId;
               //3.提交用户修改
               //如果code为0表示用户不存在,提交表单
-              this.$store.dispatch('userMember/updateUser',this.form).then(res=>{
+              this.$store.dispatch('userMember/updateUser', this.form).then(res => {
                 console.log(res);
                 this.$message({
                   type: 'success',
@@ -692,14 +664,14 @@ export default {
                 });
                 this.goList();
               })
-            }else if(res.code==200){
+            } else if (res.code == 200) {
               //如果code==200 表示用户存在,阻止进一步提交
               this.$message({
                 type: 'warning',
                 message: '该账号已被注册,请更换其他账号!'
               });
             }
-          }).catch(error=>{
+          }).catch(error => {
             this.$message({
               type: 'warning',
               message: '网络错误,请重试!'
@@ -709,11 +681,11 @@ export default {
       })
     },
     //重置密码
-    resetPassword(){
+    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.$store.dispatch('userMember/resetPassword', { id: this.editId, password: password }).then(res => {
+        if (res.code == 200) {
           this.$message({
             type: 'success',
             message: '密码重置为:' + password
@@ -727,16 +699,16 @@ export default {
       })
     },
     //编辑表单 end ------------------------------------------------------------>
-    goList(){
+    goList() {
       this.$router.push({
         path: '/userList',
       });
     },
     //提取身份证号中的出生日期
-    extractBirthdayFromIdcard(){
+    extractBirthdayFromIdcard() {
       let idCard = this.form.id_card;
       // 1. 取出身份证中的生日部分,例如 "20250129"
-      let birthStr = idCard.substring(6, 14); 
+      let birthStr = idCard.substring(6, 14);
       // 2. 截取年、月、日
       let year = birthStr.substring(0, 4);    // 2025
       let month = birthStr.substring(4, 6);   // 01
@@ -746,43 +718,43 @@ export default {
       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)
-             })
- 
-      },
- 
+    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(){
+  mounted() {
 
-      this.get_website_tag_arr_fun()//得到站点标识所有内容xx
+    this.get_website_tag_arr_fun()//得到站点标识所有内容xx
 
 
     this.getRoleList();
     //判断是新建还是回显
-    if(this.$route.query.id!=undefined){
+    if (this.$route.query.id != undefined) {
       this.editId = this.$route.query.id;
       console.log("编辑用户!")
       this.getUserInfo();
-    }else{
+    } else {
       console.log("添加用户!")
     }
     //设置token
@@ -794,62 +766,83 @@ export default {
 </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;
-    }
+.PasswordBox {
+  display: flex;
+  align-items: center;
+
+  .el-form-item {
+    flex: 1;
   }
-  .longTimeCheckbox {
-    margin-left: 10px;
+
+  .PasswordTitle {
+    width: 120px;
+    text-align: right;
+    margin-right: 10px;
+    margin-bottom: 22px;
   }
-  .timeBox {
+
+  .PasswordBody {
+    flex: 1;
     display: flex;
     align-items: center;
-    justify-content: flex-start;
-    margin-bottom: 22px;
-    .timeTitle {
-      width: 110px;
-      text-align: right;
-      font-size: 14px;
-      color: #606266;
-      font-weight: bold;
-      height: 36px;
-      line-height: 36px;
-      margin-right: 10px;
-      span {
-        color: red;
-        margin-right: 5px;
-      }
-    }
-  }
-  //执行v-deep穿透scope选择器 start------------------------------------------------------------>*/
-  ::v-deep .custom-form-item > .el-form-item__label {
-    line-height: 140px !important;
-  }
-  ::v-deep .custom-textarea .el-textarea__inner {
-    resize: none; /* 禁止用户拖拽调整大小 */
   }
-  ::v-deep .custom-align-right .el-form-item__label {
-    text-align: right; /* 设置标签文字右对齐 */
+
+  .show-pwd {
+    margin-left: 10px;
   }
-  ::v-deep .el-select {
-    width: 100%; /* 禁止用户拖拽调整大小 */
+}
+
+.longTimeCheckbox {
+  margin-left: 10px;
+}
+
+.timeBox {
+  display: flex;
+  align-items: center;
+  justify-content: flex-start;
+  margin-bottom: 22px;
+
+  .timeTitle {
+    width: 110px;
+    text-align: right;
+    font-size: 14px;
+    color: #606266;
+    font-weight: bold;
+    height: 36px;
+    line-height: 36px;
+    margin-right: 10px;
+
+    span {
+      color: red;
+      margin-right: 5px;
+    }
   }
-  //执行v-deep穿透scope选择器 end------------------------------------------------------------>*/
-</style>
+}
+
+//执行v-deep穿透scope选择器 start------------------------------------------------------------>*/
+::v-deep .custom-form-item>.el-form-item__label {
+  line-height: 140px !important;
+}
+
+::v-deep .custom-textarea .el-textarea__inner {
+  resize: none;
+  /* 禁止用户拖拽调整大小 */
+}
+
+::v-deep .custom-align-right .el-form-item__label {
+  text-align: right;
+  /* 设置标签文字右对齐 */
+}
+
+::v-deep .el-select {
+  width: 100%;
+  /* 禁止用户拖拽调整大小 */
+}
+
+::v-deep .el-upload-list__item {
+  width: 15%;
+  float: left;
+  margin-right: 20px;
+}
+
+//执行v-deep穿透scope选择器 end------------------------------------------------------------>*/</style>

+ 53 - 5
src/views/role/components/userEnterprise.vue

@@ -1,4 +1,5 @@
 <template>
+  <!-- 注册企业会员组件 -->
   <div class="mainBox">
     <div class="layerBox">
       <el-form ref="form" :model="form" :rules="loginRules" class="login-form" autocomplete="on" label-position="left"
@@ -115,9 +116,20 @@
             <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-upload class="upload-demo" :action="uploadFileUrl" :headers="headers" :on-preview="handlePreview"
-              :on-remove="handleRemove" :before-remove="beforeRemove" :on-success="handleUploadSuccess" multiple
-              :limit="30" :on-exceed="handleExceed" :file-list="otherList">
+            <el-upload 
+              class="upload-demo" 
+              :action="uploadFileUrl" 
+              :headers="headers" 
+              :on-preview="handlePreview"
+              :on-remove="handleRemove" 
+              :before-remove="beforeRemove" 
+              :on-success="handleUploadSuccess" 
+              multiple
+              :limit="30" 
+              :on-exceed="handleExceed" 
+              :file-list="otherList" 
+              list-type="picture"
+              :before-upload="beforeAvatarUpload">
               <el-button size="small" type="primary">点击上传</el-button>
               <div slot="tip" class="el-upload__tip">每张图片最大1MB,最多上传30张图片。</div>
             </el-upload>
@@ -295,7 +307,7 @@ export default {
         //6.手机号
         mobile: [{ required: true, trigger: 'blur', validator: validateEmpty }],
         //7.身份证号
-        id_card: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+        id_card: [{ required: true, trigger: 'blur', validator: validateIdcard }],
         //8.性别
         gender: [{ required: true, trigger: 'blur', validator: validateEmpty }],
         //9.手机号
@@ -311,7 +323,7 @@ export default {
         //13.法人电话
         legal_person_mobile: [{ required: true, trigger: 'blur', validator: validateEmpty }],
         //14.法人身份证号
-        legal_person_id_card: [{ required: true, trigger: 'blur', validator: validateEmpty }],
+        legal_person_id_card: [{ required: true, trigger: 'blur', validator: validateIdcard }],
         //15.有效期
         timeList: [{ required: true, trigger: 'blur', validator: validateTimeTo }],
         //16.网站选择
@@ -366,6 +378,21 @@ export default {
       console.log("工作区域ID已更新:", value);
       this.form.city_arr_id = value;
     },
+    //1.4 验证身份证号
+    //提取身份证号中的出生日期
+    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;
+    },
+
     //1.5更新详细地址
     update_address_arr_id(value) {
       console.log("详细地址ID已更新:", value);
@@ -416,6 +443,21 @@ export default {
       console.log('上传成功:', response);
       console.log(this.form.other);
     },
+    //只能上传图片
+    beforeAvatarUpload(file) {
+      const isJPG = file.type === 'image/jpeg';
+      const isPNG = file.type === 'image/png';
+      const isLt1M = file.size / 1024 / 1024 < 1;
+
+      if (!isJPG && !isPNG) {
+        this.$message.error('上传图片只能是 JPG 或 PNG 格式!');
+        return false;
+      }
+      if (!isLt1M) {
+        this.$message.error('上传图片大小不能超过 1MB!');
+        return false;
+      }
+    },
     //提交表单
     addData() {
       this.form.sszq = this.form.sszq[0]
@@ -724,4 +766,10 @@ export default {
   /* 禁止用户拖拽调整大小 */
 }
 
+::v-deep .el-upload-list__item {
+  width: 15%;
+  float: left;
+  margin-right: 20px;
+}
+
 //执行v-deep穿透scope选择器 end------------------------------------------------------------>*/</style>

+ 259 - 265
src/views/role/components/userInvestigate.vue

@@ -1,17 +1,15 @@
 <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">
+      <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 v-for="item in role_idArr" :key="item.value" :label="item.label" :value="item.value">
                 </el-option>
               </el-select>
             </div>
@@ -20,22 +18,13 @@
           <el-form-item label="登录账号:" :label-width="formLabelWidth" prop="user_name" class="custom-align-right">
             <el-input v-model="form.user_name" autocomplete="off" placeholder="请输入登录账号.."></el-input>
           </el-form-item>
-          <div v-if="editId==''">
+          <div v-if="editId == ''">
             <!--新密码 start------------------------------------------>
             <div class="PasswordBox">
-              <el-form-item prop="password" label="登录密码:"  class="custom-align-right">
+              <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"
-                  />
+                  <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>
@@ -45,19 +34,10 @@
             <!--新密码 end------------------------------------------>
             <!--新密码 start------------------------------------------>
             <div class="PasswordBox">
-              <el-form-item prop="confirm_password" label="确认密码:"  class="custom-align-right">
+              <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"
-                  />
+                  <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>
@@ -72,17 +52,14 @@
           <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">
+          <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"
-                >
+                <el-upload class="avatar-uploader" action="#" :show-file-list="false"
+                  :before-upload="beforeAvatarUpload">
                   <!-- 预览图片 -->
                   <img v-if="photoUrl" :src="photoUrl" class="avatar">
                   <!-- 上传图标 -->
@@ -106,45 +83,37 @@
             <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 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-radio v-model="form.gender" label="2">女</el-radio>
           </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="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>
+            <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">
+          <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 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-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>
+            <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>
@@ -162,18 +131,10 @@
             <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"
-              :on-preview="handlePreview"
-              :on-remove="handleRemove"
-              :before-remove="beforeRemove"
-              :on-success="handleUploadSuccess"
-              multiple
-              :limit="30"
-              :on-exceed="handleExceed"
-              :file-list="otherList">
+            <el-upload class="upload-demo" :action="uploadFileUrl" :headers="headers" :on-preview="handlePreview"
+              :on-remove="handleRemove" :before-remove="beforeRemove" :on-success="handleUploadSuccess" multiple
+              :limit="30" :on-exceed="handleExceed" :file-list="otherList" list-type="picture"
+              :before-upload="beforeAvatarUpload">
               <el-button size="small" type="primary">点击上传</el-button>
               <div slot="tip" class="el-upload__tip">每张图片最大1MB,最多上传30张图片。</div>
             </el-upload>
@@ -193,12 +154,12 @@
           </el-form-item> -->
         </div>
       </el-form>
-    </div>  
+    </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>
+      <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>
@@ -239,38 +200,38 @@ export default {
         callback();
       }
     }
-    const validateEmpty = (rule,value,callback) => {
+    const validateEmpty = (rule, value, callback) => {
       if (!value || value.trim() === "") {
         callback(new Error('该项不能为空!'));
       } else {
         callback();
       }
     }
-    const validateArray = (rule,value,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"){
+    const validateTime = (rule, value, callback) => {
+      if (value === "NaN-NaN-NaN NaN:NaN:NaN") {
         callback(new Error('该项不能为空!'))
-      }else{
+      } else {
         callback()
       }
     }
-    const validateTimeTo = (rule,value,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){
+      if (self.timeList.length == 0 && self.form.long_time == 0) {
         callback(new Error('该项不能为空!'))
-      }else{
+      } else {
         callback()
       }
     }
-    const validateIdcard = (rule,value,callback) => {
+    const validateIdcard = (rule, value, callback) => {
       const idCardRegex = /^(?:\d{15}|\d{18}|\d{17}[\dXx])$/; // 正则表达式验证身份证号
       if (!value || value.trim() === "") {
         callback(new Error('该项不能为空!'));
@@ -284,73 +245,73 @@ export default {
     }
     return {
 
-      options_arr:[],
+      options_arr: [],
 
       props_1: { multiple: true },//下拉多选
 
 
-      formLabelWidth:"120px",
-      editId:"",
-      uploadFileUrl:URL.baseUrl+"/public/uploadFile",//获得上传地址
+      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:"",//邮编
+      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,//是否为全国
+      timeList: [],//时间段
+      otherList: [],//相关资料列表
+      role_idArr: [],//角色id池
+      isNational: 0,//是否为全国
       //网站列表
       webSiteList: [],
       //上传照片
-      photoUrl:'',
+      photoUrl: '',
       hovering: false, // 鼠标悬浮状态 悬浮时显示删除
       //密码验证
       capsTooltip1: false,
@@ -358,11 +319,11 @@ export default {
       passwordType1: 'password',
       passwordType2: 'password',
       //配置from表单验证规则
-      loginRules: { 
+      loginRules: {
 
 
-                  //   站点标识xx
-      websiteTag_arr_id: [{ type:'array',required: true, trigger: 'blur', validator: validateArray }],
+        //   站点标识xx
+        websiteTag_arr_id: [{ type: 'array', required: true, trigger: 'blur', validator: validateArray }],
 
 
 
@@ -393,7 +354,7 @@ export default {
         //12.出生年月
         birthday: [{ required: true, trigger: 'blur', validator: validateEmpty }],
         //13.有效期
-        timeList:[{ required: true, trigger: 'blur', validator: validateTimeTo }],
+        timeList: [{ required: true, trigger: 'blur', validator: validateTimeTo }],
         //14.网站选择
         sszq: [{ required: true, trigger: 'blur', validator: validateArray }]
       },
@@ -424,17 +385,17 @@ export default {
       });
     },
     //1.2获得角色列表池
-    getRoleList(){
+    getRoleList() {
       let data = {
-        page:1,
-        pageSize:100
+        page: 1,
+        pageSize: 100
       }
-      this.$store.dispatch('userRole/roleList',data).then(res=>{
+      this.$store.dispatch('userRole/roleList', data).then(res => {
         this.role_idArr = res.data.rows.map(item => ({
           value: item.id,
-          label: item.role_name 
+          label: item.role_name
         }));
-      }).catch(error=>{
+      }).catch(error => {
         this.$message({
           type: 'warning',
           message: '网络错误,请重试!'
@@ -442,25 +403,25 @@ export default {
       })
     },
     //1.3更新工作区域
-    update_city_arr_id(value){
+    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){
+    update_native_place_arr_id(value) {
       console.log("籍贯ID已更新:", value);
       this.form.native_place_arr_id = value;
     },
     //1.5更新详细地址
-    update_address_arr_id(value){
+    update_address_arr_id(value) {
       console.log("详细地址ID已更新:", value);
       this.form.address_arr_id = value;
     },
     //1.5重置表单
-    clearData(){
-     
+    clearData() {
+
     },
     //表单收集 end ------------------------------------------------------------>
     //2.提交表单 start ------------------------------------------------------------>
@@ -482,7 +443,7 @@ export default {
       const formData = new FormData();
       formData.append('file', file);
 
-      this.$store.dispatch('pool/uploadFile',formData).then(res=> {
+      this.$store.dispatch('pool/uploadFile', formData).then(res => {
         this.photoUrl = res.data.imgUrl;//显示缩略图
         this.form.avatar = res.data.imgUrl;//提供表单地址
         console.log(res.data.imgUrl)
@@ -511,7 +472,7 @@ export default {
       this.$message.warning(`当前限制选择 30 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
     },
     beforeRemove(file, fileList) {
-      return this.$confirm(`确定移除 ${ file.name }?`);
+      return this.$confirm(`确定移除 ${file.name}?`);
     },
     //获取token
     getTokenFromCookie() {
@@ -538,23 +499,38 @@ export default {
       console.log('上传成功:', response);
       console.log(this.form.other);
     },
+    //只能上传图片
+    beforeAvatarUpload(file) {
+      const isJPG = file.type === 'image/jpeg';
+      const isPNG = file.type === 'image/png';
+      const isLt1M = file.size / 1024 / 1024 < 1;
+
+      if (!isJPG && !isPNG) {
+        this.$message.error('上传图片只能是 JPG 或 PNG 格式!');
+        return false;
+      }
+      if (!isLt1M) {
+        this.$message.error('上传图片大小不能超过 1MB!');
+        return false;
+      }
+    },
     //提交表单
-    addData(){
+    addData() {
 
       console.log(this.timeList)
       //1.格式化时间戳
       this.form.birthday = formatLocalDate(this.form.birthday);
-      if(this.form.long_time==0){
+      if (this.form.long_time == 0) {
         this.form.from_time = formatLocalDate(this.timeList[0]);
         this.form.to_time = formatLocalDate(this.timeList[1]);
-      }else{
+      } else {
         // this.form.from_time = "";
         // this.form.to_time = "";
         delete this.form.from_time;
         delete this.form.to_time;
       }
       //判断用户工作区域是否为全国
-      if(this.isNational==1){
+      if (this.isNational == 1) {
         this.form.city_arr_id = [0];
       }
       console.log(this.form)
@@ -562,42 +538,42 @@ export default {
       this.$refs.form.validate(valid => {
         if (valid) {
           //3.验证用户是否已经存在
-          this.$store.dispatch('userMember/verifyUserInfo',{user_name:this.form.user_name}).then(res=>{
+          this.$store.dispatch('userMember/verifyUserInfo', { user_name: this.form.user_name }).then(res => {
 
-            if(res.code==0){
+            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=>{
+              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)
+                console.log("this.form222===res", res)
 
-                if(res.code==200){
+                if (res.code == 200) {
                   // console.log(res);
                   this.$message({
                     type: 'success',
                     message: '用户添加成功!'
                   });
                   this.goList();
-                }else{
+                } else {
                   this.$message({
                     type: 'warning',
                     message: res.message
                   });
                 }
               })
-            }else if(res.code==200){
+            } else if (res.code == 200) {
               //如果code==200 表示用户存在,阻止进一步提交
               this.$message({
                 type: 'warning',
                 message: '该账号已被注册,请更换其他账号!'
               });
             }
-          }).catch(error=>{
+          }).catch(error => {
             this.$message({
               type: 'warning',
               message: '网络错误,请重试!'
@@ -609,20 +585,20 @@ export default {
     //提交表单 start ------------------------------------------------------------>
     //3.编辑表单 start ------------------------------------------------------------>
     //获得网站列表
-    getWebsiteList(userWebList){
-      this.$store.dispatch('pool/getWebList',{page:1,pageSize:1000}).then(res=>{
-        if(res.code!=200){
+    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){
+        } else {
+          for (let item of res.data.rows) {
             let data = {
-              value:item.id,
-              label:item.website_name
+              value: item.id,
+              label: item.website_name
             }
             this.webSiteList.push(data)
           }
           //如果有数据可以回显
-          if(userWebList){
+          if (userWebList) {
             console.log("显示编辑用户的所属网站!")
             this.form.sszq = userWebList;
           }
@@ -630,14 +606,14 @@ export default {
       })
     },
     //获得用户信息
-    getUserInfo(){
+    getUserInfo() {
       // console.log("回显数据===");
-      this.$store.dispatch('userMember/getUser',{id:this.editId}).then(res=>{
-         
-              
+      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;
@@ -655,12 +631,12 @@ export default {
           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 (this.form.city_arr_id[0] == 0) {
+          this.isNational = 1
         }
 
         //还原有效期
-        if(res.data.long_time==0){
+        if (res.data.long_time == 0) {
           this.timeList = [
             res.data.from_time,
             res.data.to_time
@@ -668,7 +644,7 @@ export default {
           this.form.from_time = res.data.from_time;
           this.form.to_time = res.data.to_time;
           this.form.long_time = 0;
-        }else{
+        } else {
           this.form.from_time = "";
           this.form.to_time = "";
           this.form.long_time = 1;
@@ -678,7 +654,7 @@ export default {
         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; // 假设这是一个字符串格式的数组
@@ -694,16 +670,16 @@ export default {
         //获取所有网站列表
         //this.getWebsiteList(res.data.sszq);
 
-         
+
       })
     },
     //修改用户
-    editData(){
+    editData() {
       //当有效期为长期的时候,去掉from_time和to_time字段
-      if(this.form.long_time==0){
+      if (this.form.long_time == 0) {
         this.form.from_time = formatLocalDate(this.timeList[0]);
         this.form.to_time = formatLocalDate(this.timeList[1]);
-      }else{
+      } else {
         // this.form.from_time = "";
         // this.form.to_time = "";
         delete this.form.from_time;
@@ -712,34 +688,34 @@ export default {
       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){
+          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)){
+              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)){
+              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)){
+              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);
-              
+
               //数组转换为数字
-              this.form.sszq=this.form.sszq[0]
+              this.form.sszq = this.form.sszq[0]
 
               //2.设置修改的用户id
               this.form.id = this.editId;
               //判断用户工作区域是否为全国
-              if(this.isNational==1){
+              if (this.isNational == 1) {
                 this.form.city_arr_id = [0];
               }
               //3.提交用户修改
               //如果code为0表示用户不存在,提交表单
-              this.$store.dispatch('userMember/updateUser',this.form).then(res=>{
+              this.$store.dispatch('userMember/updateUser', this.form).then(res => {
                 console.log(res);
                 this.$message({
                   type: 'success',
@@ -747,14 +723,14 @@ export default {
                 });
                 this.goList();
               })
-            }else if(res.code==200){
+            } else if (res.code == 200) {
               //如果code==200 表示用户存在,阻止进一步提交
               this.$message({
                 type: 'warning',
                 message: '该账号已被注册,请更换其他账号!'
               });
             }
-          }).catch(error=>{
+          }).catch(error => {
             this.$message({
               type: 'warning',
               message: '网络错误,请重试!'
@@ -764,11 +740,11 @@ export default {
       })
     },
     //重置密码
-    resetPassword(){
+    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.$store.dispatch('userMember/resetPassword', { id: this.editId, password: password }).then(res => {
+        if (res.code == 200) {
           this.$message({
             type: 'success',
             message: '密码重置为:' + password
@@ -782,16 +758,16 @@ export default {
       })
     },
     //编辑表单 end ------------------------------------------------------------>
-    goList(){
+    goList() {
       this.$router.push({
         path: '/userList',
       });
     },
     //提取身份证号中的出生日期
-    extractBirthdayFromIdcard(){
+    extractBirthdayFromIdcard() {
       let idCard = this.form.id_card;
       // 1. 取出身份证中的生日部分,例如 "20250129"
-      let birthStr = idCard.substring(6, 14); 
+      let birthStr = idCard.substring(6, 14);
       // 2. 截取年、月、日
       let year = birthStr.substring(0, 4);    // 2025
       let month = birthStr.substring(4, 6);   // 01
@@ -802,26 +778,26 @@ export default {
     },
 
 
-    
-    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,
-                        }
+    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)
 
-                        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)
-            })
+        })
+        // 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)
+      })
 
-     },
+    },
 
 
   },
@@ -830,19 +806,19 @@ export default {
 
 
 
-  mounted(){
+  mounted() {
 
-      this.get_website_tag_arr_fun()//得到站点标识所有内容xx
+    this.get_website_tag_arr_fun()//得到站点标识所有内容xx
 
-      // console.log("this.get_website_tag_arr_fun()==xx",this.get_website_tag_arr_fun())
+    // console.log("this.get_website_tag_arr_fun()==xx",this.get_website_tag_arr_fun())
 
     this.getRoleList();
     //判断是新建还是回显
-    if(this.$route.query.id!=undefined){
+    if (this.$route.query.id != undefined) {
       this.editId = this.$route.query.id;
       console.log("编辑用户!")
       this.getUserInfo();
-    }else{
+    } else {
       console.log("添加用户!")
       //获取所有网站列表
       this.getWebsiteList();
@@ -854,42 +830,60 @@ export default {
 </script>
 
 <style scoped lang="less">
-  .PasswordBox {
+.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;
-    .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 {
+
+  .show-pwd {
     margin-left: 10px;
   }
-  //执行v-deep穿透scope选择器 start------------------------------------------------------------>*/
-  ::v-deep .custom-form-item > .el-form-item__label {
-    line-height: 140px !important;
-  }
-  ::v-deep .custom-textarea .el-textarea__inner {
-    resize: none; /* 禁止用户拖拽调整大小 */
-  }
-  ::v-deep .custom-align-right .el-form-item__label {
-    text-align: right; /* 设置标签文字右对齐 */
-  }
-  ::v-deep .el-select {
-    width: 100%; /* 禁止用户拖拽调整大小 */
-  }
-  //执行v-deep穿透scope选择器 end------------------------------------------------------------>*/
-</style>
+}
+
+.longTimeCheckbox {
+  margin-left: 10px;
+}
+
+//执行v-deep穿透scope选择器 start------------------------------------------------------------>*/
+::v-deep .custom-form-item>.el-form-item__label {
+  line-height: 140px !important;
+}
+
+::v-deep .custom-textarea .el-textarea__inner {
+  resize: none;
+  /* 禁止用户拖拽调整大小 */
+}
+
+::v-deep .custom-align-right .el-form-item__label {
+  text-align: right;
+  /* 设置标签文字右对齐 */
+}
+
+::v-deep .el-select {
+  width: 100%;
+  /* 禁止用户拖拽调整大小 */
+}
+
+::v-deep .el-upload-list__item {
+  width: 15%;
+  float: left;
+  margin-right: 20px;
+}
+
+//执行v-deep穿透scope选择器 end------------------------------------------------------------>*/</style>