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

411 lines
11 KiB

  1. <script setup>
  2. import { reactive } from "vue";
  3. import { ref, computed, watch } from "vue";
  4. import { ElMessage } from "element-plus";
  5. import { Plus } from "@element-plus/icons-vue";
  6. import axios from "axios";
  7. import { ElMessageBox } from "element-plus";
  8. // 这是添加充值信息的表单
  9. const addRecharge = ref({
  10. rechargeVoucher: "",
  11. rechargeWay: "客服充值",
  12. });
  13. // 这是添加充值信息的接口
  14. const add = async function () {
  15. try {
  16. // 发送POST请求
  17. const result = await axios.post(
  18. "http://192.168.8.93:10010/recharge/recharge/add",
  19. addRecharge.value
  20. );
  21. // 将响应结果存储到响应式数据中
  22. console.log("请求成功", result);
  23. // 存储表格数据
  24. console.log("用户信息", user.value);
  25. } catch (error) {
  26. console.log("请求失败", error);
  27. // 在这里可以处理错误逻辑,比如显示错误提示等
  28. }
  29. };
  30. const addBefore = () => {
  31. Ref.value.validate(async (valid) => {
  32. if (valid) {
  33. ElMessageBox.confirm("确认添加?")
  34. .then(() => {
  35. add();
  36. console.log("添加成功");
  37. imageUrl.value = "";
  38. addRecharge.value = {};
  39. })
  40. .catch(() => {
  41. console.log("取消添加");
  42. });
  43. } else {
  44. //提示
  45. ElMessage({
  46. type: "error",
  47. message: "请检查输入内容",
  48. });
  49. }
  50. });
  51. };
  52. // 表单验证
  53. // 开始时间改变时,重新验证结束时间
  54. const Ref = ref(null);
  55. const checkEndTime = function (rule, value, callback) {
  56. if (value <= new Date()) {
  57. callback(new Error("付款时间不能小于当前时间"));
  58. }
  59. };
  60. const rules = reactive({
  61. homilyId: [{ required: true, message: "请输入精网号", trigger: "blur" }],
  62. activityId: [{ required: true, message: "请选择活动名称", trigger: "blur" }],
  63. paidGold: [{ required: true, message: "请输入充值金币", trigger: "blur" }],
  64. rechargeGold: [
  65. { required: true, message: "请输入充值金额", trigger: "blur" },
  66. ],
  67. payWay: [{ required: true, message: "请选择付款方式", trigger: "blur" }],
  68. rechargeTime: [
  69. { required: true, message: "请选择交款时间", trigger: "blur" },
  70. { validator: checkEndTime, trigger: "blur" },
  71. ],
  72. });
  73. // 查找客户信息的方法
  74. const user = ref({});
  75. const getUser = async function (homilyId) {
  76. try {
  77. // 发送POST请求
  78. const result = await axios.post("http://192.168.8.93:10020/recharge/user", {
  79. homilyId: homilyId,
  80. });
  81. // 将响应结果存储到响应式数据中
  82. console.log("请求成功", result);
  83. // 存储表格数据
  84. user.value = result.data.data[0];
  85. console.log("用户信息", user.value);
  86. } catch (error) {
  87. console.log("请求失败", error);
  88. // 在这里可以处理错误逻辑,比如显示错误提示等
  89. }
  90. };
  91. // 这是查询活动的接口
  92. const activity = ref([]);
  93. const getActivity = async function () {
  94. try {
  95. // 发送POST请求
  96. const result = await axios.post(
  97. "http://192.168.8.93:10010/recharge/activity/select",
  98. {}
  99. );
  100. // 将响应结果存储到响应式数据中
  101. console.log("请求成功", result);
  102. // 存储表格数据
  103. activity.value = result.data.data;
  104. console.log("活动信息", activity.value);
  105. } catch (error) {
  106. console.log("请求失败", error);
  107. // 在这里可以处理错误逻辑,比如显示错误提示等
  108. }
  109. };
  110. getActivity();
  111. // 这是查询货币的接口
  112. const currency = ref([]);
  113. const getCurrency = async function () {
  114. try {
  115. // 发送POST请求
  116. const result = await axios.post(
  117. "http://192.168.8.174:10010/rates/search",
  118. {}
  119. );
  120. // 将响应结果存储到响应式数据中
  121. console.log("货币请求成功", result);
  122. // 存储表格数据
  123. currency.value = result.data.data;
  124. console.log("tableData", currency.value);
  125. // 在这里可以根据需求进一步处理成功后的逻辑,比如更新UI显示成功消息等
  126. } catch (error) {
  127. console.log("请求失败", error);
  128. // 在这里可以处理错误逻辑,比如显示错误提示等
  129. }
  130. };
  131. getCurrency();
  132. // 这是添加上传图片的接口
  133. const imageUrl = ref("");
  134. // 上传图片成功的回调函数
  135. const handleAvatarSuccess = (response, uploadFile) => {
  136. imageUrl.value = URL.createObjectURL(uploadFile.raw);
  137. console.log("图片上传成功", response, uploadFile);
  138. addRecharge.value.rechargeVoucher =
  139. "http://192.168.8.93:10010/upload/" + response.data;
  140. console.log("图片名称", addRecharge.value.rechargeVoucher);
  141. };
  142. // 上传图片之前的校验函数
  143. const beforeAvatarUpload = (rawFile) => {
  144. if (rawFile.type !== "image/jpeg") {
  145. ElMessage.error("Avatar picture must be JPG format!");
  146. return false;
  147. } else if (rawFile.size / 1024 / 1024 > 2) {
  148. ElMessage.error("Avatar picture size can not exceed 2MB!");
  149. return false;
  150. }
  151. return true;
  152. };
  153. //充值方式条目
  154. const options = [
  155. {
  156. value: "现金充值",
  157. label: "现金充值",
  158. },
  159. {
  160. value: "龙鳞卡",
  161. label: "龙鳞卡",
  162. },
  163. {
  164. value: "弘粉卡",
  165. label: "弘粉卡",
  166. },
  167. ];
  168. const calculatedFreeGold = computed(() => {
  169. return addRecharge.value.paidGold * addRecharge.value.activityId;
  170. });
  171. const calculatedRechargeGold = computed(() => {
  172. addRecharge.value.paidGold * addRecharge.value.reteId;
  173. });
  174. watch(calculatedFreeGold, calculatedRechargeGold, (newVal) => {
  175. addRecharge.value.freeGold = newVal;
  176. addRecharge.value.rechargeGold = newVal;
  177. });
  178. </script>
  179. <template>
  180. <div>新增充值</div>
  181. <el-form
  182. :model="addRecharge"
  183. ref="Ref"
  184. :rules="rules"
  185. label-width="auto"
  186. style="max-width: 600px"
  187. >
  188. <el-form-item prop="homilyId" label="精网号">
  189. <el-input v-model="addRecharge.homilyId" style="width: 220px" />
  190. <el-button
  191. type="primary"
  192. @click="getUser(addRecharge.homilyId)"
  193. style="margin-left: 20px"
  194. >查询</el-button
  195. >
  196. </el-form-item>
  197. <el-form-item prop="activityId" label="活动名称">
  198. <el-select
  199. v-model="addRecharge.activityId"
  200. placeholder="请选择"
  201. style="width: 300px"
  202. >
  203. <el-option
  204. v-for="item in activity"
  205. :key="item.value"
  206. :label="item.activityName"
  207. :value="item.rechargeRatio"
  208. />
  209. </el-select>
  210. </el-form-item>
  211. <el-form-item prop="paidGold" label="充值金币">
  212. <el-input v-model="addRecharge.paidGold" style="width: 100px" />
  213. <p style="margin-right: 20px"></p>
  214. <p>免费金币</p>
  215. <el-input
  216. v-model="addRecharge.freeGold"
  217. disabled
  218. :value="addRecharge.paidGold * addRecharge.activityId"
  219. style="width: 100px"
  220. />
  221. <p></p>
  222. </el-form-item>
  223. <el-form-item label="充值金额">
  224. <el-select
  225. prop="rechargeGold"
  226. v-model="addRecharge.rateId"
  227. placeholder="货币名称"
  228. style="width: 95px; margin-right: 5px"
  229. >
  230. <el-option
  231. v-for="item in currency"
  232. :key="item.value"
  233. :label="item.currency"
  234. :value="item.exchangeRate"
  235. />
  236. </el-select>
  237. <el-input
  238. disabled
  239. :value="addRecharge.paidGold * addRecharge.rateId"
  240. style="width: 200px"
  241. />
  242. </el-form-item>
  243. <el-form-item prop="payWay" label="收款方式">
  244. <el-select
  245. v-model="addRecharge.payWay"
  246. placeholder="请选择"
  247. style="width: 300px"
  248. >
  249. <el-option
  250. v-for="item in options"
  251. :key="item.value"
  252. :label="item.label"
  253. :value="item.value"
  254. />
  255. </el-select>
  256. </el-form-item>
  257. <el-form-item prop="rechargeTime" label="交款时间">
  258. <el-date-picker
  259. v-model="addRecharge.rechargeTime"
  260. type="date"
  261. style="width: 300px"
  262. />
  263. </el-form-item>
  264. <el-form-item
  265. prop="rechargeVoucher"
  266. label="交款凭证"
  267. style="margin-bottom: 5px"
  268. >
  269. <el-upload
  270. class="avatar-uploader"
  271. action="http://192.168.8.93:10010/upload"
  272. :show-file-list="false"
  273. :on-success="handleAvatarSuccess"
  274. :before-upload="beforeAvatarUpload"
  275. >
  276. <img v-if="imageUrl" :src="imageUrl" class="avatar" />
  277. <el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>
  278. </el-upload>
  279. <p style="margin-left: 10px; color: rgb(177, 176, 176)">
  280. 仅支持.jpg .png格式文件1MB
  281. </p>
  282. </el-form-item>
  283. <el-form-item prop="remark" label="备注">
  284. <el-input
  285. v-model="addRecharge.remark"
  286. style="width: 300px"
  287. :rows="2"
  288. maxlength="100"
  289. show-word-limit
  290. type="textarea"
  291. />
  292. </el-form-item>
  293. <el-form-item prop="submitter" label="提交人">
  294. <el-input
  295. style="width: 300px"
  296. value="张三"
  297. disabled
  298. placeholder="提交人姓名"
  299. />
  300. </el-form-item>
  301. </el-form>
  302. <el-button @click="closeAddActivityVisible" style="margin-left: 280px"
  303. >取消</el-button
  304. >
  305. <el-button type="primary" @click="addBefore"> 提交 </el-button>
  306. <!-- 客户信息栏 -->
  307. <el-card
  308. style="width: 700px; float: right; margin-top: -470px; margin-right: 100px"
  309. >
  310. <el-form
  311. :model="user"
  312. label-width="auto"
  313. style="max-width: 600px"
  314. label-position="left"
  315. >
  316. <el-text size="large" style="margin-left: 20px">客户信息</el-text>
  317. <el-row style="margin-top: 20px">
  318. <el-col :span="12">
  319. <el-form-item label="姓名:">
  320. <p>{{ user.name }}</p>
  321. </el-form-item>
  322. </el-col>
  323. <el-col :span="12">
  324. <el-form-item label="历史金币总数"> </el-form-item>
  325. </el-col>
  326. <el-col :span="12">
  327. <el-form-item label="精网号">
  328. <p>{{ user.homilyId }}</p>
  329. </el-form-item>
  330. </el-col>
  331. <el-col :span="12">
  332. <el-form-item label="当前金币总数"> </el-form-item>
  333. </el-col>
  334. <el-col :span="12">
  335. <el-form-item label="首次充值日期"> </el-form-item>
  336. </el-col>
  337. <el-col :span="12">
  338. <el-form-item label="充值次数"> </el-form-item>
  339. </el-col>
  340. <el-col :span="12">
  341. <el-form-item label="负责客服"> </el-form-item>
  342. </el-col>
  343. <el-col :span="12">
  344. <el-form-item label="消费次数"> </el-form-item>
  345. </el-col>
  346. <el-col :span="12">
  347. <el-form-item label="所属门店"> </el-form-item>
  348. </el-col>
  349. <el-col :span="12">
  350. <el-form-item label="待审核"> </el-form-item>
  351. </el-col>
  352. </el-row>
  353. </el-form>
  354. </el-card>
  355. </template>
  356. <style scoped>
  357. p {
  358. margin: 0px;
  359. }
  360. .el-form-item {
  361. margin-left: 50px;
  362. }
  363. /* 上传图片的格式 */
  364. .avatar-uploader .avatar {
  365. width: 50px;
  366. height: 50px;
  367. display: block;
  368. }
  369. </style>
  370. <style>
  371. .avatar-uploader .el-upload {
  372. border: 1px dashed var(--el-border-color);
  373. border-radius: 6px;
  374. cursor: pointer;
  375. position: relative;
  376. overflow: hidden;
  377. transition: var(--el-transition-duration-fast);
  378. }
  379. .avatar-uploader .el-upload:hover {
  380. border-color: var(--el-color-primary);
  381. }
  382. .el-icon.avatar-uploader-icon {
  383. font-size: 28px;
  384. color: #8c939d;
  385. width: 50px;
  386. height: 50px;
  387. text-align: center;
  388. }
  389. </style>