diff --git a/src/pages.json b/src/pages.json index 4216f97..22cfe26 100644 --- a/src/pages.json +++ b/src/pages.json @@ -42,6 +42,39 @@ }, { "path": "pages/register/register" + }, + { + "path": "pages/prod/prod", + "style": { + "navigationBarTitleText": "商品详情" + } + }, + { + "path": "pages/orderList/orderList", + "style": { + "backgroundTextStyle": "light", + "navigationBarTitleText": "订单列表", + "navigationBarTextStyle": "black", + "navigationBarBackgroundColor": "#fafafa" + } + }, + { + "path": "pages/order-detail/order-detail", + "style": { + "backgroundTextStyle": "light", + "navigationBarBackgroundColor": "#fff", + "navigationBarTitleText": "订单详情", + "navigationBarTextStyle": "black" + } + }, + { + "path": "pages/pay-result/pay-result", + "style": { + "backgroundTextStyle": "light", + "navigationBarBackgroundColor": "#fff", + "navigationBarTitleText": "支付结果", + "navigationBarTextStyle": "black" + } } ], "tabBar": { diff --git a/src/pages/order-detail/order-detail.scss b/src/pages/order-detail/order-detail.scss new file mode 100644 index 0000000..9a7795d --- /dev/null +++ b/src/pages/order-detail/order-detail.scss @@ -0,0 +1,247 @@ +.container { + background: #f4f4f4; +} +.order-detail { + margin-bottom: 120rpx; + padding-bottom: 160rpx; + .delivery-addr { + padding: 20rpx 30rpx; + background: #fff; + .user-info { + line-height: 48rpx; + word-wrap: break-word; + word-break: break-all; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + .item { + font-size: 28rpx; + margin-right: 30rpx; + vertical-align: top; + display: inline-block; + } + } + .addr { + font-size: 26rpx; + line-height: 36rpx; + color: #999; + word-wrap: break-word; + } + } +} +.prod-item { + background-color: #fff; + margin-top: 15rpx; + font-size: 28rpx; + .item-cont { + .prod-pic { + image { + width: 180rpx; + height: 180rpx; + width: 100%; + height: 100%; + } + font-size: 0; + display: block; + width: 160rpx; + height: 160rpx; + overflow: hidden; + background: #fff; + margin-right: 16rpx; + } + display: flex; + align-items: center; + padding: 30rpx; + border-top: 2rpx solid #f1f1f1; + .prod-info { + margin-left: 10rpx; + font-size: 28rpx; + width: 100%; + position: relative; + height: 80px; + -webkit-flex: 1; + -ms-flex: 1; + -webkit-box-flex: 1; + -moz-box-flex: 1; + flex: 1; + .prodname { + font-size: 28rpx; + line-height: 40rpx; + max-height: 86rpx; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + text-overflow: ellipsis; + word-break: break-all; + } + .prod-info-cont { + position: relative; + color: #999; + margin-top: 10rpx; + font-size: 24rpx; + .info-item { + color: #999; + height: 28rpx; + margin-top: 10rpx; + font-size: 24rpx; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + text-overflow: ellipsis; + word-break: break-all; + width: 70%; + } + .number { + float: left; + margin-right: 20rpx; + } + } + } + } + .price-nums { + margin-top: 30rpx; + .prodprice { + color: #333; + height: 50rpx; + line-height: 50rpx; + font-size: 24rpx; + float: left; + } + .btn-box { + float: right; + text-align: right; + .btn { + padding: 6rpx 30rpx; + line-height: 36rpx; + margin-left: 20rpx; + font-size: 24rpx; + display: inline-block; + border: 2rpx solid #e4e4e4; + border-radius: 50rpx; + } + } + } +} +.order-msg { + background: #fff; + margin-top: 15rpx; + font-size: 28rpx; + .msg-item { + padding: 20rpx; + border-top: 2rpx solid #f1f1f1; + &:first-child { + border: 0; + } + .item { + display: flex; + padding: 10rpx 0; + align-items: center; + box-sizing: border-box; + .item-tit { + min-width: 140rpx; + color: #999; + line-height: 48rpx; + } + .item-txt { + flex: 1; + line-height: 48rpx; + } + .item-txt.remarks { + max-width: 600rpx; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + .copy-btn { + display: block; + margin-left: 20rpx; + border: 2rpx solid #e4e4e4; + padding: 6rpx 24rpx; + border-radius: 50rpx; + font-size: 24rpx; + line-height: 28rpx; + } + .item-txt.price { + text-align: right; + } + } + .item.payment { + border-top: 2rpx solid #f1f1f1; + color: #eb2444; + padding-top: 30rpx; + } + } +} +.order-detail-footer { + position: fixed; + bottom: 0; + width: 100%; + max-width: 750rpx; + background: #fff; + margin: auto; + display: -webkit-flex; + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + display: flex; + padding: 22rpx 0; + font-size: 26rpx; + box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.05); + .dele-order { + margin-left: 20rpx; + line-height: 60rpx; + display: block; + margin-right: 20rpx; + width: 150rpx; + text-align: center; + } + .footer-box { + flex: 1; + text-align: right; + line-height: 60rpx; + .buy-again { + font-size: 26rpx; + color: #fff; + background: #eb2444; + border-radius: 50rpx; + padding: 10rpx 20rpx; + margin-right: 20rpx; + } + .apply-service { + font-size: 26rpx; + border-radius: 50rpx; + padding: 10rpx 20rpx; + border: 1px solid #e4e4e4; + margin-right: 20rpx; + } + } +} +.clearfix { + &:after { + content: " "; + display: table; + clear: both; + } +} +.order-state { + height: 70rpx; + line-height: 70rpx; + text-align: right; + margin-right: 20rpx; + .order-sts { + color: #eb2444; + font-size: 28rpx; + } + .order-sts.gray { + color: #999; + height: 32rpx; + line-height: 32rpx; + } + .order-sts.normal { + color: #333; + } +} diff --git a/src/pages/order-detail/order-detail.vue b/src/pages/order-detail/order-detail.vue new file mode 100644 index 0000000..78e09a6 --- /dev/null +++ b/src/pages/order-detail/order-detail.vue @@ -0,0 +1,296 @@ + + + + + diff --git a/src/pages/orderList/orderList.scss b/src/pages/orderList/orderList.scss new file mode 100644 index 0000000..3ca19c6 --- /dev/null +++ b/src/pages/orderList/orderList.scss @@ -0,0 +1,211 @@ +.container { + background-color: #f4f4f4; + color: #333; +} +.order-tit { + position: fixed; + top: 0; + display: flex; + justify-content: space-around; + z-index: 999; + width: 100%; + height: 100rpx; + line-height: 100rpx; + background-color: #fff; + border-bottom: 2rpx solid #f4f4f4; + text { + display: block; + font-size: 28rpx; + color: 999; + width: 100rpx; + text-align: center; + } + text.on { + border-bottom: 4rpx solid #eb2444; + color: #eb2444; + } +} +.main { + margin-top: 100rpx; +} +.prod-item { + background-color: #fff; + margin-top: 15rpx; + font-size: 28rpx; + .item-cont { + .prod-pic { + image { + width: 180rpx; + height: 180rpx; + width: 100%; + height: 100%; + } + font-size: 0; + display: inline-block; + width: 160rpx; + height: 160rpx; + overflow: hidden; + background: #fff; + margin-right: 16rpx; + } + .categories { + white-space: nowrap; + } + display: flex; + align-items: center; + padding: 20rpx 30rpx; + border-radius: 10rpx; + display: -webkit-flex; + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + background: #fafafa; + .prod-info { + margin-left: 10rpx; + font-size: 28rpx; + width: 100%; + position: relative; + height: 160rpx; + -webkit-flex: 1; + -ms-flex: 1; + -webkit-box-flex: 1; + -moz-box-flex: 1; + flex: 1; + .prodname { + font-size: 28rpx; + line-height: 36rpx; + max-height: 86rpx; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + text-overflow: ellipsis; + word-break: break-all; + } + .prod-info-cont { + color: #999; + line-height: 40rpx; + margin-top: 10rpx; + font-size: 22rpx; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + text-overflow: ellipsis; + word-break: break-all; + } + } + } + .order-num { + padding: 20rpx 30rpx; + display: flex; + justify-content: space-between; + font-size: 28rpx; + .clear-btn { + width: 32rpx; + height: 32rpx; + font-size: 0; + vertical-align: top; + margin-left: 42rpx; + position: relative; + &::after { + content: " "; + display: block; + position: absolute; + left: -10px; + top: 0rpx; + width: 1px; + height: 32rpx; + background: #ddd; + } + .clear-list-btn { + width: 100%; + height: 100%; + vertical-align: middle; + } + } + } + .total-num { + text-align: right; + padding: 20rpx 30rpx; + font-size: 28rpx; + .prodprice { + display: inline-block; + color: #333; + } + .prodcount { + margin-right: 20rpx; + } + } + .price-nums { + .prodprice { + color: #333; + position: absolute; + bottom: 0; + } + .prodcount { + position: absolute; + bottom: 5rpx; + right: 0; + color: #999; + font-family: verdana; + } + } + .prod-foot { + border-top: 2rpx solid #e6e6e6; + .total { + font-size: 25rpx; + margin-bottom: 20rpx; + padding-bottom: 20rpx; + border-bottom: 2rpx solid #e9eaec; + } + .btn { + display: flex; + align-items: center; + justify-content: flex-end; + } + } +} +.order-state { + display: flex; + align-items: center; + font-size: 24rpx; + .order-sts.red { + color: #eb2444; + } + .order-sts.gray { + color: #999; + } +} +.other-button-hover { + background-color: blue; +} +.button-hover { + background-color: red; + background-color: blue; +} +.button { + margin-top: 20rpx; + margin-bottom: 20rpx; + margin-left: 10px; + font-size: 26rpx; + background: #fff; + padding: 10rpx 30rpx; + border-radius: 80rpx; + border: 2rpx solid #e1e1e1; + &:last-child { + margin-right: 10rpx; + } +} +.button.warn { + color: #eb2444; + border-color: #eb2444; +} +.empty { + font-size: 24rpx; + margin-top: 100rpx; + text-align: center; + color: #999; + height: 300rpx; + line-height: 300rpx; +} diff --git a/src/pages/orderList/orderList.vue b/src/pages/orderList/orderList.vue new file mode 100644 index 0000000..63a0ab5 --- /dev/null +++ b/src/pages/orderList/orderList.vue @@ -0,0 +1,424 @@ + + + + + diff --git a/src/pages/pay-result/pay-result.scss b/src/pages/pay-result/pay-result.scss new file mode 100644 index 0000000..eb8e3e3 --- /dev/null +++ b/src/pages/pay-result/pay-result.scss @@ -0,0 +1,50 @@ +.pay-sts { + font-size: 40rpx; + margin-top: 100rpx; + padding: 30rpx 0; + text-align: center; +} +.pay-sts.fail { + color: #f43530; +} +.pay-sts.succ { + color: #19be6b; +} +.btns { + margin-top: 50rpx; + text-align: center; + .button { + border-radius: 10rpx; + font-size: 28rpx; + background: #fff; + color: #333; + padding: 20rpx 35rpx; + width: 300rpx; + margin: 0 20rpx; + text-align: center; + } + .button.checkorder { + background: #19be6b; + color: #fff; + margin-bottom: 20rpx; + border: 2rpx solid #19be6b; + } + .button.payagain { + background: #fff; + border: 2rpx solid #f90; + color: #f90; + } + .button.shopcontinue { + background: #fff; + border: 2rpx solid #19be6b; + color: #19be6b; + } +} +.tips { + font-size: 28rpx; + color: #999; + text-align: center; + .warn { + color: #f43530; + } +} diff --git a/src/pages/pay-result/pay-result.vue b/src/pages/pay-result/pay-result.vue new file mode 100644 index 0000000..9dae116 --- /dev/null +++ b/src/pages/pay-result/pay-result.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/src/pages/prod/prod.scss b/src/pages/prod/prod.scss new file mode 100644 index 0000000..7478438 --- /dev/null +++ b/src/pages/prod/prod.scss @@ -0,0 +1,628 @@ +.container { + background: #f4f4f4; + height: 100%; + padding-bottom: 150rpx; +} +swiper { + height: 750rpx; + width: 100%; + border-bottom: 2rpx solid #f8f8f8; + image { + height: 750rpx; + width: 100%; + } +} +.prod-info { + padding: 30rpx 30rpx 0 30rpx; + position: relative; + background: #fff; +} +.tit-wrap { + position: relative; + line-height: 40rpx; + padding-right: 104rpx; + .col { + position: absolute; + top: 0; + right: 0; + width: 80rpx; + color: #666; + font-size: 20rpx; + padding-left: 20rpx; + text-align: center; + image { + display: block; + margin: auto; + width: 40rpx; + height: 40rpx; + } + &::after { + content: ""; + display: block; + width: 1px; + height: auto; + background: #f1f1f1; + position: absolute; + top: 0; + bottom: 5px; + left: 0; + } + } +} +.prod-tit { + font-size: 32rpx; + color: #333; + padding-right: 20rpx; +} +.sales-p { + background: #fff; + line-height: 40rpx; + color: #999; + font-size: 24rpx; + margin-top: 6rpx; + margin-right: 104rpx; +} +.prod-price { + font-size: 30rpx; + height: 100rpx; + line-height: 100rpx; +} +.price { + color: #eb2444; + font-size: 24rpx; + font-weight: 600; + margin-right: 30rpx; +} +.price-num { + font-size: 46rpx; + font-weight: 400; +} +.ori-price { + font-size: 25rpx; + color: #999; + text-decoration: line-through; +} +.sales { + color: #999; +} +.more { + position: absolute; + right: 20rpx; + width: 60rpx; + top: 10rpx; + text-align: right; + font-size: 40rpx; + color: #999; + letter-spacing: 1px; +} +.sku { + padding: 20rpx; + background: #fff; + margin-top: 20rpx; + position: relative; + line-height: 48rpx; +} +.sku-tit { + position: absolute; + display: inline-block; + width: 60rpx; + left: 20rpx; + font-size: 22rpx; + top: 20rpx; + color: #999; +} +.sku-con { + margin: 0 80rpx; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + font-size: 28rpx; + font-weight: bold; +} +.cmt-wrap { + background: #fff; + margin-top: 20rpx; + position: relative; + line-height: 48rpx; +} +.cmt-tit { + font-size: 32rpx; + position: relative; + border-bottom: 1px solid #ddd; + padding: 20rpx; +} +.cmt-t { + width: 300rpx; +} +.cmt-good { + color: #eb2444; + font-size: 24rpx; +} +.cmt-count { + position: absolute; + right: 20rpx; + top: 20rpx; + font-size: 24rpx; + color: #666; +} +.cmt-more { + width: 20rpx; + height: 20rpx; + border-top: 2rpx solid #999; + border-right: 2rpx solid #999; + transform: rotate(45deg); + margin-left: 10rpx; + display: inline-block; +} +.cmt-cont { + padding: 0 20rpx; +} +.cmt-tag { + position: relative; + padding: 14px 3px 0 0; + margin: 0; + text { + margin: 0 10px 10px 0; + background: #fdf0f0; + display: inline-block; + padding: 0 10px; + height: 25px; + border-radius: 3px; + line-height: 25px; + font-size: 12px; + font-family: -apple-system, Helvetica, sans-serif; + color: #666; + } + text.selected { + color: #fff; + background: #e93b3d; + } +} +.cmt-item { + position: relative; + padding: 10px 0; + &::after { + content: ""; + height: 0; + display: block; + border-bottom: 1px solid #ddd; + position: absolute; + left: 0; + bottom: 0; + right: -10px; + border-bottom-color: #e5e5e5; + } +} +.cmt-items { + .empty { + display: block; + font-size: 24rpx; + text-align: center; + color: #aaa; + margin-top: 5vh; + } +} +.cmt-user { + line-height: 25px; + margin-bottom: 8px; + font-size: 12px; + .user-img { + width: 25px; + height: 25px; + border-radius: 50%; + vertical-align: middle; + } + .nickname { + margin-left: 10px; + display: inline-block; + color: #333; + max-width: 8.2em; + height: 25px; + line-height: 27px; + } + .date { + float: right; + color: #999; + margin-left: -60px; + } +} +.cmt-user-info { + display: flex; + align-items: center; + width: 400rpx; +} +.cmt-cnt { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + position: relative; + line-height: 1.5; + font-size: 14px; + margin: 5px 0; + word-break: break-all; + max-height: 126px; +} +.cmt-attr { + height: 85px; + width: 100%; + white-space: nowrap; + image { + display: inline-block; + width: 80px; + height: 80px; + margin-right: 5px; + margin-bottom: 5px; + border-radius: 2px; + background: #f3f3f3; + } +} +.cmt-more-v { + text-align: center; + background-color: #fff; + font-size: 12px; + text { + height: 25px; + line-height: 25px; + font-size: 12px; + text-align: center; + color: #333; + padding: 0px 10px; + margin: 10px 0; + border: 1px solid #ccc; + border-radius: 40px; + display: inline-block; + } +} +.cmt-popup { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 998; + background-color: #fff; + padding-bottom: 98rpx; + .cmt-cont { + height: calc(100% - 80rpx); + overflow: auto; + } + .cmt-cnt { + -webkit-line-clamp: 20; + max-height: 500px; + } + .load-more { + font-size: 14px; + padding: 20px; + text-align: center; + margin-bottom: 10px; + text { + border: 1px solid #ddd; + padding: 5px 10px; + border-radius: 10px; + color: #666; + } + } +} +.cmt-reply { + font-size: 14px; + border-top: 1px dashed #ddd; + padding: 5px 0; + .reply-tit { + color: #eb2444; + } +} +.prod-detail { + background: #fff; + margin-top: 20rpx; + position: relative; + line-height: 48rpx; + image { + width: 750rpx !important; + display: block; + } +} +rich-text { + image { + width: 100% !important; + } +} +:deep(.img) { + width: 100% !important; + display: block; +} +.cart-footer { + position: fixed; + bottom: 0; + left: 0; + width: 100%; + display: flex; + flex-flow: row nowrap; + height: 98rpx; + z-index: 999; + box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.05); + .btn { + position: relative; + display: flex; + flex-grow: 1; + justify-content: center; + align-items: center; + width: 0; + background-color: #fff; + font-size: 28rpx; + flex-flow: column; + .badge { + position: absolute; + top: 20rpx; + left: 62rpx; + display: inline-block; + width: 28rpx; + height: 28rpx; + border-radius: 14rpx; + background-color: #eb2444; + text-align: center; + line-height: 28rpx; + font-size: 18rpx; + color: #fff; + } + .badge-1 { + width: 36rpx; + } + } + .btn.icon { + flex-grow: 0; + flex-shrink: 0; + width: 125rpx; + font-size: 20rpx; + color: #666; + image { + width: 50rpx; + height: 50rpx; + } + } + .btn.cart { + background: #584e61; + color: #fff; + } + .btn.buy { + background: #eb2444; + color: #fff; + } +} +.close { + color: #aaa; + border-radius: 12px; + line-height: 20px; + text-align: center; + height: 20px; + width: 20px; + font-size: 18px; + padding: 1px; + top: 10px; + right: 10px; + position: absolute; + &::before { + content: "\2716"; + } +} +.popup-cnt { + max-height: 429px; + overflow: auto; + padding: 0 10px; +} +.pup-sku { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 999; + background-color: rgba(0, 0, 0, 0.3); +} +.pup-sku-main { + position: absolute; + bottom: 0; + width: 100%; + min-height: 375px; + max-height: 475px; + background-color: #fff; +} +.pup-sku-header { + position: relative; + line-height: 46px; + font-size: 16px; + color: #333; + height: 70px; + padding: 0 0 10px 110px; + background-color: #fff; +} +.pup-sku-img { + position: absolute; + left: 10px; + top: -20px; + border-radius: 2px; + width: 90px; + height: 90px; + border: 0 none; + vertical-align: top; +} +.pup-sku-price { + display: inline-block; + height: 40px; + line-height: 40px; + color: #e4393c; + font-size: 10px; +} +.pup-sku-price-int { + font-size: 16px; +} +.pup-sku-prop { + word-break: break-all; + font-size: 12px; + color: #333; + line-height: 1.4em; + padding-right: 10px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + text { + color: #999; + margin-right: 5px; + } +} +.pup-sku-body { + box-sizing: border-box; + max-height: 379px; + padding-bottom: 100px; + overflow: auto; +} +.pup-sku-area { + .sku-kind { + font-size: 12px; + color: #999; + margin: 0 10px; + height: 40px; + line-height: 40px; + } + .sku-choose { + overflow: hidden; + margin-bottom: 3px; + } +} +.sku-choose-item { + display: inline-block; + padding: 0 10px; + min-width: 20px; + max-width: 270px; + overflow: hidden; + height: 30px; + line-height: 30px; + text-align: center; + margin-left: 10px; + margin-bottom: 10px; + border-radius: 4px; + color: #333; + background-color: #f7f7f7; + font-size: 14px; +} +.sku-choose-item.active { + background-color: #eb2444; + color: #fff; +} +.sku-choose-item.gray { + background-color: #f9f9f9; + color: #ddd; +} +.pup-sku-count { + padding: 0 10px 13px; + font-size: 12px; + .count-name { + color: #999; + height: 31px; + line-height: 31px; + width: 100rpx; + } + .num-wrap { + position: relative; + z-index: 0; + width: 110px; + float: right; + vertical-align: middle; + display: flex; + } + .text-wrap { + position: relative; + width: 45px; + z-index: 0; + margin: 0 1px; + input { + height: 30px; + width: 100%; + color: #333; + background: #fff; + font-size: 12px; + text-align: center; + border: none; + background: #f7f7f7; + } + } +} +.num-wrap { + .minus { + position: relative; + max-width: 30px; + min-width: 30px; + height: 30px; + line-height: 30px; + background: #f7f7f7; + text-align: center; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + } + .plus { + position: relative; + max-width: 30px; + min-width: 30px; + height: 30px; + line-height: 30px; + background: #f7f7f7; + text-align: center; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + } + .row { + border-radius: 20px; + position: absolute; + top: 50%; + left: 50%; + margin-left: -7px; + margin-top: -1px; + width: 14px; + height: 2px; + background-color: #ccc; + } + .col { + border-radius: 20px; + position: absolute; + top: 50%; + left: 50%; + margin-left: -1px; + margin-top: -7px; + width: 2px; + height: 14px; + background-color: #999; + } +} +.pup-sku-footer { + position: fixed; + bottom: 0; + left: 0; + width: 100%; + display: flex; + flex-direction: row nowrap; + height: 98rpx; + z-index: 999; + box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.05); + .btn { + position: relative; + display: flex; + flex-grow: 1; + justify-content: center; + align-items: center; + width: 0; + background-color: #fff; + font-size: 28rpx; + flex-flow: column; + } + .btn.cart { + background: #584e61; + color: #fff; + } + .btn.buy { + background: #eb2444; + color: #fff; + } +} diff --git a/src/pages/prod/prod.vue b/src/pages/prod/prod.vue new file mode 100644 index 0000000..d2a5f1b --- /dev/null +++ b/src/pages/prod/prod.vue @@ -0,0 +1,875 @@ + + + + +