Mine.vue 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. <template>
  2. <div class="right-mine">
  3. <div class="right-mine-title">
  4. <span style="font-size: 18px;font-weight: bold">基本设置</span>
  5. <el-button v-if="!isModifyMode" type="primary" size="mini" class="pull-right" @click="isModifyMode = true">编辑</el-button>
  6. </div>
  7. <div style="margin-bottom: 15px;width: 60%">
  8. <el-form :model="userForm" status-icon ref="userForm" label-width="100px" class="demo-ruleForm">
  9. <el-form-item label="头像" prop="avator">
  10. <el-upload
  11. class="avatar-uploader"
  12. action="https://jsonplaceholder.typicode.com/posts/"
  13. :before-upload="beforeFileUpload"
  14. :http-request="uploadFile"
  15. :disabled="!isModifyMode"
  16. >
  17. <img v-if="userForm.photoUrl" :src="userForm.photoUrl" class="avatar">
  18. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  19. </el-upload>
  20. </el-form-item>
  21. <el-form-item label="用户名" prop="username">
  22. <el-input v-model="userForm.userName" autocomplete="off" :disabled="!isModifyMode"></el-input>
  23. </el-form-item>
  24. <el-form-item label="企业简称" prop="enterprise">
  25. <el-input v-model="userForm.unit" autocomplete="off" :disabled="!isModifyMode"></el-input>
  26. </el-form-item>
  27. <el-form-item label="性别" prop="gender">
  28. <el-radio-group v-model="userForm.gender" :disabled="!isModifyMode">
  29. <el-radio label="男"></el-radio>
  30. <el-radio label="女"></el-radio>
  31. </el-radio-group>
  32. </el-form-item>
  33. <el-form-item label="生日" prop="birthday">
  34. <el-date-picker type="date" placeholder="选择日期" v-model="userForm.birthday"
  35. style="width: 100%;" :disabled="!isModifyMode"></el-date-picker>
  36. </el-form-item>
  37. <el-form-item label="联系地址" prop="address" style="width: 160%">
  38. <provincecity
  39. ref="addFormProvince"
  40. @selectChange="locationChange"
  41. :provinceCode="userForm.location==null?'3200':userForm.location.provinceCode"
  42. :cityCode="userForm.location==null?'3201':userForm.location.cityCode"
  43. :isModifyMode="!isModifyMode"
  44. ></provincecity>
  45. </el-form-item>
  46. <el-form-item label="个人能力" style="width: 160%">
  47. <el-checkbox-group v-model="userForm.personalCompetence" :disabled="!isModifyMode">
  48. <el-checkbox v-for="item in serviceType" :label="item.code" :name="item.code" :key="item.code" >{{item.name}}</el-checkbox>
  49. </el-checkbox-group>
  50. </el-form-item>
  51. <el-form-item>
  52. <el-button v-if="isModifyMode" type="primary" size="small" class="pull-left" @click="submitUserInfo">提交修改</el-button>
  53. </el-form-item>
  54. </el-form>
  55. </div>
  56. </div>
  57. </template>
  58. <script>
  59. import Http from '@/js/http'
  60. import Apis from '@/js/api'
  61. import {notify} from '@/constants/index'
  62. import {storageGet,getAllServiceTypes,getProvinceNameByProvinceCode,getProvinceCodeByProvinceName} from '@/js/index'
  63. import provincecity from '@/components/commons/ProvinceCity'
  64. export default {
  65. name: "Mine",
  66. data() {
  67. return {
  68. user: {},
  69. isModifyMode:false,
  70. serviceType:[],
  71. userForm: {
  72. gender:"",
  73. birthday:new Date(),
  74. photoUrl :'',
  75. userName: '',
  76. unit:'',
  77. personalCompetence:[],
  78. province:'',
  79. city:''
  80. }
  81. }
  82. },
  83. components:{
  84. provincecity
  85. },
  86. methods: {
  87. submitUserInfo(){
  88. Http.put(`/api/personal/update/${this.user.id}`,this.userForm).then(res=>{
  89. this.isModifyMode = false;
  90. })
  91. },
  92. //联系地址改变
  93. locationChange (provinceId, cityId) {
  94. console.log("aaa",provinceId,cityId)
  95. if (provinceId || cityId) {
  96. this.userForm.province = provinceId
  97. this.userForm.city = cityId
  98. }
  99. },
  100. //文件上传前的响应函数
  101. beforeFileUpload (file) {
  102. // 文件大小不能超过10M
  103. if (file.size > 5 * 1000 * 1000){
  104. notify('error', '单个文件大小不能超过5M')
  105. return false;
  106. }
  107. let fileName = file.name
  108. let index = fileName.lastIndexOf('.');
  109. // 文件不能没有后缀
  110. if (index <= 0){
  111. notify('error', '只能上传png/jpg/jpeg格式的文件')
  112. return false;
  113. }
  114. let fileSuffix = fileName.substr(index)
  115. // 文件后缀必须是.png或者.jpg
  116. if (fileSuffix !== '.jpg' && fileSuffix !== '.png' && fileSuffix !== '.jpeg') {
  117. notify('error', '只能上传png/jpg/jpeg格式的文件')
  118. return false;
  119. }
  120. },
  121. //上传文件,此处为上传图片
  122. uploadFile (param) {
  123. const formData = new FormData()
  124. let config = {
  125. //添加请求头
  126. headers: {'Content-Type': 'multipart/form-data'},
  127. }
  128. formData.append('file', param.file)
  129. //console.log(JSON.parse(this.user).userVO)
  130. Http.upload(Apis.FILE.UPLOAD_IMAGE.replace('{userId}', this.user.id), formData, config).then((res) => {
  131. this.userForm.photoUrl = res.data
  132. notify('success', '上传成功')
  133. // this.$refs['agency'].validateField('photoUrl');
  134. }).catch(error => {
  135. notify('error', error.data)
  136. })
  137. },
  138. loadData() {
  139. Http.get(`/api/personal/display/${this.user.id}`).then((res) => {
  140. this.userForm.gender = res.userVO.gender ? res.userVO.gender : '';
  141. this.userForm.photoUrl = res.userVO.photoUrl ? res.userVO.photoUrl : '';
  142. this.userForm.birthday = res.userVO.birthday ? res.userVO.birthday : new Date();
  143. this.userForm.userName = res.userVO.userName ? res.userVO.userName : '';
  144. this.userForm.unit = res.userVO.unit ? res.userVO.unit : '';
  145. this.userForm.province = res.userVO.unit ? res.userVO.province : '';
  146. this.userForm.city = res.userVO.unit ? res.userVO.city : '';
  147. this.userForm.personalCompetence = res.userVO.personalCompetence ? res.userVO.personalCompetence : [];
  148. //获取省市code
  149. let location = getProvinceCodeByProvinceName(this.userForm.province, this.userForm.city);
  150. this.userForm.province = location.provinceCode;
  151. this.userForm.city = location.cityCode;
  152. this.userForm.location=location;
  153. })
  154. },
  155. setUserInfo(){
  156. this.user = storageGet('user') && storageGet('user').userVO;
  157. },
  158. setServiceType () {
  159. getAllServiceTypes().then((res) => {
  160. this.serviceType = res;
  161. })
  162. },
  163. },
  164. mounted() {
  165. this.setUserInfo();
  166. this.setServiceType();
  167. this.loadData();
  168. }
  169. }
  170. </script>
  171. <style scoped lang="less">
  172. .avatar-uploader .el-upload {
  173. //border: 1px dashed #d9d9d9;
  174. border-radius: 6px;
  175. cursor: pointer;
  176. position: relative;
  177. overflow: hidden;
  178. margin-right: 30px;
  179. }
  180. .avatar-uploader .el-upload:hover {
  181. border-color: #409EFF;
  182. }
  183. .avatar-uploader-icon {
  184. font-size: 28px;
  185. color: #8c939d;
  186. width: 278px;
  187. height: 178px;
  188. line-height: 178px;
  189. text-align: center;
  190. }
  191. .avatar {
  192. width: 178px;
  193. height: 178px;
  194. display: block;
  195. }
  196. .right-mine {
  197. padding: 20px;
  198. background-color: rgba(255, 255, 255, 1);
  199. box-shadow: 0px 1px 6px 0px rgba(8, 6, 6, 0.13);
  200. .right-mine-title {
  201. padding: 10px;
  202. border-bottom: 1px solid #ccc;
  203. margin-bottom: 20px;
  204. }
  205. .avator-wrapper {
  206. height: 70px;
  207. width: 70px;
  208. line-height: 70px;
  209. vertical-align: middle;
  210. }
  211. }
  212. </style>