AIGC系统中聊天小助手卡片小组件嵌套设计实践

1.项目描述

领航者卡片样式较多,有些卡片比较近似;可以用嵌套方案,实现一个卡片,多个子单元 可拔插组件式卡片。

2.逻辑设计

2.1卡片示例-聊天框提示









3 通用提示卡片 设计

通用卡片中加载

1// 卡片组件unit加载 2... 3if(!options?.dataType){ 4 if(options?.contentTop){ 5 formatMessage = "<p class=content-top>" + options.contentTop + "</p>"; 6 } 7 if(options?.content){ 8 // formatMessage+='<div class=content-con>' 9 let this_formatMessage = options.content.replace(linkReg, function(match) { 10 return `<a href='${match}' target='_blank' style='color:#2c68ff; display: inline;'>${match}</a>` 11 }); 12 this_formatMessage = this_formatMessage.replace(/\n/g, "</p><p>").replace(/<p></p>/g, ""); 13 formatMessage += "<p>" + this_formatMessage + "</p>"; 14 // formatMessage+='</div>' 15 } 16 }else if(options.dataType == 'operator'){ 17 let operatorHtml = await require(`./operator_unit.js`).default(options) 18 formatMessage += operatorHtml; 19 }else if(options.dataType == 'step'){ 20 let html = await require(`./step_dependence_unit.js`).default(options, $card, config) 21 formatMessage += html; 22 } 23...

通用卡片数据结构

