Browse Source

在线表格

yangbifan 2 years ago
parent
commit
f96781c3b2

+ 7 - 7
package.json

@@ -3,13 +3,13 @@
   "version": "0.1.0",
   "private": true,
   "scripts": {
-    "abc":"vue-cli-service build",
-    "serve": "vue-cli-service serve --mode development", 
-    "serve:test": "vue-cli-service serve --mode test", 
-    "build": "vue-cli-service build  --mode development", 
-    "build:devs": "vue-cli-service build  --mode devs", 
+    "abc": "vue-cli-service build",
+    "serve": "vue-cli-service serve --mode development",
+    "serve:test": "vue-cli-service serve --mode test",
+    "build": "vue-cli-service build  --mode development",
+    "build:devs": "vue-cli-service build  --mode devs",
     "build:test": "vue-cli-service build  --mode test",
-    "build:next": "vue-cli-service build  --mode production", 
+    "build:next": "vue-cli-service build  --mode production",
     "lint": "vue-cli-service lint",
     "analyz": "vue-cli-service build"
   },
@@ -28,7 +28,7 @@
     "file-saver": "^2.0.5",
     "form-making": "^1.2.10",
     "html2canvas": "^1.0.0-rc.7",
-    "jquery": "^3.6.0",
+    "jquery": "^3.6.4",
     "jquery-ui": "^1.12.1",
     "js-audio-recorder": "^1.0.7",
     "jsplumb": "^2.15.5",

+ 1 - 0
public/index.html

@@ -21,6 +21,7 @@
   <link rel='stylesheet' href='/static/js/luckysheet/assets/iconfont/iconfont.css' />
   <script src="./static/js/base64.min.js"></script>
   <script src="/static/js/ace.js"></script>
+  <script src="./static/js/jquery-1.8.2.min.js"></script>
 </head>
 
 <body>

File diff suppressed because it is too large
+ 508 - 582
public/static/views/onlineShareExcel.html


File diff suppressed because it is too large
+ 637 - 0
public/static/views/onlineShareExcelMarkets.html


File diff suppressed because it is too large
+ 720 - 0
public/static/views/onlineShareExcels.html


+ 1 - 0
src/assets/js/util.js

@@ -1,6 +1,7 @@
 //
 // import accounting from 'accounting-js'
 // import idcard from 'idcard' //https://www.npmjs.com/package/idcard
