# 车间派工移动端自适应设计方案 ## 1. 需求目标 需求:车间需求一个车间派工组件的移动端功能,车间内及时操作 本次方案包含两部分: 1. 将现有车间派工组件复制并改造为移动端自适应页面。 2. 移动端用户登录系统后,首页只显示该自适应派工页面,不显示桌面端首页、侧边栏、顶部导航和标签栏。 总体原则: - 不影响现有 PC 端车间派工页面。 - 不修改后端接口和参数格式。 - 移动端只改交互和布局,业务逻辑尽量复用现有页面。 - 保持 Vue 2 + Element UI + Options API 写法。 ## 2. 当前代码基础 现有车间派工页面: ```text src/views/SeikoWorkshop/WorkshopAssignment/index.vue ``` 现有登录后首页: ```text src/views/dashboard/index.vue ``` 现有主布局: ```text src/views/layout/Layout.vue src/views/layout/components/AppMain.vue ``` 现有动态路由生成: ```text src/router/getRouter.js src/permission.js ``` 现有设备判断逻辑: ```text src/views/layout/mixin/ResizeHandler.js src/store/modules/app.js ``` 项目中已有类似移动端/滑动版页面命名示例: ```text src/views/AssemblyManagement/AssemblyExecutionSliding/index.vue src/views/AssemblyManagement/ReceiveAssemblyTaskSliding/index.vue src/views/AssemblyManagement/ReplenishmentOrdersSliding/index.vue ``` 因此本次建议采用“新增独立移动端页面”的方式,而不是直接改造现有 PC 页面。 ## 3. 总体设计 新增移动端页面: ```text src/views/SeikoWorkshop/WorkshopAssignmentMobile/index.vue ``` 新增移动端空布局: ```text src/views/layout/MobileLayout.vue ``` 新增设备判断工具: ```text src/utils/device.js ``` 修改路由配置: ```text src/router/index.js ``` 修改登录后跳转逻辑: ```text src/permission.js ``` 移动端访问路径建议为: ```text /mobile/workshop-assignment ``` PC 端继续使用现有动态菜单路径: ```text /SeikoWorkshop/WorkshopAssignment ``` ## 4. 移动端页面结构设计 现有 PC 页面是左右两栏布局: - 左侧:订单/零件待派工列表。 - 右侧:选中零件后的工序派工列表。 移动端不适合继续使用左右两栏和大表格,建议改为纵向流程。 ### 4.1 顶部筛选区 移动端顶部展示查询条件: - 订单号 - 产品/零件名称 - 名称或图号 - 查询按钮 - 查看图纸按钮 - 加急/取消加急按钮 - 手动报废结单按钮,按原权限控制 布局方式: - 筛选项纵向排列。 - 输入框、下拉框宽度 `100%`。 - 操作按钮使用两列或满宽布局。 - 顶部筛选区可固定,也可随页面滚动。第一版建议随页面滚动,避免遮挡内容。 ### 4.2 待派工零件列表 将 PC 端左侧 `el-table` 改为卡片列表。 每张卡片展示核心字段: - 订单号 - 产品名称 - 零件图号 - 零件名称 - 数量 - 毛坯库存 - 下达日期 - 完工期限 - 订单备注 - 技术备注 交互: - 点击卡片后调用现有行点击逻辑,加载该零件的工序列表。 - 当前选中卡片需要有明显选中态。 - 列表底部保留分页,移动端分页建议简化为“上一页 / 下一页 / 当前页”。 ### 4.3 工序派工列表 将 PC 端右侧工序表格改为工序卡片列表。 每张工序卡片展示: - 工序顺序 - 工序名称 - 投产数 - 完成数 - 操作者 - 报废数量 - 加工设备 - 派工状态 卡片操作按钮: - 编辑 - 派工 - 取消派工 按钮禁用条件沿用现有 PC 页面判断逻辑。 ### 4.4 派工编辑区 移动端保留人员和设备选择: - 操作者 - 设备 - 派工数量 - 计划完成日期 建议使用 `el-dialog` 或底部弹层形式。 Element UI 项目中现有弹窗较多,第一版建议继续使用 `el-dialog`,移动端适配如下: ```vue ``` 表单布局: - `el-form-item` 纵向排列。 - `el-select`、`el-input`、`el-date-picker`、`el-input-number` 宽度统一 `100%`。 - 底部按钮固定为“取消 / 确定”。 ### 4.5 文件和图纸查看 现有页面中图纸、文件查看逻辑继续保留。 移动端展示方式: - 文件使用纵向列表。 - 每个文件展示图标、文件名。 - 点击后沿用现有下载/预览地址。 - 弹窗宽度 `94%`。 ## 5. 业务接口复用 移动端页面不新增后端接口,复用现有车间派工页面中的请求。 主要请求包括: ```text 精工车间_车间派工_查询 车间生产管理工艺_零件工序_已派工查询 车间生产管理工艺_零件工序_派工_工序查询 车间生产管理工艺_零件工序_派工 车间生产管理工艺_零件工序_取消派工 车间生产管理工艺_零件工序_派工_修改数量 车间生产管理工艺_零件工序_派工_设置计划完成日期 人事档案管理_人员_部门与人员_派工_查询数据_根据部门编号 车间派工_手动报废结单_查询信息 车间派工_手动报废结单 ``` 请求规范继续遵守项目约定: - 统一 POST 到 `MESCommonBase.ashx`。 - `url` 字段留空。 - 使用 `CreateData` 构建请求。 - 使用 `ExecDatabase` 或现有全局工具方法发送请求。 - 参数继续使用 `key=value&key2=value2` 字符串。 - 字段名继续使用后端返回的中文字段。 ## 6. 路由设计 ### 6.1 新增移动端空布局 新增文件: ```text src/views/layout/MobileLayout.vue ``` 职责: - 不显示侧边栏。 - 不显示顶部导航。 - 不显示标签栏。 - 只渲染当前移动端页面。 结构示例: ```vue ``` ### 6.2 新增静态隐藏路由 修改: ```text src/router/index.js ``` 新增: ```js import MobileLayout from '../views/layout/MobileLayout' ``` 在 `constantRouterMap` 中增加: ```js { path: '/mobile', component: MobileLayout, hidden: true, children: [{ path: 'workshop-assignment', component: () => import('@/views/SeikoWorkshop/WorkshopAssignmentMobile/index'), meta: { title: '车间派工' } }] } ``` 最终移动端首页路径: ```text /mobile/workshop-assignment ``` ## 7. 移动端登录后首页跳转设计 新增工具: ```text src/utils/device.js ``` 内容: ```js export function isMobileDevice() { if (!document || !document.body) { return false } return document.body.getBoundingClientRect().width < 1024 } ``` 修改: ```text src/permission.js ``` 在已登录逻辑中增加判断: - 用户已登录。 - 当前目标路径是 `/` 或 `/dashboard`。 - 当前设备为移动端。 - 自动跳转 `/mobile/workshop-assignment`。 设计示例: ```js import { isMobileDevice } from '@/utils/device' // beforeEach 内部,已登录分支中 if ((to.path === '/' || to.path === '/dashboard') && isMobileDevice()) { next({ path: '/mobile/workshop-assignment', replace: true }) NProgress.done() return } ``` 这样移动端登录后不会进入桌面首页,而是直接进入移动端派工页。 ## 8. 样式设计 移动端页面样式建议: - 根节点使用 `.mobile-assignment-page`。 - 页面最小高度 `100vh`。 - 主背景使用浅灰色。 - 卡片使用白底、细边框、轻阴影。 - 卡片圆角控制在 `6px` 或 `8px`。 - 字号保持可读,不使用随视口缩放的字体。 - 所有按钮、输入框高度适合触摸操作。 - 避免横向滚动。 建议结构: ```scss .mobile-assignment-page { min-height: 100vh; padding: 10px; background: #f5f7fa; } .mobile-filter { background: #fff; border-radius: 6px; padding: 10px; margin-bottom: 10px; } .assignment-card { background: #fff; border: 1px solid #ebeef5; border-radius: 6px; padding: 10px; margin-bottom: 10px; } .assignment-card.is-active { border-color: #409EFF; } .card-title { font-size: 15px; font-weight: bold; color: #303133; } .card-row { display: flex; justify-content: space-between; line-height: 24px; font-size: 13px; } .card-label { color: #909399; } .card-value { color: #303133; text-align: right; } ``` ## 9. 实施步骤 1. 新建 `src/views/SeikoWorkshop/WorkshopAssignmentMobile/index.vue`。 2. 从 `WorkshopAssignment/index.vue` 复制业务数据、方法和接口调用。 3. 将模板改为移动端筛选区、零件卡片列表、工序卡片列表。 4. 将弹窗宽度、表单布局和按钮布局改为移动端适配。 5. 新建 `src/views/layout/MobileLayout.vue`。 6. 新建 `src/utils/device.js`。 7. 修改 `src/router/index.js`,增加 `/mobile/workshop-assignment` 静态隐藏路由。 8. 修改 `src/permission.js`,移动端登录后访问 `/` 或 `/dashboard` 时跳转移动端派工页。 9. 本地运行项目,分别验证 PC 和移动端宽度。 ## 10. 验收标准 PC 端: - 原车间派工页面正常访问。 - 原首页正常显示。 - 原动态菜单不受影响。 移动端: - 登录后自动进入 `/mobile/workshop-assignment`。 - 页面不显示侧边栏、顶部导航、标签栏。 - 页面只显示移动端车间派工自适应页面。 - 查询条件可正常使用。 - 零件列表可正常加载和分页。 - 点击零件后可加载工序列表。 - 派工、取消派工、编辑数量、设置计划完成日期功能正常。 - 查看图纸和文件功能正常。 - 权限按钮显示逻辑与 PC 端一致。 - 页面无明显横向滚动、文字重叠、按钮遮挡。 ## 11. 风险与控制 ### 11.1 现有页面体量较大 风险: - 直接抽公共逻辑可能引入 PC 页面回归问题。 控制: - 第一版复制现有页面业务逻辑,只重写移动端模板。 - 待移动端稳定后,再考虑抽公共 mixin。 ### 11.2 移动端首页跳转时机 风险: - `Layout` 中的设备判断发生较晚,登录跳转时可能还未写入 Vuex。 控制: - 在 `permission.js` 中直接使用 DOM 宽度判断,不依赖 Vuex 中的 `device`。 ### 11.3 动态菜单权限 风险: - 移动端隐藏路由如果依赖后端菜单,可能因为菜单未配置导致无法访问。 控制: - 将移动端派工路由注册为静态隐藏路由。 - 登录后仍经过 token 校验,但不依赖菜单显示。 ### 11.4 手机端表格不可用 风险: - 继续使用大表格会产生横向滚动,操作困难。 控制: - 移动端核心列表统一改为卡片式展示。 - 表格只在确实需要多列批量选择时使用,并控制宽度。 ## 12. 推荐结论 建议第一版采用“独立移动端页面 + 移动端空布局 + 登录后设备重定向”的实现方式。 该方案改动边界清晰: - PC 端页面不动。 - 后端接口不动。 - 权限体系基本不动。 - 移动端首页可直接进入派工工作流。 后续如果移动端使用稳定,再将 PC 和移动端共用的派工请求、字段处理、校验逻辑抽成公共 mixin,减少长期维护成本。