首页

量化设计价值(一) 分层数据获取概述

鹤鹤

“文中示例相关数据都为假的模拟数据,而非真正的商业数据,以此声明”

度量是什么

【度量Measure】是一种测量评定对象的方式,它帮助我们结构化的获取对象的状态与变化,我们运用这些数据进行洞察,转化为有用的信息,帮助决策和优化,这个过程也是分析诊断的过程。

那日常会有怎样的一些信息获取呢?(这里面包含了数据也包含了一些正负性的反馈)

我们对一个功能上线进行一组完整的项目结果质量数据模拟:


  • 净交易收入额比去年同期上升2.0%,达到2千万

  • 订单量为222,比上周上升了2.0%(对交易产生直接正向作用)

  • 方案产出数共222件,比上周上升了22.2% (对内容产出有直接的提升)

  • 用户的满意度为2.2 ,上升了2% (之前是2.0)

  • 用户使用表现出沉静,轻松的情绪(比之前挫折,晦涩要好很多)

  • 功能点击,周活跃2200,点击率22%,周留存22.2%(0-1)

  • 功能渲染和可交互时长为0.2秒加载完成。用户在使用时交互顺畅无卡顿(符合业界前端质量交付标准)

这段描述符合整个产品使用的过程,它似乎是一个多面体,帮助我们了解整个产品黑盒。这个描述越精细越多维,我们得到的信息就越清晰越客观。(包含多元数据内容,并对数据已进行比对和使用,得到一定的有效信息)反之,假如哪个环节出现问题。我们能清晰看到问题出现的环节,并且通过其表征的信息进行问题的深挖(再细化相关数据或者关联的层次)。


我们可以拆解到这几个层次的数据

业务结果、用户反馈(态度与情绪)、行为点击、系统性能

可理解为:良好的产品运行-》用户流畅使用-》良好的用户反馈-》预期的产品转化结果


从获取方式来说,大致可以从两个大角度(这里从广义的范畴去分)

【qualitative research定性研究】:快速从样本中判断问题的性质和方向

【quantitative research定量研究】:数据的验证性,全面性、追踪性


定量获取

系统承载业务内容的运作,可以记录各种各样的明细数据表,在海量数据中,进行科学的关联与细分。以大数据驱动为最终目标,其特点是:数据的全面性和自动追踪获取。

业务结果

追踪问题:产品是否符合市场需求?产品是否良性发展?


业务型数据是围绕着整个商业建设和运作阶段而产生的数据。是最能体现产品、商业价值的部分。可以归纳为三类:内容建设->流量访问->商业交易。是商业链路中产生的具有直接商业结果的数据。


内容建设 是指经过人为输入,系统流转产生的比如商品、文章、方案等等具有实质内容价值的数据。是具有生产过程的(一般是经过一系列的操作完成的)。


流量访问/分发 则是针对商业内容的使用/运作,比如某个商品的浏览,某个内容的传播等等。这些和营销相关具备人群效应的数据也属于业务数据。最常见的就是曝光量点击量,而在中后台系统中则是以访问浏览为主。


商业交易 则是最直接的商业结果型数据,最常见的就是网站的GMV(成交金额:包括:付款金额和未付款。)

订单交易额、注册会员数等等。


以某平台中相关的业务数据为示例



业务结果的分析,是根据不同业务发展,确定核心业务指标,以及建立对核心指标的拆解逻辑

它或许是个计算公式。或者是个一级指标到二级关联指标。例如以下,这里暂时不展开来讲。



对于业务数据的获取,我们大部分是直接通过后端的数据库沉淀下来的。但如果涉及到商业数据的细分(按照商业目标进行阶段性或者类别型的追踪监测)。比如想知道会员的vip的分层情况。或者知道某行业商品的生产细分情况等等。这些虽然可以通过后端拉数据,让数据分析师或者运营整理出来,但是每次都有加工成本,也没有办法看到实时数据,这时候就会要考虑去做细分埋点,下文会提及到埋点方式。

行为点击

追踪问题:产品使用情况如何?用户浏览习惯如何?

用户行为数据,是围绕用户访问某产品过程的用户行为轨迹数据。其中大体包含了用户量、曝光量、点击量、浏览量、访问时长、停留时长等等观测用户使用情况的表征数据。

这里是一组典型的平台用户使用行为的描述,而这些行为的最终,是产出了上面的业务数据(订单与成交金额)

访问首页->点击并浏览商品详情->点击客户咨询进行咨询->点击购买提交订单->点击支付,支付完成

由此我们可以解释,行为数据与业务结果之间的关系,并且两者的关注点也是有差异的,在行为链路中,我们更注重每一层的转化关系以及用户为什么没有向下转化的障碍点。


再以B端管理系统为例

B端的管理系统具有典型性,可以用点线面来归纳,点指的是诸如事件曝光点击等。线指的是用户使用路径,面则是广义的综合性观察,比如流量分布,比如区域热图等。通过观察这些,可以观察到用户的使用率和使用路径。并且得知用户使用产品是否真的贴合需求,设计的是否合理高效。



行为数据要结合具体的场景或者维度去观察,才能产生更有用的信息。


运用行为数据,我们可以去做很多分析:漏斗分析、留存分析、流量分布分析、路径分析 、单页热力分析、点击分析、 人群分析等等,这些都是分析方式,在后续关联篇章中会去探讨。


行为数据的获取是依赖于埋点的,在业界有两大类埋点方式:全埋点、手动埋点。

行为数据的三大事件类型基本可以归类为:曝光事件、点击事件、停留事件

对于C端侧重于曝光、点击。对于B端侧重点击、停留 (从流量转化与访问效能两个角度来说)


以上介绍了业务结果和行为点击两种数据,而这两种内容,都会涉及到埋点采集这件事,这里我们介绍下关于埋点采集数据这件事情。

埋点采集

追踪问题:如何根据人物、场景、动作制定精准的采集方案?


埋点,是对特定数据的采集,由前端埋点和上报、进行数据处理和数据分析。一般数据埋点分以下三种:



全埋点虽然是所有数据可按需可查,但是因为它的数据量极大,且需要2次定义和清洗,所以只能对通用性质的数据进行采集。而针对性的内容,由数据采集定义后,由前端上报后,可能做到定点,定期精细具体的统计。

两者大致能产出什么数据分析呢?主要以平台/系统这个角度看:


整体分析-通用全埋点

用户活跃、用户留存、用户跳出率、用户停留时长、用户流量分布...


局部与特定分析-手动埋点

关键事件点击率、关键入口渠道流量总计与分布、关键链路漏斗、关键具体区域曝光与停留时长...


为了获取更精准的业务/行为数据,我们一般会采用手动埋点的方式,所以前期 第一阶段会在场景中确定分析目标,然后梳理相应需要的指标,书写明确的埋点需求是很重要的一个环节,书写的足够明确,才能和业务、前端、数据分析师进行准确的沟通,分析目标一致,然后上线后建立相应的数据看板。



注意点:采集方式|统计口径|数据精准度校验


那怎么定义数据分析时的埋点需求呢?可以用以下方式去描述:

  1. 什么用户=用户定义

  2. 什么时间=时间戳

  3. 什么环境=地理位置+网络环境+硬件环境+软件环境+哪个页面(来源页面)+什么位置

  4. 什么行为=事件ID+命名

  5. 什么条件=可以以某个行为或者业务交易为条件

  6. 结果如何=用户操作的结果


示例:

一个后台系统悬浮帮助功能使用的情况需求




一个搜索使用的情况需求



这2个是比较细致的数据采集的描述。规则了统计的对象,范畴,以及条件,结果观测等等的需求,大家可以在业务和行为数据相关采集中,试着撰写下这样明确的需求。这样的数据采集才具有精准的分析价值。

人群标签

追踪问题:用户都是哪些人,谁使用了这些功能 ?


人群标签可以理解为数据型用户画像。为什么在这里提及,因为大量数据(特别是具体的采集数据)都会涉及到人群这个角度。人群也是定量数据中最具有独立观察价值的数据。


人群标签就是根据人群特点,进行描述分类,对人群打标签。我们根据不同的获取路径,可以大致分两类。


一类是利用基本数据进行定义,比较简单直接

从不同的端,可以获取用户的基本来源,如访问端的类型,或地理位置等,可以定义为“客户端用户”、“江浙沪用户”等。


通过唯一用户ID所匹配的一系列用户注册时的基本信息内容,如性别、职业、行业、兴趣等。可以定义为“女性用户”、“定制类用户”等。


还有一类就是复合型自定义,一般是根据用户的业务、行为数据或者类别属性来定义的,它非常的灵活聚焦。

使用某类条件公式来定义某一波用户


如我们将购买能力从高低来分层用户:月购买小于5000的为中购买力用户,大于5000的为高购买力用户,周活跃大于2但无购买记录为潜力用户。


另外一种构建用户范畴的方式:通过“时间、地点、事件”等一系列复杂描述来勾勒圈选用户

如我们定义“第一次访问站点时,在首页有关注过每日推荐“的用户。


这里的复合定义很多时候都会用到多指标多维度。是一种深度结合业务场景来圈选人群,定义用户的方式。



人群标签,不仅帮助我们细分数据,知道“到底是什么人做了什么事”,聚焦使用人群的各项指标健康情况。最终,还可以定位产品,定位人群,精细化运营产品:现在的用户大致都集中在哪些人群中?哪些功能是头部用户需要的?哪些功能最受基础版用户的欢迎等等。在探索商业需求的时候,更容易找到抓钩,去深挖商业价值。


常用画像的场景

1.定性用户画像:通过调研,熟悉角色日常生活或者工作场景环境,定义基本用户画像 
如:用户访谈、用户旅程图


2.定量用户画像:用定量的数据做某些值的规则,来圈定用户人群

如: 用户生命周期、问卷分发、运营活动


某产品生命周期使用示例:


系统性能


追踪问题:产品使用起来流畅吗 ? 


性能数据一般指由产品进行页面渲染及前后端交互时,监测到的时长数据。观测系统性能,是因为系统数据量很大时,在产品渲染交互环节中,容易产生卡顿,造成用户体验的下降,导致流失率。而系统性能,一般是由性能监控等产品产出质量报告。在一些浏览器中,也有嵌入的插件统计报告。


这里大致介绍下业界google最新的关于7大性能指标的定义


这其中,最重要的3大核心指标是:

LCP:页面的速度指标
FID:页面的交互体验指标
CLS:页面的稳定指标


可以通过官方出品,安装 web-vitals-extension 插件来获取三大核心指标,也可以通过通过安装 Lighthouse 插件来获取如下指标,现在已经内置在浏览器中




定性获取


定性数据,是由用户那里获取信息,直接判断问题的性质和方向,快速展开挖掘和收集。 
它的获取方式主要是 面对面研究:


即选择典型用户角色,针对问题或者内容进行集中测试或者访谈:用户访谈、焦点问题调研、可用性测试等。

「ps:另外一种 自动化研究:圈人群进行在线问卷调研投放,聚合大量样本进行交叉或者聚类等等分析,是一种样本量的统计方式。具备一定程度的样本数量,可归为定量统计分析。」 


