Browse Source

feat: 新增销售分析模块,添加多个分析数据接口,优化数据请求格式,更新路由配置以支持新页面,提升用户体验。

master
lizhuang 1 week ago
parent
commit
191ac80359
4 changed files with 1370 additions and 118 deletions
  1. 187
    108
      src/api/sales-analysis.js
  2. 5
    0
      src/router/index.js
  3. 25
    10
      src/utils/tools.js
  4. 1153
    0
      src/views/sales-analysis/reports/CommonAnalysis.vue

+ 187
- 108
src/api/sales-analysis.js View File

import request from "@/utils/request";
import request from '@/utils/request'


export function getProductCodeSuggestions(params) { export function getProductCodeSuggestions(params) {
return request({ return request({
url: "/reports/product-code-suggestions",
method: "get",
params,
});
url: '/reports/product-code-suggestions',
method: 'get',
params
})
} }
/** /**
* 销售分析模块API接口 * 销售分析模块API接口
*/ */
export function getAnalysisDataList(params) { export function getAnalysisDataList(params) {
return request({ return request({
url: "/analysis-data",
method: "get",
params,
});
url: '/analysis-data',
method: 'get',
params
})
} }


/** /**
export function updateAnalysisData(id, data) { export function updateAnalysisData(id, data) {
return request({ return request({
url: `/analysis-data/${id}`, url: `/analysis-data/${id}`,
method: "put",
data,
});
method: 'put',
data
})
} }


/** /**
export function deleteAnalysisData(id) { export function deleteAnalysisData(id) {
return request({ return request({
url: `/analysis-data/${id}`, url: `/analysis-data/${id}`,
method: "delete",
});
method: 'delete'
})
} }


/** /**
export function batchDeleteAnalysisData(ids) { export function batchDeleteAnalysisData(ids) {
return request({ return request({
url: `/analysis-data/batch/${ids}`, url: `/analysis-data/batch/${ids}`,
method: "delete",
});
method: 'delete'
})
} }


/** /**
* @returns {string} 导出文件URL * @returns {string} 导出文件URL
*/ */
export function exportAnalysisData(params) { export function exportAnalysisData(params) {
const queryString = new URLSearchParams(params).toString();
const queryString = new URLSearchParams(params).toString()
return request({ return request({
url: `/analysis-data/export?${queryString}`, url: `/analysis-data/export?${queryString}`,
responseType: "blob",
method: "get",
});
responseType: 'blob',
method: 'get'
})
} }


// ==================== 数据导入 ==================== // ==================== 数据导入 ====================
*/ */
export function importAnalysisDataBatch(formData) { export function importAnalysisDataBatch(formData) {
return request({ return request({
url: "/analysis-data/import-batch",
method: "post",
url: '/analysis-data/import-batch',
method: 'post',
data: formData, data: formData,
headers: { headers: {
"Content-Type": "multipart/form-data",
},
});
'Content-Type': 'multipart/form-data'
}
})
} }


/** /**
*/ */
export function importFBADataBatch(formData) { export function importFBADataBatch(formData) {
return request({ return request({
url: "/analysis-data/import/fba/batch",
method: "post",
url: '/analysis-data/import/fba/batch',
method: 'post',
data: formData, data: formData,
headers: { headers: {
"Content-Type": "multipart/form-data",
},
});
'Content-Type': 'multipart/form-data'
}
})
} }


/** /**
*/ */
export function saveImportedData(data) { export function saveImportedData(data) {
return request({ return request({
url: "/analysis-data/save-imported",
method: "post",
data,
});
url: '/analysis-data/save-imported',
method: 'post',
data
})
} }


// ==================== 基准数据管理 ==================== // ==================== 基准数据管理 ====================
*/ */
export function getCategoriesSimple() { export function getCategoriesSimple() {
return request({ return request({
url: "/categories/simple",
method: "get",
});
url: '/categories/simple',
method: 'get'
})
} }


/** /**
export function getCategoryDetail(categoryId) { export function getCategoryDetail(categoryId) {
return request({ return request({
url: `/categories/${categoryId}`, url: `/categories/${categoryId}`,
method: "get",
});
method: 'get'
})
} }


/** /**
*/ */
export function getBaseDataList(params) { export function getBaseDataList(params) {
return request({ return request({
url: "/basedata",
method: "get",
params,
});
url: '/basedata',
method: 'get',
params
})
} }


