Merge branch 'main' of http://47.96.1.176:3000/work/book-web
This commit is contained in:
commit
84dba3f8f3
108
README.md
108
README.md
|
@ -1,66 +1,70 @@
|
|||
## 介绍
|
||||
- 基于Vue3、TypeScript、Element Plus、Vue Router、Pinia、Axios、i18n、Vite等开发的后台管理,使用门槛极低。
|
||||
- 目前已实现maku-admin后端接口的有:【maku-boot】 和 【maku-cloud】 2个后端开源项目。
|
||||
- 开发文档:https://maku.net/docs/maku-admin
|
||||
- 官网地址:https://maku.net
|
||||
## 项目文档
|
||||
|
||||
## maku-boot | 单体低代码开发平台
|
||||
- Gitee仓库:https://gitee.com/makunet/maku-boot
|
||||
- Github仓库:https://github.com/makunet/maku-boot
|
||||
- 演示环境:https://demo.maku.net/maku-boot
|
||||
数据库设计文档:https://kdocs.cn/l/caIBoD7HcEBL
|
||||
|
||||
API接口设计文档:https://apifox.com/apidoc/shared-ff0060f8-8bb5-40c5-87d2-f8a29ee5ecd5
|
||||
|
||||
API接口加入文档:https://app.apifox.com/invite/project?token=Xp3BUXBEYQ34hiKcFX-ub
|
||||
|
||||
前端代码仓库:http://47.96.1.176:3000/work/book-web
|
||||
|
||||
后端代码仓库:http://47.96.1.176:3000/work/book-api
|
||||
|
||||
## 项目说明
|
||||
|
||||
### 书籍管理系统
|
||||
角色 用户
|
||||
书本管理员(账号与密码你们自己创建 管理员没有指定的创建入口 但客户要有注册功能)
|
||||
|
||||
书本录入管理员
|
||||
功能:
|
||||
书本的上架(书本的基本信息 封面的上传 书本币的定价 库存)
|
||||
用户的管理 (基本的增删改查 可以禁止用户登录)
|
||||
|
||||
|
||||
## maku-cloud | 微服务低代码开发平台
|
||||
- Gitee仓库:https://gitee.com/makunet/maku-cloud
|
||||
- Github仓库:https://github.com/makunet/maku-cloud
|
||||
- 演示环境:https://demo.maku.net/maku-cloud
|
||||
书本商城网页
|
||||
|
||||
商城首页
|
||||
|
||||
功能点:
|
||||
|
||||
1、可以根据书名搜索图书
|
||||
|
||||
2、可以查看图书的详情界面
|
||||
|
||||
3、可以查看评论【评论不需要回复功能】)
|
||||
|
||||
4、可以收藏、购买、加入购物车的图书
|
||||
|
||||
用户个人中心
|
||||
功能点:
|
||||
|
||||
1、基本信息
|
||||
|
||||
2、头像
|
||||
|
||||
3、书本币余额【用来购买的图书】
|
||||
|
||||
4、我购买的图书列表
|
||||
|
||||
5、我收藏的图书列表
|
||||
|
||||
6、我的购物车
|
||||
|
||||
7、充值书本币(不需要接入真实的支付 模拟充值就ok)
|
||||
|
||||
注:没有登录,不可以收藏、加入购物车、评论、以及购买。
|
||||
|
||||
|
||||
## 安装
|
||||
注意:需使用 nodejs 长期维护版本,如:[18.x、20.x],能保证项目的稳定运行。
|
||||
要求:
|
||||
1、使用redis作为缓存,
|
||||
|
||||
```bash
|
||||
# 克隆项目
|
||||
git clone https://gitee.com/makunet/maku-admin.git
|
||||
|
||||
# 进入项目
|
||||
cd maku-admin
|
||||
|
||||
# 安装依赖
|
||||
npm install
|
||||
|
||||
# 运行项目
|
||||
npm run dev
|
||||
|
||||
# 打包发布
|
||||
npm run build
|
||||
```
|
||||
|
||||
|
||||
## 微信交流群
|
||||
为了更好的交流,我们新提供了微信交流群,需扫描下面的二维码,关注公众号,回复【加群】,根据提示信息,作者会拉你进群的,感谢配合!
|
||||
|
||||