比较常用的是:系统可用性量表(SUS)、有效性、满意度和易用性的问卷(USE


不管哪种方式,我们都是围绕“可用性”这个角度去进行评估和研究的。业内可用性这个词称为:“Usability”「ISO9241/11」中有明确的相关定义:一个产品可以被特定的用户在特定的境况中,有效、高效并且满意得达成特定目标的程度。可用性关注的是用户与对象在互动过程中的有效性(effectiveness)、效率(efficiency)和满意度(satisfaction)。


用户反馈中我们获取到什么样的信息,我们第一:明确用户对此内容的态度,观察用户行径中的顺畅度,感受用户认知反馈。第二:询问其严重程度和影响程度,正面负面情绪。这两层是由表及里的,互相关联。但侧重有所不一样。


用户态度


追踪问题:用户使用后,满意度如何? 

通常用到以下几种度量



而这些内容中一般包含数据是

1.观察与记录实验性数据(描述性状态情况) 
2.主观数据和偏好数据(出自于自身的想法) 
3.情感层面数据(使用系统后最终的感受或者过程中的心情) 
4.结果性数据(比对/选择内容,得出结论) 


而从场景分我们如何使用这几种度量呢?


引用自:Tom Tullis Bill Albert {Measuring the user Experience} 用户体验度量 


不难发现,我们最常用到的是「自我报告式的度量」

它比较宽泛的反应了产品综合情况。这里举一个自我报告度量涵盖的范畴



 

用户情绪


追踪问题:用户使用后,在情感上反应如何?


初步知晓用户反馈情况后,可以深入用户情绪感受,进行点状问题的挖掘。进而对问题进行定性分析追踪和程度评级。用户在一定严重情绪影响下,是对产品会产生排斥的,所以有时候对情绪的收集,能让我们对内容具备敏感度。且在设计过程中,充分建立共情和同理心。


情感描述模型是指对情感状态进行定义,并描述其表达性特征的方法,主要可分为离散描述模型和连续描述模型。 

连续型描述模型往往认为人类的情感状态是分布在若干个维度组成的某一个空间中,不同情感状态之间不是独立的,而是连续的,可以转化的。


这里我们介绍一个连续描述模型: 唤醒度(Va-lence-Arousal)模型
「Va-lence-Arousal」:用两大象限归纳了人们的情绪:正面与负面情绪的变化。激动和平缓情绪的变化。构建了一个立体的情感空间。 


当度量情绪变化阶梯时,可以试着使用连续情绪。比如:挫折——》生气、沮丧——》厌烦等。而有些程度词是和时间长度有直接关系的,比如说疲惫。我们需要关注场景特点,用户可能会长时间沉浸式体验时,它是否能接受打扰,是否会因为一些内容受挫。这些都会导致他最终直观感受的好与坏。


举例子来陈述:

1.产品设计过程中,串联用户使用流程时,流程的长短和任务路径会产生直接用户感受-》是否足够轻松 
2.运营产品过程中,在哪些环节中穿插特定内容可以打造用户峰值体验。—》这个推荐不错,好贴心,惊喜 
当这些生动的情感词汇,被考虑进产品设计中时,很容易让我们得到一个具有温度感,具有更良好接受度的产品。 
在度量实施方式上,我们可以在用户旅程图中,在问卷或可用性测试部分,考量使用卡片分类法,或表情评分板对用户的情感进行收集。(基于情绪感知更为直接有共情性)。 


情绪评分卡:


在各种用户态度反馈中,我们也可以直接去获取针对性的情绪化度量表进行5分表计量评分。


具体方式:

第一步:卡片分类法,预设10-20组情绪关键词,让用户选2-3个关键词,确定影响面。 
第二步:确定程度:1-5评分机制确定程度。 


以下为目标设定的取词示例:


严重评级


追踪问题:什么问题是至关紧要的,需要马上解决的? 
定性内容的收集完成后,一个比较重要的事情就是针对问题去做2次整理和评级。 
严重性评估有助于集中精力解决关键的问题,清晰说明每个一个严重等级的意义。对每个等级都尽可能用实例说明。 


常用评估:


高中低评估

-会让参加者心烦或沮丧,但不会导致任务失败的问题。

-这类问题会显著提高任务的难度,但不会直接导致任务的失败。

-所有直接导致任务失败的问题。遇到这类问题后基本没有可能再完成任务。


综合因素评估



多维度的评估




前两个较常用,后两个看产品及技术配合


  1. 对用户体验的影响

  2. 预期的发生频率

  3. 对商业目标的影响

  4. 技术/实现成本评分(0=低,1=中,2=高)



数据层次结构总结


以上是我们对分层数据获取的一些整理,希望大家对于数据涉及到的概念有一个粗略的认知。当然如何运用数据做好度量这件事情,本身还需要一些串联的方法,比如使用度量框架(Heart模型),运用合理的分析流程(GSM),搭建追踪式看板,基于问题的度量报告或者自我评估报告等。都是灵活运用到以上数据立体的分析产品质量的过程。 


蓝蓝设计建立了UI设计分享群,每天会分享国内外的一些优秀设计,如果有兴趣的话,可以进入一起成长学习,请扫码蓝小助,报下信息,蓝小助会请您入群。欢迎您加入噢~~希望得到建议咨询、商务合作,也请与我们联系。

截屏2021-05-13 上午11.41.03.png



文章来源:站酷   作者:酷家乐UED

分享此文一切功德,皆悉回向给文章原作者及众读者.
免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。

蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服务


量化设计价值(二)体验度量深度实践

鹤鹤

前言


体验目标的达成,需要合理且客观的度量方法,体验度量的实践,需要度量框架的有力支撑。提高竞争优势,提升客户态度,保障产品可以即时的响应客户的需求。本篇文章的实践方法全部来源于酷家乐B端产品业务中的实践案例,重点在于度量框架的深度实践,如果我们的经验能够帮助到您,欢迎交流讨论。 


一、体验度量怎么做?


“体验”是用户纯主观的感受,从这个情况来看是很难被度量的。“体验”同时也是一个比较抽象的概念,如果把一个抽象的概念拆解成一个可执行的策略,拆解的过程如何保证策略的有效性,是我们一直在思考的。面对酷家乐工具型、SaaS型、平台型并存的产品体系,且存在错综复杂的用户需求和业务诉求。在这样的前提下对方法的确立需要更加的冷静。 

如何确定方法?我们需要的是一个完整的度量框架,以及能够聚焦用户体验层为驱动,分解并有力的去解决问题。经过大量的实践和验证得到,抓住一个击破点作为产品体验提升的目标,并一种合理的方式进行推导和验证,这是一种最直接度量体验的标准流程性方式,这里的目标必须是:


  • 体现用户主观感受或者具有行为驱动的目标。

  • 基于业务目标定义+用户诉求了解后,得到的以用户为中心驱动的用户行为。



二、度量模型怎么选?


面对设计圈内已经存在的和部分大厂创造的度量模型,评估优劣后最终我们选取了HEART模型。因为HEART是个比较全面和具备更多扩展性的分析框架,同时足够的权威和标准,而且市面上的模型基本都被HEART的五维囊括。除了这些考虑因素外,再给出以下几个明显的优势点:


  • 1、HEART同时涵盖了定性和定量的不同数据维度。

  • 2、HEART框架同时包含了:宏观和微观的层面

  • 3、HEART模型并不单纯的再定义体验质量,同时也链接了商业价值。把用户体验的原则和收益驱动的指标关联在了一起。


undefined


三、HEART模型简介


1.什么是HEART模型?


多个大厂利用HEART模型拆解框架得到了深度结合业务的度量框架。是个比较全面和具备更多扩展性的分析框架。HEART是GOOGLE公司在实践中提出,基于产出更好产品为目的,用来衡量产品整体体验的度量评估模型。 

它包含五个维度Happiness(愉悦度)、Engagement(参与度)、Adoption(接受度)、Retention(留存度)、Task success(任务完成度)组成,是Google用户体验研究团队在实践中为了准确的度量用户体验而总结提炼出的一个框架。 


2.HEART模型的特性与应用场景


目前市面上还存在PTECH、TEENS等体验度量模型,而HEART模型的特性在于它”以用户为中心“进行度量,同时度量维度全面,既包含宏观的愉悦度,也有微观的任务完成率,同时关注产品上的留存率,与业务目标保持紧密。在评估方式上,既有定性评估的愉悦度,也有定量评估的参与度、留存率等,可对用户使用产品情况做一个完整的评估。 

undefined



四、HEART模型的详细拆解指南


undefined


第一步:确定体验目标

体验目标是体验度量的开始,准确的目标决定了度量的质量。要提炼出准确而有效的体验目标并不容易,通常会引入产品功能等业务因素,使体验目标不够单纯,拆解出来的指标所反映的数据也很难归因到体验。故复杂项目可提炼多个体验目标相互补齐,但每个都必须准确而具体。 

那么如何确定体验目标呢?

体验无法脱离于具体的产品服务存在,用户的整体体验感知积累于每一个接触触点,大多触点常规而平庸影响不大,必须识别出达成业务的关键触点进行深入分析,已提炼出体验目标。 

整体的思路是:首先分析业务目标,并就业务目标所落地的产品服务的链路进行拆解,分析链路后,找到其中对体验有决定性影响的因素,提取其因素后,即形成体验目标。


undefined
1.确定业务目标
业务目标是整个产品服务的最终目的,体验作为产品服务的重要评估维度,需要与之对齐。业务目标与所选取项目范围有关,从整个产品到特定功能模块,或者某个行为链路都可作为参与项目。根据选取的项目来确定业务目标,如“保持产品新旧改版的平稳过渡,降低改版造成的断约率”、“提升用户自主解决问题的能力,降低运营服务的压力”等。注意业务目标与产品目标的差异,后者是对前者的产品化阐释,可以具体到某项产品服务目标上。产品目标和体验目标可以共同服务于业务目标,实现价值的达成。 

➢示例:
业务目标:在设计工具中商品素材的查找效率,辅助家装设计师快速构建方案,提升其签单率 
产品目标:优化现有商品素材的查找逻辑,降低家装设计师查找商品素材的成本 

2.拆解产品链路
产品目标需借助于功能链路来达成,将该目标达成过程的逻辑呈现出来,并分析其跳转路径、操作触点,就是链路拆解过程。整个链路过程是用户价值的直接承载,任何一个触点的失效都将影响到整条链路顺畅和效率。就链路整体而言,触点越多、链路越长,操作成本越大;就某个具体触点而言,其效率、易用性、易理解度也将影响整体的价值传达。 

为完整的拆解出整个产品链路,需要从“用户侧”、“系统侧”进行分析,用户侧代表用户视角下的功能使用流程,是主要考虑的维度,体现了以用户为中心的设计思路;系统侧代表系统在用户交互过程中的需要执行的行为,是系统逻辑的直接体现。两者的交互作用,将完整表达“信息”的流转过程,最终作用到产出物上。 

➢示例:商品素材搜索链路




3.分析触点并提取决定性因素

选取对整个链路有重要影响的触点进行设计维度上的分析,以找出决定触点目标达成的决定性因素,这个决定性因素就是我们体验上需要着重优化的点。在寻找“决定性因素”的过程中,避免将系统性能、业务功能、业务信息因素筛选出来,需要聚焦在设计维度上,诸如交互行为、界面布局、信息呈现、系统反馈等。 

➢示例: 
“确认输入行为”、“搜索结果分类”、“不同分类的区块划分”、“结果数量”等。 

对已拆分出来的各种设计因素来说,哪些算是决定性因素呢?一个很简单的判断方式是:反向判断,即假设缺失这个设计因素,或不完整是否会对该触点有“阻塞性”影响。 

如有严重阻塞影响,则证明该设计因素很大程度上决定了触点的目的达成,属于决定性因素;若设计因素有中等的、轻微的影响,则可能不是本次优化的重点,不作为决定性因素。如“搜索结果的分类”影响用户对搜索结果的信息获取,是决定性因素。“确认输入行为”是常规设计行为,不算决定性因素。 
当然,具体问题具体分析,在不同的功能场景下,同一种行为的影响程度可能不同。 

需要注意的是,决定性因素的选取必须在具体的触点中才有意义,脱离后无法判断是否有阻塞性影响。另外,某些设计因素是否是决定性可能在跨触点中体现出来,需要联系整个链路进行交叉分析确定。




4.体验目标的提取与表述

找到决定性因素及其为什么决定性的原因后,需要为其设定一个设计目标,来指示应向什么方面优化这个决定性因素。决定性因素只是现有功能的一种解法,可能存在其他更优解法或优化方向,我们需要基于决定性因素概括出“设计目标”,以新的设计目标来指引我们的优化设计。 

➢示例: 

决定性因素“搜索结果的分类”,引申出的设计目标为“更清晰的信息层级”、“更完整的信息”。



通过链路触点的分析,决定性因素的提取,设计目标的匹配,我们已对设计优化方向有了准确的了解。这个时候需要从设计师视角做一个完善而精准的”体验目标“的表述。


一个体验目标需要与具体设计场景关联后,才能产生具体而明确的价值,即设计目标落地到场景中后产生价值,表述思路是:在某个具体的链路触点中,我们期望怎么达成这件事。可通过格式进行填写: 
使/什么用户/用什么  做什么事/设计目标/完成什么事 

➢示例: 
家装设计师  使用搜索功能  搜索素材时  对结果展示清晰的信息层级  来快速找到需要的商品 


第二步:确定度量维度

引入HEART模型的重要原因,正在于它的度量维度。由于它的度量维度多方位的表述了产品的使用情况,度量纬度不是一种标准,是一种分析框架和角度,决定了体验目标应该被如何度量,进而影响信号的确定和指标的拆解,因此度量维度的选取至关重要。 

HEART提供了丰富的五个维度,根据其定义,提供了你几个可以衡量的视角。在实践过程中,因每个体验目标所对应的触点的场景、交互、产品目的不同,我们只需要找到符合定义的维度即可。反过来看,一个与体验目标不相关、不匹配的度量维度不能很好地度量体验。 

需要注意的是,HEART模型因其维度的广泛定义,不仅仅可用于体验目标的度量,也可以对产品目标、业务结果进行度量,对体验目标的度量因要从产品因素中剥离出体验问题,相对来说较为复杂,是本次叙述的重点。



第三步:确定信号

首先信号可以被定义为是一种信息的载体,其承载的信息往往反映的是用户对体验目标的成功或是失败的结果,对信号的准确获取将直接影响到对下游指标的确立。 

信号的确定需以上游度量维度为标准范围并引用体验目标为重要判断依据,避免过度发散,保证精准规范的同时,去结合当前有无体验变量基准值作为条件,并使用成功或者失败的结果来评估体验目标的达成情况,最终提炼出信号。 


以度量维度为标准并引用体验目标确定信号

通过逐一对度量维度进行体验变量提取,有基础值则进行对比的方式,无基础值则使用趋势的表述方式,结合业务目标的情况下,去概念性假设体验目标的正向或反向结果,最终通过标准的格式提炼出信号,信号的提炼的可以用固定的格式进行书写: 格式:用户   用什么   做什么   体验变量   趋势&数值


寻找体验变量
基于HEART模型的整个分析框架,拆解出最高频和贴合体验目标的常见体验变量库。在此框架的指导下,可以快速寻找需要的体验变量。 

➢示例: 
(体验变量:易操作度;有基准值) 家装设计师 使用搜索功能 搜索素材时 易操作度 达到4.2
(体验变量:易操作度;无基准值) 家装设计师 使用搜索功能 搜索素材时 易操作度 上升

确定信号的注意事项
①信号的成功或失败要能在行为或态度上准确的体现出来,失败信号可能比成功更容易定义; 
②信号要易于被追踪; 
③信号的敏感度要高,易于被检测; 
④信号应与目标有高的相关度,同时避免被其他因素影响; 
⑤一个目标可能对应多个信号; 

第四步:确定指标

指标是衡量目标的参数,用于准确的描述目标。但通常很难直接从目标中确定出指标,需要借助于对信号的分析。信号是信息的载体,其中包含着变量信息,提取其中变量信息,即可获得一个初始指标。 
初始指标反映了客观的原生数据,需要对原生数据做处理后,可得到一个能精准描述体验目标的指标。 



对数据进行处理

体验变量所直接产生的属于原生数据,而一组数据通过某种分析加工后,可以成为一个更有价值的信息,如均值、中位值。选择对数据进行哪种方式处理,受目标的影响较大,每一种数据处理方式,都有指向特征,通过与目标的匹配,可以选取出合适的数据处理方式。




确定指标的注意事项

①指标应与目标和信号密切相关,指标越明确越清晰越好; 
②标应方便被持续追踪,对信号的描述更敏感,方便做A/B测试。 

➢示例: 


案例A

度量维度:愉悦度

信号:家装设计师    使用搜索功能    搜索素材时    易操作性达到4.0

体验变量:易操作度

数据:易操作度评分

指标:易操作度评分的均值



五、总结


看似复杂的体验度量监控指标的拆解,可以概括为“体验的问题定位”——“体验的目标度量”——“体验的客观追踪”。 

1.“问题定位”是监控目标的根据,必须来源于具体的业务链路才有被分析和量化的可能,它是体验问题在业务链路中被抽取出来的关键,并转化为可度量的指标来进行监控,最终为后续数据洞察和可视化提供准确的数据来源,否则流于主观,监控体系建立在不可靠的体验目标之上,当然也就不可能有助于解决体验问题。 

2.而“目标度量”所运用的HEART模型作为度量维度,相当于一种体验的定义标准,阐释了什么是它所定义的用户体验。HEART模型以其全面的度量维度,能很好地实践这一点。必须注意的是,对HEART模型下的五个度量维度的细化阐释可能受不同产品特性、产品阶段影响而不同,最终转化出不同的客观指标。 

3.“客观追踪”是对在度量标准下的客观变化的捕捉,捕捉其变量特征,建立常态指标,成为可靠的可监控的指标。 

4.另外,除了准确的定位、度量、转化的逻辑推导外,参考业务目标进行范围收敛,也是非常重要的工作,它影响着每一个推导环节,以避免偏离产品方向,有效的过滤弱关联或无关联的因素。

蓝蓝设计建立了UI设计分享群,每天会分享国内外的一些优秀设计,如果有兴趣的话,可以进入一起成长学习,请扫码蓝小助,报下信息,蓝小助会请您入群。欢迎您加入噢~~希望得到建议咨询、商务合作,也请与我们联系。

截屏2021-05-13 上午11.41.03.png



文章来源:站酷   作者:酷家乐UED

分享此文一切功德,皆悉回向给文章原作者及众读者.
免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。

蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服务


UI设计原则,看看,有没有你知道的!

蓝蓝设计的小编

(图片来源于图虫创意)

1、了解你的用户

因为你的用户是最终评判用户界面好坏的人,所以用户即是你的终极目标,不了解用户需求,即使你的界面做得再好,也不是用户想要的产品。了解用户的需求是你开始做界面的前提,试着沉下心来仔细观察用户的喜好,并了解他们的技能水平和体验观察他们在界面中如何操作。不要迷恋于追逐设计趋势的更新,或是不断添加新的功能,始终记住,首要的任务是关注你的用户,这样才能创造出一个能让用户达成目标的界面。

2、重视UI模型

在软件中,用户的大部分时间都消耗在界面操作中,比如数据录入、数据修改、数据查阅等等,这点与浏览为主的网站类页面的用户操作是完全不同的,所以我们无需画蛇添足。用户希望在新创造的界面中看到那些已有的、相似功能的或遵循基本操作方式的软件界面,即可利用已成惯例的UI模型,使用户产生亲切感。

3、保持一致

用户需要知道一旦他们学会做某项操作,那么下次也同样可行。语言、布局和设计是需要保持一致性的几个界面元素。一致性的界面可以让用户对于如何操作有更好的理解,从而提升效率。

4、清晰的视觉层次

设计时,要让用户把注意力放在最重要的地方。每一个元素的尺寸、颜色还有位置,它们为理解界面共同指明了道路。清晰的层级关系将对降低外观的复杂性起到重要作用。

(图片来源于图虫创意)

5、提供反馈

界面要始终保持和用户的沟通,不管是他们的行为对错与否。随时提示用户的行为:状态更改、出现错误或者异常信息。视觉提示或是简单文字提醒都能告诉用户,他们的行为是否能够达到预期的结果。

6、容错机制

无论你的设计多么的清晰明了,用户都会犯错。你的界面应当允许并要为用户提供可以撤销行为的方式,并且对五花八门的输入数据尽量宽容(没人愿意只是因为填错了生日的格式而重头再来)。同样,如果用户的行为引起了一个错误,在恰当的时机运用信息显示什么行为是错误的,并确保用户明白如何防止这种错误的再次发生。

7、鼓励用户

一旦用户在完成了关键操作,可以通过弹出对话框等方式及时告知用户。值得注意的是,把一个复杂的流程任务分解为若干简单步骤,将会更显繁复和让人精力分散。所以无论正在执行的任务有多么复杂和漫长,在界面上要保持流程的不间断性。

8、语言有亲和力

所有的界面或多或少都有文字在其上,让文稿尽量口语化,而不是华美辞藻的堆砌。为行为提供清晰、简明的标签,保持简朴的文字叙述。。

9、保持简洁

最好的用户界面就是没有界面。优秀的软件界面中,你看不到华而不实的UI修饰,更看不到那些用不到的设计元素。所以当想着是否要在界面上加一个新功能或是新元素的时候,再思考一下:用户或者界面中真的需要这些么?为什么用户想要在这里当这个小巧的动态图标?是否只是因为出于自我喜好和页面的漂亮而去添加这些元素?优秀的UI工程师做出来的软件界面不会十分华丽,界面中没有任何分散用户注意力打搅用户操作的元素。甚至应该达到在用户使用系统的时候完全注意不到页面和操作复杂的问题,一切都应该是顺理成章的。


(图片来源于图虫创意)

文章来源:快资讯 作者:德方科技


蓝蓝设计建立了UI设计分享群,每天会分享国内外的一些优秀设计,如果有兴趣的话,可以进入一起成长学习,请扫码蓝小助,报下信息,蓝小助会请您入群。欢迎您加入噢~~希望得到建议咨询、商务合作,也请与我们联系。

                                                            微信图片_20210513163802.png

 

分享此文一切功德,皆悉回向给文章原作者及众读者.
免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。

 

蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服务




vue AES加密(超详细)

前端达人

第一步:


  1. //安装
  2. npm install crypto-js --save-dev

第二步:在src目录下新建个放公用js文件夹(common),再建一个AES.js文件,例如:

第三步:在AES.js中填写如下代码,key密钥长度则可以是128,192或256位(默认情况下是128位),正常情况下固定16位数即可

 
  1. import CryptoJS from 'crypto-js';
  2. export default {
  3. //随机生成指定数量的16进制key
  4. generatekey(num) {
  5. let library = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  6. let key = "";
  7. for (var i = 0; i < num; i++) {
  8. let randomPoz = Math.floor(Math.random() * library.length);
  9. key += library.substring(randomPoz, randomPoz + 1);
  10. }
  11. return key;
  12. },
  13. //加密
  14. encrypt(word, keyStr) {
  15. keyStr = keyStr ? keyStr : 'abcdsxyzhkj12345'; //判断是否存在ksy,不存在就用定义好的key
  16. var key = CryptoJS.enc.Utf8.parse(keyStr);
  17. var srcs = CryptoJS.enc.Utf8.parse(word);
  18. var encrypted = CryptoJS.AES.encrypt(srcs, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });
  19. return encrypted.toString();
  20. },
  21. //解密
  22. decrypt(word, keyStr) {
  23. keyStr = keyStr ? keyStr : 'abcdsxyzhkj12345';
  24. var key = CryptoJS.enc.Utf8.parse(keyStr);
  25. var decrypt = CryptoJS.AES.decrypt(word, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });
  26. return CryptoJS.enc.Utf8.stringify(decrypt).toString();
  27. }
  28. }

