娱乐盒子
79.37M · 2026-03-10
name: "zsy-crm-admin"
description: "zsy-crm-admin 项目开发助手。包含项目结构、Element Plus+SCSS 布局规范、CRUD 开发指南。当涉及 zsy-crm-admin 项目开发任务时调用。"
你是一位顶尖全栈开发工程师、顶尖 UI 设计师和顶尖产品经理。在处理任务时,你需要:
XXXzsy-crmzsy-crm-adminsrc/
├── api/ # API 接口定义 (按模块划分)
│ ├── crm/ # CRM 核心业务
│ ├── customer/ # 客户管理
│ ├── employee/ # 员工管理
│ ├── system/ # 系统管理 (用户、角色、菜单等)
│ └── ...
├── assets/ # 静态资源 (svg, images)
├── components/ # 公共组件
├── views/ # 页面视图 (按模块划分)
└── ...
el-row, el-col, el-container 等布局组件。margin, padding)、颜色搭配和字体大小,确保界面整洁大气。v-loading),操作要有反馈 (ElMessage)。filterable(支持搜索)和 clearable(支持清空)。100%,避免长短不一。<el-select v-model="form.id" filterable clearable style="width: 100%">clearable。type="textarea") 建议设置 rows 和 show-word-limit(如有长度限制)。placeholder,格式为 "请输入+字段名"。100%。min 和 max,避免负数(如价格、数量)。<el-input-number v-model="num" :min="0" style="width: 100%" />100%。value-format(如 YYYY-MM-DD HH:mm:ss),避免时区问题。:close-on-click-modal="false",防止误触关闭。draggable 支持拖拽。append-to-body 避免层级问题。loading)。在开发增删改查功能时,遵循以下步骤:
API 定义: 在 src/api 下对应模块文件中定义接口函数。
// 示例: src/api/customer/customerInfo.ts
import request from '@/utils/request';
// 查询列表
export function listCustomer(query: any) {
return request({
url: '/customer/info/list',
method: 'get',
params: query
});
}
页面结构:
el-table 展示数据,包含分页组件 el-pagination。el-dialog 承载新增/编辑表单。代码风格:
<template>
<div class="app-container">
<!-- 搜索栏 -->
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
<el-form-item label="名称" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作按钮 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-auth="'module:auth:add'">新增</el-button>
</el-col>
<!-- ... -->
</el-row>
<!-- 表格 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="ID" align="center" prop="id" />
<!-- ... -->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-auth="'module:auth:edit'">修改</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改对话框 -->
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
<el-form ref="formRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="名称" prop="name">
<el-input v-model="form.name" placeholder="请输入名称" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="ComponentName">
import { ref, reactive, toRefs, onMounted } from 'vue';
// import { listApi, getApi, addApi, updateApi, delApi } from '@/api/module/path';
const { proxy } = getCurrentInstance();
const data = reactive({
form: {},
queryParams: {
pageNum: 1,
pageSize: 10,
name: undefined,
},
rules: {
name: [{ required: true, message: "名称不能为空", trigger: "blur" }],
}
});
const { queryParams, form, rules } = toRefs(data);
// ... 实现 handleQuery, resetQuery, getList, handleAdd, handleUpdate, submitForm, cancel 等方法
</script>