作者:围的围

https://juejin.im/post/5dc81428e51d4523632ee793

前言

想必你一定使用过易企秀或百度H5等微场景生成工具制作过炫酷的h5页面,除了感叹其神奇之处有没有想过其实现方式呢?本文从零开始实现一个H5编辑器项目完整设计思路和主要实现步骤,并开源前后端代码。有需要的小伙伴可以按照该教程从零实现自己的H5编辑器。(实现起来并不复杂,该教程只是提供思路,并非最佳实践)

Github: https://github.com/huangwei9527/quark-h5

演示地址:http://47.104.247.183:4000/

编辑器预览:

技术栈

前端:vue: 模块化开发少不了angular,react,vue三选一,这里选择了vue。vuex: 状态管理sass: css预编译器。element-ui:不造轮子,有现成的优秀的vue组件库当然要用起来。没有的自己再封装一些就可以了。loadsh:工具类

服务端:koa:后端语言采用nodejs,koa文档和学习资料也比较多,express原班人马打造,这个正合适。mongodb:一个基于分布式文件存储的数据库,比较灵活。

阅读前准备

1、了解vue技术栈开发

2、了解koa

3、了解mongodb

工程搭建

基于vue-cli3环境搭建

  • 如何规划好我们项目的目录结构?首先我们需要有一个目录作为前端项目,一个目录作为后端项目。所以我们要对vue-cli 生成的项目结构做一下改造:

    ····|-- client// 原 src 目录,改成 client 用作前端项目目录|-- server// 新增 server 用于服务端项目目录|-- engine-template// 新增 engine-template 用于页面模板库目录|-- docs// 新增 docs 预留编写项目文档目录····
  • 这样的话 我们需要再把我们webpack配置文件稍作一下调整,首先是把原先的编译指向src的目录改成client,其次为了 npm run build 能正常编译 client 我们也需要为 babel-loader 再增加一个编译目录:

  • 根目录新增vue.config.js,目的是为了改造项目入口,改为:client/main.js

module.exports = {pages: {index: {entry: "client/main.js"}}}
  • babel-loader能正常编译 client, engine-template目录, 在vue.config.js新增如下配置

// 扩展 webpack 配置chainWebpack: config => {config.module.rule('js').include.add(/engine-template/).end().include.add(/client/).end().use('babel').loader('babel-loader').tap(options => {// 修改它的选项...return options})}

这样我们搭建起来一个简易的项目目录结构。

工程目录结构

    |-- client--------前端项目界面代码|--common--------前端界面对应静态资源|--components--------组件|--config--------配置文件|--eventBus--------eventBus|--filter--------过滤器|--mixins--------混入|--pages--------页面|--router--------路由配置|--store--------vuex状态管理|--service--------axios封装|--App.vue--------App|--main.js--------入口文件|--permission.js--------权限控制|-- server--------服务器端项目代码|--confog--------数据库链接相关|--middleware--------中间件|--models--------Schema和Model|--routes--------路由|--views--------ejs页面模板|--public--------静态资源|--utils--------工具方法|--app.js--------服务端入口|-- common--------前后端公用代码模块(如加解密)|-- engine-template--------页面模板引擎,使用webpack打包成js提供页面引用|-- docs--------预留编写项目文档目录|-- config.json--------配置文件

前端编辑器实现

编辑器的实现思路是:编辑器生成页面JSON数据,服务端负责存取JSON数据,渲染时从服务端取数据JSON交给前端模板处理。

数据结构

确认了实现逻辑,数据结构也是非常重要的,把一个页面定义成一个JSON数据,数据结构大致是这样的:

