momo
IP:
42关注数
0粉丝数
50获得的赞
工作年
编辑资料
链接我:

创作·106

全部
问答
动态
项目
学习
专栏
momo

如果强制将jpg改成png, 会有什么后果?

好奇的问下, 我现在有一张jpg格式的图片, 如果我直接将文件后缀改成png, 会有什么副作用? 像素会变吗?
15
1
0
浏览量349
momo

websocket请求头中如何带上cookie?

websocket请求头中如何带上cookie?
16
1
0
浏览量406
momo

centos如何安装apt?

我用yum安装报: "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20250103/0a2a60a15a3a4c2bec5a57fa451e31ad.png) 网上的答案已经试过,都没有解决我的问题,请问大佬们如何解决安装它? 我想使用apt,安装libglib2.0-0, 如果不安装apt,怎么安装libglib2.0-0 主要是我们解决这个问题"https://segmentfault.com/q/1010000044195764" (https://segmentfault.com/q/1010000044195764)
12
1
0
浏览量214
momo

vue-cli-servic build 打包后生成非常多的js和css文件,怎么办?

我的一个单页面的后台管理系统,用的是vue-cli3开发的,之前打包都正常 "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241228/98ec0b65452439638dce6b361f184479.png) 我本地的也正常,前一阵子打开正式环境发现一打开加载了1700多个请求,人都傻了,发现除了我本地打包的和jenkins测试环境打包的都没问题,就正式环境有问题,然后突发奇想吧测试库的代码删除重新拉取,问题复现了,我复制了本地代码除了node_modules,重新打包也复现了,我实在找不出原因,有大佬遇到过吗?我没碰vue.config.js "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241228/c4cf28f2aa6b6e78181bdeeab7fc148e.png) "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241228/7957daa3972ea0c3811fa02320dbe23d.png) "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241228/04134bf4b8690a6c5dd5b887dfae3f4b.png) "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241228/a8c58b2dca061fe77f920d01ab691602.png) 我人都麻了1370个文件 什么都没动就这样子 文件太多了截不全 vue.config.js const path = require('path') const os = require('os') const CompressionPlugin = require('compression-webpack-plugin') function resolve (dir) { return path.join(__dirname, dir) } let localIp = '127.0.0.1' const ni = os.networkInterfaces() for (let key in ni) { const item = ni[key] const ip = item.find(i => i.family === 'IPv4') localIp = ip.address break } // vue.config.js module.exports = { transpileDependencies: [/^((?!@jeecg).)*((?!@jeecg).)*$/], /* Vue-cli3: Crashed when using Webpack `import()` #2463 https://github.com/vuejs/vue-cli/issues/2463 */ // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。 productionSourceMap: false, // 打包app时放开该配置 // publicPath: './', configureWebpack: config => { // 生产环境取消 console.log if (process.env.NODE_ENV === 'production') { config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true // 拆分打包 const SplitChunk = config.optimization.splitChunks SplitChunk.cacheGroups.antv = { name: 'antv', test: /[\\/]node_modules[\\/]@antv[\\/]/, minChunks: 1, priority: -3, chunks: 'all', reuseExistingChunk: true } SplitChunk.cacheGroups.tinymce = { name: 'tinymce', test: /[\\/]node_modules[\\/]tinymce[\\/]/, minChunks: 1, priority: -4, chunks: 'all', reuseExistingChunk: true } SplitChunk.cacheGroups.lodash = { name: 'lodash', test: /[\\/]node_modules[\\/]lodash[\\/]/, minChunks: 1, priority: -2, chunks: 'all', reuseExistingChunk: true } SplitChunk.cacheGroups.codemirror = { name: 'codemirror', test: /[\\/]node_modules[\\/]codemirror[\\/]/, minChunks: 1, priority: -1, chunks: 'all', reuseExistingChunk: true } } }, chainWebpack: (config) => { config.resolve.alias .set('@$', resolve('src')) .set('@mock', resolve('mock')) .set('@api', resolve('src/api')) .set('@assets', resolve('src/assets')) .set('@comp', resolve('src/components')) .set('@views', resolve('src/views')) .set('@layout', resolve('src/layout')) // 生产环境,开启js\css压缩 if (process.env.NODE_ENV === 'production') { config.plugin('compressionPlugin').use(new CompressionPlugin({ test: /\.(js|css|less)$/, // 匹配文件名 threshold: 10240, // 对超过10k的数据压缩 deleteOriginalAssets: false // 不删除源文件 })) } // 配置 webpack 识别 markdown 为普通的文件 config.module .rule('markdown') .test(/\.md$/) .use() .loader('file-loader') .end() }, css: { loaderOptions: { less: { modifyVars: { /* less 变量覆盖,用于自定义 ant design 主题 */ 'primary-color': '#1890FF', 'link-color': '#1890FF', 'border-radius-base': '4px' }, javascriptEnabled: true } } }, devServer: { host: '0.0.0.0', port: 3000, public: `${localIp}:3000`, disableHostCheck: true }, lintOnSave: false } package.json { "name": "vue-antd-jeecg", "version": "2.1.4", "private": true, "scripts": { "pre": "cnpm install || yarn --registry https://registry.npm.taobao.org || npm install --registry https://registry.npm.taobao.org ", "serve": "vue-cli-service serve --mode local", "serve:dev": "vue-cli-service serve --mode dev", "build:dev": "vue-cli-service build --mode dev", "build:prod": "vue-cli-service build", "lint": "vue-cli-service lint" }, "dependencies": { "@antv/data-set": "^0.10.2", "@jeecg/antd-online-214": "^2.1.41", "@tinymce/tinymce-vue": "^2.0.0", "@vant/touch-emulator": "^1.2.0", "ant-design-vue": "^1.7.8", "axios": "^0.18.0", "babel-plugin-dynamic-import-node": "^2.3.3", "clipboard": "^2.0.4", "codemirror": "^5.46.0", "dayjs": "^1.8.0", "dingtalk-jsapi": "^2.9.14", "enquire.js": "^2.1.6", "file-saver": "2.0.1", "js-cookie": "^2.2.0", "jsbarcode": "^3.11.5", "lodash.debounce": "^4.0.8", "lodash.get": "^4.4.2", "lodash.isequal": "^4.5.0", "lodash.pick": "^4.4.0", "md5": "^2.2.1", "nprogress": "^0.2.0", "qrcodejs2": "^0.0.2", "sortablejs": "^1.13.0", "tinymce": "^5.1.4", "vant": "^2.12.23", "viser-vue": "^2.4.4", "vue": "^2.6.10", "vue-class-component": "^6.0.0", "vue-cropper": "^0.4.8", "vue-draggable-resizable": "^2.3.0", "vue-i18n": "^8.17.3", "vue-loader": "^15.7.0", "vue-ls": "^3.2.0", "vue-photo-preview": "^1.1.3", "vue-print-nb": "^1.7.5", "vue-print-nb-jeecg": "^1.0.9", "vue-property-decorator": "^7.3.0", "vue-router": "^3.0.1", "vue-splitpane": "^1.0.4", "vuedraggable": "^2.24.3", "vuex": "^3.0.1", "vuex-class": "^0.3.1", "vxe-table": "^3.6.6", "xe-clipboard": "^1.10.1", "xe-utils": "^3.5.7", "xlsx": "0.14.1" }, "devDependencies": { "@babel/polyfill": "^7.12.1", "@babel/runtime": "^7.18.6", "@types/file-saver": "2.0.1", "@vue/cli-plugin-babel": "^3.3.0", "@vue/cli-plugin-eslint": "^3.3.0", "@vue/cli-service": "^3.3.0", "@vue/eslint-config-standard": "^4.0.0", "babel-eslint": "^10.0.1", "babel-plugin-import": "^1.13.0", "compression-webpack-plugin": "^3.1.0", "eslint": "^5.16.0", "eslint-plugin-vue": "^5.1.0", "html-webpack-plugin": "^4.0.0-beta.11", "less": "^3.9.0", "less-loader": "^4.1.0", "mockjs": "^1.1.0", "vue-template-compiler": "^2.6.10" }, "eslintConfig": { "root": true, "env": { "node": true }, "extends": [ "plugin:vue/strongly-recommended", "@vue/standard" ], "parserOptions": { "parser": "babel-eslint" }, "rules": { "generator-star-spacing": "off", "no-mixed-operators": 0, "vue/max-attributes-per-line": [ 2, { "singleline": 5, "multiline": { "max": 1, "allowFirstLine": false } } ], "vue/attribute-hyphenation": 0, "vue/html-self-closing": 0, "vue/component-name-in-template-casing": 0, "vue/html-closing-bracket-spacing": 0, "vue/singleline-html-element-content-newline": 0, "vue/no-unused-components": 0, "vue/multiline-html-element-content-newline": 0, "vue/no-use-v-if-with-v-for": 0, "vue/html-closing-bracket-newline": 0, "vue/no-parsing-error": 0, "no-console": 0, "no-tabs": 0, "indent": [ 1, 4 ] } }, "postcss": { "plugins": { "autoprefixer": {} } }, "browserslist": [ "> 1%", "last 2 versions", "not ie <= 10" ] }
7
1
0
浏览量250
momo

