一、问卷字段类型有:1单行文本,2多行文本,3单选,4多选,5日期,11金额,8下拉选择,12上传,13时间,14数字。可暂存、发送。
根据单选答案,展现不同分支(web端发送问卷时可以设置编排分支以及顺序,小程序根据接口返回的数据展示)
二、效果图如下
三、重点代码
1.根据单选答案自动获取下一题。
2.递归方式上传附件
四、详细代码
1.wxml文件
<wxs module="v1">
var include = function (array, value) {
if (array) {
if (array == value) {
return true
}
}
}
var include2 = function (array, value) {
if (array) {
var has = false;
for (var i = 0; i < array.length; i++) {
if (array[i] == value) {
has = true;
return has
}
}
return has;
}
}
module.exports.include = include;
module.exports.include2 = include2;
</wxs>
<view class="questionnaire">
<view class="back_image">
<view class="fixed_exclude">
<navBar title="{
{ques_title}}" scrollTop="{
{scrollTop}}"></navBar>
<view class="all" id="all" style="margin-top: 3rem;">
<view wx:if="{
{questionnaireInfo.remark}}" class="ques_title_all">
<view style="min-width:120rpx">备注:</view>
<view style="flex:1;word-break:break-all;">{
{questionnaireInfo.remark}}</view>
</view>
<view class="info_content">
<!-- fieldType:1单行文本,2多行文本,3单选,4多选,5日期,11金额,
8下拉选择,12上传,13时间,14数 -->
<view wx:for="{
{customerFieldSetList}}" wx:for-item="item" wx:for-index="index" wx:key="index" data-index="{
{index}}" class="id_info {
{(index == dateId)? 'current':''}}">
<view id="bottomView{
{index}}" class="bottomView{
{index}}">
<view class="info_title" data-type="{
{item.fieldType}}">
<view>{
{index+1}}.{
{item.fieldName}}<text wx:if="{
{item.mustFlag}}" style="color: red;">*</text></view>
<view wx:if="{
{item.fieldType=='12' && item.fieldValue.length>0}}">{
{ item.fieldValue.length}}份</view>
<view class="copy_button" catchtap="copyInfo" data-index="{
{index}}" data-item="{
{item}}" wx:if="{
{(item.fieldKey=='name4' || item.fieldKey=='phoneNo4' || item.fieldKey=='idNo4')&& item.fieldValue}}">复制</view>
</view>
<!-- show判断placeholder穿透问题 -->
<view style="padding-left: 28rpx;" wx:if="{
{!show}}">
<input disabled="{
{questionDesc=='3'||questionDesc=='4'}}" wx:if="{
{item.fieldType == '1'||item.fieldType == '8'}}" bindinput="bindKeyInput" data-item="{
{item}}" data-index="{
{index}}" data-fieldkey="{
{item.fieldKey}}" data-fieldtype="{
{item.fieldType}}" placeholder="请输入{
{item.fieldName}}" placeholder-style="font-size: 14px;color: #999999;" value="{
{item.fieldValue}}" />
<input disabled="{
{questionDesc=='3'||questionDesc=='4'}}" wx:if="{
{item.fieldType == '11'}}" type="number" data-index="{
{index}}" bindinput="inputDigit" data-item="{
{item}}" placeholder="请输入{
{item.fieldName}}" placeholder-style="font-size: 14px;color: #999999;" value="{
{item.fieldValue}}" />
<input disabled="{
{questionDesc=='3'||questionDesc=='4'}}" wx:if="{
{item.fieldType == '14'}}" type="number" data-index="{
{index}}" bindinput="inputDigit" data-item="{
{item}}" placeholder="请输入{
{item.fieldName}}" placeholder-style="font-size: 14px;color: #999999;" value="{
{item.fieldValue}}" />
</view>
<view style="padding-left: 28rpx;font-size: 14px;color: #999999;">
<view wx:if="{
{show&&(item.fieldType == '1'||item.fieldType == '8'||item.fieldType == '11'||item.fieldType == '14')}}">
请输入{
{item.fieldName}}</view>
</view>
<view style="padding-left: 28rpx;font-size: 14px;color: #999999;">
<!-- show判断placeholder穿透问题 -->
<textarea disabled="{
{questionDesc=='3'||questionDesc=='4'}}" wx:if="{
{item.fieldType == '2'&&!show}}" style="padding-top:20rpx" data-index="{
{index}}" bindinput="bindKeyInput" data-item="{
{item}}" placeholder="请输入{
{item.fieldName}}" placeholder-style="font-size: 14px;color: #999999;" value="{
{item.fieldValue}}" />
<view style="min-height: 360rpx;" wx:if="{
{show&&item.fieldType == '2'}}">
请输入{
{item.fieldName}}</view>
</view>
<radio-group wx:if="{
{item.fieldType == '3'}}" bindchange="radioChange" data-indexs="{
{indexs}}" data-key="{
{item.fieldValue}}" data-index="{
{index}}" data-questiondesc="{
{questionDesc}}" data-optionlist="{
{item.optionList}}">
<label class="checkbox_item" wx:for-item="items" wx:for="{
{item.optionList}}" wx:key="indexs">
<radio disabled="{
{questionDesc=='3'||questionDesc=='4'}}" value="{
{items.optionKey}}" checked="{
{v1.include(item.fieldValue,items.optionKey)}}" />
<view>{
{items.optionValue}}</view>
<view catchtap="son" hover-stop-propagation="true" style="flex: 1;">
<input wx:if="{
{items.isNote && (item.fieldValue==items.optionKey) && !show}}" style="margin-left: 10rpx;" disabled="{
{(questionDesc=='3'||questionDesc=='4')||(item.fieldValue!=items.optionKey)}}" bindinput="bindNote" data-item="{
{item}}" data-optionkey="{
{items.optionKey}}" data-index="{
{index}}" placeholder="请输入" placeholder-style="font-size: 14px;color: #999999;" value="{
{item.note}}" />
</view>
</label>
</radio-group>
<checkbox-group wx:if="{
{item.fieldType == '4'}}" bindchange="checkboxChange" data-item="{
{item}}" data-key="{
{item.fieldValue}}" data-index="{
{index}}">
<label class="checkbox_item" wx:for-item="items" wx:for="{
{item.optionList}}" wx:key="indexs">
<checkbox disabled="{
{questionDesc=='3'||questionDesc=='4'}}" value="{
{items.optionKey}}" checked="{
{v1.include2(item.fieldValue,items.optionKey)}}" />
<view>{
{items.optionValue}}</view>
</label>
</checkbox-group>
<!-- 日期弹框5 -->
<view style="padding-left: 28rpx;" wx:if="{
{item.fieldType == '5'}}">
<picker disabled="{
{questionDesc=='3'||questionDesc=='4'}}" mode="date" data-index="{
{index}}" value="{
{item.fieldValue}}" bindchange="changeDateTime1">
<!-- show判断placeholder穿透问题 -->
<input wx:if="{
{!item.fieldValue && !show}}" disabled style="font-size: 14px;color: #999999;" placeholder="请选择{
{item.fieldName}}" />
<view wx:if="{
{!item.fieldValue && show}}" style="font-size: 14px;color: #999999;">
请选择{
{item.fieldName}}</view>
<view wx:if="{
{item.fieldValue}}">
{
{item.fieldValue}}
</view>
</picker>
</view>
<!-- 时间弹框13 -->
<view catchtouchmove='ture' style="padding-left: 28rpx;z-index: 99999" wx:if="{
{item.fieldType == '13'}}">
<!-- <picker mode="time" data-index="{<