Browse Source

测试一下

lihuilin/feature-20250623164044-金币前端
lihuilin 1 day ago
parent
commit
9f8855cafe
  1. 127
      src/views/audit/refundAudit.vue
  2. 499
      src/views/permissions/index.vue
  3. 23
      src/views/permissions/permission.vue
  4. 13
      src/views/workspace/index.vue

127
src/views/audit/refundAudit.vue

@ -9,16 +9,22 @@
<el-input v-model="searchForm.jwcode" placeholder="请输入精网号" style="width: 240px" clearable />
</el-col>
<el-col :span="6">
<el-text size="large">退款类型</el-text>
<el-select v-model="searchForm.refundType" placeholder="请选择" style="width: 240px" clearable>
<el-option label="商品退款" value="商品退款" />
<el-option label="退点啥??" value="退点啥??" />
<el-text size="large">商品名</el-text>
<el-select v-model="searchForm.refundGoods" placeholder="请输入商品名" style="width: 240px" clearable>
<el-option v-for="item in refundGoodsOptions" :key="item" :label="item" :value="item"> </el-option>
</el-select>
</el-col>
<el-col :span="6">
<el-text size="large">退款方式</el-text>
<el-select v-model="searchForm.refundModel" placeholder="请选择" style="width: 240px" clearable>
<el-option label="全部退款" value="全部退款" />
<el-option label="部分退款" value="部分退款" />
</el-select>
</el-col>
<el-col :span="6">
<el-text size="large">所属地区</el-text>
<el-select v-model="searchForm.area" placeholder="请选择" style="width: 240px" clearable>
<el-option v-for="item in areaOptions" :key="item" :label="item" :value="item" />
<el-select v-model="searchForm.market" placeholder="请选择" style="width: 240px" clearable>
<el-option v-for="item in marketOptions" :key="item" :label="item" :value="item" />
</el-select>
</el-col>
</el-row>
@ -58,30 +64,29 @@
<el-table :data="tableData" height="540px" @sort-change="handleSortChange">
<el-table-column type="index" label="序号" width="60" />
<el-table-column prop="username" label="姓名" width="120" />
<el-table-column prop="name" label="姓名" width="120" />
<el-table-column prop="jwcode" label="精网号" width="120" />
<el-table-column prop="area" label="所属地区" width="120" />
<el-table-column prop="market" label="所属地区" width="120" />
<el-table-column prop="refundType" label="退款类型" width="120" />
<el-table-column prop="refundMethod" label="退款方式" width="120" />
<el-table-column prop="refundGoods" label="退款商品" width="120" />
<el-table-column prop="refundAmount" label="退款金额" width="120" sortable="custom">
<el-table-column prop="refundModel" label="退款方式" width="120" />
<el-table-column prop="goodsName" label="退款商品" width="120" />
<el-table-column prop="sumGold" label="退款金额" width="120" sortable="custom">
<template #default="{ row }">
{{ row.rechargeCoin + row.freeCoin + row.taskCoin }}
</template>
</el-table-column>
<el-table-column prop="rechargeCoin" label="永久金币" width="120" sortable="custom" />
<el-table-column prop="freeCoin" label="免费金币" width="120" sortable="custom" />
<el-table-column prop="taskCoin" label="任务金币" width="120" sortable="custom" />
<el-table-column prop="permanentGold" label="永久金币" width="120" sortable="custom" />
<el-table-column prop="freeGold" label="免费金币" width="120" sortable="custom" />
<el-table-column prop="taskGold" label="任务金币" width="120" sortable="custom" />
<el-table-column prop="remark" label="备注" width="150" show-overflow-tooltip /><!-- 当内容过长被隐藏时显示 tooltip -->
<el-table-column prop="adminName" label="提交人" width="120" />
<el-table-column v-if="checkTab === 'rejected'" prop="reason" label="驳回理由" width="150" show-overflow-tooltip />
<el-table-column v-if="checkTab === 'rejected'" prop="rejectReason" label="驳回理由" width="150" show-overflow-tooltip />
<el-table-column v-if="checkTab !== 'pending'" prop="auditName" label="审核人" width="120" />
<el-table-column prop="createTime" label="提交时间" width="180" sortable="custom">
<template #default="{ row }">
{{ moment(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}
</template>
</el-table-column>
<el-table-column v-if="checkTab !== 'pending'" prop="auditTime" label="审核时间" width="180" sortable="custom">
<template #default="{ row }">
{{ row.auditTime ? moment(row.auditTime).format('YYYY-MM-DD HH:mm:ss') : '--' }}
@ -106,7 +111,7 @@
<el-dialog v-model="rejectDialog" title="驳回理由" width="500px">
<el-form :model="rejectForm">
<el-form-item label="驳回理由">
<el-input v-model="rejectForm.reason" type="textarea" :rows="4" placeholder="请输入驳回理由" maxlength="200"
<el-input v-model="rejectForm.reason" type="textmarket" :rows="4" placeholder="请输入驳回理由" maxlength="200"
show-word-limit />
</el-form-item>
</el-form>
@ -133,11 +138,12 @@ const STATUS = {
//
const searchForm = ref({
jwcode: '',
refundType: '',
refundModel: '',
refundGoods: '',
area: '',
market: '',
startDate: '',
endDate: ''
endDate: '',
auditStatus: '0',
})
const checkTab = ref('pending') // STATUS123statusInteger
@ -150,8 +156,8 @@ const pagination = ref({
})
const tableData = ref([])
const product = ref([])
const areaOptions = ref([])
const marketOptions = ref([])
const refundGoodsOptions = ref([])
const adminInfo = ref({})
const stats = ref({
totalItems: 0,
@ -165,37 +171,36 @@ const rejectDialog = ref(false) // 驳回对话框
const rejectForm = ref({ reason: '' })
const currentRecord = ref(null)
//
const getAdminInfo = async () => {
try {
const res = await request({ url: '' })
adminInfo.value = res
if (res.area !== '总部') {
searchForm.value.area = res.area
}
} catch (error) {
console.error('获取用户信息失败', error)
}
}
//
const getProducts = async () => {
try {
const res = await request({ url: '' })
product.value = res.data || []
} catch (error) {
console.error('获取商品列表失败', error)
}
}
// const getAdminInfo = async () => {
// try {
// const res = await request({ url: '' })
// adminInfo.value = res
// if (res.market !== '') {
// searchForm.value.market = res.market
// }
// } catch (error) {
// console.error('', error)
// }
// }
//
const getAreas = async () => {
const getmarkets = async () => {
try {
const result = await request({ url: 'http://192.168.8.247:8081/general/market' })
areaOptions.value = result.data || []
const result = await request({ url: 'general/market' })
marketOptions.value = result.data || []
} catch (error) {
console.error('获取地区列表失败', error)
}
}
//
const getRefundGoods = async () => {
try{
const res = await request({ url: '/general/goods' })
refundGoodsOptions.value = res.data || []
}catch (error) {
console.error('获取商品列表失败', error)
}
}
const get = async () => {
console.log('===========================================' + checkTab.value)
@ -203,9 +208,8 @@ const get = async () => {
const params = {
pageNum: pagination.value.pageNum,
pageSize: pagination.value.pageSize,
detail: {
...searchForm.value,
status: getCurrentStatus()
refundAudit: {
...searchForm.value
}
}
//
@ -215,14 +219,12 @@ const get = async () => {
}
const res = await request({
url: '',
url: '/audit/selectRefund',
data: params
})
tableData.value = res.data?.list || []
pagination.value.total = res.data?.total || 0
getStats()
tableData.value = res.list || []
pagination.value.total = res.total || 0
} catch (error) {
console.error('获取数据失败', error)
}
@ -232,7 +234,7 @@ const getStats = async () => {
try {
const params = { ...searchForm.value, status: getCurrentStatus() }
const res = await request({
url: '',
url: '/audit/refund',
data: params
})
@ -261,7 +263,7 @@ const resetSearch = () => {
jwcode: '',
refundType: '',
refundGoods: '',
area: adminInfo.value.area === '总部' ? '' : adminInfo.value.area,
market: adminInfo.value.market === '总部' ? '' : adminInfo.value.market,
startDate: '',
endDate: ''
}
@ -342,7 +344,7 @@ const approveRefund = async () => {
}
await request({
url: '',
url: '/audit/audit',
data: params
})
@ -370,7 +372,7 @@ const rejectRefund = async () => {
}
await request({
url: '',
url: '/audit/audit',
data: params
})
@ -384,11 +386,10 @@ const rejectRefund = async () => {
}
onMounted(async () => {
await getAdminInfo()//
await getProducts()
await getAreas()
get()
//await getAdminInfo()//
await getRefundGoods()
await getmarkets()
await get()
})
</script>

499
src/views/permissions/index.vue

@ -1,499 +0,0 @@
<script setup>
import { ref, onMounted, reactive, computed } from 'vue'
import { ElMessage } from 'element-plus'
import { UserFilled } from '@element-plus/icons-vue'
import _ from 'lodash'
import request from '@/util/http'
//
const tableData = ref([])
//
const total = ref(100)
// admin
const admin = ref({})
//
const getObj = ref({
pageNum: 1,
pageSize: 10
})
//
const addVisible = ref(false)
//
const editVisible = ref(false)
const area = ref([])
const store = ref([])//
//
const addInit = ref({})
//
const addObj = ref({})
//
const editObj = ref({})
//
const delObj = ref({})
// search
const get = async function (val) {
try {
if (admin.value.jwcode) {
admin.value.jwcode = admin.value.jwcode.replace(/\s/g, '');
}
if (typeof val === 'number') {
getObj.value.pageNum = val
} else {
getObj.value.pageNum = 1
}
const result = await request({
url: '',//
data: {
...getObj.value,
admin: { ...admin.value }
}
})
tableData.value = result.data.list
total.value = result.data.total
} catch (error) {
console.log('请求失败', error)
}
}
const reset = function () {
admin.value = {}
}
const getArea = async function () {
try {
const result = await request({
url: '',
data: {}
})
area.value = result.data
} catch (error) {
console.log('请求失败', error)
}
}
const getStore = async function () {
try {
const result = await request({
url: '',
data: {}
})
store.value = result.data
} catch (error) {
console.log('请求失败', error)
}
}
//
const openaddVisible = function () {
addVisible.value = true
}
//
const closeaddVisible = function () {
addVisible.value = false
}
//
const permissionAddInit = function () {
addInit.value = {}
openaddVisible()
}
const permissionAdd = async function () {
Ref.value.validate(async (valid) => {
if (valid) {
try {
addObj.value.adminFlag = 1
addObj.value.status1 = 1
const result = await request({
url: '',
data: addObj.value
})
if (result.code == 200) {
ElMessage.success('添加成功')
} else {
ElMessage.error(result.msg)
}
addObj.value = {}
closeaddVisible()
get()
} catch (error) {
console.log('新增用户权限失败', error)
ElMessage.error('新增用户权限失败')
closeaddVisible()
}
} else {
ElMessage({
type: 'error',
message: '请检查输入内容'
})
}
})
} // if-else
const rules = reactive({//
jwcode: [{ required: true, message: '请输入精网号', trigger: 'blur' }],
name: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
store: [{ required: true, message: '请输入职称', trigger: 'blur' }],
machineId: [{ required: true, message: '请输入精网号', trigger: 'blur' }],
area: [{ required: true, message: '请选择所属地区', trigger: 'blur' }],
permission: [{ required: true, message: '请选择权限', trigger: 'blur' }]
})
// ref
const Ref = ref(null)
// 使 _.throttle trailing false ?
const throttledPermissionAdd = _.throttle(permissionAdd, 5000, {
trailing: false
})
//
const list = [
{
label: '总部',
value: '1'
},
{
label: '',
value: ''
}
]
//
const areaList = ref([])
const getAreas = async function () {
try {
const result = await request({
url: '',
data: {}
})
console.log('result', result)
areaList.value = result.data
console.log('地区', area.value)
} catch (error) {
console.log('请求失败', error)
}
}
//
const openVisable = function () {
editVisible.value = true
}
//
const closeEdit = function () {
editVisible.value = false
}
//
const editInit = function (row) {
editObj.value = {}
editObj.value.jwcode = row.jwcode
editObj.value.name = row.name
editObj.value.area = row.area
editObj.value.store = row.store
editObj.value.permission = row.permission
console.log('编辑用户权限', editObj.value)
openVisable()
}
//
const permissionEdit = async function () {
try {
const result = await request({
url: '',
data: editObj.value
})
console.log('请求成功', result)
ElMessage.success('编辑用户权限成功')
closeEdit()
get()
} catch (error) {
ElMessage.error('编辑用户权限失败')
closeEdit()
}
}
const throttledPermissionEdit = _.throttle(permissionEdit, 5000, {
trailing: false
})
//
const del = function (row) {
delObj.value = {}
console.log(row, '删除初始化')
delObj.value.jwcode = row.jwcode
}
//
const delConfirm = async function () {
try {
delObj.value.permission = '4'
console.log(delObj.value)
const result = await request({
url: '',
data: delObj.value
})
console.log('请求成功', result)
ElMessage.success('删除权限成功')
delObj.value = {}
get()
} catch (error) {
console.log('删除权限失败', error)
ElMessage.error('删除权限失败')
get()
}
}
//
const editStatus = async function (row) {
try {
console.log(row)
editObj.value = {}
editObj.value.jwcode = row.jwcode
editObj.value.status1 = row.status1
console.log('修改用户权限状态', editObj.value)
const result = await request({
url: '',
data: editObj.value
})
console.log('请求成功', result)
ElMessage.success(
editObj.value.status1 == 1 ? '启用成功' : '禁用成功'
)
editObj.value = {}
get()
} catch (error) {
console.log('修改用户权限失败', error)
}
}
//
onMounted(async function () {
await get()
await getArea()
await getStore()
})
const handlePageSizeChange = function (val) {
getObj.value.pageSize = val
get()
}
const handleCurrentChange = function (val) {
getObj.value.pageNum = val
get()
}
</script>
<template>
<el-row>
<el-col>
<el-card style="margin-bottom: 20px">
<div style="display:flex">
<div>
<el-text size="large">OA号</el-text>
<el-input v-model="admin.jwcode" style="width: 240px" placeholder="请输入OA号" clearable />
</div>
<div style="margin-left: 50px">
<el-text size="large">所属地区</el-text>
<el-select v-model="admin.area" placeholder="请选择所属地区" style="width: 240px" clearable>
<el-option v-for="item in area" :key="item" :label="item" :value="item" />
</el-select>
</div>
<div style="margin-left: 50px">
<el-text size="large">职位名称</el-text>
<el-select v-model="admin.store" placeholder="请选择职位名称" style="width: 240px" clearable>
<el-option v-for="item in store" :key="item" :label="item" :value="item" />
</el-select>
</div>
<div style="margin-left:20px">
<el-button type="success" @click="reset()">重置</el-button>
<el-button type="primary" @click="get()">查询</el-button>
</div>
</div>
</el-card>
</el-col>
</el-row>
<el-row>
<el-col>
<el-card>
<div class="add-item">
<el-button style="color: #048efb; border: 1px solid #048efb" @click="permissionAddInit()">新增用户</el-button>
</div>
<div>
<el-table :data="tableData" style="width: 100%">
<el-table-column type="index" label="序号" width="100px" fixed="left"><!-- 序号始终固定在左边 -->
<template #default="scope">
<!-- index下标从0开始计算时要+1后面算页数(num页码数-1) * 每页记录数加起来是总条数 -->
<span>{{ scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize }}</span>
</template>
</el-table-column>
<el-table-column prop="jwcode" label="精网号" width="120px" />
<el-table-column prop="name" label="姓名" width="120px" />
<el-table-column prop="area" label="所属地区" width="120px" />
<el-table-column prop="store" label="职位" width="120px" />
<el-table-column prop="permission" label="部门权限" width="120px">
<template #default="scope">
<span v-if="scope.row.permission === '1'">总部管理员</span>
待补充..................................................................................................
</template>
</el-table-column>
<el-table-column prop="remark" label="备注" width="200px" show-overflow-tooltip />
<el-table-column prop="operation" label="操作" width="200px">
<template #default="scope">
<el-button type="warning" @click="editInit(scope.row)"
:disabled="scope.row.status1 === 0">修改权限</el-button>
<el-popconfirm title="确定将此用户删除吗?" @confirm="delConfirm">
<template #reference>
<el-button type="danger" @click="del(scope.row)" :disabled="scope.row.status1 === 0">删除</el-button>
</template>
<template #actions="{ confirm, cancel }">
<el-button size="small" @click="cancel">取消</el-button>
<el-button type="primary" size="small" @click="confirm">确定</el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
<el-table-column prop="status1" label="状态" width="200px">
<template #default="scope">
<el-switch v-model="scope.row.status1" :active-value="1" :inactive-value="0" size="large"
@change="editStatus(scope.row)" style="
--el-switch-on-color: #13ce66;
--el-switch-off-color: #ff4949;" active-text="启用" inactive-text="禁用" />
</template>
</el-table-column>
</el-table>
</div>
<div class="pagination" style="margin-top: 20px">
<el-pagination background :page-size="getObj.pageSize" :page-sizes="[5, 10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handlePageSizeChange"
@current-change="handleCurrentChange">
</el-pagination>
</div>
</el-card>
</el-col>
</el-row>
<!-- 新增用户权限 -->
<el-dialog v-model="addVisible" title="新增用户权限" :close-on-click-modal="false">
<template #footer>
<el-form ref="Ref" :rules="rules" :model="addObj" label-width="auto" style="align-items: center" >
<el-form-item prop="jwcode" label="精网号:">
<el-input v-model="addObj.jwcode" placeholder="请输入精网号" style="width: 220px" />
</el-form-item>
<el-form-item prop="name" label="用户名:">
<el-input v-model="addObj.name" placeholder="请输入用户名" style="width: 220px" />
</el-form-item>
<el-form-item prop="area" label="所属地区:">
<el-select v-model="addObj.area" placeholder="请选择所属地区" style="width: 220px"
@change="() => Ref.value.validateField('area')">
<el-option v-for="item in areaList" :key="item" :label="item" :value="item"></el-option>
</el-select>
</el-form-item>
<el-form-item prop="permission" label="权限类别:">
<el-select v-model="addObj.permission" placeholder="请选择权限" style="width: 220px"
@change="() => Ref.value.validateField('permission')">
<el-option v-for="item in list" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item prop="store" label="职位:">
<el-input v-model="addObj.store" placeholder="请输入职称" style="width: 220px" />
</el-form-item>
<el-form-item prop="machineId" label="机器码:">
<el-input v-model="addObj.machineId" placeholder="请输入机器码" style="width: 220px" />
</el-form-item>
<el-form-item prop="remark" label="备注">
<el-input v-model="addObj.remark" style="width: 300px" :rows="2" maxlength="100" show-word-limit
type="textarea" />
</el-form-item>
</el-form>
<div>
<el-button @click="closeaddVisible()">取消</el-button>
<el-button type="primary" @click="throttledPermissionAdd()">
提交
</el-button>
</div>
</template>
</el-dialog>
<!-- 这是编辑用户权限弹窗 -->
<el-dialog v-model="editVisible" title="编辑用户权限" width="800px" :close-on-click-modal="false">
<el-descriptions :column="2" :size="size" border label-width="200px">
<el-descriptions-item>
<template #label>
<div class="permissionVisible">
<el-icon><UserFilled /></el-icon>
员工精网号
</div>
</template>
{{ editObj.jwcode }}
</el-descriptions-item>
<el-descriptions-item>
<template #label>
<div class="permissionVisible">
<el-icon><User /></el-icon>
员工姓名
</div>
</template>
{{ editObj.name }}
</el-descriptions-item>
<el-descriptions-item>
<template #label>
<div class="permissionVisible">
<el-icon><location /></el-icon>
所属地区
</div>
</template>
{{ editObj.area }}
</el-descriptions-item>
<el-descriptions-item>
<template #label>
<div class="permissionVisible">
<el-icon><OfficeBuilding /></el-icon>
部门
</div>
</template>
{{ editObj.store }}
</el-descriptions-item>
</el-descriptions>
<el-divider>
<el-icon><star-filled /></el-icon>
</el-divider>
<div>
<span class="permissionVisible" style="margin-right: 20px">权限设置:</span>
<el-radio-group v-model="editObj.permission">
<el-radio value="1" border>总部管理员</el-radio>
..............................................................................待补充
</el-radio-group>
</div>
<template #footer>
<div>
<el-button @click="closeEdit()">取消</el-button>
<el-button type="primary" @click="throttledPermissionEdit()">提交</el-button>
</div>
</template>
</el-dialog>
</template>
<style scoped>
.permissionVisible {
font-size: 16px;
font-weight: bold;
}
.pagination {
display: flex;
}
.head-card {
display: flex;
}
/* 新增样式让弹窗内容居中 */
.el-dialog__body {
display: flex;
flex-direction: column;
align-items: center;
}
.el-dialog__footer {
display: flex;
flex-direction: column;
align-items: center;
}
</style>

23
src/views/permissions/permission.vue

@ -14,7 +14,11 @@ const tableData = ref([])
//
const total = ref(100)
// admin
const admin = ref({})
const admin = ref({
account: '',
market: '',
postiton: ''
})
//
const getObj = ref({
pageNum: 1,
@ -61,13 +65,15 @@ const get = async function (val) {
if (typeof val === 'number') {
getObj.value.pageNum = val
}
console.log('搜索参数', getObj.value)
console.log('搜索参数', getObj.value,admin.value)
// POST
const result = await request({
url: '/permission/getPermission',
data: {
...getObj.value,
admin: { ...admin.value }
permission: {
...admin.value
}
}
})
tableData.value = result.data.list
@ -354,7 +360,6 @@ const handleCurrentChange = function (val) {
<el-option v-for="item in market" :key="item" :label="item" :value="item" />
</el-select>
</div>
<div class="head-card-element" style="margin-left: 50px">
<el-text class="mx-1" size="large">职位名称</el-text>
<el-select v-model="admin.postiton" placeholder="请选择职位名称" style="width: 240px" clearable>
@ -393,15 +398,7 @@ const handleCurrentChange = function (val) {
<el-table-column prop="name" label="姓名" />
<el-table-column prop="market" label="所属地区" />
<el-table-column prop="postiton" label="职位" />
<el-table-column prop="permission" label="部门权限">
<template #default="scope">
<span v-if="scope.row.permission === '1'"> 管理员 </span>
<span v-if="scope.row.permission === '2'"> 总部财务 </span>
<span v-if="scope.row.permission === '3'"> 总部客服 </span>
<span v-if="scope.row.permission === '4'"> 地区负责人 </span>
<span v-if="scope.row.permission === '5'"> 地区财务 </span>
<span v-if="scope.row.permission === '6'"> 客服专员 </span>
</template>
<el-table-column prop="roleName" label="部门权限">
</el-table-column>
<el-table-column prop="remark" label="备注" />
<el-table-column prop="operation" label="操作" width="200px">

13
src/views/workspace/index.vue

@ -99,8 +99,8 @@
<el-row :gutter="20" style="margin-top: 20px">
<el-col :span="18">
<div class="bar">
<div v-show="activeTab === 'recharge'" id="recharge" style="width: 100%; height: 400px"></div>
<div v-show="activeTab === 'consume'" id="consume" style="width: 100%; height: 400px"></div>
<div v-show="activeTab === 'recharge'" id="rechargeChartRef" style="width: 100%; height: 400px"></div>
<div v-show="activeTab === 'consume'" id="consumeChartRef" style="width: 100%; height: 400px"></div>
</div>
</el-col>
<el-col :span="6">
@ -131,7 +131,7 @@
<script setup>
import * as echarts from 'echarts'
import { ref, onMounted } from 'vue'
import { ref, onMounted, onUnmounted, nextTick } from 'vue'
import API from '@/util/http'
//
@ -141,6 +141,9 @@ const dateRange = ref([])
const selectedType = ref('all')
const tableData = ref([])
const rechargeChartRef = ref(null)
const consumeChartRef = ref(null)
//
const currentGold = ref(0)
const dailyChange = ref(0)
@ -261,9 +264,7 @@ const getCardData = async () => {
}
}
//
onMounted(() => {
onMounted(async function () {
getCardData()
})
</script>

Loading…
Cancel
Save