Merge branch 'dev' into test

This commit is contained in:
2024-09-12 01:42:52 +08:00
14 changed files with 316 additions and 348 deletions

View File

@@ -1,62 +0,0 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<option name="LINE_SEPARATOR" value="&#10;" />
<HTMLCodeStyleSettings>
<option name="HTML_SPACE_INSIDE_EMPTY_TAG" value="true" />
</HTMLCodeStyleSettings>
<JSCodeStyleSettings version="0">
<option name="USE_SEMICOLON_AFTER_STATEMENT" value="false" />
<option name="FORCE_SEMICOLON_STYLE" value="true" />
<option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" />
<option name="USE_DOUBLE_QUOTES" value="false" />
<option name="FORCE_QUOTE_STYlE" value="true" />
<option name="ENFORCE_TRAILING_COMMA" value="Remove" />
<option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" />
<option name="SPACES_WITHIN_IMPORTS" value="true" />
</JSCodeStyleSettings>
<TypeScriptCodeStyleSettings version="0">
<option name="USE_SEMICOLON_AFTER_STATEMENT" value="false" />
<option name="FORCE_SEMICOLON_STYLE" value="true" />
<option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" />
<option name="USE_DOUBLE_QUOTES" value="false" />
<option name="FORCE_QUOTE_STYlE" value="true" />
<option name="ENFORCE_TRAILING_COMMA" value="Remove" />
<option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" />
<option name="SPACES_WITHIN_IMPORTS" value="true" />
</TypeScriptCodeStyleSettings>
<VueCodeStyleSettings>
<option name="INTERPOLATION_NEW_LINE_AFTER_START_DELIMITER" value="false" />
<option name="INTERPOLATION_NEW_LINE_BEFORE_END_DELIMITER" value="false" />
</VueCodeStyleSettings>
<codeStyleSettings language="HTML">
<option name="SOFT_MARGINS" value="100" />
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="2" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="JavaScript">
<option name="SOFT_MARGINS" value="100" />
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="2" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="TypeScript">
<option name="SOFT_MARGINS" value="100" />
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="2" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="Vue">
<option name="SOFT_MARGINS" value="100" />
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
</code_scheme>
</component>

View File

@@ -1,5 +0,0 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</state>
</component>

View File

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GitToolBoxBlameSettings">
<option name="version" value="2" />
</component>
</project>

8
.idea/modules.xml generated
View File

@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/jdt-admin.iml" filepath="$PROJECT_DIR$/.idea/jdt-admin.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml generated
View File

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

127
.idea/workspace.xml generated
View File

