| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388 |
- import { ref } from 'vue'
- import request from '@/utils/request'
- import { ElMessage } from 'element-plus'
- export function useNews() {
- const loading = ref(false)
- const articles = ref([])
- const article = ref({})
- const categories = ref([])
- const category = ref({})
- const pagination = ref({
- page: 1,
- limit: 20,
- total: 0
- })
- // 获取文章列表
- const getArticleList = async (params = {}) => {
- loading.value = true
- try {
- const response = await request.get('/news/news', {
- params: {
- page: Number(pagination.value.page),
- limit: Number(pagination.value.limit),
- ...params
- }
- })
- console.log('Articles API response:', response.data);
-
- // 处理各种可能的响应格式
- let articleData = [];
- let totalCount = 0;
-
- if (Array.isArray(response.data)) {
- // 直接返回数组
- articleData = response.data;
- totalCount = response.data.length;
- } else if (response.data && response.data.data) {
- if (Array.isArray(response.data.data)) {
- // 返回 {code, data: [...]} 格式
- articleData = response.data.data;
- totalCount = response.data.data.length;
- } else if (response.data.data.list && Array.isArray(response.data.data.list)) {
- // 返回 {code, data: {list: [...], total: number}} 格式
- articleData = response.data.data.list;
- totalCount = response.data.data.total || articleData.length;
- }
- }
-
- // 转换字段名称为小写
- const formattedList = convertKeysToLowerCase(articleData);
- console.log('Formatted article data:', formattedList);
-
- articles.value = formattedList;
- pagination.value.total = totalCount;
-
- if (articles.value.length === 0) {
- console.log('没有文章数据');
- } else {
- console.log('文章数据加载成功,数量:', articles.value.length);
- }
-
- return true; // 返回成功状态
- } catch (error) {
- console.error('获取文章列表失败:', error)
- ElMessage.error('获取文章列表失败')
- return false;
- } finally {
- loading.value = false
- }
- }
- // 获取文章详情
- const getArticleDetail = async (id) => {
- loading.value = true
- try {
- console.log('获取文章详情,ID:', id)
- const response = await request.get(`/news/news/${id}`)
- console.log('文章详情原始响应:', response)
-
- // 响应拦截器已经返回了处理后的数据,不需要再访问 .data
- console.log('文章详情响应处理后:', response)
-
- if (response && response.code === 200) {
- const articleData = response.data || {}
- article.value = articleData
- // 转换字段名称
- const convertedData = convertKeysToLowerCase(articleData)
- console.log('转换后的文章详情:', convertedData)
- return convertedData
- } else {
- ElMessage.error(response?.msg || '获取文章详情失败')
- return null
- }
- } catch (error) {
- console.error('获取文章详情失败:', error)
- ElMessage.error('获取文章详情失败')
- return null
- } finally {
- loading.value = false
- }
- }
- // 创建文章
- const createArticle = async (articleData) => {
- loading.value = true
- try {
- console.log('创建文章数据:', articleData)
- const response = await request.post('/news/news', articleData)
- console.log('创建文章原始响应:', response)
-
- // 响应拦截器已经返回了处理后的数据,不需要再访问 .data
- console.log('创建文章响应处理后:', response)
-
- // 后端返回成功
- if (response && response.code === 200) {
- ElMessage.success('创建文章成功')
- // 存储数据并返回true表示成功
- article.value = response.data || {}
- return true
- } else {
- ElMessage.error(response?.msg || '创建文章失败')
- return false
- }
- } catch (error) {
- console.error('创建文章失败:', error)
- ElMessage.error('创建文章失败')
- return false
- } finally {
- loading.value = false
- }
- }
- // 更新文章
- const updateArticle = async (id, articleData) => {
- loading.value = true
- try {
- console.log('更新文章数据:', articleData)
- const response = await request.put(`/news/news/${id}`, articleData)
- console.log('更新文章原始响应:', response)
-
- // 响应拦截器已经返回了处理后的数据,不需要再访问 .data
- console.log('更新文章响应处理后:', response)
-
- // 后端返回成功
- if (response && response.code === 200) {
- ElMessage.success('更新文章成功')
- // 存储数据并返回true表示成功
- article.value = response.data || {}
- return true
- } else {
- ElMessage.error(response?.msg || '更新文章失败')
- return false
- }
- } catch (error) {
- console.error('更新文章失败:', error)
- ElMessage.error('更新文章失败')
- return false
- } finally {
- loading.value = false
- }
- }
- // 删除文章
- const deleteArticle = async (id) => {
- loading.value = true
- try {
- const response = await request.delete(`/news/news/${id}`)
- console.log('删除文章原始响应:', response)
-
- // 响应拦截器已经返回了处理后的数据,不需要再访问 .data
- if (response && response.code === 200) {
- ElMessage.success('删除文章成功')
- return true
- } else {
- ElMessage.error(response?.msg || '删除文章失败')
- return false
- }
- } catch (error) {
- console.error('删除文章失败:', error)
- ElMessage.error('删除文章失败')
- return false
- } finally {
- loading.value = false
- }
- }
- // 转换大写字段为小写
- function convertKeysToLowerCase(data) {
- if (!data) return [];
-
- if (Array.isArray(data)) {
- return data.map(item => {
- const newItem = {};
- Object.keys(item).forEach(key => {
- // 处理大写字段名
- // 多种情况处理:ID、Id、NAME、Name等
- let newKey = key;
- if (key === key.toUpperCase()) {
- // 全部大写的情况,如ID -> id
- newKey = key.toLowerCase();
- } else if (key.charAt(0) === key.charAt(0).toUpperCase()) {
- // 首字母大写的情况,如Name -> name
- newKey = key.charAt(0).toLowerCase() + key.slice(1);
- }
- newItem[newKey] = item[key];
- });
-
- // 调试日志
- if (newItem.id) {
- console.log('转换后的分类项:', newItem);
- }
-
- return newItem;
- });
- } else {
- const newItem = {};
- Object.keys(data).forEach(key => {
- let newKey = key;
- if (key === key.toUpperCase()) {
- newKey = key.toLowerCase();
- } else if (key.charAt(0) === key.charAt(0).toUpperCase()) {
- newKey = key.charAt(0).toLowerCase() + key.slice(1);
- }
- newItem[newKey] = data[key];
- });
- return newItem;
- }
- }
- // 获取分类列表
- const getCategoryList = async () => {
- loading.value = true
- try {
- const response = await request.get('/news/category')
- console.log('Category API response:', response.data);
-
- // 处理各种可能的响应格式
- let categoryData;
- if (Array.isArray(response.data)) {
- // 直接返回数组
- categoryData = response.data;
- } else if (response.data && response.data.data && Array.isArray(response.data.data)) {
- // 返回 {code, data} 对象
- categoryData = response.data.data;
- } else if (response.data && response.data.code === 200) {
- // 返回 {code, data} 对象
- categoryData = response.data.data || [];
- } else {
- categoryData = [];
- }
-
- // 转换字段名称为小写
- const formattedData = convertKeysToLowerCase(categoryData);
- console.log('Formatted category data:', formattedData);
- categories.value = formattedData;
-
- if (categories.value.length === 0) {
- console.log('没有分类数据');
- } else {
- console.log('分类数据加载成功,数量:', categories.value.length);
- }
-
- return true;
- } catch (error) {
- console.error('获取分类列表失败:', error);
- ElMessage.error('获取分类列表失败');
- return false;
- } finally {
- loading.value = false;
- }
- }
- // 获取分类详情
- const getCategoryDetail = async (id) => {
- loading.value = true
- try {
- const { data } = await request.get(`/news/category/${id}`)
- if (data.code === 200) {
- const formattedData = convertKeysToLowerCase(data.data);
- category.value = formattedData;
- return formattedData;
- } else {
- ElMessage.error(data.msg || '获取分类详情失败')
- return null
- }
- } catch (error) {
- console.error('获取分类详情失败:', error)
- ElMessage.error('获取分类详情失败')
- return null
- } finally {
- loading.value = false
- }
- }
- // 创建分类
- const createCategory = async (categoryData) => {
- loading.value = true
- try {
- const response = await request.post('/news/category', categoryData)
- console.log('创建分类原始响应:', response)
-
- // 响应拦截器已经返回了处理后的数据,不需要再访问 .data
- if (response && response.code === 200) {
- ElMessage.success('创建分类成功')
- const formattedData = convertKeysToLowerCase(response.data);
- return formattedData;
- } else {
- ElMessage.error(response?.msg || '创建分类失败')
- return null
- }
- } catch (error) {
- console.error('创建分类失败:', error)
- ElMessage.error('创建分类失败')
- return null
- } finally {
- loading.value = false
- }
- }
- // 更新分类
- const updateCategory = async (id, categoryData) => {
- loading.value = true
- try {
- const response = await request.put(`/news/category/${id}`, categoryData)
- console.log('更新分类原始响应:', response)
-
- // 响应拦截器已经返回了处理后的数据,不需要再访问 .data
- if (response && response.code === 200) {
- ElMessage.success('更新分类成功')
- const formattedData = convertKeysToLowerCase(response.data);
- return formattedData;
- } else {
- ElMessage.error(response?.msg || '更新分类失败')
- return null
- }
- } catch (error) {
- console.error('更新分类失败:', error)
- ElMessage.error('更新分类失败')
- return null
- } finally {
- loading.value = false
- }
- }
- // 删除分类
- const deleteCategory = async (id) => {
- loading.value = true
- try {
- const response = await request.delete(`/news/category/${id}`)
- console.log('删除分类原始响应:', response)
-
- // 响应拦截器已经返回了处理后的数据,不需要再访问 .data
- if (response && response.code === 200) {
- ElMessage.success('删除分类成功')
- return true
- } else {
- ElMessage.error(response?.msg || '删除分类失败')
- return false
- }
- } catch (error) {
- console.error('删除分类失败:', error)
- ElMessage.error('删除分类失败')
- return false
- } finally {
- loading.value = false
- }
- }
- return {
- loading,
- articles,
- article,
- categories,
- category,
- pagination,
- getArticleList,
- getArticleDetail,
- createArticle,
- updateArticle,
- deleteArticle,
- getCategoryList,
- getCategoryDetail,
- createCategory,
- updateCategory,
- deleteCategory
- }
- }
|