CTang
IP:
34关注数
0粉丝数
8获得的赞
工作年
编辑资料
链接我:

创作·101

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

请问一般数据库的表的字段是预先创建的,还是在运行项目的时候创建的?

通常是在项目启动前就预设好了,以我司的项目为例: 1. 先安装基础设施包,完成后会部署数据库服务(如MySQL)。 2. 再安装产品包,此时先执行数据库更新任务(进行建表、表结构更新等操作),再部署提供业务功能的服务(服务进程启动时做数据初始化)。 如果是服务启动时发现表不存在进行建表的话,需要在服务的代码里处理针对多种不同数据库的兼容逻辑,这样会导致后期维护的困难,所以相关处理需要在基础设施层完成,并定义一套规范给业务方按需编写数据库升级脚本参考。
0
0
0
浏览量0
CTang

git 如何实现 include 声明?

我知道了,可以用感叹号声明 *.npz !testing/std.npz
0
0
0
浏览量0
CTang

redis里面有个map数据量太大了,怎么分割?

redis本身不提供这种命令,根据自身需求去拆解,比如要拆成10个hash,就用原本的key % 10来确定放到哪个hash里,后续查询的时候也使用相同的规则来找到对应的hash
0
0
0
浏览量0
CTang

Dell R420 服务器安装 debian 12问题?

Dell R420 服务器安装 debian 12,有两个问题,第一个问题就是如果硬件做RAID5,在安装的时候,总是卡在安装基本系统某一步骤 "80176a2aa2e1a06500fd18a6a742d12.jpg" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20250107/4613e0995d744a4cf1aad575eeec4004.png) 之后就 "0e2451572c8cd4241f2390509954460.jpg" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20250107/8c5f38e7637b82cccb47aa651cf2f5f4.png) 如果不做RAID,单独安装在一个盘上,最后一点点安装 GRUB 启动引导器的时候,安装不了dummy "a11decf89f7cfea11fca246ae25b92c.jpg" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20250107/582e37c8dcb010871a6e055a53164f9b.png) 试了很多次,就有一次成功了,后面就一直安装不了dummy 网上有人说是 bios的nvrom满了,我有开盖用跳线的方式,重置了 bios ,还是这样
8
1
0
浏览量293
CTang

vue/uniapp中,如何将十六进制字符串转换成有符号 2 补码中的十进制?

都是 int8 呗?那直接位移更简洁一些: function hex2dec_int8(hex) { const BITS = 8; const dec = parseInt(hex, 16); return 0x80000000 >> (32 - BITS) | dec; } console.log(hex2dec_int8('c4')); 可以直接简化成: const hex2dec_int8 = (hex) => -128 | parseInt(hex, 16); console.log(hex2dec_int8('c4')); 应该不会有比这个更简便更高效的写法了。
0
0
0
浏览量0
CTang

在二维平面上,有一点p(x,y),有一个三角形ABC,顶点坐标为A(x1,y1),B(x2,y2),C(x3,y3),如何判断点P是否在三角形内或在三角形的边上?

在空间中,有两条线段,分别是线段AB和线段CD,它们的顶点坐标分别是A(x1,y1,z1),B(x2,y2,z2),C(x3,y3,z3);D(x4,y4,z4),请问如何求线段AB与线段CD的交点坐标?
12
1
0
浏览量184
CTang

docker部署前端nginx跨域不生效怎么回事?

"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241229/adb1670645e58bb8478eedd5d0850b78.png) 这里nginx虽然代理了3344端口的后端,但是前端请求的时候还是直接访问的3344这个服务。这里需要前端改一下配置,访问接口的时候不用再加3344端口了。
0
0
0
浏览量0
CTang

React 的props传递是否只能传递对象,而不能传递数组?

类似这样传数组 就是说,用一个变量传数组 如果类似 "" 这样传参,等价于 "",当然接收到的是个对象
0
0
0
浏览量0
CTang

ios微信浏览器打开的h5网页不支持pagehide?

如题,有个h5网页(使用uniapp+vue2编写)挂载在微信公众号上的,有个需求是当离开网页时保存用户填写的信息,其中的离开包括返回按钮,关闭浏览器按钮,如下图所示: "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241227/867c2319dd512d76eae01185f7a9fedd.png) 其中最上方的关闭按钮我在ios手机上监听不到,安卓都是支持的,关键代码如下: mounted() { this.source = appSource() console.log('this.source', this.source) if (this.source === 'ios') { window.addEventListener('pagehide', this.recordHandler) } else { window.addEventListener('visibilitychange', this.recordHandler) } this.getList() this.getPriceModelList() this.getProjectAddrList() }, // 监听页面卸载 onUnload() { if (this.source === 'ios') { window.removeEventListener('pagehide', this.recordHandler) } else { window.removeEventListener('visibilitychange', this.recordHandler) } }, 我在网上查了资料,ios是支持pagehide事件的:("https://developer.apple.com/library/archive/documentation/App..." (https://link.segmentfault.com/?enc=JNq6NMB5lz4SyWvCmdbbCw%3D%3D.Iff1ZJrVdvN%2BGcpRuaMYCZl7y08SASXpQB9ud130Hf3rAQqepy3asxPD0NgnmQQymVQOmKrNhUHAbP98gG%2BMh%2FsW8lxJ5OWXqKZXOSwlp5i9yqqNA70Jhzcb%2Fp0Q%2FS3d8tt%2FS7xsOO60vKMmBEnc7ogulrfhPxiN%2FAZ1rYybtyDbJbHi9SlhKhLnJQfzpLea1t2I6dLfk%2FKP7v3VgkvQXYUiG5KjmF%2F8ibqJbmCMLwE%3D)) "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241227/0b7a90bd159dc804ef2cbbc2f3464974.png) 但我用苹果手机测试都不行,测试代码如下: recordHandler(e) { if (this.source === 'ios') { localStorage.setItem('unload', '90') } this.sendBack() }, 理论上来说,如果我点击左上角的关闭按钮,如果浏览器监听到了pagehide事件,它就会执行recordHandler里面的方法,就会给localStorage设置一个unload的值,但我用苹果手机测试始终没有成功,有大神知道怎么兼容吗?
13
1
0
浏览量257
CTang

