金币系统前端
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.

349 lines
10 KiB

  1. <script setup>
  2. import { ref, onMounted, reactive, computed } from 'vue'
  3. import ElementPlus from 'element-plus'
  4. import { ElMessage, ElMessageBox } from 'element-plus'
  5. import axios from 'axios'
  6. import moment from 'moment'
  7. import API from '../../api/index.js'
  8. import _ from 'lodash'
  9. import request from '@/util/http'
  10. //这是获取用户信息的接口
  11. const adminData = ref({})
  12. const getAdminData = async function () {
  13. try {
  14. const result = await request({
  15. url: '/admin/userinfo',
  16. data: {}
  17. })
  18. adminData.value = result
  19. addObj.value.adminId = adminData.value.adminId
  20. console.log('请求成功', result)
  21. console.log('用户信息', adminData.value)
  22. } catch (error) {
  23. console.log('请求失败', error)
  24. }
  25. }
  26. //活动表格数据
  27. const tableData = ref([])
  28. //分页总条目
  29. const total = ref(100)
  30. // 搜索对象时间
  31. const getTime = ref([])
  32. // 搜索对象活动
  33. const activity = ref({})
  34. //搜索对象
  35. const getObj = ref({
  36. pageNum: 1,
  37. pageSize: 10
  38. })
  39. // 添加对象
  40. const addObj = ref({
  41. add: ''
  42. })
  43. // 删除对象
  44. const delObj = ref({})
  45. // 搜索方法
  46. const get = async function (val) {
  47. try {
  48. // 搜索参数页码赋值
  49. if (typeof val === 'number') {
  50. getObj.value.pageNum = val
  51. }
  52. // 搜索参数时间赋值
  53. if (getTime.value.length === 2) {
  54. activity.value.startDate = getTime.value[0]
  55. activity.value.endDate = getTime.value[1]
  56. } else {
  57. activity.value.startDate = null
  58. activity.value.endDate = null
  59. }
  60. console.log('搜索参数', getObj.value)
  61. // 发送POST请求
  62. const result = await request({
  63. url: '/recharge/activity/select',
  64. method: 'post',
  65. data: {
  66. pageNum: getObj.value.pageNum,
  67. pageSize: getObj.value.pageSize,
  68. activity: {
  69. ...activity.value,
  70. activityName: activity.value.activityName,
  71. status: activity.value.status
  72. }
  73. }
  74. })
  75. // 将响应结果存储到响应式数据中
  76. console.log('请求成功', result)
  77. // 存储表格数据
  78. tableData.value = result.data.list
  79. console.log('tableData', tableData.value)
  80. // 存储分页总条目
  81. total.value = result.data.total
  82. console.log('total', total.value)
  83. } catch (error) {
  84. console.log('请求失败', error)
  85. ElMessage.error('请求失败')
  86. }
  87. }
  88. // 搜索
  89. const search = function () {
  90. getObj.value.pageNum = 1
  91. get()
  92. }
  93. // 重置
  94. const reset = function () {
  95. getObj.value = {
  96. pageNum: 1,
  97. pageSize: 10
  98. }
  99. getTime.value = []
  100. activity.value = {}
  101. }
  102. // 挂载
  103. onMounted(async function () {
  104. await getAdminData()
  105. get()
  106. })
  107. </script>
  108. <template>
  109. <el-row>
  110. <el-col>
  111. <el-card style="margin-bottom: 20px">
  112. <div class="head-card">
  113. <div class="head-card-element">
  114. <el-text class="mx-1" size="large">活动名称</el-text>
  115. <el-input
  116. v-model="activity.activityName"
  117. style="width: 240px"
  118. placeholder="请输入活动名称"
  119. clearable
  120. />
  121. </div>
  122. <div class="head-card-element">
  123. <el-text class="mx-1" size="large">添加时间</el-text>
  124. <el-date-picker
  125. v-model="getTime"
  126. type="datetimerange"
  127. range-separator="至"
  128. start-placeholder="起始时间"
  129. end-placeholder="结束时间"
  130. />
  131. </div>
  132. <div class="head-card-btn">
  133. <el-button @click="reset()">重置</el-button>
  134. <el-button type="primary" @click="search()">查询</el-button>
  135. </div>
  136. </div>
  137. </el-card>
  138. </el-col>
  139. </el-row>
  140. <el-row>
  141. <el-col>
  142. <el-card>
  143. <div>
  144. <el-button
  145. plain
  146. @click="addActicity()"
  147. style="color: #048efb; border: 1px solid #048efb"
  148. >新增活动</el-button
  149. >
  150. </div>
  151. <div>
  152. <el-table :data="tableData" :height="tableHeight" style="width: 100%">
  153. <el-table-column
  154. type="index"
  155. label="序号"
  156. width="100px"
  157. fixed="left"
  158. >
  159. <template #default="scope">
  160. <span>{{
  161. scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize
  162. }}</span>
  163. </template>
  164. </el-table-column>
  165. <el-table-column prop="activityName" label="活动名称" />
  166. <el-table-column prop="startTime" label="开始时间">
  167. <template #default="scope">
  168. {{ moment(scope.row.startTime).format('YYYY-MM-DD HH:mm:ss') }}
  169. </template>
  170. </el-table-column>
  171. <el-table-column prop="endTime" label="结束时间">
  172. <template #default="scope">
  173. {{ moment(scope.row.endTime).format('YYYY-MM-DD HH:mm:ss') }}
  174. </template>
  175. </el-table-column>
  176. <el-table-column prop="rechargeRatio" label="免费兑换比">
  177. <template #default="scope">
  178. <span>{{ scope.row.rechargeRatio }}:1</span>
  179. </template>
  180. </el-table-column>
  181. <el-table-column prop="status" label="状态">
  182. <template #default="scope">
  183. <span v-if="scope.row.status === 1">
  184. <div class="status">
  185. <span class="green-dot"></span>
  186. <span>进行中</span>
  187. </div>
  188. </span>
  189. <span v-if="scope.row.status === 0">
  190. <div class="status">
  191. <span class="red-dot"></span>
  192. <span>未开始</span>
  193. </div>
  194. </span>
  195. <span v-if="scope.row.status === 2">
  196. <div class="status">
  197. <span class="grey-dot"></span>
  198. <span>已结束</span>
  199. </div>
  200. </span>
  201. </template>
  202. </el-table-column>
  203. <el-table-column prop="name" label="添加人" />
  204. <el-table-column prop="createTime" label="添加时间">
  205. <template #default="scope">
  206. {{ moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}
  207. </template>
  208. </el-table-column>
  209. <el-table-column prop="operation" label="操作">
  210. <template #default="scope">
  211. <el-popconfirm
  212. title="确定将此条活动删除吗?"
  213. @confirm="delConfirm"
  214. >
  215. <template #reference>
  216. <el-button type="primary" text @click="del(scope.row)">
  217. 删除
  218. </el-button>
  219. </template>
  220. <template #actions="{ confirm, cancel }">
  221. <el-button size="small" @click="cancel">取消</el-button>
  222. <el-button type="primary" size="small" @click="confirm">
  223. 确定
  224. </el-button>
  225. </template>
  226. </el-popconfirm>
  227. </template>
  228. </el-table-column>
  229. </el-table>
  230. </div>
  231. <!-- 分页 -->
  232. <div class="pagination" style="margin-top: 20px">
  233. <el-pagination
  234. background
  235. :page-size="getObj.pageSize"
  236. :page-sizes="[5, 10, 20, 50, 100]"
  237. layout="total, sizes, prev, pager, next, jumper"
  238. :total="total"
  239. @size-change="handlePageSizeChange"
  240. @current-change="handleCurrentChange"
  241. ></el-pagination>
  242. </div>
  243. </el-card>
  244. </el-col>
  245. </el-row>
  246. <el-dialog
  247. v-model="addActivityVisible"
  248. title="新增活动"
  249. width="500"
  250. :before-close="closeAddActivityVisible"
  251. :close-on-click-modal="false"
  252. >
  253. <template #footer>
  254. <el-form
  255. ref="Ref"
  256. :model="addObj"
  257. :rules="rules"
  258. label-width="auto"
  259. style="max-width: 600px"
  260. >
  261. <el-form-item prop="activityName" label="活动名称:">
  262. <el-input
  263. v-model="addObj.activityName"
  264. placeholder="请输入活动名称"
  265. style="width: 220px"
  266. />
  267. </el-form-item>
  268. <el-form-item prop="freeGold" label="免费金币:">
  269. <el-radio-group v-model="addObj.freeGold">
  270. <el-radio value="0" @change="addObj.rechargeRatio = '0'"
  271. >无赠送</el-radio
  272. >
  273. <el-radio value="1">有赠送</el-radio>
  274. </el-radio-group>
  275. </el-form-item>
  276. <el-form-item prop="rechargeRatio" label="免费金币兑换比:">
  277. <el-input
  278. v-model="addObj.rechargeRatio"
  279. :disabled="addObj.freeGold === '0' ? true : false"
  280. placeholder="请输入"
  281. style="width: 80px"
  282. />1
  283. <div style="color: grey">
  284. (提示当前规则每{{ addObj.rechargeRatio }}新币可兑换1免费金币)
  285. </div>
  286. </el-form-item>
  287. <el-form-item prop="startTime" label="开始时间:">
  288. <el-date-picker
  289. v-model="addObj.startTime"
  290. type="datetime"
  291. placeholder="请选择开始时间"
  292. @change="handleStartTimeChange"
  293. />
  294. </el-form-item>
  295. <el-form-item prop="endTime" label="结束时间:">
  296. <el-date-picker
  297. v-model="addObj.endTime"
  298. type="datetime"
  299. placeholder="请选择结束时间"
  300. />
  301. </el-form-item>
  302. <el-form-item label="添加人:">
  303. <el-input v-model="adminData.name" disabled style="width: 220px" />
  304. </el-form-item>
  305. </el-form>
  306. <div class="dialog-footer">
  307. <el-button @click="closeAddActivityVisible">取消</el-button>
  308. <el-button type="primary" @click="throttledAdd"> 提交 </el-button>
  309. </div>
  310. </template>
  311. </el-dialog>
  312. </template>
  313. <style scoped>
  314. .pagination {
  315. display: flex;
  316. }
  317. .status {
  318. display: flex;
  319. }
  320. .head-card {
  321. display: flex;
  322. }
  323. .head-card-element {
  324. margin-right: 20px;
  325. }
  326. .head-card-btn {
  327. margin-left: auto;
  328. }
  329. </style>