index.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. <template>
  2. <div id="index">
  3. <el-row>
  4. <el-col :span="24">
  5. <!-- <el-col :span="24" class="add" style="text-align:right;padding: 10px 20px;">
  6. <el-button size="mini" type="primary" @click="toAdd" icon="el-icon-plus">添加{{ theme }}</el-button>
  7. </el-col> -->
  8. <el-col :span="24" class="main">
  9. <data-table :fields="fields" :opera="opera" @edit="toEdit" :data="list" :total="total" @delete="toDelete" @query="search"></data-table>
  10. </el-col>
  11. <el-dialog :title="theme" width="60%" :visible.sync="dialog" @closed="handleClose" :destroy-on-close="true">
  12. <el-form ref="form" :model="form" label-width="100px">
  13. <el-form-item label="用户状态" v-if="form.role !== '1'">
  14. <el-radio-group v-model="form.status">
  15. <el-radio label="0" disabled>已注册</el-radio>
  16. <el-radio label="1">审核成功</el-radio>
  17. <el-radio label="2">审核未通过</el-radio>
  18. </el-radio-group>
  19. </el-form-item>
  20. <el-form-item label="用户名称" prop="name">
  21. <el-input v-model="form.name" placeholder="请输入用户名称"></el-input>
  22. </el-form-item>
  23. <el-form-item label="手机号" prop="phone">
  24. <el-input v-model="form.phone" placeholder="请输入手机号" :minlength="11" :maxlength="11"></el-input>
  25. </el-form-item>
  26. <el-form-item label="用户类别" prop="role">
  27. <el-radio-group v-model="form.role">
  28. <el-radio label="4">个人</el-radio>
  29. <el-radio label="5">机构管理员</el-radio>
  30. <el-radio label="6">专家</el-radio>
  31. </el-radio-group>
  32. </el-form-item>
  33. <span v-if="form.role == '4' || form.role == '5'">
  34. <el-form-item label="身份证号" prop="cardnumber">
  35. <el-input v-model="form.cardnumber" placeholder="请输入身份证号" :minlength="18" :maxlength="18"></el-input>
  36. </el-form-item>
  37. <el-form-item label="邮箱" prop="email">
  38. <el-input v-model="form.email" placeholder="请输入邮箱"></el-input>
  39. </el-form-item>
  40. <el-form-item label="地址" prop="addr">
  41. <el-input v-model="form.addr" placeholder="请输入地址"></el-input>
  42. </el-form-item>
  43. <el-form-item label="头像图片" prop="img_path">
  44. <upload :limit="1" :data="form.img_path" type="img_path" :url="'/files/imgpath/upload'" @upload="uploadSuccess"></upload>
  45. </el-form-item>
  46. <el-form-item label="身份证正面" prop="cardfile_a">
  47. <upload :limit="1" :data="form.cardfile_a" type="cardfile_a" :url="'/files/cardfilea/upload'" @upload="uploadSuccess"></upload>
  48. </el-form-item>
  49. <el-form-item label="身份证背面" prop="cardfile_b">
  50. <upload :limit="1" :data="form.cardfile_b" type="cardfile_b" :url="'/files/cardfileb/upload'" @upload="uploadSuccess"></upload>
  51. </el-form-item>
  52. <el-form-item label="办公电话" prop="office_phone">
  53. <el-input v-model="form.office_phone" placeholder="请输入办公电话"></el-input>
  54. </el-form-item>
  55. <el-form-item label="所属行业" prop="profession">
  56. <el-input v-model="form.profession" placeholder="请输入所属行业"></el-input>
  57. </el-form-item>
  58. </span>
  59. <span v-if="form.role == '4'">
  60. <el-form-item label="个人简历" v-if="form.role == '4'">
  61. <el-input type="textarea" v-model="form.resume" placeholder="请输入个人简介"></el-input>
  62. </el-form-item>
  63. </span>
  64. <span v-else-if="form.role == '5'">
  65. <el-form-item label="组织机构图片" v-if="form.role == '5'" prop="img_qy">
  66. <upload :limit="1" :data="form.img_qy" type="img_qy" :url="'/files/imgqy/upload'" @upload="uploadSuccess"></upload>
  67. </el-form-item>
  68. <el-form-item label="机构类型" prop="institution_type">
  69. <el-input v-model="form.institution_type" placeholder="请输入机构类型"></el-input>
  70. </el-form-item>
  71. <el-form-item label="机构名称" prop="institution_name">
  72. <el-input v-model="form.institution_name" placeholder="请输入机构名称"></el-input>
  73. </el-form-item>
  74. <el-form-item label="机构代码" prop="institution_code">
  75. <el-input v-model="form.institution_code" placeholder="请输入机构代码"></el-input>
  76. </el-form-item>
  77. <el-form-item label="机构性质" prop="institution_nature">
  78. <el-input v-model="form.institution_nature" placeholder="请输入机构性质"></el-input>
  79. </el-form-item>
  80. </span>
  81. <span v-else-if="form.role == '6'">
  82. <el-form-item label="头像">
  83. <upload :limit="1" :data="form.expertimage" type="expertimage" :url="'/files/imgpath/upload'" @upload="uploadSuccess"></upload>
  84. </el-form-item>
  85. <el-form-item label="最高学历">
  86. <el-input v-model="form.education" placeholder="请输入最高学历"></el-input>
  87. </el-form-item>
  88. <el-form-item label="毕业院校">
  89. <el-input v-model="form.school" placeholder="请输入毕业院校"></el-input>
  90. </el-form-item>
  91. <el-form-item label="出生日期">
  92. <el-date-picker v-model="form.birthDate" type="date" placeholder="选择日期" value-format="yyyy-MM-dd"> </el-date-picker>
  93. </el-form-item>
  94. <el-form-item label="QQ/微信">
  95. <el-input v-model="form.qqwx" placeholder="请输入QQ/微信"></el-input>
  96. </el-form-item>
  97. <el-form-item label="电子邮箱">
  98. <el-input v-model="form.email" placeholder="请输入电子邮箱"></el-input>
  99. </el-form-item>
  100. <el-form-item label="工作单位">
  101. <el-input v-model="form.company" placeholder="请输入工作单位"></el-input>
  102. </el-form-item>
  103. <el-form-item label="职务职称">
  104. <el-input v-model="form.zwzc" placeholder="请输入职务职称"></el-input>
  105. </el-form-item>
  106. <el-form-item label="擅长领域">
  107. <el-input v-model="form.expertise" placeholder="请输入擅长领域"></el-input>
  108. </el-form-item>
  109. <el-form-item label="工作经历">
  110. <el-input
  111. v-model="form.workexperience"
  112. type="textarea"
  113. maxlength="300"
  114. show-word-limit
  115. :autosize="{ minRows: 2, maxRows: 5 }"
  116. placeholder="请输入工作经历"
  117. ></el-input>
  118. </el-form-item>
  119. <el-form-item label="科研综述">
  120. <el-input
  121. v-model="form.scientific"
  122. type="textarea"
  123. maxlength="300"
  124. show-word-limit
  125. :autosize="{ minRows: 2, maxRows: 5 }"
  126. placeholder="请输入科研综述"
  127. ></el-input>
  128. </el-form-item>
  129. <el-form-item label="承担项目">
  130. <el-input
  131. v-model="form.undertakingproject"
  132. type="textarea"
  133. maxlength="300"
  134. show-word-limit
  135. :autosize="{ minRows: 2, maxRows: 5 }"
  136. placeholder="请输入承担项目"
  137. ></el-input>
  138. </el-form-item>
  139. <el-form-item label="科技奖励">
  140. <el-input
  141. v-model="form.scienceaward"
  142. type="textarea"
  143. maxlength="300"
  144. show-word-limit
  145. :autosize="{ minRows: 2, maxRows: 5 }"
  146. placeholder="请输入科技奖励"
  147. ></el-input>
  148. </el-form-item>
  149. <el-form-item label="社会任职">
  150. <el-input
  151. v-model="form.social"
  152. type="textarea"
  153. maxlength="300"
  154. show-word-limit
  155. :autosize="{ minRows: 2, maxRows: 5 }"
  156. placeholder="请输入社会任职"
  157. ></el-input>
  158. </el-form-item>
  159. </span>
  160. <el-form-item>
  161. <el-button @click="handleClose">返回</el-button>
  162. <el-button type="primary" @click="handleSave()">提交</el-button>
  163. </el-form-item>
  164. </el-form>
  165. </el-dialog>
  166. </el-col>
  167. </el-row>
  168. </div>
  169. </template>
  170. <script>
  171. import upload from '@/components/uploadone.vue';
  172. import dataTable from '@/components/data-table.vue';
  173. import { mapState, createNamespacedHelpers } from 'vuex';
  174. const { mapActions: users } = createNamespacedHelpers('users');
  175. const { mapActions: expertsuser } = createNamespacedHelpers('expertsuser');
  176. export default {
  177. name: 'index',
  178. props: {},
  179. components: {
  180. dataTable,
  181. upload,
  182. },
  183. data: function() {
  184. return {
  185. theme: '用戶',
  186. opera: [
  187. {
  188. label: '审核',
  189. icon: 'el-icon-edit',
  190. method: 'edit',
  191. },
  192. {
  193. label: '删除',
  194. icon: 'el-icon-delete',
  195. method: 'delete',
  196. confirm: true,
  197. },
  198. ],
  199. fields: [
  200. { label: '姓名', prop: 'name', filter: 'input' },
  201. { label: '电话', prop: 'phone', filter: 'input' },
  202. { label: '用戶类型', prop: 'role', format: i => (i == '4' ? '个人用户' : i == '5' ? '企业用户' : i == '6' ? '专家' : '临时用户') },
  203. { label: '状态', prop: 'status', format: i => (i == '0' ? '待审核' : i == '1' ? '审核成功' : i == '2' ? '审核不成功' : '待认证') },
  204. ],
  205. list: [],
  206. total: 0,
  207. dialog: false,
  208. form: {},
  209. editData: {},
  210. };
  211. },
  212. created() {
  213. this.search();
  214. },
  215. methods: {
  216. ...users(['fetch', 'create', 'query', 'update', 'delete', 'userquery']),
  217. ...expertsuser({ exportuserFetch: 'fetch', exportuserCreate: 'create', exportuserUpdate: 'update' }),
  218. async search({ skip = 0, limit = 10, pid = '', ...info } = {}) {
  219. if (this.user.code == 'JLCJGLY') {
  220. const res = await this.userquery({ skip, limit, ...info });
  221. if (this.$checkRes(res)) {
  222. this.$set(this, `list`, res.data);
  223. this.$set(this, `total`, res.total);
  224. }
  225. } else {
  226. const res = await this.userquery({ skip, limit, pid, code: this.user.code, ...info });
  227. if (this.$checkRes(res)) {
  228. this.$set(this, `list`, res.data);
  229. this.$set(this, `total`, res.total);
  230. }
  231. }
  232. },
  233. // 添加
  234. toAdd() {
  235. console.log('添加');
  236. },
  237. // 修改
  238. async toEdit({ data }) {
  239. if (data.role == '6') {
  240. const res = await this.exportuserFetch(data.uid);
  241. if (this.$checkRes(res)) {
  242. this.$set(this, `form`, res.data);
  243. }
  244. } else {
  245. const res = await this.fetch(data.uid);
  246. if (this.$checkRes(res)) {
  247. this.$set(this, `form`, res.data);
  248. }
  249. }
  250. this.$set(this, `editData`, data);
  251. this.dialog = true;
  252. },
  253. // 提交
  254. async handleSave() {
  255. let data = this.editData;
  256. data.status = this.form.status;
  257. if (data.role == '4' || data.role == '5') {
  258. data.id = data.uid;
  259. let res = await this.update(data);
  260. if (this.$checkRes(res)) {
  261. this.$message({
  262. message: '审核信息成功',
  263. type: 'success',
  264. });
  265. this.handleClose();
  266. }
  267. } else if (data.role == '6') {
  268. data.id = data.uid;
  269. let res = await this.exportuserUpdate(data);
  270. if (this.$checkRes(res)) {
  271. this.$message({
  272. message: '修改信息成功',
  273. type: 'success',
  274. });
  275. this.handleClose();
  276. }
  277. }
  278. },
  279. // 删除
  280. toDelete() {},
  281. // 取消
  282. handleClose() {
  283. this.dialog = false;
  284. this.form = {};
  285. },
  286. uploadSuccess({ type, data }) {
  287. this.$set(this.form, `${type}`, data.uri);
  288. },
  289. setIsQy(data) {
  290. let val = '0';
  291. data == '2' ? (val = '0') : (val = '1');
  292. this.$set(this.form, `is_qy`, val);
  293. },
  294. },
  295. computed: {
  296. ...mapState(['user']),
  297. pageTitle() {
  298. return `${this.$route.meta.title}`;
  299. },
  300. },
  301. metaInfo() {
  302. return { title: this.$route.meta.title };
  303. },
  304. };
  305. </script>
  306. <style lang="less" scoped></style>