This commit is contained in:
weiwei committed 2025-02-21 14:50:41 +08:00
commit 28b3d645ad
8 files changed
+199 -173

No files matched your search

+4 -4
View File
@@ -8,18 +8,18 @@ VITE_OPEN = true
ENV = 'development' ENV = 'development'
# ADMIN 服务地址 # ADMIN 服务地址
VITE_ADMIN_PROXY_PATH = http://123.156.230.15:8089/api/ # 线上 # VITE_ADMIN_PROXY_PATH = http://123.156.230.15:8089/api/ # 线上
# VITE_ADMIN_PROXY_PATH = http://pjcloud.center.takin.cc/ # VITE_ADMIN_PROXY_PATH = http://pjcloud.center.takin.cc/
# VITE_ADMIN_PROXY_PATH = http://localhost:9999/ # VITE_ADMIN_PROXY_PATH = http://localhost:9999/
# VITE_ADMIN_PROXY_PATH = http://192.168.101.50:9999/ # 邓-本地 VITE_ADMIN_PROXY_PATH = http://192.168.101.50:9999/ # 邓-本地
# VITE_ADMIN_PROXY_PATH = http://59.202.170.152:81/api # 正式环境 # VITE_ADMIN_PROXY_PATH = http://59.202.170.152:81/api # 正式环境
# 图片访问基础地址 # 图片访问基础地址
VITE_IMAGE_BASE_PATH = http://123.156.230.15:8089/api # 线上 # VITE_IMAGE_BASE_PATH = http://123.156.230.15:8089/api # 线上
# VITE_IMAGE_BASE_PATH = http://pjcloud.center.takin.cc # VITE_IMAGE_BASE_PATH = http://pjcloud.center.takin.cc
# VITE_IMAGE_BASE_PATH = http://localhost:9999 # VITE_IMAGE_BASE_PATH = http://localhost:9999
# VITE_IMAGE_BASE_PATH = http://192.168.101.50:9999 # 邓-本地 VITE_IMAGE_BASE_PATH = http://192.168.101.50:9999 # 邓-本地
# VITE_IMAGE_BASE_PATH = http://59.202.170.152:81/api/ # 正式环境 # VITE_IMAGE_BASE_PATH = http://59.202.170.152:81/api/ # 正式环境
# 代码生成服务地址 # 代码生成服务地址
+1 -1
View File
@@ -3,7 +3,7 @@ import request from "/@/utils/request"
export const list = () => { export const list = () => {
return request({ return request({
url: "/admin/user/list", url: "/admin/user/list",
method: "get", method: "post",
}) })
} }
+34 -31
View File
@@ -1,49 +1,52 @@
import request from "/@/utils/request" import request from "/@/utils/request"
export function fetchList(query?: Object) { export function fetchList(query?: Object) {
return request({ return request({
url: '/wallet/wallet-manage/page', url: "/wallet/wallet-manage/page",
method: 'get', method: "get",
params: query params: query,
}) })
} }
export function fetchListJoin(query?: Object) { export function fetchListJoin(query: any) {
return request({ return request({
url: '/wallet/wallet-manage/page-join', url: "/wallet/wallet-manage/page-join",
method: 'get', method: "post",
params: query params: {
}) current: query.current,
size: query.size,
},
data: query,
})
} }
export function addObj(obj?: Object) { export function addObj(obj?: Object) {
return request({ return request({
url: '/wallet/wallet-manage', url: "/wallet/wallet-manage",
method: 'post', method: "post",
data: obj data: obj,
}) })
} }
export function getObj(id?: string) { export function getObj(id?: string) {
return request({ return request({
url: '/wallet/wallet-manage/' + id, url: "/wallet/wallet-manage/" + id,
method: 'get' method: "get",
}) })
} }
export function delObjs(ids?: Object) { export function delObjs(ids?: Object) {
return request({ return request({
url: '/wallet/wallet-manage', url: "/wallet/wallet-manage",
method: 'delete', method: "delete",
data: ids data: ids,
}) })
} }
export function putObj(obj?: Object) { export function putObj(obj?: Object) {
return request({ return request({
url: '/wallet/wallet-manage', url: "/wallet/wallet-manage",
method: 'put', method: "put",
data: obj data: obj,
}) })
} }
+3 -3
View File
@@ -13,9 +13,9 @@
<template #default> <template #default>
<el-row v-show="showSearch"> <el-row v-show="showSearch">
<el-form ref="queryRef" :inline="true" :model="state.queryForm" @keyup.enter="getDataList"> <el-form ref="queryRef" :inline="true" :model="state.queryForm" @keyup.enter="getDataList">
<el-form-item label="用户" prop="userIds"> <el-form-item label="用户" prop="userId">
<div style="width: 180px"> <div style="width: 180px">
<select-user v-model="state.queryForm.userIds" clearable /> <select-user v-model="state.queryForm.userId" clearable />
</div> </div>
</el-form-item> </el-form-item>
<el-form-item :label="$t('sysuser.username')" prop="username"> <el-form-item :label="$t('sysuser.username')" prop="username">
@@ -116,7 +116,7 @@
<el-table-column <el-table-column
v-auths="['sys_user_edit', 'userFace_sysUserFace_view', 'sys_user_del']" v-auths="['sys_user_edit', 'userFace_sysUserFace_view', 'sys_user_del']"
:label="$t('common.action')" :label="$t('common.action')"
width="200" width="300"
fixed="right" fixed="right"
> >
<template #default="scope"> <template #default="scope">
+4 -4
View File
@@ -14,13 +14,13 @@
<el-form ref="queryRef" :inline="true" :model="state.queryForm" @keyup.enter="getDataList"> <el-form ref="queryRef" :inline="true" :model="state.queryForm" @keyup.enter="getDataList">
<el-row :gutter="24"> <el-row :gutter="24">
<el-col :span="4"> <el-col :span="4">
<el-form-item class="w100" label="用户" prop="userIds"> <el-form-item class="w100" label="用户" prop="userId">
<select-user v-model="state.queryForm.userIds" /> <select-user v-model="state.queryForm.userId" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item class="w100" label="充值时间" prop="payTimeList"> <el-form-item class="w100" label="充值时间" prop="createTimeList">
<el-date-picker v-model="state.queryForm.payTimeList" value-format="YYYY-MM-DD" type="daterange" /> <el-date-picker v-model="state.queryForm.createTimeList" value-format="YYYY-MM-DD" type="daterange" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-form-item> <el-form-item>
+145 -122
View File
@@ -1,127 +1,139 @@
<template> <template>
<div class="layout-padding"> <div class="layout-padding">
<div class="layout-padding-auto layout-padding-view"> <div class="layout-padding-auto layout-padding-view">
<el-form ref="queryRef" :inline="true" :model="state.queryForm" @keyup.enter="getDataList"> <DraggableDepTree
<el-row :gutter="24"> ref="draggableDepTreeRef"
<el-col :span="4"> placeholder="请输入部门名称"
<el-form-item class="w100" label="用户" prop="userIds"> :show-expand="true"
<select-user v-model="state.queryForm.userIds" /> @getSelectNode="handleGetSelectNode"
</el-form-item> switch-inactive-text="当前部门"
</el-col> switch-active-text="当前部门及子部门"
<el-col :span="4"> :defaultTreeWidth="20"
<el-form-item class="w100" label="饭卡卡号" prop="cardNumber">
<el-input v-model="state.queryForm.cardNumber" placeholder="饭卡卡号" clearable />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item class="w100" label="饭卡类型" prop="walletTypeId">
<select-wallet-type v-model="state.queryForm.walletTypeId" placeholder="饭卡类型" clearable />
</el-form-item>
</el-col>
<el-form-item>
<el-button icon="Search" type="primary" @click="getDataList">{{ $t("common.queryBtn") }}</el-button>
<el-button icon="Refresh" @click="resetQuery">{{ $t("common.resetBtn") }}</el-button>
</el-form-item>
</el-row>
</el-form>
<el-row>
<div class="mb8" style="width: 100%">
<el-button
plain
:disabled="multiple"
icon="Delete"
type="primary"
v-auth="'wallet_walletManage_del'"
@click="handleDelete(selectObjs)"
>
删除
</el-button>
<right-toolbar
v-model:showSearch="showSearch"
:export="'wallet_walletManage_export'"
@exportExcel="exportExcel"
class="ml10 mr20"
style="float: right"
@queryTable="getDataList"
></right-toolbar>
</div>
</el-row>
<el-table
:data="state.dataList"
v-loading="state.loading"
border
:summary-method="getSummaries"
show-summary
:cell-style="tableStyle.cellStyle"
:header-cell-style="tableStyle.headerCellStyle"
@selection-change="selectionChangHandle"
@sort-change="sortChangeHandle"
> >
<el-table-column type="selection" width="40" align="center" /> <template #default>
<el-table-column type="index" label="#" width="80" /> <el-form ref="queryRef" :inline="true" :model="state.queryForm" @keyup.enter="getDataList">
<el-table-column prop="username" width="100" label="用户" /> <el-row :gutter="24">
<el-table-column prop="userAvatar" width="80" label="头像"> <el-col :span="4">
<template #default="{ row }"> <el-form-item class="w100" label="用户" prop="userIds">
<preview-image :src="row.userAvatar" /> <select-user v-model="state.queryForm.userIds" />
</template> </el-form-item>
</el-table-column> </el-col>
<el-table-column prop="userMobile" width="120" label="手机号" /> <el-col :span="4">
<el-table-column prop="deptName" label="部门" width="200" /> <el-form-item class="w100" label="饭卡卡号" prop="cardNumber">
<el-table-column prop="walletTypeUniqueCode" width="200" label="饭卡类型"> <el-input v-model="state.queryForm.cardNumber" placeholder="饭卡卡号" clearable />
<template #default="{ row }"> </el-form-item>
<div class="flex items-center justify-center"> </el-col>
<div class="color-primary">{{ row.walletTypeName }}</div> <el-col :span="4">
<div class="flex items-center just ml5"> <el-form-item class="w100" label="饭卡类型" prop="walletTypeId">
<dict-tag :options="wallet_type" :value="row.walletTypeUniqueCode" /> <select-wallet-type v-model="state.queryForm.walletTypeId" placeholder="饭卡类型" clearable />
</div> </el-form-item>
</el-col>
<el-form-item>
<el-button icon="Search" type="primary" @click="getDataList">{{ $t("common.queryBtn") }}</el-button>
<el-button icon="Refresh" @click="resetQuery">{{ $t("common.resetBtn") }}</el-button>
</el-form-item>
</el-row>
</el-form>
<el-row>
<div class="mb8" style="width: 100%">
<el-button
plain
:disabled="multiple"
icon="Delete"
type="primary"
v-auth="'wallet_walletManage_del'"
@click="handleDelete(selectObjs)"
>
删除
</el-button>
<right-toolbar
v-model:showSearch="showSearch"
:export="'wallet_walletManage_export'"
@exportExcel="exportExcel"
class="ml10 mr20"
style="float: right"
@queryTable="getDataList"
></right-toolbar>
</div> </div>
</template> </el-row>
</el-table-column> <el-table
<el-table-column prop="cardNumber" width="150" label="饭卡卡号" /> :data="state.dataList"
<el-table-column prop="balance" align="center" width="100" label="余额"> v-loading="state.loading"
<template #default="{ row }"> border
<div class="color-primary">{{ displayPrice(row.balance) }}</div> :summary-method="getSummaries"
</template> show-summary
</el-table-column> :cell-style="tableStyle.cellStyle"
<el-table-column prop="totalExpense" align="center" width="100" label="累计支出"> :header-cell-style="tableStyle.headerCellStyle"
<template #default="{ row }"> @selection-change="selectionChangHandle"
<div class="color-danger">{{ displayPrice(row.totalExpense) }}</div> @sort-change="sortChangeHandle"
</template> >
</el-table-column> <el-table-column type="selection" width="40" align="center" />
<el-table-column prop="totalRecharge" align="center" width="100" label="累计充值"> <el-table-column type="index" label="#" width="80" />
<template #default="{ row }"> <el-table-column prop="username" width="100" label="用户" />
<div class="color-success">{{ displayPrice(row.totalRecharge) }}</div> <el-table-column prop="userAvatar" width="80" label="头像">
</template> <template #default="{ row }">
</el-table-column> <preview-image :src="row.userAvatar" />
<el-table-column prop="isFreeze" width="120" label="是否冻结饭卡"> </template>
<template #default="{ row }"> </el-table-column>
<dict-tag :options="yes_no_type" :value="row.isFreeze" /> <el-table-column prop="userMobile" width="120" label="手机号" />
</template> <el-table-column prop="deptName" label="部门" width="200" />
</el-table-column> <el-table-column prop="walletTypeUniqueCode" width="200" label="饭卡类型">
<el-table-column v-if="false" prop="activeBindStatus" width="120" label="饭卡绑定状态" /> <template #default="{ row }">
<el-table-column prop="createTime" width="200" label="创建时间" /> <div class="flex items-center justify-center">
<el-table-column label="操作" fixed="right" width="200"> <div class="color-primary">{{ row.walletTypeName }}</div>
<template #default="{ row }"> <div class="flex items-center just ml5">
<el-button <dict-tag :options="wallet_type" :value="row.walletTypeUniqueCode" />
icon="InfoFilled" </div>
text </div>
type="primary" </template>
v-auth="'wallet_walletManage_edit'" </el-table-column>
@click="formDialogRef.openDialog(row.id)" <el-table-column prop="cardNumber" width="150" label="饭卡卡号" />
>详情</el-button <el-table-column prop="balance" align="center" width="100" label="余额">
> <template #default="{ row }">
<el-button <div class="color-primary">{{ displayPrice(row.balance) }}</div>
icon="Money" </template>
text </el-table-column>
type="primary" <el-table-column prop="totalExpense" align="center" width="100" label="累计支出">
v-auth="'wallet_walletTransaction_update_balance'" <template #default="{ row }">
@click="changeBalanceRef.openDialog(row.userId, row.id)" <div class="color-danger">{{ displayPrice(row.totalExpense) }}</div>
>充值/扣款</el-button </template>
> </el-table-column>
</template> <el-table-column prop="totalRecharge" align="center" width="100" label="累计充值">
</el-table-column> <template #default="{ row }">
</el-table> <div class="color-success">{{ displayPrice(row.totalRecharge) }}</div>
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle" v-bind="state.pagination" /> </template>
</el-table-column>
<el-table-column prop="isFreeze" width="120" label="是否冻结饭卡">
<template #default="{ row }">
<dict-tag :options="yes_no_type" :value="row.isFreeze" />
</template>
</el-table-column>
<el-table-column v-if="false" prop="activeBindStatus" width="120" label="饭卡绑定状态" />
<el-table-column prop="createTime" width="200" label="创建时间" />
<el-table-column label="操作" fixed="right" width="200">
<template #default="{ row }">
<el-button
icon="InfoFilled"
text
type="primary"
v-auth="'wallet_walletManage_edit'"
@click="formDialogRef.openDialog(row.id)"
>详情</el-button
>
<el-button
icon="Money"
text
type="primary"
v-auth="'wallet_walletTransaction_update_balance'"
@click="changeBalanceRef.openDialog(row.userId, row.id)"
>充值/扣款</el-button
>
</template>
</el-table-column>
</el-table>
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle" v-bind="state.pagination" />
</template>
</DraggableDepTree>
</div> </div>
<transaction-list ref="formDialogRef" @refresh="getDataList(false)" /> <transaction-list ref="formDialogRef" @refresh="getDataList(false)" />
<change-balance ref="changeBalanceRef" @refresh="getDataList(false)" /> <change-balance ref="changeBalanceRef" @refresh="getDataList(false)" />
@@ -143,6 +155,7 @@ const { wallet_type, yes_no_type } = useDict("wallet_type", "yes_no_type")
// 定义变量内容 // 定义变量内容
const formDialogRef = ref() const formDialogRef = ref()
const changeBalanceRef = ref() const changeBalanceRef = ref()
const draggableDepTreeRef = ref()
// 搜索变量 // 搜索变量
const queryRef = ref() const queryRef = ref()
const showSearch = ref(true) const showSearch = ref(true)
@@ -156,8 +169,7 @@ const state: BasicTableProps = reactive<BasicTableProps>({
}) })
// table hook // table hook
const { getDataList, currentChangeHandle, sizeChangeHandle, sortChangeHandle, downBlobFile, tableStyle } = const { getDataList, currentChangeHandle, sizeChangeHandle, sortChangeHandle, postDownBlobFile, tableStyle } = useTable(state)
useTable(state)
// 清空搜索条件 // 清空搜索条件
const resetQuery = () => { const resetQuery = () => {
@@ -165,12 +177,15 @@ const resetQuery = () => {
queryRef.value?.resetFields() queryRef.value?.resetFields()
// 清空多选 // 清空多选
selectObjs.value = [] selectObjs.value = []
state.queryForm.deptId = ""
state.queryForm.deptIds = []
draggableDepTreeRef.value.resetData()
getDataList() getDataList()
} }
// 导出excel // 导出excel
const exportExcel = () => { const exportExcel = () => {
downBlobFile( postDownBlobFile(
"/wallet/wallet-manage/export", "/wallet/wallet-manage/export",
Object.assign(state.queryForm, { current: state.pagination?.current, size: state.pagination?.size }), Object.assign(state.queryForm, { current: state.pagination?.current, size: state.pagination?.size }),
"walletManage.xlsx", "walletManage.xlsx",
@@ -199,6 +214,14 @@ const selectionChangHandle = (objs: { id: string }[]) => {
multiple.value = !objs.length multiple.value = !objs.length
} }
// 树节点选择时
const handleGetSelectNode = (curClickedNode: any, checkedTreeNodes: any, isDeepTree: any) => {
state.queryForm.deptId = curClickedNode.id
state.queryForm.deptIds = checkedTreeNodes.map((item: any) => item.id)
state.queryForm.isDeepDept = isDeepTree
getDataList()
}
// 删除操作 // 删除操作
const handleDelete = async (ids: string[]) => { const handleDelete = async (ids: string[]) => {
try { try {
+4 -4
View File
@@ -14,13 +14,13 @@
<el-form ref="queryRef" :inline="true" :model="state.queryForm" @keyup.enter="getDataList"> <el-form ref="queryRef" :inline="true" :model="state.queryForm" @keyup.enter="getDataList">
<el-row :gutter="24"> <el-row :gutter="24">
<el-col :span="4"> <el-col :span="4">
<el-form-item class="w100" label="用户" prop="userIds"> <el-form-item class="w100" label="用户" prop="userId">
<select-user v-model="state.queryForm.userIds" /> <select-user v-model="state.queryForm.userId" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item class="w100" label="退款时间" prop="payTimeList"> <el-form-item class="w100" label="退款时间" prop="createTimeList">
<el-date-picker v-model="state.queryForm.payTimeList" value-format="YYYY-MM-DD" type="daterange" /> <el-date-picker v-model="state.queryForm.createTimeList" value-format="YYYY-MM-DD" type="daterange" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-form-item> <el-form-item>
+4 -4
View File
@@ -14,13 +14,13 @@
<el-form ref="queryRef" :inline="true" :model="state.queryForm" @keyup.enter="getDataList"> <el-form ref="queryRef" :inline="true" :model="state.queryForm" @keyup.enter="getDataList">
<el-row :gutter="24"> <el-row :gutter="24">
<el-col :span="4"> <el-col :span="4">
<el-form-item class="w100" label="用户" prop="userIds"> <el-form-item class="w100" label="用户" prop="userId">
<select-user v-model="state.queryForm.userIds" /> <select-user v-model="state.queryForm.userId" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item class="w100" label="消费时间" prop="payTimeList"> <el-form-item class="w100" label="消费时间" prop="createTimeList">
<el-date-picker v-model="state.queryForm.payTimeList" value-format="YYYY-MM-DD" type="daterange" /> <el-date-picker v-model="state.queryForm.createTimeList" value-format="YYYY-MM-DD" type="daterange" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-form-item> <el-form-item>