research.vue 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. <template>
  2. <div id="research">
  3. <el-row>
  4. <el-col :span="24" class="research">
  5. <el-col :span="24" class="one">
  6. <el-button type="primary" size="mini" @click="add">添加研发用户</el-button>
  7. </el-col>
  8. <el-col :span="24" class="two">
  9. <el-col :span="24" class="list">
  10. <el-table :data="list" border height="580">
  11. <el-table-column prop="research_name" label="姓名" align="center" show-overflow-tooltip> </el-table-column>
  12. <el-table-column prop="card" label="身份证号" align="center" show-overflow-tooltip> </el-table-column>
  13. <el-table-column prop="gender" label="性别" align="center" show-overflow-tooltip> </el-table-column>
  14. <el-table-column prop="birth" label="出生日期" align="center" show-overflow-tooltip> </el-table-column>
  15. <el-table-column prop="phone" label="电话" align="center" show-overflow-tooltip> </el-table-column>
  16. <el-table-column prop="email" label="邮箱" align="center" show-overflow-tooltip> </el-table-column>
  17. <el-table-column prop="zw" label="职务" align="center" show-overflow-tooltip> </el-table-column>
  18. <el-table-column prop="position" label="职称" align="center" show-overflow-tooltip> </el-table-column>
  19. <el-table-column prop="education" label="文化程度" align="center" show-overflow-tooltip> </el-table-column>
  20. <el-table-column prop="degree" label="学位" align="center" show-overflow-tooltip> </el-table-column>
  21. <el-table-column prop="abroad" label="是否留学归国" align="center" show-overflow-tooltip> </el-table-column>
  22. <el-table-column prop="research_company" label="工作单位" align="center" show-overflow-tooltip> </el-table-column>
  23. <el-table-column prop="devote" label="对成果创造性贡献" align="center" show-overflow-tooltip> </el-table-column>
  24. <el-table-column fixed="right" label="操作" width="100" align="center">
  25. <template slot-scope="scope">
  26. <el-button type="text" size="small" @click="toEdit(scope.$index, scope.row)">编辑</el-button>
  27. <el-button type="text" size="small" @click="toDelete(scope.$index, scope.row)">刪除</el-button>
  28. </template>
  29. </el-table-column>
  30. </el-table>
  31. </el-col>
  32. </el-col>
  33. <el-col :span="24" class="btn">
  34. <el-button type="primary" size="mini" @click="researchUp">上一步</el-button>
  35. <el-button type="primary" size="mini" @click="researchBtn">下一步</el-button>
  36. </el-col>
  37. </el-col>
  38. </el-row>
  39. <el-dialog class="dialog" title="研发人员信息管理" width="40%" :visible.sync="dialog" @closed="handleClose" :destroy-on-close="true">
  40. <el-form :model="form" :rules="rules" ref="form" label-width="130px">
  41. <el-form-item label="姓名" prop="research_name">
  42. <el-input v-model="form.research_name" placeholder="请输入姓名"></el-input>
  43. </el-form-item>
  44. <el-form-item label="身份证号" prop="card">
  45. <el-input v-model="form.card" placeholder="请输入身份证号"></el-input>
  46. </el-form-item>
  47. <el-form-item label="性别" prop="gender">
  48. <el-radio-group v-model="form.gender">
  49. <el-radio label="男"></el-radio>
  50. <el-radio label="女"></el-radio>
  51. </el-radio-group>
  52. </el-form-item>
  53. <el-form-item label="出生日期" prop="birth">
  54. <el-date-picker v-model="form.birth" type="date" placeholder="选择日期时间" format="yyyy-MM-dd" value-format="yyyy-MM-dd"> </el-date-picker>
  55. </el-form-item>
  56. <el-form-item label="电话" prop="phone">
  57. <el-input v-model="form.phone" placeholder="请输入电话"></el-input>
  58. </el-form-item>
  59. <el-form-item label="email" prop="email">
  60. <el-input v-model="form.email" placeholder="请输入邮箱"></el-input>
  61. </el-form-item>
  62. <el-form-item label="职务" prop="zw">
  63. <el-input v-model="form.zw" placeholder="请输入职务"></el-input>
  64. </el-form-item>
  65. <el-form-item label="职称" prop="position">
  66. <el-input v-model="form.position" placeholder="请输入职称"></el-input>
  67. </el-form-item>
  68. <el-form-item label="文化程度" prop="education">
  69. <el-input v-model="form.education" placeholder="请输入文化程度"></el-input>
  70. </el-form-item>
  71. <el-form-item label="学位" prop="degree">
  72. <el-input v-model="form.degree" placeholder="请输入学位"></el-input>
  73. </el-form-item>
  74. <el-form-item label="是否留学归国" prop="abroad">
  75. <el-radio-group v-model="form.abroad">
  76. <el-radio label="是"></el-radio>
  77. <el-radio label="否"></el-radio>
  78. </el-radio-group>
  79. </el-form-item>
  80. <el-form-item label="工作单位" prop="research_company">
  81. <el-input v-model="form.research_company" placeholder="请输入工作单位"></el-input>
  82. </el-form-item>
  83. <el-form-item label="对成果创造性贡献" prop="devote">
  84. <el-input
  85. v-model="form.devote"
  86. type="textarea"
  87. maxlength="200"
  88. show-word-limit
  89. :autosize="{ minRows: 4, maxRows: 5 }"
  90. placeholder="请输入对成果创造性贡献"
  91. ></el-input>
  92. </el-form-item>
  93. <el-col :span="24" class="btn">
  94. <el-button type="primary" size="mini" @click="handleClose">取消</el-button>
  95. <el-button type="primary" size="mini" @click="onSubmit('form')">保存</el-button>
  96. </el-col>
  97. </el-form>
  98. </el-dialog>
  99. </div>
  100. </template>
  101. <script>
  102. import { mapState, createNamespacedHelpers } from 'vuex';
  103. export default {
  104. name: 'research',
  105. props: {
  106. researchForm: { type: Array },
  107. },
  108. components: {},
  109. data: function() {
  110. return {
  111. dialog: false,
  112. form: {},
  113. rules: {
  114. research_name: [{ required: true, message: '请输入姓名', trigger: 'blur' }],
  115. card: [{ required: true, message: '请输入身份证号', trigger: 'blur' }],
  116. gender: [{ required: true, message: '请选择性别', trigger: 'change' }],
  117. position: [{ required: true, message: '请输入技术职称', trigger: 'blur' }],
  118. education: [{ required: true, message: '请输入文化程度', trigger: 'blur' }],
  119. degree: [{ required: true, message: '请输入学位', trigger: 'blur' }],
  120. abroad: [{ required: true, message: '请选择是否留学归国', trigger: 'change' }],
  121. research_company: [{ required: true, message: '请输入工作单位', trigger: 'blur' }],
  122. devote: [{ required: true, message: '请输入对成果创造性贡献', trigger: 'blur' }],
  123. },
  124. // 列表
  125. list: [],
  126. };
  127. },
  128. created() {},
  129. methods: {
  130. researchUp() {
  131. this.$emit('researchUp');
  132. },
  133. researchBtn() {
  134. this.$emit('researchBtn', { data: this.list });
  135. },
  136. // 添加研发人员
  137. // 添加用户
  138. add() {
  139. this.dialog = true;
  140. },
  141. // 保存
  142. onSubmit(formName) {
  143. this.$refs[formName].validate(valid => {
  144. if (valid) {
  145. console.log(this.form);
  146. if (this.form.index == undefined) {
  147. let data = _.cloneDeep(this.list);
  148. data.push(this.form);
  149. this.$set(this, `list`, data);
  150. this.handleClose();
  151. } else {
  152. this.handleClose();
  153. }
  154. } else {
  155. console.log('error submit!!');
  156. return false;
  157. }
  158. });
  159. },
  160. // 编辑
  161. toEdit(index, row) {
  162. row.index = index;
  163. this.$set(this, `form`, row);
  164. this.dialog = true;
  165. },
  166. // 删除
  167. toDelete(index) {
  168. this.list.splice(index, 1);
  169. },
  170. // 取消
  171. handleClose() {
  172. this.form = {};
  173. this.dialog = false;
  174. },
  175. search() {
  176. this.$set(this, `list`, this.researchForm);
  177. },
  178. },
  179. computed: {
  180. ...mapState(['user']),
  181. pageTitle() {
  182. return `${this.$route.meta.title}`;
  183. },
  184. },
  185. metaInfo() {
  186. return { title: this.$route.meta.title };
  187. },
  188. watch: {
  189. researchForm: {
  190. deep: true,
  191. immediate: true,
  192. handler(val) {
  193. this.search();
  194. },
  195. },
  196. },
  197. };
  198. </script>
  199. <style lang="less" scoped>
  200. .research {
  201. padding: 0 10px 0 0;
  202. .one {
  203. margin: 0 0 10px 0;
  204. }
  205. .two {
  206. margin: 0 0 10px 0;
  207. .list {
  208. margin: 0 0 10px 0;
  209. border-bottom: 1px solid #f1f1f1;
  210. }
  211. .page {
  212. height: 40px;
  213. overflow: hidden;
  214. border: 1px solid red;
  215. }
  216. }
  217. .btn {
  218. text-align: center;
  219. }
  220. }
  221. .dialog {
  222. .btn {
  223. text-align: center;
  224. padding: 0 0 10px 0;
  225. }
  226. }
  227. /deep/.el-dialog__body {
  228. padding: 0 15px 40px 0;
  229. }
  230. </style>