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 @@
+
+ {{ file.realName }} {{ formatFileSize(file.size) }}用户文件列表
+
+