某大型企业物流管理系统替代产品开发踩坑总结
2019独角兽企业重金招聘Python工程师标准>>>
项目背景介绍
该项目是国内某大型科技公司为解决现有物流系统每年租用价格高昂、使用不便的问题而起,原计划是在半年内在之前公司一以基本弃用的产品基础上进行优化,替换部分核心功能并增加新功能以替换现在租用的物流管理系统。但最后因为资金问题项目延后到了11月才正式启动,此时离该公司现有系统租用到期的时间已经只有四个半月左右。
项目难点(只做前端,只提前端)
- 使用了angular2,缺少足够的技术支持
- angular2没有较为成熟而全面的插件,为实现客户需要的效果需要实现专用的插件
- 项目涉及到世界时区,前端所有跟时间有关的控件都需要结合时区进行处理
项目问题
- 项目依赖客户方内网与原有系统,浪费了大量时间在环境搭建上
- 因为前端的TL不在现场,导致项目前期代码结构混乱,后期进行了大量的重构
- 客户需求不明确,功能反复推翻重写,导致进度失控
- 项目缺乏测试,导致后期功能修改成本高
- 人员变动大,代码风格因为没有code review导致没有统一,代码质量有较大波动
- 项目难度预测偏差大,项目人手不足
项目踩坑
1.时区问题
项目涉及到世界时区,用户可以设置自己先看见的时间是基于某一时区下的时间,并在用户切换时区的时候时间自动进行变化,前期团队提出的方案有三个。使用UTC时间、使用时间戳、统一使用北京时间,然后前端进行时间的格式化就能够满足需求,但是问题在于,数据库里已经有了大量的原始数据,这些时间使用的时间是不确定的,而前端所选用的primeng插件在初始化或者传值的时候使用的时间格式是不带时区的,必须传new Date()这样的时间格式才能进行渲染否则会报错。而该问题还涉及到了选择时间后的时间输出,插件输出的时间,以日历为例,输入2016-12-12这样的值需要进行一次转换才能传入组件,而选择了一个日期也同样需要处理才能显示,再加上两个时间选择控件间的联动效果,这个逻辑就更加复杂了。
解决这个问题的方案是,将显示与保存的时间剥离开,在显示时展示年月日将传入的时间的时区直接去掉做成年月日相同的系统时间,为了实现这步引入了moment插件,利用该插件将数后台传过来的时间全部进行了转换,转换成了满足插件的时间格式进行展示,然后再利用moment实现了时间格式的互转,日历的联动则是手写了大量的逻辑来实现的。在最后提交表单的时候又利用moment的utcoffset()将不带时区的时间与从用户信息里获取到的时区偏移值进行处理,格式化出满足后台需求的时间。所以用户操作的和最后保存的实际上并不是同一个数据。这样就保证了时间的显示与储存的时间在对应的环境下都是满足其需求的。
2.变量全局订阅
提到全局变量订阅这个问题,其实是类似于angular1.x里的广播和订阅,在这个项目里应用到的场景是在各种遮盖层,弹出框以及之前提到的用户设置的时区值变更的情况。在ng2里我们一开始是通过订阅一个subject的方式来实现的这中场景,但是后期研究的时候发现,如果只是使用subject会导致的如果这个subject在赋值前被subscribe了,那么当它被第一次赋值的时候其实是不会触发subscribe它之后触发的事件的,为了避免这种情况发生应该使用rxjs里的ReplaySubject。而弹窗这种需要内部信息变动较多的场景我们则是使用的BeHaviorSubject来实现。
这里简单介绍下Subject
(部分内容摘自翻译的官方文档https://mcxiaoke.gitbooks.io/rxdocs/content/Subject.html),
Subject可以看成是一个桥梁或者代理,在某些ReactiveX实现中(如RxJava),它同时充当了Observer和Observable的角色。因为它是一个Observer,它可以订阅一个或多个Observable;又因为它是一个Observable,它可以转发它收到(Observe)的数据,也可以发射新的数据。
针对不同的场景一共有四种类型的Subject,
AsyncSubject: AsyncSubject只在原始Observable完成后,发射来自原始Observable的最后一个值。(如果原始Observable没有发射任何值,AsyncObject也不发射任何值)它会把这最后一个值发射给任何后续的观察者。
BeHaviorSubject: 当观察者订阅BehaviorSubject时,它开始发射原始Observable最近发射的数据(如果此时还没有收到任何数据,它会发射一个默认值),然后继续发射其它任何来自原始Observable的数据。
PublishSubject: PublishSubject只会把在订阅发生的时间点之后来自原始Observable的数据发射给观察者。需要注意的是,PublishSubject可能会一创建完成就立刻开始发射数据(除非你可以阻止它发生),因此这里有一个风险:在Subject被创建后到有观察者订阅它之前这个时间段内,一个或多个数据可能会丢失。
ReplaySubject: ReplaySubject会发射所有来自原始Observable的数据给观察者,无论它们是何时订阅的。也有其它版本的ReplaySubject,在重放缓存增长到一定大小的时候或过了一段时间后会丢弃旧的数据(原始Observable发射的)。如果你把ReplaySubject当作一个观察者使用,注意不要从多个线程中调用它的onNext方法(包括其它的on系列方法),这可能导致同时(非顺序)调用,这会违反Observable协议,给Subject的结果增加了不确定性。
3.PrimeNG,神坑的组件
在进行项目需求分析的inception的阶段,我的老师选用了这个插件作为我们这个项目的主要插件进行使用,进行具体功能开发前使用它的demo其实也并没有发现什么问题,而其也能够提供较为全面的组件,一开始的时候我对这个组件是很满意的,但是用到项目里立即就发现并不是这样一会事了,因为PrimeNG是其JQuery版本改过来的,所以其实现某些效果用的还是JQuery对Dom直接进行操作的方式,体现最为明显的就是,PrimeNG对样式的修改是通过添加和删除class来进行的,包括可以通过伪类来实现的样式调整,这直接造成我想定制某个组件的样式的时候非常麻烦才能找到对应的类,而且这些类其实还会被不同的组件重复利用,经常改了这里,那里就挂了。最最过分的是,PrimeNG里的样式和Bootstrap不停的在冲突...
除了这个问题组件本身也存在一些bug,比如dataTable组件内有属性相互冲突导致有的效果没法使用,又比如因为组件内的渲染都是在OnInit时去做的,很多需要在OnChanges时才生效的东西是没办法做的。
所以后期我和老师基本是在自己写插件来满足需求,老师是用的他写的angular ui model,我用的自己写的low逼组件。
补充:好像最近primeNG又有点火了,它确实是当前市场上angular组件最全最多的插件库,这点我不否认,但其主要问题是底层代码依旧有大量之前JQuery版本的影子在定制化需求的时候会显得不方便比较重,其次是其样式与boorstrap有不少冲突的地方,样式上的定制也非常麻烦,这里推荐破狼老师的rebirth-ng,使用后相对比较灵活,特别是在样式的定制上,可以直接通过修改对应的样式文件进行个性化的定制,底层代码也比较清晰,我经常是api文档没有看懂的时候就看底层代码去了解实现原理然后就能很轻松的了解到组件的用法,特别是表单这块在用rxjs进行优化后对大量数据更新非常的流畅。
rebirth-ng的地址是:https://greengerong.github.io/rebirth-ng/#/gettingStarted
4.生命周期的坑
angular的生命在项目里最常用的是ngOnInit和ngOnChanges这两个状态,但是使用时经常会发现这两个状态会很容易混淆,而且很多需要用到ngOnChanges的场景会因为误用了ngOnInit而导致无法实现相应的渲染效果。primeNG里其实很多问题就是这样造成的,很多需要反复赋值的变量其实是不应该只放在ngOnInit里的,多数情况这些变量是一些Object。
ngOnChanges(changes)的changes里有一个判断是否为第一次触发ngOnChanges的属性isFirstChange,可以通过这个属性避免在ngOnInit()之前对属性做一些操作。
而ngAfterViewInit这个钩子笔者自己其实没有用到过,但是项目完成后其实发现有的地方其实是可以通过这个钩子进行优化的。项目中因为有的场景下需要子组件的某个值在其ngOnInit中被赋值后才去触发,或者是同级的组件互相之间产生了变量间的关联,这两种情况我在项目中前者是通过在子组件中添加Output,父组件监听其emit事件来触发对应的事件来实现,而后者多是通过subject来实现的。但现在看来其实前者应该用ngAfterViewInit来实现更为标准。
5.lodash中的function在组件路由改变的时候是不生效的坑
这个问题是我和我的tech leader在解决一个请求会多次提交时发现的,但是因为代码的问题,表单提交后会在父组件进行查询和保存查询条件,但是我们发现表单会在大概1000ms的时间内被提交两次,造成页面的两次刷新,我们尝试用lodash里的debounce去限制这个事件触发的次数,但是发现并没有作用,一开始我们认为是debounce的问题,尝试自己写了类似的方法也没有解决问题,最后定位问题是,当子组件将form提交到父级的时候因为代码逻辑的原因,这里其实是做了一次路由的变化,触发了父级的ngOnInit()事件中保存搜索信息的function,多次提交时其实直接绕过了前端的重名检测,而因为后端没有添加重名检测所以保存了两次完全一样的东西,所以这里其实并不是debounce没有生效,而是产生了两个独立的debounce而它们各自独立且生效,所以function还是会触发两次。
6.管道的非纯与纯
这里管道的知识其实直接看官方文档就好,老师的中文文档也翻译的很明白。https://angular.cn/docs/ts/latest/guide/pipes.html
angular的管道在应用中也是特别方便的,在项目里有时甚至可以用来充当黑科技,项目中有一次需要对一个特别复杂的对象组,当然我也不知道后端为啥一定要给我返一段这么难用的数据,为了用value替换其最底层的code属性名我尝试用lodash的各种处理都没能成功,而且过程中发现一个很奇怪的问题,我可以正常的添加一个value属性并以code的值去赋值这个属性,但是我没法把code直接改成value,也没替换掉这个code(知道原因的coder可以给我说一下这可能是什么原因造成的),我初步估计是lodash在处理的过程中在什么地方clone了一个对象但是修改时没有改到这部分就return了这个值造成的。最后妥协的黑科技就是写了一个pipe在使用到这个属性的时候将其进行了转换,目前为止没有发现造成了其他的什么问题。
7.组件的通信
同样附上官方文档的地址https://angular.cn/docs/ts/latest/cookbook/component-communication.html
这块比较大,我准备之后单独写一篇来介绍angular2的各种组件通信,个人最习惯使用的是Input和Output的来进行父子组件的双向绑定,文档中提到的ngOnChanges()里面其实监听的都是组件Input的值,如果是组件内部的值发生变化的时候是不会触发ngOnChanges()的。个人只在调试时使用到过setter和getter所以就不班门弄斧讨论这个了。而另外一种则是之前在说时区提到过的通过订阅subject,或设置所订阅的subject的next方法复制去触发组件事件的方式,这种文章在很多大神的博客上都能找到我就不做累述了。最后是使用ViewChild,使用ViewChild 首先要在子组件中添加exportAs属性,这样在父组件里就可以通过文档里的方式调用自己组件里的方法了。
8.组件结构设计的坑
这个坑其实真是这个项目最大的毒瘤了,项目中的advance Search,一开始是准备由多人开发所以切分出了几个模块,但是子组件和父组件之间的数据绑定不可避免的变得很死,一开始我自己做的时候因为这个模块还不涉及到表单信息的保存因为需要赶进度,所以这些所有的输入框(各种类型和组件统称输入框,不是只有input)的值一开始并不是全部保存的,只会提交修改了的部分,这样做的结果就是在做编辑一个保存的form的时候父组件接收到的是一个不全的表单,而这个表单需要传给全部的子组件进行判断处理后才能完成整个模块的正确渲染,当然这样也能做,但是要知道子组件中还有子组件,考虑到使用的插件,这个表单可能会传递3-4层,而每次传递都需要写function进行处理,后期维护和bug的查找都会有很大的影响,于是权衡利弊之后,我们的方案是将每个模块做成了一个input输入框,具体的做法是引入了NG_VALUE_ACCESSOR, ControlValueAccessor, NG_VALIDATORS, Validator, AbstractControl这些东西然后讲一个模块的数据视作一个整体,为其添加验证等input框的属性,这些方法其实就是实现一个输入框的内容。
change: (value: SupplyChain) => void;touched: () => void;changed(): void {if (this.change) {this.change(this.model);}}writeValue(value: SupplyChain): void {this.model = value;if (this.model && this.model.destGeosAndSubGeos) {this.selection = _.map(this.model.destGeosAndSubGeos.split(';'), (item)=> {return {label: item,value: item,}});}}registerOnChange(fn: (value: SupplyChain) => void): void {this.change = fn;}registerOnTouched(fn: () => void): void {this.touched = fn;}validate(c: AbstractControl): {[p: string]: any} {const valid = this.model;if (!valid) {return {SupplyChain: this.model};}}
然后,通过在每个模块都定义类型将这个模块的值全部设定初值,完成了该模块的重构,数据只需要在最上层传入,通过组件的ngModel就能完成双向绑定,不需要再写对应的代码进行复杂的处理。
9.form的Dirty验证
因为在advance Search这块的表单中一些初值的设定是在其子组件渲染阶段已经进行了赋值,所以最上层的表单的Dirty就已经是true即已修改,现在考虑可能在子组件渲染完成后(ngAfterViewInit)再将这个dirty手动设置成false就能满足效果。但是开始的时候其实我个人是完全跑偏了的,具体做法是我希望去深度克隆一个对象作为originForm然后将这个对象跟提交的表单作对比判断是否为Dirty,但是做的过程中发现使用loadsh的cloneDeep,clone出来的对象是Form初始化修改之前的原始形态,当时我考虑的方向是cloneDeep可能clone的是clone对象的原始状态,并在如何克隆当前状态上花了比较多的时间去实现,但是自己实现一个方法后发现原因并不是cloneDeep会克隆到对象的原始状态,而是在我克隆的时候虽然进行到了父组件的OnInit周期,但是子组件的OnInit周期还没有进入,所以我在子组件将表单状态修改后又进行了一次emit,并在父组件去将其捕获后再进行clone,这样就成功的clone到了想要的对象,但是做到这里其实并没有完全做完这个功能,因为这个比较结果是要绑定在disabled属性上的,但是对象不能直接进行对比,所以我希望将其拍成json的字符串来进行对比,而这个方法不能直接在标签里使用所以这里我手写了一个新的pipe,但我随即便发现,这个pipe并没有按照我的预期在form改变的时候触发,原因是改变的form是作为一个对象改变的,而纯的pipe是不能监测到这个变化的,为了实现这个功能还需要讲pipe修改为非纯,至此算是使用一个和科技解决了这个问题,目前也没有看出有什么bug。
tryLoadViewForm() {this.route.params.subscribe((params: {mode: string, viewCode: string}) => {if (params.viewCode) {this.loadingService.show();this.quickSearchService.getViewList().subscribe(views => {this.pageEditable = _.find(views, item=>{return item.value === params.viewCode}).editable;});this.quickSearchService.getViewForm(params.viewCode).subscribe(form => {this.form = AdvanceSearchForm.mkfrom(form);this.loadingService.close();});}});}tryCloneOriginForm(){this.originForm = _.cloneDeep(this.form);}
这里其实有个隐患就是太容易LoadViewForm如果比TryCloneOriginForm执行的慢会造成编辑时clone的对象出错,改成之前提到的标准方式不会有这种问题,但是就算这样运行的时候也没有出现bug
<app-panel header="Supply Chain" [toggleable]="true"><app-supply-chain name="supplyChain" [(ngModel)]="form.supplyChain"(onOptionsLoaded)="tryLoadViewForm()"></app-supply-chain></app-panel>
ngOnInit() {this.advanced.getGeoAndSubgeo().subscribe(res => {this.geoAndSubgeoOptions = res;});Observable.from(Object.keys(this.supplyChainOptions)).mergeMap(k => {var config = this.supplyChainOptions[k];let observable = this.advanced.getOptions(config.url);observable.subscribe(res => {config.options = res;config.defaultAll && this.initTransportationForm(k, res);});return observable;}).subscribe(()=> {}, ()=> {}, ()=> {this.onOptionsLoaded.emit({});});this.advanced.getAllSupplyChainData().subscribe(res=> {this.allData = res;this.originCountryOptions = this.allData.getCountrySOS();this.originSosOptions = this.allData.getAllSOS();this.dischargeCountryOptions = this.loadCountryOptions = this.allData.getCountryPort();this.dischargePortOptions = this.loadPortOptions = this.allData.getAllPort();this.shipToCtryCdOptions = this.allData.getAllGeoSubGeoCountries();});}
项目中用到的一些小技巧和我老师的code
1.判断点击范围超出dom对象区域
import { Directive, Output, EventEmitter, OnDestroy, OnInit, ElementRef } from '@angular/core';@Directive({selector: '[appClickOutside]'
})
export class ClickOutsideDirective implements OnInit, OnDestroy {@Output('appClickOutside') onCancel: EventEmitter<any> = new EventEmitter();constructor(private element: ElementRef) {}ngOnInit(): void {document.addEventListener('click', (event) => {if (!isSelfOrAncestorNode(this.element.nativeElement, (event.target || event.srcElement) as Node)) {this.onCancel.emit();}});}ngOnDestroy(): void {document.removeEventListener('click');}
}function isSelfOrAncestorNode(ancestor: Node, node: Node): boolean {while (node) {if (node === ancestor) {return true;}node = node.parentNode;}return false;
}
2.超出部分打省略号
display:block;white-space:nowrap; overflow:hidden; text-overflow:ellipsis
3.设置svg图颜色
直接去改对应的fill、stroke
svg.icon {height: 1em;width: 1em;position: relative;bottom: -0.1em;* {stroke: currentcolor;}
}
这里的stroke可以根据情况改成fill,作用都是用来设置svg颜色等于父级的color
4.时区的处理
moment(moment(this.defaultDate).utcOffset(res).format('YYYY-MM-DD')).toDate();
注意utcOffset里有两个参数,第二个参数是用来设置这个时间的年月日时分秒是否会根据时区做相应的偏移。
总结
项目让我学到了很多。
转载于:https://my.oschina.net/twleo2016/blog/853612
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 为Eclipse IDE for Java Developers安装插件,让其有Server和Project facets
菜单栏->Help->Install New Software…:Work with输入或从下拉框选择“http://download.eclipse.org/releases/neon”(最后一个斜杆后的红色字为Eclipse的版本,可在菜单栏->Help->About Eclipse查看,当然也可以输入其他Eclipse版本,相应搜索出来的插件的版本不…...
2024/4/21 14:13:39 - 浏览器书签总结
网站开发 开发工具 在线工具 - 程序员的工具箱cubic-bezier(0,1,1,-0.06) ✿ cubic-bezier.com文字检测 WebPagetest - Website Performance and Optimization TestCutterman - 为设计更专注URL解码 - 在线URL解码器Unix时间戳(Unix timestamp)转换工具 - 站长工具gitignore.io…...
2024/5/2 8:21:20 - 前端笔试题整理:活到老学到老①
1、求两个日期之间的有效日期: 答案: function rangeDay(day1,day2) {const result []const dayTimes 24*60*60*1000 // ms和day换算const startTime day1.getTime()const range day2.getTime()-startTimelet total 0while(total < range…...
2024/4/23 2:01:31 - net新的库相关的资源
目录算法与数据结构(Algorithms and Data structures)应用程序接口(API)应用程序框架(Application Frameworks)模板引擎(Application Templates)人工智能(Artificial Int…...
2024/4/21 14:13:37 - ionic3 Bug收集
1、ion-input、ion-textarea等输入框不能放在ion-row>ion-col中,否则底部会出现大片空白区域。 只能放在ion-item中 <ion-row><ion-col col-3 class"bg-light text-center">签发人意见</ion-col><ion-col col-9 class"exxco…...
2024/4/21 14:13:36 - 项目实战(连载):基于Angular2+Mongodb+Node技术实现的多用户博客系统教程(3)...
本章主要讲什么(一句话)? 一、前言 上一小节我们先简单的介绍MongoDB的一些入门的内容,主要包括MongoDB的下载、安装、配置及MongoDB简单的建库,删库,查询文档等基本功能,本篇我们将继续《基于M…...
2024/4/21 14:13:34 - 做双眼皮带哪种眼镜
...
2024/5/2 9:59:58 - 做双眼皮 埋线视频
...
2024/5/2 14:39:27 - 做切开法双眼皮哪里好
...
2024/5/2 12:22:46 - 自定义视频播放器
视频播放器有二种方法可以播放1. SurfaceView+MediaPlayer可以实现视频播放器2. 使用VideoView播放视频audio音频SurfaceView+MediaPlayer可以实现视频播放器我上一篇自定义音乐播放器在sd卡把设置音源改变成视频格式//设置音源 mediaPlayer.setDataSource(this, Uri.parse(&qu…...
2024/5/2 7:38:20 - 做欧式双眼皮埋线视频
...
2024/5/2 12:32:31 - 做纳米无痕双眼皮视频
...
2024/5/2 10:55:50 - 佛系架构图秒懂OAuth2
写在前面 文中很多专有名词在初次使用时我会标注一下中文,但是在后面使用过程中我还是会使用英文来表示,因为所有的标准的出处都是英文,中文的翻译并没有标准,用英文会减少歧义通俗易懂。 背景 分布式的事物、注册中心都是在上云…...
2024/4/20 15:33:21 - Spring security oauth2 password flow
Spring security oauth2 包含以下两个endpoint来实现Authorization Server: AuthorizationEndpoint: 授权请求访问端点, 默认url: /oauth/authorize TokenEndpoint: 获取access token的请求的访问端点, 默认url: /oauth/token 添加依赖 <dependency&g…...
2024/4/20 15:33:20 - Spring Boot and OAuth2 Tutorials 的一个问题
https://spring.io/guides/tutorials/spring-boot-oauth2/#_social_login_click最近在做这个Tutorial, 基本是OAuth2典型的登录流程: 1.用户在自己网站的网页上点击“Login Using FaceBook”后跳转到FaceBook(OAuth2 Auth Server)进行认证 2.到Auth Server的授权页面进行授权 3…...
2024/4/24 10:43:16 - OAuth2.0 获取refresh_token
隐式授权流方式不能获取refresh_token 但是如果需要获取id_token,则scope openid,response_typeid_token openid 协议是基于OAuth2.0上的扩展,id_token属于openid 授权码模式 可以获取refresh_token https://docs.microsoft.com/zh-cn/azure/active-d…...
2024/4/20 15:33:17 - owin Oauth
原文:http://www.cnblogs.com/richieyang/p/4918819.html 一、什么是OAuth OAuth是一个关于授权(Authorization)的开放网络标准,目前的版本是2.0版。注意是Authorization(授权),而不是Authentication(认证)。用来做Aut…...
2024/4/28 19:45:53 - 做埋线双眼皮视频手术
...
2024/4/21 14:13:30 - 做做埋线双眼皮视频播放
...
2024/4/21 14:13:29 - 做了双眼皮戴什么眼镜
...
2024/4/21 14:13:29
最新文章
- Java 正则表达式代码演示
正则表达式(Regular Expressions)是一种用于描述字符串匹配模式的强大工具。在 Java 中,可以使用 java.util.regex 包来处理正则表达式。 文章目录 一、基本用法二、高级用法 一、基本用法 导入正则表达式类: import java.util.regex.Patte…...
2024/5/2 21:17:54 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - jQuery(一)
文章目录 1. 基本介绍2.原理示意图3.快速入门1.下载jQuery2.创建文件夹,放入jQuery3.引入jQuery4.代码实例 4.jQuery对象与DOM对象转换1.基本介绍2.dom对象转换JQuery对象3.JQuery对象转换dom对象4.jQuery对象获取数据获取value使用val()获取…...
2024/5/1 13:36:17 - vue想要突破全局样式限制又不影响别的页面样式怎么办
<!-- 用scope盖不住全局,随意来个class匹配私定,搜索关键词:不要随便改,乱打class名 --> <style> .lkajsdfjkalsfhkljashkflhaskl .el-input.el-input--default.el-input--suffix { width: 160px !important; } …...
2024/4/30 17:14:20 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/1 17:30:59 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/2 16:16:39 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/29 2:29:43 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/2 9:28:15 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/30 9:43:09 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/2 15:04:34 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/29 20:46:55 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/30 22:21:04 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/1 4:32:01 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/30 9:42:22 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/2 9:07:46 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/30 9:42:49 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57