webLogin.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. <template>
  2. <div id="webLogin">
  3. <el-row class="loginMains">
  4. <el-col :span="24" class="top">
  5. <el-col :span="6" class="info"></el-col>
  6. <el-col :span="12" class="context">
  7. <el-tabs v-model="activeName">
  8. <el-tab-pane label="个人登录" name="first">
  9. <el-col :span="24">
  10. <el-form ref="form" :model="form" label-width="120px">
  11. <el-form-item
  12. label="手机号"
  13. prop="phone"
  14. :rules="[
  15. { required: true, message: '手机号不能为空' },
  16. { type: 'number', message: '手机号必须为数字值' },
  17. ]"
  18. >
  19. <el-input type="phone" v-model.number="form.phone" autocomplete="off" placeholder="请输入手机号" :minlength="11" :maxlength="11"></el-input>
  20. </el-form-item>
  21. <el-form-item label="登录密码">
  22. <el-input v-model="form.passwd" placeholder="请输入登录密码" show-password></el-input>
  23. </el-form-item>
  24. <el-form-item label="用户类别">
  25. <el-radio-group v-model="form.role">
  26. <!-- <el-radio label="7">游客用户</el-radio> -->
  27. <el-radio label="4">个人用户</el-radio>
  28. <el-radio label="5">机构用户</el-radio>
  29. <el-radio label="6">专家用户</el-radio>
  30. <el-radio label="2">VIP用户</el-radio>
  31. </el-radio-group>
  32. </el-form-item>
  33. <el-col :span="24" class="loginSubmit"><el-button type="primary" @click="loginSubmit">登录</el-button></el-col>
  34. </el-form>
  35. </el-col>
  36. </el-tab-pane>
  37. <el-tab-pane label="注册" name="third">
  38. <el-col :span="24">
  39. <el-form ref="forms" :model="forms" :rules="rules" label-width="140px">
  40. <el-form-item label="用户名称" prop="name">
  41. <el-input v-model="forms.name" placeholder="请输入用户名称"></el-input>
  42. </el-form-item>
  43. <el-form-item label="手机号" prop="phone">
  44. <el-input v-model="forms.phone" placeholder="请输入手机号" :minlength="11" :maxlength="11"></el-input>
  45. </el-form-item>
  46. <el-form-item label="登录密码" prop="password">
  47. <el-input v-model="forms.password" placeholder="请输入登录密码" show-password></el-input>
  48. </el-form-item>
  49. <el-form-item label="机构代码或邀请码" prop="code" class="cs">
  50. <el-input v-model="forms.code" placeholder="请输入邀请码"></el-input>
  51. </el-form-item>
  52. <el-form-item label="用户类别" prop="role">
  53. <el-radio-group v-model="forms.role">
  54. <el-radio label="4">个人</el-radio>
  55. <el-radio label="5">机构管理员</el-radio>
  56. <el-radio label="6">专家</el-radio>
  57. </el-radio-group>
  58. </el-form-item>
  59. <span v-if="forms.role == '4' || forms.role == '5'">
  60. <el-form-item label="身份证号" prop="cardnumber">
  61. <el-input v-model="forms.cardnumber" placeholder="请输入身份证号" :minlength="18" :maxlength="18"></el-input>
  62. </el-form-item>
  63. <el-form-item label="邮箱" prop="email">
  64. <el-input v-model="forms.email" placeholder="请输入邮箱"></el-input>
  65. </el-form-item>
  66. <el-form-item label="地址" prop="addr">
  67. <el-input v-model="forms.addr" placeholder="请输入地址"></el-input>
  68. </el-form-item>
  69. <el-form-item label="头像图片" prop="img_path">
  70. <upload :limit="1" :data="forms.img_path" type="img_path" :url="'/files/imgpath/upload'" @upload="uploadSuccess"></upload>
  71. </el-form-item>
  72. <el-form-item label="身份证正面" prop="cardfile_a">
  73. <upload :limit="1" :data="forms.cardfile_a" type="cardfile_a" :url="'/files/cardfilea/upload'" @upload="uploadSuccess"></upload>
  74. </el-form-item>
  75. <el-form-item label="身份证背面" prop="cardfile_b">
  76. <upload :limit="1" :data="forms.cardfile_b" type="cardfile_b" :url="'/files/cardfileb/upload'" @upload="uploadSuccess"></upload>
  77. </el-form-item>
  78. <el-form-item label="办公电话" prop="office_phone">
  79. <el-input v-model="forms.office_phone" placeholder="请输入办公电话"></el-input>
  80. </el-form-item>
  81. <el-form-item label="所属行业" prop="profession">
  82. <el-input v-model="forms.profession" placeholder="请输入所属行业"></el-input>
  83. </el-form-item>
  84. </span>
  85. <span v-if="forms.role == '4'">
  86. <el-form-item label="个人简历" v-if="forms.role == '4'">
  87. <el-input type="textarea" v-model="forms.resume" placeholder="请输入个人简介"></el-input>
  88. </el-form-item>
  89. </span>
  90. <span v-else-if="forms.role == '5'">
  91. <el-form-item label="组织机构图片" v-if="forms.role == '5'" prop="img_qy">
  92. <upload :limit="1" :data="forms.img_qy" type="img_qy" :url="'/files/imgqy/upload'" @upload="uploadSuccess"></upload>
  93. </el-form-item>
  94. <el-form-item label="机构类型" prop="institution_type">
  95. <el-input v-model="forms.institution_type" placeholder="请输入机构类型"></el-input>
  96. </el-form-item>
  97. <el-form-item label="机构名称" prop="institution_name">
  98. <el-input v-model="forms.institution_name" placeholder="请输入机构名称"></el-input>
  99. </el-form-item>
  100. <el-form-item label="机构代码" prop="institution_code">
  101. <el-input v-model="forms.institution_code" placeholder="请输入机构代码"></el-input>
  102. </el-form-item>
  103. <el-form-item label="机构性质" prop="institution_nature">
  104. <el-input v-model="forms.institution_nature" placeholder="请输入机构性质"></el-input>
  105. </el-form-item>
  106. </span>
  107. <span v-else-if="forms.role == '6'">
  108. <el-form-item label="头像">
  109. <upload :limit="1" :data="forms.expertimage" type="expertimage" :url="'/files/imgpath/upload'" @upload="uploadSuccess"></upload>
  110. </el-form-item>
  111. <el-form-item label="最高学历">
  112. <el-input v-model="forms.education" placeholder="请输入最高学历"></el-input>
  113. </el-form-item>
  114. <el-form-item label="毕业院校">
  115. <el-input v-model="forms.school" placeholder="请输入毕业院校"></el-input>
  116. </el-form-item>
  117. <el-form-item label="出生日期">
  118. <el-date-picker v-model="forms.birthDate" type="date" placeholder="选择日期" value-format="yyyy-MM-dd"> </el-date-picker>
  119. </el-form-item>
  120. <el-form-item label="QQ/微信">
  121. <el-input v-model="forms.qqwx" placeholder="请输入QQ/微信"></el-input>
  122. </el-form-item>
  123. <el-form-item label="电子邮箱">
  124. <el-input v-model="forms.email" placeholder="请输入电子邮箱"></el-input>
  125. </el-form-item>
  126. <el-form-item label="工作单位">
  127. <el-input v-model="forms.company" placeholder="请输入工作单位"></el-input>
  128. </el-form-item>
  129. <el-form-item label="职务职称">
  130. <el-input v-model="forms.zwzc" placeholder="请输入职务职称"></el-input>
  131. </el-form-item>
  132. <el-form-item label="擅长领域">
  133. <el-input v-model="forms.expertise" placeholder="请输入擅长领域"></el-input>
  134. </el-form-item>
  135. <el-form-item label="工作经历">
  136. <el-input
  137. v-model="forms.workexperience"
  138. type="textarea"
  139. maxlength="300"
  140. show-word-limit
  141. :autosize="{ minRows: 2, maxRows: 5 }"
  142. placeholder="请输入工作经历"
  143. ></el-input>
  144. </el-form-item>
  145. <el-form-item label="科研综述">
  146. <el-input
  147. v-model="forms.scientific"
  148. type="textarea"
  149. maxlength="300"
  150. show-word-limit
  151. :autosize="{ minRows: 2, maxRows: 5 }"
  152. placeholder="请输入科研综述"
  153. ></el-input>
  154. </el-form-item>
  155. <el-form-item label="承担项目">
  156. <el-input
  157. v-model="forms.undertakingproject"
  158. type="textarea"
  159. maxlength="300"
  160. show-word-limit
  161. :autosize="{ minRows: 2, maxRows: 5 }"
  162. placeholder="请输入承担项目"
  163. ></el-input>
  164. </el-form-item>
  165. <el-form-item label="科技奖励">
  166. <el-input
  167. v-model="forms.scienceaward"
  168. type="textarea"
  169. maxlength="300"
  170. show-word-limit
  171. :autosize="{ minRows: 2, maxRows: 5 }"
  172. placeholder="请输入科技奖励"
  173. ></el-input>
  174. </el-form-item>
  175. <el-form-item label="社会任职">
  176. <el-input
  177. v-model="forms.social"
  178. type="textarea"
  179. maxlength="300"
  180. show-word-limit
  181. :autosize="{ minRows: 2, maxRows: 5 }"
  182. placeholder="请输入社会任职"
  183. ></el-input>
  184. </el-form-item>
  185. </span>
  186. <el-col :span="24" class="loginSubmit"><el-button type="primary" @click="registerSubmit('forms')">注册</el-button></el-col>
  187. </el-form>
  188. </el-col>
  189. </el-tab-pane>
  190. </el-tabs>
  191. </el-col>
  192. <el-col :span="6" class="info"></el-col>
  193. </el-col>
  194. </el-row>
  195. </div>
  196. </template>
  197. <script>
  198. import upload from '@/components/uploadone.vue';
  199. import { mapState, createNamespacedHelpers } from 'vuex';
  200. export default {
  201. name: 'webLogin',
  202. props: {
  203. form: null,
  204. forms: null,
  205. },
  206. components: {
  207. upload,
  208. },
  209. data: function() {
  210. return {
  211. activeName: 'first',
  212. rules: {
  213. name: [{ required: true, message: '请输入用户名称', trigger: 'blur' }],
  214. phone: [{ required: true, message: '请输入手机号', trigger: 'blur' }],
  215. password: [{ required: true, message: '请输入密码', trigger: 'blur' }],
  216. code: [
  217. { required: true, message: '请输入邀请码', trigger: 'blur' },
  218. // { type: 'number', message: '年龄必须为数字值' },
  219. ],
  220. // cardnumber: [{ required: true, message: '请输入身份证号', trigger: 'blur' }],
  221. // email: [{ required: true, message: '请输入邮箱', trigger: 'blur' }],
  222. // addr: [{ required: true, message: '请输入地址', trigger: 'blur' }],
  223. // img_path: [{ required: true, message: '请输入头像', trigger: 'blur' }],
  224. // role: [{ required: true, message: '请输入用户类型', trigger: 'blur' }],
  225. // cardfile_a: [{ required: false, message: '请输入身份证正面', trigger: 'blur' }],
  226. // cardfile_b: [{ required: false, message: '请输入身份证反面', trigger: 'blur' }],
  227. // img_qy: [{ required: false, message: '请输入组织机构图片', trigger: 'blur' }],
  228. // institution_type: [{ required: false, message: '请输入机构类型', trigger: 'blur' }],
  229. // institution_name: [{ required: false, message: '请输入机构名称', trigger: 'blur' }],
  230. // institution_code: [{ required: false, message: '请输入机构代码', trigger: 'blur' }],
  231. // institution_nature: [{ required: false, message: '请输入机构性质', trigger: 'blur' }],
  232. // office_phone: [{ required: false, message: '请输入办公电话', trigger: 'blur' }],
  233. // profession: [{ required: false, message: '请输入从事专业', trigger: 'blur' }],
  234. // gender: [{ required: false, message: '请输入性别', trigger: 'blur' }],
  235. // birthday: [{ required: false, message: '请输入出生日期', trigger: 'blur' }],
  236. // level: [{ required: false, message: '请输入职称级别', trigger: 'blur' }],
  237. // levelname: [{ required: false, message: '请输入职称级别', trigger: 'blur' }],
  238. // position: [{ required: false, message: '请输入职务', trigger: 'blur' }],
  239. // school: [{ required: false, message: '请输入院校', trigger: 'blur' }],
  240. // xl: [{ required: false, message: '请输入学历', trigger: 'blur' }],
  241. // xw: [{ required: false, message: '请输入学位', trigger: 'blur' }],
  242. // major: [{ required: false, message: '请输入专业', trigger: 'blur' }],
  243. // professional: [{ required: false, message: '请输入从事专业', trigger: 'blur' }],
  244. // resume: [{ required: false, message: '请输入个人简介', trigger: 'blur' }],
  245. // project: [{ required: false, message: '请输入项目', trigger: 'blur' }],
  246. // academic: [{ required: false, message: '请输入学术成就', trigger: 'blur' }],
  247. // paper: [{ required: false, message: '请输入论文', trigger: 'blur' }],
  248. // remark: [{ required: false, message: '请输入备注', trigger: 'blur' }],
  249. },
  250. };
  251. },
  252. created() {},
  253. methods: {
  254. // 用户登录
  255. loginSubmit() {
  256. this.$emit('submitDate', this.form);
  257. },
  258. // 注册
  259. registerSubmit(formName) {
  260. this.$refs[formName].validate(valid => {
  261. if (valid) {
  262. this.$emit('submitDates', { data: this.forms, id: this.forms.id });
  263. } else {
  264. console.log('error submit!!');
  265. return false;
  266. }
  267. });
  268. },
  269. // 图片上传
  270. uploadSuccess({ type, data }) {
  271. this.$set(this.forms, `${type}`, data.uri);
  272. },
  273. },
  274. computed: {
  275. ...mapState(['user']),
  276. pageTitle() {
  277. return `${this.$route.meta.title}`;
  278. },
  279. },
  280. metaInfo() {
  281. return { title: this.$route.meta.title };
  282. },
  283. };
  284. </script>
  285. <style lang="less" scoped>
  286. .loginMains {
  287. min-height: 800px;
  288. padding: 10px 0;
  289. background-color: #fff;
  290. }
  291. .top {
  292. width: 100%;
  293. padding: 20px;
  294. overflow: hidden;
  295. box-shadow: 0 0 10px #2d64b3;
  296. background: #ffffff;
  297. }
  298. .info {
  299. // width: 25%;
  300. height: 800px;
  301. }
  302. /deep/.el-tabs__header {
  303. margin: 0;
  304. }
  305. /deep/.el-tabs__nav-wrap::after {
  306. background-color: transparent;
  307. }
  308. /deep/.el-tabs--top .el-tabs__item.is-top:nth-child(2) {
  309. padding-left: 50px;
  310. }
  311. /deep/.el-tabs--top .el-tabs__item.is-top:last-child {
  312. padding-right: 50px;
  313. }
  314. /deep/.el-tabs__active-bar {
  315. background-color: transparent;
  316. }
  317. /deep/.el-tabs__nav {
  318. margin: 0 265px;
  319. }
  320. /deep/.el-tabs__item {
  321. padding: 0 60px;
  322. height: 70px;
  323. line-height: 70px;
  324. font-size: 30px;
  325. }
  326. .loginSubmit {
  327. text-align: center;
  328. }
  329. </style>