UserIndex.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481
  1. <template>
  2. <div class="userPage flex-col">
  3. <div class="userPageBox">
  4. <s-header :name="sys ? sys.title : $t('user.personalCenter')" :noback="true" :isFixed="false"></s-header>
  5. <div class="userBaseBox">
  6. <!-- 基本信息 -->
  7. <div class="baseRow flex-row justify-between">
  8. <div class="group2 flex-col"></div>
  9. <span class="baseText">{{ $t("user.essentialInformation") }}</span>
  10. </div>
  11. <div class="userMessage flex-row justify-between">
  12. <!-- 初始份额 stockNum -->
  13. <div class="userId">
  14. <!-- <p class="userText">{{ accountDetail.stockNum }}</p> -->
  15. <p class="userText">5000</p>
  16. <p class="userText">剩余份额</p>
  17. </div>
  18. <!-- 竖线 -->
  19. <div class="userLine"></div>
  20. <!-- 会员等级 level -->
  21. <div class="userId">
  22. <van-image v-for="(icon, index) in icons" :key="index" :src="icon" round width="0.4rem" height="0.4rem"
  23. @click="showTop = true"></van-image>
  24. <van-popup v-model:show="showTop" round position="top"
  25. :style="{ height: '10%' }"><br />一个⭐代表1贡献值<br />一个🌙代表5贡献值</van-popup>
  26. <p class="userText">奋斗贡献值</p>
  27. </div>
  28. <div class="userLine"></div>
  29. <!-- 用户名 userName -->
  30. <div class="userId">
  31. <p class="userText">{{ accountDetail.userName }}</p>
  32. <!-- <p class="userText">test</p> -->
  33. <p class="userText">用户名</p>
  34. </div>
  35. </div>
  36. <div class="userInfoBox">
  37. <!-- 手机号码 -->
  38. <div v-if="!phoneNumberShow" class="userInfo l-flex-between">
  39. <span class="userInfoLeft">{{ $t("user.phoneNumber") }}: </span>
  40. <div>
  41. <van-field class="relationClass" v-model="cofficentForm.phone" :placeholder="$t('user.phoneNumberPlace')">
  42. <template #button>
  43. <van-button type="primary" @click="mailboxChg(cofficentForm.phone, 1)">{{ $t("user.confirmLog") }}
  44. </van-button>
  45. </template>
  46. </van-field>
  47. </div>
  48. <van-icon name="edit" class="editIcon" @click="editClk(1)" />
  49. </div>
  50. <div v-else class="userInfo l-flex-between">
  51. <span class="userInfoLeft">{{ $t("user.phoneNumber") }}: </span>
  52. <span>{{ accountDetail.phone }}</span>
  53. <van-icon name="edit" class="editIcon" @click="editClk(1)" />
  54. </div>
  55. <!-- 邮箱 -->
  56. <div v-if="!mailboxShow" class="userInfo l-flex-between">
  57. <span class="userInfoLeft">{{ $t("user.mailbox") }}: </span>
  58. <div>
  59. <van-field class="relationClass" v-model="cofficentForm.mailBox" :placeholder="$t('user.mailboxPlace')">
  60. <template #button>
  61. <van-button type="primary" @click="mailboxChg(cofficentForm.mailBox, 2)">{{ $t("user.confirmLog") }}
  62. </van-button>
  63. </template>
  64. </van-field>
  65. </div>
  66. <van-icon name="edit" class="editIcon" @click="editClk(2)" />
  67. </div>
  68. <div v-else class="userInfo l-flex-between">
  69. <span class="userInfoLeft">{{ $t("user.mailbox") }}: </span>
  70. <span>{{ accountDetail.email }}</span>
  71. <van-icon name="edit" class="editIcon" @click="editClk(2)" />
  72. </div>
  73. <!-- 支付宝账号 payeeCode -->
  74. <div class="userInfo l-flex-between">
  75. <span class="userInfoLeft">支付宝账号: </span>
  76. <span>{{ accountDetail.payeeCode }}</span>
  77. </div>
  78. <!-- 银行卡号 cardNo -->
  79. <div class="userInfo l-flex-between">
  80. <span class="userInfoLeft">银行卡号: </span>
  81. <span>{{ eyeOpen ? cardNo : hiddenCardNo }}</span>
  82. <van-icon class="l-eye" :name="eyeOpen ? 'eye-o' : 'closed-eye'" size="20" @click="clickEye" />
  83. </div>
  84. </div>
  85. </div>
  86. <div class="lineBox"></div>
  87. <div class="commonOperBox">
  88. <!-- 常用操作 -->
  89. <div class="baseRow flex-row justify-between">
  90. <div class="group2 flex-col"></div>
  91. <span class="baseText">{{ $t("user.commonOperations") }}</span>
  92. </div>
  93. <div class="operListBox">
  94. <!-- 系统管理 -->
  95. <div class="taskListRow flex-col" @click="pushPageList('/taskMessage')">
  96. <div class="taskIcon sysManageIcon"></div>
  97. <div class="taskRight">
  98. <div class="taskTitle">系统管理</div>
  99. </div>
  100. </div>
  101. <!-- 买家确认付款 -->
  102. <div class="taskListRow flex-col" @click="pushPageList('/buyConfList')">
  103. <div class="taskIcon buyConfIcon"></div>
  104. <div class="taskRight">
  105. <div class="taskTitle">
  106. 买入付款确认
  107. </div>
  108. </div>
  109. </div>
  110. <!-- 卖家收款确认 -->
  111. <div class="taskListRow flex-col" @click="pushPageList('/sellConfList')">
  112. <div class="taskIcon sellConfIcon"></div>
  113. <div class="taskRight">
  114. <div class="taskTitle">
  115. 卖家收款确认
  116. </div>
  117. </div>
  118. </div>
  119. <!-- 首页通知 -->
  120. <div class="taskListRow flex-col" @click="pushPageList('/announcement')">
  121. <div class="taskIcon announcementIcon"></div>
  122. <div class="taskRight">
  123. <div class="taskTitle">
  124. 首页通知
  125. </div>
  126. </div>
  127. </div>
  128. <!-- 异议反馈 -->
  129. <div class="taskListRow flex-col" @click="pushPageList('/objectionFeedback')">
  130. <div class="taskIcon feedbackIcon"></div>
  131. <div class="taskRight">
  132. <div class="taskTitle">
  133. 异议反馈
  134. </div>
  135. </div>
  136. </div>
  137. <!-- 修改密码 -->
  138. <div class="taskListRow flex-col" @click="pushPageList('/changepassword')">
  139. <div class="taskIcon changePasswordIcon"></div>
  140. <div class="taskRight">
  141. <div class="taskTitle">{{ $t("user.changePassword") }}</div>
  142. </div>
  143. </div>
  144. <!-- 退出登录 -->
  145. <div class="taskListRow flex-col" @click="onperExitSys()">
  146. <div class="taskIcon logoutIcon"></div>
  147. <div class="taskRight">
  148. <div class="taskTitle">{{ $t("user.logOut") }}</div>
  149. </div>
  150. </div>
  151. <div style="height: 100px;"></div>
  152. </div>
  153. </div>
  154. </div>
  155. <!-- <nav-bar></nav-bar> -->
  156. <!-- 退出登录弹窗 -->
  157. <kDialog :dialogTitle="$t('user.logOutTips')" :cancelBtnTxt="$t('user.cancelLog')"
  158. :confirmBtnTxt="$t('user.confirmLog')" ref="kDialogRef" :dialogContent="$t('user.logOutContent')"
  159. @confirmclk="confirmClk">
  160. </kDialog>
  161. </div>
  162. </template>
  163. <script>
  164. // 导入接口
  165. import { getLoginInfo } from "@/service/merchantManage";
  166. import { updateAdmin } from "@/service/merchantManage";
  167. // 引入弹窗
  168. import kDialog from "@/components/commom/kDialog/index.vue";
  169. import { onMounted, reactive, ref, computed } from "vue";
  170. import sHeader from "@/components/SimpleHeader";
  171. import {
  172. getLoginUser,
  173. $M_EmailAvailable,
  174. $M_PhoneTest,
  175. } from "@/common/js/utils";
  176. import { useRouter } from "vue-router";
  177. import { showToast } from 'vant';
  178. import { useI18n } from "vue-i18n";
  179. import { styleUrl } from "@/common/js/utils";
  180. export default {
  181. components: { sHeader, kDialog },
  182. setup() {
  183. // 引入语言
  184. const { t } = useI18n();
  185. // 账户信息
  186. const accountDetail = ref({});
  187. // 控制手机显示隐藏
  188. const phoneNumberShow = ref(true);
  189. // 控制邮箱显示隐藏
  190. const mailboxShow = ref(true);
  191. const diyPassword = ref("");
  192. const sunzeePay = ref(false);
  193. const sevencloudPay = ref(false);
  194. const user = getLoginUser();
  195. const router = useRouter();
  196. const relationAdminName = ref("");
  197. const level = ref('');
  198. level.value = user.level;
  199. const cardNo = ref('');
  200. cardNo.value = user.cardNo;
  201. const starsCount = ref(Math.floor(level.value % 5));
  202. const moonsCount = ref(Math.floor(level.value / 5));
  203. const icons = computed(() => {
  204. const iconsArray = [];
  205. for (let i = 0; i < moonsCount.value; i++) {
  206. iconsArray.push(require('@/assets/user/moon.png'));
  207. }
  208. for (let i = 0; i < starsCount.value; i++) {
  209. iconsArray.push(require('@/assets/user/star.png'));
  210. }
  211. return iconsArray;
  212. });
  213. const showTop = ref(false);
  214. const sys = ref(null);
  215. // 修改的个人信息
  216. const cofficentForm = reactive({
  217. associateParent: relationAdminName.value,
  218. mailBox: accountDetail.value.email,
  219. phone: accountDetail.value.phone,
  220. area: "",
  221. currencySymbol: accountDetail.value.currencySymbol,
  222. });
  223. //
  224. const params = reactive({
  225. id: '', // 用户ID
  226. });
  227. // 点击修改图标
  228. const editClk = (idx) => {
  229. switch (idx) {
  230. case 1:
  231. cofficentForm.phone = accountDetail.value.phone;
  232. phoneNumberShow.value = !phoneNumberShow.value;
  233. mailboxShow.value = true;
  234. break;
  235. case 2:
  236. cofficentForm.mailBox = accountDetail.value.email;
  237. phoneNumberShow.value = true;
  238. mailboxShow.value = !mailboxShow.value;
  239. break;
  240. }
  241. };
  242. // 点击邮箱的确定按钮
  243. const mailboxChg = async (e, idx) => {
  244. switch (idx) {
  245. case 1:
  246. if (!e) {
  247. showToast(t("user.phoneNumberPlace"));
  248. } else if (!$M_PhoneTest(e)) {
  249. showToast(t("user.corrPhonePlace"));
  250. } else {
  251. const params = {
  252. id: user.id,
  253. phone: e,
  254. };
  255. const { data } = await updateAdmin(params);
  256. phoneNumberShow.value = true;
  257. if (data.code === "00000") {
  258. showToast(data.message);
  259. setTimeout(() => {
  260. getAcccountDetail();
  261. }, 500);
  262. }
  263. }
  264. break;
  265. case 2:
  266. if (!e) {
  267. showToast(t("user.mailboxPlace"));
  268. } else if (!$M_EmailAvailable(e)) {
  269. showToast(t("user.corrEmailPlace"));
  270. } else {
  271. const params = {
  272. id: user.id,
  273. email: e,
  274. };
  275. const { data } = await updateAdmin(params);
  276. mailboxShow.value = true;
  277. if (data.code === "00000") {
  278. showToast(data.message);
  279. setTimeout(() => {
  280. getAcccountDetail();
  281. }, 500);
  282. }
  283. }
  284. break;
  285. }
  286. };
  287. const hiddenCardNo = ref('');
  288. if (user.cardNo) {
  289. hiddenCardNo.value = user.cardNo.replace(/^(\d{4}).*?(\d{4})$/, "$1********$2");
  290. }
  291. const eyeOpen = ref(false);
  292. const clickEye = () => {
  293. eyeOpen.value = !eyeOpen.value;
  294. }
  295. // 获取账户详情
  296. const getAcccountDetail = () => {
  297. getLoginInfo().then((res) => {
  298. accountDetail.value = res.data.data;
  299. });
  300. };
  301. // 退出登录弹窗
  302. const kDialogRef = ref(null);
  303. // 点击右侧按钮
  304. const confirmClk = () => {
  305. // 获取缓存的语言
  306. const savedCredentials = localStorage.getItem('savedCredentials');
  307. const curLang = localStorage.getItem("curLang");
  308. // 清空缓存
  309. localStorage.clear();
  310. localStorage.setItem("curLang", curLang);
  311. if (savedCredentials) {
  312. localStorage.setItem('savedCredentials', savedCredentials);
  313. }
  314. if (sys.value) {
  315. setTimeout(() => {
  316. router.push({
  317. path: "login",
  318. query: { relation_admin_id: sys.value.relationAdminId },
  319. });
  320. }, 200);
  321. } else {
  322. setTimeout(() => {
  323. router.push({ path: "login" });
  324. }, 200);
  325. }
  326. };
  327. // 初始化页面获取列表
  328. onMounted(async () => {
  329. // 加载样式
  330. styleUrl('user');
  331. // if (localStorage.getItem("loginSys")) {
  332. // const loginSysString = localStorage.getItem("loginSys");
  333. // sys.value = JSON.parse(loginSysString);
  334. // }
  335. // 获取账户
  336. getAcccountDetail();
  337. });
  338. const onperExitSys = () => {
  339. kDialogRef.value.openDialog();
  340. };
  341. const pushPageList = (url) => {
  342. router.push({ path: url });
  343. };
  344. // const roleCheck = () => {
  345. // if (user.isAdmined) {
  346. // return true;
  347. // } else {
  348. // const menuList = user.menuCodeList.filter((item) => item === "M6");
  349. // return menuList.length > 0;
  350. // }
  351. // };
  352. // 选择地区完成
  353. const areaPopFinish = async (e) => {
  354. console.log("e", e);
  355. accountDetail.value.areaId = e.selectId;
  356. const params = {
  357. id: user.id,
  358. areaId: e.selectId,
  359. };
  360. const { data } = await updateAdmin(params);
  361. // areaShow.value = true;
  362. if (data.code === "00000") {
  363. showToast(data.message);
  364. setTimeout(() => {
  365. getAcccountDetail();
  366. }, 500);
  367. }
  368. };
  369. const isInWeChat = ref(false);
  370. // 是否内陆或海外
  371. const isInland = ref(true);
  372. const isAbroad = ref(false);
  373. // 是否有上级账号
  374. const haveRelation = ref(false);
  375. const haveRelationCheck = () => {
  376. if (user.relationAdminId !== null) {
  377. haveRelation.value = true;
  378. }
  379. }
  380. const checkIsAbroad = async () => {
  381. try {
  382. const userInfo = localStorage.getItem("loginUser");
  383. const userIfForeign = JSON.parse(userInfo);
  384. // console.log("用户的海内外信息" + userIfForeign.ifForeign);
  385. // console.log("看下user是什么***" + user.menuCodeList);
  386. if (userIfForeign.ifForeign === '1') {
  387. isAbroad.value = true;
  388. isInland.value = false;
  389. }
  390. } catch (error) {
  391. console.error(error);
  392. }
  393. };
  394. onMounted(() => {
  395. checkIsAbroad();
  396. haveRelationCheck();
  397. })
  398. return {
  399. user,
  400. onperExitSys,
  401. relationAdminName,
  402. pushPageList,
  403. sys,
  404. kDialogRef,
  405. confirmClk,
  406. mailboxChg,
  407. editClk,
  408. cofficentForm,
  409. params,
  410. accountDetail,
  411. areaPopFinish,
  412. isInWeChat,
  413. isAbroad,
  414. haveRelation,
  415. checkIsAbroad,
  416. isInland,
  417. diyPassword,
  418. sunzeePay,
  419. sevencloudPay,
  420. level,
  421. icons,
  422. showTop,
  423. hiddenCardNo,
  424. phoneNumberShow,
  425. mailboxShow,
  426. clickEye,
  427. eyeOpen,
  428. cardNo
  429. };
  430. }
  431. };
  432. </script>
  433. <style lang="less" scoped>
  434. @import "../../common/style/mixin.less";
  435. @import "../../styles/user/index.less";
  436. </style>