当前位置:首页 > VUE

vue实现信息发布系统

2026-01-20 17:10:58VUE

Vue 实现信息发布系统

项目初始化与基础配置

使用 Vue CLI 或 Vite 创建项目,安装必要依赖:

npm create vue@latest info-publish-system
cd info-publish-system
npm install vue-router pinia axios element-plus

配置路由(src/router/index.js):

import { createRouter, createWebHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'

const routes = [
  { path: '/', component: HomeView },
  { path: '/publish', component: () => import('../views/PublishView.vue') },
  { path: '/list', component: () => import('../views/ListView.vue') }
]

const router = createRouter({
  history: createWebHistory(),
  routes
})

export default router

状态管理设计

使用 Pinia 管理全局状态(src/stores/infoStore.js):

import { defineStore } from 'pinia'

export const useInfoStore = defineStore('info', {
  state: () => ({
    infoList: [],
    currentInfo: null
  }),
  actions: {
    async fetchInfoList() {
      const res = await axios.get('/api/info')
      this.infoList = res.data
    },
    async publishInfo(infoData) {
      await axios.post('/api/info', infoData)
      this.fetchInfoList()
    }
  }
})

信息发布组件实现

创建发布表单组件(src/components/PublishForm.vue):

vue实现信息发布系统

<template>
  <el-form :model="form" label-width="80px">
    <el-form-item label="标题">
      <el-input v-model="form.title"></el-input>
    </el-form-item>
    <el-form-item label="内容">
      <el-input v-model="form.content" type="textarea" rows="5"></el-input>
    </el-form-item>
    <el-form-item>
      <el-button type="primary" @click="handleSubmit">发布</el-button>
    </el-form-item>
  </el-form>
</template>

<script setup>
import { ref } from 'vue'
import { useInfoStore } from '@/stores/infoStore'

const form = ref({
  title: '',
  content: ''
})
const infoStore = useInfoStore()

const handleSubmit = () => {
  infoStore.publishInfo(form.value)
  form.value = { title: '', content: '' }
}
</script>

信息列表展示

实现信息列表组件(src/components/InfoList.vue):

<template>
  <el-table :data="infoStore.infoList" style="width: 100%">
    <el-table-column prop="title" label="标题" width="180" />
    <el-table-column prop="content" label="内容" />
    <el-table-column prop="createdAt" label="发布时间" width="180" />
  </el-table>
</template>

<script setup>
import { useInfoStore } from '@/stores/infoStore'
import { onMounted } from 'vue'

const infoStore = useInfoStore()
onMounted(() => infoStore.fetchInfoList())
</script>

API 接口封装

创建 API 请求模块(src/api/index.js):

vue实现信息发布系统

import axios from 'axios'

const instance = axios.create({
  baseURL: 'http://your-api-server.com'
})

export default {
  getInfoList: () => instance.get('/info'),
  publishInfo: (data) => instance.post('/info', data)
}

样式与布局优化

添加全局样式(src/assets/main.css):

.container {
  max-width: 1200px;
  margin: 0 auto;
  padding: 20px;
}
.card {
  margin-bottom: 20px;
  box-shadow: 0 2px 12px rgba(0,0,0,0.1);
}

功能扩展建议

  1. 添加富文本编辑器(如 tiptap 或 quill)增强内容编辑能力
  2. 实现信息分类和标签系统
  3. 增加用户权限管理模块
  4. 添加信息审核流程
  5. 实现信息搜索和筛选功能

部署准备

配置生产环境变量(.env.production):

VITE_API_BASE_URL=https://production-api.example.com

构建命令:

npm run build

分享给朋友:

相关文章

vue表格实现教学

vue表格实现教学

Vue 表格实现方法 使用原生HTML表格 在Vue模板中直接使用HTML的<table>标签,结合v-for动态渲染数据: <template> <table&…

vue实现防抖节流

vue实现防抖节流

Vue 中实现防抖(Debounce) 防抖的核心是延迟执行函数,在连续触发时取消前一次的调用,只执行最后一次。适用于输入框搜索、窗口大小调整等场景。 方法1:使用 Lodash 的 _.debo…

vue实现无线滚动列表

vue实现无线滚动列表

无限滚动列表的实现方法 在Vue中实现无限滚动列表通常结合监听滚动事件和动态加载数据。以下是几种常见方法: 使用自定义指令 创建自定义指令v-infinite-scroll监听滚动事件: Vu…

vue datepicker 实现

vue datepicker 实现

实现 Vue Datepicker 的基本方法 在 Vue 项目中实现日期选择功能,可以使用第三方库如 vue-datepicker 或 v-calendar。以下是两种常见实现方式: 安装 vu…

vue 实现jqslidedown

vue 实现jqslidedown

在 Vue 中实现类似 jQuery 的 slideDown 效果,可以通过 Vue 的过渡系统或 CSS 动画结合动态样式绑定来实现。以下是几种实现方式: 使用 Vue Transition 组件…

实现vue模版

实现vue模版

Vue 模板的基本结构 Vue 模板基于 HTML 语法,通过 Vue 的指令和插值实现动态渲染。以下是一个基础模板示例: <template> <div id="…