vue3 增删改查

在页面里先导入api文件夹  

获取列表

1.循环列表

 <div class="double-list" v-for="(item, index) in datas" :key="index">

</div>

2.发请求

//城市数据渲染
const citys = reactive([
  {
    name: "长沙",
  },
  {
    name: "株州",
  },
  {
    name: "湘潭",
  },
  {
    name: "衡阳",
  },
  {
    name: "邵阳",
  },
  {
    name: "岳阳",
  },
  {
    name: "常德",
  },
  {
    name: "张家界",
  },
  {
    name: "益阳",
  },
  {
    name: "郴州",
  },
  {
    name: "永州",
  },
  {
    name: "怀化",
  },
  {
    name: "娄底",
  },
]);
//院校类型渲染
const types = reactive([
  {
    name: "专业院校",
  },
  {
    name: "本科院校",
  },
]);
//双选会状态渲染
const states = reactive([
  {
    name: "报名中",
    num: 0,
  },
  {
    name: "报名截止",
    num: 1,
  },
  {
    name: "进行中",
    num: 2,
  },
  {
    name: "已结束",
    num: 3,
  },
]);
//热门推荐渲染
const hotSearch = reactive([
  {
    name: "热门推荐",
    num: 1,
  },
  {
    name: "全部场次",
    num: 0,
  },
  {
    name: "我的报名",
    num: null,
  },
]);
//日期
const value2 = ref("");
//双选会状态
const MeetStatus = ref();
//城市选择
const AreaName = ref(null);
//关键字
const Keyword = ref("");
//热门推荐
const RecommendType = ref(1);

//分页相关
//每一页的条数
const pageSize = ref(10);
//当前的页码
const currentPage = ref(1);
//总条数
const total = ref(0);
//接受响应回来的数据
const datas = reactive([]);
const getDoubleList = () => {
  doubleOptionApi({
    page: currentPage.value, //当前页码
    pageSize: pageSize.value, //每页条数
    Keyword: Keyword.value, //关键字
    MeetStatus: MeetStatus.value, //状态
    AreaName: AreaName.value, //城市
    RecommendType: RecommendType.value, //是否热门推荐
  }).then((res) => {
    console.log("res", res);
    total.value = res.result.total;
    datas.splice(0, datas.length, ...res.result.items);
  });
};

删除

 <el-button type="primary" text @click="deleteRec(scope.row.id)"
              >删除</el-button
            >

// 删除招聘简章
const deleteRec = (id) => {
  ElMessageBox.confirm("您确定要删除吗?", "温馨提示", {
    confirmButtonText: "确认",
    cancelButtonText: "取消",
    type: "warning",
  }).then(() => {
    DelRecruitmentApi(id)
      .then((res) => {
        console.log("res", res);
        if (res.data.code === 200) {
        //渲染列表 
          getRulesList();
          console.log("删除成功");
          ElMessage({
            type: "success",
            message: "删除成功",
          });
        } else {
          console.log("删除失败");
        }
      })
      .catch(() => {
        ElMessage({
          type: "info",
          message: "删除失败",
        });
      });
  });
};

预览

import { ElMessageBox } from 'element-plus'
const router = useRouter()
const formRef = ref()

const state = reactive({
  form: {
    title: '',
    content: '',
    remark: ''
  }
})
var { form } = toRefs(state)
// 预览
onMounted(async () => {
  var id = router.currentRoute.value.query.id
  if (id) {
    var res = await aSingleGeneralApi({ id: id })
    state.form = res.result ?? {}
    console.log(state.form)
  }
})

编辑 添加

// 添加 编辑
const submitForm = () => {
  formRef.value.validate((valid) => {
    if (!valid) return
    if (state.form.id) {
      // 编辑
      UpRecruitmentApi(state.form).then((res) => {
        // console.log("res", res);
        if (res.code === 200) {
          ElMessageBox({
            title: '提示',
            message: '添加成功'
          })
        }
        router.push('/home/generalRules')
      })
    } else {
      // 添加
      AddRecruitmentApi(state.form).then((res) => {
        // console.log("res", res);
        if (res.code === 200) {
          ElMessageBox({
            title: '提示',
            message: '添加成功'
          })
        }
        router.push('/home/generalRules')
      })
    }
  })
}

