natasha il y a 1 an
Parent
commit
0829d0aa1c
6 fichiers modifiés avec 399 ajouts et 353 suppressions
  1. 3 305
      src/api/ajax.js
  2. 223 0
      src/components/Upload.vue
  3. 3 0
      src/icons/svg/upload.svg
  4. 2 2
      src/views/bookShelf/articleDetail.vue
  5. 167 45
      src/views/register.vue
  6. 1 1
      vue.config.js

+ 3 - 305
src/api/ajax.js

@@ -1,317 +1,15 @@
 import request from '@/utils/request'
 import { getToken } from '@/utils/auth'
-export function getContent(MethodName, data) {
-    let userInfor = getToken();
-    let UserCode = '',
-        UserType = '',
-        SessionID = ''
-    if (userInfor) {
-        let user = JSON.parse(getToken());
-        UserCode = user.user_code;
-        UserType = user.user_type;
-        SessionID = user.session_id;
-    }
-    return request({
-        url: `/GCLSBookWebSI/ServiceInterface?MethodName=${MethodName}&UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
-        method: 'post',
-        data
-    })
-}
-
-export function getYinbiao(data) {
-    let userInfor = getToken();
-    let UserCode = '',
-        UserType = '',
-        SessionID = ''
-    if (userInfor) {
-        let user = JSON.parse(getToken());
-        UserCode = user.user_code;
-        UserType = user.user_type;
-        SessionID = user.session_id;
-    }
-    return request({
-        // /GCLSHMToolsServer/api/dict/basic
-        url: `/GCLSHMToolsServer/api/dict/basic?UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
-        method: 'post',
-        data
-    })
-}
 
 export function getLogin(MethodName, data) {
     let userInfor = getToken();
-    let UserCode = '',
-        UserType = '',
-        SessionID = ''
-    if (userInfor) {
-        let user = JSON.parse(getToken());
-        UserCode = user.user_code;
-        UserType = user.user_type;
-        SessionID = user.session_id;
-    }
-    return request({
-        url: `/GCLSFileServer/ServiceInterface?MethodName=${MethodName}&UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
-        method: 'post',
-        data
-    })
-}
-
-export function getContentFile(
-    MethodName,
-    data
-) {
-    let userInfor = getToken();
-    let UserCode = '',
-        UserType = '',
-        SessionID = ''
-    if (userInfor) {
-        let user = JSON.parse(getToken());
-        UserCode = user.user_code;
-        UserType = user.user_type;
-        SessionID = user.session_id;
-    }
-    return request({
-        url: `/GCLSFileServer/ServiceInterface?MethodName=${MethodName}&UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
-        method: 'post',
-        data
-    })
-}
-
-export function getStaticContent(MethodName, data) {
-    return request({
-        url: `/GCLSFileServer/ServiceInterface?MethodName=${MethodName}`,
-        method: 'post',
-        data
-    })
-}
-
-//获取分词结果 == gcls.helxsoft.cn/GCLSFCServer/ServiceInterface?userCode=2021052116-QA2HTCS5J6C6ZER&userType=STUDENT&sessionId=S-QPUKZAXLEFESNRBAZ0
-export function getSegContent(data) {
-    let userInfor = getToken();
-    let UserCode = '',
-        UserType = '',
-        SessionID = ''
-    if (userInfor) {
-        let user = JSON.parse(getToken());
-        UserCode = user.user_code;
-        UserType = user.user_type;
-        SessionID = user.session_id;
-    }
-    return request({
-        url: `/GCLSFCServer/ServiceInterface?UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
-        method: 'post',
-        data
-    })
-}
-export function LearnWebSI(MethodName, data) {
-    let userInfor = getToken();
-    let UserCode = '',
-        UserType = '',
-        SessionID = ''
-    if (userInfor) {
-        let user = JSON.parse(getToken());
-        UserCode = user.user_code;
-        UserType = user.user_type;
-        SessionID = user.session_id;
-    }
-    return request({
-        url: `/GCLSLearnWebSI/ServiceInterface?MethodName=${MethodName}&UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
-        method: 'post',
-        data,
-    })
-}
-//教材
-export function TextbookAPI(MethodName, data) {
-    let userInfor = getToken();
-    let UserCode = '',
-        UserType = '',
-        SessionID = ''
-    if (userInfor) {
-        let user = JSON.parse(getToken());
-        UserCode = user.user_code;
-        UserType = user.user_type;
-        SessionID = user.session_id;
-    }
-    return request({
-        url: `/GCLSBookWebSI/ServiceInterface?MethodName=${MethodName}&UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
-        method: 'post',
-        data,
-    })
-}
-export function getLearnWebContent(MethodName, data) {
-    let userInfor = getToken();
-    let UserCode = '',
-        UserType = '',
-        SessionID = ''
-    if (userInfor) {
-        let user = JSON.parse(getToken());
-        UserCode = user.user_code;
-        UserType = user.user_type;
-        SessionID = user.session_id;
-    }
-    return request({
-        url: `/GCLSLearnWebSI/ServiceInterface?MethodName=${MethodName}&UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
-        method: 'post',
-        data
-    })
-}
-// 发送聊天
-export function sendrobot(data) {
-    return request({
-        url: `/GCLSAIServer/unit/utterance`,
-        method: 'post',
-        data
-    })
-}
-// 语音识别 GCLSAIServer/speech/recognize
-export function speechrecognize(data) {
-    return request({
-        url: `/GCLSAIServer/speech/recognize`,
-        method: 'post',
-        data
-    })
-}
-
-//分句
-export function segSentences(data) {
-    let userInfor = getToken();
-    let UserCode = '',
-        UserType = '',
-        SessionID = ''
-    if (userInfor) {
-        let user = JSON.parse(getToken());
-        UserCode = user.user_code;
-        UserType = user.user_type;
-        SessionID = user.session_id;
-    }
-    return request({
-        url: `/GCLSHMToolsServer/api/nlp/english/text2Sentences?UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
-        method: 'post',
-        data
-    })
-}
-//批量分词
-export function BatchSegContent(data) {
-    let userInfor = getToken();
-    let UserCode = '',
-        UserType = '',
-        SessionID = ''
-    if (userInfor) {
-        let user = JSON.parse(getToken());
-        UserCode = user.user_code;
-        UserType = user.user_type;
-        SessionID = user.session_id;
-    }
-    return request({
-        url: `/GCLSHMToolsServer/api/nlp/english/text2word?UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
-        method: 'post',
-        data
-    })
-}
-
-//英文文本分词并得到lemma
-export function BatchLemma(data) {
-    let userInfor = getToken();
-    let UserCode = '',
-        UserType = '',
-        SessionID = ''
-    if (userInfor) {
-        let user = JSON.parse(getToken());
-        UserCode = user.user_code;
-        UserType = user.user_type;
-        SessionID = user.session_id;
-    }
-    return request({
-        url: `/GCLSHMToolsServer/api/nlp/english/text2wordWithLemma?UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
-        method: 'post',
-        data
-    })
-}
-// 生成拼音
-export function createPinyin(data) {
-    let userInfor = getToken();
-    let UserCode = '',
-        UserType = '',
-        SessionID = ''
-    if (userInfor) {
-        let user = JSON.parse(getToken());
-        UserCode = user.user_code;
-        UserType = user.user_type;
-        SessionID = user.session_id;
-    }
-    return request({
-        url: `/GCLSFCServer/sentenceList/pinyin?UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
-        method: 'post',
-        data
-    })
-}
-
-//音频预处理
-export function prepareTranscribe(data) {
-    let userInfor = getToken();
-    let UserCode = '',
-        UserType = '',
-        SessionID = ''
-    if (userInfor) {
-        let user = JSON.parse(getToken());
-        UserCode = user.user_code;
-        UserType = user.user_type;
-        SessionID = user.session_id;
-    }
-    return request({
-        url: `/GCLSHMToolsServer/api/xunfei/speech/prepareTranscribe?UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
-        method: 'post',
-        data
-    })
-}
-
-//音频识别结果获取
-export function getWordTime(data) {
-    let userInfor = getToken();
-    let UserCode = '',
-        UserType = '',
-        SessionID = ''
-    if (userInfor) {
-        let user = JSON.parse(getToken());
-        UserCode = user.user_code;
-        UserType = user.user_type;
-        SessionID = user.session_id;
-    }
-    return request({
-        url: `/GCLSHMToolsServer/api/xunfei/speech/getResult?UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
-        method: 'post',
-        data
-    })
-}
-export function compareSenTenceTime(data) {
-    let userInfor = getToken();
-    let UserCode = '',
-        UserType = '',
-        SessionID = ''
-    if (userInfor) {
-        let user = JSON.parse(getToken());
-        UserCode = user.user_code;
-        UserType = user.user_type;
-        SessionID = user.session_id;
-    }
-    return request({
-        url: `/GCLSHMToolsServer/api/xunfei/speech/adjustResult?UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
-        method: 'post',
-        data
-    })
-}
-export function textCreadMp3(data) {
-    let userInfor = getToken();
-    let UserCode = '',
-        UserType = '',
-        SessionID = ''
+    let access_token = "";
     if (userInfor) {
         let user = JSON.parse(getToken());
-        UserCode = user.user_code;
-        UserType = user.user_type;
-        SessionID = user.session_id;
+        access_token = user.access_token;
     }
     return request({
-        url: `/GCLSHMToolsServer/api/xunfei/speech/tts?UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}`,
+        url: `${MethodName}?AccessToken=${access_token}`,
         method: 'post',
         data
     })

+ 223 - 0
src/components/Upload.vue

@@ -0,0 +1,223 @@
+<!--  -->
+<template>
+  <div class="upload">
+    <el-upload
+      :accept="accept"
+      style="width: 500px"
+      class="upload-demo"
+      :action="url"
+      :on-preview="handlePreview"
+      multiple
+      :limit="filleNumber ? filleNumber : 1"
+      :before-upload="handlebeforeUpload"
+      :on-exceed="handleExceed"
+      :on-success="handleSuccess"
+      :on-change="handleChange"
+      :file-list="fileList"
+      :before-remove="beforeRemove"
+      :on-remove="handleRemove"
+      :show-file-list="showList?false:true"
+    >
+      
+      <el-button size="mini" type="primary">
+        <svg-icon icon-class="upload"></svg-icon>
+        上传
+      </el-button>
+      <div
+        slot="tip"
+        class="el-upload__tip"
+      >
+        {{ tips || uploadTip }}
+      </div>
+    </el-upload>
+    <!-- <div class="zhezhao" v-loading.fullscreen.lock="fullscreenLoading"></div> -->
+  </div>
+</template>
+
+<script>
+import { getToken } from "../utils/auth";
+import Cookies from 'js-cookie'
+export default {
+  components: {},
+  props: [
+    "uploadType",
+    "filleNumber",
+    "datafileList",
+    "changeFillId",
+    "fileName",
+    "showList",
+    "tips",
+    "pageName"
+  ],
+  data() {
+    return {
+      fileList: [],
+      accept: "",
+      fileTypeName: "",
+      uploadName: "",
+      uploadTip:"",
+      loading: false,
+    };
+  },
+  computed: {
+    url() {
+      let userInfor = getToken();
+      let access_token = "";
+      if(this.pageName){
+        access_token = Cookies.get('registerToken')
+      }else if (userInfor) {
+        let user = JSON.parse(getToken());
+        access_token = user.access_token;
+      }
+      return (
+        process.env.VUE_APP_BASE_API +
+        "/FileServer/WebFileUpload?AccessToken=" +
+        access_token +
+        "&SecurityLevel=High"
+      );
+    },
+  },
+  watch: {
+    datafileList: {
+      handler(val, oldVal) {
+        this.initUpload();
+      },
+      // 深度观察监听
+      deep: true,
+    },
+  },
+  // 生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  // 生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+    this.initUpload();
+  },
+  beforeCreate() {}, // 生命周期 - 创建之前
+  beforeMount() {}, // 生命周期 - 挂载之前
+  beforeUpdate() {}, // 生命周期 - 更新之前
+  updated() {}, // 生命周期 - 更新之后
+  beforeDestroy() {}, // 生命周期 - 销毁之前
+  destroyed() {}, // 生命周期 - 销毁完成
+  activated() {},
+  // 方法集合
+  methods: {
+    handleChange(file, fileList) {},
+    handleSuccess(response, file, fileList) {
+      if (response.status == 1) {
+        response.duration = response.file_info_list[0].media_duration
+          ? response.file_info_list[0].media_duration
+          : 10;
+        this.$message.success("用户上传成功");
+        if(this.fileName){
+            this.changeFillId(fileList, this.fileName);
+        }else{
+            this.changeFillId(fileList);
+        }
+        this.loading.close();
+      } else {
+        this.fileList = [];
+        this.$message.warning(response.msg);
+        this.loading.close();
+      }
+    },
+    handlebeforeUpload(file) {
+      if (this.uploadType === 'image') {
+        if (file.size > 2 * 1024 * 1024) {
+          this.$message.warning('上传图片大小不能超过2M');
+          return false; // 必须返回false
+        }
+      } else if (this.uploadType === 'mp4') {
+        if (file.size > 500 * 1024 * 1024) {
+          this.$message.warning('上传视频大小不能超过500M');
+          return false; // 必须返回false
+        }
+      } else if (file.size > 20 * 1024 * 1024) {
+        this.$message.warning('上传文件大小不能超过20M');
+        return false; // 必须返回false
+      }
+      this.loading = this.$loading({
+        lock: true,
+        text: "Loading",
+        spinner: "el-icon-loading",
+        background: "rgba(0, 0, 0, 0.7)",
+      });
+    },
+    handleRemove(file, fileList) {
+      this.changeFillId(fileList, this.fileName);
+      this.$message.success("移除成功");
+    },
+    beforeRemove(file, fileList) {
+      return this.$confirm(`确定移除 ${file.name}?`);
+    },
+    handlePreview(file) {},
+    handleExceed(files, fileList) {
+      this.$message.warning(
+        `当前限制选择 ${
+          this.filleNumber ? this.filleNumber : 1
+        } 个文件,本次选择了 ${files.length} 个文件,共选择了 ${
+          files.length + fileList.length
+        } 个文件`
+      );
+    },
+    initUpload() {
+      this.fileList = this.datafileList || [];
+      let name = "只能上传";
+      switch (this.uploadType) {
+        case "image":
+          this.accept = "image/*";
+          this.fileTypeName = "图片";
+          this.uploadName = name + "图片";
+          this.uploadTip = "只能上传.jpg, .jpeg, .png文件,大小不超过2MB"
+          break;
+        case "mp3":
+          this.accept = ".mp3,.MP3,.wav,.WAV";
+          this.fileTypeName = "音频";
+          this.uploadName = name + "音频";
+          this.uploadTip = "只能上传音频文件,大小不超过20MB"
+          break;
+        case "mp4":
+          this.accept = "video/*";
+          this.fileTypeName = "视频";
+          this.uploadName = name + "视频";
+          this.uploadTip = "只能上传视频文件,大小不超 2GB"
+          break;
+        case "pdf":
+          this.accept = ".pdf";
+          this.fileTypeName = "pdf";
+          this.uploadName = name + "pdf";
+          this.uploadTip = "只能上传pdf文件,大小不超过20MB"
+          break;
+        case "xls":
+          this.accept = ".xls,.xlsx";
+          this.fileTypeName = "表格";
+          this.uploadName = name + "表格";
+          this.uploadTip = "只能上传excel文件,大小不超过20MB"
+          break;
+        case "lrc":
+          this.accept = ".lrc";
+          this.fileTypeName = "lrc";
+          this.uploadName = name + "lrc";
+          this.uploadTip = "只能上传lrc文件,大小不超过20MB"
+          break;
+
+        default:
+          this.accept = "*";
+          this.fileTypeName = "文件";
+          this.uploadName = "";
+          break;
+      }
+    },
+  }, // 如果页面有keep-alive缓存功能,这个函数会触发
+};
+</script>
+<style lang="scss" scoped>
+.zhezhao {
+  position: fixed;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100vh;
+  background: rgba(0, 0, 0, 0.4);
+  z-index: 10000;
+}
+</style>

+ 3 - 0
src/icons/svg/upload.svg

@@ -0,0 +1,3 @@
+<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M2.33464 11.0833H11.668V7H12.8346V11.6667C12.8346 11.9888 12.5735 12.25 12.2513 12.25H1.7513C1.42914 12.25 1.16797 11.9888 1.16797 11.6667V7H2.33464V11.0833ZM7.58464 5.25V9.33333H6.41797V5.25H3.5013L7.0013 1.75L10.5013 5.25H7.58464Z" fill="currentColor"/>
+</svg>

+ 2 - 2
src/views/bookShelf/articleDetail.vue

@@ -22,9 +22,9 @@
             <div class="atricle-data">
                 <normal-model :titleFontsize="wordFontsize+30" :wordFontsize="wordFontsize" :colorObj="bgColorList[activeIndex]" :articleType="articleType" :style="{'padding':'0 40px'}"></normal-model>
                 <div class="article-btn">
-                    <el-button type="text" class="btn-left" @click="handlePage('-')"><svg-icon icon-class="arrow-left-line"></svg-icon>上一</el-button>
+                    <el-button type="text" class="btn-left" @click="handlePage('-')"><svg-icon icon-class="arrow-left-line"></svg-icon>上一</el-button>
                     <el-button class="explain-video"><svg-icon icon-class="check-double-line"></svg-icon>已读</el-button>
-                    <el-button type="text" class="btn-right" @click="handlePage('+')">下一<svg-icon icon-class="arrow-right-line"></svg-icon></el-button>
+                    <el-button type="text" class="btn-right" @click="handlePage('+')">下一<svg-icon icon-class="arrow-right-line"></svg-icon></el-button>
                 </div>
             </div>
             <!-- 词汇表 -->

+ 167 - 45
src/views/register.vue

@@ -14,27 +14,23 @@
         <h2>注册</h2>
         <el-form :model="registerForm" :rules="rulesRegister" ref="registerForm" label-width="100px" class="registerForm">
             <el-divider content-position="left">基本信息</el-divider>
-            <el-form-item label="头像" prop="avatar">
-                <el-upload
-                    class="avatar-uploader"
-                    action="https://jsonplaceholder.typicode.com/posts/"
-                    :show-file-list="false"
-                    :on-success="handleAvatarSuccess"
-                    :before-upload="beforeAvatarUpload">
-                    <el-image v-if="registerForm.avatar" :src="registerForm.avatar" fit="contain"></el-image>
-                    <i v-else class="el-icon-plus avatar-uploader-icon">Upload</i>
-                </el-upload>
+            <el-form-item label="头像" prop="cover_image_url">
+                <upload :datafileList="registerForm.cover_image_list" :changeFillId="handleAvatarSuccess" :fileName="'cover'" :showList="true" uploadType="image" :filleNumber="1" pageName="register" v-if="!registerForm.cover_image_url" />
+                <div class="cover-box" v-else @mouseover="Imagemouseover('coverFlag',true)" @mouseout="Imagemouseover('coverFlag',false)">
+                    <el-image :src="registerForm.cover_image_url" fit="contain" style="max-width:200px;max-height:200px;"></el-image>
+                    <p v-show="coverFlag" @click="handleDeleteFile('cover',0)"><i class="el-icon-delete"></i></p>
+                </div>
             </el-form-item>
             <el-form-item label="用户名" prop="name">
-                <el-input v-model="registerForm.name" placeholder="请输入用户名"></el-input>
+                <el-input v-model="registerForm.name" placeholder="请输入用户名" @blur="handleTrim('registerForm','name')"></el-input>
             </el-form-item>
             <el-form-item label="真实姓名" prop="realName">
-                <el-input v-model="registerForm.realName" placeholder="请输入真实姓名"></el-input>
+                <el-input v-model="registerForm.realName" placeholder="请输入真实姓名" @blur="handleTrim('registerForm','realName')"></el-input>
             </el-form-item>
             <el-form-item label="性别" prop="sex">
                 <el-radio-group v-model="registerForm.sex">
-                    <el-radio label="0">男</el-radio>
-                    <el-radio label="1">女</el-radio>
+                    <el-radio :label="1">男</el-radio>
+                    <el-radio :label="0">女</el-radio>
                 </el-radio-group>
             </el-form-item>
             <el-form-item label="所在省市" prop="selectedOptions">
@@ -46,32 +42,32 @@
                 </el-cascader>
             </el-form-item>
             <el-form-item label="备注" prop="desc">
-                <el-input type="textarea" v-model="registerForm.desc" placeholder="请输入备注" maxlength="100" :rows="4" show-word-limit></el-input>
+                <el-input type="textarea" v-model="registerForm.desc" placeholder="请输入备注" maxlength="100" :rows="4" show-word-limit @blur="handleTrim('registerForm','desc')"></el-input>
             </el-form-item>
             <el-divider content-position="left">加入机构</el-divider>
             <el-form-item label="选择机构" prop="region">
-                <el-select v-model="registerForm.region" filterable placeholder="请选择机构">
+                <el-select v-model="registerForm.region" filterable remote placeholder="请选择机构" :remote-method="remoteMethod" :loading="searchOrgLoading">
                     <el-option
                         v-for="item in orgList"
-                        :key="item.value"
-                        :label="item.label"
-                        :value="item.value">
+                        :key="item.id"
+                        :label="item.name"
+                        :value="item.id">
                     </el-option>
                 </el-select>
                 <p class="tips">输入机构代码或手动选择</p>
             </el-form-item>
             <el-divider content-position="left">安全信息</el-divider>
             <el-form-item label="手机号" prop="phone">
-                <el-input v-model="registerForm.phone" autocomplete="off" placeholder="请输入完整手机号" >
+                <el-input v-model="registerForm.phone" autocomplete="off" placeholder="请输入完整手机号" @blur="handleTrim('registerForm','phone')" >
                     <template slot="prepend">+86</template>
                 </el-input>
             </el-form-item>
             <el-form-item label="邮箱" prop="email">
-                <el-input v-model="registerForm.email" autocomplete="off" placeholder="请输入邮箱地址" >
+                <el-input v-model="registerForm.email" autocomplete="off" placeholder="请输入邮箱地址" @blur="handleTrim('registerForm','email')" >
                 </el-input>
             </el-form-item>
             <el-form-item label="账号密码" prop="newPwd">
-                <el-input v-model="registerForm.newPwd" :type="newPwdFlag?'text':'password'" autocomplete="off" placeholder="请输入密码" >
+                <el-input v-model="registerForm.newPwd" :type="newPwdFlag?'text':'password'" autocomplete="off" placeholder="请输入密码" @blur="handleTrim('registerForm','newPwd')" >
                     <i slot="suffix" class="el-icon-view show-icon" @click="changeIcon('newPwdFlag')" v-if="newPwdFlag"></i>
                     <i slot="suffix" class="show-icon" @click="changeIcon('newPwdFlag')" v-else>
                         <svg-icon icon-class="eye-invisible"></svg-icon>
@@ -80,7 +76,7 @@
                 <p class="tips">不少于6位,且必须同时包含数字和大小写字母</p>
             </el-form-item>
             <el-form-item label="再次输入" prop="confirmPwd">
-                <el-input v-model="registerForm.confirmPwd" :type="comfirmPwdFlag?'text':'password'" autocomplete="off" placeholder="请输入密码" >
+                <el-input v-model="registerForm.confirmPwd" :type="comfirmPwdFlag?'text':'password'" autocomplete="off" placeholder="请输入密码" @blur="handleTrim('registerForm','confirmPwd')" >
                     <i slot="suffix" class="el-icon-view show-icon" @click="changeIcon('comfirmPwdFlag')" v-if="comfirmPwdFlag"></i>
                     <i slot="suffix" class="show-icon" @click="changeIcon('comfirmPwdFlag')" v-else>
                         <svg-icon icon-class="eye-invisible"></svg-icon>
@@ -94,7 +90,7 @@
                 </el-checkbox-group>
             </el-form-item>
             <el-form-item>
-                <el-button type="primary" @click="onSubmitPassword('registerForm')" size="small">保存</el-button>
+                <el-button type="primary" @click="onSubmitPassword('registerForm')" size="small" :loading="loading">保存</el-button>
                 <el-button @click="onCancel('registerForm')" size="small">取消</el-button>
             </el-form-item>
         </el-form>
@@ -106,12 +102,15 @@
 //这里可以导入其它文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
 //例如:import 《组件名称》from ‘《组件路径》';
 import Header from "@/components/Header.vue";
+import Upload from "@/components/Upload.vue"
 import {
   provinceAndCityData
 } from "element-china-area-data";
+import { getLogin } from "@/api/ajax";
+import Cookies from 'js-cookie'
 export default {
   //import引入的组件需要注入到对象中才能使用
-  components: { Header },
+  components: { Header, Upload },
   props: [],
   data() {
     //这里存放数据
@@ -137,7 +136,7 @@ export default {
             if (result) {
                 callback();
             } else {
-                callback(new Error('密码只能包含数字和字母'));
+                callback(new Error('密码必须同时包含数字和大小写字母'));
             }
             
         }
@@ -151,6 +150,19 @@ export default {
           callback();
         }
     };
+    const validateEmail = (rule, value, callback) => {
+        if (value === '') {
+            
+        } else {
+            let reg = /^[a-zA-Z0-9_\.-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;
+            let result = reg.test(value);
+            if (result) {
+                callback();
+            } else {
+                callback(new Error('请输入正确的邮箱地址'));
+            }
+        }
+    };
     return {
         provinceAndCityData,
         config: this.$route.query.headerConfig?decodeURIComponent(this.$route.query.headerConfig):'',
@@ -158,11 +170,13 @@ export default {
         headerBorder: '#5C5C5C',
         headerBg: '#1F1F1F',
         registerForm:{
-            avatar: '',
+            cover_image_url: '',
+            cover_image_list: [],
+            cover_image_id: null,
             name:'',
             realName:'',
-            sex:'0',
-            selectedOptions:[],
+            sex:1,
+            selectedOptions:'0204',
             desc:'',
             phone:'',
             email:'',
@@ -182,8 +196,11 @@ export default {
             sex:[
                 { required: true, message: '请选择性别', trigger: 'change' },
             ],
+            // selectedOptions: [
+            //     { type: 'array', required: true, message: '请选择所在省市', trigger: 'change' }
+            // ],
             selectedOptions: [
-                { type: 'array', required: true, message: '请选择所在省市', trigger: 'change' }
+                { required: true, message: '请选择所在省市', trigger: 'change' }
             ],
             phone:[
                 { required: true, validator: validatePhone, trigger: 'blur' }
@@ -201,19 +218,17 @@ export default {
             region: [
                 { required: true, message: '请选择机构', trigger: 'change' }
             ],
+            email:[
+                { validator: validateEmail, trigger: 'blur' },
+            ]
         },
-        orgList:[
-            {
-                label:'上海商学院',
-                value: 0
-            },
-            {
-                label:'青岛科技大学',
-                value: 1
-            }
-        ],
+        orgList:[], // 筛选之后 机构列表
+        searchOrgList:[],// 总的机构列表
         newPwdFlag: false, // 查看新密码
         comfirmPwdFlag: false, // 查看确认密码
+        searchOrgLoading: false, // 搜索机构loading
+        coverFlag: false,
+        loading: false
     }
   },
   //计算属性 类似于data概念
@@ -222,8 +237,10 @@ export default {
   watch: {},
   //方法集合
   methods: {
-      handleAvatarSuccess(res, file) {
-        this.registerForm.avatar = URL.createObjectURL(file.raw);
+      handleAvatarSuccess(fileList) {
+        this.registerForm.cover_image_list = fileList
+        this.registerForm.cover_image_id = fileList[0]&&fileList[0].response&&fileList[0].response.file_info_list&&fileList[0].response.file_info_list[0]?fileList[0].response.file_info_list[0].file_id:''
+        this.registerForm.cover_image_url = fileList[0]&&fileList[0].response&&fileList[0].response.file_info_list&&fileList[0].response.file_info_list[0]?fileList[0].response.file_info_list[0].file_url:''
       },
       beforeAvatarUpload(file) {
         const isLt2M = file.size / 1024 / 1024 < 2;
@@ -241,16 +258,94 @@ export default {
       },
       // 提交表单
       onSubmitPassword(formName){
-        console.log(this.loginPwdForm)
+        let MethodName = "/OrgServer/Client/PersonManager/RegisterToOrgPerson";
         this.$refs[formName].validate((valid) => {
           if (valid) {
-            alert('submit!');
+            let form = this.registerForm       
+            let data = {
+                user_name: form.name,
+                real_name: form.realName,
+                sex: form.sex,
+                image_id: form.cover_image_id,
+                org_id: form.region,
+                email: form.email,
+                phone: form.phone,
+                city_id: form.selectedOptions,
+                memo: form.desc,
+                password: form.newPwd
+            }
+            getLogin(MethodName, data)
+            .then((res) => {
+                if(res.status===1){
+                    this.$message.success('注册成功,请等待审核');
+                    this.$router.push({ path: "/EnterSys" });
+                }
+            })
+            .catch(() => {
+                this.loading = false
+            });
           } else {
-            console.log('error submit!!');
             return false;
           }
         });
       },
+      // 取消 恢复到修改前状态
+      onCancel(formName){
+        this.$refs[formName].resetFields();
+      },
+      // 查询列表
+      getOrgList(){
+        let MethodName = "/OrgServer/Client/OrgManager/GetOrgIndexList";
+        let data = {
+            name: '',
+            status: 1,
+            sn: ''
+        }
+        getLogin(MethodName, data)
+        .then((res) => {
+            if(res.status===1){
+                this.searchOrgList = JSON.parse(JSON.stringify(res.org_index_list))
+                this.orgList = res.org_index_list
+            }
+        })
+        .catch(() => {
+            this.loading = false
+        });
+      },
+      // 搜索查询机构
+      remoteMethod(query) {
+        if (query !== '') {
+          this.searchOrgLoading = true;
+          setTimeout(() => {
+            this.searchOrgLoading = false;
+            this.orgList = this.searchOrgList.filter(item => {
+              return item.name.toLowerCase().indexOf(query.toLowerCase()) > -1||item.sn.toLowerCase().indexOf(query.toLowerCase()) > -1;
+            });
+          }, 200);
+        } else {
+          this.orgList = JSON.parse(JSON.stringify(this.searchOrgList));
+        }
+      },
+      Imagemouseover(item,flag) {
+        this[item] = flag
+      },
+      handleDeleteFile(item,i) {
+        this.$confirm("确定删除吗?", "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning",
+        }).then(() => {
+            if(item==='cover'){
+                this.registerForm.cover_image_list.splice(i, 1);
+                this.registerForm.cover_image_url = ''
+                this.registerForm.cover_image_id = null
+            }
+        });
+      },
+      // 去掉前后空格
+      handleTrim(form,fild){
+        this[form][fild] = this[form][fild].trim()
+      },
   },
   //生命周期 - 创建完成(可以访问当前this实例)
   created() {
@@ -260,6 +355,14 @@ export default {
         this.headerBorder = arr[2] ? arr[2] : '#5C5C5C'
         this.headerBg = arr[3] ? arr[3] : '#1F1F1F'
     }
+    this.getOrgList()
+    let MethodName = '/OrgServer/LoginControl/GetInnerAccessToken'
+    getLogin(MethodName, {})
+    .then((res) => {
+        if(res.status===1){
+            Cookies.set('registerToken', res.access_token)
+        }
+    })
   },
   //生命周期 - 挂载完成(可以访问DOM元素)
   mounted() {
@@ -305,6 +408,25 @@ export default {
         line-height: 20px;
     }
 }
+.cover-box{
+    position: relative;
+    width: 200px;
+    height: 200px;
+    p{
+        position: absolute;
+        bottom: 0;
+        left: 0;
+        width: 100%;
+        height: 200px;
+        line-height: 200px;
+        font-size: 20px;
+        text-align: center;
+        cursor: pointer;
+        background: rgba(0, 0, 0, 0.3);
+        color: #F2F3F5;
+        margin: 0;
+    }
+}
 </style>
 <style lang="scss">
 .registerForm{

+ 1 - 1
vue.config.js

@@ -43,7 +43,7 @@ module.exports = {
             // change xxx-api/login => mock/login
             // detail: https://cli.vuejs.org/config/#devserver-proxy
             [process.env.VUE_APP_BASE_API]: {
-                target: `https://edu.blcup.com/`,
+                target: `https://21st.helxsoft.cn/`,
                 changeOrigin: true,
                 pathRewrite: {
                     ['^' + process.env.VUE_APP_BASE_API]: ''