金币系统前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

253 lines
6.5 KiB

3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
  1. <template>
  2. <!-- 这是客户金豆余额页面 -->
  3. <div class="filter-box">
  4. <el-form :model="detailY" ref="ruleFormRef">
  5. <el-form-item prop="jwcode">
  6. <el-text class="mx-1" size="large">精网号</el-text>
  7. <el-input
  8. v-model="detailY.jwcode"
  9. placeholder="请输入精网号"
  10. style="width: 220px"
  11. />
  12. </el-form-item>
  13. <el-form-item prop="area">
  14. <el-text class="mx-1" size="large">地区</el-text>
  15. <el-select
  16. v-model="detailY.area"
  17. placeholder="请选择所属地区"
  18. style="width: 240px"
  19. clearable
  20. >
  21. <el-option
  22. v-for="item in areaArray"
  23. :key="item"
  24. :label="item"
  25. :value="item"
  26. />
  27. </el-select>
  28. </el-form-item>
  29. <el-form-item>
  30. <el-button type="primary" @click="search()"
  31. >查询</el-button
  32. >
  33. <el-button type="success" @click="reset(ruleFormRef)"
  34. >重置</el-button
  35. >
  36. </el-form-item>
  37. </el-form>
  38. </div>
  39. <div class="table-box">
  40. <div>
  41. 现有金豆&nbsp;&nbsp;付费金豆{{ getObj.jinbiBuy }}&nbsp;&nbsp;免费金豆{{
  42. getObj.jinbiFree
  43. }}&nbsp;&nbsp;历史消费{{ getObj.jinbiCostTotal }}
  44. </div>
  45. <el-table
  46. :data="tableData"
  47. style="width: 100%"
  48. :default-sort="{ prop: 'jinbiCostTotal', order: 'descending' }"
  49. height="584px"
  50. @sort-change="handleSortChange"
  51. >
  52. <el-table-column type="index" label="序号" width="100px" fixed="left">
  53. <template #default="scope">
  54. <span>{{
  55. scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize
  56. }}</span>
  57. </template>
  58. </el-table-column>
  59. <el-table-column fixed="left" prop="nickname" label="姓名" width="150" />
  60. <el-table-column fixed="left" prop="jwcode" label="精网号" width="120" />
  61. <el-table-column prop="ipAddress" label="所属地区" width="120" />
  62. <el-table-column prop="jinbi" sortable label="金豆数量" width="120">
  63. </el-table-column>
  64. <el-table-column prop="jinbiBuy" sortable label="付费金豆" width="120">
  65. </el-table-column>
  66. <el-table-column prop="jinbiFree" sortable label="免费金豆" width="120">
  67. </el-table-column>
  68. <el-table-column
  69. sortable
  70. width="120"
  71. prop="jinbiCostTotal"
  72. label="历史消费"
  73. ></el-table-column>
  74. <el-table-column
  75. sortable
  76. prop="jinbiCostbeenTotal"
  77. width="160"
  78. label="历史付费金豆"
  79. ></el-table-column>
  80. <el-table-column
  81. sortable
  82. prop="jinbifreebeenTotal"
  83. width="160"
  84. label="历史免费金豆"
  85. ></el-table-column>
  86. </el-table>
  87. <!-- 分页 -->
  88. <div class="pagination">
  89. <el-pagination
  90. background
  91. :page-size="getObj.pageSize"
  92. :page-sizes="[5, 10, 20, 50, 100]"
  93. layout="total, sizes, prev, pager, next, jumper"
  94. :total="total"
  95. @size-change="handlePageSizeChange"
  96. @current-change="handleCurrentChange"
  97. >
  98. </el-pagination>
  99. </div>
  100. </div>
  101. </template>
  102. <script setup lang="ts">
  103. import { ref, reactive } from 'vue'
  104. import type { FormInstance } from 'element-plus'
  105. import API from '@/util/http'
  106. // 充值明细表格
  107. const tableData = ref([])
  108. //分页总条目
  109. const total = ref(100)
  110. //搜索表单数据
  111. const detailY = reactive({ jwcode: '', area: '' })
  112. const ruleFormRef = ref<FormInstance>()
  113. let areaArray = ref<string[]>([])
  114. let getObj = ref({
  115. pageNum: 1,
  116. pageSize: 50,
  117. jinbiBuy: 0,
  118. jinbiCostTotal: 0,
  119. jinbiFree: 0
  120. })
  121. // 精网号去空格
  122. const trimJwCode = () => {
  123. if (detailY.jwcode) {
  124. detailY.jwcode = detailY.jwcode.replace(/\s/g, '');
  125. }
  126. }
  127. const search = function () {
  128. trimJwCode();
  129. getInit({})
  130. getCount()
  131. }
  132. const handleCurrentChange = function (val) {
  133. getObj.value.pageNum = val
  134. getInit({})
  135. }
  136. //初始化
  137. const getInit = async function ({
  138. sortField = '',
  139. sortOrder = ''
  140. }: {
  141. sortField?: string
  142. sortOrder?: string
  143. }) {
  144. try {
  145. // 发送POST请求
  146. const result = await API({
  147. url: '/dou/getYve',
  148. data: {
  149. pageNum: getObj.value.pageNum,
  150. pageSize: getObj.value.pageSize,
  151. yve: {
  152. jwcode: detailY.jwcode,
  153. ipAddress: detailY.area,
  154. sortField: sortField,
  155. sortOrder: sortOrder
  156. }
  157. }
  158. })
  159. tableData.value = result.data.list
  160. total.value = result.data.total
  161. } catch (error) {
  162. console.log('请求失败', error)
  163. // 在这里可以处理错误逻辑,比如显示错误提示等
  164. }
  165. }
  166. const handleSortChange = (column) => {
  167. const { prop, order } = column
  168. if (order === 'ascending') {
  169. getInit({ sortField: prop, sortOrder: 'ASC' })
  170. } else if (order === 'descending') {
  171. getInit({ sortField: prop, sortOrder: 'DESC' })
  172. }
  173. }
  174. const handlePageSizeChange = (val) => {
  175. getObj.value.pageSize = val
  176. getObj.value.pageNum = 1
  177. getInit({})
  178. }
  179. // 重置
  180. const reset = function (formEl: FormInstance | undefined) {
  181. if (!formEl) return
  182. formEl.resetFields()
  183. }
  184. const getArea = async () => {
  185. const result = await API({
  186. url: '/dou/getIp'
  187. })
  188. console.log('获取地区', result.data)
  189. if (result.code == 200) {
  190. areaArray.value = result.data
  191. }
  192. }
  193. const getCount = async () => {
  194. try {
  195. const result = await API({
  196. url: '/dou/getYveTotal',
  197. // 传递jwcode和ipAddress参数,可以让金币数随查询变化
  198. data: {
  199. jwcode: detailY.jwcode,
  200. ipAddress: detailY.area
  201. }
  202. })
  203. if (result.code === 200) {
  204. const { jinbiBuy, jinbiFree, jinbiCostTotal } = result.data
  205. getObj.value.jinbiBuy = jinbiBuy
  206. getObj.value.jinbiFree = jinbiFree
  207. getObj.value.jinbiCostTotal = jinbiCostTotal
  208. }
  209. } catch (error) {
  210. console.log('获取统计数据失败', error)
  211. }
  212. }
  213. getArea()
  214. getCount()
  215. getInit({})
  216. </script>
  217. <style scoped lang="scss">
  218. .filter-box {
  219. width: 100%;
  220. display: flex;
  221. justify-content: space-between;
  222. align-items: center;
  223. padding: 20px;
  224. padding-bottom: 0px;
  225. box-sizing: border-box;
  226. box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
  227. margin-bottom: 20px;
  228. border-radius: 5px;
  229. .el-form {
  230. display: flex;
  231. flex-wrap: wrap;
  232. row-gap: 20px;
  233. column-gap: 20px;
  234. }
  235. }
  236. .table-box {
  237. width: 100%;
  238. padding: 20px;
  239. box-sizing: border-box;
  240. box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
  241. border-radius: 5px;
  242. }
  243. .pagination {
  244. display: flex;
  245. align-items: center;
  246. margin-top: 20px;
  247. }
  248. </style>