+
 let moment = require("moment");
 let Decimal = require('decimal');
 let util = {

+ 2 - 2
src/components/newTree.vue

@@ -218,7 +218,7 @@ export default {
   display: flex;
   width: 100%;
   justify-content: center;
-  height: 80%;
+  height: 100%;
 }
 
 ::v-deep .el-icon-caret-right {
@@ -242,7 +242,7 @@ export default {
 }
 
 .flex-transfer {
-  width: 50%;
+  width: 80%;
   height: 100%;
   margin-left: 30px;
 }

+ 4 - 0
src/config/dev.js

@@ -38,12 +38,16 @@ let prod = {
 export const getConfig  = () =>{
     switch(process.env.VUE_APP_ENV){
         case "development":
+            window.sessionStorage.setItem('getConfig',JSON.stringify(dev) )
             return dev;
         case 'test':
+            window.sessionStorage.setItem('getConfig',JSON.stringify(test))
             return test;
         case 'production':
+            window.sessionStorage.setItem('getConfig',JSON.stringify(prod))
             return prod
         case 'devs':
+            window.sessionStorage.setItem('getConfig',JSON.stringify(devs))
             return devs; 
     }
 }

+ 2 - 0
src/main.js

@@ -14,6 +14,7 @@ import VueContextMenu from 'vue-contextmenu'
 import Urls from './assets/js/url.js' //路径共用
 import excelUrl from '../config/excel.env.js'
 import util from './assets/js/util.js'
+
 import common from './assets/js/common.js' //公共注册
 import http from './assets/js/http.js'
 
@@ -25,6 +26,7 @@ Vue.use(FormMaking)
 Vue.prototype.$url = Urls
 Vue.prototype.$excelUrl = excelUrl
 Vue.prototype.$util = util
+// Vue.prototype.$getConfig = getConfig
 Vue.prototype.common = common
 Vue.prototype.$axios = http //axios 设置
 Vue.use(fullscreen)

+ 54 - 115
src/pages/main/onlineExcel/index.vue

@@ -37,18 +37,14 @@
                 <div class="inner-right">
                     <div style="overflow: hidden;" v-if="showExcel == false">
                         <toolList @iconCli='iconCli' :tooltit='tooltit' style="margin: 10px"></toolList>
-                        <div style="margin-top: 20px;float: left;display: flex;" class="bigbtns">
-                            <el-button style="margin:0 20px 0 20px;" class="btn-check" size="medium" type="primary"
+                        <div style="margin-top: 20px;float: left;" class="bigbtns">
+                            <el-button style="margin-left: 20px;" class="btn-check" size="medium" type="primary"
                                 @click="addNewStatus = true">新建
                             </el-button>
-                            <div>
-                                <input id="upload-file" @click="handleUpload" name="file" type="file" />
-                                <el-button type="primary">导入</el-button>
-
-                            </div>
-
+                            <!-- <el-button style="margin-left: 20px;" class="btn-check" size="medium" type="primary"
+                                @click="shareStatus = true">新建2222
+                            </el-button> -->
                         </div>
-
                         <div style="margin-top: 20px;float: right;margin-right: 20px" class="bigbtns"
                             v-if="selectionSize != 0">
                             <el-button style="margin-left: 5px;" class="btn-check" size="small" type="primary"
@@ -99,28 +95,22 @@
 
                     <div class="container" id="container" v-else>
                         <fullscreen :fullscreen.sync="excelFullScreen" class="container">
-                            <iframe id="excelIframe" height="100%" width="100%" src="/static/views/onlineShareExcel.html"
-                                frameborder="0"></iframe>
+                            <iframe id="excelIframe" height="100%" width="100%"
+                                src="/marketfront/static/views/onlineShareExcel.html" frameborder="0"></iframe>
                         </fullscreen>
                     </div>
                 </div>
             </div>
-            <el-dialog :title="'新建'" :visible.sync="addNewStatus" width="450px" :destroy-on-close="true"
+            <el-dialog :title="'新建'" :visible.sync="addNewStatus" width="300px" :destroy-on-close="true"
                 :modal-append-to-body="false" :close-on-click-modal="false">
                 <div>
                     <!--                <el-button type="primary" @click="addExcel()" plain class="iconfont icon-wenjian">在线文档</el-button>-->
                     <!--                <el-button type="primary" @click="addFolderStatus = true" plain class="iconfont icon-wenjianjia">文件夹</el-button>-->
-                    <div style="padding-bottom: 30px;display:flex">
+                    <div style="padding-bottom: 30px">
                         <div style="width: 85px;display: inline-block;cursor: pointer" @click="addExcel()">
                             <span class="iconfont icon-wenjian" style="font-size: 80px;color: dodgerblue"></span>
                             <p style="margin-left: 20px;margin-top: 10px">在线文档</p>
                         </div>
-                        <div style="width: 85px;display: inline-block;margin-left: 70px;cursor: pointer">
-                            <span class="iconfont icon-excel" style="font-size: 80px;color: dodgerblue"></span>
-                            <input id="upload-file" style="height: 130px;bottom: 20px;
-                right: 44%;" name="file" type="file" @change="handleUpload">
-                            <span style="top: 10px;position: relative;left: 10px;">在线导入</span>
-                        </div>
                         <div style="width: 85px;display: inline-block;margin-left: 70px;cursor: pointer"
                             @click="addFolderStatus = true">
                             <span class="iconfont icon-wenjianjia" style="font-size: 80px;color: dodgerblue"></span>
@@ -154,28 +144,38 @@
                     <el-button type="primary" @click="checkexa = true" plain>指定人可编辑</el-button>
                 </div>
             </el-dialog>
-            <el-dialog title="选择填报人" :visible.sync="checkexa" width="50%" :destroy-on-close="true"
-                :modal-append-to-body="false" :close-on-click-modal="false" v-loading="shareLoading">
-                <div>
-                    <el-form :model="exaList" ref="addInfoList">
-                        <el-form-item prop="processUserId" class="info-line online">
-                            <span style="width: 80px;margin-right: 20px">审批人员</span>
-                            <deptTreeUserNew class="tree" @treeCheck="treeCheckonly" :defaultList="defaultList"
-                                :type="depttype" :closeList="closeList"></deptTreeUserNew>
-                            <div class="tree treeUser">
-                                <p v-for="(item, index) in treeList" :key="index">{{ item.receiveName }}
-                                    <i @click="deletes(item, index)" class="el-icon-error"></i>
+            <div class="flex-dialog">
+                <el-dialog title="选择填报人" :visible.sync="checkexa" width="86%" style="height:100%  ;"
+                    :destroy-on-close="true" :modal-append-to-body="false" :close-on-click-modal="false"
+                    v-loading="shareLoading">
+                    <div class="flex-dialog">
+                        <el-row style="height:80%  ;">
+                            <el-col :span="24" style="height:100%  ;">
+                                <deptTreeUserNew class="tree" @treeCheck="treeCheckonly" :defaultList="defaultList"
+                                    :type="depttype" :closeList="closeList"></deptTreeUserNew>
+                            </el-col>
+
+                        </el-row>
+                        <!-- <el-form :model="exaList" ref="addInfoList"> -->
+                        <!-- <el-form-item prop="processUserId" class="info-line online"> -->
+                        <!-- <span style="width: 80px;margin-right: 20px">审批人员</span> -->
+
+                        <!-- <div class="tree treeUser">
+                                <p v-for="(item,index) in treeList" :key="index">{{ item.receiveName }}
+                                    <i @click="deletes(item,index)" class="el-icon-error"></i>
                                 </p>
-                            </div>
-                        </el-form-item>
-                    </el-form>
+                            </div> -->
+                        <!-- </el-form-item> -->
+                        <!-- </el-form> -->
 
-                    <div slot="footer" style="text-align: right;padding-bottom: 20px">
-                        <el-button type="primary" @click="checkProcessUser(3)">确 定</el-button>
-                        <el-button @click="checkexa = false">取 消</el-button>
+                        <div slot="footer" style="text-align: right;padding-bottom: 20px">
+                            <el-button type="primary" @click="checkProcessUser(3)">确 定</el-button>
+                            <el-button @click="checkexa = false">取 消</el-button>
+                        </div>
                     </div>
-                </div>
-            </el-dialog>
+                </el-dialog>
+            </div>
+
             <el-dialog title="移动到" :visible.sync="moveStatus" width="500px" :destroy-on-close="true"
                 :modal-append-to-body="false" :close-on-click-modal="false">
                 <div>
@@ -212,14 +212,12 @@
 </template>
 
 <script>
-import LuckyExcel from "luckyexcel";
 import pForm from "../../../components/p-form";
 import toolList from "../../../components/toolList";
 import myMessage from "../../../components/myMessage.vue";
 import myMessageNew from "../../../components/myMessageNew.vue";
 import myMessageRadio from "../../../components/myMessageRadio.vue";
-import deptTreeUserNew from "../../../components/deptTreeUserNew.vue"
-import { ajaxJson } from '../../../../public/static/js/util'
+import deptTreeUserNew from "../../../components/newTree.vue"
 
 export default {
     components: {
@@ -285,71 +283,6 @@ export default {
         }
     },
     methods: {
-        //外部导入
-        addExport(e) {
-            this.$http({
-                url: '/market/cOnlineExcel/addExcel',
-                method: "post",
-                headers: {
-                    "Content-Type": "application/json",
-                },
-                data: {
-                    folderId: '',
-                },
-            }).then((res) => {
-                console.log(res);
-                res.data.desc
-                this.startUpload(e, res.data.desc)
-            });
-        },
-        startUpload(e, res) {
-            let _this = this;
-            let files = e.target.files;
-            if (files == null || files.length == 0) {
-                window.top.$vm.$message({
-                    message: '没有文件导入',
-                    type: 'info'
-                })
-                return;
-            }
-            let name = files[0].name;
-            let suffixArr = name.split("."),
-                suffix = suffixArr[suffixArr.length - 1];
-            if (suffix != "xlsx") {
-                window.top.$vm.$message({
-                    message: '目前只支持xlsx文件的导入',
-                    type: 'info'
-                })
-                return;
-            }
-            // 解析文件
-            LuckyExcel.transformExcelToLucky(files[0], function (exportJson, luckysheetfile) {
-                if (exportJson.sheets == null || exportJson.sheets.length == 0) {
-                    window.top.$vm.$message({
-                        message: '无法读取excel文件的内容,当前不支持xls文件',
-                        type: 'info'
-                    })
-                    return;
-                }
-                let exceljson = JSON.stringify(exportJson)
-                _this.$util.ajaxJson("正在导入中", "http://10.149.85.91:7777/sheet/excel/importFile", { exceldata: exceljson, id: res }, function (res) {
-                    // console.log('[ res ] >', res)
-                    _this.addNewStatus = false;
-                    document.getElementById('excelId').setAttribute("value", res.id);
-                    _this.showExcel = true;
-
-
-                });
-            }
-            );
-            console.log(e); //文件
-            console.log(res);//excel id
-
-        },
-        handleUpload(e) {
-            this.addExport(e)
-
-        },
         processWoNo() {
             console.log(this.woNo);
             var _this = this;
@@ -379,7 +312,6 @@ export default {
                     //放入id,切换到excel模式
                     document.getElementById('excelId').setAttribute("value", id);
                     _this.showExcel = true;
-                    console.log(_this.showExcel);
                 }
             });
         },
@@ -461,7 +393,7 @@ export default {
             _this.shareLoading = true;
             if (shareType == 3) {
                 this.treeList.map((o) => {
-                    deptList.push(o.receiveNo);
+                    deptList.push(o.key);
                 });
             }
             if (shareType == 1) {
@@ -539,7 +471,6 @@ export default {
         },
         //打开excel
         moveToEdit(row) {
-
             //放入id,切换到excel模式
             document.getElementById('excelId').setAttribute("value", row.id);
             this.showExcel = true;
@@ -561,7 +492,6 @@ export default {
                     folderId: folderId,
                 },
             }).then((res) => {
-                console.log(res);
                 if (res.data.result === 1) {
                     _this.$message({
                         message: res.data.desc,
@@ -867,11 +797,20 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-#upload-file {
-    position: absolute;
-    width: 70px;
-    height: 40px;
-    opacity: 0;
+::v-deep .flex-dialog .el-dialog {
+    height: 600px !important;
+}
+
+.flex-dialog {
+    height: 100%;
+}
+
+.el-dialog {
+    height: 100% !important;
+}
+
+::v-deep .flex-dialog .el-dialog__body {
+    height: 100% !important;
 }
 
 .container {

+ 40 - 13
src/pages/main/onlineExcelMarket/index.vue

@@ -42,6 +42,9 @@
                             <el-button style="margin-left: 20px;" class="btn-check" size="medium" type="primary"
                                        @click="addNewStatus = true">新建
                             </el-button>
+                            <!-- <el-button style="margin-left: 20px;" class="btn-check" size="medium" type="primary"
+                                @click="shareStatus = true">新建2222
+                            </el-button> -->
                         </div>
                         <div style="margin-top: 20px;float: right;margin-right: 20px" class="bigbtns"
                              v-if="selectionSize != 0">
@@ -144,21 +147,29 @@
                     <el-button type="primary" @click="checkexa = true" plain>指定人可编辑</el-button>
                 </div>
             </el-dialog>
-            <el-dialog title="选择填报人" :visible.sync="checkexa" width="50%" :destroy-on-close="true"
+            <div class="flex-dialog">
+            <el-dialog title="选择填报人" :visible.sync="checkexa" width="86%" style="height:100%  ;" :destroy-on-close="true"
                        :modal-append-to-body="false" :close-on-click-modal="false" v-loading="shareLoading">
-                <div>
-                    <el-form :model="exaList" ref="addInfoList">
-                        <el-form-item prop="processUserId" class="info-line online">
-                            <span style="width: 80px;margin-right: 20px">审批人员</span>
-                            <deptTreeUserNew class="tree" @treeCheck="treeCheckonly" :defaultList="defaultList"
-                                             :type="depttype" :closeList="closeList"></deptTreeUserNew>
-                            <div class="tree treeUser">
+                <div class="flex-dialog">
+                    <el-row style="height:80%  ;">
+                            <el-col :span="24" style="height:100%  ;">
+                                <deptTreeUserNew class="tree" @treeCheck="treeCheckonly" :defaultList="defaultList"
+                                    :type="depttype" :closeList="closeList"></deptTreeUserNew>
+                            </el-col>
+
+                        </el-row>
+                    <!-- <el-form :model="exaList" ref="addInfoList">
+                        <el-form-item prop="processUserId" class="info-line online"> -->
+                            <!-- <span style="width: 80px;margin-right: 20px">审批人员</span> -->
+                            <!-- <deptTreeUserNew class="tree" @treeCheck="treeCheckonly" :defaultList="defaultList"
+                                             :type="depttype" :closeList="closeList"></deptTreeUserNew> -->
+                            <!-- <div class="tree treeUser">
                                 <p v-for="(item,index) in treeList" :key="index">{{ item.receiveName }}
                                     <i @click="deletes(item,index)" class="el-icon-error"></i>
                                 </p>
-                            </div>
-                        </el-form-item>
-                    </el-form>
+                            </div> -->
+                        <!-- </el-form-item>
+                    </el-form> -->
 
                     <div slot="footer" style="text-align: right;padding-bottom: 20px">
                         <el-button type="primary" @click="checkProcessUser(3)">确 定</el-button>
@@ -166,6 +177,7 @@
                     </div>
                 </div>
             </el-dialog>
+        </div>
             <el-dialog title="移动到" :visible.sync="moveStatus" width="500px" :destroy-on-close="true"
                        :modal-append-to-body="false" :close-on-click-modal="false">
                 <div>
@@ -207,7 +219,7 @@ import toolList from "../../../components/toolList";
 import myMessage from "../../../components/myMessage.vue";
 import myMessageNew from "../../../components/myMessageNew.vue";
 import myMessageRadio from "../../../components/myMessageRadio.vue";
-import deptTreeUserNew from "../../../components/deptTreeUserNew.vue"
+import deptTreeUserNew from "../../../components/newTree.vue"
 
 export default {
     components: {
@@ -383,7 +395,7 @@ export default {
             _this.shareLoading = true;
             if (shareType == 3) {
                 this.treeList.map((o) => {
-                    deptList.push(o.receiveNo);
+                    deptList.push(o.key);
                 });
             }
             if (shareType == 1) {
@@ -786,6 +798,21 @@ export default {
 </script>
 
 <style lang="scss" scoped>
+::v-deep .flex-dialog .el-dialog {
+    height: 600px !important;
+}
+
+.flex-dialog {
+    height: 100%;
+}
+
+.el-dialog {
+    height: 100% !important;
+}
+
+::v-deep .flex-dialog .el-dialog__body {
+    height: 100% !important;
+}
 .container {
     background-color: #f0f2f5;
 

File diff suppressed because it is too large
+ 1011 - 0
src/pages/main/onlineExcelMarkets/index.vue


File diff suppressed because it is too large
+ 1098 - 0
src/pages/main/onlineExcels/index.vue


+ 31 - 3
src/router/index.js

@@ -2122,11 +2122,21 @@ const routes = [{
         },
         {
             meta: {
-                name: '协同编辑',
+                name: '在线文档(市场)',
+                keepAlive: false
+            },
+            path: '/onlineShareExcelMarket',
+            name: 'onlineShareExcelMarket',
+            component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/onlineExcelMarket/index'], resolve)
+        },
+        {
+
+            meta: {
+                name: '在线文档',
                 keepAlive: false
             },
-            path: '/editOnline',
-            name: 'editOnline',
+            path: '/onlineShareExcel',
+            name: 'onlineShareExcel',
             component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/onlineExcel/index'], resolve)
         },
         {
@@ -2137,6 +2147,24 @@ const routes = [{
             path: '/onlineShareExcelMarket',
             name: 'onlineShareExcelMarket',
             component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/onlineExcelMarket/index'], resolve)
+        },{
+
+            meta: {
+                name: '在线文档协同',
+                keepAlive: false
+            },
+            path: '/onlineShareExcels',
+            name: 'onlineShareExcel',
+            component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/onlineExcels/index'], resolve)
+        },
+        {
+            meta: {
+                name: '在线文档(市场)协同',
+                keepAlive: false
+            },
+            path: '/onlineShareExcelMarkets',
+            name: 'onlineShareExcelMarket',
+            component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/onlineExcelMarkets/index'], resolve)
         },
         {
             meta: {

+ 7 - 13
vue.config.js

@@ -3,6 +3,7 @@ const webpack = require("webpack");
 const BundleAnalyzerPlugin =
     require("webpack-bundle-analyzer").BundleAnalyzerPlugin;
 module.exports = {
+    outputDir: process.env.outputDir,
     publicPath: process.env.NODE_ENV === "production" ? "" : "/",
     productionSourceMap: false,
     lintOnSave: false,
@@ -94,11 +95,7 @@ module.exports = {
         proxy: {
             // 开发环境变化可注释 ⬇️⬇️
             "/market/CMK": {
-<<<<<<< HEAD
-                target: "http://43.138.50.94:9600",
-=======
                 target: "http://192.168.2.124:9113",
->>>>>>> 994fc041f082ba5e33229f3e58f7c4b6c7b355c4
                 ws: false,
                 changeOrigin: true,
                 pathRewrite: {
@@ -106,11 +103,7 @@ module.exports = {
                 },
             },
             "/market/mk": {
-<<<<<<< HEAD
-                target: "http://43.138.50.94:9600",
-=======
                 target: "http://192.168.2.124:9113",
->>>>>>> 994fc041f082ba5e33229f3e58f7c4b6c7b355c4
                 ws: false,
                 changeOrigin: true,
                 pathRewrite: {
@@ -118,11 +111,7 @@ module.exports = {
                 },
             },
             "/market/techcentergj": {
-<<<<<<< HEAD
-                target: "http://43.138.50.94:9600",
-=======
                 target: "http://192.168.2.124:9113",
->>>>>>> 994fc041f082ba5e33229f3e58f7c4b6c7b355c4
                 ws: false,
                 changeOrigin: true,
                 pathRewrite: {
@@ -154,11 +143,16 @@ module.exports = {
                 // target: 'http://192.168.1.9:9600/spfm',
                 // target: 'http://127.0.0.1:9600/',
                 // target: 'http://192.168.0.156:9600/',
+                // target: 'http://192.168.2.92:9600/',
+                // target: 'http://192.168.2.124:9600/',
+                // target: "http://124.223.66.248:9600",
+                // target: "http://43.138.50.94:9600",
                 // target: 'http://192.168.2.44:9600/',
-                target: 'http://192.168.2.124:9600/',
+                target: 'http://192.168.2.124:9600',
                 // target: "http://124.223.66.248:9600",
                 // target: "http://43.138.50.94:9600",
                 changeOrigin: true,
+                logLevel:'debug',
             },
         },
     },

+ 12 - 7
yarn.lock

@@ -1465,9 +1465,9 @@
   resolved "https://registry.npmmirror.com/@vue/cli-overlay/-/cli-overlay-4.5.19.tgz#d1206f7802bcba1d9c307695b54091df996db804"
   integrity sha512-GdxvNSmOw7NHIazCO8gTK+xZbaOmScTtxj6eHVeMbYpDYVPJ+th3VMLWNpw/b6uOjwzzcyKlA5dRQ1DAb+gF/g==
 
-"@vue/cli-plugin-babel@^4.1.2":
+"@vue/cli-plugin-babel@^4.5.0":
   version "4.5.19"
-  resolved "https://registry.npmmirror.com/@vue/cli-plugin-babel/-/cli-plugin-babel-4.5.19.tgz#288b32e69f0191a77369e88f071c0cd8036edfa7"
+  resolved "https://registry.yarnpkg.com/@vue/cli-plugin-babel/-/cli-plugin-babel-4.5.19.tgz#288b32e69f0191a77369e88f071c0cd8036edfa7"
   integrity sha512-8ebXzaMW9KNTMAN6+DzkhFsjty1ieqT7hIW5Lbk4v30Qhfjkms7lBWyXPGkoq+wAikXFa1Gnam2xmWOBqDDvWg==
   dependencies:
     "@babel/core" "^7.11.0"
@@ -1478,9 +1478,9 @@
     thread-loader "^2.1.3"
     webpack "^4.0.0"
 
-"@vue/cli-plugin-eslint@^4.1.2":
+"@vue/cli-plugin-eslint@~4.5.0":
   version "4.5.19"
-  resolved "https://registry.npmmirror.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-4.5.19.tgz#d1f908b5d079f2902dc23301290e4dd8176f204c"
+  resolved "https://registry.yarnpkg.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-4.5.19.tgz#d1f908b5d079f2902dc23301290e4dd8176f204c"
   integrity sha512-53sa4Pu9j5KajesFlj494CcO8vVo3e3nnZ1CCKjGGnrF90id1rUeepcFfz5XjwfEtbJZp2x/NoX/EZE6zCzSFQ==
   dependencies:
     "@vue/cli-shared-utils" "^4.5.19"
@@ -1502,9 +1502,9 @@
   resolved "https://registry.npmmirror.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.5.19.tgz#2452de58eb66ed873852bea45e6e06b57d842b47"
   integrity sha512-DUmfdkG3pCdkP7Iznd87RfE9Qm42mgp2hcrNcYQYSru1W1gX2dG/JcW8bxmeGSa06lsxi9LEIc/QD1yPajSCZw==
 
-"@vue/cli-service@^4.1.2":
+"@vue/cli-service@~4.5.0":
   version "4.5.19"
-  resolved "https://registry.npmmirror.com/@vue/cli-service/-/cli-service-4.5.19.tgz#5f6513128f426be0ee9a7d03155c23a6f23f8d42"
+  resolved "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-4.5.19.tgz#5f6513128f426be0ee9a7d03155c23a6f23f8d42"
   integrity sha512-+Wpvj8fMTCt9ZPOLu5YaLkFCQmB4MrZ26aRmhhKiCQ/4PMoL6mLezfqdt6c+m2htM+1WV5RunRo+0WHl2DfwZA==
   dependencies:
     "@intervolga/optimize-cssnano-plugin" "^1.0.5"
@@ -6046,11 +6046,16 @@ jquery-ui@^1.12.1:
   dependencies:
     jquery ">=1.8.0 <4.0.0"
 
-"jquery@>=1.8.0 <4.0.0", jquery@^3.6.0:
+"jquery@>=1.8.0 <4.0.0":
   version "3.6.1"
   resolved "https://registry.npmmirror.com/jquery/-/jquery-3.6.1.tgz#fab0408f8b45fc19f956205773b62b292c147a16"
   integrity sha512-opJeO4nCucVnsjiXOE+/PcCgYw9Gwpvs/a6B1LL/lQhwWwpbVEVYDZ1FokFr8PRc7ghYlrFPuyHuiiDNTQxmcw==
 
+jquery@^3.6.4:
+  version "3.6.4"
+  resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.4.tgz#ba065c188142100be4833699852bf7c24dc0252f"
+  integrity sha512-v28EW9DWDFpzcD9O5iyJXg3R3+q+mET5JhnjJzQUZMHOv67bpSIHq81GEYpPNZHG+XXHsfSme3nxp/hndKEcsQ==
+
 js-audio-recorder@^1.0.7:
   version "1.0.7"
   resolved "https://registry.npmmirror.com/js-audio-recorder/-/js-audio-recorder-1.0.7.tgz#01501cb9eb143d57994b42bd5ae97974fda18908"