曲线积分问题??

$$ x^2dx = \frac{1}{3}dx^3$$ $$ \int x^2 \sin (x^3) dx = \int \frac{1}{3}sin(x^3)dx^3 $$
0
0
0
浏览量0
CTang

React 路由插件 reactrouter 的路由匹配问题:空路由为什么匹配不到?

当前路由是:"***.com" 也就是没有 "/" 的时候居然匹配不到任何路由,但我定义了 "/" export default function (){ return [ { path: "/", element: 12312313123, component: 12312313123, lazy: () => import("./Page/Auth"), } ] } 不能自动重定向么?如何解决这个问题呢?
11
1
0
浏览量367
CTang

import.meta 使用前提是什么?

"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241225/7d190486fa56c3fdf5f740dd08666e5d.png) "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241225/498088c8fca18311e89efc0279471377.png) 除了这里还要做什么吗?
12
1
0
浏览量439
CTang

怎样用typescript表达对象的key为特定字符串和数字拼接的类型?

页面报错: "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241218/1777ac1e56583de5295d83034e5fb976.png) 类型定义: "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241218/4c3b5f209a2fbc2a9690a318615fd41a.png) 怎样才能正确地表达这个key的类型?
17
1
0
浏览量322
CTang

线、柱双轴图中,如何自定义不同系列的颜色?

解决方案 Solution VChart图表提供了对应的能力,支持通过配置scale来自由控制数据与值的映射关系。在双轴图图,控制颜色就可以使用scale来控制各个图形字段使用特定的颜色值。 更具体的配置规则,可参考:"https://visactor.io/vchart/option/barChart#scales.domain" (https://link.segmentfault.com/?enc=S8gcbuQ9AkheZBfX2GacqQ%3D%3D.HosGXUdWmtNPzqfx9dfECqaQNb61iqynoDKSawY5vlpgApHxc%2FidFT9JwsmIz4n7uyhp2FxMoyXP5fUAYBFohA%3D%3D) 代码示例 Code Example import { useEffect, useRef } from "react"; import VChart from "@visactor/vchart"; export const Chart = () => { const containerRef = useRef(null); useEffect(() => { const spec = { type: "common", data: [ { id: "id0", values: [ { x: "Monday", type: "Breakfast", y: 15 }, { x: "Monday", type: "Lunch", y: 25 }, { x: "Tuesday", type: "Breakfast", y: 12 }, { x: "Tuesday", type: "Lunch", y: 30 }, { x: "Wednesday", type: "Breakfast", y: 15 }, { x: "Wednesday", type: "Lunch", y: 24 }, { x: "Thursday", type: "Breakfast", y: 10 }, { x: "Thursday", type: "Lunch", y: 25 }, { x: "Friday", type: "Breakfast", y: 13 }, { x: "Friday", type: "Lunch", y: 20 }, { x: "Saturday", type: "Breakfast", y: 10 }, { x: "Saturday", type: "Lunch", y: 22 }, { x: "Sunday", type: "Breakfast", y: 12 }, { x: "Sunday", type: "Lunch", y: 19 } ] }, { id: "id1", values: [ { x: "Monday", type: "Beverage", y: 22 }, { x: "Tuesday", type: "Beverage", y: 43 }, { x: "Wednesday", type: "Beverage", y: 33 }, { x: "Thursday", type: "Beverage", y: 22 }, { x: "Friday", type: "Beverage", y: 10 }, { x: "Saturday", type: "Beverage", y: 30 }, { x: "Sunday", type: "Beverage", y: 50 } ] } ], color: { type: "ordinal", field: "type", domain: ["Breakfast", "Lunch", "Beverage"], range: ["lightPink", "lightBlue", "purple"] }, series: [ { type: "bar", id: "bar", dataIndex: 0, label: { visible: true }, seriesField: "type", xField: ["x", "type"], yField: "y" }, { type: "line", id: "line", dataIndex: 1, label: { visible: true }, seriesField: "type", xField: "x", yField: "y", stack: false } ], axes: [ { orient: "left", seriesIndex: [0] }, { orient: "right", seriesId: ["line"], gird: { visible: false } }, { orient: "bottom", label: { visible: true }, type: "band" } ], legends: { visible: true, orient: "bottom" } }; const vchart = new VChart(spec, { dom: containerRef.current }); vchart.renderSync(); return () => vchart.release(); }, []); return ( ); }; 结果展示 Results https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241216/69606f53a58eeded1870c1637fd1581a.png 在线示例:"https://codesandbox.io/s/color-scale-nh89qz?file=/src/App.js:..." (https://link.segmentfault.com/?enc=flfHebWkIcwEqD3dh1uxAg%3D%3D.S9E474KE75uPNOragRRxV3LqMITWyq9yyaWwsy1P8SICIuIYbgpWbYQpSlxrpRvIl9JM1EcX5t5xnOTtPvkUrCOS6weKvLX47U6%2FcT%2F9tYk%3D) 相关文档 "VChart Github" (https://link.segmentfault.com/?enc=tIWVp%2BoEMA1NWTVJkLcngQ%3D%3D.MWcle6PyiAvz8DDMpIL5se8nXCBywHTCHDEsQYjU8WptsaZbMcXJRuQLUKh0RXkJ) "VChart Scale Guide" (https://link.segmentfault.com/?enc=vWc3ZDqTZxTTozu%2FkppFiQ%3D%3D.IB6qQhCHEcLYnCRmUauloJtsi193ZQizQ5XB6flRCkIHzJSiMwGGOcuonekJwTMdmcVsIblqAMNJyRV8VjIoYw%3D%3D)
0
0
0
浏览量0
CTang

antd message 当浏览器在后台时弹出会在切到前台才关闭 有解决办法吗?

我5秒弹一次message 浏览器切到后台一段时间后 再切到前台 会看见一大排消息然后一起隐藏,我看onClose事件在后台也是正常调用的
0
1
0
浏览量13
CTang

C 语言单链表查询问题?

// ... [其它代码不变] // 通用查找函数,找到所有匹配的数据 struct list *list_find_all_generic(struct list *head, void *key, int (*callback)(void *, void *)) { struct list *resultHead = list_init(NULL); struct list *p = head->next; while (p != NULL) { void *data = p->Data; if (callback(data, key) == 1) { list_add(resultHead, data); } p = p->next; } return resultHead; } int main() { // ... [其它代码不变] // 查找员工 int search_id = 1003; struct list *searchResults = list_find_all_generic(head, &search_id, staff_id_find); // 打印所有找到的结果 list_display_generic(searchResults, staff_printf); //销毁查找结果链表 free(searchResults); // 这里只释放头节点,因为数据是共享的,不应该再释放 //销毁主链表 list_destroy(head, free_staff); return 0; }
0
0
0
浏览量0
CTang

echarts 仪表盘怎么设置数据上下滚动特效?

echarts 仪表盘怎么设置数据上下滚动特效? ui效果 "20231010150511_rec_-convert.gif" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241214/c4507c5e587ec495e93a09a0cd1f0e86.png)
0
1
0
浏览量14
CTang

