2323
This commit is contained in:
parent
b7c7253732
commit
2def4b3546
@ -4,88 +4,8 @@ import request from '@/utils/request'
|
|||||||
// 登录
|
// 登录
|
||||||
export const userLogin = (data: any) => {
|
export const userLogin = (data: any) => {
|
||||||
return request({
|
return request({
|
||||||
url: `api/customer/login`,
|
url: `admin/login`,
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
// 注册
|
|
||||||
export const userRegister = (data: any) => {
|
|
||||||
return request({
|
|
||||||
url: `api/customer/register`,
|
|
||||||
method: 'post',
|
|
||||||
data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 发送邮箱验证码
|
|
||||||
export const sendEmail = (data: any) => {
|
|
||||||
return request({
|
|
||||||
url: `api/customer/send_activation_email`,
|
|
||||||
method: 'post',
|
|
||||||
data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取用户信息
|
|
||||||
export const getUserInfo = () => {
|
|
||||||
return request({
|
|
||||||
url: `api/customer/info`,
|
|
||||||
method: 'get'
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 激活账号
|
|
||||||
|
|
||||||
export const verifyCode = (code: any) => {
|
|
||||||
return request({
|
|
||||||
url: `api/customer/verify_activation_email/${code}`,
|
|
||||||
method: 'get'
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 扫码登录
|
|
||||||
|
|
||||||
export const getRr = (data) => {
|
|
||||||
return request({
|
|
||||||
url: `api/customer/qr`,
|
|
||||||
method: 'post',
|
|
||||||
data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 轮询登录结果
|
|
||||||
|
|
||||||
export const getRrLogin = (data) => {
|
|
||||||
return request({
|
|
||||||
url: `api/customer/qr_login`,
|
|
||||||
method: 'post',
|
|
||||||
data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
export const getUserSearch = (data) => {
|
|
||||||
return request({
|
|
||||||
url: `api/customer/search`,
|
|
||||||
method: 'post',
|
|
||||||
data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
export const setUserRecharge = (data) => {
|
|
||||||
return request({
|
|
||||||
url: `api/customer/recharge`,
|
|
||||||
method: 'post',
|
|
||||||
data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 充值记录
|
|
||||||
export const rechargeList = (data) => {
|
|
||||||
return request({
|
|
||||||
url: `api/customer/recharge/list`,
|
|
||||||
method: 'get',
|
|
||||||
params: data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
116
src/api/news.ts
116
src/api/news.ts
@ -1,91 +1,39 @@
|
|||||||
import request from '@/utils/request'
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
|
||||||
// 登录
|
|
||||||
export const userLogin = (data: any) => {
|
export const news = (data: any) => {
|
||||||
return request({
|
return request({
|
||||||
url: `api/customer/login`,
|
url: `admin/articles`,
|
||||||
method: 'post',
|
|
||||||
data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
// 注册
|
|
||||||
export const userRegister = (data: any) => {
|
|
||||||
return request({
|
|
||||||
url: `api/customer/register`,
|
|
||||||
method: 'post',
|
|
||||||
data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 发送邮箱验证码
|
|
||||||
export const sendEmail = (data: any) => {
|
|
||||||
return request({
|
|
||||||
url: `api/customer/send_activation_email`,
|
|
||||||
method: 'post',
|
|
||||||
data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取用户信息
|
|
||||||
export const getUserInfo = () => {
|
|
||||||
return request({
|
|
||||||
url: `api/customer/info`,
|
|
||||||
method: 'get'
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 激活账号
|
|
||||||
|
|
||||||
export const verifyCode = (code: any) => {
|
|
||||||
return request({
|
|
||||||
url: `api/customer/verify_activation_email/${code}`,
|
|
||||||
method: 'get'
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 扫码登录
|
|
||||||
|
|
||||||
export const getRr = (data) => {
|
|
||||||
return request({
|
|
||||||
url: `api/customer/qr`,
|
|
||||||
method: 'post',
|
|
||||||
data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 轮询登录结果
|
|
||||||
|
|
||||||
export const getRrLogin = (data) => {
|
|
||||||
return request({
|
|
||||||
url: `api/customer/qr_login`,
|
|
||||||
method: 'post',
|
|
||||||
data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
export const getUserSearch = (data) => {
|
|
||||||
return request({
|
|
||||||
url: `api/customer/search`,
|
|
||||||
method: 'post',
|
|
||||||
data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
export const setUserRecharge = (data) => {
|
|
||||||
return request({
|
|
||||||
url: `api/customer/recharge`,
|
|
||||||
method: 'post',
|
|
||||||
data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 充值记录
|
|
||||||
export const rechargeList = (data) => {
|
|
||||||
return request({
|
|
||||||
url: `api/customer/recharge/list`,
|
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params: data
|
params: data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 添加文章
|
||||||
|
export const addNews = (data: any) => {
|
||||||
|
return request({
|
||||||
|
url: `admin/article/create`,
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 编辑文章
|
||||||
|
export const editNews = (data: any, id: string) => {
|
||||||
|
return request({
|
||||||
|
url: `admin/article/${id}`,
|
||||||
|
method: 'put',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除文章
|
||||||
|
export const deleteNews = (data: any) => {
|
||||||
|
return request({
|
||||||
|
url: `admin/article/delete`,
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@ -10,7 +10,7 @@
|
|||||||
</el-menu-item>
|
</el-menu-item>
|
||||||
<el-menu-item index="/news">
|
<el-menu-item index="/news">
|
||||||
<el-icon><Document /></el-icon>
|
<el-icon><Document /></el-icon>
|
||||||
健康文章
|
患教文章
|
||||||
</el-menu-item>
|
</el-menu-item>
|
||||||
|
|
||||||
</el-menu>
|
</el-menu>
|
||||||
|
|||||||
@ -46,7 +46,7 @@
|
|||||||
import { ref, reactive } from 'vue'
|
import { ref, reactive } from 'vue'
|
||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vue-router'
|
||||||
import { ElMessage } from 'element-plus'
|
import { ElMessage } from 'element-plus'
|
||||||
|
import { userLogin } from '@/api/login'
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const loginFormRef = ref(null)
|
const loginFormRef = ref(null)
|
||||||
const loading = ref(false)
|
const loading = ref(false)
|
||||||
@ -75,13 +75,18 @@
|
|||||||
|
|
||||||
// TODO: 这里添加实际的登录API调用
|
// TODO: 这里添加实际的登录API调用
|
||||||
// const res = await login(loginForm)
|
// const res = await login(loginForm)
|
||||||
localStorage.setItem('TOKEN', '123456')
|
userLogin(loginForm).then(res => {
|
||||||
// 模拟登录成功
|
console.log(res)
|
||||||
setTimeout(() => {
|
localStorage.setItem('TOKEN', res.data.token)
|
||||||
ElMessage.success('登录成功')
|
|
||||||
router.push('/')
|
router.push('/')
|
||||||
loading.value = false
|
loading.value = false
|
||||||
}, 1000)
|
})
|
||||||
|
// 模拟登录成功
|
||||||
|
// setTimeout(() => {
|
||||||
|
// ElMessage.success('登录成功')
|
||||||
|
// router.push('/')
|
||||||
|
// loading.value = false
|
||||||
|
// }, 1000)
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
ElMessage.error('登录失败,请检查用户名和密码')
|
ElMessage.error('登录失败,请检查用户名和密码')
|
||||||
|
|||||||
@ -7,12 +7,13 @@
|
|||||||
<Toolbar style="" :editor="editorRef" :defaultConfig="toolbarConfig" :mode="mode" />
|
<Toolbar style="" :editor="editorRef" :defaultConfig="toolbarConfig" :mode="mode" />
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="title-box">
|
<div class="editor-box-content">
|
||||||
<input type="text" v-model="newTitle" class="title-input" placeholder="请输入文章标题" />
|
<div class="title-box">
|
||||||
|
<input type="text" v-model="newTitle" class="title-input" placeholder="请输入文章标题" />
|
||||||
|
</div>
|
||||||
|
<Editor class="editor" style="height: calc(100% - 60px); overflow-y: hidden;" v-model="valueHtml"
|
||||||
|
:defaultConfig="editorConfig" :mode="mode" @onCreated="handleCreated" />
|
||||||
</div>
|
</div>
|
||||||
<Editor class="editor" style="height: calc(100% - 190px); overflow-y: hidden;" v-model="valueHtml"
|
|
||||||
:defaultConfig="editorConfig" :mode="mode" @onCreated="handleCreated" />
|
|
||||||
|
|
||||||
<!-- 添加字数统计显示 -->
|
<!-- 添加字数统计显示 -->
|
||||||
|
|
||||||
|
|
||||||
@ -20,7 +21,7 @@
|
|||||||
<div class="character-count">
|
<div class="character-count">
|
||||||
字数: {{ characterCount }}
|
字数: {{ characterCount }}
|
||||||
</div>
|
</div>
|
||||||
<el-button type="primary" @click="handleSaveArticle(1)">保存</el-button>
|
<el-button type="primary" @click="handleSaveArticle">保存</el-button>
|
||||||
<!-- <el-button type="primary" @click="handleSaveArticle(2)">存草稿</el-button> -->
|
<!-- <el-button type="primary" @click="handleSaveArticle(2)">存草稿</el-button> -->
|
||||||
<el-button type="primary" @click="handlePreviewArticle">预览</el-button>
|
<el-button type="primary" @click="handlePreviewArticle">预览</el-button>
|
||||||
</div>
|
</div>
|
||||||
@ -50,11 +51,10 @@ import '@wangeditor/editor/dist/css/style.css' // 引入 css
|
|||||||
import { Loading } from '@element-plus/icons-vue'
|
import { Loading } from '@element-plus/icons-vue'
|
||||||
import { onBeforeUnmount, onUnmounted , ref, reactive, shallowRef, onMounted, computed, getCurrentInstance, nextTick } from 'vue'
|
import { onBeforeUnmount, onUnmounted , ref, reactive, shallowRef, onMounted, computed, getCurrentInstance, nextTick } from 'vue'
|
||||||
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
|
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
|
||||||
|
import { addNews, editNews } from '@/api/news'
|
||||||
// import { title, inspiration, configList, writeOutline, models, generateArticle, analysisStyle, saveStyle, saveArticle, editArticle, customerTool } from '@/api/AICreation'
|
|
||||||
|
|
||||||
import { useRoute, useRouter } from 'vue-router'
|
import { useRoute, useRouter } from 'vue-router'
|
||||||
|
import { DomEditor } from '@wangeditor/editor'
|
||||||
|
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@ -73,8 +73,15 @@ const mode = ref('default')
|
|||||||
const valueText = ref('')
|
const valueText = ref('')
|
||||||
// 添加字数统计
|
// 添加字数统计
|
||||||
|
|
||||||
const characterCount = ref(0)
|
const characterCount = ref(0)
|
||||||
const toolbarConfig = {}
|
const toolbarConfig = {
|
||||||
|
excludeKeys: [
|
||||||
|
'group-image',
|
||||||
|
'group-video',
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const editorConfig = {
|
const editorConfig = {
|
||||||
placeholder: '请输入内容...',
|
placeholder: '请输入内容...',
|
||||||
MENU_CONF: {}, // Initialize MENU_CONF as an empty object
|
MENU_CONF: {}, // Initialize MENU_CONF as an empty object
|
||||||
@ -142,13 +149,29 @@ editorConfig.MENU_CONF['uploadVideo'] = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const handleSaveArticle = (type) => {
|
const handleSaveArticle = () => {
|
||||||
console.log(type)
|
|
||||||
|
|
||||||
router.back()
|
if(route.query.id){
|
||||||
|
editNews({
|
||||||
|
title: newTitle.value,
|
||||||
|
content: valueHtml.value
|
||||||
|
}, route.query.id).then(res => {
|
||||||
|
ElNotification.success('编辑成功')
|
||||||
|
router.back()
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
addNews({
|
||||||
|
title: newTitle.value,
|
||||||
|
content: valueHtml.value
|
||||||
|
}).then(res => {
|
||||||
|
ElNotification.success('添加成功')
|
||||||
|
router.back()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 组件销毁时,也及时销毁编辑器
|
// 组件销毁时,也及时销毁编辑器
|
||||||
onBeforeUnmount(() => {
|
onBeforeUnmount(() => {
|
||||||
const editor = editorRef.value
|
const editor = editorRef.value
|
||||||
@ -156,8 +179,10 @@ onBeforeUnmount(() => {
|
|||||||
editor.destroy()
|
editor.destroy()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
const handleCreated = (editor) => {
|
const handleCreated = (editor) => {
|
||||||
editorRef.value = editor // 记录 editor 实例,重要!
|
editorRef.value = editor // 记录 editor 实例,重要!
|
||||||
|
|
||||||
if (route.query.id) {
|
if (route.query.id) {
|
||||||
editor.setHtml(sessionStorage.getItem('works'))
|
editor.setHtml(sessionStorage.getItem('works'))
|
||||||
// valueHtml.value = sessionStorage.getItem('works')
|
// valueHtml.value = sessionStorage.getItem('works')
|
||||||
@ -169,6 +194,11 @@ const handleCreated = (editor) => {
|
|||||||
// 计算字数
|
// 计算字数
|
||||||
characterCount.value = valueText.value.length
|
characterCount.value = valueText.value.length
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// const toolbar = DomEditor.getToolbar(editor)
|
||||||
|
|
||||||
|
// const curToolbarConfig = toolbar.getConfig()
|
||||||
|
// console.log(curToolbarConfig.toolbarKeys) // 当前菜单排序和分组
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -179,7 +209,9 @@ const handleCreated = (editor) => {
|
|||||||
const newTitle = ref('')
|
const newTitle = ref('')
|
||||||
|
|
||||||
|
|
||||||
|
const handlePreviewArticle = () => {
|
||||||
|
dialogPreview.value = true
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -228,7 +260,10 @@ app.appContext.app.directive('auto-resize', vAutoResize)
|
|||||||
:deep(.el-radio__label) {
|
:deep(.el-radio__label) {
|
||||||
white-space: normal;
|
white-space: normal;
|
||||||
}
|
}
|
||||||
|
.editor-box-content{
|
||||||
|
padding: 0 16px;
|
||||||
|
height: calc(100% - 130px);
|
||||||
|
}
|
||||||
.title-input {
|
.title-input {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 50px;
|
height: 50px;
|
||||||
@ -252,7 +287,6 @@ app.appContext.app.directive('auto-resize', vAutoResize)
|
|||||||
|
|
||||||
|
|
||||||
.editor {
|
.editor {
|
||||||
height: calc(100% - 300px);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.editor-btn-box {
|
.editor-btn-box {
|
||||||
|
|||||||
@ -11,6 +11,16 @@
|
|||||||
<el-table-column prop="author" label="作者" />
|
<el-table-column prop="author" label="作者" />
|
||||||
<el-table-column prop="createTime" label="创建时间" />
|
<el-table-column prop="createTime" label="创建时间" />
|
||||||
<el-table-column prop="updateTime" label="更新时间" />
|
<el-table-column prop="updateTime" label="更新时间" />
|
||||||
|
<el-table-column label="操作">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-icon type="primary" @click="editNews(scope.row)">
|
||||||
|
<Edit />
|
||||||
|
</el-icon>
|
||||||
|
<el-icon type="danger" @click="handleDeleteNews(scope.row)">
|
||||||
|
<Delete />
|
||||||
|
</el-icon>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<el-pagination
|
<el-pagination
|
||||||
background
|
background
|
||||||
@ -24,8 +34,9 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref } from 'vue';
|
import { ref, onMounted } from 'vue';
|
||||||
import { useRouter } from 'vue-router';
|
import { useRouter } from 'vue-router';
|
||||||
|
import { news, deleteNews } from '@/api/news';
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const tableData = ref([
|
const tableData = ref([
|
||||||
{
|
{
|
||||||
@ -39,6 +50,31 @@ const search = ref('')
|
|||||||
const addNews = () => {
|
const addNews = () => {
|
||||||
router.push('/addNew')
|
router.push('/addNew')
|
||||||
}
|
}
|
||||||
|
const editNews = (row) => {
|
||||||
|
router.push(`/addNew?id=${row.id}`)
|
||||||
|
}
|
||||||
|
const handleDeleteNews = (row) => {
|
||||||
|
console.log(row)
|
||||||
|
deleteNews(row.id).then(res => {
|
||||||
|
console.log(res)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const query = ref({
|
||||||
|
page: 1,
|
||||||
|
size: 20,
|
||||||
|
title: '',
|
||||||
|
author: '',
|
||||||
|
createTime: '',
|
||||||
|
})
|
||||||
|
const getNews = () => {
|
||||||
|
news(query.value).then(res => {
|
||||||
|
console.log(res)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
onMounted(() => {
|
||||||
|
getNews()
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user