前端组件开发文档

微吼组件开发及使用规范


问卷

<p>[TOC]</p> <h4>使用</h4> <p>问卷提供了三个组件, 问卷(vhQuestionnaire): 默认样式为弹窗,功能集成了 问卷列表、已推送问卷列表、绑定、复制、预览、创建、编辑功能。范围:pc、wap。 问卷编辑组件(vhQuestionnaireEdit):提供创建和编辑功能。范围:pc。 问卷详情组件(vhQuestionnaireDetail):主要是根据一个问卷 id 展示信息。范围:pc。</p> <p>打开问卷时判断用户是否填写过该问卷,若填写过将隐藏提交按钮 question_type: user--获取当前用户下的问卷 room--获取当前房间下的问卷</p> <h3>问卷(vhQuestionnaire)</h3> <p>业务层需要自己监听消息,执行打开问卷的操作</p> <pre><code class="language-html"> &lt;vhQuestionnaire :appId="roomInfo.app_id" :accountId="roomInfo.third_party_user_id" :hostId="roomInfo.account_id" :token="roomInfo.paas_access_token" :roomId="roomInfo.room_id" :editPermission="roomInfo.role_name==1" // 业务层按需传入 questionnaireNeedLogin="false" // 业务层按需传入 :isBack="false" // 业务层按需传入 questionType="console" ref="question" &gt;&lt;/vhQuestionnaire&gt;</code></pre> <h4>props</h4> <table> <thead> <tr> <th style="text-align: left;">参数</th> <th style="text-align: left;">说明</th> <th style="text-align: left;">类型</th> <th style="text-align: left;">可选值</th> <th style="text-align: left;">默认值</th> <th style="text-align: left;">必填</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">roomId</td> <td style="text-align: left;">房间 id</td> <td style="text-align: left;">String</td> <td style="text-align: left;">-</td> <td style="text-align: left;">-</td> <td style="text-align: left;">是</td> </tr> <tr> <td style="text-align: left;">hostId</td> <td style="text-align: left;">主持人 id</td> <td style="text-align: left;">String</td> <td style="text-align: left;">-</td> <td style="text-align: left;">-</td> <td style="text-align: left;">是</td> </tr> <tr> <td style="text-align: left;">token</td> <td style="text-align: left;">pass_access_toke</td> <td style="text-align: left;">string</td> <td style="text-align: left;">-</td> <td style="text-align: left;">-</td> <td style="text-align: left;">是</td> </tr> <tr> <td style="text-align: left;">accountId</td> <td style="text-align: left;">用户 id</td> <td style="text-align: left;">string</td> <td style="text-align: left;">-</td> <td style="text-align: left;">-</td> <td style="text-align: left;">是</td> </tr> <tr> <td style="text-align: left;">appId</td> <td style="text-align: left;">appId</td> <td style="text-align: left;">String</td> <td style="text-align: left;">-</td> <td style="text-align: left;"></td> <td style="text-align: left;">否</td> </tr> <tr> <td style="text-align: left;">questionType</td> <td style="text-align: left;">问卷列表类型,展示当前用户所有问卷,还是当前房间的</td> <td style="text-align: left;">String</td> <td style="text-align: left;">'room'/'user'</td> <td style="text-align: left;">'room'</td> <td style="text-align: left;">否</td> </tr> <tr> <td style="text-align: left;">editPermission</td> <td style="text-align: left;">是否问卷的编辑权限</td> <td style="text-align: left;">boolean</td> <td style="text-align: left;">-</td> <td style="text-align: left;">false</td> <td style="text-align: left;">否</td> </tr> <tr> <td style="text-align: left;">questionnaireNeedLogin</td> <td style="text-align: left;">功能使用是否需要登录</td> <td style="text-align: left;">boolean</td> <td style="text-align: left;">-</td> <td style="text-align: left;">false</td> <td style="text-align: left;">否</td> </tr> <tr> <td style="text-align: left;">isBack</td> <td style="text-align: left;">弹窗是否需要背景蒙层</td> <td style="text-align: left;">boolean</td> <td style="text-align: left;">-</td> <td style="text-align: left;">false</td> <td style="text-align: left;">否</td> </tr> <tr> <td style="text-align: left;">textareaLimit</td> <td style="text-align: left;">文本域字数限制(简介、文本题回答)</td> <td style="text-align: left;">number</td> <td style="text-align: left;">1-2000</td> <td style="text-align: left;">1000</td> <td style="text-align: left;">否</td> </tr> <tr> <td style="text-align: left;">inputLimit</td> <td style="text-align: left;">输入框字数限制</td> <td style="text-align: left;">number</td> <td style="text-align: left;">1-255</td> <td style="text-align: left;">200</td> <td style="text-align: left;">否</td> </tr> <tr> <td style="text-align: left;">isCanSubmit</td> <td style="text-align: left;">非操作此时是否可以提交问卷</td> <td style="text-align: left;">Boolean</td> <td style="text-align: left;">-</td> <td style="text-align: left;">false</td> <td style="text-align: left;">否</td> </tr> </tbody> </table> <h4>方法</h4> <ul> <li> <p>open(type, id) 参数: type 问卷弹窗类型,可选值有 list、preview、bind、submit、edit,必填 id 第一个参数值为 preview 和 submit 时,id 必填;值为 edit 的时候,id 选填(创建时不用填,编辑时必填);其他情况可使用该参数 说明:打开问卷功能 有问卷操作的问卷列表 和 无操作权限的问卷列表</p> <pre><code class="language-javascript">this.$refs.question.open('list') // 打开问卷列表 this.$refs.question.open('bind') // 打开问卷的待绑定列表 this.$refs.question.open('preview', '1231') // 打开id为1231的问卷的预览,无提交按钮 this.$refs.question.open('submit', '1231') // 打开id为1231的问卷的天蝎,有提交按钮 this.$refs.question.open('edit', '1231') // 打开id为1231的问卷的编辑 this.$refs.question.open('edit') // 打开问卷的创建</code></pre> </li> <li> <p>checkSurvey(id) 说明:检测该用户是否填写过试卷 参数: id 试卷 id 示例:</p> <pre><code class="language-javascript">this.$refs.question.chexkSurvey().then(res =&gt; { if (res) { // 该用户已填写过该问卷 } else { // 该用户没有填写该问卷 } })</code></pre> </li> <li> <p>checkAllSurvey() 说明:检测该用户是否填写 所有已发送的 试卷 示例:</p> <pre><code class="language-javascript">this.$refs.question.checkAllSurvey().then(res =&gt; { let status = res.status if (status == 'zero') { this.$message({ message: '您已填写全部问卷' }) } else if (status == 'more') { // 多个问卷未填写 this.$refs.question.open('list') } else if (status == 'one') { // 只有一个问卷未填写 this.$refs.question.open('submit', res.queId) } })</code></pre> </li> </ul> <h4>关键EventBus</h4> <p>消息都使用组件提供的 EventBus 进行监听 以下均为示例,业务层可根据需求进行调整 如果在收到消息打开问卷的时候,需要判断该用户是否填写该问卷,可使用问卷提供的checkSurvey方法</p> <h4>总览</h4> <table> <thead> <tr> <th style="text-align: left;">参数</th> <th style="text-align: left;">说明</th> <th style="text-align: left;">派发</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">questionnaire_push</td> <td style="text-align: left;">问卷推送</td> <td style="text-align: left;">服务端 |</td> </tr> <tr> <td style="text-align: left;">component_check_questionnaire</td> <td style="text-align: left;">其他组件打开 问卷</td> <td style="text-align: left;">[聊天]/[公共] |</td> </tr> <tr> <td style="text-align: left;">component_questionnaire_no_not_filled</td> <td style="text-align: left;">问卷都已填写</td> <td style="text-align: left;">[问卷]</td> </tr> <tr> <td style="text-align: left;">component_que_submit_click</td> <td style="text-align: left;">当参数 isCanSubmit=false,点击提交按钮是触发</td> <td style="text-align: left;">[问卷]</td> </tr> <tr> <td style="text-align: left;">component_que_status</td> <td style="text-align: left;">问卷的状态</td> <td style="text-align: left;">[问卷]</td> </tr> <tr> <td style="text-align: left;">component_que_create_answer</td> <td style="text-align: left;">用户提交问卷,创建答卷</td> <td style="text-align: left;">[问卷详情]sdk保存情况</td> </tr> <tr> <td style="text-align: left;">component_que_submit</td> <td style="text-align: left;">提交问卷,vss接口调用成功</td> <td style="text-align: left;">[问卷] |</td> </tr> </tbody> </table> <ul> <li> <p>推送问卷 触发时机,有问卷操作权限的人推送问卷</p> <pre><code class="language-javascript">this.$vhallEvent.$on('questionnaire_push', msg =&gt; { this.$refs.question.open('submit', msg.questionnaire_id) })</code></pre> </li> <li> <p>其他组件打开问卷 通过其他组件中的消息按钮,打开问卷</p> <pre><code class="language-javascript">this.$vhallEvent.$on('component_check_questionnaire', msg =&gt; { this.$refs.question.open('submit', msg.questionnaire_id) })</code></pre> <p>若判断用户填写过某一个问卷没有</p> <pre><code class="language-javascript">this.$vhallEvent.$on('component_check_questionnaire', msg =&gt; { this.$refs.question.checkSurvey(msg.questionnaire_id).then(res =&gt; { // res的值为true填写过问卷,false没有填写过问卷 if (res) { this.$message({ type: 'error', message: '您已填写过问卷' }) this.$refs.question.open('preview', msg.questionnaire_id) // 打开预览模式,没有填写按钮 } else { this.$refs.question.open('submit', msg.questionnaire_id) // 打开提交模式,有填写按钮 } }) })</code></pre> </li> <li> <p>问卷提交完成后,不自动打开问卷列表 通过监听消息,打开问卷列表</p> <pre><code class="language-javascript">this.$vhallEvent.$on('component_questionnaire_submit', () =&gt; { this.$refs.question.open('list') })</code></pre> </li> <li> <p>点击显示问卷列表,如果列表中没有未填写的问卷抛出事件</p> <pre><code class="language-javascript">this.$vhallEvent.$on('component_questionnaire_no_not_filled', msg =&gt; { this.$message({ type: 'error', message: '您已填写过问卷' }) })</code></pre> </li> <li>提交问卷,创建答卷</li> </ul> <pre><code class="language-javascript">this.$vhallEvent.$on('component_que_create_answer', data =&gt; { // data.submitStatus='success' 底层创建答卷成功 // data.submitStatus='fail' 底层创建答卷失败 })</code></pre> <ul> <li> <p>问卷状态</p> <pre><code class="language-javascript">this.$vhallEvent.$on('component_que_status', data =&gt; { let status = data.status // status == 'submit' 问卷提交状态 // status == 'list' 问卷再展示列表 // status == 'small' 有被推送的问卷,问卷面板被推送 // status == '' 问卷关闭 })</code></pre> </li> </ul> <h4>插槽</h4> <table> <thead> <tr> <th style="text-align: left;">插槽名</th> <th style="text-align: left;">说明</th> <th style="text-align: left;">参数</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">pageEndContent</td> <td style="text-align: left;">预览或填写问卷时,每页的结尾的位置的插槽</td> <td style="text-align: left;">isLastPage 是否为最后一页, currentPage当前页,totalPage总页数</td> </tr> </tbody> </table> <h3>问卷编辑(vhQuestionnaireEdit)</h3> <h4>使用</h4> <pre><code class="language-html"> &lt;vhQuestionnaireEdit :id="queId" :appId="appId" :account="accountId" :token="token" ref="queCreate" &gt;&lt;/vhQuestionnaireEdit&gt;</code></pre> <h4>props</h4> <table> <thead> <tr> <th style="text-align: left;">参数</th> <th style="text-align: left;">说明</th> <th style="text-align: left;">类型</th> <th style="text-align: left;">可选值</th> <th style="text-align: left;">默认值</th> <th style="text-align: left;">必填</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">id</td> <td style="text-align: left;">问卷 id</td> <td style="text-align: left;">String</td> <td style="text-align: left;">-</td> <td style="text-align: left;">-</td> <td style="text-align: left;">否</td> </tr> <tr> <td style="text-align: left;">formSdk</td> <td style="text-align: left;">表单sdk实例后的对象</td> <td style="text-align: left;">Object</td> <td style="text-align: left;">-</td> <td style="text-align: left;">-</td> <td style="text-align: left;">否</td> </tr> <tr> <td style="text-align: left;">appId</td> <td style="text-align: left;">未传formSdk时,该参数必填</td> <td style="text-align: left;">String</td> <td style="text-align: left;">-</td> <td style="text-align: left;">-</td> <td style="text-align: left;">否</td> </tr> <tr> <td style="text-align: left;">accountId</td> <td style="text-align: left;">用户id,未传formSdk时,该参数必填</td> <td style="text-align: left;">String</td> <td style="text-align: left;">-</td> <td style="text-align: left;">-</td> <td style="text-align: left;">否</td> </tr> <tr> <td style="text-align: left;">toke</td> <td style="text-align: left;">paas的授权token,未传formSdk时,该参数必填</td> <td style="text-align: left;">String</td> <td style="text-align: left;">-</td> <td style="text-align: left;">-</td> <td style="text-align: left;">否</td> </tr> </tbody> </table> <h4>EventBus</h4> <table> <thead> <tr> <th style="text-align: left;">事件名</th> <th style="text-align: left;">说明</th> <th style="text-align: left;">参数</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">component_que_edit</td> <td style="text-align: left;">编辑/创建点击保存时</td> <td style="text-align: left;">-</td> </tr> </tbody> </table> <pre><code class="language-javascript">this.$vhallEvent.$on('component_que_create_answer', data =&gt; { // data.id 问卷id // data.title问卷标题 // data.description问卷简介 // data.status 更新状态 'no-modify'未更新问卷(未编辑),‘update-success’编辑保存修改,‘create-success’问卷创建成功,'edit-fail'编辑/创建失败 })</code></pre> <h3>问卷详情组件(vhQuestionnaireDetail)</h3> <pre><code class="language-html"> &lt;vhQuestionnaireDetail :id="examId" :status="tabStatus" :appId="appId" :account="accountId" :token="token" ref="examDetail" &gt;&lt;/vhQuestionnaireDetail&gt; 或者 &lt;vhQuestionnaireDetail :id="examId" :status="tabStatus" :formSdk="formSdk" ref="examDetail" &gt;&lt;/vhQuestionnaireDetail&gt;</code></pre> <h4>props</h4> <table> <thead> <tr> <th style="text-align: left;">参数</th> <th style="text-align: left;">说明</th> <th style="text-align: left;">类型</th> <th style="text-align: left;">可选值</th> <th style="text-align: left;">默认值</th> <th style="text-align: left;">必填</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">id</td> <td style="text-align: left;">问卷 id</td> <td style="text-align: left;">String</td> <td style="text-align: left;">-</td> <td style="text-align: left;">-</td> <td style="text-align: left;">是</td> </tr> <tr> <td style="text-align: left;">status</td> <td style="text-align: left;">查看问卷详情的状态</td> <td style="text-align: left;">string</td> <td style="text-align: left;">submit 只显示问卷题目,无答案回现,可提交</td> <td style="text-align: left;">-</td> <td style="text-align: left;">是</td> </tr> <tr> <td style="text-align: left;">formSdk</td> <td style="text-align: left;">表单sdk实例后的对象</td> <td style="text-align: left;">Object</td> <td style="text-align: left;">-</td> <td style="text-align: left;">-</td> <td style="text-align: left;">否</td> </tr> <tr> <td style="text-align: left;">appId</td> <td style="text-align: left;">未传formSdk时,该参数必填</td> <td style="text-align: left;">String</td> <td style="text-align: left;">-</td> <td style="text-align: left;">-</td> <td style="text-align: left;">否</td> </tr> <tr> <td style="text-align: left;">accountId</td> <td style="text-align: left;">用户id,未传formSdk时,该参数必填</td> <td style="text-align: left;">String</td> <td style="text-align: left;">-</td> <td style="text-align: left;">-</td> <td style="text-align: left;">否</td> </tr> <tr> <td style="text-align: left;">toke</td> <td style="text-align: left;">paas的授权token,未传formSdk时,该参数必填</td> <td style="text-align: left;">String</td> <td style="text-align: left;">-</td> <td style="text-align: left;">-</td> <td style="text-align: left;">否</td> </tr> </tbody> </table> <h4>EventBus</h4> <p>消息都使用组件提供的 EventBus 进行监听 以下均为示例,业务层可根据需求进行调整 如果在收到消息打开问卷的时候,需要判断该用户是否填写该问卷,可使用问卷提供的checkSurvey方法</p> <h4>总览</h4> <table> <thead> <tr> <th style="text-align: left;">参数</th> <th style="text-align: left;">说明</th> <th style="text-align: left;">派发</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">component_que_submit_click</td> <td style="text-align: left;">当参数 isCanSubmit=false,点击提交按钮是触发</td> <td style="text-align: left;">[问卷]</td> </tr> <tr> <td style="text-align: left;">component_que_create_answer</td> <td style="text-align: left;">用户提交问卷,创建答卷</td> <td style="text-align: left;">[问卷]</td> </tr> </tbody> </table> <ul> <li>提交问卷,创建答卷</li> </ul> <pre><code class="language-javascript">this.$vhallEvent.$on('component_que_create_answer', data =&gt; { // data.status='success' 底层创建答卷成功 // data.status='fail' 底层创建答卷失败 })</code></pre> <h4>插槽</h4> <table> <thead> <tr> <th style="text-align: left;">插槽名</th> <th style="text-align: left;">说明</th> <th style="text-align: left;">参数</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">pageEndContent</td> <td style="text-align: left;">预览或填写问卷时,每页的结尾的位置的插槽</td> <td style="text-align: left;">isLastPage 是否为最后一页, currentPage当前页,totalPage总页数</td> </tr> </tbody> </table>

页面列表

ITEM_HTML