@@ -1,127 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AutoImportSettings">
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="b019f168-135d-4524-8d1f-fa42f9f9b7b0" name="更改" comment="">
<change afterPath="$PROJECT_DIR$/src/views/finance/suyuan.vue" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.husky/_/husky.sh" beforeDir="false" afterPath="$PROJECT_DIR$/.husky/_/husky.sh" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/views/commodity/hot_list/index.vue" beforeDir="false" afterPath="$PROJECT_DIR$/src/views/commodity/hot_list/index.vue" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/views/finance/api.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/views/finance/api.js" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/views/finance/index.vue" beforeDir="false" afterPath="$PROJECT_DIR$/src/views/finance/index.vue" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/views/order/index/index.vue" beforeDir="false" afterPath="$PROJECT_DIR$/src/views/order/index/index.vue" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="Vue Options API Component" />
</list>
</option>
</component>
<component name="Git.Settings">
<option name="RECENT_BRANCH_BY_REPOSITORY">
<map>
<entry key="$PROJECT_DIR$" value="main" />
</map>
</option>
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="GitToolBoxStore">
<option name="recentBranches">
<RecentBranches>
<option name="branchesForRepo">
<list>
<RecentBranchesForRepo>
<option name="branches">
<list>
<RecentBranch>
<option name="branchName" value="dev" />
<option name="lastUsedInstant" value="1723221039" />
</RecentBranch>
<RecentBranch>
<option name="branchName" value="main" />
<option name="lastUsedInstant" value="1723221038" />
</RecentBranch>
</list>
</option>
<option name="repositoryRootUrl" value="file://$PROJECT_DIR$" />
</RecentBranchesForRepo>
</list>
</option>
</RecentBranches>
</option>
</component>
<component name="HighlightingSettingsPerFile">
<setting file="file://$PROJECT_DIR$/src/views/order/index/index.vue" root0="FORCE_HIGHLIGHTING" />
</component>
<component name="ProjectColorInfo">{
&quot;associatedIndex&quot;: 2
}</component>
<component name="ProjectId" id="2kQfzo3ApXRrBNGBRkYhmvHyd37" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent"><![CDATA[{
"keyToString": {
"RunOnceActivity.ShowReadmeOnStart": "true",
"git-widget-placeholder": "dev",
"last_opened_file_path": "E:/ProjectCode/jdt-admin",
"node.js.detected.package.eslint": "true",
"node.js.detected.package.tslint": "true",
"node.js.selected.package.eslint": "(autodetect)",
"node.js.selected.package.tslint": "(autodetect)",
"nodejs_package_manager_path": "pnpm",
"npm.dev.executor": "Run",
"settings.editor.selected.configurable": "preferences.lookFeel",
"vue.rearranger.settings.migration": "true"
},
"keyToStringList": {
"vue.recent.templates": [
"Vue Options API Component"
]
}
}]]></component>
<component name="RunManager">
<configuration name="dev" type="js.build_tools.npm" nameIsGenerated="true">
<package-json value="$PROJECT_DIR$/package.json" />
<command value="run" />
<scripts>
<script value="dev" />
</scripts>
<node-interpreter value="project" />
<envs />
<method v="2" />
</configuration>
</component>
<component name="SharedIndexes">
<attachedChunks>
<set>
<option value="bundled-js-predefined-1d06a55b98c1-0b3e54e931b4-JavaScript-WS-241.19072.23" />
</set>
</attachedChunks>
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="应用程序级" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager">
<task active="true" id="Default" summary="默认任务">
<changelist id="b019f168-135d-4524-8d1f-fa42f9f9b7b0" name="更改" comment="" />
<created>1723220985918</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1723220985918</updated>
<workItem from="1723220987623" duration="121000" />
<workItem from="1723221113870" duration="110000" />
<workItem from="1725368890652" duration="3893000" />
</task>
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="3" />
</component>
</project>

View File

@@ -290,7 +290,7 @@ const columns = ref([
},
},
{
title: '积分',
title: '余额',
align: 'center',
key: 'integral',
},

View File

