peng
2025-11-06 c4938f6f4e839890b032c75c7a57333a6a9157a9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
// 新闻管理 API
 
import { graphqlRequest } from '@/config/api'
 
// GraphQL 查询语句
const GET_NEWS_LIST_QUERY = `
  query GetNewsList($page: Int!, $size: Int!, $title: String, $state: Int) {
    newsList(page: $page, size: $size, title: $title, state: $state) {
      content {
        id
        title
        summary
        coverImage
        author
        viewCount
        state
        stateName
        createTime
        updateTime
      }
      totalElements
      page
      size
    }
  }
`
 
const GET_NEWS_QUERY = `
  query GetNews($id: ID!) {
    news(id: $id) {
      id
      title
      content
      summary
      coverImage
      author
      viewCount
      state
      stateName
      createTime
      updateTime
    }
  }
`
 
const GET_PUBLISHED_NEWS_QUERY = `
  query GetPublishedNews($id: ID!) {
    publishedNews(id: $id) {
      id
      title
      content
      summary
      coverImage
      author
      viewCount
      state
      stateName
      createTime
      updateTime
    }
  }
`
 
const GET_PUBLISHED_NEWS_LIST_QUERY = `
  query GetPublishedNewsList($page: Int!, $size: Int!) {
    publishedNewsList(page: $page, size: $size) {
      content {
        id
        title
        summary
        coverImage
        author
        viewCount
        state
        stateName
        createTime
        updateTime
      }
      totalElements
      page
      size
    }
  }
`
 
const SAVE_NEWS_MUTATION = `
  mutation SaveNews($input: NewsInput!) {
    saveNews(input: $input) {
      id
      title
      content
      summary
      coverImage
      author
      viewCount
      state
      stateName
      createTime
      updateTime
    }
  }
`
 
const DELETE_NEWS_MUTATION = `
  mutation DeleteNews($id: ID!) {
    deleteNews(id: $id)
  }
`
 
const UPDATE_NEWS_STATE_MUTATION = `
  mutation UpdateNewsState($id: ID!, $state: Int!) {
    updateNewsState(id: $id, state: $state)
  }
`
 
// API 函数
export const getNewsList = async (page = 0, size = 10, title = '', state) => {
  try {
    const variables = {
      page,
      size,
      title
    }
 
    if (state !== undefined && state !== null && state !== '') {
      variables.state = Number(state)
    }
 
    const result = await graphqlRequest(GET_NEWS_LIST_QUERY, variables)
    return result.data.newsList
  } catch (error) {
    console.error('获取新闻列表失败:', error)
    throw new Error(error && error.message ? error.message : '获取新闻列表失败')
  }
}
 
export const getNews = async (id) => {
  try {
    const result = await graphqlRequest(GET_NEWS_QUERY, { id })
    return result.data.news
  } catch (error) {
    throw new Error(error && error.message ? error.message : '获取新闻详情失败')
  }
}
 
export const getPublishedNews = async (id) => {
  try {
    const result = await graphqlRequest(GET_PUBLISHED_NEWS_QUERY, { id })
    return result.data.publishedNews
  } catch (error) {
    throw new Error(error && error.message ? error.message : '获取新闻详情失败')
  }
}
 
export const getPublishedNewsList = async (page = 0, size = 10) => {
  try {
    const variables = {
      page,
      size
    }
 
    const result = await graphqlRequest(GET_PUBLISHED_NEWS_LIST_QUERY, variables)
    return result.data.publishedNewsList
  } catch (error) {
    console.error('获取新闻列表失败:', error)
    throw new Error(error && error.message ? error.message : '获取新闻列表失败')
  }
}
 
export const saveNews = async (newsData) => {
  try {
    const data = await graphqlRequest(SAVE_NEWS_MUTATION, { input: newsData })
    return data.data.saveNews
  } catch (error) {
    console.error('保存新闻失败:', error)
    throw new Error(error && error.message ? error.message : '保存新闻失败')
  }
}
 
export const deleteNews = async (id) => {
  try {
    const data = await graphqlRequest(DELETE_NEWS_MUTATION, { id })
    return data.data.deleteNews
  } catch (error) {
    throw new Error(error && error.message ? error.message : '删除新闻失败')
  }
}
 
export const updateNewsState = async (id, state) => {
  try {
    const data = await graphqlRequest(UPDATE_NEWS_STATE_MUTATION, { id, state })
    return data.data.updateNewsState
  } catch (error) {
    throw new Error(error && error.message ? error.message : '更新新闻状态失败')
  }
}