diff --git a/README.md b/README.md index 52e6d73..5bbbd8f 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +# 管理员后台pc端 + # 007UI 后台管理系统 一个基于Vue 3、Element Plus的现代化后台管理系统模板,采用蓝色扁平化高端设计风格。 diff --git a/src/App.vue b/src/App.vue index 705bc6c..ebb004e 100644 --- a/src/App.vue +++ b/src/App.vue @@ -16,6 +16,7 @@ import {getUserInfo} from "@/api/login.js"; const userStore = useUserStore() onMounted(async () => { let resp = await getUserInfo() + console.log("用户信息:",resp) userStore.setUserInfo(resp.data) console.log(userStore.userInfo) }) @@ -87,40 +88,350 @@ html, body { background: #a8a8a8; } -/* Element Plus样式优化 */ +/* Element Plus全局配色优化 */ + +/* 按钮扁平化 */ .el-button { - font-weight: 400; - border-radius: 4px; + border-radius: 0 !important; + transition: all 0.2s ease; + font-weight: 500; } +/* 主按钮 - 深蓝灰色 */ +.el-button--primary { + background-color: #2c3e50 !important; + border-color: #2c3e50 !important; + color: #ffffff !important; +} + +.el-button--primary:hover { + background-color: #34495e !important; + border-color: #34495e !important; +} + +.el-button--primary:active { + background-color: #1a252f !important; + border-color: #1a252f !important; +} + +/* 成功按钮 - 绿色系 */ +.el-button--success { + background-color: #27ae60 !important; + border-color: #27ae60 !important; + color: #ffffff !important; +} + +.el-button--success:hover { + background-color: #2ecc71 !important; + border-color: #2ecc71 !important; +} + +.el-button--success:active { + background-color: #229954 !important; + border-color: #229954 !important; +} + +/* 危险按钮 - 红色系 */ +.el-button--danger { + background-color: #e74c3c !important; + border-color: #e74c3c !important; + color: #ffffff !important; +} + +.el-button--danger:hover { + background-color: #ec7063 !important; + border-color: #ec7063 !important; +} + +.el-button--danger:active { + background-color: #c0392b !important; + border-color: #c0392b !important; +} + +/* 默认按钮 */ +.el-button--default { + background-color: #ffffff !important; + border-color: #d5d9e0 !important; + color: #606266 !important; +} + +.el-button--default:hover { + background-color: #f5f7fa !important; + border-color: #c0c4cc !important; + color: #606266 !important; +} + +/* Link按钮 */ +.el-button.is-link { + color: #3498db !important; + border: none !important; + padding: 0; + background: transparent !important; +} + +.el-button.is-link:hover { + color: #2980b9 !important; + background: transparent !important; +} + +.el-button--primary.is-link { + color: #3498db !important; + background: transparent !important; +} + +.el-button--primary.is-link:hover { + color: #2980b9 !important; + background: transparent !important; +} + +/* 输入框扁平化 */ +.el-input__wrapper { + border-radius: 0 !important; + box-shadow: 0 0 0 1px #d5d9e0 inset !important; + background-color: #ffffff !important; + transition: all 0.2s ease; +} + +.el-input__wrapper:hover { + box-shadow: 0 0 0 1px #b8bcc5 inset !important; +} + +.el-input__wrapper.is-focus { + box-shadow: 0 0 0 1px #2c3e50 inset !important; +} + +/* 标签扁平化 */ +.el-tag { + border-radius: 0 !important; + border: none !important; + font-weight: 500; + padding: 2px 10px; +} + +/* 成功标签 */ +.el-tag--success { + background-color: #d5f4e6 !important; + color: #27ae60 !important; +} + +/* 危险标签 */ +.el-tag--danger { + background-color: #fadbd8 !important; + color: #e74c3c !important; +} + +/* 信息标签 */ +.el-tag--info { + background-color: #ebf5fb !important; + color: #3498db !important; +} + +/* 卡片扁平化 */ .el-card { - border-radius: 4px; + border-radius: 0 !important; + border: 1px solid #e1e8ed !important; + box-shadow: none !important; } +/* 表格扁平化 */ +.el-table { + border-radius: 0 !important; + border: none !important; + color: #2c3e50 !important; +} + +.el-table__header { + background: #f8f9fa !important; +} + +.el-table th { + background: #f8f9fa !important; + border-bottom: 2px solid #e1e8ed !important; + color: #2c3e50 !important; + font-weight: 600 !important; + font-size: 13px !important; +} + +.el-table td { + border-bottom: 1px solid #f0f2f5 !important; + color: #34495e !important; +} + +.el-table tr:hover > td { + background-color: #f8f9fa !important; +} + +/* 分页扁平化 */ +.el-pagination .el-pager li { + border-radius: 0 !important; + color: #606266 !important; + font-weight: 500; +} + +.el-pagination .el-pager li.is-active { + background-color: #2c3e50 !important; + color: #ffffff !important; +} + +.el-pagination .el-pager li:hover { + color: #2c3e50 !important; +} + +.el-pagination button { + border-radius: 0 !important; + color: #606266 !important; +} + +.el-pagination button:hover { + color: #2c3e50 !important; +} + +.el-pagination .el-select .el-input__wrapper { + box-shadow: 0 0 0 1px #d5d9e0 inset !important; +} + +.el-pagination .el-input__inner { + color: #606266 !important; +} + +/* 下拉菜单扁平化 */ +.el-dropdown-menu { + border-radius: 0 !important; + border: 1px solid #e1e8ed !important; + background-color: #ffffff !important; + box-shadow: 0 2px 8px rgba(44, 62, 80, 0.1) !important; + padding: 4px 0; +} + +.el-dropdown-menu__item { + color: #34495e !important; + transition: all 0.2s ease; + padding: 8px 16px; +} + +.el-dropdown-menu__item:hover { + background-color: #f8f9fa !important; + color: #2c3e50 !important; +} + +.el-dropdown-menu__item.is-divided { + border-top: 1px solid #e1e8ed !important; +} + +/* 选择框扁平化 */ +.el-select .el-input__wrapper { + border-radius: 0 !important; +} + +/* 文本域扁平化 */ +.el-textarea__inner { + border-radius: 0 !important; + box-shadow: 0 0 0 1px #d5d9e0 inset !important; + transition: all 0.2s ease; +} + +.el-textarea__inner:hover { + box-shadow: 0 0 0 1px #b8bcc5 inset !important; +} + +.el-textarea__inner:focus { + box-shadow: 0 0 0 1px #2c3e50 inset !important; +} + +/* 菜单扁平化 */ .el-menu { border-right: none; } -.el-table { - border-radius: 4px; +/* 表单标签 */ +.el-form-item__label { + color: #2c3e50 !important; + font-weight: 500; +} + +/* Dialog 扁平化样式 */ +.el-overlay { + background-color: rgba(0, 0, 0, 0.5); +} + +.el-overlay-dialog { + display: flex; + align-items: center; + justify-content: center; } .el-dialog { - border-radius: 8px; + border-radius: 0; + border: none; + box-shadow: 0 4px 16px rgba(44, 62, 80, 0.15); + background-color: #ffffff; + margin: 0; + padding: 0 !important; +} + +.el-dialog__wrapper { + border: none; } .el-dialog__header { margin: 0; - padding: 20px; - border-bottom: 1px solid #f0f0f0; - font-weight: 500; + padding: 20px 24px; + border-bottom: 1px solid #e1e8ed; + background-color: #fafbfc; + font-weight: 600; + font-size: 16px; + color: #2c3e50; +} + +.el-dialog__headerbtn { + top: 20px; + right: 24px; + width: 32px; + height: 32px; +} + +.el-dialog__close { + color: #7f8c8d; + font-size: 18px; + transition: all 0.2s ease; +} + +.el-dialog__close:hover { + color: #2c3e50; + background-color: #f8f9fa; } .el-dialog__body { - padding: 20px; + padding: 24px; + color: #34495e; + background-color: #ffffff; } .el-dialog__footer { - padding: 10px 20px 20px; + padding: 16px 24px; + border-top: 1px solid #e1e8ed; + background-color: #fafbfc; +} + +/* Dialog 内表单组件样式 */ +.el-dialog .el-input__wrapper { + border-radius: 0; +} + +.el-dialog .el-select .el-input__wrapper { + border-radius: 0; +} + +.el-dialog .el-textarea__inner { + border-radius: 0; +} + +.el-dialog .el-form-item__label { + color: #2c3e50; + font-weight: 500; +} + +.el-dialog .el-form-item { + margin-bottom: 20px; } \ No newline at end of file diff --git a/src/api/admin/Permission.js b/src/api/admin/Permission.js new file mode 100644 index 0000000..18f978b --- /dev/null +++ b/src/api/admin/Permission.js @@ -0,0 +1,69 @@ +import {http2} from "@/utils/request.js"; +/* -------------------------------------------------------------- */ +/**管理员权限管理 */ +/**-------------------------------------------------------- */ +/**路由权限管理 */ + +/**获取权限列表 */ +export const getPermissionList = (params) => { + return http2.get('/api/v1/admin/server/permission/path/list', {params: params}) +} +/**新增权限信息 */ +export const addPermissionInfo = (data) => { + return http2.post('/api/v1/admin/server/permission/path/add', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**修改权限信息 */ +export const updatePermissionInfo = (data) => { + return http2.post('/api/v1/admin/server/permission/path/update', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**删除权限信息 */ +export const deletePermissionInfo = (data) => { + return http2.delete('/api/v1/admin/server/permission/path/delete', { + data: data, + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} + +/**-------------------------------------------------------- */ +/**管理员权限分配 */ + +/**获取指定管理员的权限列表 */ +export const getPermissionListByAdmin = (params) => { + return http2.get('/api/v1/admin/server/permission/admin/list', {params: params}) +} +/**新增管理员权限 */ +export const addPermissionAdmin = (data) => { + return http2.post('/api/v1/admin/server/permission/admin/add', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**修改管理员权限 */ +export const updatePermissionAdmin = (data) => { + return http2.post('/api/v1/admin/server/permission/admin/update', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**删除管理员权限 */ +export const deletePermissionAdmin = (data) => { + return http2.delete('/api/v1/admin/server/permission/admin/delete', { + data: data, + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} + diff --git a/src/api/admin/activity.js b/src/api/admin/activity.js new file mode 100644 index 0000000..f21cb68 --- /dev/null +++ b/src/api/admin/activity.js @@ -0,0 +1,17 @@ +import {http2} from "@/utils/request.js"; +/**新增签到奖励 */ +export const addSignReward = (data) => { + return http2.post('/api/v1/admin/activity/signin/add_reward', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**新增签到奖励类型 */ +export const addSignRewardType = (data) => { + return http2.post('/api/v1/admin/activity/signin/add_reward_type', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} diff --git a/src/api/admin/cdn.js b/src/api/admin/cdn.js new file mode 100644 index 0000000..94c947b --- /dev/null +++ b/src/api/admin/cdn.js @@ -0,0 +1,9 @@ +import {http2} from "@/utils/request.js"; +/**新增goedge服务器 */ +export const addGoedgeServer = (data) => { + return http2.post('/api/v1/admin/api/goedge/add_server', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} diff --git a/src/api/admin/discount.js b/src/api/admin/discount.js new file mode 100644 index 0000000..ca37497 --- /dev/null +++ b/src/api/admin/discount.js @@ -0,0 +1,172 @@ +import {http2} from "@/utils/request.js"; + +/**---------------------------------- */ +/**优惠码/代金券管理 (统一接口) */ + +/**获取优惠码/代金券列表 */ +export const getDiscountCodeList = (params) => { + return http2.get('/api/v1/admin/code/discount/list', {params: params}) +} + +/**获取优惠码/代金券详情 */ +export const getDiscountCodeDetail = (params) => { + return http2.get('/api/v1/admin/code/discount/detail', {params: params}) +} + +/**创建优惠码/代金券 */ +export const createDiscountCode = (data) => { + return http2.post('/api/v1/admin/code/discount/create', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} + +/**更新优惠码/代金券 */ +export const updateDiscountCode = (data) => { + return http2.post('/api/v1/admin/code/discount/update', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} + +/**删除优惠码/代金券 */ +export const deleteDiscountCode = (data) => { + return http2.delete('/api/v1/admin/code/discount/delete?code_id=' + data.code_id) +} + +/**---------------------------------- */ +/**商品关联管理 */ + +/**获取优惠码/代金券商品列表 */ +export const getDiscountGoodsList = (params) => { + return http2.get('/api/v1/admin/code/discount/goods/list', {params: params}) +} + +/**新增优惠码/代金券商品关联 */ +export const addDiscountGoods = (data) => { + return http2.post('/api/v1/admin/code/discount/goods/add', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} + +/**修改优惠码/代金券商品关联 */ +export const updateDiscountGoods = (data) => { + return http2.post('/api/v1/admin/code/discount/goods/update', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} + +/**删除优惠码/代金券商品关联 */ +export const deleteDiscountGoods = (data) => { + return http2.delete('/api/v1/admin/code/discount/goods/delete', { + data: data, + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} + +/**---------------------------------- */ +/**用户关联管理 */ + +/**获取优惠码/代金券用户关联列表 */ +export const getDiscountUsersList = (params) => { + return http2.get('/api/v1/admin/code/discount/users/list', {params: params}) +} + +/**新增优惠码/代金券用户关联 */ +export const addDiscountUsers = (data) => { + return http2.post('/api/v1/admin/code/discount/users/add', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} + +/**修改优惠码/代金券用户关联 */ +export const updateDiscountUsers = (data) => { + return http2.post('/api/v1/admin/code/discount/users/update', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} + +/**删除优惠码/代金券用户关联 */ +export const deleteDiscountUsers = (data) => { + return http2.delete('/api/v1/admin/code/discount/users/delete', { + data: data, + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} + +/**---------------------------------- */ +/**用户代金券管理 */ + +/**获取用户优惠码/代金券列表 */ +export const getUserVoucherList = (params) => { + return http2.get('/api/v1/admin/code/discount/user/list', {params: params}) +} + +/**为用户添加代金券 */ +export const addUserVoucher = (data) => { + return http2.post('/api/v1/admin/code/discount/user/add_coupon', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} + +/**修改用户代金券 */ +export const updateUserVoucher = (data) => { + return http2.post('/api/v1/admin/code/discount/user/update_coupon', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} + +/**删除用户代金券 */ +export const deleteUserVoucher = (data) => { + return http2.delete('/api/v1/admin/code/discount/user/delete_coupon', { + data: data, + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} + +/**获取用户优惠码/代金券使用记录 */ +export const getUserVoucherHistory = (params) => { + return http2.get('/api/v1/admin/code/discount/user/history', {params: params}) +} + +/**为用户分配代金券 */ +export const allocateVoucher = (data) => { + return http2.post('/api/v1/admin/code/discount/coupon/allocate', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} + +/**查询代金券的拥有者列表 */ +export const getVoucherHolderList = (params) => { + return http2.get('/api/v1/admin/code/discount/coupon/holder_list', {params: params}) +} + +/**---------------------------------- */ +/**兼容旧接口别名 */ +export const getVoucherList = getDiscountCodeList +export const getVoucherDetail = getDiscountCodeDetail +export const createVoucher = createDiscountCode +export const updateVoucher = updateDiscountCode +export const deleteVoucher = deleteDiscountCode diff --git a/src/api/admin/file.js b/src/api/admin/file.js new file mode 100644 index 0000000..64c261a --- /dev/null +++ b/src/api/admin/file.js @@ -0,0 +1,42 @@ +import {http2} from "@/utils/request.js"; +/**获取文件列表 */ +export const getFileList = (params) => { + return http2.get('/api/v1/admin/file/list',{params}) +} + +/**获取文件详情 */ +export const getFileDetail = (data) => { + return http2.get('/api/v1/admin/file/detail?file_id='+data.file_id) +} + +/**删除文件 */ +export const deleteFile = (data) => { + return http2.delete('/api/v1/admin/file/delete', { + params: data + }) +} +/**修改文件信息 */ +export const updateFile = (data) => { + return http2.post('/api/v1/admin/file/update', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**公共接口 获取文件信息 */ +export const getFile = (data) => { + return http2.get('/api/v1/tools/file/info?file_id='+data.file_id) +} + +/**文件上传 */ +export const uploadFile = (data) => { + return http2.post('/api/v1/tools/file/upload', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**文件下载 */ +export const downloadFile = (data) => { + return http2.get('/api/v1/tool/file/down?file_id='+data.file_id) +} diff --git a/src/api/admin/group.js b/src/api/admin/group.js new file mode 100644 index 0000000..2b4b8ba --- /dev/null +++ b/src/api/admin/group.js @@ -0,0 +1,25 @@ +import {http2} from "@/utils/request.js"; +/**获取管理员组列表 */ +export const getAdminGroupList = (params) => { + return http2.get('/api/v1/admin/admin_group/list', {params: params}) +} +/**获取管理员组成员列表 */ +export const getAdminGroupMemberList = (params) => { + return http2.get('/api/v1/admin/admin_group/member_list', {params:params}) +} +/**获取管理员组详情 */ +export const getAdminGroupDetail = (params) => { + return http2.get('/api/v1/admin/admin_group/detail', {params: params}) +} +/**新增管理员组 */ +export const addAdminGroup = (data) => { + return http2.post('/api/v1/admin/admin_group/create', data) +} +/**更新管理员组信息 */ +export const updateAdminGroupInfo = (data) => { + return http2.post('/api/v1/admin/admin_group/update', data) +} +/**删除管理员组 */ +export const deleteAdminGroup = (data) => { + return http2.delete('/api/v1/admin/admin_group/delete?group_id=' + data.group_id) +} diff --git a/src/api/admin/order.js b/src/api/admin/order.js new file mode 100644 index 0000000..d58fa36 --- /dev/null +++ b/src/api/admin/order.js @@ -0,0 +1,35 @@ +import {http2} from "@/utils/request.js"; +/**获取订单列表 */ +export const getOrderList = (params) => { + return http2.get('/api/v1/admin/order/list', {params: params}) +} +/**获取订单详情 */ +export const getOrderDetail = (params) => { + return http2.get('/api/v1/admin/order/detail', {params: params}) +} +/**删除订单 (未提供删除接口,暂时保留) */ +/**删除订单 */ +export const deleteOrder = (data) => { + return http2.delete('/api/v1/admin/trades/delete_trade', { + data: data, + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**创建订单 */ +export const createOrder = (data) => { + return http2.post('/api/v1/admin/order/create', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**修改订单 */ +export const updateOrder = (data) => { + return http2.post('/api/v1/admin/order/update', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} diff --git a/src/api/admin/product.js b/src/api/admin/product.js new file mode 100644 index 0000000..cc1d340 --- /dev/null +++ b/src/api/admin/product.js @@ -0,0 +1,142 @@ +import {http2} from "@/utils/request.js"; +/**---------------------------------- */ +/**商品组管理 */ + +/**获取商品分组列表 */ +export const getProductGroupList = (params) => { + return http2.get('/api/v1/admin/good/group/list', {params: params}) +} +/**创建商品分组 */ +export const createProductGroup = (data) => { + return http2.post('/api/v1/admin/good/group/create', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**更新商品分组 */ +export const updateProductGroup = (data) => { + return http2.post('/api/v1/admin/good/group/update', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**隐藏商品组 */ +export const hideProductGroup = (data) => { + return http2.post('/api/v1/admin/good/group/disable', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**启动商品组 */ +export const startProductGroup = (data) => { + return http2.post('/api/v1/admin/good/group/enable', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**删除商品分组 */ +export const deleteProductGroup = (data) => { + return http2.delete('/api/v1/admin/good/group/delete',{ + data: data, + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} + + + +/**---------------------------------- */ +/**商品管理 */ + +/**获取商品列表 */ +export const getProductList = (params) => { + return http2.get('/api/v1/admin/good/goods/list', {params: params}) +} +/**创建商品 */ +export const createProduct = (data) => { + return http2.post('/api/v1/admin/good/goods/create', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**更新商品 */ +export const updateProduct = (data) => { + return http2.post('/api/v1/admin/good/goods/update', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**删除商品 */ +export const deleteProduct = (data) => { + return http2.delete('/api/v1/admin/good/goods/delete',{ + data:data, + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} + + + +/**---------------------------------- */ +/**商品参数管理 */ + +/**获取商品参数列表 */ +export const getProductParameterList = (params) => { + return http2.get('/api/v1/admin/good/spec/list', {params: params}) +} +/**创建商品参数 */ +export const createProductParameter = (data) => { + return http2.post('/api/v1/admin/good/spec/create', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**获取商品参数详情 */ +export const getProductParameterDetail = (params) => { + return http2.get('/api/v1/admin/good/spec/detail', {params: params}) +} +/**更新商品参数 */ +export const updateProductParameter = (data) => { + return http2.post('/api/v1/admin/good/spec/update', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**删除商品参数 */ +export const deleteProductParameter = (data) => { + return http2.delete('/api/v1/admin/good/spec/delete', { + params: data + }) +} +/**增加商品参数值 */ +export const addProductParameterValue = (data) => { + return http2.post('/api/v1/admin/good/spec/add_value', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**删除商品参数值 */ +export const deleteProductParameterValue = (data) => { + return http2.delete('/api/v1/admin/good/spec/delete_value', { + params: data + }) +} +/**更新商品参数值 */ +export const updateProductParameterValue = (data) => { + return http2.post('/api/v1/admin/good/spec/update_value', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} \ No newline at end of file diff --git a/src/api/admin/router.js b/src/api/admin/router.js new file mode 100644 index 0000000..70ff216 --- /dev/null +++ b/src/api/admin/router.js @@ -0,0 +1,19 @@ +import {http2} from "@/utils/request.js"; + +/**路由管理 */ +/**新增前端路由 */ +export const addRouter = (data) => { + return http2.post('/api/v1/admin/web_routs/add', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**更新前端路由 */ +export const updateRouter = (data) => { + return http2.post('/api/v1/admin/web_routs/update', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} diff --git a/src/api/admin/setting.js b/src/api/admin/setting.js new file mode 100644 index 0000000..2a40c93 --- /dev/null +++ b/src/api/admin/setting.js @@ -0,0 +1,86 @@ +import { http2 } from "@/utils/request.js" + +// ========== 配置组管理 ========== + +/** 获取配置分组列表 */ +export const getSettingGroupList = (params) => { + return http2.get('/api/v1/admin/server/setting/group/list', { params }) +} + +/** 获取配置分组信息 */ +export const getSettingGroupInfo = (params) => { + return http2.get('/api/v1/admin/server/setting/group/info', { params }) +} + +/** 创建配置分组 */ +export const createSettingGroup = (data) => { + return http2.post('/api/v1/admin/server/setting/group/create', data, { + headers: { + 'Content-Type': 'multipart/form-data' + } + }) +} + +/** 修改配置分组 */ +export const updateSettingGroup = (data) => { + return http2.post('/api/v1/admin/server/setting/group/update', data, { + headers: { + 'Content-Type': 'multipart/form-data' + } + }) +} + +/** 删除配置分组 */ +export const deleteSettingGroup = (params) => { + return http2.delete('/api/v1/admin/server/setting/group/delete', { params }) +} + +// ========== 配置管理 ========== + +/** 获取配置列表 */ +export const getSettingList = (params) => { + return http2.get('/api/v1/admin/server/setting/list', { params }) +} + +/** 获取配置信息 */ +export const getSettingInfo = (params) => { + return http2.get('/api/v1/admin/server/setting/info', { params }) +} + +/** 创建配置 */ +export const createSetting = (data) => { + return http2.post('/api/v1/admin/server/setting/create', data, { + headers: { + 'Content-Type': 'multipart/form-data' + } + }) +} + +/** 修改配置 */ +export const updateSetting = (data) => { + return http2.post('/api/v1/admin/server/setting/update', data, { + headers: { + 'Content-Type': 'multipart/form-data' + } + }) +} + +/** 修改配置是否开放访问 */ +export const setSettingOpen = (data) => { + return http2.post('/api/v1/admin/server/setting/set_open', data, { + headers: { + 'Content-Type': 'multipart/form-data' + } + }) +} + +/** 删除配置 */ +export const deleteSetting = (data) => { + return http2.delete('/api/v1/admin/server/setting/delete', { + data, + headers: { + 'Content-Type': 'multipart/form-data' + } + }) +} + diff --git a/src/api/admin/user.js b/src/api/admin/user.js new file mode 100644 index 0000000..570c897 --- /dev/null +++ b/src/api/admin/user.js @@ -0,0 +1,165 @@ +import {http2} from "@/utils/request.js"; + +/**用户余额管理 */ +/**修改用户余额 */ +export const editUserBalance = (data) => { + return http2.post('/api/v1/admin/user/balance/update', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**添加用户消费记录 */ +export const addUserConsumption = (data) => { + return http2.post('/api/v1/admin/user/balance/add_history', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} + +/**查询用户余额 */ +export const getUserBalance = (data) => { + return http2.get('/api/v1/admin/user/balance/select?user_id='+data.user_id) +} + +/**获取用户余额记录 */ +export const getUserBalanceRecord = (data) => { + return http2.get('/api/v1/admin/user/balance/history?user_id='+data.user_id + '&balance_type=' + data.balance_type + '&page=' + data.page + '&count=' + data.count) +} + +/**获取用户余额 */ +export const getUserBalanceCount = (data) => { + return http2.get('/api/v1/admin/user/balance/get?user_id='+data.user_id) +} +/**获取用户信息 */ +export const getUserInfo = (data) => { + return http2.get('/api/v1/admin/user/user/detail?user_id='+data.user_id) +} + +/**获取用户列表 */ +export const getUserList = (data) => { + return http2.get('/api/v1/admin/user/user/list?page=' + data.page + '&count=' + data.count + '&key=' + data.key) +} + +/**更新用户信息 */ +export const updateUserInfo = (data) => { + return http2.post('/api/v1/admin/user/user/update', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} + +/**删除用户 */ +export const deleteUser = (data) => { + return http2.delete('/api/v1/admin/user/user/delete?group_id='+data.group_id) +} +/**修改用户头像 */ +export const updateUserAvatar = (data) => { + return http2.post('/api/v1/admin/user/user/update_cover', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**修改用户密码 */ +export const updateUserPassword = (data) => { + return http2.post('/api/v1/admin/user/user/update_password', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} + +/**修改用户组 */ +export const updateUserGroup = (data) => { + return http2.post('/api/v1/admin/user/user/update_group', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**修改用户管理员权限*/ +export const updateUserAdmin = (data) => { + return http2.post('/api/v1/admin/user/user/user2admin', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**修改用户实名信息*/ +export const updateUserRealName = (data) => { + return http2.post('/api/v1/admin/user/user/update_real_name', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**获取用户登录记录*/ +export const getUserLoginRecord = (data) => { + return http2.get('/api/v1/admin/user/user/login_history?user_id='+data.user_id + '&page=' + data.page + '&count=' + data.count) +} + +/**获取用户操作记录 */ +export const getUserOperationRecord = (data) => { + return http2.get('/api/v1/admin/user/user/manage_history?user_id='+data.user_id + '&page=' + data.page + '&count=' + data.count) +} +/**模拟用户登录 */ +export const mockUserLogin = (data) => { + return http2.get('/api/v1/admin/user/user/simulation_login?user_id='+data.user_id) +} +/**新建任务 */ +export const createTask = (data) => { + return http2.post('/api/v1/admin/user/user/create', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} + +/**用户组管理 */ +/**获取用户组列表 */ +export const getUserGroupList = (data) => { + return http2.get('/api/v1/admin/user_group/list?page=' + data.page + '&count=' + data.count) +} +/**获取用户组成员列表 */ +export const getUserGroupMemberList = (data) => { + return http2.get('/api/v1/admin/user_group/member_list?group_id=' + data.group_id + '&page=' + data.page + '&count=' + data.count) +} +/**获取用户组详情信息 */ +export const getUserGroupDetail = (data) => { + return http2.get('/api/v1/admin/user_group/detail?group_id=' + data.group_id) +} +/**新建用户组 */ +export const createUserGroup = (data) => { + return http2.post('/api/v1/admin/user_group/create', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**更新用户组信息 */ +export const updateUserGroupInfo = (data) => { + return http2.post('/api/v1/admin/user_group/update', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**删除用户组 */ +export const deleteUserGroup = (data) => { + return http2.delete(`/api/v1/admin/user_group/delete?group_id=`+data.group_id,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**添加用户组成员 */ +export const addUserGroupMember = (data) => { + return http2.post('/api/v1/admin/user_group/add_member', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} \ No newline at end of file diff --git a/src/api/domain.js b/src/api/domain.js index e6cddcd..b0fc1a9 100644 --- a/src/api/domain.js +++ b/src/api/domain.js @@ -11,15 +11,20 @@ export function addDomain(data) { } // 删除域名白名单 -export function deleteDomain(id) { - return request.post("/api/v1/admin/server/domain_withe/delete",{domain_id: id}) +export function deleteDomain(data) { + return request.post("/api/v1/admin/server/domain_withe/delete",data,{ + + headers:{ + 'Content-Type':'multipart/form-data' + } + }) } // 批量删除域名白名单 export async function batchDeleteDomain(ids) { let promises = [] for (let id of ids) { - promises.push(deleteDomain(id)) + promises.push(deleteDomain({domain_id:id})) } return await Promise.all(promises) } \ No newline at end of file diff --git a/src/api/ticket.js b/src/api/ticket.js index dfc61f5..47f9dbd 100644 --- a/src/api/ticket.js +++ b/src/api/ticket.js @@ -29,12 +29,12 @@ export function getCompletedTicketList(count, page) { return getTickerList(count,page,3) } -// 获取详情 +// 获取工单详情 export function getTicketDetail(work_id) { return request.get('/api/v1/admin/work_order/detail', { work_id }) } -// 回复 +// 回复工单 export function replyTicket(work_id, content, files) { return request.post('/api/v1/admin/work_order/reply', { work_id, content, files }) } @@ -67,4 +67,53 @@ export async function parseFilesToImages(files) { const fileIds = files.split(',') return await Promise.all(fileIds.map(async (id) => await getFileImage(id.trim()))) -} \ No newline at end of file +} + +/**获取工单数量 */ +export function getTicketCount() { + return request.get('/api/v1/admin/work_order/count') +} +/**修改工单信息 */ +export function updateTicketInfo(data) { + return request.post('/api/v1/admin/work_order/update', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**添加工单类型 */ +export function addTicketType(data) { + return request.post('/api/v1/admin/work_order/add_type', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**修改工单类型 */ +export function updateTicketType(data) { + return request.post('/api/v1/admin/work_order/update_type', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**删除工单类型 */ +export function deleteTicketType(data) { + return request.delete('/api/v1/admin/work_order/delete_type', data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} +/**获取工单类型列表 */ +export function getTicketTypeList(data) { + return request.get('/api/v1/admin/work_order/type_list', data) +} +/**修改工单回复信息 */ +export function updateTicketReplayInfo(data){ + return request.post('/api/v1/admin/work_order/update_reply',data,{ + headers:{ + 'Content-Type':'multipart/form-data' + } + }) +} diff --git a/src/assets/7.wav b/src/assets/7.wav new file mode 100644 index 0000000..2050e2f Binary files /dev/null and b/src/assets/7.wav differ diff --git a/src/assets/logo.png b/src/assets/logo.png index 6bc8dad..994fed6 100644 Binary files a/src/assets/logo.png and b/src/assets/logo.png differ diff --git a/src/components/UserSelector/index.vue b/src/components/UserSelector/index.vue new file mode 100644 index 0000000..6be488f --- /dev/null +++ b/src/components/UserSelector/index.vue @@ -0,0 +1,191 @@ + + + + + diff --git a/src/components/admin/AvatarSelector.vue b/src/components/admin/AvatarSelector.vue new file mode 100644 index 0000000..4652c90 --- /dev/null +++ b/src/components/admin/AvatarSelector.vue @@ -0,0 +1,431 @@ + + + + + \ No newline at end of file diff --git a/src/components/layout/AdminLayout.vue b/src/components/layout/AdminLayout.vue index f983e31..b2d2ec9 100644 --- a/src/components/layout/AdminLayout.vue +++ b/src/components/layout/AdminLayout.vue @@ -3,15 +3,15 @@