1{ 2 "title": '您有前置步骤未完成', 3 "describe": "", 4 "subType": "popup_platform_card", 5 "data": { 6 contentTop:"开通权限请联系管理员", 7 dataType:''#无值时,默认为通用 8 content:"当前步骤可操作人:<b>mashuai57</b>,mashuai57,mashuai57", # 支持HTML渲染 9 tips:'当前步骤:新建权益活动' 10 } 11}

3.1 流程小组件设计





3.1.1 流程小组件主逻辑

1import './step_dependence_unit.scss'; 2 3/** 4 * @param {data} data 数据 5 */ 6export default async function(data, $card, config){ 7 /** 8 * 返回文件 9 * @param {*} data 10 */ 11 let contHtml = ''; 12 contHtml += "<div class='step_dependence_unit'><p class=content-top>" + data.contentTop + "</p>" 13 data.options.forEach((element,i) => { 14 contHtml += '<div class=content-con>'; 15 contHtml += `<div class="rmc-btn-container rmc-fill-btn" 16 data-content="${element.content}"> 17 <div> 18 <span class="rmc-btn-name">${element.value}</span> 19 <span class="rmc-btn-tips" style="display: inline-block">${element.subValue}</span> 20 </div> 21 <span class="rmc-btn-text">${element.buttonName}</span> 22 </div>`; 23 contHtml += "</div></div>"; 24 }); 25 ...

最终展示





3.1.2 流程小组件数据结构

1{ 2 "title": "'您有前置步骤未完成'", 3 "describe": "", 4 "subType": "popup_platform_card", 5 "data": { 6 "contentTop":"请先完成以下步骤,方可操作此步骤", 7 "dataType":"step", 8 "options": [{ 9 "type": "scenRecom", 10 "status": "已完成", //未配置 中断中 进行中 已完成 11 "buttonName":"配置", 12 "content":"跳转申请费用", 13 "img":"https://kjimg10.360buyimg.com/jr_image/jfs/t1/181764/14/41810/4864/65605d79F70741596/2530d078f6f85127.png", 14 "value":"申请费用", 15 "subValue":"费用系统", 16 "operator":["dazhige","leizong","dashuaige"] 17 },{ 18 "type": "scenRecom", 19 "status": "已完成", //未配置 中断中 进行中 已完成 20 "buttonName":"配置", 21 "content":"跳转申请费用", 22 "img":"https://kjimg10.360buyimg.com/jr_image/jfs/t1/181764/14/41810/4864/65605d79F70741596/2530d078f6f85127.png", 23 "value":"申请费用", 24 "subValue":"费用系统", 25 "operator":["dazhige","leizong","dashuaige"] 26 } 27 ], 28 "tips":"'当前步骤:新建权益活动'" 29 } 30}



3.2 操作人小组件设计





3.2.1 操作人小组件逻辑

1import './operator_unit.scss'; 2 3/** 4 * @param {data} data 数据 5 */ 6export default async function(data){ 7 /** 8 * 返回文件 9 * @param {*} data 10 */ 11 let adminsHtml = '',operatorHtml = '',contHtml = ''; 12 data.admins.forEach(element => { 13 adminsHtml += element.userName; 14 }); 15 contHtml += "<p class=content-top>" + data.contentTop + adminsHtml + "</p>" 16 contHtml += '<div class=content-con>'; 17 contHtml += "<p>" + data.contentCon + "</p>"; 18 data.options.forEach((element,i) => { 19 // console.log(i,element) 20 if(i==0){ 21 operatorHtml += element.userName; 22 }else{ 23 operatorHtml += '、' + element.userName; 24 } 25 }); 26...

3.2.2 操作人小组件数据结构

1{ 2 "title": "温馨提示", 3 "describe": "", 4 "subType": "popup_platform_card", 5 "data": 6 { 7 "contentTop": "开通权限请联系管理员:", 8 "admins": 9 [ 10 { 11 "headImg": "", 12 "userName": "mashuai57", 13 "realName": "马帅", 14 "userCode": "" 15 } 16 ], 17 "dataType": "operator", 18 "contentCon": "当前步骤可操作人如下:", 19 "options": 20 [ 21 { 22 "headImg": "", 23 "userName": "mashuai57", 24 "realName": "马帅", 25 "userCode": "" 26 }, 27 { 28 "headImg": "", 29 "userName": "mashuai5", 30 "realName": "马帅", 31 "userCode": "" 32 }, 33 { 34 "headImg": "", 35 "userName": "mashuai7", 36 "realName": "马帅", 37 "userCode": "" 38 } 39 ], 40 "tips": "当前步骤:新建权益活动" 41 } 42}

4 最终展示





5 总结

AIGC系统中的聊天小助手卡片需要支持的方式往往较多,每种类型都开发一种卡片就会造成卡片臃肿;且有些卡片是有挺大的相似性的。小组件嵌套设计的方式就可以把一个卡片拆分成多种小组件的形式。这样不同的组件组合即可生产不同的卡片。在小助手这种交互范围小,种类繁多的交互设计中就比较实用了。

欢迎大家多多留言交流。

点赞
收藏

评论区

加载中...

相关推荐

堆叠大陆 Stacklands for Mac(卡牌游戏)v1.3.4中文原生版

堆叠大陆(Stacklands)forMac是一款策略卡牌游戏,由ThunderboxEntertainment开发。在这个游戏中,玩家需要构建自己的卡组并与其他玩家进行对战。堆叠大陆的游戏玩法有两个主要元素:卡片和地图。每张卡片代表一个单位,如士兵、法师

App唤起微信小程序和回调

在同一开放平台账号下的移动应用及小程序无需关联即可完成跳转,非同一开放平台账号下的小程序需与移动应用(APP)成功关联后才支持跳转。可在“管理中心移动应用应用详情关联小程序信息”,为通过审核的移动应用发起关联小程序操作。唤起App打开下程序他有两种方式:1,通过App分享小程序卡片到微信,然后在微信上点击小程序卡片打开小程序,

React Native (一) react

ReactNative(一)reactnativevideo实现音乐播放器和进度条的功能功能:1.卡片滑动切歌2.显示进度条效果图:!(https://oscimg.oschina.net/oscnet/3c

HDOJ 1716 排列2(next_permutation函数)

ProblemDescriptionRay又对数字的列产生了兴趣:现有四张卡片,用这四张卡片能排列出很多不同的4位数,要求按从小到大的顺序输出这些4位数。Input每组数据占一行,代表四张卡片上的数字(0<数字<9),如果四张卡片都是0,则输入结束。Output对每组卡片按从小到大的顺序输出所有能由这四张卡片组成的4位数

Java日期时间API系列26

Java8中为年月新增了类YearMonth,可以用来表示卡片过期时间等问题。1.YearMonth默认格式为:2007121.1部分源码\\@implSpec\Thisclassisimmutableandthreadsafe.\\@since1.8

Python基础并发编程——操作系统

一、操作系统简介1、手工操作——穿孔卡片 1946年第一台计算机诞生20世纪50年代中期,计算机工作还在采用手工操作方式。此时还没有操作系统的概念。程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把程序和数据输入计算机内存,接着通过控制台开关启动程序针对数据运行;计算