页面工程数据接口

    {title: '', // 标题description: '', //描述coverImage: '', // 封面auther: '', // 作者script: '', // 页面插入脚本width: 375, // 高height: 644, // 宽pages: [], // 多页页面shareConfig: {}, // 微信分享配置pageMode: 0, // 渲染模式,用于扩展多种模式渲染,翻页h5/长页/PC页面等等}

多页页面pages其中一页数据结构:

    {name: '',elements: [], // 页面元素commonStyle: {backgroundColor: '',backgroundImage: '',backgroundSize: 'cover'},config: {}}

元素数据结构:

    {elName: '', // 组件名animations: [], // 图层的动画,可以支持多个动画commonStyle: {}, // 公共样式,默认样式events: [], // 事件配置数据,每个图层可以添加多个事件propsValue: {}, // 属性参数value: '', // 绑定值valueType: 'String', // 值类型isForm: false// 是否是表单控件,用于表单提交时获取表单数据}

编辑器整体设计

  • 一个组件选择区,提供使用者选择需要的组件

  • 一个编辑预览画板,提供使用者拖拽排序页面预览的功能

  • 一个组件属性编辑,提供给使用者编辑组件内部props、公共样式和动画的功能如图:

用户在左侧组件区域选择组件添加到页面上,编辑区域通过动态组件特性渲染出每个元素组件。最后,点击保存将页面数据提交到数据库。至于数据怎么转成静态 HTML方法有很多。还有页面数据我们全部都有,我们可以做页面的预渲染,骨架屏,ssr,编译时优化等等。而且我们也可以对产出的活动页做数据分析~有很多想象的空间。

核心代码

编辑器核心代码,基于 Vue 动态组件特性实现:为大家附上 Vue 官方文档:cn.vuejs.org/v2/api/#is

画板元素渲染

编辑画板只需要循环遍历pages[i].elements数组,将里面的元素组件JSON数据取出,通过动态组件渲染出各个组件,支持拖拽改变位置尺寸.

元素组件管理

在client目录新建plugins来管理组件库。也可以将该组件库发到npm上工程中通过npm管理

组件库

编写组件,考虑的是组件库,所以我们竟可能让我们的组件支持全局引入和按需引入,如果全局引入,那么所有的组件需要要注册到Vue component 上,并导出:

client/plugins下新建index.js入口文件

/*** 组件库入口* */import Text from'./text'// 所有组件列表const components = [Text]// 定义 install 方法,接收 Vue 作为参数const install = function (Vue) {// 判断是否安装,安装过就不继续往下执行if (install.installed) returninstall.installed = true// 遍历注册所有组件components.map(component => Vue.component(component.name, component))}// 检测到 Vue 才执行,毕竟我们是基于 Vue 的if (typeofwindow !== 'undefined' && window.Vue) {install(window.Vue)}exportdefault {install,// 所有组件,必须具有 install,才能使用 Vue.use()Text}

组件开发

示例:text文本组件

client/plugins下新建text组件目录

    |-- text                --------text组件|--src              --------资源|--index.vue    --------组件|--index.js         --------入口

text/index.js

// 为组件提供 install 方法,供组件对外按需引入import Component from'./src/index'Component.install = Vue => {Vue.component(Component.name, Component)}exportdefault Component

text/src/index.vue

    <!--text.vue--><template><div class="qk-text">{{text}}</div></template><script>export default {name: 'QkText', // 这个名字很重要,它就是未来的标签名<qk-text></qk-text>props: {text: {type: String,default: '这是一段文字'}}}</script><style lang="scss" scoped></style>

编辑器里使用组件库:

// 引入组件库import QKUI from'client/plugins/index'// 注册组件库Vue.use(QKUI)// 使用:<qk-text text="这是一段文字"></qk-text>

按照这个组件开发方式我们可以扩展任意多的组件,来丰富组件库

需要注意的是这里的组件最外层宽高都要求是100%

配置文件

Quark-h5编辑器左侧选择组件区域可以通过一个配置文件定义可选组件新建一个ele-config.js配置文件:

exportdefault [{title: '基础组件',components: [{elName: 'qk-text', // 组件名,与组件库名称一致title: '文字',icon: 'iconfont iconwenben',// 给每个组件配置默认显示样式defaultStyle: {height: 40}}]},{title: '表单组件',components: []},{title: '功能组件',components: []},{title: '业务组件',components: []}]

公共方法中提供一个function 通过组件名和默认样式获取元素组件JSON,getElementConfigJson(elName, defaultStyle)方法

元素属性编辑

公共属性样式编辑

公共样式属性编辑比较简单就是对元素JSON对象commonStyles字段进行编辑操作

props属性编辑

1.为组件的每一个prop属性开发一个属性编辑组件. 例如:QkText组件需要text属性,新增一个attr-qk-text组件来操作该属性2.获取组件prop对象3.遍历prop对象key, 通过key判断显示哪些属性编辑组件

元素添加动画实现

动画效果引入Animate.css动画库。元素组件动画,可以支持多个动画。数据存在元素JSON对象animations数组里。

选择面板hover预览动画

监听mouseover和mouseleave,当鼠标移入时将动画className添加入到元素上,鼠标移出时去掉动画lassName。这样就实现了hover预览动画

编辑预览动画

组件编辑时支持动画预览和单个动画预览。

封装一个动画执行方法

/*** 动画方法, 将动画css加入到元素上,返回promise提供执行后续操作(将动画重置)* @param $el 当前被执行动画的元素* @param animationList 动画列表* @param isDebugger 动画列表* @returns {Promise<void>}*/exportdefaultasyncfunction runAnimation($el, animationList = [], isDebug , callback){let playFn = function (animation) {returnnewPromise(resolve => {$el.style.animationName =  animation.type$el.style.animationDuration =  `${animation.duration}s`// 如果是循环播放就将循环次数置为1,这样有效避免编辑时因为预览循环播放组件播放动画无法触发animationend来暂停组件动画$el.style.animationIterationCount =  animation.infinite ? (isDebug ? 1 : 'infinite') : animation.interationCount$el.style.animationDelay =  `${animation.delay}s`$el.style.animationFillMode =  'both'let resolveFn = function(){$el.removeEventListener('animationend', resolveFn, false);$el.addEventListener('animationcancel', resolveFn, false);resolve()}$el.addEventListener('animationend', resolveFn, false)$el.addEventListener('animationcancel', resolveFn, false);})}for(let i = 0, len = animationList.length; i < len; i++){await playFn(animationList[i])}if(callback){callback()}}

animationIterationCount 如果是编辑模式的化动画只执行一次,不然无法监听到动画结束animationend事件

执行动画前先将元素样式style缓存起来,当动画执行完再将原样式赋值给元素

let cssText = this.$el.style.cssText;runAnimations(this.$el, animations, true, () => {this.$el.style.cssText = cssText})

元素添加事件

提供事件mixins混入到组件,每个事件方法返回promise,元素被点击时按顺序执行事件方法

页面插入js脚本

参考百度H5,将脚本以script标签形式嵌入。页面加载后执行。这里也可以考虑mixins方式混入到页面或者组件,可根据业务需求自行扩展,都是可以实现的。

redo/undo历史操作纪录

  1. 历史操作纪录存在状态机store.state.editor.historyCache数组中。

  2. 每次修改编辑操作都把整个pageDataJson字段push到historyCache

  3. 点击redo/undo时根据index获取到pageDataJson重新渲染页面

psd设计图导入生成h5页面

将psd每个设计图中的每个图层导出成图片保存到静态资源服务器中,

服务端安装psd依赖

    cnpm install psd --save

加入psd.js依赖,并且提供接口来处理数据

var PSD = require('psd');router.post('/psdPpload',async ctx=>{const file = ctx.request.files.file; // 获取上传文件let psd = await PSD.open(file.path)var timeStr = + newDate();let descendantsList = psd.tree().descendants();descendantsList.reverse();let psdSourceList = []let currentPathDir = `public/upload_static/psd_image/${timeStr}`for (var i = 0; i < descendantsList.length; i++){if (descendantsList[i].isGroup()) continue;if (!descendantsList[i].visible) continue;try{await descendantsList[i].saveAsPng(path.join(ctx.state.SERVER_PATH, currentPathDir + `/${i}.png`))psdSourceList.push({...descendantsList[i].export(),type: 'picture',imageSrc: ctx.state.BASE_URL + `/upload_static/psd_image/${timeStr}/${i}.png`,})}catch (e) {// 转换不出来的图层先忽略continue;}}ctx.body = {elements: psdSourceList,document: psd.tree().export().document};})

最后把获取的数据转义并返回给前端,前端获取到数据后使用系统统一方法,遍历添加统一图片组件

  • psd源文件大小最好不要超过30M,过大会导致浏览器卡顿甚至卡死

  • 尽可能合并图层,并栅格化所有图层

  • 较复杂的图层样式,如滤镜、图层样式等无法读取

html2canvas生成缩略图

这里只需要注意下图片跨域问题,官方提供html2canvas: proxy解决方案。它将图片转化为base64格式,结合使用设置(proxy: theProxyURL), 绘制到跨域图片时,会去访问theProxyURL下转化好格式的图片,由此解决了画布污染问题。提供一个跨域接口

/*** html2canvas 跨域接口设置*/router.get('/html2canvas/corsproxy', async ctx => {ctx.body =  await request(ctx.query.url)})

渲染模板

实现逻辑

在engine-template目录下新建swiper-h5-engine页面组件,这个组件接收到页面JSON数据就可以把页面渲染出来。跟编辑预览画板实现逻辑差不多。

然后使用vue-cli库打包命令将组件打包成engine.js库文件。ejs模板引入该页面组件配合json数据渲染出页面

适配方案

提供两种方案解决屏幕适配1、等比例缩放在将json元素转换为dom元素的时候,对所有的px单位做比例转换,转换公式为 new = old * windows.x / pageJson.width,这里的pageJson.width是页面的一个初始值,也是编辑时候的默认宽度,同时viewport使用device-width。2.全屏背景, 页面垂直居中因为会存在上下或者左右有间隙的情况,这时候我们把背景颜色做全屏处理

页面垂直居中只适用于全屏h5, 以后扩展长页和PC页就不需要垂直居中处理。

模板打包

package.json中新增打包命令

"lib:h5-swiper": "vue-cli-service build --target lib --name h5-swiper --dest server/public/engine_libs/h5-swiper engine-template/engine-h5-swiper/index.js"

执行npm run lib:h5-swiper 生成引擎模板js如图

页面渲染

ejs中引入模板

<script src="/third-libs/swiper.min.js"></script>

使用组件

<engine-h5-swiper :pageData="pageData" />

后端服务

初始化项目

工程目录上文已给出,也可以使用 koa-generator 脚手架工具生成

ejs-template 模板引擎配置

app.js

//配置ejs-template 模板引擎render(app, {root: path.join(__dirname, 'views'),layout: false,viewExt: 'html',cache: false,debug: false});

koa-static静态资源服务

因为html2canvas需要图片允许跨域,所以在静态资源服务中所有资源请求设置'Access-Control-Allow-Origin':'*'

app.js

//配置静态webapp.use(koaStatic(__dirname + '/public'), { gzip: true, setHeaders: function(res){res.header( 'Access-Control-Allow-Origin', '*')}});

修改路由的注册方式,通过遍历routes文件夹读取文件

app.js

const fs =  require('fs')fs.readdirSync('./routes').forEach(route=> {let api = require(`./routes/${route}`)app.use(api.routes(), api.allowedMethods())})

添加jwt认证,同时过滤不需要认证的路由,如获取token

app.js

const jwt = require('koa-jwt')app.use(jwt({ secret: 'yourstr' }).unless({path: [/^\/$/, /\/token/, /\/wechat/,{ url: /\/papers/, methods: ['GET'] }]}));

中间件实现统一接口返回数据格式,全局错误捕获并响应

middleware/formatresponse.js

module.exports = async (ctx, next) => {await next().then(() => {if (ctx.status === 200) {ctx.body = {message: '成功',code: 200,body: ctx.body,status: true}} elseif (ctx.status === 201) { // 201处理模板引擎渲染} else {ctx.body = {message: ctx.body || '接口异常,请重试',code: ctx.status,body: '接口请求失败',status: false}}}).catch((err) => {if (err.status === 401) {ctx.status = 401;ctx.body = {code: 401,status: false,message: '登录过期,请重新登录'}} else {throw err}})}

koa2-cors跨域处理

当接口发布到线上,前端通过ajax请求时,会报跨域的错误。koa2使用koa2-cors这个库非常方便的实现了跨域配置,使用起来也很简单

const cors = require('koa2-cors');app.use(cors());

连接数据库

我们使用mongodb数据库,在koa2中使用mongoose这个库来管理整个数据库的操作。

  • 创建配置文件

根目录下新建config文件夹,新建mongo.js

// config/mongo.jsconst mongoose = require('mongoose').set('debug', true);const options = {autoReconnect: true}// username 数据库用户名// password 数据库密码// localhost 数据库ip// dbname 数据库名称const url = 'mongodb://username:password@localhost:27017/dbname'module.exports = {connect: ()=> {mongoose.connect(url,options)let db = mongoose.connectiondb.on('error', console.error.bind(console, '连接错误:'));db.once('open', ()=> {console.log('mongodb connect suucess');})}}

把mongodb配置信息放到config.json中统一管理

  • 然后在app.js中引入

const mongoConf = require('./config/mongo');mongoConf.connect();

...服务端具体接口实现就不详细介绍了,就是对页面的增删改查,和用户的登录注册难度不大

启动运行

启动前端

    npm run dev-client

启动服务端

    npm run dev-server

注意:如果没有生成过引擎模板js文件的,需要先编辑引擎模板,否则预览页面加载页面引擎.js 404报错

编译engine.js模板引擎
    npm run lib:h5-swiper

❤️爱心三连击

1.看到这里了就点个在看支持下吧,你的在看是我创作的动力。

2.关注公众号程序员成长指北「带你一起学Node」

3.特殊阶段,带好口罩,做好个人防护。

4.添加微信【ikoala520】,拉你进技术交流群一起学习。

“在看转发”是最大的支持

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. [S3-E440]Angular 开发者常犯的错误

    Angular vs Angular 2 vs Angular 4 Angular 1.x 版本统称为 AngularJS&#xff0c;Angular 2 (4/5) 统称为 Angular。 第三方库的命名也有一定的规则。假设早期版本的命名以 ng- 作为前缀&#xff0c;当 Angular 2 发布后&#xff0c;该库名称会使用 ng2- 作为前缀。但当 Angu…...

    2024/4/20 15:20:58
  2. 5. Vue

    1 Vue简介 官网&#xff1a;https://cn.vuejs.org/三大javascript mvc框架 vueangularreact 2 Vue基本使用 需要先下载vue模块&#xff1a;npm install vue 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8">…...

    2024/4/20 15:20:57
  3. TypeScript 编译生成的 JavaScript 源代码里的 ɵcmp 属性

    Angular Component definitions 我有一个 Angular Component&#xff0c;名为 RegisterComponent&#xff0c;其 HTML 实现部分摘录如下&#xff1a; <sectionclass"cx-page-section container"*ngIf"!(isLoading$ | async); else loading" ><d…...

    2024/4/21 14:34:55
  4. 埋线双眼皮我抽线了

    ...

    2024/4/21 14:34:54
  5. 埋线双眼皮为什么会断

    ...

    2024/5/1 23:39:05
  6. 埋线双眼皮为啥要拆线

    ...

    2024/4/21 14:34:56
  7. 埋线双眼皮往上看费力

    ...

    2024/5/4 3:53:51
  8. 埋线双眼皮往哪打麻药

    ...

    2024/5/4 14:39:41
  9. 面试整理

    理解事件原理 事件捕获/冒泡 DOM事件流 DOM2级事件规定事件包括三个阶段&#xff1a; ① 事件捕获阶段 ② 处于目标阶段 ③ 事件冒泡阶段 stopPropagation ES6 let const ()> 模板字符串 解析结构 函数默认参数 展开运算符 对象字面量 与 class、 Promise Redux state …...

    2024/4/21 14:34:49
  10. Android Vs iOS 事件分发知多少?

    Android与iOS虽然差异很多&#xff0c;但也有共通之处&#xff0c;这次来看看事件分发机制方面&#xff0c;各有何所长吧。Android事件分发机制Android中所有事件的传递都是自上而下&#xff0c;然后自下而上的一个传递过程&#xff0c;直到事件被消费&#xff0c;结束掉。基础…...

    2024/4/21 14:34:48
  11. Unity3D学习笔记#5_Unity3D再次概览(更全面一点)

    文章目录一、Unity认识再次补充①Unity的地位和模型支持②Unity项目发布到PC平台的方法③Unity软件界面补充介绍二、动态GUI和动态GameObject①动态游戏对象②动态GUI③小例子三、GUI系统①OnGUI系统②UGUICanvas画布Event System各种控件四、其它①地形系统②物理引擎Rigidbod…...

    2024/4/21 14:34:47
  12. React 开发人员应该掌握的 22 种神奇工具

    众所周知&#xff0c;React 是 JavaScript 库&#xff0c;用于构建出色的用户界面。但是&#xff0c;并不是每个人都在使用相同的工具或都知道所有有用的工具&#xff0c;这些工具有助于使 React 开发体验更有趣&#xff0c;更主动。以下是 2019 年大家可以用来构建 React 应用…...

    2024/4/29 4:40:21
  13. 埋线双眼皮图片恢复

    ...

    2024/4/24 16:26:33
  14. 埋线双眼皮痛苦吗

    ...

    2024/4/21 14:34:45
  15. angularJS的复选框

    参考链接&#xff1a;http://isteven.github.io/angular-multi-select/#/configs-options 链接已经写的很详细了。 <isteven-multi-selectinput-model"复选框里的各个选项"output-model"复选框按钮默认展示的选项"button-label"复选框按钮展示选项…...

    2024/4/21 14:34:43
  16. 埋线双眼皮贴视频教程

    ...

    2024/4/21 14:34:42
  17. 埋线双眼皮特别宽

    ...

    2024/4/21 14:34:41
  18. 埋线埋线双眼皮太深显老

    ...

    2024/4/21 14:34:40
  19. 埋线双眼皮太浅的图片

    ...

    2024/4/20 15:21:05
  20. 埋线双眼皮太紧会松吗

    ...

    2024/4/19 19:32:00

最新文章

  1. 吴恩达机器学习笔记 三十七 电影推荐系统 使用特征 成本函数 协同过滤算法

    以电影评分系统为例&#xff0c;令 r(i, j) 来表示用户 j 已经对电影 i 评分&#xff0c; y&#xff08;i, j&#xff09;表示评分具体是多少。 假如每部电影有自己的特征&#xff0c;那么用户 j 对电影 i 的评分预测为 w(j) * x(i) b(j) r(i, j) &#xff1a;一个用户 j 是否…...

    2024/5/4 21:02:26
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. mac安装nvm

    一、前景提示 1、保证自己的mac电脑上没安装node环境 2、保证自己的电脑上有安装git&#xff0c;不然下载nvm时会报错。git下载可以参考&#xff1a; 1&#xff09;佛系安装&#xff1a;通过提示下载 XCode 2&#xff09;brem安装 3&#xff09;终极大法&#xff1a;git官网下…...

    2024/5/4 3:46:06
  4. STM32-GPIO

    &#x1f913;&#x1f913;&#x1f913; 122.1 2.22.3 344.14.24.34.44.54.64.74.8 56788.18.299.19.2 STM32 第一个外设 1 对我们来说 和IO口没区别 ST公司非叫GPIO 2 2.1 第二个是超频了 F1 72M 这翻转就36 2.2 有cmos 和ttl两种数据手册里给出整个芯片最低电流为150ma 单…...

    2024/5/1 13:09:46
  5. xv6项目开源—05

    xv6项目开源—05.md 理论&#xff1a; 1、设备驱动程序在两种环境中执行代码&#xff1a;上半部分在进程的内核线程中运行&#xff0c;下半部分在中断时执行。上半部分通过系统调用进行调用&#xff0c;如希望设备执行I/O操作的read和write。这段代码可能会要求硬件执行操作&…...

    2024/5/2 2:36:53
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/1 17:30:59
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/2 16:16:39
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/3 23:10:03
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/4 18:20:48
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/4 2:59:34
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/2 9:07:46
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; 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
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在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