This commit is contained in:
@zuopngfei 2025-05-20 16:09:33 +08:00
parent b7c7253732
commit 2def4b3546
6 changed files with 134 additions and 191 deletions

View File

@ -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
})
}

View File

@ -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
})
}

View File

@ -10,7 +10,7 @@
</el-menu-item>
<el-menu-item index="/news">
<el-icon><Document /></el-icon>
健康文章
患教文章
</el-menu-item>
</el-menu>

View File

@ -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('登录失败,请检查用户名和密码')

View File

@ -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 {

View File

@ -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>