diff --git a/.env.development b/.env.development index b6264c1..315e256 100644 --- a/.env.development +++ b/.env.development @@ -1,12 +1,12 @@ -# VITE_API_BASE='https://hwjb.homilychart.com/dev/admin' +VITE_API_BASE='https://hwjb.homilychart.com/dev/admin' # 测试环境 # VITE_API_BASE='http://18.143.76.3:10704/' # VITE_API_BASE='http://192.168.9.52:10705/' VITE_UPLOAD_URL=http://39.101.133.168:8828/hljw/api/aws/upload - VITE_API_BASE='http://192.168.9.28:8081/' +# VITE_API_BASE='http://192.168.9.28:8081/' # VITE_API_BASE='http://192.168.9.28:8081/' # sunjiabei # VITE_API_BASE='http://192.168.9.28:8081/' # VITE_API_BASE='http://192.168.5.92:8081/' # zhangyong -# VITE_API_BASE='http://192.168.3.83:8081/' +# VITE_API_BASE='http://192.168.9.62:8081/' diff --git a/src/router/index.js b/src/router/index.js index 6a32f14..3253309 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -161,21 +161,21 @@ const routes = [ path: 'add', name: "addBeanRecharge", component: () => import("../views/recharge/addBeanRecharge.vue"), - meta: {permissionId: 17} // 对应"提交金币充值"id=17 + meta: {permissionId: 46} // 对应"提交金豆充值"id=46 }, // 金豆系统充值 { path: 'system', name: "beanSystemRecharge", component: () => import("../views/recharge/beanSystemRecharge.vue"), - meta: {permissionId: 18} // 对应"查看金币充值明细"id=18 + meta: {permissionId: 47} // 对应"查看金豆系统充值明细"id=47 }, // 金豆线上充值 { path: 'online', name: "beanOnlineRecharge", component: () => import("../views/recharge/beanOnlineRecharge.vue"), - meta: {permissionId: 18} // 对应"查看金币充值明细"id=18 + meta: {permissionId: 48} // 对应"查看金豆线上充值明细"id=48 } ] }, diff --git a/src/views/consume/articleVideo.vue b/src/views/consume/articleVideo.vue index 2d36320..99a6226 100644 --- a/src/views/consume/articleVideo.vue +++ b/src/views/consume/articleVideo.vue @@ -1,11 +1,759 @@ - \ No newline at end of file +.pagination { + display: flex; + margin-top: 20px; +} + diff --git a/src/views/consume/dieHardFan.vue b/src/views/consume/dieHardFan.vue index 78d9704..ac43bd4 100644 --- a/src/views/consume/dieHardFan.vue +++ b/src/views/consume/dieHardFan.vue @@ -1,11 +1,730 @@ - \ No newline at end of file +.pagination { + display: flex; + margin-top: 20px; +} + diff --git a/src/views/consume/liveStream.vue b/src/views/consume/liveStream.vue index 48e128f..94ca7de 100644 --- a/src/views/consume/liveStream.vue +++ b/src/views/consume/liveStream.vue @@ -1,11 +1,725 @@ - \ No newline at end of file +.pagination { + display: flex; + margin-top: 20px; +} + diff --git a/src/views/recharge/addBeanRecharge.vue b/src/views/recharge/addBeanRecharge.vue index 6d3d6e9..6613829 100644 --- a/src/views/recharge/addBeanRecharge.vue +++ b/src/views/recharge/addBeanRecharge.vue @@ -6,27 +6,28 @@ import axios from 'axios' import { ElMessageBox } from 'element-plus' import API from '@/util/http' import { uploadFile } from '@/util/request'; +import request from '@/util/http' import moment from 'moment' -import { range, re } from 'mathjs' +import { e, range, re } from 'mathjs' import { utils, read } from 'xlsx' import throttle from 'lodash/throttle' - +import { useAdminStore } from "@/store/index.js"; +import { storeToRefs } from "pinia"; const user = ref({}) const getUser = async function (jwcode) { if (addForm.value.jwcode) { addForm.value.jwcode = addForm.value.jwcode.replace(/\s/g, ''); + } else { + ElMessage.error('请先输入精网号') + return false } try { - - const result = await API({ - url: '/user/selectUser', + url: '/beanUser/userCard', data: { jwcode: addForm.value.jwcode } }) - - if (result.code === 0) { ElMessage.error(result.msg); } else if (result.data === null) { @@ -48,87 +49,70 @@ const addForm = ref({ remark: '', adminId: '' }) -const Ref = ref(null) - -// const rules = reactive({ -// jwcode: [{ required: true, validator: validateJwCode, trigger: 'blur' }], -// gode: [ -// { required: true, message: '请输入永久金币数', trigger: 'blur' }, -// { -// validator: (rule, value, callback) => { -// // 检查是否包含特殊符号 -// if (/[^0-9.]/.test(value)) { -// callback(new Error('不能包含特殊符号或负数')); -// return; -// } +const formRef = ref(null) +const adminStore = useAdminStore() +const { adminData } = storeToRefs(adminStore) +const rules = reactive({ + jwcode: [ + { required: true, message: '请输入精网号', trigger: 'blur' }, + { + validator: (rule, value, callback) => { + if (!value) { + callback(new Error('精网号不能为空')); + return; + } + if (/[^0-9]/.test(value)) { + callback(new Error('精网号只能包含数字')); + return; + } + callback(); + }, trigger: 'blur' + }], + gode: [ + { required: true, message: '请输入永久金豆数', trigger: 'blur' }, + { + validator: (rule, value, callback) => { + // 检查是否为非负整数 + if (!/^\d+$/.test(value)) { + callback(new Error('请输入非负整数')); + return; + } -// // 检查整数位数 -// const integerPart = value.split('.')[0]; -// if (integerPart.length > 6) { -// callback(new Error('整数位数不能超过6位')); -// return; -// } + // 检查位数 + if (value.length > 6) { + callback(new Error('整数位数不能超过6位')); + return; + } + callback(); + }, -// // 检查小数位数 -// if (value.includes('.')) { -// const decimalPart = value.split('.')[1]; -// if (decimalPart.length > 2) { -// callback(new Error('小数位数不能超过两位')); -// return; -// } -// } - -// const numValue = Number(value); -// if (isNaN(numValue)) { -// callback(new Error('请输入有效的数字')); -// } else if (numValue < 0) { -// callback(new Error('输入金额不能小于0')); -// } else { -// callback(); -// } -// }, -// trigger: 'blur' -// } -// ], -// freeGode: [ -// { required: true, message: '请输入免费金币数', trigger: 'blur' }, -// { -// validator: (rule, value, callback) => { -// // 检查是否包含特殊符号 -// if (/[^0-9.]/.test(value)) { -// callback(new Error('不能包含特殊符号或负数')); -// return; -// } - -// // 检查整数位数 -// const integerPart = value.split('.')[0]; -// if (integerPart.length > 6) { -// callback(new Error('整数位数不能超过6位')); -// return; -// } - -// // 检查小数位数 -// if (value.includes('.')) { -// const decimalPart = value.split('.')[1]; -// if (decimalPart.length > 2) { -// callback(new Error('小数位数不能超过两位')); -// return; -// } -// } + trigger: 'blur' + } + ], + freeGode: [ + { required: true, message: '请输入免费金豆数', trigger: 'blur' }, + { + validator: (rule, value, callback) => { + // 检查是否为非负整数 + if (!/^\d+$/.test(value)) { + callback(new Error('请输入非负整数')); + return; + } -// const numValue = Number(value); -// if (isNaN(numValue)) { -// callback(new Error('请输入有效的数字')); -// } else if (numValue < 0) { -// callback(new Error('输入金额不能小于0')); -// } else { -// callback(); -// } -// }, -// trigger: 'blur' -// } -// ], -// }); + // 检查位数 + if (value.length > 6) { + callback(new Error('整数位数不能超过6位')); + return; + } + callback(); + }, + trigger: 'blur' + } + ], + remark: [ + { required: true, message: '请输入备注', trigger: 'blur' } + ] +}); //重置表单 const deleteAddForm = function () { @@ -141,118 +125,110 @@ const deleteAddForm = function () { } } -const handleAddForm = () => { +const handleAddForm = async () => { + try { + await new Promise((resolve, reject) => { + formRef.value.validate((valid) => { + if (valid) { + if (Number(addForm.value.gode) === 0 && Number(addForm.value.freeGode) === 0) { + reject(new Error('永久金豆和付费金豆不能同时为0')); + } + resolve(); // 验证通过,继续执行后续代码 + } else { + reject(new Error('请检查并完善表单信息')); // 验证失败,抛出错误 + } + }); + }); + console.log('adminData', adminData.value); + const result = await request({ + url: '/bean/add', + data: { + jwcode: addForm.value.jwcode, + gode: addForm.value.gode, + freeGode: addForm.value.freeGode, + remark: addForm.value.remark, + adminId: adminData.adminId + } + }) + } catch (error) { + console.log('金豆新增充值失败'); + ElMessage.error(error.message || '操作失败'); + } } - \ No newline at end of file + \ No newline at end of file diff --git a/src/views/recharge/addCoinRecharge.vue b/src/views/recharge/addCoinRecharge.vue index 94d017a..5f208a8 100644 --- a/src/views/recharge/addCoinRecharge.vue +++ b/src/views/recharge/addCoinRecharge.vue @@ -16,7 +16,7 @@ import throttle from 'lodash/throttle' // 精网号去空格 const trimJwCode = () => { if (recharge.value.jwcode) { - recharge.value.jwcode = recharge.value.jwcode.replace(/\s/g, ''); + recharge.value.jwcode = recharge.value.jwcode.replace(/\s/g, ''); } } // 上传图片前的验证函数 @@ -77,9 +77,9 @@ const recharge = ref({ const add = async function () { try { - const formattedRecharge = { ...recharge.value} + const formattedRecharge = { ...recharge.value } - // 将永久金币数、免费金币数和充值金额数乘以 100 + // 将永久金币数、免费金币数和充值金额数乘以 100 if (formattedRecharge.permanentGold) { formattedRecharge.permanentGold = Number(formattedRecharge.permanentGold) * 100; } @@ -154,7 +154,7 @@ const addBefore = () => { }) return } - if(recharge.value.money == null || recharge.value.money == '' || recharge.value.money == undefined){ + if (recharge.value.money == null || recharge.value.money == '' || recharge.value.money == undefined) { ElMessage({ type: 'error', message: '请输入充值金额' @@ -187,21 +187,20 @@ const addBefore = () => { // 表单验证 // 开始时间改变时,重新验证结束时间 const Ref = ref(null) - -const validateJwCode = (rule, value, callback) => { - if (!value) { - callback(new Error('精网号不能为空')); - return; - } - if (/[^0-9]/.test(value)) { - callback(new Error('精网号只能包含数字')); - return; - } - callback(); -}; - const rules = reactive({ - jwcode: [{ required: true, validator: validateJwCode, trigger: 'blur' }], + jwcode: [{ + required: true, validator: (rule, value, callback) => { + if (!value) { + callback(new Error('精网号不能为空')); + return; + } + if (/[^0-9]/.test(value)) { + callback(new Error('精网号只能包含数字')); + return; + } + callback(); + }, trigger: 'blur' + }], activity: [{ required: true, message: '请选择活动名称', trigger: 'blur' }], permanentGold: [ { required: true, message: '请输入永久金币数', trigger: 'blur' }, @@ -219,7 +218,7 @@ const rules = reactive({ callback(new Error('整数位数不能超过6位')); return; } - + // 检查小数位数 if (value.includes('.')) { const decimalPart = value.split('.')[1]; @@ -228,7 +227,7 @@ const rules = reactive({ return; } } - + const numValue = Number(value); if (isNaN(numValue)) { callback(new Error('请输入有效的数字')); @@ -280,11 +279,11 @@ const rules = reactive({ } ], rateName: [{ - required: true, - message: '请选择货币名称', + required: true, + message: '请选择货币名称', trigger: 'blur' }], - + money: [ { required: true, message: '请输入充值金额', trigger: 'blur' }, { @@ -341,7 +340,7 @@ const getUser = async function (jwcode) { } }) - + if (result.code === 0) { ElMessage.error(result.msg); } else if (result.data === null) { @@ -365,7 +364,7 @@ const activity = ref([]) // const result = await API({ // url: '/general/activity', // data: { - + // } // }) @@ -387,7 +386,7 @@ const rateName = [ { value: 'USD', label: 'USD', - rateId: 1 + rateId: 1 }, { value: 'HKD', @@ -436,14 +435,14 @@ const customUpload = async (options) => { try { const formData = new FormData(); formData.append('file', options.file); - + const response = await axios.post(import.meta.env.VITE_UPLOAD_URL, formData, { headers: { 'Content-Type': 'multipart/form-data', 'Authorization': `Bearer ${localStorage.getItem('token')}` } }); - + if (response.data.code === 200 && response.data.data) { // 传递原始文件对象和响应数据 handleAvatarSuccess(response.data, options.file); @@ -463,7 +462,7 @@ const customUpload = async (options) => { const handleAvatarSuccess = (response, file) => { // 直接使用 file 对象创建 Object URL imageUrl.value = URL.createObjectURL(file); - + // 使用服务器返回的文件路径(根据实际响应结构调整) if (response && response.filePath) { recharge.value.voucher = response.filePath; @@ -529,7 +528,7 @@ onMounted(async function () { await getAdminData() // await getCurrency() // await getActivity()// 现在的活动就是文字输入框,不需要请求接口,具体等后续需求 - + }) onMounted(() => { console.log('上传URL:', import.meta.env.VITE_UPLOAD_URL); @@ -539,25 +538,12 @@ onMounted(() => {