momo
如果强制将jpg改成png, 会有什么后果?
好奇的问下, 我现在有一张jpg格式的图片, 如果我直接将文件后缀改成png, 会有什么副作用? 像素会变吗?
momo
websocket请求头中如何带上cookie?
websocket请求头中如何带上cookie?
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)
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"
]
}
momo
如何用laravel框架封装微信支付和支付宝支付?
建议你直接用现有的【EasyWeChat】的laravel版,作者本人在腾讯,这个库很多年了,也一直保持着更新
"https://github.com/overtrue/laravel-wechat" (https://link.segmentfault.com/?enc=uD%2FYbDxwej49cGh9ChVE3A%3D%3D.TjLAyhsobtx175b8UAxYs%2F54nV4KP7nBGqKQtfeLZXhXxgR3ihSF1Iz0Y11uJ9w2)
momo
为啥敏捷教练都去搞DevOps培训了?
你指的是 Master 还是 Coach?毕竟都被翻译成教练。
如果是 Coach 的话,做咨询的难道不是客户要啥就给啥吗 😂 像我在埃森哲的朋友,自己的 Title
就总变,客户要啥自己就是啥,主打的就是一个“多快好省”。客户说自己想搞 DevOps,难道你还能说“对不起,我们只会搞 Scrum,你找别人吧”?
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241221/fc9569d7dcc730403cf8c8591fd12225.png)
momo
js,正则,如何去除数字前面多余的小数点,并保留两位小数?
'..737870036647989828297407280.3090979897'.match(/\d+(\.\d{1,2}|)/)[0]
momo
市面上的低代码平台可以做一个微信小程序吗?
想用低代码平台实现一个微信小程序并在微信上发布,应该怎么弄,想看下大家都是怎么做的?
momo
ubuntu下使用request访问url报错?
requests.exceptions.SSLError是Python中requests库在处理HTTPS请求时遇到SSL错误时所抛出的异常。
可以尝试按照下面的步骤排查一下问题:
1. 环境变量配置问题。确保环境变量正确配置,特定库所需的环境变量要与运行它们的Python环境相匹配。
2. SSL模块问题。确保SSL模块已正确安装并可用。
3. 证书验证问题。如果需要访问的HTTPS网站没有提供有效的证书,或者提供的证书不受信任,就会触发SSLError异常。可以通过添加证书验证来解决。
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)
momo
网站搭建相关问题?
网站搭建萌新,有些疑惑希望大佬们可以解答:
1. nginx、tomcat与云服务器(如阿里云、腾讯云等)、机房实体服务器有啥区别?
2. 搭建网站的时候什么时候用nginx和tomcat,以及详细原因(比如为啥tomcat大多用于前端到后端的中间件,而nginx为啥大多用于用户到浏览器的中间件?)
3. 搭建网站,前后端分别部署在不同云服务器 上,以前端访问后端为例,在已实现跨域的前提下,能否通过 前端向后端云服务器的公网ip发生http请求 实现将前端数据(如登陆表单等)发送到后端
4. 为啥阿里云、腾讯云的服务器公网ip不能直接访问?(即:在浏览器url栏输入公网ip通常无法连接,而必须通过软件等实现?)
ps:萌新一枚,勿喷勿喷
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"
}
]}
momo
wpf 在touchdown的时候如何避免mousedown?
最近在做一款wpf下的应用程序,大部分时时间会在触摸屏下使用, 少部分时间会用鼠标使用。
有两个事件 :一个是mousedown 即鼠标点下的事件。另外一个是touchdown事件。touchdown的时候会触发mousedown
,反之则不会。测试发现在触摸屏下使用touchdown 反应很快,使用体验的要优于mousedown。但是这样就需要绑定两个事件 一个mousedown
一个touchdown。但是触摸的时候就会触发两次,请问这个问题要怎么解决?
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上实现文件重定向的方法之一。如果你需要更高级的文件重定向功能,你可能需要编写自定义软件来实现它,或者寻找专门设计用于此目的的第三方工具。
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" }});
},
momo
如何在Java中显示百分比数字?
在 Excel 单元格中显示一个格式为百分比的值,例如12.3%。
默认情况下,该值显示为文本,但我需要将其显示为数字。
momo
AutoHotKey2如何弹出菜单 选择后SendText这个选择?
AutoHotKey2如何弹出菜单 选择后SendText这个选择?
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;
});
},
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)
我想知道为什么,如何解决,谢谢您的帮助!
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等图片名后缀结尾
momo
ant组件中级联选择点击右侧的箭头才展示下一级的内容如何实现?
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241118/f17a478be061523c71500c88594b2520.png)
ant-design-vue中如何实现点击文本为选择,点击右侧的箭头为展开下一级的功能?
momo
如何实现表格内图片预览?
图像接受值必须是数组,针对当前点击对象后会弹出一个图像数组,如果每个单击对象只需要显示一张,就在数组里放一个地址。
momo
怎么快速或同时把 .less 文件转成.css 文件,然后压缩成.min.css?
怎么快速或同时把 .less 文件转成.css 文件,然后压缩成.min.css?
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241116/c0b9577fded83f26dd0ebe84c8063de8.png)
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;
momo
Python 循环为何跳过初始值问题?
i=10
while i<101:
i+=1
if i%5!=0:
continue
print(i)
为什么输出结果不包含i=10这个初始值?
momo
小程序怎么唤起自己的原生能力?
这种问题拿报错信息搜一下就出来了。
"https://developers.weixin.qq.com/community/develop/article/do..." (https://link.segmentfault.com/?enc=6l2CWoaiKl3uE2PLjfrHaQ%3D%3D.Gq3WP8O4UrFichzvOOCy3Zfbl7ViBj0XPn0pWusEUi6cQ2%2Fl6hi965APe1spgoTQ6YsBC2gKEbvKLCdv0DuqJpEMYrR%2FNOCieB7QrycP2FYRb1VnKVW4J3QfCXUJIIPH)
momo
centos6.8能安装AMH面板吗?
centos6.8能安装AMH面板吗,有说明吗
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);
}
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列表里的值也变了呢
momo
像h5或小程序上的关于“医院导航”的系统都用到了哪些技术?有做过的吗?
小程序一般都是 webview 嵌一个 h5 页面不会用小程序原生,因为小程序上的 canvas/webgl 支持程度没有 h5 好且目前一般的库都基于
h5 封装,如 threejs。
如果要求简单好实现,那么可以做以下学习、开发:
1. 跳过 webgl,直接学习 threejs
2. 医院地图需要具体的 CAD 实际图来进行转换处理成 threejs 可识别的坐标体系,使用 threejs 进行绘制渲染,或者使用模型(需要有C4D或Blender相关了解人员)直接加载渲染
3. 标记合适的导航点位,使用A星算法进行最佳导航路线展示
4. 医院根据标记的导航点位,安装对应的蓝牙基站,结合手机蓝牙进行当前用户的定位
3d导航这块的摸索需要一段时间,而且后续的优化工作也相对繁重,否则一些低端机会卡顿闪退等。
以上是一些简单的方向供参考~
momo
Vue单页面应用 使用router-view 点击菜单切换功能 内存越来越大 有何排查方法或建议?
Vue单页面应用 使用router-view 点击菜单切换功能 内存越来越大
尝试了下加keep-alive 能解决 但是 我们的功能业务场景 每次点击菜单都要刷新 加上keep-alive会有各种各样的问题
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
相关的配置,可以使用鼠标拖动实现旋转与缩放效果。但无法平移。
期望可以通过某种设置实现鼠标拖动平移的效果,谢谢!
!!在去除了其他一些配置项后,目前已经可以平移,正在查找是哪个配置项导致的无法平移
momo
关于前端(小程序)数据加密一般用什么方法?
不需要加密, 用https就好了.
看页面上用的是就是https, 不用处理.
只要你的服务器能和支付接口的金额对的上就行.
页面上选多少充值没意义, 服务器收到的请求才算数.
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)
# 试了几次都不对
momo
使用video.js实现视频有声的自动播放,类似b站、抖音?
先了解个概念,叫做,媒体意愿度,
你说的那些网站,能自动播放,是因为媒体意愿度高,具体这个意愿度哪里查,可以在地址栏输入这个地址查看"chrome://media-engagement/"
怎么提高你网站的媒体意愿度,开发者干涉不了,只能通过用户使劲和你网站的视频播放功能进行交互,才能提高。
***
比如,你说的抖音,我不常打开,媒体意愿度底,
我现在打开抖音,它也是静音才能自动播放的.
"image.png" (https://wmlx-new-image.oss-cn-shanghai.aliyuncs.com/images/20241023/7c91732831399308e5c05ea338ff9e01.png)
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)
momo
redis列表如何一次pop多个值啊?
有人说
lrange key 0 -1
这个只是读取啊,可以反复读取,数据不会删除。
lpop一次只能弹出一个。
momo
elementUI 我通过removeTag这个方法,改变了checkedKeys得值,但是页面上勾选状态为什么没变化???
官网setCheckedNodes方法可用 已解决
momo
IDEA创建Java项目时src板块丢失?
分享一个小知识:
在IDEA里面遇到的:创建java项目时src板块丢失,找到原因,是因为在创建时没有勾选
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"的值越长优先级越高?
momo
想问一下一个C语言的位运算小问题?
想问一下一个C语言的位运算小问题.
有没有一个简单的表达式的写法,可以得到一个32位无符号数,只保留其最左侧或者最右侧的1的结果?
比如35=(000..0100011),得到32或者1?
用循环写的话不难,但,用一个简洁的表达式能写出来吗?
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)
momo
如何检测服务器的性能已经达到瓶颈?
根据本人实际经验,当CPU使用率高于800%时,网页服务会出现明显延迟
momo
怎么解决python 爬虫运行多进程报错:TypeError: cannot pickle '_thread.lock' object?
改成 "from multiprocessing import Queue",因为你用的是多进程执行任务,进程之间的数据通信要通过多进程模块提供的队列的方式。
由于你选用的是线程间 的队列,里面用的锁是线程锁 ,不能被序列化以用于进程间通信,所以才有了提示你的那个错误。
momo
终端安装命令安装不了,请问是哪个地方出了问题?
设一下npm的源为"http://registry.npmjs.org "
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! ✨ 🌟 ✨
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);
}
}
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,但是我跟代码半天,也没有发现哪里会递归。
有没有大佬讲讲啥时候这个方法会递归调用?或者是其他作用。
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改变而改变,结果是失败的
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
})