上周在优化报价组的排查工具,主要是写一些前端。总结了一下,作为后端开发,写前端关注两个点就够了: 1. 首先是从数据和交互的角度出发,为各种类型的数据选择合适的组件 2. 其次是从用户体验出发找到合适的样式风格。之前就感觉像饿了么,得物,Instagram 整体风格比较简洁,美团相对就比较乱,在完善工具样式的时候,发现前面这一普遍类都采用了**高饱和度白色背景,小图标,大留白**的风格,所以能给人以整洁干净的感受。 <!-- more --> - [总体风格](#%E6%80%BB%E4%BD%93%E9%A3%8E%E6%A0%BC) - [一个好的搜索框是什么样的?](#%E4%B8%80%E4%B8%AA%E5%A5%BD%E7%9A%84%E6%90%9C%E7%B4%A2%E6%A1%86%E6%98%AF%E4%BB%80%E4%B9%88%E6%A0%B7%E7%9A%84%EF%BC%9F) - [好的详情页是什么样的?](#%E5%A5%BD%E7%9A%84%E8%AF%A6%E6%83%85%E9%A1%B5%E6%98%AF%E4%BB%80%E4%B9%88%E6%A0%B7%E7%9A%84%EF%BC%9F) - [卡片风格](#%E5%8D%A1%E7%89%87%E9%A3%8E%E6%A0%BC) - [重要信息前置](#%E9%87%8D%E8%A6%81%E4%BF%A1%E6%81%AF%E5%89%8D%E7%BD%AE) - [枚举性质数据用高亮表示](#%E6%9E%9A%E4%B8%BE%E6%80%A7%E8%B4%A8%E6%95%B0%E6%8D%AE%E7%94%A8%E9%AB%98%E4%BA%AE%E8%A1%A8%E7%A4%BA) - [时间轴设计](#%E6%97%B6%E9%97%B4%E8%BD%B4%E8%AE%BE%E8%AE%A1) - [重要字段便于复制](#%E9%87%8D%E8%A6%81%E5%AD%97%E6%AE%B5%E4%BE%BF%E4%BA%8E%E5%A4%8D%E5%88%B6) - [图标表意](#%E5%9B%BE%E6%A0%87%E8%A1%A8%E6%84%8F) - [必要信息](#%E5%BF%85%E8%A6%81%E4%BF%A1%E6%81%AF) - [默认展开](#%E9%BB%98%E8%AE%A4%E5%B1%95%E5%BC%80) - [表头凸显](#%E8%A1%A8%E5%A4%B4%E5%87%B8%E6%98%BE) - [表格规整](#%E8%A1%A8%E6%A0%BC%E8%A7%84%E6%95%B4) - [两列 diff 高亮设计](#%E4%B8%A4%E5%88%97%20diff%20%E9%AB%98%E4%BA%AE%E8%AE%BE%E8%AE%A1) - [溯源工具 - 视口](#%E6%BA%AF%E6%BA%90%E5%B7%A5%E5%85%B7%20-%20%E8%A7%86%E5%8F%A3) ## 总体风格 ![image.png|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F07%2F18%2F20-41-15-68faf1a7ec15e6e86680bc2d8432b3fd-20240718204114-c50473.png) ![image.png|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F07%2F18%2F20-40-11-836eae405e4cb42d05ec2e43f64dd99c-20240718204010-ab86f4.png) ![image.png|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F07%2F18%2F20-29-41-7a5cdea97fdc5926f4fe42241d7c9758-20240718202939-98d492.png) ## 一个好的搜索框是什么样的? ![image.png|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F07%2F18%2F20-43-37-7aa750c4886e7a8a4a3697437a684833-20240718204336-76d847.png) ![image.png|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F07%2F18%2F20-43-51-5c383e9625d96348af3f91ce9973ccaf-20240718204351-96793d.png) ![image.png|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F07%2F18%2F22-49-47-2c97155760b34719278f2ecef19bef6e-20240718224946-ecf14e.png) ![image.png|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F07%2F18%2F20-31-24-0be3e213b255199785b167ee1dbbdbe7-20240718203123-6dbb41.png) 1. 搜索前 1. all in on,只有一个框,前端做判断 `const trimmedValue = traceIdOrOrderNo.value.trim()` `trimmedValue.startsWith("ops_slugger_")` ![image.png|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F07%2F25%2F22-20-00-6597385ff758caea268cc7b675c4a955-20240725221959-a6f594.png) 2. 支持回车,在输入框上添加了 `@keyup.enter="debouncedSearch"` 事件处理,允许用户按回车键搜索。 2. 搜索中 [防抖搜索](防抖搜索.md) 功能: 使用 `lodash` 的 `debounce` 函数来创建一个防抖的搜索函数,这可以有效地减少不必要的 API 调用。 1. 转圈 ![image.png|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F07%2F18%2F20-50-07-b1fa58d410b0283a972225878f32fca3-20240718205007-aaa148.png) 3. 搜索后 1. 成功失败提示 ![image.png|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F07%2F18%2F20-50-33-d7ba3cb770080d4bdbb1c57898462122-20240718205032-1979b4.png) ## 好的详情页是什么样的? ### 卡片风格 三板斧:card、圆角、阴影 ![image.png|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F07%2F18%2F21-01-48-7928d67174e928f47725ae7cc167f4aa-20240718210147-c5808b.png) ```js <el-card shadow="always" round class="box-card"> .box-card { border-radius: 10px; box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); padding-top: 1px; margin-top: 30px; margin-bottom: 30px; /* 增加下边距 */ } ``` ![image.png|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F07%2F18%2F20-57-31-46c877dbd4f9b63289c0c66010ab67b7-20240718205730-91247b.png) ### 重要信息前置 ![image.png|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F07%2F18%2F20-55-34-1596ccda367a13aa4cbd98c9fe9517d2-20240718205534-71dc55.png) ![image.png|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F07%2F18%2F20-54-26-ed21462953a2f844ba6bf8b6d1e81c04-20240718205425-7339de.png) #### 枚举性质数据用高亮表示 ![image.png|300](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F07%2F18%2F21-11-26-58a150f03afcf8c747139315ef229e10-20240718211126-a63a24.png) #### 时间轴设计 ![image.png|500](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F07%2F18%2F21-11-41-f4a089ff3005012351271f4460efc432-20240718211140-16a08f.png) #### 重要字段便于复制 #### 图标表意 ![image.png|500](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F07%2F18%2F21-12-02-6912fe52ab2f36fb92bb81948f046358-20240718211202-750a78.png) ### 必要信息 #### 默认展开 ![image.png|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F07%2F18%2F20-55-34-1596ccda367a13aa4cbd98c9fe9517d2-20240718205534-71dc55.png) #### 表头凸显 ![image.png|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F07%2F18%2F20-55-15-8c5c42fb22ef666f36e5e0803594f2bb-20240718205514-6053c3.png) #### 表格规整 ![image.png|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F07%2F18%2F21-08-06-a0176b1472cfeb78420aa954b4608924-20240718210805-c64bcd.png) #### 两列 diff 高亮设计 忽略小数位数的 diff ```js // 比较每个元素,忽略小数位数 return oldArr.some((oldVal, index) => { const oldNum = parseFloat(oldVal); const newNum = parseFloat(newArr[index]); // 如果解析失败(非数字),直接比较字符串 if (isNaN(oldNum) || isNaN(newNum)) { return oldVal !== newArr[index]; } // 比较整数部分 return Math.floor(oldNum) !== Math.floor(newNum); }); ``` ## 溯源工具 - 视口 ![image.png|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F07%2F19%2F15-02-47-ff7821ba74995e70a0cd5e18c6b404be-20240719150245-90ac8d.png) - 定义: - 不同于 px 固定高度,% 表示相对父元素的比例,视口是浏览器中实际显示网页内容的部分。不包括浏览器的工具栏、滚动条等界面元素。使用 vw 单位:1vw 等于视口宽度的 1%。 - 100vw 表示整个视口的宽度。 - 响应式设计中的作用: - 允许设计根据不同设备的视口大小自动调整布局。 - 帮助创建在各种屏幕尺寸上都能良好显示的网页。 ```css .iframe-container { height: 90vh; width: 87vw; overflow: hidden; } .iframe-main { padding: 0; height: 100%; } .full-iframe { width: 100%; height: 100%; border: none; display: block; } ```