[Job 实战]vue 后台/网站 开发总结(1)
1、常规组件 传值 有2种写法
- 开发部分
- 推荐的第一种 对象形式 接收
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/08519f499fd24987a841a8296073de87.webp)
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/a26fb4976ee849699e4856a63b9962a2.webp)
- 第二 数组形式 接收
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/4a4263a8410d421f82130596d4adf168.webp)
- 官网描述
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/de669b69494c49d1919fbb0c90f7072e.webp)
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/1b51b32d56c34a87b602700a99a6c470.webp)
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/a9ba574a358a4c5bb8f8d8b230bf36c3.webp)
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/fe53b04b68a04ac9a1b934807c714a43.webp)
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/dcfa230a0cac4d189f02d84f6dfa7a1d.webp)
- 常规 父--->子
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/549eaeec64914ee1a1ba87a9332b982b.webp)
- 子 ---> 父 方法
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/e9253f4743e74cd4883215859a70e961.webp)
2、class/style 动态控制
-
开发部分
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/07515fba0bb6404ba2ebcd3db3407a93.webp)
-
官网
-
对象语法
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/d15fc96e2d0c436281000ce32b0dd236.webp)
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/5dc9764e4b67473dbcf2d8acbc5ff8a3.webp)
- 数组语法
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/76bc3cce7dcf475eba8530b1b5936ea9.webp)
-
用在组件上
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/d7a9d04939924d65aa3310a4ad090ba5.webp)
-
style 直接定义 推荐
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/001a5ab5f17d460e885b822089aa75fa.webp)
-
多重值
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/c663c2b3706a4d499483508d1f1308c7.webp)
- vue 会给不同浏览器 加不同前缀
3、后端给的是 一些字段的 id 前端需要展示出这些字段
-
第一种方式 推荐
-
先将这些值拿到 并放在 store 中
import to from 'await-to-js';
import scriptApi from '@/api/modules/scriptApi';
const idMap = localStorage.getItem('pia-idMap');
let map = {};
if (idMap) {
try {
map = JSON.parse(idMap);
} catch (error) {
//
}
}
function format(arr) {
const obj = {};
arr.forEach(item => {
// eslint-disable-next-line no-underscore-dangle
obj[item._id] = item.data;
});
return obj;
}
// 第一个参数是应用程序中 store 的唯一 id
export default defineStore('script-config', {
state: () => ({
// 下面5个都是剧本的属性的映射关系
historicalBg: map.historicalBg || [],
source: map.source || [],
type: map.type || [],
authorization: map.authorization || [],
label: map.label || [],
}),
getters: {},
actions: {
// 获取映射关系
async initMap() {
const [err, res] = await to(scriptApi.init());
const code = res?.code;
if (err || code !== 0) {
return;
}
const { data } = res;
// eslint-disable-next-line no-restricted-syntax
for (const key in data) {
// eslint-disable-next-line no-prototype-builtins
if (data.hasOwnProperty(key)) {
data[key] = format(data[key]);
}
}
this.historicalBg = data.historicalBg;
this.source = data.source;
this.type = data.type;
this.authorization = data.authorization;
this.label = data.label;
localStorage.setItem('pia-idMap', JSON.stringify(data));
},
},
});
- api
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/4c901cb983184d7b91aa54e7d969a5ed.webp)
- localStorage 中也存了
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/47747e865c5a436c9b9e04bd6e63508f.webp)
- 使用
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/d36a490c7834483abf02eb7c9218b765.webp)
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/49cba37906ba4cd382557409300b0d0c.webp)
- 第二种方式 如果用在一些 没有关联的页面比较合适 当然此处可优化
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/0307b61f21344eb0bbcd9879f63b88fd.webp)
- 页面直接调用
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/b85717d8681b441bb00f98a2c6e73e56.webp)
4、这种选项框 内容传递问题 如果使用 value 将无法 传递 自定义数据
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/4fedad98bb5a486ca664bfd3dace9596.webp)
-
这样写
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/f9a79c52e35d4b3fa1861dec93ce4a0f.webp)
-
使用
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/c85f0085b362415198cb85a3e1aa3a1b.webp)
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/a70a6d99eac7463baf39a2aed3fe333f.webp)
5、常用的页面/表单刷新方法
-
最不建议的是 window.location.reload()
非常的不现代化,体验非常的差 -
推荐方式 使用 ref
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/6cd034e598d74011ae75f6fe2c3dc6e4.webp)
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/1303c30f4d9448bb8d7a901f432241b5.webp)
- getList 调取接口
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/18feb61d9c0d45fc8c9ab559ce11500f.webp)
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/547f50d8c1dc4e47908a71ef9e5b518b.webp)
6、值得注意的 switch 开关状态 控制
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/0987f2e22d2f47f7880f2e35ad4ade0e.webp)
- 点击取消时 刷新 恢复
- 点击 确认后发请求
- 需要控制 Modal 显示隐藏
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/679b30d2e0cc4dd3af6610e005c1ff94.webp)
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/04cafe7639984b3ebf5a7549f85abd7e.webp)
7、关于弹窗 Modal 和 confirm 选择
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/b30fa2f60e1541468e72404293842d2d.webp)
- 比较丑的 表现
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/2de81d5d16114464b1c1d8cbd432ae4b.webp)
- 使用 这种语法 更改为上面的表达
this.$Modal.confirm({ content: `<h3>询问内容?</h3>`, onOk: async () => { this.$Message.success('操作成功') }, })
8、关于组件封装和页面简化
-
其实
比较忌讳的是 写一些重复页面,这样会导致 写起来,包括后面的维护都变得比较困难 -
我想
每个行业 应该都会注重 重复性,重复的 代码 或者模版 往往 被视为是更好的表达 -
简单来说 就是
复用 -
比如下面这个例子 3个tab 内容比较类似 ,可以写三个页面,当然也可以 写一个 组件 其他的页面
传递一些参数
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/7939b7742dd646e28814093124cca7ce.webp)
9、关于搜索/选择框数据渲染问题
- 这种 选择框的数据 需要动态生成,不能是固定写死的
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/f1fca2bc743149d0b1259a2b4da67869.webp)
-
看下解决方式
-
data 中的 初始搜索项目为 空
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/044b01b7a55847c8bbf0d7afef927951.webp)
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/d7302d81f0ef40a38c5ef053c742edfe.webp)
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/c60890297806435895c7ffb092020d34.webp)
- 点击 搜索 后是这样的
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/27bb289888c44e318d22d3737ff2c66b.webp)
10、方便新添加的数据管理,按钮状态切换实现参考
- 目的是 新添加的 内容 不要 立即在网站上生效,可以做二次确认或者审核
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/a1cbf500ea2848d0965a66ee01e19b7e.webp)
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/271fc80009e74b99a0609708dd6d7ca2.webp)
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/96ce493476e044f1a15e79faa8bbf6a8.webp)
11、数据 移动 + 序号变更
- 移动使用的是 Sortable.js
- 序号变更 需要给后端传递数据 传递 currentIndex, targetIndex
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/4b490247843040c9a74edd3a2cb250f9.webp)
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/d90034ca81174f26a0b401080c60fdd0.webp)
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/fd3869ed5628425091acaae1dea296f6.webp)
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/7242067dd4b24f3a9aae0beac505a0b2.webp)
11、使用 @/utils/xslx 读取或者导入 Excel
- 下载模版
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/cccebb7db7134138b195b9b7ae5ebfcf.webp)
- 上传文件
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/1196aef602fd42c1ba6b0ccb7449f6bc.webp)
- 看一下效果
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/03cda1b7087149fdac89afd3edcf275a.webp)
12、有个 detail 页面 需要跳到新页面
- 参考实现
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/ab6ed944f67e42949a215605b0875ee7.webp)
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/092bfbc47d9c4f05afe6429640ce6308.webp)
![[Job 实战]vue 后台/网站 开发总结(1)](https://static.blogweb.cn/article/c3e3cf993f6b45c08e55b8d95fbb9682.webp)
- 暂时 写这么多,未完待续......
参考网站
转载自:https://juejin.cn/post/7138337689044156453