info.vue 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. <template>
  2. <div class="member_info_container">
  3. <MemberTitle :memberTitle="L['会员信息']"></MemberTitle>
  4. <div class="member_info">
  5. <!-- <table class="form_item">
  6. <tr>
  7. <td>
  8. <span class="tag_name">{{ L["用户头像"] }}:</span>
  9. </td>
  10. <td>
  11. <form action="" enctype="multipart/form-data">
  12. <label for="file" class="chooseBtn"
  13. ><img :src="tempSrc" id="show"
  14. /></label>
  15. <input
  16. id="file"
  17. class="filepath"
  18. @change="changepic"
  19. type="file"
  20. name="image"
  21. size="1"
  22. accept="image/gif,image/jpeg,image/jpg,image/png,image/bmp"
  23. />
  24. </form>
  25. </td>
  26. </tr>
  27. <tr>
  28. <td></td>
  29. <td>
  30. {{
  31. L["仅支持JPG、GIF、PNG、JPEG、BMP格式;文件大小请在4.0MB之内。"]
  32. }}
  33. </td>
  34. </tr>
  35. <tr>
  36. <td>
  37. <span class="tag_name">{{ L["会员名:"] }}</span>
  38. </td>
  39. <td>
  40. <el-input
  41. id="memberName"
  42. v-model="memberNameInput"
  43. :disabled="true"
  44. ></el-input>
  45. </td>
  46. </tr>
  47. <tr>
  48. <td>
  49. <span class="tag_name">{{ L["真实姓名"] }}:</span>
  50. </td>
  51. <td>
  52. <el-input
  53. id="memberTrueName"
  54. v-model="memberTrueName"
  55. maxlength="10"
  56. show-word-limit
  57. >
  58. </el-input>
  59. </td>
  60. </tr>
  61. <tr>
  62. <td>
  63. <span class="tag_name">{{ L["昵称:"] }}</span>
  64. </td>
  65. <td>
  66. <el-input
  67. type="text"
  68. id="memberNickName"
  69. v-model="memberNickNameInput"
  70. maxlength="15"
  71. show-word-limit
  72. ></el-input>
  73. </td>
  74. </tr>
  75. <tr>
  76. <td>
  77. <span class="tag_name">{{ L["公司名称:"] }}</span>
  78. </td>
  79. <td>
  80. <el-input
  81. type="text"
  82. v-model="member_company"
  83. maxlength="100"
  84. show-word-limit
  85. ></el-input>
  86. </td>
  87. </tr>
  88. <tr>
  89. <td>
  90. <span class="tag_name">{{ L["主营产品:"] }}</span>
  91. </td>
  92. <td>
  93. <el-input
  94. type="textarea"
  95. v-model="member_main_product"
  96. maxlength="200"
  97. show-word-limit
  98. ></el-input>
  99. </td>
  100. </tr>
  101. </table> -->
  102. <div class="memInfo_save">
  103. <el-button @click="memberInfoSave">{{ L["保存"] }}</el-button>
  104. </div>
  105. </div>
  106. </div>
  107. </template>
  108. <script setup>
  109. import { getCurrentInstance, ref, onMounted, watch } from 'vue';
  110. import { ElInput, ElButton, ElMessage,ElRadioGroup,ElRadio } from "element-plus";
  111. import axios from "axios";
  112. import { getCurLanguage } from '@/composables/common.js';
  113. import { useFiltersStore } from "@/store/filter.js";
  114. const L = getCurLanguage();
  115. const filtersStore = useFiltersStore();
  116. definePageMeta({
  117. layout: "member",
  118. middleware: ["auth"],
  119. });
  120. const { proxy } = getCurrentInstance();
  121. const memberNameInput = ref(""); //会员名
  122. const memberNickNameInput = ref(""); //会员名称
  123. const member_company = ref("")//公司名称
  124. const member_main_product = ref("")//主营产品
  125. const memberTrueName = ref(""); //会员姓名
  126. const avatar = ref(""); //用户头像
  127. const tempSrc = ref("");
  128. const sex = ref(0); //性别
  129. const changepic = (e) => {
  130. //上传头像
  131. let newsrc = getObjectURL(e.target.files[0]);
  132. let data = new FormData();
  133. data.append("file", e.target.files[0]);
  134. data.append("source", "headImg");
  135. let config = {
  136. headers: { "Content-Type": "multipart/form-data" },
  137. };
  138. let url = apiUrl + "v3/oss/common/upload";
  139. if (e.target.files[0].size < Math.pow(1024, 2) * 4) {
  140. tempSrc.value = newsrc;
  141. axios.post(url, data, config).then((res) => {
  142. if (res.status === 200) {
  143. ElMessage.success(L["上传图片成功"]);
  144. tempSrc.value = res.data.data.url;
  145. avatar.value = res.data.data.path;
  146. } else {
  147. ElMessage.warning(L["上传图片失败"]);
  148. }
  149. });
  150. } else {
  151. ElMessage.warning(L["图像应小于4MB"]);
  152. tempSrc.value = avatar.value;
  153. }
  154. };
  155. const getObjectURL = (file) => {
  156. //createObjectURL在前端显示更换后的头像
  157. var url = null;
  158. if (window.createObjectURL != undefined) {
  159. // basic
  160. url = window.createObjectURL(file);
  161. } else if (window.URL != undefined) {
  162. // mozilla(firefox)
  163. url = window.URL.createObjectURL(file);
  164. } else if (window.webkitURL != undefined) {
  165. // webkit or chrome
  166. url = window.webkitURL.createObjectURL(file);
  167. }
  168. return url;
  169. };
  170. const getInitData = () => {
  171. //初始化数据
  172. get("v3/member/front/member/memberInfo").then((res) => {
  173. if (res.state == 200) {
  174. memberNameInput.value = res.data.memberName;
  175. memberNickNameInput.value = res.data.memberNickName;
  176. tempSrc.value = res.data.memberAvatar;
  177. memberTrueName.value = res.data.memberTrueName;
  178. member_company.value = res.data.memberCompany;
  179. member_main_product.value = res.data.memberMainProduct;
  180. }
  181. });
  182. };
  183. const memberInfoSave = () => {
  184. //保存
  185. if (!avatar.value) {
  186. avatar.value = tempSrc.value;
  187. }
  188. let reg =
  189. /[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、]/im;
  190. if (memberTrueName.value && reg.test(memberTrueName.value)) {
  191. ElMessage.warning("真实姓名包含特殊字符,请重新输入");
  192. return;
  193. }
  194. let params = {
  195. memberAvatar: avatar.value,
  196. memberName: memberNameInput.value,
  197. memberTrueName:memberTrueName.value ? memberTrueName.value.toString().trim() : '',
  198. memberNickName:memberNickNameInput.value ? memberNickNameInput.value.toString().trim() : '',
  199. memberCompany:member_company.value,
  200. memberMainProduct:member_main_product.value
  201. };
  202. post("v3/member/front/member/updateInfo", params).then((res) => {
  203. if (res.state == 200) {
  204. ElMessage.success(res.msg);
  205. Object.assign(filtersStore.getMemberInfo,params)
  206. getInitData();
  207. } else {
  208. ElMessage.warning(res.msg);
  209. }
  210. });
  211. };
  212. onMounted(() => {
  213. getInitData();
  214. });
  215. </script>
  216. <style lang="scss">
  217. @import "@/assets/style/member/info.scss";
  218. </style>