index.vue 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <template>
  2. <div class="app-container">
  3. <div v-show="!detailState.show">
  4. <transition name="fade">
  5. <el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="70px">
  6. <el-form-item label="搜索:" prop="keywords">
  7. <el-input v-model="queryParams.keywords" placeholder="请输入用户ID/账号" clearable @keyup.enter="handleQuery"/>
  8. </el-form-item>
  9. <el-form-item label="用户昵称:" prop="nickname">
  10. <el-input v-model="queryParams.nickname" placeholder="请输入用户昵称" clearable @keyup.enter="handleQuery"/>
  11. </el-form-item>
  12. <el-form-item label="注册时间:">
  13. <el-date-picker
  14. v-model="dataRange"
  15. type="datetimerange"
  16. start-placeholder="开始时间"
  17. end-placeholder="结束时间"
  18. format="YYYY-MM-DD HH:mm:ss"
  19. value-format="YYYY-MM-DD HH:mm:ss"
  20. date-format="YYYY/MM/DD"
  21. time-format="hh:mm:ss"
  22. />
  23. </el-form-item>
  24. <el-form-item>
  25. <el-button type="primary" @click="handleQuery">搜索</el-button>
  26. <el-button @click="resetQuery">重置</el-button>
  27. </el-form-item>
  28. </el-form>
  29. </transition>
  30. <el-row :gutter="10" class="mb8" style="margin-top: 10px">
  31. <el-col :span="1.5">
  32. <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete(selectedRow)">删除
  33. </el-button>
  34. </el-col>
  35. <el-col :span="1.5">
  36. <el-button type="warning" plain icon="Download" @click="handleExport">导出</el-button>
  37. </el-col>
  38. </el-row>
  39. <!-- 表格组件 -->
  40. <el-table ref="multipleTable" v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
  41. <el-table-column type="selection" width="55" align="center"/>
  42. <el-table-column label="用户ID" align="center" prop="id"/>
  43. <el-table-column label="用户账号" align="center" prop="account"/>
  44. <el-table-column label="用户昵称" align="center" prop="nickname"/>
  45. <el-table-column label="注册时间" align="center" prop="registerTime"/>
  46. <el-table-column label="上次登录时间" align="center" prop="lastLoginTime"/>
  47. <el-table-column label="消费金额" align="center" prop="amount"/>
  48. <el-table-column label="订单数量" align="center" prop="orderAmount"/>
  49. <el-table-column label="账户状态" align="center" prop="accountStatus">
  50. <template #default="scope">
  51. <el-switch v-model="scope.row.accountStatus" inline-prompt active-text="ON" inactive-text="OFF"
  52. @change="handleStatusChange(scope.row)"/>
  53. </template>
  54. </el-table-column>
  55. <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
  56. <template #default="scope">
  57. <el-text class="common-btn-text-primary" @click="handleView(scope.row)">查看</el-text>
  58. <el-text class="common-btn-text-primary" @click="handleEdit(scope.row)">编辑</el-text>
  59. <el-text class="common-btn-text-danger" @click="handleDelete(scope.row)">删除</el-text>
  60. </template>
  61. </el-table-column>
  62. </el-table>
  63. <pagination v-show="total > 0" v-model:page="queryParams.page" v-model:limit="queryParams.page_size"
  64. :total="total" @pagination="getList"/>
  65. </div>
  66. <UserDetails v-if="detailState.show" :id="detailState.show" @back="handleBack"/>
  67. </div>
  68. </template>
  69. <script setup name="UserManage">
  70. import UserDetails from '@/views/userManage/userDetails.vue';
  71. import {addDateRange2} from '@/utils/ruoyi.js';
  72. const {proxy} = getCurrentInstance();
  73. const queryFormRef = ref();
  74. // 搜索条件
  75. const queryParams = reactive({
  76. keywords: '',
  77. nickname: '',
  78. page: 1,
  79. page_size: 10
  80. });
  81. const dataRange = ref([]);
  82. // 表格数据
  83. const dataList = ref([]);
  84. // 加载中
  85. const loading = ref(false);
  86. // 总数
  87. const total = ref(0);
  88. // 表格选中的所有id
  89. const ids = ref([]);
  90. // 表格选中一个
  91. const single = ref(true);
  92. // 表格选中多个
  93. const multiple = ref(true);
  94. // 选中行的数据
  95. const selectedRow = ref(null);
  96. // 详情弹窗
  97. const detailState = ref({
  98. show: false,
  99. id: ''
  100. });
  101. // 获取数据
  102. const getList = () => {
  103. loading.value = true;
  104. const query = addDateRange2(queryParams, dataRange.value, 'startTime', 'endTime');
  105. console.log(query);
  106. setTimeout(() => {
  107. dataList.value = [{interfacesAmount: 20}];
  108. loading.value = false;
  109. }, 500);
  110. };
  111. // 点击查询
  112. const handleQuery = () => {
  113. queryParams.page = 1;
  114. getList();
  115. };
  116. // 重置查询条件
  117. const resetQuery = () => {
  118. dataRange.value = ['', ''];
  119. if (queryFormRef.value) {
  120. queryFormRef.value.resetFields(); // 重置表单并清除校验状态
  121. }
  122. queryParams.page = 1;
  123. getList();
  124. };
  125. // 删除按钮操作
  126. const handleDelete = (row) => {
  127. proxy?.$modal.confirm('是否确认删除名称为"' + row.menuName + '"的数据项?').then(() => {
  128. getList();
  129. proxy?.$modal.msgSuccess('删除成功');
  130. });
  131. };
  132. const handleView = (row) => {
  133. detailState.value = {
  134. show: true,
  135. id: row.id
  136. };
  137. };
  138. const handleEdit = () => {
  139. };
  140. // 多选框选中数据
  141. const handleSelectionChange = (selection) => {
  142. ids.value = selection.map((item) => item.reportId);
  143. selectedRow.value = selection.length === 1 ? selection[0] : null;
  144. single.value = selection.length != 1;
  145. multiple.value = !selection.length;
  146. };
  147. //导入
  148. const handleImport = () => {
  149. };
  150. // 导出
  151. const handleExport = () => {
  152. };
  153. // 修改状态
  154. const handleStatusChange = (status) => {
  155. };
  156. const handleBack = () => {
  157. detailState.value = {
  158. show: false,
  159. id: ''
  160. };
  161. };
  162. getList();
  163. </script>
  164. <style lang="scss" scoped></style>