管理系统开发文档
项目概述
本项目是一个基于 Vue.js 的管理系统示例,主要用于演示各种管理功能的实现方式。系统采用组件化开发方式,使用 Element UI 作为 UI 框架。
技术栈
- Vue.js
- Element UI
- Vuex
- Vue Router
- Axios
项目结构
scrm-admin/
├── src/
│ ├── projects/
│ │ └── scrm/
│ │ └── views/
│ │ └── diandi_business_opportunity/
│ │ ├── components/
│ │ │ ├── form/
│ │ │ └── list/
│ │ └── diandicustomerAll/
开发规范
1. 组件命名规范
- 使用 PascalCase 命名组件
- 组件文件名与组件名保持一致
2. 代码风格
- 使用 ESLint 进行代码规范检查
- 遵循 Vue.js 官方风格指南
3. 注释规范
- 组件顶部添加功能说明注释
- 复杂逻辑添加必要注释
- API 接口添加参数说明注释
核心组件说明
1. 表单组件
Business.vue
- 商机选择组件
- 支持单选
- 支持搜索和筛选
SelectCustom.vue
- 客户选择组件
- 支持客户信息关联
- 支持清空和保存操作
Salesman.vue
- 业务员选择组件
- 支持员工信息关联
2. 列表组件
Contact.vue
- 联系人列表管理
- 支持增删改查
- 支持批量操作
Device.vue
- 设备列表管理
- 支持设备信息维护
- 支持设备状态管理
Quotation.vue
- 报价管理
- 支持报价信息维护
- 支持报价状态管理
3. 交互组件
4. 抽屉组件
4.1 抽屉组件定义
抽屉组件用于显示详细信息,通常包含以下功能:
- 可拖拽
- 可调整大小
- 可关闭
<template>
<el-drawer
title="详情"
:visible.sync="drawerVisible"
direction="rtl"
size="50%"
>
<div class="drawer-content">
<!-- 抽屉内容 -->
</div>
</el-drawer>
</template>
<script>
export default {
data() {
return {
drawerVisible: false
}
},
methods: {
openDrawer() {
this.drawerVisible = true
},
closeDrawer() {
this.drawerVisible = false
}
}
}
</script>
5. 弹窗组件
5.1 弹窗组件定义
弹窗组件用于显示表单或确认信息,通常包含以下功能:
- 可关闭
- 可调整大小
- 可拖拽
<template>
<el-dialog
title="弹窗标题"
:visible.sync="dialogVisible"
width="50%"
:before-close="handleClose"
>
<div class="dialog-content">
<!-- 弹窗内容 -->
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="handleConfirm">确 定</el-button>
</span>
</el-dialog>
</template>
<script>
export default {
data() {
return {
dialogVisible: false
}
},
methods: {
openDialog() {
this.dialogVisible = true
},
handleClose() {
this.dialogVisible = false
},
handleConfirm() {
// 确认操作
this.dialogVisible = false
}
}
}
</script>
6. 用户选择组件
6.1 用户选择组件定义
用户选择组件用于选择用户,通常包含以下功能:
- 多选
- 搜索
- 分页
<template>
<div>
<el-input v-model="formData.username" placeholder="选择用户" readonly>
<template slot="append">
<el-button @click="dialogVisible = true">选择</el-button>
</template>
</el-input>
<el-dialog
title="选择用户"
:visible.sync="dialogVisible"
width="80%"
>
<el-table
:data="userList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column prop="username" label="用户名"></el-table-column>
</el-table>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="handleConfirm">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
export default {
data() {
return {
dialogVisible: false,
userList: [],
selectedUsers: []
}
},
methods: {
handleSelectionChange(val) {
this.selectedUsers = val
},
handleConfirm() {
this.formData.username = this.selectedUsers.map(user => user.username).join(',')
this.dialogVisible = false
}
}
}
</script>
API 接口
商机相关接口
// 获取商机列表
initList(data)
// 获取商机详情
getView(id)
// 创建商机
itemCreate(data)
// 更新商机
itemUpdate(id, data)
// 删除商机
itemDelete(id)
客户相关接口
// 获取客户列表
Cuslist(data)
// 获取客户商机信息
getCustomerOpportunityWithFollow(data)
// 变更跟进人
followerList(data)
// 取消跟进人
unfollowerList(data)
权限控制
系统使用权限码进行功能控制:
export const auth = {
create: 'diandi-business-opportunity-diandicustomerAll-create',
update: 'diandi-business-opportunity-diandicustomerAll-update',
deletes: 'diandi-business-opportunity-diandicustomerAll-deletes-button',
bglxr: 'diandi-business-opportunity-diandicustomerAll-bggjr-button',
sf: 'diandi-business-opportunity-diandicustomerAll-sf-button',
import: 'diandi-business-opportunity-diandicustomerAll-pldr-button',
export: 'diandi-business-opportunity-diandicustomerAll-delete-btn-button',
scgjr: 'diandi-business-opportunity-diandicustomerAll-unfollower-button'
}
部署说明
环境要求
- Node.js >= 12.0.0
- npm >= 6.0.0
安装依赖
npm install
- 开发环境运行
npm run dev
- 生产环境构建
npm run build
注意事项
数据安全
- 敏感数据加密处理
- 接口权限控制
- 用户操作日志记录
性能优化
- 组件按需加载
- 大数据列表分页处理
- 图片资源压缩
兼容性
- 支持主流浏览器
- 响应式布局适配
