edit.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. <template>
  2. <div class="container">
  3. <el-form :model="form" label-position="top" :rules="rules" ref="form" label-width="80px">
  4. <el-form-item label="入职人" prop="loginName">
  5. <el-input v-model="form.loginName" placeholder='请输入'></el-input>
  6. </el-form-item>
  7. <el-form-item label="部门">
  8. <treeselect :default-expand-level="1" v-model="form.deptId" :options="deptOptions" :normalizer="normalizer" placeholder="选择部门" />
  9. </el-form-item>
  10. <el-form-item label="职位">
  11. <el-select v-model="form.position" placeholder="请选择" style="width: 100%;">
  12. <el-option v-for="item in posOptions" :key="item.value" :label="item.label" :value="item.value">
  13. </el-option>
  14. </el-select>
  15. </el-form-item>
  16. <el-form-item label="员工类型" prop="employeeType">
  17. <el-select v-model="form.employeeType" placeholder="请选择" style="width: 100%;">
  18. <el-option v-for="item in posOptions" :key="item.value" :label="item.label" :value="item.value">
  19. </el-option>
  20. </el-select>
  21. </el-form-item>
  22. <el-form-item label="性别" prop="gender">
  23. <el-select v-model="form.gender" placeholder="请选择" style="width: 100%;">
  24. <el-option v-for="item in posOptions" :key="item.value" :label="item.label" :value="item.value">
  25. </el-option>
  26. </el-select>
  27. </el-form-item>
  28. <el-form-item label="出生日期" prop="birthday">
  29. <el-date-picker value-format="yyyy-MM-dd" v-model="form.birthday" type="date" placeholder="选择日期" style="width: 100%;">
  30. </el-date-picker>
  31. </el-form-item>
  32. <el-form-item label="联系电话" prop="contactNumber">
  33. <el-input v-model="form.contactNumber" placeholder='请输入'></el-input>
  34. </el-form-item>
  35. <el-form-item label="电子邮箱" prop="email">
  36. <el-input v-model="form.email" placeholder='请输入'></el-input>
  37. </el-form-item>
  38. <el-form-item label="教育背景">
  39. <el-input maxlength="50" show-word-limit type="textarea" v-model="form.education" placeholder='请输入'></el-input>
  40. </el-form-item>
  41. <el-form-item label="工作经验">
  42. <el-input maxlength="200" rows="4" show-word-limit type="textarea" v-model="form.workExperience" placeholder='请输入'></el-input>
  43. </el-form-item>
  44. <el-form-item label="入职日期" prop="startDate">
  45. <el-date-picker value-format="yyyy-MM-dd" v-model="form.startDate" type="date" placeholder="选择日期" style="width: 100%;">
  46. </el-date-picker>
  47. </el-form-item>
  48. <el-form-item label="附件">
  49. <!-- <FileUpload v-model="form.files" :limit="1"/> -->
  50. <el-upload
  51. action=""
  52. ref="privateKeyContentFile"
  53. :limit="1"
  54. :http-request="appCertUpload"
  55. :before-upload="fileBeforeUpload">
  56. <el-button size="small" type="primary" icon="el-icon-upload">点击上传</el-button>
  57. </el-upload>
  58. </el-form-item>
  59. <el-form-item label="备注">
  60. <el-input maxlength="200" rows="4" show-word-limit type="textarea" v-model="form.remarks" placeholder="请输入备注" />
  61. </el-form-item>
  62. <el-form-item label="审批人" prop="peopleList">
  63. <el-input type="textarea" v-model="form.peopleList" style="display: none;"/>
  64. <el-button class="button-new-tag" @click="openPS">+ 添加</el-button>
  65. <span :key="tag" v-for="tag in peopleList">
  66. <i class="el-icon-arrow-right"></i>
  67. <el-tag type="info" closable :disable-transitions="false"
  68. @close="handleClose(tag)">
  69. <span class="user-avatar">{{ tag.substring(0,1) || 'U' }}</span>
  70. {{ tag }}
  71. </el-tag>
  72. </span>
  73. </el-form-item>
  74. <el-form-item>
  75. <el-button type="primary" @click="onSubmit()">提交</el-button>
  76. <el-button @click="onSave()">暂存</el-button>
  77. </el-form-item>
  78. </el-form>
  79. <PeopleSelect ref="peopleSelect" :type="type" :isCheck="true" :open="peopleOpen" @cancel="peopleOpen = false"
  80. @submit="submitPeople"></PeopleSelect>
  81. </div>
  82. </template>
  83. <script>
  84. import { getLeave } from "@/api/bpm/leave"
  85. import { listDept } from "@/api/system/dept";
  86. import PeopleSelect from "@/components/PeopleSelect/index.vue";
  87. import FileUpload from "@/components/FileUpload";
  88. import Treeselect from "@riophae/vue-treeselect";
  89. import "@riophae/vue-treeselect/dist/vue-treeselect.css";
  90. export default {
  91. name: 'Index',
  92. components: {
  93. PeopleSelect,
  94. FileUpload,
  95. Treeselect,
  96. },
  97. props: {
  98. id: {
  99. type: [String, Number],
  100. default: undefined
  101. },
  102. },
  103. data() {
  104. return {
  105. entryId: undefined, // 编号
  106. // 部门树选项
  107. posOptions: [{
  108. value: '选项1',
  109. label: '黄金糕'
  110. }, {
  111. value: '选项2',
  112. label: '双皮奶'
  113. }, {
  114. value: '选项3',
  115. label: '蚵仔煎'
  116. }, {
  117. value: '选项4',
  118. label: '龙须面'
  119. }, {
  120. value: '选项5',
  121. label: '北京烤鸭'
  122. }],
  123. deptOptions: [],
  124. peopleList: [],
  125. form: {
  126. loginName: undefined,
  127. deptId: undefined,
  128. position: undefined,
  129. employeeType: undefined,
  130. gender: undefined,
  131. birthday: undefined,
  132. contactNumber: undefined,
  133. email: undefined,
  134. education: undefined,
  135. workExperience: undefined,
  136. startDate: undefined,
  137. files:undefined,
  138. remarks: undefined,
  139. peopleList: '',
  140. },
  141. rules: {
  142. loginName: [
  143. { required: true, message: '请输入活动名称', trigger: 'blur' },
  144. // { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
  145. ],
  146. employeeType: [
  147. { required: true, message: '请选择', trigger: 'change' }
  148. ],
  149. gender: [
  150. { required: true, message: '请选择', trigger: 'change' }
  151. ],
  152. birthday: [
  153. { required: true, message: '请选择日期', trigger: 'change' }
  154. ],
  155. contactNumber: [
  156. { required: true, trigger: "blur", message: "联系电话不能为空" },
  157. {
  158. validator: function (rule, value, callback) {
  159. if (/^1[0-9]\d{9}$|^0\d{2,3}-\d{7,8}$/.test(value) === false) {
  160. callback(new Error("联系电话格式错误"));
  161. } else {
  162. callback();
  163. }
  164. }, trigger: "blur"
  165. }
  166. ],
  167. email: [
  168. {
  169. required: true,
  170. type: "email",
  171. message: "'请输入正确的邮箱地址",
  172. trigger: ["blur", "change"]
  173. }
  174. ],
  175. startDate: [
  176. { required: true, message: '请选择日期', trigger: 'change' }
  177. ],
  178. peopleList:[
  179. { required: true, message: '请选择审批人', }
  180. ]
  181. },
  182. status: true,
  183. type: 'multiple',
  184. //是否打开选人组件,默认不打开
  185. peopleOpen: false,
  186. fileAccept: ".crt",
  187. queryParams: {
  188. name: undefined,
  189. status: undefined
  190. },
  191. }
  192. },
  193. created() {
  194. this.entryId = this.id || this.$route.query.id;
  195. console.log(this.entryId);
  196. // this.getDetail();
  197. this.getList();
  198. },
  199. methods: {
  200. /** 获得表单信息 */
  201. getDetail() {
  202. getLeave(this.entryId).then(response => {
  203. this.form = response.data;
  204. });
  205. },
  206. fileBeforeUpload(file) {
  207. // let format = '.' + file.name.split(".")[1];
  208. // if (format !== this.fileAccept) {
  209. // this.$message.error('请上传指定格式"' + this.fileAccept + '"文件');
  210. // return false;
  211. // }
  212. let isRightSize = file.size / 1024 / 1024 < 5
  213. if (!isRightSize) {
  214. this.$message.error('文件大小超过 5MB')
  215. }
  216. return isRightSize
  217. },
  218. appCertUpload(event) {
  219. console.log(event);
  220. // const file = event.file;
  221. const readFile = new FileReader()
  222. readFile.onload = (e) => {
  223. this.form.files = e.target.result
  224. console.log(this.form.files);
  225. }
  226. readFile.readAsText(event.file);
  227. },
  228. /** 查询部门列表 */
  229. getList() {
  230. listDept(this.queryParams).then(response => {
  231. this.deptOptions = this.handleTree(response.data, "id");
  232. });
  233. },
  234. /** 转换部门数据结构 */
  235. normalizer(node) {
  236. if (node.children && !node.children.length) {
  237. delete node.children;
  238. }
  239. return {
  240. id: node.id,
  241. label: node.name,
  242. children: node.children
  243. };
  244. },
  245. //提交
  246. onSubmit() {
  247. this.$refs.form.validate(valid => {
  248. if (valid) {
  249. console.log(this.form);
  250. this.$message.success('提交成功')
  251. } else {
  252. console.log('error submit!!');
  253. return false;
  254. }
  255. });
  256. },
  257. //暂存
  258. onSave() {
  259. },
  260. // 关闭标签
  261. handleClose(tag) {
  262. this.peopleList.splice(this.peopleList.indexOf(tag), 1);
  263. },
  264. //打开选人弹窗
  265. openPS() {
  266. this.peopleOpen = true;
  267. },
  268. //选择人的确定按钮事件 submitPeople(nikeNamelist)方法传参一个默认接收用户昵称数组 submitPeople(peopleList,nikeNamelist)方法传参两个则是接收用户昵称数组和用户账号数组
  269. submitPeople(peopleList,nikeNamelist) {
  270. console.log(peopleList);
  271. this.peopleList = nikeNamelist;
  272. this.form.peopleList = nikeNamelist.join(',');
  273. this.peopleOpen = false;
  274. },
  275. }
  276. }
  277. </script>
  278. <style lang="scss" scoped>
  279. .user-avatar{
  280. width: 22px;
  281. height: 22px;
  282. line-height: 19px;
  283. font-size: 12px;
  284. background: #46c26f;
  285. border: 1px solid transparent;
  286. border-radius: 50%;
  287. color: #fff;
  288. display: inline-block;
  289. overflow: hidden;
  290. text-align: center;
  291. vertical-align: middle;
  292. margin-bottom: 2px;
  293. }
  294. .el-tag+.el-tag {
  295. margin-left: 10px;
  296. }
  297. .button-new-tag {
  298. margin-right: 10px;
  299. height: 30px;
  300. line-height: 30px;
  301. padding-top: 0;
  302. padding-bottom: 0;
  303. }
  304. </style>