{"dependencies":[{"ETag":"99914B932BD37A50B983C5E7C90AE93B","name":"0.json","size":2,"type":"json","url":"https://gw.alipayobjects.com/os/herbox/32589b97-5a8a-4a48-8750-824c30b97cc1/0.json"}],"sourceCode":{"app.acss":".container {\n width: 100%;\n min-height: 100%;\n}\n.content {\n width: 100%;\n}\n\n.tiny-button {\n font-size: 28rpx;\n padding: 0 0.7em;\n line-height: 60rpx;\n text-align: center;\n border-radius: 4rpx;\n}\n","app.js":"App({\n globalData: {},\n onLaunch() {\n console.log('app onLaunch');\n },\n onShow () {\n console.log('app onShow');\n },\n});\n","app.json":"{\n \"pages\": [\n \"pages/card-home/index\",\n \"pages/card-detail/index\",\n \"pages/repayment-result/index\"\n ],\n \"window\": {\n \"defaultTitle\": \"信用卡还款\",\n \"canPullDown\": \"NO\"\n }\n}\n","package.json":"{\n \"private\": true,\n \"dependencies\": {\n }\n}\n","util.js":"function isObj(any) {\n return Object.prototype.toString.call(any) === \"[object Object]\"\n}\n\nexport function toUrl(obj) {\n if (!obj || !isObj(obj) || Object.keys(obj).length === 0) {\n return '';\n }\n return Object.keys(obj).reduce((p, v, i) => {\n return `${p}${i ? '&' : ''}${v}=${obj[v]}`;\n }, '?');\n}","components/flip-numbers/index.acss":".c-flip-number-container {\n display: flex;\n overflow: hidden;\n height: 100%;\n}\n.digits-col {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n}\n","components/flip-numbers/index.axml":"<view class=\"c-flip-number-container\">\n <block a:for=\"{{digits}}\">\n <view\n a:if=\"{{item !== '.'}}\"\n class=\"digits-col\"\n style=\"transform: translateY( -{{item * 100}}% ); transition: transform {{duration}}s\"\n >\n <view\n class=\"digit-number\"\n a:for=\"{{10}}\"\n a:for-index=\"sIndex\"\n >\n {{sIndex}}\n </view>\n </view>\n <view a:else>{{item}}</view>\n </block>\n</view>\n","components/flip-numbers/index.js":"Component({\n props: {\n content: '',\n duration: 0.3,\n },\n\n data: {\n digits: [],\n },\n\n didMount () {\n this.parseContent();\n },\n\n didUpdate ({ content }) {\n if (content !== this.props.content) {\n this.parseContent();\n }\n },\n\n methods: {\n /**\n * 解析传入的内容\n */\n parseContent () {\n const { content } = this.props;\n if (Number.isNaN(+content)) {\n this.setData({ digits: [] });\n return;\n }\n\n // 将数字分离成单个 digit,用于生成数字阵列\n const digits = ('' + content).split('');\n const initDigits = digits.map(d => d === '.' ? d : '0');\n\n // 将各数字位初始化为 0,再赋值,获得滚动效果\n this.setData({ digits: initDigits });\n setTimeout(() => {\n this.setData({ digits });\n }, 100);\n },\n },\n});\n","components/flip-numbers/index.json":"{\n \"component\": true,\n \"usingComponents\": {\n }\n}\n","components/header-info/index.acss":".card-wrapper {\n width: 100%;\n flex: 1;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n box-sizing: border-box;\n padding: 0 32rpx;\n color: #fff;\n line-height: 1.4;\n min-height: 160rpx;\n background: rgb(82, 142, 212) linear-gradient(to bottom right, rgb(82, 142, 212) 0%, rgb(52, 91, 181) 100%);\n}\n\n.cit-item-left {\n flex: 1;\n display: flex;\n flex-direction: row;\n align-items: center;\n word-break: break-all;\n}\n.cit-title {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-bottom: 3rpx;\n}\n\n.cit-content {\n margin-left: 32rpx;\n}\n.citt-name {\n font-size: 34rpx;\n margin-right: 8rpx;\n}\n.cit-brief {\n display: flex;\n align-items: center;\n font-size: 24rpx;\n color: #FFF;\n}\n.cit-brief .line{\n margin: 0 9rpx;\n}\n.cit-brief .info-icon {\n width: 24rpx;\n height: 24rpx;\n background: url(../../assets/info.png) left top no-repeat;\n background-size: contain;\n margin-right: 8rpx;\n}\n\n.cit-logo{\n flex-shrink: 0;\n}\n.cit-logo,\n.cit-logo-img {\n width: 76rpx;\n height: 76rpx;\n}\n.cit-logo-img {\n width:100%;\n height:100%;\n background-color: #fff;\n background-size: 70% 70% !important;\n background-position: center;\n border-radius: 50%;\n}\n\n.cit-logo-img.RH {\n /* 房贷图标视觉差会比较偏下,向上移动一些 */\n background-position-y: 40%;\n}\n.cit-logo-img.RC {\n /* 房贷图标视觉差会比较偏下,向上移动一些 */\n background-position-y: 45%;\n}\n\n.citt-remark {\n display: inline;\n padding: 2rpx 4rpx;\n font-size: 24rpx;\n background-color: rgba(0,0,0,0.15);\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n}\n\n.citt-extra-btn{\n font-size: 28rpx;\n line-height: 28rpx;\n padding: 15rpx 24rpx;\n}\n","components/header-info/index.axml":"<view class=\"c-header-bank-info\">\n <view class=\"card-wrapper\">\n <view class=\"cit-item cit-item-left\">\n <view class=\"cit-logo\">\n <image class=\"cit-logo-img {{info.cardBizType}}\" src=\"{{info.cardLogo}}\" />\n </view>\n <view class=\"cit-content\">\n <view class=\"cit-title\">\n <text class=\"citt-name\">{{info.cardName}}</text>\n <view class=\"citt-remark\" a:if=\"{{info.cardRemark}}\">{{info.cardRemark}}</view>\n </view>\n <view class=\"cit-brief\">\n <text a:if=\"{{info.cardBizType === 'RH' || info.cardBizType === 'RC' || info.cardBizType === 'RR' || info.cardBizType === 'RN'}}\">\n {{info.holderName}} | {{info.bankName}} 尾号{{info.tail}}\n </text>\n <text a:else>\n {{info.holderName}} | 尾号{{info.tail}}\n </text>\n </view>\n </view>\n </view>\n </view>\n</view>\n","components/header-info/index.js":"Component({\n props: {\n info: {},\n },\n methods: {\n },\n});\n","components/header-info/index.json":"{\n \"component\": true\n}\n","components/pay-input/index.acss":".am-amount {\n box-sizing: border-box;\n width: 100%;\n padding-top: 32rpx;\n background: #fff;\n}\n\n.am-amount-title-container {\n display: flex;\n align-items: center;\n}\n\n.am-amount-title {\n height: 48rpx;\n line-height: 48rpx;\n color: #333;\n font-size: 32rpx;\n flex: 1;\n display: flex;\n align-items: center;\n}\n\n.am-amount-title-tip {\n font-size: 26rpx;\n line-height: 26rpx;\n color: #999;\n margin-left: 16rpx;\n}\n\n.am-amount-title-right {\n font-size: 28rpx;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n color: #999;\n}\n\n.am-amount-input {\n padding: 16rpx 0 28rpx 0;\n display: flex;\n align-items: flex-end;\n}\n.am-amount-symbol {\n width: 36rpx;\n font-size: 60rpx;\n color: #333;\n line-height: 60rpx;\n}\n.pay-input .a-input-placeholder {\n font-size: 48rpx;\n line-height: 48rpx;\n font-weight: normal;\n margin-top: 3px;\n font-family: \"AlipayNumber\";\n}\n\n.pay-input .a-input-content {\n font-family: \"AlipayNumber\";\n}\n\n.am-amount-value {\n padding: 0 0 0 15rpx;\n box-sizing: border-box;\n z-index: 2;\n height: 80rpx;\n background-color: transparent;\n font-size: 70rpx;\n font-weight: 500;\n}\n\n.am-amount-clear {\n visibility: hidden;\n padding: 6px;\n z-index: 100;\n}\n.pay-input-fix {\n margin-top: 4px;\n}\n\n.am-amount-clear icon {\n display: flex;\n height: 100%;\n justify-content: center;\n align-items: center;\n}\n\n.visible {\n visibility: visible;\n}\n.hidden {\n visibility: hidden;\n}\n","components/pay-input/index.axml":"<view class=\"am-amount pay-input {{className}}\">\n <wb size=\"32\">\n <view class=\"am-amount-title-container\">\n <view class=\"am-amount-title\">\n {{title}}\n <text class=\"am-amount-title-tip\">{{titleTip}}</text>\n </view>\n <slot a:if=\"{{hasExtraText}}\" name=\"titleRight\">\n <view slot=\"titleRight\" class=\"am-amount-title-right\" onTap=\"onTapExtra\">{{extraText}}</view>\n </slot>\n </view>\n <view class=\"am-amount-input\">\n <view a:if=\"{{hasMoneySymbol}}\" class=\"am-amount-symbol\">¥</view>\n <input\n type=\"digit\"\n maxlength=\"{{maxLength}}\"\n class=\"am-amount-value\"\n value=\"{{repayAmount}}\"\n focus=\"{{focus}}\"\n onInput=\"onInput\"\n onConfirm=\"onConfirm\"\n onFocus=\"onFocus\"\n onBlur=\"handleBlur\"\n placeholder=\"{{placeholder}}\"\n controlled=\"{{true}}\"\n disabled=\"{{disabled}}\"\n underlineColorAndroid=\"transparent\" T4\n />\n <view a:if=\"{{hasClear}}\" onTap=\"onClearTap\"\n class=\"pay-input-fix am-amount-clear {{repayAmount.length > 0 && focus ? 'visible' : ''}}\">\n <icon type=\"clear\" size=\"22\" />\n </view>\n </view>\n </wb>\n</view>\n","components/pay-input/index.js":"Component({\n data: {\n // repayAmount: '',\n focus: false,\n hasClickedClear: false,\n },\n props: {\n className: '',\n focus: false,\n placeholder: '',\n extraText: '',\n disabled: false,\n hasExtraText: true,\n hasMoneySymbol: true,\n maxLength: 99,\n hasClear: true,\n titleTip: '',\n repayAmount: '',\n onTapExtra: f => f,\n onInput: f => f,\n onBlur: () => {},\n onFocus: () => {},\n },\n didUpdate() {\n },\n methods: {\n onTapExtra() {\n this.props.onTapExtra();\n },\n onInput(e) {\n const { cursor, value: rawValue } = e.detail;\n this.props.onInput(rawValue);\n\n if (cursor !== undefined) return { cursor };\n },\n onConfirm(e) {\n const value = e.detail.value;\n this.props.onConfirm && this.props.onConfirm(value);\n },\n onFocus() {\n this.setData({\n focus: true,\n });\n this.props.onFocus();\n },\n handleBlur(e) {\n\n },\n onClearTap() {\n this.setData({\n focus: true,\n hasClickedClear: true,\n });\n this.props.onInput && this.props.onInput('');\n },\n },\n});\n","components/pay-input/index.json":"{\n \"component\": true,\n \"usingComponents\": {\n \"ws\": \"../../components/whitespace/index\",\n \"wb\": \"../../components/wingblank/index\"\n }\n}","components/steps/index.acss":"/* horizontal steps style */\n.am-hor-steps {\n padding: 20px 50px 10px 50px;\n background-color: #fff;\n overflow: hidden;\n white-space: nowrap;\n}\n.am-hor-step {\n display: inline-block;\n white-space: normal;\n text-align: center;\n vertical-align: top;\n}\n.am-hor-step-line {\n position: relative;\n margin: 6px 0;\n height: 2px;\n background-color: #ddd;\n}\n.am-hor-step-line.is-active {\n background-color: #108ee9;\n}\n.am-hor-step-line.is-last {\n background-color: transparent;\n}\n.am-hor-step-icon {\n position: absolute;\n top: 50%;\n left: 0;\n width: 10px;\n height: 10px;\n transform: translate(-50%, -50%);\n border-radius: 999px;\n background-color: #ddd;\n}\n.am-hor-step-icon.is-active {\n background-color: #108ee9;\n}\n.am-hor-step-text {\n margin-top: 20px;\n padding: 0 5px;\n max-width: 90px;\n transform: translateX(-50%);\n}\n.am-hor-step-title {\n font-size: 12px;\n color: #333;\n}\n.am-hor-step-description {\n margin-top: 6px;\n font-size: 12px;\n color: #999;\n }\n.am-hor-step-extra {\n /*margin-top: 6px;*/\n font-size: 12px;\n color: #999;\n line-height: 14px;\n}\n\n/* vertical steps style */\n.am-vertical-steps {\n /* padding: 40rpx 80rpx 0; */\n padding: 40rpx 60rpx 0 80rpx;\n background-color: #fff;\n}\n.am-vertical-step {\n display: flex;\n}\n.am-vertical-step-left {\n position: relative;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n width: 24px;\n margin-right: 50rpx;\n}\n/* line 包含 top 和 bottom 两块, 整体下移20px, 保证和原点无缝衔接 */\n.am-vertical-step-line {\n position: relative;\n top: 10px;\n width: 2px;\n background-color: #ddd;\n}\n.am-vertical-step-line-top {\n flex: 1;\n}\n/* 60px 是 am-vertical-step-text的margin-bottom的40px加上line的下移20px,保证line-top底部和右侧文字底布对齐*/\n.am-vertical-step-line-bottom {\n height: 40px;\n width: 2px;\n background-color: #ddd;\n}\n.am-vertical-step-line.is-active {\n background-color: #108ee9;\n}\n.am-vertical-step-icon {\n position: absolute;\n top: 0;\n left: 50%;\n width: 24px;\n height: 24px;\n transform: translateX(-50%);\n border-radius: 999px;\n background-color: #ddd;\n}\n.am-vertical-step-icon.money {\n background-image: url(../../assets/money.png);\n background-size: 100% 100%;\n}\n.am-vertical-step-icon.money.is-active {\n background-color: #108ee9;\n}\n\n.am-vertical-step-icon.is-normal {\n top: 5px;\n background-color: #ddd;\n width: 10px;\n height: 10px;\n}\n.am-vertical-step-icon.is-active,\n.am-vertical-step-icon.is-fail {\n width: 24px;\n height: 24px;\n background-color: #fff;\n}\n.am-vertical-step-right {\n flex: 1;\n margin-bottom: 50rpx;\n}\n.am-vertical-step-title {\n margin-bottom: 4px;\n font-size: 18px;\n color: #333;\n}\n.am-vertical-step-title.is-active {\n color: #108ee9;\n font-weight: 800;\n}\n.am-vertical-step-title.is-fail {\n color: #F4333C;\n}\n\n.am-vertical-step-brief,\n.am-vertical-step-description {\n line-height: 1.6;\n font-size: 13px;\n color: #999;\n}\n.am-vertical-step-brief.is-active {\n font-size: 18px;\n font-weight: 600;\n}\n.am-vertical-step-brief .a-text-no-space {\n white-space: nowrap;\n}\n.am-vertical-placeholder {\n height: 20px;\n}\n.am-vertical-placeholder-line {\n position: absolute;\n left: 50%;\n transform: translateX(-50%);\n height: 100%;\n width: 2px;\n background-color: #ddd;\n}\n.am-step-vertical-link-desc{\n margin-left: 10rpx;\n color: #108EE9;\n}\n\n.am-vertical-step-icon.waiting {\n background: url(../../assets/waiting.png) 60% 45% no-repeat;\n background-size: 10rpx 22rpx;\n}\n.am-vertical-step-icon.waiting.is-active {\n background-color: #0BA194;\n}\n\n.am-vertical-step-icon.tick {\n background: url(../../assets/tickt.png) 60% 45% no-repeat;\n background-size: 100% 100%;\n}\n\n.am-vertical-step-icon.tick.is-active {\n background-color: #108EE9;\n background-size: 70% 70%;\n}\n\n","components/steps/index.axml":"<view class=\"am-hor-steps {{className}}\" a:if=\"{{direction == 'horizontal'}}\">\n <view class=\"am-hor-step\" a:for=\"{{items}}\" style=\"{{width: 100 / (items.length - 1) + '%'}}\">\n <view class=\"am-hor-step-line {{index < activeIndex - 1 ? 'is-active' : ''}} {{index >= items.length - 1 ? 'is-last' : ''}}\">\n <view class=\"am-hor-step-icon {{index <= activeIndex - 1 ? 'is-active' : ''}}\"></view>\n </view>\n <view class=\"am-hor-step-text\">\n <view class=\"am-hor-step-title\">\n <text>{{item.title}}</text>\n </view>\n <view class=\"am-hor-step-description\">\n <text>{{item.description}}</text>\n </view>\n </view>\n </view>\n</view>\n<view class=\"am-vertical-steps {{className}}\" a:if=\"{{direction == 'vertical'}}\">\n <view class=\"am-vertical-step\" a:for=\"{{items}}\">\n <view class=\"am-vertical-step-left\">\n <view\n class=\"am-vertical-step-line am-vertical-step-line-top {{index < activeIndex ? 'is-active' : ''}}\"\n a:if=\"{{index < items.length - 1}}\"\n ></view>\n <view\n class=\"am-vertical-step-line am-vertical-step-line-bottom {{index < activeIndex - 1 ? 'is-active' : ''}}\"\n a:if=\"{{index < items.length - 1}}\"\n ></view>\n <view class=\"am-vertical-step-icon {{item.iconType ? item.iconType : ''}} is-fail\" a:if=\"{{index == failIndex - 1}}\">\n <icon a:if=\"{{!item.iconType}}\" type=\"cancel\" size=\"24\"/>\n </view>\n <view class=\"am-vertical-step-icon {{item.iconType ? item.iconType : ''}} is-active\" a:elif=\"{{index <= activeIndex - 1}}\">\n <icon a:if=\"{{!item.iconType}}\" type=\"success\" size=\"24\"/>\n </view>\n <view class=\"am-vertical-step-icon {{item.iconType ? item.iconType : ''}} is-first\" a:elif=\"{{index === items.length - 1}}\"></view>\n <view class=\"am-vertical-step-icon {{item.iconType ? item.iconType : ''}} is-normal\" a:else></view>\n </view>\n <view class=\"am-vertical-step-right\">\n <view class=\"am-vertical-step-title {{index <= activeIndex - 1 ? 'is-active' : ''}} {{index == failIndex - 1 ? 'is-fail' : ''}}\">\n <text>{{item.title}}</text>\n </view>\n <view class=\"am-vertical-step-brief {{index <= activeIndex - 1 ? 'is-active' : ''}}\" a:if=\"{{item.brief}}\">\n <text class=\"font-alipay-number\">{{item.brief}}</text>\n </view>\n <view class=\"am-vertical-step-description\">\n <text>{{item.description}}</text>\n <view class=\"am-hor-step-extra\" a:for=\"{{item.extra}}\" a:for-item=\"extraItem\">\n <text>{{extraItem}}</text>\n </view>\n <text class=\"am-step-vertical-link-desc\"\n data-sign=\"{{item.sign}}\"\n onTap=\"handleTap\"\n >{{item.linkDesc}}</text>\n </view>\n </view>\n </view>\n</view>\n","components/steps/index.js":"Component({\n props: {\n className: '',\n activeIndex: 1,\n failIndex: 0,\n direction: 'horizontal',\n items: [],\n onTap: () => {\n },\n },\n methods: {\n handleTap(e) {\n this.props.onTap(e);\n },\n },\n});\n","components/steps/index.json":"{\n \"component\": true\n}\n","components/whitespace/index.acss":".whitespace {\n width: 100%;\n}","components/whitespace/index.axml":"<view class=\"whitespace\" style=\"height:{{size}}rpx\"></view>","components/whitespace/index.js":"Component({\n props: {\n size: '0',\n },\n});\n","components/whitespace/index.json":"{\n \"component\": true\n}\n","components/wingblank/index.acss":"","components/wingblank/index.axml":"<view \n class=\"wingblank\"\n style=\"marginLeft:{{size}}rpx;marginRight:{{size}}rpx\"\n>\n <slot></slot>\n</view>","components/wingblank/index.js":"Component({\n props: {\n size: '0',\n },\n});\n","components/wingblank/index.json":"{\n \"component\": true\n}\n","pages/card-detail/index.acss":".card-detail-container {\n min-height: 100vh;\n position: relative;\n background: #f5f5f5;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n}\n\n.page-repay-body {\n flex-grow: 1;\n}\n\n.query-bill-section {\n padding: 32rpx;\n margin-bottom: 32rpx;\n font-size: 30rpx;\n color: #333;\n line-height: 30rpx;\n background-color: #FFF;\n}\n\n.info-row {\n display: flex;\n align-items: center;\n margin-bottom: 28rpx;\n}\n.info-row:last-child {\n margin-bottom: 0;\n}\n\n.info-right {\n flex: 1;\n text-align: right;\n}\n.info-right.highlight {\n font-weight: bold;\n}\n\n.footer-button-container {\n display: flex;\n align-items: center;\n padding: 0 32rpx 90rpx 32rpx;\n}\n\n.footer-button-container .footer-button {\n flex: 1;\n margin-right: 32rpx;\n height: 94rpx;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.footer-button-container .footer-button:last-child {\n margin-right: 0;\n}\n","pages/card-detail/index.axml":"<view class=\"card-detail-container\" style=\"minHeight: 720px\">\n <!-- 头部信息,包含银行信息、持卡人信息等 -->\n <header-info info=\"{{cardDetailInfo}}\"/>\n\n <!-- 页面主内容 -->\n <view class=\"page-repay-body\">\n\n <!-- 账单查询区域 -->\n <view class=\"query-bill-section\">\n <view class=\"basic-info-container\">\n <view class=\"info-row\">\n <text>未还金额</text>\n <text class=\"info-right highlight\">{{cardDetailInfo.unpaidInfo}}</text>\n </view>\n <view class=\"info-row\">\n <text>到期还款日</text>\n <text class=\"info-right highlight\">{{cardDetailInfo.billDate}}</text>\n </view>\n </view>\n </view>\n\n <!-- 还款金额输入框 -->\n <pay-input\n placeholder=\"每笔最高6000000.00\"\n hasMoneySymbol=\"{{true}}\"\n hasClear=\"{{false}}\"\n title=\"还款金额\"\n extraText=\"预计今天到账\"\n onInput=\"onMoneyInput\"\n maxLength=\"10\"\n repayAmount=\"{{repayInput}}\"\n />\n </view>\n\n <!-- 页面底部操作区 -->\n <view class=\"page-repay-footer-container\">\n <view class=\"footer-button-container\">\n <button type=\"primary\" onTap=\"handleRepay\" class=\"footer-button\">确认还款</button>\n </view>\n </view>\n</view>\n","pages/card-detail/index.js":"import { toUrl } from '../../util';\n\nPage({\n data: {\n cardDetailInfo: {},\n repayInput: '',\n },\n\n onLoad (options = {}) {\n console.log('card-detail page onLoad, options: ', options);\n this.setData({ cardDetailInfo: options });\n },\n\n onShow () {\n console.log('card-detail page onShow');\n },\n\n /**\n * 监听还款金额输入\n */\n onMoneyInput(value) {\n this.setData({ repayInput: value });\n },\n\n /**\n * 点击「确认还款」按钮后的处理逻辑\n */\n handleRepay() {\n const query = {\n ...this.data.cardDetailInfo,\n repayInput: this.data.repayInput,\n };\n my.navigateTo({\n url: `/pages/repayment-result/index${toUrl(query)}`,\n });\n },\n});\n","pages/card-detail/index.json":"{\n \"defaultTitle\": \"信用卡还款\",\n \"usingComponents\": {\n \"pay-input\": \"../../components/pay-input/index\",\n \"header-info\": \"../../components/header-info/index\"\n }\n}\n","pages/card-home/index.acss":".card-home-header {\n background: url(\"https://gw.alipayobjects.com/mdn/industry_lifee/afts/img/A*vOU4RYbureEAAAAAAAAAAABkARQnAQ\") left top no-repeat;\n background-size: cover;\n}\n\n.header-content {\n position: relative;\n padding: 17rpx 32rpx 40rpx 32rpx;\n color: #FFF;\n}\n\n.summary-caption {\n display: flex;\n align-items: center;\n font-size: 26rpx;\n opacity: 0.8;\n}\n.summary-caption .header-info-icon {\n width: 32rpx;\n height: 32rpx;\n margin: 0 8rpx;\n background: url(../../assets/tip-icon.png) left top no-repeat;\n background-size: contain;\n}\n\n.summary-amount {\n margin: 30rpx 0;\n font-size: 33px;\n line-height: 33px;\n height: 33px; /* 为了保证数字翻动在各手机上的效果,使用px */\n font-family: AlipayNumber;\n}\n.summary-amount .text {\n font-size: 48rpx;\n font-weight: bold;\n}\n\n.guide-link {\n font-size: 26rpx;\n}\n\n.add-type-button {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 32rpx;\n background-color: #FFF;\n height: auto;\n line-height: 36rpx;\n}\n\n.title-wrapper {\n display: flex;\n}\n.title-wrapper .add-icon {\n width: 36rpx;\n height: 36rpx;\n margin-right: 20rpx;\n}\n.title-wrapper .title {\n font-size: 30rpx;\n font-weight: bold;\n color: #108EE9;\n}\n\n.add-type-button .sub-title {\n font-size: 26rpx;\n color: #999;\n max-width: 50%;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.card-list-container {\n padding: 32rpx 0;\n}\n\n.card-wrapper {\n position: relative;\n margin-bottom: 16rpx;\n padding: 40rpx 32rpx;\n background-color: #FFF;\n}\n\n.card-wrapper .fixed-len {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.card-wrapper .operation {\n color: #108EE9;\n}\n\n.core-content-wrapper {\n display: flex;\n align-items: center;\n}\n\n.card-logo {\n width: 60rpx;\n height: 60rpx;\n margin-right: 20rpx;\n}\n\n.core-content {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex: 1;\n overflow: hidden;\n}\n\n.basic-info-main {\n display: flex;\n align-items: center;\n margin-right: 60rpx;\n font-size: 30rpx;\n color: #333;\n line-height: 30rpx;\n overflow: hidden;\n}\n\n.basic-info-main .divider {\n margin: 0 10rpx;\n width: 1px;\n height: 22rpx;\n background-color: #999;\n flex-shrink: 0;\n}\n\n.basic-info-main .card-remark {\n max-width: 220rpx;\n flex-shrink: 0;\n}\n\n.bill-operation {\n font-size: 30rpx;\n color: #108EE9;\n}\n\n.bill-info-unpaid {\n font-size: 36rpx;\n color: #333;\n font-family: AlipayNumber;\n line-height: 36rpx;\n flex-shrink: 0;\n}\n\n.extra-content-wrapper{\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-left: 80rpx;\n margin-top: 13rpx;\n}\n\n.basic-info-extra {\n margin-right: 60rpx;\n font-size: 26rpx;\n color: #999;\n}\n\n.bill-info-date {\n font-size: 26rpx;\n color: #999;\n text-align: right;\n flex-shrink: 0;\n}\n.bill-info-date .RED {\n color: #F24724;\n}\n","pages/card-home/index.axml":"<view class=\"p-card-home\">\n <!-- 头部账单聚合信息展示区域 -->\n <view class=\"card-home-header\">\n <!-- 本页为透明头,考虑兼容性问题,这里使用固定高度作为顶部占位-->\n <view style=\"height: 88px\"></view>\n\n <view class=\"header-content\">\n <!-- 账单聚合信息 -->\n <view class=\"summary-caption\">\n {{cardUniteInfo.personCoreDataSignDesc}}\n </view>\n <view class=\"summary-amount\">\n <flip-numbers content=\"{{cardUniteInfo.coreDataValue}}\" />\n </view>\n <view class=\"guide-link\">{{cardUniteInfo.dynamicRepayInfo}}</view>\n </view>\n </view>\n\n <!-- 卡片列表 -->\n <view class=\"card-list-container\">\n <view a:for=\"{{cardInfoList}}\" onTap=\"handleCardItemTap\" data-cardInfo=\"{{item}}\" class=\"card-wrapper\">\n <!-- 卡面第一行主要信息 -->\n <view class=\"core-content-wrapper\">\n <image class=\"card-logo\" src=\"{{item.cardLogo}}\" />\n <view class=\"core-content\">\n <!-- 还款类型、银行、备注 -->\n <view class=\"basic-info-main\">\n <view class=\"card-name fixed-len {{item.cardRemark ? 'has-remark' : ''}}\">{{item.cardName}}</view>\n <block a:if=\"{{item.cardRemark}}\">\n <view class=\"divider\"></view>\n <view class=\"card-remark fixed-len\">{{item.cardRemark}}</view>\n </block>\n </view>\n\n <!-- 账单信息:待还金额 -->\n <view class=\"bill-info-unpaid\">{{item.unpaidInfo}}</view>\n </view>\n </view>\n\n <!-- 卡面第二行其他信息 -->\n <view class=\"extra-content-wrapper\">\n <view class=\"basic-info-extra\">\n <view class=\"fixed-len\">{{item.basicExtraInfo}}</view>\n </view>\n <view class=\"bill-info-date\">\n <view class=\"fixed-len {{item.billDateColor}}\">{{item.billDate}}</view>\n </view>\n </view> \n </view>\n </view>\n</view>\n","pages/card-home/index.js":"import { cardListMock } from './mock';\nimport { toUrl } from '../../util';\n\nPage({\n data: {\n ...cardListMock,\n },\n onLoad (options) {\n console.log('card-home page onLoad');\n },\n onShow () {\n console.log('card-home page onShow');\n },\n\n /**\n * 点击卡片进入相应详情页\n */\n handleCardItemTap(e) {\n const cardInfo = e.target.dataset.cardInfo || {};\n my.navigateTo({\n url: `/pages/card-detail/index${toUrl(cardInfo)}`,\n });\n },\n});\n","pages/card-home/index.json":"{\n \"defaultTitle\": \"信用卡还款\",\n \"transparentTitle\": \"auto\",\n \"usingComponents\": {\n \"flip-numbers\": \"../../components/flip-numbers/index\"\n }\n}\n","pages/card-home/mock.js":"export const cardListMock = {\n 'cardUniteInfo': {\n 'dynamicRepayInfo': '最近还款¥2,000.00 预计2小时到账',\n 'recommendPositionInfo': [\n {\n 'recommendType': 'SHH',\n 'showFlag': true,\n },\n {\n 'recommendType': 'APPLY_FOR_INSTALMENT',\n 'showFlag': false,\n },\n {\n 'recommendType': 'LEND_INSTALMENT',\n 'showFlag': true,\n },\n ],\n 'coreDataValue': '6382.01',\n 'personCoreDataSignDesc': '近七日已知待还',\n },\n 'cardInfoList': [\n {\n cardBizType: 'RH',\n cardLogo: 'https://gw.alipayobjects.com/mdn/industry_lifee/afts/img/A*KK-PQIIHbKMAAAAAAAAAAABkARQnAQ',\n cardName: '房贷',\n bankName: '招商银行',\n bankLogo: 'https://gw.alipayobjects.com/zos/mwalletmng/KPZGPxYIVKsQEGSKbXNP.png',\n bankMark: 'CMB',\n cardRemark: '房贷卡',\n tail: '5678',\n holderName: '马克',\n selfCard: true,\n unpaidInfo: '本期已还清',\n billDate: '9天后到期',\n billDateColor: 'GRAY',\n basicExtraInfo: '招商银行 尾号5678',\n },\n {\n cardBizType: 'RC',\n cardLogo: 'https://gw.alipayobjects.com/mdn/industry_lifee/afts/img/A*slo8RrAjrVEAAAAAAAAAAABkARQnAQ',\n cardName: '车贷',\n bankName: '浦发银行',\n bankLogo: 'https://gw.alipayobjects.com/mdn/industry_lifee/afts/img/A*PUp0S73OsjAAAAAAAAAAAABjAQAAAQ/original',\n bankMark: 'SPDB',\n cardRemark: '',\n tail: '3452',\n holderName: '马克',\n selfCard: true,\n unpaidInfo: '预计 ¥6688.00',\n billDate: '3天后到期',\n billDateColor: 'RED',\n basicExtraInfo: '浦发银行 尾号3452',\n },\n {\n cardBizType: 'HK',\n cardLogo: 'https://gw.alipayobjects.com/zos/mwalletmng/KPZGPxYIVKsQEGSKbXNP.png',\n cardName: '招商银行',\n bankName: '招商银行',\n bankLogo: 'https://gw.alipayobjects.com/zos/mwalletmng/KPZGPxYIVKsQEGSKbXNP.png',\n bankMark: 'CMB',\n cardRemark: '餐饮卡',\n tail: '9596',\n holderName: '马克',\n selfCard: true,\n unpaidInfo: '本期已还清',\n billDate: '9天后到期',\n billDateColor: 'GRAY',\n basicExtraInfo: '尾号9596',\n },\n {\n cardBizType: 'HK',\n cardLogo: 'https://gw.alipayobjects.com/mdn/industry_lifee/afts/img/A*PUp0S73OsjAAAAAAAAAAAABjAQAAAQ/original',\n cardName: '浦发银行',\n bankName: '浦发银行',\n bankLogo: 'https://gw.alipayobjects.com/mdn/industry_lifee/afts/img/A*PUp0S73OsjAAAAAAAAAAAABjAQAAAQ/original',\n bankMark: 'SPDB',\n cardRemark: '',\n tail: '8899',\n holderName: '麦克',\n selfCard: false,\n unpaidInfo: '¥50,000.00',\n billDate: '今天到期',\n billDateColor: 'RED',\n basicExtraInfo: '麦克 尾号8899',\n },\n ],\n};\n","pages/repayment-result/index.acss":".repayment-result-container {\n min-height: 100vh;\n position: relative;\n}\n\n.complete-button{\n margin: 32rpx;\n}\n","pages/repayment-result/index.axml":"<view class=\"repayment-result-container\">\n <steps\n activeIndex=\"{{1}}\"\n direction=\"vertical\"\n items=\"{{items}}\"\n />\n\n <button onTap=\"handleCompleteTap\" type=\"primary\" class=\"complete-button\">完成</button>\n</view>\n\n\n","pages/repayment-result/index.js":"Page({\n data: {\n items: [],\n },\n\n onLoad (options) {\n console.log('repayment-result page onLoad');\n const { bankName, tail, holderName, repayInput } = options;\n this.setData({\n items: [\n {\n title: '付款成功,银行处理中',\n brief: repayInput,\n description: `${bankName}(尾号${tail}) ${holderName}`,\n },\n {\n title: '还款成功',\n iconType: 'money',\n brief: '预计明天到账(时间段模式)',\n description: '网银延后1日显示还款结果',\n },\n ],\n });\n },\n onShow() {\n console.log('repayment-result page onShow');\n },\n\n /**\n * 点击完成按钮,返回卡列表\n */\n handleCompleteTap () {\n my.navigateBack({ delta: 2 });\n },\n});\n","pages/repayment-result/index.json":"{\n \"defaultTitle\": \"信用卡还款\",\n \"usingComponents\": {\n \"steps\": \"../../components/steps/index\"\n }\n}\n"},"dist":[{"ETag":"AEBA138D1A2C08C7CF887E4491A2115E","name":"0.json","size":221177,"type":"json","url":"https://gw.alipayobjects.com/os/herbox/b08b2661-2e41-48de-9712-f1138d061aec/0.json"}]}