在使用 Vite、TypeScript 和 Vue3 实现数据的增删改查(CRUD)操作时,可以通过组合 Vue3 的响应式系统(如 `ref` 或 `reactive`)、组件化设计以及 TypeScript 提供的类型安全性来构建功能完整且结构清晰的应用。 ### 项目搭建 首先确保你已经创建了一个基于 Vite + Vue3 + TypeScript 的项目。你可以使用以下命令: ```bash npm create vite@latest my-app --template vue-ts ``` 这将生成一个包含 TypeScript 支持的 Vue3 项目模板,并自动配置了基础的 `tsconfig.json` 和类型声明文件 `shims-vue.d.ts` 等[^4]。 ### 数据模型定义 为确保类型安全和代码可维护性,建议先定义数据模型。例如,在 `src/types/index.ts` 中定义一个用户模型: ```typescript export interface User { id: number; name: string; email: string; } ``` ### 状态管理 可以使用 Vue3 的 `reactive` 或 `ref` 来管理状态。对于简单的 CRUD 示例,可以在组件内部直接管理状态: ```vue <script setup lang="ts"> import { ref } from &#39;vue&#39;; import { User } from &#39;@/types&#39;; const users = ref<User[]>([ { id: 1, name: &#39;张三&#39;, email: &#39;zhangsan@example.com&#39; }, { id: 2, name: &#39;李四&#39;, email: &#39;lisi@example.com&#39; } ]); function addUser(user: User) { users.value.push(user); } function deleteUser(id: number) { users.value = users.value.filter(u => u.id !== id); } function updateUser(updatedUser: User) { const index = users.value.findIndex(u => u.id === updatedUser.id); if (index !== -1) { users.value[index] = updatedUser; } } </script> ``` ### 增删改查 UI 组件实现 在 `<template>` 中绑定事件与方法,构建交互界面: ```vue <template> <div> <h2>用户列表</h2> <ul> <li v-for="user in users" :key="user.id"> {{ user.name }} - {{ user.email }} <button @click="deleteUser(user.id)">删除</button> <button @click="editUser(user)">编辑</button> </li> </ul> <h3>添加/编辑用户</h3> <form @submit.prevent="onSubmit"> <input v-model="currentForm.id" type="hidden" /> <label>姓名: <input v-model="currentForm.name" required /> </label> <label>邮箱: <input v-model="currentForm.email" required /> </label> <button type="submit">提交</button> </form> </div> </template> ``` 并在脚本中处理表单逻辑: ```vue <script setup lang="ts"> import { ref } from &#39;vue&#39;; import { User } from &#39;@/types&#39;; const currentForm = ref<Partial<User>>({}); const editingIndex = ref<number | null>(null); function onSubmit() { if (editingIndex.value !== null) { updateUser(currentForm.value as User); editingIndex.value = null; } else { const newUser: User = { id: Date.now(), ...currentForm.value } as User; addUser(newUser); } currentForm.value = {}; } function editUser(user: User) { currentForm.value = { ...user }; editingIndex.value = users.value.indexOf(user); } </script> ``` ### 进阶:引入 Axios 实现 API 请求 若需连接后端接口,可通过 Axios 发送 HTTP 请求。安装 Axios 并封装请求模块: ```bash npm install axios ``` 创建 `src/api/userApi.ts`: ```typescript import axios from &#39;axios&#39;; import { User } from &#39;@/types&#39;; const apiClient = axios.create({ baseURL: &#39;http://localhost:3000&#39;, }); export default { getUsers(): Promise<User[]> { return apiClient.get(&#39;/users&#39;).then(res => res.data); }, addUser(user: User): Promise<User> { return apiClient.post(&#39;/users&#39;, user).then(res => res.data); }, updateUser(user: User): Promise<User> { return apiClient.put(`/users/${user.id}`, user).then(res => res.data); }, deleteUser(id: number): Promise<void> { return apiClient.delete(`/users/${id}`); } }; ``` 在组件中调用 API: ```typescript import userApi from &#39;@/api/userApi&#39;; async function fetchUsers() { users.value = await userApi.getUsers(); } ``` ### 总结 通过上述步骤,可以在 Vite + Vue3 + TypeScript 项目中实现完整的增删改查功能,涵盖前端状态管理、UI 构建以及后端通信能力。整个流程结合了 Vue3 的 Composition API 和 TypeScript 的强类型机制,提升了开发效率与代码质量。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值