index.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652
  1. <template>
  2. <div id="index">
  3. <el-row>
  4. <el-col :span="24">
  5. <el-col :span="24" class="leftTop">
  6. <span>|</span>
  7. <span>基本信息</span>
  8. <el-button type="primary" size="mini" @click="bindWx" style="margin:0 10px;">绑定微信</el-button>
  9. </el-col>
  10. <el-col :span="24" class="info">
  11. <el-form ref="form" :model="form" :rules="rules" label-width="150px">
  12. <el-col :span="24">
  13. <el-form-item prop="name">
  14. <el-col :span="21" slot="label">
  15. 用户名称
  16. </el-col>
  17. <el-col :span="24">
  18. <el-input v-model="form.name" placeholder="请输入用户名称"></el-input>
  19. </el-col>
  20. </el-form-item>
  21. </el-col>
  22. <el-col :span="24">
  23. <el-form-item prop="phone">
  24. <el-col :span="21" slot="label">
  25. 手机号
  26. </el-col>
  27. <el-col :span="24">
  28. <el-input v-model="form.phone" placeholder="请输入手机号" :minlength="11" :maxlength="11"></el-input>
  29. </el-col>
  30. </el-form-item>
  31. </el-col>
  32. <el-col :span="24" v-if="user.role == '4'">
  33. <el-form-item prop="role">
  34. <el-col :span="21" slot="label">
  35. 用户类别
  36. </el-col>
  37. <el-col :span="24">
  38. <el-radio-group v-model="form.role">
  39. <el-radio label="4">个人</el-radio>
  40. <el-radio label="6">专家</el-radio>
  41. </el-radio-group>
  42. </el-col>
  43. </el-form-item>
  44. </el-col>
  45. <el-col :span="24">
  46. <el-form-item prop="code">
  47. <el-col :span="21" slot="label">
  48. 所属机构
  49. </el-col>
  50. <el-col :span="24">
  51. <el-input v-model="form.code" placeholder="请输入机构代码"></el-input>
  52. </el-col>
  53. </el-form-item>
  54. </el-col>
  55. <span v-if="form.role == '4' || form.role == '5'">
  56. <el-col :span="12">
  57. <el-form-item prop="email">
  58. <el-col :span="21" slot="label">
  59. 电子邮箱
  60. </el-col>
  61. <el-col :span="24">
  62. <el-input v-model="form.email" placeholder="请输入电子邮箱"></el-input>
  63. </el-col>
  64. </el-form-item>
  65. </el-col>
  66. <el-col :span="12">
  67. <el-form-item prop="addr">
  68. <el-col :span="21" slot="label">
  69. 联系地址
  70. </el-col>
  71. <el-col :span="24">
  72. <el-input v-model="form.addr" placeholder="请输入联系地址"></el-input>
  73. </el-col>
  74. </el-form-item>
  75. </el-col>
  76. <el-col :span="12">
  77. <el-form-item prop="office_phone">
  78. <el-col :span="21" slot="label">
  79. 办公电话
  80. </el-col>
  81. <el-col :span="24">
  82. <el-input v-model="form.office_phone" placeholder="请输入办公电话"></el-input>
  83. </el-col>
  84. </el-form-item>
  85. </el-col>
  86. <el-col :span="12">
  87. <el-form-item prop="profession">
  88. <el-col :span="21" slot="label">
  89. 所属行业
  90. </el-col>
  91. <el-col :span="24">
  92. <el-input v-model="form.profession" placeholder="请输入所属行业"></el-input>
  93. </el-col>
  94. </el-form-item>
  95. </el-col>
  96. </span>
  97. <span v-if="form.role == '4'">
  98. <el-col :span="24" class="langInfo">
  99. <el-form-item prop="resume">
  100. <el-col :span="21" slot="label">
  101. 个人简历
  102. </el-col>
  103. <el-col :span="24">
  104. <el-input
  105. v-model="form.resume"
  106. type="textarea"
  107. maxlength="300"
  108. show-word-limit
  109. :autosize="{ minRows: 4, maxRows: 5 }"
  110. placeholder="请输入个人简介"
  111. ></el-input>
  112. </el-col>
  113. </el-form-item>
  114. </el-col>
  115. </span>
  116. <span v-else-if="form.role == '5'">
  117. <el-col :span="12">
  118. <el-form-item prop="companytype">
  119. <el-col :span="21" slot="label">
  120. 注册类型
  121. </el-col>
  122. <el-col :span="24">
  123. <el-input v-model="form.companytype" placeholder="请输入注册类型"></el-input>
  124. </el-col>
  125. </el-form-item>
  126. </el-col>
  127. <el-col :span="12">
  128. <el-form-item prop="companydate">
  129. <el-col :span="21" slot="label">
  130. 注册时间
  131. </el-col>
  132. <el-col :span="24">
  133. <el-date-picker
  134. v-model="form.companydate"
  135. placeholder="请选择"
  136. value-format="yyyy-MM-dd"
  137. format="yyyy-MM-dd"
  138. type="date"
  139. style="width: 100%;"
  140. >
  141. </el-date-picker>
  142. </el-col>
  143. </el-form-item>
  144. </el-col>
  145. <el-col :span="12">
  146. <el-form-item prop="institution_code">
  147. <el-col :span="21" slot="label">
  148. 组织机构代码
  149. </el-col>
  150. <el-col :span="24">
  151. <el-input v-model="form.institution_code" placeholder="请输入组织机构代码"></el-input>
  152. </el-col>
  153. </el-form-item>
  154. </el-col>
  155. <el-col :span="12">
  156. <el-form-item prop="companycapital">
  157. <el-col :span="21" slot="label">
  158. 注册资金
  159. </el-col>
  160. <el-col :span="24">
  161. <el-input v-model="form.companytype" placeholder="请输入注册类型"></el-input>
  162. </el-col>
  163. </el-form-item>
  164. </el-col>
  165. <el-col :span="12">
  166. <el-form-item prop="companyperson">
  167. <el-col :span="21" slot="label">
  168. 企业法人
  169. </el-col>
  170. <el-col :span="24">
  171. <el-input v-model="form.companyperson" placeholder="请输入企业法人"></el-input>
  172. </el-col>
  173. </el-form-item>
  174. </el-col>
  175. <el-col :span="12">
  176. <el-form-item prop="sndqyzsr">
  177. <el-col :span="21" slot="label">
  178. 上年度企业总收入
  179. </el-col>
  180. <el-col :span="24">
  181. <el-input v-model="form.sndqyzsr" placeholder="请输入上年度企业总收入"></el-input>
  182. </el-col>
  183. </el-form-item>
  184. </el-col>
  185. <el-col :span="12">
  186. <el-form-item prop="sndyffy">
  187. <el-col :span="21" slot="label">
  188. 上年度研发费用
  189. </el-col>
  190. <el-col :span="24">
  191. <el-input v-model="form.sndyffy" placeholder="请输入上年度研发费用"></el-input>
  192. </el-col>
  193. </el-form-item>
  194. </el-col>
  195. <el-col :span="12">
  196. <el-form-item prop="companytotal">
  197. <el-col :span="21" slot="label">
  198. 企业总人数
  199. </el-col>
  200. <el-col :span="24">
  201. <el-input v-model="form.companytotal" placeholder="请输入企业总人数"></el-input>
  202. </el-col>
  203. </el-form-item>
  204. </el-col>
  205. <el-col :span="24" class="langInfo">
  206. <el-form-item prop="companybrief">
  207. <el-col :span="21" slot="label">
  208. 企业简介
  209. </el-col>
  210. <el-col :span="24">
  211. <el-input
  212. v-model="form.companybrief"
  213. type="textarea"
  214. maxlength="300"
  215. show-word-limit
  216. :autosize="{ minRows: 4, maxRows: 5 }"
  217. placeholder="请输入企业简介"
  218. ></el-input>
  219. </el-col>
  220. </el-form-item>
  221. </el-col>
  222. <el-col :span="24" class="langInfo">
  223. <el-form-item prop="mainproduct">
  224. <el-col :span="21" slot="label">
  225. 主要产品
  226. </el-col>
  227. <el-col :span="24">
  228. <el-input
  229. v-model="form.mainproduct"
  230. type="textarea"
  231. maxlength="300"
  232. show-word-limit
  233. :autosize="{ minRows: 4, maxRows: 5 }"
  234. placeholder="请输入主要产品"
  235. ></el-input>
  236. </el-col>
  237. </el-form-item>
  238. </el-col>
  239. <el-col :span="24" class="langInfo">
  240. <el-form-item prop="qualifications">
  241. <el-col :span="21" slot="label">
  242. 企业资质/荣誉
  243. </el-col>
  244. <el-col :span="24">
  245. <el-input
  246. v-model="form.qualifications"
  247. type="textarea"
  248. maxlength="300"
  249. show-word-limit
  250. :autosize="{ minRows: 4, maxRows: 5 }"
  251. placeholder="请输入企业资质/荣誉"
  252. ></el-input>
  253. </el-col>
  254. </el-form-item>
  255. </el-col>
  256. </span>
  257. <span v-else-if="form.role == '6'">
  258. <el-col :span="24">
  259. <el-form-item prop="company">
  260. <el-col :span="21" slot="label">
  261. 工作单位
  262. </el-col>
  263. <el-col :span="24">
  264. <el-input v-model="form.company" placeholder="请输入工作单位"></el-input>
  265. </el-col>
  266. </el-form-item>
  267. </el-col>
  268. <el-col :span="12">
  269. <el-form-item prop="school">
  270. <el-col :span="21" slot="label">
  271. 毕业院校
  272. </el-col>
  273. <el-col :span="24">
  274. <el-input v-model="form.school" placeholder="请输入毕业院校"></el-input>
  275. </el-col>
  276. </el-form-item>
  277. </el-col>
  278. <el-col :span="12">
  279. <el-form-item prop="education">
  280. <el-col :span="21" slot="label">
  281. 最高学历
  282. </el-col>
  283. <el-col :span="24">
  284. <el-input v-model="form.education" placeholder="请输入最高学历"></el-input>
  285. </el-col>
  286. </el-form-item>
  287. </el-col>
  288. <el-col :span="12">
  289. <el-form-item prop="birthDate">
  290. <el-col :span="21" slot="label">
  291. 出生日期
  292. </el-col>
  293. <el-col :span="24">
  294. <el-date-picker v-model="form.birthDate" type="date" placeholder="选择日期" value-format="yyyy-MM-dd"> </el-date-picker>
  295. </el-col>
  296. </el-form-item>
  297. </el-col>
  298. <el-col :span="12">
  299. <el-form-item prop="qqwx">
  300. <el-col :span="21" slot="label">
  301. QQ/微信
  302. </el-col>
  303. <el-col :span="24">
  304. <el-input v-model="form.qqwx" placeholder="请输入QQ/微信"></el-input>
  305. </el-col>
  306. </el-form-item>
  307. </el-col>
  308. <el-col :span="12">
  309. <el-form-item prop="email">
  310. <el-col :span="21" slot="label">
  311. 电子邮箱
  312. </el-col>
  313. <el-col :span="24">
  314. <el-input v-model="form.email" placeholder="请输入电子邮箱"></el-input>
  315. </el-col>
  316. </el-form-item>
  317. </el-col>
  318. <el-col :span="12">
  319. <el-form-item prop="zwzc">
  320. <el-col :span="21" slot="label">
  321. 职务职称
  322. </el-col>
  323. <el-col :span="24">
  324. <el-input v-model="form.zwzc" placeholder="请输入职务职称"></el-input>
  325. </el-col>
  326. </el-form-item>
  327. </el-col>
  328. <el-col :span="24">
  329. <el-form-item prop="expertise">
  330. <el-col :span="21" slot="label">
  331. 请输入擅长领域
  332. </el-col>
  333. <el-col :span="24">
  334. <el-input v-model="form.expertise" placeholder="请输入擅长领域"></el-input>
  335. </el-col>
  336. </el-form-item>
  337. </el-col>
  338. <el-col :span="24" class="langInfoImage">
  339. <el-form-item prop="expertimage">
  340. <el-col :span="21" slot="label">
  341. 头像
  342. </el-col>
  343. <el-col :span="24">
  344. <upload :limit="1" :data="form.expertimage" type="expertimage" :url="'/files/imgpath/upload'" @upload="uploadSuccess"></upload>
  345. </el-col>
  346. </el-form-item>
  347. </el-col>
  348. <el-col :span="24" class="langInfo">
  349. <el-form-item prop="workexperience">
  350. <el-col :span="21" slot="label">
  351. 工作经历
  352. </el-col>
  353. <el-col :span="24">
  354. <el-input
  355. v-model="form.workexperience"
  356. type="textarea"
  357. maxlength="300"
  358. show-word-limit
  359. :autosize="{ minRows: 4, maxRows: 5 }"
  360. placeholder="请输入工作经历"
  361. ></el-input>
  362. </el-col>
  363. </el-form-item>
  364. </el-col>
  365. <el-col :span="24" class="langInfo">
  366. <el-form-item prop="scientific">
  367. <el-col :span="21" slot="label">
  368. 科研综述
  369. </el-col>
  370. <el-col :span="24">
  371. <el-input
  372. v-model="form.scientific"
  373. type="textarea"
  374. maxlength="300"
  375. show-word-limit
  376. :autosize="{ minRows: 4, maxRows: 5 }"
  377. placeholder="请输入科研综述"
  378. ></el-input>
  379. </el-col>
  380. </el-form-item>
  381. </el-col>
  382. <el-col :span="24" class="langInfo">
  383. <el-form-item prop="undertakingproject">
  384. <el-col :span="21" slot="label">
  385. 承担项目
  386. </el-col>
  387. <el-col :span="24">
  388. <el-input
  389. v-model="form.undertakingproject"
  390. type="textarea"
  391. maxlength="300"
  392. show-word-limit
  393. :autosize="{ minRows: 4, maxRows: 5 }"
  394. placeholder="请输入承担项目"
  395. ></el-input>
  396. </el-col>
  397. </el-form-item>
  398. </el-col>
  399. <el-col :span="24" class="langInfo">
  400. <el-form-item prop="scienceaward">
  401. <el-col :span="21" slot="label">
  402. 科技奖励
  403. </el-col>
  404. <el-col :span="24">
  405. <el-input
  406. v-model="form.scienceaward"
  407. type="textarea"
  408. maxlength="300"
  409. show-word-limit
  410. :autosize="{ minRows: 4, maxRows: 5 }"
  411. placeholder="请输入科技奖励"
  412. ></el-input>
  413. </el-col>
  414. </el-form-item>
  415. </el-col>
  416. <el-col :span="24" class="langInfo">
  417. <el-form-item prop="social">
  418. <el-col :span="21" slot="label">
  419. 社会任职
  420. </el-col>
  421. <el-col :span="24">
  422. <el-input
  423. v-model="form.social"
  424. type="textarea"
  425. maxlength="300"
  426. show-word-limit
  427. :autosize="{ minRows: 4, maxRows: 5 }"
  428. placeholder="请输入社会任职"
  429. ></el-input>
  430. </el-col>
  431. </el-form-item>
  432. </el-col>
  433. </span>
  434. <span v-if="form.status == '3'">
  435. <el-col :span="24">
  436. <el-form-item prop="status">
  437. <el-col :span="21" slot="label">
  438. 用户审核状态
  439. </el-col>
  440. <el-col :span="24">
  441. <el-radio-group v-model="form.status">
  442. <el-radio label="0">待审核</el-radio>
  443. <el-radio label="3">待认证</el-radio>
  444. </el-radio-group>
  445. </el-col>
  446. </el-form-item>
  447. </el-col>
  448. </span>
  449. <el-col :span="24" class="btn">
  450. <el-button type="primary" @click="authSubmit" v-if="form.status == '0' || form.status == '3'">提交认证</el-button>
  451. <el-button type="primary" @click="upgradeSubmit" v-if="user.role == '4'">升级用户</el-button>
  452. <el-button type="primary" @click="onSubmit">提交修改</el-button>
  453. </el-col>
  454. </el-form>
  455. </el-col>
  456. </el-col>
  457. </el-row>
  458. <el-dialog title="绑定微信" :visible.sync="dialogVisible" width="50%" :before-close="handleClose">
  459. <div style="text-align:center">
  460. <img :src="qc" />
  461. </div>
  462. </el-dialog>
  463. </div>
  464. </template>
  465. <script>
  466. import { mapState, createNamespacedHelpers } from 'vuex';
  467. import upload from '@/components/uploadone.vue';
  468. const { mapActions: login } = createNamespacedHelpers('login');
  469. const { mapActions: market } = createNamespacedHelpers('market');
  470. const { mapActions: expertsuser } = createNamespacedHelpers('expertsuser');
  471. import QRCode from 'qrcode';
  472. export default {
  473. name: 'index',
  474. props: {},
  475. components: {
  476. upload,
  477. },
  478. data: function() {
  479. return {
  480. rules: {
  481. name: [{ required: true, message: '请输入用户名称', trigger: 'blur' }],
  482. phone: [{ required: true, message: '请输入手机号', trigger: 'blur' }],
  483. password: [{ required: true, message: '请输入密码', trigger: 'blur' }],
  484. role: [{ required: true, message: '请输入用户类型', trigger: 'blur' }],
  485. },
  486. form: {},
  487. qc: '',
  488. // 绑定微信
  489. dialogVisible: false,
  490. };
  491. },
  492. created() {
  493. this.searchInfo();
  494. },
  495. methods: {
  496. ...login({ logout: 'logout', transactiondtetle: 'delete' }),
  497. ...market(['fetch', 'update']),
  498. ...expertsuser({ expertsuserFetch: 'fetch', expertsuserUpdate: 'update', expertsuserUpgrade: 'upgrade' }),
  499. async searchInfo() {
  500. if (this.user.role == '4' || this.user.role == '5') {
  501. let res = await this.fetch(this.user.userid);
  502. if (res.errcode === 0) {
  503. this.$set(this, `form`, res.data);
  504. }
  505. } else if (this.user.role == '6') {
  506. let res = await this.expertsuserFetch(this.user.userid);
  507. if (res.errcode === 0) {
  508. console.log(res);
  509. this.$set(this, `form`, res.data);
  510. }
  511. }
  512. },
  513. async onSubmit() {
  514. if (this.form.role == '4' || this.form.role == '5' || this.form.role == '7') {
  515. let res;
  516. let msg;
  517. res = await this.update(this.form);
  518. } else if (this.form.role == '6') {
  519. let res;
  520. let msg;
  521. res = await this.expertsuserUpdate(this.form);
  522. }
  523. this.$message({
  524. message: '修改信息成功',
  525. type: 'success',
  526. });
  527. this.searchInfo();
  528. },
  529. async authSubmit() {
  530. let res;
  531. let msg;
  532. res = await this.update(this.form);
  533. this.$message({
  534. message: '提交认证信息成功,等待管理员认证',
  535. type: 'success',
  536. });
  537. this.searchInfo();
  538. },
  539. async upgradeSubmit() {
  540. this.form.status = '0';
  541. this.form.uid = this.user.uid;
  542. let res = await this.expertsuserUpgrade(this.form);
  543. if (this.$checkRes(res)) {
  544. this.$message({
  545. message: '用戶升級成功,等待管理员审核',
  546. type: 'success',
  547. });
  548. this.logout();
  549. this.$router.push({ path: '/webLogin' });
  550. } else {
  551. this.$message({
  552. message: '用戶升級失敗',
  553. type: 'error',
  554. });
  555. }
  556. },
  557. uploadSuccess({ type, data }) {
  558. this.$set(this.form, `${type}`, data.uri);
  559. },
  560. async creatQrCode() {
  561. let url = `http://free.liaoningdoupo.com/api/auth/wxchat?redirect_uri=http://free.liaoningdoupo.com/platmobile/bind/&type=1&uid=${this.user.uid}`; // 需要转换为二维码的内容
  562. let el = document.getElementById('qrCodeUrl');
  563. this.qc = await QRCode.toDataURL(url, { height: 200, width: 200 });
  564. },
  565. // 绑定微信打开
  566. bindWx() {
  567. this.dialogVisible = true;
  568. },
  569. // 绑定微信关闭
  570. handleClose() {
  571. this.dialogVisible = false;
  572. },
  573. },
  574. mounted() {
  575. this.creatQrCode();
  576. },
  577. computed: {
  578. ...mapState(['user']),
  579. pageTitle() {
  580. return `${this.$route.meta.title}`;
  581. },
  582. },
  583. metaInfo() {
  584. return { title: this.$route.meta.title };
  585. },
  586. };
  587. </script>
  588. <style lang="less" scoped>
  589. .leftTop {
  590. font-size: 18px;
  591. width: 96%;
  592. height: 41px;
  593. line-height: 35px;
  594. border-bottom: 1px solid #e5e5e5;
  595. position: relative;
  596. bottom: 1px;
  597. margin: 10px;
  598. font-weight: 600;
  599. color: #22529a;
  600. }
  601. .info {
  602. margin: 0 40px 15px 10px;
  603. border: 1px dashed #ccc;
  604. width: 96%;
  605. padding: 10px;
  606. /deep/.el-form-item {
  607. margin-bottom: 0px;
  608. }
  609. /deep/.el-form-item__label {
  610. border: 1px solid #dcdfe6;
  611. }
  612. /deep/.el-radio-group {
  613. border: 1px solid #ccc;
  614. padding: 12px 20px;
  615. width: 943px;
  616. }
  617. /deep/.el-input__inner {
  618. border-radius: 0;
  619. height: 42px;
  620. line-height: 42px;
  621. }
  622. /deep/.el-textarea__inner {
  623. border-radius: 0;
  624. }
  625. /deep/.langInfo .el-form-item__label {
  626. padding: 27px 0;
  627. }
  628. /deep/.langInfoImage .el-form-item__label {
  629. padding: 53px 0;
  630. }
  631. .btn {
  632. text-align: center;
  633. margin: 10px 0;
  634. }
  635. }
  636. .qrcode {
  637. padding: 10px 45px;
  638. span {
  639. float: left;
  640. width: 85px;
  641. font-size: 16px;
  642. color: #606266;
  643. padding: 50px 0;
  644. }
  645. img {
  646. border: 1px solid #ccc;
  647. }
  648. }
  649. </style>