# 页面开发指南

## 路由配置
1. 路由参数
   ```typescript
   // 路由定义
   {
     path: '/admin/device',
     name: 'admin/device',
     component: () => import('/@/views/admin/device/index.vue'),
     meta: {
       title: '设备管理',
       icon: 'ele-Setting',
       roles: ['admin']
     }
   }
   ```

2. 权限控制
   ```typescript
   // 按钮权限
   v-auth="'api:admin:device:add'"  // 新增权限
   v-auth="'api:admin:device:update'"  // 修改权限
   v-auth="'api:admin:device:soft-delete'"  // 删除权限
   ```

## 数据结构
1. 列表查询参数
   ```typescript
   interface PageInput {
     currentPage: number
     pageSize: number
     filter: {
       keyWord?: string
       startTime?: string
       endTime?: string
     }
   }
   ```

2. 表单数据结构
   ```typescript
   interface FormData {
     id?: number
     deviceNo: string
     assetNo?: string
     ip: string
     port: string
     serviceName?: string
     status: boolean
   }
   ```

3. API 接口
   ```typescript
   // 列表接口
   GET /api/admin/device/get-page
   
   // 详情接口
   GET /api/admin/device/get
   
   // 新增接口
   POST /api/admin/device/add
   
   // 修改接口
   PUT /api/admin/device/update
   
   // 删除接口
   DELETE /api/admin/device/soft-delete
   ```

## 页面结构
1. 列表页面
   - 搜索区域：关键词搜索
   - 操作按钮：新增、查询
   - 表格区域：基础字段展示
   - 分页区域：标准分页组件

2. 编辑页面
   - 基本信息模块
   - 网络配置模块
   - 设备配置模块

## 样式规范
1. 对话框配置
   ```html
   <el-dialog
     v-model="state.showDialog"
     destroy-on-close
     :title="title"
     draggable
     :close-on-click-modal="false"
     :close-on-press-escape="false"
     width="900px"
   >
   ```

2. 表单布局
   ```html
   <el-form :model="form" ref="formRef" size="default" label-width="120px">
     <div class="form-section">
       <div class="section-title">模块标题</div>
       <el-row :gutter="25">
         <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
           <el-form-item label="字段名称" prop="fieldName">
             <el-input v-model="form.fieldName" clearable placeholder="请输入" />
           </el-form-item>
         </el-col>
       </el-row>
     </div>
   </el-form>
   ```

3. 样式定义
   ```scss
   .form-section {
     margin-bottom: 24px;
     &:last-child { margin-bottom: 0; }
   }

   .section-title {
     font-size: 16px;
     font-weight: 600;
     color: #303133;
     margin-bottom: 16px;
     padding-bottom: 8px;
     border-bottom: 2px solid #f0f0f0;
     position: relative;
     &:before {
       content: '';
       position: absolute;
       left: 0;
       bottom: -2px;
       width: 40px;
       height: 2px;
       background: #409eff;
     }
   }
   ```

## 开发规范
1. 组件命名
   - 目录：小写字母，用横线分隔
   - 组件：PascalCase
   - 组合函数：camelCase

2. 代码组织
   ```typescript
   // 1. 导入声明
   import { reactive, ref } from 'vue'
   
   // 2. 类型定义
   interface State {
     showDialog: boolean
     form: FormData
   }
   
   // 3. 组件定义
   const props = defineProps({
     title: String
   })
   
   // 4. 状态定义
   const state = reactive<State>({
     showDialog: false,
     form: {}
   })
   
   // 5. 方法定义
   const handleSubmit = async () => {
     // 处理逻辑
   }
   ```

3. 表单验证
   ```typescript
   const rules = {
     fieldName: [
       { required: true, message: '请输入', trigger: ['blur', 'change'] }
     ]
   }
   ```

4. API 调用
   ```typescript
   const handleSave = async () => {
     try {
       const res = await api.save(state.form)
       if (res.success) {
         ElMessage.success('保存成功')
         emit('refresh')
         state.showDialog = false
       }
     } catch (error) {
       console.error(error)
     }
   }
   ```

## 注意事项
1. 保持与 uspscale 页面风格一致
2. 使用响应式布局适配不同屏幕
3. 统一表单验证规则和错误提示
4. 优化用户交互体验
5. 保持代码风格统一
6. 注意性能优化
7. 遵循 TypeScript 类型规范 