当前位置:网站首页>硬件中台项目
硬件中台项目
2022-07-01 09:37:00 【七彩冰淇淋与藕汤】
一个ToC的项目,主要用到element UI组件库来实现基本的数据展示功能、根据用户操作进行相应处理。
一、退货单查询界面
不同Tab中的操作不同
待处理Tab展示换货处理选项,根据业务类型(退货,退A换A,退A换B)进行相关路由的展示。
将业务类型当作params参数,用push进行路由跳转。进入到页面后,获取此参数,通过v-if展示不同的内容。
二、换货详情页面
退货暂不处理
退A换A展示如下。
展示换货详情,价格不变。
点击确定展示确认框,确定换货。
退A换B展示如下。
点击添加物料,展示可选商品 。
确认添加后展示已选商品列表,并可为之选择sku属性。输入商品的数量和名称后进行校验,正确则实时显示换货金额和差价金额。点击确定后校验所选物料的属性是否填写完整,完整则弹出确认框。
(innovation point )给出的设计稿如下:
商品(物料)如何展示与选择 、物料sku属性在什么时机选择等并未说明。最后梳理逻辑结果为:
- 点击添加物料,展示商品列表弹框。列表展示商品名称与价格(由于后台未给出商品图,所以不做展示);右侧确认添加按钮将此商品添加至已选商品列表
- 确定添加后关闭弹窗,由用户进行sku属性、数量、价格的填写。(曾对重复商品编写过添加失败的逻辑,但是可能选择同一商品的不同sku属性,所以最后去掉了此校验。)
- 没有在商品选择时就固定sku码是考虑用户可动态修改。且添加了“取消选择”按钮,可动态删除商品。
- 用户正确填写了商品数量和提货价格后,下方“金额计算结果”实时显示,所以去掉了“确定并计算差价按钮”。
待优化:
- 用户可在商品选择框中多选,避免过多的点击操作。
- sku属性的选择可设置默认第一个,用户可减少一步操作。
三、差价单管理页面
用户点击确认创建差价单后,跳到差价单管理界面,进行相关数据展示
待优化:
差价单管理界面能够查看订单详情。从订单详情返回此页面后,可以做定位到从前位置的操作。用<keep-live> + $route.mate.keepLive元属性。
四、订单详情页
五、差价单发货管理
六、激活码管理相关页面(内容、重难点差不多,在此只展示一个)
文件的下载:模拟一个a标签,自动点击
/**
* 下载blob格式的文件
* blob 为文件, name 为文件名
*/
function downloadBlob(data, name) {
const link = document.createElement('a');
const body = document.querySelector('body');
const blob = new Blob([data], {
type: 'application/vnd.ms-excel',
});
link.href = window.URL.createObjectURL(blob);
link.download = name;
// fix Firefox
link.style.display = 'none';
body.appendChild(link);
link.click();
body.removeChild(link);
window.URL.revokeObjectURL(link.href);
}
重点在于上传文件部分。使用post && Content-Type:multipart/form-data.
需要将文件存入FormData实例,再用axios传输给后端。
后端在对文件进行验证后分为三种情况:
- 表头非要求格式,直接报错。
- 文件格式符合要求,但内容错误(不存在的SN码),返回加了提示的文件流,前端用{response-type:blob}接收文件流,然后模拟一个下载流程,将文件下载。与上面给出文件url下载文件的流程不同,此处接收的是文件流,所以需要将文件流通过URL.createObjectURL(blob)转换为url。(应该直接用上面方法的,当初没看到)
- 内容正确,提示成功
const formData = new FormData();
formData.append('file', this.snForm.file);
formData.append('isClearUuid', parseInt(this.snForm.isClearUuid));
formData.append('product', this.snForm.product);
formData.append('channelNum', this.snForm.channelNum);
formData.append('status', parseInt(this.snForm.status));
service.clearMultiMacCodeSpacial(formData).then((res) => {
if (res) {
const blob = new Blob([res.data], {
type: 'application/vnd.ms-excel',
});
const link = document.createElement('a');
link.style.display = 'none';
link.href = URL.createObjectURL(blob);//多了此步骤,将文件转换为url
link.download = '上传失败的SN码.xls';
document.body.appendChild(link);
link.click();
URL.revokeObjectURL(link.href);
document.body.removeChild(link);
this.$message({
type: 'error',
message: '上传失败!',
});
}else{
this.$message({
type: 'success',
message: '清除成功',
});
}
边栏推荐
- SDN_ Simple summary
- 华为帐号多端协同,打造美好互联生活
- Strange, why is the ArrayList initialization capacity size 10?
- PHP merges multiple arrays. The same element takes the intersection of different elements to form an array
- JS prototype trap
- MapReduce programming basics
- Exception handling of classes in C #
- 数据中台咋就从“小甜甜”变成了“牛夫人”?
- 2.4 activation function
- JS use toString to distinguish between object and array
猜你喜欢
随机推荐
Voice service notes
[ESP nanny level tutorial preview] crazy node JS server - Case: esp8266 + DHT11 +nodejs local service + MySQL database
Construction of esp8266 FreeRTOS development environment
2022.02.15_ Daily question leetcode six hundred and ninety
How Kolo enables NFT music industry
2.3 [pytorch] data preprocessing torchvision datasets. ImageFolder
Design and manufacture of simple digital display electronic scale
Rich text interpolation
node. How to implement the SQL statement after JS connects to the database?
嵌入式开发用到的一些工具
【pytorch】nn. AdaptiveMaxPool2d
富文本实现插值
【leetcode】287. Find duplicates
tensorrt yolov5_ trt. Py comments
js重写自己的函数
Wechat applet WebView prohibits page scrolling without affecting the implementation of overflow scrolling in the business
队列的实现和应用
Matrix and coordinates
韦东山板子编译内核问题解决
123. how to stop a thread?