|
||||
|
||||
|
||||
## 开源汇总
|
||||
- 低代码开发平台(单体版):https://gitee.com/makunet/maku-boot
|
||||
- 低代码开发平台(微服务):https://gitee.com/makunet/maku-cloud
|
||||
- 超好用的代码生成器:https://gitee.com/makunet/maku-generator
|
||||
- Vue3.x 后台管理UI:https://gitee.com/makunet/maku-admin
|
||||
- Vue3.x 表单设计器:https://gitee.com/makunet/maku-form-design
|
||||
2、不强制使用security,但是前端必须要有token,后端可以统一用拦截器拦截做校验是否登录
|
||||
|
||||
|
||||
|
||||
## 支持
|
||||
如果觉得框架还不错,或者已经在使用了,希望你可以去 [Github](https://github.com/makunet/maku-admin) 或 [Gitee](https://gitee.com/makunet/maku-admin) 帮作者点个 ⭐ Star,这将是对作者极大的鼓励与支持。
|
||||
|
||||
## 效果图
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
|
|
|
@ -1,31 +1,31 @@
|
|||
<template>
|
||||
<el-dialog v-model="visible" :title="!dataForm.id ? '新增' : '修改'" :close-on-click-modal="false">
|
||||
<el-form ref="dataFormRef" :model="dataForm" :rules="dataRules" label-width="100px" @keyup.enter="submitHandle()">
|
||||
<el-form-item label="作者" prop="bookName">
|
||||
<el-form-item label="书名" prop="bookName">
|
||||
<el-input v-model="dataForm.bookName" placeholder=""></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="价格" prop="author">
|
||||
<el-form-item label="作者" prop="author">
|
||||
<el-input v-model="dataForm.author" placeholder=""></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="封面" prop="price">
|
||||
<el-form-item label="价格" prop="price">
|
||||
<el-input v-model="dataForm.price" placeholder=""></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="图书介绍" prop="bookCover">
|
||||
<el-form-item label="封面" prop="bookCover">
|
||||
<el-input v-model="dataForm.bookCover" placeholder=""></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="图书详情" prop="introduction">
|
||||
<el-form-item label="书籍介绍" prop="introduction">
|
||||
<el-input v-model="dataForm.introduction" placeholder=""></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="图书库存" prop="description">
|
||||
<el-form-item label="书籍详情" prop="description">
|
||||
<el-input v-model="dataForm.description" placeholder=""></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="store">
|
||||
<el-form-item label="库存" prop="store">
|
||||
<el-input v-model="dataForm.store" placeholder=""></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="修改时间" prop="createTime">
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-input v-model="dataForm.createTime" placeholder=""></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="" prop="updateTime">
|
||||
<el-form-item label="修改时间" prop="updateTime">
|
||||
<el-input v-model="dataForm.updateTime" placeholder=""></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
@ -79,6 +79,9 @@ const getT_book = (id: number) => {
|
|||
}
|
||||
|
||||
const dataRules = ref({
|
||||
bookName: [{ required: true, message: '必填项不能为空', trigger: 'blur' }],
|
||||
price: [{ required: true, message: '必填项不能为空', trigger: 'blur' }],
|
||||
store: [{ required: true, message: '必填项不能为空', trigger: 'blur' }],
|
||||
})
|
||||
|
||||
// 表单提交
|
||||
|
|
|
@ -1,7 +1,13 @@
|
|||
<template>
|
||||
<el-card class="layout-query">
|
||||
<el-form ref="queryRef" :inline="true" :model="state.queryForm" @keyup.enter="getDataList()">
|
||||
<el-form-item>
|
||||
<el-form-item prop="bookName">
|
||||
<el-input v-model="state.queryForm.bookName" placeholder="书名"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="author">
|
||||
<el-input v-model="state.queryForm.author" placeholder="作者"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button icon="Search" type="primary" @click="getDataList()">查询</el-button>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
|
@ -21,16 +27,15 @@
|
|||
</el-space>
|
||||
<el-table v-loading="state.dataListLoading" :data="state.dataList" border class="layout-table" @selection-change="selectionChangeHandle">
|
||||
<el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
|
||||
<el-table-column prop="id" label="编号" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="bookName" label="书籍名称" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="bookName" label="书名" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="author" label="作者" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="price" label="价格" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="bookCover" label="图书封面" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="introduction" label="图书介绍" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="description" label="图书详情" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="store" label="图书库存" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="bookCover" label="封面" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="introduction" label="书籍介绍" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="description" label="书籍详情" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="store" label="库存" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="createTime" label="创建时间" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="updateTime" label=" 修改时间" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="updateTime" label="修改时间" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column label="操作" fixed="right" header-align="center" align="center" width="150">
|
||||
<template #default="scope">
|
||||
<el-button v-auth="'maku:t_book:update'" type="primary" link @click="addOrUpdateHandle(scope.row.id)">修改</el-button>
|
||||
|
@ -64,6 +69,8 @@
|
|||
dataListUrl: '/maku/t_book/page',
|
||||
deleteUrl: '/maku/t_book',
|
||||
queryForm: {
|
||||
bookName: '',
|
||||
author: '',
|
||||
}
|
||||
})
|
||||
|
||||
|
|
|
@ -1,7 +1,13 @@
|
|||
<template>
|
||||
<el-card class="layout-query">
|
||||
<el-form ref="queryRef" :inline="true" :model="state.queryForm" @keyup.enter="getDataList()">
|
||||
<el-form-item>
|
||||
<el-form-item prop="userId">
|
||||
<el-input v-model="state.queryForm.userId" placeholder="用户id"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="bookId">
|
||||
<el-input v-model="state.queryForm.bookId" placeholder="书本id"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button icon="Search" type="primary" @click="getDataList()">查询</el-button>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
|
@ -21,11 +27,10 @@
|
|||
</el-space>
|
||||
<el-table v-loading="state.dataListLoading" :data="state.dataList" border class="layout-table" @selection-change="selectionChangeHandle">
|
||||
<el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
|
||||
<el-table-column prop="id" label="编号" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="userId" label="用户编号" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="bookId" label="书籍编号" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="createTime" label=" 创建时间" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="updateTime" label=" 修改时间" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="bookId" label="书本编号" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="createTime" label="创建时间" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="updateTime" label="修改时间" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column label="操作" fixed="right" header-align="center" align="center" width="150">
|
||||
<template #default="scope">
|
||||
<el-button v-auth="'maku:t_book_collection:update'" type="primary" link @click="addOrUpdateHandle(scope.row.id)">修改</el-button>
|
||||
|
@ -59,6 +64,8 @@
|
|||
dataListUrl: '/maku/t_book_collection/page',
|
||||
deleteUrl: '/maku/t_book_collection',
|
||||
queryForm: {
|
||||
userId: '',
|
||||
bookId: ''
|
||||
}
|
||||
})
|
||||
|
||||
|
|
|
@ -1,7 +1,13 @@
|
|||
<template>
|
||||
<el-card class="layout-query">
|
||||
<el-form ref="queryRef" :inline="true" :model="state.queryForm" @keyup.enter="getDataList()">
|
||||
<el-form-item>
|
||||
<el-form-item prop="userId">
|
||||
<el-input v-model="state.queryForm.userId" placeholder="用户id"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="bookId">
|
||||
<el-input v-model="state.queryForm.bookId" placeholder="书本id"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button icon="Search" type="primary" @click="getDataList()">查询</el-button>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
|
@ -21,11 +27,9 @@
|
|||
</el-space>
|
||||
<el-table v-loading="state.dataListLoading" :data="state.dataList" border class="layout-table" @selection-change="selectionChangeHandle">
|
||||
<el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
|
||||
<el-table-column prop="id" label="编号" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="userId" label="用户编号" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="bookId" label="书籍编号" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="comment" label="评论内容" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="parentId" label="父级编号" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="bookId" label="书本编号" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="comment" label="评价" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="createTime" label="创建时间" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="updateTime" label="修改时间" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column label="操作" fixed="right" header-align="center" align="center" width="150">
|
||||
|
@ -61,6 +65,8 @@
|
|||
dataListUrl: '/maku/t_book_comment/page',
|
||||
deleteUrl: '/maku/t_book_comment',
|
||||
queryForm: {
|
||||
userId: '',
|
||||
bookId: ''
|
||||
}
|
||||
})
|
||||
|
||||
|
|
|
@ -1,7 +1,13 @@
|
|||
<template>
|
||||
<el-card class="layout-query">
|
||||
<el-form ref="queryRef" :inline="true" :model="state.queryForm" @keyup.enter="getDataList()">
|
||||
<el-form-item>
|
||||
<el-form-item prop="purchaseId">
|
||||
<el-input v-model="state.queryForm.purchaseId" placeholder="订单编号"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="bookId">
|
||||
<el-input v-model="state.queryForm.bookId" placeholder="书本编号"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button icon="Search" type="primary" @click="getDataList()">查询</el-button>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
|
@ -21,10 +27,9 @@
|
|||
</el-space>
|
||||
<el-table v-loading="state.dataListLoading" :data="state.dataList" border class="layout-table" @selection-change="selectionChangeHandle">
|
||||
<el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
|
||||
<el-table-column prop="id" label="编号" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="purchaseId" label="订单编号" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="bookId" label="书籍编号" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="price" label="书本价格" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="bookId" label="书本编号" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="price" label="价格" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column label="操作" fixed="right" header-align="center" align="center" width="150">
|
||||
<template #default="scope">
|
||||
<el-button v-auth="'maku:t_purchase_details:update'" type="primary" link @click="addOrUpdateHandle(scope.row.id)">修改</el-button>
|
||||
|
@ -58,6 +63,8 @@
|
|||
dataListUrl: '/maku/t_purchase_details/page',
|
||||
deleteUrl: '/maku/t_purchase_details',
|
||||
queryForm: {
|
||||
purchaseId: '',
|
||||
bookId: ''
|
||||
}
|
||||
})
|
||||
|
||||
|
|
|
@ -9,7 +9,6 @@
|
|||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
|
||||
<el-card>
|
||||
<el-space>
|
||||
<el-space>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<el-dialog v-model="visible" :title="!dataForm.id ? '新增' : '修改'" :close-on-click-modal="false">
|
||||
<el-form ref="dataFormRef" :model="dataForm" :rules="dataRules" label-width="100px" @keyup.enter="submitHandle()">
|
||||
<el-form-item label="用户名" prop="username">
|
||||
<el-form-item label="用户名" prop="username">
|
||||
<el-input v-model="dataForm.username" placeholder=""></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="密码" prop="password">
|
||||
|
@ -10,10 +10,10 @@
|
|||
<el-form-item label="头像" prop="avatar">
|
||||
<el-input v-model="dataForm.avatar" placeholder=""></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="书本币余额" prop="balance">
|
||||
<el-form-item label="书本币" prop="balance">
|
||||
<el-input v-model="dataForm.balance" placeholder=""></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="用户状态" prop="status">
|
||||
<el-form-item label="禁用状态" prop="status">
|
||||
<el-input v-model="dataForm.status" placeholder=""></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
|
@ -71,6 +71,10 @@ const getT_user = (id: number) => {
|
|||
}
|
||||
|
||||
const dataRules = ref({
|
||||
username: [{ required: true, message: '必填项不能为空', trigger: 'blur' }],
|
||||
password: [{ required: true, message: '必填项不能为空', trigger: 'blur' }],
|
||||
balance: [{ required: true, message: '必填项不能为空', trigger: 'blur' }],
|
||||
status: [{ required: true, message: '必填项不能为空', trigger: 'blur' }],
|
||||
})
|
||||
|
||||
// 表单提交
|
||||
|
|
|
@ -1,7 +1,13 @@
|
|||
<template>
|
||||
<el-card class="layout-query">
|
||||
<el-form ref="queryRef" :inline="true" :model="state.queryForm" @keyup.enter="getDataList()">
|
||||
<el-form-item>
|
||||
<el-form-item prop="username">
|
||||
<el-input v-model="state.queryForm.username" placeholder="用户名"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="status">
|
||||
<el-input v-model="state.queryForm.status" placeholder="禁用状态"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button icon="Search" type="primary" @click="getDataList()">查询</el-button>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
|
@ -9,7 +15,6 @@
|
|||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
|
||||
<el-card>
|
||||
<el-space>
|
||||
<el-space>
|
||||
|
@ -21,12 +26,10 @@
|
|||
</el-space>
|
||||
<el-table v-loading="state.dataListLoading" :data="state.dataList" border class="layout-table" @selection-change="selectionChangeHandle">
|
||||
<el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
|
||||
<el-table-column prop="id" label="编号" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="username" label="用户名" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="password" label="密码" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="avatar" label="头像" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="balance" label="书本币余额" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="status" label="用户状态" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="balance" label="书本币" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="status" label="禁用状态" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="createTime" label="创建时间" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="updateTime" label="修改时间" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column label="操作" fixed="right" header-align="center" align="center" width="150">
|
||||
|
@ -52,7 +55,7 @@
|
|||
</el-card>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="MakuT_userIndex">
|
||||
<script setup lang="ts">
|
||||
import {useCrud} from '@/hooks'
|
||||
import {reactive, ref} from 'vue'
|
||||
import {IHooksOptions} from '@/hooks/interface'
|
||||
|
@ -62,6 +65,8 @@
|
|||
dataListUrl: '/maku/t_user/page',
|
||||
deleteUrl: '/maku/t_user',
|
||||
queryForm: {
|
||||
username: '',
|
||||
status: ''
|
||||
}
|
||||
})
|
||||
|
||||
|
@ -72,4 +77,4 @@ const addOrUpdateHandle = (id?: number) => {
|
|||
}
|
||||
|
||||
const { getDataList, selectionChangeHandle, sizeChangeHandle, currentChangeHandle, deleteBatchHandle, reset } = useCrud(state)
|
||||
</script>
|
||||
</script>
|
Loading…
Reference in New Issue
Block a user