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

217 lines
6.1 KiB

1 month ago
3 weeks ago
3 weeks ago
1 month ago
1 month ago
1 month ago
3 weeks ago
3 weeks ago
1 month ago
1 month ago
  1. <template>
  2. <div class="add-goldenbeen">
  3. <div class="head-top">新增充值</div>
  4. <div class="add-box">
  5. <el-form
  6. :model="beenObj"
  7. ref="ruleFormRef"
  8. :rules="rules"
  9. label-width="auto"
  10. style="max-width: 600px"
  11. class="add-form"
  12. >
  13. <el-form-item prop="jwcode" label="精网号">
  14. <el-input v-model="beenObj.jwcode" style="width: 220px" />
  15. <el-button
  16. type="primary"
  17. @click="getUser()"
  18. style="margin-left: 20px"
  19. >查询</el-button
  20. >
  21. </el-form-item>
  22. <el-form-item prop="type" label="充值类型">
  23. <el-radio-group v-model="beenObj.type">
  24. <el-radio :value="0">增加</el-radio>
  25. <el-radio :value="1">减少</el-radio>
  26. </el-radio-group>
  27. </el-form-item>
  28. <div style="display: flex">
  29. <el-form-item prop="payBeean" label="付费金豆">
  30. <el-input-number
  31. v-model="beenObj.payBeean"
  32. :controls="false"
  33. :min="0"
  34. />
  35. </el-form-item>
  36. <el-form-item prop="freeBeean" label="免费金豆">
  37. <el-input-number
  38. v-model="beenObj.freeBeean"
  39. :controls="false"
  40. :min="0"
  41. />
  42. </el-form-item>
  43. </div>
  44. <el-form-item prop="remark" label="备注">
  45. <el-input
  46. v-model="beenObj.remark"
  47. style="width: 300px"
  48. :rows="2"
  49. maxlength="100"
  50. show-word-limit
  51. type="textarea"
  52. />
  53. </el-form-item>
  54. <!-- <el-form-item prop="submitter" label="提交人">
  55. <el-input
  56. style="width: 300px"
  57. :value="beenObj.submitter"
  58. disabled
  59. placeholder="提交人姓名"
  60. />
  61. </el-form-item> -->
  62. <el-form-item>
  63. <div class="btn-group">
  64. <el-button type="success" @click="resetData(ruleFormRef)">重置</el-button>
  65. <el-button type="primary" @click="addBean(ruleFormRef)">
  66. 提交
  67. </el-button>
  68. </div>
  69. </el-form-item>
  70. </el-form>
  71. <!-- 客户信息栏 -->
  72. <el-card>
  73. <el-text size="large" style="margin-left: 20px">客户信息</el-text>
  74. <div class="custom-box">
  75. <el-text>姓名:{{ user.nickname }}</el-text>
  76. <el-text>当前付费金豆:{{ user.jinbiBuy }}</el-text>
  77. <el-text>精网号:{{ user.jwcode }}</el-text>
  78. <el-text>当前免费金豆:{{ user.jinbiFree }}</el-text>
  79. <!-- <el-text>负责客服:</el-text> -->
  80. <el-text>消费次数:{{ user.number }}</el-text>
  81. <el-text>所属门店:{{ user.masterShop }}</el-text>
  82. </div>
  83. </el-card>
  84. </div>
  85. </div>
  86. </template>
  87. <script setup lang="ts">
  88. import { reactive, ref } from 'vue'
  89. import API from '@/util/http'
  90. import type { FormInstance } from 'element-plus'
  91. import { ElMessage } from 'element-plus'
  92. type userType = {
  93. [key: string]: number | string
  94. }
  95. const ruleFormRef = ref<FormInstance>()
  96. const beenObj = ref({
  97. jwcode: '',
  98. remark: '',
  99. type: 0, //0是加1是减
  100. payBeean: 0,
  101. freeBeean: 0
  102. })
  103. let user: userType = reactive({})
  104. const rules = ref({
  105. jwcode: [{ required: true, message: '请输入精网号', trigger: 'blur' }],
  106. remark: [{ required: true, message: '请输入备注', trigger: 'blur' }],
  107. // submitter: [{ required: true, message: '请输入提交人', trigger: 'blur' }],
  108. type: [{ required: true, message: '请选择充值类型', trigger: 'change' }],
  109. payBeean: [{ required: true, message: '请输入付费金豆', trigger: 'blur' }],
  110. freeBeean: [{ required: true, message: '请输入免费金豆', trigger: 'blur' }]
  111. })
  112. const addBean = (formEl) => {
  113. // 提交表单
  114. try {
  115. formEl.validate(async (valid) => {
  116. if (valid) {
  117. // 处理表单提交逻辑
  118. const result = await API({
  119. url: '/dou/add',
  120. data: {
  121. jwcode: beenObj.value.jwcode,
  122. content: beenObj.value.remark,
  123. moneyFree: Number(beenObj.value.freeBeean),
  124. moneyBuy: Number(beenObj.value.payBeean),
  125. time: Math.floor(Date.now() / 1000),
  126. data: beenObj.value.type
  127. }
  128. })
  129. if (result.code === 200) {
  130. ElMessage.success('充值成功')
  131. beenObj.value.jwcode = ''
  132. beenObj.value.remark = ''
  133. beenObj.value.payBeean = 0
  134. beenObj.value.freeBeean = 0
  135. } else if (result.code === 0) {
  136. ElMessage.error(result.msg)
  137. return
  138. }
  139. console.log('请求成功', result)
  140. } else {
  141. ElMessage.error('表单验证失败')
  142. }
  143. })
  144. } catch (error) {
  145. ElMessage.error('提交失败')
  146. }
  147. }
  148. const resetData = (formEl) => {
  149. if (!formEl) return
  150. formEl.resetFields()
  151. }
  152. // 精网号去空格
  153. const trimJwCode = () => {
  154. if (beenObj.value.jwcode) {
  155. beenObj.value.jwcode = beenObj.value.jwcode.replace(/\s/g, '');
  156. }
  157. }
  158. const getUser = async function () {
  159. trimJwCode();
  160. try {
  161. // 发送POST请求
  162. const result = await API({
  163. url: '/dou/search',
  164. data: {
  165. jwcode: beenObj.value.jwcode
  166. }
  167. })
  168. if (result.code === 0) {
  169. ElMessage.error(result.msg)
  170. } else {
  171. if (!result.data.jwcode) {
  172. ElMessage.error('精网号不存在')
  173. return
  174. }
  175. Object.assign(user, result.data)
  176. }
  177. } catch (error) {
  178. console.log('请求失败', error)
  179. ElMessage.error('查询失败,请检查精网号是否正确')
  180. }
  181. }
  182. </script>
  183. <style scoped>
  184. .add-box {
  185. display: flex;
  186. justify-content: center;
  187. align-items: center;
  188. column-gap: 50px;
  189. }
  190. .btn-group {
  191. display: flex;
  192. justify-content: flex-end;
  193. width: 100%;
  194. }
  195. .custom-box {
  196. padding: 20px;
  197. display: flex;
  198. flex-wrap: wrap;
  199. align-items: center;
  200. row-gap: 20px;
  201. box-sizing: border-box;
  202. .el-text {
  203. width: 200px;
  204. }
  205. }
  206. .el-card {
  207. width: 500px;
  208. }
  209. .head-top {
  210. padding: 20px;
  211. box-sizing: border-box;
  212. box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
  213. margin-bottom: 20px;
  214. border-radius: 5px;
  215. }
  216. </style>