第四步:在需要的地方引入

import AES from "@/common/AES.js";

第五步:调用

 
  1. // var keys = AES.generatekey(16);
  2. //如果是对象/数组的话,需要先JSON.stringify转换成字符串
  3. // 不传key值,就默认使用上述定义好的key值
  4. var encrypts = AES.encrypt(JSON.stringify(cars));
  5. var dess = JSON.parse(AES.decrypt(encrypts));
  6. // var encrypts = AES.encrypt('1234asdasd');
  7. // var dess = AES.decrypt(encrypts);
  8. console.log(encrypts)
  9. console.log(encrypts.length)
  10. console.log(dess)

 

 

特别提示:当解密的时候是为空的时候(也没有报错),那么就一定是你的key长度不符合规范, 可以调整为key长度为16位。

 


蓝蓝设计建立了UI设计分享群,每天会分享国内外的一些优秀设计,如果有兴趣的话,可以进入一起成长学习,请扫码蓝小助,报下信息,蓝小助会请您入群。欢迎您加入噢~~希望得到建议咨询、商务合作,也请与我们联系。

截屏2021-05-13 上午11.41.03.png


文章来源:csdn   

分享此文一切功德,皆悉回向给文章原作者及众读者.

免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。

蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服务



关于web项目前后端加密解密总结

