2323
This commit is contained in:
parent
b7c7253732
commit
2def4b3546
@ -4,88 +4,8 @@ import request from '@/utils/request'
|
||||
// 登录
|
||||
export const userLogin = (data: any) => {
|
||||
return request({
|
||||
url: `api/customer/login`,
|
||||
url: `admin/login`,
|
||||
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',
|
||||
params: data
|
||||
})
|
||||
}
|
||||
116
src/api/news.ts
116
src/api/news.ts
@ -1,91 +1,39 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
|
||||
// 登录
|
||||
export const userLogin = (data: any) => {
|
||||
|
||||
export const news = (data: any) => {
|
||||
return request({
|
||||
url: `api/customer/login`,
|
||||
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`,
|
||||
url: `admin/articles`,
|
||||
method: 'get',
|
||||
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 index="/news">
|
||||
<el-icon><Document /></el-icon>
|
||||
健康文章
|
||||
患教文章
|
||||
</el-menu-item>
|
||||
|
||||
</el-menu>
|
||||
|
||||
@ -46,7 +46,7 @@
|
||||
import { ref, reactive } from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { ElMessage } from 'element-plus'
|
||||
|
||||
import { userLogin } from '@/api/login'
|
||||
const router = useRouter()
|
||||
const loginFormRef = ref(null)
|
||||
const loading = ref(false)
|
||||
@ -75,13 +75,18 @@
|
||||
|
||||
// TODO: 这里添加实际的登录API调用
|
||||
// const res = await login(loginForm)
|
||||
localStorage.setItem('TOKEN', '123456')
|
||||
// 模拟登录成功
|
||||
setTimeout(() => {
|
||||
ElMessage.success('登录成功')
|
||||
userLogin(loginForm).then(res => {
|
||||
console.log(res)
|
||||
localStorage.setItem('TOKEN', res.data.token)
|
||||
router.push('/')
|
||||
loading.value = false
|
||||
}, 1000)
|
||||
})
|
||||
// 模拟登录成功
|
||||
// setTimeout(() => {
|
||||
// ElMessage.success('登录成功')
|
||||
// router.push('/')
|
||||
// loading.value = false
|
||||
// }, 1000)
|
||||
|
||||
} catch (error) {
|
||||
ElMessage.error('登录失败,请检查用户名和密码')
|
||||
|
||||
@ -7,12 +7,13 @@
|
||||
<Toolbar style="" :editor="editorRef" :defaultConfig="toolbarConfig" :mode="mode" />
|
||||
|
||||
</div>
|
||||
<div class="title-box">
|
||||
<input type="text" v-model="newTitle" class="title-input" placeholder="请输入文章标题" />
|
||||
<div class="editor-box-content">
|
||||
<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>
|
||||
<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">
|
||||
字数: {{ characterCount }}
|
||||
</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="handlePreviewArticle">预览</el-button>
|
||||
</div>
|
||||
@ -50,11 +51,10 @@ import '@wangeditor/editor/dist/css/style.css' // 引入 css
|
||||
import { Loading } from '@element-plus/icons-vue'
|
||||
import { onBeforeUnmount, onUnmounted , ref, reactive, shallowRef, onMounted, computed, getCurrentInstance, nextTick } from 'vue'
|
||||
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
|
||||
|
||||
// import { title, inspiration, configList, writeOutline, models, generateArticle, analysisStyle, saveStyle, saveArticle, editArticle, customerTool } from '@/api/AICreation'
|
||||
import { addNews, editNews } from '@/api/news'
|
||||
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
|
||||
import { DomEditor } from '@wangeditor/editor'
|
||||
|
||||
|
||||
const route = useRoute()
|
||||
@ -73,8 +73,15 @@ const mode = ref('default')
|
||||
const valueText = ref('')
|
||||
// 添加字数统计
|
||||
|
||||
const characterCount = ref(0)
|
||||
const toolbarConfig = {}
|
||||
const characterCount = ref(0)
|
||||
const toolbarConfig = {
|
||||
excludeKeys: [
|
||||
'group-image',
|
||||
'group-video',
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
const editorConfig = {
|
||||
placeholder: '请输入内容...',
|
||||
MENU_CONF: {}, // Initialize MENU_CONF as an empty object
|
||||
@ -142,13 +149,29 @@ editorConfig.MENU_CONF['uploadVideo'] = {
|
||||
}
|
||||
|
||||
|
||||
const handleSaveArticle = (type) => {
|
||||
console.log(type)
|
||||
const handleSaveArticle = () => {
|
||||
|
||||
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(() => {
|
||||
const editor = editorRef.value
|
||||
@ -156,8 +179,10 @@ onBeforeUnmount(() => {
|
||||
editor.destroy()
|
||||
})
|
||||
|
||||
|
||||
const handleCreated = (editor) => {
|
||||
editorRef.value = editor // 记录 editor 实例,重要!
|
||||
|
||||
if (route.query.id) {
|
||||
editor.setHtml(sessionStorage.getItem('works'))
|
||||
// valueHtml.value = sessionStorage.getItem('works')
|
||||
@ -169,6 +194,11 @@ const handleCreated = (editor) => {
|
||||
// 计算字数
|
||||
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 handlePreviewArticle = () => {
|
||||
dialogPreview.value = true
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -228,7 +260,10 @@ app.appContext.app.directive('auto-resize', vAutoResize)
|
||||
:deep(.el-radio__label) {
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
.editor-box-content{
|
||||
padding: 0 16px;
|
||||
height: calc(100% - 130px);
|
||||
}
|
||||
.title-input {
|
||||
width: 100%;
|
||||
height: 50px;
|
||||
@ -252,7 +287,6 @@ app.appContext.app.directive('auto-resize', vAutoResize)
|
||||
|
||||
|
||||
.editor {
|
||||
height: calc(100% - 300px);
|
||||
}
|
||||
|
||||
.editor-btn-box {
|
||||
|
||||
@ -11,6 +11,16 @@
|
||||
<el-table-column prop="author" label="作者" />
|
||||
<el-table-column prop="createTime" 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-pagination
|
||||
background
|
||||
@ -24,8 +34,9 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref } from 'vue';
|
||||
import { ref, onMounted } from 'vue';
|
||||
import { useRouter } from 'vue-router';
|
||||
import { news, deleteNews } from '@/api/news';
|
||||
const router = useRouter()
|
||||
const tableData = ref([
|
||||
{
|
||||
@ -39,6 +50,31 @@ const search = ref('')
|
||||
const addNews = () => {
|
||||
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>
|
||||
|
||||
<style scoped>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user