如何用laravel框架封装微信支付和支付宝支付?

建议你直接用现有的【EasyWeChat】的laravel版,作者本人在腾讯,这个库很多年了,也一直保持着更新 "https://github.com/overtrue/laravel-wechat" (https://link.segmentfault.com/?enc=uD%2FYbDxwej49cGh9ChVE3A%3D%3D.TjLAyhsobtx175b8UAxYs%2F54nV4KP7nBGqKQtfeLZXhXxgR3ihSF1Iz0Y11uJ9w2)
0
0
0
浏览量0
momo

为啥敏捷教练都去搞DevOps培训了?

你指的是 Master 还是 Coach?毕竟都被翻译成教练。 如果是 Coach 的话,做咨询的难道不是客户要啥就给啥吗 😂 像我在埃森哲的朋友,自己的 Title 就总变,客户要啥自己就是啥,主打的就是一个“多快好省”。客户说自己想搞 DevOps,难道你还能说“对不起,我们只会搞 Scrum,你找别人吧”? "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241221/fc9569d7dcc730403cf8c8591fd12225.png)
0
0
0
浏览量0
momo

js,正则,如何去除数字前面多余的小数点,并保留两位小数?

'..737870036647989828297407280.3090979897'.match(/\d+(\.\d{1,2}|)/)[0]
0
0
0
浏览量0
momo

市面上的低代码平台可以做一个微信小程序吗?

想用低代码平台实现一个微信小程序并在微信上发布,应该怎么弄,想看下大家都是怎么做的?
0
1
0
浏览量18
momo

ubuntu下使用request访问url报错?

requests.exceptions.SSLError是Python中requests库在处理HTTPS请求时遇到SSL错误时所抛出的异常。 可以尝试按照下面的步骤排查一下问题: 1. 环境变量配置问题。确保环境变量正确配置,特定库所需的环境变量要与运行它们的Python环境相匹配。 2. SSL模块问题。确保SSL模块已正确安装并可用。 3. 证书验证问题。如果需要访问的HTTPS网站没有提供有效的证书,或者提供的证书不受信任,就会触发SSLError异常。可以通过添加证书验证来解决。
0
0
0
浏览量0
momo

pyqt使用process和pipe打开nginx,我就是想实现xampp类似功能或者phpstudy,如何实现?

pyqt使用process和pipe打开nginx,但是nginx是长期运行的 如何解决,我就是想实现一点击按钮运行nginx,再点击就停止 "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241215/af86e82a41c5848bb76e98c7e758171c.png)
0
1
0
浏览量11
momo

网站搭建相关问题?

网站搭建萌新,有些疑惑希望大佬们可以解答: 1. nginx、tomcat与云服务器(如阿里云、腾讯云等)、机房实体服务器有啥区别? 2. 搭建网站的时候什么时候用nginx和tomcat,以及详细原因(比如为啥tomcat大多用于前端到后端的中间件,而nginx为啥大多用于用户到浏览器的中间件?) 3. 搭建网站,前后端分别部署在不同云服务器 上,以前端访问后端为例,在已实现跨域的前提下,能否通过 前端向后端云服务器的公网ip发生http请求 实现将前端数据(如登陆表单等)发送到后端 4. 为啥阿里云、腾讯云的服务器公网ip不能直接访问?(即:在浏览器url栏输入公网ip通常无法连接,而必须通过软件等实现?) ps:萌新一枚,勿喷勿喷
0
1
0
浏览量16
momo

如何使用promise改写我的代码?

新手,大佬轻点喷,vue2项目,搜索框用的原生,请求数据用的axios 我在项目中写了一个搜索框,目前数据的静态的,我想动态获取数据,但数据是异步请求获取的,如果我像下面直接这样赋值会获取不到值,我想使用promise改写,请问以下应当如何改写https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241209/31fb3c933d38ae3571b73889876b4881.png 代码: 欢迎进入用户管理界面 第{{index+1}}位用户的ID为:{{data.username}} 第{{index+1}}位用户的密码为:{{data.password}} 编辑 删除 import axios from "axios"; export default { data(){ return{ userData:[] } }, methods:{ changeUser(){ alert("修改我没写哦,但是可以删除") }, deleteUser(index){ const flag = this.areYouSureDelete() if(flag){ this.userData.splice(index, 1) const deleteUser = this.userData axios.get("http://192.168.198.1/admin/deleteUser",{ params:{ deleteUser:deleteUser } }).then(res=>{},error=>{console.log("请求失败", error)}) } }, areYouSureDelete(){ return confirm("确定删除吗!"); }, //传入this.userData返回此数据用的所有username initUserData(data){ if(!(data instanceof Array)){ return } let newData = [] for (let i = 0; i { this.userData = res.data.data // console.log("请求成功", this.userData[0].password) },error=>{ console.log("请求失败", error) }) let arr = ["user","userNo1","userNo25","userNo99","userNo123","userNo1","abcd","asgh","asdasd","fsaas","ssda","admin","userZhangSan"]; // let arr = this.userData // console.log(arr) let search = document.getElementsByClassName("blue-input")[0]; let selectedId = document.getElementById("selectedId") function showList(){ let res = searchByIndexOf(search.value,arr); console.log(res) for(let i=0;i=0){ arr.push(list[i]); } } return arr; } } } } h1{ font-size: 28px; text-align: center; padding-top: 40px; } ul{ padding: 60px 0 0 30%; } ul li { padding-bottom: 12px; } #container { width: 800px; height: 150px; margin: 0 auto 150px; padding-top: 30px; box-sizing: border-box; } /*搜索栏*/ .sea-container { width: 450px; height: 30px; background-color: green; margin: 50px auto 150px; border: 1px solid #317EF3; /*padding-bottom: 150px;*/ } .blue-input { float: left; width: 350px; height: 30px; padding: 0 10px; box-sizing: border-box; } .blue-button { width: 100px; height: 30px; background-color: #317EF3; color: white; font-size: 15px; } /* 搜索下拉框*/ ul#drop { list-style: none; margin: 0; padding: 0; } ul#drop li { margin: 0; padding: 10px; } ul#drop li:hover { background-color: darkgrey; width:200px; } p#selectedId { display: inline-block; } 后台的json数据 {"admin":[{"username":"admin","password":"123456"}], "users": [ { "username": "user", "password": "123456" }, { "username": "userNo1", "password": "123456" }, { "username": "userNo99", "password": "123456" }, { "username": "userZhangSan", "password": "123456" }, { "username": "userLisi", "password": "123456" }, { "username": "AASD", "password": "SSDA" } ]}
0
1
0
浏览量13
momo

wpf 在touchdown的时候如何避免mousedown?

最近在做一款wpf下的应用程序,大部分时时间会在触摸屏下使用, 少部分时间会用鼠标使用。 有两个事件 :一个是mousedown 即鼠标点下的事件。另外一个是touchdown事件。touchdown的时候会触发mousedown ,反之则不会。测试发现在触摸屏下使用touchdown 反应很快,使用体验的要优于mousedown。但是这样就需要绑定两个事件 一个mousedown 一个touchdown。但是触摸的时候就会触发两次,请问这个问题要怎么解决?
0
1
0
浏览量13
momo

window求一个软件,可以实现文件重定向,比如某个软件要读取test文件,把该文件读取请求改到了test2文件?

实现文件重定向的方法通常涉及操作系统级别的功能,这可能需要编写自定义的软件或使用专门的工具。下面是一种可能的方法,你可以使用Windows的"mklink"命令来创建符号链接来实现文件重定向: 1. 打开命令提示符(CMD)或Windows PowerShell。 2. 使用"mklink"命令来创建符号链接,将要重定向的文件指向目标文件。例如,如果你想将"test"文件重定向到"test2"文件,你可以执行以下命令: mklink /H test test2 这将创建一个硬链接,将"test"文件指向"test2"文件。现在,任何试图访问"test"文件的软件都实际上将访问"test2"文件的内容。 请注意,使用"mklink"需要管理员权限,因此你可能需要以管理员身份运行命令提示符或Windows PowerShell。 这只是一种在Windows上实现文件重定向的方法之一。如果你需要更高级的文件重定向功能,你可能需要编写自定义软件来实现它,或者寻找专门设计用于此目的的第三方工具。
0
0
0
浏览量0
momo

设计一张表格,可以升降排序,表头一共七个,其中一个不需要排序?

按照element的 :default-sort = "{prop: 'date', order: 'descending'}",我通过过滤数组,得到需要排序的prop,但是效果没有实现。 cols: [ { prop: "process", label: "工序" }, { prop: "processdetail", label: "工序详细", }, { prop: "productcount", label: "生产数量" }, { prop: "OKcount", label: "OK数量" }, { prop: "NGcount", label: "NG数量" }, { prop: "OKpercent", label: "OK率" }, { prop: "NGpercent", label: "NG率" }, ], sort() { let sort_prop = this.cols.filter((item) => { // console.log(item,'过滤后的'); return item.prop != "processdetail"; }); // console.log(sort_prop); return sort_prop.map((item) => { return { prop: item.prop, order: "descending" }}); },
0
1
0
浏览量12
momo

如何在Java中显示百分比数字?

在 Excel 单元格中显示一个格式为百分比的值,例如12.3%。 默认情况下,该值显示为文本,但我需要将其显示为数字。
0
1
0
浏览量11
momo

AutoHotKey2如何弹出菜单 选择后SendText这个选择?

AutoHotKey2如何弹出菜单 选择后SendText这个选择?
0
1
0
浏览量16
momo

如何便捷给input施加focus方法?

有以下代码,获取input焦点时将光标置在右侧的,现在项目有很多地方需要用上,请问怎么快速、简单的修改 @focus="inputFocusRight($event)" inputFocusRight(e) { const editTask = e.srcElement; const length = editTask.value.length; editTask.focus(); setTimeout(() => { editTask.selectionStart = length; editTask.selectionEnd = length; }); },
0
1
0
浏览量11
momo

为什么d3.js向svg容器中添加path元素时不能正确显示?

代码: function createPath(){ var svgContainer = $("#svg_container").get(0) var svg = d3.select(svgContainer); svg.append("path") .attr("d",'M 50 245 L 150 245') .attr("stroke","black") } 情况: 已有path元素添加进入 "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241121/424356863137eda7184f387afc4b1b78.png) 但是其无法正确显示 "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241121/09502728b484e5e27dbb973d4e64f323.png) 我想知道为什么,如何解决,谢谢您的帮助!
0
1
0
浏览量10
momo

如何查看手机app的启动动画,它的存放位置一般在哪里呢?

这个就很复杂了。1、一个可能是直接网络图片链接,缓存到本地,缓存地址很多可能,很难对应 2、打包到app内部的drawable,在apk res/drawable里面一般能找到。 3、打包进apk里面,在assets文件夹下 4、打包进apk里面,在 res/raw 里面 5、很多apk是默认的启动动画,打包进apk,然后每次启动,可能会重新从服务器拉最新的启动动画,缓存下载,下次启动就用新的启动动画 不过一般图片缓存库,缓存地址一般都在 data/data/xxx.xxx(应用包名)/files..文件夹下,而且文件名一般还不是.png等图片名后缀结尾
0
0
0
浏览量0
momo

ant组件中级联选择点击右侧的箭头才展示下一级的内容如何实现?

"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241118/f17a478be061523c71500c88594b2520.png) ant-design-vue中如何实现点击文本为选择,点击右侧的箭头为展开下一级的功能?
0
1
0
浏览量12
momo

如何实现表格内图片预览?

图像接受值必须是数组,针对当前点击对象后会弹出一个图像数组,如果每个单击对象只需要显示一张,就在数组里放一个地址。
0
0
0
浏览量0
momo

怎么快速或同时把 .less 文件转成.css 文件,然后压缩成.min.css?

怎么快速或同时把 .less 文件转成.css 文件,然后压缩成.min.css? "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241116/c0b9577fded83f26dd0ebe84c8063de8.png)
0
1
0
浏览量16
momo

后端接口返回的时间 和 axios 从 request 到 response 过程的时间 相差巨大?

后端接口返回的时间 和 axios 从 request 到 response 过程的时间 相差巨大? 背景 在用扫码枪扫货品的时候会调接口 每扫一个货品需要请求三个不同接口 在扫前40个货品的时候时间相差不大, 但是一直扫到150+货品的时候 就会出现 时间相差很大的情况 https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241114/3243021ee1737eb5d3bc9d0081f9b6fc.png https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241114/f96d0cf4be536bb7dca334f0b7bdcf30.png https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241114/37ce7a9394180d7052b508b6a0927de7.png https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241114/e5313db7d73617c7cd4328c16c433087.png 图一是接口返回的时间180ms 图三 从axios request 到 response 前 变成了 800ms 图四 在组件内发起请求到数据返回 时间变成了差不多1800ms 中间没做数据操作 只有增加了请求拦截和响应错误码处理 中间的时间相差这么多 是什么问题导致呢? // import axios from 'axios' import axios, { AxiosRequestConfig, AxiosResponse, CancelTokenSource } from 'axios'; import baseUrl, { differUrl } from './baseUrl'; import router from '@/router'; import store from '@/store'; import { Message } from 'element-ui'; import { vMessage } from '@rbp/components/base-message'; import { filedMapData, moduleIdMapData } from './config'; import { hideScreenLoading, showScreenLoading } from '@/utils/loading'; import { getCookie, getToken, removeCookie } from '@/utils/auth'; let configChace: any = null; // 存放请求参数,在进入错误时候也关掉loading const CANCELTTYPE = { CACHE: 1, REPEAT: 2 }; interface Request { onlyKey: string; url: string; source: CancelTokenSource; } const pendingRequests: Request[] = []; const config = { // timeout: 1000 * 60 * 10 // baseURL: baseUrl }; // eslint-disable-next-line no-unused-vars const _axios = axios.create(config); const DELAY = 0; let timer: any, loadingInstance: any; const setBaseUrl = (config) => { const initUrl = config.url; if (initUrl && initUrl.startsWith('/customize')) { config.baseURL = differUrl || baseUrl; config.baseURL = config.baseURL.replace('/manager', ''); config.timeout = 1000 * 60 * 10; } else if (initUrl && initUrl.startsWith('/report')) { config.baseURL = (Window as any).config.reportUrl || baseUrl; config.timeout = 1000 * 60 * 10; } else if (initUrl && initUrl.startsWith('/new-mf-fac')) { config.baseURL = localStorage.getItem('JuNiu_WebAddress') || baseUrl; config.timeout = 1000 * 60 * 10; } else { config.baseURL = baseUrl; config.timeout = 1000 * 60 * 3; } }; const setToken = (config) => { const token = getToken(); const refreshToken = getCookie('refreshToken'); config.headers.Lang = getCookie('language') || 'zh_chs'; if (token) { config.headers['Authorization'] = token; // 让每个请求携带自定义token 请根据实际情况自行修改 } if (refreshToken) { config.headers['RefreshToken'] = refreshToken; } }; const setModuleId = (config) => { const formatRouter: any = (window as any).__POWERED_BY_QIANKUN__ ? (window as any).ymyCustomizeRouter : router; // 模块 ID 参数 全局传入 // const moduleId = (router as any).history.current.meta.moduleId; // let moduleId = // (window as any).Vue2 && (window as any).Vue2.prototype // ? (window as any).Vue2.prototype._router_.history.current.meta.moduleId // : (router as any).history.current.meta.moduleId; let moduleId = (window as any).Vue2 && (window as any).Vue2.prototype ? (window as any).Vue2.prototype._router_.history.current.meta.moduleId : formatRouter.history.current.meta.moduleId; // 对于非/customize接口,替换moduleId为新moduleId if (config?.url.indexOf('/customize') { if (['baseModuleId', 'moduleId'].includes(key)) { config.params[key] = obj.moduleId; } }); } } } // if (moduleId && config.data) { // if (config.data && config.data.moduleId) { // Object.assign(config.data, { moduleId: config.data.moduleId }); // } if (moduleId && config.data) { // NetNeedModuleId 接口不需要 moduleId 为 true 则不需要加 if (config.data.NetNeedModuleId) { delete config.data.NetNeedModuleId; } else { if (Object.keys(config.data).indexOf('moduleId') > -1) { moduleId = config.data.moduleId; } Object.assign(config.data, { moduleId: moduleId }); if (typeof config.data.data === 'object') { if (config?.url.indexOf('/customize') -1) { config.data.data.moduleId = moduleId; } } else { if (Object.keys(config.data.data).indexOf('moduleId') > -1 && config.data.data.moduleId) { moduleId = config.data.data.moduleId; } } Object.assign(config.data.data, { moduleId: moduleId }); } } if (config.data.setModuleIdInHeaders) { config.headers['moduleId'] = moduleId; delete config.data.setModuleIdInHeaders; } } }; const setLoading = (config) => { configChace = config; // NetNeedModuleId 接口不需要 moduleId 为 true 则不需要加 if (config.method === 'get' && (!config.params || !config.params.NetNeedLoading)) { config.headers['showLoading'] = true; showScreenLoading(config.headers); } else if (['put', 'post'].includes(config.method) && (!config.data || !config.data.NetNeedLoading)) { config.headers['showLoading'] = true; showScreenLoading(config.headers); } config.params && delete config.params.NetNeedLoading; config.data && delete config.data.NetNeedLoading; }; const preventSomeRequest = (config) => { /** * 为每一次请求生成一个cancleToken */ const source = axios.CancelToken.source(); config.cancelToken = source.token; /** * 将之前的重复且未完成的请求全部取消 */ const params = JSON.stringify(config.params || config.data); const hits = pendingRequests.filter((item) => item.onlyKey === `${config.baseURL}${config.url}${params}`); if (hits.length > 0) { console.error('有重复请求', hits, config); hits.forEach((item) => item.source.cancel(CANCELTTYPE.REPEAT.toString())); } pendingRequests.push({ onlyKey: `${config.baseURL}${config.url}${params}`, url: `${config.baseURL}${config.url!}`, source }); }; _axios.interceptors.request.use( function (config: AxiosRequestConfig) { // 全局请求的 loading,当请求 100 ms 后还没返回,才会出现 loading console.time('_axios.interceptors.request 请求设置header等等信息'); console.time('请求整理到返回中途所需要时间'); config.headers['request-startTime'] = new Date().getTime(); setBaseUrl(config); setToken(config); setModuleId(config); setLoading(config); // preventSomeRequest(config); console.timeEnd('_axios.interceptors.request 请求设置header等等信息'); return config; }, function (error) { // clearTimeout(timer); // if (loadingInstance) loadingInstance.close(); // if (config!.headers.showLoading) { if (configChace.headers['showLoading']) { hideScreenLoading(); configChace = null; } // } return Promise.reject(error); } ); // Add a response interceptor _axios.interceptors.response.use( function (response: AxiosResponse) { // clearTimeout(timer); // if (loadingInstance) loadingInstance.close(); const headers = response.config.headers; headers && headers.showLoading && hideScreenLoading(); /** * code为非20000是抛错 可结合自己业务进行修改 */ /** * 不论请求是否成功, * 将本次完成的请求从请求队列中移除 */ // 以同样的加密方式(MD5)获取加密字符串 const index = pendingRequests.findIndex((item) => item.url === response.config.url); // if (index > -1) { pendingRequests.splice(index, 1); } if (response.config.responseType === 'blob') { return response.data; } const res = response.data; const FIXCODE = [ 0, 10008, 10107, 10112, 10111, 10010, 20001, 30001, 30102, 30103, 30105, 30106, 40100, 40110, 40120, 40121, 40130, 40131, 40140, 40141, 40142, 40160, 40161, 40170, 40180, 50006, 50008, 50009, 50011, 50013, 50014, 50015, 50016, 50017, 50018, 50019, 50020, 50021, 50022, 50024, 50028, // 联营结算模式审核异常code码 50029, 50030, 50025, // 成本结存异常码(未做库存结存的渠道) 50031, // 成本结存异常码(存在以下未审核单据) 50032, // 成本结存异常码(存在本期数量未负的货品) 50033 ]; const NO_TOKEN_CODE = [10006]; // 没有权限或者和token失效 const PROGRAM_ERROR_CODE = [500, 10001, 10002]; // 显示错误具体信息弹窗 带复制等功能 console.timeEnd('请求整理到返回中途所需要时间'); if (PROGRAM_ERROR_CODE.includes(res.code)) { // Infrom({ type: 'error', content: res.msg, detail: res.errorStack, confirmButtonText: '关闭' }); Message({ type: 'error', message: res.msg, duration: 3500 }); return Promise.reject('error'); } else if (FIXCODE.includes(res.code)) { const start = response.config.headers['request-startTime']; const currentTime = new Date().getTime(); const requestDuration = ((currentTime - start) / 1000).toFixed(2) + 's'; console.log(`%caxios.ts line:288 ${response.config.url} 接口花费时间`, 'requestDuration', requestDuration); // return res; return Promise.resolve(res); } else if (NO_TOKEN_CODE.includes(res.code)) { //接口登陆失效跳转登录页 vMessage({ type: 'error', message: res.msg || res.errorStack, showClose: true, duration: 3500 }); removeCookie('tempToken'); removeCookie('tempRefreshToken'); store.dispatch('user/resetToken').then(() => { setTimeout(() => { window.location.reload(); }, 500); }); return Promise.reject('loginError'); } else { Message({ type: 'error', message: res.msg || res.errorStack, duration: 3500 }); return Promise.reject('error'); } }, function (error) { // clearTimeout(timer); // if (loadingInstance) loadingInstance.close(); // if (response.config.headers.showLoading) { // } // setTimeout(() => { // hideScreenLoading(); // }, 200); // 这里是重复请求不弹出 if (error.message !== CANCELTTYPE.REPEAT.toString()) { if (configChace.headers['showLoading']) { hideScreenLoading(); configChace = null; } // Infrom({ type: 'error', content: error.msg || '请求超时或服务器异常,请检查网络或联系管理员' }); Message({ type: 'error', message: error.msg || '请求超时或服务器异常,请检查网络或联系管理员' }); } return Promise.reject(error); } ); export default _axios;
0
2
0
浏览量25
momo

Python 循环为何跳过初始值问题?

i=10 while i<101: i+=1 if i%5!=0: continue print(i) 为什么输出结果不包含i=10这个初始值?
0
2
0
浏览量17
momo

小程序怎么唤起自己的原生能力?

这种问题拿报错信息搜一下就出来了。 "https://developers.weixin.qq.com/community/develop/article/do..." (https://link.segmentfault.com/?enc=6l2CWoaiKl3uE2PLjfrHaQ%3D%3D.Gq3WP8O4UrFichzvOOCy3Zfbl7ViBj0XPn0pWusEUi6cQ2%2Fl6hi965APe1spgoTQ6YsBC2gKEbvKLCdv0DuqJpEMYrR%2FNOCieB7QrycP2FYRb1VnKVW4J3QfCXUJIIPH)
0
0
0
浏览量0
momo

centos6.8能安装AMH面板吗?

centos6.8能安装AMH面板吗,有说明吗
0
1
0
浏览量11
momo

Vue Computed属性get、set不生效?

export default { props: { endPoint: { type: Object } }, computed: { endPointWidth: { get() { return this.endPoint.width; }, set(newWidth) { this.$emit('update:endPoint', { ...this.endPoint, width: newWidth }); } }, endPointHeight: { get() { return this.endPoint.height; }, set(newHeight) { this.$emit('update:endPoint', { ...this.endPoint, height: newHeight }); } } } } 属性多的话: export default { props: { endPoint: { type: Object } }, computed: { ...generateComputedProperties(['width', 'height', 'depth', 'color']) } } function generateComputedProperties(props) { let computed = {}; props.forEach(prop => { computed[`endPoint${capitalizeFirstLetter(prop)}`] = { get() { return this.endPoint[prop]; }, set(value) { this.$set(this.endPoint, prop, value); } }; }); return computed; } function capitalizeFirstLetter(string) { return string.charAt(0).toUpperCase() + string.slice(1); }
0
0
0
浏览量0
momo

python 子列表合并,没有进行赋值操作,为什么值会变化?

l = [['a','b',1], ['a','c',2], ['a','b',3], ['a','c',4], ['a','b',5]] L = [] for i in range (len(l)): flag = True for j in range(len(L)): if L[j][:-1] == l[i][:-1]: flag = False z=j break if flag == True: L.append(l[i]) else: L[z][-1] = L[z][-1] + l[i][-1] print('l: ') print(l) print('L: ') print(L) 输出为: l: [['a', 'b', 1], ['a', 'c', 2], ['a', 'b', 3], ['a', 'c', 4], ['a', 'b', 5]] L: [['a', 'b', 1]] l: [['a', 'b', 1], ['a', 'c', 2], ['a', 'b', 3], ['a', 'c', 4], ['a', 'b', 5]] L: [['a', 'b', 1], ['a', 'c', 2]] l: [['a', 'b', 4], ['a', 'c', 2], ['a', 'b', 3], ['a', 'c', 4], ['a', 'b', 5]] L: [['a', 'b', 4], ['a', 'c', 2]] l: [['a', 'b', 4], ['a', 'c', 6], ['a', 'b', 3], ['a', 'c', 4], ['a', 'b', 5]] L: [['a', 'b', 4], ['a', 'c', 6]] l: [['a', 'b', 9], ['a', 'c', 6], ['a', 'b', 3], ['a', 'c', 4], ['a', 'b', 5]] L: [['a', 'b', 9], ['a', 'c', 6]] 我想实现的是,把子列表中前两个字符相同的合并,最后一位的值相加,放到新列表中 但是我没有给l赋值,为什么l列表里的值也变了呢
0
1
0
浏览量13
momo

像h5或小程序上的关于“医院导航”的系统都用到了哪些技术?有做过的吗?

小程序一般都是 webview 嵌一个 h5 页面不会用小程序原生,因为小程序上的 canvas/webgl 支持程度没有 h5 好且目前一般的库都基于 h5 封装,如 threejs。 如果要求简单好实现,那么可以做以下学习、开发: 1. 跳过 webgl,直接学习 threejs 2. 医院地图需要具体的 CAD 实际图来进行转换处理成 threejs 可识别的坐标体系,使用 threejs 进行绘制渲染,或者使用模型(需要有C4D或Blender相关了解人员)直接加载渲染 3. 标记合适的导航点位,使用A星算法进行最佳导航路线展示 4. 医院根据标记的导航点位,安装对应的蓝牙基站,结合手机蓝牙进行当前用户的定位 3d导航这块的摸索需要一段时间,而且后续的优化工作也相对繁重,否则一些低端机会卡顿闪退等。 以上是一些简单的方向供参考~
0
0
0
浏览量0
momo

Vue单页面应用 使用router-view 点击菜单切换功能 内存越来越大 有何排查方法或建议?

Vue单页面应用 使用router-view 点击菜单切换功能 内存越来越大 尝试了下加keep-alive 能解决 但是 我们的功能业务场景 每次点击菜单都要刷新 加上keep-alive会有各种各样的问题
0
1
0
浏览量9
momo

如何解决 ECharts 5.4.3 geo3D 平移问题?

有关echarts 5.4.3 geo3D 无法使用鼠标拖动平移漫游 let option1 = { geo3D: { map: "pudong", //注册地图的名字 roam: "true", //开启鼠标缩放和平移漫游。默认不开启 viewControl: { panSensitivity: 1, panMouseButton : "left", rotateMouseButton: "center", }, 根据相关文档中的介绍,说 roam 设置为 true 后可以开启平移漫游,但实际上发现这个参数基本无效,更新为 false 后结果相同,而且只可以开启旋转与缩放,但无法平移漫游,是否有高手赐教一下,谢谢! 使用的软件为 echarts 5.4.3,运行环境为 chrome,使用 html 直接打开与使用 tomcat 发布后再打开结果相同。 目前可以加载 geoJson 格式的地图,可以在页面正常显示,已经进行了 viewControl 相关的配置,可以使用鼠标拖动实现旋转与缩放效果。但无法平移。 期望可以通过某种设置实现鼠标拖动平移的效果,谢谢! !!在去除了其他一些配置项后,目前已经可以平移,正在查找是哪个配置项导致的无法平移
0
1
0
浏览量14
momo

关于前端(小程序)数据加密一般用什么方法?

不需要加密, 用https就好了. 看页面上用的是就是https, 不用处理. 只要你的服务器能和支付接口的金额对的上就行. 页面上选多少充值没意义, 服务器收到的请求才算数.
0
0
0
浏览量0
momo

Python httpx库如何发送HTTP/2 POST请求?

httpx 怎么发一个 post http2 请求 "curl --http2-prior-knowledge -X POST http://127.0.0.1:1313 -d 'ww$$go'" 这个 curl 是有效的,但怎么使用 httpx 来实现 with httpx.Client(http2=True,verify=False) as client: res = client.post('http://127.0.0.1:1313',data=b'dtest') print("res",res) # 试了几次都不对
0
1
0
浏览量11
momo

使用video.js实现视频有声的自动播放,类似b站、抖音?

先了解个概念,叫做,媒体意愿度, 你说的那些网站,能自动播放,是因为媒体意愿度高,具体这个意愿度哪里查,可以在地址栏输入这个地址查看"chrome://media-engagement/" 怎么提高你网站的媒体意愿度,开发者干涉不了,只能通过用户使劲和你网站的视频播放功能进行交互,才能提高。 *** 比如,你说的抖音,我不常打开,媒体意愿度底, 我现在打开抖音,它也是静音才能自动播放的. "image.png" (https://wmlx-new-image.oss-cn-shanghai.aliyuncs.com/images/20241023/7c91732831399308e5c05ea338ff9e01.png)
0
0
0
浏览量0
momo

中间的有突出效果是怎么实现的啊CSS?

"210bd52beb1c170cbe35f09595286fb.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241014/789285fa4d81ec61275f5602e243020b.png) 中间的有突出效果是怎么实现的啊CSS "9d5f14224576d8f996a506799b56000.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241014/fdc9dcc0f62d4b9c6530c9405022f0b1.png)
0
1
0
浏览量142
momo

redis列表如何一次pop多个值啊?

有人说 lrange key 0 -1 这个只是读取啊,可以反复读取,数据不会删除。 lpop一次只能弹出一个。
0
1
0
浏览量185
momo

elementUI 我通过removeTag这个方法,改变了checkedKeys得值,但是页面上勾选状态为什么没变化???

官网setCheckedNodes方法可用 已解决
0
0
0
浏览量0
momo

IDEA创建Java项目时src板块丢失?

分享一个小知识: 在IDEA里面遇到的:创建java项目时src板块丢失,找到原因,是因为在创建时没有勾选
0
1
0
浏览量127
momo

cookie下两个同名的key但是domian不同,js获取时有优先级吗?

比如我现在访问的域名是 "https://xxx.text.a.com" 此时"cookie"中有两个同名的"key->token",一个"domain"是"a.com",另外一个"domain"是"text.a.com"。 这个时候前端通过"document.cookie"取"token"的值有优先级吗? 我调试了一下,取的值是"text.a.com"下的值,是不是说明"domain"跟域名的匹配的越高,优先级就越高?或者说"domain"的值越长优先级越高?
0
1
0
浏览量198
momo

想问一下一个C语言的位运算小问题?

想问一下一个C语言的位运算小问题. 有没有一个简单的表达式的写法,可以得到一个32位无符号数,只保留其最左侧或者最右侧的1的结果? 比如35=(000..0100011),得到32或者1? 用循环写的话不难,但,用一个简洁的表达式能写出来吗?
0
1
0
浏览量171
momo

css里~和@是什么意思?

"~" 是 "css-loader" 提供的 "https://webpack.docschina.org/loaders/css-loader/" (https://link.segmentfault.com/?enc=PZrLJrAbfs6eyBVir0e0mg%3D%3D.AFWYcv259zEXEjPWjMXcZ5Nfec1grxA4Py%2Bji3diN1upAB46zhzKQ%2BptyKMRF7Kbz%2FTVoFYuvb6EAUUG4DlWgw%3D%3D) "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241011/650dce44959bee15c63f32653606c159.png) "@" 一般是在 "resolve.alias" 中配的文件目录别名 "https://webpack.docschina.org/configuration/resolve/#resolvea..." (https://link.segmentfault.com/?enc=aqmk9jf4pT9akzWluMhBBA%3D%3D.9XR7HpdtkyQZYxxpkBXsJQXvruqEav7JZD1vmuLZWLYpVJCNdSrsiZJ9bkdafrM5SF8cNLgLtTlzplQliPh9uOpPVRJaf4MTUTkoB07JusY%3D) "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241011/1a5b2f9d42358827d6be55d59390e883.png)
0
0
0
浏览量0
momo

如何检测服务器的性能已经达到瓶颈?

根据本人实际经验,当CPU使用率高于800%时,网页服务会出现明显延迟
0
0
0
浏览量0
momo

怎么解决python 爬虫运行多进程报错:TypeError: cannot pickle '_thread.lock' object?

改成 "from multiprocessing import Queue",因为你用的是多进程执行任务,进程之间的数据通信要通过多进程模块提供的队列的方式。 由于你选用的是线程间 的队列,里面用的锁是线程锁 ,不能被序列化以用于进程间通信,所以才有了提示你的那个错误。
0
0
0
浏览量0
momo

终端安装命令安装不了,请问是哪个地方出了问题?

设一下npm的源为"http://registry.npmjs.org "
0
0
0
浏览量0
momo

如何突破 debian12 对于系统的 pip 安装第三方包的限制?

如何突破 debian12 对于系统的 pip 安装第三方包的限制? 我先使用 apt install python3-pip 安装了一个 pip,然后想使用 pip install idocker 安装 idocker 工具。但是被禁止了 ops@es-mq-20280228:~/opt/rabbitmq$ pip3 install idocker error: externally-managed-environment × This environment is externally managed ╰─> To install Python packages system-wide, try apt install python3-xyz, where xyz is the package you are trying to install. If you wish to install a non-Debian-packaged Python package, create a virtual environment using python3 -m venv path/to/venv. Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make sure you have python3-full installed. If you wish to install a non-Debian packaged Python application, it may be easiest to use pipx install xyz, which will manage a virtual environment for you. Make sure you have pipx installed. See /usr/share/doc/python3.11/README.venv for more information. note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages. hint: See PEP 668 for the detailed specification. 但是 apt 仓库还没有收录 idocker ops@es-mq-20280228:~/opt/rabbitmq$ sudo apt install idocker Reading package lists... Done Building dependency tree... Done Reading state information... Done E: Unable to locate package idocker 怎么办? *** 使用 sudo apt install python3-xxx 的方式不行,因为 xxx 不许被 debian 的 apt 收录才行,我要的 "idocker" (https://link.segmentfault.com/?enc=e0aUnTrAM9Yj86KvEATi1Q%3D%3D.wvQTrF1vrkx9ePHIsaEpPg1QsF1k5U8WN5F0cp%2BeNw%2FmMU4hxyJ6q1phpCBLwlCXj%2B4dXwVGpEbp5uUYYnWAHw%3D%3D) 是我自己写的上传到了 pypi ("https://pypi.org/project/idocker/1.4.0/#description" (https://link.segmentfault.com/?enc=X5kLdjGhd02TLVCCYSmjYw%3D%3D.kYlRJIUqIhf0LgZEf7VNwbusQf1Ex5BrYSfY0vk9JFfPLGUG7XunwOO8GL5lX36wM54ANK%2F8cWBDdBs1I%2BXA8g%3D%3D)),并不是很出名,所以并没有 debian 的 apt 收录 ╭─pon@wechat-console ~ ╰─➤ sudo apt install python3-idocker 1 ↵ [sudo] pon 的密码: 正在读取软件包列表... 完成 正在分析软件包的依赖关系树... 完成 正在读取状态信息... 完成 E: 无法定位软件包 python3-idocker *** 也不想使用虚拟环境,因为这些使用这些命令之前,还需要激活虚拟环境,这太麻烦了 *** 至于 debian 推荐的是用 pipx 来安装,我就不懂了,既然 pipx 可以,为什么还要限制 pip 不行呢? *** 不过这个 pipx 确实可以 先安装 pipx sudo apt install pipx 然后再安装需要的第三方包 ╰─➤ pipx install idocker installed package idocker 1.4.0, installed using Python 3.11.2 These apps are now globally available - idocker done! ✨ 🌟 ✨
0
1
0
浏览量181
momo

Mybatis的注解@ResultType的场景是什么?

"@ResultType" 注解是搭配 "ResultHandler" 来用的。 «REF: "https://mybatis.org/mybatis-3/java-api.html#mapper-> annotations" (https://link.segmentfault.com/?enc=6L2as3ciyY7OiMOygNlqpQ%3D%3D.a5XBDyN66%2FH8dPNVUw1pJEoL3LuFqlKZiqgL31ecgchUkk21tcgo8FHmGmnfU%2F4iWYvO87J8P%2FLW3hrSUOx2ow%3D%3D)This annotation is used when using a result handler. In that case, the return type is "void" so MyBatis must have a way to determine the type of object to construct for each row. If there is an XML result map, use the "@ResultMap" annotation. If the result type is specified in XML on the "" element, then no other annotation is necessary. In other cases, use this annotation. For example, if a "@Select" annotated method will use a result handler, the return type must be "void" and this annotation (or "@ResultMap") is required. This annotation is ignored unless the method return type is "void".» 所以你那个写法不对,起码你得定义一个 ResultHandler 出来: @Select("select * from Student") @ResultType(Student.class) void queryStudent(StudentResultHandler resultHandler); public class StudentResultHandler implements ResultHandler { private final List students; public StudentResultHandler() { students = new ArrayList(); } @Override public void handleResult(ResultContext context) { Student student = (Student)context.getResultObject(); students.add(student); } }
0
0
0
浏览量0
momo

不明白mybatis源码中queryStack变量的作用是什么?

在阅读mybatis源码时,发现问题: 源码org.apache.ibatis.executor.BaseExecutor#query ,如下: protected int queryStack; public List query(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, CacheKey key, BoundSql boundSql) throws SQLException { ErrorContext.instance().resource(ms.getResource()).activity("executing a query").object(ms.getId()); if (closed) { throw new ExecutorException("Executor was closed."); } if (queryStack == 0 && ms.isFlushCacheRequired()) { clearLocalCache(); } List list; try { queryStack++; list = resultHandler == null ? (List) localCache.getObject(key) : null; if (list != null) { //处理Callable类型,还需要绑定IN/OUT参数 handleLocallyCachedOutputParameters(ms, key, parameter, boundSql); } else { //本地缓存没有结果,直接查询数据库 list = queryFromDatabase(ms, parameter, rowBounds, resultHandler, key, boundSql); } } finally { queryStack--; } if (queryStack == 0) { // ... codeA ... } return list; } 我无法明白这个queryStack变量的意义。 通过控制流程来看: 1. 假如这段代码允许多线程并发,那么int变量一定会出现线程安全问题。 2. 假如这段代码仅允许单线程跑,那么只可能是因为存在递归的情况,才需要引用int来记录stack,但是我跟代码半天,也没有发现哪里会递归。 有没有大佬讲讲啥时候这个方法会递归调用?或者是其他作用。
0
1
0
浏览量140
momo

HarmonyOS 4.0 Panel 高度问题怎么解决?

https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241006/0099b6804f8a526d5a66ffa89d89b280.png目前用的是harmonyOS4.0版本,遇到了panel的高度问题,点击panel外的区域也会拖动panel的大小,需求是拖动panel外的区域不会影响panel,而是正常的页面滑动(类似一些著名听书软件的功能),一直没有一个完美的解决方案,期待大佬解惑 尝试过onChange或onHeight事件 高度随mode改变而改变,结果是失败的
0
1
0
浏览量178
momo

antv x6 导出成图片之后格式紊乱,部分样式丢失,求解决方案?

import * as htmlToImage from 'html-to-image' const container = document.getElementsByClassName('x6-graph-svg')[1] htmlToImage.toPng(container as HTMLElement).then((dataUri) => { console.log(dataUri) // data:image/png;base64,xxxx })
0
0
0
浏览量0

履历