前端达人

首先项目是基于vue开发的项目

1、DES加密

前端

需要引入js

import cryptoJs from 'crypto-js'

// DES加密

export const encryptDes = (message, key) => {

return cryptoJs.DES.encrypt(message, cryptoJs.enc.Utf8.parse(key), {

mode: cryptoJs.mode.ECB,

padding: cryptoJs.pad.Pkcs7

}).toString()

}

后台


package com.huihui.until;

import java.security.SecureRandom;
import java.util.Scanner;
 
import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
 
import org.apache.commons.codec.binary.Base64;
 
 
/**
 * <b>类说明:DES</b>
 * <p>
 * <b>详细描述:</b>
 * @since 2019年3月31日 下午17:00:16
 */
public class DESCryptUtil {
    
    private static final String DES = "DES";
    
    public static final String desKey = "ba54ee44";
 
    public static String doEncrypt(String plainMessage, String hexDesKey) throws Exception {
        byte desKey[] = hexDesKey.getBytes();
        byte desPlainMsg[] = plainMessage.getBytes();
        return Base64.encodeBase64URLSafeString(desCrypt(desKey, desPlainMsg, Cipher.ENCRYPT_MODE));
    }
    /**
     * 获取解密后的字符串
     * @param hexEncryptMessage
     * @param hexDesKey
     * @return
     * @throws Exception
     */
    public static String doDecrypt(String hexEncryptMessage, String hexDesKey) throws Exception{
        if (hexEncryptMessage == null) {
            return null;
        }
        byte desKey[] = hexDesKey.getBytes();
        byte desPlainMsg[] = Base64.decodeBase64(hexEncryptMessage);
        return new String(desCrypt(desKey, desPlainMsg, Cipher.DECRYPT_MODE));
    }
    /**
     * 获取解密后的数组
     * @param desPlainMsg
     * @param hexDesKey
     * @return
     * @throws Exception
     */
    public static byte[] doDecryptByte(byte[] desPlainMsg, String hexDesKey) throws Exception{
        if (desPlainMsg == null) {
            return null;
        }
        byte desKey[] = hexDesKey.getBytes();
        return desCrypt(desKey, desPlainMsg, Cipher.DECRYPT_MODE);
    }
    
    private static byte[] desCrypt(byte[] desKey, byte[] desPlainMsg, int CipherMode) throws Exception{
        try {
            SecureRandom sr = new SecureRandom();
            DESKeySpec dks = new DESKeySpec(desKey);
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
            javax.crypto.SecretKey key = keyFactory.generateSecret(dks);
            Cipher cipher = Cipher.getInstance(DES);
            cipher.init(CipherMode, key, sr);
            return cipher.doFinal(desPlainMsg);
        } catch (Exception e) {
            String message = "";
            if (CipherMode == Cipher.ENCRYPT_MODE) {
                message = "DES\u52A0\u5BC6\u5931\u8D25";
            } else {
                message = "DES\u89E3\u5BC6\u5931\u8D25";
            }
            throw new Exception(message, e);
        }
    }
    /**
     * 获取8位的key
     * @param str
     * @return
     */
    public static String processString(String str) {
        if(str==null||"".equals(str)) {
            return "";
        }
        StringBuilder sb = new StringBuilder();
        for(int i=0;i<8;i++) {
            int index = i<<2&(32-i);
            sb.append(str.charAt(index));
        }
        
        return sb.toString();
    }
    public static void main(String[] args) throws Exception{
        DESCryptUtil se=new DESCryptUtil();
        for (int i = 0; i < 5; i++) {
            Scanner scanner=new Scanner(System.in);
            /*
             * 加密
             */
            System.out.println("请输入要加密的内容:");
            String content = scanner.next();
            System.out.println("加密后的密文是:"+se.doEncrypt(content, desKey));
           
            /*
             * 解密
             */
            System.out.println("请输入要解密的内容:");
             content = scanner.next();
            System.out.println("解密后的明文是:"+se.doDecrypt(content, desKey));
        }
    }

}
 

2 RSA加密解密

这是我是在在线生成公钥私钥的网站中生成了自己的公钥私钥用来测试

前台

import JsEncrypt from 'jsencrypt'

// RSA加密

export function encryptRsa(publickey, message) {

const rsa = new JsEncrypt()

rsa.setPublicKey(publickey)

return rsa.encrypt(message)

}

后台

package com.huihui.until;

import org.apache.commons.codec.binary.Base64;

import com.googosoft.config.GlobalConstants;

import javax.crypto.Cipher;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.HashMap;
import java.util.Map;
  
  
public class RSAUtil {  
      
    private static Map<Integer, String> keyMap = new HashMap<Integer, String>();  //用于封装随机产生的公钥与私钥
    public static void main(String[] args) throws Exception {
        //生成公钥和私钥
        genKeyPair();
        //加密字符串
        String message = "df723820";
    //GlobalConstants.PUBLICKEY 公钥加密
        String messageEn = encrypt(message,GlobalConstants.PUBLICKEY);
        System.out.println(message + "\t加密后的字符串为:" + messageEn);

//GlobalConstants.PRIVATEKEY 私钥解密
        String messageDe = decrypt(messageEn,GlobalConstants.PRIVATEKEY);
        System.out.println("还原后的字符串为:" + messageDe);
    }

    /** 
     * 随机生成密钥对 
     * @throws NoSuchAlgorithmException 
     */  
    public static void genKeyPair() throws NoSuchAlgorithmException {  
        // KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象  
        KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");  
        // 初始化密钥对生成器,密钥大小为96-1024位  
        keyPairGen.initialize(1024,new SecureRandom());  
        // 生成一个密钥对,保存在keyPair中  
        KeyPair keyPair = keyPairGen.generateKeyPair();  
        RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();   // 得到私钥  
        RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();  // 得到公钥  
        String publicKeyString = new String(Base64.encodeBase64(publicKey.getEncoded()));  
        // 得到私钥字符串  
        String privateKeyString = new String(Base64.encodeBase64((privateKey.getEncoded())));  
        // 将公钥和私钥保存到Map
        keyMap.put(0,publicKeyString);  //0表示公钥
        keyMap.put(1,privateKeyString);  //1表示私钥
    }  
    /** 
     * RSA公钥加密 
     *  
     * @param str 
     *            加密字符串
     * @param publicKey 
     *            公钥 
     * @return 密文 
     * @throws Exception 
     *             加密过程中的异常信息 
     */  
    public static String encrypt( String str, String publicKey ) throws Exception{
        //base64编码的公钥
        byte[] decoded = Base64.decodeBase64(publicKey);
        RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));
        //RSA加密
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, pubKey);
        String outStr = Base64.encodeBase64String(cipher.doFinal(str.getBytes("UTF-8")));
        return outStr;
    }

    /** 
     * RSA私钥解密
     *  
     * @param str 
     *            加密字符串
     * @param privateKey 
     *            私钥 
     * @return 铭文
     * @throws Exception 
     *             解密过程中的异常信息 
     */  
    public static String decrypt(String str, String privateKey) throws Exception{
        //64位解码加密后的字符串
        byte[] inputByte = Base64.decodeBase64(str.getBytes("UTF-8"));
        //base64编码的私钥
        byte[] decoded = Base64.decodeBase64(privateKey);  
        RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));  
        //RSA解密
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, priKey);
        String outStr = new String(cipher.doFinal(inputByte));
        return outStr;
    }

}  

蓝蓝设计建立了UI设计分享群,每天会分享国内外的一些优秀设计,如果有兴趣的话,可以进入一起成长学习,请扫码蓝小助,报下信息,蓝小助会请您入群。欢迎您加入噢~~希望得到建议咨询、商务合作,也请与我们联系。

截屏2021-05-13 上午11.41.03.png


文章来源:csdn   

分享此文一切功德,皆悉回向给文章原作者及众读者.
免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。

蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服务

element upload 上传图片 单独上传 和 添加formdata中提交的rules验证

前端达人

lement upload上传图片rules的验证分为单独提交还是放入formdata中提交

一个前端小菜鸡。若下边的内容有瑕希望告诉我,如果有更好的方法希望告诉我,感谢万分。

这篇文章主要介绍的对el-upload放在表单中提交之前rules的验证。这里的图片是必须提交项如果可以不提交可用常用方法直接提交就可以。

放在formadata表达中提交