不用eval怎么把字符串的箭头函数的转为函数?

问题 不用eval怎么把字符串的箭头函数的转为函数d 原数据 var data = { listeners: { change: "(val) => { console.log(val); }", }, }; 期望 转换成不带双引号的 var data = { listeners: { change: (val) => { console.log(val); }, }, };
0
1
0
浏览量12
CTang

vscode代码格式化和配置问题?

好的工具和好的配置能有效提升自己的开发效率,好看的排版更能让人赏心悦目。 问题 目前我主要以 "Vue3"、"typeScript"为技术栈从事开发。因为代码检查和格式化,相关的插件如"volar"、"ESlint"和"prettier"已经装好了,我也自己配置了一些设置——保存时自动格式化,但我的配置并不完整。 目前有个问题不知道该怎么配置,在某一行和下一行代码里有好多个回车: function A(){} // 好多回车 function B(){} 保存时有格式化,但这两个方法之间并没有格式到只有一行。 另一个问题是导入提示,我装了"Path Autocomplete"插件,已配置"@"通配符,在使用时,导入是可以正确显示路径的,但是在绝对路径导入时点击导入的对象时无法跳转至该文件,且鼠标移入时无法展示用法和参数类型什么的,比如: import { getUserInfo } from '@/api/user' 点击"getUserInfo"无法跳转至src/api/user和移入时无法显示接口名称和参数类型;不只是接口,组件,方法什么得都这样,如果用相对地址导入却可以。 如果可以的话,懒人小弟恳请大佬给一份自己常用好用的setting.json ^_^, 也可以发送至邮箱"zwm0417@qq.com" (mailto:zwm0417@qq.com),十分感谢!
0
1
0
浏览量11
CTang

vue安装rem插件(npm i px2rem-loader -D)使其自适应屏幕大小,但为什么刷新后才能达到预期效果?