@@ -173,11 +173,11 @@
:min="0"
/>
</n-form-item-gi>
<n-form-item-gi :span="20" label="商品扣比例" path="discount">
<n-form-item-gi :span="20" label="商品扣比例" path="discount">
<n-input-number
v-model:value="nowRow.discount"
clearable
placeholder="请输入扣比例...."
placeholder="请输入扣比例...."
:min="0"
:precision="0"
>
@@ -337,7 +337,7 @@ const rules = {
discount: {
required: true,
type: 'number',
message: '请输入扣比例',
message: '请输入扣比例',
trigger: 'blur',
},
}
@@ -444,32 +444,19 @@ const columns = ref([
align: 'center',
},
{
title: '积分抵扣',
slot: 'exchange',
title: '抵扣后价格(元)',
key: 'discount_price',
align: 'center',
render: (row) => {
return h(
'span',
{},
{
default: () => (row.exchange ? `${(row.exchange / 100).toFixed(2)}元` : '无'),
}
)
},
},
{
title: '折扣比例(%)',
slot: 'discount',
title: '积分抵扣(元)',
key: 'exchange',
align: 'center',
},
{
title: '抵扣比例(%',
key: 'discount',
align: 'center',
render: (row) => {
return h(
'span',
{},
{
default: () => `${row.discount}%`,
}
)
},
},
{
title: '商品库存',
@@ -667,28 +654,33 @@ const clear = () => {
}
const veeify = async () => {
let data = {}
if (nowKey.value === 1 || nowKey.value === 2) {
data = {
gid: [nowRow.value.gid],
status: nowKey.value,
notes: notesVal.value,
}
await api.getHotStatus(data)
await getList()
clear()
} else {
formRef.value?.validate(async (errors) => {
if (!errors) {
data = {
...nowRow.value,
gid: [nowRow.value.gid],
}
await api.getHotStatus(data)
await getList()
clear()
try {
let data = {}
if (nowKey.value === 1 || nowKey.value === 2) {
data = {
gid: [nowRow.value.gid],
status: nowKey.value,
notes: notesVal.value,
}
})
await api.getHotStatus(data)
await getList()
// clear()
} else {
formRef.value?.validate(async (errors) => {
if (!errors) {
data = {
...nowRow.value,
gid: [nowRow.value.gid],
}
await api.getHotStatus(data)
await getList()
// clear()
}
})
}
} finally {
isNoteModel.value = false
isDzModel.value = false
}
}

View File

@@ -9,4 +9,6 @@ export default {
ydataEdit: (data) => request.post('/store/amount/withdraw/edit', data),
// 溯源统计
suyuanData: (data) => request.post('/pulse/count', data),
// 获取游戏大厅
getGameData: (data) => request.post('/game/list', data),
}

View File

@@ -8,7 +8,7 @@
<n-number-animation
ref="numberAnimationInstRef"
:from="0"
:to="cardData.total / 100"
:to="cardData.total"
:precision="2"
/>
</n-statistic>
@@ -28,18 +28,14 @@
<n-number-animation
ref="numberAnimationInstRef"
:from="0"
:to="cardData.service / 100"
:to="cardData.service"
:precision="2"
/>
</n-statistic>
</n-card>
<n-card ml-10 w-400>
<n-statistic label="已审核金额" tabular-nums>
<n-number-animation
ref="numberAnimationInstRef"
:from="0"
:to="cardData.count / 100"
/>
<n-number-animation ref="numberAnimationInstRef" :from="0" :to="cardData.count" />
</n-statistic>
</n-card>
</div>

View File

@@ -1,5 +1,87 @@
<template>
<CommonPage show-footer :title="$route.title">
<n-grid class="mb-10" x-gap="12">
<n-gi :span="24">
<div flex>
<n-card w-250>
<n-statistic label="总赢积分" tabular-nums>
<n-number-animation ref="numberAnimationInstRef" :from="0" :to="cardData.win" />
</n-statistic>
</n-card>
<n-card ml-10 w-250>
<n-statistic label="总豆子" tabular-nums>
<n-number-animation ref="numberAnimationInstRef" :from="0" :to="cardData.pulse" />
</n-statistic>
</n-card>
</div>
</n-gi>
<n-gi :span="12">
<div mt-10 flex items-center>
<div w-100>筛选条件:</div>
<n-input-group>
<n-select
v-model:value="queryParams.selectKey"
:style="{ width: '30rem' }"
:options="selectOptions"
placeholder="请选择"
/>
<n-input v-model:value="queryParams.word" :style="{ width: '50rem' }" />
</n-input-group>
</div>
</n-gi>
<n-gi :span="24">
<div mt-10 flex items-center>
<div mr-10>游戏名称:</div>
<n-select
v-model:value="queryParams.hall_id"
w-250
:options="gamelist"
placeholder="请选择游戏"
/>
</div>
</n-gi>
<n-gi :span="24" mt-10>
<div>
<span>豆子状态</span>
<n-radio-group v-model:value="queryParams.Status">
<n-radio-button
v-for="song in songs"
:key="song.value"
:value="song.value"
:label="song.label"
/>
</n-radio-group>
</div>
</n-gi>
<n-gi :span="24" mt-10>
<div>
<span>活动赠送</span>
<n-radio-group v-model:value="queryParams.Type">
<n-radio-button
v-for="song in songs1"
:key="song.value"
:value="song.value"
:label="song.label"
/>
</n-radio-group>
</div>
</n-gi>
<n-gi :span="24">
<div mt-10 flex items-center>
<div>时间筛选</div>
<n-date-picker
v-model:formatted-value="queryParams.time"
value-format="yyyy-MM-dd HH:mm:ss"
type="datetimerange"
clearable
/>
</div>
</n-gi>
<n-gi span="24" mt-10 flex items-center>
<n-button type="primary" @click="getList">查询</n-button>
<n-button ml-10 @click="clear">重置</n-button>
</n-gi>
</n-grid>
<n-data-table
class="mt-10"
:loading="loading"
@@ -14,12 +96,119 @@
<script setup>
import api from './api'
import dayjs from 'dayjs'
// const queryData = ref({})
const queryParams = ref({})
const cardData = ref({})
const selectOptions = [
{
label: '商家电话',
value: 0,
},
{
label: '用户电话',
value: 1,
},
]
const songs = ref([
{
value: 1,
label: '未使用',
},
{
value: 3,
label: '用户赢',
},
{
value: 4,
label: '用户输',
},
{
value: 5,
label: '已过期',
},
])
const gamelist = ref([])
const songs1 = ref([
{
value: 5,
label: '注册赠送',
},
{
value: 6,
label: '签到赠送',
},
{
value: 7,
label: '平台赠送',
},
])
const loading = ref(false)
const columns = ref([])
const columns = ref([
{
title: '游戏名称',
align: 'center',
slot: 'game_name',
render: (row) => {
const res = gamelist.value.find((item) => item.value === Number(row.hall_id))
return h('span', null, {
default: () => res?.label || '',
})
},
},
{
title: '订单ID',
align: 'center',
key: 'order_id',
},
{
title: '期数',
align: 'center',
key: 'periods',
},
{
title: '投注豆子',
align: 'center',
key: 'number',
},
{
title: '赢积分',
align: 'center',
key: 'integral',
},
{
title: '用户电话',
align: 'center',
key: 'user_phone',
},
{
title: '商户电话',
align: 'center',
key: 'merchant_phone',
},
{
title: '投注时间',
align: 'center',
key: 'add_time',
},
{
title: '过期时间',
align: 'center',
slot: 'expire',
render: (row) => {
return h('span', null, {
default: () => dayjs(row.expire).format('YYYY-MM-DD HH:mm:ss'),
})
},
},
])
const data = ref([])
@@ -35,30 +224,56 @@ const pagination = ref({
onMounted(() => {
getList()
getGameList()
})
const getGameList = async () => {
const res = await api.getGameData({ pageSize: 9999999, pageNum: 1 })
gamelist.value = res.data.data.map((item) => ({ value: item.ID, label: item.name }))
}
const getList = async () => {
loading.value = true
// const query_data = {
// Status: queryData.value.status || '',
// Phone: queryData.value.word || '',
// StartTime: queryData.value.time === null ? '' : queryData.value.time[0] || '',
// EndTime: queryData.value.time === null ? '' : queryData.value.time[1] || '',
// }
const query_data = {
...queryParams.value,
StartTime: queryParams.value.time?.[0] || '',
EndTime: queryParams.value.time?.[1] || '',
}
switch (queryParams.value.selectKey) {
case 0:
query_data['merchant_phone'] = queryParams.value.word
break
case 1:
query_data['user_phone'] = queryParams.value.word
break
}
delete query_data.time
delete query_data.word
const res = await api.suyuanData({
pageNum: pagination.value.page,
pageSize: pagination.value.pageSize,
// ...query_data,
...query_data,
})
data.value = res.data.data || []
pagination.value.itemCount = res.data.total
// cardData.value.total = res.data.all
// cardData.value.service = res.data.audit_number
// cardData.value.commission = res.data.audit_commission
// cardData.value.count = res.data.success_amount
data.value = res.data.result || []
pagination.value.itemCount = res.data.count
cardData.value.win = res.data.win
cardData.value.pulse = res.data.pulse
loading.value = false
}
const clear = () => {
queryParams.value = {
word: '',
selectKey: null,
Status: '',
time: null,
Type: '',
hall_id: '',
}
getList()
}
</script>
<style lang="scss" scoped></style>

View File

@@ -251,10 +251,14 @@ const columns = ref([
render: (row) => h('span', `${row.price}元`),
},
{
title: '积分抵扣',
title: '抵扣后价格(元)',
key: 'discount_price',
align: 'center',
},
{
title: '积分抵扣',
key: 'exchange',
align: 'center',
slot: 'discount_price',
render: (row) => h('span', `${row.discount_price}`),
},
{
title: '支付方式',

View File

@@ -0,0 +1,7 @@
<template>
<CommonPage show-footer :title="$route.title"></CommonPage>
</template>
<script setup></script>
<style lang="scss" scoped></style>

View File

@@ -3,21 +3,21 @@
<n-grid class="mb-10" x-gap="12">
<n-gi :span="24">
<div flex>
<n-card w-250>
<!-- <n-card w-250>
<n-statistic label="用户总赢积分" tabular-nums>
<n-number-animation ref="numberAnimationInstRef" :from="0" :to="cardData.win" />
</n-statistic>
</n-card>
<n-card ml-10 w-250>
</n-card> -->
<n-card w-250>
<n-statistic label="用户积分(留存)" tabular-nums>
<n-number-animation ref="numberAnimationInstRef" :from="0" :to="cardData.integral" />
</n-statistic>
</n-card>
<n-card ml-10 w-250>
<!-- <n-card ml-10 w-250>
<n-statistic label="总豆子" tabular-nums>
<n-number-animation ref="numberAnimationInstRef" :from="0" :to="cardData.pulse" />
</n-statistic>
</n-card>
</n-card> -->
<n-card ml-10 w-250>
<n-statistic label="今日新增用户" tabular-nums>
<n-number-animation
@@ -27,7 +27,7 @@
/>
</n-statistic>
</n-card>
<n-card ml-10 w-250>
<!-- <n-card ml-10 w-250>
<n-statistic label="用户总流水(元)" tabular-nums>
<n-number-animation
ref="numberAnimationInstRef"
@@ -36,8 +36,8 @@
:precision="2"
/>
</n-statistic>
</n-card>
<n-card ml-10 w-250>
</n-card> -->
<!-- <n-card ml-10 w-250>
<n-statistic label="总佣金(积分)" tabular-nums>
<n-number-animation
ref="numberAnimationInstRef"
@@ -46,7 +46,7 @@
:precision="2"
/>
</n-statistic>
</n-card>
</n-card> -->
<n-card ml-10 w-250>
<n-statistic label="平台总用户" tabular-nums>
<n-number-animation
@@ -58,7 +58,7 @@
</n-card>
</div>
</n-gi>
<n-gi span="12" mt-10 flex items-center>
<n-gi :span="12" mt-10 flex items-center>
<span w-100>筛选条件:</span>
<n-input-group>
<n-select
@@ -70,7 +70,7 @@
<n-input v-model:value="queryParams.word" :style="{ width: '30%' }" />
</n-input-group>
</n-gi>
<n-gi :span="24" mt-10>
<!-- <n-gi :span="24" mt-10>
<div>
<span>筛选状态</span>
<n-radio-group v-model:value="queryParams.status">
@@ -95,8 +95,8 @@
/>
</n-radio-group>
</div>
</n-gi>
<n-gi :span="10">
</n-gi> -->
<n-gi :span="24">
<div mt-10 flex items-center>
<span w-100>时间筛选</span>
<n-date-picker
@@ -279,40 +279,6 @@ const cardData = ref({
win: 0,
})
const songs = ref([
{
value: 1,
label: '未使用',
},
{
value: 3,
label: '用户赢',
},
{
value: 4,
label: '用户输',
},
{
value: 5,
label: '已过期',
},
])
const songs1 = ref([
{
value: 5,
label: '注册赠送',
},
{
value: 6,
label: '签到赠送',
},
{
value: 7,
label: '主动赠送',
},
])
const selectOptions = [
{
label: '用户昵称',
@@ -364,20 +330,20 @@ const columns = ref([
sorter: true,
sortOrder: false,
},
{
title: '赢积分',
align: 'center',
key: 'win',
sorter: true,
sortOrder: false,
},
{
title: '用户豆子',
align: 'center',
key: 'pulse',
sorter: true,
sortOrder: false,
},
// {
// title: '赢积分',
// align: 'center',
// key: 'win',
// sorter: true,
// sortOrder: false,
// },
// {
// title: '用户豆子',
// align: 'center',
// key: 'pulse',
// sorter: true,
// sortOrder: false,
// },
{
title: '用户状态',
align: 'center',