<el-form ref="personform" label-position="right" label-width="120px" :model="formLabelAlign" status-icon :rules="rules"> <el-row> <el-form-item label="简述"> <el-input type="textarea" v-model="formLabelAlign.paper" autocomplete="off"></el-input> </el-form-item> </el-row> <el-row> <el-form-item prop="file" ref="uploadpic"> <el-upload
              style="display:inline-block" :limit="2" class="upload-demo" ref="upload" action="/hqx/knowledge/importKnowledge" :before-upload="beforeAvatarUpload" :auto-upload="false" :on-change="imageChange" :on-remove="imageRemove" > <el-button slot="trigger" size="small" type="primary" plain>上传</el-button> </el-upload> </el-form-item> </el-row> </el-form> <script> import _ from "lodash"; export default { data() { return { xiugai: false, formLabelAlign: { paper: "" }, images: [],// 图片存储 rules: { file: [{ required: true, message: "请上传图片", trigger: "change" }] }, haspic: false // 默认没有传图片 }; }, methods: { beforeAvatarUpload(file) { // 文件类型进行判断 const isJPG = /^image\/(jpeg|png|jpg)$/.test(file.type); const isLt2M = file.size / 1024 / 1024 < 2; if (!isJPG) { this.$message.error("上传图片只能是 image/jpeg/png 格式!"); } if (!isLt2M) { this.$message.error("上传图片大小不能超过 2MB!"); } return isJPG && isLt2M; }, imageChange(file, fileList, name) {//on-change触发 this.images["file"] = fileList; this.haspic = true; // 如果上传了就不显示提示图片警告 if (typeof this.images.file != "undefined") { if (this.images.file.length > 0) { this.$refs["uploadpic"].clearValidate(); } } }, imageRemove(file, fileList, name) { //on-remove触发 //如果images为空了说明并没有提交图片所以需要显示警告 if (typeof this.images.file != "undefined") { if (this.images.file.length > 0) { this.$refs["uploadpic"].clearValidate(); } else { this.$refs["uploadpic"].validate(); this.haspic = false; } } }, confirm() {// 提交绑定的事件 if (this.haspic) { // 去掉rules中对图片的验证 _.unset(this.rules, ["file"]); this.$refs["personform"].validate(valid => { if (valid) { console.log("说明已经添加了图片直接提交就行了"); const wfForm = new FormData(); wfForm.append( 'dsc',this.formLabelAlign.paper) Object.entries(this.images).forEach(file => { file[1].forEach(item => { wfForm.append('files', item.raw) wfForm.append(item.name, file[0]) }) }) // 直接提交 } else { console.log("error submit!!"); return false; } }); } else { // 向rules提价一条对图片的验证。 _.set(this.rules, "file", { required: true, message: "请上传图片", trigger: "change"}); this.$refs["personform"].validate(valid => { if (valid) { console.log("说明图片没有提交"); } else { console.log("error submit!!"); return false; } }); } } } }; </script>  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111

下边解释一下每段代码的含义:
1.

imageChange(file, fileList, name) {//on-change触发 this.images["file"] = fileList; this.haspic = true; // 如果上传了就不显示提示图片警告 if (typeof this.images.file != "undefined") { if (this.images.file.length > 0) { this.$refs["uploadpic"].clearValidate(); } } }  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

if (typeof this.images.file != “undefined”) 这个可加可不加
其中的一个原因是因为要频繁对rules进行操作因为element的el-upload的提示功能在选择了图片的时候并不会对图片的提示进行更改所以只能自己进行操作更改他显示或者隐藏
haspic是用来记录他是否上传了图片 如果上传为true否则为false 在后面提交的时候有用。
2.考虑到用户可能会选择了图片又删除了所以加上了一个判断
如果在提交的时候进行验证或者不考虑用户全部删除显示提示可不加

imageRemove(file, fileList, name) { //on-remove触发 //如果images为空了说明并没有提交图片所以需要显示警告 if (typeof this.images.file != "undefined") { if (this.images.file.length > 0) { this.$refs["uploadpic"].clearValidate(); } else { this.$refs["uploadpic"].validate(); this.haspic = false; } } },  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
confirm() {// 提交绑定的事件 if (this.haspic) { // 去掉rules中对图片的验证 _.unset(this.rules, ["file"]); this.$refs["personform"].validate(valid => { if (valid) { console.log("说明已经添加了图片直接提交就行了"); const wfForm = new FormData(); wfForm.append( 'dsc',this.formLabelAlign.paper) Object.entries(this.images).forEach(file => { file[1].forEach(item => { wfForm.append('files', item.raw) wfForm.append(item.name, file[0]) }) }) // 直接提交 } else { console.log("error submit!!"); return false; } }); } else { // 向rules提价一条对图片的验证。 _.set(this.rules, "file", { required: true, message: "请上传图片", trigger: "change"}); this.$refs["personform"].validate(valid => { if (valid) { console.log("说明图片没有提交"); } else { console.log("error submit!!"); return false; } }); } } } };  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

提交的时候进行判断。因为没有想到其他的方法所以写了一个变量判断是否在rules加上对图片的判断。因为如果存在对图片的判断。form验证的时候就总是throw error 不能进行提交操作this.$refs[“personform”].validate(valid){}是提交form表单的时的验证
(1)在有图片的时候去掉对图片的验证
(2)在有图片的时候加上对图片的验证

不放在formdata中提交(相对于上一个这个简单多了)

<template> <div> <el-form ref="personform" label-position="right" label-width="120px" :model="formLabelAlign" status-icon :rules="rules"> <el-row> <el-col :span="12"> <el-form-item label="发布人"> <el-input
                size="mini" v-model="formLabelAlign.person" autocomplete="off" clearable :disabled="xiugai" ></el-input> </el-form-item> </el-col> </el-row> <el-row> <el-form-item label="简述"> <el-input type="textarea" v-model="formLabelAlign.paper" autocomplete="off"></el-input> </el-form-item> </el-row> <el-row> <el-form-item prop="file" ref="uploadpic"> <el-upload  

style="display:inline-block" :limit="2" class="upload-demo" ref="upload" action="/hqx/knowledge/importKnowledge" :before-upload="beforeAvatarUpload" :auto-upload="false" :on-change="imageChange" :on-remove="imageRemove" :on-success="onsuccess" > <el-button slot="trigger" size="small" type="primary" plain>上传</el-button> </el-upload> </el-form-item> </el-row> </el-form> </div> </template> <script> import _ from "lodash"; export default { data() { return { xiugai: false, formLabelAlign: { paper: "" }, images: [], rules: { file: [{ required: true, message: "请上传图片", trigger: "change" }] }, haspic: false // 默认没有传图片 }; }, methods: { beforeAvatarUpload(file) { // 文件类型进行判断 const isJPG = /^image\/(jpeg|png|jpg)$/.test(file.type); const isLt2M = file.size / 1024 / 1024 < 2; if (!isJPG) { this.$message.error("上传图片只能是 image/jpeg/png 格式!"); } if (!isLt2M) { this.$message.error("上传图片大小不能超过 2MB!"); } return isJPG && isLt2M; }, imageChange(file, fileList, name) { this.images["file"] = fileList; this.haspic = true; // 如果上传了就不显示提示 if (typeof this.images.file != "undefined") { if (this.images.file.length > 0) { this.$refs["uploadpic"].clearValidate(); } } }, imageRemove(file, fileList, name) { if (typeof this.images.file != "undefined") { if (this.images.file.length > 0) { this.$refs["uploadpic"].clearValidate(); } else { this.$refs["uploadpic"].validate(); this.haspic = false; } } }, onsuccess(response, file, fileList){ // 如果提交失败将haspic改为false后边的数据就不让他提交 }, confirm() { if (this.haspic) { // 去掉rules中对图片的验证 _.unset(this.rules, ["file"]); this.$refs["personform"].validate(valid => { if (valid) { console.log("说明已经添加了图片直接提交就行了"); const wfForm = new FormData(); wfForm.append( 'dsc',this.formLabelAlign.paper) //直接将wfForm提交就可以 } else { console.log("error submit!!"); return false; } }); } else { alert('请添加图片之后在提交') } } } }; </script>

蓝蓝设计建立了UI设计分享群,每天会分享国内外的一些优秀设计,如果有兴趣的话,可以进入一起成长学习,请扫码蓝小助,报下信息,蓝小助会请您入群。欢迎您加入噢~~希望得到建议咨询、商务合作,也请与我们联系。

截屏2021-05-13 上午11.41.03.png

文章来源:csdn   

分享此文一切功德,皆悉回向给文章原作者及众读者.
免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。

蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服务


nodejs 接收上传的图片

前端达人

1.nodejs接收上传的图片主要是使用formidable模块,服务器是使用的express搭建。

引入formidable

var formidable = require('./node_modules/formidable');

拦截请求,设置formidable的常规项

复制代码
app.post("/image",function (req,res) { var form = new formidable.IncomingForm();
    form.encoding = 'utf-8';
    form.uploadDir = path.join(__dirname + "/../page/upload");
    form.keepExtensions = true;//保留后缀 form.maxFieldsSize = 2 * 1024 * 1024;

});
复制代码

解析图片,重命名图片名称,返回给前端

复制代码
 //处理图片  form.parse(req, function (err, fields, files){
        console.log(files.the_file); var filename = files.the_file.name var nameArray = filename.split('.'); var type = nameArray[nameArray.length - 1]; var name = ''; for (var i = 0; i < nameArray.length - 1; i++) {
            name = name + nameArray[i];
        } var date = new Date(); var time = '_' + date.getFullYear() + "_" + date.getMonth() + "_" + date.getDay() + "_" + date.getHours() + "_" + date.getMinutes(); var avatarName = name + time + '.' + type; var newPath = form.uploadDir + "/" + avatarName;
        fs.renameSync(files.the_file.path, newPath); //重命名 res.send({data:"/upload/"+avatarName})
    })
复制代码


完整代码如下


var path = require("path"); var fs = require("fs"); var express =require("./node_modules/express"); var app=express(); var bodyParser = require('./node_modules/body-parser'); var formidable = require('./node_modules/formidable');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static(__dirname + "./../page"));
app.listen("8083",function () {
    console.log("服务启动")
}); //拦截请求 app.post("/image",function (req,res) { var form = new formidable.IncomingForm();
    form.encoding = 'utf-8';
    form.uploadDir = path.join(__dirname + "/../page/upload");
    form.keepExtensions = true;//保留后缀 form.maxFieldsSize = 2 * 1024 * 1024; //处理图片  form.parse(req, function (err, fields, files){
        console.log(files.the_file); var filename = files.the_file.name var nameArray = filename.split('.'); var type = nameArray[nameArray.length - 1]; var name = ''; for (var i = 0; i < nameArray.length - 1; i++) {
            name = name + nameArray[i];
        } var date = new Date(); var time = '_' + date.getFullYear() + "_" + date.getMonth() + "_" + date.getDay() + "_" + date.getHours() + "_" + date.getMinutes(); var avatarName = name + time + '.' + type; var newPath = form.uploadDir + "/" + avatarName;
        fs.renameSync(files.the_file.path, newPath); //重命名 res.send({data:"/upload/"+avatarName})
    })
});


    

蓝蓝设计建立了UI设计分享群,每天会分享国内外的一些优秀设计,如果有兴趣的话,可以进入一起成长学习,请扫码蓝小助,报下信息,蓝小助会请您入群。欢迎您加入噢~~希望得到建议咨询、商务合作,也请与我们联系。

截屏2021-05-13 上午11.41.03.png

文章来源:博客园

分享此文一切功德,皆悉回向给文章原作者及众读者.
免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。

蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服务

用理性思维做情感化设计

涛涛

分享框架

唐·诺曼提出了情感化设计的3个方向:本能层、行为层、反思层。但如何在一个项目中,通过情感化设计,让用户切实感受到这样的情绪,一直没有很系统的理论。恰逢58同城交友业务中有这样的项目,可以实践一下这方面的思考。本次活动中,嘉宾分享了直播礼物的价值与意义、直播情境情绪,并以此为基础,探讨了理性化搭建情感化礼物的设计体系。

 

第一部分:直播礼物的价值与意义

礼物的价值是什么?有什么意义,为什么不直接用钱?礼物和金钱的不等价感受,决定了礼物是很好的消费载体;不同场景需要不同载体,礼物的多样性满足了不同场景的需求;直接送钱可能会让用户不爽。

 

第二部分:直播的情境和情绪(含案例)

礼物要匹配情境情绪出现,送钱也不太合适,而当前平台已存在30多款礼物,但是用户的使用次数较少,期望通过本次项目更新直播间的礼物,并提升ROI。因此需要重新探索直播间会出现的情境情绪,并设计与之匹配的礼物。

这款产品面向下沉市场、25~40岁、单身/离异的用户群体。

设计情感化礼物的灵感来自于彼得·MA·德斯梅特的理论模式。

情感产生的过程:用户对产品的关注点和产品所呈现的信息相结合会引发用户对产品的评估,而评估的结果会最终决定用户对产品的情感是什么样子的。由于个体的动机、价值观、态度的不同,情感产生的差异是不可控的,导致设计师在设计的时候处于一个相对被动的位置。因此期望可以为设计师提供一些方向性的指引,帮助他们更好地完成产品的设计。因此通过模型推导,了解用户对产品的情感和关注点,从而推导出产品应该呈现什么样的信息,从而帮助设计师做出更好的设计。

2.1 规划思路:

  • 有计划地考量使用者的情感反应,从而影响使用者对产品的评估,最终达到更好地建立产品与使用者的情感联系的目标。

2.2 实施步骤:

  1. 阶段一:搭建情感指标
    在产品从0到1阶段,快速产出礼物,因此通过前人研究、竞品分析、头脑风暴等手段产出情感指标。
  2. 阶段二:核准情感指标
    产品上线后,通过对真实用户的调研,对第一阶段提出的情感指标进行精准的核准。

    1) 前人研究
    以代尔夫特大学积极情感指标为理论基础,但因为它不带任何业务属性,因此无法直接使用。

    2) 头脑风暴
    为了将基础情绪体验转化为业务属性的情感指标,进行第二步的头脑风暴。邀请设计师、直播的产品经理进行讨论,根据对业务理解+目标用户特征+使用场景+行为目标综合考虑,从基础的正面情感表中筛选出适合的指标。

 

