This commit is contained in:
ctw committed 2025-01-07 10:45:20 +08:00
commit 45dc845d09
42 files changed
+2998 -159

No files matched your search

+49
View File
@@ -0,0 +1,49 @@
import request from "/@/utils/request"
export function pageJoin(query?: Object) {
return request({
url: '/hard/hard-car/page-join',
method: 'get',
params: query
})
}
export function fetchList(query?: Object) {
return request({
url: '/hard/hard-car/page',
method: 'get',
params: query
})
}
export function addObj(obj?: Object) {
return request({
url: '/hard/hard-car',
method: 'post',
data: obj
})
}
export function getObj(id?: string) {
return request({
url: '/hard/hard-car/' + id,
method: 'get'
})
}
export function delObjs(ids?: Object) {
return request({
url: '/hard/hard-car',
method: 'delete',
data: ids
})
}
export function putObj(obj?: Object) {
return request({
url: '/hard/hard-car',
method: 'put',
data: obj
})
}
+49
View File
@@ -0,0 +1,49 @@
import request from "/@/utils/request"
export function pageJoin(query?: Object) {
return request({
url: '/hard/hard-invoice/page-join',
method: 'get',
params: query
})
}
export function fetchList(query?: Object) {
return request({
url: '/hard/hard-invoice/page',
method: 'get',
params: query
})
}
export function addObj(obj?: Object) {
return request({
url: '/hard/hard-invoice',
method: 'post',
data: obj
})
}
export function getObj(id?: string) {
return request({
url: '/hard/hard-invoice/' + id,
method: 'get'
})
}
export function delObjs(ids?: Object) {
return request({
url: '/hard/hard-invoice',
method: 'delete',
data: ids
})
}
export function putObj(obj?: Object) {
return request({
url: '/hard/hard-invoice',
method: 'put',
data: obj
})
}
+49
View File
@@ -0,0 +1,49 @@
import request from "/@/utils/request"
export function pageJoin(query?: Object) {
return request({
url: '/hard/hard-manager/page-join',
method: 'get',
params: query
})
}
export function fetchList(query?: Object) {
return request({
url: '/hard/hard-manager/page',
method: 'get',
params: query
})
}
export function addObj(obj?: Object) {
return request({
url: '/hard/hard-manager',
method: 'post',
data: obj
})
}
export function getObj(id?: string) {
return request({
url: '/hard/hard-manager/' + id,
method: 'get'
})
}
export function delObjs(ids?: Object) {
return request({
url: '/hard/hard-manager',
method: 'delete',
data: ids
})
}
export function putObj(obj?: Object) {
return request({
url: '/hard/hard-manager',
method: 'put',
data: obj
})
}
+49
View File
@@ -0,0 +1,49 @@
import request from "/@/utils/request"
export function pageJoin(query?: Object) {
return request({
url: '/hard/hard-order/page-join',
method: 'get',
params: query
})
}
export function fetchList(query?: Object) {
return request({
url: '/hard/hard-order/page',
method: 'get',
params: query
})
}
export function addObj(obj?: Object) {
return request({
url: '/hard/hard-order',
method: 'post',
data: obj
})
}
export function getObj(id?: string) {
return request({
url: '/hard/hard-order/' + id,
method: 'get'
})
}
export function delObjs(ids?: Object) {
return request({
url: '/hard/hard-order',
method: 'delete',
data: ids
})
}
export function putObj(obj?: Object) {
return request({
url: '/hard/hard-order',
method: 'put',
data: obj
})
}
+16
View File
@@ -1,5 +1,21 @@
import request from "/@/utils/request"
export function codeList(query?: Object) {
return request({
url: '/wallet/wallet-foreign/code-list',
method: 'get',
params: query
})
}
export function pageJoin(query?: Object) {
return request({
url: '/wallet/wallet-foreign/page-join',
method: 'get',
params: query
})
}
export function fetchList(query?: Object) {
return request({
url: '/wallet/wallet-foreign/page',
+41
View File
@@ -0,0 +1,41 @@
import request from "/@/utils/request"
export function fetchList(query?: Object) {
return request({
url: '/wallet/wallet-recharge-package/page',
method: 'get',
params: query
})
}
export function addObj(obj?: Object) {
return request({
url: '/wallet/wallet-recharge-package',
method: 'post',
data: obj
})
}
export function getObj(id?: string) {
return request({
url: '/wallet/wallet-recharge-package/' + id,
method: 'get'
})
}
export function delObjs(ids?: Object) {
return request({
url: '/wallet/wallet-recharge-package',
method: 'delete',
data: ids
})
}
export function putObj(obj?: Object) {
return request({
url: '/wallet/wallet-recharge-package',
method: 'put',
data: obj
})
}
+49
View File
@@ -0,0 +1,49 @@
import request from "/@/utils/request"
export function pageJoin(query?: Object) {
return request({
url: '/wallet/wallet-recharge/page-join',
method: 'get',
params: query
})
}
export function fetchList(query?: Object) {
return request({
url: '/wallet/wallet-recharge/page',
method: 'get',
params: query
})
}
export function addObj(obj?: Object) {
return request({
url: '/wallet/wallet-recharge',
method: 'post',
data: obj
})
}
export function getObj(id?: string) {
return request({
url: '/wallet/wallet-recharge/' + id,
method: 'get'
})
}
export function delObjs(ids?: Object) {
return request({
url: '/wallet/wallet-recharge',
method: 'delete',
data: ids
})
}
export function putObj(obj?: Object) {
return request({
url: '/wallet/wallet-recharge',
method: 'put',
data: obj
})
}
+17
View File
@@ -0,0 +1,17 @@
import request from "/@/utils/request"
export function getObj() {
return request({
url: '/wallet/wallet-setting',
method: 'get'
})
}
export function putObj(obj?: Object) {
return request({
url: '/wallet/wallet-setting',
method: 'put',
data: obj
})
}
+20 -4
View File
@@ -1,8 +1,24 @@
import request from "/@/utils/request"
export function codeList(query?: Object) {
return request({
url: '/wallet/wallet-stride/code-list',
method: 'get',
params: query
})
}
export function pageJoin(query?: Object) {
return request({
url: '/wallet/wallet-stride/page-join',
method: 'get',
params: query
})
}
export function fetchList(query?: Object) {
return request({
url: '/wallet/walletStride/page',
url: '/wallet/wallet-stride/page',
method: 'get',
params: query
})
@@ -18,14 +34,14 @@ export function addObj(obj?: Object) {
export function getObj(id?: string) {
return request({
url: '/wallet/walletStride/' + id,
url: '/wallet/wallet-stride/' + id,
method: 'get'
})
}
export function delObjs(ids?: Object) {
return request({
url: '/wallet/walletStride',
url: '/wallet/wallet-stride',
method: 'delete',
data: ids
})
@@ -33,7 +49,7 @@ export function delObjs(ids?: Object) {
export function putObj(obj?: Object) {
return request({
url: '/wallet/walletStride',
url: '/wallet/wallet-stride',
method: 'put',
data: obj
})
+11
View File
@@ -7,4 +7,15 @@ export function displayPrice(price: any, suffix: string = "元") {
if (typeof price === 'undefined') return '0.0' + suffix
const parsedNumber = typeof price === 'string' ? parseFloat(price) : price
return (parsedNumber / 100.0).toFixed(1) + suffix
}
/**
* 把显示价格改为分
* @param price
* @returns
*/
export const storePrice = (num: number | string | undefined) => {
if (typeof num === 'undefined') return 0
const parsedNumber = typeof num === 'string' ? parseFloat(num) : num
return Math.round(parsedNumber * 100)
}
+4 -12
View File
@@ -4,12 +4,8 @@
<el-row>
<el-col :span="12">
<el-form label-position="top">
<form-render
@addLayoutOneItem="addLayoutOneItem"
ref="formRenderRef"
@deleteLayoutOneItem="deleteLayoutOneItem"
:form-list="currentOpenFlowForm"
></form-render>
<form-render @addLayoutOneItem="addLayoutOneItem" ref="formRenderRef"
@deleteLayoutOneItem="deleteLayoutOneItem" :form-list="currentOpenFlowForm"></form-render>
</el-form>
<div class="flex justify-center mt-4">
@@ -18,12 +14,8 @@
</div>
</el-col>
<el-col :span="12">
<flow-node-format
:formData="formValue"
:selectUserNodeId="selectUserNodeId"
:flow-id="currentOpenFlow.flowId"
ref="flowNodeFormatRef"
></flow-node-format>
<flow-node-format :formData="formValue" :selectUserNodeId="selectUserNodeId"
:flow-id="currentOpenFlow.flowId" ref="flowNodeFormatRef"></flow-node-format>
</el-col>
</el-row>
</el-dialog>
+8 -27
View File
@@ -24,13 +24,13 @@ const submit = async () => {
if (!currentData.value || !currentOpenFlowForm.value) return
const formData: Record<string, any> = {}
for (const item of currentOpenFlowForm.value) {
formData[item.id] = item.props.value
if (item.type === 'Layout') {
const subList = item.props.value as FlowFormItem[][]
const processedData = subList.map(array =>
const processedData = subList.map(array =>
array.reduce((acc, subItem) => ({
...acc,
[subItem.id]: subItem.props.value
@@ -62,35 +62,16 @@ const submit = async () => {
<template>
<div>
<el-dialog
v-model="dialogVisible"
title="提交审核"
:width="400"
class="rounded-lg shadow-xl"
>
<el-dialog v-model="dialogVisible" title="提交审核" :width="400" class="rounded-lg shadow-xl">
<div class="p-4 space-y-4">
<el-input
v-model="submitDesc"
type="textarea"
maxlength="100"
:rows="5"
placeholder="请输入审核意见..."
show-word-limit
class="w-full transition-all duration-300 focus:ring-2 focus:ring-primary"
/>
<el-input v-model="submitDesc" type="textarea" maxlength="100" :rows="5" placeholder="请输入审核意见..."
show-word-limit class="w-full transition-all duration-300 focus:ring-2 focus:ring-primary" />
<div class="flex justify-end pt-4 space-x-3">
<el-button
@click="dialogVisible = false"
class="hover:bg-gray-100 dark:hover:bg-gray-700"
>
<el-button @click="dialogVisible = false" class="hover:bg-gray-100 dark:hover:bg-gray-700">
取消
</el-button>
<el-button
type="primary"
@click="submit"
class="bg-primary hover:bg-primary-focus"
>
<el-button type="primary" @click="submit" class="bg-primary hover:bg-primary-focus">
确定
</el-button>
</div>
+124
View File
@@ -0,0 +1,124 @@
<template>
<el-dialog :title="form.id ? '编辑' : '新增'" v-model="visible" :close-on-click-modal="false" draggable>
<el-form ref="dataFormRef" :model="form" :rules="dataRules" formDialogRef label-width="90px" v-loading="loading">
<el-row :gutter="24">
<el-col :span="12" class="mb20">
<el-form-item label="部门id" prop="deptId">
<el-input v-model="form.deptId" placeholder="请输入部门id" />
</el-form-item>
</el-col>
<el-col :span="12" class="mb20">
<el-form-item label="设备id" prop="hardId">
<el-input v-model="form.hardId" placeholder="请输入设备id" />
</el-form-item>
</el-col>
<el-col :span="12" class="mb20">
<el-form-item label="硬件订单id" prop="hardOrderId">
<el-input v-model="form.hardOrderId" placeholder="请输入硬件订单id" />
</el-form-item>
</el-col>
<el-col :span="12" class="mb20">
<el-form-item label="状态" prop="status">
<el-input v-model="form.status" placeholder="请输入状态" />
</el-form-item>
</el-col>
<el-col :span="12" class="mb20">
<el-form-item label="发票图片" prop="pic">
<el-input v-model="form.pic" placeholder="请输入发票图片" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="visible = false">取消</el-button>
<el-button type="primary" @click="onSubmit" :disabled="loading">确认</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts" name="HardInvoiceDialog">
import { useDict } from '/@/hooks/dict';
import { useMessage } from "/@/hooks/message";
import { getObj, addObj, putObj } from '/@/api/hard/hard-invoice'
import { rule } from '/@/utils/validate';
const emit = defineEmits(['refresh']);
// 定义变量内容
const dataFormRef = ref();
const visible = ref(false)
const loading = ref(false)
// 定义字典
// 提交表单数据
const form = reactive({
id: '',
deptId: '',
hardId: '',
hardOrderId: '',
status: '',
pic: '',
});
// 定义校验规则
const dataRules = ref({
})
// 打开弹窗
const openDialog = (id: string) => {
visible.value = true
form.id = ''
// 重置表单数据
nextTick(() => {
dataFormRef.value?.resetFields();
});
// 获取hardInvoice信息
if (id) {
form.id = id
gethardInvoiceData(id)
}
};
// 提交
const onSubmit = async () => {
const valid = await dataFormRef.value.validate().catch(() => { });
if (!valid) return false;
try {
loading.value = true;
form.id ? await putObj(form) : await addObj(form);
useMessage().success(form.id ? '修改成功' : '添加成功');
visible.value = false;
emit('refresh');
} catch (err: any) {
useMessage().error(err.msg);
} finally {
loading.value = false;
}
};
// 初始化表单数据
const gethardInvoiceData = (id: string) => {
// 获取数据
loading.value = true
getObj(id).then((res: any) => {
Object.assign(form, res.data)
}).finally(() => {
loading.value = false
})
};
// 暴露变量
defineExpose({
openDialog
});
</script>
+135
View File
@@ -0,0 +1,135 @@
<template>
<div class="layout-padding">
<div class="layout-padding-auto layout-padding-view">
<el-form ref="queryRef" :inline="true" :model="state.queryForm" @keyup.enter="getDataList">
<el-row :gutter="24">
<el-col :span="4">
<el-form-item class="w100" label="设备名" prop="name">
<el-input v-model="state.queryForm.name" placeholder="设备名" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item class="w100" label="设备类型" prop="type">
<dict-select v-model="state.queryForm.type" dict-code="hard_type" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item class="w100" label="商户" prop="merchantIds">
<select-mch v-model="state.queryForm.merchantIds" />
</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-table :data="state.dataList" v-loading="state.loading" border :cell-style="tableStyle.cellStyle"
:header-cell-style="tableStyle.headerCellStyle" @selection-change="selectionChangHandle"
@sort-change="sortChangeHandle">
<el-table-column type="selection" width="40" align="center" />
<el-table-column type="index" label="#" width="40" />
<el-table-column prop="deptId" label="订单编号" />
<el-table-column prop="hardId" label="设备" />
<el-table-column label="商家" prop="merchantStr" />
<el-table-column label="部门" prop="deptName" />
<el-table-column prop="status" label="打印状态">
<template #default="{ row }">
</template>
</el-table-column>
<el-table-column prop="pic" label="发票">
<template #default="{ row }">
<preview-image v-if="row.pic" :src="row.pic" />
</template>
</el-table-column>
<el-table-column v-if="false" label="操作" width="150">
<template #default="scope">
<el-button icon="edit-pen" text type="primary" v-auth="'hard_hardInvoice_edit'"
@click="formDialogRef.openDialog(scope.row.id)">编辑</el-button>
<el-button icon="delete" text type="primary" v-auth="'hard_hardInvoice_del'"
@click="handleDelete([scope.row.id])">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle" v-bind="state.pagination" />
</div>
<!-- 编辑、新增 -->
<form-dialog ref="formDialogRef" @refresh="getDataList(false)" />
</div>
</template>
<script setup lang="ts" name="systemHardInvoice">
import { BasicTableProps, useTable } from "/@/hooks/table";
import * as hardInvoiceApi from '/@/api/hard/hard-invoice'
import { useMessage, useMessageBox } from "/@/hooks/message";
import { useDict } from '/@/hooks/dict';
// 引入组件
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
// 定义查询字典
// 定义变量内容
const formDialogRef = ref()
// 搜索变量
const queryRef = ref()
const showSearch = ref(true)
// 多选变量
const selectObjs = ref([]) as any
const multiple = ref(true)
const state: BasicTableProps = reactive<BasicTableProps>({
queryForm: {},
pageList: hardInvoiceApi.pageJoin
})
// table hook
const {
getDataList,
currentChangeHandle,
sizeChangeHandle,
sortChangeHandle,
downBlobFile,
tableStyle
} = useTable(state)
// 清空搜索条件
const resetQuery = () => {
// 清空搜索条件
queryRef.value?.resetFields()
// 清空多选
selectObjs.value = []
getDataList()
}
// 导出excel
const exportExcel = () => {
downBlobFile('/hard/hardInvoice/export', Object.assign(state.queryForm, { ids: selectObjs }), 'hardInvoice.xlsx')
}
// 多选事件
const selectionChangHandle = (objs: { id: string }[]) => {
selectObjs.value = objs.map(({ id }) => id);
multiple.value = !objs.length;
};
// 删除操作
const handleDelete = async (ids: string[]) => {
try {
await useMessageBox().confirm('此操作将永久删除');
} catch {
return;
}
try {
await hardInvoiceApi.delObjs(ids);
getDataList();
useMessage().success('删除成功');
} catch (err: any) {
useMessage().error(err.msg);
}
};
</script>
+114
View File
@@ -0,0 +1,114 @@
<template>
<el-dialog title="人脸sdk设置" width="30%" v-model="visible" :close-on-click-modal="false" draggable>
<el-form ref="dataFormRef" :model="form" :rules="dataRules" formDialogRef label-width="120px"
v-loading="loading">
<el-row :gutter="24">
<el-col :span="24" class="mb20">
<el-form-item label="人脸appId" prop="faceAppId">
<el-input v-model="form.faceAppId" placeholder="请输入人脸appId" />
</el-form-item>
</el-col>
<el-col :span="24" class="mb20">
<el-form-item label="人脸sdkKey" prop="faceSdkKey">
<el-input v-model="form.faceSdkKey" placeholder="请输入人脸sdkKey" />
</el-form-item>
</el-col>
<el-col :span="24" class="mb20">
<el-form-item label="人脸activeKey" prop="faceActiveKey">
<el-input v-model="form.faceActiveKey" placeholder="请输入人脸activeKey" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="visible = false">取消</el-button>
<el-button type="primary" @click="onSubmit" :disabled="loading">确认</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts" name="face-form">
import { useDict } from '/@/hooks/dict';
import { useMessage } from "/@/hooks/message";
import { getObj, addObj, putObj } from '/@/api/hard/hard-manager'
import { rule } from '/@/utils/validate';
const emit = defineEmits(['refresh']);
// 定义变量内容
const dataFormRef = ref();
const visible = ref(false)
const loading = ref(false)
// 提交表单数据
const form = reactive<any>({
id: undefined,
faceAppId: undefined,
faceSdkKey: undefined,
faceActiveKey: undefined,
});
// 定义校验规则
const dataRules = ref({
faceAppId: [{ required: true, message: '请输入人脸appId', trigger: 'blur' }],
faceSdkKey: [{ required: true, message: '请输入人脸sdkKey', trigger: 'blur' }],
faceActiveKey: [{ required: true, message: '请输入人脸activeKey', trigger: 'blur' }],
})
// 打开弹窗
const openDialog = (id: string) => {
visible.value = true
form.id = ''
// 重置表单数据
nextTick(() => {
dataFormRef.value?.resetFields();
});
// 获取hardManager信息
if (id) {
form.id = id
gethardManagerData(id)
}
};
// 提交
const onSubmit = async () => {
const valid = await dataFormRef.value.validate().catch(() => { });
if (!valid) return false;
try {
loading.value = true;
form.id ? await putObj(form) : await addObj(form);
useMessage().success(form.id ? '修改成功' : '添加成功');
visible.value = false;
emit('refresh');
} catch (err: any) {
useMessage().error(err.msg);
} finally {
loading.value = false;
}
};
// 初始化表单数据
const gethardManagerData = (id: string) => {
// 获取数据
loading.value = true
getObj(id).then((res: any) => {
Object.assign(form, res.data)
}).finally(() => {
loading.value = false
})
};
// 暴露变量
defineExpose({
openDialog
});
</script>
+115
View File
@@ -0,0 +1,115 @@
<template>
<el-dialog :title="form.id ? '编辑' : '新增'" width="30%" v-model="visible" :close-on-click-modal="false" draggable>
<el-form ref="dataFormRef" :model="form" :rules="dataRules" formDialogRef label-width="90px" v-loading="loading">
<el-row :gutter="24">
<el-col :span="24" class="mb20">
<el-form-item label="设备名" prop="name">
<el-input v-model="form.name" placeholder="请输入设备名" />
</el-form-item>
</el-col>
<el-col :span="24" class="mb20">
<el-form-item label="商户" prop="merchantId">
<select-mch v-model="form.merchantId" placeholder="请选择商户" />
</el-form-item>
</el-col>
<el-col :span="24" class="mb20">
<el-form-item label="设备类型" prop="type">
<dict-select v-model="form.type" dict-code="hard_type" clearable />
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="visible = false">取消</el-button>
<el-button type="primary" @click="onSubmit" :disabled="loading">确认</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts" name="HardManagerDialog">
import { useDict } from '/@/hooks/dict';
import { useMessage } from "/@/hooks/message";
import { getObj, addObj, putObj } from '/@/api/hard/hard-manager'
import { rule } from '/@/utils/validate';
const emit = defineEmits(['refresh']);
// 定义变量内容
const dataFormRef = ref();
const visible = ref(false)
const loading = ref(false)
// 定义字典
// 提交表单数据
const form = reactive({
id: '',
merchantId: '',
deptId: '',
name: '',
type: '',
});
// 定义校验规则
const dataRules = ref({
name: [{ required: true, message: '设备名不能为空', trigger: 'blur' }],
merchantId: [{ required: true, message: '商户不能为空', trigger: 'change' }],
type: [{ required: true, message: '设备类型不能为空', trigger: 'change' }],
})
// 打开弹窗
const openDialog = (id: string) => {
visible.value = true
form.id = ''
// 重置表单数据
nextTick(() => {
dataFormRef.value?.resetFields();
});
// 获取hardManager信息
if (id) {
form.id = id
gethardManagerData(id)
}
};
// 提交
const onSubmit = async () => {
const valid = await dataFormRef.value.validate().catch(() => { });
if (!valid) return false;
try {
loading.value = true;
form.id ? await putObj(form) : await addObj(form);
useMessage().success(form.id ? '修改成功' : '添加成功');
visible.value = false;
emit('refresh');
} catch (err: any) {
useMessage().error(err.msg);
} finally {
loading.value = false;
}
};
// 初始化表单数据
const gethardManagerData = (id: string) => {
// 获取数据
loading.value = true
getObj(id).then((res: any) => {
Object.assign(form, res.data)
}).finally(() => {
loading.value = false
})
};
// 暴露变量
defineExpose({
openDialog
});
</script>
+175
View File
@@ -0,0 +1,175 @@
<template>
<div class="layout-padding">
<div class="layout-padding-auto layout-padding-view">
<el-form ref="queryRef" :inline="true" :model="state.queryForm" @keyup.enter="getDataList">
<el-row :gutter="24">
<el-col :span="4">
<el-form-item class="w100" label="设备名" prop="name">
<el-input v-model="state.queryForm.name" placeholder="设备名" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item class="w100" label="设备类型" prop="type">
<dict-select v-model="state.queryForm.type" dict-code="hard_type" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item class="w100" label="商户" prop="merchantIds">
<select-mch v-model="state.queryForm.merchantIds" />
</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 icon="folder-add" type="primary" class="ml10" @click="formDialogRef.openDialog()"
v-auth="'hard_hardManager_add'">
新 增
</el-button>
<el-button plain :disabled="multiple" icon="Delete" type="primary" v-auth="'hard_hardManager_del'"
@click="handleDelete(selectObjs)">
删除
</el-button>
<right-toolbar v-model:showSearch="showSearch" :export="'hard_hardManager_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 :cell-style="tableStyle.cellStyle"
:header-cell-style="tableStyle.headerCellStyle" @selection-change="selectionChangHandle"
@sort-change="sortChangeHandle">
<el-table-column type="selection" width="40" align="center" />
<el-table-column type="index" label="#" width="40" />
<el-table-column prop="name" label="设备名" />
<el-table-column prop="type" label="设备类型">
<template #default="{ row }">
<dict-tag :options="hard_type" :value="row.type" />
</template>
</el-table-column>
<el-table-column prop="merchantName" label="商户" />
<el-table-column prop="deptName" label="部门" />
<el-table-column prop="uniqueCode" label="设备唯一编号" />
<el-table-column prop="mainTopic" width="200" label="topic" />
<el-table-column prop="isTakeFood" width="200" label="是否为当前商户的取餐机器">
<template #default="{ row }">
<el-switch v-if="row.type == 1" :loading="switchTakeFoodLoading" active-text="是" inactive-text="否"
active-value="1" inactive-value="0" v-model="row.isTakeFood" @change="changeTakeFood($event, row)" />
<div v-else>只有食堂需要设置</div>
</template>
</el-table-column>
<el-table-column prop="createTime" width="200" label="创建时间" />
<el-table-column label="操作" fixed="right" width="400">
<template #default="{ row }">
<el-button icon="edit-pen" text type="primary" v-auth="'hard_hardManager_edit'"
@click="formDialogRef.openDialog(row.id)">编辑</el-button>
<el-button icon="TrendCharts" link type="primary" @click="mqformDialogRef.openDialog(row.id)">
mq设置
</el-button>
<el-button icon="SetUp" link type="primary" @click="faceFormDialogRef.openDialog(row.id)">
人脸sdk设置
</el-button>
<el-button icon="delete" text type="primary" v-auth="'hard_hardManager_del'"
@click="handleDelete([row.id])">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle" v-bind="state.pagination" />
</div>
<!-- 编辑、新增 -->
<form-dialog ref="formDialogRef" @refresh="getDataList(false)" />
<face-form-dialog ref="faceFormDialogRef" @refresh="getDataList(false)" />
<mq-form-dialog ref="mqformDialogRef" @refresh="getDataList(false)" />
</div>
</template>
<script setup lang="ts" name="systemHardManager">
import { BasicTableProps, useTable } from "/@/hooks/table";
import * as hardManageApi from '/@/api/hard/hard-manager'
import { useMessage, useMessageBox } from "/@/hooks/message";
import { useDict } from '/@/hooks/dict';
// 引入组件
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
const FaceFormDialog = defineAsyncComponent(() => import('./face-form.vue'));
const MqFormDialog = defineAsyncComponent(() => import('./mq-form.vue'));
// 定义查询字典
const { hard_type } = useDict('hard_type')
// 定义变量内容
const formDialogRef = ref()
const faceFormDialogRef = ref()
const mqformDialogRef = ref()
const switchTakeFoodLoading = ref(false)
// 搜索变量
const queryRef = ref()
const showSearch = ref(true)
// 多选变量
const selectObjs = ref([]) as any
const multiple = ref(true)
const state: BasicTableProps = reactive<BasicTableProps>({
queryForm: {},
pageList: hardManageApi.pageJoin
})
// table hook
const {
getDataList,
currentChangeHandle,
sizeChangeHandle,
sortChangeHandle,
downBlobFile,
tableStyle
} = useTable(state)
// 清空搜索条件
const resetQuery = () => {
// 清空搜索条件
queryRef.value?.resetFields()
// 清空多选
selectObjs.value = []
getDataList()
}
const changeTakeFood = async (e: any, row: any) => {
switchTakeFoodLoading.value = true
try {
await hardManageApi.putObj({ id: row.id, isTakeFood: e })
getDataList()
} finally {
switchTakeFoodLoading.value = false
}
}
// 导出excel
const exportExcel = () => {
downBlobFile('/hard/hardManager/export', Object.assign(state.queryForm, { ids: selectObjs }), 'hardManager.xlsx')
}
// 多选事件
const selectionChangHandle = (objs: { id: string }[]) => {
selectObjs.value = objs.map(({ id }) => id);
multiple.value = !objs.length;
};
// 删除操作
const handleDelete = async (ids: string[]) => {
try {
await useMessageBox().confirm('此操作将永久删除');
} catch {
return;
}
try {
await hardManageApi.delObjs(ids);
getDataList();
useMessage().success('删除成功');
} catch (err: any) {
useMessage().error(err.msg);
}
};
</script>
+144
View File
@@ -0,0 +1,144 @@
<template>
<el-dialog title="mq设置" width="30%" v-model="visible" :close-on-click-modal="false" draggable>
<el-form ref="dataFormRef" :model="form" :rules="dataRules" formDialogRef label-width="90px"
v-loading="loading">
<el-row :gutter="24">
<el-col :span="24" class="mb20">
<el-form-item label="连接id" prop="mqClientId">
<el-input disabled v-model="form.mqClientId" placeholder="待同步" />
</el-form-item>
</el-col>
<el-col :span="24" class="mb20">
<el-form-item label="mac地址" prop="macAddress">
<el-input disabled v-model="form.macAddress" placeholder="待同步" />
</el-form-item>
</el-col>
<el-col :span="24" class="mb20">
<el-form-item label="topic" prop="mainTopic">
<el-input disabled v-model="form.mainTopic" placeholder="待同步" />
</el-form-item>
</el-col>
<el-col :span="24" class="mb20">
<el-form-item label="mq地址" prop="mqSocketAddress">
<el-input v-model="form.mqSocketAddress" placeholder="请输入mq地址" />
</el-form-item>
</el-col>
<el-col :span="24" class="mb20">
<el-form-item label="mq端口" prop="mqSocketPort">
<el-input v-model="form.mqSocketPort" placeholder="请输入mq端口" />
</el-form-item>
</el-col>
<el-col :span="24" class="mb20">
<el-form-item label="mq用户名" prop="mqUsername">
<el-input disabled v-model="form.mqUsername" placeholder="请输入mq用户名" />
</el-form-item>
</el-col>
<el-col :span="24" class="mb20">
<el-form-item label="mq密码" prop="mqPassword">
<el-input v-model="form.mqPassword" placeholder="请输入mq密码" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="visible = false">取消</el-button>
<el-button type="primary" @click="onSubmit" :disabled="loading">确认</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts" name="mq-form">
import { useDict } from '/@/hooks/dict';
import { useMessage } from "/@/hooks/message";
import { getObj, addObj, putObj } from '/@/api/hard/hard-manager'
import { rule } from '/@/utils/validate';
const emit = defineEmits(['refresh']);
// 定义变量内容
const dataFormRef = ref();
const visible = ref(false)
const loading = ref(false)
// 提交表单数据
const form = reactive<any>({
id: undefined,
name: undefined,
type: undefined,
merchantId: undefined,
mqClientId: undefined,
macAddress: undefined,
mainTopic: undefined,
mqSocketAddress: undefined,
mqSocketPort: undefined,
mqUsername: undefined,
mqPassword: undefined,
mqSyncCount: undefined
});
// 定义校验规则
const dataRules = ref({
mqSocketAddress: [{ required: true, message: 'mq地址', trigger: 'blur' }],
mqSocketPort: [{ required: true, message: 'mq端口', trigger: 'blur' }],
})
// 打开弹窗
const openDialog = (id: string) => {
visible.value = true
form.id = ''
// 重置表单数据
nextTick(() => {
dataFormRef.value?.resetFields();
});
// 获取hardManager信息
if (id) {
form.id = id
gethardManagerData(id)
}
};
// 提交
const onSubmit = async () => {
const valid = await dataFormRef.value.validate().catch(() => { });
if (!valid) return false;
try {
loading.value = true;
form.id ? await putObj(form) : await addObj(form);
useMessage().success(form.id ? '修改成功' : '添加成功');
visible.value = false;
emit('refresh');
} catch (err: any) {
useMessage().error(err.msg);
} finally {
loading.value = false;
}
};
// 初始化表单数据
const gethardManagerData = (id: string) => {
// 获取数据
loading.value = true
getObj(id).then((res: any) => {
Object.assign(form, res.data)
}).finally(() => {
loading.value = false
})
};
// 暴露变量
defineExpose({
openDialog
});
</script>
+120
View File
@@ -0,0 +1,120 @@
<template>
<el-dialog :title="form.id ? '编辑' : '新增'" v-model="visible" :close-on-click-modal="false" draggable>
<el-form ref="dataFormRef" :model="form" :rules="dataRules" formDialogRef label-width="90px" v-loading="loading">
<el-row :gutter="24">
<el-col :span="12" class="mb20">
<el-form-item label="用户id" prop="userId">
<el-input v-model="form.userId" placeholder="请输入用户id" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="visible = false">取消</el-button>
<el-button type="primary" @click="onSubmit" :disabled="loading">确认</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts" name="HardwareOrderDialog">
import { useDict } from '/@/hooks/dict';
import { useMessage } from "/@/hooks/message";
import * as hardOrder from "/@/api/hard/hard-order";
import * as hardCar from "/@/api/hard/hard-car";
import { rule } from '/@/utils/validate';
const emit = defineEmits(['refresh']);
// 定义变量内容
const dataFormRef = ref();
const visible = ref(false)
const loading = ref(false)
// 定义字典
// 提交表单数据
const form = reactive({
id: '',
userId: '',
merchantId: '',
hardId: '',
deptId: '',
walletId: '',
parentCarId: '',
orderSourceTypeId: '',
orderType: '',
orderStatus: '',
payType: '',
hourType: '',
sysType: '',
totalPrice: '',
extraPrice: '',
payPrice: '',
payTime: '',
payRefundId: '',
refundPrice: '',
refundTime: '',
refundStatus: '',
applyCancelTime: '',
androidOrderCode: '',
isOfflineOrder: '',
productDesc: '',
offlinePaySuccess: '',
});
// 定义校验规则
const dataRules = ref({
})
// 打开弹窗
const openDialog = (id: string) => {
visible.value = true
form.id = ''
// 重置表单数据
nextTick(() => {
dataFormRef.value?.resetFields();
});
// 获取hardwareOrder信息
if (id) {
form.id = id
gethardwareOrderData(id)
}
};
// 提交
const onSubmit = async () => {
const valid = await dataFormRef.value.validate().catch(() => { });
if (!valid) return false;
try {
loading.value = true;
form.id ? await hardOrder.putObj(form) : await hardOrder.addObj(form);
useMessage().success(form.id ? '修改成功' : '添加成功');
visible.value = false;
emit('refresh');
} catch (err: any) {
useMessage().error(err.msg);
} finally {
loading.value = false;
}
};
// 初始化表单数据
const gethardwareOrderData = (id: string) => {
// 获取数据
loading.value = true
hardOrder.getObj(id).then((res: any) => {
Object.assign(form, res.data)
}).finally(() => {
loading.value = false
})
};
// 暴露变量
defineExpose({
openDialog
});
</script>
+116
View File
@@ -0,0 +1,116 @@
<template>
<div class="layout-padding">
<div class="layout-padding-auto layout-padding-view">
<el-row>
<div class="mb8" style="width: 100%">
<el-button icon="folder-add" type="primary" class="ml10" @click="formDialogRef.openDialog()"
v-auth="'hard_hardwareOrder_add'">
新 增
</el-button>
<el-button plain :disabled="multiple" icon="Delete" type="primary" v-auth="'hard_hardwareOrder_del'"
@click="handleDelete(selectObjs)">
删除
</el-button>
<right-toolbar v-model:showSearch="showSearch" :export="'hard_hardwareOrder_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 :cell-style="tableStyle.cellStyle"
:header-cell-style="tableStyle.headerCellStyle" @selection-change="selectionChangHandle"
@sort-change="sortChangeHandle">
<el-table-column type="selection" width="40" align="center" />
<el-table-column type="index" label="#" width="40" />
<el-table-column prop="userId" label="用户id" show-overflow-tooltip />
<el-table-column prop="merchantId" label="商户id" show-overflow-tooltip />
<el-table-column prop="hardId" label="设备id" show-overflow-tooltip />
<el-table-column label="操作" width="150">
<template #default="scope">
<el-button icon="edit-pen" text type="primary" v-auth="'hard_hardwareOrder_edit'"
@click="formDialogRef.openDialog(scope.row.id)">编辑</el-button>
<el-button icon="delete" text type="primary" v-auth="'hard_hardwareOrder_del'"
@click="handleDelete([scope.row.id])">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle" v-bind="state.pagination" />
</div>
<!-- 编辑、新增 -->
<form-dialog ref="formDialogRef" @refresh="getDataList(false)" />
</div>
</template>
<script setup lang="ts" name="systemHardwareOrder">
import { BasicTableProps, useTable } from "/@/hooks/table";
import * as hardOrder from "/@/api/hard/hard-order";
import * as hardCar from "/@/api/hard/hard-car";
import { useMessage, useMessageBox } from "/@/hooks/message";
import { useDict } from '/@/hooks/dict';
// 引入组件
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
// 定义查询字典
// 定义变量内容
const formDialogRef = ref()
// 搜索变量
const queryRef = ref()
const showSearch = ref(true)
// 多选变量
const selectObjs = ref([]) as any
const multiple = ref(true)
const state: BasicTableProps = reactive<BasicTableProps>({
queryForm: {},
pageList: hardOrder.pageJoin
})
// table hook
const {
getDataList,
currentChangeHandle,
sizeChangeHandle,
sortChangeHandle,
downBlobFile,
tableStyle
} = useTable(state)
// 清空搜索条件
const resetQuery = () => {
// 清空搜索条件
queryRef.value?.resetFields()
// 清空多选
selectObjs.value = []
getDataList()
}
// 导出excel
const exportExcel = () => {
downBlobFile('/hard/hardwareOrder/export', Object.assign(state.queryForm, { ids: selectObjs }), 'hardwareOrder.xlsx')
}
// 多选事件
const selectionChangHandle = (objs: { id: string }[]) => {
selectObjs.value = objs.map(({ id }) => id);
multiple.value = !objs.length;
};
// 删除操作
const handleDelete = async (ids: string[]) => {
try {
await useMessageBox().confirm('此操作将永久删除');
} catch {
return;
}
try {
await hardOrder.delObjs(ids);
getDataList();
useMessage().success('删除成功');
} catch (err: any) {
useMessage().error(err.msg);
}
};
</script>
@@ -73,16 +73,16 @@
<dict-tag :options="status" :value="scope.row.status"></dict-tag>
</template>
</el-table-column>
<el-table-column prop="costPrice" label="成本单价" show-overflow-tooltip width="100" />
<!-- <el-table-column prop="costPrice" label="成本单价" show-overflow-tooltip width="100" />-->
<el-table-column prop="stock" label="库存" show-overflow-tooltip />
<!-- <el-table-column prop="giveIntegral" label="赠送积分" show-overflow-tooltip /> -->
<!-- <el-table-column prop="merchantId" label="商户编号" show-overflow-tooltip /> -->
<el-table-column prop="specification" label="规格" show-overflow-tooltip />
<!-- <el-table-column prop="specification" label="规格" show-overflow-tooltip />-->
<!-- <el-table-column prop="origin" label="产地" show-overflow-tooltip /> -->
<el-table-column prop="packingQuantity" label="装数" show-overflow-tooltip />
<el-table-column prop="purchasePrice" label="进价)" show-overflow-tooltip />
<el-table-column prop="retailPrice" label="零售价" show-overflow-tooltip />
<el-table-column prop="promotionPrice" label="促销价" show-overflow-tooltip />
<!-- <el-table-column prop="packingQuantity" label="装数" show-overflow-tooltip />-->
<!-- <el-table-column prop="purchasePrice" label="进价)" show-overflow-tooltip />-->
<!-- <el-table-column prop="retailPrice" label="零售价" show-overflow-tooltip />-->
<!-- <el-table-column prop="promotionPrice" label="促销价" show-overflow-tooltip />-->
<el-table-column prop="productNature" label="商品性质" show-overflow-tooltip width="150">
<template #default="scope">
<dict-tag :options="supermarket_nature" :value="scope.row.productNature"></dict-tag>
@@ -0,0 +1,72 @@
<template>
<el-dialog title="使用情况" width="60%" v-model="visible" :close-on-click-modal="false" draggable>
<el-form ref="queryRef" :inline="true" :model="state.queryForm" @keyup.enter="getDataList">
<el-row :gutter="24">
<el-col :span="6">
<el-form-item class="w100" label="是否使用" prop="status">
<dict-select v-model="state.queryForm.status" dict-code="yes_no_type" 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-table :data="state.dataList" v-loading="state.loading" border :cell-style="tableStyle.cellStyle"
:header-cell-style="tableStyle.headerCellStyle" @sort-change="sortChangeHandle">
<el-table-column type="index" label="#" width="100" />
<el-table-column prop="username" label="申请人" />
<el-table-column prop="status" label="是否使用">
<template #default="{ row }">
<dict-tag :options="yes_no_type" :value="row.status" />
</template>
</el-table-column>
<el-table-column prop="useTime" label="使用时间" />
</el-table>
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle" v-bind="state.pagination" />
<template #footer>
<span class="dialog-footer">
<el-button @click="visible = false">取消</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts" name="code-use-table">
import { BasicTableProps, useTable } from "/@/hooks/table";
import { codeList } from "/@/api/wallet/wallet-stride";
import { useDict } from '/@/hooks/dict';
// 定义变量内容
const visible = ref(false)
const loading = ref(false)
const queryRef = ref()
// 定义查询字典
const { check_status, yes_no_type } = useDict('check_status', 'yes_no_type');
const state: BasicTableProps = reactive<BasicTableProps>({
queryForm: {},
pageList: codeList
})
// table hook
const { getDataList, currentChangeHandle, sizeChangeHandle, sortChangeHandle, downBlobFile, tableStyle } = useTable(state)
// 打开弹窗
const openDialog = (id: string) => {
visible.value = true
state.queryForm.id = ''
// 获取walletStride信息
if (id) {
state.queryForm.id = id
getDataList()
}
};
// 清空搜索条件
const resetQuery = () => {
// 清空搜索条件
queryRef.value?.resetFields()
getDataList()
}
// 暴露变量
defineExpose({ openDialog });
</script>
+96
View File
@@ -0,0 +1,96 @@
<template>
<el-dialog :title="form.id ? '编辑' : '新增'" v-model="visible" :close-on-click-modal="false" draggable>
<el-form ref="dataFormRef" :model="form" :rules="dataRules" formDialogRef label-width="90px" v-loading="loading">
<el-row :gutter="24">
<el-col :span="12" class="mb20">
<el-form-item label="会员钱包 id" prop="walletId">
<el-input v-model="form.walletId" placeholder="请输入会员钱包 id" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="visible = false">取消</el-button>
<el-button type="primary" @click="onSubmit" :disabled="loading">确认</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts" name="WalletRechargeDialog">
import { useDict } from '/@/hooks/dict';
import { useMessage } from "/@/hooks/message";
import { getObj, addObj, putObj } from "/@/api/wallet/wallet-recharge";
import { rule } from '/@/utils/validate';
const emit = defineEmits(['refresh']);
// 定义变量内容
const dataFormRef = ref();
const visible = ref(false)
const loading = ref(false)
// 定义字典
// 提交表单数据
const form = reactive({
id: '',
walletId: '',
});
// 定义校验规则
const dataRules = ref({
})
// 打开弹窗
const openDialog = (id: string) => {
visible.value = true
form.id = ''
// 重置表单数据
nextTick(() => {
dataFormRef.value?.resetFields();
});
// 获取walletRecharge信息
if (id) {
form.id = id
getwalletRechargeData(id)
}
};
// 提交
const onSubmit = async () => {
const valid = await dataFormRef.value.validate().catch(() => { });
if (!valid) return false;
try {
loading.value = true;
form.id ? await putObj(form) : await addObj(form);
useMessage().success(form.id ? '修改成功' : '添加成功');
visible.value = false;
emit('refresh');
} catch (err: any) {
useMessage().error(err.msg);
} finally {
loading.value = false;
}
};
// 初始化表单数据
const getwalletRechargeData = (id: string) => {
// 获取数据
loading.value = true
getObj(id).then((res: any) => {
Object.assign(form, res.data)
}).finally(() => {
loading.value = false
})
};
// 暴露变量
defineExpose({
openDialog
});
</script>
+111
View File
@@ -0,0 +1,111 @@
<template>
<div class="layout-padding">
<div class="layout-padding-auto layout-padding-view">
<el-row>
<div class="mb8" style="width: 100%">
<right-toolbar :search="false" v-model:showSearch="showSearch" :export="'wallet_walletRecharge_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 :cell-style="tableStyle.cellStyle"
:header-cell-style="tableStyle.headerCellStyle" @selection-change="selectionChangHandle"
@sort-change="sortChangeHandle">
<el-table-column type="selection" width="40" align="center" />
<el-table-column type="index" label="#" width="40" />
<el-table-column prop="username" label="用户" show-overflow-tooltip />
<el-table-column prop="userAvatar" label="头像" show-overflow-tooltip>
<template #default="{ row }">
<preview-image :src="row.userAvatar" />
</template>
</el-table-column>
<el-table-column prop="userMobile" width="120" label="手机号" show-overflow-tooltip />
<el-table-column label="操作" width="150">
<template #default="scope">
<el-button icon="edit-pen" text type="primary" v-auth="'wallet_walletRecharge_edit'"
@click="formDialogRef.openDialog(scope.row.id)">编辑</el-button>
<el-button icon="delete" text type="primary" v-auth="'wallet_walletRecharge_del'"
@click="handleDelete([scope.row.id])">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle" v-bind="state.pagination" />
</div>
<!-- 编辑、新增 -->
<form-dialog ref="formDialogRef" @refresh="getDataList(false)" />
</div>
</template>
<script setup lang="ts" name="systemWalletRecharge">
import { BasicTableProps, useTable } from "/@/hooks/table";
import { fetchList, delObjs, pageJoin } from "/@/api/wallet/wallet-recharge";
import { useMessage, useMessageBox } from "/@/hooks/message";
import { useDict } from '/@/hooks/dict';
// 引入组件
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
// 定义查询字典
// 定义变量内容
const formDialogRef = ref()
// 搜索变量
const queryRef = ref()
const showSearch = ref(true)
// 多选变量
const selectObjs = ref([]) as any
const multiple = ref(true)
const state: BasicTableProps = reactive<BasicTableProps>({
queryForm: {},
pageList: pageJoin
})
// table hook
const {
getDataList,
currentChangeHandle,
sizeChangeHandle,
sortChangeHandle,
downBlobFile,
tableStyle
} = useTable(state)
// 清空搜索条件
const resetQuery = () => {
// 清空搜索条件
queryRef.value?.resetFields()
// 清空多选
selectObjs.value = []
getDataList()
}
// 导出excel
const exportExcel = () => {
downBlobFile('/wallet/walletRecharge/export', Object.assign(state.queryForm, { ids: selectObjs }), 'walletRecharge.xlsx')
}
// 多选事件
const selectionChangHandle = (objs: { id: string }[]) => {
selectObjs.value = objs.map(({ id }) => id);
multiple.value = !objs.length;
};
// 删除操作
const handleDelete = async (ids: string[]) => {
try {
await useMessageBox().confirm('此操作将永久删除');
} catch {
return;
}
try {
await delObjs(ids);
getDataList();
useMessage().success('删除成功');
} catch (err: any) {
useMessage().error(err.msg);
}
};
</script>
+34 -10
View File
@@ -1,16 +1,28 @@
<template>
<el-dialog :title="form.id ? '编辑' : '新增'" v-model="visible" :close-on-click-modal="false" draggable>
<el-form ref="dataFormRef" :model="form" :rules="dataRules" formDialogRef label-width="90px" v-loading="loading">
<el-dialog title="申请" v-model="visible" width="30%" :close-on-click-modal="false" draggable>
<el-form ref="dataFormRef" :model="form" :rules="dataRules" formDialogRef label-width="100px" v-loading="loading">
<el-row :gutter="24">
<el-col :span="24" class="mb20">
<el-form-item label="用户id" prop="userId">
<el-input v-model="form.userId" placeholder="请输入用户id" />
<el-form-item label="申请人" prop="userId">
<select-user v-model="form.userId" />
</el-form-item>
</el-col>
<el-col :span="24" class="mb20">
<el-form-item label="部门id" prop="deptId">
<el-input v-model="form.deptId" placeholder="请输入部门id" />
<el-form-item label="申请数量" prop="count">
<el-input-number v-model="form.count" :min="1" :max="100" />
</el-form-item>
</el-col>
<el-form-item label="申请有效期" prop="rangeDate">
<el-date-picker v-model="form.rangeDate" placeholder="请选择申请有效期" type="daterange" range-separator="至"
start-placeholder="开始日期" end-placeholder="结束日期" value-format="YYYY-MM-DD" format="YYYY-MM-DD" />
</el-form-item>
<el-col :span="24" class="mb20">
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" type="textarea" :autosize="{ minRows: 6 }" />
</el-form-item>
</el-col>
@@ -28,7 +40,7 @@
<script setup lang="ts" name="WalletForeignDialog">
import { useDict } from '/@/hooks/dict';
import { useMessage } from "/@/hooks/message";
import { getObj, addObj, putObj } from '../../../api/wallet/wallet-foreign'
import { getObj, addObj, putObj } from '/@/api/wallet/wallet-foreign'
import { rule } from '/@/utils/validate';
const emit = defineEmits(['refresh']);
@@ -42,11 +54,18 @@ const loading = ref(false)
const form = reactive({
id: '',
userId: '',
deptId: '',
count: '',
remark: '',
applyEndTime: '',
applyStartTime: '',
rangeDate: []
});
// 定义校验规则
const dataRules = ref({
count: [{ required: true, message: '申请数量不能为空', trigger: 'blur' }],
userId: [{ required: true, message: '申请人id不能为空', trigger: 'blur' }],
rangeDate: [{ required: true, message: '申请人id不能为空', trigger: 'change' }],
})
// 打开弹窗
@@ -73,8 +92,13 @@ const onSubmit = async () => {
try {
loading.value = true;
form.id ? await putObj(form) : await addObj(form);
useMessage().success(form.id ? '修改成功' : '添加成功');
const pa: any = { ...form }
if (form.rangeDate && form.rangeDate.length) {
pa.applyStartTime = form.rangeDate[0]
pa.applyEndTime = form.rangeDate[1]
}
await addObj(pa);
useMessage().success('申请成功');
visible.value = false;
emit('refresh');
} catch (err: any) {
+57 -16
View File
@@ -1,11 +1,25 @@
<template>
<div class="layout-padding">
<div class="layout-padding-auto layout-padding-view">
<el-form ref="queryRef" :inline="true" :model="state.queryForm" @keyup.enter="getDataList">
<el-row :gutter="24">
<el-col :span="4">
<el-form-item class="w100" label="用户" prop="userIds">
<select-user v-model="state.queryForm.userIds" />
</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 icon="folder-add" type="primary" class="ml10" @click="formDialogRef.openDialog()"
v-auth="'wallet_walletForeign_add'">
新 增
申 请
</el-button>
<el-button plain :disabled="multiple" icon="Delete" type="primary" v-auth="'wallet_walletForeign_del'"
@click="handleDelete(selectObjs)">
@@ -21,18 +35,36 @@
@sort-change="sortChangeHandle">
<el-table-column type="selection" width="40" align="center" />
<el-table-column type="index" label="#" width="40" />
<el-table-column prop="userId" label="用户id" show-overflow-tooltip />
<el-table-column prop="deptId" label="部门id" show-overflow-tooltip />
<el-table-column prop="applyStartTime" label="申请使用开始时间" show-overflow-tooltip />
<el-table-column prop="applyEndTime" label="申请使用结束时间" show-overflow-tooltip />
<el-table-column prop="count" label="申请数量" show-overflow-tooltip />
<el-table-column prop="useCount" label="使用数量" show-overflow-tooltip />
<el-table-column label="操作" width="150">
<template #default="scope">
<el-button icon="edit-pen" text type="primary" v-auth="'wallet_walletForeign_edit'"
@click="formDialogRef.openDialog(scope.row.id)">编辑</el-button>
<el-button icon="delete" text type="primary" v-auth="'wallet_walletForeign_del'"
@click="handleDelete([scope.row.id])">删除</el-button>
<el-table-column prop="username" label="申请人" />
<el-table-column prop="deptName" label="部门" />
<el-table-column prop="applyStartTime" label="申请使用时间">
<template #default="{ row }">
<span>{{ row.applyStartTime }}</span>
<span class="mx-1">-</span>
<span>{{ row.applyEndTime }}</span>
</template>
</el-table-column>
<el-table-column prop="count" label="申请数量" />
<el-table-column prop="useCount" label="使用数量" />
<el-table-column prop="processStatus" label="审核状态">
<template #default="{ row }">
<el-tag v-if="row.processStatus == 1" type="success">进行中</el-tag>
<el-tag v-else>已结束</el-tag>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建时间" />
<el-table-column label="操作" width="200">
<template #default="{ row }">
<el-button icon="InfoFilled" text type="primary" @click="codeUseTableRef.openDialog(row.id)">
使用情况
</el-button>
<el-button icon="Promotion" text type="primary" v-auth="'admin_walletStride_del'" @click="doInfo(row)">
查看审批
</el-button>
<el-button v-if="false" icon="delete" text type="primary" v-auth="'wallet_walletForeign_del'"
@click="handleDelete([row.id])">
删除
</el-button>
</template>
</el-table-column>
</el-table>
@@ -41,22 +73,24 @@
<!-- 编辑、新增 -->
<form-dialog ref="formDialogRef" @refresh="getDataList(false)" />
<code-use-table ref="codeUseTableRef" />
</div>
</template>
<script setup lang="ts" name="systemWalletForeign">
import { BasicTableProps, useTable } from "/@/hooks/table";
import { fetchList, delObjs } from "../../../api/wallet/wallet-foreign";
import { fetchList, pageJoin, delObjs } from "/@/api/wallet/wallet-foreign";
import { useMessage, useMessageBox } from "/@/hooks/message";
import { useDict } from '/@/hooks/dict';
// 引入组件
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
const CodeUseTable = defineAsyncComponent(() => import('../components/code-use-table.vue'));
// 定义查询字典
// 定义变量内容
const formDialogRef = ref()
const codeUseTableRef = ref()
// 搜索变量
const queryRef = ref()
const showSearch = ref(true)
@@ -64,9 +98,11 @@ const showSearch = ref(true)
const selectObjs = ref([]) as any
const multiple = ref(true)
const { push } = useRouter()
const state: BasicTableProps = reactive<BasicTableProps>({
queryForm: {},
pageList: fetchList
pageList: pageJoin
})
// table hook
@@ -88,6 +124,11 @@ const resetQuery = () => {
getDataList()
}
const doInfo = (row: any) => {
push({ path: '/flow/task/started', query: { id: row.id } })
}
// 导出excel
const exportExcel = () => {
downBlobFile('/wallet/walletForeign/export', Object.assign(state.queryForm, { ids: selectObjs }), 'walletForeign.xlsx')
+14 -15
View File
@@ -1,28 +1,22 @@
<template>
<el-dialog :title="form.id ? '编辑' : '新增'" v-model="visible" :close-on-click-modal="false" draggable>
<el-dialog :title="form.id ? '编辑' : '新增'" width="40%" v-model="visible" :close-on-click-modal="false" draggable>
<el-form ref="dataFormRef" :model="form" :rules="dataRules" formDialogRef label-width="90px" v-loading="loading">
<el-row :gutter="24">
<el-col :span="12" class="mb20">
<el-form-item label="钱包id" prop="walletId">
<el-input v-model="form.walletId" placeholder="请输入钱包id" />
<el-col :span="24" class="mb20">
<el-form-item label="用户" prop="userId">
<select-user v-model="form.userId" />
</el-form-item>
</el-col>
<el-col :span="12" class="mb20">
<el-form-item label="用户id" prop="userId">
<el-input v-model="form.userId" placeholder="请输入用户id" />
<el-col :span="24" class="mb20">
<el-form-item label="钱包类型" prop="walletTypeId">
<select-wallet-type v-model="form.walletTypeId" placeholder="钱包类型" />
</el-form-item>
</el-col>
<el-col :span="12" class="mb20">
<el-form-item label="冻结状态" prop="freeStatus">
<el-input v-model="form.freeStatus" placeholder="请输入冻结状态" />
</el-form-item>
</el-col>
<el-col :span="12" class="mb20">
<el-col :span="24" class="mb20">
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
<el-input v-model="form.remark" placeholder="请输入备注" type="textarea" :autosize="{ minRows: 6 }" />
</el-form-item>
</el-col>
@@ -54,6 +48,7 @@ const loading = ref(false)
const form = reactive({
id: '',
walletId: '',
walletTypeId: '',
userId: '',
freeStatus: '',
remark: '',
@@ -61,6 +56,10 @@ const form = reactive({
// 定义校验规则
const dataRules = ref({
walletId: [{ required: true, message: '钱包id不能为空', trigger: 'blur' }],
userId: [{ required: true, message: '用户id不能为空', trigger: 'blur' }],
status: [{ required: true, message: '审核状态不能为空', trigger: 'blur' }],
walletTypeId: [{ required: true, message: '请选择钱包类型', trigger: 'change' }]
})
// 打开弹窗
+15 -5
View File
@@ -42,10 +42,20 @@
@sort-change="sortChangeHandle">
<el-table-column type="selection" width="40" align="center" />
<el-table-column type="index" label="#" width="40" />
<el-table-column prop="walletId" label="钱包id" show-overflow-tooltip />
<el-table-column prop="userId" label="用户id" show-overflow-tooltip />
<el-table-column prop="freeStatus" label="冻结状态" show-overflow-tooltip />
<el-table-column prop="remark" label="备注" show-overflow-tooltip />
<el-table-column prop="username" label="申请人" />
<el-table-column prop="deptName" label="部门" />
<el-table-column prop="freeStatus" label="是否冻结">
<template #default="{ row }">
<dict-tag :options="yes_no_type" :value="row.freeStatus" />
</template>
</el-table-column>
<el-table-column prop="processStatus" label="审核状态">
<template #default="{ row }">
<dict-tag :options="check_status" :value="row.processStatus" />
</template>
</el-table-column>
<el-table-column prop="remark" label="备注" />
<el-table-column prop="createTime" label="创建时间" />
<el-table-column label="操作" width="150">
<template #default="scope">
<el-button icon="edit-pen" text type="primary" v-auth="'wallet_walletFreeze_edit'"
@@ -73,7 +83,7 @@ import { useDict } from '/@/hooks/dict';
// 引入组件
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
// 定义查询字典
const { check_status, yes_no_type } = useDict('check_status', 'yes_no_type');
// 定义变量内容
const formDialogRef = ref()
// 搜索变量
+1 -3
View File
@@ -67,7 +67,7 @@
</el-table-column>
<el-table-column prop="totalRecharge" label="累计充值" show-overflow-tooltip>
<template #default="{ row }">
<div class="color-warning">{{ displayPrice(row.totalRecharge) }}</div>
<div class="color-success">{{ displayPrice(row.totalRecharge) }}</div>
</template>
</el-table-column>
<el-table-column prop="isFreeze" width="120" label="是否冻结饭卡" show-overflow-tooltip>
@@ -88,10 +88,8 @@
</el-table>
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle" v-bind="state.pagination" />
</div>
<transaction-list ref="formDialogRef" @refresh="getDataList(false)" />
<change-balance ref="changeBalanceRef" @refresh="getDataList(false)" />
</div>
</template>
@@ -0,0 +1,91 @@
<template>
<div class="w100">
<div class="layout-padding-auto layout-padding-view">
<div class="flex justify-center flex-col">
<div>
<el-form ref="dataFormRef" :model="form" :rules="dataRules" formDialogRef label-width="180px"
v-loading="loading">
<el-row :gutter="24">
<el-col :span="24" class="mb20">
<el-form-item label="钱包二维码自动刷新" prop="refreshQrCodeEnable">
<el-switch active-value="1" inactive-value="0" v-model="form.refreshQrCodeEnable"
active-text="开启" inactive-text="关闭" inline-prompt />
</el-form-item>
</el-col>
<el-col :span="24" class="mb20">
<el-form-item label="钱包二维码自动刷新间隔" prop="refreshQrCodeFre">
<el-input style="width: 300px;" type="number" v-model="form.refreshQrCodeFre"
placeholder="请输入钱包二维码自动刷新间隔">
<template #append>秒</template>
</el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</div>
<div class="flex items-center">
<el-button type="primary" @click="onSubmit" :disabled="loading">确认</el-button>
</div>
</div>
</div>
</template>
<script setup lang="ts" name="code">
import { useDict } from '/@/hooks/dict'
import { storePrice } from "/@/utils/formatMoney"
import { useMessage } from "/@/hooks/message"
import { getObj, putObj } from "/@/api/wallet/wallet-setting"
// 定义变量内容
const dataFormRef = ref();
const loading = ref(false)
// 提交表单数据
const form = reactive({
id: undefined,
refreshQrCodeEnable: undefined,
refreshQrCodeFre: undefined,
});
// 定义校验规则
const dataRules = ref({
refreshQrCodeEnable: [{ required: true, message: '是否开启钱包二维码自动刷新', trigger: 'change' }],
refreshQrCodeFre: [{ required: true, message: '钱包二维码自动刷新间隔', trigger: 'blur' }],
})
onMounted(() => {
getwalletRechargePackageData('1')
})
// 提交
const onSubmit = async () => {
const valid = await dataFormRef.value.validate().catch(() => { });
if (!valid) return false;
try {
loading.value = true;
const pa = {
...form,
payPrice: storePrice(form.payPrice),
bonusPrice: storePrice(form.bonusPrice),
}
await putObj(pa)
useMessage().success('修改成功');
} catch (err: any) {
useMessage().error(err.msg);
} finally {
loading.value = false;
}
};
// 初始化表单数据
const getwalletRechargePackageData = (id: string) => {
// 获取数据
loading.value = true
getObj(id).then((res: any) => {
Object.assign(form, res.data)
}).finally(() => {
loading.value = false
})
};
</script>
@@ -0,0 +1,99 @@
<template>
<div class="w100">
<div class="layout-padding-auto layout-padding-view">
<div class="flex justify-center flex-col">
<div>
<el-form ref="dataFormRef" label-width="120px" :model="form" :rules="dataRules" formDialogRef
v-loading="loading">
<el-row :gutter="24">
<el-col :span="24" class="mb20">
<el-form-item label="每一餐的上限" prop="payAmountEnable">
<el-switch active-value="1" inactive-value="0" v-model="form.payAmountEnable"
active-text="开启" inactive-text="关闭" inline-prompt />
</el-form-item>
</el-col>
<el-col :span="24" class="mb20">
<el-form-item label="每一餐的上限" prop="payAmountMealLimit">
<el-input style="width: 300px;" type="number" v-model="form.payAmountMealLimit"
placeholder="请输入上限金额">
<template #append>元</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="24" class="mb20">
<el-form-item label="倍数" prop="payAmountMealTimes">
<el-input style="width: 300px;" type="number" v-model="form.payAmountMealTimes"
placeholder="请输入倍数">
<template #append>倍</template>
</el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="flex items-center">
<el-button type="primary" @click="onSubmit" :disabled="loading">确认</el-button>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup lang="ts" name="extra-price">
import { storePrice } from "/@/utils/formatMoney"
import { useMessage } from "/@/hooks/message"
import { getObj, putObj } from "/@/api/wallet/wallet-setting"
// 定义变量内容
const dataFormRef = ref();
const loading = ref(false)
// 提交表单数据
const form = reactive({
id: undefined,
payAmountEnable: undefined,
payAmountMealLimit: undefined,
payAmountMealTimes: undefined,
});
// 定义校验规则
const dataRules = ref({
payAmountEnable: [{ required: true, message: '请选择是否开启每一餐的上限', trigger: 'change' }],
payAmountMealLimit: [{ required: true, message: '请输入上限金额', trigger: 'blur' }],
payAmountMealTimes: [{ required: true, message: '请输入倍数', trigger: 'blur' }],
})
onMounted(() => {
getwalletRechargePackageData('1')
})
// 提交
const onSubmit = async () => {
const valid = await dataFormRef.value.validate().catch(() => { });
if (!valid) return false;
try {
loading.value = true;
const pa = {
...form,
payPrice: storePrice(form.payAmountMealLimit),
}
await putObj(pa)
useMessage().success('修改成功');
} catch (err: any) {
useMessage().error(err.msg);
} finally {
loading.value = false;
}
};
// 初始化表单数据
const getwalletRechargePackageData = (id: string) => {
// 获取数据
loading.value = true
getObj(id).then((res: any) => {
Object.assign(form, res.data)
}).finally(() => {
loading.value = false
})
};
</script>
@@ -0,0 +1,80 @@
<template>
<div class="w100">
<div class="layout-padding-auto layout-padding-view">
<div class="flex justify-center flex-col">
<div>
<el-form ref="dataFormRef" :model="form" :rules="dataRules" formDialogRef label-width="180px"
v-loading="loading">
<el-row :gutter="24">
<el-col :span="24" class="mb20">
<el-form-item label="离线订单是否需要审批" prop="offLineOrderApplyEnable">
<el-switch active-value="1" inactive-value="0"
v-model="form.offLineOrderApplyEnable" active-text="开启" inactive-text="关闭"
inline-prompt />
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<div class="flex items-center">
<el-button type="primary" @click="onSubmit" :disabled="loading">确认</el-button>
</div>
</div>
</div>
</div>
</template>
<script setup lang="ts" name="code">
import { useDict } from '/@/hooks/dict'
import { storePrice } from "/@/utils/formatMoney"
import { useMessage } from "/@/hooks/message"
import { getObj, putObj } from "/@/api/wallet/wallet-setting"
// 定义变量内容
const dataFormRef = ref();
const loading = ref(false)
// 提交表单数据
const form = reactive({
id: '',
offLineOrderApplyEnable: '',
});
// 定义校验规则
const dataRules = ref({
offLineOrderApplyEnable: [{ required: true, message: '离线订单是否需要审批', trigger: 'change' }],
})
onMounted(() => {
getwalletRechargePackageData('1')
})
// 提交
const onSubmit = async () => {
const valid = await dataFormRef.value.validate().catch(() => { });
if (!valid) return false;
try {
loading.value = true;
const pa = {
...form,
}
await putObj(pa)
useMessage().success('修改成功');
} catch (err: any) {
useMessage().error(err.msg);
} finally {
loading.value = false;
}
};
// 初始化表单数据
const getwalletRechargePackageData = (id: string) => {
// 获取数据
loading.value = true
getObj(id).then((res: any) => {
Object.assign(form, res.data)
}).finally(() => {
loading.value = false
})
};
</script>
@@ -0,0 +1,130 @@
<template>
<el-dialog :title="form.id ? '编辑' : '新增'" v-model="visible" width="30%" :close-on-click-modal="false" draggable>
<el-form ref="dataFormRef" :model="form" :rules="dataRules" formDialogRef label-width="90px" v-loading="loading">
<el-row :gutter="24">
<el-col :span="24" class="mb20">
<el-form-item label="套餐名" prop="name">
<el-input v-model="form.name" placeholder="请输入套餐名" />
</el-form-item>
</el-col>
<el-col :span="24" class="mb20">
<el-form-item label="支付金额" prop="payPrice">
<el-input-number v-model="form.payPrice" :min="0" :precision="2" :step="0.01" />
</el-form-item>
</el-col>
<el-col :span="24" class="mb20">
<el-form-item label="赠送金额" prop="bonusPrice">
<el-input-number v-model="form.bonusPrice" :min="0" :precision="2" :step="0.01" />
</el-form-item>
</el-col>
<el-col :span="24" class="mb20">
<el-form-item label="是否启用" prop="status">
<el-radio-group v-model="form.status">
<el-radio v-for="v in yes_no_type" :key="v.value" :label="v.value">
{{ v.label }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="visible = false">取消</el-button>
<el-button type="primary" @click="onSubmit" :disabled="loading">确认</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts" name="WalletRechargePackageDialog">
import { useDict } from '/@/hooks/dict';
import { useMessage } from "/@/hooks/message";
import { getObj, addObj, putObj } from "/@/api/wallet/wallet-recharge-package";
import { rule } from '/@/utils/validate';
import { storePrice } from "/@/utils/formatMoney"
const emit = defineEmits(['refresh']);
// 定义变量内容
const dataFormRef = ref();
const visible = ref(false)
const loading = ref(false)
// 定义查询字典
const { yes_no_type } = useDict('yes_no_type');
// 提交表单数据
const form = reactive({
id: '',
name: '',
payPrice: '',
bonusPrice: '',
status: "1",
});
// 定义校验规则
const dataRules = ref({
name: [{ required: true, message: '套餐名不能为空', trigger: 'blur' }],
payPrice: [{ required: true, message: '支付金额不能为空', trigger: 'blur' }],
bonusPrice: [{ required: true, message: '赠送金额不能为空', trigger: 'blur' }],
status: [{ required: true, message: '状态不能为空', trigger: 'blur' }]
})
// 打开弹窗
const openDialog = (id: string) => {
visible.value = true
form.id = ''
// 重置表单数据
nextTick(() => {
dataFormRef.value?.resetFields();
});
// 获取walletRechargePackage信息
if (id) {
form.id = id
getwalletRechargePackageData(id)
}
};
// 提交
const onSubmit = async () => {
const valid = await dataFormRef.value.validate().catch(() => { });
if (!valid) return false;
try {
loading.value = true;
const pa = {
...form,
payPrice: storePrice(form.payPrice),
bonusPrice: storePrice(form.bonusPrice),
}
form.id ? await putObj(pa) : await addObj(pa);
useMessage().success(form.id ? '修改成功' : '添加成功');
visible.value = false;
emit('refresh');
} catch (err: any) {
useMessage().error(err.msg);
} finally {
loading.value = false;
}
};
// 初始化表单数据
const getwalletRechargePackageData = (id: string) => {
// 获取数据
loading.value = true
getObj(id).then((res: any) => {
Object.assign(form, res.data)
}).finally(() => {
loading.value = false
})
};
// 暴露变量
defineExpose({
openDialog
});
</script>
@@ -0,0 +1,129 @@
<template>
<div class="w100">
<div class="layout-padding-auto layout-padding-view">
<el-row>
<div class="mb8" style="width: 100%">
<el-button icon="folder-add" type="primary" class="ml10" @click="formDialogRef.openDialog()"
v-auth="'wallet_walletRechargePackage_add'">
新 增
</el-button>
<el-button plain :disabled="multiple" icon="Delete" type="primary" v-auth="'wallet_walletRechargePackage_del'"
@click="handleDelete(selectObjs)">
删除
</el-button>
<right-toolbar :search="false" :export="false" v-model:showSearch="showSearch" @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 :cell-style="tableStyle.cellStyle"
:header-cell-style="tableStyle.headerCellStyle" @selection-change="selectionChangHandle"
@sort-change="sortChangeHandle">
<el-table-column type="selection" width="40" align="center" />
<el-table-column type="index" label="#" width="40" />
<el-table-column prop="name" label="套餐名" />
<el-table-column prop="payPrice" label="支付金额">
<template #default="{ row }">
<div class="color-primary">{{ displayPrice(row.payPrice) }}</div>
</template>
</el-table-column>
<el-table-column prop="bonusPrice" label="赠送金额">
<template #default="{ row }">
<div class="color-success">{{ displayPrice(row.bonusPrice) }}</div>
</template>
</el-table-column>
<el-table-column prop="status" label="是否启用">
<template #default="{ row }">
<dict-tag :options="yes_no_type" :value="row.status" />
</template>
</el-table-column>
<el-table-column prop="createTime" width="200" label="创建时间" show-overflow-tooltip />
<el-table-column label="操作" width="150">
<template #default="scope">
<el-button icon="edit-pen" text type="primary" v-auth="'wallet_walletRechargePackage_edit'"
@click="formDialogRef.openDialog(scope.row.id)">编辑</el-button>
<el-button icon="delete" text type="primary" v-auth="'wallet_walletRechargePackage_del'"
@click="handleDelete([scope.row.id])">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle" v-bind="state.pagination" />
</div>
<!-- 编辑、新增 -->
<form-dialog ref="formDialogRef" @refresh="getDataList(false)" />
</div>
</template>
<script setup lang="ts" name="recharge-package">
import { BasicTableProps, useTable } from "/@/hooks/table";
import { fetchList, delObjs } from "/@/api/wallet/wallet-recharge-package";
import { useMessage, useMessageBox } from "/@/hooks/message";
import { useDict } from '/@/hooks/dict';
import { displayPrice } from "/@/utils/formatMoney"
// 引入组件
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
// 定义查询字典
const { yes_no_type } = useDict('yes_no_type');
// 定义变量内容
const formDialogRef = ref()
// 搜索变量
const queryRef = ref()
const showSearch = ref(true)
// 多选变量
const selectObjs = ref([]) as any
const multiple = ref(true)
const state: BasicTableProps = reactive<BasicTableProps>({
queryForm: {},
pageList: fetchList
})
// table hook
const {
getDataList,
currentChangeHandle,
sizeChangeHandle,
sortChangeHandle,
downBlobFile,
tableStyle
} = useTable(state)
// 清空搜索条件
const resetQuery = () => {
// 清空搜索条件
queryRef.value?.resetFields()
// 清空多选
selectObjs.value = []
getDataList()
}
// 导出excel
const exportExcel = () => {
downBlobFile('/wallet/wallet-recharge-package/export', Object.assign(state.queryForm, { ids: selectObjs }), 'walletRechargePackage.xlsx')
}
// 多选事件
const selectionChangHandle = (objs: { id: string }[]) => {
selectObjs.value = objs.map(({ id }) => id);
multiple.value = !objs.length;
};
// 删除操作
const handleDelete = async (ids: string[]) => {
try {
await useMessageBox().confirm('此操作将永久删除');
} catch {
return;
}
try {
await delObjs(ids);
getDataList();
useMessage().success('删除成功');
} catch (err: any) {
useMessage().error(err.msg);
}
};
</script>
@@ -0,0 +1,94 @@
<template>
<div class="w100">
<div class="layout-padding-auto layout-padding-view">
<div class="flex justify-center flex-col">
<div>
<el-form ref="dataFormRef" :model="form" :rules="dataRules" formDialogRef label-width="90px"
v-loading="loading">
<el-row :gutter="24">
<el-col :span="24" class="mb20">
<el-form-item label="退款理由" prop="afterSaleRefundReasons">
<el-select style="width: 500px;" v-model="form.afterSaleRefundReasons" allow-create
filterable multiple placeholder="请输入退款理由">
<el-option v-for="reason in form.afterSaleRefundReasons" :key="reason"
:label="reason" :value="reason" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="24" class="mb20">
<el-form-item label="退货理由" prop="afterSaleReturnReasons">
<el-select style="width: 500px;" v-model="form.afterSaleReturnReasons" allow-create
filterable multiple placeholder="请输入退货理由">
<el-option v-for="reason in form.afterSaleReturnReasons" :key="reason"
:label="reason" :value="reason" />
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="flex items-center">
<el-button type="primary" @click="onSubmit" :disabled="loading">确认</el-button>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup lang="ts" name="refund">
import { storePrice } from "/@/utils/formatMoney"
import { useMessage } from "/@/hooks/message"
import { getObj, putObj } from "/@/api/wallet/wallet-setting"
// 定义变量内容
const dataFormRef = ref();
const loading = ref(false)
// 提交表单数据
const form = reactive({
id: undefined,
afterSaleRefundReasons: undefined,
afterSaleReturnReasons: undefined,
});
// 定义校验规则
const dataRules = ref({
afterSaleRefundReasons: [{ required: true, message: '请输入退款理由', trigger: 'blur' }],
afterSaleReturnReasons: [{ required: true, message: '请输入退货理由', trigger: 'blur' }],
})
onMounted(() => {
getwalletRechargePackageData('1')
})
// 提交
const onSubmit = async () => {
const valid = await dataFormRef.value.validate().catch(() => { });
if (!valid) return false;
try {
loading.value = true;
const pa = {
...form,
payPrice: storePrice(form.payPrice),
bonusPrice: storePrice(form.bonusPrice),
}
await putObj(pa)
useMessage().success('修改成功');
} catch (err: any) {
useMessage().error(err.msg);
} finally {
loading.value = false;
}
};
// 初始化表单数据
const getwalletRechargePackageData = (id: string) => {
// 获取数据
loading.value = true
getObj(id).then((res: any) => {
Object.assign(form, res.data)
}).finally(() => {
loading.value = false
})
};
</script>
+45
View File
@@ -0,0 +1,45 @@
<template>
<div class="layout-padding">
<div class="layout-padding-auto layout-padding-view">
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
<div v-for="(v) in data.tabList" :key="v.id">
<el-tab-pane :label="v.label" :name="v.id">
<div></div>
</el-tab-pane>
</div>
</el-tabs>
<div class="flex justify-center">
<recharge-package v-if="activeName == 10" />
<extra-price v-if="activeName == 20" />
<refund v-if="activeName == 30" />
<Code v-if="activeName == 40" />
<off-line v-if="activeName == 50" />
</div>
</div>
</div>
</template>
<script setup lang="ts">
const RechargePackage = defineAsyncComponent(() => import('./components/recharge-package/index.vue'));
const Code = defineAsyncComponent(() => import('./components/code/index.vue'));
const Refund = defineAsyncComponent(() => import('./components/refund/index.vue'));
const OffLine = defineAsyncComponent(() => import('./components/off-line/index.vue'));
const ExtraPrice = defineAsyncComponent(() => import('./components/extra-price/index.vue'));
const data = {
tabList: [
{ id: 10, label: "充值套餐" },
{ id: 20, label: "每餐额定金额配置" },
{ id: 30, label: "退款配置" },
{ id: 40, label: "二维码配置" },
{ id: 50, label: "离线配置" },
]
}
const activeName = ref(data.tabList[0].id)
const handleClick = (e: any) => {
}
</script>
+50 -40
View File
@@ -1,35 +1,41 @@
<template>
<el-dialog :title="form.id ? '编辑' : '新增'" v-model="visible"
:close-on-click-modal="false" draggable>
<el-form ref="dataFormRef" :model="form" :rules="dataRules" formDialogRef label-width="90px" v-loading="loading">
<el-row :gutter="24">
<el-col :span="24" class="mb20">
<el-form-item label="部门id" prop="deptId">
<el-input v-model="form.deptId" placeholder="请输入部门id"/>
</el-form-item>
</el-col>
<el-dialog title="申请" width="30%" v-model="visible" :close-on-click-modal="false" draggable>
<el-form ref="dataFormRef" :model="form" :rules="dataRules" formDialogRef label-width="90px" v-loading="loading">
<el-row :gutter="24">
<el-col :span="24" class="mb20">
<el-form-item label="申请人id" prop="userId">
<el-input v-model="form.userId" placeholder="请输入申请人id"/>
</el-form-item>
</el-col>
<el-col :span="24" class="mb20">
<el-form-item label="申请人" prop="userId">
<select-user v-model="form.userId" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="visible = false">取消</el-button>
<el-button type="primary" @click="onSubmit" :disabled="loading">确认</el-button>
</span>
</template>
</el-dialog>
<el-col :span="24" class="mb20">
<el-form-item label="申请数量" prop="count">
<el-input-number v-model="form.count" :min="1" :max="100" />
</el-form-item>
</el-col>
<el-col :span="24" class="mb20">
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" type="textarea" :autosize="{ minRows: 6 }" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="visible = false">取消</el-button>
<el-button type="primary" @click="onSubmit" :disabled="loading">确认</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts" name="WalletStrideDialog">
import { useDict } from '/@/hooks/dict';
import { useMessage } from "/@/hooks/message";
import { getObj, addObj, putObj } from '/@/api/admin/walletStride'
import { putObj, addObj, getObj } from "/@/api/wallet/wallet-stride";
import { rule } from '/@/utils/validate';
const emit = defineEmits(['refresh']);
@@ -41,13 +47,17 @@ const loading = ref(false)
// 提交表单数据
const form = reactive({
id:'',
deptId: '',
userId: '',
id: '',
userId: '',
count: '',
remark: '',
});
// 定义校验规则
const dataRules = ref({
count: [{ required: true, message: '申请数量不能为空', trigger: 'blur' }],
userId: [{ required: true, message: '申请人id不能为空', trigger: 'blur' }],
status: [{ required: true, message: '审核状态不能为空', trigger: 'blur' }]
})
// 打开弹窗
@@ -56,9 +66,9 @@ const openDialog = (id: string) => {
form.id = ''
// 重置表单数据
nextTick(() => {
dataFormRef.value?.resetFields();
});
nextTick(() => {
dataFormRef.value?.resetFields();
});
// 获取walletStride信息
if (id) {
@@ -69,18 +79,18 @@ const openDialog = (id: string) => {
// 提交
const onSubmit = async () => {
const valid = await dataFormRef.value.validate().catch(() => {});
if (!valid) return false;
const valid = await dataFormRef.value.validate().catch(() => { });
if (!valid) return false;
try {
try {
loading.value = true;
form.id ? await putObj(form) : await addObj(form);
useMessage().success(form.id ? '修改成功' : '添加成功');
visible.value = false;
emit('refresh');
} catch (err: any) {
useMessage().error(err.msg);
} finally {
form.id ? await putObj(form) : await addObj(form);
useMessage().success(form.id ? '修改成功' : '添加成功');
visible.value = false;
emit('refresh');
} catch (err: any) {
useMessage().error(err.msg);
} finally {
loading.value = false;
}
};
+55 -21
View File
@@ -1,36 +1,62 @@
<template>
<div class="layout-padding">
<div class="layout-padding-auto layout-padding-view">
<el-form ref="queryRef" :inline="true" :model="state.queryForm" @keyup.enter="getDataList">
<el-row :gutter="24">
<el-col :span="4">
<el-form-item class="w100" label="用户" prop="userIds">
<select-user v-model="state.queryForm.userIds" />
</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 icon="folder-add" type="primary" class="ml10" @click="formDialogRef.openDialog()"
v-auth="'admin_walletStride_add'">
新 增
申 请
</el-button>
<el-button plain :disabled="multiple" icon="Delete" type="primary"
v-auth="'admin_walletStride_del'" @click="handleDelete(selectObjs)">
<el-button plain :disabled="multiple" icon="Delete" type="primary" v-auth="'admin_walletStride_del'"
@click="handleDelete(selectObjs)">
删除
</el-button>
<right-toolbar v-model:showSearch="showSearch" :export="'admin_walletStride_export'"
@exportExcel="exportExcel" class="ml10 mr20" style="float: right;"
@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
:cell-style="tableStyle.cellStyle" :header-cell-style="tableStyle.headerCellStyle"
@selection-change="selectionChangHandle"
<el-table :data="state.dataList" v-loading="state.loading" border :cell-style="tableStyle.cellStyle"
:header-cell-style="tableStyle.headerCellStyle" @selection-change="selectionChangHandle"
@sort-change="sortChangeHandle">
<el-table-column type="selection" width="40" align="center" />
<el-table-column type="index" label="#" width="40" />
<el-table-column prop="deptId" label="部门id" show-overflow-tooltip/>
<el-table-column prop="count" label="申请数量" show-overflow-tooltip/>
<el-table-column prop="useCount" label="使用数量" show-overflow-tooltip/>
<el-table-column prop="userId" label="申请人id" show-overflow-tooltip/>
<el-table-column label="操作" width="150">
<template #default="scope">
<el-button icon="edit-pen" text type="primary" v-auth="'admin_walletStride_edit'"
@click="formDialogRef.openDialog(scope.row.id)">编辑</el-button>
<el-button icon="delete" text type="primary" v-auth="'admin_walletStride_del'" @click="handleDelete([scope.row.id])">删除</el-button>
<el-table-column prop="username" label="申请人" />
<el-table-column prop="deptName" label="部门" />
<el-table-column prop="count" label="申请数量" />
<el-table-column prop="useCount" label="使用数量" />
<el-table-column prop="processStatus" label="审核状态">
<template #default="{ row }">
<dict-tag :options="check_status" :value="row.processStatus" />
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建时间" />
<el-table-column label="操作" width="200">
<template #default="{ row }">
<el-button v-if="false" icon="edit-pen" text type="primary" v-auth="'admin_walletStride_edit'"
@click="formDialogRef.openDialog(row.id)">编辑</el-button>
<el-button v-if="false" icon="delete" text type="primary" v-auth="'admin_walletStride_del'"
@click="handleDelete([row.id])">删除</el-button>
<el-button icon="InfoFilled" text type="primary" @click="codeUseTableRef.openDialog(row.id)">
使用情况
</el-button>
<el-button icon="Promotion" text type="primary" v-auth="'admin_walletStride_del'" @click="doInfo(row)">
查看审批
</el-button>
</template>
</el-table-column>
</el-table>
@@ -39,22 +65,26 @@
<!-- 编辑、新增 -->
<form-dialog ref="formDialogRef" @refresh="getDataList(false)" />
<code-use-table ref="codeUseTableRef" />
</div>
</template>
<script setup lang="ts" name="systemWalletStride">
import { BasicTableProps, useTable } from "/@/hooks/table";
import { fetchList, delObjs } from "/@/api/admin/walletStride";
import { fetchList, delObjs, pageJoin } from "/@/api/wallet/wallet-stride";
import { useMessage, useMessageBox } from "/@/hooks/message";
import { useDict } from '/@/hooks/dict';
const { push } = useRouter()
// 引入组件
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
const CodeUseTable = defineAsyncComponent(() => import('../components/code-use-table.vue'));
// 定义查询字典
const { check_status, yes_no_type } = useDict('check_status', 'yes_no_type');
// 定义变量内容
const formDialogRef = ref()
const codeUseTableRef = ref()
// 搜索变量
const queryRef = ref()
const showSearch = ref(true)
@@ -64,7 +94,7 @@ const multiple = ref(true)
const state: BasicTableProps = reactive<BasicTableProps>({
queryForm: {},
pageList: fetchList
pageList: pageJoin
})
// table hook
@@ -74,7 +104,7 @@ const {
sizeChangeHandle,
sortChangeHandle,
downBlobFile,
tableStyle
tableStyle
} = useTable(state)
// 清空搜索条件
@@ -86,6 +116,10 @@ const resetQuery = () => {
getDataList()
}
const doInfo = (row: any) => {
push({ path: '/flow/task/started', query: { id: row.id } })
}
// 导出excel
const exportExcel = () => {
downBlobFile('/admin/walletStride/export', Object.assign(state.queryForm, { ids: selectObjs }), 'walletStride.xlsx')
+96
View File
@@ -0,0 +1,96 @@
<template>
<el-dialog :title="form.id ? '编辑' : '新增'" v-model="visible" :close-on-click-modal="false" draggable>
<el-form ref="dataFormRef" :model="form" :rules="dataRules" formDialogRef label-width="90px" v-loading="loading">
<el-row :gutter="24">
<el-col :span="12" class="mb20">
<el-form-item label="会员钱包 id" prop="walletId">
<el-input v-model="form.walletId" placeholder="请输入会员钱包 id" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="visible = false">取消</el-button>
<el-button type="primary" @click="onSubmit" :disabled="loading">确认</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts" name="WalletRechargeDialog">
import { useDict } from '/@/hooks/dict';
import { useMessage } from "/@/hooks/message";
import { getObj, addObj, putObj } from "/@/api/wallet/wallet-recharge";
import { rule } from '/@/utils/validate';
const emit = defineEmits(['refresh']);
// 定义变量内容
const dataFormRef = ref();
const visible = ref(false)
const loading = ref(false)
// 定义字典
// 提交表单数据
const form = reactive({
id: '',
walletId: '',
});
// 定义校验规则
const dataRules = ref({
})
// 打开弹窗
const openDialog = (id: string) => {
visible.value = true
form.id = ''
// 重置表单数据
nextTick(() => {
dataFormRef.value?.resetFields();
});
// 获取walletRecharge信息
if (id) {
form.id = id
getwalletRechargeData(id)
}
};
// 提交
const onSubmit = async () => {
const valid = await dataFormRef.value.validate().catch(() => { });
if (!valid) return false;
try {
loading.value = true;
form.id ? await putObj(form) : await addObj(form);
useMessage().success(form.id ? '修改成功' : '添加成功');
visible.value = false;
emit('refresh');
} catch (err: any) {
useMessage().error(err.msg);
} finally {
loading.value = false;
}
};
// 初始化表单数据
const getwalletRechargeData = (id: string) => {
// 获取数据
loading.value = true
getObj(id).then((res: any) => {
Object.assign(form, res.data)
}).finally(() => {
loading.value = false
})
};
// 暴露变量
defineExpose({
openDialog
});
</script>
+111
View File
@@ -0,0 +1,111 @@
<template>
<div class="layout-padding">
<div class="layout-padding-auto layout-padding-view">
<el-row>
<div class="mb8" style="width: 100%">
<right-toolbar :search="false" v-model:showSearch="showSearch" :export="'wallet_walletRecharge_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 :cell-style="tableStyle.cellStyle"
:header-cell-style="tableStyle.headerCellStyle" @selection-change="selectionChangHandle"
@sort-change="sortChangeHandle">
<el-table-column type="selection" width="40" align="center" />
<el-table-column type="index" label="#" width="40" />
<el-table-column prop="username" label="用户" show-overflow-tooltip />
<el-table-column prop="userAvatar" label="头像" show-overflow-tooltip>
<template #default="{ row }">
<preview-image :src="row.userAvatar" />
</template>
</el-table-column>
<el-table-column prop="userMobile" width="120" label="手机号" show-overflow-tooltip />
<el-table-column label="操作" width="150">
<template #default="scope">
<el-button icon="edit-pen" text type="primary" v-auth="'wallet_walletRecharge_edit'"
@click="formDialogRef.openDialog(scope.row.id)">编辑</el-button>
<el-button icon="delete" text type="primary" v-auth="'wallet_walletRecharge_del'"
@click="handleDelete([scope.row.id])">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle" v-bind="state.pagination" />
</div>
<!-- 编辑、新增 -->
<form-dialog ref="formDialogRef" @refresh="getDataList(false)" />
</div>
</template>
<script setup lang="ts" name="systemWalletRecharge">
import { BasicTableProps, useTable } from "/@/hooks/table";
import { fetchList, delObjs, pageJoin } from "/@/api/wallet/wallet-recharge";
import { useMessage, useMessageBox } from "/@/hooks/message";
import { useDict } from '/@/hooks/dict';
// 引入组件
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
// 定义查询字典
// 定义变量内容
const formDialogRef = ref()
// 搜索变量
const queryRef = ref()
const showSearch = ref(true)
// 多选变量
const selectObjs = ref([]) as any
const multiple = ref(true)
const state: BasicTableProps = reactive<BasicTableProps>({
queryForm: {},
pageList: pageJoin
})
// table hook
const {
getDataList,
currentChangeHandle,
sizeChangeHandle,
sortChangeHandle,
downBlobFile,
tableStyle
} = useTable(state)
// 清空搜索条件
const resetQuery = () => {
// 清空搜索条件
queryRef.value?.resetFields()
// 清空多选
selectObjs.value = []
getDataList()
}
// 导出excel
const exportExcel = () => {
downBlobFile('/wallet/walletRecharge/export', Object.assign(state.queryForm, { ids: selectObjs }), 'walletRecharge.xlsx')
}
// 多选事件
const selectionChangHandle = (objs: { id: string }[]) => {
selectObjs.value = objs.map(({ id }) => id);
multiple.value = !objs.length;
};
// 删除操作
const handleDelete = async (ids: string[]) => {
try {
await useMessageBox().confirm('此操作将永久删除');
} catch {
return;
}
try {
await delObjs(ids);
getDataList();
useMessage().success('删除成功');
} catch (err: any) {
useMessage().error(err.msg);
}
};
</script>
+96
View File
@@ -0,0 +1,96 @@
<template>
<el-dialog :title="form.id ? '编辑' : '新增'" v-model="visible" :close-on-click-modal="false" draggable>
<el-form ref="dataFormRef" :model="form" :rules="dataRules" formDialogRef label-width="90px" v-loading="loading">
<el-row :gutter="24">
<el-col :span="12" class="mb20">
<el-form-item label="会员钱包 id" prop="walletId">
<el-input v-model="form.walletId" placeholder="请输入会员钱包 id" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="visible = false">取消</el-button>
<el-button type="primary" @click="onSubmit" :disabled="loading">确认</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts" name="WalletRechargeDialog">
import { useDict } from '/@/hooks/dict';
import { useMessage } from "/@/hooks/message";
import { getObj, addObj, putObj } from "/@/api/wallet/wallet-recharge";
import { rule } from '/@/utils/validate';
const emit = defineEmits(['refresh']);
// 定义变量内容
const dataFormRef = ref();
const visible = ref(false)
const loading = ref(false)
// 定义字典
// 提交表单数据
const form = reactive({
id: '',
walletId: '',
});
// 定义校验规则
const dataRules = ref({
})
// 打开弹窗
const openDialog = (id: string) => {
visible.value = true
form.id = ''
// 重置表单数据
nextTick(() => {
dataFormRef.value?.resetFields();
});
// 获取walletRecharge信息
if (id) {
form.id = id
getwalletRechargeData(id)
}
};
// 提交
const onSubmit = async () => {
const valid = await dataFormRef.value.validate().catch(() => { });
if (!valid) return false;
try {
loading.value = true;
form.id ? await putObj(form) : await addObj(form);
useMessage().success(form.id ? '修改成功' : '添加成功');
visible.value = false;
emit('refresh');
} catch (err: any) {
useMessage().error(err.msg);
} finally {
loading.value = false;
}
};
// 初始化表单数据
const getwalletRechargeData = (id: string) => {
// 获取数据
loading.value = true
getObj(id).then((res: any) => {
Object.assign(form, res.data)
}).finally(() => {
loading.value = false
})
};
// 暴露变量
defineExpose({
openDialog
});
</script>
+111
View File
@@ -0,0 +1,111 @@
<template>
<div class="layout-padding">
<div class="layout-padding-auto layout-padding-view">
<el-row>
<div class="mb8" style="width: 100%">
<right-toolbar :search="false" v-model:showSearch="showSearch" :export="'wallet_walletRecharge_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 :cell-style="tableStyle.cellStyle"
:header-cell-style="tableStyle.headerCellStyle" @selection-change="selectionChangHandle"
@sort-change="sortChangeHandle">
<el-table-column type="selection" width="40" align="center" />
<el-table-column type="index" label="#" width="40" />
<el-table-column prop="username" label="用户" show-overflow-tooltip />
<el-table-column prop="userAvatar" label="头像" show-overflow-tooltip>
<template #default="{ row }">
<preview-image :src="row.userAvatar" />
</template>
</el-table-column>
<el-table-column prop="userMobile" width="120" label="手机号" show-overflow-tooltip />
<el-table-column label="操作" width="150">
<template #default="scope">
<el-button icon="edit-pen" text type="primary" v-auth="'wallet_walletRecharge_edit'"
@click="formDialogRef.openDialog(scope.row.id)">编辑</el-button>
<el-button icon="delete" text type="primary" v-auth="'wallet_walletRecharge_del'"
@click="handleDelete([scope.row.id])">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle" v-bind="state.pagination" />
</div>
<!-- 编辑、新增 -->
<form-dialog ref="formDialogRef" @refresh="getDataList(false)" />
</div>
</template>
<script setup lang="ts" name="systemWalletRecharge">
import { BasicTableProps, useTable } from "/@/hooks/table";
import { fetchList, delObjs, pageJoin } from "/@/api/wallet/wallet-recharge";
import { useMessage, useMessageBox } from "/@/hooks/message";
import { useDict } from '/@/hooks/dict';
// 引入组件
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
// 定义查询字典
// 定义变量内容
const formDialogRef = ref()
// 搜索变量
const queryRef = ref()
const showSearch = ref(true)
// 多选变量
const selectObjs = ref([]) as any
const multiple = ref(true)
const state: BasicTableProps = reactive<BasicTableProps>({
queryForm: {},
pageList: pageJoin
})
// table hook
const {
getDataList,
currentChangeHandle,
sizeChangeHandle,
sortChangeHandle,
downBlobFile,
tableStyle
} = useTable(state)
// 清空搜索条件
const resetQuery = () => {
// 清空搜索条件
queryRef.value?.resetFields()
// 清空多选
selectObjs.value = []
getDataList()
}
// 导出excel
const exportExcel = () => {
downBlobFile('/wallet/walletRecharge/export', Object.assign(state.queryForm, { ids: selectObjs }), 'walletRecharge.xlsx')
}
// 多选事件
const selectionChangHandle = (objs: { id: string }[]) => {
selectObjs.value = objs.map(({ id }) => id);
multiple.value = !objs.length;
};
// 删除操作
const handleDelete = async (ids: string[]) => {
try {
await useMessageBox().confirm('此操作将永久删除');
} catch {
return;
}
try {
await delObjs(ids);
getDataList();
useMessage().success('删除成功');
} catch (err: any) {
useMessage().error(err.msg);
}
};
</script>