- 点击折现图
this.chart.setOption(option);
let self = this;
this.chart.getZr().on("click", function (e) {
let pointInPixel = [e.offsetX, e.offsetY];
let pointInGrid = self.chart.convertFromPixel(
{ seriesIndex: 0 },
pointInPixel
);
let xIndex = pointInGrid[0];
console.log(xIndex);
});
- vscode自动格式化代码(eslint,stylelint)
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit",
"source.fixAll.stylelint": "explicit"
},
"eslint.format.enable": true,
"files.autoSave": "onFocusChange",
"stylelint.config": null,
- 前端请求视频流
import { sendStream } from 'h3'
import fs from "fs";
export default defineEventHandler(async event => {
try {
const filePath = "public/video/publicize.mp4"
const stat = fs.statSync(filePath);
const fileSize = stat.size;
let range = event.node.req.headers.range;
if(!range){
const file = fs.createReadStream(filePath,{start: 0,end:fileSize-1 });
event.node.res.statusCode = 206
return sendStream(event, file);
}
const parts = range!.replace(/bytes=/, "").split("-");
const start = parseInt(parts[0], 10);
const endBytes = parts[1] ? parseInt(parts[1],10) : null;
const end = endBytes ? endBytes : Math.min(start + 999999, fileSize - 1);
const chunkSize = (end - start) + 1;
const file = fs.createReadStream(filePath,{ start, end });
event.node.res.setHeader("Access-Control-Allow-Headers", "Range");
event.node.res.setHeader('Content-Type', 'video/mp4');
event.node.res.setHeader("Content-Range", `bytes ${start}-${end}/${fileSize}`)
event.node.res.setHeader("Content-Length",chunkSize)
event.node.res.setHeader("Accept-Ranges", "bytes")
event.node.res.statusCode = 206
return sendStream(event, file);
} catch (e) {
return {
code: 500,
message: '服务异常'
};
}
});
- Element合并单元格
<el-table :span-method="(e) => objectSpanMethod(e)"></el-table>
//合并操作
mergeHandle(list, alias) {
for (const item of list) {
item._count = 0;
}
for (let i = list.length - 1; i >= 0; i--) {
if (i > 0 && list[i][alias] === list[i - 1][alias]) {
list[i - 1]._count = list[i]._count + 1;
} else {
list[i]._count += 1;
list[i].merge = true;
}
}
}
//table合并回调
objectSpanMethod({ row, column, columnIndex, rowIndex }) {
if (columnIndex === 0 || columnIndex === 4) {
if (row.merge === true) {
return {
rowspan: row._count,
colspan: 1,
};
} else {
return {
rowspan: 0,
colspan: 0,
};
}
}
}
//实际调用
this.mergeHandle(res.data, "projectId");
chrom浏览器设置自动播放:右键点击 Chrome 快捷方式:在桌面或任务栏找到 Chrome 图标,右键点击。 选择“属性”:从菜单中选择“属性”。 修改目标字段: 在“快捷方式”选项卡中找到“目标”字段。 在现有路径末尾添加 --autoplay-policy=no-user-gesture-required,注意前面加一个空格。 例如:"C:\Program Files\Google\Chrome\Application\chrome.exe" --autoplay-policy=no-user-gesture-required 保存更改:点击“应用”或“确定”保存。 重新启动 Chrome:通过快捷方式启动 Chrome,参数生效。