基于上述结论,给到设计师合理的方向性指引,快速上线了一部分礼物。在产品逐渐趋于成熟之后,需要对最初建立的情感指标进行核准,了解真正用户在使用过程中对产品的情感诉求和关注点,进一步调整情感。

通过1V1电话访谈,对11名真实用户进行了深访。

 

在阶段二中,主要探讨了以下四点:

  1. 使用动机:
    理解用户的使用动机,能帮助我们更好得理解用户,设计好产品,刺激用户做出我们想要的行为;
  2. 送礼场景:
    洞察用户送礼场景,分析用户的情感需求和功能需求,帮助我们提供更合适的礼物;
  3. 影响因素:
    主要目的在于探讨礼物本身应该具备的因素,以及在送礼过程中如何刺激用户送礼;
  4. 对礼物的期待:
    探讨未来礼物可优化的方向。

结合上述分析,提炼出了情感诉求和产品关注点两个层面的信息。情感诉求层面,通过送礼场景和送礼动机的分析,将原来的5个情感指标重新定义为3个情感指标:自豪、爱慕、情欲。这3个情感指标将成为后续建立礼物库的基础。

产品关注点层面,从功能、体验层面为设计师提供了方向性的引导。

用研通过上述一系列的研究和分析,仅仅可以给设计师一些方向性的引导,设计师在设计层面需要进一步结合分析结论进行拆解和设计。

 

第三部分:理性化思维,搭建情感化设计体系

意象的概念阐述

  • 名词释义:客观事物经过创作主体独特的情感活动而创造的一种艺术形象。
  • 简单理解:设计师通过自己生活情感的特有体验,进行艺术加工后创造出来的形象。

情绪与意象具有一定的关联性,它可能是生活习得的。例如:秋雨、孤独的老人、掩面哭泣等都可以表达悲伤;又或者是被竞品教育的,例如:火箭、跑车等,用于表达自豪,均是来自竞品的教育。

3.1 剥离意象维度

我们可以从情绪诞生的场景来剥离构成意象的维度:

  • 以形象为内核、主体,在设计维度进行剥离时,可以有形象、材质、颜色等元素;
  • 向外一层,即此主体所处的场景,包含光效、声音、时间等元素;
  • 再向外一层是关系,即形象如何展示在场景中,包含动效、节奏等元素。

3.2 收集具体意象

基于上述维度及元素,设计、产品、运营团队内收集意象,主要方式包括以下两类:

  1. 还原场景
    构建场景 → 填充故事 → 提取礼物
  2. 角色演绎
    提炼产品相关8个角色,并随机分配个同事 → 收集角色影响 → 角色演绎 → 礼物联想

另一方面,也要收集竞品的意象,同时需要将前面头脑风暴产生的意象以及竞品的意象进行形象类型、礼物形态、价格定位的分析和提取。

3.3 构建情绪意象库

以此为基础,可以构建情绪意象库。某一种形象,在不同的场景和不同的关系下,可以表达不同的情绪。例如同样是烟花,小仙女棒式的烟花和宏伟的漫天绽放的烟花所表达的情绪是截然不同的。因此我们根据所要表达的情绪,将所对应的形象、场景、关系收纳到对应的意象库中,这可以帮助一些视觉设计师快速给出设计方向。

3.4 处理意象的设计形态

下一步,即可为意象进行设计形态的处理。我们将需要处理的意象,以单一-复合 和 具体-抽象 为坐标进行了分类,从而划分小礼物、中礼物、大礼物,以提供定价参考。

3.5 构建情绪意象的视觉语言

由于直播间涉及的礼物品类繁多,同时参与设计的视觉同学也较多,为了使得最终的产出有视觉风格上的一致性,针对每一种情绪进行了配色、光效、样式、质感上的定义。

3.6 礼物定价

礼物定价趋势方面,对竞品的礼物进行了分析,将竞品的礼物按表达的情绪聚合,并分析在这种情绪上,礼物价格的分布,来帮助我们了解竞品针对不同情绪表达的礼物的定价规则,以指导自己产品的定价。

最后,礼物上线后,销售量top10的礼物中,新礼物占比达到60%。同时同档位中效益最好的一款,收益提升了1035.4%。

以上是关于理性思维搭建情感化设计体系的分享。


蓝蓝设计建立了UI设计分享群,每天会分享国内外的一些优秀设计,如果有兴趣的话,可以进入一起成长学习,请扫码蓝小助,报下信息,蓝小助会请您入群。欢迎您加入噢~~希望得到建议咨询、商务合作,也请与我们联系。

截屏2021-05-13 上午11.41.03.png



文章来源:UXRen   作者:宝珠

分享此文一切功德,皆悉回向给文章原作者及众读者.
免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。

蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服务


为什么“智能”不是品牌差异化定位?

涛涛

编辑导语:面对行业竞争、市场环境的发展与用户需求的提高,品牌若想在众多同行中脱颖而出,就需要对自身做好定位,以求给消费者留下深刻印象。“智能”一词近来频繁出现,然而“智能”真的可以成为品牌定位标签吗?我们对“智能”又该如何理解呢?

2019年12月份,著名主持人蔡康永与著名经济学家薛兆丰正面交锋,他们的议题是:智能,到底“能不能”?双方各持一词,争锋不相上下。关于“智能”的优缺点,每个人的论证都非常精彩,且令人信服。

这场关于“智能”的讨论,熟对熟非?可能没有明确的答案。但凭此一点就可以证明:“智能”绝对是21世纪,商业界最流行的概念。

“智能”这个词无论放在哪个行业都是科技感的象征。看似任何品牌只要在产品中加上“智能”概念,就掌握了致胜砝码。

最近,我们到南孚集团内访,在与他们的高管进行交流中,他们讲,他们针对智能家居开发一款电池产品,并考虑把这款电池定义为“智能电池”。很庆幸,他们最终放弃了。

没有一点点防备,没有一丝顾虑,“智能”已经潜入我们的生活。当你走进家电卖场,几乎找不到不是智能的家电。你也可以到家居建材卖场走一圈,映入眼帘的是智能水龙头、智能马桶、智能锁、智能玻璃、智能蒸箱、智能家居、智能电梯、智能厨卫、智能晾衣架、智能美甲机……无处不在的智能。

我们的生活已经被“智能”包围了。

智能手机的普及让人们意识到“智能”的先进性与方便性,此后便一发不可收拾,大量的智能设备走进人们的生活。起初,智能只在家电行业流行,然后逐步渗透到家居建材行业。发展的今天,只要与电相关的设备都智能化了。因为企业相信,“智能”概念能够帮助到他们。

武汉一家电梯企业直接把“智能”申请成商标。

总而言之,我们所处的商业环境正处于“智能”的变革中。对于企业来说,“智能”既是挑战也是机遇。他们把“智能”作为广告设计的主角,并认为“智能”应该是传播的核心,甚至比品牌还重要。

在苏州,有一家企业在公路大牌广告中说“智能是我们的方向”。这家企业甚至没有把自己的品牌放进广告中,也没有自己在销售什么产品。

中山市一家智能安防企业,它在广告中说“智能在门上飞驰”。

浙江维卫电子洁具有限公司在广告中说“买智能,选维卫”。这个广告在上海虹桥高铁站投放至少2年。

站在企业角度就能理解他们的做法。在智能浪潮袭来之时,他们非常害怕自己的产品成为过时货。为了使产品成为人们关注的焦点,就必须与智能搭上关系。

企业认为,当消费者浏览网页,观看产品说明书,在购物平台看相关的体验评价,在与消费者的每次互动中,只要把“智能”一词送入消费者眼帘,产品必然比以往卖得好。

企业对“智能”的追求可谓到了疯狂的地步。从创建品牌角度看来,“智能”会成为品牌差异化的定位吗?

不急于回答这个问题,我们探究一下“智能”是否会增加品牌的竞争力。

一、智能缺乏竞争力

“智能”是传统企业的兴奋剂。尤其是这个时代,传统企业不被淘汰的救命稻草就是抓住智能风口。因为“智能”会让他们的产品看起来很高级。

投资者也致力于寻找这样的企业,并期待下一个“独角兽”的诞生。媒体也会挖掘他们的故事,并把他们带到聚光灯下。

对于一个企业来讲,“智能”到底是机遇?还是冒险?

我们看几个实践案例,他们都是“智能”概念的簇拥。据我们观察,不同企业的实践成效也不尽相同。部分企业的实践却带来灾难性的后果;有些企业在实践一段时间之后便放弃了;还有的企业正在实践中……

我们看一个传统企业的实践案例。从结果来看,“智能”概念并没有让它的品牌变得更强大。相反,“智能”引导这家企业走向了极端。

浩沙原本是全国领先的健身房连锁机构。到了智能时代,他们已经迫不及待把“智能”与健身房结合在一起。他们通过APP把智能硬件和健身房进行一体化建设,并宣布1亿元战略投资健身APP啡哈健身。同时,内部孵化的硬件公司钛酷科技,开始健身智能硬件的研发。

智能健身房受到媒体的关注,他们大肆鼓吹智能健身房的到来。人民网以《浩沙推出大健身战略打造一流智能化健身房》为主题发表看法,新华社发文《新零售健身时代来了 浩沙启动首家智能健身会所》。

