Browse Source

修改充值金额逻辑

zhangyong/milestone-20250913-现金管理
ZhangYong 2 weeks ago
parent
commit
214bbfb8cb
  1. 7
      package-lock.json
  2. 1
      package.json
  3. 349
      src/views/moneyManage/receiveDetail/receiveDetail.vue
  4. 3
      src/views/recharge/gold/addCoinRecharge.vue

7
package-lock.json

@ -17,6 +17,7 @@
"axios": "^1.12.2", "axios": "^1.12.2",
"dayjs": "^1.11.13", "dayjs": "^1.11.13",
"dayjs-plugin-utc": "^0.1.2", "dayjs-plugin-utc": "^0.1.2",
"decimal.js": "^10.6.0",
"echarts": "^5.5.1", "echarts": "^5.5.1",
"element-plus": "^2.8.8", "element-plus": "^2.8.8",
"js-cookie": "^3.0.5", "js-cookie": "^3.0.5",
@ -3564,9 +3565,9 @@
} }
}, },
"node_modules/decimal.js": { "node_modules/decimal.js": {
"version": "10.4.3",
"resolved": "https://mirrors.huaweicloud.com/repository/npm/decimal.js/-/decimal.js-10.4.3.tgz",
"integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
"version": "10.6.0",
"resolved": "https://registry.npmmirror.com/decimal.js/-/decimal.js-10.6.0.tgz",
"integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/define-lazy-prop": { "node_modules/define-lazy-prop": {

1
package.json

@ -21,6 +21,7 @@
"axios": "^1.12.2", "axios": "^1.12.2",
"dayjs": "^1.11.13", "dayjs": "^1.11.13",
"dayjs-plugin-utc": "^0.1.2", "dayjs-plugin-utc": "^0.1.2",
"decimal.js": "^10.6.0",
"echarts": "^5.5.1", "echarts": "^5.5.1",
"element-plus": "^2.8.8", "element-plus": "^2.8.8",
"js-cookie": "^3.0.5", "js-cookie": "^3.0.5",

349
src/views/moneyManage/receiveDetail/receiveDetail.vue

@ -102,7 +102,7 @@
</el-table-column> </el-table-column>
<el-table-column prop="freeGold" label="支付方式" width="110px"> <el-table-column prop="freeGold" label="支付方式" width="110px">
</el-table-column> </el-table-column>
<el-table-column prop="remark" label="付款时间" width="200px" />
<el-table-column prop="remark" label="付款时间" width="100px" />
<el-table-column prop="payModel" label="转账凭证" width="110px"> <el-table-column prop="payModel" label="转账凭证" width="110px">
<template #default="scope"> <template #default="scope">
<div v-if="scope.row.voucher" <div v-if="scope.row.voucher"
@ -124,8 +124,12 @@
<span v-if="kefu && scope.row.orderStatus == '已通过'" style="color: #FA5A1E;">退款</span> <span v-if="kefu && scope.row.orderStatus == '已通过'" style="color: #FA5A1E;">退款</span>
<span v-else-if="kefu && scope.row.orderStatus == '已撤回'" <span v-else-if="kefu && scope.row.orderStatus == '已撤回'"
style="color: #2741DE;">编辑</span> style="color: #2741DE;">编辑</span>
<span v-else-if="activeTab == 'wait' && !kefu" style="color: #2741DE;">审核</span>
<span v-else-if="activeTab == 'pass' && !kefu" style="color: #2741DE;" @click="openEditForm">编辑</span>
<span v-else-if="kefu && scope.row.orderStatus == '待审核'"
style="color: #FA5A1E;">撤回</span>
<span v-else-if="activeTab == 'wait' && !kefu" style="color: #2741DE;"
@click="openAuditForm">审核</span>
<span v-else-if="activeTab == 'pass' && !kefu" style="color: #2741DE;"
@click="openEditForm">编辑</span>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -178,8 +182,8 @@
</el-icon> </el-icon>
</el-upload> </el-upload>
</el-form-item> </el-form-item>
<el-form-item label="驳回理由" required>
<el-input v-model="addFormData.mask" type="textarea" :rows="4" placeholder="请输入驳回理由" maxlength="200"
<el-form-item label="备注" required>
<el-input v-model="addFormData.mask" type="textarea" :rows="4" placeholder="请输入备注" maxlength="100"
show-word-limit /> show-word-limit />
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -191,66 +195,167 @@
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
<!-- 编辑弹窗 -->
<el-dialog class="adddialog" v-model="editFormisible" width="20vw" :before-close="closeEditForm">
<!-- 审核弹窗 -->
<el-dialog class="adddialog" v-model="auditFormisible" width="20vw" :before-close="closeAuditForm">
<el-form class="addForm" label-width="4vw" label-position="left"> <el-form class="addForm" label-width="4vw" label-position="left">
<el-form-item label="精网号" required>
<el-input v-model="addFormData.jwcode" placeholder="请输入驳回理由" />
<el-form-item label="精网号">
<el-input v-model="auditFormData.jwcode" placeholder="请输入驳回理由" />
</el-form-item> </el-form-item>
<el-form-item label="客户姓名" required>
<el-input v-model="addFormData.userName" placeholder="请输入客户姓名" />
<el-form-item label="客户姓名">
<el-input v-model="auditFormData.userName" placeholder="请输入客户姓名" />
</el-form-item> </el-form-item>
<el-form-item label="所属地区" required>
<el-input disabled="true" v-model="addFormData.market" placeholder="请输入所属地区" />
<el-form-item label="所属地区">
<el-input readonly v-model="auditFormData.market" />
</el-form-item> </el-form-item>
<el-form-item label="活动名称" required>
<el-input v-model="addFormData.jwcode" placeholder="请输入活动名称" />
<el-form-item label="活动名称">
<el-input v-model="auditFormData.jwcode" placeholder="请输入活动名称" />
</el-form-item> </el-form-item>
<el-form-item label="产品名称" required>
<el-form-item label="产品名称">
<el-select placeholder="请选择产品名称" clearable></el-select> <el-select placeholder="请选择产品名称" clearable></el-select>
</el-form-item> </el-form-item>
<el-form-item label="付款币种" required>
<el-form-item label="付款币种">
<el-select placeholder="请选择付款币种" clearable></el-select> <el-select placeholder="请选择付款币种" clearable></el-select>
</el-form-item> </el-form-item>
<el-form-item label="付款金额" required>
<el-input v-model="addFormData.jwcode" placeholder="请输入付款金额" />
<el-form-item label="付款金额">
<el-input v-model="auditFormData.jwcode" placeholder="请输入付款金额" />
</el-form-item> </el-form-item>
<el-form-item label="支付方式" required>
<el-form-item label="支付方式">
<el-select placeholder="请选择支付方式" clearable></el-select> <el-select placeholder="请选择支付方式" clearable></el-select>
</el-form-item> </el-form-item>
<el-form-item label="付款时间" required>
<el-time-picker v-model="addFormData.time" placeholder="请选择付款时间" />
<el-form-item label="付款时间">
<el-time-picker v-model="auditFormData.time" placeholder="请选择付款时间" />
</el-form-item> </el-form-item>
<el-form-item label="转账凭证" required>
<el-upload ref="uploadRef" class="uploader" :show-file-list="false" list-type="picture-card"
:auto-upload="false" :before-upload="beforeUpload" :on-error="handelImgErr"
:on-change="handleImageChange" :http-request="customUpload">
<img v-if="addFormData.imageUrl" :src="addFormData.imageUrl" class="avatar"
style="height: 100%; width: 100%; object-fit: cover;" />
<el-icon v-else class="avatar-uploader-icon">
<Plus />
</el-icon>
</el-upload>
<el-form-item label="转账凭证">
<div class="pic">
<el-upload ref="uploadRef" class="uploader" :show-file-list="false" list-type="picture-card"
:auto-upload="false" :before-upload="beforeUpload" :on-error="handelImgErr"
:on-change="handleImageChange" :http-request="customUpload">
<img v-if="auditFormData.imageUrl" :src="auditFormData.imageUrl" class="avatar"
style="height: 100%; width: 100%; object-fit: cover;" />
<el-icon v-else class="avatar-uploader-icon">
<Plus />
</el-icon>
</el-upload>
<el-text class="picText">
仅支持.jpg .png格式文件 1 MB
</el-text>
</div>
</el-form-item> </el-form-item>
<el-form-item label="驳回理由" required>
<el-input v-model="addFormData.mask" type="textarea" :rows="4" placeholder="请输入驳回理由" maxlength="200"
<el-form-item label="备注">
<el-input v-model="auditFormData.mask" type="textarea" :rows="3" placeholder="请输入备注" maxlength="100"
show-word-limit /> show-word-limit />
</el-form-item> </el-form-item>
<el-form-item label="驳回理由" v-if="ifReject" required>
<el-input v-model="auditFormData.mask" type="textarea" :rows="3" placeholder="请输入驳回理由"
maxlength="100" show-word-limit />
</el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
<span class="dialog-footer">
<el-button style="background-color: #7E91FF;" @click="closeEditForm">取消</el-button>
<span class="dialog-footer" v-if="!ifReject">
<el-button style="background-color: #7E91FF;" @click="ifReject = true">驳回</el-button>
<el-button :style="{
backgroundColor: isBtnDisabled ? '#E5E5E5FF' : '#2741DEFF',
marginLeft: '60px',
color: isBtnDisabled ? '#8A8A8A' : '#F3FAFE'
}" @click="handleReject" :disabled="isBtnDisabled">{{ btnText }}</el-button>
</span>
<span class="dialog-footer" v-if="ifReject">
<el-button style="background-color: #7E91FF;" @click="closeAuditForm">取消</el-button>
<el-button style="background-color: #2741DE; margin-left: 2.5vw;" type="primary" <el-button style="background-color: #2741DE; margin-left: 2.5vw;" type="primary"
@click="handleReject">确定</el-button> @click="handleReject">确定</el-button>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
<!-- 编辑弹窗 -->
<el-dialog class="editdialog" v-model="editFormisible" width="20vw" :before-close="closeEditForm">
<div class="content">
<div class="left">
<el-form class="editForm" label-width="4.5vw" label-position="left">
<el-form-item label="精网号">
<el-input v-model="openEditForm.jwcode" placeholder="请输入驳回理由" />
</el-form-item>
<el-form-item label="客户姓名">
<el-input v-model="openEditForm.userName" placeholder="请输入客户姓名" />
</el-form-item>
<el-form-item label="所属地区">
<el-input disabled="true" v-model="openEditForm.market" placeholder="请输入所属地区" />
</el-form-item>
<el-form-item label="活动名称">
<el-input v-model="openEditForm.jwcode" placeholder="请输入活动名称" />
</el-form-item>
<el-form-item label="产品名称">
<el-select placeholder="请选择产品名称" clearable></el-select>
</el-form-item>
<el-form-item label="付款币种">
<el-select placeholder="请选择付款币种" clearable></el-select>
</el-form-item>
<el-form-item label="付款金额">
<el-input v-model="openEditForm.jwcode" placeholder="请输入付款金额" />
</el-form-item>
<el-form-item label="支付方式">
<el-select placeholder="请选择支付方式" clearable></el-select>
</el-form-item>
<el-form-item label="付款时间">
<el-time-picker v-model="openEditForm.time" placeholder="请选择付款时间" />
</el-form-item>
<el-form-item label="转账凭证">
<div class="pic">
<el-upload ref="uploadRef" class="uploader" :show-file-list="false"
list-type="picture-card" :auto-upload="false" :before-upload="beforeUpload"
:on-error="handelImgErr" :on-change="handleImageChange"
:http-request="customUpload">
<img v-if="auditFormData.imageUrl" :src="auditFormData.imageUrl" class="avatar"
style="height: 100%; width: 100%; object-fit: cover;" />
<el-icon v-else class="avatar-uploader-icon">
<Plus />
</el-icon>
</el-upload>
<el-text class="picText">
仅支持.jpg .png格式文件 1 MB
</el-text>
</div>
</el-form-item>
<el-form-item label="驳回理由">
<el-input v-model="addFormData.mask" type="textarea" :rows="4" placeholder="请输入驳回理由"
maxlength="100" show-word-limit />
</el-form-item>
</el-form>
</div>
<div class="right">
<el-form class="editFormRighrt" label-width="4.5vw" label-position="left">
<el-form-item label="精网号">
<el-input v-model="openEditForm.jwcode" placeholder="请输入驳回理由" />
</el-form-item>
<el-form-item label="客户姓名">
<el-input v-model="openEditForm.userName" placeholder="请输入客户姓名" />
</el-form-item>
<el-form-item label="所属地区">
<el-input disabled="true" v-model="openEditForm.market" placeholder="请输入所属地区" />
</el-form-item>
<el-form-item label="活动名称">
<el-input v-model="openEditForm.jwcode" placeholder="请输入活动名称" />
</el-form-item>
<el-form-item label="产品名称">
<el-select placeholder="请选择产品名称" clearable></el-select>
</el-form-item>
<el-form-item label="付款币种">
<el-select placeholder="请选择付款币种" clearable></el-select>
</el-form-item>
<el-form-item label="驳回理由">
<el-input v-model="addFormData.mask" type="textarea" :rows="4" placeholder="请输入驳回理由"
maxlength="100" show-word-limit />
</el-form-item>
</el-form>
</div>
</div>
</el-dialog>
</div> </div>
</template> </template>
<script setup> <script setup>
import { ref } from 'vue';
import { ref, watch } from 'vue';
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import API from '@/util/http.js' import API from '@/util/http.js'
import { color } from 'echarts';
//==================== ========================= //==================== =========================
const activeTab = ref('wait') const activeTab = ref('wait')
@ -335,7 +440,7 @@ const customUpload = async (options) => {
'Content-Type': 'multipart/form-data' 'Content-Type': 'multipart/form-data'
} }
}) })
if (response.code === 200 && response.data) {
if (response.code === 100 && response.data) {
handleImgSuccess(response, options.file) handleImgSuccess(response, options.file)
ElMessage.success(response.msg || '上传成功') ElMessage.success(response.msg || '上传成功')
} else { } else {
@ -360,6 +465,45 @@ const closeEditForm = () => {
editFormisible.value = false editFormisible.value = false
editFormData.value = {} editFormData.value = {}
} }
//================== =========================
const auditFormData = ref({
})
const auditFormisible = ref(false)
//
const ifReject = ref(false)
const openAuditForm = () => {
auditFormisible.value = true
}
const countdown = ref(0); // 5
const isBtnDisabled = ref(false); //
const btnText = ref('通过(3)'); //
const closeAuditForm = () => {
ifReject.value = false
auditFormisible.value = false
auditFormData.value = {}
}
//
watch(auditFormisible, (val) => {
if (val) {
countdown.value = 3
isBtnDisabled.value = true
btnText.value = `通过(${countdown.value})`
const timer = setInterval(() => {
countdown.value--
btnText.value = `通过(${countdown.value})`
console.log(btnText.value);
if (countdown.value <= 0) {
isBtnDisabled.value = false
clearInterval(timer)
btnText.value = '通过'
}
}, 1000);
}
})
//========================================== //==========================================
const pageInfo = ref({ const pageInfo = ref({
pageSize: 10, pageSize: 10,
@ -415,7 +559,7 @@ const tableData = [
activity: '冬季感恩活动', activity: '冬季感恩活动',
rateName: '钻石尊享产品D', rateName: '钻石尊享产品D',
money: '欧元', money: '欧元',
permanentGold: '2000.00',
permanentGold: '1000.00',
freeGold: '信用卡', freeGold: '信用卡',
remark: '2023-12-05 16:40:00', remark: '2023-12-05 16:40:00',
voucher: 'https://example.com/images/voucher4.jpg', voucher: 'https://example.com/images/voucher4.jpg',
@ -509,18 +653,46 @@ const tableData = [
} }
:deep(.adddialog) { :deep(.adddialog) {
min-width: 450px;
min-width: 500px;
background-color: #F3FAFE !important; background-color: #F3FAFE !important;
margin-top: 10vh;
margin-top: 8vh;
border-radius: 8px;
.addForm { .addForm {
padding: 0 3vw 1vh 1vw;
padding: 0 60px 1vh 60px;
.el-date-editor { .el-date-editor {
display: flex; display: flex;
flex: 1; flex: 1;
} }
.pic {
display: flex;
align-items: center;
.uploader {
height: 80px;
width: 80px;
.el-upload {
height: 100%;
width: 100%;
}
}
.picText {
color: #999999;
font-family: "PingFang SC";
font-size: 10px;
font-style: normal;
font-weight: 400;
line-height: 20px;
margin-left: 10px;
}
}
} }
.dialog-footer { .dialog-footer {
@ -530,6 +702,99 @@ const tableData = [
} }
} }
:deep(.editdialog) {
min-width: 990px;
background-color: #F3FAFE !important;
margin-top: 8vh;
border-radius: 8px;
.editForm {
padding: 0 60px 1vh 60px;
.el-date-editor {
display: flex;
flex: 1;
}
.pic {
display: flex;
align-items: center;
.uploader {
height: 80px;
width: 80px;
.el-upload {
height: 100%;
width: 100%;
}
}
.picText {
color: #999999;
font-family: "PingFang SC";
font-size: 10px;
font-style: normal;
font-weight: 400;
line-height: 20px;
margin-left: 10px;
}
}
}
.content {
display: flex;
height: 100%;
width: 100%;
.left {
min-width: 500px;
}
.right {
flex: 1;
.editFormRighrt {
padding: 0 60px 1vh 40px;
.el-date-editor {
display: flex;
flex: 1;
}
.pic {
display: flex;
align-items: center;
.uploader {
height: 80px;
width: 80px;
.el-upload {
height: 100%;
width: 100%;
}
}
.picText {
color: #999999;
font-family: "PingFang SC";
font-size: 10px;
font-style: normal;
font-weight: 400;
line-height: 20px;
margin-left: 10px;
}
}
}
}
}
}
:deep(.adddialog .el-form-item__label) { :deep(.adddialog .el-form-item__label) {
min-width: 80px; min-width: 80px;
width: auto; width: auto;

3
src/views/recharge/gold/addCoinRecharge.vue

@ -6,6 +6,7 @@ import axios from 'axios'
import API from '@/util/http.js' import API from '@/util/http.js'
import moment from 'moment' import moment from 'moment'
import Cookies from 'js-cookie'; import Cookies from 'js-cookie';
import Decimal from 'decimal.js';
// fixedAdminId // fixedAdminId
// const fixedAdminId = 1; // const fixedAdminId = 1;
@ -93,7 +94,7 @@ const add = async function () {
formattedRecharge.freeGold = Number(formattedRecharge.freeGold) * 100; formattedRecharge.freeGold = Number(formattedRecharge.freeGold) * 100;
} }
if (formattedRecharge.money) { if (formattedRecharge.money) {
formattedRecharge.money = Number(formattedRecharge.money) * 100;
formattedRecharge.money = new Decimal(formattedRecharge.money).mul(100).toNumber();
} }
if (formattedRecharge.payTime) { if (formattedRecharge.payTime) {

Loading…
Cancel
Save