mirror of
https://gitee.com/luojinyi/likeadmin_go.git
synced 2025-12-24 08:12:57 +08:00
修复管理员添加
增加充值订单退款 退款记录 余额明细 退款记录 增加支付设置 增加注册设置
This commit is contained in:
10
admin/src/api/app/recharge.ts
Normal file
10
admin/src/api/app/recharge.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
export function getRechargeConfig() {
|
||||
return request.get({ url: '/setting/recharge/get' })
|
||||
}
|
||||
|
||||
// 设置
|
||||
export function setRechargeConfig(params: any) {
|
||||
return request.post({ url: '/setting/recharge/set', params })
|
||||
}
|
||||
11
admin/src/api/channel/open_setting.ts
Normal file
11
admin/src/api/channel/open_setting.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 微信开发平台配置保存
|
||||
export function setOpenSettingConfig(params: any) {
|
||||
return request.post({ url: '/channel.open_setting/setConfig', params })
|
||||
}
|
||||
|
||||
// 微信开发平台配置详情
|
||||
export function getOpenSettingConfig() {
|
||||
return request.get({ url: '/channel.open_setting/getConfig' })
|
||||
}
|
||||
41
admin/src/api/finance.ts
Normal file
41
admin/src/api/finance.ts
Normal file
@@ -0,0 +1,41 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 余额明细
|
||||
export function accountLog(params?: any) {
|
||||
return request.get({ url: '/finance/account_log/lists', params })
|
||||
}
|
||||
|
||||
// 充值记录
|
||||
export function rechargeLists(params?: any) {
|
||||
return request.get({ url: '/finance/recharge/lists', params }, { ignoreCancelToken: true })
|
||||
}
|
||||
|
||||
// 余额变动类型
|
||||
export function getUmChangeType(params?: any) {
|
||||
return request.get({ url: '/finance/account_log/getUmChangeType', params })
|
||||
}
|
||||
|
||||
//退款
|
||||
export function refund(params?: any) {
|
||||
return request.post({ url: '/finance/recharge/refund', params })
|
||||
}
|
||||
|
||||
//重新退款
|
||||
export function refundAgain(params?: any) {
|
||||
return request.post({ url: '/finance/recharge/refundAgain', params })
|
||||
}
|
||||
|
||||
//退款记录
|
||||
export function refundRecord(params?: any) {
|
||||
return request.get({ url: '/finance/refund/record/list', params })
|
||||
}
|
||||
|
||||
//退款日志
|
||||
export function refundLog(params?: any) {
|
||||
return request.get({ url: '/finance/refund/log', params })
|
||||
}
|
||||
|
||||
//退款统计
|
||||
export function refundStat(params?: any) {
|
||||
return request.get({ url: '/finance/refund/record/stat', params })
|
||||
}
|
||||
26
admin/src/api/setting/pay.ts
Normal file
26
admin/src/api/setting/pay.ts
Normal file
@@ -0,0 +1,26 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 获取支付方式
|
||||
export function getPayWay() {
|
||||
return request.get({ url: '/setting/pay/way/get' })
|
||||
}
|
||||
|
||||
// 设置支付方式
|
||||
export function setPayWay(params: any) {
|
||||
return request.post({ url: '/setting/pay/way/set', params })
|
||||
}
|
||||
|
||||
// 获取支付方式
|
||||
export function getPayConfigLists() {
|
||||
return request.get({ url: '/setting/pay/config/lists' })
|
||||
}
|
||||
|
||||
// 设置支付方式
|
||||
export function setPayConfig(params: any) {
|
||||
return request.post({ url: '/setting/pay/config/set', params })
|
||||
}
|
||||
|
||||
// 设置支付方式
|
||||
export function getPayConfig(params: any) {
|
||||
return request.get({ url: '/setting/pay/config/get', params })
|
||||
}
|
||||
@@ -13,7 +13,7 @@ export function getUserSetup() {
|
||||
* @param { string } defaultAvatar 默认用户头像
|
||||
* @description 设置用户设置
|
||||
*/
|
||||
export function setUserSetup(params: { defaultAvatar: string }) {
|
||||
export function setUserSetup(params: { default_avatar: string }) {
|
||||
return request.post({ url: '/setting/user/save', params })
|
||||
}
|
||||
|
||||
|
||||
@@ -28,14 +28,14 @@ export function useCate(type: number) {
|
||||
type
|
||||
})
|
||||
const item: any[] = [
|
||||
// {
|
||||
// name: '全部',
|
||||
// id: ''
|
||||
// },
|
||||
// {
|
||||
// name: '未分组',
|
||||
// id: 0
|
||||
// }
|
||||
{
|
||||
name: '全部',
|
||||
id: ''
|
||||
},
|
||||
{
|
||||
name: '未分组',
|
||||
id: 0
|
||||
}
|
||||
]
|
||||
cateLists.value = data
|
||||
cateLists.value.unshift(...item)
|
||||
|
||||
@@ -4,56 +4,31 @@
|
||||
<div class="flex-1 min-h-0">
|
||||
<el-scrollbar>
|
||||
<div class="material-left__content pt-4 p-b-4">
|
||||
<el-tree
|
||||
ref="treeRef"
|
||||
node-key="id"
|
||||
:data="cateLists"
|
||||
empty-text=""
|
||||
:highlight-current="true"
|
||||
:expand-on-click-node="false"
|
||||
:current-node-key="cateId"
|
||||
@node-click="handleCatSelect"
|
||||
>
|
||||
<el-tree ref="treeRef" node-key="id" :data="cateLists" empty-text="" :highlight-current="true"
|
||||
:expand-on-click-node="false" :current-node-key="cateId" @node-click="handleCatSelect">
|
||||
<template v-slot="{ data }">
|
||||
<div class="flex flex-1 items-center min-w-0 pr-4">
|
||||
<img
|
||||
class="w-[20px] h-[16px] mr-3"
|
||||
src="@/assets/images/icon_folder.png"
|
||||
/>
|
||||
<img class="w-[20px] h-[16px] mr-3" src="@/assets/images/icon_folder.png" />
|
||||
<span class="flex-1 truncate mr-2">
|
||||
<overflow-tooltip :content="data.name" />
|
||||
</span>
|
||||
<el-dropdown
|
||||
v-perms="[
|
||||
'common:album:cateRename',
|
||||
'common:album:cateDel'
|
||||
]"
|
||||
v-if="data.id > 0"
|
||||
:hide-on-click="false"
|
||||
>
|
||||
<el-dropdown v-perms="[
|
||||
'common:album:cateRename',
|
||||
'common:album:cateDel'
|
||||
]" v-if="data.id > 0" :hide-on-click="false">
|
||||
<span class="muted m-r-10">···</span>
|
||||
<template #dropdown>
|
||||
<el-dropdown-menu>
|
||||
<popover-input
|
||||
v-perms="['common:album:cateRename']"
|
||||
@confirm="handleEditCate($event, data.id)"
|
||||
size="default"
|
||||
:value="data.name"
|
||||
width="400px"
|
||||
:limit="20"
|
||||
show-limit
|
||||
teleported
|
||||
>
|
||||
<popover-input v-perms="['common:album:cateRename']"
|
||||
@confirm="handleEditCate($event, data.id)" size="default"
|
||||
:value="data.name" width="400px" :limit="20" show-limit teleported>
|
||||
<div>
|
||||
<el-dropdown-item>
|
||||
命名分组
|
||||
</el-dropdown-item>
|
||||
</div>
|
||||
</popover-input>
|
||||
<div
|
||||
v-perms="['common:album:cateDel']"
|
||||
@click="handleDeleteCate(data.id)"
|
||||
>
|
||||
<div v-perms="['common:album:cateDel']" @click="handleDeleteCate(data.id)">
|
||||
<el-dropdown-item>删除分组</el-dropdown-item>
|
||||
</div>
|
||||
</el-dropdown-menu>
|
||||
@@ -67,15 +42,8 @@
|
||||
</div>
|
||||
|
||||
<div class="flex justify-center p-2 border-t border-br">
|
||||
<popover-input
|
||||
v-perms="['common:album:cateAdd']"
|
||||
@confirm="handleAddCate"
|
||||
size="default"
|
||||
width="400px"
|
||||
:limit="20"
|
||||
show-limit
|
||||
teleported
|
||||
>
|
||||
<popover-input v-perms="['common:album:cateAdd']" @confirm="handleAddCate" size="default" width="400px"
|
||||
:limit="20" show-limit teleported>
|
||||
<el-button> 添加分组 </el-button>
|
||||
</popover-input>
|
||||
</div>
|
||||
@@ -83,45 +51,21 @@
|
||||
<div class="material__center flex flex-col">
|
||||
<div class="operate-btn flex">
|
||||
<div class="flex-1 flex">
|
||||
<upload
|
||||
v-if="type == 'image'"
|
||||
v-perms="['common:upload:image']"
|
||||
class="mr-3"
|
||||
:data="{ cid: cateId }"
|
||||
:type="type"
|
||||
:show-progress="true"
|
||||
@change="refresh"
|
||||
>
|
||||
<upload v-if="type == 'image'" v-perms="['common:upload:image']" class="mr-3" :data="{ cid: cateId }"
|
||||
:type="type" :show-progress="true" @change="refresh">
|
||||
<el-button type="primary">本地上传</el-button>
|
||||
</upload>
|
||||
<upload
|
||||
v-if="type == 'video'"
|
||||
v-perms="['common:upload:video']"
|
||||
class="mr-3"
|
||||
:data="{ cid: cateId }"
|
||||
:type="type"
|
||||
:show-progress="true"
|
||||
@change="refresh"
|
||||
>
|
||||
<upload v-if="type == 'video'" v-perms="['common:upload:video']" class="mr-3" :data="{ cid: cateId }"
|
||||
:type="type" :show-progress="true" @change="refresh">
|
||||
<el-button type="primary">本地上传</el-button>
|
||||
</upload>
|
||||
<el-button
|
||||
v-perms="['common:album:albumDel']"
|
||||
v-if="mode == 'page'"
|
||||
:disabled="!select.length"
|
||||
@click.stop="batchFileDelete()"
|
||||
>
|
||||
<el-button v-perms="['common:album:albumDel']" v-if="mode == 'page'" :disabled="!select.length"
|
||||
@click.stop="batchFileDelete()">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
<popup
|
||||
v-perms="['common:album:albumMove']"
|
||||
v-if="mode == 'page'"
|
||||
class="ml-3"
|
||||
@confirm="batchFileMove"
|
||||
:disabled="!select.length"
|
||||
title="移动文件"
|
||||
>
|
||||
<popup v-perms="['common:album:albumMove']" v-if="mode == 'page'" class="ml-3" @confirm="batchFileMove"
|
||||
:disabled="!select.length" title="移动文件">
|
||||
<template #trigger>
|
||||
<el-button :disabled="!select.length">移动</el-button>
|
||||
</template>
|
||||
@@ -130,22 +74,13 @@
|
||||
<span class="mr-5">移动文件至</span>
|
||||
<el-select v-model="moveId" placeholder="请选择">
|
||||
<template v-for="item in cateLists" :key="item.id">
|
||||
<el-option
|
||||
v-if="item.id !== ''"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
></el-option>
|
||||
<el-option v-if="item.id !== ''" :label="item.name" :value="item.id"></el-option>
|
||||
</template>
|
||||
</el-select>
|
||||
</div>
|
||||
</popup>
|
||||
</div>
|
||||
<el-input
|
||||
class="w-60"
|
||||
placeholder="请输入名称"
|
||||
v-model="fileParams.name"
|
||||
@keyup.enter="refresh"
|
||||
>
|
||||
<el-input class="w-80" placeholder="请输入名称" v-model="fileParams.name" @keyup.enter="refresh">
|
||||
<template #append>
|
||||
<el-button @click="refresh">
|
||||
<template #icon>
|
||||
@@ -156,55 +91,33 @@
|
||||
</el-input>
|
||||
<div class="flex items-center ml-2">
|
||||
<el-tooltip content="列表视图" placement="top">
|
||||
<div
|
||||
class="list-icon"
|
||||
:class="{
|
||||
select: listShowType == 'table'
|
||||
}"
|
||||
@click="listShowType = 'table'"
|
||||
>
|
||||
<div class="list-icon" :class="{
|
||||
select: listShowType == 'table'
|
||||
}" @click="listShowType = 'table'">
|
||||
<icon name="local-icon-list-2" :size="18" />
|
||||
</div>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="平铺视图" placement="top">
|
||||
<div
|
||||
class="list-icon"
|
||||
:class="{
|
||||
select: listShowType == 'normal'
|
||||
}"
|
||||
@click="listShowType = 'normal'"
|
||||
>
|
||||
<div class="list-icon" :class="{
|
||||
select: listShowType == 'normal'
|
||||
}" @click="listShowType = 'normal'">
|
||||
<icon name="el-icon-Menu" :size="18" />
|
||||
</div>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-3" v-if="mode == 'page'">
|
||||
<el-checkbox
|
||||
:disabled="!pager.lists.length"
|
||||
v-model="isCheckAll"
|
||||
@change="selectAll"
|
||||
:indeterminate="isIndeterminate"
|
||||
>
|
||||
<el-checkbox :disabled="!pager.lists.length" v-model="isCheckAll" @change="selectAll"
|
||||
:indeterminate="isIndeterminate">
|
||||
当页全选
|
||||
</el-checkbox>
|
||||
</div>
|
||||
<div class="material-center__content flex flex-col flex-1 mb-1 min-h-0">
|
||||
<el-scrollbar v-if="pager.lists.length" v-show="listShowType == 'normal'">
|
||||
<ul class="file-list flex flex-wrap mt-4">
|
||||
<li
|
||||
class="file-item-wrap"
|
||||
v-for="item in pager.lists"
|
||||
:key="item.id"
|
||||
:style="{ width: fileSize }"
|
||||
>
|
||||
<li class="file-item-wrap" v-for="item in pager.lists" :key="item.id" :style="{ width: fileSize }">
|
||||
<del-wrap @close="batchFileDelete([item.id])">
|
||||
<file-item
|
||||
:uri="item.uri"
|
||||
:file-size="fileSize"
|
||||
:type="type"
|
||||
@click="selectFile(item)"
|
||||
>
|
||||
<file-item :uri="item.uri" :file-size="fileSize" :type="type" @click="selectFile(item)">
|
||||
<div class="item-selected" v-if="isSelect(item.id)">
|
||||
<icon :size="24" name="el-icon-Check" color="#fff" />
|
||||
</div>
|
||||
@@ -213,16 +126,9 @@
|
||||
|
||||
<overflow-tooltip class="mt-1" :content="item.name" />
|
||||
<div class="operation-btns flex items-center">
|
||||
<popover-input
|
||||
v-perms="['common:album:albumRename']"
|
||||
@confirm="handleFileRename($event, item.id)"
|
||||
size="default"
|
||||
:value="item.name"
|
||||
width="400px"
|
||||
:limit="50"
|
||||
show-limit
|
||||
teleported
|
||||
>
|
||||
<popover-input v-perms="['common:album:albumRename']"
|
||||
@confirm="handleFileRename($event, item.id)" size="default" :value="item.name"
|
||||
width="400px" :limit="50" show-limit teleported>
|
||||
<el-button type="primary" link> 重命名 </el-button>
|
||||
</popover-input>
|
||||
<el-button type="primary" link @click="handlePreview(item.uri)">
|
||||
@@ -233,16 +139,8 @@
|
||||
</ul>
|
||||
</el-scrollbar>
|
||||
|
||||
<el-table
|
||||
ref="tableRef"
|
||||
class="mt-4"
|
||||
v-show="listShowType == 'table'"
|
||||
:data="pager.lists"
|
||||
width="100%"
|
||||
height="100%"
|
||||
size="large"
|
||||
@row-click="selectFile"
|
||||
>
|
||||
<el-table ref="tableRef" class="mt-4" v-show="listShowType == 'table'" :data="pager.lists" width="100%"
|
||||
height="100%" size="large" @row-click="selectFile">
|
||||
<el-table-column width="55">
|
||||
<template #default="{ row }">
|
||||
<el-checkbox :modelValue="isSelect(row.id)" @change="selectFile(row)" />
|
||||
@@ -264,15 +162,8 @@
|
||||
<el-table-column label="操作" width="150" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<div class="inline-block" v-perms="['common:album:albumRename']">
|
||||
<popover-input
|
||||
@confirm="handleFileRename($event, row.id)"
|
||||
size="default"
|
||||
:value="row.name"
|
||||
width="400px"
|
||||
:limit="50"
|
||||
show-limit
|
||||
teleported
|
||||
>
|
||||
<popover-input @confirm="handleFileRename($event, row.id)" size="default" :value="row.name"
|
||||
width="400px" :limit="50" show-limit teleported>
|
||||
<el-button type="primary" link> 重命名 </el-button>
|
||||
</popover-input>
|
||||
</div>
|
||||
@@ -282,11 +173,7 @@
|
||||
</el-button>
|
||||
</div>
|
||||
<div class="inline-block" v-perms="['common:album:albumDel']">
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
@click.stop="batchFileDelete([row.id])"
|
||||
>
|
||||
<el-button type="primary" link @click.stop="batchFileDelete([row.id])">
|
||||
删除
|
||||
</el-button>
|
||||
</div>
|
||||
@@ -294,10 +181,7 @@
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<div
|
||||
class="flex flex-1 justify-center items-center"
|
||||
v-if="!pager.loading && !pager.lists.length"
|
||||
>
|
||||
<div class="flex flex-1 justify-center items-center" v-if="!pager.loading && !pager.lists.length">
|
||||
暂无数据~
|
||||
</div>
|
||||
</div>
|
||||
@@ -305,29 +189,17 @@
|
||||
<div class="flex">
|
||||
<template v-if="mode == 'page'">
|
||||
<span class="mr-3">
|
||||
<el-checkbox
|
||||
:disabled="!pager.lists.length"
|
||||
v-model="isCheckAll"
|
||||
@change="selectAll"
|
||||
:indeterminate="isIndeterminate"
|
||||
>
|
||||
<el-checkbox :disabled="!pager.lists.length" v-model="isCheckAll" @change="selectAll"
|
||||
:indeterminate="isIndeterminate">
|
||||
当页全选
|
||||
</el-checkbox>
|
||||
</span>
|
||||
<el-button
|
||||
v-perms="['common:album:albumDel']"
|
||||
:disabled="!select.length"
|
||||
@click="batchFileDelete()"
|
||||
>
|
||||
<el-button v-perms="['common:album:albumDel']" :disabled="!select.length"
|
||||
@click="batchFileDelete()">
|
||||
删除
|
||||
</el-button>
|
||||
<popup
|
||||
v-perms="['common:album:albumMove']"
|
||||
class="ml-3 inline"
|
||||
@confirm="batchFileMove"
|
||||
:disabled="!select.length"
|
||||
title="移动文件"
|
||||
>
|
||||
<popup v-perms="['common:album:albumMove']" class="ml-3 inline" @confirm="batchFileMove"
|
||||
:disabled="!select.length" title="移动文件">
|
||||
<template #trigger>
|
||||
<el-button :disabled="!select.length">移动</el-button>
|
||||
</template>
|
||||
@@ -336,22 +208,14 @@
|
||||
<span class="mr-5">移动文件至</span>
|
||||
<el-select v-model="moveId" placeholder="请选择">
|
||||
<template v-for="item in cateLists" :key="item.id">
|
||||
<el-option
|
||||
v-if="item.id !== ''"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
></el-option>
|
||||
<el-option v-if="item.id !== ''" :label="item.name" :value="item.id"></el-option>
|
||||
</template>
|
||||
</el-select>
|
||||
</div>
|
||||
</popup>
|
||||
</template>
|
||||
</div>
|
||||
<pagination
|
||||
v-model="pager"
|
||||
@change="getFileList"
|
||||
layout="total, prev, pager, next, jumper"
|
||||
/>
|
||||
<pagination v-model="pager" @change="getFileList" layout="total, prev, pager, next, jumper" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="material__right" v-if="mode == 'picker'">
|
||||
@@ -368,11 +232,7 @@
|
||||
<li class="mb-4" v-for="item in select" :key="item.id">
|
||||
<div class="select-item">
|
||||
<del-wrap @close="cancelSelete(item.id)">
|
||||
<file-item
|
||||
:uri="item.uri"
|
||||
file-size="100px"
|
||||
:type="type"
|
||||
></file-item>
|
||||
<file-item :uri="item.uri" file-size="100px" :type="type"></file-item>
|
||||
</del-wrap>
|
||||
</div>
|
||||
</li>
|
||||
@@ -519,31 +379,38 @@ defineExpose({
|
||||
<style scoped lang="scss">
|
||||
.material {
|
||||
@apply h-full min-h-0 flex flex-1;
|
||||
|
||||
&__left {
|
||||
@apply border-r border-br flex flex-col w-[200px];
|
||||
|
||||
:deep(.el-tree-node__content) {
|
||||
height: 36px;
|
||||
}
|
||||
}
|
||||
|
||||
&__center {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
min-height: 0;
|
||||
padding: 16px 16px 0;
|
||||
|
||||
.list-icon {
|
||||
border-radius: 3px;
|
||||
display: flex;
|
||||
padding: 5px;
|
||||
cursor: pointer;
|
||||
|
||||
&.select {
|
||||
@apply text-primary bg-primary-light-8;
|
||||
}
|
||||
}
|
||||
|
||||
.file-list {
|
||||
.file-item-wrap {
|
||||
margin-right: 16px;
|
||||
line-height: 1.3;
|
||||
cursor: pointer;
|
||||
|
||||
.item-selected {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -557,19 +424,23 @@ defineExpose({
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.operation-btns {
|
||||
height: 28px;
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
&:hover .operation-btns {
|
||||
visibility: visible;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__right {
|
||||
@apply border-l border-br flex flex-col;
|
||||
width: 130px;
|
||||
|
||||
.select-lists {
|
||||
padding: 10px;
|
||||
|
||||
|
||||
@@ -1,31 +1,18 @@
|
||||
<template>
|
||||
<div class="material-select">
|
||||
<popup
|
||||
ref="popupRef"
|
||||
width="830px"
|
||||
custom-class="body-padding"
|
||||
:title="`选择${tipsText}`"
|
||||
@confirm="handleConfirm"
|
||||
@close="handleClose"
|
||||
>
|
||||
<popup ref="popupRef" width="930px" custom-class="body-padding" :title="`选择${tipsText}`" @confirm="handleConfirm"
|
||||
@close="handleClose">
|
||||
<template v-if="!hiddenUpload" #trigger>
|
||||
<div class="material-select__trigger clearfix" @click.stop>
|
||||
<draggable class="draggable" v-model="fileList" animation="300" item-key="id">
|
||||
<template v-slot:item="{ element, index }">
|
||||
<div
|
||||
class="material-preview"
|
||||
:class="{
|
||||
'is-disabled': disabled,
|
||||
'is-one': limit == 1
|
||||
}"
|
||||
@click="showPopup(index)"
|
||||
>
|
||||
<div class="material-preview" :class="{
|
||||
'is-disabled': disabled,
|
||||
'is-one': limit == 1
|
||||
}" @click="showPopup(index)">
|
||||
<del-wrap @close="deleteImg(index)">
|
||||
<file-item
|
||||
:uri="excludeDomain ? getImageUrl(element) : element"
|
||||
:file-size="size"
|
||||
:type="type"
|
||||
></file-item>
|
||||
<file-item :uri="excludeDomain ? getImageUrl(element) : element" :file-size="size"
|
||||
:type="type"></file-item>
|
||||
</del-wrap>
|
||||
<div class="operation-btns text-xs text-center">
|
||||
<span>修改</span>
|
||||
@@ -35,24 +22,16 @@
|
||||
</div>
|
||||
</template>
|
||||
</draggable>
|
||||
<div
|
||||
class="material-upload"
|
||||
@click="showPopup(-1)"
|
||||
v-show="showUpload"
|
||||
:class="{
|
||||
'is-disabled': disabled,
|
||||
'is-one': limit == 1,
|
||||
[uploadClass]: true
|
||||
}"
|
||||
>
|
||||
<div class="material-upload" @click="showPopup(-1)" v-show="showUpload" :class="{
|
||||
'is-disabled': disabled,
|
||||
'is-one': limit == 1,
|
||||
[uploadClass]: true
|
||||
}">
|
||||
<slot name="upload">
|
||||
<div
|
||||
class="upload-btn"
|
||||
:style="{
|
||||
width: size,
|
||||
height: size
|
||||
}"
|
||||
>
|
||||
<div class="upload-btn" :style="{
|
||||
width: size,
|
||||
height: size
|
||||
}">
|
||||
<icon :size="25" name="el-icon-Plus" />
|
||||
<span>添加</span>
|
||||
</div>
|
||||
@@ -62,13 +41,8 @@
|
||||
</template>
|
||||
<el-scrollbar>
|
||||
<div class="material-wrap">
|
||||
<material
|
||||
ref="materialRef"
|
||||
:type="type"
|
||||
:file-size="fileSize"
|
||||
:limit="meterialLimit"
|
||||
@change="selectChange"
|
||||
/>
|
||||
<material ref="materialRef" :type="type" :file-size="fileSize" :limit="meterialLimit"
|
||||
@change="selectChange" />
|
||||
</div>
|
||||
</el-scrollbar>
|
||||
</popup>
|
||||
@@ -112,6 +86,11 @@ export default defineComponent({
|
||||
type: String,
|
||||
default: '100px'
|
||||
},
|
||||
// 文件尺寸
|
||||
filePath: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
// 选择数量限制
|
||||
limit: {
|
||||
type: Number,
|
||||
@@ -199,6 +178,7 @@ export default defineComponent({
|
||||
|
||||
const selectChange = (val: any[]) => {
|
||||
select.value = val
|
||||
|
||||
}
|
||||
const handleChange = () => {
|
||||
const valueImg = limit.value != 1 ? fileList.value : fileList.value[0] || ''
|
||||
@@ -258,6 +238,7 @@ export default defineComponent({
|
||||
|
||||
<style scoped lang="scss">
|
||||
.material-select {
|
||||
|
||||
.material-upload,
|
||||
.material-preview {
|
||||
position: relative;
|
||||
@@ -267,17 +248,21 @@ export default defineComponent({
|
||||
margin-bottom: 8px;
|
||||
box-sizing: border-box;
|
||||
float: left;
|
||||
|
||||
&.is-disabled {
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
&.is-one {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
.operation-btns {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
.operation-btns {
|
||||
display: none;
|
||||
position: absolute;
|
||||
@@ -289,12 +274,14 @@ export default defineComponent({
|
||||
background-color: rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
}
|
||||
|
||||
.material-upload {
|
||||
:deep(.upload-btn) {
|
||||
@apply text-tx-secondary box-border rounded border-br border-dashed border flex flex-col justify-center items-center;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.material-wrap {
|
||||
min-width: 720px;
|
||||
height: 430px;
|
||||
|
||||
@@ -19,7 +19,8 @@ export function usePaging(options: Options) {
|
||||
size,
|
||||
loading: firstLoading,
|
||||
count: 0,
|
||||
lists: [] as any[]
|
||||
lists: [] as any[],
|
||||
extend: {} as Record<string, any>
|
||||
})
|
||||
// 请求分页接口
|
||||
const getLists = () => {
|
||||
|
||||
@@ -87,6 +87,8 @@ export function findFirstValidRoute(routes: RouteRecordRaw[]): string | undefine
|
||||
//通过权限字符查询路由路径
|
||||
export function getRoutePath(perms: string) {
|
||||
const routerObj = useRouter() || router
|
||||
console.log(routerObj);
|
||||
|
||||
return routerObj.getRoutes().find((item) => item.meta?.perms == perms)?.path || ''
|
||||
}
|
||||
|
||||
|
||||
49
admin/src/views/app/recharge/index.vue
Normal file
49
admin/src/views/app/recharge/index.vue
Normal file
@@ -0,0 +1,49 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-card shadow="never" class="!border-none">
|
||||
<template #header>
|
||||
<span class="font-extrabold text-lg">充值设置</span>
|
||||
</template>
|
||||
<el-form :model="formData" label-width="120px">
|
||||
<el-form-item label="状态">
|
||||
<div>
|
||||
<el-radio-group v-model="formData.status" class="ml-4">
|
||||
<el-radio :label="1">开启</el-radio>
|
||||
<el-radio :label="0">关闭</el-radio>
|
||||
</el-radio-group>
|
||||
<div class="form-tips">关闭或开启充值功能,关闭后将不显示充值入口</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="最低充值金额">
|
||||
<div>
|
||||
<el-input v-model.number="formData.min_amount" type="number" min="1" placeholder="请输入最低充值金额"
|
||||
clearable />
|
||||
<div class="form-tips">
|
||||
最低充值金额要求,不填或填0表示不限制最低充值金额
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<footer-btns v-perms="['setting:recharge:set']">
|
||||
<el-button type="primary" @click="handleSubmit">保存</el-button>
|
||||
</footer-btns>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { getRechargeConfig, setRechargeConfig } from '@/api/app/recharge'
|
||||
const formData = reactive({
|
||||
status: 1, //功能状态 1-开启 0-关闭
|
||||
min_amount: 1 //最低充值金额
|
||||
})
|
||||
|
||||
const getConfig = async () => {
|
||||
const data = await getRechargeConfig()
|
||||
Object.assign(formData, data)
|
||||
}
|
||||
const handleSubmit = async () => {
|
||||
await setRechargeConfig(formData)
|
||||
getConfig()
|
||||
}
|
||||
getConfig()
|
||||
</script>
|
||||
@@ -1,10 +1,10 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-card class="!border-none" shadow="never">
|
||||
<el-alert type="warning" title="温馨提示:H5商城设置" :closable="false" show-icon />
|
||||
<el-alert type="warning" title="温馨提示:H5设置" :closable="false" show-icon />
|
||||
</el-card>
|
||||
<el-card class="!border-none mt-4" shadow="never">
|
||||
<el-form ref="formRef" :model="formData" label-width="160px">
|
||||
<el-form ref="formRef" :model="formData" label-width="120px">
|
||||
<el-form-item label="渠道状态" required prop="status">
|
||||
<div>
|
||||
<el-radio-group v-model="formData.status">
|
||||
@@ -14,33 +14,38 @@
|
||||
<div class="form-tips">状态为关闭时,将不对外提供服务,请谨慎操作</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="关闭后访问页面" prop="close">
|
||||
<el-radio-group v-model="formData.close">
|
||||
<el-form-item label="关闭后访问页面" prop="page_status">
|
||||
<el-radio-group v-model="formData.page_status">
|
||||
<el-radio :label="0">空页面</el-radio>
|
||||
<el-radio :label="1">自定义链接</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="" prop="url" v-if="formData.close == 1">
|
||||
<el-form-item label="" prop="page_url" v-if="formData.page_status == 1">
|
||||
<div class="w-80">
|
||||
<el-input v-model="formData.url" placeholder="请输入完整的url" />
|
||||
<el-input v-model="formData.page_url" placeholder="请输入完整的url" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="访问链接">
|
||||
<div class="flex-1 min-w-0 break-words">
|
||||
{{ formData.url }}
|
||||
<el-button v-copy="formData.url">复制</el-button>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<footer-btns v-perms="['channel:h5:save']">
|
||||
<footer-btns v-perms="['channel.web_page_setting/setConfig']">
|
||||
<el-button type="primary" @click="handelSave">保存</el-button>
|
||||
</footer-btns>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup name="h5Config">
|
||||
import { getH5Config, setH5Config } from '@/api/channel/h5'
|
||||
import feedback from '@/utils/feedback'
|
||||
|
||||
const formData = reactive({
|
||||
status: 0,
|
||||
close: 0,
|
||||
url: '',
|
||||
accessLink: ''
|
||||
page_status: 0,
|
||||
page_url: '',
|
||||
url: ''
|
||||
})
|
||||
|
||||
const getDetail = async () => {
|
||||
@@ -54,7 +59,6 @@ const getDetail = async () => {
|
||||
const handelSave = async () => {
|
||||
await setH5Config(formData)
|
||||
getDetail()
|
||||
feedback.msgSuccess('操作成功')
|
||||
}
|
||||
|
||||
getDetail()
|
||||
|
||||
75
admin/src/views/channel/open_setting.vue
Normal file
75
admin/src/views/channel/open_setting.vue
Normal file
@@ -0,0 +1,75 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-card class="!border-none" shadow="never">
|
||||
<el-alert
|
||||
type="warning"
|
||||
title="温馨提示:填写微信开放平台开发配置,请前往微信开放平台创建应用并完成认证;网站应用配置主要用于网站微信登录和微信支付"
|
||||
:closable="false"
|
||||
show-icon
|
||||
/>
|
||||
</el-card>
|
||||
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="160px">
|
||||
<el-card class="!border-none mt-4" shadow="never">
|
||||
<div class="font-medium mb-7">网站应用</div>
|
||||
<el-form-item label="AppID" prop="app_id">
|
||||
<div class="w-80">
|
||||
<el-input v-model="formData.app_id" placeholder="请输入AppID" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="AppSecret" prop="app_secret">
|
||||
<div>
|
||||
<div class="w-80">
|
||||
<el-input v-model="formData.app_secret" placeholder="请输入AppSecret" />
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-card>
|
||||
</el-form>
|
||||
<footer-btns v-perms="['channel.open_setting/setConfig']">
|
||||
<el-button type="primary" @click="handelSave">保存</el-button>
|
||||
</footer-btns>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup name="wxDevConfig">
|
||||
import { getOpenSettingConfig, setOpenSettingConfig } from '@/api/channel/open_setting'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
|
||||
const formData = reactive({
|
||||
app_id: '',
|
||||
app_secret: ''
|
||||
})
|
||||
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const formRules = {
|
||||
app_id: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入AppID',
|
||||
trigger: ['blur', 'change']
|
||||
}
|
||||
],
|
||||
app_secret: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入AppSecret',
|
||||
trigger: ['blur', 'change']
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
const getDetail = async () => {
|
||||
const data = await getOpenSettingConfig()
|
||||
for (const key in formData) {
|
||||
//@ts-ignore
|
||||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
|
||||
const handelSave = async () => {
|
||||
await formRef.value?.validate()
|
||||
await setOpenSettingConfig(formData)
|
||||
getDetail()
|
||||
}
|
||||
|
||||
getDetail()
|
||||
</script>
|
||||
@@ -8,7 +8,12 @@
|
||||
show-icon
|
||||
/>
|
||||
</el-card>
|
||||
<el-form ref="formRef" :model="formData" label-width="160px">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
:label-width="appStore.isMobile ? '80px' : '160px'"
|
||||
>
|
||||
<el-card class="!border-none mt-4" shadow="never">
|
||||
<div class="font-medium mb-7">微信小程序</div>
|
||||
<el-form-item label="小程序名称" prop="name">
|
||||
@@ -16,15 +21,15 @@
|
||||
<el-input v-model="formData.name" placeholder="请输入小程序名称" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="原始ID" prop="primaryId">
|
||||
<el-form-item label="原始ID" prop="original_id">
|
||||
<div class="w-80">
|
||||
<el-input v-model="formData.primaryId" placeholder="请输入原始ID" />
|
||||
<el-input v-model="formData.original_id" placeholder="请输入原始ID" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="小程序码" prop="qrCode">
|
||||
<div>
|
||||
<el-form-item label="小程序码" prop="qr_code">
|
||||
<div class="flex-1">
|
||||
<div>
|
||||
<material-picker v-model="formData.qrCode" :limit="1" />
|
||||
<material-picker v-model="formData.qr_code" :limit="1" />
|
||||
</div>
|
||||
<div class="form-tips">建议尺寸:宽400px*高400px。jpg,jpeg,png格式</div>
|
||||
</div>
|
||||
@@ -32,16 +37,14 @@
|
||||
</el-card>
|
||||
<el-card class="!border-none mt-4" shadow="never">
|
||||
<div class="font-medium mb-7">开发者ID</div>
|
||||
<el-form-item label="AppID" prop="appId">
|
||||
<el-form-item label="AppID" prop="app_id">
|
||||
<div class="w-80">
|
||||
<el-input v-model="formData.appId" placeholder="请输入AppID" />
|
||||
<el-input v-model="formData.app_id" placeholder="请输入AppID" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="AppSecret" prop="appSecret">
|
||||
<div>
|
||||
<div class="w-80">
|
||||
<el-input v-model="formData.appSecret" placeholder="请输入AppSecret" />
|
||||
</div>
|
||||
<el-form-item label="AppSecret" prop="app_secret">
|
||||
<div class="w-80">
|
||||
<el-input v-model="formData.app_secret" placeholder="请输入AppSecret" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
@@ -53,12 +56,12 @@
|
||||
<el-card class="!border-none mt-4" shadow="never">
|
||||
<div class="font-medium mb-7">服务器域名</div>
|
||||
<el-form-item label="request合法域名" prop="appId">
|
||||
<div>
|
||||
<div class="flex">
|
||||
<div class="mr-4 w-80">
|
||||
<el-input v-model="formData.requestDomain" disabled />
|
||||
<div class="flex-1 min-w-0">
|
||||
<div class="sm:flex">
|
||||
<div class="mr-4 sm:w-80 flex">
|
||||
<el-input v-model="formData.request_domain" disabled />
|
||||
</div>
|
||||
<el-button v-copy="formData.requestDomain">复制</el-button>
|
||||
<el-button v-copy="formData.request_domain">复制</el-button>
|
||||
</div>
|
||||
<div class="form-tips">
|
||||
小程序账号登录微信公众平台,点击开发>开发设置->服务器域名,填写https协议域名
|
||||
@@ -66,12 +69,12 @@
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="socket合法域名">
|
||||
<div>
|
||||
<div class="flex">
|
||||
<div class="mr-4 w-80">
|
||||
<el-input v-model="formData.socketDomain" disabled />
|
||||
<div class="flex-1 min-w-0">
|
||||
<div class="sm:flex">
|
||||
<div class="mr-4 sm:w-80 flex">
|
||||
<el-input v-model="formData.socket_domain" disabled />
|
||||
</div>
|
||||
<el-button v-copy="formData.socketDomain">复制</el-button>
|
||||
<el-button v-copy="formData.socket_domain">复制</el-button>
|
||||
</div>
|
||||
<div class="form-tips">
|
||||
小程序账号登录微信公众平台,点击开发>开发设置->服务器域名,填写wss协议域名
|
||||
@@ -79,12 +82,12 @@
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="uploadFile合法域名">
|
||||
<div>
|
||||
<div class="flex">
|
||||
<div class="mr-4 w-80">
|
||||
<el-input v-model="formData.uploadFileDomain" disabled />
|
||||
<div class="flex-1 min-w-0">
|
||||
<div class="sm:flex">
|
||||
<div class="mr-4 sm:w-80 flex">
|
||||
<el-input v-model="formData.upload_file_domain" disabled />
|
||||
</div>
|
||||
<el-button v-copy="formData.uploadFileDomain">复制</el-button>
|
||||
<el-button v-copy="formData.upload_file_domain">复制</el-button>
|
||||
</div>
|
||||
<div class="form-tips">
|
||||
小程序账号登录微信公众平台,点击开发>开发设置->服务器域名,填写https协议域名
|
||||
@@ -92,12 +95,12 @@
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="downloadFile合法域名">
|
||||
<div>
|
||||
<div class="flex">
|
||||
<div class="mr-4 w-80">
|
||||
<el-input v-model="formData.downloadFileDomain" disabled />
|
||||
<div class="flex-1 min-w-0">
|
||||
<div class="sm:flex">
|
||||
<div class="mr-4 sm:w-80 flex">
|
||||
<el-input v-model="formData.download_file_domain" disabled />
|
||||
</div>
|
||||
<el-button v-copy="formData.downloadFileDomain">复制</el-button>
|
||||
<el-button v-copy="formData.download_file_domain">复制</el-button>
|
||||
</div>
|
||||
<div class="form-tips">
|
||||
小程序账号登录微信公众平台,点击开发>开发设置->服务器域名,填写https协议域名
|
||||
@@ -105,12 +108,12 @@
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="udp合法域名">
|
||||
<div>
|
||||
<div class="flex">
|
||||
<div class="mr-4 w-80">
|
||||
<el-input v-model="formData.udpDomain" disabled />
|
||||
<div class="flex-1 min-w-0">
|
||||
<div class="sm:flex">
|
||||
<div class="mr-4 sm:w-80 flex">
|
||||
<el-input v-model="formData.udp_domain" disabled />
|
||||
</div>
|
||||
<el-button v-copy="formData.udpDomain">复制</el-button>
|
||||
<el-button v-copy="formData.udp_domain">复制</el-button>
|
||||
</div>
|
||||
<div class="form-tips">
|
||||
小程序账号登录微信公众平台,点击开发>开发设置->服务器域名,填写udp协议域名
|
||||
@@ -121,12 +124,12 @@
|
||||
<el-card class="!border-none mt-4" shadow="never">
|
||||
<div class="font-medium mb-7">业务域名</div>
|
||||
<el-form-item label="业务域名">
|
||||
<div>
|
||||
<div class="flex">
|
||||
<div class="mr-4 w-80">
|
||||
<el-input v-model="formData.businessDomain" disabled />
|
||||
<div class="flex-1 min-w-0">
|
||||
<div class="sm:flex">
|
||||
<div class="mr-4 sm:w-80 flex">
|
||||
<el-input v-model="formData.business_domain" disabled />
|
||||
</div>
|
||||
<el-button v-copy="formData.businessDomain">复制</el-button>
|
||||
<el-button v-copy="formData.business_domain">复制</el-button>
|
||||
</div>
|
||||
<div class="form-tips">
|
||||
小程序账号登录微信公众平台,点击开发>开发设置->业务域名,填写业务域名
|
||||
@@ -135,30 +138,48 @@
|
||||
</el-form-item>
|
||||
</el-card>
|
||||
</el-form>
|
||||
<footer-btns v-perms="['channel:mp:save']">
|
||||
<footer-btns v-perms="['channel.mnp_settings/setConfig']">
|
||||
<el-button type="primary" @click="handelSave">保存</el-button>
|
||||
</footer-btns>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup name="weappConfig">
|
||||
import { getWeappConfig, setWeappConfig } from '@/api/channel/weapp'
|
||||
import feedback from '@/utils/feedback'
|
||||
import useAppStore from '@/stores/modules/app'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
|
||||
const appStore = useAppStore()
|
||||
const formData = reactive({
|
||||
name: '',
|
||||
primaryId: '',
|
||||
qrCode: '',
|
||||
appId: '',
|
||||
appSecret: '',
|
||||
businessDomain: '',
|
||||
downloadFileDomain: '',
|
||||
requestDomain: '',
|
||||
socketDomain: '',
|
||||
original_id: '',
|
||||
qr_code: '',
|
||||
app_id: '',
|
||||
app_secret: '',
|
||||
business_domain: '',
|
||||
download_file_domain: '',
|
||||
request_domain: '',
|
||||
socket_domain: '',
|
||||
tcpDomain: '',
|
||||
udpDomain: '',
|
||||
uploadFileDomain: ''
|
||||
udp_domain: '',
|
||||
upload_file_domain: ''
|
||||
})
|
||||
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const formRules = {
|
||||
app_id: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入AppID',
|
||||
trigger: ['blur', 'change']
|
||||
}
|
||||
],
|
||||
app_secret: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入AppSecret',
|
||||
trigger: ['blur', 'change']
|
||||
}
|
||||
]
|
||||
}
|
||||
const getDetail = async () => {
|
||||
const data = await getWeappConfig()
|
||||
for (const key in formData) {
|
||||
@@ -168,9 +189,9 @@ const getDetail = async () => {
|
||||
}
|
||||
|
||||
const handelSave = async () => {
|
||||
await formRef.value?.validate()
|
||||
await setWeappConfig(formData)
|
||||
getDetail()
|
||||
feedback.msgSuccess('操作成功')
|
||||
}
|
||||
|
||||
getDetail()
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-card class="!border-none" shadow="never">
|
||||
<el-alert
|
||||
type="warning"
|
||||
title="温馨提示:填写微信开放平台开发配置,请前往微信开放平台创建应用并完成认证;APP应用配置主要用于APP微信登录和微信支付"
|
||||
:closable="false"
|
||||
show-icon
|
||||
/>
|
||||
</el-card>
|
||||
<el-form ref="formRef" :model="formData" label-width="160px">
|
||||
<el-card class="!border-none mt-4" shadow="never">
|
||||
<div class="font-medium mb-7">APP应用</div>
|
||||
<el-form-item label="AppID" prop="appId">
|
||||
<div class="w-80">
|
||||
<el-input v-model="formData.appId" placeholder="请输入AppID" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="AppSecret" prop="appSecret">
|
||||
<div>
|
||||
<div class="w-80">
|
||||
<el-input v-model="formData.appSecret" placeholder="请输入AppSecret" />
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<div class="form-tips">
|
||||
小程序账号登录微信公众平台,点击开发>开发设置->开发者ID,设置AppID和AppSecret
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-card>
|
||||
</el-form>
|
||||
<footer-btns v-perms="['channel:wx:save']">
|
||||
<el-button type="primary" @click="handelSave">保存</el-button>
|
||||
</footer-btns>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup name="wxDevConfig">
|
||||
import { getWxDevConfig, setWxDevConfig } from '@/api/channel/wx_dev'
|
||||
import feedback from '@/utils/feedback'
|
||||
|
||||
const formData = reactive({
|
||||
appId: '',
|
||||
appSecret: ''
|
||||
})
|
||||
|
||||
const getDetail = async () => {
|
||||
const data = await getWxDevConfig()
|
||||
for (const key in formData) {
|
||||
//@ts-ignore
|
||||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
|
||||
const handelSave = async () => {
|
||||
await setWxDevConfig(formData)
|
||||
getDetail()
|
||||
feedback.msgSuccess('操作成功')
|
||||
}
|
||||
|
||||
getDetail()
|
||||
</script>
|
||||
@@ -8,7 +8,12 @@
|
||||
show-icon
|
||||
/>
|
||||
</el-card>
|
||||
<el-form ref="formRef" :model="formData" label-width="160px">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
:label-width="appStore.isMobile ? '80px' : '160px'"
|
||||
>
|
||||
<el-card class="!border-none mt-4" shadow="never">
|
||||
<div class="font-medium mb-7">微信公众号</div>
|
||||
<el-form-item label="公众号名称" prop="name">
|
||||
@@ -16,15 +21,15 @@
|
||||
<el-input v-model="formData.name" placeholder="请输入公众号名称" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="原始ID" prop="primaryId">
|
||||
<el-form-item label="原始ID" prop="original_id">
|
||||
<div class="w-80">
|
||||
<el-input v-model="formData.primaryId" placeholder="请输入原始ID" />
|
||||
<el-input v-model="formData.original_id" placeholder="请输入原始ID" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="公众号二维码" prop="qrCode">
|
||||
<el-form-item label="公众号二维码" prop="qr_code">
|
||||
<div>
|
||||
<div>
|
||||
<material-picker v-model="formData.qrCode" :limit="1" />
|
||||
<material-picker v-model="formData.qr_code" :limit="1" />
|
||||
</div>
|
||||
<div class="form-tips">建议尺寸:宽400px*高400px。jpg,jpeg,png格式</div>
|
||||
</div>
|
||||
@@ -32,16 +37,14 @@
|
||||
</el-card>
|
||||
<el-card class="!border-none mt-4" shadow="never">
|
||||
<div class="font-medium mb-7">公众号开发者信息</div>
|
||||
<el-form-item label="AppID" prop="appId">
|
||||
<el-form-item label="AppID" prop="app_id">
|
||||
<div class="w-80">
|
||||
<el-input v-model="formData.appId" placeholder="请输入AppID" />
|
||||
<el-input v-model="formData.app_id" placeholder="请输入AppID" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="AppSecret" prop="appSecret">
|
||||
<div>
|
||||
<div class="w-80">
|
||||
<el-input v-model="formData.appSecret" placeholder="请输入AppSecret" />
|
||||
</div>
|
||||
<el-form-item label="AppSecret" prop="app_secret">
|
||||
<div class="w-80">
|
||||
<el-input v-model="formData.app_secret" placeholder="请输入AppSecret" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
@@ -53,9 +56,9 @@
|
||||
<el-card class="!border-none mt-4" shadow="never">
|
||||
<div class="font-medium mb-7">服务器配置</div>
|
||||
<el-form-item label="URL">
|
||||
<div>
|
||||
<div class="flex">
|
||||
<div class="mr-4 w-80">
|
||||
<div class="flex-1 min-w-0">
|
||||
<div class="sm:flex">
|
||||
<div class="mr-4 sm:w-80 flex">
|
||||
<el-input v-model="formData.url" disabled />
|
||||
</div>
|
||||
<el-button v-copy="formData.url">复制</el-button>
|
||||
@@ -66,7 +69,7 @@
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="Token" prop="Token">
|
||||
<div>
|
||||
<div class="flex-1 min-w-0">
|
||||
<div class="w-80">
|
||||
<el-input v-model="formData.token" placeholder="请输入Token" />
|
||||
</div>
|
||||
@@ -75,11 +78,11 @@
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="EncodingAESKey" prop="EncodingAESKey">
|
||||
<div>
|
||||
<el-form-item label="EncodingAESKey" prop="encoding_aes_key">
|
||||
<div class="flex-1 min-w-0">
|
||||
<div class="w-80">
|
||||
<el-input
|
||||
v-model="formData.encodingAesKey"
|
||||
v-model="formData.encoding_aes_key"
|
||||
placeholder="请输入EncodingAESKey"
|
||||
/>
|
||||
</div>
|
||||
@@ -88,11 +91,11 @@
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="消息加密方式" required prop="status">
|
||||
<div>
|
||||
<el-form-item label="消息加密方式" required prop="encryption_type">
|
||||
<div class="flex-1 min-w-0">
|
||||
<el-radio-group
|
||||
class="flex-col !items-start"
|
||||
v-model="formData.encryptionType"
|
||||
class="flex-col !items-start min-w-0"
|
||||
v-model="formData.encryption_type"
|
||||
>
|
||||
<el-radio :label="1">
|
||||
明文模式 (不使用消息体加解密功能,安全系数较低)
|
||||
@@ -111,12 +114,12 @@
|
||||
<el-card class="!border-none mt-4" shadow="never">
|
||||
<div class="font-medium mb-7">功能设置</div>
|
||||
<el-form-item label="业务域名">
|
||||
<div>
|
||||
<div class="flex">
|
||||
<div class="mr-4 w-80">
|
||||
<el-input v-model="formData.businessDomain" disabled />
|
||||
<div class="flex-1 min-w-0">
|
||||
<div class="sm:flex">
|
||||
<div class="mr-4 sm:w-80 flex">
|
||||
<el-input v-model="formData.business_domain" disabled />
|
||||
</div>
|
||||
<el-button v-copy="formData.businessDomain">复制</el-button>
|
||||
<el-button v-copy="formData.business_domain">复制</el-button>
|
||||
</div>
|
||||
<div class="form-tips">
|
||||
登录微信公众平台,点击设置>公众号设置>功能设置,填写业务域名
|
||||
@@ -124,12 +127,12 @@
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="JS接口安全域名">
|
||||
<div>
|
||||
<div class="flex">
|
||||
<div class="mr-4 w-80">
|
||||
<el-input v-model="formData.jsDomain" disabled />
|
||||
<div class="flex-1 min-w-0">
|
||||
<div class="sm:flex">
|
||||
<div class="mr-4 sm:w-80 flex">
|
||||
<el-input v-model="formData.js_secure_domain" disabled />
|
||||
</div>
|
||||
<el-button v-copy="formData.jsDomain">复制</el-button>
|
||||
<el-button v-copy="formData.js_secure_domain">复制</el-button>
|
||||
</div>
|
||||
<div class="form-tips">
|
||||
登录微信公众平台,点击设置>公众号设置>功能设置,填写JS接口安全域名
|
||||
@@ -137,12 +140,12 @@
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="网页授权域名">
|
||||
<div>
|
||||
<div class="flex">
|
||||
<div class="mr-4 w-80">
|
||||
<el-input v-model="formData.webDomain" disabled />
|
||||
<div class="flex-1 min-w-0">
|
||||
<div class="sm:flex">
|
||||
<div class="mr-4 sm:w-80 flex">
|
||||
<el-input v-model="formData.web_auth_domain" disabled />
|
||||
</div>
|
||||
<el-button v-copy="formData.webDomain">复制</el-button>
|
||||
<el-button v-copy="formData.web_auth_domain">复制</el-button>
|
||||
</div>
|
||||
<div class="form-tips">
|
||||
登录微信公众平台,点击设置>公众号设置>功能设置,填写网页授权域名
|
||||
@@ -151,32 +154,49 @@
|
||||
</el-form-item>
|
||||
</el-card>
|
||||
</el-form>
|
||||
<footer-btns v-perms="['channel:h5:save']">
|
||||
<footer-btns v-perms="['channel.official_account_setting/setConfig']">
|
||||
<el-button type="primary" @click="handelSave">保存</el-button>
|
||||
</footer-btns>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup name="wxOaConfig">
|
||||
import { getOaConfig, setOaConfig } from '@/api/channel/wx_oa'
|
||||
import feedback from '@/utils/feedback'
|
||||
import { useClipboard } from '@vueuse/core'
|
||||
|
||||
import useAppStore from '@/stores/modules/app'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
const appStore = useAppStore()
|
||||
const formData = reactive({
|
||||
name: '',
|
||||
primaryId: ' ',
|
||||
qrCode: '',
|
||||
appId: '',
|
||||
appSecret: '',
|
||||
original_id: ' ',
|
||||
qr_code: '',
|
||||
app_id: '',
|
||||
app_secret: '',
|
||||
url: '',
|
||||
token: '',
|
||||
encodingAesKey: '',
|
||||
encryptionType: 1,
|
||||
businessDomain: '',
|
||||
jsDomain: '',
|
||||
webDomain: ''
|
||||
encoding_aes_key: '',
|
||||
encryption_type: 1,
|
||||
business_domain: '',
|
||||
js_secure_domain: '',
|
||||
web_auth_domain: ''
|
||||
})
|
||||
|
||||
const { copy } = useClipboard()
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const formRules = {
|
||||
app_id: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入AppID',
|
||||
trigger: ['blur', 'change']
|
||||
}
|
||||
],
|
||||
app_secret: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入AppSecret',
|
||||
trigger: ['blur', 'change']
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
const getDetail = async () => {
|
||||
const data = await getOaConfig()
|
||||
for (const key in formData) {
|
||||
@@ -186,9 +206,9 @@ const getDetail = async () => {
|
||||
}
|
||||
|
||||
const handelSave = async () => {
|
||||
await formRef.value?.validate()
|
||||
await setOaConfig(formData)
|
||||
getDetail()
|
||||
feedback.msgSuccess('操作成功')
|
||||
}
|
||||
|
||||
getDetail()
|
||||
|
||||
@@ -19,12 +19,14 @@ getOaMenuFunc()
|
||||
</el-card>
|
||||
|
||||
<el-card class="!border-none mt-4" shadow="never">
|
||||
<div class="flex flex-1">
|
||||
<div class="lg:flex flex-1">
|
||||
<!-- Phone -->
|
||||
<oa-phone></oa-phone>
|
||||
|
||||
<!-- Attr -->
|
||||
<oa-attr></oa-attr>
|
||||
<div class="mt-4 lg:mt-0 max-w-[400px]">
|
||||
<oa-attr></oa-attr>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
|
||||
@@ -18,27 +18,27 @@ const {
|
||||
<template>
|
||||
<!-- Attr -->
|
||||
<template v-for="(attrItem, attrIndex) in menuList" :key="attrIndex">
|
||||
<div class="flex-1 oa-attr" v-show="attrIndex === menuIndex">
|
||||
<div class="flex-1 oa-attr min-w-0" v-show="attrIndex === menuIndex">
|
||||
<div class="text-base oa-attr-title">菜单配置</div>
|
||||
|
||||
<del-wrap class="w-3/4" @close="handleDelMenu(menuIndex)">
|
||||
<del-wrap @close="handleDelMenu(menuIndex)">
|
||||
<div class="flex items-center w-full p-4 mt-4 rounded bg-fill-light">
|
||||
<oa-menu-form
|
||||
ref="menuRef"
|
||||
modular="master"
|
||||
v-model:name="attrItem.name"
|
||||
v-model:menuType="attrItem.menuType"
|
||||
v-model:visitType="attrItem.visitType"
|
||||
v-model:menuType="attrItem.has_menu"
|
||||
v-model:visitType="attrItem.type"
|
||||
v-model:url="attrItem.url"
|
||||
v-model:appId="attrItem.appId"
|
||||
v-model:pagePath="attrItem.pagePath"
|
||||
v-model:appId="attrItem.appid"
|
||||
v-model:pagePath="attrItem.pagepath"
|
||||
>
|
||||
<div class="flex-1">
|
||||
<!-- 编辑子菜单 -->
|
||||
<ul>
|
||||
<li
|
||||
class="flex"
|
||||
v-for="(subItem, subIndex) in attrItem.subButtons"
|
||||
v-for="(subItem, subIndex) in attrItem.sub_button"
|
||||
:key="subIndex"
|
||||
style="padding: 8px"
|
||||
>
|
||||
@@ -49,14 +49,18 @@ const {
|
||||
:subItem="subItem"
|
||||
@edit="handleEditSubMenu($event, subIndex)"
|
||||
>
|
||||
<el-icon><EditPen /></el-icon>
|
||||
<el-button link>
|
||||
<el-icon><EditPen /></el-icon>
|
||||
</el-button>
|
||||
</oa-menu-form-edit>
|
||||
|
||||
<!-- 删除子菜单 -->
|
||||
<popup @confirm="handleDelSubMenu(menuIndex, subIndex)">
|
||||
是否删除当前子菜单?
|
||||
<template #trigger>
|
||||
<el-icon class="ml-5"><Delete /></el-icon>
|
||||
<el-button link>
|
||||
<el-icon class="ml-5"><Delete /></el-icon>
|
||||
</el-button>
|
||||
</template>
|
||||
</popup>
|
||||
</li>
|
||||
@@ -67,9 +71,10 @@ const {
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
:disabled="attrItem.subButtons.length >= 5"
|
||||
>添加子菜单({{ attrItem.subButtons.length }}/5)</el-button
|
||||
:disabled="attrItem.sub_button.length >= 5"
|
||||
>
|
||||
添加子菜单({{ attrItem.sub_button.length }}/5)
|
||||
</el-button>
|
||||
</oa-menu-form-edit>
|
||||
</div>
|
||||
</oa-menu-form>
|
||||
|
||||
@@ -22,10 +22,10 @@ const menuFromPopupRef = shallowRef()
|
||||
|
||||
const form = {
|
||||
name: '',
|
||||
visitType: 'view',
|
||||
type: 'view',
|
||||
url: '',
|
||||
appId: '',
|
||||
pagePath: ''
|
||||
appid: '',
|
||||
pagepath: ''
|
||||
}
|
||||
|
||||
watchEffect(() => {
|
||||
@@ -61,10 +61,10 @@ const handleRules = async () => {
|
||||
ref="menuFormEditRef"
|
||||
modular="secondary"
|
||||
v-model:name="form.name"
|
||||
v-model:visitType="form.visitType"
|
||||
v-model:visitType="form.type"
|
||||
v-model:url="form.url"
|
||||
v-model:appId="form.appId"
|
||||
v-model:pagePath="form.pagePath"
|
||||
v-model:appId="form.appid"
|
||||
v-model:pagePath="form.pagepath"
|
||||
></oa-menu-form>
|
||||
<template #trigger>
|
||||
<slot></slot>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<el-form ref="menuFormRef" :rules="rules" :model="menuForm" label-width="120px" class="pr-10">
|
||||
<el-form ref="menuFormRef" :rules="rules" :model="menuForm" label-width="100px">
|
||||
<!-- 菜单名称 -->
|
||||
<el-form-item :label="modular === 'master' ? '主菜单名称' : '子菜单名称'" prop="name">
|
||||
<el-input v-model="menuForm.name" />
|
||||
@@ -8,15 +8,15 @@
|
||||
<!-- 菜单类型 -->
|
||||
<el-form-item label="主菜单类型" prop="menuType" v-if="modular === 'master'">
|
||||
<el-radio-group v-model="menuForm.menuType">
|
||||
<el-radio :label="1">不配置子菜单</el-radio>
|
||||
<el-radio :label="2">配置子菜单</el-radio>
|
||||
<el-radio :label="false">不配置子菜单</el-radio>
|
||||
<el-radio :label="true">配置子菜单</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="" v-if="menuForm.menuType === 2 && modular === 'master'">
|
||||
<el-form-item label="" v-if="menuForm.menuType && modular === 'master'">
|
||||
<slot></slot>
|
||||
</el-form-item>
|
||||
|
||||
<template v-if="menuForm.menuType === 1">
|
||||
<template v-if="!menuForm.menuType">
|
||||
<!-- 跳转链接 -->
|
||||
<el-form-item label="跳转链接" prop="visitType">
|
||||
<el-radio-group v-model="menuForm.visitType">
|
||||
@@ -54,6 +54,7 @@ const emit = defineEmits([
|
||||
'update:menuType',
|
||||
'update:visitType',
|
||||
'update:url',
|
||||
'update:appId',
|
||||
'update:pagePath'
|
||||
])
|
||||
|
||||
@@ -61,7 +62,7 @@ const props = withDefaults(
|
||||
defineProps<{
|
||||
modular?: string
|
||||
name?: string
|
||||
menuType?: number
|
||||
menuType?: boolean
|
||||
visitType?: string
|
||||
url?: string
|
||||
appId?: string
|
||||
@@ -70,7 +71,7 @@ const props = withDefaults(
|
||||
{
|
||||
modular: 'master',
|
||||
name: '',
|
||||
menuType: 1,
|
||||
menuType: false,
|
||||
visitType: 'view',
|
||||
url: '',
|
||||
appId: '',
|
||||
|
||||
@@ -34,9 +34,9 @@ const { menuList, menuIndex, handleAddMenu } = useMenuOa(useMenuOa)
|
||||
<!-- 二级菜单 -->
|
||||
<div
|
||||
class="oa-phone-menu-subitem"
|
||||
v-show="menuItem.subButtons.length && menuItem.menuType != 1"
|
||||
v-show="menuItem.sub_button.length && menuItem.has_menu"
|
||||
>
|
||||
<template v-for="(subItem, index2) in menuItem.subButtons">
|
||||
<template v-for="(subItem, index2) in menuItem.sub_button" :key="index2">
|
||||
<div class="oa-phone-menu-subitem-title">
|
||||
{{ subItem.name }}
|
||||
</div>
|
||||
@@ -61,7 +61,7 @@ const { menuList, menuIndex, handleAddMenu } = useMenuOa(useMenuOa)
|
||||
width: 260px;
|
||||
height: 461px;
|
||||
border: 1px solid #e5e5ea;
|
||||
|
||||
flex: none;
|
||||
&-content {
|
||||
height: 420px;
|
||||
border-bottom: 1px solid #e5e5ea;
|
||||
|
||||
@@ -47,7 +47,7 @@ export const rules = reactive<FormRules>({
|
||||
},
|
||||
{
|
||||
pattern:
|
||||
/^([hH][tT]{2}[pP]:\/\/|[hH][tT]{2}[pP][sS]:\/\/)(([A-Za-z0-9-~]+)\.)+([A-Za-z0-9-~\/])+$/,
|
||||
/(http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/,
|
||||
message: '请输入合法的网址链接',
|
||||
trigger: ['blur', 'change']
|
||||
}
|
||||
@@ -75,39 +75,42 @@ export const useMenuOa = (ref: any) => {
|
||||
const handleAddMenu = () => {
|
||||
menuList.value.push({
|
||||
name: '菜单名称',
|
||||
menuType: 1,
|
||||
visitType: 'view',
|
||||
has_menu: false,
|
||||
type: 'view',
|
||||
url: '',
|
||||
appId: '',
|
||||
pagePath: '',
|
||||
subButtons: []
|
||||
appid: '',
|
||||
pagepath: '',
|
||||
sub_button: []
|
||||
})
|
||||
}
|
||||
|
||||
// 添加子菜单
|
||||
const handleAddSubMenu = (event?: Menu) => {
|
||||
const index = menuIndex.value
|
||||
if (menuList.value[index].subButtons.length >= 5) {
|
||||
if (menuList.value[index].sub_button.length >= 5) {
|
||||
feedback.msgError('已添加上限~')
|
||||
return
|
||||
}
|
||||
menuList.value[index].subButtons.push(event)
|
||||
menuList.value[index].sub_button.push(event)
|
||||
}
|
||||
|
||||
// 编辑子菜单
|
||||
const handleEditSubMenu = (event: Menu, subIndex: number) => {
|
||||
const index = menuIndex.value
|
||||
menuList.value[index].subButtons[subIndex] = event
|
||||
menuList.value[index].sub_button[subIndex] = event
|
||||
}
|
||||
|
||||
// 删除主菜单
|
||||
const handleDelMenu = (index: number) => {
|
||||
if (index != 0) {
|
||||
menuIndex.value--
|
||||
}
|
||||
menuList.value.splice(index, 1)
|
||||
}
|
||||
|
||||
// 删除子菜单
|
||||
const handleDelSubMenu = (index: number, subIndex: number) => {
|
||||
menuList.value[index].subButtons.splice(subIndex, 1)
|
||||
menuList.value[index].sub_button.splice(subIndex, 1)
|
||||
}
|
||||
|
||||
// 获取菜单
|
||||
@@ -131,7 +134,6 @@ export const useMenuOa = (ref: any) => {
|
||||
}
|
||||
}
|
||||
await setOaMenuSave(menuList.value)
|
||||
feedback.msgSuccess('保存成功')
|
||||
}
|
||||
|
||||
// 保存菜单
|
||||
@@ -146,7 +148,6 @@ export const useMenuOa = (ref: any) => {
|
||||
}
|
||||
}
|
||||
await setOaMenuPublish(menuList.value)
|
||||
feedback.msgSuccess('发布成功')
|
||||
}
|
||||
|
||||
return {
|
||||
|
||||
@@ -10,12 +10,7 @@
|
||||
</el-card>
|
||||
<el-card class="!border-none mt-4" shadow="never">
|
||||
<div>
|
||||
<el-button
|
||||
v-perms="['channel:oaReplyDefault:add']"
|
||||
class="mb-4"
|
||||
type="primary"
|
||||
@click="handleAdd()"
|
||||
>
|
||||
<el-button class="mb-4" type="primary" @click="handleAdd()">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
@@ -26,14 +21,13 @@
|
||||
<el-table-column label="规则名称" prop="name" min-width="120" />
|
||||
<el-table-column label="回复类型" min-width="120">
|
||||
<template #default="{ row }">
|
||||
{{ getContentType(row.contentType) }}
|
||||
{{ getContentType(row.content_type) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="回复内容" prop="content" min-width="120" />
|
||||
<el-table-column label="状态" min-width="120">
|
||||
<template #default="{ row }">
|
||||
<el-switch
|
||||
v-perms="['channel:oaReplyDefault:status']"
|
||||
v-model="row.status"
|
||||
:active-value="1"
|
||||
:inactive-value="0"
|
||||
@@ -44,20 +38,8 @@
|
||||
<el-table-column label="排序" prop="sort" min-width="120" />
|
||||
<el-table-column label="操作" width="120" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
v-perms="['channel:oaReplyDefault:edit']"
|
||||
type="primary"
|
||||
link
|
||||
@click="handleEdit(row)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
v-perms="['channel:oaReplyDefault:del']"
|
||||
type="danger"
|
||||
link
|
||||
@click="handleDelete(row.id)"
|
||||
>
|
||||
<el-button type="primary" link @click="handleEdit(row)"> 编辑 </el-button>
|
||||
<el-button type="danger" link @click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
@@ -77,7 +59,7 @@ import feedback from '@/utils/feedback'
|
||||
import EditPopup from './edit.vue'
|
||||
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
|
||||
const showEdit = ref(false)
|
||||
const type = 'default'
|
||||
|
||||
const getContentType = computed(() => {
|
||||
return (val: number) => {
|
||||
switch (val) {
|
||||
@@ -90,34 +72,33 @@ const getContentType = computed(() => {
|
||||
const { pager, getLists } = usePaging({
|
||||
fetchFun: getOaReplyList,
|
||||
params: {
|
||||
type
|
||||
reply_type: 3
|
||||
}
|
||||
})
|
||||
|
||||
const handleAdd = async () => {
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('add', type)
|
||||
editRef.value?.open('add', 1)
|
||||
}
|
||||
|
||||
const handleEdit = async (data: any) => {
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit', type)
|
||||
editRef.value?.open('edit', 1)
|
||||
editRef.value?.getDetail(data)
|
||||
}
|
||||
|
||||
const handleDelete = async (id: number) => {
|
||||
await feedback.confirm('确定要删除?')
|
||||
await oaReplyDel({ id, type })
|
||||
await oaReplyDel({ id })
|
||||
feedback.msgSuccess('删除成功')
|
||||
getLists()
|
||||
}
|
||||
|
||||
const changeStatus = async (id: number) => {
|
||||
try {
|
||||
await changeOaReplyStatus({ id, type })
|
||||
feedback.msgSuccess('修改成功')
|
||||
await changeOaReplyStatus({ id })
|
||||
getLists()
|
||||
} catch (error) {
|
||||
getLists()
|
||||
|
||||
@@ -21,29 +21,24 @@
|
||||
<div class="form-tips">方便通过名称管理关注回复内容</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="关键词" prop="keyword" v-if="formData.type == 'keyword'">
|
||||
<el-form-item label="关键词" prop="keyword" v-if="formData.reply_type == 2">
|
||||
<div class="flex-1">
|
||||
<el-input v-model="formData.keyword" placeholder="请输入关键词" />
|
||||
<div class="form-tips">方便通过名称管理关注回复内容</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
label="匹配方式"
|
||||
prop="matchingType"
|
||||
:min="0"
|
||||
v-if="formData.type == 'keyword'"
|
||||
>
|
||||
<el-form-item label="匹配方式" prop="matching_type" v-if="formData.reply_type == 2">
|
||||
<div class="flex-1">
|
||||
<el-radio-group v-model="formData.matchingType">
|
||||
<el-radio-group v-model="formData.matching_type">
|
||||
<el-radio :label="1">全匹配</el-radio>
|
||||
<el-radio :label="2">模糊匹配</el-radio>
|
||||
</el-radio-group>
|
||||
<div class="form-tips">模糊匹配时,关键词部分匹配用户输入的内容即可</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="回复类型" prop="contentType" :min="0">
|
||||
<el-form-item label="回复类型" prop="content_type" :min="0">
|
||||
<div class="flex-1">
|
||||
<el-radio-group v-model="formData.contentType">
|
||||
<el-radio-group v-model="formData.content_type">
|
||||
<el-radio :label="1">文本</el-radio>
|
||||
</el-radio-group>
|
||||
<div class="form-tips">暂时只支持文本类型</div>
|
||||
@@ -61,19 +56,26 @@
|
||||
/>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="回复数量" prop="sort" :min="0">
|
||||
<div>
|
||||
<el-radio-group v-model="formData.replyType">
|
||||
<el-radio :label="1">回复匹配首词条</el-radio>
|
||||
</el-radio-group>
|
||||
<div class="form-tips">设置关键词匹配多条时回复的数量,暂时支持回复一条内容</div>
|
||||
</div>
|
||||
</el-form-item> -->
|
||||
<el-form-item label="排序">
|
||||
<div class="flex-1">
|
||||
<el-input-number v-model="formData.sort" :min="0" :max="9999" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
label="回复数量"
|
||||
prop="reply_num"
|
||||
required
|
||||
v-if="formData.reply_type == 2"
|
||||
>
|
||||
<div class="flex-1">
|
||||
<el-radio-group v-model="formData.reply_num">
|
||||
<el-radio :label="1">回复匹配首词条</el-radio>
|
||||
</el-radio-group>
|
||||
<div class="form-tips">
|
||||
设置关键词匹配多条时回复的数量,暂时支持回复一条内容
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="启用状态">
|
||||
<el-switch v-model="formData.status" :active-value="1" :inactive-value="0" />
|
||||
</el-form-item>
|
||||
@@ -85,7 +87,6 @@
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import { oaReplyEdit, oaReplyAdd, getOaReplyDetail } from '@/api/channel/wx_oa'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import feedback from '@/utils/feedback'
|
||||
import type { FormRules } from 'element-plus'
|
||||
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
@@ -94,18 +95,19 @@ const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑栏目' : '新增栏目'
|
||||
return mode.value == 'edit' ? '编辑' : '新增'
|
||||
})
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
name: '',
|
||||
type: '',
|
||||
contentType: 1,
|
||||
reply_type: 0,
|
||||
content_type: 1,
|
||||
keyword: '',
|
||||
content: '',
|
||||
matchingType: 1,
|
||||
matching_type: 1,
|
||||
status: 1,
|
||||
sort: 0
|
||||
sort: 0,
|
||||
reply_num: 1
|
||||
})
|
||||
|
||||
const formRules: FormRules = {
|
||||
@@ -123,14 +125,14 @@ const formRules: FormRules = {
|
||||
trigger: ['blur']
|
||||
}
|
||||
],
|
||||
matchingType: [
|
||||
matching_type: [
|
||||
{
|
||||
required: true,
|
||||
message: '请选择匹配方式',
|
||||
trigger: ['blur']
|
||||
}
|
||||
],
|
||||
contentType: [
|
||||
content_type: [
|
||||
{
|
||||
required: true,
|
||||
message: '请选择回复类型',
|
||||
@@ -149,14 +151,13 @@ const formRules: FormRules = {
|
||||
const handleSubmit = async () => {
|
||||
await formRef.value?.validate()
|
||||
mode.value == 'edit' ? await oaReplyEdit(formData) : await oaReplyAdd(formData)
|
||||
feedback.msgSuccess('操作成功')
|
||||
popupRef.value?.close()
|
||||
emit('success')
|
||||
}
|
||||
|
||||
const open = (modes = 'add', type = '') => {
|
||||
const open = (modes = 'add', type = 0) => {
|
||||
mode.value = modes
|
||||
formData.type = type
|
||||
formData.reply_type = type
|
||||
popupRef.value?.open()
|
||||
}
|
||||
|
||||
@@ -171,8 +172,7 @@ const setFormData = (data: Record<any, any>) => {
|
||||
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await getOaReplyDetail({
|
||||
id: row.id,
|
||||
type: formData.type
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
}
|
||||
|
||||
@@ -10,12 +10,7 @@
|
||||
</el-card>
|
||||
<el-card class="!border-none mt-4" shadow="never">
|
||||
<div>
|
||||
<el-button
|
||||
v-perms="['channel:oaReplyFollow:add']"
|
||||
class="mb-4"
|
||||
type="primary"
|
||||
@click="handleAdd()"
|
||||
>
|
||||
<el-button class="mb-4" type="primary" @click="handleAdd()">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
@@ -26,14 +21,13 @@
|
||||
<el-table-column label="规则名称" prop="name" min-width="120" />
|
||||
<el-table-column label="回复类型" min-width="120">
|
||||
<template #default="{ row }">
|
||||
{{ getContentType(row.contentType) }}
|
||||
{{ getContentType(row.content_type) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="回复内容" prop="content" min-width="120" />
|
||||
<el-table-column label="状态" min-width="120">
|
||||
<template #default="{ row }">
|
||||
<el-switch
|
||||
v-perms="['channel:oaReplyFollow:status']"
|
||||
v-model="row.status"
|
||||
:active-value="1"
|
||||
:inactive-value="0"
|
||||
@@ -44,20 +38,8 @@
|
||||
<el-table-column label="排序" prop="sort" min-width="120" />
|
||||
<el-table-column label="操作" width="120" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
v-perms="['channel:oaReplyFollow:edit']"
|
||||
type="primary"
|
||||
link
|
||||
@click="handleEdit(row)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
v-perms="['channel:oaReplyFollow:del']"
|
||||
type="danger"
|
||||
link
|
||||
@click="handleDelete(row.id)"
|
||||
>
|
||||
<el-button type="primary" link @click="handleEdit(row)"> 编辑 </el-button>
|
||||
<el-button type="danger" link @click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
@@ -75,10 +57,9 @@ import { oaReplyDel, getOaReplyList, changeOaReplyStatus } from '@/api/channel/w
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import feedback from '@/utils/feedback'
|
||||
import EditPopup from './edit.vue'
|
||||
|
||||
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
|
||||
const showEdit = ref(false)
|
||||
const type = 'follow'
|
||||
|
||||
const getContentType = computed(() => {
|
||||
return (val: number) => {
|
||||
switch (val) {
|
||||
@@ -91,34 +72,32 @@ const getContentType = computed(() => {
|
||||
const { pager, getLists } = usePaging({
|
||||
fetchFun: getOaReplyList,
|
||||
params: {
|
||||
type
|
||||
reply_type: 1
|
||||
}
|
||||
})
|
||||
|
||||
const handleAdd = async () => {
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('add', type)
|
||||
editRef.value?.open('add', 1)
|
||||
}
|
||||
|
||||
const handleEdit = async (data: any) => {
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit', type)
|
||||
editRef.value?.open('edit', 1)
|
||||
editRef.value?.getDetail(data)
|
||||
}
|
||||
|
||||
const handleDelete = async (id: number) => {
|
||||
await feedback.confirm('确定要删除?')
|
||||
await oaReplyDel({ id, type })
|
||||
feedback.msgSuccess('删除成功')
|
||||
await oaReplyDel({ id })
|
||||
getLists()
|
||||
}
|
||||
|
||||
const changeStatus = async (id: number) => {
|
||||
try {
|
||||
await changeOaReplyStatus({ id, type })
|
||||
feedback.msgSuccess('修改成功')
|
||||
await changeOaReplyStatus({ id })
|
||||
getLists()
|
||||
} catch (error) {
|
||||
getLists()
|
||||
|
||||
@@ -10,12 +10,7 @@
|
||||
</el-card>
|
||||
<el-card class="!border-none mt-4" shadow="never">
|
||||
<div>
|
||||
<el-button
|
||||
v-perms="['channel:oaReplyKeyword:add']"
|
||||
class="mb-4"
|
||||
type="primary"
|
||||
@click="handleAdd()"
|
||||
>
|
||||
<el-button class="mb-4" type="primary" @click="handleAdd()">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
@@ -28,18 +23,17 @@
|
||||
<el-table-column label="关键词" prop="keyword" min-width="120" />
|
||||
<el-table-column label="匹配方式" min-width="120">
|
||||
<template #default="{ row }">
|
||||
{{ getMatchingType(row.matchingType) }}
|
||||
{{ getMatchingType(row.matching_type) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="回复类型" min-width="120">
|
||||
<template #default="{ row }">
|
||||
{{ getContentType(row.contentType) }}
|
||||
{{ getContentType(row.content_type) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="状态" min-width="120">
|
||||
<template #default="{ row }">
|
||||
<el-switch
|
||||
v-perms="['channel:oaReplyKeyword:status']"
|
||||
v-model="row.status"
|
||||
:active-value="1"
|
||||
:inactive-value="0"
|
||||
@@ -50,20 +44,8 @@
|
||||
<el-table-column label="排序" prop="sort" min-width="120" />
|
||||
<el-table-column label="操作" width="120" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
v-perms="['channel:oaReplyKeyword:edit']"
|
||||
type="primary"
|
||||
link
|
||||
@click="handleEdit(row)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
v-perms="['channel:oaReplyKeyword:del']"
|
||||
type="danger"
|
||||
link
|
||||
@click="handleDelete(row.id)"
|
||||
>
|
||||
<el-button type="primary" link @click="handleEdit(row)"> 编辑 </el-button>
|
||||
<el-button type="danger" link @click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
@@ -103,38 +85,35 @@ const getContentType = computed(() => {
|
||||
}
|
||||
}
|
||||
})
|
||||
const type = 'keyword'
|
||||
|
||||
const { pager, getLists } = usePaging({
|
||||
fetchFun: getOaReplyList,
|
||||
params: {
|
||||
type
|
||||
reply_type: 2
|
||||
}
|
||||
})
|
||||
|
||||
const handleAdd = async () => {
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('add', type)
|
||||
editRef.value?.open('add', 2)
|
||||
}
|
||||
|
||||
const handleEdit = async (data: any) => {
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit', type)
|
||||
editRef.value?.open('edit', 2)
|
||||
editRef.value?.getDetail(data)
|
||||
}
|
||||
|
||||
const handleDelete = async (id: number) => {
|
||||
await feedback.confirm('确定要删除?')
|
||||
await oaReplyDel({ id, type })
|
||||
feedback.msgSuccess('删除成功')
|
||||
await oaReplyDel({ id })
|
||||
getLists()
|
||||
}
|
||||
|
||||
const changeStatus = async (id: number) => {
|
||||
try {
|
||||
await changeOaReplyStatus({ id, type })
|
||||
feedback.msgSuccess('修改成功')
|
||||
await changeOaReplyStatus({ id })
|
||||
getLists()
|
||||
} catch (error) {
|
||||
getLists()
|
||||
|
||||
@@ -13,9 +13,9 @@
|
||||
<div class="basis-40 flex flex-col justify-center items-center">
|
||||
<div class="text-tx-regular">账户余额</div>
|
||||
<div class="mt-2 flex items-center">
|
||||
¥{{ formData.userMoney }}
|
||||
¥{{ formData.user_money }}
|
||||
<el-button v-perms="['system:user:adjustMoney']" type="primary" link
|
||||
@click="handleAdjust(formData.userMoney)">
|
||||
@click="handleAdjust(formData.user_money)">
|
||||
调整
|
||||
</el-button>
|
||||
</div>
|
||||
@@ -35,7 +35,7 @@
|
||||
</popover-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="真实姓名:">
|
||||
{{ formData.realName || '-' }}
|
||||
{{ formData.real_name || '-' }}
|
||||
<popover-input class="ml-[10px]" @confirm="handleEdit($event, 'real_name')" :limit="32"
|
||||
v-perms="['system:user:edit']">
|
||||
<el-button type="primary" link>
|
||||
@@ -74,8 +74,8 @@
|
||||
</popover-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="注册来源:"> {{ formData.channel }} </el-form-item>
|
||||
<el-form-item label="注册时间:"> {{ formData.createTime }} </el-form-item>
|
||||
<el-form-item label="最近登录时间:"> {{ formData.loginTime }} </el-form-item>
|
||||
<el-form-item label="注册时间:"> {{ formData.create_time }} </el-form-item>
|
||||
<el-form-item label="最近登录时间:"> {{ formData.login_time }} </el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
|
||||
@@ -93,15 +93,15 @@ const route = useRoute()
|
||||
const formData = reactive({
|
||||
avatar: '',
|
||||
channel: '',
|
||||
createTime: '',
|
||||
loginTime: '',
|
||||
create_time: '',
|
||||
login_time: '',
|
||||
mobile: '',
|
||||
nickname: '',
|
||||
realName: 0,
|
||||
real_name: 0,
|
||||
sex: 0,
|
||||
sn: '',
|
||||
account: '',
|
||||
userMoney: ''
|
||||
user_money: ''
|
||||
})
|
||||
|
||||
const id: number = parseInt(route.query.id?.toString() ?? "", 10)
|
||||
|
||||
82
admin/src/views/finance/balance_details.vue
Normal file
82
admin/src/views/finance/balance_details.vue
Normal file
@@ -0,0 +1,82 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-card class="!border-none" shadow="never">
|
||||
<el-alert type="warning" title="温馨提示:用户账户变动记录" :closable="false" show-icon></el-alert>
|
||||
<el-form ref="formRef" class="mb-[-16px] mt-[16px]" :model="queryParams" :inline="true">
|
||||
<el-form-item label="用户信息">
|
||||
<el-input class="w-[280px]" v-model="queryParams.user_info" placeholder="请输入用户编号" clearable
|
||||
@keyup.enter="resetPage" />
|
||||
</el-form-item>
|
||||
<el-form-item label="变动类型">
|
||||
<el-select class="w-[280px]" v-model="queryParams.change_type" clearable>
|
||||
<el-option label="全部" value />
|
||||
<el-option v-for="(value, key) in optionsData.change_type" :key="key" :label="value" :value="key" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="记录时间">
|
||||
<daterange-picker v-model:startTime="queryParams.start_time" v-model:endTime="queryParams.end_time" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
<el-button @click="resetParams">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none mt-4" shadow="never">
|
||||
<el-table size="large" v-loading="pager.loading" :data="pager.lists">
|
||||
<el-table-column label="用户编号" prop="user.sn" min-width="100" />
|
||||
<el-table-column label="用户昵称" min-width="160">
|
||||
<template #default="{ row }">
|
||||
<div class="flex items-center">
|
||||
<image-contain class="flex-none mr-2" :src="row.user.avatar" :width="40" :height="40"
|
||||
preview-teleported fit="contain" />
|
||||
{{ row.user.nickname }}
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="手机号码" prop="user.mobile" min-width="100" />
|
||||
<el-table-column label="变动金额" prop="change_amount" min-width="100">
|
||||
<template #default="{ row }">
|
||||
<span :class="{ 'text-error': row.action == 2 }">
|
||||
{{ row.action == 2 ? '- ' + row.change_amount : '+ ' + row.change_amount }}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="剩余金额" prop="left_amount" min-width="100" />
|
||||
<el-table-column label="变动类型" prop="change_type_desc" min-width="120" />
|
||||
|
||||
<el-table-column label="来源单号" prop="source_sn" min-width="100" />
|
||||
<el-table-column label="记录时间" prop="create_time" min-width="120" />
|
||||
</el-table>
|
||||
<div class="flex justify-end mt-4">
|
||||
<pagination v-model="pager" @change="getLists" />
|
||||
</div>
|
||||
</el-card>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup name="articleLists">
|
||||
import { getUmChangeType, accountLog } from '@/api/finance'
|
||||
import { useDictOptions } from '@/hooks/useDictOptions'
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
const queryParams = reactive({
|
||||
user_info: '',
|
||||
change_type: '',
|
||||
start_time: '',
|
||||
end_time: ''
|
||||
})
|
||||
|
||||
const { pager, getLists, resetPage, resetParams } = usePaging({
|
||||
fetchFun: accountLog,
|
||||
params: queryParams
|
||||
})
|
||||
|
||||
const { optionsData } = useDictOptions<{
|
||||
change_type: Record<number, string>
|
||||
}>({
|
||||
change_type: {
|
||||
api: getUmChangeType
|
||||
}
|
||||
})
|
||||
|
||||
getLists()
|
||||
</script>
|
||||
68
admin/src/views/finance/component/refund-log.vue
Normal file
68
admin/src/views/finance/component/refund-log.vue
Normal file
@@ -0,0 +1,68 @@
|
||||
<template>
|
||||
<div class="code-preview">
|
||||
<el-dialog v-model="show" width="760px" title="退款日志">
|
||||
<el-table size="large" v-loading="loading" :data="logLists" height="500">
|
||||
<el-table-column label="流水单号" prop="sn" min-width="190" />
|
||||
<el-table-column label="退款金额" min-width="110">
|
||||
<template #default="{ row }"> ¥{{ row.refund_amount }} </template>
|
||||
</el-table-column>
|
||||
<el-table-column label="退款状态" prop="" min-width="100">
|
||||
<template #default="{ row }">
|
||||
<el-tag type="warning" v-if="row.refund_status == 0">
|
||||
{{ row.refund_status_text }}
|
||||
</el-tag>
|
||||
<el-tag v-if="row.refund_status == 1">
|
||||
{{ row.refund_status_text }}
|
||||
</el-tag>
|
||||
<el-tag type="danger" v-if="row.refund_status == 2">
|
||||
{{ row.refund_status_text }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="记录时间" prop="create_time" min-width="180" />
|
||||
<el-table-column label="操作人" prop="admin.nickname" min-width="120" />
|
||||
</el-table>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { refundLog } from '@/api/finance'
|
||||
const loading = ref(false)
|
||||
const logLists = ref([])
|
||||
const props = defineProps<{
|
||||
modelValue: boolean
|
||||
refundId: number
|
||||
}>()
|
||||
|
||||
const emit = defineEmits<{
|
||||
(event: 'update:modelValue', value: boolean): void
|
||||
}>()
|
||||
|
||||
const show = computed<boolean>({
|
||||
get() {
|
||||
return props.modelValue
|
||||
},
|
||||
set(value) {
|
||||
emit('update:modelValue', value)
|
||||
}
|
||||
})
|
||||
|
||||
const getRefundLog = async () => {
|
||||
loading.value = true
|
||||
logLists.value = []
|
||||
try {
|
||||
const res = await refundLog({
|
||||
record_id: props.refundId
|
||||
})
|
||||
logLists.value = res
|
||||
} catch (error) { }
|
||||
loading.value = false
|
||||
}
|
||||
|
||||
watch(show, (value) => {
|
||||
if (value) {
|
||||
getRefundLog()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
108
admin/src/views/finance/recharge_record.vue
Normal file
108
admin/src/views/finance/recharge_record.vue
Normal file
@@ -0,0 +1,108 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-card class="!border-none" shadow="never">
|
||||
<el-alert type="warning" title="温馨提示:用户充值记录" :closable="false" show-icon></el-alert>
|
||||
<el-form ref="formRef" class="mb-[-16px] mt-[16px]" :model="queryParams" :inline="true">
|
||||
<el-form-item label="充值单号">
|
||||
<el-input class="w-[280px]" v-model="queryParams.sn" placeholder="请输入充值单号" clearable
|
||||
@keyup.enter="resetPage" />
|
||||
</el-form-item>
|
||||
<el-form-item label="用户信息">
|
||||
<el-input class="w-[280px]" v-model="queryParams.user_info" placeholder="请输入用户编号/昵称/手机号" clearable
|
||||
@keyup.enter="resetPage" />
|
||||
</el-form-item>
|
||||
<el-form-item label="支付方式">
|
||||
<el-select class="w-[280px]" v-model="queryParams.pay_way">
|
||||
<el-option label="全部" value />
|
||||
<el-option label="微信支付" :value="2" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="支付状态">
|
||||
<el-select class="w-[280px]" v-model="queryParams.pay_status">
|
||||
<el-option label="全部" value />
|
||||
<el-option label="未支付" :value="2" />
|
||||
<el-option label="已支付" :value="1" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="下单时间">
|
||||
<daterange-picker v-model:startTime="queryParams.start_time" v-model:endTime="queryParams.end_time" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
<el-button @click="resetParams">重置</el-button>
|
||||
<export-data class="ml-2.5" :fetch-fun="rechargeLists" :params="queryParams" :page-size="pager.size" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none mt-4" shadow="never">
|
||||
<el-table size="large" v-loading="pager.loading" :data="pager.lists">
|
||||
<el-table-column label="用户信息" min-width="100">
|
||||
<template #default="{ row }">
|
||||
<div class="flex items-center">
|
||||
<image-contain class="flex-none mr-2" :src="row.user.avatar" :width="40" :height="40"
|
||||
preview-teleported fit="contain" />
|
||||
{{ row.nickname }}
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="用户编号" prop="user_sn" min-width="190" />
|
||||
<el-table-column label="充值单号" prop="sn" min-width="190" />
|
||||
<el-table-column label="充值金额" prop="order_amount" min-width="100">
|
||||
</el-table-column>
|
||||
<el-table-column label="支付方式" prop="pay_way_text" min-width="100">
|
||||
<template #default="{ row }">
|
||||
<el-tag type="success" v-if="row.pay_way == 2">微信支付</el-tag>
|
||||
<el-tag v-if="row.pay_way == 3">支付宝支付</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="支付状态" min-width="100">
|
||||
<template #default="{ row }">
|
||||
<el-tag v-if="row.pay_status == 1">已支付</el-tag>
|
||||
<el-tag type="info" v-else>未支付</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="支付时间" prop="pay_time" min-width="180" />
|
||||
<el-table-column label="下单时间" prop="create_time" min-width="180" />
|
||||
|
||||
<el-table-column label="操作" width="120" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-if="row.pay_status == 1" v-perms="['finance:recharge:refund']" type="primary" link
|
||||
:disabled="row.refund_status == 1" @click="handleRefund(row.id)">
|
||||
退款
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div class="flex justify-end mt-4">
|
||||
<pagination v-model="pager" @change="getLists" />
|
||||
</div>
|
||||
</el-card>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup name="articleLists">
|
||||
import { rechargeLists, refund } from '@/api/finance'
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import feedback from '@/utils/feedback'
|
||||
const queryParams = reactive({
|
||||
sn: '',
|
||||
user_info: '',
|
||||
pay_way: '',
|
||||
pay_status: '',
|
||||
start_time: '',
|
||||
end_time: ''
|
||||
})
|
||||
|
||||
const { pager, getLists, resetPage, resetParams } = usePaging({
|
||||
fetchFun: rechargeLists,
|
||||
params: queryParams
|
||||
})
|
||||
const handleRefund = async (id: number) => {
|
||||
await feedback.confirm('确认重新退款?')
|
||||
await refund({
|
||||
recharge_id: id
|
||||
})
|
||||
getLists()
|
||||
}
|
||||
|
||||
getLists()
|
||||
</script>
|
||||
191
admin/src/views/finance/refund_record.vue
Normal file
191
admin/src/views/finance/refund_record.vue
Normal file
@@ -0,0 +1,191 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-card class="!border-none mb-4" shadow="never">
|
||||
<div class="flex flex-wrap">
|
||||
<div class="w-1/2 md:w-1/4">
|
||||
<div class="leading-10">累计退款金额 (元)</div>
|
||||
<div class="text-6xl">{{ refundData.total }}</div>
|
||||
</div>
|
||||
<div class="w-1/2 md:w-1/4">
|
||||
<div class="leading-10">退款中金额 (元)</div>
|
||||
<div class="text-6xl">{{ refundData.ing }}</div>
|
||||
</div>
|
||||
<div class="w-1/2 md:w-1/4">
|
||||
<div class="leading-10">退款成功金额 (元)</div>
|
||||
<div class="text-6xl">{{ refundData.success }}</div>
|
||||
</div>
|
||||
<div class="w-1/2 md:w-1/4">
|
||||
<div class="leading-10">退款失败金额 (元)</div>
|
||||
<div class="text-6xl">{{ refundData.error }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
<el-card class="!border-none" shadow="never">
|
||||
<el-form ref="formRef" class="mb-[-16px] mt-[16px]" :model="queryParams" :inline="true">
|
||||
<el-form-item label="退款单号">
|
||||
<el-input class="w-[280px]" v-model="queryParams.sn" placeholder="请输入退款单号" clearable
|
||||
@keyup.enter="resetPage" />
|
||||
</el-form-item>
|
||||
<el-form-item label="来源单号">
|
||||
<el-input class="w-[280px]" v-model="queryParams.order_sn" placeholder="请输入来源单号" clearable
|
||||
@keyup.enter="resetPage" />
|
||||
</el-form-item>
|
||||
<el-form-item label="用户信息">
|
||||
<el-input class="w-[280px]" v-model.number="queryParams.user_sn" placeholder="请输入用户编号" clearable
|
||||
@keyup.enter="resetPage" />
|
||||
</el-form-item>
|
||||
<el-form-item label="退款类型">
|
||||
<el-select class="w-[280px]" v-model="queryParams.refund_type">
|
||||
<el-option label="全部" value />
|
||||
<el-option label="后台退款" :value="1" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="记录时间">
|
||||
<daterange-picker v-model:startTime="queryParams.start_time" v-model:endTime="queryParams.end_time" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
<el-button @click="resetParams">重置</el-button>
|
||||
<!-- <export-data
|
||||
class="ml-2.5"
|
||||
:fetch-fun="refundRecord"
|
||||
:params="queryParams"
|
||||
:page-size="pager.size"
|
||||
/> -->
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none mt-4" shadow="never">
|
||||
<el-tabs v-model="activeTab" @tab-change="handleTabChange">
|
||||
<el-tab-pane v-for="(item, index) in tabLists" :label="`${item.name}(${pager.extend[item.numKey] ?? 0})`"
|
||||
:name="index" :key="index">
|
||||
<el-table size="large" v-loading="pager.loading" :data="pager.lists">
|
||||
<el-table-column label="退款单号" prop="sn" min-width="190" />
|
||||
<el-table-column label="用户信息" min-width="160">
|
||||
<template #default="{ row }">
|
||||
<div class="flex items-center">
|
||||
<image-contain class="flex-none mr-2" :src="row.user.avatar" :width="40" :height="40"
|
||||
preview-teleported fit="contain" />
|
||||
{{ row.user.nickname }}
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="来源单号" prop="order_sn" min-width="190" />
|
||||
<el-table-column label="退款金额" min-width="100">
|
||||
<template #default="{ row }"> ¥ {{ row.refund_amount }} </template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="退款类型" prop="refund_type_text" min-width="100" />
|
||||
<el-table-column label="退款状态" prop="" min-width="100">
|
||||
<template #default="{ row }">
|
||||
<el-tag type="warning" v-if="row.refund_status == 0">
|
||||
{{ row.refund_status_text }}
|
||||
</el-tag>
|
||||
<el-tag v-if="row.refund_status == 1">
|
||||
{{ row.refund_status_text }}
|
||||
</el-tag>
|
||||
<el-tag type="danger" v-if="row.refund_status == 2">
|
||||
{{ row.refund_status_text }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="记录时间" prop="create_time" min-width="180" />
|
||||
<el-table-column label="操作" width="180" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['finance:refund:log']" type="primary" link
|
||||
@click="handleShowRefundLog(row.id)">
|
||||
退款日志
|
||||
</el-button>
|
||||
<el-button v-if="row.refund_status == 2" v-perms="['finance:recharge:refundAgain']"
|
||||
type="primary" link @click="handleRefund(row.id)">
|
||||
重新退款
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
|
||||
<div class="flex justify-end mt-4">
|
||||
<pagination v-model="pager" @change="getLists" />
|
||||
</div>
|
||||
</el-card>
|
||||
<refund-log v-model="showRefundLog" :refund-id="selectRefundId" />
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup name="articleLists">
|
||||
import { refundRecord, refundAgain, refundStat } from '@/api/finance'
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import feedback from '@/utils/feedback'
|
||||
import RefundLog from './component/refund-log.vue'
|
||||
const queryParams = reactive({
|
||||
sn: '',
|
||||
order_sn: '',
|
||||
user_sn: '',
|
||||
refund_type: '',
|
||||
start_time: '',
|
||||
end_time: '',
|
||||
refund_status: ''
|
||||
})
|
||||
const refundData = reactive({
|
||||
total: 0,
|
||||
ing: 0,
|
||||
success: 0,
|
||||
error: 0
|
||||
})
|
||||
const showRefundLog = ref(false)
|
||||
const selectRefundId = ref(0)
|
||||
const activeTab = ref(0)
|
||||
const tabLists = ref([
|
||||
{
|
||||
name: '全部',
|
||||
type: '',
|
||||
numKey: 'total'
|
||||
},
|
||||
{
|
||||
name: '退款中',
|
||||
type: 0,
|
||||
numKey: 'ing'
|
||||
},
|
||||
{
|
||||
name: '退款成功',
|
||||
type: 1,
|
||||
numKey: 'success'
|
||||
},
|
||||
{
|
||||
name: '退款失败',
|
||||
type: 2,
|
||||
numKey: 'error'
|
||||
}
|
||||
])
|
||||
|
||||
const { pager, getLists, resetPage, resetParams } = usePaging({
|
||||
fetchFun: refundRecord,
|
||||
params: queryParams
|
||||
})
|
||||
|
||||
const handleRefund = async (id: number) => {
|
||||
await feedback.confirm('确认重新退款?')
|
||||
await refundAgain({
|
||||
record_id: id
|
||||
})
|
||||
getLists()
|
||||
getRefundStat()
|
||||
}
|
||||
|
||||
const handleShowRefundLog = async (id: number) => {
|
||||
showRefundLog.value = true
|
||||
selectRefundId.value = id
|
||||
}
|
||||
const handleTabChange = (index: any) => {
|
||||
queryParams.refund_status = tabLists.value[index].type as string
|
||||
resetPage()
|
||||
}
|
||||
|
||||
const getRefundStat = async () => {
|
||||
const res = await refundStat()
|
||||
Object.assign(refundData, res)
|
||||
}
|
||||
getRefundStat()
|
||||
getLists()
|
||||
</script>
|
||||
@@ -1,48 +1,36 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-card class="!border-none" shadow="never">
|
||||
<el-page-header :content="$route.meta.title" @back="$router.back()" />
|
||||
<el-page-header content="编辑通知设置" @back="$router.back()" />
|
||||
</el-card>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
label-width="120px"
|
||||
:rules="rules"
|
||||
v-loading="loading"
|
||||
>
|
||||
<el-form ref="formRef" :model="formData" label-width="120px" :rules="rules" v-loading="loading">
|
||||
<el-card class="!border-none mt-4" shadow="never">
|
||||
<div class="font-medium mb-7">通知名称</div>
|
||||
<el-form-item label="通知名称" prop="name"> {{ formData.name }} </el-form-item>
|
||||
<el-form-item label="通知类型" prop="name"> {{ formData.type }} </el-form-item>
|
||||
<el-form-item label="通知业务" prop="name"> {{ formData.remarks }} </el-form-item>
|
||||
<el-form-item label="通知名称"> {{ formData.scene_name }} </el-form-item>
|
||||
<el-form-item label="通知类型"> {{ formData.type }} </el-form-item>
|
||||
<el-form-item label="通知业务"> {{ formData.scene_desc }} </el-form-item>
|
||||
</el-card>
|
||||
<el-card class="!border-none mt-4" shadow="never">
|
||||
<div class="font-medium mb-7">短信通知</div>
|
||||
<el-form-item label="开启状态" prop="smsNotice.status" required>
|
||||
<el-radio-group v-model="formData.smsNotice.status">
|
||||
<el-form-item label="开启状态" prop="sms_notice.status" required>
|
||||
<el-radio-group v-model="formData.sms_notice.status">
|
||||
<el-radio label="0">关闭</el-radio>
|
||||
<el-radio label="1">开启</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="模板ID" prop="smsNotice.templateId">
|
||||
<el-form-item label="模板ID" prop="sms_notice.template_id">
|
||||
<div class="w-80">
|
||||
<el-input
|
||||
v-model="formData.smsNotice.templateId"
|
||||
placeholder="请输入模板ID"
|
||||
/>
|
||||
<el-input v-model="formData.sms_notice.template_id" placeholder="请输入模板ID" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="短信内容" prop="smsNotice.content">
|
||||
<el-form-item label="短信内容" prop="sms_notice.content">
|
||||
<div class="flex-1">
|
||||
<div class="w-full max-w-[320px]">
|
||||
<el-input
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 6, maxRows: 6 }"
|
||||
v-model="formData.smsNotice.content"
|
||||
/>
|
||||
<el-input type="textarea" :autosize="{ minRows: 6, maxRows: 6 }"
|
||||
v-model="formData.sms_notice.content" />
|
||||
</div>
|
||||
<div class="form-tips">
|
||||
<div v-for="(item, index) in formData.smsNotice.tips" :key="index">
|
||||
<div v-for="(item, index) in formData.sms_notice.tips" :key="index">
|
||||
{{ item }}
|
||||
</div>
|
||||
</div>
|
||||
@@ -50,7 +38,7 @@
|
||||
</el-form-item>
|
||||
</el-card>
|
||||
</el-form>
|
||||
<footer-btns>
|
||||
<footer-btns v-perms="['setting:notice:save']">
|
||||
<el-button type="primary" @click="handleSave">保存</el-button>
|
||||
</footer-btns>
|
||||
</div>
|
||||
@@ -61,6 +49,7 @@ import type { FormInstance } from 'element-plus'
|
||||
import feedback from '@/utils/feedback'
|
||||
import { noticeDetail, setNoticeConfig } from '@/api/message'
|
||||
import useMultipleTabs from '@/hooks/useMultipleTabs'
|
||||
import { pick } from 'lodash'
|
||||
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
@@ -68,26 +57,29 @@ const router = useRouter()
|
||||
const loading = ref(false)
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
name: '',
|
||||
scene_name: '',
|
||||
type: '',
|
||||
remarks: '',
|
||||
smsNotice: {
|
||||
scene_desc: '',
|
||||
sms_notice: {
|
||||
status: 0,
|
||||
templateId: '',
|
||||
template_id: '',
|
||||
content: '',
|
||||
tips: []
|
||||
}
|
||||
},
|
||||
oa_notice: {},
|
||||
mnp_notice: {},
|
||||
system_notice: {}
|
||||
})
|
||||
|
||||
const rules = {
|
||||
'smsNotice.templateId': [
|
||||
'sms_notice.template_id': [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入模板ID',
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
'smsNotice.content': [
|
||||
'sms_notice.content': [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入短信内容',
|
||||
@@ -106,13 +98,23 @@ const getDetails = async () => {
|
||||
Object.keys(data).forEach((key) => {
|
||||
//@ts-ignore
|
||||
formData[key] = data[key]
|
||||
formData['sms_notice'] = JSON.parse(data['sms_notice'])
|
||||
formData['mnp_notice'] = JSON.parse(data['mnp_notice'])
|
||||
formData['oa_notice'] = JSON.parse(data['oa_notice'])
|
||||
formData['system_notice'] = JSON.parse(data['system_notice'])
|
||||
|
||||
})
|
||||
loading.value = false
|
||||
}
|
||||
|
||||
const handleSave = async () => {
|
||||
await formRef.value?.validate()
|
||||
await setNoticeConfig(formData)
|
||||
|
||||
const data = {
|
||||
id: formData.id,
|
||||
template: pick(formData, ['sms_notice', 'oa_notice', 'mnp_notice', 'system_notice'])
|
||||
}
|
||||
await setNoticeConfig(data)
|
||||
feedback.msgSuccess('操作成功')
|
||||
removeTab()
|
||||
router.back()
|
||||
|
||||
@@ -1,43 +1,43 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-card class="!border-none" shadow="never">
|
||||
<el-alert
|
||||
type="warning"
|
||||
title="温馨提示:平台配置在各个场景下的通知发送方式和内容模板"
|
||||
:closable="false"
|
||||
show-icon
|
||||
></el-alert>
|
||||
<el-alert type="warning" title="温馨提示:平台配置在各个场景下的通知发送方式和内容模板" :closable="false" show-icon></el-alert>
|
||||
</el-card>
|
||||
<el-card class="!border-none mt-4" shadow="never">
|
||||
<el-tabs v-model="tabsActive" @tab-change="getLists">
|
||||
<el-tab-pane
|
||||
v-for="(item, index) in tabsMap"
|
||||
:key="index"
|
||||
:label="item.name"
|
||||
:name="item.type"
|
||||
lazy
|
||||
></el-tab-pane>
|
||||
<el-tabs v-model="tabsActive" @tab-change="handelGetLists">
|
||||
<el-tab-pane v-for="(item, index) in tabsMap" :key="index" :label="item.name" :name="item.type"
|
||||
lazy></el-tab-pane>
|
||||
</el-tabs>
|
||||
<el-table size="large" :data="state.lists" v-loading="state.loading">
|
||||
<el-table-column label="通知场景" prop="name" min-width="120" />
|
||||
<el-table-column label="通知类型" prop="type" min-width="160" />
|
||||
<el-table size="large" :data="pager.lists" v-loading="pager.loading">
|
||||
<el-table-column label="通知场景" prop="scene_name" min-width="120" />
|
||||
<el-table-column label="通知类型" prop="type_desc" min-width="160" />
|
||||
<el-table-column label="短信通知" min-width="80">
|
||||
<template #default="{ row }">
|
||||
<el-tag v-if="row.smsStatus == 1">开启</el-tag>
|
||||
<el-tag v-if="row.sms_notice?.status == 1">开启</el-tag>
|
||||
<el-tag type="danger" v-else>关闭</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="微信模板" min-width="80">
|
||||
<template #default="{ row }">
|
||||
<el-tag v-if="row.mnp_notice?.status == 1">开启</el-tag>
|
||||
<el-tag type="danger" v-else>关闭</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="微信小程序" min-width="80">
|
||||
<template #default="{ row }">
|
||||
<el-tag v-if="row.oa_notice?.status == 1">开启</el-tag>
|
||||
<el-tag type="danger" v-else>关闭</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" min-width="80" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['setting:notice:detail']" type="primary" link>
|
||||
<router-link
|
||||
:to="{
|
||||
path: getRoutePath('setting:notice:detail'),
|
||||
query: {
|
||||
id: row.id
|
||||
}
|
||||
}"
|
||||
>
|
||||
<router-link :to="{
|
||||
path: getRoutePath('setting:notice:detail'),
|
||||
query: {
|
||||
id: row.id
|
||||
}
|
||||
}">
|
||||
设置
|
||||
</router-link>
|
||||
</el-button>
|
||||
@@ -49,6 +49,7 @@
|
||||
</template>
|
||||
<script lang="ts" setup name="notice">
|
||||
import { noticeLists } from '@/api/message'
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { getRoutePath } from '@/router'
|
||||
|
||||
enum NoticeEnums {
|
||||
@@ -69,27 +70,32 @@ const tabsMap = [
|
||||
]
|
||||
|
||||
// 列表数据
|
||||
const state = reactive({
|
||||
loading: false,
|
||||
lists: []
|
||||
const params = reactive({
|
||||
recipient: tabsActive
|
||||
})
|
||||
const { pager, getLists } = usePaging({
|
||||
fetchFun: noticeLists,
|
||||
params
|
||||
})
|
||||
|
||||
// 获取存储引擎列表数据
|
||||
const getLists = async () => {
|
||||
try {
|
||||
state.loading = true
|
||||
state.lists = await noticeLists({
|
||||
recipient: tabsActive.value
|
||||
const handelGetLists = () => {
|
||||
getLists().then(() => {
|
||||
pager.lists.forEach((item) => {
|
||||
item.sms_notice = JSON.parse(item.sms_notice)
|
||||
item.mnp_notice = JSON.parse(item.mnp_notice)
|
||||
item.oa_notice = JSON.parse(item.oa_notice)
|
||||
if (item.type == 1) {
|
||||
item.type_desc = "业务通知"
|
||||
} else if (item.type = 2) {
|
||||
item.type_desc = "验证码"
|
||||
}
|
||||
})
|
||||
state.loading = false
|
||||
} catch (error) {
|
||||
state.loading = false
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
onActivated(() => {
|
||||
getLists()
|
||||
handelGetLists()
|
||||
})
|
||||
|
||||
getLists()
|
||||
handelGetLists()
|
||||
</script>
|
||||
|
||||
@@ -1,13 +1,6 @@
|
||||
<template>
|
||||
<div class="edit-popup">
|
||||
<popup
|
||||
ref="popupRef"
|
||||
title="设置存储"
|
||||
:async="true"
|
||||
width="550px"
|
||||
@confirm="handleSubmit"
|
||||
@close="handleClose"
|
||||
>
|
||||
<popup ref="popupRef" title="设置存储" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules">
|
||||
<el-form-item label="短信渠道">
|
||||
<div>
|
||||
@@ -106,7 +99,7 @@ const handleSubmit = async () => {
|
||||
|
||||
const getDetail = async () => {
|
||||
const data = await smsDetail({
|
||||
alias: formData.alias
|
||||
name: formData.alias
|
||||
})
|
||||
for (const key in data) {
|
||||
//@ts-ignore
|
||||
|
||||
@@ -11,12 +11,7 @@
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" min-width="120" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
v-perms="['setting:storage:edit']"
|
||||
type="primary"
|
||||
link
|
||||
@click="handleSet(row.alias)"
|
||||
>
|
||||
<el-button v-perms="['setting:sms:detail']" type="primary" link @click="handleSet(row.alias)">
|
||||
设置
|
||||
</el-button>
|
||||
</template>
|
||||
|
||||
@@ -27,15 +27,14 @@
|
||||
}" check-strictly :default-expand-all="true" placeholder="请选择上级部门" />
|
||||
</el-form-item>
|
||||
<el-form-item label="岗位" prop="postId">
|
||||
<el-select class="flex-1" clearable v-model="formData.postId" placeholder="请选择岗位" multiple>
|
||||
<el-select class="flex-1" clearable v-model="formData.postId" placeholder="请选择岗位">
|
||||
<el-option v-for="(item, index) in optionsData.post" :key="index" :label="item.name"
|
||||
:value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="角色" prop="role">
|
||||
<el-select v-model="formData.role" :disabled="isRoot" class="flex-1" clearable placeholder="请选择角色"
|
||||
multiple>
|
||||
<el-select v-model="formData.role" :disabled="isRoot" class="flex-1" clearable placeholder="请选择角色">
|
||||
<el-option v-if="isRoot" label="系统管理员" :value="0" />
|
||||
<el-option v-for="(item, index) in optionsData.role" :key="index" :label="item.name"
|
||||
:value="item.id" />
|
||||
@@ -197,6 +196,7 @@ const setFormData = async (row: any) => {
|
||||
const data = await adminDetail({
|
||||
id: row.id
|
||||
})
|
||||
formData.avatar = data.avatar
|
||||
for (const key in formData) {
|
||||
if (data[key] != null && data[key] != undefined) {
|
||||
//后端返回string类型做处理
|
||||
@@ -207,6 +207,7 @@ const setFormData = async (row: any) => {
|
||||
}
|
||||
//@ts-ignore
|
||||
formData[key] = data[key]
|
||||
|
||||
}
|
||||
Number(formData.deptId) == 0 && (formData.deptId = '')
|
||||
Number(formData.postId) == 0 && (formData.postId = '')
|
||||
|
||||
253
admin/src/views/setting/pay/config/edit.vue
Normal file
253
admin/src/views/setting/pay/config/edit.vue
Normal file
@@ -0,0 +1,253 @@
|
||||
<template>
|
||||
<div class="edit-popup">
|
||||
<popup ref="popupRef" :title="formData.display_name" :async="true" width="600px" @confirm="handleSubmit"
|
||||
@close="handleClose">
|
||||
<el-form ref="formRef" :model="formData" label-width="150px" :rules="formRules">
|
||||
<el-form-item label="支付方式">
|
||||
<el-radio :label="formData.name" :model-value="formData.name" />
|
||||
</el-form-item>
|
||||
<el-form-item label="显示名称" prop="display_name">
|
||||
<el-input v-model="formData.display_name" placeholder="请输入显示名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="显示图标" prop="image">
|
||||
<div>
|
||||
<material-picker :limit="1" :disabled="false" v-model="formData.icon" />
|
||||
<span class="form-tips">建议尺寸:200*200px</span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<template v-if="formData.name == 'wechat'">
|
||||
<el-form-item prop="config.interface_version" label="微信支付接口版本">
|
||||
<div>
|
||||
<el-radio-group v-model="formData.config.interface_version">
|
||||
<el-radio label="v3"></el-radio>
|
||||
</el-radio-group>
|
||||
<div class="form-tips">暂时只支持V3版本</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="商户类型" prop="config.merchant_type">
|
||||
<div>
|
||||
<el-radio-group v-model="formData.config.merchant_type">
|
||||
<el-radio label="ordinary_merchant">普通商户</el-radio>
|
||||
</el-radio-group>
|
||||
<div class="form-tips">
|
||||
暂时只支持普通商户类型,服务商户类型模式暂不支持
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="微信支付商户号" prop="config.mch_id">
|
||||
<div class="flex-1">
|
||||
<el-input v-model="formData.config.mch_id" placeholder="请输入微信支付商户号" />
|
||||
<div class="form-tips">微信支付商户号(MCHID)</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="商户API密钥" prop="config.pay_sign_key">
|
||||
<el-input v-model="formData.config.pay_sign_key" placeholder="请输入微信支付商户API密钥" />
|
||||
<span class="form-tips">微信支付商户API密钥(paySignKey)</span>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="微信支付证书" prop="config.api_client_cert">
|
||||
<el-input type="textarea" rows="3" v-model="formData.config.api_client_cert"
|
||||
placeholder="请输入微信支付证书" />
|
||||
|
||||
<span class="form-tips">
|
||||
微信支付证书(apiclient_cert.pem),前往微信商家平台生成并黏贴至此处
|
||||
</span>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="微信支付证书密钥" prop="config.api_client_key">
|
||||
<el-input type="textarea" rows="3" v-model="formData.config.api_client_key"
|
||||
placeholder="请输入微信支付证书密钥" />
|
||||
<span class="form-tips">
|
||||
微信支付证书密钥(apiclient_key.pem),前往微信商家平台生成并黏贴至此处
|
||||
</span>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="支付授权目录">
|
||||
<div>
|
||||
<div>
|
||||
<span class="mr-[20px]">{{ formData.domain }}</span>
|
||||
<el-button link type="primary" v-copy="formData.domain">
|
||||
复制
|
||||
</el-button>
|
||||
</div>
|
||||
<span class="form-tips">
|
||||
支付授权目录仅用于参考,复制后前往微信商家平台填写
|
||||
</span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</template>
|
||||
<template v-if="formData.name == 'alipay'">
|
||||
<el-form-item label="模式" prop="config.mode">
|
||||
<div>
|
||||
<el-radio-group v-model="formData.config.mode">
|
||||
<el-radio label="normal_mode">普通模式</el-radio>
|
||||
</el-radio-group>
|
||||
<div class="form-tips">暂时仅支持支付宝普通模式</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="商户类型" prop="config.merchant_type">
|
||||
<div>
|
||||
<el-radio-group v-model="formData.config.merchant_type">
|
||||
<el-radio label="ordinary_merchant">普通商户</el-radio>
|
||||
</el-radio-group>
|
||||
<div class="form-tips">
|
||||
暂时只支持普通商户类型,服务商户类型模式暂不支持
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="应用ID" prop="config.app_id">
|
||||
<div class="flex-1">
|
||||
<el-input v-model="formData.config.app_id" placeholder="请输入支付宝应用ID" />
|
||||
<span class="form-tips"> 支付宝应用APP_ID </span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="应用私钥" prop="config.private_key">
|
||||
<div class="flex-1">
|
||||
<el-input type="textarea" rows="3" v-model="formData.config.private_key"
|
||||
placeholder="请输入支付宝应用私钥" />
|
||||
<span class="form-tips">支付宝应用私钥(private_key) </span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="支付宝公钥" prop="config.ali_public_key">
|
||||
<div class="flex-1">
|
||||
<el-input type="textarea" rows="3" v-model="formData.config.ali_public_key"
|
||||
placeholder="请输入支付宝公钥" />
|
||||
<span class="form-tips">支付宝公钥(ali_public_key) </span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</template>
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<div>
|
||||
<el-input-number v-model="formData.sort" :min="0" :max="9999" />
|
||||
<div class="form-tips">默认为0, 数值越大越排前</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</popup>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import type { FormInstance, FormRules } from 'element-plus'
|
||||
import { getPayConfig, setPayConfig } from '@/api/setting/pay'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
|
||||
const formData = reactive({
|
||||
display_name: '',
|
||||
pay_way: 0,
|
||||
name: '',
|
||||
icon: '',
|
||||
sort: 0,
|
||||
remark: '',
|
||||
domain: '',
|
||||
config: {
|
||||
interface_version: '',
|
||||
merchant_type: '',
|
||||
mch_id: '',
|
||||
pay_sign_key: '',
|
||||
api_client_cert: '',
|
||||
api_client_key: '',
|
||||
mode: '',
|
||||
app_id: '',
|
||||
private_key: '',
|
||||
ali_public_key: ''
|
||||
}
|
||||
})
|
||||
|
||||
const formRules: FormRules = {
|
||||
name: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入显示名称'
|
||||
}
|
||||
],
|
||||
'config.mch_id': [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入微信支付商户号'
|
||||
}
|
||||
],
|
||||
'config.pay_sign_key': [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入微信支付商户API密钥'
|
||||
}
|
||||
],
|
||||
'config.api_client_cert': [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入微信支付证书'
|
||||
}
|
||||
],
|
||||
'config.api_client_key': [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入微信支付证书密钥'
|
||||
}
|
||||
],
|
||||
'config.app_id': [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入支付宝应用ID'
|
||||
}
|
||||
],
|
||||
'config.private_key': [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入支付宝应用私钥'
|
||||
}
|
||||
],
|
||||
'config.ali_public_key': [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入支付宝公钥'
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
const handleSubmit = async () => {
|
||||
await formRef.value?.validate()
|
||||
await setPayConfig(formData)
|
||||
popupRef.value?.close()
|
||||
emit('success')
|
||||
}
|
||||
|
||||
const open = () => {
|
||||
popupRef.value?.open()
|
||||
}
|
||||
|
||||
const setFormData = (data: Record<any, any>) => {
|
||||
for (const key in formData) {
|
||||
if (data[key] != null && data[key] != undefined) {
|
||||
//@ts-ignore
|
||||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await getPayConfig({
|
||||
name: row.name
|
||||
})
|
||||
setFormData(data)
|
||||
}
|
||||
|
||||
const handleClose = () => {
|
||||
emit('close')
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
setFormData,
|
||||
getDetail
|
||||
})
|
||||
</script>
|
||||
51
admin/src/views/setting/pay/config/index.vue
Normal file
51
admin/src/views/setting/pay/config/index.vue
Normal file
@@ -0,0 +1,51 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-card class="!border-none" shadow="never">
|
||||
<el-alert type="warning" title="温馨提示:设置系统支持的支付方式" :closable="false" show-icon />
|
||||
</el-card>
|
||||
<el-card shadow="never" class="mt-4 !border-none">
|
||||
<div>
|
||||
<el-table :data="payConfigList">
|
||||
<el-table-column prop="name" label="支付方式" min-width="150" />
|
||||
<el-table-column prop="display_name" label="显示名称" min-width="150" />
|
||||
<el-table-column label="图标" min-width="150">
|
||||
<template #default="{ row }">
|
||||
<el-image :src="row.icon" alt="图标" style="width: 34px; height: 34px" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="sort" label="排序" min-width="150" />
|
||||
<el-table-column label="操作" min-width="80" fixed="right">
|
||||
<!-- 操作 -->
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['setting:pay:config:set']" link type="primary" @click="handleEdit(row)">
|
||||
配置
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</el-card>
|
||||
<edit-popup v-if="showEdit" ref="editRef" @success="getConfig" @close="showEdit = false" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { getPayConfigLists } from '@/api/setting/pay'
|
||||
import EditPopup from './edit.vue'
|
||||
const payConfigList = ref<any[]>([])
|
||||
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
|
||||
const showEdit = ref(false)
|
||||
const getConfig = async () => {
|
||||
const data = await getPayConfigLists()
|
||||
console.log(data);
|
||||
|
||||
payConfigList.value = data
|
||||
}
|
||||
const handleEdit = async (data: any) => {
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open()
|
||||
editRef.value?.getDetail(data)
|
||||
}
|
||||
getConfig()
|
||||
</script>
|
||||
119
admin/src/views/setting/pay/method/index.vue
Normal file
119
admin/src/views/setting/pay/method/index.vue
Normal file
@@ -0,0 +1,119 @@
|
||||
<template>
|
||||
<div>
|
||||
<div>
|
||||
<el-button type="primary" v-perms="['setting:pay:way:set']" @click="handelSetupPayWay">
|
||||
设置支付方式
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
<el-card shadow="never" class="mt-4 !border-none" v-for="(value, scene) in payWay" :key="scene">
|
||||
<div>
|
||||
<div class="text-lg mb-[24px]" v-if="scene == PaySceneEnum.MP_WEIXIN">
|
||||
微信小程序
|
||||
<span class="form-tips ml-[10px]">在微信小程序中付款的场景</span>
|
||||
</div>
|
||||
<div class="text-lg mb-[24px]" v-if="scene == PaySceneEnum.OA">
|
||||
微信公众号
|
||||
<span class="form-tips ml-[10px]">
|
||||
在微信公众号H5页面中付款的场景,公众号类型一般为服务号
|
||||
</span>
|
||||
</div>
|
||||
<div class="text-lg mb-[24px]" v-if="scene == PaySceneEnum.H5">
|
||||
H5支付
|
||||
<span class="form-tips ml-[10px]">在浏览器H5页面中付款的场景</span>
|
||||
</div>
|
||||
<div class="text-lg mb-[24px]" v-if="scene == PaySceneEnum.PC">
|
||||
PC支付
|
||||
<span class="form-tips ml-[10px]">在浏览器PC页面中付款的场景</span>
|
||||
</div>
|
||||
<div class="text-lg mb-[24px]" v-if="scene == PaySceneEnum.APP">
|
||||
APP支付
|
||||
<span class="form-tips ml-[10px]">在APP付款的场景</span>
|
||||
</div>
|
||||
<el-table v-if="value.length" :data="value" style="width: 100%">
|
||||
<el-table-column label="图标" min-width="150">
|
||||
<template #default="{ row }">
|
||||
<el-image :src="row.icon" alt="图标" style="width: 34px; height: 34px" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="display_name" label="支付方式" min-width="150" />
|
||||
<el-table-column label="默认支付" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<div>
|
||||
<template v-if="setupPayWay">
|
||||
<el-radio v-model="row.is_default" :label="1" @change="changePayDefault($index, scene)">
|
||||
设为默认
|
||||
</el-radio>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-tag v-if="row.is_default == 1">默认</el-tag>
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="开启状态" min-width="150">
|
||||
<template #default="{ row }">
|
||||
<el-switch v-if="setupPayWay" v-model="row.status" :active-value="1" :inactive-value="0" />
|
||||
<span v-else>
|
||||
<el-tag style="font-weight: bold;" type="success" v-if="row.status == 1">开启</el-tag>
|
||||
<span v-else>关闭</span>
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</el-card>
|
||||
<footer-btns v-if="setupPayWay">
|
||||
<el-button @click="handleCancel">取消</el-button>
|
||||
<el-button type="primary" @click="handleSubmit">保存</el-button>
|
||||
</footer-btns>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { getPayWay, setPayWay } from '@/api/setting/pay'
|
||||
import { cloneDeep } from 'lodash'
|
||||
enum PaySceneEnum {
|
||||
MP_WEIXIN = 'applet',
|
||||
OA = 'oa',
|
||||
H5 = 'h5',
|
||||
PC = 'pc',
|
||||
APP = 'app'
|
||||
}
|
||||
const payWay = ref<Record<string, any[]>>({})
|
||||
const setupPayWay = ref(false)
|
||||
let defaultPayWay = {}
|
||||
const getConfig = async () => {
|
||||
payWay.value = await getPayWay()
|
||||
defaultPayWay = cloneDeep(payWay.value)
|
||||
|
||||
console.log(defaultPayWay);
|
||||
|
||||
|
||||
}
|
||||
|
||||
const handelSetupPayWay = () => {
|
||||
setupPayWay.value = true
|
||||
}
|
||||
|
||||
const changePayDefault = (index: number, scene: string) => {
|
||||
payWay.value[scene].forEach((item: any) => {
|
||||
item.is_default = 0
|
||||
})
|
||||
payWay.value[scene][index].is_default = 1
|
||||
}
|
||||
|
||||
const handleCancel = () => {
|
||||
payWay.value = cloneDeep(defaultPayWay)
|
||||
setupPayWay.value = false
|
||||
}
|
||||
|
||||
const handleSubmit = async () => {
|
||||
await setPayWay(payWay.value)
|
||||
setupPayWay.value = false
|
||||
getConfig()
|
||||
}
|
||||
|
||||
getConfig()
|
||||
</script>
|
||||
@@ -1,63 +1,36 @@
|
||||
<template>
|
||||
<div class="edit-popup">
|
||||
<popup
|
||||
ref="popupRef"
|
||||
title="设置存储"
|
||||
:async="true"
|
||||
width="550px"
|
||||
@confirm="handleSubmit"
|
||||
@close="handleClose"
|
||||
>
|
||||
<popup ref="popupRef" title="设置存储" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules">
|
||||
<el-form-item label="存储方式" prop="alias">
|
||||
<el-form-item label="存储方式" prop="engine">
|
||||
<div>
|
||||
<el-radio model-value>{{ getStorageInfo?.name }} </el-radio>
|
||||
<div class="form-tips">{{ getStorageInfo?.tips }}</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<div v-if="formData.alias !== 'local'">
|
||||
<div v-if="formData.engine !== 'local'">
|
||||
<el-form-item label=" 存储空间名称" prop="bucket">
|
||||
<div class="flex-1">
|
||||
<el-input
|
||||
v-model="formData.bucket"
|
||||
placeholder="请输入存储空间名称(Bucket)"
|
||||
clearable
|
||||
/>
|
||||
<el-input v-model="formData.bucket" placeholder="请输入存储空间名称(Bucket)" clearable />
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="ACCESS_KEY" prop="accessKey">
|
||||
<el-input
|
||||
v-model="formData.accessKey"
|
||||
placeholder="请输入ACCESS_KEY(AK)"
|
||||
clearable
|
||||
/>
|
||||
<el-form-item label="ACCESS_KEY" prop="access_key">
|
||||
<el-input v-model="formData.access_key" placeholder="请输入ACCESS_KEY(AK)" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item label="SECRET_KEY" prop="secretKey">
|
||||
<el-input
|
||||
v-model="formData.secretKey"
|
||||
placeholder="请输入SECRET_KEY(SK)"
|
||||
clearable
|
||||
/>
|
||||
<el-form-item label="SECRET_KEY" prop="secret_key">
|
||||
<el-input v-model="formData.secret_key" placeholder="请输入SECRET_KEY(SK)" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item label="空间域名" prop="domain">
|
||||
<div class="flex-1">
|
||||
<div>
|
||||
<el-input
|
||||
v-model="formData.domain"
|
||||
placeholder="请输入空间域名(Domain)"
|
||||
clearable
|
||||
/>
|
||||
<el-input v-model="formData.domain" placeholder="请输入空间域名(Domain)" clearable />
|
||||
</div>
|
||||
<div class="form-tips">
|
||||
请补全http://或https://,例如https://static.cloud.com
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-if="formData.alias == StorageEnum.QCLOUD"
|
||||
label="REGION"
|
||||
prop="region"
|
||||
>
|
||||
<el-form-item v-if="formData.engine == StorageEnum.QCLOUD" label="REGION" prop="region">
|
||||
<el-input v-model="formData.region" placeholder="请输入region" clearable />
|
||||
</el-form-item>
|
||||
</div>
|
||||
@@ -76,7 +49,6 @@ import { storageSetup } from '@/api/setting/storage'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { storageDetail } from '@/api/setting/storage'
|
||||
import feedback from '@/utils/feedback'
|
||||
enum StorageEnum {
|
||||
LOCAL = 'local', // 本地
|
||||
QINIU = 'qiniu', // 七牛云
|
||||
@@ -88,10 +60,12 @@ const emit = defineEmits(['success'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const formData = reactive({
|
||||
alias: '',
|
||||
name: '',
|
||||
describe: '',
|
||||
engine: '',
|
||||
bucket: '',
|
||||
accessKey: '',
|
||||
secretKey: '',
|
||||
access_key: '',
|
||||
secret_key: '',
|
||||
domain: '',
|
||||
region: '', // 腾讯云需要
|
||||
status: 0
|
||||
@@ -128,14 +102,14 @@ const formRules = {
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
accessKey: [
|
||||
access_key: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入ACCESS_KEY',
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
secretKey: [
|
||||
secret_key: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入SECRET_KEY',
|
||||
@@ -159,20 +133,21 @@ const formRules = {
|
||||
}
|
||||
|
||||
const getStorageInfo = computed(() => {
|
||||
return storageArr.find((item) => item.type == formData.alias)
|
||||
return storageArr.find((item) => item.type == formData.engine)
|
||||
})
|
||||
|
||||
const handleSubmit = async () => {
|
||||
console.log(formData);
|
||||
|
||||
await formRef.value?.validate()
|
||||
await storageSetup(formData)
|
||||
feedback.msgSuccess('操作成功')
|
||||
popupRef.value?.close()
|
||||
emit('success')
|
||||
}
|
||||
|
||||
const getDetail = async () => {
|
||||
const data = await storageDetail({
|
||||
alias: formData.alias
|
||||
engine: formData.engine
|
||||
})
|
||||
for (const key in data) {
|
||||
//@ts-ignore
|
||||
@@ -181,7 +156,7 @@ const getDetail = async () => {
|
||||
}
|
||||
|
||||
const open = (type: string) => {
|
||||
formData.alias = type
|
||||
formData.engine = type
|
||||
popupRef.value?.open()
|
||||
getDetail()
|
||||
}
|
||||
|
||||
@@ -1,27 +1,30 @@
|
||||
<template>
|
||||
<div class="storage">
|
||||
<el-card class="!border-none" shadow="never">
|
||||
<el-alert type="warning" title="温馨提示:1.切换存储方式后,需要将资源文件传输至新的存储端;2.请勿随意切换存储方式,可能导致图片无法查看" :closable="false" show-icon></el-alert>
|
||||
</el-card>
|
||||
<el-card class="!border-none mt-4" shadow="never" v-loading="state.loading">
|
||||
<el-table size="large" :data="state.lists">
|
||||
<el-table-column label="储存方式" prop="alias" min-width="120" />
|
||||
<el-table-column label="储存位置" prop="describe" min-width="160" />
|
||||
<el-table-column label="状态" min-width="80">
|
||||
<template #default="{ row }">
|
||||
<el-tag v-if="row.status == 1">开启</el-tag>
|
||||
<el-tag type="danger" v-else>关闭</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" min-width="80" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['setting:storage:edit']" type="primary" link @click="handleSet(row.alias)"> 设置 </el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
<edit-popup ref="editRef" @success="getLists" />
|
||||
</div>
|
||||
<div class="storage">
|
||||
<el-card class="!border-none" shadow="never">
|
||||
<el-alert type="warning" title="温馨提示:1.切换存储方式后,需要将资源文件传输至新的存储端;2.请勿随意切换存储方式,可能导致图片无法查看" :closable="false"
|
||||
show-icon></el-alert>
|
||||
</el-card>
|
||||
<el-card class="!border-none mt-4" shadow="never" v-loading="state.loading">
|
||||
<el-table size="large" :data="state.lists">
|
||||
<el-table-column label="储存方式" prop="name" min-width="120" />
|
||||
<el-table-column label="储存位置" prop="describe" min-width="160" />
|
||||
<el-table-column label="状态" min-width="80">
|
||||
<template #default="{ row }">
|
||||
<el-tag v-if="row.status == 1">开启</el-tag>
|
||||
<el-tag type="danger" v-else>关闭</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" min-width="80" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['setting:storage:edit']" type="primary" link @click="handleSet(row.engine)">
|
||||
设置
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
<edit-popup ref="editRef" @success="getLists" />
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup name="storage">
|
||||
import { storageLists } from '@/api/setting/storage'
|
||||
@@ -30,23 +33,23 @@ const editRef = shallowRef<InstanceType<typeof EditPopup>>()
|
||||
|
||||
// 列表数据
|
||||
const state = reactive({
|
||||
loading: false,
|
||||
lists: []
|
||||
loading: false,
|
||||
lists: []
|
||||
})
|
||||
|
||||
// 获取存储引擎列表数据
|
||||
const getLists = async () => {
|
||||
try {
|
||||
state.loading = true
|
||||
state.lists = await storageLists()
|
||||
state.loading = false
|
||||
} catch (error) {
|
||||
state.loading = false
|
||||
}
|
||||
try {
|
||||
state.loading = true
|
||||
state.lists = await storageLists()
|
||||
state.loading = false
|
||||
} catch (error) {
|
||||
state.loading = false
|
||||
}
|
||||
}
|
||||
|
||||
const handleSet = (alias: string) => {
|
||||
editRef.value?.open(alias)
|
||||
const handleSet = (engine: string) => {
|
||||
editRef.value?.open(engine)
|
||||
}
|
||||
|
||||
getLists()
|
||||
|
||||
@@ -17,11 +17,7 @@
|
||||
|
||||
<el-form-item label="强制绑定手机" prop="forceBindMobile">
|
||||
<div>
|
||||
<el-switch
|
||||
v-model="formData.forceBindMobile"
|
||||
:active-value="1"
|
||||
:inactive-value="0"
|
||||
/>
|
||||
<el-switch v-model="formData.forceBindMobile" :active-value="1" :inactive-value="0" />
|
||||
<span class="mt-1 ml-2">{{
|
||||
formData.forceBindMobile ? '开启' : '关闭'
|
||||
}}</span>
|
||||
@@ -35,11 +31,7 @@
|
||||
|
||||
<el-form-item label="政策协议" prop="openAgreement">
|
||||
<div>
|
||||
<el-switch
|
||||
v-model="formData.openAgreement"
|
||||
:active-value="1"
|
||||
:inactive-value="0"
|
||||
/>
|
||||
<el-switch v-model="formData.openAgreement" :active-value="1" :inactive-value="0" />
|
||||
<span class="mt-1 ml-2">
|
||||
{{ formData.openAgreement ? '开启' : '关闭' }}
|
||||
</span>
|
||||
@@ -54,11 +46,7 @@
|
||||
|
||||
<el-form-item label="第三方登录" prop="openOtherAuth">
|
||||
<div>
|
||||
<el-switch
|
||||
v-model="formData.openOtherAuth"
|
||||
:active-value="1"
|
||||
:inactive-value="0"
|
||||
/>
|
||||
<el-switch v-model="formData.openOtherAuth" :active-value="1" :inactive-value="0" />
|
||||
<span class="mt-1 ml-2">
|
||||
{{ formData.openOtherAuth ? '开启' : '关闭' }}
|
||||
</span>
|
||||
@@ -154,19 +142,14 @@ const getData = async () => {
|
||||
|
||||
// 保存登录注册数据
|
||||
const handleSubmit = async () => {
|
||||
const loginWay = formData.loginWay.join('')
|
||||
const autoLoginAuth = formData.autoLoginAuth.join('')
|
||||
const loginWay = formData.loginWay
|
||||
const autoLoginAuth = formData.autoLoginAuth
|
||||
|
||||
await formRef.value?.validate()
|
||||
try {
|
||||
await setLogin({
|
||||
...formData,
|
||||
loginWay: loginWay.length == 2 ? `${loginWay[0]},${loginWay[1]}` : loginWay,
|
||||
autoLoginAuth:
|
||||
autoLoginAuth.length == 2
|
||||
? `${autoLoginAuth[0]},${autoLoginAuth[1]}`
|
||||
: autoLoginAuth
|
||||
})
|
||||
await setLogin(
|
||||
formData
|
||||
)
|
||||
feedback.msgSuccess('操作成功')
|
||||
getData()
|
||||
} catch (error) {
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<el-form ref="formRef" :model="formData" label-width="120px">
|
||||
<el-form-item label="用户默认头像">
|
||||
<div>
|
||||
<material-picker v-model="formData.defaultAvatar" :limit="1" />
|
||||
<material-picker v-model="formData.default_avatar" :limit="1" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
@@ -19,7 +19,7 @@
|
||||
</el-form>
|
||||
</el-card>
|
||||
|
||||
<footer-btns v-perms="['setting:user:save']">
|
||||
<footer-btns v-perms="['setting:recharge:set']">
|
||||
<el-button type="primary" @click="handleSubmit">保存</el-button>
|
||||
</footer-btns>
|
||||
</div>
|
||||
@@ -32,7 +32,7 @@ import feedback from '@/utils/feedback'
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
defaultAvatar: '' // 用户默认头像
|
||||
default_avatar: '' as string // 用户默认头像
|
||||
})
|
||||
|
||||
// 获取用户设置数据
|
||||
|
||||
@@ -2,13 +2,7 @@
|
||||
<template>
|
||||
<div class="user-setting">
|
||||
<el-card class="!border-none" shadow="never">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
class="ls-form"
|
||||
:model="formData"
|
||||
:rules="rules"
|
||||
label-width="100px"
|
||||
>
|
||||
<el-form ref="formRef" class="ls-form" :model="formData" :rules="rules" label-width="100px">
|
||||
<el-form-item label="头像:" prop="avatar">
|
||||
<material-picker v-model="formData.avatar" :limit="1" />
|
||||
</el-form-item>
|
||||
@@ -27,34 +21,22 @@
|
||||
|
||||
<el-form-item label="当前密码:" prop="currPassword">
|
||||
<div class="w-80">
|
||||
<el-input
|
||||
v-model.trim="formData.currPassword"
|
||||
placeholder="修改密码时必填, 不修改密码时留空"
|
||||
type="password"
|
||||
show-password
|
||||
/>
|
||||
<el-input v-model.trim="formData.currPassword" placeholder="修改密码时必填, 不修改密码时留空" type="password"
|
||||
show-password />
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="新的密码:" prop="password">
|
||||
<div class="w-80">
|
||||
<el-input
|
||||
v-model.trim="formData.password"
|
||||
placeholder="修改密码时必填, 不修改密码时留空"
|
||||
type="password"
|
||||
show-password
|
||||
/>
|
||||
<el-input v-model.trim="formData.password" placeholder="修改密码时必填, 不修改密码时留空" type="password"
|
||||
show-password />
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="确定密码:" prop="passwordConfirm">
|
||||
<div class="w-80">
|
||||
<el-input
|
||||
v-model.trim="formData.passwordConfirm"
|
||||
placeholder="修改密码时必填, 不修改密码时留空"
|
||||
type="password"
|
||||
show-password
|
||||
/>
|
||||
<el-input v-model.trim="formData.passwordConfirm" placeholder="修改密码时必填, 不修改密码时留空" type="password"
|
||||
show-password />
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
@@ -2,6 +2,7 @@ package routers
|
||||
|
||||
import (
|
||||
"likeadmin/admin/routers/common"
|
||||
"likeadmin/admin/routers/finance"
|
||||
"likeadmin/admin/routers/monitor"
|
||||
"likeadmin/admin/routers/setting"
|
||||
"likeadmin/admin/routers/system"
|
||||
@@ -22,6 +23,12 @@ var InitRouters = []*core.GroupBase{
|
||||
setting.ProtocolGroup,
|
||||
setting.StorageGroup,
|
||||
setting.WebsiteGroup,
|
||||
setting.NoticeGroup,
|
||||
setting.SmsGroup,
|
||||
setting.RechargeGroup,
|
||||
setting.UserSettingGroup,
|
||||
setting.LoginSettingGroup,
|
||||
setting.PayGroup,
|
||||
// system
|
||||
system.AdminGroup,
|
||||
system.DeptGroup,
|
||||
@@ -31,4 +38,9 @@ var InitRouters = []*core.GroupBase{
|
||||
system.PostGroup,
|
||||
system.RoleGroup,
|
||||
system.UserGroup,
|
||||
|
||||
// finance
|
||||
finance.OrderGroup,
|
||||
finance.AccountLogGroup,
|
||||
finance.RefundRecordGroup,
|
||||
}
|
||||
|
||||
50
server/admin/routers/finance/accountLog.go
Normal file
50
server/admin/routers/finance/accountLog.go
Normal file
@@ -0,0 +1,50 @@
|
||||
package finance
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"likeadmin/admin/schemas/req"
|
||||
"likeadmin/admin/service/finance"
|
||||
"likeadmin/constant"
|
||||
"likeadmin/core"
|
||||
"likeadmin/core/request"
|
||||
"likeadmin/core/response"
|
||||
"likeadmin/middleware"
|
||||
"likeadmin/util"
|
||||
)
|
||||
|
||||
var AccountLogGroup = core.Group("/finance/account_log", newLogHandler, regLog, middleware.TokenAuth())
|
||||
|
||||
func newLogHandler(srv finance.IUserAccountLogService) *logHandler {
|
||||
return &logHandler{srv: srv}
|
||||
}
|
||||
|
||||
func regLog(rg *gin.RouterGroup, group *core.GroupBase) error {
|
||||
return group.Reg(func(handle *logHandler) {
|
||||
rg.GET("/lists", handle.list)
|
||||
rg.GET("/getUmChangeType", handle.getUmChangeType)
|
||||
})
|
||||
}
|
||||
|
||||
type logHandler struct {
|
||||
srv finance.IUserAccountLogService
|
||||
}
|
||||
|
||||
// list log列表
|
||||
func (h logHandler) list(c *gin.Context) {
|
||||
var page request.PageReq
|
||||
var listReq req.UserAccountLogListReq
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &page)) {
|
||||
return
|
||||
}
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
|
||||
return
|
||||
}
|
||||
res, err := h.srv.List(c, page, listReq)
|
||||
response.CheckAndRespWithData(c, res, err)
|
||||
}
|
||||
|
||||
// getUmChangeType 列表
|
||||
func (h logHandler) getUmChangeType(c *gin.Context) {
|
||||
|
||||
response.OkWithData(c, constant.ChangeTypeDesc)
|
||||
}
|
||||
55
server/admin/routers/finance/recharge.go
Normal file
55
server/admin/routers/finance/recharge.go
Normal file
@@ -0,0 +1,55 @@
|
||||
package finance
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"likeadmin/admin/schemas/req"
|
||||
"likeadmin/admin/service/finance"
|
||||
"likeadmin/core"
|
||||
"likeadmin/core/request"
|
||||
"likeadmin/core/response"
|
||||
"likeadmin/middleware"
|
||||
"likeadmin/util"
|
||||
)
|
||||
|
||||
var OrderGroup = core.Group("/finance/recharge", newOrderHandler, regOrder, middleware.TokenAuth())
|
||||
|
||||
func newOrderHandler(srv finance.IRechargeOrderService) *orderHandler {
|
||||
return &orderHandler{srv: srv}
|
||||
}
|
||||
|
||||
func regOrder(rg *gin.RouterGroup, group *core.GroupBase) error {
|
||||
return group.Reg(func(handle *orderHandler) {
|
||||
rg.GET("/lists", handle.list)
|
||||
rg.POST("/refund", handle.refund)
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
type orderHandler struct {
|
||||
srv finance.IRechargeOrderService
|
||||
}
|
||||
|
||||
// list order列表
|
||||
func (h orderHandler) list(c *gin.Context) {
|
||||
var page request.PageReq
|
||||
var listReq req.RechargeOrderListReq
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &page)) {
|
||||
return
|
||||
}
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
|
||||
return
|
||||
}
|
||||
res, err := h.srv.List(c, page, listReq)
|
||||
response.CheckAndRespWithData(c, res, err)
|
||||
}
|
||||
|
||||
// 充值订单退款
|
||||
func (h orderHandler) refund(c *gin.Context) {
|
||||
var refundReq req.RechargeOrderRefundReq
|
||||
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &refundReq)) {
|
||||
return
|
||||
}
|
||||
err := h.srv.Refund(c, refundReq)
|
||||
response.CheckAndResp(c, err)
|
||||
}
|
||||
63
server/admin/routers/finance/refundRecord.go
Normal file
63
server/admin/routers/finance/refundRecord.go
Normal file
@@ -0,0 +1,63 @@
|
||||
package finance
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"likeadmin/admin/schemas/req"
|
||||
"likeadmin/admin/service/finance"
|
||||
"likeadmin/core"
|
||||
"likeadmin/core/request"
|
||||
"likeadmin/core/response"
|
||||
"likeadmin/middleware"
|
||||
"likeadmin/util"
|
||||
)
|
||||
|
||||
var RefundRecordGroup = core.Group("/finance/refund", newRecordHandler, regRecord, middleware.TokenAuth())
|
||||
|
||||
func newRecordHandler(srv finance.IRefundRecordService, refundLogSrv finance.IRefundLogService) *recordHandler {
|
||||
return &recordHandler{srv: srv, refundLogSrv: refundLogSrv}
|
||||
}
|
||||
|
||||
func regRecord(rg *gin.RouterGroup, group *core.GroupBase) error {
|
||||
return group.Reg(func(handle *recordHandler) {
|
||||
rg.GET("/record/list", handle.list)
|
||||
rg.GET("/record/stat", handle.stat)
|
||||
rg.GET("/log", handle.refundLog)
|
||||
})
|
||||
}
|
||||
|
||||
type recordHandler struct {
|
||||
srv finance.IRefundRecordService
|
||||
refundLogSrv finance.IRefundLogService
|
||||
}
|
||||
|
||||
// list record列表
|
||||
func (hd recordHandler) list(c *gin.Context) {
|
||||
var page request.PageReq
|
||||
var listReq req.RefundRecordListReq
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &page)) {
|
||||
return
|
||||
}
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
|
||||
return
|
||||
}
|
||||
res, err := hd.srv.List(c, page, listReq)
|
||||
response.CheckAndRespWithData(c, res, err)
|
||||
}
|
||||
|
||||
// 退款统计
|
||||
func (hd recordHandler) stat(c *gin.Context) {
|
||||
|
||||
res, err := hd.srv.Stat(c)
|
||||
response.CheckAndRespWithData(c, res, err)
|
||||
}
|
||||
|
||||
// 退款日志
|
||||
func (hd recordHandler) refundLog(c *gin.Context) {
|
||||
var listReq req.RefundLogListReq
|
||||
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
|
||||
return
|
||||
}
|
||||
res, err := hd.refundLogSrv.List(c, listReq)
|
||||
response.CheckAndRespWithData(c, res, err)
|
||||
}
|
||||
41
server/admin/routers/setting/login.go
Normal file
41
server/admin/routers/setting/login.go
Normal file
@@ -0,0 +1,41 @@
|
||||
package setting
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"likeadmin/admin/schemas/req"
|
||||
"likeadmin/admin/service/setting"
|
||||
"likeadmin/core"
|
||||
"likeadmin/core/response"
|
||||
"likeadmin/middleware"
|
||||
"likeadmin/util"
|
||||
)
|
||||
|
||||
var LoginSettingGroup = core.Group("/setting/login", newLoginSettingHandler, regLoginSetting, middleware.TokenAuth())
|
||||
|
||||
func newLoginSettingHandler(srv setting.ISettingLoginService) *loginHandler {
|
||||
return &loginHandler{srv: srv}
|
||||
}
|
||||
|
||||
func regLoginSetting(rg *gin.RouterGroup, group *core.GroupBase) error {
|
||||
return group.Reg(func(handle *loginHandler) {
|
||||
rg.GET("/detail", handle.Detail)
|
||||
rg.POST("/save", handle.Save)
|
||||
})
|
||||
}
|
||||
|
||||
type loginHandler struct {
|
||||
srv setting.ISettingLoginService
|
||||
}
|
||||
|
||||
func (h loginHandler) Detail(c *gin.Context) {
|
||||
res, err := h.srv.Detail()
|
||||
response.CheckAndRespWithData(c, res, err)
|
||||
}
|
||||
|
||||
func (h loginHandler) Save(c *gin.Context) {
|
||||
var loginReq req.SettingLoginReq
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &loginReq)) {
|
||||
return
|
||||
}
|
||||
response.CheckAndResp(c, h.srv.Save(loginReq))
|
||||
}
|
||||
64
server/admin/routers/setting/notice.go
Normal file
64
server/admin/routers/setting/notice.go
Normal file
@@ -0,0 +1,64 @@
|
||||
package setting
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"likeadmin/admin/schemas/req"
|
||||
"likeadmin/admin/service/setting"
|
||||
"likeadmin/core"
|
||||
"likeadmin/core/request"
|
||||
"likeadmin/core/response"
|
||||
"likeadmin/middleware"
|
||||
"likeadmin/util"
|
||||
)
|
||||
|
||||
var NoticeGroup = core.Group("/setting/notice", newSettingHandler, regSetting, middleware.TokenAuth())
|
||||
|
||||
func newSettingHandler(srv setting.INoticeSettingService) *settingHandler {
|
||||
return &settingHandler{srv: srv}
|
||||
}
|
||||
|
||||
func regSetting(rg *gin.RouterGroup, group *core.GroupBase) error {
|
||||
return group.Reg(func(handle *settingHandler) {
|
||||
rg.GET("/list", handle.list)
|
||||
rg.GET("/detail", handle.detail)
|
||||
rg.POST("/save", handle.edit)
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
type settingHandler struct {
|
||||
srv setting.INoticeSettingService
|
||||
}
|
||||
|
||||
// list setting列表
|
||||
func (hd settingHandler) list(c *gin.Context) {
|
||||
var page request.PageReq
|
||||
var listReq req.NoticeSettingListReq
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &page)) {
|
||||
return
|
||||
}
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
|
||||
return
|
||||
}
|
||||
res, err := hd.srv.List(c, page, listReq)
|
||||
response.CheckAndRespWithData(c, res, err)
|
||||
}
|
||||
|
||||
// detail setting详情
|
||||
func (hd settingHandler) detail(c *gin.Context) {
|
||||
var detailReq req.NoticeSettingDetailReq
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &detailReq)) {
|
||||
return
|
||||
}
|
||||
res, err := hd.srv.Detail(c, detailReq.Id)
|
||||
response.CheckAndRespWithData(c, res, err)
|
||||
}
|
||||
|
||||
// edit setting编辑
|
||||
func (hd settingHandler) edit(c *gin.Context) {
|
||||
var editReq req.NoticeSettingEditReq
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &editReq)) {
|
||||
return
|
||||
}
|
||||
response.CheckAndResp(c, hd.srv.Edit(c, editReq))
|
||||
}
|
||||
72
server/admin/routers/setting/pay.go
Normal file
72
server/admin/routers/setting/pay.go
Normal file
@@ -0,0 +1,72 @@
|
||||
package setting
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"likeadmin/admin/schemas/req"
|
||||
"likeadmin/admin/service/setting"
|
||||
"likeadmin/core"
|
||||
"likeadmin/core/response"
|
||||
"likeadmin/middleware"
|
||||
"likeadmin/util"
|
||||
)
|
||||
|
||||
var PayGroup = core.Group("/setting/pay", newSettingPayHandler, regSettingPay, middleware.TokenAuth())
|
||||
|
||||
func newSettingPayHandler(srv setting.IPaySettingService) *settingPayHandler {
|
||||
return &settingPayHandler{srv: srv}
|
||||
}
|
||||
|
||||
func regSettingPay(rg *gin.RouterGroup, group *core.GroupBase) error {
|
||||
return group.Reg(func(handle *settingPayHandler) {
|
||||
rg.GET("/config/lists", handle.list)
|
||||
rg.GET("/config/get", handle.detail)
|
||||
rg.POST("/config/set", handle.set)
|
||||
rg.GET("/way/get", handle.getWay)
|
||||
rg.POST("/way/set", handle.setWay)
|
||||
})
|
||||
}
|
||||
|
||||
type settingPayHandler struct {
|
||||
srv setting.IPaySettingService
|
||||
}
|
||||
|
||||
// list setting列表
|
||||
func (hd settingPayHandler) list(c *gin.Context) {
|
||||
res, err := hd.srv.List(c)
|
||||
response.CheckAndRespWithData(c, res, err)
|
||||
}
|
||||
|
||||
// detail setting详情
|
||||
func (hd settingPayHandler) detail(c *gin.Context) {
|
||||
var detailReq req.PaySettingDetailReq
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &detailReq)) {
|
||||
return
|
||||
}
|
||||
res, err := hd.srv.Detail(c, detailReq.Name)
|
||||
|
||||
response.CheckAndRespWithData(c, res, err)
|
||||
}
|
||||
|
||||
func (hd settingPayHandler) set(c *gin.Context) {
|
||||
var editReq req.PaySettingEditReq
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &editReq)) {
|
||||
return
|
||||
}
|
||||
response.CheckAndResp(c, hd.srv.Set(c, editReq))
|
||||
}
|
||||
|
||||
// getWay 支付场景的支付获取
|
||||
func (hd settingPayHandler) getWay(c *gin.Context) {
|
||||
res, err := hd.srv.GetWay(c)
|
||||
response.CheckAndRespWithData(c, res, err)
|
||||
}
|
||||
|
||||
// SetWay 支付场景的支付设置
|
||||
func (hd settingPayHandler) setWay(c *gin.Context) {
|
||||
var setReq map[string][]req.PaySceneSetReq
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &setReq)) {
|
||||
return
|
||||
}
|
||||
err := hd.srv.SetWay(c, setReq)
|
||||
response.CheckAndResp(c, err)
|
||||
}
|
||||
44
server/admin/routers/setting/recharge.go
Normal file
44
server/admin/routers/setting/recharge.go
Normal file
@@ -0,0 +1,44 @@
|
||||
package setting
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"likeadmin/admin/schemas/req"
|
||||
"likeadmin/admin/service/setting"
|
||||
"likeadmin/core"
|
||||
"likeadmin/core/response"
|
||||
"likeadmin/middleware"
|
||||
"likeadmin/util"
|
||||
)
|
||||
|
||||
var RechargeGroup = core.Group("/setting/recharge", newRechargeHandler, regRecharge, middleware.TokenAuth())
|
||||
|
||||
func newRechargeHandler(srv setting.IRechargeSettingService) *rechargeHandler {
|
||||
return &rechargeHandler{srv: srv}
|
||||
}
|
||||
|
||||
func regRecharge(rg *gin.RouterGroup, group *core.GroupBase) error {
|
||||
return group.Reg(func(handle *rechargeHandler) {
|
||||
rg.GET("/get", handle.detail)
|
||||
rg.POST("/set", handle.edit)
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
type rechargeHandler struct {
|
||||
srv setting.IRechargeSettingService
|
||||
}
|
||||
|
||||
func (h rechargeHandler) detail(c *gin.Context) {
|
||||
|
||||
res, err := h.srv.Detail(c)
|
||||
response.CheckAndRespWithData(c, res, err)
|
||||
}
|
||||
|
||||
// edit setting编辑
|
||||
func (h rechargeHandler) edit(c *gin.Context) {
|
||||
var editReq req.RechargeSettingEditReq
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &editReq)) {
|
||||
return
|
||||
}
|
||||
response.CheckAndResp(c, h.srv.Edit(c, editReq))
|
||||
}
|
||||
56
server/admin/routers/setting/sms.go
Normal file
56
server/admin/routers/setting/sms.go
Normal file
@@ -0,0 +1,56 @@
|
||||
package setting
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"likeadmin/admin/schemas/req"
|
||||
"likeadmin/admin/service/setting"
|
||||
"likeadmin/core"
|
||||
"likeadmin/core/response"
|
||||
"likeadmin/middleware"
|
||||
"likeadmin/util"
|
||||
)
|
||||
|
||||
var SmsGroup = core.Group("/setting/sms", newSmsHandler, regSms, middleware.TokenAuth())
|
||||
|
||||
func newSmsHandler(srv setting.ISmsSettingService) *smsHandler {
|
||||
return &smsHandler{srv: srv}
|
||||
}
|
||||
|
||||
func regSms(rg *gin.RouterGroup, group *core.GroupBase) error {
|
||||
return group.Reg(func(handle *smsHandler) {
|
||||
rg.GET("/list", handle.list)
|
||||
rg.GET("/detail", handle.detail)
|
||||
rg.POST("/save", handle.edit)
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
type smsHandler struct {
|
||||
srv setting.ISmsSettingService
|
||||
}
|
||||
|
||||
// list sms列表
|
||||
func (hd smsHandler) list(c *gin.Context) {
|
||||
res, err := hd.srv.List()
|
||||
response.CheckAndRespWithData(c, res, err)
|
||||
}
|
||||
|
||||
// detail setting详情
|
||||
func (hd smsHandler) detail(c *gin.Context) {
|
||||
var detailReq req.SmsSettingDetailReq
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &detailReq)) {
|
||||
return
|
||||
}
|
||||
res, err := hd.srv.Detail(c, detailReq.Name)
|
||||
|
||||
response.CheckAndRespWithData(c, res, err)
|
||||
}
|
||||
|
||||
// edit setting编辑
|
||||
func (hd smsHandler) edit(c *gin.Context) {
|
||||
var editReq req.SmsSettingEditReq
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &editReq)) {
|
||||
return
|
||||
}
|
||||
response.CheckAndResp(c, hd.srv.Edit(c, editReq))
|
||||
}
|
||||
@@ -29,23 +29,23 @@ type storageHandler struct {
|
||||
srv setting.ISettingStorageService
|
||||
}
|
||||
|
||||
//list 存储列表
|
||||
// list 存储列表
|
||||
func (sh storageHandler) list(c *gin.Context) {
|
||||
res, err := sh.srv.List()
|
||||
response.CheckAndRespWithData(c, res, err)
|
||||
}
|
||||
|
||||
//detail 存储详情
|
||||
// detail 存储详情
|
||||
func (sh storageHandler) detail(c *gin.Context) {
|
||||
var detailReq req.SettingStorageDetailReq
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &detailReq)) {
|
||||
return
|
||||
}
|
||||
res, err := sh.srv.Detail(detailReq.Alias)
|
||||
res, err := sh.srv.Detail(detailReq.Engine)
|
||||
response.CheckAndRespWithData(c, res, err)
|
||||
}
|
||||
|
||||
//edit 存储编辑
|
||||
// edit 存储编辑
|
||||
func (sh storageHandler) edit(c *gin.Context) {
|
||||
var editReq req.SettingStorageEditReq
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyBody(c, &editReq)) {
|
||||
@@ -54,7 +54,7 @@ func (sh storageHandler) edit(c *gin.Context) {
|
||||
response.CheckAndResp(c, sh.srv.Edit(editReq))
|
||||
}
|
||||
|
||||
//change 存储切换
|
||||
// change 存储切换
|
||||
func (sh storageHandler) change(c *gin.Context) {
|
||||
var changeReq req.SettingStorageChangeReq
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyBody(c, &changeReq)) {
|
||||
|
||||
43
server/admin/routers/setting/user.go
Normal file
43
server/admin/routers/setting/user.go
Normal file
@@ -0,0 +1,43 @@
|
||||
package setting
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"likeadmin/admin/schemas/req"
|
||||
"likeadmin/admin/service/setting"
|
||||
"likeadmin/core"
|
||||
"likeadmin/core/response"
|
||||
"likeadmin/middleware"
|
||||
"likeadmin/util"
|
||||
)
|
||||
|
||||
var UserSettingGroup = core.Group("/setting/user", newUserHandler, regUser, middleware.TokenAuth())
|
||||
|
||||
func newUserHandler(srv setting.IUserService) *userHandler {
|
||||
return &userHandler{srv: srv}
|
||||
}
|
||||
|
||||
func regUser(rg *gin.RouterGroup, group *core.GroupBase) error {
|
||||
return group.Reg(func(handle *userHandler) {
|
||||
rg.GET("/detail", handle.detail)
|
||||
rg.POST("/save", handle.edit)
|
||||
})
|
||||
}
|
||||
|
||||
type userHandler struct {
|
||||
srv setting.IUserService
|
||||
}
|
||||
|
||||
// detail user详情
|
||||
func (uh userHandler) detail(c *gin.Context) {
|
||||
res, err := uh.srv.Get(c)
|
||||
response.CheckAndRespWithData(c, res, err)
|
||||
}
|
||||
|
||||
// detail user详情
|
||||
func (uh userHandler) edit(c *gin.Context) {
|
||||
var userSetReq req.UserSetReq
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &userSetReq)) {
|
||||
return
|
||||
}
|
||||
response.CheckAndResp(c, uh.srv.Set(c, userSetReq))
|
||||
}
|
||||
40
server/admin/schemas/req/finance.go
Normal file
40
server/admin/schemas/req/finance.go
Normal file
@@ -0,0 +1,40 @@
|
||||
package req
|
||||
|
||||
// RechargeOrderListReq 【请填写功能名称】列表参数
|
||||
type RechargeOrderListReq struct {
|
||||
Sn string `form:"sn"` // 订单编号
|
||||
UserInfo string `form:"user_info"` // 关键字
|
||||
PayWay int32 `form:"pay_way"` // 支付方式 2-微信支付 3-支付宝支付
|
||||
PayStatus int32 `form:"pay_status"` // 支付状态:0-待支付;1-已支付
|
||||
StartTime string `form:"start_time"` // 下单开始时间
|
||||
EndTime string `form:"end_time"` // 下单结束时间
|
||||
}
|
||||
|
||||
// RechargeOrderRefundReq 退款
|
||||
type RechargeOrderRefundReq struct {
|
||||
RechargeId int32 `json:"recharge_id" binding:"required,gt=0"` // 订单编号
|
||||
}
|
||||
|
||||
// UserAccountLogListReq 用户余额变动日志列表参数
|
||||
type UserAccountLogListReq struct {
|
||||
Sn int64 `form:"sn"` // 流水号
|
||||
UserInfo int32 `form:"user_info"` // 用户编号
|
||||
ChangeType int32 `form:"change_type"` // 变动类型
|
||||
StartTime string `form:"start_time"` // 开始日期
|
||||
EndTime string `form:"end_time"` // 结束日期
|
||||
}
|
||||
|
||||
// RefundRecordListReq 退款记录列表参数
|
||||
type RefundRecordListReq struct {
|
||||
Sn string `form:"sn"` // 退款编号
|
||||
OrderSn string `form:"order_sn"` // 来源单号
|
||||
UserSn int64 `form:"user_sn"` // 用户编号
|
||||
RefundType int32 `form:"refund_type"` // 退款类型 1-后台退款
|
||||
StartTime string `form:"start_time"` // 开始日期
|
||||
EndTime string `form:"end_time"` // 结束日期
|
||||
}
|
||||
|
||||
// RefundLogListReq 退款日志列表参数
|
||||
type RefundLogListReq struct {
|
||||
RecordId int32 `form:"record_id"` // 充值记录id
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
package req
|
||||
|
||||
//SettingWebsiteReq 保存网站信息参数
|
||||
// SettingWebsiteReq 保存网站信息参数
|
||||
type SettingWebsiteReq struct {
|
||||
Name string `form:"name"` // 网站名称
|
||||
Logo string `form:"logo"` // 网站图标
|
||||
@@ -10,59 +10,61 @@ type SettingWebsiteReq struct {
|
||||
ShopLogo string `form:"shopLogo"` // 商城Logo
|
||||
}
|
||||
|
||||
//SettingCopyrightItemReq 保存备案信息参数
|
||||
// SettingCopyrightItemReq 保存备案信息参数
|
||||
type SettingCopyrightItemReq struct {
|
||||
Name string `form:"name" json:"name"` // 名称
|
||||
Link string `form:"link" json:"link"` // 链接
|
||||
}
|
||||
|
||||
//SettingProtocolItem 政策通用参数
|
||||
// SettingProtocolItem 政策通用参数
|
||||
type SettingProtocolItem struct {
|
||||
Name string `form:"name" json:"name"` // 名称
|
||||
Content string `form:"content" json:"content"` // 内容
|
||||
}
|
||||
|
||||
//SettingProtocolReq 保存政策信息参数
|
||||
// SettingProtocolReq 保存政策信息参数
|
||||
type SettingProtocolReq struct {
|
||||
Service SettingProtocolItem `form:"service" json:"service"` // 服务协议
|
||||
Privacy SettingProtocolItem `form:"privacy" json:"privacy"` // 隐私协议
|
||||
}
|
||||
|
||||
//SettingStorageDetailReq 存储详情参数
|
||||
// SettingStorageDetailReq 存储详情参数
|
||||
type SettingStorageDetailReq struct {
|
||||
Alias string `form:"alias" binding:"required,oneof=local qiniu qcloud aliyun"` // 别名: [local,qiniu,qcloud,aliyun]
|
||||
Engine string `form:"engine" binding:"required,oneof=local qiniu qcloud aliyun"` // 别名: [local,qiniu,qcloud,aliyun]
|
||||
}
|
||||
|
||||
//SettingStorageEditReq 存储编辑参数
|
||||
// SettingStorageEditReq 存储编辑参数
|
||||
type SettingStorageEditReq struct {
|
||||
Alias string `form:"alias" binding:"required,oneof=local qiniu qcloud aliyun"` // 别名: [local,qiniu,qcloud,aliyun]
|
||||
Status int `form:"status" binding:"oneof=0 1"` // 状态: 0/1
|
||||
Bucket string `form:"bucket"` // 存储空间名
|
||||
SecretKey string `form:"secretKey"` // SK
|
||||
AccessKey string `form:"accessKey"` // AK
|
||||
Domain string `form:"domain"` // 访问域名
|
||||
Region string `form:"region"` // 地区,腾讯存储特有
|
||||
Engine string `json:"engine" binding:"required,oneof=local qiniu qcloud aliyun"` // 别名: [local,qiniu,qcloud,aliyun]
|
||||
Name string `json:"name" binding:"required"` // 名称
|
||||
Describe string `json:"describe" binding:"required"` // 描述
|
||||
Bucket string `json:"bucket,omitempty"` // 存储空间名
|
||||
SecretKey string `json:"secret_key,omitempty"` // SK
|
||||
AccessKey string `json:"access_key,omitempty"` // AK
|
||||
Domain string `json:"domain,omitempty"` // 访问域名
|
||||
Region string `json:"region,omitempty"` // 地区,腾讯存储特有
|
||||
Status int32 `json:"status,omitempty"` // 状态
|
||||
}
|
||||
|
||||
//SettingStorageChangeReq 存储切换参数
|
||||
// SettingStorageChangeReq 存储切换参数
|
||||
type SettingStorageChangeReq struct {
|
||||
Alias string `form:"alias" binding:"required,oneof=local qiniu qcloud aliyun"` // 别名: [local,qiniu,qcloud,aliyun]
|
||||
Status int `form:"status" binding:"oneof=0 1"` // 状态: 0/1
|
||||
}
|
||||
|
||||
//SettingDictTypeListReq 字典类型新增参数
|
||||
// SettingDictTypeListReq 字典类型新增参数
|
||||
type SettingDictTypeListReq struct {
|
||||
DictName string `form:"dictName" binding:"max=200"` // 字典名称
|
||||
DictType string `form:"dictType" binding:"max=200"` // 字典类型
|
||||
DictStatus int8 `form:"dictStatus,default=-1" binding:"oneof=-1 0 1"` // 字典状态: 0/1
|
||||
}
|
||||
|
||||
//SettingDictTypeDetailReq 字典类型详情参数
|
||||
// SettingDictTypeDetailReq 字典类型详情参数
|
||||
type SettingDictTypeDetailReq struct {
|
||||
ID uint `form:"id" binding:"required,gt=0"` // 主键
|
||||
}
|
||||
|
||||
//SettingDictTypeAddReq 字典类型新增参数
|
||||
// SettingDictTypeAddReq 字典类型新增参数
|
||||
type SettingDictTypeAddReq struct {
|
||||
DictName string `form:"dictName" binding:"required,max=200"` // 字典名称
|
||||
DictType string `form:"dictType" binding:"required,max=200"` // 字典类型
|
||||
@@ -70,7 +72,7 @@ type SettingDictTypeAddReq struct {
|
||||
DictStatus int8 `form:"dictStatus" binding:"required,oneof=0 1"` // 字典状态: 0/1
|
||||
}
|
||||
|
||||
//SettingDictTypeEditReq 字典类型编辑参数
|
||||
// SettingDictTypeEditReq 字典类型编辑参数
|
||||
type SettingDictTypeEditReq struct {
|
||||
ID uint `form:"id" binding:"required,gt=0"` // 主键
|
||||
DictName string `form:"dictName" binding:"required,max=200"` // 字典名称
|
||||
@@ -79,12 +81,12 @@ type SettingDictTypeEditReq struct {
|
||||
DictStatus int8 `form:"dictStatus" binding:"required,oneof=0 1"` // 字典状态: 0/1
|
||||
}
|
||||
|
||||
//SettingDictTypeDelReq 字典类型删除参数
|
||||
// SettingDictTypeDelReq 字典类型删除参数
|
||||
type SettingDictTypeDelReq struct {
|
||||
Ids []uint `form:"ids" binding:"required"` // 主键列表
|
||||
}
|
||||
|
||||
//SettingDictDataListReq 字典数据列表参数
|
||||
// SettingDictDataListReq 字典数据列表参数
|
||||
type SettingDictDataListReq struct {
|
||||
DictType string `form:"dictType" binding:"max=200"` // 字典类型
|
||||
Name string `form:"name" binding:"max=100"` // 键
|
||||
@@ -92,12 +94,12 @@ type SettingDictDataListReq struct {
|
||||
Status int8 `form:"status,default=-1" binding:"oneof=-1 0 1"` // 状态: 0=停用,1=启用
|
||||
}
|
||||
|
||||
//SettingDictDataDetailReq 字典数据详情参数
|
||||
// SettingDictDataDetailReq 字典数据详情参数
|
||||
type SettingDictDataDetailReq struct {
|
||||
ID uint `form:"id" binding:"required,gt=0"` // 主键
|
||||
}
|
||||
|
||||
//SettingDictDataAddReq 字典数据新增参数
|
||||
// SettingDictDataAddReq 字典数据新增参数
|
||||
type SettingDictDataAddReq struct {
|
||||
TypeId uint `form:"typeId" binding:"required,gt=0"` // 类型
|
||||
Name string `form:"name" binding:"required,max=100"` // 键
|
||||
@@ -107,7 +109,7 @@ type SettingDictDataAddReq struct {
|
||||
Status int8 `form:"status,default=-1" binding:"oneof=-1 0 1"` // 状态: 0=停用,1=启用
|
||||
}
|
||||
|
||||
//SettingDictDataEditReq 字典数据编辑参数
|
||||
// SettingDictDataEditReq 字典数据编辑参数
|
||||
type SettingDictDataEditReq struct {
|
||||
ID uint `form:"id" binding:"required,gt=0"` // 主键
|
||||
TypeId uint `form:"typeId" binding:"required,gte=0"` // 类型
|
||||
@@ -118,7 +120,110 @@ type SettingDictDataEditReq struct {
|
||||
Status int8 `form:"status,default=-1" binding:"oneof=-1 0 1"` // 状态: 0=停用,1=启用
|
||||
}
|
||||
|
||||
//SettingDictDataDelReq 字典数据删除参数
|
||||
// SettingDictDataDelReq 字典数据删除参数
|
||||
type SettingDictDataDelReq struct {
|
||||
Ids []uint `form:"ids" binding:"required"` // 主键列表
|
||||
}
|
||||
|
||||
// NoticeSettingListReq 通知列表
|
||||
type NoticeSettingListReq struct {
|
||||
Recipient int32 `form:"recipient"` // 接收者 1-用户 2-平台
|
||||
}
|
||||
|
||||
// NoticeSettingDetailReq 通知设置详情参数
|
||||
type NoticeSettingDetailReq struct {
|
||||
Id int32 `form:"id" binding:"required,gt=0"` //
|
||||
}
|
||||
|
||||
// NoticeSettingEditReq 通知设置新增参数
|
||||
type NoticeSettingEditReq struct {
|
||||
Id int32 `json:"id"` //
|
||||
Template struct {
|
||||
SmsNotice struct {
|
||||
Content string `json:"content"`
|
||||
IsShow string `json:"is_show"`
|
||||
Status string `json:"status"`
|
||||
TemplateId string `json:"template_id"`
|
||||
Tips []string `json:"tips"`
|
||||
Type string `json:"type"`
|
||||
} `json:"sms_notice"`
|
||||
} `json:"template"`
|
||||
}
|
||||
|
||||
// SmsSettingDetailReq 短信设置详情参数
|
||||
type SmsSettingDetailReq struct {
|
||||
Name string `form:"name" binding:"required"` //
|
||||
}
|
||||
|
||||
type SmsSettingEditReq struct {
|
||||
Name string `json:"name" binding:"required"`
|
||||
Alias string `json:"alias" binding:"required"`
|
||||
Sign string `json:"sign" `
|
||||
AppKey string `json:"appKey" `
|
||||
AppId string `json:"appId"`
|
||||
SecretKey string `json:"secretKey" `
|
||||
SecretId string `json:"secretId" `
|
||||
Status int32 `json:"status" `
|
||||
}
|
||||
type StorageSettingEditReq struct {
|
||||
Name string `json:"name" binding:"required"`
|
||||
Engine string `json:"engine" binding:"required"`
|
||||
AccessKey string `json:"accessKey"`
|
||||
SecretKey string `json:"secretKey" `
|
||||
Bucket string `json:"bucket" `
|
||||
Domain string `json:"domain" `
|
||||
Region string `json:"region" `
|
||||
Status int32 `json:"status" `
|
||||
}
|
||||
|
||||
// 充值配置
|
||||
type RechargeSettingEditReq struct {
|
||||
Status int32 `json:"status" binding:""`
|
||||
MinAmount int32 `json:"min_amount" binding:""`
|
||||
}
|
||||
|
||||
// UserSetReq 设置用户默认头像
|
||||
type UserSetReq struct {
|
||||
DefaultAvatar string `json:"default_avatar" binding:"required"` // 默认头像
|
||||
}
|
||||
|
||||
type SettingLoginReq struct {
|
||||
LoginWay []int32 `json:"loginWay" binding:"required"`
|
||||
ForceBindMobile int32 `json:"forceBindMobile" binding:""`
|
||||
OpenAgreement int32 `json:"openAgreement" binding:""`
|
||||
OpenOtherAuth int32 `json:"openOtherAuth" binding:""`
|
||||
AutoLoginAuth []int32 `json:"autoLoginAuth" binding:""`
|
||||
}
|
||||
|
||||
type PaySettingEditReq struct {
|
||||
Name string `json:"name" binding:"required"`
|
||||
DisplayName string `json:"display_name" binding:"required"`
|
||||
Icon string `json:"icon" binding:"required"`
|
||||
Remark string `json:"remark"`
|
||||
Domain string `json:"domain"`
|
||||
Sort int32 `json:"sort"`
|
||||
Config struct {
|
||||
ApiClientCert string `json:"api_client_cert,omitempty"` //微信支付配置
|
||||
ApiClientKey string `json:"api_client_key,omitempty"` //微信支付配置
|
||||
InterfaceVersion string `json:"interface_version,omitempty"` //微信支付配置
|
||||
MchId string `json:"mch_id,omitempty"` //微信支付配置
|
||||
MerchantType string `json:"merchant_type,omitempty"` //微信支付配置 支付宝配置 共用
|
||||
PaySignKey string `json:"pay_sign_key,omitempty"` //微信支付配置
|
||||
AliPublicKey string `json:"ali_public_key,omitempty"` //支付宝配置
|
||||
AppId string `json:"app_id,omitempty"` //支付宝配置
|
||||
Mode string `json:"mode,omitempty"` //支付宝配置
|
||||
PrivateKey string `json:"private_key,omitempty"` //支付宝配置
|
||||
} `json:"config,omitempty" `
|
||||
}
|
||||
|
||||
// PaySettingDetailReq 短信设置详情参数
|
||||
type PaySettingDetailReq struct {
|
||||
Name string `form:"name" binding:"required"` //
|
||||
}
|
||||
|
||||
type PaySceneSetReq struct {
|
||||
Scene string `json:"scene" binding:"required"`
|
||||
IsDefault int32 `json:"is_default"` // 1 默认
|
||||
Status int32 `json:"status" ` // 1 开启 0 关闭
|
||||
PaymentName string `json:"payment_name" `
|
||||
}
|
||||
|
||||
105
server/admin/schemas/resp/finance.go
Normal file
105
server/admin/schemas/resp/finance.go
Normal file
@@ -0,0 +1,105 @@
|
||||
package resp
|
||||
|
||||
import "likeadmin/core"
|
||||
|
||||
// RechargeOrderResp 【请填写功能名称】返回信息
|
||||
type RechargeOrderResp struct {
|
||||
ID int32 `json:"id" structs:"id"` // id
|
||||
Sn string `json:"sn" structs:"sn"` // 订单编号
|
||||
UserID int32 `json:"user_id" structs:"user_id"` // 用户id
|
||||
UserSn int32 `json:"user_sn" structs:"user_sn"` // 用户编号-冗余字段
|
||||
Mobile string `json:"mobile" structs:"mobile"` // 用户手机号码-冗余字段
|
||||
PaySn string `json:"pay_sn" structs:"pay_sn"` // 支付编号-冗余字段,针对微信同一主体不同客户端支付需用不同订单号预留。
|
||||
PayWay int32 `json:"pay_way" structs:"pay_way"` // 支付方式 2-微信支付 3-支付宝支付
|
||||
PayStatus int32 `json:"pay_status" structs:"pay_status"` // 支付状态:0-待支付;1-已支付
|
||||
PayTime core.TsTime `json:"pay_time" structs:"pay_time"` // 支付时间
|
||||
OrderAmount float64 `json:"order_amount" structs:"order_amount"` // 充值金额
|
||||
OrderTerminal int32 `json:"order_terminal" structs:"order_terminal"` // 终端
|
||||
TransactionId string `json:"transaction_id" structs:"transaction_id"` // 第三方平台交易流水号
|
||||
RefundStatus int32 `json:"refund_status" structs:"refund_status"` // 退款状态 0-未退款 1-已退款
|
||||
CreateTime core.TsTime `json:"create_time" structs:"create_time"` // 创建时间
|
||||
UpdateTime core.TsTime `json:"update_time" structs:"update_time"` // 更新时间
|
||||
User struct {
|
||||
ID int32 `json:"id" structs:"id"`
|
||||
Avatar string `json:"avatar" structs:"avatar"`
|
||||
} `json:"user" structs:"user"`
|
||||
}
|
||||
|
||||
// UserAccountLogResp 用户余额变动日志返回信息
|
||||
type UserAccountLogResp struct {
|
||||
ID int32 `json:"id" structs:"id"` //
|
||||
Sn int32 `json:"sn" structs:"sn"` // 流水号
|
||||
UserID int32 `json:"user_id" structs:"user_id"` // 用户id
|
||||
ChangeObject int32 `json:"change_object" structs:"change_object"` // 变动对象
|
||||
ChangeType int32 `json:"change_type" structs:"change_type"` // 变动类型
|
||||
Action int32 `json:"action" structs:"action"` // 动作 1-增加 2-减少
|
||||
ChangeAmount int32 `json:"change_amount" structs:"change_amount"` // 变动数量
|
||||
LeftAmount int32 `json:"left_amount" structs:"left_amount"` // 变动后数量
|
||||
ChangeTypeDesc string `json:"change_type_desc" ` // 变动类型描述
|
||||
SourceSn string `json:"source_sn" structs:"source_sn"` // 关联单号
|
||||
Remark string `json:"remark" structs:"remark"` // 备注
|
||||
Extra string `json:"extra" structs:"extra"` // 预留扩展字段
|
||||
CreateTime core.TsTime `json:"create_time" structs:"create_time"` // 创建时间
|
||||
UpdateTime core.TsTime `json:"update_time" structs:"update_time"` // 更新时间
|
||||
User struct {
|
||||
ID int32 `json:"id" structs:"id"`
|
||||
Sn int64 `json:"sn,omitempty" structs:"sn"`
|
||||
Avatar string `json:"avatar,omitempty" structs:"avatar"`
|
||||
Nickname string `json:"nickname,omitempty" structs:"nickname"`
|
||||
Mobile string `json:"mobile,omitempty" structs:"mobile"`
|
||||
} `json:"user" structs:"user"`
|
||||
}
|
||||
|
||||
// RefundRecordResp 退款记录返回信息
|
||||
type RefundRecordResp struct {
|
||||
ID int32 `json:"id" structs:"id"` // id
|
||||
Sn string `json:"sn" structs:"sn"` // 退款编号
|
||||
UserID int32 `json:"user_id" structs:"user_id"` // 关联用户
|
||||
OrderID int32 `json:"order_id" structs:"order_id"` // 来源订单id
|
||||
OrderSn string `json:"order_sn" structs:"order_sn"` // 来源单号
|
||||
OrderType string `json:"order_type" structs:"order_type"` // 订单来源 order-商品订单 recharge-充值订单
|
||||
OrderAmount int32 `json:"order_amount" structs:"order_amount"` // 订单总的应付款金额,冗余字段
|
||||
RefundAmount int32 `json:"refund_amount" structs:"refund_amount"` // 本次退款金额
|
||||
TransactionId string `json:"transaction_id" structs:"transaction_id"` // 第三方平台交易流水号
|
||||
RefundWay int32 `json:"refund_way" structs:"refund_way"` // 退款方式 1-线上退款 2-线下退款
|
||||
RefundType int32 `json:"refund_type" structs:"refund_type"` // 退款类型 1-后台退款
|
||||
RefundTypeText string `json:"refund_type_text"` // 退款类型 1-后台退款
|
||||
RefundStatus int32 `json:"refund_status" structs:"refund_status"` // 退款状态,0退款中,1退款成功,2退款失败
|
||||
RefundStatusText string `json:"refund_status_text" ` // 退款状态,0退款中,1退款成功,2退款失败
|
||||
CreateTime core.TsTime `json:"create_time" structs:"create_time"` // 创建时间
|
||||
UpdateTime core.TsTime `json:"update_time" structs:"update_time"` // 更新时间
|
||||
User struct {
|
||||
ID int32 `json:"id" structs:"id"`
|
||||
Sn int64 `json:"sn,omitempty" structs:"sn"`
|
||||
Avatar string `json:"avatar,omitempty" structs:"avatar"`
|
||||
Nickname string `json:"nickname,omitempty" structs:"nickname"`
|
||||
Mobile string `json:"mobile,omitempty" structs:"mobile"`
|
||||
} `json:"user" structs:"user"`
|
||||
}
|
||||
|
||||
type Stat struct {
|
||||
Total float32 `json:"total" structs:"total"`
|
||||
Ing float32 `json:"ing" structs:"ing"`
|
||||
Success float32 `json:"success" structs:"success"`
|
||||
Error float32 `json:"error" structs:"error"`
|
||||
}
|
||||
|
||||
// RefundLogResp 退款日志返回信息
|
||||
type RefundLogResp struct {
|
||||
ID int32 `json:"id" structs:"id"` // id
|
||||
Sn string `json:"sn" structs:"sn"` // 编号
|
||||
RecordID int32 `json:"record_id" structs:"record_id"` // 充值记录id
|
||||
UserID int32 `json:"user_id" structs:"user_id"` // 关联用户
|
||||
HandleID int32 `json:"handle_id" structs:"handle_id"` // 处理人id(管理员id)
|
||||
OrderAmount int32 `json:"order_amount" structs:"order_amount"` // 订单总的应付款金额,冗余字段
|
||||
RefundAmount int32 `json:"refund_amount" structs:"refund_amount"` // 本次退款金额
|
||||
RefundStatus int32 `json:"refund_status" structs:"refund_status"` // 退款状态,0退款中,1退款成功,2退款失败
|
||||
RefundStatusText string `json:"refund_status_text"` // 退款状态,0退款中,1退款成功,2退款失败
|
||||
RefundMsg string `json:"refund_msg" structs:"refund_msg"` // 退款信息
|
||||
CreateTime core.TsTime `json:"create_time" structs:"create_time"` // 创建时间
|
||||
UpdateTime core.TsTime `json:"update_time" structs:"update_time"` // 更新时间
|
||||
Admin struct {
|
||||
ID int32 `json:"id" structs:"id"`
|
||||
Nickname string `json:"nickname" structs:"nickname"`
|
||||
} `json:"admin" structs:"admin"`
|
||||
}
|
||||
@@ -2,7 +2,7 @@ package resp
|
||||
|
||||
import "likeadmin/core"
|
||||
|
||||
//SettingDictTypeResp 字典类型返回信息
|
||||
// SettingDictTypeResp 字典类型返回信息
|
||||
type SettingDictTypeResp struct {
|
||||
ID uint `json:"id" structs:"id"` // 主键
|
||||
DictName string `json:"dictName" structs:"dictName"` // 字典名称
|
||||
@@ -13,7 +13,7 @@ type SettingDictTypeResp struct {
|
||||
UpdateTime core.TsTime `json:"updateTime" structs:"updateTime"` // 更新时间
|
||||
}
|
||||
|
||||
//SettingDictDataResp 字典数据返回信息
|
||||
// SettingDictDataResp 字典数据返回信息
|
||||
type SettingDictDataResp struct {
|
||||
ID uint `json:"id" structs:"id"` // 主键
|
||||
TypeId uint `json:"typeId" structs:"typeId"` // 类型
|
||||
@@ -25,3 +25,90 @@ type SettingDictDataResp struct {
|
||||
CreateTime core.TsTime `json:"createTime" structs:"createTime"` // 创建时间
|
||||
UpdateTime core.TsTime `json:"updateTime" structs:"updateTime"` // 更新时间
|
||||
}
|
||||
|
||||
// NoticeSettingResp 通知设置返回信息
|
||||
type NoticeSettingResp struct {
|
||||
ID int32 `json:"id" structs:"id"` //
|
||||
SceneID int32 `json:"scene_id" structs:"scene_id"` // 场景id
|
||||
SceneName string `json:"scene_name" structs:"scene_name"` // 场景名称
|
||||
SceneDesc string `json:"scene_desc" structs:"scene_desc"` // 场景描述
|
||||
Recipient int32 `json:"recipient" structs:"recipient"` // 接收者 1-用户 2-平台
|
||||
Type int32 `json:"type" structs:"type"` // 通知类型: 1-业务通知 2-验证码
|
||||
SystemNotice string `json:"system_notice" structs:"system_notice"` // 系统通知设置
|
||||
SmsNotice string `json:"sms_notice" structs:"sms_notice"` // 短信通知设置
|
||||
OaNotice string `json:"oa_notice" structs:"oa_notice"` // 公众号通知设置
|
||||
MnpNotice string `json:"mnp_notice" structs:"mnp_notice"` // 小程序通知设置
|
||||
Support string `json:"support" structs:"support"` // 支持的发送类型 1-系统通知 2-短信通知 3-微信模板消息 4-小程序提醒
|
||||
UpdateTime core.TsTime `json:"update_time" structs:"update_time"` // 更新时间
|
||||
}
|
||||
|
||||
type SmsSettingResp struct {
|
||||
Name string `json:"name" structs:"name"`
|
||||
Alias string `json:"alias" structs:"alias"`
|
||||
Sign string `json:"sign" structs:"sign"`
|
||||
AppKey string `json:"appKey" structs:"appKey"`
|
||||
AppId string `json:"appId" structs:"appId"`
|
||||
SecretKey string `json:"secretKey" structs:"secretKey"`
|
||||
SecretId string `json:"secretId" structs:"secretId"`
|
||||
Status int32 `json:"status" structs:"status"`
|
||||
}
|
||||
|
||||
type StorageSettingResp struct {
|
||||
Name string `json:"name" structs:"name"`
|
||||
Engine string `json:"engine" structs:"engine"`
|
||||
Describe string `json:"describe" structs:"describe"`
|
||||
Bucket string `json:"bucket,omitempty" structs:"bucket"`
|
||||
AccessKey string `json:"access_key,omitempty" structs:"access_key"`
|
||||
Domain string `json:"domain,omitempty" structs:"domain"`
|
||||
SecretKey string `json:"secret_key,omitempty" structs:"secret_key"`
|
||||
Region string `json:"region,omitempty" structs:"region"`
|
||||
Status int32 `json:"status,omitempty" structs:"status"`
|
||||
}
|
||||
|
||||
type RechargeSettingResp struct {
|
||||
Status int `json:"status" structs:"status"`
|
||||
MinAmount int `json:"min_amount" structs:"min_amount"`
|
||||
}
|
||||
|
||||
// UserSetResp 设置用户默认头像
|
||||
type UserSetResp struct {
|
||||
DefaultAvatar string `json:"default_avatar" structs:"defaultAvatar"` // 默认头像
|
||||
}
|
||||
|
||||
type SettingLoginResp struct {
|
||||
LoginWay []int32 `json:"loginWay" structs:"loginWay"`
|
||||
ForceBindMobile int32 `json:"forceBindMobile" structs:"forceBindMobile"`
|
||||
OpenAgreement int32 `json:"openAgreement" structs:"openAgreement"`
|
||||
OpenOtherAuth int32 `json:"openOtherAuth" structs:"openOtherAuth"`
|
||||
AutoLoginAuth []int32 `json:"autoLoginAuth" structs:"autoLoginAuth"`
|
||||
}
|
||||
|
||||
type PaySettingResp struct {
|
||||
Name string `json:"name" structs:"name"`
|
||||
DisplayName string `json:"display_name" structs:"display_name"`
|
||||
Icon string `json:"icon" structs:"icon"`
|
||||
Remark string `json:"remark" structs:"remark"`
|
||||
Domain string `json:"domain" structs:"domain"`
|
||||
Sort int32 `json:"sort" structs:"sort"`
|
||||
Config struct {
|
||||
ApiClientCert string `json:"api_client_cert,omitempty" structs:"api_client_cert"` //微信支付配置
|
||||
ApiClientKey string `json:"api_client_key,omitempty" structs:"api_client_key"` //微信支付配置
|
||||
InterfaceVersion string `json:"interface_version,omitempty" structs:"interface_version"` //微信支付配置
|
||||
MchId string `json:"mch_id,omitempty" structs:"mch_id"` //微信支付配置
|
||||
MerchantType string `json:"merchant_type,omitempty" structs:"merchant_type"` //微信支付配置 支付宝配置
|
||||
PaySignKey string `json:"pay_sign_key,omitempty" structs:"pay_sign_key"` //微信支付配置
|
||||
AliPublicKey string `json:"ali_public_key,omitempty" structs:"ali_public_key"` //支付宝配置
|
||||
AppId string `json:"app_id,omitempty" structs:"app_id"` //支付宝配置
|
||||
Mode string `json:"mode,omitempty" structs:"mode"` //支付宝配置
|
||||
PrivateKey string `json:"private_key,omitempty" structs:"private_key"` //支付宝配置
|
||||
} `json:"config,omitempty" structs:"config"`
|
||||
}
|
||||
|
||||
type PaySceneResp struct {
|
||||
Scene string `json:"scene" structs:"scene"`
|
||||
IsDefault int32 `json:"is_default" structs:"is_default"` // 1 默认
|
||||
Status int32 `json:"status" structs:"status"` // 1 开启 0 关闭
|
||||
PaymentName string `json:"payment_name" structs:"payment_name"`
|
||||
DisplayName string `json:"display_name" structs:"display_name"`
|
||||
Icon string `json:"icon" structs:"icon"`
|
||||
}
|
||||
|
||||
@@ -152,22 +152,21 @@ type SystemLogLoginResp struct {
|
||||
|
||||
// UserResp 用户返回信息
|
||||
type UserResp struct {
|
||||
Id int32 `json:"id" structs:"id"` // 主键
|
||||
Sn int32 `json:"sn" structs:"sn"` // 编号
|
||||
Avatar string `json:"avatar" structs:"avatar"` // 头像
|
||||
RealName string `json:"realName" structs:"realName"` // 真实姓名
|
||||
Nickname string `json:"nickname" structs:"nickname"` // 用户昵称
|
||||
Account string `json:"account" structs:"account"` // 用户账号
|
||||
Password string `json:"password" structs:"password"` // 用户密码
|
||||
Mobile string `json:"mobile" structs:"mobile"` // 用户电话
|
||||
Sex int32 `json:"sex" structs:"sex"` // 用户性别: [1=男, 2=女]
|
||||
Channel int32 `json:"channel" structs:"channel"` // 注册渠道: [1-微信小程序 2-微信公众号 3-手机H5 4-电脑PC 5-苹果APP 6-安卓APP]
|
||||
IsDisable int32 `json:"isDisable" structs:"isDisable"` // 是否禁用: [0=否, 1=是]
|
||||
LoginIp string `json:"loginIp" structs:"loginIp"` // 最后登录IP
|
||||
LoginTime string `json:"loginTime" structs:"loginTime"` // 最后登录时间
|
||||
IsNewUser int `json:"isNewUser" structs:"isNewUser"` // 是否是新注册用户: [1-是, 0-否]
|
||||
UserMoney float64 `json:"userMoney" structs:"userMoney"` // 用户余额
|
||||
TotalRechargeAmount float64 `json:"totalRechargeAmount" structs:"totalRechargeAmount"` // 累计充值
|
||||
CreateTime core.TsTime `json:"createTime" structs:"createTime"` // 创建时间
|
||||
UpdateTime core.TsTime `json:"updateTime" structs:"updateTime"` // 更新时间
|
||||
ID int32 `json:"id" structs:"id"` // 主键
|
||||
Sn int32 `json:"sn" structs:"sn"` // 编号
|
||||
Avatar string `json:"avatar" structs:"avatar"` // 头像
|
||||
RealName string `json:"real_name" structs:"real_name"` // 真实姓名
|
||||
Nickname string `json:"nickname" structs:"nickname"` // 用户昵称
|
||||
Account string `json:"account" structs:"account"` // 用户账号
|
||||
Mobile string `json:"mobile" structs:"mobile"` // 用户电话
|
||||
Sex int32 `json:"sex" structs:"sex"` // 用户性别: [1=男, 2=女]
|
||||
Channel int32 `json:"channel" structs:"channel"` // 注册渠道: [1-微信小程序 2-微信公众号 3-手机H5 4-电脑PC 5-苹果APP 6-安卓APP]
|
||||
IsDisable int32 `json:"is_disable" structs:"is_disable"` // 是否禁用: [0=否, 1=是]
|
||||
LoginIp string `json:"login_ip" structs:"login_ip"` // 最后登录IP
|
||||
LoginTime core.TsTime `json:"login_time" structs:"login_time"` // 最后登录时间
|
||||
IsNewUser int32 `json:"is_new_user" structs:"is_new_user"` // 是否是新注册用户: [1-是, 0-否]
|
||||
UserMoney int32 `json:"user_money" structs:"user_money"` // 用户余额
|
||||
TotalRechargeAmount int32 `json:"total_recharge_amount" structs:"total_recharge_amount"` // 累计充值
|
||||
CreateTime core.TsTime `json:"create_time" structs:"create_time"` // 创建时间
|
||||
UpdateTime core.TsTime `json:"update_time" structs:"update_time"` // 更新时间
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package service
|
||||
|
||||
import (
|
||||
"likeadmin/admin/service/common"
|
||||
"likeadmin/admin/service/finance"
|
||||
"likeadmin/admin/service/setting"
|
||||
"likeadmin/admin/service/system"
|
||||
)
|
||||
@@ -18,6 +19,12 @@ var InitFunctions = []interface{}{
|
||||
setting.NewSettingProtocolService,
|
||||
setting.NewSettingStorageService,
|
||||
setting.NewSettingWebsiteService,
|
||||
setting.NewNoticeSettingService,
|
||||
setting.NewSmsSettingService,
|
||||
setting.NewRechargeSettingService,
|
||||
setting.NewUserService,
|
||||
setting.NewSettingLoginService,
|
||||
setting.NewPaySettingService,
|
||||
// system
|
||||
system.NewSystemAuthAdminService,
|
||||
system.NewSystemAuthDeptService,
|
||||
@@ -28,4 +35,10 @@ var InitFunctions = []interface{}{
|
||||
system.NewSystemLoginService,
|
||||
system.NewSystemLogsServer,
|
||||
system.NewUserService,
|
||||
|
||||
// finance
|
||||
finance.NewRechargeOrderService,
|
||||
finance.NewUserAccountLogService,
|
||||
finance.NewRefundRecordService,
|
||||
finance.NewRefundLogService,
|
||||
}
|
||||
|
||||
88
server/admin/service/finance/accountLog.go
Normal file
88
server/admin/service/finance/accountLog.go
Normal file
@@ -0,0 +1,88 @@
|
||||
package finance
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"gorm.io/gorm"
|
||||
"likeadmin/admin/schemas/req"
|
||||
"likeadmin/admin/schemas/resp"
|
||||
"likeadmin/constant"
|
||||
"likeadmin/core/request"
|
||||
"likeadmin/core/response"
|
||||
"likeadmin/dao"
|
||||
"likeadmin/util"
|
||||
)
|
||||
|
||||
type IUserAccountLogService interface {
|
||||
List(c *gin.Context, page request.PageReq, listReq req.UserAccountLogListReq) (res response.PageResp, e error)
|
||||
}
|
||||
|
||||
// NewUserAccountLogService 初始化
|
||||
func NewUserAccountLogService(db *gorm.DB, dao *dao.Query) IUserAccountLogService {
|
||||
return &userAccountLogService{db: db, dao: dao}
|
||||
}
|
||||
|
||||
// userAccountLogService 用户余额变动日志服务实现类
|
||||
type userAccountLogService struct {
|
||||
db *gorm.DB
|
||||
dao *dao.Query
|
||||
}
|
||||
|
||||
// List 用户余额变动日志列表
|
||||
func (srv userAccountLogService) List(c *gin.Context, page request.PageReq, listReq req.UserAccountLogListReq) (res response.PageResp, e error) {
|
||||
// 分页信息
|
||||
limit := page.PageSize
|
||||
offset := page.PageSize * (page.PageNo - 1)
|
||||
|
||||
m := srv.dao.UserAccountLog
|
||||
u := srv.dao.User
|
||||
q := m.WithContext(c)
|
||||
|
||||
// 查询
|
||||
if listReq.Sn > 0 {
|
||||
q = q.Where(m.Sn.Eq(listReq.Sn))
|
||||
}
|
||||
if listReq.ChangeType > 0 {
|
||||
q = q.Where(m.ChangeType.Eq(listReq.ChangeType))
|
||||
}
|
||||
|
||||
// 时间范围查询
|
||||
if listReq.StartTime != "" && listReq.EndTime != "" {
|
||||
startTime, err := util.DateToTimestamp(listReq.StartTime)
|
||||
if e = response.CheckErr(err, "DateToTimestamp err"); e != nil {
|
||||
return
|
||||
}
|
||||
|
||||
endTime, err := util.DateToTimestamp(listReq.EndTime)
|
||||
if e = response.CheckErr(err, "DateToTimestamp err"); e != nil {
|
||||
return
|
||||
}
|
||||
|
||||
q = q.Where(m.CreateTime.Gt(int32(startTime)), m.CreateTime.Lt(int32(endTime)))
|
||||
}
|
||||
|
||||
// 总数
|
||||
var count int64
|
||||
count, err := q.Count()
|
||||
if e = response.CheckErr(err, "List Count err"); e != nil {
|
||||
return
|
||||
}
|
||||
// 数据
|
||||
objs, err := q.Preload(m.User.Select(u.ID, u.Sn, u.Avatar, u.Nickname, u.Mobile)).Limit(limit).Offset(offset).Order(m.ID.Desc()).Find()
|
||||
if e = response.CheckErr(err, "List Find err"); e != nil {
|
||||
return
|
||||
}
|
||||
|
||||
var resps []resp.UserAccountLogResp
|
||||
response.Copy(&resps, objs)
|
||||
|
||||
for i, resp := range resps {
|
||||
resps[i].User.Avatar = util.UrlUtil.ToAbsoluteUrl(resp.User.Avatar)
|
||||
resps[i].ChangeTypeDesc = constant.GetUserMoneyChangeTypeDesc(resp.ChangeType)
|
||||
}
|
||||
return response.PageResp{
|
||||
PageNo: page.PageNo,
|
||||
PageSize: page.PageSize,
|
||||
Count: count,
|
||||
Lists: resps,
|
||||
}, nil
|
||||
}
|
||||
218
server/admin/service/finance/recharge.go
Normal file
218
server/admin/service/finance/recharge.go
Normal file
@@ -0,0 +1,218 @@
|
||||
package finance
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/shopspring/decimal"
|
||||
"gorm.io/gorm"
|
||||
"likeadmin/admin/schemas/req"
|
||||
"likeadmin/admin/schemas/resp"
|
||||
"likeadmin/config"
|
||||
"likeadmin/constant"
|
||||
"likeadmin/core/request"
|
||||
"likeadmin/core/response"
|
||||
"likeadmin/dao"
|
||||
"likeadmin/model"
|
||||
"likeadmin/util"
|
||||
"strconv"
|
||||
"time"
|
||||
)
|
||||
|
||||
type IRechargeOrderService interface {
|
||||
List(c *gin.Context, page request.PageReq, listReq req.RechargeOrderListReq) (res response.PageResp, e error)
|
||||
Refund(c *gin.Context, req req.RechargeOrderRefundReq) (e error)
|
||||
}
|
||||
|
||||
// NewRechargeOrderService 初始化
|
||||
func NewRechargeOrderService(db *gorm.DB, dao *dao.Query, refundSrv IRefundRecordService, refundLogSrv IRefundLogService) IRechargeOrderService {
|
||||
return &rechargeOrderService{db: db, dao: dao, refundSrv: refundSrv, refundLogSrv: refundLogSrv}
|
||||
}
|
||||
|
||||
// rechargeOrderService 【请填写功能名称】服务实现类
|
||||
type rechargeOrderService struct {
|
||||
db *gorm.DB
|
||||
dao *dao.Query
|
||||
refundSrv IRefundRecordService
|
||||
refundLogSrv IRefundLogService
|
||||
}
|
||||
|
||||
// List 【请填写功能名称】列表
|
||||
func (srv rechargeOrderService) List(c *gin.Context, page request.PageReq, listReq req.RechargeOrderListReq) (res response.PageResp, e error) {
|
||||
// 分页信息
|
||||
limit := page.PageSize
|
||||
offset := page.PageSize * (page.PageNo - 1)
|
||||
// 总数
|
||||
var count int64
|
||||
m := srv.dao.RechargeOrder
|
||||
u := srv.dao.User
|
||||
q := m.WithContext(c)
|
||||
|
||||
// 用户编号和手机号查询
|
||||
if listReq.UserInfo != "" {
|
||||
userInfo, _ := strconv.ParseInt(listReq.UserInfo, 10, 32)
|
||||
q = q.Where(q.Where(m.UserSn.Eq(int32(userInfo))).
|
||||
Or(m.Mobile.Eq(listReq.UserInfo)))
|
||||
}
|
||||
// 订单号查询
|
||||
if listReq.Sn != "" {
|
||||
q = q.Where(m.Sn.Eq(listReq.Sn))
|
||||
}
|
||||
|
||||
// 支付方式
|
||||
if listReq.PayWay > 0 {
|
||||
q = q.Where(m.PayWay.Eq(listReq.PayWay))
|
||||
}
|
||||
// 支付状态
|
||||
if listReq.PayStatus > 0 {
|
||||
q = q.Where(m.PayStatus.Eq(listReq.PayStatus))
|
||||
}
|
||||
|
||||
// 时间范围查询
|
||||
if listReq.StartTime != "" && listReq.EndTime != "" {
|
||||
startTime, err := util.DateToTimestamp(listReq.StartTime)
|
||||
if e = response.CheckErr(err, "DateToTimestamp err"); e != nil {
|
||||
return
|
||||
}
|
||||
|
||||
endTime, err := util.DateToTimestamp(listReq.EndTime)
|
||||
if e = response.CheckErr(err, "DateToTimestamp err"); e != nil {
|
||||
return
|
||||
}
|
||||
|
||||
q = q.Where(m.CreateTime.Gt(int32(startTime)), m.CreateTime.Lt(int32(endTime)))
|
||||
}
|
||||
|
||||
count, err := q.Count()
|
||||
if e = response.CheckErr(err, "List Count err"); e != nil {
|
||||
return
|
||||
}
|
||||
|
||||
var lists []resp.RechargeOrderResp
|
||||
objs, err := q.Preload(m.User.Select(u.ID, u.Avatar)).Limit(limit).Offset(offset).Find()
|
||||
if e = response.CheckErr(err, "List Find err"); e != nil {
|
||||
return
|
||||
}
|
||||
|
||||
for _, obj := range objs {
|
||||
obj.User.Avatar = util.UrlUtil.ToAbsoluteUrl(obj.User.Avatar)
|
||||
}
|
||||
|
||||
response.Copy(&lists, objs)
|
||||
|
||||
return response.PageResp{
|
||||
PageNo: page.PageNo,
|
||||
PageSize: page.PageSize,
|
||||
Count: count,
|
||||
Lists: lists,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (srv rechargeOrderService) Refund(c *gin.Context, refundReq req.RechargeOrderRefundReq) (err error) {
|
||||
tx := srv.dao.Begin()
|
||||
m := srv.dao.RechargeOrder
|
||||
u := srv.dao.User
|
||||
q := m.WithContext(c)
|
||||
|
||||
defer func() {
|
||||
if recover() != nil || err != nil {
|
||||
_ = tx.Rollback()
|
||||
}
|
||||
}()
|
||||
|
||||
order, e := q.Where(m.ID.Eq(refundReq.RechargeId)).Preload(m.User.Select(u.ID, u.UserMoney, u.Sn)).Take()
|
||||
// 校验
|
||||
if err = response.CheckErrDBNotRecord(e, "数据不存在!"); err != nil {
|
||||
return
|
||||
}
|
||||
if err = response.CheckErr(e, "Refund First err"); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if order.PayStatus != constant.PayWayStatusPaid {
|
||||
tx.Rollback()
|
||||
return response.Failed.Make("订单未支付,不能退款")
|
||||
}
|
||||
|
||||
if order.User.UserMoney < order.OrderAmount {
|
||||
tx.Rollback()
|
||||
return response.Failed.Make("用户余额小于订单金额,不能退款")
|
||||
}
|
||||
|
||||
if order.RefundStatus == constant.RefundStatusRefunded {
|
||||
tx.Rollback()
|
||||
return response.Failed.Make("已退款订单不能重复退款")
|
||||
}
|
||||
|
||||
// 给余额和充值总数减去金额
|
||||
_, e = tx.User.WithContext(c).Where(u.ID.Eq(order.User.ID)).UpdateSimple(u.UserMoney.Sub(order.OrderAmount))
|
||||
if err = response.CheckErr(e, "扣除用户余额失败"); err != nil {
|
||||
return
|
||||
}
|
||||
// 设置充值订单退款状态为已退款 防止重复退款
|
||||
_, e = tx.RechargeOrder.WithContext(c).Where(m.ID.Eq(order.ID)).UpdateSimple(m.RefundStatus.Value(constant.RefundStatusRefunded))
|
||||
if err = response.CheckErr(e, "设置充值订单退款状态为已退款时失败"); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
UserMoney := decimal.NewFromFloat(order.User.UserMoney).Round(2)
|
||||
Num := decimal.NewFromFloat(order.OrderAmount).Round(2)
|
||||
leftAmount, _ := UserMoney.Sub(Num).Float64()
|
||||
|
||||
// 写入余额变化日志
|
||||
e = tx.WithContext(c).UserAccountLog.Create(&model.UserAccountLog{
|
||||
Sn: order.User.Sn,
|
||||
UserID: order.User.ID,
|
||||
ChangeObject: constant.GetChangeObject(constant.UmDecRechargeRefund),
|
||||
ChangeType: constant.UmDecRechargeRefund,
|
||||
Action: constant.DEC,
|
||||
ChangeAmount: order.OrderAmount,
|
||||
LeftAmount: leftAmount,
|
||||
SourceSn: order.Sn, // 关联单号
|
||||
CreateTime: int32(time.Now().Unix()),
|
||||
})
|
||||
if err = response.CheckErr(e, "UserAccountLog Create err"); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// 写入退款记录
|
||||
refundRecord := &model.RefundRecord{
|
||||
Sn: srv.refundSrv.GenerateSN("RF", 10),
|
||||
UserID: order.UserID,
|
||||
UserSn: order.User.Sn,
|
||||
OrderID: order.ID,
|
||||
OrderSn: order.Sn,
|
||||
OrderType: constant.OrderTypeRecharge,
|
||||
OrderAmount: order.OrderAmount,
|
||||
RefundAmount: order.OrderAmount,
|
||||
TransactionID: order.TransactionID,
|
||||
RefundWay: constant.RefundWayOnline,
|
||||
RefundType: constant.RefundTypeBack,
|
||||
RefundStatus: constant.RefundStatusRefunding,
|
||||
CreateTime: int32(time.Now().Unix()),
|
||||
}
|
||||
e = tx.WithContext(c).RefundRecord.Create(refundRecord)
|
||||
if err = response.CheckErr(e, "RefundRecord Create err"); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// 获取管理员Id
|
||||
adminId, _ := c.Get(config.AdminConfig.ReqAdminIdKey)
|
||||
|
||||
// 并写入退款日志
|
||||
e = tx.WithContext(c).RefundLog.Create(&model.RefundLog{
|
||||
Sn: srv.refundLogSrv.GenerateSN("RL", 4),
|
||||
RecordID: refundRecord.ID,
|
||||
UserID: order.UserID,
|
||||
HandleID: int32(adminId.(uint)),
|
||||
OrderAmount: refundRecord.OrderAmount,
|
||||
RefundAmount: refundRecord.RefundAmount,
|
||||
RefundStatus: constant.RefundStatusRefunding,
|
||||
CreateTime: int32(time.Now().Unix()),
|
||||
})
|
||||
if err = response.CheckErr(e, "RefundLog Create err"); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// TODO 执行远程退款后 更改退款状态
|
||||
|
||||
return tx.Commit()
|
||||
}
|
||||
71
server/admin/service/finance/refundLog.go
Normal file
71
server/admin/service/finance/refundLog.go
Normal file
@@ -0,0 +1,71 @@
|
||||
package finance
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"gorm.io/gorm"
|
||||
"likeadmin/admin/schemas/req"
|
||||
"likeadmin/admin/schemas/resp"
|
||||
"likeadmin/constant"
|
||||
"likeadmin/core/response"
|
||||
"likeadmin/dao"
|
||||
"math/rand"
|
||||
"strconv"
|
||||
"time"
|
||||
)
|
||||
|
||||
type IRefundLogService interface {
|
||||
List(c *gin.Context, listReq req.RefundLogListReq) (res []resp.RefundLogResp, e error)
|
||||
GenerateSN(prefix string, randSuffixLength int) string
|
||||
}
|
||||
|
||||
// NewRefundLogService 初始化
|
||||
func NewRefundLogService(db *gorm.DB, dao *dao.Query) IRefundLogService {
|
||||
return &refundLogService{db: db, dao: dao}
|
||||
}
|
||||
|
||||
// refundLogService 退款日志服务实现类
|
||||
type refundLogService struct {
|
||||
db *gorm.DB
|
||||
dao *dao.Query
|
||||
}
|
||||
|
||||
// List 退款日志列表
|
||||
func (srv refundLogService) List(c *gin.Context, listReq req.RefundLogListReq) (res []resp.RefundLogResp, e error) {
|
||||
|
||||
m := srv.dao.RefundLog
|
||||
a := srv.dao.SystemAuthAdmin
|
||||
q := m.WithContext(c).Where(m.RecordID.Eq(listReq.RecordId))
|
||||
|
||||
// 数据
|
||||
objs, err := q.Preload(m.Admin.Select(a.ID, a.Nickname)).Order(m.ID.Desc()).Find()
|
||||
if e = response.CheckErr(err, "List Find err"); e != nil {
|
||||
return
|
||||
}
|
||||
var resps []resp.RefundLogResp
|
||||
response.Copy(&resps, objs)
|
||||
|
||||
for i, resp := range resps {
|
||||
resps[i].RefundStatusText = constant.GetRefundStatusDesc(resp.RefundStatus)
|
||||
}
|
||||
|
||||
return resps, nil
|
||||
|
||||
}
|
||||
|
||||
// GenerateSN 生成随机单号
|
||||
func (srv refundLogService) GenerateSN(prefix string, randSuffixLength int) string {
|
||||
suffix := ""
|
||||
for i := 0; i < randSuffixLength; i++ {
|
||||
suffix += strconv.Itoa(rand.Intn(10))
|
||||
}
|
||||
|
||||
sn := prefix + time.Now().Format("20060102150405") + suffix
|
||||
|
||||
ua := srv.dao.RefundLog
|
||||
_, err := ua.Where(ua.Sn.Eq(sn)).Select(ua.Sn).Take()
|
||||
if err == gorm.ErrRecordNotFound {
|
||||
return sn
|
||||
}
|
||||
return srv.GenerateSN(prefix, randSuffixLength)
|
||||
|
||||
}
|
||||
147
server/admin/service/finance/refundRecord.go
Normal file
147
server/admin/service/finance/refundRecord.go
Normal file
@@ -0,0 +1,147 @@
|
||||
package finance
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"gorm.io/gorm"
|
||||
"likeadmin/admin/schemas/req"
|
||||
"likeadmin/admin/schemas/resp"
|
||||
"likeadmin/constant"
|
||||
"likeadmin/core/request"
|
||||
"likeadmin/core/response"
|
||||
"likeadmin/dao"
|
||||
"likeadmin/util"
|
||||
"math/rand"
|
||||
"strconv"
|
||||
"time"
|
||||
)
|
||||
|
||||
type IRefundRecordService interface {
|
||||
List(c *gin.Context, page request.PageReq, listReq req.RefundRecordListReq) (res response.PageResp, e error)
|
||||
Stat(c *gin.Context) (resp resp.Stat, e error)
|
||||
GenerateSN(prefix string, randSuffixLength int) string
|
||||
}
|
||||
|
||||
// NewRefundRecordService 初始化
|
||||
func NewRefundRecordService(db *gorm.DB, dao *dao.Query) IRefundRecordService {
|
||||
return &refundRecordService{db: db, dao: dao}
|
||||
}
|
||||
|
||||
// refundRecordService 退款记录服务实现类
|
||||
type refundRecordService struct {
|
||||
db *gorm.DB
|
||||
dao *dao.Query
|
||||
}
|
||||
|
||||
// List 退款记录列表
|
||||
func (srv refundRecordService) List(c *gin.Context, page request.PageReq, listReq req.RefundRecordListReq) (res response.PageResp, e error) {
|
||||
// 分页信息
|
||||
limit := page.PageSize
|
||||
offset := page.PageSize * (page.PageNo - 1)
|
||||
|
||||
m := srv.dao.RefundRecord
|
||||
u := srv.dao.User
|
||||
q := m.WithContext(c)
|
||||
|
||||
// 查询
|
||||
if listReq.Sn != "" {
|
||||
q = q.Where(m.Sn.Eq(listReq.Sn))
|
||||
}
|
||||
if listReq.OrderSn != "" {
|
||||
q = q.Where(m.OrderSn.Eq(listReq.OrderSn))
|
||||
}
|
||||
if listReq.UserSn > 0 {
|
||||
q = q.Where(m.UserSn.Eq(listReq.UserSn))
|
||||
}
|
||||
|
||||
if listReq.RefundType > 0 {
|
||||
q = q.Where(m.RefundType.Eq(listReq.RefundType))
|
||||
}
|
||||
|
||||
// 时间范围查询
|
||||
if listReq.StartTime != "" && listReq.EndTime != "" {
|
||||
startTime, err := util.DateToTimestamp(listReq.StartTime)
|
||||
if e = response.CheckErr(err, "DateToTimestamp err"); e != nil {
|
||||
return
|
||||
}
|
||||
|
||||
endTime, err := util.DateToTimestamp(listReq.EndTime)
|
||||
if e = response.CheckErr(err, "DateToTimestamp err"); e != nil {
|
||||
return
|
||||
}
|
||||
|
||||
q = q.Where(m.CreateTime.Gt(int32(startTime)), m.CreateTime.Lt(int32(endTime)))
|
||||
}
|
||||
|
||||
// 总数
|
||||
count, err := q.Count()
|
||||
if e = response.CheckErr(err, "List Count err"); e != nil {
|
||||
return
|
||||
}
|
||||
// 数据
|
||||
objs, err := q.Preload(m.User.Select(u.ID, u.Avatar, u.Nickname)).Limit(limit).Offset(offset).Order(m.ID.Desc()).Find()
|
||||
if e = response.CheckErr(err, "List Find err"); e != nil {
|
||||
return
|
||||
}
|
||||
var resps []resp.RefundRecordResp
|
||||
response.Copy(&resps, objs)
|
||||
|
||||
for i, resp := range resps {
|
||||
resps[i].User.Avatar = util.UrlUtil.ToAbsoluteUrl(resp.User.Avatar)
|
||||
resps[i].RefundTypeText = constant.GetRefundTypeDesc(resp.RefundType)
|
||||
resps[i].RefundStatusText = constant.GetRefundStatusDesc(resp.RefundStatus)
|
||||
}
|
||||
|
||||
return response.PageResp{
|
||||
PageNo: page.PageNo,
|
||||
PageSize: page.PageSize,
|
||||
Count: count,
|
||||
Lists: resps,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Stat 统计退款金额
|
||||
func (srv refundRecordService) Stat(c *gin.Context) (resp resp.Stat, e error) {
|
||||
m := srv.dao.RefundRecord
|
||||
q := m.WithContext(c)
|
||||
|
||||
//累计退款金额
|
||||
err := q.Select(m.OrderAmount.Sum().As("total")).Scan(&resp)
|
||||
if e = response.CheckErr(err, "List Count err"); e != nil {
|
||||
return
|
||||
}
|
||||
//累计退款中金额
|
||||
err = q.Where(m.RefundStatus.Eq(constant.RefundStatusRefunding)).Select(m.OrderAmount.Sum().As("ing")).Scan(&resp)
|
||||
if e = response.CheckErr(err, "List Count err"); e != nil {
|
||||
return
|
||||
}
|
||||
//累计已退款金额
|
||||
err = q.Where(m.RefundStatus.Eq(constant.RefundStatusRefunded)).Select(m.OrderAmount.Sum().As("success")).Scan(&resp)
|
||||
if e = response.CheckErr(err, "List Count err"); e != nil {
|
||||
return
|
||||
}
|
||||
//累计退款失败金额
|
||||
err = q.Where(m.RefundStatus.Eq(constant.RefundStatusFail)).Select(m.OrderAmount.Sum().As("error")).Scan(&resp)
|
||||
if e = response.CheckErr(err, "List Count err"); e != nil {
|
||||
return
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// GenerateSN 生成随机单号
|
||||
func (srv refundRecordService) GenerateSN(prefix string, randSuffixLength int) string {
|
||||
suffix := ""
|
||||
for i := 0; i < randSuffixLength; i++ {
|
||||
suffix += strconv.Itoa(rand.Intn(10))
|
||||
}
|
||||
|
||||
sn := prefix + time.Now().Format("20060102150405") + suffix
|
||||
|
||||
ua := srv.dao.RefundRecord
|
||||
_, err := ua.Where(ua.Sn.Eq(sn)).Select(ua.Sn).Take()
|
||||
if err == gorm.ErrRecordNotFound {
|
||||
return sn
|
||||
}
|
||||
return srv.GenerateSN(prefix, randSuffixLength)
|
||||
|
||||
}
|
||||
54
server/admin/service/setting/login.go
Normal file
54
server/admin/service/setting/login.go
Normal file
@@ -0,0 +1,54 @@
|
||||
package setting
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"gorm.io/gorm"
|
||||
"likeadmin/admin/schemas/req"
|
||||
"likeadmin/admin/schemas/resp"
|
||||
"likeadmin/core/response"
|
||||
"likeadmin/util"
|
||||
)
|
||||
|
||||
type ISettingLoginService interface {
|
||||
Detail() (res resp.SettingLoginResp, e error)
|
||||
Save(editReq req.SettingLoginReq) (e error)
|
||||
}
|
||||
|
||||
// NewSettingLoginService 初始化
|
||||
func NewSettingLoginService(db *gorm.DB) ISettingLoginService {
|
||||
return &settingLoginService{db: db}
|
||||
}
|
||||
|
||||
// settingLoginService 系统登录服务实现类
|
||||
type settingLoginService struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
// 配置详情
|
||||
func (loginSrv settingLoginService) Detail() (res resp.SettingLoginResp, e error) {
|
||||
str, err := util.ConfigUtil.GetVal(loginSrv.db, "login", "config", "{\"loginWay\":[1,2],\"forceBindMobile\":0,\"openAgreement\":1,\"openOtherAuth\":1,\"autoLoginAuth\":[1,2]}")
|
||||
if e = response.CheckErr(err, "Detail Get err"); e != nil {
|
||||
return
|
||||
}
|
||||
_ = json.Unmarshal([]byte(str), &res)
|
||||
return
|
||||
}
|
||||
|
||||
// Save
|
||||
func (loginSrv settingLoginService) Save(editReq req.SettingLoginReq) (e error) {
|
||||
marshal, err := json.Marshal(editReq)
|
||||
if err != nil {
|
||||
if e = response.CheckErr(err, "Save Set name err"); e != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
err = util.ConfigUtil.Set(loginSrv.db, "login", "config", string(marshal))
|
||||
if e = response.CheckErr(err, "Save Set name err"); e != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// 更新缓存
|
||||
util.RedisUtil.HDel("login", "config")
|
||||
|
||||
return
|
||||
}
|
||||
109
server/admin/service/setting/notice.go
Normal file
109
server/admin/service/setting/notice.go
Normal file
@@ -0,0 +1,109 @@
|
||||
package setting
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"github.com/gin-gonic/gin"
|
||||
"gorm.io/gorm"
|
||||
"likeadmin/admin/schemas/req"
|
||||
"likeadmin/admin/schemas/resp"
|
||||
"likeadmin/core/request"
|
||||
"likeadmin/core/response"
|
||||
"likeadmin/dao"
|
||||
"likeadmin/model"
|
||||
)
|
||||
|
||||
type INoticeSettingService interface {
|
||||
List(c *gin.Context, page request.PageReq, listReq req.NoticeSettingListReq) (res response.PageResp, e error)
|
||||
Detail(c *gin.Context, id int32) (res resp.NoticeSettingResp, e error)
|
||||
Edit(c *gin.Context, editReq req.NoticeSettingEditReq) (e error)
|
||||
}
|
||||
|
||||
// NewNoticeSettingService 初始化
|
||||
func NewNoticeSettingService(db *gorm.DB, dao *dao.Query) INoticeSettingService {
|
||||
return ¬iceSettingService{db: db, dao: dao}
|
||||
}
|
||||
|
||||
// noticeSettingService 通知设置服务实现类
|
||||
type noticeSettingService struct {
|
||||
db *gorm.DB
|
||||
dao *dao.Query
|
||||
}
|
||||
|
||||
// List 通知设置列表
|
||||
func (srv noticeSettingService) List(c *gin.Context, page request.PageReq, listReq req.NoticeSettingListReq) (res response.PageResp, e error) {
|
||||
// 分页信息
|
||||
limit := page.PageSize
|
||||
offset := page.PageSize * (page.PageNo - 1)
|
||||
|
||||
// 总数
|
||||
var count int64
|
||||
m := srv.dao.NoticeSetting
|
||||
q := m.WithContext(c)
|
||||
|
||||
q = q.Where(m.Recipient.Eq(listReq.Recipient))
|
||||
|
||||
count, err := q.Count()
|
||||
if e = response.CheckErr(err, "List Count err"); e != nil {
|
||||
return
|
||||
}
|
||||
|
||||
notices, err := q.Limit(limit).Offset(offset).Find()
|
||||
if e = response.CheckErr(err, "List Find err"); e != nil {
|
||||
return
|
||||
}
|
||||
|
||||
return response.PageResp{
|
||||
PageNo: page.PageNo,
|
||||
PageSize: page.PageSize,
|
||||
Count: count,
|
||||
Lists: notices,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Detail 通知设置详情
|
||||
func (srv noticeSettingService) Detail(c *gin.Context, id int32) (res resp.NoticeSettingResp, e error) {
|
||||
m := srv.dao.NoticeSetting
|
||||
q := m.WithContext(c)
|
||||
|
||||
first, err := q.Where(m.ID.Eq(id)).First()
|
||||
if e = response.CheckErrDBNotRecord(err, "数据不存在!"); e != nil {
|
||||
return
|
||||
}
|
||||
if e = response.CheckErr(err, "Detail First err"); e != nil {
|
||||
return
|
||||
}
|
||||
|
||||
response.Copy(&res, first)
|
||||
return
|
||||
}
|
||||
|
||||
// Edit 通知设置编辑
|
||||
func (srv noticeSettingService) Edit(c *gin.Context, editReq req.NoticeSettingEditReq) (e error) {
|
||||
|
||||
m := srv.dao.NoticeSetting
|
||||
q := m.WithContext(c)
|
||||
|
||||
_, err := q.Where(m.ID.Eq(editReq.Id)).Select(m.ID).Take()
|
||||
// 校验
|
||||
if e = response.CheckErrDBNotRecord(err, "数据不存在!"); e != nil {
|
||||
return
|
||||
}
|
||||
if e = response.CheckErr(err, "Edit First err"); e != nil {
|
||||
return
|
||||
}
|
||||
|
||||
SmsNoticeStr, _ := json.Marshal(editReq.Template.SmsNotice)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
mod := &model.NoticeSetting{
|
||||
ID: editReq.Id,
|
||||
SmsNotice: string(SmsNoticeStr),
|
||||
}
|
||||
// 更新
|
||||
_, err = q.Where(m.ID.Eq(editReq.Id)).Updates(mod)
|
||||
|
||||
e = response.CheckErr(err, "Edit Updates err")
|
||||
return
|
||||
}
|
||||
177
server/admin/service/setting/pay.go
Normal file
177
server/admin/service/setting/pay.go
Normal file
@@ -0,0 +1,177 @@
|
||||
package setting
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"github.com/gin-gonic/gin"
|
||||
"gorm.io/gorm"
|
||||
"likeadmin/admin/schemas/req"
|
||||
"likeadmin/admin/schemas/resp"
|
||||
"likeadmin/core/response"
|
||||
"likeadmin/dao"
|
||||
"likeadmin/util"
|
||||
"sort"
|
||||
)
|
||||
|
||||
type IPaySettingService interface {
|
||||
List(c *gin.Context) (res []resp.PaySettingResp, e error)
|
||||
Detail(c *gin.Context, name string) (res resp.PaySettingResp, e error)
|
||||
Set(c *gin.Context, editReq req.PaySettingEditReq) (e error)
|
||||
GetWay(c *gin.Context) (all map[string][]resp.PaySceneResp, e error)
|
||||
SetWay(c *gin.Context, setReq map[string][]req.PaySceneSetReq) (e error)
|
||||
}
|
||||
|
||||
// NewPaySettingService 初始化
|
||||
func NewPaySettingService(db *gorm.DB, dao *dao.Query) IPaySettingService {
|
||||
return &paySettingService{db: db, dao: dao}
|
||||
}
|
||||
|
||||
// paySettingService 通知设置服务实现类
|
||||
type paySettingService struct {
|
||||
db *gorm.DB
|
||||
dao *dao.Query
|
||||
}
|
||||
|
||||
// List 通知设置列表
|
||||
func (srv paySettingService) List(c *gin.Context) (res []resp.PaySettingResp, e error) {
|
||||
|
||||
data, err := util.ConfigUtil.Get(srv.db, "pay_config")
|
||||
if e = response.CheckErr(err, "Detail Get err"); e != nil {
|
||||
return
|
||||
}
|
||||
|
||||
for _, name := range data {
|
||||
if name != "" {
|
||||
var item resp.PaySettingResp
|
||||
err := json.Unmarshal([]byte(name), &item)
|
||||
// 排除 default 值
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
item.Icon = util.UrlUtil.ToAbsoluteUrl(item.Icon)
|
||||
res = append(res, item)
|
||||
}
|
||||
}
|
||||
|
||||
// 按照排序字段进行排序
|
||||
sort.Slice(res, func(i, j int) bool {
|
||||
return res[i].Sort < res[j].Sort
|
||||
})
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
||||
// Detail 支付设置详情
|
||||
func (srv paySettingService) Detail(c *gin.Context, name string) (res resp.PaySettingResp, e error) {
|
||||
data, err := util.ConfigUtil.GetVal(srv.db, "pay_config", name, "")
|
||||
if e = response.CheckErr(err, "Detail Get err"); e != nil {
|
||||
return
|
||||
}
|
||||
var item resp.PaySettingResp
|
||||
_ = json.Unmarshal([]byte(data), &item)
|
||||
response.Copy(&res, item)
|
||||
res.Icon = util.UrlUtil.ToAbsoluteUrl(res.Icon)
|
||||
return
|
||||
}
|
||||
|
||||
// Set 设置支付配置
|
||||
func (srv paySettingService) Set(c *gin.Context, editReq req.PaySettingEditReq) (e error) {
|
||||
editReq.Icon = util.UrlUtil.ToRelativeUrl(editReq.Icon)
|
||||
marshal, err := json.Marshal(editReq)
|
||||
if err != nil {
|
||||
if e = response.CheckErr(err, "Save Set name err"); e != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
err = util.ConfigUtil.Set(srv.db, "pay_config", editReq.Name, string(marshal))
|
||||
if e = response.CheckErr(err, "Save Set name err"); e != nil {
|
||||
return
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// GetWay 获取支付方式
|
||||
func (srv paySettingService) GetWay(c *gin.Context) (all map[string][]resp.PaySceneResp, e error) {
|
||||
// 获取支付方式列表
|
||||
config, err := util.ConfigUtil.Get(srv.db, "pay_config")
|
||||
if e = response.CheckErr(err, "Detail Get err"); e != nil {
|
||||
return
|
||||
}
|
||||
|
||||
Cfg := make(map[string]resp.PaySettingResp)
|
||||
for payName := range config {
|
||||
if config[payName] != "" {
|
||||
var item resp.PaySettingResp
|
||||
err = json.Unmarshal([]byte(config[payName]), &item)
|
||||
// 排除 default 值
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
item.Icon = util.UrlUtil.ToAbsoluteUrl(item.Icon)
|
||||
Cfg[payName] = item
|
||||
}
|
||||
}
|
||||
|
||||
data, err := util.ConfigUtil.Get(srv.db, "pay_scene")
|
||||
if e = response.CheckErr(err, "Detail Get err"); e != nil {
|
||||
return
|
||||
}
|
||||
|
||||
var respall = make(map[string][]resp.PaySceneResp)
|
||||
|
||||
for sceneName := range data {
|
||||
var res []resp.PaySceneResp
|
||||
|
||||
if data[sceneName] != "" {
|
||||
var items []resp.PaySceneResp
|
||||
err = json.Unmarshal([]byte(data[sceneName]), &items)
|
||||
// 排除 default 值
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
res = append(res, items...)
|
||||
// 更新支付的配置项
|
||||
for i, _ := range res {
|
||||
res[i].PaymentName = Cfg[res[i].PaymentName].Name
|
||||
res[i].DisplayName = Cfg[res[i].PaymentName].DisplayName
|
||||
res[i].Icon = Cfg[res[i].PaymentName].Icon
|
||||
}
|
||||
|
||||
} else {
|
||||
// 没有配置项时给定默认项
|
||||
for payment := range Cfg {
|
||||
res = append(res, resp.PaySceneResp{
|
||||
Scene: sceneName,
|
||||
IsDefault: 0,
|
||||
Status: 0,
|
||||
PaymentName: payment,
|
||||
DisplayName: Cfg[payment].DisplayName,
|
||||
Icon: Cfg[payment].Icon,
|
||||
})
|
||||
}
|
||||
}
|
||||
respall[sceneName] = res
|
||||
}
|
||||
|
||||
return respall, nil
|
||||
}
|
||||
|
||||
// SetWay 设置支付方式
|
||||
func (srv paySettingService) SetWay(c *gin.Context, setReq map[string][]req.PaySceneSetReq) (e error) {
|
||||
|
||||
for name := range setReq {
|
||||
marshal, err := json.Marshal(setReq[name])
|
||||
if err != nil {
|
||||
if e = response.CheckErr(err, "Save Set name err"); e != nil {
|
||||
break
|
||||
}
|
||||
}
|
||||
err = util.ConfigUtil.Set(srv.db, "pay_scene", name, string(marshal))
|
||||
if e = response.CheckErr(err, "Save Set name err"); e != nil {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
60
server/admin/service/setting/recharge.go
Normal file
60
server/admin/service/setting/recharge.go
Normal file
@@ -0,0 +1,60 @@
|
||||
package setting
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"github.com/gin-gonic/gin"
|
||||
"gorm.io/gorm"
|
||||
"likeadmin/admin/schemas/req"
|
||||
"likeadmin/admin/schemas/resp"
|
||||
"likeadmin/core/response"
|
||||
"likeadmin/dao"
|
||||
"likeadmin/util"
|
||||
)
|
||||
|
||||
const (
|
||||
RechargeStatusOn = 1 // 状态开启
|
||||
RechargeStatusOff = 0 // 状态关闭
|
||||
)
|
||||
|
||||
type IRechargeSettingService interface {
|
||||
Detail(c *gin.Context) (res resp.RechargeSettingResp, e error)
|
||||
Edit(c *gin.Context, editReq req.RechargeSettingEditReq) (e error)
|
||||
}
|
||||
|
||||
// NewRechargeSettingService 初始化
|
||||
func NewRechargeSettingService(db *gorm.DB, dao *dao.Query) IRechargeSettingService {
|
||||
return &rechargeSettingService{db: db, dao: dao}
|
||||
}
|
||||
|
||||
// rechargeSettingService 通知设置服务实现类
|
||||
type rechargeSettingService struct {
|
||||
db *gorm.DB
|
||||
dao *dao.Query
|
||||
}
|
||||
|
||||
// Detail 通知设置详情
|
||||
func (srv rechargeSettingService) Detail(c *gin.Context) (res resp.RechargeSettingResp, e error) {
|
||||
str, err := util.ConfigUtil.GetVal(srv.db, "recharge", "config", "")
|
||||
if e = response.CheckErr(err, "Detail Get err"); e != nil {
|
||||
return
|
||||
}
|
||||
var item resp.RechargeSettingResp
|
||||
_ = json.Unmarshal([]byte(str), &item)
|
||||
response.Copy(&res, item)
|
||||
return
|
||||
}
|
||||
|
||||
// Edit 通知设置编辑
|
||||
func (srv rechargeSettingService) Edit(c *gin.Context, editReq req.RechargeSettingEditReq) (e error) {
|
||||
marshal, err := json.Marshal(editReq)
|
||||
if err != nil {
|
||||
if e = response.CheckErr(err, "Save Set name err"); e != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
err = util.ConfigUtil.Set(srv.db, "recharge", "config", string(marshal))
|
||||
if e = response.CheckErr(err, "Save Set name err"); e != nil {
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
97
server/admin/service/setting/sms.go
Normal file
97
server/admin/service/setting/sms.go
Normal file
@@ -0,0 +1,97 @@
|
||||
package setting
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"github.com/gin-gonic/gin"
|
||||
"gorm.io/gorm"
|
||||
"likeadmin/admin/schemas/req"
|
||||
"likeadmin/admin/schemas/resp"
|
||||
"likeadmin/core/response"
|
||||
"likeadmin/dao"
|
||||
"likeadmin/util"
|
||||
)
|
||||
|
||||
const (
|
||||
SmsStatusOn = 1 // 状态开启
|
||||
SmsStatusOff = 0 // 状态关闭
|
||||
)
|
||||
|
||||
type ISmsSettingService interface {
|
||||
List() (list []resp.SmsSettingResp, e error)
|
||||
Detail(c *gin.Context, name string) (res resp.SmsSettingResp, e error)
|
||||
Edit(c *gin.Context, editReq req.SmsSettingEditReq) (e error)
|
||||
}
|
||||
|
||||
// NewSmsSettingService 初始化
|
||||
func NewSmsSettingService(db *gorm.DB, dao *dao.Query) ISmsSettingService {
|
||||
return &smsSettingService{db: db, dao: dao}
|
||||
}
|
||||
|
||||
// smsSettingService 通知设置服务实现类
|
||||
type smsSettingService struct {
|
||||
db *gorm.DB
|
||||
dao *dao.Query
|
||||
}
|
||||
|
||||
// List 通知设置列表
|
||||
func (srv smsSettingService) List() (list []resp.SmsSettingResp, e error) {
|
||||
data, err := util.ConfigUtil.Get(srv.db, "sms")
|
||||
if e = response.CheckErr(err, "Detail Get err"); e != nil {
|
||||
return
|
||||
}
|
||||
|
||||
for _, name := range data {
|
||||
if name != "" {
|
||||
var item resp.SmsSettingResp
|
||||
err := json.Unmarshal([]byte(name), &item)
|
||||
// 排除 default 值
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
list = append(list, item)
|
||||
}
|
||||
}
|
||||
|
||||
return list, nil
|
||||
}
|
||||
|
||||
// Detail 通知设置详情
|
||||
func (srv smsSettingService) Detail(c *gin.Context, name string) (res resp.SmsSettingResp, e error) {
|
||||
data, err := util.ConfigUtil.GetVal(srv.db, "sms", name, "")
|
||||
if e = response.CheckErr(err, "Detail Get err"); e != nil {
|
||||
return
|
||||
}
|
||||
var item resp.SmsSettingResp
|
||||
_ = json.Unmarshal([]byte(data), &item)
|
||||
response.Copy(&res, item)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Edit 通知设置编辑
|
||||
func (srv smsSettingService) Edit(c *gin.Context, editReq req.SmsSettingEditReq) (e error) {
|
||||
marshal, err := json.Marshal(editReq)
|
||||
if err != nil {
|
||||
if e = response.CheckErr(err, "Save Set name err"); e != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
err = util.ConfigUtil.Set(srv.db, "sms", editReq.Alias, string(marshal))
|
||||
if e = response.CheckErr(err, "Save Set name err"); e != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// 设置开启
|
||||
if editReq.Status == SmsStatusOn {
|
||||
err = util.ConfigUtil.Set(srv.db, "sms", "default", editReq.Alias)
|
||||
if e = response.CheckErr(err, "Save Set name err"); e != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 删除缓存
|
||||
util.RedisUtil.HDel("sms", "default")
|
||||
util.RedisUtil.HDel("sms", editReq.Alias)
|
||||
|
||||
return
|
||||
}
|
||||
@@ -1,26 +1,33 @@
|
||||
package setting
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"gorm.io/gorm"
|
||||
"likeadmin/admin/schemas/req"
|
||||
"likeadmin/admin/schemas/resp"
|
||||
"likeadmin/core/response"
|
||||
"likeadmin/util"
|
||||
)
|
||||
|
||||
const (
|
||||
StorageStatusOn = 1 // 状态开启
|
||||
StorageStatusOff = 0 // 状态关闭
|
||||
)
|
||||
|
||||
type ISettingStorageService interface {
|
||||
List() ([]map[string]interface{}, error)
|
||||
Detail(alias string) (res map[string]interface{}, e error)
|
||||
List() (list []resp.StorageSettingResp, e error)
|
||||
Detail(engine string) (res resp.StorageSettingResp, e error)
|
||||
Edit(editReq req.SettingStorageEditReq) (e error)
|
||||
Change(alias string, status int) (e error)
|
||||
}
|
||||
|
||||
//NewSettingStorageService 初始化
|
||||
// NewSettingStorageService 初始化
|
||||
func NewSettingStorageService(db *gorm.DB) ISettingStorageService {
|
||||
return &settingStorageService{db: db}
|
||||
}
|
||||
|
||||
//settingStorageService 存储配置服务实现类
|
||||
// settingStorageService 存储配置服务实现类
|
||||
type settingStorageService struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
@@ -29,63 +36,100 @@ var storageList = []map[string]interface{}{
|
||||
{"name": "本地存储", "alias": "local", "describe": "存储在本地服务器", "status": 0},
|
||||
}
|
||||
|
||||
//List 存储列表
|
||||
func (sSrv settingStorageService) List() ([]map[string]interface{}, error) {
|
||||
// TODO: engine默认local
|
||||
engine := "local"
|
||||
mapList := storageList
|
||||
for i := 0; i < len(mapList); i++ {
|
||||
if engine == mapList[i]["alias"] {
|
||||
mapList[i]["status"] = 1
|
||||
// List 存储列表
|
||||
func (sSrv settingStorageService) List() (list []resp.StorageSettingResp, e error) {
|
||||
data, err := util.ConfigUtil.Get(sSrv.db, "storage")
|
||||
if e = response.CheckErr(err, "Detail Get err"); e != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// 获取默认开启项
|
||||
defaultEngine, err := util.ConfigUtil.GetVal(sSrv.db, "storage", "default", "local")
|
||||
if e = response.CheckErr(err, "Detail Get err"); e != nil {
|
||||
return
|
||||
}
|
||||
|
||||
for _, name := range data {
|
||||
if name != "" {
|
||||
var item resp.StorageSettingResp
|
||||
err := json.Unmarshal([]byte(name), &item)
|
||||
// 排除 default 值
|
||||
if err != nil {
|
||||
println(err.Error())
|
||||
continue
|
||||
}
|
||||
|
||||
if defaultEngine == item.Engine {
|
||||
item.Status = StorageStatusOn
|
||||
} else {
|
||||
item.Status = StorageStatusOff
|
||||
}
|
||||
|
||||
list = append(list, item)
|
||||
}
|
||||
}
|
||||
return mapList, nil
|
||||
|
||||
return list, nil
|
||||
}
|
||||
|
||||
//Detail 存储详情
|
||||
func (sSrv settingStorageService) Detail(alias string) (res map[string]interface{}, e error) {
|
||||
// TODO: engine默认local
|
||||
engine := "local"
|
||||
cnf, err := util.ConfigUtil.GetMap(sSrv.db, "storage", alias)
|
||||
if e = response.CheckErr(err, "Detail GetMap err"); e != nil {
|
||||
// Detail 存储详情
|
||||
func (sSrv settingStorageService) Detail(engine string) (res resp.StorageSettingResp, e error) {
|
||||
data, err := util.ConfigUtil.GetVal(sSrv.db, "storage", engine, "")
|
||||
if e = response.CheckErr(err, "Detail Get err"); e != nil {
|
||||
return
|
||||
}
|
||||
status := 0
|
||||
if engine == alias {
|
||||
status = 1
|
||||
}
|
||||
return map[string]interface{}{
|
||||
"name": cnf["name"],
|
||||
"alias": alias,
|
||||
"status": status,
|
||||
}, nil
|
||||
}
|
||||
|
||||
//Edit 存储编辑
|
||||
func (sSrv settingStorageService) Edit(editReq req.SettingStorageEditReq) (e error) {
|
||||
// TODO: engine默认local
|
||||
engine := "local"
|
||||
if engine != editReq.Alias {
|
||||
return response.Failed.Make(fmt.Sprintf("engine:%s 暂时不支持", editReq.Alias))
|
||||
}
|
||||
json, err := util.ToolsUtil.ObjToJson(map[string]interface{}{"name": "本地存储"})
|
||||
if e = response.CheckErr(err, "Edit ObjToJson err"); e != nil {
|
||||
// 获取默认开启项
|
||||
defaultEngine, err := util.ConfigUtil.GetVal(sSrv.db, "storage", "default", "local")
|
||||
if e = response.CheckErr(err, "Detail Get err"); e != nil {
|
||||
return
|
||||
}
|
||||
err = util.ConfigUtil.Set(sSrv.db, "storage", editReq.Alias, json)
|
||||
if e = response.CheckErr(err, "Edit Set alias err"); e != nil {
|
||||
return
|
||||
}
|
||||
if editReq.Status == 1 {
|
||||
err = util.ConfigUtil.Set(sSrv.db, "storage", "default", editReq.Alias)
|
||||
|
||||
var item resp.StorageSettingResp
|
||||
_ = json.Unmarshal([]byte(data), &item)
|
||||
|
||||
if defaultEngine == item.Engine {
|
||||
item.Status = StorageStatusOn
|
||||
} else {
|
||||
util.ConfigUtil.Set(sSrv.db, "storage", "default", "")
|
||||
item.Status = StorageStatusOff
|
||||
}
|
||||
e = response.CheckErr(err, "Edit Set default err")
|
||||
|
||||
response.Copy(&res, item)
|
||||
return
|
||||
}
|
||||
|
||||
//Change 存储切换
|
||||
// Edit 存储编辑
|
||||
func (sSrv settingStorageService) Edit(editReq req.SettingStorageEditReq) (e error) {
|
||||
|
||||
// 设置开启
|
||||
if editReq.Status == StorageStatusOn {
|
||||
err := util.ConfigUtil.Set(sSrv.db, "storage", "default", editReq.Engine)
|
||||
if e = response.CheckErr(err, "Save Set name err"); e != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
editReq.Status = 0
|
||||
marshal, err := json.Marshal(editReq)
|
||||
if err != nil {
|
||||
if e = response.CheckErr(err, "Save Set name err"); e != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
err = util.ConfigUtil.Set(sSrv.db, "storage", editReq.Engine, string(marshal))
|
||||
if e = response.CheckErr(err, "Save Set name err"); e != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// 删除缓存
|
||||
util.RedisUtil.HDel("storage", "default")
|
||||
util.RedisUtil.HDel("storage", editReq.Engine)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Change 存储切换
|
||||
func (sSrv settingStorageService) Change(alias string, status int) (e error) {
|
||||
// TODO: engine默认local
|
||||
engine := "local"
|
||||
|
||||
48
server/admin/service/setting/user.go
Normal file
48
server/admin/service/setting/user.go
Normal file
@@ -0,0 +1,48 @@
|
||||
package setting
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"gorm.io/gorm"
|
||||
"likeadmin/admin/schemas/req"
|
||||
"likeadmin/admin/schemas/resp"
|
||||
"likeadmin/core/response"
|
||||
"likeadmin/dao"
|
||||
"likeadmin/util"
|
||||
)
|
||||
|
||||
type IUserService interface {
|
||||
Get(c *gin.Context) (res resp.UserSetResp, e error)
|
||||
Set(c *gin.Context, req req.UserSetReq) (e error)
|
||||
}
|
||||
|
||||
// NewUserService 初始化
|
||||
func NewUserService(db *gorm.DB, dao *dao.Query) IUserService {
|
||||
return &userService{db: db, dao: dao}
|
||||
}
|
||||
|
||||
// userService 系统管理员服务实现类
|
||||
type userService struct {
|
||||
db *gorm.DB
|
||||
dao *dao.Query
|
||||
}
|
||||
|
||||
// Get 用户设置
|
||||
func (srv userService) Get(c *gin.Context) (res resp.UserSetResp, e error) {
|
||||
str, err := util.ConfigUtil.GetVal(srv.db, "user", "defaultAvatar", "/api/static/default_avatar.png")
|
||||
if e = response.CheckErr(err, "Detail Get err"); e != nil {
|
||||
return
|
||||
}
|
||||
res.DefaultAvatar = str
|
||||
res.DefaultAvatar = util.UrlUtil.ToAbsoluteUrl(res.DefaultAvatar)
|
||||
return
|
||||
}
|
||||
|
||||
// Set 设置用户配置
|
||||
func (srv userService) Set(c *gin.Context, req req.UserSetReq) (e error) {
|
||||
path := util.UrlUtil.ToRelativeUrl(req.DefaultAvatar)
|
||||
err := util.ConfigUtil.Set(srv.db, "user", "defaultAvatar", path)
|
||||
if e = response.CheckErr(err, "Save Set name err"); e != nil {
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -31,25 +31,25 @@ type ISystemAuthAdminService interface {
|
||||
CacheAdminUserByUid(id uint) (err error)
|
||||
}
|
||||
|
||||
//NewSystemAuthAdminService 初始化
|
||||
// NewSystemAuthAdminService 初始化
|
||||
func NewSystemAuthAdminService(db *gorm.DB, permSrv ISystemAuthPermService, roleSrv ISystemAuthRoleService) ISystemAuthAdminService {
|
||||
return &systemAuthAdminService{db: db, permSrv: permSrv, roleSrv: roleSrv}
|
||||
}
|
||||
|
||||
//systemAuthAdminService 系统管理员服务实现类
|
||||
// systemAuthAdminService 系统管理员服务实现类
|
||||
type systemAuthAdminService struct {
|
||||
db *gorm.DB
|
||||
permSrv ISystemAuthPermService
|
||||
roleSrv ISystemAuthRoleService
|
||||
}
|
||||
|
||||
//FindByUsername 根据账号查找管理员
|
||||
// FindByUsername 根据账号查找管理员
|
||||
func (adminSrv systemAuthAdminService) FindByUsername(username string) (admin system.SystemAuthAdmin, err error) {
|
||||
err = adminSrv.db.Where("username = ?", username).Limit(1).First(&admin).Error
|
||||
return
|
||||
}
|
||||
|
||||
//Self 当前管理员
|
||||
// Self 当前管理员
|
||||
func (adminSrv systemAuthAdminService) Self(adminId uint) (res resp.SystemAuthAdminSelfResp, e error) {
|
||||
// 管理员信息
|
||||
var sysAdmin system.SystemAuthAdmin
|
||||
@@ -92,7 +92,7 @@ func (adminSrv systemAuthAdminService) Self(adminId uint) (res resp.SystemAuthAd
|
||||
return resp.SystemAuthAdminSelfResp{User: admin, Permissions: auths}, nil
|
||||
}
|
||||
|
||||
//List 管理员列表
|
||||
// List 管理员列表
|
||||
func (adminSrv systemAuthAdminService) List(page request.PageReq, listReq req.SystemAuthAdminListReq) (res response.PageResp, e error) {
|
||||
// 分页信息
|
||||
limit := page.PageSize
|
||||
@@ -141,7 +141,7 @@ func (adminSrv systemAuthAdminService) List(page request.PageReq, listReq req.Sy
|
||||
}, nil
|
||||
}
|
||||
|
||||
//Detail 管理员详细
|
||||
// Detail 管理员详细
|
||||
func (adminSrv systemAuthAdminService) Detail(id uint) (res resp.SystemAuthAdminResp, e error) {
|
||||
var sysAdmin system.SystemAuthAdmin
|
||||
err := adminSrv.db.Where("id = ? AND is_delete = ?", id, 0).Limit(1).First(&sysAdmin).Error
|
||||
@@ -159,7 +159,7 @@ func (adminSrv systemAuthAdminService) Detail(id uint) (res resp.SystemAuthAdmin
|
||||
return
|
||||
}
|
||||
|
||||
//Add 管理员新增
|
||||
// Add 管理员新增
|
||||
func (adminSrv systemAuthAdminService) Add(addReq req.SystemAuthAdminAddReq) (e error) {
|
||||
var sysAdmin system.SystemAuthAdmin
|
||||
// 检查username
|
||||
@@ -205,7 +205,7 @@ func (adminSrv systemAuthAdminService) Add(addReq req.SystemAuthAdminAddReq) (e
|
||||
return
|
||||
}
|
||||
|
||||
//Edit 管理员编辑
|
||||
// Edit 管理员编辑
|
||||
func (adminSrv systemAuthAdminService) Edit(c *gin.Context, editReq req.SystemAuthAdminEditReq) (e error) {
|
||||
// 检查id
|
||||
err := adminSrv.db.Where("id = ? AND is_delete = ?", editReq.ID, 0).Limit(1).First(&system.SystemAuthAdmin{}).Error
|
||||
@@ -288,7 +288,7 @@ func (adminSrv systemAuthAdminService) Edit(c *gin.Context, editReq req.SystemAu
|
||||
return
|
||||
}
|
||||
|
||||
//Update 管理员更新
|
||||
// Update 管理员更新
|
||||
func (adminSrv systemAuthAdminService) Update(c *gin.Context, updateReq req.SystemAuthAdminUpdateReq, adminId uint) (e error) {
|
||||
// 检查id
|
||||
var admin system.SystemAuthAdmin
|
||||
@@ -347,7 +347,7 @@ func (adminSrv systemAuthAdminService) Update(c *gin.Context, updateReq req.Syst
|
||||
return
|
||||
}
|
||||
|
||||
//Del 管理员删除
|
||||
// Del 管理员删除
|
||||
func (adminSrv systemAuthAdminService) Del(c *gin.Context, id uint) (e error) {
|
||||
var admin system.SystemAuthAdmin
|
||||
err := adminSrv.db.Where("id = ? AND is_delete = ?", id, 0).Limit(1).First(&admin).Error
|
||||
@@ -368,7 +368,7 @@ func (adminSrv systemAuthAdminService) Del(c *gin.Context, id uint) (e error) {
|
||||
return
|
||||
}
|
||||
|
||||
//Disable 管理员状态切换
|
||||
// Disable 管理员状态切换
|
||||
func (adminSrv systemAuthAdminService) Disable(c *gin.Context, id uint) (e error) {
|
||||
var admin system.SystemAuthAdmin
|
||||
err := adminSrv.db.Where("id = ? AND is_delete = ?", id, 0).Limit(1).Find(&admin).Error
|
||||
@@ -385,12 +385,13 @@ func (adminSrv systemAuthAdminService) Disable(c *gin.Context, id uint) (e error
|
||||
if admin.IsDisable == 0 {
|
||||
isDisable = 1
|
||||
}
|
||||
err = adminSrv.db.Model(&admin).Updates(system.SystemAuthAdmin{IsDisable: isDisable, UpdateTime: time.Now().Unix()}).Error
|
||||
//system.SystemAuthAdmin{IsDisable: isDisable, UpdateTime: time.Now().Unix()}
|
||||
err = adminSrv.db.Model(&admin).Updates(map[string]interface{}{"is_disable": isDisable, "update_time": time.Now().Unix()}).Error
|
||||
e = response.CheckErr(err, "Disable Updates err")
|
||||
return
|
||||
}
|
||||
|
||||
//CacheAdminUserByUid 缓存管理员
|
||||
// CacheAdminUserByUid 缓存管理员
|
||||
func (adminSrv systemAuthAdminService) CacheAdminUserByUid(id uint) (err error) {
|
||||
var admin system.SystemAuthAdmin
|
||||
err = adminSrv.db.Where("id = ?", id).Limit(1).First(&admin).Error
|
||||
|
||||
@@ -7,10 +7,10 @@ import (
|
||||
"gorm.io/gorm"
|
||||
"likeadmin/admin/schemas/req"
|
||||
"likeadmin/admin/schemas/resp"
|
||||
"likeadmin/constant"
|
||||
"likeadmin/core/request"
|
||||
"likeadmin/core/response"
|
||||
"likeadmin/dao"
|
||||
"likeadmin/enum"
|
||||
"likeadmin/model"
|
||||
"likeadmin/util"
|
||||
"math/rand"
|
||||
@@ -23,6 +23,7 @@ type IUserService interface {
|
||||
Detail(c *gin.Context, id int32) (res resp.UserResp, e error)
|
||||
EditField(c *gin.Context, req req.UserEditReq) (e error)
|
||||
AdjustMoney(c *gin.Context, req req.AdjustMoneyReq) (e error)
|
||||
GenerateSN(randSuffixLength int) int32
|
||||
}
|
||||
|
||||
// NewUserService 初始化
|
||||
@@ -83,12 +84,18 @@ func (userSrv userService) List(c *gin.Context, page request.PageReq, listReq re
|
||||
if e = response.CheckErr(err, "List Find err"); e != nil {
|
||||
return
|
||||
}
|
||||
for _, user := range users {
|
||||
user.Avatar = util.UrlUtil.ToAbsoluteUrl(user.Avatar)
|
||||
}
|
||||
|
||||
var lists []resp.UserResp
|
||||
response.Copy(&lists, users)
|
||||
|
||||
return response.PageResp{
|
||||
PageNo: page.PageNo,
|
||||
PageSize: page.PageSize,
|
||||
Count: count,
|
||||
Lists: users,
|
||||
Lists: lists,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -143,7 +150,7 @@ func (userSrv userService) AdjustMoney(c *gin.Context, req req.AdjustMoneyReq) (
|
||||
return
|
||||
}
|
||||
|
||||
if req.Action == enum.INC {
|
||||
if req.Action == constant.INC {
|
||||
// 给余额和充值总数加上金额
|
||||
_, e = tx.User.WithContext(c).Where(u.ID.Eq(req.Id)).UpdateSimple(u.UserMoney.Add(req.Num))
|
||||
if err = response.CheckErr(e, "增加余额失败"); err != nil {
|
||||
@@ -152,11 +159,11 @@ func (userSrv userService) AdjustMoney(c *gin.Context, req req.AdjustMoneyReq) (
|
||||
|
||||
// 写入余额变化日志
|
||||
e = tx.UserAccountLog.Create(&model.UserAccountLog{
|
||||
Sn: userSrv.generateSN("sn", 10),
|
||||
Sn: user.Sn,
|
||||
UserID: user.ID,
|
||||
ChangeObject: enum.GetChangeObject(enum.UmIncAdmin),
|
||||
ChangeType: enum.UmIncAdmin,
|
||||
Action: enum.INC,
|
||||
ChangeObject: constant.GetChangeObject(constant.UmIncAdmin),
|
||||
ChangeType: constant.UmIncAdmin,
|
||||
Action: constant.INC,
|
||||
ChangeAmount: req.Num,
|
||||
LeftAmount: user.UserMoney + req.Num,
|
||||
Remark: req.Remark,
|
||||
@@ -166,7 +173,7 @@ func (userSrv userService) AdjustMoney(c *gin.Context, req req.AdjustMoneyReq) (
|
||||
return
|
||||
}
|
||||
|
||||
} else if req.Action == enum.DEC {
|
||||
} else if req.Action == constant.DEC {
|
||||
// 检查余额是否大于等当前值
|
||||
if user.UserMoney < req.Num {
|
||||
err = response.CheckErr(errors.New("余额不足"), "扣除余额失败")
|
||||
@@ -184,11 +191,11 @@ func (userSrv userService) AdjustMoney(c *gin.Context, req req.AdjustMoneyReq) (
|
||||
|
||||
// 写入余额变化日志
|
||||
e = tx.UserAccountLog.Create(&model.UserAccountLog{
|
||||
Sn: userSrv.generateSN("sn", 10),
|
||||
Sn: user.Sn,
|
||||
UserID: user.ID,
|
||||
ChangeObject: enum.GetChangeObject(enum.UmIncAdmin),
|
||||
ChangeType: enum.UmDecAdmin,
|
||||
Action: enum.DEC,
|
||||
ChangeObject: constant.GetChangeObject(constant.UmIncAdmin),
|
||||
ChangeType: constant.UmDecAdmin,
|
||||
Action: constant.DEC,
|
||||
ChangeAmount: req.Num,
|
||||
LeftAmount: m,
|
||||
Remark: req.Remark,
|
||||
@@ -203,19 +210,20 @@ func (userSrv userService) AdjustMoney(c *gin.Context, req req.AdjustMoneyReq) (
|
||||
}
|
||||
|
||||
// 生成随机单号
|
||||
func (userSrv userService) generateSN(prefix string, randSuffixLength int) string {
|
||||
func (userSrv userService) GenerateSN(randSuffixLength int) int32 {
|
||||
suffix := ""
|
||||
for i := 0; i < randSuffixLength; i++ {
|
||||
suffix += strconv.Itoa(rand.Intn(10))
|
||||
}
|
||||
|
||||
sn := prefix + time.Now().Format("20060102150405") + suffix
|
||||
sn := time.Now().Format("20060102150405") + suffix
|
||||
Sn, _ := strconv.ParseInt(sn, 10, 32)
|
||||
|
||||
ua := userSrv.dao.UserAccountLog
|
||||
_, err := ua.Where(ua.Sn.Eq(sn)).Select(ua.Sn).Take()
|
||||
_, err := ua.Where(ua.Sn.Eq(Sn)).Select(ua.Sn).Take()
|
||||
if err == gorm.ErrRecordNotFound {
|
||||
return sn
|
||||
return int32(Sn)
|
||||
}
|
||||
return userSrv.generateSN(prefix, randSuffixLength)
|
||||
return userSrv.GenerateSN(randSuffixLength)
|
||||
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ import (
|
||||
|
||||
var Config = loadConfig(".")
|
||||
|
||||
//envConfig 环境配置
|
||||
// envConfig 环境配置
|
||||
type envConfig struct {
|
||||
RootPath string // 项目根目录
|
||||
GinMode string `mapstructure:"GIN_MODE"` // gin运行模式
|
||||
@@ -39,7 +39,7 @@ type envConfig struct {
|
||||
UploadVideoExt []string // 上传视频扩展
|
||||
}
|
||||
|
||||
//loadConfig 加载配置
|
||||
// loadConfig 加载配置
|
||||
func loadConfig(envPath string) envConfig {
|
||||
var cfgPath string
|
||||
flag.StringVar(&cfgPath, "c", "", "config file envPath.")
|
||||
@@ -65,7 +65,7 @@ func loadConfig(envPath string) envConfig {
|
||||
// 资源访问前缀
|
||||
PublicPrefix: "/api/uploads",
|
||||
// 上传文件路径
|
||||
UploadDirectory: "/tmp/uploads/likeadmin-go/",
|
||||
UploadDirectory: "/tmp/uploads/byteadmin/",
|
||||
// Redis源配置
|
||||
RedisUrl: "redis://localhost:6379",
|
||||
RedisPoolSize: 100,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package enum
|
||||
package constant
|
||||
|
||||
const (
|
||||
UM = 1 // 变动对象 用户余额(user_money)
|
||||
@@ -12,6 +12,28 @@ const (
|
||||
// UmDecAdmin 用户余额减少类型
|
||||
UmDecAdmin = 100
|
||||
UmDecRechargeRefund = 101
|
||||
|
||||
// 退款状态
|
||||
RefundStatusRefunded = 1 // 已退款
|
||||
RefundStatusRefunding = 0 // 退款中
|
||||
RefundStatusFail = 2 // 退款失败
|
||||
|
||||
// 支付状态
|
||||
PayWayStatusPaid = 1 //已支付
|
||||
PayWayStatusUnpaid = 2 //未支付
|
||||
|
||||
// 退款方式
|
||||
RefundWayOnline = 1 //结上退款
|
||||
RefundWayOffline = 2 // 线下退款
|
||||
|
||||
// 退款类型
|
||||
RefundTypeBack = 1 //后台退款
|
||||
RefundTypeUser = 2 //用户退款
|
||||
|
||||
// 订单类型
|
||||
OrderTypeRecharge = "recharge" // 充值订单
|
||||
OrderTypeOrder = "order" // 商品订单
|
||||
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -33,6 +55,22 @@ var (
|
||||
UmIncRecharge: "充值增加余额",
|
||||
UmDecRechargeRefund: "充值订单退款减少余额",
|
||||
}
|
||||
|
||||
RefundStatusDesc = map[int32]string{
|
||||
RefundStatusRefunding: "退款中",
|
||||
RefundStatusFail: "退款失败",
|
||||
RefundStatusRefunded: "已退款",
|
||||
}
|
||||
|
||||
PayWayStatusDesc = map[int32]string{
|
||||
PayWayStatusPaid: "已支付",
|
||||
PayWayStatusUnpaid: "未支付",
|
||||
}
|
||||
|
||||
RefundTypeDesc = map[int32]string{
|
||||
RefundTypeBack: "后台退款",
|
||||
RefundTypeUser: "用户退款",
|
||||
}
|
||||
)
|
||||
|
||||
// GetChangeObject 获取变动对象
|
||||
@@ -51,6 +89,13 @@ func GetUserMoneyChangeTypeDesc(changeType int32) string {
|
||||
return ChangeTypeDesc[changeType]
|
||||
}
|
||||
|
||||
func GetRefundTypeDesc(refundType int32) string {
|
||||
return RefundTypeDesc[refundType]
|
||||
}
|
||||
func GetRefundStatusDesc(refundStatus int32) string {
|
||||
return RefundStatusDesc[refundStatus]
|
||||
}
|
||||
|
||||
func inArray(needle int32, haystack []int32) bool {
|
||||
for _, item := range haystack {
|
||||
if item == needle {
|
||||
@@ -16,39 +16,64 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
Q = new(Query)
|
||||
User *user
|
||||
UserAccountLog *userAccountLog
|
||||
Q = new(Query)
|
||||
NoticeSetting *noticeSetting
|
||||
RechargeOrder *rechargeOrder
|
||||
RefundLog *refundLog
|
||||
RefundRecord *refundRecord
|
||||
SystemAuthAdmin *systemAuthAdmin
|
||||
User *user
|
||||
UserAccountLog *userAccountLog
|
||||
)
|
||||
|
||||
func SetDefault(db *gorm.DB, opts ...gen.DOOption) {
|
||||
*Q = *Use(db, opts...)
|
||||
NoticeSetting = &Q.NoticeSetting
|
||||
RechargeOrder = &Q.RechargeOrder
|
||||
RefundLog = &Q.RefundLog
|
||||
RefundRecord = &Q.RefundRecord
|
||||
SystemAuthAdmin = &Q.SystemAuthAdmin
|
||||
User = &Q.User
|
||||
UserAccountLog = &Q.UserAccountLog
|
||||
}
|
||||
|
||||
func Use(db *gorm.DB, opts ...gen.DOOption) *Query {
|
||||
return &Query{
|
||||
db: db,
|
||||
User: newUser(db, opts...),
|
||||
UserAccountLog: newUserAccountLog(db, opts...),
|
||||
db: db,
|
||||
NoticeSetting: newNoticeSetting(db, opts...),
|
||||
RechargeOrder: newRechargeOrder(db, opts...),
|
||||
RefundLog: newRefundLog(db, opts...),
|
||||
RefundRecord: newRefundRecord(db, opts...),
|
||||
SystemAuthAdmin: newSystemAuthAdmin(db, opts...),
|
||||
User: newUser(db, opts...),
|
||||
UserAccountLog: newUserAccountLog(db, opts...),
|
||||
}
|
||||
}
|
||||
|
||||
type Query struct {
|
||||
db *gorm.DB
|
||||
|
||||
User user
|
||||
UserAccountLog userAccountLog
|
||||
NoticeSetting noticeSetting
|
||||
RechargeOrder rechargeOrder
|
||||
RefundLog refundLog
|
||||
RefundRecord refundRecord
|
||||
SystemAuthAdmin systemAuthAdmin
|
||||
User user
|
||||
UserAccountLog userAccountLog
|
||||
}
|
||||
|
||||
func (q *Query) Available() bool { return q.db != nil }
|
||||
|
||||
func (q *Query) clone(db *gorm.DB) *Query {
|
||||
return &Query{
|
||||
db: db,
|
||||
User: q.User.clone(db),
|
||||
UserAccountLog: q.UserAccountLog.clone(db),
|
||||
db: db,
|
||||
NoticeSetting: q.NoticeSetting.clone(db),
|
||||
RechargeOrder: q.RechargeOrder.clone(db),
|
||||
RefundLog: q.RefundLog.clone(db),
|
||||
RefundRecord: q.RefundRecord.clone(db),
|
||||
SystemAuthAdmin: q.SystemAuthAdmin.clone(db),
|
||||
User: q.User.clone(db),
|
||||
UserAccountLog: q.UserAccountLog.clone(db),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,21 +87,36 @@ func (q *Query) WriteDB() *Query {
|
||||
|
||||
func (q *Query) ReplaceDB(db *gorm.DB) *Query {
|
||||
return &Query{
|
||||
db: db,
|
||||
User: q.User.replaceDB(db),
|
||||
UserAccountLog: q.UserAccountLog.replaceDB(db),
|
||||
db: db,
|
||||
NoticeSetting: q.NoticeSetting.replaceDB(db),
|
||||
RechargeOrder: q.RechargeOrder.replaceDB(db),
|
||||
RefundLog: q.RefundLog.replaceDB(db),
|
||||
RefundRecord: q.RefundRecord.replaceDB(db),
|
||||
SystemAuthAdmin: q.SystemAuthAdmin.replaceDB(db),
|
||||
User: q.User.replaceDB(db),
|
||||
UserAccountLog: q.UserAccountLog.replaceDB(db),
|
||||
}
|
||||
}
|
||||
|
||||
type queryCtx struct {
|
||||
User IUserDo
|
||||
UserAccountLog IUserAccountLogDo
|
||||
NoticeSetting INoticeSettingDo
|
||||
RechargeOrder IRechargeOrderDo
|
||||
RefundLog IRefundLogDo
|
||||
RefundRecord IRefundRecordDo
|
||||
SystemAuthAdmin ISystemAuthAdminDo
|
||||
User IUserDo
|
||||
UserAccountLog IUserAccountLogDo
|
||||
}
|
||||
|
||||
func (q *Query) WithContext(ctx context.Context) *queryCtx {
|
||||
return &queryCtx{
|
||||
User: q.User.WithContext(ctx),
|
||||
UserAccountLog: q.UserAccountLog.WithContext(ctx),
|
||||
NoticeSetting: q.NoticeSetting.WithContext(ctx),
|
||||
RechargeOrder: q.RechargeOrder.WithContext(ctx),
|
||||
RefundLog: q.RefundLog.WithContext(ctx),
|
||||
RefundRecord: q.RefundRecord.WithContext(ctx),
|
||||
SystemAuthAdmin: q.SystemAuthAdmin.WithContext(ctx),
|
||||
User: q.User.WithContext(ctx),
|
||||
UserAccountLog: q.UserAccountLog.WithContext(ctx),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
424
server/dao/la_notice_setting.gen.go
Normal file
424
server/dao/la_notice_setting.gen.go
Normal file
@@ -0,0 +1,424 @@
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
|
||||
package dao
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/clause"
|
||||
"gorm.io/gorm/schema"
|
||||
|
||||
"gorm.io/gen"
|
||||
"gorm.io/gen/field"
|
||||
|
||||
"gorm.io/plugin/dbresolver"
|
||||
|
||||
"likeadmin/model"
|
||||
)
|
||||
|
||||
func newNoticeSetting(db *gorm.DB, opts ...gen.DOOption) noticeSetting {
|
||||
_noticeSetting := noticeSetting{}
|
||||
|
||||
_noticeSetting.noticeSettingDo.UseDB(db, opts...)
|
||||
_noticeSetting.noticeSettingDo.UseModel(&model.NoticeSetting{})
|
||||
|
||||
tableName := _noticeSetting.noticeSettingDo.TableName()
|
||||
_noticeSetting.ALL = field.NewAsterisk(tableName)
|
||||
_noticeSetting.ID = field.NewInt32(tableName, "id")
|
||||
_noticeSetting.SceneID = field.NewInt32(tableName, "scene_id")
|
||||
_noticeSetting.SceneName = field.NewString(tableName, "scene_name")
|
||||
_noticeSetting.SceneDesc = field.NewString(tableName, "scene_desc")
|
||||
_noticeSetting.Recipient = field.NewInt32(tableName, "recipient")
|
||||
_noticeSetting.Type = field.NewInt32(tableName, "type")
|
||||
_noticeSetting.SystemNotice = field.NewString(tableName, "system_notice")
|
||||
_noticeSetting.SmsNotice = field.NewString(tableName, "sms_notice")
|
||||
_noticeSetting.OaNotice = field.NewString(tableName, "oa_notice")
|
||||
_noticeSetting.MnpNotice = field.NewString(tableName, "mnp_notice")
|
||||
_noticeSetting.Support = field.NewString(tableName, "support")
|
||||
_noticeSetting.UpdateTime = field.NewInt32(tableName, "update_time")
|
||||
|
||||
_noticeSetting.fillFieldMap()
|
||||
|
||||
return _noticeSetting
|
||||
}
|
||||
|
||||
type noticeSetting struct {
|
||||
noticeSettingDo
|
||||
|
||||
ALL field.Asterisk
|
||||
ID field.Int32
|
||||
SceneID field.Int32 // 场景id
|
||||
SceneName field.String // 场景名称
|
||||
SceneDesc field.String // 场景描述
|
||||
Recipient field.Int32 // 接收者 1-用户 2-平台
|
||||
Type field.Int32 // 通知类型: 1-业务通知 2-验证码
|
||||
SystemNotice field.String // 系统通知设置
|
||||
SmsNotice field.String // 短信通知设置
|
||||
OaNotice field.String // 公众号通知设置
|
||||
MnpNotice field.String // 小程序通知设置
|
||||
Support field.String // 支持的发送类型 1-系统通知 2-短信通知 3-微信模板消息 4-小程序提醒
|
||||
UpdateTime field.Int32 // 更新时间
|
||||
|
||||
fieldMap map[string]field.Expr
|
||||
}
|
||||
|
||||
func (n noticeSetting) Table(newTableName string) *noticeSetting {
|
||||
n.noticeSettingDo.UseTable(newTableName)
|
||||
return n.updateTableName(newTableName)
|
||||
}
|
||||
|
||||
func (n noticeSetting) As(alias string) *noticeSetting {
|
||||
n.noticeSettingDo.DO = *(n.noticeSettingDo.As(alias).(*gen.DO))
|
||||
return n.updateTableName(alias)
|
||||
}
|
||||
|
||||
func (n *noticeSetting) updateTableName(table string) *noticeSetting {
|
||||
n.ALL = field.NewAsterisk(table)
|
||||
n.ID = field.NewInt32(table, "id")
|
||||
n.SceneID = field.NewInt32(table, "scene_id")
|
||||
n.SceneName = field.NewString(table, "scene_name")
|
||||
n.SceneDesc = field.NewString(table, "scene_desc")
|
||||
n.Recipient = field.NewInt32(table, "recipient")
|
||||
n.Type = field.NewInt32(table, "type")
|
||||
n.SystemNotice = field.NewString(table, "system_notice")
|
||||
n.SmsNotice = field.NewString(table, "sms_notice")
|
||||
n.OaNotice = field.NewString(table, "oa_notice")
|
||||
n.MnpNotice = field.NewString(table, "mnp_notice")
|
||||
n.Support = field.NewString(table, "support")
|
||||
n.UpdateTime = field.NewInt32(table, "update_time")
|
||||
|
||||
n.fillFieldMap()
|
||||
|
||||
return n
|
||||
}
|
||||
|
||||
func (n *noticeSetting) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
|
||||
_f, ok := n.fieldMap[fieldName]
|
||||
if !ok || _f == nil {
|
||||
return nil, false
|
||||
}
|
||||
_oe, ok := _f.(field.OrderExpr)
|
||||
return _oe, ok
|
||||
}
|
||||
|
||||
func (n *noticeSetting) fillFieldMap() {
|
||||
n.fieldMap = make(map[string]field.Expr, 12)
|
||||
n.fieldMap["id"] = n.ID
|
||||
n.fieldMap["scene_id"] = n.SceneID
|
||||
n.fieldMap["scene_name"] = n.SceneName
|
||||
n.fieldMap["scene_desc"] = n.SceneDesc
|
||||
n.fieldMap["recipient"] = n.Recipient
|
||||
n.fieldMap["type"] = n.Type
|
||||
n.fieldMap["system_notice"] = n.SystemNotice
|
||||
n.fieldMap["sms_notice"] = n.SmsNotice
|
||||
n.fieldMap["oa_notice"] = n.OaNotice
|
||||
n.fieldMap["mnp_notice"] = n.MnpNotice
|
||||
n.fieldMap["support"] = n.Support
|
||||
n.fieldMap["update_time"] = n.UpdateTime
|
||||
}
|
||||
|
||||
func (n noticeSetting) clone(db *gorm.DB) noticeSetting {
|
||||
n.noticeSettingDo.ReplaceConnPool(db.Statement.ConnPool)
|
||||
return n
|
||||
}
|
||||
|
||||
func (n noticeSetting) replaceDB(db *gorm.DB) noticeSetting {
|
||||
n.noticeSettingDo.ReplaceDB(db)
|
||||
return n
|
||||
}
|
||||
|
||||
type noticeSettingDo struct{ gen.DO }
|
||||
|
||||
type INoticeSettingDo interface {
|
||||
gen.SubQuery
|
||||
Debug() INoticeSettingDo
|
||||
WithContext(ctx context.Context) INoticeSettingDo
|
||||
WithResult(fc func(tx gen.Dao)) gen.ResultInfo
|
||||
ReplaceDB(db *gorm.DB)
|
||||
ReadDB() INoticeSettingDo
|
||||
WriteDB() INoticeSettingDo
|
||||
As(alias string) gen.Dao
|
||||
Session(config *gorm.Session) INoticeSettingDo
|
||||
Columns(cols ...field.Expr) gen.Columns
|
||||
Clauses(conds ...clause.Expression) INoticeSettingDo
|
||||
Not(conds ...gen.Condition) INoticeSettingDo
|
||||
Or(conds ...gen.Condition) INoticeSettingDo
|
||||
Select(conds ...field.Expr) INoticeSettingDo
|
||||
Where(conds ...gen.Condition) INoticeSettingDo
|
||||
Order(conds ...field.Expr) INoticeSettingDo
|
||||
Distinct(cols ...field.Expr) INoticeSettingDo
|
||||
Omit(cols ...field.Expr) INoticeSettingDo
|
||||
Join(table schema.Tabler, on ...field.Expr) INoticeSettingDo
|
||||
LeftJoin(table schema.Tabler, on ...field.Expr) INoticeSettingDo
|
||||
RightJoin(table schema.Tabler, on ...field.Expr) INoticeSettingDo
|
||||
Group(cols ...field.Expr) INoticeSettingDo
|
||||
Having(conds ...gen.Condition) INoticeSettingDo
|
||||
Limit(limit int) INoticeSettingDo
|
||||
Offset(offset int) INoticeSettingDo
|
||||
Count() (count int64, err error)
|
||||
Scopes(funcs ...func(gen.Dao) gen.Dao) INoticeSettingDo
|
||||
Unscoped() INoticeSettingDo
|
||||
Create(values ...*model.NoticeSetting) error
|
||||
CreateInBatches(values []*model.NoticeSetting, batchSize int) error
|
||||
Save(values ...*model.NoticeSetting) error
|
||||
First() (*model.NoticeSetting, error)
|
||||
Take() (*model.NoticeSetting, error)
|
||||
Last() (*model.NoticeSetting, error)
|
||||
Find() ([]*model.NoticeSetting, error)
|
||||
FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*model.NoticeSetting, err error)
|
||||
FindInBatches(result *[]*model.NoticeSetting, batchSize int, fc func(tx gen.Dao, batch int) error) error
|
||||
Pluck(column field.Expr, dest interface{}) error
|
||||
Delete(...*model.NoticeSetting) (info gen.ResultInfo, err error)
|
||||
Update(column field.Expr, value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error)
|
||||
Updates(value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateColumn(column field.Expr, value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateColumnSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error)
|
||||
UpdateColumns(value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateFrom(q gen.SubQuery) gen.Dao
|
||||
Attrs(attrs ...field.AssignExpr) INoticeSettingDo
|
||||
Assign(attrs ...field.AssignExpr) INoticeSettingDo
|
||||
Joins(fields ...field.RelationField) INoticeSettingDo
|
||||
Preload(fields ...field.RelationField) INoticeSettingDo
|
||||
FirstOrInit() (*model.NoticeSetting, error)
|
||||
FirstOrCreate() (*model.NoticeSetting, error)
|
||||
FindByPage(offset int, limit int) (result []*model.NoticeSetting, count int64, err error)
|
||||
ScanByPage(result interface{}, offset int, limit int) (count int64, err error)
|
||||
Scan(result interface{}) (err error)
|
||||
Returning(value interface{}, columns ...string) INoticeSettingDo
|
||||
UnderlyingDB() *gorm.DB
|
||||
schema.Tabler
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) Debug() INoticeSettingDo {
|
||||
return n.withDO(n.DO.Debug())
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) WithContext(ctx context.Context) INoticeSettingDo {
|
||||
return n.withDO(n.DO.WithContext(ctx))
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) ReadDB() INoticeSettingDo {
|
||||
return n.Clauses(dbresolver.Read)
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) WriteDB() INoticeSettingDo {
|
||||
return n.Clauses(dbresolver.Write)
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) Session(config *gorm.Session) INoticeSettingDo {
|
||||
return n.withDO(n.DO.Session(config))
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) Clauses(conds ...clause.Expression) INoticeSettingDo {
|
||||
return n.withDO(n.DO.Clauses(conds...))
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) Returning(value interface{}, columns ...string) INoticeSettingDo {
|
||||
return n.withDO(n.DO.Returning(value, columns...))
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) Not(conds ...gen.Condition) INoticeSettingDo {
|
||||
return n.withDO(n.DO.Not(conds...))
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) Or(conds ...gen.Condition) INoticeSettingDo {
|
||||
return n.withDO(n.DO.Or(conds...))
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) Select(conds ...field.Expr) INoticeSettingDo {
|
||||
return n.withDO(n.DO.Select(conds...))
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) Where(conds ...gen.Condition) INoticeSettingDo {
|
||||
return n.withDO(n.DO.Where(conds...))
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) Order(conds ...field.Expr) INoticeSettingDo {
|
||||
return n.withDO(n.DO.Order(conds...))
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) Distinct(cols ...field.Expr) INoticeSettingDo {
|
||||
return n.withDO(n.DO.Distinct(cols...))
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) Omit(cols ...field.Expr) INoticeSettingDo {
|
||||
return n.withDO(n.DO.Omit(cols...))
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) Join(table schema.Tabler, on ...field.Expr) INoticeSettingDo {
|
||||
return n.withDO(n.DO.Join(table, on...))
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) LeftJoin(table schema.Tabler, on ...field.Expr) INoticeSettingDo {
|
||||
return n.withDO(n.DO.LeftJoin(table, on...))
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) RightJoin(table schema.Tabler, on ...field.Expr) INoticeSettingDo {
|
||||
return n.withDO(n.DO.RightJoin(table, on...))
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) Group(cols ...field.Expr) INoticeSettingDo {
|
||||
return n.withDO(n.DO.Group(cols...))
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) Having(conds ...gen.Condition) INoticeSettingDo {
|
||||
return n.withDO(n.DO.Having(conds...))
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) Limit(limit int) INoticeSettingDo {
|
||||
return n.withDO(n.DO.Limit(limit))
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) Offset(offset int) INoticeSettingDo {
|
||||
return n.withDO(n.DO.Offset(offset))
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) Scopes(funcs ...func(gen.Dao) gen.Dao) INoticeSettingDo {
|
||||
return n.withDO(n.DO.Scopes(funcs...))
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) Unscoped() INoticeSettingDo {
|
||||
return n.withDO(n.DO.Unscoped())
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) Create(values ...*model.NoticeSetting) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
return n.DO.Create(values)
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) CreateInBatches(values []*model.NoticeSetting, batchSize int) error {
|
||||
return n.DO.CreateInBatches(values, batchSize)
|
||||
}
|
||||
|
||||
// Save : !!! underlying implementation is different with GORM
|
||||
// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values)
|
||||
func (n noticeSettingDo) Save(values ...*model.NoticeSetting) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
return n.DO.Save(values)
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) First() (*model.NoticeSetting, error) {
|
||||
if result, err := n.DO.First(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.NoticeSetting), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) Take() (*model.NoticeSetting, error) {
|
||||
if result, err := n.DO.Take(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.NoticeSetting), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) Last() (*model.NoticeSetting, error) {
|
||||
if result, err := n.DO.Last(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.NoticeSetting), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) Find() ([]*model.NoticeSetting, error) {
|
||||
result, err := n.DO.Find()
|
||||
return result.([]*model.NoticeSetting), err
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*model.NoticeSetting, err error) {
|
||||
buf := make([]*model.NoticeSetting, 0, batchSize)
|
||||
err = n.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error {
|
||||
defer func() { results = append(results, buf...) }()
|
||||
return fc(tx, batch)
|
||||
})
|
||||
return results, err
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) FindInBatches(result *[]*model.NoticeSetting, batchSize int, fc func(tx gen.Dao, batch int) error) error {
|
||||
return n.DO.FindInBatches(result, batchSize, fc)
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) Attrs(attrs ...field.AssignExpr) INoticeSettingDo {
|
||||
return n.withDO(n.DO.Attrs(attrs...))
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) Assign(attrs ...field.AssignExpr) INoticeSettingDo {
|
||||
return n.withDO(n.DO.Assign(attrs...))
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) Joins(fields ...field.RelationField) INoticeSettingDo {
|
||||
for _, _f := range fields {
|
||||
n = *n.withDO(n.DO.Joins(_f))
|
||||
}
|
||||
return &n
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) Preload(fields ...field.RelationField) INoticeSettingDo {
|
||||
for _, _f := range fields {
|
||||
n = *n.withDO(n.DO.Preload(_f))
|
||||
}
|
||||
return &n
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) FirstOrInit() (*model.NoticeSetting, error) {
|
||||
if result, err := n.DO.FirstOrInit(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.NoticeSetting), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) FirstOrCreate() (*model.NoticeSetting, error) {
|
||||
if result, err := n.DO.FirstOrCreate(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.NoticeSetting), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) FindByPage(offset int, limit int) (result []*model.NoticeSetting, count int64, err error) {
|
||||
result, err = n.Offset(offset).Limit(limit).Find()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if size := len(result); 0 < limit && 0 < size && size < limit {
|
||||
count = int64(size + offset)
|
||||
return
|
||||
}
|
||||
|
||||
count, err = n.Offset(-1).Limit(-1).Count()
|
||||
return
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) {
|
||||
count, err = n.Count()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
err = n.Offset(offset).Limit(limit).Scan(result)
|
||||
return
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) Scan(result interface{}) (err error) {
|
||||
return n.DO.Scan(result)
|
||||
}
|
||||
|
||||
func (n noticeSettingDo) Delete(models ...*model.NoticeSetting) (result gen.ResultInfo, err error) {
|
||||
return n.DO.Delete(models)
|
||||
}
|
||||
|
||||
func (n *noticeSettingDo) withDO(do gen.Dao) *noticeSettingDo {
|
||||
n.DO = *do.(*gen.DO)
|
||||
return n
|
||||
}
|
||||
518
server/dao/la_recharge_order.gen.go
Normal file
518
server/dao/la_recharge_order.gen.go
Normal file
@@ -0,0 +1,518 @@
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
|
||||
package dao
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/clause"
|
||||
"gorm.io/gorm/schema"
|
||||
|
||||
"gorm.io/gen"
|
||||
"gorm.io/gen/field"
|
||||
|
||||
"gorm.io/plugin/dbresolver"
|
||||
|
||||
"likeadmin/model"
|
||||
)
|
||||
|
||||
func newRechargeOrder(db *gorm.DB, opts ...gen.DOOption) rechargeOrder {
|
||||
_rechargeOrder := rechargeOrder{}
|
||||
|
||||
_rechargeOrder.rechargeOrderDo.UseDB(db, opts...)
|
||||
_rechargeOrder.rechargeOrderDo.UseModel(&model.RechargeOrder{})
|
||||
|
||||
tableName := _rechargeOrder.rechargeOrderDo.TableName()
|
||||
_rechargeOrder.ALL = field.NewAsterisk(tableName)
|
||||
_rechargeOrder.ID = field.NewInt32(tableName, "id")
|
||||
_rechargeOrder.Sn = field.NewString(tableName, "sn")
|
||||
_rechargeOrder.UserID = field.NewInt32(tableName, "user_id")
|
||||
_rechargeOrder.UserSn = field.NewInt32(tableName, "user_sn")
|
||||
_rechargeOrder.Mobile = field.NewString(tableName, "mobile")
|
||||
_rechargeOrder.PaySn = field.NewString(tableName, "pay_sn")
|
||||
_rechargeOrder.PayWay = field.NewInt32(tableName, "pay_way")
|
||||
_rechargeOrder.PayStatus = field.NewInt32(tableName, "pay_status")
|
||||
_rechargeOrder.PayTime = field.NewInt32(tableName, "pay_time")
|
||||
_rechargeOrder.OrderAmount = field.NewFloat64(tableName, "order_amount")
|
||||
_rechargeOrder.OrderTerminal = field.NewInt32(tableName, "order_terminal")
|
||||
_rechargeOrder.TransactionID = field.NewString(tableName, "transaction_id")
|
||||
_rechargeOrder.RefundStatus = field.NewInt32(tableName, "refund_status")
|
||||
_rechargeOrder.CreateTime = field.NewInt32(tableName, "create_time")
|
||||
_rechargeOrder.UpdateTime = field.NewInt32(tableName, "update_time")
|
||||
_rechargeOrder.DeleteTime = field.NewInt32(tableName, "delete_time")
|
||||
_rechargeOrder.User = rechargeOrderBelongsToUser{
|
||||
db: db.Session(&gorm.Session{}),
|
||||
|
||||
RelationField: field.NewRelation("User", "model.User"),
|
||||
}
|
||||
|
||||
_rechargeOrder.fillFieldMap()
|
||||
|
||||
return _rechargeOrder
|
||||
}
|
||||
|
||||
type rechargeOrder struct {
|
||||
rechargeOrderDo
|
||||
|
||||
ALL field.Asterisk
|
||||
ID field.Int32 // id
|
||||
Sn field.String // 订单编号
|
||||
UserID field.Int32 // 用户id
|
||||
UserSn field.Int32 // 用户编号
|
||||
Mobile field.String
|
||||
PaySn field.String // 支付编号-冗余字段,针对微信同一主体不同客户端支付需用不同订单号预留。
|
||||
PayWay field.Int32 // 支付方式 2-微信支付 3-支付宝支付
|
||||
PayStatus field.Int32 // 支付状态:2-待支付;1-已支付
|
||||
PayTime field.Int32 // 支付时间
|
||||
OrderAmount field.Float64 // 充值金额
|
||||
OrderTerminal field.Int32 // 终端
|
||||
TransactionID field.String // 第三方平台交易流水号
|
||||
RefundStatus field.Int32 // 退款状态 0-未退款 1-已退款
|
||||
CreateTime field.Int32 // 创建时间
|
||||
UpdateTime field.Int32 // 更新时间
|
||||
DeleteTime field.Int32 // 删除时间
|
||||
User rechargeOrderBelongsToUser
|
||||
|
||||
fieldMap map[string]field.Expr
|
||||
}
|
||||
|
||||
func (r rechargeOrder) Table(newTableName string) *rechargeOrder {
|
||||
r.rechargeOrderDo.UseTable(newTableName)
|
||||
return r.updateTableName(newTableName)
|
||||
}
|
||||
|
||||
func (r rechargeOrder) As(alias string) *rechargeOrder {
|
||||
r.rechargeOrderDo.DO = *(r.rechargeOrderDo.As(alias).(*gen.DO))
|
||||
return r.updateTableName(alias)
|
||||
}
|
||||
|
||||
func (r *rechargeOrder) updateTableName(table string) *rechargeOrder {
|
||||
r.ALL = field.NewAsterisk(table)
|
||||
r.ID = field.NewInt32(table, "id")
|
||||
r.Sn = field.NewString(table, "sn")
|
||||
r.UserID = field.NewInt32(table, "user_id")
|
||||
r.UserSn = field.NewInt32(table, "user_sn")
|
||||
r.Mobile = field.NewString(table, "mobile")
|
||||
r.PaySn = field.NewString(table, "pay_sn")
|
||||
r.PayWay = field.NewInt32(table, "pay_way")
|
||||
r.PayStatus = field.NewInt32(table, "pay_status")
|
||||
r.PayTime = field.NewInt32(table, "pay_time")
|
||||
r.OrderAmount = field.NewFloat64(table, "order_amount")
|
||||
r.OrderTerminal = field.NewInt32(table, "order_terminal")
|
||||
r.TransactionID = field.NewString(table, "transaction_id")
|
||||
r.RefundStatus = field.NewInt32(table, "refund_status")
|
||||
r.CreateTime = field.NewInt32(table, "create_time")
|
||||
r.UpdateTime = field.NewInt32(table, "update_time")
|
||||
r.DeleteTime = field.NewInt32(table, "delete_time")
|
||||
|
||||
r.fillFieldMap()
|
||||
|
||||
return r
|
||||
}
|
||||
|
||||
func (r *rechargeOrder) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
|
||||
_f, ok := r.fieldMap[fieldName]
|
||||
if !ok || _f == nil {
|
||||
return nil, false
|
||||
}
|
||||
_oe, ok := _f.(field.OrderExpr)
|
||||
return _oe, ok
|
||||
}
|
||||
|
||||
func (r *rechargeOrder) fillFieldMap() {
|
||||
r.fieldMap = make(map[string]field.Expr, 17)
|
||||
r.fieldMap["id"] = r.ID
|
||||
r.fieldMap["sn"] = r.Sn
|
||||
r.fieldMap["user_id"] = r.UserID
|
||||
r.fieldMap["user_sn"] = r.UserSn
|
||||
r.fieldMap["mobile"] = r.Mobile
|
||||
r.fieldMap["pay_sn"] = r.PaySn
|
||||
r.fieldMap["pay_way"] = r.PayWay
|
||||
r.fieldMap["pay_status"] = r.PayStatus
|
||||
r.fieldMap["pay_time"] = r.PayTime
|
||||
r.fieldMap["order_amount"] = r.OrderAmount
|
||||
r.fieldMap["order_terminal"] = r.OrderTerminal
|
||||
r.fieldMap["transaction_id"] = r.TransactionID
|
||||
r.fieldMap["refund_status"] = r.RefundStatus
|
||||
r.fieldMap["create_time"] = r.CreateTime
|
||||
r.fieldMap["update_time"] = r.UpdateTime
|
||||
r.fieldMap["delete_time"] = r.DeleteTime
|
||||
|
||||
}
|
||||
|
||||
func (r rechargeOrder) clone(db *gorm.DB) rechargeOrder {
|
||||
r.rechargeOrderDo.ReplaceConnPool(db.Statement.ConnPool)
|
||||
return r
|
||||
}
|
||||
|
||||
func (r rechargeOrder) replaceDB(db *gorm.DB) rechargeOrder {
|
||||
r.rechargeOrderDo.ReplaceDB(db)
|
||||
return r
|
||||
}
|
||||
|
||||
type rechargeOrderBelongsToUser struct {
|
||||
db *gorm.DB
|
||||
|
||||
field.RelationField
|
||||
}
|
||||
|
||||
func (a rechargeOrderBelongsToUser) Where(conds ...field.Expr) *rechargeOrderBelongsToUser {
|
||||
if len(conds) == 0 {
|
||||
return &a
|
||||
}
|
||||
|
||||
exprs := make([]clause.Expression, 0, len(conds))
|
||||
for _, cond := range conds {
|
||||
exprs = append(exprs, cond.BeCond().(clause.Expression))
|
||||
}
|
||||
a.db = a.db.Clauses(clause.Where{Exprs: exprs})
|
||||
return &a
|
||||
}
|
||||
|
||||
func (a rechargeOrderBelongsToUser) WithContext(ctx context.Context) *rechargeOrderBelongsToUser {
|
||||
a.db = a.db.WithContext(ctx)
|
||||
return &a
|
||||
}
|
||||
|
||||
func (a rechargeOrderBelongsToUser) Session(session *gorm.Session) *rechargeOrderBelongsToUser {
|
||||
a.db = a.db.Session(session)
|
||||
return &a
|
||||
}
|
||||
|
||||
func (a rechargeOrderBelongsToUser) Model(m *model.RechargeOrder) *rechargeOrderBelongsToUserTx {
|
||||
return &rechargeOrderBelongsToUserTx{a.db.Model(m).Association(a.Name())}
|
||||
}
|
||||
|
||||
type rechargeOrderBelongsToUserTx struct{ tx *gorm.Association }
|
||||
|
||||
func (a rechargeOrderBelongsToUserTx) Find() (result *model.User, err error) {
|
||||
return result, a.tx.Find(&result)
|
||||
}
|
||||
|
||||
func (a rechargeOrderBelongsToUserTx) Append(values ...*model.User) (err error) {
|
||||
targetValues := make([]interface{}, len(values))
|
||||
for i, v := range values {
|
||||
targetValues[i] = v
|
||||
}
|
||||
return a.tx.Append(targetValues...)
|
||||
}
|
||||
|
||||
func (a rechargeOrderBelongsToUserTx) Replace(values ...*model.User) (err error) {
|
||||
targetValues := make([]interface{}, len(values))
|
||||
for i, v := range values {
|
||||
targetValues[i] = v
|
||||
}
|
||||
return a.tx.Replace(targetValues...)
|
||||
}
|
||||
|
||||
func (a rechargeOrderBelongsToUserTx) Delete(values ...*model.User) (err error) {
|
||||
targetValues := make([]interface{}, len(values))
|
||||
for i, v := range values {
|
||||
targetValues[i] = v
|
||||
}
|
||||
return a.tx.Delete(targetValues...)
|
||||
}
|
||||
|
||||
func (a rechargeOrderBelongsToUserTx) Clear() error {
|
||||
return a.tx.Clear()
|
||||
}
|
||||
|
||||
func (a rechargeOrderBelongsToUserTx) Count() int64 {
|
||||
return a.tx.Count()
|
||||
}
|
||||
|
||||
type rechargeOrderDo struct{ gen.DO }
|
||||
|
||||
type IRechargeOrderDo interface {
|
||||
gen.SubQuery
|
||||
Debug() IRechargeOrderDo
|
||||
WithContext(ctx context.Context) IRechargeOrderDo
|
||||
WithResult(fc func(tx gen.Dao)) gen.ResultInfo
|
||||
ReplaceDB(db *gorm.DB)
|
||||
ReadDB() IRechargeOrderDo
|
||||
WriteDB() IRechargeOrderDo
|
||||
As(alias string) gen.Dao
|
||||
Session(config *gorm.Session) IRechargeOrderDo
|
||||
Columns(cols ...field.Expr) gen.Columns
|
||||
Clauses(conds ...clause.Expression) IRechargeOrderDo
|
||||
Not(conds ...gen.Condition) IRechargeOrderDo
|
||||
Or(conds ...gen.Condition) IRechargeOrderDo
|
||||
Select(conds ...field.Expr) IRechargeOrderDo
|
||||
Where(conds ...gen.Condition) IRechargeOrderDo
|
||||
Order(conds ...field.Expr) IRechargeOrderDo
|
||||
Distinct(cols ...field.Expr) IRechargeOrderDo
|
||||
Omit(cols ...field.Expr) IRechargeOrderDo
|
||||
Join(table schema.Tabler, on ...field.Expr) IRechargeOrderDo
|
||||
LeftJoin(table schema.Tabler, on ...field.Expr) IRechargeOrderDo
|
||||
RightJoin(table schema.Tabler, on ...field.Expr) IRechargeOrderDo
|
||||
Group(cols ...field.Expr) IRechargeOrderDo
|
||||
Having(conds ...gen.Condition) IRechargeOrderDo
|
||||
Limit(limit int) IRechargeOrderDo
|
||||
Offset(offset int) IRechargeOrderDo
|
||||
Count() (count int64, err error)
|
||||
Scopes(funcs ...func(gen.Dao) gen.Dao) IRechargeOrderDo
|
||||
Unscoped() IRechargeOrderDo
|
||||
Create(values ...*model.RechargeOrder) error
|
||||
CreateInBatches(values []*model.RechargeOrder, batchSize int) error
|
||||
Save(values ...*model.RechargeOrder) error
|
||||
First() (*model.RechargeOrder, error)
|
||||
Take() (*model.RechargeOrder, error)
|
||||
Last() (*model.RechargeOrder, error)
|
||||
Find() ([]*model.RechargeOrder, error)
|
||||
FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*model.RechargeOrder, err error)
|
||||
FindInBatches(result *[]*model.RechargeOrder, batchSize int, fc func(tx gen.Dao, batch int) error) error
|
||||
Pluck(column field.Expr, dest interface{}) error
|
||||
Delete(...*model.RechargeOrder) (info gen.ResultInfo, err error)
|
||||
Update(column field.Expr, value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error)
|
||||
Updates(value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateColumn(column field.Expr, value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateColumnSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error)
|
||||
UpdateColumns(value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateFrom(q gen.SubQuery) gen.Dao
|
||||
Attrs(attrs ...field.AssignExpr) IRechargeOrderDo
|
||||
Assign(attrs ...field.AssignExpr) IRechargeOrderDo
|
||||
Joins(fields ...field.RelationField) IRechargeOrderDo
|
||||
Preload(fields ...field.RelationField) IRechargeOrderDo
|
||||
FirstOrInit() (*model.RechargeOrder, error)
|
||||
FirstOrCreate() (*model.RechargeOrder, error)
|
||||
FindByPage(offset int, limit int) (result []*model.RechargeOrder, count int64, err error)
|
||||
ScanByPage(result interface{}, offset int, limit int) (count int64, err error)
|
||||
Scan(result interface{}) (err error)
|
||||
Returning(value interface{}, columns ...string) IRechargeOrderDo
|
||||
UnderlyingDB() *gorm.DB
|
||||
schema.Tabler
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) Debug() IRechargeOrderDo {
|
||||
return r.withDO(r.DO.Debug())
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) WithContext(ctx context.Context) IRechargeOrderDo {
|
||||
return r.withDO(r.DO.WithContext(ctx))
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) ReadDB() IRechargeOrderDo {
|
||||
return r.Clauses(dbresolver.Read)
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) WriteDB() IRechargeOrderDo {
|
||||
return r.Clauses(dbresolver.Write)
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) Session(config *gorm.Session) IRechargeOrderDo {
|
||||
return r.withDO(r.DO.Session(config))
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) Clauses(conds ...clause.Expression) IRechargeOrderDo {
|
||||
return r.withDO(r.DO.Clauses(conds...))
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) Returning(value interface{}, columns ...string) IRechargeOrderDo {
|
||||
return r.withDO(r.DO.Returning(value, columns...))
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) Not(conds ...gen.Condition) IRechargeOrderDo {
|
||||
return r.withDO(r.DO.Not(conds...))
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) Or(conds ...gen.Condition) IRechargeOrderDo {
|
||||
return r.withDO(r.DO.Or(conds...))
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) Select(conds ...field.Expr) IRechargeOrderDo {
|
||||
return r.withDO(r.DO.Select(conds...))
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) Where(conds ...gen.Condition) IRechargeOrderDo {
|
||||
return r.withDO(r.DO.Where(conds...))
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) Order(conds ...field.Expr) IRechargeOrderDo {
|
||||
return r.withDO(r.DO.Order(conds...))
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) Distinct(cols ...field.Expr) IRechargeOrderDo {
|
||||
return r.withDO(r.DO.Distinct(cols...))
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) Omit(cols ...field.Expr) IRechargeOrderDo {
|
||||
return r.withDO(r.DO.Omit(cols...))
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) Join(table schema.Tabler, on ...field.Expr) IRechargeOrderDo {
|
||||
return r.withDO(r.DO.Join(table, on...))
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) LeftJoin(table schema.Tabler, on ...field.Expr) IRechargeOrderDo {
|
||||
return r.withDO(r.DO.LeftJoin(table, on...))
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) RightJoin(table schema.Tabler, on ...field.Expr) IRechargeOrderDo {
|
||||
return r.withDO(r.DO.RightJoin(table, on...))
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) Group(cols ...field.Expr) IRechargeOrderDo {
|
||||
return r.withDO(r.DO.Group(cols...))
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) Having(conds ...gen.Condition) IRechargeOrderDo {
|
||||
return r.withDO(r.DO.Having(conds...))
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) Limit(limit int) IRechargeOrderDo {
|
||||
return r.withDO(r.DO.Limit(limit))
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) Offset(offset int) IRechargeOrderDo {
|
||||
return r.withDO(r.DO.Offset(offset))
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) Scopes(funcs ...func(gen.Dao) gen.Dao) IRechargeOrderDo {
|
||||
return r.withDO(r.DO.Scopes(funcs...))
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) Unscoped() IRechargeOrderDo {
|
||||
return r.withDO(r.DO.Unscoped())
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) Create(values ...*model.RechargeOrder) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
return r.DO.Create(values)
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) CreateInBatches(values []*model.RechargeOrder, batchSize int) error {
|
||||
return r.DO.CreateInBatches(values, batchSize)
|
||||
}
|
||||
|
||||
// Save : !!! underlying implementation is different with GORM
|
||||
// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values)
|
||||
func (r rechargeOrderDo) Save(values ...*model.RechargeOrder) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
return r.DO.Save(values)
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) First() (*model.RechargeOrder, error) {
|
||||
if result, err := r.DO.First(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.RechargeOrder), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) Take() (*model.RechargeOrder, error) {
|
||||
if result, err := r.DO.Take(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.RechargeOrder), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) Last() (*model.RechargeOrder, error) {
|
||||
if result, err := r.DO.Last(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.RechargeOrder), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) Find() ([]*model.RechargeOrder, error) {
|
||||
result, err := r.DO.Find()
|
||||
return result.([]*model.RechargeOrder), err
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*model.RechargeOrder, err error) {
|
||||
buf := make([]*model.RechargeOrder, 0, batchSize)
|
||||
err = r.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error {
|
||||
defer func() { results = append(results, buf...) }()
|
||||
return fc(tx, batch)
|
||||
})
|
||||
return results, err
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) FindInBatches(result *[]*model.RechargeOrder, batchSize int, fc func(tx gen.Dao, batch int) error) error {
|
||||
return r.DO.FindInBatches(result, batchSize, fc)
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) Attrs(attrs ...field.AssignExpr) IRechargeOrderDo {
|
||||
return r.withDO(r.DO.Attrs(attrs...))
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) Assign(attrs ...field.AssignExpr) IRechargeOrderDo {
|
||||
return r.withDO(r.DO.Assign(attrs...))
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) Joins(fields ...field.RelationField) IRechargeOrderDo {
|
||||
for _, _f := range fields {
|
||||
r = *r.withDO(r.DO.Joins(_f))
|
||||
}
|
||||
return &r
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) Preload(fields ...field.RelationField) IRechargeOrderDo {
|
||||
for _, _f := range fields {
|
||||
r = *r.withDO(r.DO.Preload(_f))
|
||||
}
|
||||
return &r
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) FirstOrInit() (*model.RechargeOrder, error) {
|
||||
if result, err := r.DO.FirstOrInit(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.RechargeOrder), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) FirstOrCreate() (*model.RechargeOrder, error) {
|
||||
if result, err := r.DO.FirstOrCreate(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.RechargeOrder), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) FindByPage(offset int, limit int) (result []*model.RechargeOrder, count int64, err error) {
|
||||
result, err = r.Offset(offset).Limit(limit).Find()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if size := len(result); 0 < limit && 0 < size && size < limit {
|
||||
count = int64(size + offset)
|
||||
return
|
||||
}
|
||||
|
||||
count, err = r.Offset(-1).Limit(-1).Count()
|
||||
return
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) {
|
||||
count, err = r.Count()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
err = r.Offset(offset).Limit(limit).Scan(result)
|
||||
return
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) Scan(result interface{}) (err error) {
|
||||
return r.DO.Scan(result)
|
||||
}
|
||||
|
||||
func (r rechargeOrderDo) Delete(models ...*model.RechargeOrder) (result gen.ResultInfo, err error) {
|
||||
return r.DO.Delete(models)
|
||||
}
|
||||
|
||||
func (r *rechargeOrderDo) withDO(do gen.Dao) *rechargeOrderDo {
|
||||
r.DO = *do.(*gen.DO)
|
||||
return r
|
||||
}
|
||||
498
server/dao/la_refund_log.gen.go
Normal file
498
server/dao/la_refund_log.gen.go
Normal file
@@ -0,0 +1,498 @@
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
|
||||
package dao
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/clause"
|
||||
"gorm.io/gorm/schema"
|
||||
|
||||
"gorm.io/gen"
|
||||
"gorm.io/gen/field"
|
||||
|
||||
"gorm.io/plugin/dbresolver"
|
||||
|
||||
"likeadmin/model"
|
||||
)
|
||||
|
||||
func newRefundLog(db *gorm.DB, opts ...gen.DOOption) refundLog {
|
||||
_refundLog := refundLog{}
|
||||
|
||||
_refundLog.refundLogDo.UseDB(db, opts...)
|
||||
_refundLog.refundLogDo.UseModel(&model.RefundLog{})
|
||||
|
||||
tableName := _refundLog.refundLogDo.TableName()
|
||||
_refundLog.ALL = field.NewAsterisk(tableName)
|
||||
_refundLog.ID = field.NewInt32(tableName, "id")
|
||||
_refundLog.Sn = field.NewString(tableName, "sn")
|
||||
_refundLog.RecordID = field.NewInt32(tableName, "record_id")
|
||||
_refundLog.UserID = field.NewInt32(tableName, "user_id")
|
||||
_refundLog.HandleID = field.NewInt32(tableName, "handle_id")
|
||||
_refundLog.OrderAmount = field.NewFloat64(tableName, "order_amount")
|
||||
_refundLog.RefundAmount = field.NewFloat64(tableName, "refund_amount")
|
||||
_refundLog.RefundStatus = field.NewInt32(tableName, "refund_status")
|
||||
_refundLog.RefundMsg = field.NewString(tableName, "refund_msg")
|
||||
_refundLog.CreateTime = field.NewInt32(tableName, "create_time")
|
||||
_refundLog.UpdateTime = field.NewInt32(tableName, "update_time")
|
||||
_refundLog.Admin = refundLogBelongsToAdmin{
|
||||
db: db.Session(&gorm.Session{}),
|
||||
|
||||
RelationField: field.NewRelation("Admin", "model.SystemAuthAdmin"),
|
||||
}
|
||||
|
||||
_refundLog.fillFieldMap()
|
||||
|
||||
return _refundLog
|
||||
}
|
||||
|
||||
type refundLog struct {
|
||||
refundLogDo
|
||||
|
||||
ALL field.Asterisk
|
||||
ID field.Int32 // id
|
||||
Sn field.String // 编号
|
||||
RecordID field.Int32 // 退款记录id
|
||||
UserID field.Int32 // 关联用户
|
||||
HandleID field.Int32 // 处理人id(管理员id)
|
||||
OrderAmount field.Float64 // 订单总的应付款金额,冗余字段
|
||||
RefundAmount field.Float64 // 本次退款金额
|
||||
RefundStatus field.Int32 // 退款状态,0退款中,1退款成功,2退款失败
|
||||
RefundMsg field.String // 退款信息
|
||||
CreateTime field.Int32 // 创建时间
|
||||
UpdateTime field.Int32 // 更新时间
|
||||
Admin refundLogBelongsToAdmin
|
||||
|
||||
fieldMap map[string]field.Expr
|
||||
}
|
||||
|
||||
func (r refundLog) Table(newTableName string) *refundLog {
|
||||
r.refundLogDo.UseTable(newTableName)
|
||||
return r.updateTableName(newTableName)
|
||||
}
|
||||
|
||||
func (r refundLog) As(alias string) *refundLog {
|
||||
r.refundLogDo.DO = *(r.refundLogDo.As(alias).(*gen.DO))
|
||||
return r.updateTableName(alias)
|
||||
}
|
||||
|
||||
func (r *refundLog) updateTableName(table string) *refundLog {
|
||||
r.ALL = field.NewAsterisk(table)
|
||||
r.ID = field.NewInt32(table, "id")
|
||||
r.Sn = field.NewString(table, "sn")
|
||||
r.RecordID = field.NewInt32(table, "record_id")
|
||||
r.UserID = field.NewInt32(table, "user_id")
|
||||
r.HandleID = field.NewInt32(table, "handle_id")
|
||||
r.OrderAmount = field.NewFloat64(table, "order_amount")
|
||||
r.RefundAmount = field.NewFloat64(table, "refund_amount")
|
||||
r.RefundStatus = field.NewInt32(table, "refund_status")
|
||||
r.RefundMsg = field.NewString(table, "refund_msg")
|
||||
r.CreateTime = field.NewInt32(table, "create_time")
|
||||
r.UpdateTime = field.NewInt32(table, "update_time")
|
||||
|
||||
r.fillFieldMap()
|
||||
|
||||
return r
|
||||
}
|
||||
|
||||
func (r *refundLog) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
|
||||
_f, ok := r.fieldMap[fieldName]
|
||||
if !ok || _f == nil {
|
||||
return nil, false
|
||||
}
|
||||
_oe, ok := _f.(field.OrderExpr)
|
||||
return _oe, ok
|
||||
}
|
||||
|
||||
func (r *refundLog) fillFieldMap() {
|
||||
r.fieldMap = make(map[string]field.Expr, 12)
|
||||
r.fieldMap["id"] = r.ID
|
||||
r.fieldMap["sn"] = r.Sn
|
||||
r.fieldMap["record_id"] = r.RecordID
|
||||
r.fieldMap["user_id"] = r.UserID
|
||||
r.fieldMap["handle_id"] = r.HandleID
|
||||
r.fieldMap["order_amount"] = r.OrderAmount
|
||||
r.fieldMap["refund_amount"] = r.RefundAmount
|
||||
r.fieldMap["refund_status"] = r.RefundStatus
|
||||
r.fieldMap["refund_msg"] = r.RefundMsg
|
||||
r.fieldMap["create_time"] = r.CreateTime
|
||||
r.fieldMap["update_time"] = r.UpdateTime
|
||||
|
||||
}
|
||||
|
||||
func (r refundLog) clone(db *gorm.DB) refundLog {
|
||||
r.refundLogDo.ReplaceConnPool(db.Statement.ConnPool)
|
||||
return r
|
||||
}
|
||||
|
||||
func (r refundLog) replaceDB(db *gorm.DB) refundLog {
|
||||
r.refundLogDo.ReplaceDB(db)
|
||||
return r
|
||||
}
|
||||
|
||||
type refundLogBelongsToAdmin struct {
|
||||
db *gorm.DB
|
||||
|
||||
field.RelationField
|
||||
}
|
||||
|
||||
func (a refundLogBelongsToAdmin) Where(conds ...field.Expr) *refundLogBelongsToAdmin {
|
||||
if len(conds) == 0 {
|
||||
return &a
|
||||
}
|
||||
|
||||
exprs := make([]clause.Expression, 0, len(conds))
|
||||
for _, cond := range conds {
|
||||
exprs = append(exprs, cond.BeCond().(clause.Expression))
|
||||
}
|
||||
a.db = a.db.Clauses(clause.Where{Exprs: exprs})
|
||||
return &a
|
||||
}
|
||||
|
||||
func (a refundLogBelongsToAdmin) WithContext(ctx context.Context) *refundLogBelongsToAdmin {
|
||||
a.db = a.db.WithContext(ctx)
|
||||
return &a
|
||||
}
|
||||
|
||||
func (a refundLogBelongsToAdmin) Session(session *gorm.Session) *refundLogBelongsToAdmin {
|
||||
a.db = a.db.Session(session)
|
||||
return &a
|
||||
}
|
||||
|
||||
func (a refundLogBelongsToAdmin) Model(m *model.RefundLog) *refundLogBelongsToAdminTx {
|
||||
return &refundLogBelongsToAdminTx{a.db.Model(m).Association(a.Name())}
|
||||
}
|
||||
|
||||
type refundLogBelongsToAdminTx struct{ tx *gorm.Association }
|
||||
|
||||
func (a refundLogBelongsToAdminTx) Find() (result *model.SystemAuthAdmin, err error) {
|
||||
return result, a.tx.Find(&result)
|
||||
}
|
||||
|
||||
func (a refundLogBelongsToAdminTx) Append(values ...*model.SystemAuthAdmin) (err error) {
|
||||
targetValues := make([]interface{}, len(values))
|
||||
for i, v := range values {
|
||||
targetValues[i] = v
|
||||
}
|
||||
return a.tx.Append(targetValues...)
|
||||
}
|
||||
|
||||
func (a refundLogBelongsToAdminTx) Replace(values ...*model.SystemAuthAdmin) (err error) {
|
||||
targetValues := make([]interface{}, len(values))
|
||||
for i, v := range values {
|
||||
targetValues[i] = v
|
||||
}
|
||||
return a.tx.Replace(targetValues...)
|
||||
}
|
||||
|
||||
func (a refundLogBelongsToAdminTx) Delete(values ...*model.SystemAuthAdmin) (err error) {
|
||||
targetValues := make([]interface{}, len(values))
|
||||
for i, v := range values {
|
||||
targetValues[i] = v
|
||||
}
|
||||
return a.tx.Delete(targetValues...)
|
||||
}
|
||||
|
||||
func (a refundLogBelongsToAdminTx) Clear() error {
|
||||
return a.tx.Clear()
|
||||
}
|
||||
|
||||
func (a refundLogBelongsToAdminTx) Count() int64 {
|
||||
return a.tx.Count()
|
||||
}
|
||||
|
||||
type refundLogDo struct{ gen.DO }
|
||||
|
||||
type IRefundLogDo interface {
|
||||
gen.SubQuery
|
||||
Debug() IRefundLogDo
|
||||
WithContext(ctx context.Context) IRefundLogDo
|
||||
WithResult(fc func(tx gen.Dao)) gen.ResultInfo
|
||||
ReplaceDB(db *gorm.DB)
|
||||
ReadDB() IRefundLogDo
|
||||
WriteDB() IRefundLogDo
|
||||
As(alias string) gen.Dao
|
||||
Session(config *gorm.Session) IRefundLogDo
|
||||
Columns(cols ...field.Expr) gen.Columns
|
||||
Clauses(conds ...clause.Expression) IRefundLogDo
|
||||
Not(conds ...gen.Condition) IRefundLogDo
|
||||
Or(conds ...gen.Condition) IRefundLogDo
|
||||
Select(conds ...field.Expr) IRefundLogDo
|
||||
Where(conds ...gen.Condition) IRefundLogDo
|
||||
Order(conds ...field.Expr) IRefundLogDo
|
||||
Distinct(cols ...field.Expr) IRefundLogDo
|
||||
Omit(cols ...field.Expr) IRefundLogDo
|
||||
Join(table schema.Tabler, on ...field.Expr) IRefundLogDo
|
||||
LeftJoin(table schema.Tabler, on ...field.Expr) IRefundLogDo
|
||||
RightJoin(table schema.Tabler, on ...field.Expr) IRefundLogDo
|
||||
Group(cols ...field.Expr) IRefundLogDo
|
||||
Having(conds ...gen.Condition) IRefundLogDo
|
||||
Limit(limit int) IRefundLogDo
|
||||
Offset(offset int) IRefundLogDo
|
||||
Count() (count int64, err error)
|
||||
Scopes(funcs ...func(gen.Dao) gen.Dao) IRefundLogDo
|
||||
Unscoped() IRefundLogDo
|
||||
Create(values ...*model.RefundLog) error
|
||||
CreateInBatches(values []*model.RefundLog, batchSize int) error
|
||||
Save(values ...*model.RefundLog) error
|
||||
First() (*model.RefundLog, error)
|
||||
Take() (*model.RefundLog, error)
|
||||
Last() (*model.RefundLog, error)
|
||||
Find() ([]*model.RefundLog, error)
|
||||
FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*model.RefundLog, err error)
|
||||
FindInBatches(result *[]*model.RefundLog, batchSize int, fc func(tx gen.Dao, batch int) error) error
|
||||
Pluck(column field.Expr, dest interface{}) error
|
||||
Delete(...*model.RefundLog) (info gen.ResultInfo, err error)
|
||||
Update(column field.Expr, value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error)
|
||||
Updates(value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateColumn(column field.Expr, value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateColumnSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error)
|
||||
UpdateColumns(value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateFrom(q gen.SubQuery) gen.Dao
|
||||
Attrs(attrs ...field.AssignExpr) IRefundLogDo
|
||||
Assign(attrs ...field.AssignExpr) IRefundLogDo
|
||||
Joins(fields ...field.RelationField) IRefundLogDo
|
||||
Preload(fields ...field.RelationField) IRefundLogDo
|
||||
FirstOrInit() (*model.RefundLog, error)
|
||||
FirstOrCreate() (*model.RefundLog, error)
|
||||
FindByPage(offset int, limit int) (result []*model.RefundLog, count int64, err error)
|
||||
ScanByPage(result interface{}, offset int, limit int) (count int64, err error)
|
||||
Scan(result interface{}) (err error)
|
||||
Returning(value interface{}, columns ...string) IRefundLogDo
|
||||
UnderlyingDB() *gorm.DB
|
||||
schema.Tabler
|
||||
}
|
||||
|
||||
func (r refundLogDo) Debug() IRefundLogDo {
|
||||
return r.withDO(r.DO.Debug())
|
||||
}
|
||||
|
||||
func (r refundLogDo) WithContext(ctx context.Context) IRefundLogDo {
|
||||
return r.withDO(r.DO.WithContext(ctx))
|
||||
}
|
||||
|
||||
func (r refundLogDo) ReadDB() IRefundLogDo {
|
||||
return r.Clauses(dbresolver.Read)
|
||||
}
|
||||
|
||||
func (r refundLogDo) WriteDB() IRefundLogDo {
|
||||
return r.Clauses(dbresolver.Write)
|
||||
}
|
||||
|
||||
func (r refundLogDo) Session(config *gorm.Session) IRefundLogDo {
|
||||
return r.withDO(r.DO.Session(config))
|
||||
}
|
||||
|
||||
func (r refundLogDo) Clauses(conds ...clause.Expression) IRefundLogDo {
|
||||
return r.withDO(r.DO.Clauses(conds...))
|
||||
}
|
||||
|
||||
func (r refundLogDo) Returning(value interface{}, columns ...string) IRefundLogDo {
|
||||
return r.withDO(r.DO.Returning(value, columns...))
|
||||
}
|
||||
|
||||
func (r refundLogDo) Not(conds ...gen.Condition) IRefundLogDo {
|
||||
return r.withDO(r.DO.Not(conds...))
|
||||
}
|
||||
|
||||
func (r refundLogDo) Or(conds ...gen.Condition) IRefundLogDo {
|
||||
return r.withDO(r.DO.Or(conds...))
|
||||
}
|
||||
|
||||
func (r refundLogDo) Select(conds ...field.Expr) IRefundLogDo {
|
||||
return r.withDO(r.DO.Select(conds...))
|
||||
}
|
||||
|
||||
func (r refundLogDo) Where(conds ...gen.Condition) IRefundLogDo {
|
||||
return r.withDO(r.DO.Where(conds...))
|
||||
}
|
||||
|
||||
func (r refundLogDo) Order(conds ...field.Expr) IRefundLogDo {
|
||||
return r.withDO(r.DO.Order(conds...))
|
||||
}
|
||||
|
||||
func (r refundLogDo) Distinct(cols ...field.Expr) IRefundLogDo {
|
||||
return r.withDO(r.DO.Distinct(cols...))
|
||||
}
|
||||
|
||||
func (r refundLogDo) Omit(cols ...field.Expr) IRefundLogDo {
|
||||
return r.withDO(r.DO.Omit(cols...))
|
||||
}
|
||||
|
||||
func (r refundLogDo) Join(table schema.Tabler, on ...field.Expr) IRefundLogDo {
|
||||
return r.withDO(r.DO.Join(table, on...))
|
||||
}
|
||||
|
||||
func (r refundLogDo) LeftJoin(table schema.Tabler, on ...field.Expr) IRefundLogDo {
|
||||
return r.withDO(r.DO.LeftJoin(table, on...))
|
||||
}
|
||||
|
||||
func (r refundLogDo) RightJoin(table schema.Tabler, on ...field.Expr) IRefundLogDo {
|
||||
return r.withDO(r.DO.RightJoin(table, on...))
|
||||
}
|
||||
|
||||
func (r refundLogDo) Group(cols ...field.Expr) IRefundLogDo {
|
||||
return r.withDO(r.DO.Group(cols...))
|
||||
}
|
||||
|
||||
func (r refundLogDo) Having(conds ...gen.Condition) IRefundLogDo {
|
||||
return r.withDO(r.DO.Having(conds...))
|
||||
}
|
||||
|
||||
func (r refundLogDo) Limit(limit int) IRefundLogDo {
|
||||
return r.withDO(r.DO.Limit(limit))
|
||||
}
|
||||
|
||||
func (r refundLogDo) Offset(offset int) IRefundLogDo {
|
||||
return r.withDO(r.DO.Offset(offset))
|
||||
}
|
||||
|
||||
func (r refundLogDo) Scopes(funcs ...func(gen.Dao) gen.Dao) IRefundLogDo {
|
||||
return r.withDO(r.DO.Scopes(funcs...))
|
||||
}
|
||||
|
||||
func (r refundLogDo) Unscoped() IRefundLogDo {
|
||||
return r.withDO(r.DO.Unscoped())
|
||||
}
|
||||
|
||||
func (r refundLogDo) Create(values ...*model.RefundLog) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
return r.DO.Create(values)
|
||||
}
|
||||
|
||||
func (r refundLogDo) CreateInBatches(values []*model.RefundLog, batchSize int) error {
|
||||
return r.DO.CreateInBatches(values, batchSize)
|
||||
}
|
||||
|
||||
// Save : !!! underlying implementation is different with GORM
|
||||
// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values)
|
||||
func (r refundLogDo) Save(values ...*model.RefundLog) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
return r.DO.Save(values)
|
||||
}
|
||||
|
||||
func (r refundLogDo) First() (*model.RefundLog, error) {
|
||||
if result, err := r.DO.First(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.RefundLog), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (r refundLogDo) Take() (*model.RefundLog, error) {
|
||||
if result, err := r.DO.Take(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.RefundLog), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (r refundLogDo) Last() (*model.RefundLog, error) {
|
||||
if result, err := r.DO.Last(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.RefundLog), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (r refundLogDo) Find() ([]*model.RefundLog, error) {
|
||||
result, err := r.DO.Find()
|
||||
return result.([]*model.RefundLog), err
|
||||
}
|
||||
|
||||
func (r refundLogDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*model.RefundLog, err error) {
|
||||
buf := make([]*model.RefundLog, 0, batchSize)
|
||||
err = r.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error {
|
||||
defer func() { results = append(results, buf...) }()
|
||||
return fc(tx, batch)
|
||||
})
|
||||
return results, err
|
||||
}
|
||||
|
||||
func (r refundLogDo) FindInBatches(result *[]*model.RefundLog, batchSize int, fc func(tx gen.Dao, batch int) error) error {
|
||||
return r.DO.FindInBatches(result, batchSize, fc)
|
||||
}
|
||||
|
||||
func (r refundLogDo) Attrs(attrs ...field.AssignExpr) IRefundLogDo {
|
||||
return r.withDO(r.DO.Attrs(attrs...))
|
||||
}
|
||||
|
||||
func (r refundLogDo) Assign(attrs ...field.AssignExpr) IRefundLogDo {
|
||||
return r.withDO(r.DO.Assign(attrs...))
|
||||
}
|
||||
|
||||
func (r refundLogDo) Joins(fields ...field.RelationField) IRefundLogDo {
|
||||
for _, _f := range fields {
|
||||
r = *r.withDO(r.DO.Joins(_f))
|
||||
}
|
||||
return &r
|
||||
}
|
||||
|
||||
func (r refundLogDo) Preload(fields ...field.RelationField) IRefundLogDo {
|
||||
for _, _f := range fields {
|
||||
r = *r.withDO(r.DO.Preload(_f))
|
||||
}
|
||||
return &r
|
||||
}
|
||||
|
||||
func (r refundLogDo) FirstOrInit() (*model.RefundLog, error) {
|
||||
if result, err := r.DO.FirstOrInit(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.RefundLog), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (r refundLogDo) FirstOrCreate() (*model.RefundLog, error) {
|
||||
if result, err := r.DO.FirstOrCreate(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.RefundLog), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (r refundLogDo) FindByPage(offset int, limit int) (result []*model.RefundLog, count int64, err error) {
|
||||
result, err = r.Offset(offset).Limit(limit).Find()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if size := len(result); 0 < limit && 0 < size && size < limit {
|
||||
count = int64(size + offset)
|
||||
return
|
||||
}
|
||||
|
||||
count, err = r.Offset(-1).Limit(-1).Count()
|
||||
return
|
||||
}
|
||||
|
||||
func (r refundLogDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) {
|
||||
count, err = r.Count()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
err = r.Offset(offset).Limit(limit).Scan(result)
|
||||
return
|
||||
}
|
||||
|
||||
func (r refundLogDo) Scan(result interface{}) (err error) {
|
||||
return r.DO.Scan(result)
|
||||
}
|
||||
|
||||
func (r refundLogDo) Delete(models ...*model.RefundLog) (result gen.ResultInfo, err error) {
|
||||
return r.DO.Delete(models)
|
||||
}
|
||||
|
||||
func (r *refundLogDo) withDO(do gen.Dao) *refundLogDo {
|
||||
r.DO = *do.(*gen.DO)
|
||||
return r
|
||||
}
|
||||
514
server/dao/la_refund_record.gen.go
Normal file
514
server/dao/la_refund_record.gen.go
Normal file
@@ -0,0 +1,514 @@
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
|
||||
package dao
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/clause"
|
||||
"gorm.io/gorm/schema"
|
||||
|
||||
"gorm.io/gen"
|
||||
"gorm.io/gen/field"
|
||||
|
||||
"gorm.io/plugin/dbresolver"
|
||||
|
||||
"likeadmin/model"
|
||||
)
|
||||
|
||||
func newRefundRecord(db *gorm.DB, opts ...gen.DOOption) refundRecord {
|
||||
_refundRecord := refundRecord{}
|
||||
|
||||
_refundRecord.refundRecordDo.UseDB(db, opts...)
|
||||
_refundRecord.refundRecordDo.UseModel(&model.RefundRecord{})
|
||||
|
||||
tableName := _refundRecord.refundRecordDo.TableName()
|
||||
_refundRecord.ALL = field.NewAsterisk(tableName)
|
||||
_refundRecord.ID = field.NewInt32(tableName, "id")
|
||||
_refundRecord.Sn = field.NewString(tableName, "sn")
|
||||
_refundRecord.UserID = field.NewInt32(tableName, "user_id")
|
||||
_refundRecord.UserSn = field.NewInt64(tableName, "user_sn")
|
||||
_refundRecord.OrderID = field.NewInt32(tableName, "order_id")
|
||||
_refundRecord.OrderSn = field.NewString(tableName, "order_sn")
|
||||
_refundRecord.OrderType = field.NewString(tableName, "order_type")
|
||||
_refundRecord.OrderAmount = field.NewFloat64(tableName, "order_amount")
|
||||
_refundRecord.RefundAmount = field.NewFloat64(tableName, "refund_amount")
|
||||
_refundRecord.TransactionID = field.NewString(tableName, "transaction_id")
|
||||
_refundRecord.RefundWay = field.NewInt32(tableName, "refund_way")
|
||||
_refundRecord.RefundType = field.NewInt32(tableName, "refund_type")
|
||||
_refundRecord.RefundStatus = field.NewInt32(tableName, "refund_status")
|
||||
_refundRecord.CreateTime = field.NewInt32(tableName, "create_time")
|
||||
_refundRecord.UpdateTime = field.NewInt32(tableName, "update_time")
|
||||
_refundRecord.User = refundRecordBelongsToUser{
|
||||
db: db.Session(&gorm.Session{}),
|
||||
|
||||
RelationField: field.NewRelation("User", "model.User"),
|
||||
}
|
||||
|
||||
_refundRecord.fillFieldMap()
|
||||
|
||||
return _refundRecord
|
||||
}
|
||||
|
||||
type refundRecord struct {
|
||||
refundRecordDo
|
||||
|
||||
ALL field.Asterisk
|
||||
ID field.Int32 // id
|
||||
Sn field.String // 退款编号
|
||||
UserID field.Int32 // 关联用户
|
||||
UserSn field.Int64
|
||||
OrderID field.Int32 // 来源订单id
|
||||
OrderSn field.String // 来源单号
|
||||
OrderType field.String // 订单来源 order-商品订单 recharge-充值订单
|
||||
OrderAmount field.Float64 // 订单总的应付款金额,冗余字段
|
||||
RefundAmount field.Float64 // 本次退款金额
|
||||
TransactionID field.String // 第三方平台交易流水号
|
||||
RefundWay field.Int32 // 退款方式 1-线上退款 2-线下退款
|
||||
RefundType field.Int32 // 退款类型 1-后台退款
|
||||
RefundStatus field.Int32 // 退款状态,0退款中,1退款成功,2退款失败
|
||||
CreateTime field.Int32 // 创建时间
|
||||
UpdateTime field.Int32 // 更新时间
|
||||
User refundRecordBelongsToUser
|
||||
|
||||
fieldMap map[string]field.Expr
|
||||
}
|
||||
|
||||
func (r refundRecord) Table(newTableName string) *refundRecord {
|
||||
r.refundRecordDo.UseTable(newTableName)
|
||||
return r.updateTableName(newTableName)
|
||||
}
|
||||
|
||||
func (r refundRecord) As(alias string) *refundRecord {
|
||||
r.refundRecordDo.DO = *(r.refundRecordDo.As(alias).(*gen.DO))
|
||||
return r.updateTableName(alias)
|
||||
}
|
||||
|
||||
func (r *refundRecord) updateTableName(table string) *refundRecord {
|
||||
r.ALL = field.NewAsterisk(table)
|
||||
r.ID = field.NewInt32(table, "id")
|
||||
r.Sn = field.NewString(table, "sn")
|
||||
r.UserID = field.NewInt32(table, "user_id")
|
||||
r.UserSn = field.NewInt64(table, "user_sn")
|
||||
r.OrderID = field.NewInt32(table, "order_id")
|
||||
r.OrderSn = field.NewString(table, "order_sn")
|
||||
r.OrderType = field.NewString(table, "order_type")
|
||||
r.OrderAmount = field.NewFloat64(table, "order_amount")
|
||||
r.RefundAmount = field.NewFloat64(table, "refund_amount")
|
||||
r.TransactionID = field.NewString(table, "transaction_id")
|
||||
r.RefundWay = field.NewInt32(table, "refund_way")
|
||||
r.RefundType = field.NewInt32(table, "refund_type")
|
||||
r.RefundStatus = field.NewInt32(table, "refund_status")
|
||||
r.CreateTime = field.NewInt32(table, "create_time")
|
||||
r.UpdateTime = field.NewInt32(table, "update_time")
|
||||
|
||||
r.fillFieldMap()
|
||||
|
||||
return r
|
||||
}
|
||||
|
||||
func (r *refundRecord) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
|
||||
_f, ok := r.fieldMap[fieldName]
|
||||
if !ok || _f == nil {
|
||||
return nil, false
|
||||
}
|
||||
_oe, ok := _f.(field.OrderExpr)
|
||||
return _oe, ok
|
||||
}
|
||||
|
||||
func (r *refundRecord) fillFieldMap() {
|
||||
r.fieldMap = make(map[string]field.Expr, 16)
|
||||
r.fieldMap["id"] = r.ID
|
||||
r.fieldMap["sn"] = r.Sn
|
||||
r.fieldMap["user_id"] = r.UserID
|
||||
r.fieldMap["user_sn"] = r.UserSn
|
||||
r.fieldMap["order_id"] = r.OrderID
|
||||
r.fieldMap["order_sn"] = r.OrderSn
|
||||
r.fieldMap["order_type"] = r.OrderType
|
||||
r.fieldMap["order_amount"] = r.OrderAmount
|
||||
r.fieldMap["refund_amount"] = r.RefundAmount
|
||||
r.fieldMap["transaction_id"] = r.TransactionID
|
||||
r.fieldMap["refund_way"] = r.RefundWay
|
||||
r.fieldMap["refund_type"] = r.RefundType
|
||||
r.fieldMap["refund_status"] = r.RefundStatus
|
||||
r.fieldMap["create_time"] = r.CreateTime
|
||||
r.fieldMap["update_time"] = r.UpdateTime
|
||||
|
||||
}
|
||||
|
||||
func (r refundRecord) clone(db *gorm.DB) refundRecord {
|
||||
r.refundRecordDo.ReplaceConnPool(db.Statement.ConnPool)
|
||||
return r
|
||||
}
|
||||
|
||||
func (r refundRecord) replaceDB(db *gorm.DB) refundRecord {
|
||||
r.refundRecordDo.ReplaceDB(db)
|
||||
return r
|
||||
}
|
||||
|
||||
type refundRecordBelongsToUser struct {
|
||||
db *gorm.DB
|
||||
|
||||
field.RelationField
|
||||
}
|
||||
|
||||
func (a refundRecordBelongsToUser) Where(conds ...field.Expr) *refundRecordBelongsToUser {
|
||||
if len(conds) == 0 {
|
||||
return &a
|
||||
}
|
||||
|
||||
exprs := make([]clause.Expression, 0, len(conds))
|
||||
for _, cond := range conds {
|
||||
exprs = append(exprs, cond.BeCond().(clause.Expression))
|
||||
}
|
||||
a.db = a.db.Clauses(clause.Where{Exprs: exprs})
|
||||
return &a
|
||||
}
|
||||
|
||||
func (a refundRecordBelongsToUser) WithContext(ctx context.Context) *refundRecordBelongsToUser {
|
||||
a.db = a.db.WithContext(ctx)
|
||||
return &a
|
||||
}
|
||||
|
||||
func (a refundRecordBelongsToUser) Session(session *gorm.Session) *refundRecordBelongsToUser {
|
||||
a.db = a.db.Session(session)
|
||||
return &a
|
||||
}
|
||||
|
||||
func (a refundRecordBelongsToUser) Model(m *model.RefundRecord) *refundRecordBelongsToUserTx {
|
||||
return &refundRecordBelongsToUserTx{a.db.Model(m).Association(a.Name())}
|
||||
}
|
||||
|
||||
type refundRecordBelongsToUserTx struct{ tx *gorm.Association }
|
||||
|
||||
func (a refundRecordBelongsToUserTx) Find() (result *model.User, err error) {
|
||||
return result, a.tx.Find(&result)
|
||||
}
|
||||
|
||||
func (a refundRecordBelongsToUserTx) Append(values ...*model.User) (err error) {
|
||||
targetValues := make([]interface{}, len(values))
|
||||
for i, v := range values {
|
||||
targetValues[i] = v
|
||||
}
|
||||
return a.tx.Append(targetValues...)
|
||||
}
|
||||
|
||||
func (a refundRecordBelongsToUserTx) Replace(values ...*model.User) (err error) {
|
||||
targetValues := make([]interface{}, len(values))
|
||||
for i, v := range values {
|
||||
targetValues[i] = v
|
||||
}
|
||||
return a.tx.Replace(targetValues...)
|
||||
}
|
||||
|
||||
func (a refundRecordBelongsToUserTx) Delete(values ...*model.User) (err error) {
|
||||
targetValues := make([]interface{}, len(values))
|
||||
for i, v := range values {
|
||||
targetValues[i] = v
|
||||
}
|
||||
return a.tx.Delete(targetValues...)
|
||||
}
|
||||
|
||||
func (a refundRecordBelongsToUserTx) Clear() error {
|
||||
return a.tx.Clear()
|
||||
}
|
||||
|
||||
func (a refundRecordBelongsToUserTx) Count() int64 {
|
||||
return a.tx.Count()
|
||||
}
|
||||
|
||||
type refundRecordDo struct{ gen.DO }
|
||||
|
||||
type IRefundRecordDo interface {
|
||||
gen.SubQuery
|
||||
Debug() IRefundRecordDo
|
||||
WithContext(ctx context.Context) IRefundRecordDo
|
||||
WithResult(fc func(tx gen.Dao)) gen.ResultInfo
|
||||
ReplaceDB(db *gorm.DB)
|
||||
ReadDB() IRefundRecordDo
|
||||
WriteDB() IRefundRecordDo
|
||||
As(alias string) gen.Dao
|
||||
Session(config *gorm.Session) IRefundRecordDo
|
||||
Columns(cols ...field.Expr) gen.Columns
|
||||
Clauses(conds ...clause.Expression) IRefundRecordDo
|
||||
Not(conds ...gen.Condition) IRefundRecordDo
|
||||
Or(conds ...gen.Condition) IRefundRecordDo
|
||||
Select(conds ...field.Expr) IRefundRecordDo
|
||||
Where(conds ...gen.Condition) IRefundRecordDo
|
||||
Order(conds ...field.Expr) IRefundRecordDo
|
||||
Distinct(cols ...field.Expr) IRefundRecordDo
|
||||
Omit(cols ...field.Expr) IRefundRecordDo
|
||||
Join(table schema.Tabler, on ...field.Expr) IRefundRecordDo
|
||||
LeftJoin(table schema.Tabler, on ...field.Expr) IRefundRecordDo
|
||||
RightJoin(table schema.Tabler, on ...field.Expr) IRefundRecordDo
|
||||
Group(cols ...field.Expr) IRefundRecordDo
|
||||
Having(conds ...gen.Condition) IRefundRecordDo
|
||||
Limit(limit int) IRefundRecordDo
|
||||
Offset(offset int) IRefundRecordDo
|
||||
Count() (count int64, err error)
|
||||
Scopes(funcs ...func(gen.Dao) gen.Dao) IRefundRecordDo
|
||||
Unscoped() IRefundRecordDo
|
||||
Create(values ...*model.RefundRecord) error
|
||||
CreateInBatches(values []*model.RefundRecord, batchSize int) error
|
||||
Save(values ...*model.RefundRecord) error
|
||||
First() (*model.RefundRecord, error)
|
||||
Take() (*model.RefundRecord, error)
|
||||
Last() (*model.RefundRecord, error)
|
||||
Find() ([]*model.RefundRecord, error)
|
||||
FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*model.RefundRecord, err error)
|
||||
FindInBatches(result *[]*model.RefundRecord, batchSize int, fc func(tx gen.Dao, batch int) error) error
|
||||
Pluck(column field.Expr, dest interface{}) error
|
||||
Delete(...*model.RefundRecord) (info gen.ResultInfo, err error)
|
||||
Update(column field.Expr, value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error)
|
||||
Updates(value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateColumn(column field.Expr, value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateColumnSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error)
|
||||
UpdateColumns(value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateFrom(q gen.SubQuery) gen.Dao
|
||||
Attrs(attrs ...field.AssignExpr) IRefundRecordDo
|
||||
Assign(attrs ...field.AssignExpr) IRefundRecordDo
|
||||
Joins(fields ...field.RelationField) IRefundRecordDo
|
||||
Preload(fields ...field.RelationField) IRefundRecordDo
|
||||
FirstOrInit() (*model.RefundRecord, error)
|
||||
FirstOrCreate() (*model.RefundRecord, error)
|
||||
FindByPage(offset int, limit int) (result []*model.RefundRecord, count int64, err error)
|
||||
ScanByPage(result interface{}, offset int, limit int) (count int64, err error)
|
||||
Scan(result interface{}) (err error)
|
||||
Returning(value interface{}, columns ...string) IRefundRecordDo
|
||||
UnderlyingDB() *gorm.DB
|
||||
schema.Tabler
|
||||
}
|
||||
|
||||
func (r refundRecordDo) Debug() IRefundRecordDo {
|
||||
return r.withDO(r.DO.Debug())
|
||||
}
|
||||
|
||||
func (r refundRecordDo) WithContext(ctx context.Context) IRefundRecordDo {
|
||||
return r.withDO(r.DO.WithContext(ctx))
|
||||
}
|
||||
|
||||
func (r refundRecordDo) ReadDB() IRefundRecordDo {
|
||||
return r.Clauses(dbresolver.Read)
|
||||
}
|
||||
|
||||
func (r refundRecordDo) WriteDB() IRefundRecordDo {
|
||||
return r.Clauses(dbresolver.Write)
|
||||
}
|
||||
|
||||
func (r refundRecordDo) Session(config *gorm.Session) IRefundRecordDo {
|
||||
return r.withDO(r.DO.Session(config))
|
||||
}
|
||||
|
||||
func (r refundRecordDo) Clauses(conds ...clause.Expression) IRefundRecordDo {
|
||||
return r.withDO(r.DO.Clauses(conds...))
|
||||
}
|
||||
|
||||
func (r refundRecordDo) Returning(value interface{}, columns ...string) IRefundRecordDo {
|
||||
return r.withDO(r.DO.Returning(value, columns...))
|
||||
}
|
||||
|
||||
func (r refundRecordDo) Not(conds ...gen.Condition) IRefundRecordDo {
|
||||
return r.withDO(r.DO.Not(conds...))
|
||||
}
|
||||
|
||||
func (r refundRecordDo) Or(conds ...gen.Condition) IRefundRecordDo {
|
||||
return r.withDO(r.DO.Or(conds...))
|
||||
}
|
||||
|
||||
func (r refundRecordDo) Select(conds ...field.Expr) IRefundRecordDo {
|
||||
return r.withDO(r.DO.Select(conds...))
|
||||
}
|
||||
|
||||
func (r refundRecordDo) Where(conds ...gen.Condition) IRefundRecordDo {
|
||||
return r.withDO(r.DO.Where(conds...))
|
||||
}
|
||||
|
||||
func (r refundRecordDo) Order(conds ...field.Expr) IRefundRecordDo {
|
||||
return r.withDO(r.DO.Order(conds...))
|
||||
}
|
||||
|
||||
func (r refundRecordDo) Distinct(cols ...field.Expr) IRefundRecordDo {
|
||||
return r.withDO(r.DO.Distinct(cols...))
|
||||
}
|
||||
|
||||
func (r refundRecordDo) Omit(cols ...field.Expr) IRefundRecordDo {
|
||||
return r.withDO(r.DO.Omit(cols...))
|
||||
}
|
||||
|
||||
func (r refundRecordDo) Join(table schema.Tabler, on ...field.Expr) IRefundRecordDo {
|
||||
return r.withDO(r.DO.Join(table, on...))
|
||||
}
|
||||
|
||||
func (r refundRecordDo) LeftJoin(table schema.Tabler, on ...field.Expr) IRefundRecordDo {
|
||||
return r.withDO(r.DO.LeftJoin(table, on...))
|
||||
}
|
||||
|
||||
func (r refundRecordDo) RightJoin(table schema.Tabler, on ...field.Expr) IRefundRecordDo {
|
||||
return r.withDO(r.DO.RightJoin(table, on...))
|
||||
}
|
||||
|
||||
func (r refundRecordDo) Group(cols ...field.Expr) IRefundRecordDo {
|
||||
return r.withDO(r.DO.Group(cols...))
|
||||
}
|
||||
|
||||
func (r refundRecordDo) Having(conds ...gen.Condition) IRefundRecordDo {
|
||||
return r.withDO(r.DO.Having(conds...))
|
||||
}
|
||||
|
||||
func (r refundRecordDo) Limit(limit int) IRefundRecordDo {
|
||||
return r.withDO(r.DO.Limit(limit))
|
||||
}
|
||||
|
||||
func (r refundRecordDo) Offset(offset int) IRefundRecordDo {
|
||||
return r.withDO(r.DO.Offset(offset))
|
||||
}
|
||||
|
||||
func (r refundRecordDo) Scopes(funcs ...func(gen.Dao) gen.Dao) IRefundRecordDo {
|
||||
return r.withDO(r.DO.Scopes(funcs...))
|
||||
}
|
||||
|
||||
func (r refundRecordDo) Unscoped() IRefundRecordDo {
|
||||
return r.withDO(r.DO.Unscoped())
|
||||
}
|
||||
|
||||
func (r refundRecordDo) Create(values ...*model.RefundRecord) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
return r.DO.Create(values)
|
||||
}
|
||||
|
||||
func (r refundRecordDo) CreateInBatches(values []*model.RefundRecord, batchSize int) error {
|
||||
return r.DO.CreateInBatches(values, batchSize)
|
||||
}
|
||||
|
||||
// Save : !!! underlying implementation is different with GORM
|
||||
// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values)
|
||||
func (r refundRecordDo) Save(values ...*model.RefundRecord) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
return r.DO.Save(values)
|
||||
}
|
||||
|
||||
func (r refundRecordDo) First() (*model.RefundRecord, error) {
|
||||
if result, err := r.DO.First(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.RefundRecord), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (r refundRecordDo) Take() (*model.RefundRecord, error) {
|
||||
if result, err := r.DO.Take(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.RefundRecord), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (r refundRecordDo) Last() (*model.RefundRecord, error) {
|
||||
if result, err := r.DO.Last(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.RefundRecord), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (r refundRecordDo) Find() ([]*model.RefundRecord, error) {
|
||||
result, err := r.DO.Find()
|
||||
return result.([]*model.RefundRecord), err
|
||||
}
|
||||
|
||||
func (r refundRecordDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*model.RefundRecord, err error) {
|
||||
buf := make([]*model.RefundRecord, 0, batchSize)
|
||||
err = r.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error {
|
||||
defer func() { results = append(results, buf...) }()
|
||||
return fc(tx, batch)
|
||||
})
|
||||
return results, err
|
||||
}
|
||||
|
||||
func (r refundRecordDo) FindInBatches(result *[]*model.RefundRecord, batchSize int, fc func(tx gen.Dao, batch int) error) error {
|
||||
return r.DO.FindInBatches(result, batchSize, fc)
|
||||
}
|
||||
|
||||
func (r refundRecordDo) Attrs(attrs ...field.AssignExpr) IRefundRecordDo {
|
||||
return r.withDO(r.DO.Attrs(attrs...))
|
||||
}
|
||||
|
||||
func (r refundRecordDo) Assign(attrs ...field.AssignExpr) IRefundRecordDo {
|
||||
return r.withDO(r.DO.Assign(attrs...))
|
||||
}
|
||||
|
||||
func (r refundRecordDo) Joins(fields ...field.RelationField) IRefundRecordDo {
|
||||
for _, _f := range fields {
|
||||
r = *r.withDO(r.DO.Joins(_f))
|
||||
}
|
||||
return &r
|
||||
}
|
||||
|
||||
func (r refundRecordDo) Preload(fields ...field.RelationField) IRefundRecordDo {
|
||||
for _, _f := range fields {
|
||||
r = *r.withDO(r.DO.Preload(_f))
|
||||
}
|
||||
return &r
|
||||
}
|
||||
|
||||
func (r refundRecordDo) FirstOrInit() (*model.RefundRecord, error) {
|
||||
if result, err := r.DO.FirstOrInit(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.RefundRecord), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (r refundRecordDo) FirstOrCreate() (*model.RefundRecord, error) {
|
||||
if result, err := r.DO.FirstOrCreate(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.RefundRecord), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (r refundRecordDo) FindByPage(offset int, limit int) (result []*model.RefundRecord, count int64, err error) {
|
||||
result, err = r.Offset(offset).Limit(limit).Find()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if size := len(result); 0 < limit && 0 < size && size < limit {
|
||||
count = int64(size + offset)
|
||||
return
|
||||
}
|
||||
|
||||
count, err = r.Offset(-1).Limit(-1).Count()
|
||||
return
|
||||
}
|
||||
|
||||
func (r refundRecordDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) {
|
||||
count, err = r.Count()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
err = r.Offset(offset).Limit(limit).Scan(result)
|
||||
return
|
||||
}
|
||||
|
||||
func (r refundRecordDo) Scan(result interface{}) (err error) {
|
||||
return r.DO.Scan(result)
|
||||
}
|
||||
|
||||
func (r refundRecordDo) Delete(models ...*model.RefundRecord) (result gen.ResultInfo, err error) {
|
||||
return r.DO.Delete(models)
|
||||
}
|
||||
|
||||
func (r *refundRecordDo) withDO(do gen.Dao) *refundRecordDo {
|
||||
r.DO = *do.(*gen.DO)
|
||||
return r
|
||||
}
|
||||
448
server/dao/la_system_auth_admin.gen.go
Normal file
448
server/dao/la_system_auth_admin.gen.go
Normal file
@@ -0,0 +1,448 @@
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
|
||||
package dao
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/clause"
|
||||
"gorm.io/gorm/schema"
|
||||
|
||||
"gorm.io/gen"
|
||||
"gorm.io/gen/field"
|
||||
|
||||
"gorm.io/plugin/dbresolver"
|
||||
|
||||
"likeadmin/model"
|
||||
)
|
||||
|
||||
func newSystemAuthAdmin(db *gorm.DB, opts ...gen.DOOption) systemAuthAdmin {
|
||||
_systemAuthAdmin := systemAuthAdmin{}
|
||||
|
||||
_systemAuthAdmin.systemAuthAdminDo.UseDB(db, opts...)
|
||||
_systemAuthAdmin.systemAuthAdminDo.UseModel(&model.SystemAuthAdmin{})
|
||||
|
||||
tableName := _systemAuthAdmin.systemAuthAdminDo.TableName()
|
||||
_systemAuthAdmin.ALL = field.NewAsterisk(tableName)
|
||||
_systemAuthAdmin.ID = field.NewInt32(tableName, "id")
|
||||
_systemAuthAdmin.DeptID = field.NewInt32(tableName, "dept_id")
|
||||
_systemAuthAdmin.PostID = field.NewInt32(tableName, "post_id")
|
||||
_systemAuthAdmin.Username = field.NewString(tableName, "username")
|
||||
_systemAuthAdmin.Nickname = field.NewString(tableName, "nickname")
|
||||
_systemAuthAdmin.Password = field.NewString(tableName, "password")
|
||||
_systemAuthAdmin.Avatar = field.NewString(tableName, "avatar")
|
||||
_systemAuthAdmin.Role = field.NewString(tableName, "role")
|
||||
_systemAuthAdmin.Salt = field.NewString(tableName, "salt")
|
||||
_systemAuthAdmin.Sort = field.NewInt32(tableName, "sort")
|
||||
_systemAuthAdmin.IsMultipoint = field.NewInt32(tableName, "is_multipoint")
|
||||
_systemAuthAdmin.IsDisable = field.NewInt32(tableName, "is_disable")
|
||||
_systemAuthAdmin.IsDelete = field.NewInt32(tableName, "is_delete")
|
||||
_systemAuthAdmin.LastLoginIP = field.NewString(tableName, "last_login_ip")
|
||||
_systemAuthAdmin.LastLoginTime = field.NewInt32(tableName, "last_login_time")
|
||||
_systemAuthAdmin.CreateTime = field.NewInt32(tableName, "create_time")
|
||||
_systemAuthAdmin.UpdateTime = field.NewInt32(tableName, "update_time")
|
||||
_systemAuthAdmin.DeleteTime = field.NewInt32(tableName, "delete_time")
|
||||
|
||||
_systemAuthAdmin.fillFieldMap()
|
||||
|
||||
return _systemAuthAdmin
|
||||
}
|
||||
|
||||
type systemAuthAdmin struct {
|
||||
systemAuthAdminDo
|
||||
|
||||
ALL field.Asterisk
|
||||
ID field.Int32 // 主键
|
||||
DeptID field.Int32 // 部门ID
|
||||
PostID field.Int32 // 岗位ID
|
||||
Username field.String // 用户账号
|
||||
Nickname field.String // 用户昵称
|
||||
Password field.String // 用户密码
|
||||
Avatar field.String // 用户头像
|
||||
Role field.String // 角色主键
|
||||
Salt field.String // 加密盐巴
|
||||
Sort field.Int32 // 排序编号
|
||||
IsMultipoint field.Int32 // 多端登录: 0=否, 1=是
|
||||
IsDisable field.Int32 // 是否禁用: 0=否, 1=是
|
||||
IsDelete field.Int32 // 是否删除: 0=否, 1=是
|
||||
LastLoginIP field.String // 最后登录IP
|
||||
LastLoginTime field.Int32 // 最后登录
|
||||
CreateTime field.Int32 // 创建时间
|
||||
UpdateTime field.Int32 // 更新时间
|
||||
DeleteTime field.Int32 // 删除时间
|
||||
|
||||
fieldMap map[string]field.Expr
|
||||
}
|
||||
|
||||
func (s systemAuthAdmin) Table(newTableName string) *systemAuthAdmin {
|
||||
s.systemAuthAdminDo.UseTable(newTableName)
|
||||
return s.updateTableName(newTableName)
|
||||
}
|
||||
|
||||
func (s systemAuthAdmin) As(alias string) *systemAuthAdmin {
|
||||
s.systemAuthAdminDo.DO = *(s.systemAuthAdminDo.As(alias).(*gen.DO))
|
||||
return s.updateTableName(alias)
|
||||
}
|
||||
|
||||
func (s *systemAuthAdmin) updateTableName(table string) *systemAuthAdmin {
|
||||
s.ALL = field.NewAsterisk(table)
|
||||
s.ID = field.NewInt32(table, "id")
|
||||
s.DeptID = field.NewInt32(table, "dept_id")
|
||||
s.PostID = field.NewInt32(table, "post_id")
|
||||
s.Username = field.NewString(table, "username")
|
||||
s.Nickname = field.NewString(table, "nickname")
|
||||
s.Password = field.NewString(table, "password")
|
||||
s.Avatar = field.NewString(table, "avatar")
|
||||
s.Role = field.NewString(table, "role")
|
||||
s.Salt = field.NewString(table, "salt")
|
||||
s.Sort = field.NewInt32(table, "sort")
|
||||
s.IsMultipoint = field.NewInt32(table, "is_multipoint")
|
||||
s.IsDisable = field.NewInt32(table, "is_disable")
|
||||
s.IsDelete = field.NewInt32(table, "is_delete")
|
||||
s.LastLoginIP = field.NewString(table, "last_login_ip")
|
||||
s.LastLoginTime = field.NewInt32(table, "last_login_time")
|
||||
s.CreateTime = field.NewInt32(table, "create_time")
|
||||
s.UpdateTime = field.NewInt32(table, "update_time")
|
||||
s.DeleteTime = field.NewInt32(table, "delete_time")
|
||||
|
||||
s.fillFieldMap()
|
||||
|
||||
return s
|
||||
}
|
||||
|
||||
func (s *systemAuthAdmin) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
|
||||
_f, ok := s.fieldMap[fieldName]
|
||||
if !ok || _f == nil {
|
||||
return nil, false
|
||||
}
|
||||
_oe, ok := _f.(field.OrderExpr)
|
||||
return _oe, ok
|
||||
}
|
||||
|
||||
func (s *systemAuthAdmin) fillFieldMap() {
|
||||
s.fieldMap = make(map[string]field.Expr, 18)
|
||||
s.fieldMap["id"] = s.ID
|
||||
s.fieldMap["dept_id"] = s.DeptID
|
||||
s.fieldMap["post_id"] = s.PostID
|
||||
s.fieldMap["username"] = s.Username
|
||||
s.fieldMap["nickname"] = s.Nickname
|
||||
s.fieldMap["password"] = s.Password
|
||||
s.fieldMap["avatar"] = s.Avatar
|
||||
s.fieldMap["role"] = s.Role
|
||||
s.fieldMap["salt"] = s.Salt
|
||||
s.fieldMap["sort"] = s.Sort
|
||||
s.fieldMap["is_multipoint"] = s.IsMultipoint
|
||||
s.fieldMap["is_disable"] = s.IsDisable
|
||||
s.fieldMap["is_delete"] = s.IsDelete
|
||||
s.fieldMap["last_login_ip"] = s.LastLoginIP
|
||||
s.fieldMap["last_login_time"] = s.LastLoginTime
|
||||
s.fieldMap["create_time"] = s.CreateTime
|
||||
s.fieldMap["update_time"] = s.UpdateTime
|
||||
s.fieldMap["delete_time"] = s.DeleteTime
|
||||
}
|
||||
|
||||
func (s systemAuthAdmin) clone(db *gorm.DB) systemAuthAdmin {
|
||||
s.systemAuthAdminDo.ReplaceConnPool(db.Statement.ConnPool)
|
||||
return s
|
||||
}
|
||||
|
||||
func (s systemAuthAdmin) replaceDB(db *gorm.DB) systemAuthAdmin {
|
||||
s.systemAuthAdminDo.ReplaceDB(db)
|
||||
return s
|
||||
}
|
||||
|
||||
type systemAuthAdminDo struct{ gen.DO }
|
||||
|
||||
type ISystemAuthAdminDo interface {
|
||||
gen.SubQuery
|
||||
Debug() ISystemAuthAdminDo
|
||||
WithContext(ctx context.Context) ISystemAuthAdminDo
|
||||
WithResult(fc func(tx gen.Dao)) gen.ResultInfo
|
||||
ReplaceDB(db *gorm.DB)
|
||||
ReadDB() ISystemAuthAdminDo
|
||||
WriteDB() ISystemAuthAdminDo
|
||||
As(alias string) gen.Dao
|
||||
Session(config *gorm.Session) ISystemAuthAdminDo
|
||||
Columns(cols ...field.Expr) gen.Columns
|
||||
Clauses(conds ...clause.Expression) ISystemAuthAdminDo
|
||||
Not(conds ...gen.Condition) ISystemAuthAdminDo
|
||||
Or(conds ...gen.Condition) ISystemAuthAdminDo
|
||||
Select(conds ...field.Expr) ISystemAuthAdminDo
|
||||
Where(conds ...gen.Condition) ISystemAuthAdminDo
|
||||
Order(conds ...field.Expr) ISystemAuthAdminDo
|
||||
Distinct(cols ...field.Expr) ISystemAuthAdminDo
|
||||
Omit(cols ...field.Expr) ISystemAuthAdminDo
|
||||
Join(table schema.Tabler, on ...field.Expr) ISystemAuthAdminDo
|
||||
LeftJoin(table schema.Tabler, on ...field.Expr) ISystemAuthAdminDo
|
||||
RightJoin(table schema.Tabler, on ...field.Expr) ISystemAuthAdminDo
|
||||
Group(cols ...field.Expr) ISystemAuthAdminDo
|
||||
Having(conds ...gen.Condition) ISystemAuthAdminDo
|
||||
Limit(limit int) ISystemAuthAdminDo
|
||||
Offset(offset int) ISystemAuthAdminDo
|
||||
Count() (count int64, err error)
|
||||
Scopes(funcs ...func(gen.Dao) gen.Dao) ISystemAuthAdminDo
|
||||
Unscoped() ISystemAuthAdminDo
|
||||
Create(values ...*model.SystemAuthAdmin) error
|
||||
CreateInBatches(values []*model.SystemAuthAdmin, batchSize int) error
|
||||
Save(values ...*model.SystemAuthAdmin) error
|
||||
First() (*model.SystemAuthAdmin, error)
|
||||
Take() (*model.SystemAuthAdmin, error)
|
||||
Last() (*model.SystemAuthAdmin, error)
|
||||
Find() ([]*model.SystemAuthAdmin, error)
|
||||
FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*model.SystemAuthAdmin, err error)
|
||||
FindInBatches(result *[]*model.SystemAuthAdmin, batchSize int, fc func(tx gen.Dao, batch int) error) error
|
||||
Pluck(column field.Expr, dest interface{}) error
|
||||
Delete(...*model.SystemAuthAdmin) (info gen.ResultInfo, err error)
|
||||
Update(column field.Expr, value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error)
|
||||
Updates(value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateColumn(column field.Expr, value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateColumnSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error)
|
||||
UpdateColumns(value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateFrom(q gen.SubQuery) gen.Dao
|
||||
Attrs(attrs ...field.AssignExpr) ISystemAuthAdminDo
|
||||
Assign(attrs ...field.AssignExpr) ISystemAuthAdminDo
|
||||
Joins(fields ...field.RelationField) ISystemAuthAdminDo
|
||||
Preload(fields ...field.RelationField) ISystemAuthAdminDo
|
||||
FirstOrInit() (*model.SystemAuthAdmin, error)
|
||||
FirstOrCreate() (*model.SystemAuthAdmin, error)
|
||||
FindByPage(offset int, limit int) (result []*model.SystemAuthAdmin, count int64, err error)
|
||||
ScanByPage(result interface{}, offset int, limit int) (count int64, err error)
|
||||
Scan(result interface{}) (err error)
|
||||
Returning(value interface{}, columns ...string) ISystemAuthAdminDo
|
||||
UnderlyingDB() *gorm.DB
|
||||
schema.Tabler
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) Debug() ISystemAuthAdminDo {
|
||||
return s.withDO(s.DO.Debug())
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) WithContext(ctx context.Context) ISystemAuthAdminDo {
|
||||
return s.withDO(s.DO.WithContext(ctx))
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) ReadDB() ISystemAuthAdminDo {
|
||||
return s.Clauses(dbresolver.Read)
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) WriteDB() ISystemAuthAdminDo {
|
||||
return s.Clauses(dbresolver.Write)
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) Session(config *gorm.Session) ISystemAuthAdminDo {
|
||||
return s.withDO(s.DO.Session(config))
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) Clauses(conds ...clause.Expression) ISystemAuthAdminDo {
|
||||
return s.withDO(s.DO.Clauses(conds...))
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) Returning(value interface{}, columns ...string) ISystemAuthAdminDo {
|
||||
return s.withDO(s.DO.Returning(value, columns...))
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) Not(conds ...gen.Condition) ISystemAuthAdminDo {
|
||||
return s.withDO(s.DO.Not(conds...))
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) Or(conds ...gen.Condition) ISystemAuthAdminDo {
|
||||
return s.withDO(s.DO.Or(conds...))
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) Select(conds ...field.Expr) ISystemAuthAdminDo {
|
||||
return s.withDO(s.DO.Select(conds...))
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) Where(conds ...gen.Condition) ISystemAuthAdminDo {
|
||||
return s.withDO(s.DO.Where(conds...))
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) Order(conds ...field.Expr) ISystemAuthAdminDo {
|
||||
return s.withDO(s.DO.Order(conds...))
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) Distinct(cols ...field.Expr) ISystemAuthAdminDo {
|
||||
return s.withDO(s.DO.Distinct(cols...))
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) Omit(cols ...field.Expr) ISystemAuthAdminDo {
|
||||
return s.withDO(s.DO.Omit(cols...))
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) Join(table schema.Tabler, on ...field.Expr) ISystemAuthAdminDo {
|
||||
return s.withDO(s.DO.Join(table, on...))
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) LeftJoin(table schema.Tabler, on ...field.Expr) ISystemAuthAdminDo {
|
||||
return s.withDO(s.DO.LeftJoin(table, on...))
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) RightJoin(table schema.Tabler, on ...field.Expr) ISystemAuthAdminDo {
|
||||
return s.withDO(s.DO.RightJoin(table, on...))
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) Group(cols ...field.Expr) ISystemAuthAdminDo {
|
||||
return s.withDO(s.DO.Group(cols...))
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) Having(conds ...gen.Condition) ISystemAuthAdminDo {
|
||||
return s.withDO(s.DO.Having(conds...))
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) Limit(limit int) ISystemAuthAdminDo {
|
||||
return s.withDO(s.DO.Limit(limit))
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) Offset(offset int) ISystemAuthAdminDo {
|
||||
return s.withDO(s.DO.Offset(offset))
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) Scopes(funcs ...func(gen.Dao) gen.Dao) ISystemAuthAdminDo {
|
||||
return s.withDO(s.DO.Scopes(funcs...))
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) Unscoped() ISystemAuthAdminDo {
|
||||
return s.withDO(s.DO.Unscoped())
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) Create(values ...*model.SystemAuthAdmin) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
return s.DO.Create(values)
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) CreateInBatches(values []*model.SystemAuthAdmin, batchSize int) error {
|
||||
return s.DO.CreateInBatches(values, batchSize)
|
||||
}
|
||||
|
||||
// Save : !!! underlying implementation is different with GORM
|
||||
// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values)
|
||||
func (s systemAuthAdminDo) Save(values ...*model.SystemAuthAdmin) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
return s.DO.Save(values)
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) First() (*model.SystemAuthAdmin, error) {
|
||||
if result, err := s.DO.First(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.SystemAuthAdmin), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) Take() (*model.SystemAuthAdmin, error) {
|
||||
if result, err := s.DO.Take(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.SystemAuthAdmin), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) Last() (*model.SystemAuthAdmin, error) {
|
||||
if result, err := s.DO.Last(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.SystemAuthAdmin), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) Find() ([]*model.SystemAuthAdmin, error) {
|
||||
result, err := s.DO.Find()
|
||||
return result.([]*model.SystemAuthAdmin), err
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*model.SystemAuthAdmin, err error) {
|
||||
buf := make([]*model.SystemAuthAdmin, 0, batchSize)
|
||||
err = s.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error {
|
||||
defer func() { results = append(results, buf...) }()
|
||||
return fc(tx, batch)
|
||||
})
|
||||
return results, err
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) FindInBatches(result *[]*model.SystemAuthAdmin, batchSize int, fc func(tx gen.Dao, batch int) error) error {
|
||||
return s.DO.FindInBatches(result, batchSize, fc)
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) Attrs(attrs ...field.AssignExpr) ISystemAuthAdminDo {
|
||||
return s.withDO(s.DO.Attrs(attrs...))
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) Assign(attrs ...field.AssignExpr) ISystemAuthAdminDo {
|
||||
return s.withDO(s.DO.Assign(attrs...))
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) Joins(fields ...field.RelationField) ISystemAuthAdminDo {
|
||||
for _, _f := range fields {
|
||||
s = *s.withDO(s.DO.Joins(_f))
|
||||
}
|
||||
return &s
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) Preload(fields ...field.RelationField) ISystemAuthAdminDo {
|
||||
for _, _f := range fields {
|
||||
s = *s.withDO(s.DO.Preload(_f))
|
||||
}
|
||||
return &s
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) FirstOrInit() (*model.SystemAuthAdmin, error) {
|
||||
if result, err := s.DO.FirstOrInit(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.SystemAuthAdmin), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) FirstOrCreate() (*model.SystemAuthAdmin, error) {
|
||||
if result, err := s.DO.FirstOrCreate(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*model.SystemAuthAdmin), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) FindByPage(offset int, limit int) (result []*model.SystemAuthAdmin, count int64, err error) {
|
||||
result, err = s.Offset(offset).Limit(limit).Find()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if size := len(result); 0 < limit && 0 < size && size < limit {
|
||||
count = int64(size + offset)
|
||||
return
|
||||
}
|
||||
|
||||
count, err = s.Offset(-1).Limit(-1).Count()
|
||||
return
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) {
|
||||
count, err = s.Count()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
err = s.Offset(offset).Limit(limit).Scan(result)
|
||||
return
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) Scan(result interface{}) (err error) {
|
||||
return s.DO.Scan(result)
|
||||
}
|
||||
|
||||
func (s systemAuthAdminDo) Delete(models ...*model.SystemAuthAdmin) (result gen.ResultInfo, err error) {
|
||||
return s.DO.Delete(models)
|
||||
}
|
||||
|
||||
func (s *systemAuthAdminDo) withDO(do gen.Dao) *systemAuthAdminDo {
|
||||
s.DO = *do.(*gen.DO)
|
||||
return s
|
||||
}
|
||||
@@ -28,7 +28,7 @@ func newUser(db *gorm.DB, opts ...gen.DOOption) user {
|
||||
tableName := _user.userDo.TableName()
|
||||
_user.ALL = field.NewAsterisk(tableName)
|
||||
_user.ID = field.NewInt32(tableName, "id")
|
||||
_user.Sn = field.NewInt32(tableName, "sn")
|
||||
_user.Sn = field.NewInt64(tableName, "sn")
|
||||
_user.Avatar = field.NewString(tableName, "avatar")
|
||||
_user.RealName = field.NewString(tableName, "real_name")
|
||||
_user.Nickname = field.NewString(tableName, "nickname")
|
||||
@@ -40,7 +40,7 @@ func newUser(db *gorm.DB, opts ...gen.DOOption) user {
|
||||
_user.IsDisable = field.NewInt32(tableName, "is_disable")
|
||||
_user.LoginIP = field.NewString(tableName, "login_ip")
|
||||
_user.LoginTime = field.NewInt32(tableName, "login_time")
|
||||
_user.IsNewUser = field.NewBool(tableName, "is_new_user")
|
||||
_user.IsNewUser = field.NewInt32(tableName, "is_new_user")
|
||||
_user.UserMoney = field.NewFloat64(tableName, "user_money")
|
||||
_user.TotalRechargeAmount = field.NewFloat64(tableName, "total_recharge_amount")
|
||||
_user.CreateTime = field.NewInt32(tableName, "create_time")
|
||||
@@ -57,7 +57,7 @@ type user struct {
|
||||
|
||||
ALL field.Asterisk
|
||||
ID field.Int32 // 主键
|
||||
Sn field.Int32 // 编号
|
||||
Sn field.Int64 // 编号
|
||||
Avatar field.String // 头像
|
||||
RealName field.String // 真实姓名
|
||||
Nickname field.String // 用户昵称
|
||||
@@ -69,7 +69,7 @@ type user struct {
|
||||
IsDisable field.Int32 // 是否禁用: [0=否, 1=是]
|
||||
LoginIP field.String // 最后登录IP
|
||||
LoginTime field.Int32 // 最后登录时间
|
||||
IsNewUser field.Bool // 是否是新注册用户: [1-是, 0-否]
|
||||
IsNewUser field.Int32 // 是否是新注册用户: [1-是, 0-否]
|
||||
UserMoney field.Float64 // 用户余额
|
||||
TotalRechargeAmount field.Float64 // 累计充值
|
||||
CreateTime field.Int32 // 创建时间
|
||||
@@ -92,7 +92,7 @@ func (u user) As(alias string) *user {
|
||||
func (u *user) updateTableName(table string) *user {
|
||||
u.ALL = field.NewAsterisk(table)
|
||||
u.ID = field.NewInt32(table, "id")
|
||||
u.Sn = field.NewInt32(table, "sn")
|
||||
u.Sn = field.NewInt64(table, "sn")
|
||||
u.Avatar = field.NewString(table, "avatar")
|
||||
u.RealName = field.NewString(table, "real_name")
|
||||
u.Nickname = field.NewString(table, "nickname")
|
||||
@@ -104,7 +104,7 @@ func (u *user) updateTableName(table string) *user {
|
||||
u.IsDisable = field.NewInt32(table, "is_disable")
|
||||
u.LoginIP = field.NewString(table, "login_ip")
|
||||
u.LoginTime = field.NewInt32(table, "login_time")
|
||||
u.IsNewUser = field.NewBool(table, "is_new_user")
|
||||
u.IsNewUser = field.NewInt32(table, "is_new_user")
|
||||
u.UserMoney = field.NewFloat64(table, "user_money")
|
||||
u.TotalRechargeAmount = field.NewFloat64(table, "total_recharge_amount")
|
||||
u.CreateTime = field.NewInt32(table, "create_time")
|
||||
|
||||
@@ -28,7 +28,7 @@ func newUserAccountLog(db *gorm.DB, opts ...gen.DOOption) userAccountLog {
|
||||
tableName := _userAccountLog.userAccountLogDo.TableName()
|
||||
_userAccountLog.ALL = field.NewAsterisk(tableName)
|
||||
_userAccountLog.ID = field.NewInt32(tableName, "id")
|
||||
_userAccountLog.Sn = field.NewString(tableName, "sn")
|
||||
_userAccountLog.Sn = field.NewInt64(tableName, "sn")
|
||||
_userAccountLog.UserID = field.NewInt32(tableName, "user_id")
|
||||
_userAccountLog.ChangeObject = field.NewInt32(tableName, "change_object")
|
||||
_userAccountLog.ChangeType = field.NewInt32(tableName, "change_type")
|
||||
@@ -41,6 +41,11 @@ func newUserAccountLog(db *gorm.DB, opts ...gen.DOOption) userAccountLog {
|
||||
_userAccountLog.CreateTime = field.NewInt32(tableName, "create_time")
|
||||
_userAccountLog.UpdateTime = field.NewInt32(tableName, "update_time")
|
||||
_userAccountLog.DeleteTime = field.NewInt32(tableName, "delete_time")
|
||||
_userAccountLog.User = userAccountLogBelongsToUser{
|
||||
db: db.Session(&gorm.Session{}),
|
||||
|
||||
RelationField: field.NewRelation("User", "model.User"),
|
||||
}
|
||||
|
||||
_userAccountLog.fillFieldMap()
|
||||
|
||||
@@ -52,7 +57,7 @@ type userAccountLog struct {
|
||||
|
||||
ALL field.Asterisk
|
||||
ID field.Int32
|
||||
Sn field.String // 流水号
|
||||
Sn field.Int64 // 用户编号
|
||||
UserID field.Int32 // 用户id
|
||||
ChangeObject field.Int32 // 变动对象
|
||||
ChangeType field.Int32 // 变动类型
|
||||
@@ -65,6 +70,7 @@ type userAccountLog struct {
|
||||
CreateTime field.Int32 // 创建时间
|
||||
UpdateTime field.Int32 // 更新时间
|
||||
DeleteTime field.Int32 // 删除时间
|
||||
User userAccountLogBelongsToUser
|
||||
|
||||
fieldMap map[string]field.Expr
|
||||
}
|
||||
@@ -82,7 +88,7 @@ func (u userAccountLog) As(alias string) *userAccountLog {
|
||||
func (u *userAccountLog) updateTableName(table string) *userAccountLog {
|
||||
u.ALL = field.NewAsterisk(table)
|
||||
u.ID = field.NewInt32(table, "id")
|
||||
u.Sn = field.NewString(table, "sn")
|
||||
u.Sn = field.NewInt64(table, "sn")
|
||||
u.UserID = field.NewInt32(table, "user_id")
|
||||
u.ChangeObject = field.NewInt32(table, "change_object")
|
||||
u.ChangeType = field.NewInt32(table, "change_type")
|
||||
@@ -111,7 +117,7 @@ func (u *userAccountLog) GetFieldByName(fieldName string) (field.OrderExpr, bool
|
||||
}
|
||||
|
||||
func (u *userAccountLog) fillFieldMap() {
|
||||
u.fieldMap = make(map[string]field.Expr, 14)
|
||||
u.fieldMap = make(map[string]field.Expr, 15)
|
||||
u.fieldMap["id"] = u.ID
|
||||
u.fieldMap["sn"] = u.Sn
|
||||
u.fieldMap["user_id"] = u.UserID
|
||||
@@ -126,6 +132,7 @@ func (u *userAccountLog) fillFieldMap() {
|
||||
u.fieldMap["create_time"] = u.CreateTime
|
||||
u.fieldMap["update_time"] = u.UpdateTime
|
||||
u.fieldMap["delete_time"] = u.DeleteTime
|
||||
|
||||
}
|
||||
|
||||
func (u userAccountLog) clone(db *gorm.DB) userAccountLog {
|
||||
@@ -138,6 +145,77 @@ func (u userAccountLog) replaceDB(db *gorm.DB) userAccountLog {
|
||||
return u
|
||||
}
|
||||
|
||||
type userAccountLogBelongsToUser struct {
|
||||
db *gorm.DB
|
||||
|
||||
field.RelationField
|
||||
}
|
||||
|
||||
func (a userAccountLogBelongsToUser) Where(conds ...field.Expr) *userAccountLogBelongsToUser {
|
||||
if len(conds) == 0 {
|
||||
return &a
|
||||
}
|
||||
|
||||
exprs := make([]clause.Expression, 0, len(conds))
|
||||
for _, cond := range conds {
|
||||
exprs = append(exprs, cond.BeCond().(clause.Expression))
|
||||
}
|
||||
a.db = a.db.Clauses(clause.Where{Exprs: exprs})
|
||||
return &a
|
||||
}
|
||||
|
||||
func (a userAccountLogBelongsToUser) WithContext(ctx context.Context) *userAccountLogBelongsToUser {
|
||||
a.db = a.db.WithContext(ctx)
|
||||
return &a
|
||||
}
|
||||
|
||||
func (a userAccountLogBelongsToUser) Session(session *gorm.Session) *userAccountLogBelongsToUser {
|
||||
a.db = a.db.Session(session)
|
||||
return &a
|
||||
}
|
||||
|
||||
func (a userAccountLogBelongsToUser) Model(m *model.UserAccountLog) *userAccountLogBelongsToUserTx {
|
||||
return &userAccountLogBelongsToUserTx{a.db.Model(m).Association(a.Name())}
|
||||
}
|
||||
|
||||
type userAccountLogBelongsToUserTx struct{ tx *gorm.Association }
|
||||
|
||||
func (a userAccountLogBelongsToUserTx) Find() (result *model.User, err error) {
|
||||
return result, a.tx.Find(&result)
|
||||
}
|
||||
|
||||
func (a userAccountLogBelongsToUserTx) Append(values ...*model.User) (err error) {
|
||||
targetValues := make([]interface{}, len(values))
|
||||
for i, v := range values {
|
||||
targetValues[i] = v
|
||||
}
|
||||
return a.tx.Append(targetValues...)
|
||||
}
|
||||
|
||||
func (a userAccountLogBelongsToUserTx) Replace(values ...*model.User) (err error) {
|
||||
targetValues := make([]interface{}, len(values))
|
||||
for i, v := range values {
|
||||
targetValues[i] = v
|
||||
}
|
||||
return a.tx.Replace(targetValues...)
|
||||
}
|
||||
|
||||
func (a userAccountLogBelongsToUserTx) Delete(values ...*model.User) (err error) {
|
||||
targetValues := make([]interface{}, len(values))
|
||||
for i, v := range values {
|
||||
targetValues[i] = v
|
||||
}
|
||||
return a.tx.Delete(targetValues...)
|
||||
}
|
||||
|
||||
func (a userAccountLogBelongsToUserTx) Clear() error {
|
||||
return a.tx.Clear()
|
||||
}
|
||||
|
||||
func (a userAccountLogBelongsToUserTx) Count() int64 {
|
||||
return a.tx.Count()
|
||||
}
|
||||
|
||||
type userAccountLogDo struct{ gen.DO }
|
||||
|
||||
type IUserAccountLogDo interface {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package generator
|
||||
|
||||
//GenConstants 代码生成常量
|
||||
// GenConstants 代码生成常量
|
||||
var GenConstants = genConstants{
|
||||
UTF8: "utf-8", //编码
|
||||
TplCrud: "crud", //单表 (增删改查)
|
||||
@@ -10,15 +10,15 @@ var GenConstants = genConstants{
|
||||
Require: 1, //需要的
|
||||
}
|
||||
|
||||
//GoConstants Go相关常量
|
||||
// GoConstants Go相关常量
|
||||
var GoConstants = goConstants{
|
||||
TypeString: "string", //字符串类型
|
||||
TypeFloat: "float64", //浮点型
|
||||
TypeInt: "int", //整型
|
||||
TypeInt: "int32", //整型
|
||||
TypeDate: "core.TsTime", //时间类型
|
||||
}
|
||||
|
||||
//SqlConstants 数据库相关常量
|
||||
// SqlConstants 数据库相关常量
|
||||
var SqlConstants = sqlConstants{
|
||||
//数据库字符串类型
|
||||
ColumnTypeStr: []string{"char", "varchar", "nvarchar", "varchar2"},
|
||||
@@ -27,7 +27,7 @@ var SqlConstants = sqlConstants{
|
||||
//数据库时间类型
|
||||
ColumnTypeTime: []string{"datetime", "time", "date", "timestamp"},
|
||||
//数据库数字类型
|
||||
ColumnTypeNumber: []string{"tinyint", "smallint", "mediumint", "int", "integer", "bit", "bigint",
|
||||
ColumnTypeNumber: []string{"tinyint", "smallint", "mediumint", "int", "int unsigned", "integer", "bit", "bigint",
|
||||
"float", "double", "decimal"},
|
||||
//时间日期字段名
|
||||
ColumnTimeName: []string{"create_time", "update_time", "delete_time", "start_time", "end_time"},
|
||||
@@ -41,7 +41,7 @@ var SqlConstants = sqlConstants{
|
||||
ColumnNameNotQuery: []string{"is_delete", "create_time", "update_time", "delete_time"},
|
||||
}
|
||||
|
||||
//HtmlConstants HTML相关常量
|
||||
// HtmlConstants HTML相关常量
|
||||
var HtmlConstants = htmlConstants{
|
||||
HtmlInput: "input", //文本框
|
||||
HtmlTextarea: "textarea", //文本域
|
||||
|
||||
@@ -34,50 +34,50 @@ type {{{ toCamelCase .ModuleName }}}Handler struct {
|
||||
//list {{{ .ModuleName }}}列表
|
||||
func (hd {{{ toCamelCase .ModuleName }}}Handler) list(c *gin.Context) {
|
||||
var page request.PageReq
|
||||
var listReq {{{ title (toCamelCase .EntityName) }}}ListReq
|
||||
var listReq req.{{{ title (toCamelCase .EntityName) }}}ListReq
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &page)) {
|
||||
return
|
||||
}
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
|
||||
return
|
||||
}
|
||||
res, err := ph.srv.List(page, listReq)
|
||||
res, err := hd.srv.List(c,page, listReq)
|
||||
response.CheckAndRespWithData(c, res, err)
|
||||
}
|
||||
|
||||
//detail {{{ .ModuleName }}}详情
|
||||
func (hd {{{ toCamelCase .ModuleName }}}Handler) detail(c *gin.Context) {
|
||||
var detailReq {{{ title (toCamelCase .EntityName) }}}DetailReq
|
||||
var detailReq req.{{{ title (toCamelCase .EntityName) }}}DetailReq
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &detailReq)) {
|
||||
return
|
||||
}
|
||||
res, err := hd.srv.Detail(detailReq.{{{ title (toCamelCase .PrimaryKey) }}})
|
||||
res, err := hd.srv.Detail(c,detailReq.{{{ title (toCamelCase .PrimaryKey) }}})
|
||||
response.CheckAndRespWithData(c, res, err)
|
||||
}
|
||||
|
||||
//add {{{ .ModuleName }}}新增
|
||||
func (hd {{{ toCamelCase .ModuleName }}}Handler) add(c *gin.Context) {
|
||||
var addReq {{{ title (toCamelCase .EntityName) }}}AddReq
|
||||
var addReq req.{{{ title (toCamelCase .EntityName) }}}AddReq
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyBody(c, &addReq)) {
|
||||
return
|
||||
}
|
||||
response.CheckAndResp(c, hd.srv.Add(addReq))
|
||||
response.CheckAndResp(c, hd.srv.Add(c,addReq))
|
||||
}
|
||||
|
||||
//edit {{{ .ModuleName }}}编辑
|
||||
func (hd {{{ toCamelCase .ModuleName }}}Handler) edit(c *gin.Context) {
|
||||
var editReq {{{ title (toCamelCase .EntityName) }}}EditReq
|
||||
var editReq req.{{{ title (toCamelCase .EntityName) }}}EditReq
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyBody(c, &editReq)) {
|
||||
return
|
||||
}
|
||||
response.CheckAndResp(c, hd.srv.Edit(editReq))
|
||||
response.CheckAndResp(c, hd.srv.Edit(c,editReq))
|
||||
}
|
||||
|
||||
//del {{{ .ModuleName }}}删除
|
||||
func (hd {{{ toCamelCase .ModuleName }}}Handler) del(c *gin.Context) {
|
||||
var delReq {{{ title (toCamelCase .EntityName) }}}DelReq
|
||||
var delReq req.{{{ title (toCamelCase .EntityName) }}}DelReq
|
||||
if response.IsFailWithResp(c, util.VerifyUtil.VerifyBody(c, &delReq)) {
|
||||
return
|
||||
}
|
||||
response.CheckAndResp(c, hd.srv.Del(delReq.{{{ title (toCamelCase .PrimaryKey) }}}))
|
||||
response.CheckAndResp(c, hd.srv.Del(c,delReq.{{{ title (toCamelCase .PrimaryKey) }}}))
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
type {{{ title (toCamelCase .EntityName) }}}ListReq struct {
|
||||
{{{- range .Columns }}}
|
||||
{{{- if .IsQuery }}}
|
||||
{{{ title (toCamelCase .JavaField) }}} {{{ .JavaType }}} `form:"{{{ toCamelCase .JavaField }}}"` // {{{ .ColumnComment }}}
|
||||
{{{ title (toCamelCase .JavaField) }}} {{{ .JavaType }}} `form:"{{{ .JavaField }}}"` // {{{ .ColumnComment }}}
|
||||
{{{- end }}}
|
||||
{{{- end }}}
|
||||
}
|
||||
@@ -17,7 +17,7 @@ type {{{ title (toCamelCase .EntityName) }}}ListReq struct {
|
||||
type {{{ title (toCamelCase .EntityName) }}}DetailReq struct {
|
||||
{{{- range .Columns }}}
|
||||
{{{- if .IsPk }}}
|
||||
{{{ title (toCamelCase .JavaField) }}} {{{ .JavaType }}} `form:"{{{ toCamelCase .JavaField }}}"` // {{{ .ColumnComment }}}
|
||||
{{{ title (toCamelCase .JavaField) }}} {{{ .JavaType }}} `form:"{{{ .JavaField }}}"` // {{{ .ColumnComment }}}
|
||||
{{{- end }}}
|
||||
{{{- end }}}
|
||||
}
|
||||
@@ -26,7 +26,7 @@ type {{{ title (toCamelCase .EntityName) }}}DetailReq struct {
|
||||
type {{{ title (toCamelCase .EntityName) }}}AddReq struct {
|
||||
{{{- range .Columns }}}
|
||||
{{{- if .IsInsert }}}
|
||||
{{{ title (toCamelCase .JavaField) }}} {{{ .JavaType }}} `form:"{{{ toCamelCase .JavaField }}}"` // {{{ .ColumnComment }}}
|
||||
{{{ title (toCamelCase .JavaField) }}} {{{ .JavaType }}} `form:"{{{ .JavaField }}}"` // {{{ .ColumnComment }}}
|
||||
{{{- end }}}
|
||||
{{{- end }}}
|
||||
}
|
||||
@@ -35,7 +35,7 @@ type {{{ title (toCamelCase .EntityName) }}}AddReq struct {
|
||||
type {{{ title (toCamelCase .EntityName) }}}EditReq struct {
|
||||
{{{- range .Columns }}}
|
||||
{{{- if .IsEdit }}}
|
||||
{{{ title (toCamelCase .JavaField) }}} {{{ .JavaType }}} `form:"{{{ toCamelCase .JavaField }}}"` // {{{ .ColumnComment }}}
|
||||
{{{ title (toCamelCase .JavaField) }}} {{{ .JavaType }}} `form:"{{{ .JavaField }}}"` // {{{ .ColumnComment }}}
|
||||
{{{- end }}}
|
||||
{{{- end }}}
|
||||
}
|
||||
@@ -44,7 +44,7 @@ type {{{ title (toCamelCase .EntityName) }}}EditReq struct {
|
||||
type {{{ title (toCamelCase .EntityName) }}}DelReq struct {
|
||||
{{{- range .Columns }}}
|
||||
{{{- if .IsPk }}}
|
||||
{{{ title (toCamelCase .JavaField) }}} {{{ .JavaType }}} `form:"{{{ toCamelCase .JavaField }}}"` // {{{ .ColumnComment }}}
|
||||
{{{ title (toCamelCase .JavaField) }}} {{{ .JavaType }}} `form:"{{{ .JavaField }}}"` // {{{ .ColumnComment }}}
|
||||
{{{- end }}}
|
||||
{{{- end }}}
|
||||
}
|
||||
@@ -53,7 +53,7 @@ type {{{ title (toCamelCase .EntityName) }}}DelReq struct {
|
||||
type {{{ title (toCamelCase .EntityName) }}}Resp struct {
|
||||
{{{- range .Columns }}}
|
||||
{{{- if or .IsList .IsPk }}}
|
||||
{{{ title (toCamelCase .JavaField) }}} {{{ .JavaType }}} `json:"{{{ toCamelCase .JavaField }}}" structs:"{{{ toCamelCase .JavaField }}}"` // {{{ .ColumnComment }}}
|
||||
{{{ title (toCamelCase .JavaField) }}} {{{ .JavaType }}} `json:"{{{ .JavaField }}}" structs:"{{{ .JavaField }}}"` // {{{ .ColumnComment }}}
|
||||
{{{- end }}}
|
||||
{{{- end }}}
|
||||
}
|
||||
|
||||
@@ -8,11 +8,11 @@ import (
|
||||
)
|
||||
|
||||
type I{{{ title (toCamelCase .EntityName) }}}Service interface {
|
||||
List(page request.PageReq, listReq {{{ title (toCamelCase .EntityName) }}}ListReq) (res response.PageResp, e error)
|
||||
Detail(id uint) (res {{{ title (toCamelCase .EntityName) }}}Resp, e error)
|
||||
Add(addReq {{{ title (toCamelCase .EntityName) }}}AddReq) (e error)
|
||||
Edit(editReq {{{ title (toCamelCase .EntityName) }}}EditReq) (e error)
|
||||
Del(id uint) (e error)
|
||||
List(c *gin.Context, page request.PageReq, listReq req.{{{ title (toCamelCase .EntityName) }}}ListReq) (res response.PageResp, e error)
|
||||
Detail(c *gin.Context, id uint) (res {{{ title (toCamelCase .EntityName) }}}Resp, e error)
|
||||
Add(c *gin.Context, addReq req.{{{ title (toCamelCase .EntityName) }}}AddReq) (e error)
|
||||
Edit(c *gin.Context, editReq req.{{{ title (toCamelCase .EntityName) }}}EditReq) (e error)
|
||||
Del(c *gin.Context, id uint) (e error)
|
||||
}
|
||||
|
||||
//New{{{ title (toCamelCase .EntityName) }}}Service 初始化
|
||||
@@ -27,42 +27,44 @@ type {{{ toCamelCase .EntityName }}}Service struct {
|
||||
}
|
||||
|
||||
//List {{{ .FunctionName }}}列表
|
||||
func (srv {{{ toCamelCase .EntityName }}}Service) List(page request.PageReq, listReq {{{ title (toCamelCase .EntityName) }}}ListReq) (res response.PageResp, e error) {
|
||||
func (srv {{{ toCamelCase .EntityName }}}Service) List(c *gin.Context, page request.PageReq, listReq req.{{{ title (toCamelCase .EntityName) }}}ListReq) (res response.PageResp, e error) {
|
||||
// 分页信息
|
||||
limit := page.PageSize
|
||||
offset := page.PageSize * (page.PageNo - 1)
|
||||
|
||||
m := srv.dao.{{{ title (toCamelCase .EntityName) }}}
|
||||
q := m.WithContext(c)
|
||||
|
||||
// 查询
|
||||
model := srv.db.Model(&{{{ title (toCamelCase .EntityName) }}}{})
|
||||
{{{- range .Columns }}}
|
||||
{{{- if .IsQuery }}}
|
||||
{{{- $queryOpr := index $.ModelOprMap .QueryType }}}
|
||||
{{{- if and (eq .JavaType "string") (eq $queryOpr "like") }}}
|
||||
if listReq.{{{ title (toCamelCase .ColumnName) }}} != "" {
|
||||
model = model.Where("{{{ .ColumnName }}} like ?", "%"+listReq.{{{ title (toCamelCase .ColumnName) }}}+"%")
|
||||
q = q.Where(m.{{{(toCamelCase .ColumnName) }}}.Like("%"+listReq.{{{ title (toCamelCase .ColumnName) }}}+"%"))
|
||||
}
|
||||
{{{- else }}}
|
||||
if listReq.{{{ title (toCamelCase .ColumnName) }}} {{{ if eq .JavaType "string" }}}!= ""{{{ else }}}>=0{{{ end }}} {
|
||||
model = model.Where("{{{ .ColumnName }}} = ?", listReq.{{{ title (toCamelCase .ColumnName) }}})
|
||||
q = q.Where(m.{{{ title (toCamelCase .ColumnName) }}}.Eq(listReq.{{{ title (toCamelCase .ColumnName) }}}))
|
||||
}
|
||||
{{{- end }}}
|
||||
{{{- end }}}
|
||||
{{{- end }}}
|
||||
{{{- if contains .AllFields "is_delete" }}}
|
||||
model = model.Where("is_delete = ?", 0)
|
||||
q = q.Where(m.IsDelete.Eq(0))
|
||||
{{{- end }}}
|
||||
|
||||
// 总数
|
||||
var count int64
|
||||
err := model.Count(&count).Error
|
||||
count, err := q.Count()
|
||||
if e = response.CheckErr(err, "List Count err"); e != nil {
|
||||
return
|
||||
}
|
||||
// 数据
|
||||
var objs []{{{ title (toCamelCase .EntityName) }}}
|
||||
err = model.Limit(limit).Offset(offset).Order("id desc").Find(&objs).Error
|
||||
objs, err := q.Limit(limit).Offset(offset).Order(m.ID.Desc()).Find()
|
||||
if e = response.CheckErr(err, "List Find err"); e != nil {
|
||||
return
|
||||
}
|
||||
resps := []{{{ title (toCamelCase .EntityName) }}}Resp{}
|
||||
var resps []resp.{{{ title (toCamelCase .EntityName) }}}Resp
|
||||
response.Copy(&resps, objs)
|
||||
return response.PageResp{
|
||||
PageNo: page.PageNo,
|
||||
@@ -73,9 +75,11 @@ func (srv {{{ toCamelCase .EntityName }}}Service) List(page request.PageReq, lis
|
||||
}
|
||||
|
||||
//Detail {{{ .FunctionName }}}详情
|
||||
func (srv {{{ toCamelCase .EntityName }}}Service) Detail(id uint) (res {{{ title (toCamelCase .EntityName) }}}Resp, e error) {
|
||||
var obj {{{ title (toCamelCase .EntityName) }}}
|
||||
err := srv.db.Where("{{{ $.PrimaryKey }}} = ?{{{ if contains .AllFields "is_delete" }}} AND is_delete = ?{{{ end }}}", id{{{ if contains .AllFields "is_delete" }}}, 0{{{ end }}}).Limit(1).First(&obj).Error
|
||||
func (srv {{{ toCamelCase .EntityName }}}Service) Detail(c *gin.Context, id uint) (res {{{ title (toCamelCase .EntityName) }}}Resp, e error) {
|
||||
m := srv.dao.{{{ title (toCamelCase .EntityName) }}}
|
||||
q := m.WithContext(c)
|
||||
|
||||
obj, err := q.Where(m.{{{ title (toCamelCase $.PrimaryKey) }}}.Eq(id) {{{ if contains .AllFields "is_delete" }}} , m.IsDelete.Eq(0) {{{ end }}}).First()
|
||||
if e = response.CheckErrDBNotRecord(err, "数据不存在!"); e != nil {
|
||||
return
|
||||
}
|
||||
@@ -92,18 +96,24 @@ func (srv {{{ toCamelCase .EntityName }}}Service) Detail(id uint) (res {{{ title
|
||||
}
|
||||
|
||||
//Add {{{ .FunctionName }}}新增
|
||||
func (srv {{{ toCamelCase .EntityName }}}Service) Add(addReq {{{ title (toCamelCase .EntityName) }}}AddReq) (e error) {
|
||||
func (srv {{{ toCamelCase .EntityName }}}Service) Add(c *gin.Context, addReq req.{{{ title (toCamelCase .EntityName) }}}AddReq) (e error) {
|
||||
m := srv.dao.{{{ title (toCamelCase .EntityName) }}}
|
||||
q := m.WithContext(c)
|
||||
|
||||
var obj {{{ title (toCamelCase .EntityName) }}}
|
||||
response.Copy(&obj, addReq)
|
||||
err := srv.db.Create(&obj).Error
|
||||
err := q.Create(&obj)
|
||||
e = response.CheckErr(err, "Add Create err")
|
||||
return
|
||||
}
|
||||
|
||||
//Edit {{{ .FunctionName }}}编辑
|
||||
func (srv {{{ toCamelCase .EntityName }}}Service) Edit(editReq {{{ title (toCamelCase .EntityName) }}}EditReq) (e error) {
|
||||
func (srv {{{ toCamelCase .EntityName }}}Service) Edit(c *gin.Context, editReq req.{{{ title (toCamelCase .EntityName) }}}EditReq) (e error) {
|
||||
m := srv.dao.{{{ title (toCamelCase .EntityName) }}}
|
||||
q := m.WithContext(c)
|
||||
|
||||
var obj {{{ title (toCamelCase .EntityName) }}}
|
||||
err := srv.db.Where("{{{ $.PrimaryKey }}} = ?{{{ if contains .AllFields "is_delete" }}} AND is_delete = ?{{{ end }}}", editReq.ID{{{ if contains .AllFields "is_delete" }}}, 0{{{ end }}}).Limit(1).First(&obj).Error
|
||||
obj, err := q.Where(m.{{{ title (toCamelCase $.PrimaryKey) }}}.Eq(id) {{{ if contains .AllFields "is_delete" }}} , m.IsDelete.Eq(0) {{{ end }}}).First()
|
||||
// 校验
|
||||
if e = response.CheckErrDBNotRecord(err, "数据不存在!"); e != nil {
|
||||
return
|
||||
@@ -113,15 +123,17 @@ func (srv {{{ toCamelCase .EntityName }}}Service) Edit(editReq {{{ title (toCame
|
||||
}
|
||||
// 更新
|
||||
response.Copy(&obj, editReq)
|
||||
err = srv.db.Model(&obj).Updates(obj).Error
|
||||
err = q.Updates(obj)
|
||||
e = response.CheckErr(err, "Edit Updates err")
|
||||
return
|
||||
}
|
||||
|
||||
//Del {{{ .FunctionName }}}删除
|
||||
func (srv {{{ toCamelCase .EntityName }}}Service) Del(id uint) (e error) {
|
||||
var obj {{{ title (toCamelCase .EntityName) }}}
|
||||
err := srv.db.Where("{{{ $.PrimaryKey }}} = ?{{{ if contains .AllFields "is_delete" }}} AND is_delete = ?{{{ end }}}", id{{{ if contains .AllFields "is_delete" }}}, 0{{{ end }}}).Limit(1).First(&obj).Error
|
||||
func (srv {{{ toCamelCase .EntityName }}}Service) Del(c *gin.Context, id uint) (e error) {
|
||||
m := srv.dao.{{{ title (toCamelCase .EntityName) }}}
|
||||
q := m.WithContext(c)
|
||||
|
||||
_, err := q.Where(m.{{{ title (toCamelCase $.PrimaryKey) }}}.Eq(id) {{{ if contains .AllFields "is_delete" }}} , m.IsDelete.Eq(0) {{{ end }}}).First()
|
||||
// 校验
|
||||
if e = response.CheckErrDBNotRecord(err, "数据不存在!"); e != nil {
|
||||
return
|
||||
@@ -131,11 +143,10 @@ func (srv {{{ toCamelCase .EntityName }}}Service) Del(id uint) (e error) {
|
||||
}
|
||||
// 删除
|
||||
{{{- if contains .AllFields "is_delete" }}}
|
||||
obj.IsDelete = 1
|
||||
err = srv.db.Save(&obj).Error
|
||||
err = q.Where(m.{{{ title (toCamelCase $.PrimaryKey) }}}.Eq(id)).Update(m.IsDelete, 1)
|
||||
e = response.CheckErr(err, "Del Save err")
|
||||
{{{- else }}}
|
||||
err = srv.db.Delete(&obj).Error
|
||||
err = q.Where(m.{{{ title (toCamelCase $.PrimaryKey) }}}.Eq(id)).Delete()
|
||||
e = response.CheckErr(err, "Del Delete err")
|
||||
{{{- end }}}
|
||||
return
|
||||
|
||||
28
server/model/la_notice_setting.gen.go
Normal file
28
server/model/la_notice_setting.gen.go
Normal file
@@ -0,0 +1,28 @@
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
|
||||
package model
|
||||
|
||||
const TableNameNoticeSetting = "la_notice_setting"
|
||||
|
||||
// NoticeSetting mapped from table <la_notice_setting>
|
||||
type NoticeSetting struct {
|
||||
ID int32 `gorm:"column:id;primaryKey;autoIncrement:true" json:"id"`
|
||||
SceneID int32 `gorm:"column:scene_id;not null;comment:场景id" json:"scene_id"` // 场景id
|
||||
SceneName string `gorm:"column:scene_name;not null;comment:场景名称" json:"scene_name"` // 场景名称
|
||||
SceneDesc string `gorm:"column:scene_desc;not null;comment:场景描述" json:"scene_desc"` // 场景描述
|
||||
Recipient int32 `gorm:"column:recipient;not null;default:1;comment:接收者 1-用户 2-平台" json:"recipient"` // 接收者 1-用户 2-平台
|
||||
Type int32 `gorm:"column:type;not null;default:1;comment:通知类型: 1-业务通知 2-验证码" json:"type"` // 通知类型: 1-业务通知 2-验证码
|
||||
SystemNotice string `gorm:"column:system_notice;comment:系统通知设置" json:"system_notice"` // 系统通知设置
|
||||
SmsNotice string `gorm:"column:sms_notice;comment:短信通知设置" json:"sms_notice"` // 短信通知设置
|
||||
OaNotice string `gorm:"column:oa_notice;comment:公众号通知设置" json:"oa_notice"` // 公众号通知设置
|
||||
MnpNotice string `gorm:"column:mnp_notice;comment:小程序通知设置" json:"mnp_notice"` // 小程序通知设置
|
||||
Support string `gorm:"column:support;not null;comment:支持的发送类型 1-系统通知 2-短信通知 3-微信模板消息 4-小程序提醒" json:"support"` // 支持的发送类型 1-系统通知 2-短信通知 3-微信模板消息 4-小程序提醒
|
||||
UpdateTime int32 `gorm:"column:update_time;comment:更新时间" json:"update_time"` // 更新时间
|
||||
}
|
||||
|
||||
// TableName NoticeSetting's table name
|
||||
func (*NoticeSetting) TableName() string {
|
||||
return TableNameNoticeSetting
|
||||
}
|
||||
33
server/model/la_recharge_order.gen.go
Normal file
33
server/model/la_recharge_order.gen.go
Normal file
@@ -0,0 +1,33 @@
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
|
||||
package model
|
||||
|
||||
const TableNameRechargeOrder = "la_recharge_order"
|
||||
|
||||
// RechargeOrder mapped from table <la_recharge_order>
|
||||
type RechargeOrder struct {
|
||||
ID int32 `gorm:"column:id;primaryKey;autoIncrement:true;comment:id" json:"id"` // id
|
||||
Sn string `gorm:"column:sn;not null;comment:订单编号" json:"sn"` // 订单编号
|
||||
UserID int32 `gorm:"column:user_id;not null;comment:用户id" json:"user_id"` // 用户id
|
||||
UserSn int32 `gorm:"column:user_sn;not null;comment:用户编号" json:"user_sn"` // 用户编号
|
||||
Mobile string `gorm:"column:mobile" json:"mobile"`
|
||||
PaySn string `gorm:"column:pay_sn;comment:支付编号-冗余字段,针对微信同一主体不同客户端支付需用不同订单号预留。" json:"pay_sn"` // 支付编号-冗余字段,针对微信同一主体不同客户端支付需用不同订单号预留。
|
||||
PayWay int32 `gorm:"column:pay_way;not null;default:2;comment:支付方式 2-微信支付 3-支付宝支付" json:"pay_way"` // 支付方式 2-微信支付 3-支付宝支付
|
||||
PayStatus int32 `gorm:"column:pay_status;not null;default:2;comment:支付状态:2-待支付;1-已支付" json:"pay_status"` // 支付状态:2-待支付;1-已支付
|
||||
PayTime int32 `gorm:"column:pay_time;comment:支付时间" json:"pay_time"` // 支付时间
|
||||
OrderAmount float64 `gorm:"column:order_amount;not null;comment:充值金额" json:"order_amount"` // 充值金额
|
||||
OrderTerminal int32 `gorm:"column:order_terminal;default:1;comment:终端" json:"order_terminal"` // 终端
|
||||
TransactionID string `gorm:"column:transaction_id;comment:第三方平台交易流水号" json:"transaction_id"` // 第三方平台交易流水号
|
||||
RefundStatus int32 `gorm:"column:refund_status;comment:退款状态 0-未退款 1-已退款" json:"refund_status"` // 退款状态 0-未退款 1-已退款
|
||||
CreateTime int32 `gorm:"column:create_time;comment:创建时间" json:"create_time"` // 创建时间
|
||||
UpdateTime int32 `gorm:"column:update_time;comment:更新时间" json:"update_time"` // 更新时间
|
||||
DeleteTime int32 `gorm:"column:delete_time;comment:删除时间" json:"delete_time"` // 删除时间
|
||||
User User `gorm:"foreignKey:UserID;references:ID" json:"user"`
|
||||
}
|
||||
|
||||
// TableName RechargeOrder's table name
|
||||
func (*RechargeOrder) TableName() string {
|
||||
return TableNameRechargeOrder
|
||||
}
|
||||
28
server/model/la_refund_log.gen.go
Normal file
28
server/model/la_refund_log.gen.go
Normal file
@@ -0,0 +1,28 @@
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
|
||||
package model
|
||||
|
||||
const TableNameRefundLog = "la_refund_log"
|
||||
|
||||
// RefundLog mapped from table <la_refund_log>
|
||||
type RefundLog struct {
|
||||
ID int32 `gorm:"column:id;primaryKey;autoIncrement:true;comment:id" json:"id"` // id
|
||||
Sn string `gorm:"column:sn;comment:编号" json:"sn"` // 编号
|
||||
RecordID int32 `gorm:"column:record_id;not null;comment:退款记录id" json:"record_id"` // 退款记录id
|
||||
UserID int32 `gorm:"column:user_id;not null;comment:关联用户" json:"user_id"` // 关联用户
|
||||
HandleID int32 `gorm:"column:handle_id;not null;comment:处理人id(管理员id)" json:"handle_id"` // 处理人id(管理员id)
|
||||
OrderAmount float64 `gorm:"column:order_amount;not null;default:0.00;comment:订单总的应付款金额,冗余字段" json:"order_amount"` // 订单总的应付款金额,冗余字段
|
||||
RefundAmount float64 `gorm:"column:refund_amount;not null;default:0.00;comment:本次退款金额" json:"refund_amount"` // 本次退款金额
|
||||
RefundStatus int32 `gorm:"column:refund_status;not null;comment:退款状态,0退款中,1退款成功,2退款失败" json:"refund_status"` // 退款状态,0退款中,1退款成功,2退款失败
|
||||
RefundMsg string `gorm:"column:refund_msg;comment:退款信息" json:"refund_msg"` // 退款信息
|
||||
CreateTime int32 `gorm:"column:create_time;comment:创建时间" json:"create_time"` // 创建时间
|
||||
UpdateTime int32 `gorm:"column:update_time;comment:更新时间" json:"update_time"` // 更新时间
|
||||
Admin SystemAuthAdmin `gorm:"foreignKey:HandleID;references:ID" json:"admin"`
|
||||
}
|
||||
|
||||
// TableName RefundLog's table name
|
||||
func (*RefundLog) TableName() string {
|
||||
return TableNameRefundLog
|
||||
}
|
||||
32
server/model/la_refund_record.gen.go
Normal file
32
server/model/la_refund_record.gen.go
Normal file
@@ -0,0 +1,32 @@
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
|
||||
package model
|
||||
|
||||
const TableNameRefundRecord = "la_refund_record"
|
||||
|
||||
// RefundRecord mapped from table <la_refund_record>
|
||||
type RefundRecord struct {
|
||||
ID int32 `gorm:"column:id;primaryKey;autoIncrement:true;comment:id" json:"id"` // id
|
||||
Sn string `gorm:"column:sn;not null;comment:退款编号" json:"sn"` // 退款编号
|
||||
UserID int32 `gorm:"column:user_id;not null;comment:关联用户" json:"user_id"` // 关联用户
|
||||
UserSn int64 `gorm:"column:user_sn" json:"user_sn"`
|
||||
OrderID int32 `gorm:"column:order_id;not null;comment:来源订单id" json:"order_id"` // 来源订单id
|
||||
OrderSn string `gorm:"column:order_sn;not null;comment:来源单号" json:"order_sn"` // 来源单号
|
||||
OrderType string `gorm:"column:order_type;default:order;comment:订单来源 order-商品订单 recharge-充值订单" json:"order_type"` // 订单来源 order-商品订单 recharge-充值订单
|
||||
OrderAmount float64 `gorm:"column:order_amount;not null;default:0.00;comment:订单总的应付款金额,冗余字段" json:"order_amount"` // 订单总的应付款金额,冗余字段
|
||||
RefundAmount float64 `gorm:"column:refund_amount;not null;default:0.00;comment:本次退款金额" json:"refund_amount"` // 本次退款金额
|
||||
TransactionID string `gorm:"column:transaction_id;comment:第三方平台交易流水号" json:"transaction_id"` // 第三方平台交易流水号
|
||||
RefundWay int32 `gorm:"column:refund_way;not null;comment:退款方式 1-线上退款 2-线下退款" json:"refund_way"` // 退款方式 1-线上退款 2-线下退款
|
||||
RefundType int32 `gorm:"column:refund_type;not null;comment:退款类型 1-后台退款" json:"refund_type"` // 退款类型 1-后台退款
|
||||
RefundStatus int32 `gorm:"column:refund_status;not null;comment:退款状态,0退款中,1退款成功,2退款失败" json:"refund_status"` // 退款状态,0退款中,1退款成功,2退款失败
|
||||
CreateTime int32 `gorm:"column:create_time;comment:创建时间" json:"create_time"` // 创建时间
|
||||
UpdateTime int32 `gorm:"column:update_time;comment:更新时间" json:"update_time"` // 更新时间
|
||||
User User `gorm:"foreignKey:UserID;references:ID" json:"user"`
|
||||
}
|
||||
|
||||
// TableName RefundRecord's table name
|
||||
func (*RefundRecord) TableName() string {
|
||||
return TableNameRefundRecord
|
||||
}
|
||||
34
server/model/la_system_auth_admin.gen.go
Normal file
34
server/model/la_system_auth_admin.gen.go
Normal file
@@ -0,0 +1,34 @@
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
|
||||
package model
|
||||
|
||||
const TableNameSystemAuthAdmin = "la_system_auth_admin"
|
||||
|
||||
// SystemAuthAdmin mapped from table <la_system_auth_admin>
|
||||
type SystemAuthAdmin struct {
|
||||
ID int32 `gorm:"column:id;primaryKey;autoIncrement:true;comment:主键" json:"id"` // 主键
|
||||
DeptID int32 `gorm:"column:dept_id;not null;comment:部门ID" json:"dept_id"` // 部门ID
|
||||
PostID int32 `gorm:"column:post_id;not null;comment:岗位ID" json:"post_id"` // 岗位ID
|
||||
Username string `gorm:"column:username;not null;comment:用户账号" json:"username"` // 用户账号
|
||||
Nickname string `gorm:"column:nickname;not null;comment:用户昵称" json:"nickname"` // 用户昵称
|
||||
Password string `gorm:"column:password;not null;comment:用户密码" json:"password"` // 用户密码
|
||||
Avatar string `gorm:"column:avatar;not null;comment:用户头像" json:"avatar"` // 用户头像
|
||||
Role string `gorm:"column:role;not null;comment:角色主键" json:"role"` // 角色主键
|
||||
Salt string `gorm:"column:salt;not null;comment:加密盐巴" json:"salt"` // 加密盐巴
|
||||
Sort int32 `gorm:"column:sort;not null;comment:排序编号" json:"sort"` // 排序编号
|
||||
IsMultipoint int32 `gorm:"column:is_multipoint;not null;comment:多端登录: 0=否, 1=是" json:"is_multipoint"` // 多端登录: 0=否, 1=是
|
||||
IsDisable int32 `gorm:"column:is_disable;not null;comment:是否禁用: 0=否, 1=是" json:"is_disable"` // 是否禁用: 0=否, 1=是
|
||||
IsDelete int32 `gorm:"column:is_delete;not null;comment:是否删除: 0=否, 1=是" json:"is_delete"` // 是否删除: 0=否, 1=是
|
||||
LastLoginIP string `gorm:"column:last_login_ip;not null;comment:最后登录IP" json:"last_login_ip"` // 最后登录IP
|
||||
LastLoginTime int32 `gorm:"column:last_login_time;not null;comment:最后登录" json:"last_login_time"` // 最后登录
|
||||
CreateTime int32 `gorm:"column:create_time;not null;comment:创建时间" json:"create_time"` // 创建时间
|
||||
UpdateTime int32 `gorm:"column:update_time;not null;comment:更新时间" json:"update_time"` // 更新时间
|
||||
DeleteTime int32 `gorm:"column:delete_time;not null;comment:删除时间" json:"delete_time"` // 删除时间
|
||||
}
|
||||
|
||||
// TableName SystemAuthAdmin's table name
|
||||
func (*SystemAuthAdmin) TableName() string {
|
||||
return TableNameSystemAuthAdmin
|
||||
}
|
||||
@@ -9,7 +9,7 @@ const TableNameUser = "la_user"
|
||||
// User mapped from table <la_user>
|
||||
type User struct {
|
||||
ID int32 `gorm:"column:id;primaryKey;autoIncrement:true;comment:主键" json:"id"` // 主键
|
||||
Sn int32 `gorm:"column:sn;not null;comment:编号" json:"sn"` // 编号
|
||||
Sn int64 `gorm:"column:sn;not null;comment:编号" json:"sn"` // 编号
|
||||
Avatar string `gorm:"column:avatar;not null;comment:头像" json:"avatar"` // 头像
|
||||
RealName string `gorm:"column:real_name;not null;comment:真实姓名" json:"real_name"` // 真实姓名
|
||||
Nickname string `gorm:"column:nickname;not null;comment:用户昵称" json:"nickname"` // 用户昵称
|
||||
@@ -21,7 +21,7 @@ type User struct {
|
||||
IsDisable int32 `gorm:"column:is_disable;not null;comment:是否禁用: [0=否, 1=是]" json:"is_disable"` // 是否禁用: [0=否, 1=是]
|
||||
LoginIP string `gorm:"column:login_ip;not null;comment:最后登录IP" json:"login_ip"` // 最后登录IP
|
||||
LoginTime int32 `gorm:"column:login_time;not null;comment:最后登录时间" json:"login_time"` // 最后登录时间
|
||||
IsNewUser bool `gorm:"column:is_new_user;not null;comment:是否是新注册用户: [1-是, 0-否]" json:"is_new_user"` // 是否是新注册用户: [1-是, 0-否]
|
||||
IsNewUser int32 `gorm:"column:is_new_user;not null;comment:是否是新注册用户: [1-是, 0-否]" json:"is_new_user"` // 是否是新注册用户: [1-是, 0-否]
|
||||
UserMoney float64 `gorm:"column:user_money;default:0.00;comment:用户余额" json:"user_money"` // 用户余额
|
||||
TotalRechargeAmount float64 `gorm:"column:total_recharge_amount;default:0.00;comment:累计充值" json:"total_recharge_amount"` // 累计充值
|
||||
CreateTime int32 `gorm:"column:create_time;not null;comment:创建时间" json:"create_time"` // 创建时间
|
||||
|
||||
@@ -9,19 +9,20 @@ const TableNameUserAccountLog = "la_user_account_log"
|
||||
// UserAccountLog mapped from table <la_user_account_log>
|
||||
type UserAccountLog struct {
|
||||
ID int32 `gorm:"column:id;primaryKey;autoIncrement:true" json:"id"`
|
||||
Sn string `gorm:"column:sn;not null;comment:流水号" json:"sn"` // 流水号
|
||||
UserID int32 `gorm:"column:user_id;not null;comment:用户id" json:"user_id"` // 用户id
|
||||
ChangeObject int32 `gorm:"column:change_object;not null;comment:变动对象" json:"change_object"` // 变动对象
|
||||
ChangeType int32 `gorm:"column:change_type;not null;comment:变动类型" json:"change_type"` // 变动类型
|
||||
Action int32 `gorm:"column:action;not null;comment:动作 1-增加 2-减少" json:"action"` // 动作 1-增加 2-减少
|
||||
ChangeAmount float64 `gorm:"column:change_amount;not null;comment:变动数量" json:"change_amount"` // 变动数量
|
||||
LeftAmount float64 `gorm:"column:left_amount;not null;default:0.00;comment:变动后数量" json:"left_amount"` // 变动后数量
|
||||
SourceSn string `gorm:"column:source_sn;comment:关联单号" json:"source_sn"` // 关联单号
|
||||
Remark string `gorm:"column:remark;comment:备注" json:"remark"` // 备注
|
||||
Extra string `gorm:"column:extra;comment:预留扩展字段" json:"extra"` // 预留扩展字段
|
||||
CreateTime int32 `gorm:"column:create_time;comment:创建时间" json:"create_time"` // 创建时间
|
||||
UpdateTime int32 `gorm:"column:update_time;comment:更新时间" json:"update_time"` // 更新时间
|
||||
DeleteTime int32 `gorm:"column:delete_time;comment:删除时间" json:"delete_time"` // 删除时间
|
||||
Sn int64 `gorm:"column:sn;not null;comment:用户编号" json:"sn"` // 用户编号
|
||||
UserID int32 `gorm:"column:user_id;not null;comment:用户id" json:"user_id"` // 用户id
|
||||
ChangeObject int32 `gorm:"column:change_object;not null;comment:变动对象" json:"change_object"` // 变动对象
|
||||
ChangeType int32 `gorm:"column:change_type;not null;comment:变动类型" json:"change_type"` // 变动类型
|
||||
Action int32 `gorm:"column:action;not null;comment:动作 1-增加 2-减少" json:"action"` // 动作 1-增加 2-减少
|
||||
ChangeAmount float64 `gorm:"column:change_amount;not null;comment:变动数量" json:"change_amount"` // 变动数量
|
||||
LeftAmount float64 `gorm:"column:left_amount;not null;comment:变动后数量" json:"left_amount"` // 变动后数量
|
||||
SourceSn string `gorm:"column:source_sn;comment:关联单号" json:"source_sn"` // 关联单号
|
||||
Remark string `gorm:"column:remark;comment:备注" json:"remark"` // 备注
|
||||
Extra string `gorm:"column:extra;comment:预留扩展字段" json:"extra"` // 预留扩展字段
|
||||
CreateTime int32 `gorm:"column:create_time;comment:创建时间" json:"create_time"` // 创建时间
|
||||
UpdateTime int32 `gorm:"column:update_time;comment:更新时间" json:"update_time"` // 更新时间
|
||||
DeleteTime int32 `gorm:"column:delete_time;comment:删除时间" json:"delete_time"` // 删除时间
|
||||
User User `gorm:"foreignKey:UserID;references:ID" json:"user"`
|
||||
}
|
||||
|
||||
// TableName UserAccountLog's table name
|
||||
|
||||
BIN
server/static/default_avatar.png
Normal file
BIN
server/static/default_avatar.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 35 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 43 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 67 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 189 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 9.2 KiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user