实际上,浩沙智能健身房并没有因此而不可战胜,而是一步一步消失在人们的视线中。

从竞争角度来看,即便“智能”概念没能提升品牌的竞争力,但也不至于导致浩沙健身失去竞争力。导致浩沙走向衰落的原因在于,浩沙把“智能健身馆”当作企业的核心战略,并为此提供相应的战略支持。

直白的讲,他们为“智能健身馆”投入太多。如此大的投入却没有吸引新的顾客,导致企业资金链断裂,走向破产。

再看另一类企业的实践,他们试图通过“智能”概念与竞争对手实现区隔,从而创造新顾客。但事与愿违,而后因为实践效果微乎其微而放弃。

中国厨房电器领导品牌老板电器为了迎合趋势,于2014年9月发布全球首台搭载ROKI系统的智能大吸力油烟机,并畅想行业未来的发展趋势:智能化与科技感成为主流。

在老板电器预见的智能世界里,吸油烟机内部嵌入摄像头可以成为标配,它既可以实时视频通讯,又可以远距离监控烹饪状态。

智能手环精准记录人体的运动量和身体状况,将这些数据与菜谱的荤素搭配,卡路里和维生素的比例都结合在一起,智能推送菜谱,保证营养与能量的均衡。

同样的实践,2016年,中国电动自行车领先品牌雅迪在上海国际时尚中心正式发布公司首款智能电动车新品——雅迪Z3。

所谓智能,就是说雅迪Z3拥有自己专属的智能手机APP,骑乘者通过APP可以轻松地对电动车进行操控。雅迪Z3的APP支持GPS和北斗实时双模定位、远程报警、智能诊断、开机自检、服务网点搜索、一键切换动力模式以及车辆个性化设置等功能。

老板和雅迪两家企业很快就在传播层面放弃了“智能”概念。

可能的原因是实践效果不佳。

雅迪和老板的实践并没有引起其他企业的企业警惕。相反,部分企业会认为雅迪和老板的成功是因为他们向消费者传达了“智能”概念。

实际上,在两个品牌诉求“智能”之前,雅迪电动车和老板电器已是行业领先品牌,智能并没有给他们增色,也没有让两个品牌的影响力得以提升。

话说回来,智能也没有让他们的品牌失去影响力,只是瞎折腾了一番。对于这个具有巨大领先优势的品牌而言,消耗一些资源并不会令他们伤筋动骨。

近几年,“智能”如瘟疫一样侵入汽车市场。如果你经常出入各种车展,就不难发现几乎所有的车企都将重点放在了“智能”领域并纷纷将“智能”作为汽车重要的亮点。小鹏、蔚来、理想和威马这四个领先品牌如何定义自己的品牌?

  • 威马:智能汽车头号实力派;
  • 小鹏:更懂中国的智能汽车;
  • 理想:更自由的智能电动车;
  • 蔚来:智能电动全能SUV。

很明显,他们一致地把目光锁定到“智能”概念上,并竭力占据它,从而实现品牌的差异化。然而企业应该深度思考的是,对于消费者而言,什么是“智能汽车”?“智能”到底意味着什么?如何定义“智能汽车”呢?信息显示:

智能汽车是一个集环境感知、规划决策、多等级辅助驾驶等功能于一体的综合系统,它集中运用了计算机、现代传感、信息融合、通讯、人工智能及自动控制等技术,是典型的高新技术综合体。

目前对智能汽车的研究主要致力于提高汽车的安全性、舒适性,以及提供优良的人车交互界面。

显然“智能汽车”意味着众多好处。

这与智能手机发展的最初阶段颇为相似。智能手机拥有众多好处,但没有哪个品牌能够占据“智能手机”。那些强大的品牌都是通过占据摄影、信号、音乐、快充等概念来实现区隔。

由此类推,电动汽车品牌不可能通过占据“智能”创建定位,他们实现差异化的方式应该是占据其它的词汇,而不是智能。

从方法论来讲,定位理论倡导品牌占据一个明确的,单一的词汇。而“智能”呈现的却是包罗万象,好处众多。这显然违背了定位理论的基础。

虽然“智能”不会成为汽车品牌的定位概念,但汽车朝着智能化方向进化却不容忽视,因为它让人们的出行更加便捷、更加安全、也更加舒适。如果你的汽车不具备智能化,可能面临被淘汰的局面。

从竞争角度来看,答案是显而易见的——智能没让品牌变得与众不同,变得更有竞争力。

二、智能无法被定义

消费者认为什么是智能?它能提供什么价值?对于那些致力于通过智能创建定位的企业而言,这可不是一个可有可无的问题,而是一个首先要弄清楚的问题。否则,企业如何在心智中占据它。

这个问题并不容易回答。我们试图从认知科学领域寻找答案,但依然模棱两可。

哈佛大学认知心理学家史蒂芬•平克曾在《心智探奇》中讨论过“什么是智能”。平克先生在了解其他心理学家对“智能”的看法后,他说出了自己的看法。他认为,智能是面对阻碍,根据理性规则做出决策,从而达到目标的能力。

许多心理学家及认知科学家对“智能”的定义迥然不同。由此可以看出,到目前为止,人们对“智能”依然缺少统一的定义。

企业真应该回过头来想一想,到底什么才算是智能?单从定义上讲,似乎都难以找到一个准确答案。因为一旦将这个词放在任意一个产品上,其定义都会发生变化。

在油烟机品类中,智能代表的含义是:可视频通讯,远程监控烹饪状态。智能手环精准记录人体的运动量和身体状况,将这些数据与菜谱的荤素搭配,卡路里和维生素的比例都结合在一起;智能推送菜谱,保证营养与能量的均衡。

在电动自行车品类中,智能代表的含义是:支持GPS和北斗实时双模定位、远程报警、智能抱死、蓝牙感应、服务网点搜索、电池检测以及车辆个性化设置等功能。

在马桶品类中,智能代表的含义是:通过按钮面板来进行操作臀部清净、下身清净、移动清净、坐圈保温、暖风烘干、自动除臭、静音落座等等。消费者在使用的时候,只要手握遥控器轻轻一按,所有功能都可轻松实现。

老板智能大吸力油烟机、雅迪智能电动车以及智能马桶……如果把名单列全,数量可能会令人吃惊。

不同行业,智能代表着不同的定义。即便处于同一品类,消费者对“智能”的理解也因人而异。可以推测,这些定义传递到消费者那里,他们定然不知所措。

消费者如何理解“智能”?它的价值在哪里?

如果把这个问题抛给消费者,他们肯定一脸无辜。商业界创造出来的词汇,为什么让我们来解释呢?根本原因在于,商业界对智能的定义千差万别,导致消费者接受到的信息非常凌乱。

我们对购买智能产品的消费者进行了访谈。结论是,消费者对“智能”的理解是模糊的,不清楚“智能”到底能够带来了什么好处。那些花里胡哨的功能,他们并不在乎。

非但如此,在实践中,许多企业的“智能”概念抹杀了一个犀利的差异化定位。

我们做过一项调研,当向消费者介绍指纹锁时,很容易就理解了。然而,当我们询问他们对智能锁的看法时,他们开始犹豫不决。在不确定的语气中,有的消费者说是指纹开锁,有的消费者说是密码开锁,还有的消费者说是脸部识别开锁。

企业的想法是越多越好,仅诉求指纹锁,好像漏了一项功能;仅诉求密码锁,好像也漏了一项功能。“智能锁”成为他们的解决方案。

可以看出 “智能”是一项复杂的功能。

当企业把众多功能用“智能”概括时,没有让事情变得简单,反而更加复杂。如果你不能用一句话向消费者说清楚品牌的优势所在,即便再先进的功能也不能创造价值。

企业要弄清是什么使您的品牌与竞争对手区分开来。聚焦单一功能才有可能创建品牌。2017年,定位之父艾·里斯先生在第三届定位峰会上发表演讲时表示:“企业创建品牌应该聚焦单一功能”。

也就是说,品牌聚焦“智能”中的某一项功能或许可以创建一个定位。从功能角度来看,“智能”在一定程度上抹杀了一些有价值的功能,从而导致企业错失通过聚焦单一功能来创建品牌的机会。

幸好老板电器放弃了“智能油烟机”,并明智地回到“大吸力”定位。长期聚焦“智能”概念可能会导致品牌的战略成果不及现在。

克里夫定位学院的一家学员企业,他们的学习机有一项非常独特的功能,在我们看来,这项功能非常有价值,凭借此项功能完全可以创建一个全新的品类。可惜的是,这个产品还有其他诸多功能。

企业管理者陷入了“多功能”产品的怪圈,他们用一个时髦的概念概括了产品的功能,这个词就是“智能”。

每当企业管理者向他人介绍这款产品时,用30分钟,说了许多功能,但听者越来越迷惑。

放弃“智能”回归原有定位的案例并不少见。有个企业的实践经历令我们印象深刻。2017年,第十二届豫商大会后,李亮院长和我一同与广东名门锁业董事长陈力先生乘车回酒店。在路上,陈力先生讲,名门在2016年走了一段弯路。

他们认为“智能”在未来会比“静音”更有竞争力。

因此,名门开始聚焦于“智能”。为了抢占“智能门锁”,他们投入不少资源。但最后发现,品牌并没有因此变得更好。竞争压力迫使他们回归“静音”。

企业管理者一定要谨记,一旦公司开发出一项新功能,千万不要把这个功能与其他功能混合在一起,然后给它一个时髦的“智能”概念。

让品牌与众不同的最佳的策略是聚焦单一功能。

三、平淡无奇的概念

品牌创建与产品设计有很大的不同。

设计产品时,当企业发现某项新技术有竞争力,企业就可以获取,从而增强产品的竞争力;创建品牌关乎心智,当一个概念充斥在商业界并随即可见时,心智便认定它不再重要,从而导致品牌占据这个概念的价值大大减弱。

就现在的商业环境而言,“智能”已随即可见。在认知中,它已平淡无奇。

一个适用于所有行业,适应于所有品牌的概念必然会失去它锋利的一面。“智能”之所以能适用如此多的行业,就是因为它是一个很宽的概念。宽泛概念对于创建品牌通常没有什么价值。

事实上,目前还没有一个品牌能够通过占据“智能”来实现区隔,未来也不会有。

我们的观点是“智能”不能成为品牌之间的区隔概念。但智能也并非一无是处,它会使人们的生活变得便捷,变得幸福。虽然它对创建品牌的作用不大,但它依旧是产品进化的主要方向。一旦企业的产品在智能化方面落后于竞争对手,它就很容易在心智中与“过时货”划上等号。

众所周知,特斯拉是全球纯电动汽车的绝对领导者。研究特斯拉的过去会发现,特斯拉没有在某个阶段聚焦于“智能”。但这并不意味着特斯拉没有超智能方向进化,相反,特斯拉是该领域智能化程度最高的品牌。

产品竞争力和品牌差异化具有很大的不同。智能是产品进化方向,可以增加产品竞争力,是产品参与市场竞争的必要条件。但“智能”添加到品牌概念中,并不会在心智中被占据,也不会让品牌差异化。

本文通以以上观点来表明我们的看法,即:在品牌创建定位中,“智能”发挥的力量微乎其微。这一观点可能会遭到同行及企业的“白眼”。但我们会坚持自己的看法。

传统品类贴上“智能”标签总是很吸引人,让企业放弃太难了。只要企业萌生通过“智能”创建品牌定位的念头,这些论据及观点都不值一提。在商业界,想必还会有更多的企业踏进“智能”怪圈并无功而返。