/** /**
export function exportBaseData(categoryId) { export function exportBaseData(categoryId) {
return request({ return request({
url: `/basedata/export/${categoryId}`, url: `/basedata/export/${categoryId}`,
responseType: "blob",
method: "get",
});
responseType: 'blob',
method: 'get'
})
} }


/** /**
export function deleteBaseData(id) { export function deleteBaseData(id) {
return request({ return request({
url: `/basedata/${id}`, url: `/basedata/${id}`,
method: "delete",
});
method: 'delete'
})
} }


/** /**
export function batchDeleteBaseData(ids) { export function batchDeleteBaseData(ids) {
return request({ return request({
url: `/basedata/batch/${ids}`, url: `/basedata/batch/${ids}`,
method: "delete",
});
method: 'delete'
})
} }


/** /**
*/ */
export function BaseDataAdd(data) { export function BaseDataAdd(data) {
return request({ return request({
url: "/basedata",
method: "post",
data,
});
url: '/basedata',
method: 'post',
data
})
} }


/** /**
export function BaseDataUpdate(id, data) { export function BaseDataUpdate(id, data) {
return request({ return request({
url: `/basedata/${id}`, url: `/basedata/${id}`,
method: "put",
data,
});
method: 'put',
data
})
} }


// ==================== 分类管理 ==================== // ==================== 分类管理 ====================
*/ */
export function getCategoriesList(params) { export function getCategoriesList(params) {
return request({ return request({
url: "/categories",
method: "get",
params,
});
url: '/categories',
method: 'get',
params
})
} }


/** /**
*/ */
export function createCategory(data) { export function createCategory(data) {
return request({ return request({
url: "/categories",
method: "post",
data,
});
url: '/categories',
method: 'post',
data
})
} }


/** /**
export function updateCategory(id, data) { export function updateCategory(id, data) {
return request({ return request({
url: `/categories/${id}`, url: `/categories/${id}`,
method: "put",
data,
});
method: 'put',
data
})
} }


/** /**
export function deleteCategory(id) { export function deleteCategory(id) {
return request({ return request({
url: `/categories/${id}`, url: `/categories/${id}`,
method: "delete",
});
method: 'delete'
})
} }


// ==================== 店铺客户关联管理 ==================== // ==================== 店铺客户关联管理 ====================
*/ */
export function getShopCustomerList(params) { export function getShopCustomerList(params) {
return request({ return request({
url: "/shop-customer",
method: "get",
params,
});
url: '/shop-customer',
method: 'get',
params
})
} }


/** /**
export function deleteShopCustomer(id) { export function deleteShopCustomer(id) {
return request({ return request({
url: `/shop-customer/${id}`, url: `/shop-customer/${id}`,
method: "delete",
});
method: 'delete'
})
} }


/** /**
export function batchDeleteShopCustomer(ids) { export function batchDeleteShopCustomer(ids) {
return request({ return request({
url: `/shop-customer/batch/${ids}`, url: `/shop-customer/batch/${ids}`,
method: "delete",
});
method: 'delete'
})
} }


/** /**
*/ */
export function exportShopCustomer() { export function exportShopCustomer() {
return request({ return request({
url: "/shop-customer/export",
responseType: "blob",
method: "get",
});
url: '/shop-customer/export',
responseType: 'blob',
method: 'get'
})
} }


/** /**
*/ */
export function ShopCustomerAdd(data) { export function ShopCustomerAdd(data) {
return request({ return request({
url: "/shop-customer",
method: "post",
data,
});
url: '/shop-customer',
method: 'post',
data
})
} }


/** /**
export function ShopCustomerUpdate(id, data) { export function ShopCustomerUpdate(id, data) {
return request({ return request({
url: `/shop-customer/${id}`, url: `/shop-customer/${id}`,
method: "put",
data,
});
method: 'put',
data
})
} }


// ==================== 报表分析 ==================== // ==================== 报表分析 ====================
*/ */
export function getReportFilterOptions() { export function getReportFilterOptions() {
return request({ return request({
url: "/reports/filter-options",
method: "get",
});
url: '/reports/filter-options',
method: 'get',
headers: {
'Content-Type': 'application/json'
}
})
} }


/** /**
*/ */
export function getProductAnalysisReport(params) { export function getProductAnalysisReport(params) {
return request({ return request({
url: "/reports/product-analysis",
method: "get",
params,
});
url: '/reports/product-analysis',
method: 'get',
params
})
} }


/** /**
*/ */
export function getShopAnalysisReport(params) { export function getShopAnalysisReport(params) {
return request({ return request({
url: "/reports/shop-analysis",
method: "get",
params,
});
url: '/reports/shop-analysis',
method: 'get',
params
})
} }