在vue.config.js配置 const px2rem = require('postcss-px2rem'); const postcss = px2rem({ remUnit: 192 //基准大小 baseSize,需要和rem.js中相同 }); css: { loaderOptions: { postcss: { plugins: [postcss] } }, }, main.js配置 import './utils/flexible'; import { setRemInit } from './utils/rem'; setRemInit(); //进行初始化立即运行 刷新前: "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241210/98f3387a033f7263a8426b362e29f688.png) 刷新后(想要的效果): "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241210/7bf15f37c410fa56a33636b818071e2d.png) 若是返回前一个页面,页面内容字体仍然会变小
0
1
0
浏览量18
CTang

uniapp自定义导航栏,有下面一个问题,应该怎么解决?

因为你现在的写法页面栈里面有两个B C返回B 用navigateBack
0
0
0
浏览量0
CTang

各位大佬 如下图ui怎么实现?

献丑一下昨天刚学的 如果用css实现的话用mask属性,当然我这个不是很完美 "https://codepen.io/ing-M/pen/PoVPxoa" (https://codepen.io/ing-M/pen/PoVPxoa)
0
0
0
浏览量0
CTang

请问步骤条step加气泡卡片popover怎么实现?

如下代码已实践不能实现目的,请问该怎么实现? {{item.title}}
0
1
0
浏览量12
CTang

一个vue项目文件结构看不懂,也不知道怎么启动,是不是分模块打包啊,有大佬知道这么启动这个项目吗?

项目启动直接看 package.json 然后你最外层这个什么东西都没有。 就往里找 package.json 里面那个有 vue.config.js 大概率是 vue-cli 创建的。 *** 综合看下来是一个大仓,只不过不太规范。
0
0
0
浏览量0
CTang

请问是否有antd/tree方法可以一键展开所有节点呢?

调整一下写法就行了, "defaultExpandAll" 只会在初始化的时候生效,正确理解这句话很重要 * 初始化数据即存在的场景,直接渲染即可const [treeData, setTreeData] = useState([ { key: '1', title: 'parent 1', chidren: [...] }, { key: '2', title: 'parent 1', chidren: [...] } ]);return ; * 初始化没有数据,通过异步请求获取数据的情况,增加一个判断,有数据才渲染组件const [treeData, setTreeData] = useState([]); useEffect(() => { fetchTreeData().then((treeData) => setTreeData(treeData)) }, [])return ( treeData.length ? : null );
0
0
0
浏览量0
CTang

异步加递归问题,await被跳过?

"recursive" 方法内部实现的问题,Array 的 forEach 循环是不支持 async/await 的,所以应该把 forEach 部分换成 for 循环再配合 await ,如下: async recursive(data) { try { for (let i = 0; i < data.length; i++) { const item = data[i] if(item.isLeaf) {// 没有下级 const data = item.data ? item.data : item this.treeData.push(data) }else { const { data } = await fetchArchiveTree(this.getQueryParams(item)) for (let item of data.data) { if(!item.isLeaf) { const Arr = [item] await this.recursive(Arr) } this.treeData.push(item) } } } } catch (error) { console.log('获取树形数据失败',error); } console.log('数据收集完毕'); },
0
0
0
浏览量0
CTang

echarts图表点击下载报错?

请贴出具体的核心代码
0
0
0
浏览量0
CTang

怎么让文字到阴影上面?

给 "banner-content" 元素增加以下样式: .banner-content { position: relative; z-index: 1 } 使你的 ".banner-content" 元素覆盖在你的 "overlay-3:before" 伪类上面就好了。
0
0
0
浏览量0
CTang

滚动翻页时,js添加的img为什么懒加载失败?

滚动翻页时,js添加的img为什么懒加载失败? 页面中,滚动翻页时,js添加的img为什么懒加载失败,图片不显示,如果能显示 懒加载用的是zepto+下面的代码 "https://github.com/maplejan/jquery_lazyload/blob/1.8.5/jquery.lazyload.js" (https://link.segmentfault.com/?enc=iUzKKFeweDe9cSUeP2Mu7A%3D%3D.ahBcfs0TrFNKWRGmaXljSi1DEAxyFwTuf%2B%2BrV%2BG01h6UttrYWdOmYL2FGvBir1dHw2LNV1bQM2EeItwIvcRFultaJf66yZ5dXuXvssIYgi0%3D) 首页正常加载hmtl中的图片,能通过懒加载实现,翻页js添加dom部分内容没问题,就是当内容进入可视区不能实现图片懒加载
0
1
0
浏览量19
CTang

前端如何判断用户的电脑是 arm 还是 x86?

前端如何判断用户的 mac 是 arm 还是 x86 "https://www.telerik.com/download/fiddler-everywhere" (https://link.segmentfault.com/?enc=%2BBHyfQQdK7BCzrmzwOMhtg%3D%3D.VULg3EvL8%2BI112PqiHE2LYRf5moKNI1cO0kmcL78AMWwXwywN7eBwTKYPhurwdqdAi4c17Kn7ktawo1TFbyHAA%3D%3D) 下载 fiddler-everywhere 的时候,它监测到了我的电脑是 arm 怎么实现的?浏览器的 UA 都还是谎称自己是 intel "图片.png" (https://wmlx-new-image.oss-cn-shanghai.aliyuncs.com/images/20241104/494f538bf9c2ded5a913ffbb7a999aeb.png) 是通过 js 调用浏览器 API 获得的结果吗?对应的 API 是哪个呢?
0
1
0
浏览量18
CTang

懒加载性能问题?

现在有一个下拉列表,需要渲染的数据为十几万条,每次渲染的时候都会很卡顿,我想优化渲染性能,考虑采用懒加载的形式,先对数据获取接口进行分页处理,每次在判断快滚动到底部的时候,再加载下一页数据,加载完成之后,拼接旧数据 + 新数据 组成要渲染的数据,再赋值给下拉框进行渲染,但是这种形式有一个问题是:当滚动到最后面的时候,这时候需要渲染的数据量也很多,会造成dom过多,页面性能也会有问题,请问我该如何优化?
0
1
0
浏览量11
CTang

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

内存越来越大,那么你需要思考是否存在内存泄漏,所以你应该先去排查。
0
0
0
浏览量0
CTang

复杂表单和树的结构设计与编辑?

https://wmlx-new-image.oss-cn-shanghai.aliyuncs.com/images/20241027/97c242070308913e46b22559f7773fec.png 1. 线是一个数组,数组里面有 简单线 和 标记线 对象,其中 简单线 和 标记线 可以互转,也可以上下调整位置 2. 像 简单线 没有下级的就是一个对象,里面有许多需要填的的数据,然后像 标记线 这种的就是 也是一个对象,也有许多不一样的数据要填,但是这个标记线里面有个对象的值是个数组,这个数组的里面有许多对象是 简单标记 ,每个简单标记有可能又会变成 标记线 这样的解构,就是 简单标记 里面有个属性的值是数组的对象,可以嵌套 这个图片这个树下面就显示表单,这个在上面选中 简单线 就修改 简单线 的数据,选中 标记线 就修改 标记线 的数据, 选中 简单标记 就修改 简单标记 的数据 有没有大佬做过相似的,提供一下思路 目前我只会做 线 下面全是 简单线 的这种,求大佬指教
0
1
0
浏览量9
CTang

笔记本只有在重启的时候,会提示no bootable devices,正常关机启动则不会提示?

1.开机状态下,点击按钮重启的时候,每次都会提示no bootable devices,这时是不能开机成功的,会卡在这里,然后必须按电源键关掉,再开机才行; 2.开机状态下,关机,再开机,则不会提示no bootable devices 2.win10系统,已经重装过系统依然这样
0
1
0
浏览量15
CTang

UniApp H5 项目怎么定义全局变量 ?

如果你是基于Vue2的,可以在main.js文件中定义 "Vue.prototype.$abc = 123;" 如果你是基于Vue3的,类似写法 "app.config.globalProperties.$abc= 123;"
0
0
0
浏览量0
CTang

VUE自定义弹窗,使用ant-design-vue图片预览功能后,关闭弹窗时为什么会报错?

试了一下,这样似乎是可以的。 * src/components/mDialog/index.vue resetFields()"> --> {{title}} {{cancelText}} {{okText}} import { ref, reactive, watch, onBeforeMount, onBeforeUnmount } from 'vue' const mDialogWrapperRef = ref(); const mDialogRef = ref(); const emit = defineEmits(['update:visible', 'ok', 'cancel', 'closed']) const props = defineProps({ visible: { type: Boolean, default: false }, width: { type: String, default: '' }, maxWidth: { type: String, default: '' }, title: { type: String, default: '' }, footer: { type: Boolean, default: true }, showOk: { type: Boolean, default: true }, showCancel: { type: Boolean, default: true }, okText: { type: String, default: '确认修改' }, cancelText: { type: String, default: '暂不修改' }, // 确认按钮-加载中 okLoading: { type: Boolean, default: false }, // 点击蒙层是否允许关闭 maskClosable: { type: Boolean, default: true }, // 内容样式 bodyStyle: { type: Object, default: () => ({}) }, // 层级 - 如果设置了就是固定层级,如果不设置从最多层级1000开始往上加 zIndex: { type: Number, default: 0 }, // 是否加到body节点下 appendToBody: { type: Boolean, default: true }, // 当关闭 Dialog 时,销毁其中的元素 destroyOnClose: { type: Boolean, default: true }, // 为 Dialog 启用可拖拽功能 draggable: { type: Boolean, default: false } }) const _d = reactive({ show1: false, // 控制v-if show2: false, // 控制display show3: false, // 控制动画 zIndex: 1000, // 最低层级 width: !props.width && !props.maxWidth ? '400px' : props.width, // 宽度 maxWidth: props.maxWidth, // 最大宽度 // 拖动参数 drag: { // 是否点下 isDown: false, // 整个页面你最大宽高 pageWidth: 0, pageHeight: 0, // 弹窗宽高 dialogWidth: 0, dialogHeight: 0, // 左右最大移动距离 minX: 0, maxX: 0, minY: 0, maxY: 0, // 移动结果 resultX: 0, resultY: 0, // 鼠标点下是历史移动距离 startX: 0, startY: 0, // 鼠标点下时相对于page的位置 downX: 0, downY: 0, // 鼠标移动位置 moveX: 0, moveY: 0, } }) watch(() => props.visible, (newVal) => { setVisible(); }) onBeforeMount(() => { setVisible(); // 绑定鼠标事件 window.addEventListener('mousemove', dragMove); window.addEventListener('mouseup', dragUp); }) onBeforeUnmount(() => { // 解绑鼠标事件 window.removeEventListener('mousemove', dragMove); window.removeEventListener('mouseup', dragUp); }) // 设置显示状态 function setVisible () { if(props.visible) { new Promise((resolve, reject) => { if(!_d.show1) { // 第一次通过v-if添加节点到dom树 setZIndex(); _d.show1 = true; _d.show2 = true; setTimeout(() => { setTimeout(() => { resolve(); }, 15); }, 15); } else { // 关闭后不删除节点,再显示弹窗 _d.show2 = true; setTimeout(() => { resolve(); }, 30); } }).then(() => { document.body.style.overflow = "hidden"; _d.show3 = true; }) } else { // 关闭弹窗 _d.show3 = false; // 关闭时动画效果 setTimeout(() => { _d.show2 = false; // 设置display:none if(props.destroyOnClose) { _d.show1 = false; // 通过v-if销毁节点 } document.body.style.overflow = ""; emit('closed'); }, 250) } } // 显示的时候设置z-index function setZIndex() { let max = 1000; // 判断是否有自定义的层级 if(props.zIndex) { max = props.zIndex; } else { let aMd = [...document.querySelectorAll('.m-dialog.show')]; aMd.forEach(obj => { let num = getStyle(obj, 'z-index'); if(max 0) { minX = 0; } if(minY > 0) { minY = 0; } if(maxX > _d.drag.pageWidth - _d.drag.dialogWidth) { maxX = _d.drag.pageWidth - _d.drag.dialogWidth; } if(maxY > _d.drag.pageHeight - _d.drag.dialogHeight) { maxY = _d.drag.pageHeight - _d.drag.dialogHeight; } _d.drag.minX = minX; _d.drag.maxX = maxX; _d.drag.minY = minY; _d.drag.maxY = maxY; // 开始位置 _d.drag.startX = _d.drag.resultX; _d.drag.startY = _d.drag.resultY; // 鼠标点下时相对于page的位置 _d.drag.downX = e.pageX; _d.drag.downY = e.pageY; } function dragMove(e) { if(!props.draggable) { return; } if(!_d.drag.isDown) { return; } // 移动距离 _d.moveX = e.pageX-_d.drag.downX; _d.moveY = e.pageY-_d.drag.downY; // 涉及结果位置 let resultX = _d.drag.startX+_d.moveX; let resultY = _d.drag.startY+_d.moveY; if(resultX _d.drag.maxX) { resultX = _d.drag.maxX; } if(resultY _d.drag.maxY) { resultY = _d.drag.maxY; } _d.drag.resultX = resultX; _d.drag.resultY = resultY; } // 鼠标抬起 function dragUp(e) { if(!props.draggable) { return; } if(!_d.drag.isDown) { return; } _d.drag.isDown = false; } // 获取节点到body的高度 function getDistanceBody (obj) { var oBody = document.body; var oHtml = document.documentElement; var oParent = null; var oDistance = { top: 0, left: 0 } do { oDistance.top += obj.offsetTop; oDistance.left += obj.offsetLeft; oParent = obj.offsetParent; obj = oParent; } while(oParent && oParent != oBody && oParent != oHtml) return oDistance; } .m-dialog-wrapper { position: fixed; z-index: 1000; top: 0; right: 0; left: 0; bottom: 0; background: rgba(0,0,0,0.25); transition: opacity .25s; opacity: 0; overflow: auto; &.show { opacity: 1; .m-dialog { transform: scale(1); } } &.is-drag { -moz-user-select:none; /*火狐*/ -webkit-user-select:none; /*webkit浏览器*/ -ms-user-select:none; /*IE10*/ -khtml-user-select:none; /*早期浏览器*/ user-select:none; .m-dialog-title { cursor: move; } } .m-dialog-modal { display: table; padding: 20px 0 40px; min-height: 100%; min-width: 100%; box-sizing: border-box; } .m-dialog-cell { display: table-cell; vertical-align: middle; } .m-dialog-container { margin: 0 auto; } .m-dialog { position: relative; z-index: 2; border-radius: 2px; overflow: hidden; background: #fff; transition: transform .25s; transform: scale(0.9); box-shadow: 0 3px 6px -4px #0000001f, 0 6px 16px #00000014, 0 9px 28px 8px #0000000d; .m-dialog-title { position: relative; box-sizing: border-box; padding: 16px 24px; border-bottom: 1px solid #f0f0f0; color: #000; font-size: 16px; line-height: 22px; word-wrap: break-word; min-height: 55px; .m-dialog-close { position: absolute; top: 50%; right: 0; margin-top: -27px; width: 54px; height: 54px; display: flex; justify-content: center; align-items: center; font-size: 16px; color: #666; cursor: pointer; &:hover { color: #333; } } } .m-dialog-content { padding: 24px; min-height: 100px; } .m-dialog-footer { padding: 10px 16px; text-align: right; background: transparent; border-top: 1px solid #f0f0f0; border-radius: 0 0 2px 2px; .btn { padding: 4px 15px; font-size: 14px; color: #333; border: 1px solid #d9d9d9; background: #fff; height: 32px; font-weight: 400; cursor: pointer; outline: medium; border-radius: 2px; &:not(:last-child) { margin-right: 8px; } } } } }
0
0
0
浏览量0
CTang

vue能对没上传到服务器的视频文件进行预览么?

没有url构造一个就行了"video.src = URL.createObjectURL(file)" "https://developer.mozilla.org/zh-CN/docs/Web/API/URL/createOb..." (https://link.segmentfault.com/?enc=saraVWUDMeifQby8%2FMmAwA%3D%3D.AAsvzzztugxJUijfbm%2BQaG8%2BfMhN9yeQ2zFn6DRJ4UEddhyW6AR%2BxSPUlPqKllMYn4ddT3ClzT7GMmZTVPefouzUr%2FUHiV%2FixLxgr%2FpJsWA%3D)
0
0
0
浏览量0
CTang

github action 进入终端不知道怎么退出,一直到超时后失败?

github action失败 name: Load and run Docker image on the server uses: appleboy/ssh-action@master # 使用社区 action 来通过 SSH 连接服务器并执行命令 with: host: ${{ secrets.DEPLOY_HOST }} username: ${{ secrets.DEPLOY_USER }} key: ${{ secrets.DEPLOY_KEY }} script: | docker stop blog-server #停止老镜像 docker rm blog-server docker load < /tmp/lxy-blog-server.tar.gz # 加载 Docker 镜像 docker run --name blog-server --net=host server-prod # 使用 Docker Compose 启动服务 exit 就是我通过github action把最新的代码生成的docker镜像推送到服务器上 再通过script部分的命令让新镜像运行起来 这里会出现github action 无法结束的问题 一直到超时直接失败 虽然失败并没有影响我的功能,但是每次action失败也不好看 «每次会得到这样一个结果 2024/01/07 10:58:57 Run Command Timeout» 应该是我的退出方式不对,但不知道怎么修改 我尝试过的方式就是最后一行代码加上了exit 这个并没有效果
0
1
0
浏览量177
CTang

css中水平选项怎么实现?

将容器旋转-90deg,子元素旋转90deg。 «"https://stackoverflow.com/questions/18481308/set-mouse-wheel-to-horizontal-> scroll-using-> css/39573512#39573512" (https://link.segmentfault.com/?enc=mv7HstMOCTzq%2FzkRP4h1mg%3D%3D.vs6xok6KezqFiR4JXQEuk8pDM%2BPfOg9ZV%2Br94O33uL7onAN7UDWn8wYSV3ATxNYX4Qh2u%2F8%2FdSfyTbbwmbVImM6%2FF9hbG8Lv%2BoCbhZSW%2BH80dKvPq7%2Bp%2B1KxznG8fU7JmqKaP16lRY4lv4kAido1VA%3D%3D)"https://segmentfault.com/a/1190000042443056" (https://segmentfault.com/a/1190000042443056)»
0
0
0
浏览量0
CTang

一个网页的实现效果?

"https://shanghai.wellingtoncollege.cn/" (https://link.segmentfault.com/?enc=CYlXFbuq9eoVUMFWtCaY8g%3D%3D.y8qDrAWBTyZzpRkKLuuHZHVPv1t7RsgjOuKXeP9h5rmAKJIfZQzVVjWwZY2Hr%2F5z) "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241011/d79ae192102549bd4f53ed13a86e60b9.png) 每次鼠标滚轮往下一格时, 页面就会往下滑动固定高度的一页, 这种效果是怎么实现的?
0
1
0
浏览量149
CTang

Vue.js 中如何监听通过 .sync 修饰符传递的对象变化?

vue2 父组件定义了一个对象,通过.sync方法传递给子组件,子组件会改变这个对象的值,然后想watch这个值发现产生变化的时候调用某个回调,发现watch不到。。为什么会watch不到呢?应该通过defineOxxx函数进行了监听?有什么解决方法吗https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241010/6876ec79ad07433388d5c8eeacf6bae3.pnghttps://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241010/1544e9536d9931a32298f62c56f69cea.pnghttps://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241010/5d5b8a5f1f024811c5f7a34cef4d58ca.png 在子组件也尝试监听,没监听到
0
1
0
浏览量156
CTang

docker端口映射后,外部可以直接通过宿主机未开启的端口访问到服务的问题?

我的服务器A部署了前端服务, ip为192.168.111.115, 服务器部署有nginx(非docker部署),防火墙开放有80端口以及ftp相关端口,由于前端需要node环境,于是用docker部署了nodejs环境,并在Nginx配置: location / { proxy_pass http://localhost:3000; } 然后使用docker run [其它] 3000:3000 [其它] 命令 并未指定网络模式(默认为bridge模式)运行项目 项目可以正常通过192.168.111.115访问,然后一个偶然的机会发现居然可以192.168.111.115:3000也能访问到, 于是进行了以下尝试 尝试一: 在网上搜了解决方法,是在docker的配置文件daemon.json加入 { "iptables": false } 从新启动docker,通过docker info发现如下警告: WARNING: bridge-nf-call-iptables is disabled WARNING: bridge-nf-call-ip6tables is disabled 而且这样操作发现项目访问速度也比原来慢了. 于是重新启用docker的iptables. 尝试二: 使用服务器firewall-cmd 命令,设置了3000端口的入方向的限制 firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port protocol="tcp" port="3000" reject' firewall-cmd --permanent --add-rich-rule='rule family="ipv6" port protocol="tcp" port="3000" reject' 发现不管用.仍可以通过3000端口访问到. 尝试三: 尝试在docker run 中设置 --net=host 模式,问题得到解决,但这样就没有网络隔离,安全性差了. 求助: 有没有什么方法实现, 我即使用bridge模式, 又可以限制外部仅可以通过ip访问到项目,而ip:3000 访问不了?
0
1
0
浏览量140
CTang

如何将一个并列形式的数组对象,根据字段改为嵌套形式?

我有如下代码: Chapters = [{ level: '1', content: '案例概况010000-170900', url: '案例概况010000-170900.html' },{ level: '2', content: '案例概况010100-170901', url: '案例概况010100-170901.html' },{ level: '2', content: '案例概况010200-170902', url: '案例概况010200-170902.html' },{ level: '3', content: '案例概况010201-170903', url: '案例概况010201-170903.html' },{ level: '1', content: '案例概况020000-170904', url: '案例概况020000-170904.html' },{ level: '1', content: '案例概况030000-170905', url: '案例概况030000-170905.html' },{ level: '2', content: '案例概况030100-170906', url: '案例概况030100-170906.html' }] 我想将上述代码按照 level 字段划分,改造成如下格式 Chapters = [{ level: '1', content: '案例概况010000-170900', url: '案例概况010000-170900.html', Childs: [{ level: '2', content: '案例概况010100-170901', url: '案例概况010100-170901.html', Childs: [] },{ level: '2', content: '案例概况010200-170902', url: '案例概况010200-170902.html', Childs: [{ level: '3', content: '案例概况010201-170903', url: '案例概况010201-170903.html' }] }] },{ level: '1', content: '案例概况020000-170904', url: '案例概况020000-170904.html', Childs: [] },{ level: '1', content: '案例概况030000-170905', url: '案例概况030000-170905.html', Childs: [{ level: '2', content: '案例概况030100-170906', url: '案例概况030100-170906.html' }] }] 层级可能不限于 3 级,所以我能想到的是使用递归,但是尝试写了几遍均已失败告终 还望解答,万分感谢!
0
1
0
浏览量210
CTang

elementui开发的表单,控件获取焦点时导致页面抖动,如何处理?

我看官方的示例"demo"在有滚动条的情况下,未出现这个问题,需要看你的代码具体分析。 建议使用注释大法,挨个元素注释,找出肇事元素。 也可以去"https://stackblitz.com/" (https://link.segmentfault.com/?enc=Oevf8%2BeRkDEDT0xeS6v%2Bvw%3D%3D.sfgNvPwhM7AFU09a%2BMM4zLYiPylxRSrhPu3S7kv29J4%3D)弄个在线"demo"贴出来,大家才好帮你看。
0
0
0
浏览量0
CTang

js for循环怎么实现如下输出?

console.log(new Array(10).fill(0).map((_, i) => Math.ceil((i + 1) / 3))) console.log(new Array(10).fill(0).map((_, i) => (i % 3) + 1))
0
0
0
浏览量0
CTang

这道算法题怎么解?

from collections import deque directions = {'rtl': (-1, 0), 'ltr': (1, 0), 'ttb': (0, -1), 'btt': (0, 1)} def min_steps_to_sort(matrix): n = len(matrix) target = [[i for i in range(1, n*n)] + [0]] # 将矩阵转换为易于处理的表示形式 initial_state = flatten_matrix(matrix) queue = deque([(initial_state, [])]) visited = set() while queue: state, steps = queue.popleft() if state == target: return steps for pos in find_zero(state): # 寻找当前状态下的空格子位置 x, y = pos for direction, (dx, dy) in directions.items(): new_pos = (x + dx, y + dy) if 0 <= new_pos[0] < n and 0 <= new_pos[1] < n: new_state = move_zeros(state, pos, new_pos) if new_state not in visited: visited.add(new_state) queue.append((new_state, steps + [(pos, direction, count_zeros_in_direction(state, pos, direction))])) return None # 如果无法到达目标状态,则返回None # 辅助函数:将矩阵展平为一维数组 def flatten_matrix(matrix): ... # 辅助函数:查找矩阵中0的位置 def find_zero(state): ... # 辅助函数:将空格子从一个位置移动到另一个位置 def move_zeros(state, from_pos, to_pos): ... # 辅助函数:统计在指定方向上有多少个连续的0需要移动 def count_zeros_in_direction(state, start_pos, direction): ...
0
0
0
浏览量0
CTang

MySQL中学号字段类型选择:int还是char?

mysql:我现在想做一个用户信息表,字段中有学生学号,请问学号该用int类型还是char类型? 新手
0
1
0
浏览量128
CTang

动态添加时间范围,如何置灰已选择时间?

父组件代码 {{ item.startTime + "-" + item.endTime }} 编辑 // 组件 import AddTime from "./component/addTime.vue"; // utils import { deepClone } from "js-fastcode"; export default { name: "VueTemplateIndex", components: { AddTime }, data() { return { companyArr: [], companyPos: 0, showAddDialog: { visible: false }, idx: "", // 编辑当前行行数 tableData: [], }; }, mounted() { const season = ["春季", "夏季"]; const period = ["尖峰", "高峰", "低谷"]; this.tableData = Array.from({ length: season.length }, (_, i) => period.map((pj, j) => ({ season: season[i], period: pj, timeList: [], })) ).flat(); this.merge(this.tableData); }, methods: { // 表格行合并方法 merge(tableData) { // 要合并的数组的方法 this.companyArr = []; this.companyPos = 0; for (let i = 0; i 0 ? 1 : 0; // 如果被合并了_row=0则它这个列需要取消 return { rowspan: _row_1, colspan: _col_1, }; } }, // 新增数据 handleFormEdit(list, index) { let arr = deepClone(this.tableData), brr = []; brr = arr .filter((item) => item.season === list.season) .map((item) => item.timeList) .flat(); this.idx = index; this.showAddDialog = { visible: true, title: "编辑", data: brr, list: list.timeList, }; }, // 新增回调 getAddResult(list) { this.tableData[this.idx].timeList = list; }, }, }; 子组件代码 取 消 确 定 import { devideTimes, deepClone } from "js-fastcode"; // 引入自定义js库 export default { name: "", props: { showAddDialog: { type: Object, default: () => ({}), }, }, data() { return { tableData: [], propsData: [], // 存储父组件传递过来的时间段 allAddData: [], // 存储所有已选时间段 }; }, watch: { showAddDialog: { handler(newVal, oldVal) { this.tableData = []; // 如果当前行有数据,则显示当前行数据 if (newVal.list.length) { this.tableData = newVal.list.map((item) => ({ ...item, disabled: true, })); } else { // 如果当前行没有数据,则默认显示开始时间和结束时间 this.tableData = [{ startTime: "", endTime: "" }]; } for (let i in this.endTimeList) { this.endTimeList[i].disabled = false; } for (let i in this.startTimeList) { this.startTimeList[i].disabled = false; } this.propsData = deepClone(newVal.data); // 将当前季节下的所有时间段都放在数组中 this.allAddData = deepClone(newVal.data); this.handleDisable(); }, deep: true, }, }, computed: { // 获取默认的1-24小时数据 timeOptions() { return devideTimes(30, 2); }, startTimeList() { return this.timeOptions.map((item) => ({ value: item, label: item, disabled: false, })); }, endTimeList() { return this.timeOptions.map((item) => ({ value: item, label: item, disabled: false, })); }, }, mounted() {}, methods: { // 新增行 handleRowAdd(row, idx) { this.allAddData = this.handleUnique([ ...this.tableData, ...this.propsData, ]); this.handleDisable(); // 判断开始时间所有项全部是不是禁用状态,如果是则说明所有时段已选择,否则未全部选择 let flag = this.startTimeList.every((item) => item.disabled); if (flag) { this.$message.warning("所有时段都已选择"); return false; } if (!row.startTime && !row.endTime) { this.$message.warning("开始时段和结束时段必填"); return false; } this.tableData[idx].disabled = true; this.tableData.push({ startTime: "", endTime: "", }); }, // 删除行 handleRowDelete(row, index) { // 当只有一条数据时,初始化表格数据 if (this.tableData.length === 1) { this.tableData = [{ startTime: "", endTime: "" }]; } else { this.tableData.splice(index, 1); } this.propsData = this.propsData.filter( (item) => !(item.startTime === row.startTime && item.endTime === row.endTime) ); this.allAddData = this.handleUnique([ ...this.tableData, ...this.propsData, ]); this.handleDisable(); }, // 数组对象去重 handleUnique(arr) { let obj = {}; return arr.reduce((cur, next) => { obj[next.startTime + next.endTime] ? "" : (obj[next.startTime + next.endTime] = true && cur.push(next)); return cur; }, []); }, // 切换起始时间 handleStartChange(time) { let times = this.timeOptions; // 找到所选开始时间的下标 let start_index = times.findIndex((value) => value === time.startTime); // 将结束时间小于开始时间的选项禁用 for (let i = 0; i { start.disabled = false; }); // 遍历所有已选时间段 this.allAddData.forEach((item) => { let start_index = times.findIndex((value) => value === item.startTime); let end_index = times.findIndex((value) => value === item.endTime); this.startTimeList.forEach((start, i) => { if (i >= start_index && i = 2 && this.tableData.some( (item) => item.startTime === "" || item.endTime === "" ); if (flag) { this.$message.warning("请将所有时段填写完整"); return false; } // 提交时将未填写时段的数据去除,主要是针对只有一条数据未填写情况 this.tableData = this.tableData.filter( (item) => item.startTime && item.endTime ); this.showAddDialog.visible = false; this.$emit("get-add-result", this.tableData); }, }, }; .remove-icon, .plus-icon { font-size: $fs22; vertical-align: middle; margin-left: 10px; }
0
0
0
浏览量0
CTang

如何在Vue3+TS+Element Plus项目中实现Excel文件上传与数据导入?

后端要提供两个接口,上传和导入,前端需要把文件的数据处理好,直接传入接口里就可以。 解析excel数据,可以使用xlsx import * as XLSX from 'xlsx'; const processExcel = (file) => { const reader = new FileReader(); reader.onload = (e) => { const data = new Uint8Array(e.target.result); const workbook = XLSX.read(data, { type: 'array' }); // 处理 workbook 中的数据 const sheetName = workbook.SheetNames[0]; const worksheet = workbook.Sheets[sheetName]; const jsonData = XLSX.utils.sheet_to_json(worksheet); console.log(jsonData); }; reader.readAsArrayBuffer(file); };
0
0
0
浏览量0
CTang

iOS中webview_flutter插件上下文菜单语言显示为英文的解决方法?

请教下各位大佬,在Flutter中,我使用webview_flutter插件来嵌入网页.在ios 中长按显示的上下文菜单默认显示的是英文. 请问各位大佬们有办法解决吗! "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241004/b37cde401cc2482414b450f01cff3904.png) 1.设置 ios 系统语言: 打开ios"设置"应用。 滚动并点击"通用"。 点击"语言与地区"。 点击"iPhone语言"。 选择"中文(简体)" 结果:不起作用,但是浏览器中的上下文菜单能正确显中文 2. class AppMobile extends StatelessWidget { const AppMobile({super.key}); @override Widget build(BuildContext context) { return ScreenUtilInit( useInheritedMediaQuery: true, designSize: const Size(AppConfig.screenW, AppConfig.screenH), minTextAdapt: true, splitScreenMode: true, builder: (context, child) { return MaterialApp( localizationsDelegates: [ //设置pull_to_refresh库多语言 RefreshLocalizations.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], theme: ThemeData( // scaffoldBackgroundColor: Color(0xffF2F4F9), // 这里设置你想要的颜色 ), supportedLocales: [ const Locale('zh', 'CN'), // 添加中文(简体)支持 ], onGenerateRoute: Application.router.generator, ); }); } } 不起作用
0
1
0
浏览量127

履历