init
This commit is contained in:
		
						commit
						029557a5c0
					
				
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
			
		||||
node_modules/
 | 
			
		||||
view/node_modules/
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								bin/lux.exe
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/lux.exe
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								bin/yt-dlp.exe
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/yt-dlp.exe
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										25
									
								
								index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								index.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,25 @@
 | 
			
		||||
const { app, BrowserWindow } = require('electron')
 | 
			
		||||
let path = require('path');
 | 
			
		||||
 | 
			
		||||
const createWindow = () => {
 | 
			
		||||
    const win = new BrowserWindow({
 | 
			
		||||
        width: 1000,
 | 
			
		||||
        height: 800,
 | 
			
		||||
        webPreferences: {
 | 
			
		||||
            preload: path.join(__dirname, '/util/preload.js'),
 | 
			
		||||
            sandbox: false,
 | 
			
		||||
            allowRunningInsecureContent: true,
 | 
			
		||||
            webSecurity: false,
 | 
			
		||||
            contextIsolation: false
 | 
			
		||||
        }
 | 
			
		||||
    })
 | 
			
		||||
    win.loadFile('./view/dist/index.html')
 | 
			
		||||
    // win.loadURL("http://localhost:5173/")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// app.whenReady().then(() => {
 | 
			
		||||
//     createWindow()
 | 
			
		||||
// })
 | 
			
		||||
app.on('ready', function () {
 | 
			
		||||
    createWindow()
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										36
									
								
								main.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								main.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,36 @@
 | 
			
		||||
const { spawn } = require('child_process');
 | 
			
		||||
const { getListData } = require("./util/getList/qq.js")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// const lux = spawn("./bin/yt-dlp.exe",['--cookies-from-browser','edge','-P','D:/dl','-o','title.mp4','https://v.qq.com/x/cover/mzc00200ecukm2c/h0042bd9uig.html'])
 | 
			
		||||
 | 
			
		||||
// lux.stdout.on('data', (data) => {
 | 
			
		||||
//     console.log(`stdout: ${data}`);
 | 
			
		||||
// });
 | 
			
		||||
 | 
			
		||||
// lux.stderr.on('data', (data) => {
 | 
			
		||||
//     console.log(`stderr: ${data}`);
 | 
			
		||||
// });
 | 
			
		||||
 | 
			
		||||
// lux.on('close', (code) => {
 | 
			
		||||
//     console.log(`child process exited with code ${code}`);
 | 
			
		||||
// });
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
getListData('https://v.qq.com/x/cover/mzc0020009mj4p1/u0046tnchh7.html').then((res) => {
 | 
			
		||||
    for (let i of res) {
 | 
			
		||||
        const lux = spawn("./bin/yt-dlp.exe", ['--cookies-from-browser', 'edge', '-P', 'D:/dl', '-o', i.title + '.mp4', i.url])
 | 
			
		||||
        lux.stdout.on('data', (data) => {
 | 
			
		||||
            console.log(`stdout: ${data}`);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        lux.stderr.on('data', (data) => {
 | 
			
		||||
            console.log(`stderr: ${data}`);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        lux.on('close', (code) => {
 | 
			
		||||
            console.log(`child process exited with code ${code}`);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
})
 | 
			
		||||
							
								
								
									
										39
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,39 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "ptSend",
 | 
			
		||||
  "version": "1.0.0",
 | 
			
		||||
  "description": "",
 | 
			
		||||
  "main": "index.js",
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "start": "electron ."
 | 
			
		||||
  },
 | 
			
		||||
  "keywords": [],
 | 
			
		||||
  "author": "",
 | 
			
		||||
  "license": "ISC",
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "axios": "^1.4.0",
 | 
			
		||||
    "puppeteer": "^20.4.0"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "electron": "^25.1.0"
 | 
			
		||||
  },
 | 
			
		||||
  "bin": "./index.js",
 | 
			
		||||
  "pkg": {
 | 
			
		||||
    "scripts": "index.js",
 | 
			
		||||
    "assets": [
 | 
			
		||||
      "bin/*"
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "build": {
 | 
			
		||||
    "productName": "Imqianduan",
 | 
			
		||||
    "appId": "com.electron.imqianduan-com-app",
 | 
			
		||||
    "copyright": "© 2018 IMQIANDUAN.COM",
 | 
			
		||||
    "asar": true,
 | 
			
		||||
    "asarUnpack": "node_modules/puppeteer/.local-chromium/**/*",
 | 
			
		||||
    "files": [
 | 
			
		||||
      "./**/*"
 | 
			
		||||
    ],
 | 
			
		||||
    "directories": {
 | 
			
		||||
      "output": "./dist"
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1307
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										1307
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										63
									
								
								util/getList/qq.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								util/getList/qq.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,63 @@
 | 
			
		||||
const puppeteer = require("puppeteer")
 | 
			
		||||
const { seep } = require("../utils.js");
 | 
			
		||||
 | 
			
		||||
async function getListData(url) {
 | 
			
		||||
    const browser = await puppeteer.launch({
 | 
			
		||||
        // 关闭无头模式,方便我们看到这个无头浏览器执行的过程
 | 
			
		||||
        headless: false,
 | 
			
		||||
        timeout: 0 // 默认超时为30秒,设置为0则表示不设置超时
 | 
			
		||||
    });
 | 
			
		||||
    const page = await browser.newPage();
 | 
			
		||||
    page.setViewport({
 | 
			
		||||
        width: 1376,
 | 
			
		||||
        height: 768,
 | 
			
		||||
    });
 | 
			
		||||
    await page.goto(url, {});
 | 
			
		||||
    let list = await page.evaluate(() => {
 | 
			
		||||
        return window.__PINIA__.episodeMain
 | 
			
		||||
    })
 | 
			
		||||
    for (let i of list.listData[0].tabs) {
 | 
			
		||||
        let text = i.text
 | 
			
		||||
        let more = await page.$(".b-tab__more")
 | 
			
		||||
        more && more.click()
 | 
			
		||||
        await page.$$eval(".b-tab__item", (list, text) => {
 | 
			
		||||
            console.log(list)
 | 
			
		||||
            for (let i of list) {
 | 
			
		||||
                if (i && i.innerText) {
 | 
			
		||||
                    if (text == i.innerText.trim()) {
 | 
			
		||||
                        i.click()
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }, text)
 | 
			
		||||
        await seep(1000);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    list = await page.evaluate(() => {
 | 
			
		||||
        return __PINIA__.episodeMain
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    list = list.listData[0].list
 | 
			
		||||
    let listData = []
 | 
			
		||||
    for (let i of list) {
 | 
			
		||||
        // listData.push(...i)
 | 
			
		||||
        i.forEach(j => {
 | 
			
		||||
            if(!j.isNoStoreWatchHistory){
 | 
			
		||||
                listData.push(j)
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    list = []
 | 
			
		||||
    for(let i of listData){
 | 
			
		||||
        list.push({
 | 
			
		||||
            title:i.fullTitle,
 | 
			
		||||
            url:"https://v.qq.com/x/cover/" + i.cid + "/" + i.vid + ".html"
 | 
			
		||||
        })
 | 
			
		||||
    }
 | 
			
		||||
    browser.close()
 | 
			
		||||
    return list
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
    getListData
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										20
									
								
								util/preload.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								util/preload.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,20 @@
 | 
			
		||||
const path = require('path')
 | 
			
		||||
const { getListData } = require(path.join(__dirname,'/getList/qq.js'));
 | 
			
		||||
const {dow} = require("./utils.js")
 | 
			
		||||
 | 
			
		||||
async function getlist (url) {
 | 
			
		||||
    let list = await getListData(url)
 | 
			
		||||
    return list
 | 
			
		||||
    // console.log('electron收到远端的传参', a);
 | 
			
		||||
    // callback('config result'); // 回调给远端的请求数据,如 config
 | 
			
		||||
    // ipcRenderer.send('close', 'args bbb'); // 比如收到请求关闭窗口
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
window.getlist = getlist
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
window.dowload = function (info,callback){
 | 
			
		||||
    console.log("开始")
 | 
			
		||||
    dow(info,callback)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										26
									
								
								util/utils.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								util/utils.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,26 @@
 | 
			
		||||
const { spawn } = require('child_process');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function seep(time){
 | 
			
		||||
    return new Promise((res)=>{
 | 
			
		||||
        setTimeout(()=>{
 | 
			
		||||
            res()
 | 
			
		||||
        },time)
 | 
			
		||||
    })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function dow(info,callback){
 | 
			
		||||
    const lux = spawn("./bin/yt-dlp.exe", ['--cookies-from-browser', 'edge', '-P', 'D:/dl', '-o', info.title + '.mp4', info.url])
 | 
			
		||||
        lux.stdout.on('data', (data) => {
 | 
			
		||||
            callback(data,false)
 | 
			
		||||
        });
 | 
			
		||||
        lux.on('close', (code) => {
 | 
			
		||||
            console.log("结束")
 | 
			
		||||
            callback(code,true)
 | 
			
		||||
        });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
    seep,
 | 
			
		||||
    dow
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										3
									
								
								view/.vscode/extensions.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								view/.vscode/extensions.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
			
		||||
{
 | 
			
		||||
  "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										7
									
								
								view/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								view/README.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
			
		||||
# Vue 3 + Vite
 | 
			
		||||
 | 
			
		||||
This template should help get you started developing with Vue 3 in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
 | 
			
		||||
 | 
			
		||||
## Recommended IDE Setup
 | 
			
		||||
 | 
			
		||||
- [VS Code](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin).
 | 
			
		||||
							
								
								
									
										1
									
								
								view/dist/assets/index-6ef103ac.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								view/dist/assets/index-6ef103ac.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										54
									
								
								view/dist/assets/index-7cf9519d.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								view/dist/assets/index-7cf9519d.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								view/dist/assets/index-d6c08965.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								view/dist/assets/index-d6c08965.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
import{_ as S,r as u,a as i,o as p,c as f,b as t,w as s,d as v,e as g,F as q,f as B,E as N,g as U,t as D}from"./index-7cf9519d.js";const F={class:"url"},L={style:{display:"flex",width:"100%"}},R={style:{display:"flex"}},T={style:{width:"100%",height:"100%","overflow-y":"auto"}},j={__name:"index",setup(z){const d=u(!1),n=u({name:"https://v.qq.com/x/cover/mzc002007vp35qj.html",start:1}),c=u([]),r=u();function h(){let l=N.service();window.getlist(n.value.name).then(e=>{console.log(e),c.value=e,l.close()})}function x(){r.value.clearSelection();for(let l=n.value.start-1;l<c.value.length;l++)console.log(l),r.value.toggleRowSelection(c.value[l],void 0)}const y=u([]);function b(l,e,o){console.log(o),o?l():y.value.unshift(e)}function V(l){return new Promise(e=>{const o=b.bind(this,e);window.dowload(l,o)})}async function k(){d.value=!0;let l=r.value.getSelectionRows();for(let e of l)await V(e);d.value=!1,U({showClose:!0,message:"下载完成",type:"success",duration:0})}return(l,e)=>{const o=i("el-input"),_=i("el-button"),w=i("el-form-item"),m=i("el-table-column"),C=i("el-table"),E=i("el-dialog");return p(),f("div",F,[t(w,{label:"视频地址"},{default:s(()=>[v("div",L,[t(o,{style:{width:"100%"},modelValue:n.value.name,"onUpdate:modelValue":e[0]||(e[0]=a=>n.value.name=a)},null,8,["modelValue"]),t(_,{style:{"flex-shrink":"0",margin:"0 10px"},onClick:h,type:"primary"},{default:s(()=>[g("获取")]),_:1})])]),_:1}),t(w,{label:"第几集开始"},{default:s(()=>[v("div",R,[t(o,{modelValue:n.value.start,"onUpdate:modelValue":e[1]||(e[1]=a=>n.value.start=a)},null,8,["modelValue"]),t(_,{style:{"flex-shrink":"0",margin:"0 10px"},onClick:x,type:"primary"},{default:s(()=>[g("设置")]),_:1}),t(_,{style:{"flex-shrink":"0",margin:"0 10px"},onClick:k,type:"primary"},{default:s(()=>[g("下载")]),_:1})])]),_:1}),t(C,{ref_key:"table",ref:r,data:c.value,style:{width:"100%"}},{default:s(()=>[t(m,{type:"selection",width:"55"}),t(m,{label:"title",prop:"title"}),t(m,{label:"url",prop:"url"})]),_:1},8,["data"]),t(E,{fullscreen:!0,"close-on-click-modal":!1,"close-on-press-escape":!1,modelValue:d.value,"onUpdate:modelValue":e[2]||(e[2]=a=>d.value=a),"show-close":!1,title:"Tips",width:"30%"},{default:s(()=>[v("div",T,[(p(!0),f(q,null,B(y.value,a=>(p(),f("div",null,D(a),1))),256))])]),_:1},8,["modelValue"])])}}},M=S(j,[["__scopeId","data-v-ce0e7241"]]);export{M as default};
 | 
			
		||||
							
								
								
									
										15
									
								
								view/dist/index.html
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								view/dist/index.html
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,15 @@
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
  <head>
 | 
			
		||||
    <meta charset="UTF-8" />
 | 
			
		||||
    <link rel="icon" type="image/svg+xml" href="./vite.svg" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 | 
			
		||||
    <title>Vite + Vue</title>
 | 
			
		||||
    <script type="module" crossorigin src="./assets/index-7cf9519d.js"></script>
 | 
			
		||||
    <link rel="stylesheet" href="./assets/index-6ef103ac.css">
 | 
			
		||||
  </head>
 | 
			
		||||
  <body>
 | 
			
		||||
    <div id="app"></div>
 | 
			
		||||
    
 | 
			
		||||
  </body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										1
									
								
								view/dist/vite.svg
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								view/dist/vite.svg
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 1.5 KiB  | 
							
								
								
									
										13
									
								
								view/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								view/index.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,13 @@
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
  <head>
 | 
			
		||||
    <meta charset="UTF-8" />
 | 
			
		||||
    <link rel="icon" type="image/svg+xml" href="/vite.svg" />
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 | 
			
		||||
    <title>Vite + Vue</title>
 | 
			
		||||
  </head>
 | 
			
		||||
  <body>
 | 
			
		||||
    <div id="app"></div>
 | 
			
		||||
    <script type="module" src="/src/main.js"></script>
 | 
			
		||||
  </body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										21
									
								
								view/package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								view/package.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,21 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "view",
 | 
			
		||||
  "private": true,
 | 
			
		||||
  "version": "0.0.0",
 | 
			
		||||
  "type": "module",
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "dev": "vite",
 | 
			
		||||
    "build": "vite build",
 | 
			
		||||
    "preview": "vite preview"
 | 
			
		||||
  },
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "element-plus": "^2.3.6",
 | 
			
		||||
    "sass": "^1.63.3",
 | 
			
		||||
    "vue": "^3.2.47",
 | 
			
		||||
    "vue-router": "4"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@vitejs/plugin-vue": "^4.1.0",
 | 
			
		||||
    "vite": "^4.3.9"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										714
									
								
								view/pnpm-lock.yaml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										714
									
								
								view/pnpm-lock.yaml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@ -0,0 +1,714 @@
 | 
			
		||||
lockfileVersion: '6.0'
 | 
			
		||||
 | 
			
		||||
dependencies:
 | 
			
		||||
  element-plus:
 | 
			
		||||
    specifier: ^2.3.6
 | 
			
		||||
    version: 2.3.6(vue@3.2.47)
 | 
			
		||||
  sass:
 | 
			
		||||
    specifier: ^1.63.3
 | 
			
		||||
    version: 1.63.3
 | 
			
		||||
  vue:
 | 
			
		||||
    specifier: ^3.2.47
 | 
			
		||||
    version: 3.2.47
 | 
			
		||||
  vue-router:
 | 
			
		||||
    specifier: '4'
 | 
			
		||||
    version: 4.2.2(vue@3.2.47)
 | 
			
		||||
 | 
			
		||||
devDependencies:
 | 
			
		||||
  '@vitejs/plugin-vue':
 | 
			
		||||
    specifier: ^4.1.0
 | 
			
		||||
    version: 4.1.0(vite@4.3.9)(vue@3.2.47)
 | 
			
		||||
  vite:
 | 
			
		||||
    specifier: ^4.3.9
 | 
			
		||||
    version: 4.3.9(sass@1.63.3)
 | 
			
		||||
 | 
			
		||||
packages:
 | 
			
		||||
 | 
			
		||||
  /@babel/helper-string-parser@7.22.5:
 | 
			
		||||
    resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==}
 | 
			
		||||
    engines: {node: '>=6.9.0'}
 | 
			
		||||
 | 
			
		||||
  /@babel/helper-validator-identifier@7.22.5:
 | 
			
		||||
    resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==}
 | 
			
		||||
    engines: {node: '>=6.9.0'}
 | 
			
		||||
 | 
			
		||||
  /@babel/parser@7.22.5:
 | 
			
		||||
    resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==}
 | 
			
		||||
    engines: {node: '>=6.0.0'}
 | 
			
		||||
    hasBin: true
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/types': 7.22.5
 | 
			
		||||
 | 
			
		||||
  /@babel/types@7.22.5:
 | 
			
		||||
    resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==}
 | 
			
		||||
    engines: {node: '>=6.9.0'}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/helper-string-parser': 7.22.5
 | 
			
		||||
      '@babel/helper-validator-identifier': 7.22.5
 | 
			
		||||
      to-fast-properties: 2.0.0
 | 
			
		||||
 | 
			
		||||
  /@ctrl/tinycolor@3.6.0:
 | 
			
		||||
    resolution: {integrity: sha512-/Z3l6pXthq0JvMYdUFyX9j0MaCltlIn6mfh9jLyQwg5aPKxkyNa0PTHtU1AlFXLNk55ZuAeJRcpvq+tmLfKmaQ==}
 | 
			
		||||
    engines: {node: '>=10'}
 | 
			
		||||
    dev: false
 | 
			
		||||
 | 
			
		||||
  /@element-plus/icons-vue@2.1.0(vue@3.2.47):
 | 
			
		||||
    resolution: {integrity: sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA==}
 | 
			
		||||
    peerDependencies:
 | 
			
		||||
      vue: ^3.2.0
 | 
			
		||||
    dependencies:
 | 
			
		||||
      vue: 3.2.47
 | 
			
		||||
    dev: false
 | 
			
		||||
 | 
			
		||||
  /@esbuild/android-arm64@0.17.19:
 | 
			
		||||
    resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
    cpu: [arm64]
 | 
			
		||||
    os: [android]
 | 
			
		||||
    requiresBuild: true
 | 
			
		||||
    dev: true
 | 
			
		||||
    optional: true
 | 
			
		||||
 | 
			
		||||
  /@esbuild/android-arm@0.17.19:
 | 
			
		||||
    resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
    cpu: [arm]
 | 
			
		||||
    os: [android]
 | 
			
		||||
    requiresBuild: true
 | 
			
		||||
    dev: true
 | 
			
		||||
    optional: true
 | 
			
		||||
 | 
			
		||||
  /@esbuild/android-x64@0.17.19:
 | 
			
		||||
    resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
    cpu: [x64]
 | 
			
		||||
    os: [android]
 | 
			
		||||
    requiresBuild: true
 | 
			
		||||
    dev: true
 | 
			
		||||
    optional: true
 | 
			
		||||
 | 
			
		||||
  /@esbuild/darwin-arm64@0.17.19:
 | 
			
		||||
    resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
    cpu: [arm64]
 | 
			
		||||
    os: [darwin]
 | 
			
		||||
    requiresBuild: true
 | 
			
		||||
    dev: true
 | 
			
		||||
    optional: true
 | 
			
		||||
 | 
			
		||||
  /@esbuild/darwin-x64@0.17.19:
 | 
			
		||||
    resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
    cpu: [x64]
 | 
			
		||||
    os: [darwin]
 | 
			
		||||
    requiresBuild: true
 | 
			
		||||
    dev: true
 | 
			
		||||
    optional: true
 | 
			
		||||
 | 
			
		||||
  /@esbuild/freebsd-arm64@0.17.19:
 | 
			
		||||
    resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
    cpu: [arm64]
 | 
			
		||||
    os: [freebsd]
 | 
			
		||||
    requiresBuild: true
 | 
			
		||||
    dev: true
 | 
			
		||||
    optional: true
 | 
			
		||||
 | 
			
		||||
  /@esbuild/freebsd-x64@0.17.19:
 | 
			
		||||
    resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
    cpu: [x64]
 | 
			
		||||
    os: [freebsd]
 | 
			
		||||
    requiresBuild: true
 | 
			
		||||
    dev: true
 | 
			
		||||
    optional: true
 | 
			
		||||
 | 
			
		||||
  /@esbuild/linux-arm64@0.17.19:
 | 
			
		||||
    resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
    cpu: [arm64]
 | 
			
		||||
    os: [linux]
 | 
			
		||||
    requiresBuild: true
 | 
			
		||||
    dev: true
 | 
			
		||||
    optional: true
 | 
			
		||||
 | 
			
		||||
  /@esbuild/linux-arm@0.17.19:
 | 
			
		||||
    resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
    cpu: [arm]
 | 
			
		||||
    os: [linux]
 | 
			
		||||
    requiresBuild: true
 | 
			
		||||
    dev: true
 | 
			
		||||
    optional: true
 | 
			
		||||
 | 
			
		||||
  /@esbuild/linux-ia32@0.17.19:
 | 
			
		||||
    resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
    cpu: [ia32]
 | 
			
		||||
    os: [linux]
 | 
			
		||||
    requiresBuild: true
 | 
			
		||||
    dev: true
 | 
			
		||||
    optional: true
 | 
			
		||||
 | 
			
		||||
  /@esbuild/linux-loong64@0.17.19:
 | 
			
		||||
    resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
    cpu: [loong64]
 | 
			
		||||
    os: [linux]
 | 
			
		||||
    requiresBuild: true
 | 
			
		||||
    dev: true
 | 
			
		||||
    optional: true
 | 
			
		||||
 | 
			
		||||
  /@esbuild/linux-mips64el@0.17.19:
 | 
			
		||||
    resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
    cpu: [mips64el]
 | 
			
		||||
    os: [linux]
 | 
			
		||||
    requiresBuild: true
 | 
			
		||||
    dev: true
 | 
			
		||||
    optional: true
 | 
			
		||||
 | 
			
		||||
  /@esbuild/linux-ppc64@0.17.19:
 | 
			
		||||
    resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
    cpu: [ppc64]
 | 
			
		||||
    os: [linux]
 | 
			
		||||
    requiresBuild: true
 | 
			
		||||
    dev: true
 | 
			
		||||
    optional: true
 | 
			
		||||
 | 
			
		||||
  /@esbuild/linux-riscv64@0.17.19:
 | 
			
		||||
    resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
    cpu: [riscv64]
 | 
			
		||||
    os: [linux]
 | 
			
		||||
    requiresBuild: true
 | 
			
		||||
    dev: true
 | 
			
		||||
    optional: true
 | 
			
		||||
 | 
			
		||||
  /@esbuild/linux-s390x@0.17.19:
 | 
			
		||||
    resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
    cpu: [s390x]
 | 
			
		||||
    os: [linux]
 | 
			
		||||
    requiresBuild: true
 | 
			
		||||
    dev: true
 | 
			
		||||
    optional: true
 | 
			
		||||
 | 
			
		||||
  /@esbuild/linux-x64@0.17.19:
 | 
			
		||||
    resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
    cpu: [x64]
 | 
			
		||||
    os: [linux]
 | 
			
		||||
    requiresBuild: true
 | 
			
		||||
    dev: true
 | 
			
		||||
    optional: true
 | 
			
		||||
 | 
			
		||||
  /@esbuild/netbsd-x64@0.17.19:
 | 
			
		||||
    resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
    cpu: [x64]
 | 
			
		||||
    os: [netbsd]
 | 
			
		||||
    requiresBuild: true
 | 
			
		||||
    dev: true
 | 
			
		||||
    optional: true
 | 
			
		||||
 | 
			
		||||
  /@esbuild/openbsd-x64@0.17.19:
 | 
			
		||||
    resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
    cpu: [x64]
 | 
			
		||||
    os: [openbsd]
 | 
			
		||||
    requiresBuild: true
 | 
			
		||||
    dev: true
 | 
			
		||||
    optional: true
 | 
			
		||||
 | 
			
		||||
  /@esbuild/sunos-x64@0.17.19:
 | 
			
		||||
    resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
    cpu: [x64]
 | 
			
		||||
    os: [sunos]
 | 
			
		||||
    requiresBuild: true
 | 
			
		||||
    dev: true
 | 
			
		||||
    optional: true
 | 
			
		||||
 | 
			
		||||
  /@esbuild/win32-arm64@0.17.19:
 | 
			
		||||
    resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
    cpu: [arm64]
 | 
			
		||||
    os: [win32]
 | 
			
		||||
    requiresBuild: true
 | 
			
		||||
    dev: true
 | 
			
		||||
    optional: true
 | 
			
		||||
 | 
			
		||||
  /@esbuild/win32-ia32@0.17.19:
 | 
			
		||||
    resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
    cpu: [ia32]
 | 
			
		||||
    os: [win32]
 | 
			
		||||
    requiresBuild: true
 | 
			
		||||
    dev: true
 | 
			
		||||
    optional: true
 | 
			
		||||
 | 
			
		||||
  /@esbuild/win32-x64@0.17.19:
 | 
			
		||||
    resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
    cpu: [x64]
 | 
			
		||||
    os: [win32]
 | 
			
		||||
    requiresBuild: true
 | 
			
		||||
    dev: true
 | 
			
		||||
    optional: true
 | 
			
		||||
 | 
			
		||||
  /@floating-ui/core@1.3.0:
 | 
			
		||||
    resolution: {integrity: sha512-vX1WVAdPjZg9DkDkC+zEx/tKtnST6/qcNpwcjeBgco3XRNHz5PUA+ivi/yr6G3o0kMR60uKBJcfOdfzOFI7PMQ==}
 | 
			
		||||
    dev: false
 | 
			
		||||
 | 
			
		||||
  /@floating-ui/dom@1.3.0:
 | 
			
		||||
    resolution: {integrity: sha512-qIAwejE3r6NeA107u4ELDKkH8+VtgRKdXqtSPaKflL2S2V+doyN+Wt9s5oHKXPDo4E8TaVXaHT3+6BbagH31xw==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@floating-ui/core': 1.3.0
 | 
			
		||||
    dev: false
 | 
			
		||||
 | 
			
		||||
  /@sxzz/popperjs-es@2.11.7:
 | 
			
		||||
    resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==}
 | 
			
		||||
    dev: false
 | 
			
		||||
 | 
			
		||||
  /@types/lodash-es@4.17.7:
 | 
			
		||||
    resolution: {integrity: sha512-z0ptr6UI10VlU6l5MYhGwS4mC8DZyYer2mCoyysZtSF7p26zOX8UpbrV0YpNYLGS8K4PUFIyEr62IMFFjveSiQ==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@types/lodash': 4.14.195
 | 
			
		||||
    dev: false
 | 
			
		||||
 | 
			
		||||
  /@types/lodash@4.14.195:
 | 
			
		||||
    resolution: {integrity: sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==}
 | 
			
		||||
    dev: false
 | 
			
		||||
 | 
			
		||||
  /@types/web-bluetooth@0.0.16:
 | 
			
		||||
    resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==}
 | 
			
		||||
    dev: false
 | 
			
		||||
 | 
			
		||||
  /@vitejs/plugin-vue@4.1.0(vite@4.3.9)(vue@3.2.47):
 | 
			
		||||
    resolution: {integrity: sha512-++9JOAFdcXI3lyer9UKUV4rfoQ3T1RN8yDqoCLar86s0xQct5yblxAE+yWgRnU5/0FOlVCpTZpYSBV/bGWrSrQ==}
 | 
			
		||||
    engines: {node: ^14.18.0 || >=16.0.0}
 | 
			
		||||
    peerDependencies:
 | 
			
		||||
      vite: ^4.0.0
 | 
			
		||||
      vue: ^3.2.25
 | 
			
		||||
    dependencies:
 | 
			
		||||
      vite: 4.3.9(sass@1.63.3)
 | 
			
		||||
      vue: 3.2.47
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /@vue/compiler-core@3.2.47:
 | 
			
		||||
    resolution: {integrity: sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/parser': 7.22.5
 | 
			
		||||
      '@vue/shared': 3.2.47
 | 
			
		||||
      estree-walker: 2.0.2
 | 
			
		||||
      source-map: 0.6.1
 | 
			
		||||
 | 
			
		||||
  /@vue/compiler-dom@3.2.47:
 | 
			
		||||
    resolution: {integrity: sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@vue/compiler-core': 3.2.47
 | 
			
		||||
      '@vue/shared': 3.2.47
 | 
			
		||||
 | 
			
		||||
  /@vue/compiler-sfc@3.2.47:
 | 
			
		||||
    resolution: {integrity: sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/parser': 7.22.5
 | 
			
		||||
      '@vue/compiler-core': 3.2.47
 | 
			
		||||
      '@vue/compiler-dom': 3.2.47
 | 
			
		||||
      '@vue/compiler-ssr': 3.2.47
 | 
			
		||||
      '@vue/reactivity-transform': 3.2.47
 | 
			
		||||
      '@vue/shared': 3.2.47
 | 
			
		||||
      estree-walker: 2.0.2
 | 
			
		||||
      magic-string: 0.25.9
 | 
			
		||||
      postcss: 8.4.24
 | 
			
		||||
      source-map: 0.6.1
 | 
			
		||||
 | 
			
		||||
  /@vue/compiler-ssr@3.2.47:
 | 
			
		||||
    resolution: {integrity: sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@vue/compiler-dom': 3.2.47
 | 
			
		||||
      '@vue/shared': 3.2.47
 | 
			
		||||
 | 
			
		||||
  /@vue/devtools-api@6.5.0:
 | 
			
		||||
    resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==}
 | 
			
		||||
    dev: false
 | 
			
		||||
 | 
			
		||||
  /@vue/reactivity-transform@3.2.47:
 | 
			
		||||
    resolution: {integrity: sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@babel/parser': 7.22.5
 | 
			
		||||
      '@vue/compiler-core': 3.2.47
 | 
			
		||||
      '@vue/shared': 3.2.47
 | 
			
		||||
      estree-walker: 2.0.2
 | 
			
		||||
      magic-string: 0.25.9
 | 
			
		||||
 | 
			
		||||
  /@vue/reactivity@3.2.47:
 | 
			
		||||
    resolution: {integrity: sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@vue/shared': 3.2.47
 | 
			
		||||
 | 
			
		||||
  /@vue/runtime-core@3.2.47:
 | 
			
		||||
    resolution: {integrity: sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@vue/reactivity': 3.2.47
 | 
			
		||||
      '@vue/shared': 3.2.47
 | 
			
		||||
 | 
			
		||||
  /@vue/runtime-dom@3.2.47:
 | 
			
		||||
    resolution: {integrity: sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@vue/runtime-core': 3.2.47
 | 
			
		||||
      '@vue/shared': 3.2.47
 | 
			
		||||
      csstype: 2.6.21
 | 
			
		||||
 | 
			
		||||
  /@vue/server-renderer@3.2.47(vue@3.2.47):
 | 
			
		||||
    resolution: {integrity: sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==}
 | 
			
		||||
    peerDependencies:
 | 
			
		||||
      vue: 3.2.47
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@vue/compiler-ssr': 3.2.47
 | 
			
		||||
      '@vue/shared': 3.2.47
 | 
			
		||||
      vue: 3.2.47
 | 
			
		||||
 | 
			
		||||
  /@vue/shared@3.2.47:
 | 
			
		||||
    resolution: {integrity: sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==}
 | 
			
		||||
 | 
			
		||||
  /@vueuse/core@9.13.0(vue@3.2.47):
 | 
			
		||||
    resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@types/web-bluetooth': 0.0.16
 | 
			
		||||
      '@vueuse/metadata': 9.13.0
 | 
			
		||||
      '@vueuse/shared': 9.13.0(vue@3.2.47)
 | 
			
		||||
      vue-demi: 0.14.5(vue@3.2.47)
 | 
			
		||||
    transitivePeerDependencies:
 | 
			
		||||
      - '@vue/composition-api'
 | 
			
		||||
      - vue
 | 
			
		||||
    dev: false
 | 
			
		||||
 | 
			
		||||
  /@vueuse/metadata@9.13.0:
 | 
			
		||||
    resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==}
 | 
			
		||||
    dev: false
 | 
			
		||||
 | 
			
		||||
  /@vueuse/shared@9.13.0(vue@3.2.47):
 | 
			
		||||
    resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      vue-demi: 0.14.5(vue@3.2.47)
 | 
			
		||||
    transitivePeerDependencies:
 | 
			
		||||
      - '@vue/composition-api'
 | 
			
		||||
      - vue
 | 
			
		||||
    dev: false
 | 
			
		||||
 | 
			
		||||
  /anymatch@3.1.3:
 | 
			
		||||
    resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
 | 
			
		||||
    engines: {node: '>= 8'}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      normalize-path: 3.0.0
 | 
			
		||||
      picomatch: 2.3.1
 | 
			
		||||
 | 
			
		||||
  /async-validator@4.2.5:
 | 
			
		||||
    resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==}
 | 
			
		||||
    dev: false
 | 
			
		||||
 | 
			
		||||
  /binary-extensions@2.2.0:
 | 
			
		||||
    resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
 | 
			
		||||
    engines: {node: '>=8'}
 | 
			
		||||
 | 
			
		||||
  /braces@3.0.2:
 | 
			
		||||
    resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
 | 
			
		||||
    engines: {node: '>=8'}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      fill-range: 7.0.1
 | 
			
		||||
 | 
			
		||||
  /chokidar@3.5.3:
 | 
			
		||||
    resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
 | 
			
		||||
    engines: {node: '>= 8.10.0'}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      anymatch: 3.1.3
 | 
			
		||||
      braces: 3.0.2
 | 
			
		||||
      glob-parent: 5.1.2
 | 
			
		||||
      is-binary-path: 2.1.0
 | 
			
		||||
      is-glob: 4.0.3
 | 
			
		||||
      normalize-path: 3.0.0
 | 
			
		||||
      readdirp: 3.6.0
 | 
			
		||||
    optionalDependencies:
 | 
			
		||||
      fsevents: 2.3.2
 | 
			
		||||
 | 
			
		||||
  /csstype@2.6.21:
 | 
			
		||||
    resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==}
 | 
			
		||||
 | 
			
		||||
  /dayjs@1.11.8:
 | 
			
		||||
    resolution: {integrity: sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ==}
 | 
			
		||||
    dev: false
 | 
			
		||||
 | 
			
		||||
  /element-plus@2.3.6(vue@3.2.47):
 | 
			
		||||
    resolution: {integrity: sha512-GLz0pXUYI2zRfIgyI6W7SWmHk6dSEikP9yR++hsQUyy63+WjutoiGpA3SZD4cGPSXUzRFeKfVr8CnYhK5LqXZw==}
 | 
			
		||||
    peerDependencies:
 | 
			
		||||
      vue: ^3.2.0
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@ctrl/tinycolor': 3.6.0
 | 
			
		||||
      '@element-plus/icons-vue': 2.1.0(vue@3.2.47)
 | 
			
		||||
      '@floating-ui/dom': 1.3.0
 | 
			
		||||
      '@popperjs/core': /@sxzz/popperjs-es@2.11.7
 | 
			
		||||
      '@types/lodash': 4.14.195
 | 
			
		||||
      '@types/lodash-es': 4.17.7
 | 
			
		||||
      '@vueuse/core': 9.13.0(vue@3.2.47)
 | 
			
		||||
      async-validator: 4.2.5
 | 
			
		||||
      dayjs: 1.11.8
 | 
			
		||||
      escape-html: 1.0.3
 | 
			
		||||
      lodash: 4.17.21
 | 
			
		||||
      lodash-es: 4.17.21
 | 
			
		||||
      lodash-unified: 1.0.3(@types/lodash-es@4.17.7)(lodash-es@4.17.21)(lodash@4.17.21)
 | 
			
		||||
      memoize-one: 6.0.0
 | 
			
		||||
      normalize-wheel-es: 1.2.0
 | 
			
		||||
      vue: 3.2.47
 | 
			
		||||
    transitivePeerDependencies:
 | 
			
		||||
      - '@vue/composition-api'
 | 
			
		||||
    dev: false
 | 
			
		||||
 | 
			
		||||
  /esbuild@0.17.19:
 | 
			
		||||
    resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
    hasBin: true
 | 
			
		||||
    requiresBuild: true
 | 
			
		||||
    optionalDependencies:
 | 
			
		||||
      '@esbuild/android-arm': 0.17.19
 | 
			
		||||
      '@esbuild/android-arm64': 0.17.19
 | 
			
		||||
      '@esbuild/android-x64': 0.17.19
 | 
			
		||||
      '@esbuild/darwin-arm64': 0.17.19
 | 
			
		||||
      '@esbuild/darwin-x64': 0.17.19
 | 
			
		||||
      '@esbuild/freebsd-arm64': 0.17.19
 | 
			
		||||
      '@esbuild/freebsd-x64': 0.17.19
 | 
			
		||||
      '@esbuild/linux-arm': 0.17.19
 | 
			
		||||
      '@esbuild/linux-arm64': 0.17.19
 | 
			
		||||
      '@esbuild/linux-ia32': 0.17.19
 | 
			
		||||
      '@esbuild/linux-loong64': 0.17.19
 | 
			
		||||
      '@esbuild/linux-mips64el': 0.17.19
 | 
			
		||||
      '@esbuild/linux-ppc64': 0.17.19
 | 
			
		||||
      '@esbuild/linux-riscv64': 0.17.19
 | 
			
		||||
      '@esbuild/linux-s390x': 0.17.19
 | 
			
		||||
      '@esbuild/linux-x64': 0.17.19
 | 
			
		||||
      '@esbuild/netbsd-x64': 0.17.19
 | 
			
		||||
      '@esbuild/openbsd-x64': 0.17.19
 | 
			
		||||
      '@esbuild/sunos-x64': 0.17.19
 | 
			
		||||
      '@esbuild/win32-arm64': 0.17.19
 | 
			
		||||
      '@esbuild/win32-ia32': 0.17.19
 | 
			
		||||
      '@esbuild/win32-x64': 0.17.19
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /escape-html@1.0.3:
 | 
			
		||||
    resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
 | 
			
		||||
    dev: false
 | 
			
		||||
 | 
			
		||||
  /estree-walker@2.0.2:
 | 
			
		||||
    resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
 | 
			
		||||
 | 
			
		||||
  /fill-range@7.0.1:
 | 
			
		||||
    resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
 | 
			
		||||
    engines: {node: '>=8'}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      to-regex-range: 5.0.1
 | 
			
		||||
 | 
			
		||||
  /fsevents@2.3.2:
 | 
			
		||||
    resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
 | 
			
		||||
    engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
 | 
			
		||||
    os: [darwin]
 | 
			
		||||
    requiresBuild: true
 | 
			
		||||
    optional: true
 | 
			
		||||
 | 
			
		||||
  /glob-parent@5.1.2:
 | 
			
		||||
    resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
 | 
			
		||||
    engines: {node: '>= 6'}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      is-glob: 4.0.3
 | 
			
		||||
 | 
			
		||||
  /immutable@4.3.0:
 | 
			
		||||
    resolution: {integrity: sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==}
 | 
			
		||||
 | 
			
		||||
  /is-binary-path@2.1.0:
 | 
			
		||||
    resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
 | 
			
		||||
    engines: {node: '>=8'}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      binary-extensions: 2.2.0
 | 
			
		||||
 | 
			
		||||
  /is-extglob@2.1.1:
 | 
			
		||||
    resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
 | 
			
		||||
    engines: {node: '>=0.10.0'}
 | 
			
		||||
 | 
			
		||||
  /is-glob@4.0.3:
 | 
			
		||||
    resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
 | 
			
		||||
    engines: {node: '>=0.10.0'}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      is-extglob: 2.1.1
 | 
			
		||||
 | 
			
		||||
  /is-number@7.0.0:
 | 
			
		||||
    resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
 | 
			
		||||
    engines: {node: '>=0.12.0'}
 | 
			
		||||
 | 
			
		||||
  /lodash-es@4.17.21:
 | 
			
		||||
    resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
 | 
			
		||||
    dev: false
 | 
			
		||||
 | 
			
		||||
  /lodash-unified@1.0.3(@types/lodash-es@4.17.7)(lodash-es@4.17.21)(lodash@4.17.21):
 | 
			
		||||
    resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==}
 | 
			
		||||
    peerDependencies:
 | 
			
		||||
      '@types/lodash-es': '*'
 | 
			
		||||
      lodash: '*'
 | 
			
		||||
      lodash-es: '*'
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@types/lodash-es': 4.17.7
 | 
			
		||||
      lodash: 4.17.21
 | 
			
		||||
      lodash-es: 4.17.21
 | 
			
		||||
    dev: false
 | 
			
		||||
 | 
			
		||||
  /lodash@4.17.21:
 | 
			
		||||
    resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
 | 
			
		||||
    dev: false
 | 
			
		||||
 | 
			
		||||
  /magic-string@0.25.9:
 | 
			
		||||
    resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      sourcemap-codec: 1.4.8
 | 
			
		||||
 | 
			
		||||
  /memoize-one@6.0.0:
 | 
			
		||||
    resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==}
 | 
			
		||||
    dev: false
 | 
			
		||||
 | 
			
		||||
  /nanoid@3.3.6:
 | 
			
		||||
    resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
 | 
			
		||||
    engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
 | 
			
		||||
    hasBin: true
 | 
			
		||||
 | 
			
		||||
  /normalize-path@3.0.0:
 | 
			
		||||
    resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
 | 
			
		||||
    engines: {node: '>=0.10.0'}
 | 
			
		||||
 | 
			
		||||
  /normalize-wheel-es@1.2.0:
 | 
			
		||||
    resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==}
 | 
			
		||||
    dev: false
 | 
			
		||||
 | 
			
		||||
  /picocolors@1.0.0:
 | 
			
		||||
    resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
 | 
			
		||||
 | 
			
		||||
  /picomatch@2.3.1:
 | 
			
		||||
    resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
 | 
			
		||||
    engines: {node: '>=8.6'}
 | 
			
		||||
 | 
			
		||||
  /postcss@8.4.24:
 | 
			
		||||
    resolution: {integrity: sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==}
 | 
			
		||||
    engines: {node: ^10 || ^12 || >=14}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      nanoid: 3.3.6
 | 
			
		||||
      picocolors: 1.0.0
 | 
			
		||||
      source-map-js: 1.0.2
 | 
			
		||||
 | 
			
		||||
  /readdirp@3.6.0:
 | 
			
		||||
    resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
 | 
			
		||||
    engines: {node: '>=8.10.0'}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      picomatch: 2.3.1
 | 
			
		||||
 | 
			
		||||
  /rollup@3.25.0:
 | 
			
		||||
    resolution: {integrity: sha512-FnJkNRst2jEZGw7f+v4hFo6UTzpDKrAKcHZWcEfm5/GJQ5CK7wgb4moNLNAe7npKUev7yQn1AY/YbZRIxOv6Qg==}
 | 
			
		||||
    engines: {node: '>=14.18.0', npm: '>=8.0.0'}
 | 
			
		||||
    hasBin: true
 | 
			
		||||
    optionalDependencies:
 | 
			
		||||
      fsevents: 2.3.2
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /sass@1.63.3:
 | 
			
		||||
    resolution: {integrity: sha512-ySdXN+DVpfwq49jG1+hmtDslYqpS7SkOR5GpF6o2bmb1RL/xS+wvPmegMvMywyfsmAV6p7TgwXYGrCZIFFbAHg==}
 | 
			
		||||
    engines: {node: '>=14.0.0'}
 | 
			
		||||
    hasBin: true
 | 
			
		||||
    dependencies:
 | 
			
		||||
      chokidar: 3.5.3
 | 
			
		||||
      immutable: 4.3.0
 | 
			
		||||
      source-map-js: 1.0.2
 | 
			
		||||
 | 
			
		||||
  /source-map-js@1.0.2:
 | 
			
		||||
    resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
 | 
			
		||||
    engines: {node: '>=0.10.0'}
 | 
			
		||||
 | 
			
		||||
  /source-map@0.6.1:
 | 
			
		||||
    resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
 | 
			
		||||
    engines: {node: '>=0.10.0'}
 | 
			
		||||
 | 
			
		||||
  /sourcemap-codec@1.4.8:
 | 
			
		||||
    resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
 | 
			
		||||
    deprecated: Please use @jridgewell/sourcemap-codec instead
 | 
			
		||||
 | 
			
		||||
  /to-fast-properties@2.0.0:
 | 
			
		||||
    resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
 | 
			
		||||
    engines: {node: '>=4'}
 | 
			
		||||
 | 
			
		||||
  /to-regex-range@5.0.1:
 | 
			
		||||
    resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
 | 
			
		||||
    engines: {node: '>=8.0'}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      is-number: 7.0.0
 | 
			
		||||
 | 
			
		||||
  /vite@4.3.9(sass@1.63.3):
 | 
			
		||||
    resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==}
 | 
			
		||||
    engines: {node: ^14.18.0 || >=16.0.0}
 | 
			
		||||
    hasBin: true
 | 
			
		||||
    peerDependencies:
 | 
			
		||||
      '@types/node': '>= 14'
 | 
			
		||||
      less: '*'
 | 
			
		||||
      sass: '*'
 | 
			
		||||
      stylus: '*'
 | 
			
		||||
      sugarss: '*'
 | 
			
		||||
      terser: ^5.4.0
 | 
			
		||||
    peerDependenciesMeta:
 | 
			
		||||
      '@types/node':
 | 
			
		||||
        optional: true
 | 
			
		||||
      less:
 | 
			
		||||
        optional: true
 | 
			
		||||
      sass:
 | 
			
		||||
        optional: true
 | 
			
		||||
      stylus:
 | 
			
		||||
        optional: true
 | 
			
		||||
      sugarss:
 | 
			
		||||
        optional: true
 | 
			
		||||
      terser:
 | 
			
		||||
        optional: true
 | 
			
		||||
    dependencies:
 | 
			
		||||
      esbuild: 0.17.19
 | 
			
		||||
      postcss: 8.4.24
 | 
			
		||||
      rollup: 3.25.0
 | 
			
		||||
      sass: 1.63.3
 | 
			
		||||
    optionalDependencies:
 | 
			
		||||
      fsevents: 2.3.2
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /vue-demi@0.14.5(vue@3.2.47):
 | 
			
		||||
    resolution: {integrity: sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
    hasBin: true
 | 
			
		||||
    requiresBuild: true
 | 
			
		||||
    peerDependencies:
 | 
			
		||||
      '@vue/composition-api': ^1.0.0-rc.1
 | 
			
		||||
      vue: ^3.0.0-0 || ^2.6.0
 | 
			
		||||
    peerDependenciesMeta:
 | 
			
		||||
      '@vue/composition-api':
 | 
			
		||||
        optional: true
 | 
			
		||||
    dependencies:
 | 
			
		||||
      vue: 3.2.47
 | 
			
		||||
    dev: false
 | 
			
		||||
 | 
			
		||||
  /vue-router@4.2.2(vue@3.2.47):
 | 
			
		||||
    resolution: {integrity: sha512-cChBPPmAflgBGmy3tBsjeoe3f3VOSG6naKyY5pjtrqLGbNEXdzCigFUHgBvp9e3ysAtFtEx7OLqcSDh/1Cq2TQ==}
 | 
			
		||||
    peerDependencies:
 | 
			
		||||
      vue: ^3.2.0
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@vue/devtools-api': 6.5.0
 | 
			
		||||
      vue: 3.2.47
 | 
			
		||||
    dev: false
 | 
			
		||||
 | 
			
		||||
  /vue@3.2.47:
 | 
			
		||||
    resolution: {integrity: sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@vue/compiler-dom': 3.2.47
 | 
			
		||||
      '@vue/compiler-sfc': 3.2.47
 | 
			
		||||
      '@vue/runtime-dom': 3.2.47
 | 
			
		||||
      '@vue/server-renderer': 3.2.47(vue@3.2.47)
 | 
			
		||||
      '@vue/shared': 3.2.47
 | 
			
		||||
							
								
								
									
										1
									
								
								view/public/vite.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								view/public/vite.svg
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 1.5 KiB  | 
							
								
								
									
										24
									
								
								view/src/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								view/src/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,24 @@
 | 
			
		||||
# Logs
 | 
			
		||||
logs
 | 
			
		||||
*.log
 | 
			
		||||
npm-debug.log*
 | 
			
		||||
yarn-debug.log*
 | 
			
		||||
yarn-error.log*
 | 
			
		||||
pnpm-debug.log*
 | 
			
		||||
lerna-debug.log*
 | 
			
		||||
 | 
			
		||||
node_modules
 | 
			
		||||
dist
 | 
			
		||||
dist-ssr
 | 
			
		||||
*.local
 | 
			
		||||
 | 
			
		||||
# Editor directories and files
 | 
			
		||||
.vscode/*
 | 
			
		||||
!.vscode/extensions.json
 | 
			
		||||
.idea
 | 
			
		||||
.DS_Store
 | 
			
		||||
*.suo
 | 
			
		||||
*.ntvs*
 | 
			
		||||
*.njsproj
 | 
			
		||||
*.sln
 | 
			
		||||
*.sw?
 | 
			
		||||
							
								
								
									
										13
									
								
								view/src/App.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								view/src/App.vue
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,13 @@
 | 
			
		||||
<script setup>
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<template>
 | 
			
		||||
  <router-view></router-view>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<style scoped>
 | 
			
		||||
*{
 | 
			
		||||
  padding: 0;
 | 
			
		||||
  margin: 0;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
							
								
								
									
										1
									
								
								view/src/assets/vue.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								view/src/assets/vue.svg
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="37.07" height="36" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 198"><path fill="#41B883" d="M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0h47.36Z"></path><path fill="#41B883" d="m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0H0Z"></path><path fill="#35495E" d="M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0H50.56Z"></path></svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 496 B  | 
							
								
								
									
										40
									
								
								view/src/components/HelloWorld.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								view/src/components/HelloWorld.vue
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,40 @@
 | 
			
		||||
<script setup>
 | 
			
		||||
import { ref } from 'vue'
 | 
			
		||||
 | 
			
		||||
defineProps({
 | 
			
		||||
  msg: String,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
const count = ref(0)
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<template>
 | 
			
		||||
  <h1>{{ msg }}</h1>
 | 
			
		||||
 | 
			
		||||
  <div class="card">
 | 
			
		||||
    <button type="button" @click="count++">count is {{ count }}</button>
 | 
			
		||||
    <p>
 | 
			
		||||
      Edit
 | 
			
		||||
      <code>components/HelloWorld.vue</code> to test HMR
 | 
			
		||||
    </p>
 | 
			
		||||
  </div>
 | 
			
		||||
 | 
			
		||||
  <p>
 | 
			
		||||
    Check out
 | 
			
		||||
    <a href="https://vuejs.org/guide/quick-start.html#local" target="_blank"
 | 
			
		||||
      >create-vue</a
 | 
			
		||||
    >, the official Vue + Vite starter
 | 
			
		||||
  </p>
 | 
			
		||||
  <p>
 | 
			
		||||
    Install
 | 
			
		||||
    <a href="https://github.com/vuejs/language-tools" target="_blank">Volar</a>
 | 
			
		||||
    in your IDE for a better DX
 | 
			
		||||
  </p>
 | 
			
		||||
  <p class="read-the-docs">Click on the Vite and Vue logos to learn more</p>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<style scoped>
 | 
			
		||||
.read-the-docs {
 | 
			
		||||
  color: #888;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
							
								
								
									
										8
									
								
								view/src/main.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								view/src/main.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,8 @@
 | 
			
		||||
import { createApp } from 'vue'
 | 
			
		||||
import './style.css'
 | 
			
		||||
import App from './App.vue'
 | 
			
		||||
import { router } from './router'
 | 
			
		||||
import ElementPlus from 'element-plus'
 | 
			
		||||
import 'element-plus/dist/index.css'
 | 
			
		||||
 | 
			
		||||
createApp(App).use(router).use(ElementPlus).mount('#app')
 | 
			
		||||
							
								
								
									
										95
									
								
								view/src/page/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								view/src/page/index.vue
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,95 @@
 | 
			
		||||
<template>
 | 
			
		||||
    <div class="url">
 | 
			
		||||
        <el-form-item label="视频地址">
 | 
			
		||||
            <div style="display: flex;width: 100%;">
 | 
			
		||||
                <el-input style="width: 100%;" v-model="form.name" />
 | 
			
		||||
                <el-button style="flex-shrink: 0;margin: 0 10px;" @click="getlist" type="primary">获取</el-button>
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
        <el-form-item label="第几集开始">
 | 
			
		||||
            <div style="display: flex;">
 | 
			
		||||
                <el-input v-model="form.start" />
 | 
			
		||||
                <el-button style="flex-shrink: 0;margin: 0 10px;" @click="setlist" type="primary">设置</el-button>
 | 
			
		||||
                <el-button style="flex-shrink: 0;margin: 0 10px;" @click="dow" type="primary">下载</el-button>
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
        </el-form-item>
 | 
			
		||||
        <el-table ref="table" :data="tableData" style="width: 100%">
 | 
			
		||||
            <el-table-column type="selection" width="55" />
 | 
			
		||||
            <el-table-column label="title" prop="title">
 | 
			
		||||
            </el-table-column>
 | 
			
		||||
            <el-table-column label="url" prop="url" />
 | 
			
		||||
        </el-table>
 | 
			
		||||
        <el-dialog :fullscreen="true" :close-on-click-modal="false" :close-on-press-escape="false" v-model="dialogVisible" :show-close="false" title="Tips" width="30%" >
 | 
			
		||||
            <div style="width: 100%;height: 100%;overflow-y: auto;">
 | 
			
		||||
                <div v-for="i in msg">{{ i }}</div>
 | 
			
		||||
            </div>
 | 
			
		||||
           
 | 
			
		||||
        </el-dialog>
 | 
			
		||||
    </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
import { ref } from 'vue';
 | 
			
		||||
import { ElLoading,ElMessage } from 'element-plus'
 | 
			
		||||
const dialogVisible = ref(false)
 | 
			
		||||
const form = ref({
 | 
			
		||||
    name: "https://v.qq.com/x/cover/mzc002007vp35qj.html",
 | 
			
		||||
    start: 1
 | 
			
		||||
})
 | 
			
		||||
const tableData = ref([])
 | 
			
		||||
const table = ref()
 | 
			
		||||
function getlist() {
 | 
			
		||||
    let load = ElLoading.service()
 | 
			
		||||
    window.getlist(form.value.name).then((res) => {
 | 
			
		||||
        console.log(res)
 | 
			
		||||
        tableData.value = res
 | 
			
		||||
        load.close()
 | 
			
		||||
    })
 | 
			
		||||
}
 | 
			
		||||
function setlist() {
 | 
			
		||||
    table.value.clearSelection()
 | 
			
		||||
    for (let i = form.value.start - 1; i < tableData.value.length; i++) {
 | 
			
		||||
        console.log(i)
 | 
			
		||||
        table.value.toggleRowSelection(tableData.value[i], undefined)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
function handleSelectionChange(i) {
 | 
			
		||||
    console.log(i)
 | 
			
		||||
}
 | 
			
		||||
const msg = ref([])
 | 
			
		||||
function log(res,i,end) {
 | 
			
		||||
    console.log(end)
 | 
			
		||||
    if(end){
 | 
			
		||||
        res()
 | 
			
		||||
    }else{
 | 
			
		||||
        msg.value.unshift(i)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function down(info) {
 | 
			
		||||
    return new Promise((res) => {
 | 
			
		||||
        const callback = log.bind(this,res)
 | 
			
		||||
        window.dowload(info,callback)
 | 
			
		||||
    })
 | 
			
		||||
}
 | 
			
		||||
async function dow() {
 | 
			
		||||
    dialogVisible.value = true
 | 
			
		||||
    let list = table.value.getSelectionRows()
 | 
			
		||||
    for(let i of list){
 | 
			
		||||
        await down(i)
 | 
			
		||||
    }
 | 
			
		||||
    dialogVisible.value = false
 | 
			
		||||
    ElMessage({
 | 
			
		||||
        showClose: true,
 | 
			
		||||
        message: '下载完成',
 | 
			
		||||
        type: 'success',
 | 
			
		||||
        duration:0
 | 
			
		||||
    })
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
.url {}
 | 
			
		||||
</style>
 | 
			
		||||
							
								
								
									
										13
									
								
								view/src/router/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								view/src/router/index.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,13 @@
 | 
			
		||||
import { createRouter,createWebHashHistory } from "vue-router";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const routes = [{
 | 
			
		||||
    path:"/",
 | 
			
		||||
    component:()=> import("../page/index.vue")
 | 
			
		||||
}]
 | 
			
		||||
 | 
			
		||||
export const router = createRouter({
 | 
			
		||||
    history: createWebHashHistory(),
 | 
			
		||||
    routes
 | 
			
		||||
})
 | 
			
		||||
							
								
								
									
										0
									
								
								view/src/style.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								view/src/style.css
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										8
									
								
								view/vite.config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								view/vite.config.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,8 @@
 | 
			
		||||
import { defineConfig } from 'vite'
 | 
			
		||||
import vue from '@vitejs/plugin-vue'
 | 
			
		||||
 | 
			
		||||
// https://vitejs.dev/config/
 | 
			
		||||
export default defineConfig({
 | 
			
		||||
  plugins: [vue()],
 | 
			
		||||
  base:"./"
 | 
			
		||||
})
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user