/** /**
*/ */
export function getCategoryAnalysisReport(params) { export function getCategoryAnalysisReport(params) {
return request({ return request({
url: "/reports/category-analysis",
method: "get",
params,
});
url: '/reports/category-analysis',
method: 'get',
params
})
} }


/** /**
*/ */
export function getOverallAnalysisReport(params) { export function getOverallAnalysisReport(params) {
return request({ return request({
url: "/reports/overall-analysis",
method: "get",
params,
});
url: '/reports/overall-analysis',
method: 'get',
params
})
}

/**
* 获取分析数据所有筛选选项
* @param {*} params
* @returns
*/
export function getAnalysisAllFilterOptions(params) {
return request({
url: '/tjfx/analysis-data/filter-options',
method: 'get',
params
})
}

/**
* 获取分析数据商品分析
* @param {*} params
* @returns
*/
export function getAnalysisProductAnalysis(params) {
return request({
url: '/tjfx/analysis-data/product-analysis',
method: 'get',
params
})
}

/**
* 获取分析数据月度分析
* @param {*} params
* @returns
*/
export function getAnalysisMonthlyAnalysis(params) {
return request({
url: '/tjfx/analysis-data/monthly-analysis',
method: 'get',
params
})
}
/**
* 获取分析数据商品店铺分析
* @param {*} params
* @returns
*/
export function getAnalysisProductShopAnalysis(params) {
return request({
url: '/tjfx/analysis-data/product-shop-analysis',
method: 'get',
params
})
}
/**
* 获取分析数据综合分析
* @param {*} params
* @returns
*/
export function getAnalysisComprehensiveAnalysis(params) {
return request({
url: '/tjfx/analysis-data/comprehensive-analysis',
method: 'get',
params
})
}

/**
* 获取分析数据SSD月度分析
* @param {*} params
* @returns
*/
export function getAnalysisSsdMonthlyAnalysis(params) {
return request({
url: '/tjfx/analysis-data/ssd-monthly-analysis',
method: 'get',
params
})
} }

+ 5
- 0
src/router/index.js View File

hidden: true, hidden: true,
meta: { title: "menu.checkin", icon: "date" }, meta: { title: "menu.checkin", icon: "date" },
}, },
{
path: "/sales-analysis/reports/analysis",
component: () => import("@/views/sales-analysis/reports/CommonAnalysis"),
meta: { title: "menu.commonAnalysis", icon: "date" },
},
]; ];


// 动态路由,基于用户权限动态去加载 // 动态路由,基于用户权限动态去加载

+ 25
- 10
src/utils/tools.js View File

const value = params[propName] const value = params[propName]
var part = encodeURIComponent(propName) + '=' var part = encodeURIComponent(propName) + '='
if (value !== null && value !== '' && typeof value !== 'undefined') { if (value !== null && value !== '' && typeof value !== 'undefined') {
if (typeof value === 'object') {
for (const key of Object.keys(value)) {
if (
value[key] !== null &&
value[key] !== '' &&
typeof value[key] !== 'undefined'
) {
const params = propName + '[' + key + ']'
var subPart = encodeURIComponent(params) + '='
result += subPart + encodeURIComponent(value[key]) + '&'
if (Array.isArray(value)) {
// 数组类型:生成重复参数名格式 key=value1&key=value2
for (const item of value) {
if (item !== null && item !== '' && typeof item !== 'undefined') {
result += part + encodeURIComponent(item) + '&'
}
}
} else if (typeof value === 'object') {
// 特殊处理 categorySpecs 对象
if (propName === 'categorySpecs') {
// categorySpecs 需要特殊处理,将嵌套对象转换为 JSON 字符串
result += part + encodeURIComponent(JSON.stringify(value)) + '&'
} else {
// 其他对象类型:保持原有的 key[subkey]=value 格式
for (const key of Object.keys(value)) {
if (
value[key] !== null &&
value[key] !== '' &&
typeof value[key] !== 'undefined'
) {
const params = propName + '[' + key + ']'
var subPart = encodeURIComponent(params) + '='
result += subPart + encodeURIComponent(value[key]) + '&'
}
} }
} }
} else { } else {
// 基本类型:直接添加
result += part + encodeURIComponent(value) + '&' result += part + encodeURIComponent(value) + '&'
} }
} }

+ 1153
- 0
src/views/sales-analysis/reports/CommonAnalysis.vue
File diff suppressed because it is too large
View File


Loading…
Cancel
Save