diff --git a/package.json b/package.json
index c34dff4..2619193 100644
--- a/package.json
+++ b/package.json
@@ -20,6 +20,7 @@
"url": "https://gitee.com/JavaLionLi/plus-ui.git"
},
"dependencies": {
+ "@riophae/vue-treeselect": "0.4.0",
"@element-plus/icons-vue": "2.3.1",
"@highlightjs/vue-plugin": "2.1.0",
"@tencentcloud/chat": "^3.5.5",
@@ -80,7 +81,9 @@
"vite-plugin-svg-icons-ng": "^1.4.0",
"vite-plugin-vue-devtools": "7.7.5",
"vitest": "3.1.2",
- "vue-tsc": "^2.2.8"
+ "vue-tsc": "^2.2.8",
+ "stylus": "^0.54.5",
+ "stylus-loader": "^3.0.2"
},
"overrides": {
"quill": "2.0.2"
diff --git a/src/api/act/couponActivity.js b/src/api/act/couponActivity.js
new file mode 100644
index 0000000..2ed84ee
--- /dev/null
+++ b/src/api/act/couponActivity.js
@@ -0,0 +1,54 @@
+import request from '@/utils/request'
+
+// 查询优惠券活动表列表
+export function listCouponActivity(query, pageReq) {
+ return request({
+ url: '/act/couponActivity/list',
+ method: 'post',
+ data: query,
+ params: pageReq
+ })
+}
+
+// 查询优惠券活动表详细
+export function getCouponActivity(id) {
+ return request({
+ url: '/act/couponActivity/' + id,
+ method: 'get'
+ })
+}
+
+// 新增优惠券活动表
+export function addCouponActivity(data) {
+ return request({
+ url: '/act/couponActivity',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改优惠券活动表
+export function updateCouponActivity(data) {
+ return request({
+ url: '/act/couponActivity',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除优惠券活动表
+export function delCouponActivity(id) {
+ return request({
+ url: '/act/couponActivity/' + id,
+ method: 'delete'
+ })
+}
+
+// 导出优惠券活动表
+export function exportCouponActivity(query) {
+ return request({
+ url: '/act/couponActivity/export',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/src/api/act/memberCoupon.js b/src/api/act/memberCoupon.js
new file mode 100644
index 0000000..86bbd3d
--- /dev/null
+++ b/src/api/act/memberCoupon.js
@@ -0,0 +1,54 @@
+import request from '@/utils/request'
+
+// 查询用户领券记录列表
+export function listMemberCoupon(query, pageReq) {
+ return request({
+ url: '/act/memberCoupon/list',
+ method: 'post',
+ data: query,
+ params: pageReq
+ })
+}
+
+// 查询用户领券记录详细
+export function getMemberCoupon(id) {
+ return request({
+ url: '/act/memberCoupon/' + id,
+ method: 'get'
+ })
+}
+
+// 新增用户领券记录
+export function addMemberCoupon(data) {
+ return request({
+ url: '/act/memberCoupon',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改用户领券记录
+export function updateMemberCoupon(data) {
+ return request({
+ url: '/act/memberCoupon',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除用户领券记录
+export function delMemberCoupon(id) {
+ return request({
+ url: '/act/memberCoupon/' + id,
+ method: 'delete'
+ })
+}
+
+// 导出用户领券记录
+export function exportMemberCoupon(query) {
+ return request({
+ url: '/act/memberCoupon/export',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/src/api/aws/systemStatistics.js b/src/api/aws/systemStatistics.js
new file mode 100644
index 0000000..8a5832b
--- /dev/null
+++ b/src/api/aws/systemStatistics.js
@@ -0,0 +1,54 @@
+import request from '@/utils/request'
+
+// 查询系统数据统计列表
+export function listAwsSystemStatistics(query, pageReq) {
+ return request({
+ url: '/aws/systemStatistics/list',
+ method: 'post',
+ data: query,
+ params: pageReq
+ })
+}
+
+// 查询系统数据统计详细
+export function getAwsSystemStatistics(id) {
+ return request({
+ url: '/aws/systemStatistics/' + id,
+ method: 'get'
+ })
+}
+
+// 新增系统数据统计
+export function addAwsSystemStatistics(data) {
+ return request({
+ url: '/aws/systemStatistics',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改系统数据统计
+export function updateAwsSystemStatistics(data) {
+ return request({
+ url: '/aws/systemStatistics',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除系统数据统计
+export function delAwsSystemStatistics(id) {
+ return request({
+ url: '/aws/systemStatistics/' + id,
+ method: 'delete'
+ })
+}
+
+// 导出系统数据统计
+export function exportAwsSystemStatistics(query) {
+ return request({
+ url: '/aws/systemStatistics/export',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/src/api/monitor/cache.js b/src/api/monitor/cache.js
new file mode 100644
index 0000000..72c5f6a
--- /dev/null
+++ b/src/api/monitor/cache.js
@@ -0,0 +1,57 @@
+import request from '@/utils/request'
+
+// 查询缓存详细
+export function getCache() {
+ return request({
+ url: '/monitor/cache',
+ method: 'get'
+ })
+}
+
+// 查询缓存名称列表
+export function listCacheName() {
+ return request({
+ url: '/monitor/cache/getNames',
+ method: 'get'
+ })
+}
+
+// 查询缓存键名列表
+export function listCacheKey(cacheName) {
+ return request({
+ url: '/monitor/cache/getKeys/' + cacheName,
+ method: 'get'
+ })
+}
+
+// 查询缓存内容
+export function getCacheValue(cacheName, cacheKey) {
+ return request({
+ url: '/monitor/cache/getValue/' + cacheName + '/' + cacheKey,
+ method: 'get'
+ })
+}
+
+// 清理指定名称缓存
+export function clearCacheName(cacheName) {
+ return request({
+ url: '/monitor/cache/clearCacheName/' + cacheName,
+ method: 'delete'
+ })
+}
+
+// 清理指定键名缓存
+export function clearCacheKey(cacheKey) {
+ return request({
+ url: '/monitor/cache/clearCacheKey/' + cacheKey,
+ method: 'delete'
+ })
+}
+
+// 清理全部缓存
+export function clearCacheAll() {
+ return request({
+ url: '/monitor/cache/clearCacheAll',
+ method: 'delete'
+ })
+}
diff --git a/src/api/monitor/job.js b/src/api/monitor/job.js
new file mode 100644
index 0000000..3815569
--- /dev/null
+++ b/src/api/monitor/job.js
@@ -0,0 +1,71 @@
+import request from '@/utils/request'
+
+// 查询定时任务调度列表
+export function listJob(query) {
+ return request({
+ url: '/monitor/job/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询定时任务调度详细
+export function getJob(jobId) {
+ return request({
+ url: '/monitor/job/' + jobId,
+ method: 'get'
+ })
+}
+
+// 新增定时任务调度
+export function addJob(data) {
+ return request({
+ url: '/monitor/job',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改定时任务调度
+export function updateJob(data) {
+ return request({
+ url: '/monitor/job',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除定时任务调度
+export function delJob(jobId) {
+ return request({
+ url: '/monitor/job/' + jobId,
+ method: 'delete'
+ })
+}
+
+// 任务状态修改
+export function changeJobStatus(jobId, status) {
+ const data = {
+ jobId,
+ status
+ }
+ return request({
+ url: '/monitor/job/changeStatus',
+ method: 'put',
+ data: data
+ })
+}
+
+
+// 定时任务立即执行一次
+export function runJob(jobId, jobGroup) {
+ const data = {
+ jobId,
+ jobGroup
+ }
+ return request({
+ url: '/monitor/job/run',
+ method: 'put',
+ data: data
+ })
+}
\ No newline at end of file
diff --git a/src/api/monitor/jobLog.js b/src/api/monitor/jobLog.js
new file mode 100644
index 0000000..6e0be61
--- /dev/null
+++ b/src/api/monitor/jobLog.js
@@ -0,0 +1,26 @@
+import request from '@/utils/request'
+
+// 查询调度日志列表
+export function listJobLog(query) {
+ return request({
+ url: '/monitor/jobLog/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 删除调度日志
+export function delJobLog(jobLogId) {
+ return request({
+ url: '/monitor/jobLog/' + jobLogId,
+ method: 'delete'
+ })
+}
+
+// 清空调度日志
+export function cleanJobLog() {
+ return request({
+ url: '/monitor/jobLog/clean',
+ method: 'delete'
+ })
+}
diff --git a/src/api/monitor/logininfor.js b/src/api/monitor/logininfor.js
new file mode 100644
index 0000000..26a46eb
--- /dev/null
+++ b/src/api/monitor/logininfor.js
@@ -0,0 +1,26 @@
+import request from '@/utils/request'
+
+// 查询登录日志列表
+export function list(query) {
+ return request({
+ url: '/monitor/logininfor/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 删除登录日志
+export function delLogininfor(infoId) {
+ return request({
+ url: '/monitor/logininfor/' + infoId,
+ method: 'delete'
+ })
+}
+
+// 清空登录日志
+export function cleanLogininfor() {
+ return request({
+ url: '/monitor/logininfor/clean',
+ method: 'delete'
+ })
+}
diff --git a/src/api/monitor/online.js b/src/api/monitor/online.js
new file mode 100644
index 0000000..bd22137
--- /dev/null
+++ b/src/api/monitor/online.js
@@ -0,0 +1,18 @@
+import request from '@/utils/request'
+
+// 查询在线用户列表
+export function list(query) {
+ return request({
+ url: '/monitor/online/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 强退用户
+export function forceLogout(tokenId) {
+ return request({
+ url: '/monitor/online/' + tokenId,
+ method: 'delete'
+ })
+}
diff --git a/src/api/monitor/operlog.js b/src/api/monitor/operlog.js
new file mode 100644
index 0000000..a04bca8
--- /dev/null
+++ b/src/api/monitor/operlog.js
@@ -0,0 +1,26 @@
+import request from '@/utils/request'
+
+// 查询操作日志列表
+export function list(query) {
+ return request({
+ url: '/monitor/operlog/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 删除操作日志
+export function delOperlog(operId) {
+ return request({
+ url: '/monitor/operlog/' + operId,
+ method: 'delete'
+ })
+}
+
+// 清空操作日志
+export function cleanOperlog() {
+ return request({
+ url: '/monitor/operlog/clean',
+ method: 'delete'
+ })
+}
diff --git a/src/api/monitor/server.js b/src/api/monitor/server.js
new file mode 100644
index 0000000..e1f9ca2
--- /dev/null
+++ b/src/api/monitor/server.js
@@ -0,0 +1,9 @@
+import request from '@/utils/request'
+
+// 获取服务信息
+export function getServer() {
+ return request({
+ url: '/monitor/server',
+ method: 'get'
+ })
+}
\ No newline at end of file
diff --git a/src/api/oms/aftersale.js b/src/api/oms/aftersale.js
new file mode 100644
index 0000000..23bce5e
--- /dev/null
+++ b/src/api/oms/aftersale.js
@@ -0,0 +1,70 @@
+import request from '@/utils/request'
+
+// 查询订单售后列表
+export function listOmsAftersale(query, pageReq) {
+ return request({
+ url: '/oms/aftersale/list',
+ method: 'post',
+ data: query,
+ params: pageReq
+ })
+}
+
+// 查询订单售后详细
+export function getOmsAftersale(id) {
+ return request({
+ url: '/oms/aftersale/' + id,
+ method: 'get'
+ })
+}
+
+// 新增订单售后
+export function addOmsAftersale(data) {
+ return request({
+ url: '/oms/aftersale',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改订单售后
+export function updateOmsAftersale(data) {
+ return request({
+ url: '/oms/aftersale',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除订单售后
+export function delOmsAftersale(id) {
+ return request({
+ url: '/oms/aftersale/' + id,
+ method: 'delete'
+ })
+}
+
+// 导出订单售后
+export function exportOmsAftersale(query) {
+ return request({
+ url: '/oms/aftersale/export',
+ method: 'get',
+ params: query
+ })
+}
+
+// 售后订单操作
+export function dealWithAftersale(data){
+ return request({
+ url: '/oms/aftersale/dealWith',
+ method: 'post',
+ data: data
+ })
+}
+
+export function viewLog(orderId){
+ return request({
+ url: `/oms/aftersale/log/` + orderId,
+ method: 'get'
+ })
+}
diff --git a/src/api/oms/aftersaleItem.js b/src/api/oms/aftersaleItem.js
new file mode 100644
index 0000000..2ec63d6
--- /dev/null
+++ b/src/api/oms/aftersaleItem.js
@@ -0,0 +1,54 @@
+import request from '@/utils/request'
+
+// 查询订单售后列表
+export function listOmsAftersaleItem(query, pageReq) {
+ return request({
+ url: '/oms/aftersaleItem/list',
+ method: 'post',
+ data: query,
+ params: pageReq
+ })
+}
+
+// 查询订单售后详细
+export function getOmsAftersaleItem(id) {
+ return request({
+ url: '/oms/aftersaleItem/' + id,
+ method: 'get'
+ })
+}
+
+// 新增订单售后
+export function addOmsAftersaleItem(data) {
+ return request({
+ url: '/oms/aftersaleItem',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改订单售后
+export function updateOmsAftersaleItem(data) {
+ return request({
+ url: '/oms/aftersaleItem',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除订单售后
+export function delOmsAftersaleItem(id) {
+ return request({
+ url: '/oms/aftersaleItem/' + id,
+ method: 'delete'
+ })
+}
+
+// 导出订单售后
+export function exportOmsAftersaleItem(query) {
+ return request({
+ url: '/oms/aftersaleItem/export',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/src/api/oms/order.js b/src/api/oms/order.js
new file mode 100644
index 0000000..31644ff
--- /dev/null
+++ b/src/api/oms/order.js
@@ -0,0 +1,94 @@
+import request from '@/utils/request'
+
+// 查询订单表列表
+export function listOmsOrder(query, pageReq) {
+ return request({
+ url: '/oms/order/list',
+ method: 'post',
+ data: query,
+ params: pageReq
+ })
+}
+
+// 查询订单表详细
+export function getOmsOrder(id) {
+ return request({
+ url: '/oms/order/' + id,
+ method: 'get'
+ })
+}
+// 查询订单手机号密文
+export function getDecryptPhone(id) {
+ return request({
+ url: '/oms/order/decryptPhone/' + id,
+ method: 'get'
+ })
+}
+// 新增订单表
+export function addOmsOrder(data) {
+ return request({
+ url: '/oms/order',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改订单表
+export function updateOmsOrder(data) {
+ return request({
+ url: '/oms/order',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除订单表
+export function delOmsOrder(id) {
+ return request({
+ url: '/oms/order/' + id,
+ method: 'delete'
+ })
+}
+
+// 导出订单表
+export function exportOmsOrder(query) {
+ return request({
+ url: '/oms/order/export',
+ method: 'get',
+ params: query
+ })
+}
+
+// 保存商家备注
+export function saveMerchantNote(data){
+ return request({
+ url: '/oms/order/merchantNote/add',
+ method: 'post',
+ data: data
+ })
+}
+
+// 发货
+export function deliverProduct(data){
+ return request({
+ url: '/oms/order/deliverProduct',
+ method: 'post',
+ data: data
+ })
+}
+
+export function updateReceiverAddress(data){
+ return request({
+ url: '/oms/order/receiver/update',
+ method: 'post',
+ data: data
+ })
+}
+
+// 查看订单操作日志
+export function viewLog(orderId){
+ return request({
+ url:`/oms/order/log/` + orderId,
+ method: 'get'
+ })
+}
diff --git a/src/api/oms/orderDeliveryHistory.js b/src/api/oms/orderDeliveryHistory.js
new file mode 100644
index 0000000..59f08e9
--- /dev/null
+++ b/src/api/oms/orderDeliveryHistory.js
@@ -0,0 +1,54 @@
+import request from '@/utils/request'
+
+// 查询订单发货记录列表
+export function listOmsOrderDeliveryHistory(query, pageReq) {
+ return request({
+ url: '/oms/orderDeliveryHistory/list',
+ method: 'post',
+ data: query,
+ params: pageReq
+ })
+}
+
+// 查询订单发货记录详细
+export function getOmsOrderDeliveryHistory(id) {
+ return request({
+ url: '/oms/orderDeliveryHistory/' + id,
+ method: 'get'
+ })
+}
+
+// 新增订单发货记录
+export function addOmsOrderDeliveryHistory(data) {
+ return request({
+ url: '/oms/orderDeliveryHistory',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改订单发货记录
+export function updateOmsOrderDeliveryHistory(data) {
+ return request({
+ url: '/oms/orderDeliveryHistory',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除订单发货记录
+export function delOmsOrderDeliveryHistory(id) {
+ return request({
+ url: '/oms/orderDeliveryHistory/' + id,
+ method: 'delete'
+ })
+}
+
+// 导出订单发货记录
+export function exportOmsOrderDeliveryHistory(query) {
+ return request({
+ url: '/oms/orderDeliveryHistory/export',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/src/api/oms/orderItem.js b/src/api/oms/orderItem.js
new file mode 100644
index 0000000..9b05a42
--- /dev/null
+++ b/src/api/oms/orderItem.js
@@ -0,0 +1,54 @@
+import request from '@/utils/request'
+
+// 查询订单中所包含的商品列表
+export function listOmsOrderItem(query, pageReq) {
+ return request({
+ url: '/oms/orderItem/list',
+ method: 'post',
+ data: query,
+ params: pageReq
+ })
+}
+
+// 查询订单中所包含的商品详细
+export function getOmsOrderItem(id) {
+ return request({
+ url: '/oms/orderItem/' + id,
+ method: 'get'
+ })
+}
+
+// 新增订单中所包含的商品
+export function addOmsOrderItem(data) {
+ return request({
+ url: '/oms/orderItem',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改订单中所包含的商品
+export function updateOmsOrderItem(data) {
+ return request({
+ url: '/oms/orderItem',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除订单中所包含的商品
+export function delOmsOrderItem(id) {
+ return request({
+ url: '/oms/orderItem/' + id,
+ method: 'delete'
+ })
+}
+
+// 导出订单中所包含的商品
+export function exportOmsOrderItem(query) {
+ return request({
+ url: '/oms/orderItem/export',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/src/api/oms/orderOperateHistory.js b/src/api/oms/orderOperateHistory.js
new file mode 100644
index 0000000..ebb3055
--- /dev/null
+++ b/src/api/oms/orderOperateHistory.js
@@ -0,0 +1,54 @@
+import request from '@/utils/request'
+
+// 查询订单操作历史记录列表
+export function listOmsOrderOperateHistory(query, pageReq) {
+ return request({
+ url: '/oms/orderOperateHistory/list',
+ method: 'post',
+ data: query,
+ params: pageReq
+ })
+}
+
+// 查询订单操作历史记录详细
+export function getOmsOrderOperateHistory(id) {
+ return request({
+ url: '/oms/orderOperateHistory/' + id,
+ method: 'get'
+ })
+}
+
+// 新增订单操作历史记录
+export function addOmsOrderOperateHistory(data) {
+ return request({
+ url: '/oms/orderOperateHistory',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改订单操作历史记录
+export function updateOmsOrderOperateHistory(data) {
+ return request({
+ url: '/oms/orderOperateHistory',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除订单操作历史记录
+export function delOmsOrderOperateHistory(id) {
+ return request({
+ url: '/oms/orderOperateHistory/' + id,
+ method: 'delete'
+ })
+}
+
+// 导出订单操作历史记录
+export function exportOmsOrderOperateHistory(query) {
+ return request({
+ url: '/oms/orderOperateHistory/export',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/src/api/oms/wechatPaymentHistory.js b/src/api/oms/wechatPaymentHistory.js
new file mode 100644
index 0000000..4c033de
--- /dev/null
+++ b/src/api/oms/wechatPaymentHistory.js
@@ -0,0 +1,54 @@
+import request from '@/utils/request'
+
+// 查询微信订单表列表
+export function listOmsWechatPaymentHistory(query, pageReq) {
+ return request({
+ url: '/pms/omsWechatPaymentHistory/list',
+ method: 'post',
+ data: query,
+ params: pageReq
+ })
+}
+
+// 查询微信订单表详细
+export function getOmsWechatPaymentHistory(id) {
+ return request({
+ url: '/pms/omsWechatPaymentHistory/' + id,
+ method: 'get'
+ })
+}
+
+// 新增微信订单表
+export function addOmsWechatPaymentHistory(data) {
+ return request({
+ url: '/pms/omsWechatPaymentHistory',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改微信订单表
+export function updateOmsWechatPaymentHistory(data) {
+ return request({
+ url: '/pms/omsWechatPaymentHistory',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除微信订单表
+export function delOmsWechatPaymentHistory(id) {
+ return request({
+ url: '/pms/omsWechatPaymentHistory/' + id,
+ method: 'delete'
+ })
+}
+
+// 导出微信订单表
+export function exportOmsWechatPaymentHistory(query) {
+ return request({
+ url: '/pms/omsWechatPaymentHistory/export',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/src/api/pms/brand.js b/src/api/pms/brand.js
new file mode 100644
index 0000000..11c3253
--- /dev/null
+++ b/src/api/pms/brand.js
@@ -0,0 +1,62 @@
+import request from '@/utils/request'
+
+// 查询品牌管理列表
+export function listPmsBrand(query, pageReq) {
+ return request({
+ url: '/pms/brand/list',
+ method: 'post',
+ data: query,
+ params: pageReq
+ })
+}
+export function allBrand(query, pageReq) {
+ return request({
+ url: '/pms/brand/all',
+ method: 'post',
+ data: query,
+ params: pageReq
+ })
+}
+
+// 查询品牌管理详细
+export function getPmsBrand(id) {
+ return request({
+ url: '/pms/brand/' + id,
+ method: 'get'
+ })
+}
+
+// 新增品牌管理
+export function addPmsBrand(data) {
+ return request({
+ url: '/pms/brand',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改品牌管理
+export function updatePmsBrand(data) {
+ return request({
+ url: '/pms/brand',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除品牌管理
+export function delPmsBrand(id) {
+ return request({
+ url: '/pms/brand/' + id,
+ method: 'delete'
+ })
+}
+
+// 导出品牌管理
+export function exportPmsBrand(query) {
+ return request({
+ url: '/pms/brand/export',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/src/api/pms/product.js b/src/api/pms/product.js
new file mode 100644
index 0000000..b280364
--- /dev/null
+++ b/src/api/pms/product.js
@@ -0,0 +1,54 @@
+import request from '@/utils/request'
+
+// 查询商品信息列表
+export function listPmsProduct(query, pageReq) {
+ return request({
+ url: '/pms/product/list',
+ method: 'post',
+ data: query,
+ params: pageReq
+ })
+}
+
+// 查询商品信息详细
+export function getPmsProduct(id) {
+ return request({
+ url: '/pms/product/' + id,
+ method: 'get'
+ })
+}
+
+// 新增商品信息
+export function addPmsProduct(data) {
+ return request({
+ url: '/pms/product',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改商品信息
+export function updatePmsProduct(data) {
+ return request({
+ url: '/pms/product',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除商品信息
+export function delPmsProduct(id) {
+ return request({
+ url: '/pms/product/' + id,
+ method: 'delete'
+ })
+}
+
+// 导出商品信息
+export function exportPmsProduct(query) {
+ return request({
+ url: '/pms/product/export',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/src/api/pms/productCategory.js b/src/api/pms/productCategory.js
new file mode 100644
index 0000000..7ca41e3
--- /dev/null
+++ b/src/api/pms/productCategory.js
@@ -0,0 +1,54 @@
+import request from '@/utils/request'
+
+// 查询商品分类列表
+export function listPmsProductCategory(query, pageReq) {
+ return request({
+ url: '/pms/productCategory/list',
+ method: 'post',
+ data: query,
+ params: pageReq
+ })
+}
+
+// 查询商品分类详细
+export function getPmsProductCategory(id) {
+ return request({
+ url: '/pms/productCategory/' + id,
+ method: 'get'
+ })
+}
+
+// 新增商品分类
+export function addPmsProductCategory(data) {
+ return request({
+ url: '/pms/productCategory',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改商品分类
+export function updatePmsProductCategory(data) {
+ return request({
+ url: '/pms/productCategory',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除商品分类
+export function delPmsProductCategory(id) {
+ return request({
+ url: '/pms/productCategory/' + id,
+ method: 'delete'
+ })
+}
+
+// 导出商品分类
+export function exportPmsProductCategory(query) {
+ return request({
+ url: '/pms/productCategory/export',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/src/api/pms/sku.js b/src/api/pms/sku.js
new file mode 100644
index 0000000..0f0e3dc
--- /dev/null
+++ b/src/api/pms/sku.js
@@ -0,0 +1,54 @@
+import request from '@/utils/request'
+
+// 查询sku信息列表
+export function listPmsSku(query, pageReq) {
+ return request({
+ url: '/pms/sku/list',
+ method: 'post',
+ data: query,
+ params: pageReq
+ })
+}
+
+// 查询sku信息详细
+export function getPmsSku(id) {
+ return request({
+ url: '/pms/sku/' + id,
+ method: 'get'
+ })
+}
+
+// 新增sku信息
+export function addPmsSku(data) {
+ return request({
+ url: '/pms/sku',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改sku信息
+export function updatePmsSku(data) {
+ return request({
+ url: '/pms/sku',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除sku信息
+export function delPmsSku(id) {
+ return request({
+ url: '/pms/sku/' + id,
+ method: 'delete'
+ })
+}
+
+// 导出sku信息
+export function exportPmsSku(query) {
+ return request({
+ url: '/pms/sku/export',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/src/api/statistics/index.js b/src/api/statistics/index.js
new file mode 100644
index 0000000..f2ce071
--- /dev/null
+++ b/src/api/statistics/index.js
@@ -0,0 +1,32 @@
+import request from '@/utils/request'
+
+// 获取首页查询热卖商品TOP
+export function goodsStatistics(query) {
+ return request({
+ url: '/dev/statistics/index/goodsStatistics',
+ method: 'get',
+ params: query
+ })
+}
+export function memberAndCartStatistics() {
+ return request({
+ url: '/dev/statistics/index/memberAndCart/statistics',
+ method: 'get'
+ })
+}
+
+export function orderAndAftersaleStatistics() {
+ return request({
+ url: '/dev/statistics/index/order/aftersale/statistics',
+ method: 'get'
+ })
+}
+
+// 获取订单信息
+export function orderStatistics(query) {
+ return request({
+ url: '/dev/statistics/index/orderStatistics',
+ method: 'post',
+ data: query
+ })
+}
diff --git a/src/api/system/common.js b/src/api/system/common.js
new file mode 100644
index 0000000..56b3ded
--- /dev/null
+++ b/src/api/system/common.js
@@ -0,0 +1,10 @@
+import request from '@/utils/request';
+
+// 查询省市区列表
+export function areaSelect(query) {
+ return request({
+ url: '/common/area',
+ method: 'get',
+ params: query
+ });
+}
diff --git a/src/api/ums/feedback.js b/src/api/ums/feedback.js
new file mode 100644
index 0000000..6067524
--- /dev/null
+++ b/src/api/ums/feedback.js
@@ -0,0 +1,26 @@
+import request from "@/utils/request";
+
+export function updateMark(data) {
+ return request({
+ url: '/ums/feedback/mark/update',
+ method: 'post',
+ data: data
+ })
+}
+
+export function changeHandleStatus(data) {
+ return request({
+ url: '/ums/feedback/handle/status/change',
+ method: 'post',
+ data: data
+ })
+}
+
+export function listFeedbacks(query, pageReq) {
+ return request({
+ url: '/ums/feedback/list',
+ method: 'post',
+ data: query,
+ params: pageReq
+ })
+}
diff --git a/src/api/ums/member.js b/src/api/ums/member.js
new file mode 100644
index 0000000..7f46e44
--- /dev/null
+++ b/src/api/ums/member.js
@@ -0,0 +1,104 @@
+import request from '@/utils/request'
+
+// 查询会员信息列表
+export function listUmsMember(query, pageReq) {
+ return request({
+ url: '/ums/member/list',
+ method: 'post',
+ data: query,
+ params: pageReq
+ })
+}
+
+// 查询会员信息详细
+export function getUmsMember(id) {
+ return request({
+ url: '/ums/member/' + id,
+ method: 'get'
+ })
+}
+
+// 新增会员信息
+export function addUmsMember(data) {
+ return request({
+ url: '/ums/member',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改会员信息
+export function updateUmsMember(data) {
+ return request({
+ url: '/ums/member',
+ method: 'put',
+ data: data
+ })
+}
+export function updateUmsMemberMark(data) {
+ return request({
+ url: '/ums/member/mark/update',
+ method: 'post',
+ data: data
+ })
+}
+
+// 删除会员信息
+export function delUmsMember(id) {
+ return request({
+ url: '/ums/member/' + id,
+ method: 'delete'
+ })
+}
+
+// 导出会员信息
+export function exportUmsMember(query) {
+ return request({
+ url: '/ums/member/export',
+ method: 'get',
+ params: query
+ })
+}
+
+// 更改会员账号状态
+export function changeAccountStatus(data) {
+ return request({
+ url: '/ums/member/status/change',
+ method: 'post',
+ data: data
+ })
+}
+
+// 获取解密手机号
+export function decryptedPhone(data) {
+ return request({
+ url: `/ums/member/phone/decrypt/` + data,
+ method: 'get'
+ })
+}
+
+// 查询会员统计数据
+export function viewStatistics(memberId){
+ return request({
+ url: `/ums/member/view/statistics/` + memberId,
+ method: 'get'
+ })
+}
+
+export function getMiniWechatImg(params){
+ return request({
+ url: `/ums/member/wechat/code`,
+ method: 'get',
+ params
+ })
+}
+
+export function judgeQrCode(params){
+ return request({
+ url: `/no-auth/verified/code`,
+ method: 'get',
+ params
+ })
+}
+
+
diff --git a/src/api/ums/memberAddress.js b/src/api/ums/memberAddress.js
new file mode 100644
index 0000000..13eab6f
--- /dev/null
+++ b/src/api/ums/memberAddress.js
@@ -0,0 +1,54 @@
+import request from '@/utils/request'
+
+// 查询会员收货地址列表
+export function listUmsMemberAddress(query, pageReq) {
+ return request({
+ url: '/ums/memberAddress/list',
+ method: 'post',
+ data: query,
+ params: pageReq
+ })
+}
+
+// 查询会员收货地址详细
+export function getUmsMemberAddress(id) {
+ return request({
+ url: '/ums/memberAddress/' + id,
+ method: 'get'
+ })
+}
+
+// 新增会员收货地址
+export function addUmsMemberAddress(data) {
+ return request({
+ url: '/ums/memberAddress',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改会员收货地址
+export function updateUmsMemberAddress(data) {
+ return request({
+ url: '/ums/memberAddress',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除会员收货地址
+export function delUmsMemberAddress(id) {
+ return request({
+ url: '/ums/memberAddress/' + id,
+ method: 'delete'
+ })
+}
+
+// 导出会员收货地址
+export function exportUmsMemberAddress(query) {
+ return request({
+ url: '/ums/memberAddress/export',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/src/api/ums/memberCart.js b/src/api/ums/memberCart.js
new file mode 100644
index 0000000..734e832
--- /dev/null
+++ b/src/api/ums/memberCart.js
@@ -0,0 +1,54 @@
+import request from '@/utils/request'
+
+// 查询购物车列表
+export function listUmsMemberCart(query, pageReq) {
+ return request({
+ url: '/ums/memberCart/list',
+ method: 'post',
+ data: query,
+ params: pageReq
+ })
+}
+
+// 查询购物车详细
+export function getUmsMemberCart(id) {
+ return request({
+ url: '/ums/memberCart/' + id,
+ method: 'get'
+ })
+}
+
+// 新增购物车
+export function addUmsMemberCart(data) {
+ return request({
+ url: '/ums/memberCart',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改购物车
+export function updateUmsMemberCart(data) {
+ return request({
+ url: '/ums/memberCart',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除购物车
+export function delUmsMemberCart(id) {
+ return request({
+ url: '/ums/memberCart/' + id,
+ method: 'delete'
+ })
+}
+
+// 导出购物车
+export function exportUmsMemberCart(query) {
+ return request({
+ url: '/ums/memberCart/export',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/src/api/ums/memberLogininfor.js b/src/api/ums/memberLogininfor.js
new file mode 100644
index 0000000..a883dcf
--- /dev/null
+++ b/src/api/ums/memberLogininfor.js
@@ -0,0 +1,54 @@
+import request from '@/utils/request'
+
+// 查询会员登录记录列表
+export function listUmsMemberLogininfor(query, pageReq) {
+ return request({
+ url: '/ums/memberLogininfor/list',
+ method: 'post',
+ data: query,
+ params: pageReq
+ })
+}
+
+// 查询会员登录记录详细
+export function getUmsMemberLogininfor(id) {
+ return request({
+ url: '/ums/memberLogininfor/' + id,
+ method: 'get'
+ })
+}
+
+// 新增会员登录记录
+export function addUmsMemberLogininfor(data) {
+ return request({
+ url: '/ums/memberLogininfor',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改会员登录记录
+export function updateUmsMemberLogininfor(data) {
+ return request({
+ url: '/ums/memberLogininfor',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除会员登录记录
+export function delUmsMemberLogininfor(id) {
+ return request({
+ url: '/ums/memberLogininfor/' + id,
+ method: 'delete'
+ })
+}
+
+// 导出会员登录记录
+export function exportUmsMemberLogininfor(query) {
+ return request({
+ url: '/ums/memberLogininfor/export',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/src/api/ums/memberWechat.js b/src/api/ums/memberWechat.js
new file mode 100644
index 0000000..bb82e28
--- /dev/null
+++ b/src/api/ums/memberWechat.js
@@ -0,0 +1,54 @@
+import request from '@/utils/request'
+
+// 查询用户微信信息列表
+export function listUmsMemberWechat(query, pageReq) {
+ return request({
+ url: '/ums/memberWechat/list',
+ method: 'post',
+ data: query,
+ params: pageReq
+ })
+}
+
+// 查询用户微信信息详细
+export function getUmsMemberWechat(id) {
+ return request({
+ url: '/ums/memberWechat/' + id,
+ method: 'get'
+ })
+}
+
+// 新增用户微信信息
+export function addUmsMemberWechat(data) {
+ return request({
+ url: '/ums/memberWechat',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改用户微信信息
+export function updateUmsMemberWechat(data) {
+ return request({
+ url: '/ums/memberWechat',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除用户微信信息
+export function delUmsMemberWechat(id) {
+ return request({
+ url: '/ums/memberWechat/' + id,
+ method: 'delete'
+ })
+}
+
+// 导出用户微信信息
+export function exportUmsMemberWechat(query) {
+ return request({
+ url: '/ums/memberWechat/export',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/src/components/SeeAdsComponent.vue b/src/components/SeeAdsComponent.vue
new file mode 100644
index 0000000..46c9702
--- /dev/null
+++ b/src/components/SeeAdsComponent.vue
@@ -0,0 +1,71 @@
+
+
+ 使用微信扫描下方二维码,观看完广告获取验证码
+ 注:如果第一次扫码未弹出广告,请重新扫码进入
+
+
+
+ 提交
+
+
+
+
+
+
diff --git a/src/permission.ts b/src/permission.ts
index fb60b07..c63a81b 100644
--- a/src/permission.ts
+++ b/src/permission.ts
@@ -19,6 +19,9 @@ const isWhiteList = (path: string) => {
router.beforeEach(async (to, from, next) => {
NProgress.start();
+ // 仅仅限本地无token调试时候,不做token校验
+ /* next();
+ return;*/
if (getToken()) {
to.meta.title && useSettingsStore().setTitle(to.meta.title as string);
/* has token*/
diff --git a/src/router/index.ts b/src/router/index.ts
index f96d08f..6699eab 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -94,6 +94,121 @@ export const constantRoutes: RouteRecordRaw[] = [
}
]
},
+
+ // 新迁移的菜单,开发阶段暂时放在固定菜单内,后续迁移到权限菜单里
+ {
+ path: '/system/user-auth',
+ component: Layout,
+ hidden: true,
+ permissions: ['system:user:edit'],
+ children: [
+ {
+ path: 'role/:userId(\\d+)',
+ component: () => import('@/views/system/user/authRole.vue'),
+ name: 'AuthRole',
+ meta: { title: '分配角色', activeMenu: '/system/user' }
+ }
+ ]
+ },
+ {
+ path: '/system/role-auth',
+ component: Layout,
+ hidden: true,
+ permissions: ['system:role:edit'],
+ children: [
+ {
+ path: 'user/:roleId(\\d+)',
+ component: () => import('@/views/system/role/authUser.vue'),
+ name: 'AuthUser',
+ meta: { title: '分配用户', activeMenu: '/system/role' }
+ }
+ ]
+ },
+ {
+ path: '/system/dict-data',
+ component: Layout,
+ hidden: true,
+ permissions: ['system:dict:list'],
+ children: [
+ {
+ path: 'index/:dictId(\\d+)',
+ component: () => import('@/views/system/dict/data.vue'),
+ name: 'Data',
+ meta: { title: '字典数据', activeMenu: '/system/dict' }
+ }
+ ]
+ },
+ {
+ path: '/monitor/job-log',
+ component: Layout,
+ hidden: true,
+ permissions: ['monitor:job:list'],
+ children: [
+ {
+ path: 'index',
+ component: () => import('@/views/monitor/job/log.vue'),
+ name: 'JobLog',
+ meta: { title: '调度日志', activeMenu: '/monitor/job' }
+ }
+ ]
+ },
+ {
+ path: '/tool/gen-edit',
+ component: Layout,
+ hidden: true,
+ permissions: ['tool:gen:edit'],
+ children: [
+ {
+ path: 'index/:tableId(\\d+)',
+ component: () => import('@/views/tool/gen/editTable.vue'),
+ name: 'GenEdit',
+ meta: { title: '修改生成配置', activeMenu: '/tool/gen' }
+ }
+ ]
+ },
+ {
+ path: '/product',
+ component: Layout,
+ hidden: true,
+ permissions: ['pms:product:list'],
+ children: [
+ {
+ path: 'edit',
+ component: () => import('@/views/pms/product/AddProduct.vue'),
+ name: 'addProduct',
+ meta: { title: '编辑商品' }
+ }
+ ]
+ },
+ {
+ path: '/order',
+ component: Layout,
+ hidden: true,
+ permissions: ['oms:order:query'],
+ children: [
+ {
+ path: 'detail',
+ component: () => import('@/views/oms/order/detail.vue'),
+ name: 'orderDetail',
+ meta: { title: '订单详情' }
+ }
+ ]
+ },
+
+ {
+ path: '/aftersale',
+ component: Layout,
+ hidden: true,
+ // permissions: ['oms:aftersale:query'],
+ children: [
+ {
+ path: 'detail',
+ component: () => import('@/views/oms/aftersale/detail.vue'),
+ name: 'aftersaleOrderDetail',
+ meta: { title: '售后订单详情' }
+ }
+ ]
+ },
// 内容中心
{
path: '/content-center',
diff --git a/src/store/getters.js b/src/store/getters.js
new file mode 100644
index 0000000..3dc5e16
--- /dev/null
+++ b/src/store/getters.js
@@ -0,0 +1,27 @@
+const getters = {
+ sidebar: (state) => state.app.sidebar,
+ size: (state) => state.app.size,
+ device: (state) => state.app.device,
+
+ visitedViews: (state) => state.tagsView.visitedViews,
+ cachedViews: (state) => state.tagsView.cachedViews,
+
+ token: (state) => state.user.token,
+ avatar: (state) => state.user.avatar,
+ name: (state) => state.user.name,
+ userId: (state) => state.user.userId,
+ introduction: (state) => state.user.introduction,
+ roles: (state) => state.user.roles,
+ permissions: (state) => state.user.permissions,
+
+ permission_routes: (state) => state.permission.routes,
+ topbarRouters: (state) => state.permission.topbarRouters,
+ defaultRoutes: (state) => state.permission.defaultRoutes,
+ sidebarRouters: (state) => state.permission.sidebarRouters,
+
+ dictMap: (state) => state.dict.dictMap,
+ productCategories: (state) => state.mall.productCategories,
+ areaSelect: (state) => state.mall.areaSelect,
+ brandList: (state) => state.mall.brandList
+};
+export default getters;
diff --git a/src/store/modules/mall.ts b/src/store/modules/mall.ts
new file mode 100644
index 0000000..d54feb3
--- /dev/null
+++ b/src/store/modules/mall.ts
@@ -0,0 +1,50 @@
+import { defineStore } from 'pinia';
+import { reactive } from 'vue';
+import { listPmsProductCategory } from '@/api/pms/productCategory';
+import { allBrand } from '@/api/pms/brand';
+import { areaSelect } from '@/api/system/common.js';
+
+export const useMallStore = defineStore('mall', () => {
+ const state = reactive({
+ productCategories: [],
+ brandList: [],
+ areaSelect: [],
+ aaaaaaa: 'store开发测试'
+ });
+ const aaaaaaa = ref('store开发测试');
+ const changeAAA = (info: any) => {
+ aaaaaaa.value = info;
+ };
+ const loadProductCategories = async (force: any = false) => {
+ if (!force && state.productCategories.length > 0) {
+ return Promise.resolve();
+ }
+ return listPmsProductCategory({}).then((res: any) => {
+ state.productCategories = res;
+ });
+ };
+ const loadAreaSelect = async (force: any = false) => {
+ if (!force && state.areaSelect.length > 0) {
+ return Promise.resolve();
+ }
+ return areaSelect({}).then((res) => {
+ state.areaSelect = res.data;
+ });
+ };
+ const loadBrandList = async (force: any = false) => {
+ if (!force && state.brandList.length > 0) {
+ return Promise.resolve();
+ }
+ return allBrand({}).then((res: any) => {
+ state.brandList = res;
+ });
+ };
+ return {
+ changeAAA,
+ aaaaaaa,
+ state,
+ loadProductCategories,
+ loadAreaSelect,
+ loadBrandList
+ };
+});
diff --git a/src/utils/DateUtil.js b/src/utils/DateUtil.js
new file mode 100644
index 0000000..abfe11b
--- /dev/null
+++ b/src/utils/DateUtil.js
@@ -0,0 +1,222 @@
+/**
+ * Created by lcx47996 on 2017/12/25.
+ */
+
+export function dateFormat(date, format) {
+ if (!date || date === 0) {
+ return '';
+ }
+ if (!(date instanceof Date)) {
+ date = new Date(date);
+ if (date.toString() === 'Invalid Date') {
+ return '无效时间戳';
+ }
+ }
+ format = format || 'yyyy-MM-dd hh:mm:ss';
+ const o = {
+ 'M+': date.getMonth() + 1, // 月份
+ 'd+': date.getDate(), // 日
+ 'h+': date.getHours(), // 小时
+ 'm+': date.getMinutes(), // 分
+ 's+': date.getSeconds(), // 秒
+ 'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
+ 'S': date.getMilliseconds() // 毫秒
+ };
+ if (/(y+)/.test(format)) {
+ format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
+ }
+ for (const k in o) {
+ if (new RegExp('(' + k + ')').test(format)) {
+ format = format.replace(RegExp.$1, RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length));
+ }
+ }
+ return format;
+}
+
+function getAfterDate(after) {
+ var dd = new Date();
+ dd.setDate(dd.getDate() + after); // 获取AddDayCount天后的日期
+ var y = dd.getFullYear();
+ var m = dd.getMonth() + 1; // 获取当前月份的日期
+ var d = dd.getDate();
+ return y + '-' + m + '-' + d;
+}
+
+function getAfterDateReturnDate(datetime, after) {
+ if (!(datetime.type instanceof Date)) {
+ return datetime;
+ }
+ var r = new Date(datetime.getTime());
+ r.setDate(datetime.getDate() + after); // 获取AddDayCount天后的日期
+ return r;
+}
+
+function getAfterHourReturnDate(datetime, after) {
+ if (!(datetime.type instanceof Date)) {
+ return datetime;
+ }
+ var r = new Date(datetime.getTime() + after * 60 * 60 * 1000);
+ return r;
+}
+
+function getAfterMounth(date, after) {
+ var dd = new Date();
+ dd.setMonth(dd.getMonth() + after); // 获取AddDayCount天后的日期
+ var y = dd.getFullYear();
+ var m = dd.getMonth() + 1; // 获取当前月份的日期
+ var d = dd.getDate();
+ return y + '-' + m + '-' + d;
+}
+
+/**
+ * 计算2个日期相差的天数,不包含今天,如:2016-12-13到2016-12-15,相差2天
+ */
+function dateDiff(startDate, endDate) {
+ return parseInt((endDate - startDate) / 1000 / 60 / 60 / 24); // 把相差的毫秒数转换为天数
+}
+
+/**
+ * 计算2个日期相差的天数,包含今天,如:2016-12-13到2016-12-15,相差3天
+ */
+function dateDiffIncludeToday(startDate, endDate) {
+ return parseInt((endDate - startDate) / 1000 / 60 / 60 / 24) + 1; // 把相差的毫秒数转换为天数
+}
+
+/**
+ * 获取凌晨时间
+ * @param day
+ */
+export function getMorningTime(day = 0) {
+ if (day == null) {
+ return null;
+ }
+ const timeStamp = new Date(new Date().setHours(0, 0, 0, 0)).getTime();
+ return new Date(timeStamp + day * 86400000);
+}
+
+export function getStartEnd(length) {
+ const end = getMorningTime(0);
+ const start = getMorningTime(0);
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * length);
+ return { end, start };
+}
+
+function getTimeShort() {
+ const timeShort = [
+ {
+ text: '今天',
+ onClick(picker) {
+ const { end, start } = getStartEnd(0);
+ picker.$emit('pick', [start, end]);
+ }
+ },
+ {
+ text: '昨天',
+ onClick(picker) {
+ const time = getMorningTime(0);
+ time.setTime(time.getTime() - 3600 * 1000 * 24);
+ picker.$emit('pick', [time, time]);
+ }
+ },
+ {
+ text: '最近一周',
+ onClick(picker) {
+ const { end, start } = getStartEnd(7);
+ picker.$emit('pick', [start, end]);
+ }
+ },
+ {
+ text: '最近一个月',
+ onClick(picker) {
+ const { end, start } = getStartEnd(30);
+ picker.$emit('pick', [start, end]);
+ }
+ },
+ {
+ text: '最近三个月',
+ onClick(picker) {
+ const { end, start } = getStartEnd(90);
+ picker.$emit('pick', [start, end]);
+ }
+ }
+ ];
+ return timeShort;
+}
+
+function getTimeShort2() {
+ const timeShort = [
+ {
+ text: '今天',
+ onClick(picker) {
+ const temp = new Date();
+ picker.$emit('pick', [new Date(temp.setHours(0, 0, 0, 0)), new Date(temp.setHours(23, 59, 59, 0))]);
+ }
+ },
+ {
+ text: '昨天',
+ onClick(picker) {
+ const temp = new Date();
+ temp.setTime(temp.getTime() - 3600 * 1000 * 24);
+ picker.$emit('pick', [new Date(temp.setHours(0, 0, 0, 0)), new Date(temp.setHours(23, 59, 59, 0))]);
+ }
+ },
+ {
+ text: '前一周',
+ onClick(picker) {
+ const start = new Date();
+ const end = new Date();
+ start.setTime(end.getTime() - 3600 * 1000 * 24 * 6);
+ picker.$emit('pick', [new Date(start.setHours(0, 0, 0, 0)), new Date(end.setHours(23, 59, 59, 0))]);
+ }
+ },
+ {
+ text: '这个月',
+ onClick(picker) {
+ const end = getCurrentMonthLast();
+ const start = getCurrentMonthFirst();
+ picker.$emit('pick', [new Date(start.setHours(0, 0, 0, 0)), new Date(end.setHours(23, 59, 59, 0))]);
+
+ function getCurrentMonthFirst() {
+ let date = new Date();
+ date.setDate(1);
+ return date;
+ }
+
+ // 获取当前月的最后一天
+ function getCurrentMonthLast() {
+ let date = new Date();
+ let currentMonth = date.getMonth();
+ let nextMonth = ++currentMonth;
+ let nextMonthFirstDay = new Date(date.getFullYear(), nextMonth, 1);
+ let oneDay = 1000 * 60 * 60 * 24;
+
+ return new Date(nextMonthFirstDay - oneDay);
+ }
+ }
+ },
+ {
+ text: '前一个月',
+ onClick(picker) {
+ const start = new Date();
+ const end = new Date();
+ start.setTime(end.getTime() - 3600 * 1000 * 24 * 29);
+ picker.$emit('pick', [new Date(start.setHours(0, 0, 0, 0)), new Date(end.setHours(23, 59, 59, 0))]);
+ }
+ }
+ ];
+ return timeShort;
+}
+
+export default {
+ 'getAfterDate': getAfterDate,
+ 'getAfterMounth': getAfterMounth,
+ 'dateDiff': dateDiff,
+ 'dateDiffIncludeToday': dateDiffIncludeToday,
+ 'getAfterDateReturnDate': getAfterDateReturnDate,
+ 'getAfterHourReturnDate': getAfterHourReturnDate,
+ getTimeShort,
+ getTimeShort2,
+ dateFormat,
+ getStartEnd,
+ getMorningTime
+};
diff --git a/src/utils/is-star-plugin.js b/src/utils/is-star-plugin.js
new file mode 100644
index 0000000..f421308
--- /dev/null
+++ b/src/utils/is-star-plugin.js
@@ -0,0 +1,218 @@
+// 用于检测用户是否 star 了仓库,如果没有 star,将弹窗提示用户 star 。
+import { Message, MessageBox } from 'element-ui'
+// 使用axios代替$.ajax
+import axios from 'axios'
+// 应用参数
+const client_id = '9addfce3712d04898b5a3dbb223db38b8d6495d2e66d07e3c0af71a708ee3b54'
+const client_secret = '1f73096ce60406eba8fb297a16245eadf2777540abdf531266b406b2479e25fe'
+
+// 检查成功后,多少天不再检查
+const allowDisparity = 1000 * 60 * 60 * 24 * 7
+
+/**
+ * 判断当前是否已 star
+ * @param owner 仓库所属空间地址(企业、组织或个人的地址path)
+ * @param repo 仓库路径(path)
+ * @param userId
+ * @param redirectUrl
+ * @param productName 开源项目名
+ * @param productLink 开源链接
+ */
+export function isStarRepo(owner, repo, userId, redirectUrl,productName,productLink) {
+ const judge = process.env.VUE_APP_JUDGE_STAR
+ if (!judge || judge == 0) {
+ return true;
+ }
+ const key = userId + '_' + owner + '_' + repo
+ console.log(key)
+ // 判断是否近期已经判断过了
+ try {
+ if (typeof window !== 'undefined') {
+ const isStarRepo = localStorage.getItem(key)
+ if (isStarRepo) {
+ // 记录 star 的时间,和当前时间的差距
+ const disparity = new Date().getTime() - parseInt(isStarRepo)
+
+ // 差距小于一月,不再检测,大于一月,再检测一下
+ if (disparity < allowDisparity) {
+ console.log('checked ...')
+ return true;
+ }
+ }
+ }
+ } catch (e) {
+ console.error(e)
+ }
+ return getCode(owner, repo, key, redirectUrl,productName,productLink)
+}
+
+// 去请求授权
+function getCode(owner, repo, key, redirectUrl,productName,productLink) {
+ // 检查url中是否有code
+ const code = getParam('code')
+ if (code) {
+ // 有 code,进一步去请求 access_token
+ getAccessToken(code, redirectUrl, owner, repo, key,productName,productLink)
+ } else {
+ // 不存在code,弹窗提示询问
+ confirmStar(redirectUrl,productName,productLink)
+ return false;
+ }
+}
+
+// 弹窗提示点 star
+function confirmStar(redirectUrl,productName,productLink) {
+
+ // 弹窗提示文字
+ const tipStr = `
+
+
嗨,同学,来支持一下 ${productName} 吧,为项目点个 star !
+
仅需两步即可完成:
+
+
2、点击下方 [ 同意授权检测 ] 按钮,同意 ${productName} 获取 API 权限进行检测。
+
+
本页面将在 star 后正常开放展示
+
+ `
+ // 弹窗提示
+ MessageBox.alert(tipStr, '温馨提示', {
+ // if you want to disable its autofocus
+ // autofocus: false,
+ confirmButtonText: '同意授权检测',
+ showClose: false,
+ dangerouslyUseHTMLString: true,
+ callback: (action) => {
+ if (action === 'confirm') {
+ // 用户点了确认,去 gitee 官方请求授权获取
+ goAuth(redirectUrl)
+ }
+ }
+ })
+}
+
+function toStar(redirectUrl,productName,productLink,accessToken,owner,repo,key,code) {
+
+ // 弹窗提示文字
+ const tipStr = `
+
+
嗨,同学,来支持一下 ${productName} 吧,为项目点个 star !
+
点击【去Star】按钮。进入${productName} 开源项目主页,在右上角点个 star 。
+
本页面将在 star 后正常开放展示
+
+ `
+ MessageBox.confirm(tipStr, '温馨提示', {
+ // if you want to disable its autofocus
+ // autofocus: false,
+ closeOnClickModal: false,
+ confirmButtonText: '去Star',
+ cancelButtonText: '我已Star',
+ showClose: false,
+ dangerouslyUseHTMLString: true,
+ callback: (action) => {
+ if (action === 'confirm') {
+ // 用户点了确认,去 gitee 官方请求授权获取
+ window.open(productLink)
+ toStar(redirectUrl,productName,productLink,accessToken,owner,repo,key,code)
+ }
+ if (action === 'cancel') {
+ //检测
+ judgeStar(accessToken,owner,repo,key,productName,productLink,redirectUrl,code)
+ }
+ }
+ })
+}
+
+// 跳转到 gitee 授权界面
+function goAuth(redirectUrl) {
+ location.href = 'https://gitee.com/oauth/authorize' +
+ '?client_id=' + client_id +
+ '&redirect_uri=' + redirectUrl +
+ '&response_type=code' +
+ '&scope=user_info'
+}
+
+// 获取 access_token
+function getAccessToken(code, redirectUrl, owner, repo, key,productName,productLink) {
+ // 根据 code 获取 access_token
+ axios.post('https://gitee.com/oauth/token', {
+ grant_type: 'authorization_code',
+ code: code,
+ client_id: client_id,
+ redirect_uri: redirectUrl,
+ client_secret: client_secret
+ })
+ .then(res => {
+ // 拿到 access_token
+ const accessToken = res.data.access_token
+ judgeStar(accessToken,owner, repo, key,productName,productLink,redirectUrl,code)
+ })
+ .catch(e => {
+ console.log('请求错误 ', e)
+ // 如果请求地址有错,可能是服务器宕机了,暂停一天检测
+ if (e.response && (e.response.status === 0 || e.response.status === 502)) {
+ // 一天内不再检查
+ const ygTime = allowDisparity - (1000 * 60 * 60 * 24)
+ if (typeof window !== 'undefined') {
+ localStorage.setItem(key, new Date().getTime() - ygTime)
+ }
+ // 刷新 url,去掉 code 参数
+ location.href = location.href.replace('?code=' + code, '')
+ }
+
+ // 无效授权,可能是 code 无效
+ const errorMsg = (e.response && e.response.data.error) || JSON.stringify(e)
+ if (errorMsg === 'invalid_grant') {
+ console.log('无效code', code)
+
+ let url = location.href.replace('?code=' + code, '')
+ url = url.replace('&code=' + code, '')
+ location.href = url
+ }
+ })
+}
+
+
+function judgeStar(accessToken,owner, repo, key,productName,productLink,redirectUrl,code){
+ // 根据 access_token 判断是否 star 了仓库
+ axios.get(`https://gitee.com/api/v5/user/starred/${owner}/${repo}`, {
+ params: { access_token: accessToken }
+ })
+ .then(res => {
+ // success 回调即代表已经 star,gitee API 请求体不返回任何数据
+ console.log('-> stared ...')
+ // 记录本次检查时间
+ if (typeof window !== 'undefined') {
+ localStorage.setItem(key, new Date().getTime())
+ }
+ Message.success('感谢你的支持 ❤️ ❤️ ❤️ ,我们将努力变得更加完善!')
+ setTimeout(()=>{
+ location.href = location.href.replace('?code=' + code, '')
+ },1000)
+ })
+ .catch(e => {
+ // console.log('ff请求错误 ', e);
+ // 如下返回,代表没有 star
+ if (e.response && e.response.status === 404) {
+ console.log('not star ...')
+ toStar(redirectUrl,productName,productLink,accessToken,owner,repo,key,code);
+ }
+ })
+}
+
+// 获取 url 携带的参数
+function getParam(name) {
+ const urls = window.location.href.split('?')
+ if (urls.length < 2) {
+ return null
+ }
+ let url = urls[1]
+ let obj = {} // 声明参数对象
+ let arr = url.split('&') // 以&符号分割为数组
+ for (let i = 0; i < arr.length; i++) {
+ let arrNew = arr[i].split('=') // 以"="分割为数组
+ obj[arrNew[0]] = arrNew[1]
+ }
+
+ return obj[name]
+}
+
diff --git a/src/views/act/couponActivity/index.vue b/src/views/act/couponActivity/index.vue
new file mode 100644
index 0000000..37cabbd
--- /dev/null
+++ b/src/views/act/couponActivity/index.vue
@@ -0,0 +1,387 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+
+
+
+
+
+ 新增
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 满{{ scope.row.minAmount }}元,优惠{{ scope.row.couponAmount }}元
+ 无门槛,优惠{{ scope.row.couponAmount }}元
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.beginTime }}
+ ~
+ {{ scope.row.endTime }}
+
+
+
+
+ 领取记录
+
+ 修改
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 张
+
+
+
+
+ 元
+
+
+
+
+ 元
+
+
+
+
+ 免费兑换
+ 积分兑换
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 全场通用
+ 指定商品可用
+ 指定商品不可用
+
+
+
+ 选择商品
+
+
+
+
+
+ {{ row.name }}
+
+
+
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/act/couponActivity/receiveList.vue b/src/views/act/couponActivity/receiveList.vue
new file mode 100644
index 0000000..f2d6d89
--- /dev/null
+++ b/src/views/act/couponActivity/receiveList.vue
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{scope.row.nickname}}
+
{{scope.row.phone}}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.beginTime}}
+ ~
+ {{ scope.row.endTime}}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/act/memberCoupon/index.vue b/src/views/act/memberCoupon/index.vue
new file mode 100644
index 0000000..ad48cb6
--- /dev/null
+++ b/src/views/act/memberCoupon/index.vue
@@ -0,0 +1,484 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+ {{showMoreCondition ? '收起条件' : '展开条件'}}
+
+
+
+
+
+ 新增
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.beginTime, '') }}
+
+
+
+
+ {{ parseTime(scope.row.endTime, '') }}
+
+
+
+
+
+
+ {{ parseTime(scope.row.useTime, '') }}
+
+
+
+
+ 修改
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 请选择字典生成
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/aws/systemStatistics/index.vue b/src/views/aws/systemStatistics/index.vue
new file mode 100644
index 0000000..98b2d20
--- /dev/null
+++ b/src/views/aws/systemStatistics/index.vue
@@ -0,0 +1,257 @@
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+
+ {{ parseTime(scope.row.date, '{y}-{m}-{d}') }}
+
+
+
+
+
+
+
+
+
+
+
+ ¥{{ scope.row.dealAmount.toFixed(2) }}
+
+
+
+
+
+ ¥{{ scope.row.aftersaleAmount.toFixed(2) }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/components/AddressSelector/index.vue b/src/views/components/AddressSelector/index.vue
new file mode 100644
index 0000000..b0832d8
--- /dev/null
+++ b/src/views/components/AddressSelector/index.vue
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
diff --git a/src/views/components/BrandSelect.vue b/src/views/components/BrandSelect.vue
new file mode 100644
index 0000000..f38b096
--- /dev/null
+++ b/src/views/components/BrandSelect.vue
@@ -0,0 +1,49 @@
+
+
+ {{ it.name }}
+
+
+
+
+
+
diff --git a/src/views/components/IndexOrderPanelGroup/TopProduct.vue b/src/views/components/IndexOrderPanelGroup/TopProduct.vue
new file mode 100644
index 0000000..3fa9e3a
--- /dev/null
+++ b/src/views/components/IndexOrderPanelGroup/TopProduct.vue
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+ 商品销量榜
+ 规格销量榜
+
+
+
+
+
+
+ 今日
+ 近七日
+ 近三十日
+
+
+
+
+
+
+
+
+
+
+ {{ key }}:{{ value }}
+
+
+
+
+
+
+
+
+
+ {{ row.totalSales }} 件
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/components/PanelGroup/index.vue b/src/views/components/PanelGroup/index.vue
new file mode 100644
index 0000000..adf945b
--- /dev/null
+++ b/src/views/components/PanelGroup/index.vue
@@ -0,0 +1,181 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/components/ProductCategorySelect.vue b/src/views/components/ProductCategorySelect.vue
new file mode 100644
index 0000000..9219e6f
--- /dev/null
+++ b/src/views/components/ProductCategorySelect.vue
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
diff --git a/src/views/components/icons/element-icons.js b/src/views/components/icons/element-icons.js
new file mode 100644
index 0000000..9ea4d63
--- /dev/null
+++ b/src/views/components/icons/element-icons.js
@@ -0,0 +1,3 @@
+const elementIcons = ['platform-eleme', 'eleme', 'delete-solid', 'delete', 's-tools', 'setting', 'user-solid', 'user', 'phone', 'phone-outline', 'more', 'more-outline', 'star-on', 'star-off', 's-goods', 'goods', 'warning', 'warning-outline', 'question', 'info', 'remove', 'circle-plus', 'success', 'error', 'zoom-in', 'zoom-out', 'remove-outline', 'circle-plus-outline', 'circle-check', 'circle-close', 's-help', 'help', 'minus', 'plus', 'check', 'close', 'picture', 'picture-outline', 'picture-outline-round', 'upload', 'upload2', 'download', 'camera-solid', 'camera', 'video-camera-solid', 'video-camera', 'message-solid', 'bell', 's-cooperation', 's-order', 's-platform', 's-fold', 's-unfold', 's-operation', 's-promotion', 's-home', 's-release', 's-ticket', 's-management', 's-open', 's-shop', 's-marketing', 's-flag', 's-comment', 's-finance', 's-claim', 's-custom', 's-opportunity', 's-data', 's-check', 's-grid', 'menu', 'share', 'd-caret', 'caret-left', 'caret-right', 'caret-bottom', 'caret-top', 'bottom-left', 'bottom-right', 'back', 'right', 'bottom', 'top', 'top-left', 'top-right', 'arrow-left', 'arrow-right', 'arrow-down', 'arrow-up', 'd-arrow-left', 'd-arrow-right', 'video-pause', 'video-play', 'refresh', 'refresh-right', 'refresh-left', 'finished', 'sort', 'sort-up', 'sort-down', 'rank', 'loading', 'view', 'c-scale-to-original', 'date', 'edit', 'edit-outline', 'folder', 'folder-opened', 'folder-add', 'folder-remove', 'folder-delete', 'folder-checked', 'tickets', 'document-remove', 'document-delete', 'document-copy', 'document-checked', 'document', 'document-add', 'printer', 'paperclip', 'takeaway-box', 'search', 'monitor', 'attract', 'mobile', 'scissors', 'umbrella', 'headset', 'brush', 'mouse', 'coordinate', 'magic-stick', 'reading', 'data-line', 'data-board', 'pie-chart', 'data-analysis', 'collection-tag', 'film', 'suitcase', 'suitcase-1', 'receiving', 'collection', 'files', 'notebook-1', 'notebook-2', 'toilet-paper', 'office-building', 'school', 'table-lamp', 'house', 'no-smoking', 'smoking', 'shopping-cart-full', 'shopping-cart-1', 'shopping-cart-2', 'shopping-bag-1', 'shopping-bag-2', 'sold-out', 'sell', 'present', 'box', 'bank-card', 'money', 'coin', 'wallet', 'discount', 'price-tag', 'news', 'guide', 'male', 'female', 'thumb', 'cpu', 'link', 'connection', 'open', 'turn-off', 'set-up', 'chat-round', 'chat-line-round', 'chat-square', 'chat-dot-round', 'chat-dot-square', 'chat-line-square', 'message', 'postcard', 'position', 'turn-off-microphone', 'microphone', 'close-notification', 'bangzhu', 'time', 'odometer', 'crop', 'aim', 'switch-button', 'full-screen', 'copy-document', 'mic', 'stopwatch', 'medal-1', 'medal', 'trophy', 'trophy-1', 'first-aid-kit', 'discover', 'place', 'location', 'location-outline', 'location-information', 'add-location', 'delete-location', 'map-location', 'alarm-clock', 'timer', 'watch-1', 'watch', 'lock', 'unlock', 'key', 'service', 'mobile-phone', 'bicycle', 'truck', 'ship', 'basketball', 'football', 'soccer', 'baseball', 'wind-power', 'light-rain', 'lightning', 'heavy-rain', 'sunrise', 'sunrise-1', 'sunset', 'sunny', 'cloudy', 'partly-cloudy', 'cloudy-and-sunny', 'moon', 'moon-night', 'dish', 'dish-1', 'food', 'chicken', 'fork-spoon', 'knife-fork', 'burger', 'tableware', 'sugar', 'dessert', 'ice-cream', 'hot-water', 'water-cup', 'coffee-cup', 'cold-drink', 'goblet', 'goblet-full', 'goblet-square', 'goblet-square-full', 'refrigerator', 'grape', 'watermelon', 'cherry', 'apple', 'pear', 'orange', 'coffee', 'ice-tea', 'ice-drink', 'milk-tea', 'potato-strips', 'lollipop', 'ice-cream-square', 'ice-cream-round']
+
+export default elementIcons
diff --git a/src/views/components/icons/index.vue b/src/views/components/icons/index.vue
new file mode 100644
index 0000000..d3c9a71
--- /dev/null
+++ b/src/views/components/icons/index.vue
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+ {{ generateIconCode(item) }}
+
+
+
+ {{ item }}
+
+
+
+
+
+
+
+
+ {{ generateElementIconCode(item) }}
+
+
+
+ {{ item }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/components/icons/svg-icons.js b/src/views/components/icons/svg-icons.js
new file mode 100644
index 0000000..724cd8e
--- /dev/null
+++ b/src/views/components/icons/svg-icons.js
@@ -0,0 +1,10 @@
+const req = require.context('../../../assets/icons/svg', false, /\.svg$/)
+const requireAll = requireContext => requireContext.keys()
+
+const re = /\.\/(.*)\.svg/
+
+const svgIcons = requireAll(req).map(i => {
+ return i.match(re)[1]
+})
+
+export default svgIcons
diff --git a/src/views/dashboard/BarChart.vue b/src/views/dashboard/BarChart.vue
new file mode 100644
index 0000000..be0af34
--- /dev/null
+++ b/src/views/dashboard/BarChart.vue
@@ -0,0 +1,102 @@
+
+
+
+
+
diff --git a/src/views/dashboard/LineChart.vue b/src/views/dashboard/LineChart.vue
new file mode 100644
index 0000000..e654168
--- /dev/null
+++ b/src/views/dashboard/LineChart.vue
@@ -0,0 +1,135 @@
+
+
+
+
+
diff --git a/src/views/dashboard/OrderLineChart.vue b/src/views/dashboard/OrderLineChart.vue
new file mode 100644
index 0000000..d904c9b
--- /dev/null
+++ b/src/views/dashboard/OrderLineChart.vue
@@ -0,0 +1,234 @@
+
+
+
+
+
+ 订单统计
+
+
+
+
+ 近七日
+ 近三十日
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dashboard/PanelGroup.vue b/src/views/dashboard/PanelGroup.vue
new file mode 100644
index 0000000..1a1081f
--- /dev/null
+++ b/src/views/dashboard/PanelGroup.vue
@@ -0,0 +1,181 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dashboard/PieChart.vue b/src/views/dashboard/PieChart.vue
new file mode 100644
index 0000000..4d2ef32
--- /dev/null
+++ b/src/views/dashboard/PieChart.vue
@@ -0,0 +1,79 @@
+
+
+
+
+
diff --git a/src/views/dashboard/RaddarChart.vue b/src/views/dashboard/RaddarChart.vue
new file mode 100644
index 0000000..6823af3
--- /dev/null
+++ b/src/views/dashboard/RaddarChart.vue
@@ -0,0 +1,116 @@
+
+
+
+
+
diff --git a/src/views/dashboard/mixins/resize.js b/src/views/dashboard/mixins/resize.js
new file mode 100644
index 0000000..b1e76e9
--- /dev/null
+++ b/src/views/dashboard/mixins/resize.js
@@ -0,0 +1,56 @@
+import { debounce } from '@/utils'
+
+export default {
+ data() {
+ return {
+ $_sidebarElm: null,
+ $_resizeHandler: null
+ }
+ },
+ mounted() {
+ this.initListener()
+ },
+ activated() {
+ if (!this.$_resizeHandler) {
+ // avoid duplication init
+ this.initListener()
+ }
+
+ // when keep-alive chart activated, auto resize
+ this.resize()
+ },
+ beforeDestroy() {
+ this.destroyListener()
+ },
+ deactivated() {
+ this.destroyListener()
+ },
+ methods: {
+ // use $_ for mixins properties
+ // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential
+ $_sidebarResizeHandler(e) {
+ if (e.propertyName === 'width') {
+ this.$_resizeHandler()
+ }
+ },
+ initListener() {
+ this.$_resizeHandler = debounce(() => {
+ this.resize()
+ }, 100)
+ window.addEventListener('resize', this.$_resizeHandler)
+
+ this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0]
+ this.$_sidebarElm && this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler)
+ },
+ destroyListener() {
+ window.removeEventListener('resize', this.$_resizeHandler)
+ this.$_resizeHandler = null
+
+ this.$_sidebarElm && this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler)
+ },
+ resize() {
+ const { chart } = this
+ chart && chart.resize()
+ }
+ }
+}
diff --git a/src/views/monitor/druid/index.vue b/src/views/monitor/druid/index.vue
new file mode 100644
index 0000000..c6ad585
--- /dev/null
+++ b/src/views/monitor/druid/index.vue
@@ -0,0 +1,15 @@
+
+
+
+
diff --git a/src/views/monitor/job/index.vue b/src/views/monitor/job/index.vue
new file mode 100644
index 0000000..818a00f
--- /dev/null
+++ b/src/views/monitor/job/index.vue
@@ -0,0 +1,515 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+ 修改
+
+
+ 删除
+
+
+ 导出
+
+
+ 日志
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 修改
+ 删除
+ handleCommand(command, scope.row)" v-hasPermi="['monitor:job:changeStatus', 'monitor:job:query']">
+
+ 更多
+
+
+ 执行一次
+ 任务详细
+ 调度日志
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 调用方法
+
+
+ Bean调用示例:ryTask.ryParams('ry')
+
Class类调用示例:com.ruoyi.quartz.task.RyTask.ryParams('ry')
+
参数说明:支持字符串,布尔类型,长整型,浮点型,整型
+
+
+
+
+
+
+
+
+
+
+
+
+ 生成表达式
+
+
+
+
+
+
+
+
+
+ 立即执行
+ 执行一次
+ 放弃执行
+
+
+
+
+
+
+ 允许
+ 禁止
+
+
+
+
+
+
+ {{dict.label}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ form.jobId }}
+ {{ form.jobName }}
+
+
+ {{ jobGroupFormat(form) }}
+ {{ form.createTime }}
+
+
+ {{ form.cronExpression }}
+
+
+ {{ parseTime(form.nextValidTime) }}
+
+
+ {{ form.invokeTarget }}
+
+
+
+ 正常
+ 失败
+
+
+
+
+ 允许
+ 禁止
+
+
+
+
+ 默认策略
+ 立即执行
+ 执行一次
+ 放弃执行
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/monitor/job/log.vue b/src/views/monitor/job/log.vue
new file mode 100644
index 0000000..80795cd
--- /dev/null
+++ b/src/views/monitor/job/log.vue
@@ -0,0 +1,295 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 删除
+
+
+ 清空
+
+
+ 导出
+
+
+ 关闭
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.createTime) }}
+
+
+
+
+ 详细
+
+
+
+
+
+
+
+
+
+
+
+ {{ form.jobLogId }}
+ {{ form.jobName }}
+
+
+ {{ form.jobGroup }}
+ {{ form.createTime }}
+
+
+ {{ form.invokeTarget }}
+
+
+ {{ form.jobMessage }}
+
+
+
+ 正常
+ 失败
+
+
+
+ {{ form.exceptionInfo }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/monitor/server/index.vue b/src/views/monitor/server/index.vue
new file mode 100644
index 0000000..b122edf
--- /dev/null
+++ b/src/views/monitor/server/index.vue
@@ -0,0 +1,207 @@
+
+
+
+
+
+ CPU
+
+
+
+
+ 属性 |
+ 值 |
+
+
+
+
+ 核心数 |
+ {{ server.cpu.cpuNum }} |
+
+
+ 用户使用率 |
+ {{ server.cpu.used }}% |
+
+
+ 系统使用率 |
+ {{ server.cpu.sys }}% |
+
+
+ 当前空闲率 |
+ {{ server.cpu.free }}% |
+
+
+
+
+
+
+
+
+
+ 内存
+
+
+
+
+ 属性 |
+ 内存 |
+ JVM |
+
+
+
+
+ 总内存 |
+ {{ server.mem.total }}G |
+ {{ server.jvm.total }}M |
+
+
+ 已用内存 |
+ {{ server.mem.used}}G |
+ {{ server.jvm.used}}M |
+
+
+ 剩余内存 |
+ {{ server.mem.free }}G |
+ {{ server.jvm.free }}M |
+
+
+ 使用率 |
+ {{ server.mem.usage }}% |
+ {{ server.jvm.usage }}% |
+
+
+
+
+
+
+
+
+
+
+ 服务器信息
+
+
+
+
+
+ 服务器名称 |
+ {{ server.sys.computerName }} |
+ 操作系统 |
+ {{ server.sys.osName }} |
+
+
+ 服务器IP |
+ {{ server.sys.computerIp }} |
+ 系统架构 |
+ {{ server.sys.osArch }} |
+
+
+
+
+
+
+
+
+
+
+ Java虚拟机信息
+
+
+
+
+
+ Java名称 |
+ {{ server.jvm.name }} |
+ Java版本 |
+ {{ server.jvm.version }} |
+
+
+ 启动时间 |
+ {{ server.jvm.startTime }} |
+ 运行时长 |
+ {{ server.jvm.runTime }} |
+
+
+ 安装路径 |
+ {{ server.jvm.home }} |
+
+
+ 项目路径 |
+ {{ server.sys.userDir }} |
+
+
+ 运行参数 |
+ {{ server.jvm.inputArgs }} |
+
+
+
+
+
+
+
+
+
+
+ 磁盘状态
+
+
+
+
+
+ 盘符路径 |
+ 文件系统 |
+ 盘符类型 |
+ 总大小 |
+ 可用大小 |
+ 已用大小 |
+ 已用百分比 |
+
+
+
+
+ {{ sysFile.dirName }} |
+ {{ sysFile.sysTypeName }} |
+ {{ sysFile.typeName }} |
+ {{ sysFile.total }} |
+ {{ sysFile.free }} |
+ {{ sysFile.used }} |
+ {{ sysFile.usage }}% |
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/oms/aftersale/detail.vue b/src/views/oms/aftersale/detail.vue
new file mode 100644
index 0000000..df48a29
--- /dev/null
+++ b/src/views/oms/aftersale/detail.vue
@@ -0,0 +1,275 @@
+
+
+
+
+
+
+ 返回
+
+ {{ orderDetail.orderSn }}
+ {{ orderDetail.nickName }}
+ {{ orderDetail.phone }}
+ {{ parseTime(orderDetail.createTime, '')
+ }}
+ {{ getPayType(orderDetail) }}
+ {{ parseTime(orderDetail.payTime, '')
+ }}
+ {{ getOrderStatus(orderDetail) }}
+
+
+
+ 售后信息
+
+
+
+
+ {{ getAftersaleType(row) }}
+
+
+
+
+
+ {{ parseTime(row.applyRefundTime, '') }}
+
+
+
+
+
+ ¥{{ scope.row.refundAmount }}
+
+
+
+
+
+
+
+
+
+
+ {{ getAftersaleStatus(row) }}
+
+
+
+
+
+
+ 查看
+
+
+
+
+
+
+ {{ addressInfo.name }}
+ {{ addressInfo.userPhone }}
+ {{ addressInfo.area }}
+ {{ getHiddenDetailAddress(addressInfo.address) }}
+
+
+
+ 商品信息
+
+
+
+
+
+
+
+
+ {{ key }}:{{ item }}
+
+
+
+
+
+
+
+
+ {{ parseTime(orderDetail.deliveryTime, '')
+ }}
+ {{ orderDetail.expressNo }}
+ {{ orderDetail.expressNo ? '顺丰速运' : '' }}
+
+
+
+
+
+
+ {{ refundInfoDetail.id }}
+ {{ getAftersaleType(refundInfoDetail) }}
+ {{ parseTime(refundInfoDetail.applyRefundTime,'') }}
+ ¥{{ refundInfoDetail.refundAmount }}
+ {{ refundInfoDetail.reason }}
+ {{ refundInfoDetail.description }}
+
+
+
+ {{ getAftersaleStatus(refundInfoDetail) }}
+ {{ refundInfoDetail.remark }}
+ {{ refundInfoDetail.refundWaybillCode }}
+ {{ getExpressName(refundInfoDetail.refundWpCode) }}
+
+
+
+ {{ activity.context }}
+
+ {{ refundInfoDetail.logistics }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/oms/aftersale/index.vue b/src/views/oms/aftersale/index.vue
new file mode 100644
index 0000000..1a4fdc1
--- /dev/null
+++ b/src/views/oms/aftersale/index.vue
@@ -0,0 +1,492 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+
+
+ {{
+ getAftersaleStatusText(scope.row)
+ }}
+
+
+
+
+
+ {{ scope.row.nickName }}
+ {{ scope.row.phone }}
+ {{ scope.row.mark }}
+
+
+
+
+
+ {{
+ getAftersaleTypeText(scope.row)
+ }}
+
+
+
+
+
+ {{ parseTime(scope.row.applyRefundTime, '') }}
+
+
+
+
+ {{ parseTime(scope.row.handleTime, '') }}
+
+
+
+
+
+
+
+
+ {{ scope.row.orderSn }}
+
+
+ 详情
+
+ 日志
+
+ 同意
+
+ 拒绝
+
+ 确认收货
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ getLogEvent(item.orderStatus) }}
+
+ 操作人:{{ item.operateMan }}
+
+ 备注:{{ item.note }}
+
+
+
+
+
+
+
+
diff --git a/src/views/oms/aftersaleItem/index.vue b/src/views/oms/aftersaleItem/index.vue
new file mode 100644
index 0000000..e5074c6
--- /dev/null
+++ b/src/views/oms/aftersaleItem/index.vue
@@ -0,0 +1,291 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 修改
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/oms/order/detail.vue b/src/views/oms/order/detail.vue
new file mode 100644
index 0000000..42712c3
--- /dev/null
+++ b/src/views/oms/order/detail.vue
@@ -0,0 +1,206 @@
+
+
+
+
+
+ 订单进程
+ 返回
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ orderDetail.orderSn }}
+ {{ orderDetail.userName }}
+ {{ orderDetail.userPhone }}
+ {{ parseTime(orderDetail.createTime, '') }}
+ {{ getPayType(orderDetail) }}
+ {{ parseTime(orderDetail.payTime, '')
+ }}
+ {{ getOrderStatus(orderDetail) }}
+
+
+
+
+ {{ getHiddenName(addressInfo.name) }}
+ {{ addressInfo.userPhone }}
+ {{ addressInfo.area }}
+ {{ getHiddenDetailAddress(addressInfo.address) }}
+
+
+
+ 商品信息
+
+
+
+
+
+
+
+
+ {{ key }}:{{ item }}
+
+
+
+
+
+ ¥{{ orderDetail.payAmount }}
+
+
+
+
+
+
+ {{ parseTime(orderDetail.deliveryTime, '')
+ }}
+ {{ orderDetail.expressNo }}
+ {{ orderDetail.expressName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/oms/order/index.vue b/src/views/oms/order/index.vue
new file mode 100644
index 0000000..8fc2550
--- /dev/null
+++ b/src/views/oms/order/index.vue
@@ -0,0 +1,759 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+
+
+
+ {{ scope.row.decrypt ? scope.row.receiverName : getHiddenName(scope.row.receiverName) }} {{ scope.row.receiverPhone }}
+ 查看
+ 修改
+
+
+ {{ scope.row.receiverProvince }}{{ scope.row.receiverCity }}{{ scope.row.receiverDistrict }}
+ {{ scope.row.decrypt ? scope.row.receiverDetailAddress : getHiddenDetailAddress(scope.row.receiverDetailAddress) }}
+
+
+
+
+
+ {{ scope.row.nickName }}
+ {{ scope.row.mark }}
+
+
+
+
+
+ 平台备注
+ {{ scope.row.merchantNote ? '修改' : '添加平台备注' }}
+
+ {{ scope.row.merchantNote }}
+ 买家备注
+ {{ scope.row.note }}
+
+
+
+
+ {{ parseTime(scope.row.createTime, '{mm}-{dd} {hh}:{ii}') }} 下单
+ {{ parseTime(scope.row.payTime, '{mm}-{dd} {hh}:{ii}') }} 支付
+
+
+
+
+ ¥{{ scope.row.couponAmount }}
+ 无
+
+
+
+
+
+ 总数:
+ {{ scope.row.buyNum }}
+
+ 实付: ¥{{ scope.row.payAmount }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ key }}:{{ value }}
+
+
+ ¥{{ item.salePrice }}
+ x{{ item.buyNum }}
+
+
+
+
+
+
+
+
+
+ {{ getOrderStatusText(scope.row.status) }}
+
+
+
+ 物流单号:{{ scope.row.deliverySn }}
+
+
+ 发货时间:{{ parseTime(scope.row.deliveryTime, '') }}
+
+
+
+
+
+ {{ scope.row.orderSn }}
+
+
+
+
+
+
+
+
+ 详情
+ 日志
+ 发货
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ getLogEvent(item.orderStatus) }}
+
+ 操作人:{{ item.operateMan }}
+
+ 备注:{{ item.note }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/oms/orderDeliveryHistory/index.vue b/src/views/oms/orderDeliveryHistory/index.vue
new file mode 100644
index 0000000..ac7eb6f
--- /dev/null
+++ b/src/views/oms/orderDeliveryHistory/index.vue
@@ -0,0 +1,258 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+
+
+
+
+
+
+
+
+
+ 修改
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/oms/orderItem/index.vue b/src/views/oms/orderItem/index.vue
new file mode 100644
index 0000000..43269fa
--- /dev/null
+++ b/src/views/oms/orderItem/index.vue
@@ -0,0 +1,424 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+ {{showMoreCondition ? '收起条件' : '展开条件'}}
+
+
+
+
+
+ 新增
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 修改
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/oms/orderOperateHistory/index.vue b/src/views/oms/orderOperateHistory/index.vue
new file mode 100644
index 0000000..153c6d8
--- /dev/null
+++ b/src/views/oms/orderOperateHistory/index.vue
@@ -0,0 +1,287 @@
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+
+
+
+
+ {{ getOrderTypeText(scope.row.orderStatus) }}
+
+
+
+
+
+
+ {{ parseTime(scope.row.createTime, '')}}
+
+
+
+
+
+
+
+
+
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 请选择字典生成
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/oms/wechatPaymentHistory/index.vue b/src/views/oms/wechatPaymentHistory/index.vue
new file mode 100644
index 0000000..8f9ba69
--- /dev/null
+++ b/src/views/oms/wechatPaymentHistory/index.vue
@@ -0,0 +1,395 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+ {{showMoreCondition ? '收起条件' : '展开条件'}}
+
+
+
+
+
+ 新增
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 修改
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 请选择字典生成
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/pms/brand/index.vue b/src/views/pms/brand/index.vue
new file mode 100644
index 0000000..4cda587
--- /dev/null
+++ b/src/views/pms/brand/index.vue
@@ -0,0 +1,257 @@
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 修改
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/pms/product/AddProduct.vue b/src/views/pms/product/AddProduct.vue
new file mode 100644
index 0000000..070ea6c
--- /dev/null
+++ b/src/views/pms/product/AddProduct.vue
@@ -0,0 +1,371 @@
+
+
+
+
+
+
+ 基本信息
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 产品图片
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 产品规格
+
+
+
+
+
+
+ 刷新列表
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 详情页
+
+
+
+
+
+
+
+
+
+
+
+ 确 定
+ 取 消
+
+
+
+
+
+
+
+
diff --git a/src/views/pms/product/index.vue b/src/views/pms/product/index.vue
new file mode 100644
index 0000000..da1bd1f
--- /dev/null
+++ b/src/views/pms/product/index.vue
@@ -0,0 +1,220 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+
+
+
+
+
+
+
+
+
+
+ 名称:{{ row.name }}
+ 编码:{{ row.outProductId }}
+
+
+
+
+ 品牌:{{ row.brandName }}
+ 分类:{{ row.productCategoryName }}
+
+
+
+
+ 价格:{{ row.price }}
+ 排序:{{ row.sort }}
+
+
+
+
+
+
+
+
+
+ 修改
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/pms/product/productSelect.vue b/src/views/pms/product/productSelect.vue
new file mode 100644
index 0000000..26d612b
--- /dev/null
+++ b/src/views/pms/product/productSelect.vue
@@ -0,0 +1,131 @@
+
+
+
+
+
+
+
+
+
+
+ 搜索
+
+
+
+
+
+
+
+
+ {{ row.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/pms/productCategory/index.vue b/src/views/pms/productCategory/index.vue
new file mode 100644
index 0000000..68fe43f
--- /dev/null
+++ b/src/views/pms/productCategory/index.vue
@@ -0,0 +1,320 @@
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 修改
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/pms/sku/index.vue b/src/views/pms/sku/index.vue
new file mode 100644
index 0000000..8c29556
--- /dev/null
+++ b/src/views/pms/sku/index.vue
@@ -0,0 +1,282 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 修改
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/set/integralSetting.vue b/src/views/set/integralSetting.vue
new file mode 100644
index 0000000..ec179fd
--- /dev/null
+++ b/src/views/set/integralSetting.vue
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+
+
+
+
+
+ 积分
+
+
+
+
+
+ 每消费
+
+
+ 元
+
+
+ ,获得
+
+
+ 积分
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/set/setting.vue b/src/views/set/setting.vue
new file mode 100644
index 0000000..9326853
--- /dev/null
+++ b/src/views/set/setting.vue
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+ 保存
+ 重置
+
+
+
+
diff --git a/src/views/ums/feedback/index.vue b/src/views/ums/feedback/index.vue
new file mode 100644
index 0000000..c777c86
--- /dev/null
+++ b/src/views/ums/feedback/index.vue
@@ -0,0 +1,219 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+
+
+
+
+
+
+ 用户ID:{{ scope.row.createBy }}
+ {{ scope.row.phone }}
+
+
+
+
+ {{ parseTime(scope.row.createTime) }}
+
+
+
+
+
+
+
+
+
+
+
+
+ 已处理
+
+ {{ scope.row.handleTime ? parseTime(scope.row.handleTime) : '' }}
+
+
+
+
+ {{ scope.row.remark }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/ums/member/index.vue b/src/views/ums/member/index.vue
new file mode 100644
index 0000000..5343fc1
--- /dev/null
+++ b/src/views/ums/member/index.vue
@@ -0,0 +1,414 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+
+
+
+
+ 0.00
+
+
+
+
+ 0.00
+
+
+
+
+ 0.00
+
+
+
+
+ {{ parseTime(scope.row.createTime) }}
+
+
+
+
+ {{ parseTime(scope.row.createTime) }}
+
+
+
+
+ {{ scope.row.mark }}
+
+
+
+
+
+ 查看数据
+ 查看下单
+ 查看购物车
+
+
+
+
+
+
+
+
+
+
+
+ {{ statisticsObj.data.cartCount }}
+ {{ statisticsObj.data.orderCount }}
+ ¥{{ statisticsObj.data.orderAmount.toFixed(2) }}
+ {{ statisticsObj.data.aftersaleCount }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/ums/memberAddress/index.vue b/src/views/ums/memberAddress/index.vue
new file mode 100644
index 0000000..abdf13b
--- /dev/null
+++ b/src/views/ums/memberAddress/index.vue
@@ -0,0 +1,350 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+ {{showMoreCondition ? '收起条件' : '展开条件'}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ getHiddenName(scope.row.name) }}
+
+
+
+
+
+
+
+
+
+ {{ getHiddenDetailAddress(scope.row.detailAddress) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 请选择字典生成
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/ums/memberCart/index.vue b/src/views/ums/memberCart/index.vue
new file mode 100644
index 0000000..17e0644
--- /dev/null
+++ b/src/views/ums/memberCart/index.vue
@@ -0,0 +1,295 @@
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+
+
+ {{scope.row.phoneHidden}}
+ {{scope.row.nickname}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ key }}:{{ value }}
+
+
+ ¥{{ scope.row.price }}
+ x{{ scope.row.quantity }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.skuIfExist === 1 ? '有效' : '失效' }}
+
+
+
+
+
+ {{ parseTime(scope.row.createTime, '')}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/ums/memberLogininfor/index.vue b/src/views/ums/memberLogininfor/index.vue
new file mode 100644
index 0000000..0540819
--- /dev/null
+++ b/src/views/ums/memberLogininfor/index.vue
@@ -0,0 +1,274 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.loginTime, '') }}
+
+
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/ums/memberWechat/index.vue b/src/views/ums/memberWechat/index.vue
new file mode 100644
index 0000000..4444edf
--- /dev/null
+++ b/src/views/ums/memberWechat/index.vue
@@ -0,0 +1,404 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+ {{showMoreCondition ? '收起条件' : '展开条件'}}
+
+
+
+
+
+ 新增
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.expireTime, '')}}
+
+
+
+
+ 修改
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vite.config.ts b/vite.config.ts
index 0eb5f0c..eb8e1d2 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -42,7 +42,8 @@ export default defineConfig(({ mode, command }) => {
// additionalData: '@use "@/assets/styles/variables.module.scss as *";'
// javascriptEnabled: true
api: 'modern-compiler'
- }
+ },
+ styl: {}
},
postcss: {
plugins: [