蓝蓝设计建立了UI设计分享群,每天会分享国内外的一些优秀设计,如果有兴趣的话,可以进入一起成长学习,请扫码蓝小助,报下信息,蓝小助会请您入群。欢迎您加入噢~~希望得到建议咨询、商务合作,也请与我们联系。

截屏2021-05-13 上午11.41.03.png



文章来源:人人都是产品经理   作者:朱小栓

分享此文一切功德,皆悉回向给文章原作者及众读者.
免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。

蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服务


如何讲述你的设计

鹤鹤

在工作中常常被问到如何表达讲述自己的设计,为了让自己的设计有理可依,对接上下游汇报工作的时候,总结以下一些方法和观点,帮助不知从何讲述自己设计的人一些语言技巧。  

以下仅是个人观点,用作探讨交流,文中所有举例均为本人工作设计输出。

设计师能做出好的设计,却缺乏系统化的语言包装,“如何讲设计”不该让它成为难题,做一个有产品思维的设计师,让你的设计以理服人,我们要不止停留在视觉表层,更要从多纬度看待产品设计,本文将从以下三点简述:01.产品设计的五个层面,02.讲述设计的流程,03.关于本次总结

做好产品设计的第一步,是了解产品, 要对于产品的需求如何确定、产品定位如何决定有一个基本的认识,在产品常识里面最重要也最常用的就是产品设计的五个层面,也简称用户体验五要素——

作为UI设计师,所处的视觉设计是表现层,是确定产品的最终形态,因此也处于产品设计的顶层(能被看到),是一个具象画的呈现;其次,往里推框架层,是确定产品外观,将界面信息和导航设计有序归类,让用户使用或者理解;结构层是为用户设计一个结构化的体验,将零散的元素转化为有序立体的空间;范围层确定产品的功能和需求;最后战略层是确定产品目标和用户需求;底层逻辑结构决定上层意识形态表现,因此在设计前我们要知道产品是属于洞察阶段,设计中是属于产品设计解决方案阶段,整体的产品设计是一个概念通过无数个层面的努力,经过时间,转化为具象表现的过程,所以我们在完成一项设计时,应该讲述一个完整的设计思路 ,不要让自己的设计思路仅停留在表面。

整个产品的设计产出是一个抽象到具象化的过程,设计的前期属于产品洞察阶段,这个时候一般由团队的老板领导结合当下市场需要,有用户的需求就有商机,想出产品大致的方向(战略层)然后通过产品经理整合梳理高层的意见确定产品大致的功能和内容输出原型(范围层),交给交互设计师优化产品细节逻辑和信息具体框架,经过研发评估能够技术实现产出交互稿(结构、框架层),这里已经过渡到设计解决问题执行阶段,最后是给到界面设计师美化视觉产出高保真(表现层)。

也就是到我们自己设计输出之前要经历这么多,如果能在讲述自己设计的时候,提前去了解这些,那么设计内容就不愁没法儿讲,光是阐述自己的设计思路就可以讲出一个故事,这也是为什么现在很多品牌卖货都开始营销产品背后的故事由来。我们设计能做好,也要会用语言推销自己的设计成果。

设计是对于某件事精心准备的过程。好的设计作品,应该拥有完整的设计流程,因此我们在讲述自己设计作品的时候,有一套完整系统化的方式是非常有效的。完整的设计流程包含以下4个步骤:

第一是我们需要去了解设计的需求背景,知道大概的方向—— 

  1. 来源(简单理解就是谁提出的问题)需求有可能是你的老板、你的产品经理、或者交互设计、或者视觉上的问题··· 

  2. 背景(笼统一点,就是这个需求是新需求还是原来有然后进行改版优化)需求的基层性质是什么,原本调性是什么,我们要做什么样的产品··· 

  3. 目标(目标一般都是需要解决什么问题)搞清楚为什么做这个需求,能解决什么痛点,不做无用功。

谁提出的问题,是新的需求还是旧的问题,或者我们要解决什么?围绕这几个方向将你的设计概述出来,会让非专业的人也能听懂你做了什么,举个简单的例子,我们公司后台一个很小的产品bug需求,往往这种需求就是产品经理的一个截图和他标注的两句话——

然后你完成了这个需求单,在传达给非产品经理以外的人的时候,你有可能是以下转述方式——

毫无疑问,你就是将需求者的意思一字不落的转达了,但是对于其他的听者来说,你的转述平平无奇、毫无意义,甚至都没有印象你做了什么,所以你应该讲清楚这个需求的背景—— 

设计需求来源是谁,原本属于产品哪个模块(来源),他原来功能是怎么样的,界面上展示的结构哪里有问题(背景),视觉用了什么样的方式改成什么样,解决了什么痛点(目标)

讲清楚谁给的需求,需要解决什么问题,是在原来的基础上不变动逻辑的情况下增加了什么达到了什么目的,才让你的叙述更完整,听起来更有逻辑。如果是一项新的需求,没有背景,那还得从设计分析说起,设计分析就是让你更专业的去做事,设计分析分为——用户分析,设计目标,和设计手段三个要点:

首先用户分析就是,分析你做的东西给谁看,而用户又分为群体用户和独立用户,在c端常见的就是独立用户,他们通常不定性,且有很多特征;在b端,目标用户一般是群体,他们大多数是有场景特性和行业特性,针对独立用户和群体用户,我们得出的用户特征、基本信息、需求结论也是不一致的,所以我们应该结合产品的调性分析一下我们做出来的设计究竟给谁看给谁用。常见的用户分析方法有:用户画像、用户访谈、问卷调查、焦点小组、眼动测试、用户反馈以及大数据分析,这些方法中最简单的是用户画像,就是举实际的例子列出真实用户的特征信息及使用场景。B端用户分析方法常用大数据分析和用户反馈,这两种方式通过对接需求的上下游就可以得知。

通过用户分析得出需求结论,满足需求就能达成设计目标——

设计目标结合卡诺模型来分析,卡诺模型—反应产品性能和解决用户需求的满意度的一种非线性关系,具体想了解的可以自行百度,站在巨人的肩膀上我们看得更远。 卡诺模型具备4种属性 :1.必备属性:满足这个需求,用户满意度不会上升,但不满足这个需求,用户不满意会大幅度降低 ;2.期望属性:提供个性化需求,用户满意度会上升,不提供此需求,用户满意度会降低; 3.魅力属性:用户意想不到的效果,提供此属性,用户满意度大幅提升,不提供也不会降低 ;4.无差异:无论提不提供,用户满意度都不会改变,根本不在意;因此在做需求的时候我们应该尽力满足基本需求和期望需求,而可有可无的需求尽量不去做,降低效率。幸福需求是不容易达到的,如果能满足是非常棒的~这里就像是满足了设计心理学的三个层次——本能、行为、反思。

接下来是大家都熟知的设计手段,适当的讲一些述专业的设计技法,用不同的手段去实现的主画面,最后达到完成设计目标这样的结果,会让你显得更专业。设计的手段有很多种,这里主要讲述常用的三种,构图排版(采用什么构图方式,为什么这样构图是因为什么设计原则)、色彩运用(为什么使用这个颜色,因为这个颜色给人的心里感知是什么样的)、设计风格(采用什么风格最贴近产品调性,为什么用这个风格),但是讲设计时一定要记住产品的调性,不能偏离产品本身,不要盲目套用绚丽的技法,否则是不合适的。

很多时候面对非专业需求方收稿时,可能看到如下话语———— 

(心里是不是xxxx····“万马奔腾”,用个文明点的词)

非专业人士无法理解这二者的区别,他们认为他们的设计手段能达成设计目标,而作为专业设计师的我们就应该引导对方说出设计目标,再用我们专业的手段去满足对方的目标,去实现减少改稿次数,而不是让非专业人士去指导专业人士修改设计手段。分清这两者的区别,我们就可以在设计引导中更加主动。用设计分析的方法来讲述设计,举个例子——

会议管理——会议预约移动端优化,因为这是我们原有产品EKP里面的模块,PC端和移动端都有,因此用户可能是群体也可能是个人。所以针对独立用户和群体用户都做一个用户画像,得出他们的一些需求结论,然后目前幸福需求是没有的,纯属个人建议,日后如果有此功能,想必用户的满意程度也会大大提升。

概括一下已完成的整体主要页面,分析设计目标: 

头部属于流量量较高的区域,采用卡片式设计,将会议内容置于此处,作为页面信息关键层,采用左对齐方式排版,突出会议标题和时间提醒用户。

通过不同的颜色标签,区分参会人员状态—— 

待进行未有操作反馈,选用橙色,属于可以持续进行并有明显提醒作用 

已做反馈属于成功操作,选用已有用户认知心理的绿色 

已知信息拒绝参与,是不太重要的,属于不再进行的阶段,选用灰色

  

接下来是设计作品的产出过程,一般情况下不可见的过程,为什么要去讲,  因为一个东西从无到有是很不容易的一件事,如果能讲述过程,就可以引燃情绪共鸣,让别人记住,让自己的设计作品也能有始有终—— 

设计过程一般分为四个阶段:初期阶段、中期阶段、最终定稿;具体的关键词和描述可以通过以下方式提炼出来,这里就不做详细说明了。

 

拿运营宣传来举个例子,我们公司中秋节月饼礼盒包装主视觉设计——整个过程应该是有一个系统化的说明的,省略为写字的地方是我们可以插入的具体图片和过程,步骤差不多就是上述这些,可以有最初阶段的头脑风暴-提取关键词-清晰定位到中期阶段的团队合作—风格拟定-精选方案-细节刻画以及和物料方沟通对接的打样确定工艺等等过程…再到最后定稿的体验还原-问题优化…主画面的诞生是不容易的,强化这种过程参与,让不被看见的事也能展现。如果实在不好记录,你可以从一开始就截图你绘制的过程——

上图是用PS截图,再用时间轴将每一帧动态循坏播放,导出GIF然后截一张不变的底图合成就可以了。

最后是数据验证阶段,这个是设计落地的直观证实,包含主观认可和客观数据,具体内容就是通过用户或者专业的人士反馈给你设计落地的好坏,来判定你做的是否优秀成功。通常这一块的数据决定你验证你前面所有的过程,只要按照该流程认真做了,最后效果通常不会太差,如果出现很大的偏差也往往是意料之外的,因该寻求团队一起解决,不是某一个人的问题。

根据以上最后我们总结,好的设计就是满足以下4个方面:好看,好用,好记,能实现。设计师要考虑的维度不仅仅在视觉层面,什么是有产品思维的设计师,就是在执行时候要考虑上下游不同职能的工作内容,如果你的设计不能实现,再好看也是白费功夫的~从产品交互视觉多层面谈设计,会让你的设计包装显得不那么单调,系统化的方法总结到此,不足之处多多包含~谢谢你的阅读!

蓝蓝设计建立了UI设计分享群,每天会分享国内外的一些优秀设计,如果有兴趣的话,可以进入一起成长学习,请扫码蓝小助,报下信息,蓝小助会请您入群。欢迎您加入噢~~希望得到建议咨询、商务合作,也请与我们联系。

截屏2021-05-13 上午11.41.03.png



文章来源:站酷   作者:YiVi_eleven

分享此文一切功德,皆悉回向给文章原作者及众读者.
免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。

蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服务


日历

链接

个人资料

蓝蓝设计的小编 http://www.lanlanwork.com

存档