UserManageList.vue 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <script setup>
  2. import { onMounted, reactive, ref } from "vue";
  3. import sHeader from "@/components/SimpleHeader";
  4. import { pageUserList } from "@/service/userManage"
  5. import { showFailToast } from "vant";
  6. import { getLoginUser, styleUrl } from "@/common/js/utils";
  7. import { useRouter } from 'vue-router'
  8. import { useUserStore } from '@/stores/user';
  9. const router = useRouter()
  10. const user = getLoginUser();
  11. const loading = ref(false); // 加载状态
  12. const error = ref(false); // 错误状态
  13. const finished = ref(false); // 结束翻页状态
  14. // state 用户状态:1正常,2禁用,3删除
  15. const showStateText = (state) => {
  16. if (state === '1') {
  17. return "正常";
  18. }
  19. if (state === '2') {
  20. return "禁用中";
  21. }
  22. if (state === '3') {
  23. return "已删除";
  24. }
  25. return "未知";
  26. };
  27. const userManageList = ref([]); // 列表集合
  28. const userInfoTotal = ref(0); // 用户列表总数
  29. let searchParams = reactive({
  30. current: 1, // 当前页,默认第一页
  31. size: 10, // 页大小,默认10条
  32. });
  33. // 滚动加载
  34. const onLoad = () => {
  35. if (!finished.value) {
  36. searchParams.current = searchParams.current + 1;
  37. getList();
  38. }
  39. };
  40. // 查询列表
  41. const searchGetList = () => {
  42. userManageList.value = [];
  43. searchParams.current = 1;
  44. getList();
  45. };
  46. // 获取用户管理列表数据
  47. const getList = async () => {
  48. const { data } = await pageUserList(
  49. Object.assign({}, searchParams)
  50. );
  51. if (data.code === "00000") {
  52. // 列表值叠加
  53. userManageList.value = userManageList.value.concat(
  54. data.data.records
  55. );
  56. userInfoTotal.value = data.data.total;
  57. if (userManageList.value.length === data.data.total) {
  58. finished.value = true;
  59. }
  60. loading.value = false;
  61. } else {
  62. showFailToast(data.message);
  63. }
  64. };
  65. const userStore = useUserStore();
  66. // 去管理账号,禁用账号
  67. const toManageUser = (item) => {
  68. userStore.setUserInfo(item);
  69. router.push({ name: 'userManage' });
  70. };
  71. // 是否有操作的权限
  72. const isOper = ref(true);
  73. // 初始化页面获取列表
  74. onMounted(async () => {
  75. // 加载样式
  76. styleUrl('pendingOrderList');
  77. if (user) {
  78. // searchParams.adminId = user.userId;
  79. searchGetList();
  80. // 如果不是admin账号,不能有操作权限
  81. if (user.userName != 'admin') {
  82. isOper.value = false;
  83. }
  84. }
  85. });
  86. </script>
  87. <!-- 用户审批 -->
  88. <!-- d点击后跳转会上一页, -->
  89. <!-- 点击后进行设置,设置后对到列表页 -->
  90. <template>
  91. <!-- 用户管理列表 -->
  92. <div class="pendingOrderList flex-col">
  93. <s-header name="用户管理" :noback="false"></s-header>
  94. <div class="pendingOrderBox flex-col">
  95. <van-list v-model:loading="loading" v-model:error="error" :error-text="$t('common.reqFailClkReload')"
  96. :finished="finished" :finished-text="$t('common.noMoreTxt')" offset="300" :immediate-check="false"
  97. @load="onLoad">
  98. <div class="listBox">
  99. <div v-for="(item) in userManageList" :key="item.phone" class="listItem">
  100. <div class="itemBox">
  101. <div class="itemRow">
  102. <span class="itemTitle">用户名:&nbsp;</span>{{
  103. item.userName }}
  104. </div>
  105. <div class="itemRow">
  106. <span class="itemTitle">手机号码:&nbsp;</span>{{
  107. item.phone }}
  108. </div>
  109. <!-- <div class="itemRow">
  110. <span class="itemTitle">支付宝号:&nbsp;</span>{{
  111. item.payeeCode }}
  112. </div> -->
  113. <div class="itemRow">
  114. <span class="itemTitle">当前股票份额:&nbsp;</span>{{
  115. item.stockNum }}
  116. </div>
  117. <!-- isBan禁用:去禁用账号> -->
  118. <div class="itemRow">
  119. <span class="itemTitle">账号状态:&nbsp;</span><span style="color: red">{{
  120. showStateText(item.state)
  121. }}</span>
  122. </div>
  123. <!-- state 用户状态:1正常,2禁用,3删除 -->
  124. <!-- // 正常情况下显示按钮,非正常情况下仅显示状态 -->
  125. <!-- 禁用/启用账号 -->
  126. <div v-if="item.state === '1' && isOper" class="itemRow" style="display: flex; justify-content: flex-end">
  127. <van-button span="5" round type="primary" :style="{
  128. height: '2em',
  129. padding: '0 1.2em',
  130. margin: '0 1em',
  131. backgroundColor: 'rgb(200, 55, 95 / 80%)', // 红色背景,不透明度为100%
  132. color: '#fff', // 文字颜色为白色
  133. boxShadow: '0 2px 8px rgba(255, 55, 95, 0.3)', // 添加阴影效果
  134. transition: 'all 0.3s ease' // 添加过渡效果,使变化更平滑
  135. }" @click="toManageUser(item)">
  136. 禁用账号
  137. </van-button>
  138. </div>
  139. <div class="itemRow" style="display: flex; justify-content: flex-end">
  140. <!-- 未禁用 -->
  141. <span v-if="item.status === '1'" style="color: #4fc08d">{{
  142. showStatusText(item.status)
  143. }}</span>
  144. <!-- 已禁用 -->
  145. <span v-if="item.status === '2'" style="color: #ff0000">{{
  146. showStatusText(item.status)
  147. }}</span>
  148. </div>
  149. </div>
  150. </div>
  151. </div>
  152. </van-list>
  153. </div>
  154. </div>
  155. </template>
  156. <style lang="less" scoped>
  157. @import "../../common/style/common.less";
  158. </style>