W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
解釋: 本模板適用于成績查詢、證書查詢等查詢類服務(wù)項開發(fā)工作,模板內(nèi)包含的組件豐富,覆蓋大多數(shù)查詢類服務(wù)項場景,開發(fā)者僅需通過調(diào)整組件屬性以及排序即可快速完成前端開發(fā)工作。
npm i @smt-ui-template/page-query-form
.
├── project.swan.json
├── app.json
├── app.js
├── pages
└── @smt-ui-template-page-query-form // 模板文件
{
"pages": [
...
"pages/@smt-ui-template-page-query-form/pages/index/index",
"pages/@smt-ui-template-page-query-form/pages/result/result",
...
]
}
模板包含兩個頁面:查詢參數(shù)填寫頁、查詢結(jié)果頁
頁面路徑:pages/index/index
頁面包含信息輸入操作常用組件,例如輸入框、日期選擇器、位置選擇器等,同時結(jié)合政務(wù)查詢類服務(wù)特性,模板內(nèi)包含了彈窗組件,當(dāng)用戶進入服務(wù)頁面時,可通過彈窗對用戶進行強提醒,加強信息的觸達效果,保障用戶辦理查詢類服務(wù)時的使用體驗。
<!-- index.swan -->
<view class="{{checkFullScreen ? 'wrap container-bottom' : 'wrap'}}">
<gov-notice-bar
s-if="{{showNoticeBar}}"
text="{{noticeContent}}">
</gov-notice-bar>
<gov-input
data-id="iptOne"
ipt-item-type="short"
type="text"
ipt-title="輸入框"
placeholder-content="請輸入內(nèi)容"
ipt-value="{{model.iptOne.iptValue}}"
bindkeyinput="bindInput"
bindiptblur="bindBlur"
bindiptclean="cleanRoad"
ipt-error-info="{{model.iptOne.iptErrorInfo}}">
</gov-input>
<gov-picker
placeholder="請選擇選項"
label-width="4em"
range-key="type"
errColor="#C40311"
value="{{model.pickerOne.iptValue}}"
bindchange="pickerOne"
label="選擇框"
range="{{optionsOne}}">
</gov-picker>
<gov-input
data-id="password"
ipt-item-type="short"
type="text"
ipt-title="密碼框"
placeholder-content="請輸入密碼"
ipt-value="{{model.password.iptValue}}"
password="true"
bindkeyinput="bindInput"
bindiptblur="bindBlur"
bindiptclean="cleanRoad"
ipt-error-info="{{model.password.iptErrorInfo}}">
</gov-input>
<gov-input
data-id="idCard"
ipt-item-type="short"
type="idcard"
ipt-title="身份證號"
placeholder-content="請輸入身份證號"
ipt-value="{{model.idCard.iptValue}}"
maxlength="18"
bindkeyinput="bindInput"
bindiptblur="bindBlur"
bindiptclean="cleanRoad"
ipt-error-info="{{model.idCard.iptErrorInfo}}">
</gov-input>
<gov-input
data-id="phone"
ipt-item-type="short"
type="number"
maxlength="11"
ipt-title="手機號"
placeholder-content="請輸入手機號"
ipt-value="{{model.phone.iptValue}}"
bindkeyinput="bindInput"
bindiptblur="bindBlur"
bindiptclean="cleanRoad"
ipt-error-info="{{model.phone.iptErrorInfo}}">
</gov-input>
<gov-sms-input
data-id="smsInput"
type="number"
label-width="4em"
max-length="{{6}}"
bindkeyinput="bindInput"
bindiptblur="bindBlur"
bindsmssend="smssend"
placeholder-content="請輸入短信驗證碼"
ipt-value="{{model.smsInput.iptValue}}"
ipt-error-color="#C40311"
ipt-error-flag="{{model.smsInput.iptErrorInfo.errFlag}}">
</gov-sms-input>
<!-- 驗證碼圖片(verify-img-url屬性值)為示例,線上使用應(yīng)替換為開發(fā)者自己的驗證碼圖片 -->
<gov-captcha
data-id="govCaptcha"
type="number"
ipt-area-width="4em"
max-length="{{4}}"
verify-img-url="{{model.govCaptcha.codeImg}}"
bindkeyinput="bindInput"
bindiptblur="bindBlur"
bindrefreshimg="reloadImg"
ipt-value="{{model.govCaptcha.iptValue}}"
ipt-error-info="{{model.govCaptcha.iptErrorInfo.errFlag}}">
</gov-captcha>
<gov-picker
data-id="pickerDate"
placeholder="請選擇日期"
label-width="4em"
mode="date"
start="2020-01-01"
end="2025-12-31"
value="{{model.pickerDate.iptValue}}"
bindchange="pickerDate"
label="日期">
</gov-picker>
<gov-picker
placeholder="請選擇所在地區(qū)"
mode="region"
label-width="4em"
value="{{model.pickerRegion.iptValue}}"
bindchange="pickerRegion"
label="所在地區(qū)">
</gov-picker>
<view class="btn-important">
<gov-button
button-size="large"
button-text="查詢"
button-disabled="{{buttonDisabled}}"
data-isValidata="true"
button-color="#2772FB"
bindtap="buttonImportant">
</gov-button>
</view>
<gov-button
button-size="large"
button-text="輔助按鈕"
button-color="plain"
bindtap="buttonTap">
</gov-button>
<view class="prompt">
<gov-prompt>
<view slot="title">溫馨提示:</view>
<view slot="content">
此板塊為提示區(qū),可用于提醒用戶業(yè)務(wù)填寫中的注意事項及要求
<text class="prompt-text" bindtap="toView">點擊查看</text>
</view>
</gov-prompt>
</view>
</view>
{
"navigationBarTitleText": "標(biāo)題文字",
"navigationBarBackgroundColor": "#ffffff",
"navigationBarTextStyle": "dark",
"usingComponents": {
"gov-picker": "@smt-ui/component-gov/src/picker",
"gov-notice-bar": "@smt-ui/component-gov/src/notice-bar",
"gov-sms-input": "@smt-ui/component-gov/src/sms-input",
"gov-prompt": "@smt-ui/component-gov/src/prompt",
"gov-captcha": "@smt-ui/component-gov/src/captcha",
"gov-button": "@smt-ui/component-gov/src/button",
"gov-input": "@smt-ui/component-gov/src/input"
}
}
onLoad() {
// 初始化圖形驗證碼
this.reloadImg();
// 辦理前提示
swan.showModal({
title: '提示',
content: '此彈窗可在業(yè)務(wù)辦理前對用戶進行預(yù)先提醒',
showCancel: false,
confirmText: '我知道了'
});
}
/**
* 輸入框的 input 事件
*
* @param {Event} e 事件對象
*/
bindInput(e) {
// 將 input 輸入的值賦給 model 中對應(yīng)屬性的 iptValue 字段, 用于后續(xù)校驗和提交表單使用
this.setData({
['model.' + e.currentTarget.dataset.id + '.iptValue']: e.detail.iptvalue
});
// 每次輸入完成時判斷查詢按鈕是否高亮顯示
this.buttonImportant({});
}
/**
* 輸入框的 blur 事件,失焦時通過 validata 方法對當(dāng)前輸入框的值進行校驗
*
* @param {Event} e 事件對象
*/
bindBlur(e) {
let iptvalue = e.detail.iptvalue;
let iptid = e.currentTarget.dataset.id;
let rulse = this.data.model[iptid].rulse;
this.validata(rulse, iptvalue, iptid);
}
/**
* 點擊輸入框右側(cè)清除按鈕事件,短信驗證碼輸入框、圖形驗證碼輸入框沒有該事件
*
* @param {Event} e 事件對象
*/
cleanRoad(e) {
// 清空當(dāng)前表單內(nèi)數(shù)據(jù)
this.setData({['model.' + e.currentTarget.dataset.id + '.iptValue']: ''});
}
/**
* 普通選擇器的 change 事件
*
* @param {Object} detail 事件對象信息
*/
pickerOne({detail}) {
// 將 picker 選中值賦給 model 中對應(yīng)的屬性
this.setData('model.pickerOne.iptValue', detail.detail.value);
// 選擇完成時判斷查詢按鈕是否高亮顯示
this.buttonImportant({});
}
/**
* 時間選擇器的 change 事件
*
* @param {Object} detail 事件對象信息
*/
pickerDate({detail}) {
// 將 picker 選中值賦給 model 中對應(yīng)的屬性
this.setData('model.pickerDate.iptValue', detail.detail.value);
// 選擇完成時判斷查詢按鈕是否高亮顯示
this.buttonImportant({});
}
/**
* 地區(qū)選擇器的 change 事件
*
* @param {Object} detail 事件對象信息
*/
pickerRegion({detail}) {
// 將 picker 選中值賦給 model 中對應(yīng)的屬性
this.setData('model.pickerRegion.iptValue', detail.detail.value);
// 選擇完成時判斷查詢按鈕是否高亮顯示
this.buttonImportant({});
}
/**
* 圖形驗證碼的點擊事件,可以增加刷新圖片驗證碼或者其他需要的操作
*/
reloadImg() {
swan.request({
// 僅為示例,并非真實的接口地址
url: 'http://www.baidu.com',
success: res => {
this.setData({
// codeImg 字段根據(jù)業(yè)務(wù)自行調(diào)整
'model.govCaptcha.codeImg': res.data.codeImg
})
},
fail: err => {
// 接口異常的處理代碼
}
})
}
/**
* 手機號驗證碼組件點擊獲取驗證碼的事件
*/
smssend() {
// 該方法模擬收到短信驗證碼的toast效果,實際場景請使用開發(fā)者自己的短信驗證碼服務(wù)
swan.showToast({
title: '驗證碼:123456',
icon: 'none'
});
}
/**
* 頁面下方“溫馨提示”的 “點擊查看” 事件處理
*/
toView() {
// 此處僅為示例,您可以自定義該事件的邏輯,比如跳轉(zhuǎn)到某個頁面等
swan.navigateTo({url: '/pages/index/index'});
}
/**
* 查詢按鈕點擊事件
*
* @param {Event} e 事件對象
*/
buttonImportant(e) {
// 判斷表單是否全部填寫了
for (let i in this.data.model) {
if (!String(this.data.model[i].iptValue).trim()) {
return;
}
}
// 如果表單的必填項都已填寫則查詢按鈕高亮
this.setData({buttonDisabled: false});
// 只有手動點擊查詢按鈕的時候才會執(zhí)行校驗,通過按鈕組件的 data-isValidata 屬性控制是否需要走校驗邏輯
if (e.currentTarget && e.currentTarget.dataset.isValidata) {
for (let i in this.data.model) {
let itemData = this.data.model[i];
if (itemData.iptErrorInfo) {
if (this.validata(itemData.rulse, itemData.iptValue, i, true)) {
return;
}
}
}
// 此處表單已校驗通過,您可以自定義一些自己的邏輯,比如跳轉(zhuǎn)到查詢結(jié)果頁模板
swan.navigateTo({
url: '/@smt-ui-template-gov-query-form/pages/result/result'
});
}
}
<view class="{{checkFullScreen ? 'container container-bottom' : 'container'}}">
<smt-page-status
s-if="{{statePageType}}"
class="page-status"
icon="{{statePageConfig[statePageType].icon}}"
title="{{statePageConfig[statePageType].title}}"
desc="{{statePageConfig[statePageType].desc}}"
showBtn="{{statePageConfig[statePageType].showBtn}}"
smtreloading="{{reLoad}}"
loading="{{statePageType === 'loading'}}"
></smt-page-status>
<view s-else>
<gov-page-title title="{{dataList.data.title}}" size="large" hasBorder="{{true}}"></gov-page-title>
<block s-for="item, index in dataList.data.list">
<gov-list-item
label-width="6em"
label="{{item.name}}"
gov-label="list-label"
border
>
<view slot="content" class="list-content">
<view s-if="{{item.name === '聯(lián)系電話'}}" class="phone">
<text
s-for="ele in item.value"
bindtap="callPhone"
data-phoneNum="{{ele}}"
>{{ele}} </text>
</view>
<gov-text-collapse
s-else
text="{{item.value}}"
line="{{item.line}}"
gov-text-collapse-content="list-text"
></gov-text-collapse>
</view>
</gov-list-item>
</block>
<view class="prompt">
<gov-prompt>
<view slot="title">溫馨提示:</view>
<view slot="content">
這里是溫馨提示這里是溫馨提示這里是溫馨提示這里是溫馨提示這里是溫馨提示這里是溫馨提示
<text class="prompt-text" bindtap="toView">點擊查看</text>
</view>
</gov-prompt>
</view>
</view>
</view>
{
"navigationBarTitleText": "查詢結(jié)果",
"navigationBarBackgroundColor": "#ffffff",
"navigationBarTextStyle": "dark",
"usingComponents": {
"gov-page-title":"@smt-ui/component-gov/src/page-title",
"gov-list-item": "@smt-ui/component-gov/src/list-item",
"gov-text-collapse": "@smt-ui/component-gov/src/text-collapse",
"smt-page-status": "@smt-ui/component/src/page-status",
"gov-prompt": "@smt-ui/component-gov/src/prompt"
}
}
Page({
data: {
// warning 服務(wù)開小差、noContent 未查詢到信息、noNetwork 無網(wǎng)絡(luò)、不顯示錯誤頁則為空字符串
statePageType: 'loading'
},
onLoad() {
// 使用定時器模擬請求,模擬 loading 顯示兩秒鐘
setTimeout(() => {
this.data.statePageType = '';
}, 2000)
},
/**
* 點擊電話調(diào)起撥號
*
* @param {Event} e 事件對象
*/
callPhone(e) {
swan.makePhoneCall({
phoneNumber: e.currentTarget.dataset.phoneNum
});
},
/**
* 頁面下方“溫馨提示”的 “點擊查看” 事件處理
*/
toView() {
swan.showToast({
title: '點擊查看',
icon: 'none'
});
}
});
名稱 | 版本號 |
---|---|
@smt-ui/component-gov | latest |
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: