├── src ├── pages │ ├── about │ │ ├── about.json │ │ ├── about.js │ │ ├── about.wxss │ │ └── about.wxml │ ├── create │ │ ├── create.json │ │ ├── create.wxss │ │ ├── create.wxml │ │ └── create.js │ ├── done │ │ ├── done.json │ │ ├── done.wxss │ │ ├── done.wxml │ │ └── done.js │ ├── open │ │ ├── open.json │ │ ├── open.wxss │ │ ├── open.wxml │ │ └── open.js │ └── index │ │ ├── index.js │ │ ├── index.wxml │ │ └── index.wxss ├── components │ ├── topToast │ │ ├── topToast.json │ │ ├── topToast.wxml │ │ ├── topToast.wxss │ │ └── topToast.js │ └── happyLoading │ │ ├── happyLoading.json │ │ ├── happyLoading.wxml │ │ ├── happyLoading.js │ │ └── happyLoading.wxss ├── resources │ ├── icons │ │ ├── icon_send.png │ │ ├── icon_about.png │ │ ├── icon_receive.png │ │ ├── icon_about_81x81.png │ │ ├── icon_home_81x81.png │ │ ├── icon_send_81x81.png │ │ ├── icon_receive_81x81.png │ │ ├── icon_send_sel_81x81.png │ │ ├── icon_about_sel_81x81.png │ │ └── icon_receive_sel_81x81.png │ ├── images │ │ ├── envelope.png │ │ ├── icon_secret_round.png │ │ ├── icon_secret_square.png │ │ ├── icon_secret_round_c.png │ │ ├── icon_secret_round_256x256.png │ │ ├── icon_secret_square_144x144.png │ │ ├── icon_secret_square_400x400.jpg │ │ ├── icon_secret_square_400x400.png │ │ └── icon_secret_round.svg │ ├── screenshots │ │ ├── secretends_01.png │ │ ├── secretends_02.png │ │ ├── secretends_03.png │ │ ├── secretends_04.png │ │ ├── secretends_05.png │ │ ├── secretends_1829.png │ │ └── qr_secretends_860x860.jpg │ └── style │ │ └── weui.wxss ├── app.wxss ├── project.config.json ├── libs │ ├── wdatetime.js │ ├── wchar.js │ ├── wlib.js │ ├── wurl.js │ └── cipher │ │ ├── wsha256.js │ │ └── waes.js ├── models │ └── secret │ │ ├── CSignature.js │ │ ├── CEncryptHint.js │ │ └── CSecretEnds.js ├── app.js └── app.json ├── design ├── index.psd ├── envelope.psd ├── SecretEnds_1280.jpg ├── SecretEnds_258.jpg ├── SecretEnds_344.jpg ├── SecretEnds_430.jpg ├── references │ ├── 223213.png │ ├── 3-512.png │ ├── email2.jpg │ ├── envelope.png │ ├── unnamed.png │ ├── 1200x630bb.jpg │ ├── 1408500330.jpg │ ├── unnamed (1).png │ ├── 11915-envelope.png │ ├── envelope-icon.png │ ├── icon_receive.png │ ├── top-secret-mail.jpg │ ├── top_secret_stamp.png │ ├── encrypted-message.png │ ├── icon_receive_81x81.png │ ├── buaaqkzbhytexqawqsop.jpg │ ├── encrypted-email-icons.png │ ├── windows_10_mail_icon.jpg │ ├── Secure-Mail-icon-300x212.png │ ├── icon_receive_sel_81x81.png │ ├── sendsafely-envelope-logo.png │ ├── top-secret-stamp-EMEF4X.jpg │ ├── Office-365-Encrypted-Email.jpg │ ├── 55118-envelope-back-outline.png │ ├── letter_open_email_read_text-512.png │ ├── 0cf1a44bf2a8b732596c571040b857f6.jpg │ ├── 413d353506bd4e2348f103ef0dacb235.jpg │ ├── 6507dbf05c8ef354a4ef3dbb5dc3a606.jpg │ ├── 6e42939a4366946404ace06152a83362.jpg │ ├── 7d8657ceb98c4292acd9ad661df4e7a4.jpg │ ├── afd376134c5b330e0fbe4da83b43d073.jpg │ ├── ccc7cadcb760ba13b1489af0dcb5d002.jpg │ ├── ee3aa003f2667a02e135420ebca852f0.jpg │ ├── best-encrypted-email-services-business.png │ ├── envelope-icon-white-background-33918180.jpg │ ├── voltage-comprehensive-streamline-compliance-feature-icon.png │ ├── 4d5cc0e6a7b43f5e5aff90f01c655544--top-secret-stamp-old-paper.jpg │ ├── depositphotos_69206881-stock-illustration-sealed-envelope-icon.jpg │ ├── mail-encryption-interface-symbol-of-an-envelope-back-with-a-padlock_318-49727.jpg │ ├── 40210741-brown-paper-sealed-with-string-envelope-template-vector-isolated-on-white.jpg │ ├── correspondence_express_envelope_folder_post_postal_courier_mail_papers_business_service_message_documents_packet_package_packaging_sealed_confidential_information_send_flat_design_icon-512.png │ ├── envelope-icon.svg │ └── secret.svg ├── SecretEnds_860x860.jpg └── screenshots │ ├── IMG_1828.PNG │ ├── IMG_1828.jpg │ ├── IMG_1829.PNG │ ├── IMG_1829.jpg │ ├── IMG_1830.PNG │ ├── IMG_1830.jpg │ ├── IMG_1831.PNG │ ├── IMG_1831.jpg │ ├── IMG_1832.PNG │ └── IMG_1832.jpg ├── LICENSE ├── .gitignore └── README.md /src/pages/about/about.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "关于" 3 | } -------------------------------------------------------------------------------- /design/index.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/index.psd -------------------------------------------------------------------------------- /src/components/topToast/topToast.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /design/envelope.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/envelope.psd -------------------------------------------------------------------------------- /src/components/happyLoading/happyLoading.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /design/SecretEnds_1280.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/SecretEnds_1280.jpg -------------------------------------------------------------------------------- /design/SecretEnds_258.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/SecretEnds_258.jpg -------------------------------------------------------------------------------- /design/SecretEnds_344.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/SecretEnds_344.jpg -------------------------------------------------------------------------------- /design/SecretEnds_430.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/SecretEnds_430.jpg -------------------------------------------------------------------------------- /design/references/223213.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/223213.png -------------------------------------------------------------------------------- /design/references/3-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/3-512.png -------------------------------------------------------------------------------- /design/references/email2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/email2.jpg -------------------------------------------------------------------------------- /design/SecretEnds_860x860.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/SecretEnds_860x860.jpg -------------------------------------------------------------------------------- /design/references/envelope.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/envelope.png -------------------------------------------------------------------------------- /design/references/unnamed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/unnamed.png -------------------------------------------------------------------------------- /design/screenshots/IMG_1828.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/screenshots/IMG_1828.PNG -------------------------------------------------------------------------------- /design/screenshots/IMG_1828.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/screenshots/IMG_1828.jpg -------------------------------------------------------------------------------- /design/screenshots/IMG_1829.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/screenshots/IMG_1829.PNG -------------------------------------------------------------------------------- /design/screenshots/IMG_1829.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/screenshots/IMG_1829.jpg -------------------------------------------------------------------------------- /design/screenshots/IMG_1830.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/screenshots/IMG_1830.PNG -------------------------------------------------------------------------------- /design/screenshots/IMG_1830.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/screenshots/IMG_1830.jpg -------------------------------------------------------------------------------- /design/screenshots/IMG_1831.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/screenshots/IMG_1831.PNG -------------------------------------------------------------------------------- /design/screenshots/IMG_1831.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/screenshots/IMG_1831.jpg -------------------------------------------------------------------------------- /design/screenshots/IMG_1832.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/screenshots/IMG_1832.PNG -------------------------------------------------------------------------------- /design/screenshots/IMG_1832.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/screenshots/IMG_1832.jpg -------------------------------------------------------------------------------- /design/references/1200x630bb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/1200x630bb.jpg -------------------------------------------------------------------------------- /design/references/1408500330.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/1408500330.jpg -------------------------------------------------------------------------------- /design/references/unnamed (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/unnamed (1).png -------------------------------------------------------------------------------- /src/resources/icons/icon_send.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/src/resources/icons/icon_send.png -------------------------------------------------------------------------------- /src/resources/images/envelope.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/src/resources/images/envelope.png -------------------------------------------------------------------------------- /design/references/11915-envelope.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/11915-envelope.png -------------------------------------------------------------------------------- /design/references/envelope-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/envelope-icon.png -------------------------------------------------------------------------------- /design/references/icon_receive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/icon_receive.png -------------------------------------------------------------------------------- /src/resources/icons/icon_about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/src/resources/icons/icon_about.png -------------------------------------------------------------------------------- /src/resources/icons/icon_receive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/src/resources/icons/icon_receive.png -------------------------------------------------------------------------------- /design/references/top-secret-mail.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/top-secret-mail.jpg -------------------------------------------------------------------------------- /design/references/top_secret_stamp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/top_secret_stamp.png -------------------------------------------------------------------------------- /design/references/encrypted-message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/encrypted-message.png -------------------------------------------------------------------------------- /design/references/icon_receive_81x81.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/icon_receive_81x81.png -------------------------------------------------------------------------------- /src/resources/icons/icon_about_81x81.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/src/resources/icons/icon_about_81x81.png -------------------------------------------------------------------------------- /src/resources/icons/icon_home_81x81.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/src/resources/icons/icon_home_81x81.png -------------------------------------------------------------------------------- /src/resources/icons/icon_send_81x81.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/src/resources/icons/icon_send_81x81.png -------------------------------------------------------------------------------- /design/references/buaaqkzbhytexqawqsop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/buaaqkzbhytexqawqsop.jpg -------------------------------------------------------------------------------- /design/references/encrypted-email-icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/encrypted-email-icons.png -------------------------------------------------------------------------------- /design/references/windows_10_mail_icon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/windows_10_mail_icon.jpg -------------------------------------------------------------------------------- /src/resources/icons/icon_receive_81x81.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/src/resources/icons/icon_receive_81x81.png -------------------------------------------------------------------------------- /src/resources/icons/icon_send_sel_81x81.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/src/resources/icons/icon_send_sel_81x81.png -------------------------------------------------------------------------------- /src/resources/images/icon_secret_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/src/resources/images/icon_secret_round.png -------------------------------------------------------------------------------- /src/resources/images/icon_secret_square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/src/resources/images/icon_secret_square.png -------------------------------------------------------------------------------- /src/resources/screenshots/secretends_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/src/resources/screenshots/secretends_01.png -------------------------------------------------------------------------------- /src/resources/screenshots/secretends_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/src/resources/screenshots/secretends_02.png -------------------------------------------------------------------------------- /src/resources/screenshots/secretends_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/src/resources/screenshots/secretends_03.png -------------------------------------------------------------------------------- /src/resources/screenshots/secretends_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/src/resources/screenshots/secretends_04.png -------------------------------------------------------------------------------- /src/resources/screenshots/secretends_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/src/resources/screenshots/secretends_05.png -------------------------------------------------------------------------------- /design/references/Secure-Mail-icon-300x212.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/Secure-Mail-icon-300x212.png -------------------------------------------------------------------------------- /design/references/icon_receive_sel_81x81.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/icon_receive_sel_81x81.png -------------------------------------------------------------------------------- /design/references/sendsafely-envelope-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/sendsafely-envelope-logo.png -------------------------------------------------------------------------------- /design/references/top-secret-stamp-EMEF4X.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/top-secret-stamp-EMEF4X.jpg -------------------------------------------------------------------------------- /src/resources/icons/icon_about_sel_81x81.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/src/resources/icons/icon_about_sel_81x81.png -------------------------------------------------------------------------------- /src/resources/icons/icon_receive_sel_81x81.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/src/resources/icons/icon_receive_sel_81x81.png -------------------------------------------------------------------------------- /src/resources/images/icon_secret_round_c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/src/resources/images/icon_secret_round_c.png -------------------------------------------------------------------------------- /src/resources/screenshots/secretends_1829.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/src/resources/screenshots/secretends_1829.png -------------------------------------------------------------------------------- /design/references/Office-365-Encrypted-Email.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/Office-365-Encrypted-Email.jpg -------------------------------------------------------------------------------- /design/references/55118-envelope-back-outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/55118-envelope-back-outline.png -------------------------------------------------------------------------------- /src/pages/create/create.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "创建", 3 | "usingComponents": 4 | { 5 | "toptoast": "/components/topToast/topToast" 6 | } 7 | } -------------------------------------------------------------------------------- /src/pages/done/done.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "纸条已加密", 3 | "usingComponents": 4 | { 5 | "toptoast": "/components/topToast/topToast" 6 | } 7 | } -------------------------------------------------------------------------------- /src/resources/images/icon_secret_round_256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/src/resources/images/icon_secret_round_256x256.png -------------------------------------------------------------------------------- /src/resources/images/icon_secret_square_144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/src/resources/images/icon_secret_square_144x144.png -------------------------------------------------------------------------------- /src/resources/images/icon_secret_square_400x400.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/src/resources/images/icon_secret_square_400x400.jpg -------------------------------------------------------------------------------- /src/resources/images/icon_secret_square_400x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/src/resources/images/icon_secret_square_400x400.png -------------------------------------------------------------------------------- /src/resources/screenshots/qr_secretends_860x860.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/src/resources/screenshots/qr_secretends_860x860.jpg -------------------------------------------------------------------------------- /design/references/letter_open_email_read_text-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/letter_open_email_read_text-512.png -------------------------------------------------------------------------------- /design/references/0cf1a44bf2a8b732596c571040b857f6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/0cf1a44bf2a8b732596c571040b857f6.jpg -------------------------------------------------------------------------------- /design/references/413d353506bd4e2348f103ef0dacb235.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/413d353506bd4e2348f103ef0dacb235.jpg -------------------------------------------------------------------------------- /design/references/6507dbf05c8ef354a4ef3dbb5dc3a606.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/6507dbf05c8ef354a4ef3dbb5dc3a606.jpg -------------------------------------------------------------------------------- /design/references/6e42939a4366946404ace06152a83362.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/6e42939a4366946404ace06152a83362.jpg -------------------------------------------------------------------------------- /design/references/7d8657ceb98c4292acd9ad661df4e7a4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/7d8657ceb98c4292acd9ad661df4e7a4.jpg -------------------------------------------------------------------------------- /design/references/afd376134c5b330e0fbe4da83b43d073.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/afd376134c5b330e0fbe4da83b43d073.jpg -------------------------------------------------------------------------------- /design/references/ccc7cadcb760ba13b1489af0dcb5d002.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/ccc7cadcb760ba13b1489af0dcb5d002.jpg -------------------------------------------------------------------------------- /design/references/ee3aa003f2667a02e135420ebca852f0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/ee3aa003f2667a02e135420ebca852f0.jpg -------------------------------------------------------------------------------- /design/references/best-encrypted-email-services-business.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/best-encrypted-email-services-business.png -------------------------------------------------------------------------------- /design/references/envelope-icon-white-background-33918180.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/envelope-icon-white-background-33918180.jpg -------------------------------------------------------------------------------- /src/components/happyLoading/happyLoading.wxml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /design/references/voltage-comprehensive-streamline-compliance-feature-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/voltage-comprehensive-streamline-compliance-feature-icon.png -------------------------------------------------------------------------------- /src/pages/open/open.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "接收", 3 | "usingComponents": 4 | { 5 | "toptoast": "/components/topToast/topToast", 6 | "happyloading": "/components/happyLoading/happyLoading" 7 | } 8 | } -------------------------------------------------------------------------------- /design/references/4d5cc0e6a7b43f5e5aff90f01c655544--top-secret-stamp-old-paper.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/4d5cc0e6a7b43f5e5aff90f01c655544--top-secret-stamp-old-paper.jpg -------------------------------------------------------------------------------- /design/references/depositphotos_69206881-stock-illustration-sealed-envelope-icon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/depositphotos_69206881-stock-illustration-sealed-envelope-icon.jpg -------------------------------------------------------------------------------- /design/references/mail-encryption-interface-symbol-of-an-envelope-back-with-a-padlock_318-49727.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/mail-encryption-interface-symbol-of-an-envelope-back-with-a-padlock_318-49727.jpg -------------------------------------------------------------------------------- /design/references/40210741-brown-paper-sealed-with-string-envelope-template-vector-isolated-on-white.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/40210741-brown-paper-sealed-with-string-envelope-template-vector-isolated-on-white.jpg -------------------------------------------------------------------------------- /src/components/topToast/topToast.wxml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/app.wxss: -------------------------------------------------------------------------------- 1 | @import "resources/style/weui.wxss"; 2 | 3 | /** 4 | * app.wxss 5 | */ 6 | .container 7 | { 8 | width: 100%; 9 | height: 100%; 10 | padding: 0; 11 | background-color: #fff; 12 | } 13 | 14 | 15 | 16 | .footer-buttons 17 | { 18 | padding: 20rpx 30rpx 20rpx 30rpx; 19 | } 20 | .footer-buttons .footer-buttons-primary 21 | { 22 | width: 100%; 23 | color: #fff; 24 | background-color: #273b7a; 25 | } -------------------------------------------------------------------------------- /design/references/correspondence_express_envelope_folder_post_postal_courier_mail_papers_business_service_message_documents_packet_package_packaging_sealed_confidential_information_send_flat_design_icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dekuan/mini.wx.secretends/HEAD/design/references/correspondence_express_envelope_folder_post_postal_courier_mail_papers_business_service_message_documents_packet_package_packaging_sealed_confidential_information_send_flat_design_icon-512.png -------------------------------------------------------------------------------- /src/pages/about/about.js: -------------------------------------------------------------------------------- 1 | /** 2 | * about 3 | */ 4 | const app = getApp(); 5 | 6 | 7 | 8 | 9 | Page({ 10 | 11 | data: 12 | { 13 | }, 14 | 15 | onLoad: function ( oOptions ) 16 | { 17 | }, 18 | 19 | onShareAppMessage : function( res ) 20 | { 21 | // if ('button' === res.from ) 22 | // { 23 | // // 来自页面内转发按钮 24 | // console.log( res.target ); 25 | // } 26 | 27 | return { 28 | title : '关于「加密纸条」', 29 | path : '/pages/about/about', 30 | success : function( res ) 31 | { 32 | // 转发成功 33 | }, 34 | fail : function( res ) 35 | { 36 | // 转发失败 37 | } 38 | } 39 | } 40 | 41 | 42 | 43 | 44 | 45 | 46 | }) -------------------------------------------------------------------------------- /src/components/happyLoading/happyLoading.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Component 3 | */ 4 | Component 5 | ({ 6 | /** 7 | * 组件的属性列表 8 | */ 9 | properties: 10 | { 11 | show: 12 | { 13 | type: Boolean, 14 | value: false 15 | }, 16 | src: 17 | { 18 | type: String, 19 | value: "" 20 | } 21 | }, 22 | 23 | /** 24 | * 组件的初始数据/内部数据 25 | */ 26 | data: 27 | { 28 | }, 29 | 30 | /** 31 | * 组件的方法列表 32 | */ 33 | methods: 34 | { 35 | showLoading() 36 | { 37 | this.setData 38 | ({ 39 | show: true 40 | }); 41 | }, 42 | hideLoading() 43 | { 44 | this.setData 45 | ({ 46 | show: false 47 | }); 48 | } 49 | } 50 | 51 | 52 | 53 | }) -------------------------------------------------------------------------------- /src/project.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "description": "项目配置文件。", 3 | "setting": { 4 | "urlCheck": true, 5 | "es6": true, 6 | "postcss": true, 7 | "minified": true, 8 | "newFeature": true 9 | }, 10 | "compileType": "miniprogram", 11 | "libVersion": "1.9.1", 12 | "appid": "wxebbcee4290016dbf", 13 | "projectname": "SecretEnds", 14 | "isGameTourist": false, 15 | "condition": { 16 | "search": { 17 | "current": -1, 18 | "list": [] 19 | }, 20 | "conversation": { 21 | "current": -1, 22 | "list": [] 23 | }, 24 | "game": { 25 | "currentL": -1, 26 | "list": [] 27 | }, 28 | "miniprogram": { 29 | "current": -1, 30 | "list": [] 31 | } 32 | } 33 | } -------------------------------------------------------------------------------- /src/pages/done/done.wxss: -------------------------------------------------------------------------------- 1 | /** 2 | * envelope 3 | */ 4 | .envelope 5 | { 6 | display: flex; 7 | flex-direction: column; 8 | align-items: center; 9 | padding: 90rpx 0 90rpx 0; 10 | background-color: #273b7a; 11 | } 12 | .envelope .envelope-icon 13 | { 14 | width: 420rpx; 15 | height: 320rpx; 16 | background-size: cover; 17 | } 18 | 19 | 20 | 21 | /** 22 | * main 23 | */ 24 | .main 25 | { 26 | padding: 20rpx 0 0 0; 27 | } 28 | .main .main-section 29 | { 30 | padding: 20rpx 30rpx 10rpx 30rpx; 31 | } 32 | .main .main-label 33 | { 34 | color: #273b7a; 35 | font-weight: bold; 36 | padding: 10rpx 20rpx 10rpx 0; 37 | } 38 | .main .main-text 39 | { 40 | color: #273b7a; 41 | font-weight: normal; 42 | padding: 10rpx 20rpx 10rpx 0; 43 | } 44 | 45 | -------------------------------------------------------------------------------- /src/pages/about/about.wxss: -------------------------------------------------------------------------------- 1 | /** 2 | * product 3 | */ 4 | .product 5 | { 6 | display: flex; 7 | flex-direction: column; 8 | align-items: center; 9 | padding: 120rpx 0 120rpx 0; 10 | background-color: #273b7a; 11 | } 12 | .product .logo 13 | { 14 | width: 260rpx; 15 | height: 260rpx; 16 | background-size: 260rpx 260rpx; 17 | border-radius: 130rpx; 18 | } 19 | 20 | 21 | 22 | /** 23 | * main 24 | */ 25 | .main 26 | { 27 | display: flex; 28 | flex-direction: column; 29 | align-items: center; 30 | padding: 40rpx 0 0 0; 31 | } 32 | .main .main-body 33 | { 34 | padding: 0 40rpx 60rpx 40rpx; 35 | } 36 | .main .main-body .main-body-title 37 | { 38 | display: block; 39 | font-size: 38rpx; 40 | font-weight: bold; 41 | color: #273b7a; 42 | padding: 0rpx 0 16rpx 0; 43 | } 44 | .main .main-body .main-body-text 45 | { 46 | display: block; 47 | font-size: 38rpx; 48 | font-weight: normal; 49 | color: #273b7a; 50 | padding: 10rpx 0 10rpx 0; 51 | } -------------------------------------------------------------------------------- /src/components/topToast/topToast.wxss: -------------------------------------------------------------------------------- 1 | /** 2 | * components/top-toast/top-toast.wxss 3 | */ 4 | .center-block 5 | { 6 | z-index: 2000; 7 | display: block; 8 | margin-right: auto; 9 | margin-left: auto; 10 | } 11 | 12 | 13 | /** 14 | * top-toast 15 | */ 16 | .top-toast 17 | { 18 | z-index: 2000; 19 | display: block; 20 | position: fixed; 21 | top: 0rpx; 22 | left: 0rpx; 23 | width: 100%; 24 | min-height: 120rpx; 25 | padding: 0; 26 | } 27 | .top-toast .top-toast-content 28 | { 29 | position: relative; 30 | padding: 30rpx; 31 | } 32 | .top-toast .top-toast-content .text 33 | { 34 | width: 100%; 35 | font-size: 38rpx; 36 | color: #FFFFFF; 37 | line-height: 58rpx; 38 | border-width: 0rpx; 39 | text-align: center; 40 | } 41 | 42 | .top-toast-ok { background: rgba( 3, 201, 3, 0.9 ); } 43 | .top-toast-wrn { background: rgba( 255, 153, 00, 0.9 ); } 44 | .top-toast-err { background: rgba( 237, 66, 75, 0.9 ); } 45 | .top-toast-def { background: rgba( 17, 17, 17, 0.9 ); } -------------------------------------------------------------------------------- /src/pages/done/done.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 11 | 12 | 13 | 14 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 这是一张「加密纸条」,解密提示: 26 | {{ sPasswordHint }} 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /src/pages/index/index.js: -------------------------------------------------------------------------------- 1 | // 2 | // index.js 3 | // 获取应用实例 4 | // 5 | var wurl = require( '../../libs/wurl.js' ); 6 | const app = getApp(); 7 | 8 | 9 | 10 | 11 | Page({ 12 | 13 | data: 14 | { 15 | }, 16 | 17 | onLoad: function ( oOptions ) 18 | { 19 | console.log( "##########" ); 20 | console.log( oOptions ); 21 | console.log("wurl.getCurrentPageUrl() = " + wurl.getCurrentPageUrl()); 22 | console.log("wurl.getCurrentPageArgs() = ", wurl.getCurrentPageArgs()); 23 | console.log("wurl.getCurrentPageUrlWithArgs() = " + wurl.getCurrentPageUrlWithArgs()); 24 | console.log( "##########" ); 25 | }, 26 | 27 | onShareAppMessage : function( res ) 28 | { 29 | if ('button' === res.from ) 30 | { 31 | // 来自页面内转发按钮 32 | console.log( res.target ); 33 | } 34 | 35 | return { 36 | title : '「加密纸条」', 37 | path : '/pages/index/index?fp=share', 38 | success : function( res ) 39 | { 40 | // 转发成功 41 | }, 42 | fail : function( res ) 43 | { 44 | // 转发失败 45 | } 46 | } 47 | } 48 | 49 | 50 | 51 | 52 | 53 | 54 | }) -------------------------------------------------------------------------------- /src/pages/index/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 超强 AES 256bits 加密,美国军方使用 8 | 9 | 10 | 端到端通讯,无服务器中转,非常安全 11 | 12 | 13 | 14 | 15 | 16 | 17 | 20 | 21 | 22 | 了解安全原理 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 创建加密纸条 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /src/libs/wdatetime.js: -------------------------------------------------------------------------------- 1 | const formatDateTime = oDate => 2 | { 3 | return formatDate( oDate ) + ' ' + formatTime( oDate ); 4 | } 5 | 6 | const formatDate = oDate => 7 | { 8 | const nYear = oDate.getFullYear(); 9 | const nMonth = oDate.getMonth() + 1; 10 | const nDay = oDate.getDate(); 11 | 12 | return [ nYear, nMonth, nDay ].map( _formatNumber ).join( '-' ); 13 | } 14 | 15 | const formatTime = oDate => 16 | { 17 | const nHour = oDate.getHours(); 18 | const nMinute = oDate.getMinutes(); 19 | const nSecond = oDate.getSeconds(); 20 | 21 | return [ nHour, nMinute, nSecond ].map( _formatNumber ).join( ':' ); 22 | } 23 | 24 | function getCurrentTimestamp() 25 | { 26 | return ( new Date() ).getTime(); 27 | } 28 | 29 | 30 | 31 | /** 32 | * @ private 33 | */ 34 | const _formatNumber = nItem => 35 | { 36 | return nItem > 9 ? new String( nItem ) : '0' + new String( nItem ); 37 | } 38 | 39 | 40 | 41 | 42 | /** 43 | * exports 44 | */ 45 | module.exports = 46 | { 47 | formatDateTime : formatDateTime, 48 | formatDate : formatDate, 49 | formatTime : formatTime, 50 | getCurrentTimestamp : getCurrentTimestamp 51 | }; -------------------------------------------------------------------------------- /src/models/secret/CSignature.js: -------------------------------------------------------------------------------- 1 | var wlib = require( '../../libs/wlib.js' ); 2 | var wdatetime = require( '../../libs/wdatetime.js' ); 3 | var wsha256 = require( '../../libs/cipher/wsha256.js' ); 4 | 5 | 6 | 7 | 8 | /** 9 | * CSignature 10 | */ 11 | class CSignature 12 | { 13 | constructor() 14 | { 15 | } 16 | 17 | 18 | /** 19 | * @ public 20 | * 21 | * @param array arrSourceList 22 | * @return string signature string 23 | */ 24 | createSignature( arrSourceList ) 25 | { 26 | var sRet; 27 | let i; 28 | let sSource; 29 | 30 | if ( ! wlib.isArray( arrSourceList ) || 0 == arrSourceList.length ) 31 | { 32 | return null; 33 | } 34 | 35 | // ... 36 | sRet = null; 37 | sSource = ''; 38 | 39 | for ( i = 0; i < arrSourceList.length; i ++ ) 40 | { 41 | sSource += '..........,..........'; 42 | sSource += new String( arrSourceList[ i ] ); 43 | sSource += '..........,..........'; 44 | } 45 | 46 | // ... 47 | return wsha256.hex( sSource ); 48 | } 49 | 50 | } 51 | 52 | 53 | 54 | 55 | /** 56 | * exports 57 | */ 58 | module.exports = 59 | { 60 | CSignature : CSignature 61 | }; -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 DeKuan, Inc. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /design/references/envelope-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | 11 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/app.js: -------------------------------------------------------------------------------- 1 | //app.js 2 | App({ 3 | onLaunch: function () { 4 | // // 展示本地存储能力 5 | // var logs = wx.getStorageSync('logs') || [] 6 | // logs.unshift(Date.now()) 7 | // wx.setStorageSync('logs', logs) 8 | 9 | // // 登录 10 | // wx.login({ 11 | // success: res => { 12 | // // 发送 res.code 到后台换取 openId, sessionKey, unionId 13 | // } 14 | // }) 15 | // // 获取用户信息 16 | // wx.getSetting({ 17 | // success: res => { 18 | // if (res.authSetting['scope.userInfo']) { 19 | // // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框 20 | // wx.getUserInfo({ 21 | // success: res => { 22 | // // 可以将 res 发送给后台解码出 unionId 23 | // this.globalData.userInfo = res.userInfo 24 | 25 | // // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回 26 | // // 所以此处加入 callback 以防止这种情况 27 | // if (this.userInfoReadyCallback) { 28 | // this.userInfoReadyCallback(res) 29 | // } 30 | // } 31 | // }) 32 | // } 33 | // } 34 | // }) 35 | 36 | 37 | }, 38 | globalData: { 39 | userInfo: null 40 | } 41 | }) -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | package-lock.json 2 | .DS_Store 3 | .idea 4 | 5 | 6 | 7 | # Logs 8 | logs 9 | *.log 10 | npm-debug.log* 11 | yarn-debug.log* 12 | yarn-error.log* 13 | 14 | # Runtime data 15 | pids 16 | *.pid 17 | *.seed 18 | *.pid.lock 19 | 20 | # Directory for instrumented libs generated by jscoverage/JSCover 21 | lib-cov 22 | 23 | # Coverage directory used by tools like istanbul 24 | coverage 25 | 26 | # nyc test coverage 27 | .nyc_output 28 | 29 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 30 | .grunt 31 | 32 | # Bower dependency directory (https://bower.io/) 33 | bower_components 34 | 35 | # node-waf configuration 36 | .lock-wscript 37 | 38 | # Compiled binary addons (http://nodejs.org/api/addons.html) 39 | build/Release 40 | 41 | # Dependency directories 42 | node_modules/ 43 | jspm_packages/ 44 | 45 | # Typescript v1 declaration files 46 | typings/ 47 | 48 | # Optional npm cache directory 49 | .npm 50 | 51 | # Optional eslint cache 52 | .eslintcache 53 | 54 | # Optional REPL history 55 | .node_repl_history 56 | 57 | # Output of 'npm pack' 58 | *.tgz 59 | 60 | # Yarn Integrity file 61 | .yarn-integrity 62 | 63 | # dotenv environment variables file 64 | .env 65 | 66 | -------------------------------------------------------------------------------- /src/pages/about/about.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 采用美国军方和美国联盟政府推荐使用的 AES 256bits 超强加密算法,确保了「加密纸条」非常安全。 19 | 20 | 21 | 22 | 23 | 每一个纸条只在本地进行强加密,然后,直接发送给微信好友。整个通讯过程不经过任何服务器中转,保证了「加密纸条」非常安全。 24 | 25 | 26 | 27 | 28 | 29 | 30 | 花了一天时间看了小程序文档,发现构架师设计得很棒,对小程序产生了浓厚兴趣,于是继续花了几天时间,便完成了这个小程序。 31 | 32 | 33 | 34 | 35 | 刘其星,曾就职于 360 公司,对网络安全有浓厚的兴趣与多年的实战工作经验。有兴趣的朋友可以加我微信 18811070903 批评指正。 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /src/pages/index/index.wxss: -------------------------------------------------------------------------------- 1 | /** 2 | * top info 3 | */ 4 | .topinfo 5 | { 6 | display: flex; 7 | flex-direction: column; 8 | align-items: center; 9 | background-color: #273b7a; 10 | padding: 30rpx 0 60rpx 0; 11 | } 12 | .topinfo .topinfo-line 13 | { 14 | padding: 5rpx 0 5rpx 0; 15 | } 16 | .topinfo .topinfo-line-text 17 | { 18 | font-size: 38rpx; 19 | font-weight: normal; 20 | color: #DDDDDD; 21 | } 22 | 23 | 24 | 25 | 26 | /** 27 | * product 28 | */ 29 | .product 30 | { 31 | display: flex; 32 | flex-direction: column; 33 | align-items: center; 34 | padding: 80rpx 0 0 0; 35 | } 36 | .product .logo 37 | { 38 | width: 260rpx; 39 | height: 260rpx; 40 | background-size: contain; 41 | } 42 | .product .link-view 43 | { 44 | padding: 10rpx 0 0 0; 45 | } 46 | .product .link-view .link-view-button 47 | { 48 | background-color: #FFFFFF; 49 | font-size: 34rpx; 50 | font-weight: normal; 51 | color: #273b7a; 52 | text-decoration: underline; 53 | cursor: pointer; 54 | } 55 | 56 | 57 | 58 | 59 | /** 60 | * main 61 | */ 62 | .main 63 | { 64 | display: flex; 65 | flex-direction: column; 66 | align-items: center; 67 | padding: 140rpx 0 0 0; 68 | } 69 | .main .link-view 70 | { 71 | } 72 | .main .link-view .link-view-button 73 | { 74 | background-color: #FFFFFF; 75 | font-size: 50rpx; 76 | font-weight: normal; 77 | color: #273b7a; 78 | text-decoration: underline; 79 | } -------------------------------------------------------------------------------- /src/components/happyLoading/happyLoading.wxss: -------------------------------------------------------------------------------- 1 | /** 2 | * components/top-toast/top-toast.wxss 3 | */ 4 | .center-block 5 | { 6 | display: block; 7 | margin-right: auto; 8 | margin-left: auto; 9 | 10 | position: fixed; 11 | z-index: 5000; 12 | width: 260rpx; 13 | height: 260rpx; 14 | top: 35%; 15 | left: 50%; 16 | margin-left: -130rpx; 17 | text-align: center; 18 | } 19 | 20 | 21 | 22 | 23 | /** 24 | * top-toast 25 | */ 26 | .de-loading 27 | { 28 | margin: 0; 29 | width: 260rpx; 30 | height: 260rpx; 31 | display: inline-block; 32 | vertical-align: middle; 33 | -webkit-animation: a 1s steps(36) infinite; 34 | animation: a 1s steps(36) infinite; 35 | background-repeat: no-repeat; 36 | background-size: 100%; 37 | 38 | border-radius: 130rpx; 39 | -webkit-box-shadow:0 0 100rpx rgba( 81, 124, 212, .8 ); 40 | -moz-box-shadow:0 0 100rpx rgba( 81, 124, 212, .8 ); 41 | box-shadow:0 0 100rpx rgba( 81, 124, 212, .8 ); 42 | } 43 | .de-loading.de-loading_transparent 44 | { 45 | } 46 | @-webkit-keyframes a 47 | { 48 | 0% { 49 | -webkit-transform:rotate(0deg); 50 | transform:rotate(0deg); 51 | } 52 | to { 53 | -webkit-transform:rotate(1turn); 54 | transform:rotate(1turn); 55 | } 56 | } 57 | @keyframes a 58 | { 59 | 0% { 60 | -webkit-transform:rotate(0deg); 61 | transform:rotate(0deg); 62 | } 63 | to { 64 | -webkit-transform:rotate(1turn); 65 | transform:rotate(1turn); 66 | } 67 | } -------------------------------------------------------------------------------- /src/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "pages": 3 | [ 4 | "pages/index/index", 5 | "pages/create/create", 6 | "pages/done/done", 7 | "pages/open/open", 8 | "pages/about/about" 9 | ], 10 | "window": 11 | { 12 | "navigationBarBackgroundColor" : "#273b7a", 13 | "navigationBarTitleText" : "加密纸条", 14 | "navigationBarTextStyle" : "white", 15 | "backgroundColor" : "#fff", 16 | "backgroundTextStyle" : "light", 17 | "enablePullDownRefresh" : false 18 | }, 19 | "networkTimeout": 20 | { 21 | "request" : 60000, 22 | "uploadFile" : 60000, 23 | "downloadFile" : 60000, 24 | "connectSocket" : 60000 25 | }, 26 | "tabBar": 27 | { 28 | "color" : "#F8F8F8", 29 | "selectedColor" : "#FFF", 30 | "backgroundColor" : "#273b7a", 31 | "borderStyle" : "white", 32 | "position" : "bottom", 33 | "list": 34 | [ 35 | { 36 | "pagePath": "pages/index/index", 37 | "text": "发送", 38 | "iconPath":"resources/icons/icon_send_81x81.png", 39 | "selectedIconPath": "resources/icons/icon_send_sel_81x81.png" 40 | }, 41 | { 42 | "pagePath": "pages/open/open", 43 | "text": "接收", 44 | "iconPath": "resources/icons/icon_receive_81x81.png", 45 | "selectedIconPath": "resources/icons/icon_receive_sel_81x81.png" 46 | }, 47 | { 48 | "pagePath": "pages/about/about", 49 | "text": "关于", 50 | "iconPath": "resources/icons/icon_about_81x81.png", 51 | "selectedIconPath": "resources/icons/icon_about_sel_81x81.png" 52 | } 53 | ] 54 | } 55 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 加密纸条 2 | 3 | ![LOGO](https://raw.githubusercontent.com/dekuan/mini.wx.secretends/master/src/resources/images/icon_secret_round_256x256.png) 4 | 5 | 6 | ### 超强加密 7 | 8 | 采用美国军方和美国联盟政府推荐使用的 AES 256bits 超强加密算法,确保了「加密纸条」非常安全。 9 | 10 | 11 | ### 开放源码 12 | 13 | 为了《加密纸条》更具公信力,让更多有兴趣的朋友参与进来开发,《加密纸条》彻底开放源码。 14 | 15 | 16 | 17 | ### 端对端通讯,无服务器转发 18 | 19 | 每一个纸条只在本地进行强加密,然后,直接发送给微信好友。整个通讯过程不经过任何服务器中转,保证了「加密纸条」非常安全。 20 | 21 | 22 | 23 | ### 关于软件 24 | 25 | 花了一天时间看了小程序文档,发现构架师设计得很棒,对小程序产生了浓厚兴趣,于是继续花了几天时间,便完成了这个小程序。 26 | 27 | 28 | 29 | ### 关于作者 30 | 刘其星,曾就职于 360 公司,对网络安全有浓厚的兴趣与多年的实战工作经验。有兴趣的朋友可以加我微信 18811070903 批评指正。 31 | 32 | 33 | ### 开始使用 34 | 35 | ![QrImage](https://raw.githubusercontent.com/dekuan/mini.wx.secretends/master/src/resources/screenshots/qr_secretends_860x860.jpg) 36 | 37 | 38 | ### 软件截图 39 | 40 | ![Screenshots](https://raw.githubusercontent.com/dekuan/mini.wx.secretends/master/src/resources/screenshots/secretends_01.png) 41 | 42 | ![Screenshots](https://raw.githubusercontent.com/dekuan/mini.wx.secretends/master/src/resources/screenshots/secretends_02.png) 43 | 44 | ![Screenshots](https://raw.githubusercontent.com/dekuan/mini.wx.secretends/master/src/resources/screenshots/secretends_03.png) 45 | 46 | ![Screenshots](https://raw.githubusercontent.com/dekuan/mini.wx.secretends/master/src/resources/screenshots/secretends_04.png) 47 | 48 | ![Screenshots](https://raw.githubusercontent.com/dekuan/mini.wx.secretends/master/src/resources/screenshots/secretends_05.png) 49 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /src/libs/wchar.js: -------------------------------------------------------------------------------- 1 | var wlib = require('wlib.js'); 2 | 3 | 4 | /** 5 | * check if the given string sString is a valid Chinese characters 6 | */ 7 | function isChineseChars( sString ) 8 | { 9 | let rePattern; 10 | let sNewString; 11 | 12 | if ( 0 === wlib.getStrLen( sString ) ) 13 | { 14 | return false; 15 | } 16 | 17 | // 18 | // /[\u4E00-\u9FA5\uF900-\uFA2D]/ 19 | // 说明: u4e00 - u9fbf : unicode CJK(中日韩)统一表意字符。u9fa5后至u9fbf为空 20 | // uF900 - uFAFF : 为unicode CJK 兼容象形文字 。uFA2D后至uFAFF为空 21 | // 具体可参考unicode编码表:http://www.nengcha.com/code/unicode/class/ 22 | // 23 | 24 | // \w 匹配 [0-9a-zA-Z_] 25 | // " -~" 匹配所有可见的英文字符 26 | // \uFF00-\uFFEF 部分中文全角符号 27 | 28 | // 下面是部分特殊的中文全角 29 | // 30 | // ¥ \xA5 31 | // … \u2026 32 | // — \u2014 33 | // · \xB7 34 | // 35 | // 【 \u3010 36 | // 】 \u3011 37 | // 、 \u3001 38 | // ; \uFF1B 39 | // ‘ \u2018 40 | // , \uFF0C 41 | // 。 \u3002 42 | // / \x2F 43 | // 「 \u300C 44 | // 」 \u300D 45 | // | \x7C 46 | // : \uFF1A 47 | // “ \u201C 48 | // ” \u201D 49 | // 《 \u300A 50 | // 》 \u300B 51 | // ? \uFF1F 52 | // ... 53 | rePattern = /^[\u4E00-\u9FA5\uF900-\uFA2D\uFF00-\uFFEF\w -~\xA5\xB7\u2026\u2014\u3010\u3011\u3001\uFF1B\u2018\uFF0C\u3002\x2F\u300C\u300D\x7C\uFF1A\u201C\u201D\u300A\u300B\uFF1F]*$/mg; 54 | sNewString = ( new String( sString ) ).replace( /\r?\n/g, "" ); 55 | 56 | return rePattern.test( sNewString ); 57 | } 58 | 59 | 60 | /** 61 | * exports 62 | */ 63 | module.exports = 64 | { 65 | isChineseChars : isChineseChars 66 | } -------------------------------------------------------------------------------- /src/pages/open/open.wxss: -------------------------------------------------------------------------------- 1 | /** 2 | * envelope 3 | */ 4 | .envelope 5 | { 6 | display: flex; 7 | flex-direction: column; 8 | align-items: center; 9 | padding: 90rpx 0 90rpx 0; 10 | background-color: #273b7a; 11 | } 12 | .envelope .envelope-icon 13 | { 14 | width: 420rpx; 15 | height: 320rpx; 16 | background-size: 420rpx 320rpx; 17 | } 18 | .envelope .envelope-empty 19 | { 20 | width: 420rpx; 21 | height: 336rpx; 22 | color: #fff; 23 | line-height: 320rpx; 24 | text-align: center; 25 | } 26 | 27 | 28 | /** 29 | * main 30 | */ 31 | .main 32 | { 33 | padding: 20rpx 0 60rpx 0; 34 | } 35 | .main .main-body 36 | { 37 | padding: 0 40rpx 0 40rpx; 38 | } 39 | .main .main-section 40 | { 41 | padding: 20rpx 0 10rpx 0; 42 | } 43 | .main .main-label 44 | { 45 | color: #273b7a; 46 | font-weight: bold; 47 | padding: 10rpx 0 10rpx 0; 48 | } 49 | .main .main-text 50 | { 51 | color: #273b7a; 52 | font-weight: normal; 53 | padding: 10rpx 0 10rpx 0; 54 | } 55 | .main .main-empty 56 | { 57 | color: #273b7a; 58 | } 59 | 60 | .main .decrypt-area 61 | { 62 | width: 100%; 63 | display: inline-flex; 64 | flex-direction: row; 65 | } 66 | .main .decrypt-area .decrypt-input-area 67 | { 68 | flex: 1; 69 | } 70 | .main .decrypt-area .decrypt-space-area 71 | { 72 | flex: 0 0 10rpx; 73 | } 74 | .main .decrypt-area .decrypt-button-area 75 | { 76 | flex: 0 0 140rpx; 77 | padding: 20rpx 0 0 0; 78 | } 79 | .main .decrypt-area .decrypt-input-area .decrypt-input-item 80 | { 81 | height: 90rpx; 82 | border-bottom: 2px solid #273b7a; 83 | } 84 | .main .decrypt-area .decrypt-input-area .decrypt-input-item-placeholder 85 | { 86 | color: #505b80; 87 | } 88 | .main .decrypt-area .decrypt-button-area .decrypt-button-item 89 | { 90 | width: 140rpx; 91 | height: 80rpx; 92 | color: #fff; 93 | font-size: 32rpx; 94 | background-color: #273b7a; 95 | } -------------------------------------------------------------------------------- /src/components/topToast/topToast.js: -------------------------------------------------------------------------------- 1 | // components/top-toast/top-toast.js 2 | Component 3 | ({ 4 | /** 5 | * 组件的属性列表 6 | */ 7 | properties: 8 | { 9 | show: 10 | { 11 | type: Boolean, 12 | value: false 13 | }, 14 | mode: 15 | { 16 | type: String, 17 | value: "err" 18 | }, 19 | delay: 20 | { 21 | type : Number, 22 | value : 3000 23 | }, 24 | 25 | // 显示的消息 26 | message : 27 | { 28 | // 类型(必填),目前接受的类型包括:String, Number, Boolean, Object, Array, null(表示任意类型) 29 | type : String, 30 | 31 | // 属性初始值(可选),如果未指定则会根据类型选择一个 32 | value : "消息内容" 33 | }, 34 | }, 35 | 36 | /** 37 | * 组件的初始数据/内部数据 38 | */ 39 | data: 40 | { 41 | m_nInterval : null 42 | }, 43 | 44 | /** 45 | * 组件的方法列表 46 | */ 47 | methods: 48 | { 49 | // 展示弹框 50 | showTopToast( sMode, sMessage ) 51 | { 52 | this.setData 53 | ({ 54 | message : sMessage, 55 | mode: sMode, 56 | show: true 57 | }); 58 | this._createInterval(); 59 | }, 60 | 61 | // 隐藏弹框 62 | hideTopToast() 63 | { 64 | this.setData 65 | ({ 66 | show: false 67 | }); 68 | }, 69 | 70 | /* 71 | * 内部私有方法 72 | * triggerEvent 用于触发事件 73 | */ 74 | _cancelEvent() 75 | { 76 | // 触发取消回调 77 | this.triggerEvent( "cancelEvent" ) 78 | }, 79 | 80 | /** 81 | * @ private 82 | */ 83 | _createInterval() 84 | { 85 | if ( null !== this.data.m_nInterval ) 86 | { 87 | clearTimeout( this.data.m_nInterval ); 88 | this.data.m_nInterval = null; 89 | } 90 | 91 | // ... 92 | setTimeout( () => 93 | { 94 | this.hideTopToast(); 95 | }, 96 | this.properties.delay > 0 ? this.properties.delay : 3000 97 | ); 98 | } 99 | 100 | 101 | 102 | } 103 | 104 | 105 | 106 | }) -------------------------------------------------------------------------------- /src/pages/done/done.js: -------------------------------------------------------------------------------- 1 | // 2 | // index.js 3 | // 获取应用实例 4 | // 5 | var wurl = require( '../../libs/wurl.js' ); 6 | var wlib = require( '../../libs/wlib.js' ); 7 | var mhint = require( '../../models/secret/CEncryptHint.js' ); 8 | 9 | const app = getApp(); 10 | 11 | var m_oTopToast = null; 12 | 13 | 14 | 15 | Page({ 16 | 17 | data: 18 | { 19 | sPasswordHint : '' 20 | }, 21 | 22 | onReady: function() 23 | { 24 | // 获得 dialog组件 25 | m_oTopToast = this.selectComponent("#id-top-toast"); 26 | 27 | // ... 28 | this._initPage(); 29 | }, 30 | 31 | onLoad: function( oOptions ) 32 | { 33 | console.log( "DONE / wurl.getCurrentPageArgs() = ", wurl.getCurrentPageArgs() ); 34 | }, 35 | 36 | 37 | onTopToastCancel: function ( oEvent ) 38 | { 39 | console.log( "onTopToastCancel", oEvent ); 40 | m_oTopToast.hideTopToast(); 41 | }, 42 | onShareAppMessage: function( oArgs ) 43 | { 44 | var oPageArgs; 45 | var sShareUrl; 46 | 47 | if ( 'button' === oArgs.from ) 48 | { 49 | // 来自页面内转发按钮 50 | console.log( oArgs.target ); 51 | } 52 | 53 | // ... 54 | oPageArgs = wurl.getCurrentPageArgs(); 55 | 56 | if ( ! wlib.isObjectWithKeys( oPageArgs, [ 'v', 'i', 'm', 's', 'h', 'ts', 'te', '_' ] ) ) 57 | { 58 | m_oTopToast.showTopToast( 'err', '参数错误,无法发送给朋友,请联系软件作者' ); 59 | return false; 60 | } 61 | 62 | // ... 63 | sShareUrl = "/pages/open/open?" + wurl.serializeArgs( oPageArgs ); 64 | 65 | return { 66 | title: '收到一张「加密纸条」', 67 | path: sShareUrl, 68 | success: function( oRes ) 69 | { 70 | console.log( "转发成功", oRes ); 71 | }, 72 | fail: function( oRes ) 73 | { 74 | console.log( "转发失败", oRes ); 75 | } 76 | }; 77 | }, 78 | 79 | 80 | /** 81 | * initalize page 82 | */ 83 | _initPage : function() 84 | { 85 | var oMHint; 86 | var oPageArgs; 87 | 88 | 89 | // ... 90 | oMHint = new mhint.CEncryptHint(); 91 | oPageArgs = wurl.getCurrentPageArgs(); 92 | 93 | if ( wlib.isObjectWithKeys( oPageArgs, 'h' ) ) 94 | { 95 | this.setData({ 96 | sPasswordHint: oMHint.decryptSecret( oPageArgs.h ) 97 | }); 98 | } 99 | else 100 | { 101 | m_oTopToast.showTopToast( 'err', '没有发现解密提示文字'); 102 | } 103 | 104 | } 105 | 106 | }) -------------------------------------------------------------------------------- /src/pages/open/open.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 11 | 12 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 24 | 25 | 26 | 没有消息 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |
40 | 41 | 42 | 50 | 51 | 52 | 53 | 57 | 58 | 59 |
60 |
61 | 62 | 收到一张「加密纸条」,解密提示: 63 | {{ sPasswordHint }} 64 | 65 |
66 | 67 | 68 | 69 | 70 | 这张「加密纸条」的内容是: 71 | {{ sMessage }} 72 | 73 | 74 | 75 | 76 | 77 | 78 | 感谢使用 AES 256bits 端对端超强加密的「加密纸条」,相信你偶尔还是会用到的! 79 | 80 | 81 |
82 | 83 |
84 | 85 | 86 |
87 | -------------------------------------------------------------------------------- /src/libs/wlib.js: -------------------------------------------------------------------------------- 1 | function isNumeric( oObj ) 2 | { 3 | return ( ! isNaN( oObj ) && "[object Number]" === Object.prototype.toString.call( oObj ) ); 4 | } 5 | 6 | function isString( oObj ) 7 | { 8 | return ( "[object String]" === Object.prototype.toString.call( oObj ) ); 9 | } 10 | 11 | function isBool( oObj ) 12 | { 13 | return ( "[object Boolean]" === Object.prototype.toString.call( oObj ) ); 14 | } 15 | 16 | function isArray( oObj ) 17 | { 18 | return ( "[object Array]" === Object.prototype.toString.call( oObj ) || 19 | "[object Uint8Array]" === Object.prototype.toString.call( oObj ) ); 20 | } 21 | 22 | function isObject( oObj ) 23 | { 24 | return ( "[object Object]" === Object.prototype.toString.call( oObj ) || 25 | "[object Blob]" === Object.prototype.toString.call( oObj ) ); 26 | } 27 | 28 | function isFunction( oObj ) 29 | { 30 | return ( "[object Function]" === Object.prototype.toString.call( oObj ) ); 31 | } 32 | 33 | function isValidDateObject( oObj ) 34 | { 35 | // d.valueOf() could also work 36 | return ( "[object Date]" === Object.prototype.toString.call( oObj ) && ( ! isNaN( oObj.getTime() ) ) ); 37 | } 38 | 39 | function isObjectWithKeys( oObj, vKey ) 40 | { 41 | var bRet; 42 | var vKeyKey; 43 | 44 | // ... 45 | bRet = false; 46 | 47 | if ( isObject( oObj ) ) 48 | { 49 | if ( isArray( vKey ) ) 50 | { 51 | bRet = true; 52 | for ( vKeyKey in vKey ) 53 | { 54 | if ( ! oObj.hasOwnProperty( vKey[ vKeyKey ] ) ) 55 | { 56 | bRet = false; 57 | break; 58 | } 59 | } 60 | } 61 | else if ( isString( vKey ) || isNumeric( vKey ) ) 62 | { 63 | bRet = oObj.hasOwnProperty( vKey ); 64 | } 65 | else if ( undefined === vKey ) 66 | { 67 | bRet = true; 68 | } 69 | } 70 | 71 | return bRet; 72 | } 73 | 74 | function trimStr( sString ) 75 | { 76 | if ( ! isString( sString ) ) 77 | { 78 | return ''; 79 | } 80 | 81 | // 82 | // Polyfill 83 | // 84 | if ( ! String.prototype.trim ) 85 | { 86 | String.prototype.trim = function() 87 | { 88 | return this.replace( /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '' ); 89 | }; 90 | } 91 | 92 | return ( new String( sString ) ).trim(); 93 | } 94 | 95 | function getStrLen( sString, bTrim ) 96 | { 97 | var nRet; 98 | var sNewString; 99 | 100 | if ( ! isString( sString ) && ! isNumeric( sString ) ) 101 | { 102 | return 0; 103 | } 104 | 105 | // ... 106 | nRet = 0; 107 | sNewString = new String( sString ); 108 | 109 | if ( isBool( bTrim ) && bTrim ) 110 | { 111 | nRet = trimStr( sNewString ).length; 112 | } 113 | else 114 | { 115 | nRet = sNewString.length; 116 | } 117 | 118 | return nRet; 119 | } 120 | 121 | function getRandomNumber( nLowerValue, nUpperValue ) 122 | { 123 | return Math.floor( Math.random() * ( nUpperValue - nLowerValue + 1 ) + nLowerValue ); 124 | } 125 | 126 | 127 | 128 | 129 | /** 130 | * exports 131 | */ 132 | module.exports = 133 | { 134 | isNumeric: isNumeric, 135 | isString: isString, 136 | isBool: isBool, 137 | isArray: isArray, 138 | isObject: isObject, 139 | isFunction: isFunction, 140 | isValidDateObject: isValidDateObject, 141 | isObjectWithKeys: isObjectWithKeys, 142 | trimStr: trimStr, 143 | getStrLen: getStrLen, 144 | getRandomNumber: getRandomNumber 145 | } -------------------------------------------------------------------------------- /src/libs/wurl.js: -------------------------------------------------------------------------------- 1 | var wlib = require( 'wlib.js' ); 2 | 3 | 4 | 5 | /** 6 | * get page url of current page 7 | */ 8 | function getCurrentPageUrl() 9 | { 10 | var sRet; 11 | var arrPages; 12 | var oCurrentPage; 13 | 14 | // ... 15 | sRet = ''; 16 | 17 | // 18 | // get stack array of current pages 19 | // 20 | arrPages = getCurrentPages(); 21 | if ( wlib.isArray( arrPages ) && 22 | arrPages.length > 0 ) 23 | { 24 | // 25 | // get the object of current page 26 | // 27 | oCurrentPage = arrPages[ arrPages.length - 1 ]; 28 | if ( wlib.isObjectWithKeys( oCurrentPage, [ 'route' ] ) ) 29 | { 30 | // url of current page 31 | sRet = oCurrentPage.route; 32 | } 33 | } 34 | 35 | return sRet; 36 | } 37 | 38 | 39 | /** 40 | * get all arguments as an object from current page 41 | */ 42 | function getCurrentPageArgs() 43 | { 44 | var oRet; 45 | var arrPages; 46 | var oCurrentPage; 47 | var oOptions; 48 | 49 | // ... 50 | oRet = null; 51 | 52 | // 53 | // get stack array of current pages 54 | // 55 | arrPages = getCurrentPages(); 56 | if ( wlib.isArray( arrPages ) && arrPages.length > 0 ) 57 | { 58 | // 59 | // get the object of current page 60 | // 61 | oCurrentPage = arrPages[ arrPages.length - 1 ]; 62 | if ( wlib.isObjectWithKeys(oCurrentPage, [ 'options' ] ) ) 63 | { 64 | // all arguments with url 65 | oOptions = oCurrentPage.options; 66 | if ( wlib.isObject( oOptions ) ) 67 | { 68 | // yes, there are arguments with the url 69 | oRet = oOptions; 70 | } 71 | } 72 | } 73 | 74 | return oRet; 75 | } 76 | 77 | 78 | /** 79 | * get current page url and its arguments 80 | */ 81 | function getCurrentPageUrlWithArgs() 82 | { 83 | var sRet; 84 | var sUrl; 85 | var oOptions; 86 | var sKey; 87 | var sValue; 88 | 89 | // ... 90 | sRet = ''; 91 | 92 | // ... 93 | sUrl = getCurrentPageUrl(); 94 | oOptions = getCurrentPageArgs(); 95 | 96 | if ( wlib.getStrLen( sUrl ) > 0 ) 97 | { 98 | // ... 99 | sRet = sUrl; 100 | 101 | if ( wlib.isObject( oOptions ) ) 102 | { 103 | // yes, there are arguments with the url 104 | // now we append them to the end of url 105 | sRet += '?'; 106 | 107 | for ( sKey in oOptions ) 108 | { 109 | sValue = new String( oOptions[ sKey ] ); 110 | sRet += ( sKey + '=' + sValue + '&' ); 111 | } 112 | 113 | sRet = sRet.substring( 0, sRet.length - 1 ); 114 | } 115 | } 116 | 117 | return sRet 118 | } 119 | 120 | /** 121 | * serialize args to query-string 122 | */ 123 | function serializeArgs( oArgs ) 124 | { 125 | var arrNamedArgs; 126 | var sKey; 127 | 128 | if ( ! wlib.isObjectWithKeys( oArgs ) ) 129 | { 130 | return null; 131 | } 132 | 133 | // ... 134 | arrNamedArgs = []; 135 | 136 | for ( sKey in oArgs ) 137 | { 138 | if ( oArgs.hasOwnProperty( sKey ) ) 139 | { 140 | arrNamedArgs.push 141 | ( 142 | encodeURIComponent( sKey ) + "=" + encodeURIComponent( oArgs[ sKey ] ) 143 | ); 144 | } 145 | } 146 | 147 | return arrNamedArgs.join( "&" ); 148 | } 149 | 150 | 151 | 152 | /** 153 | * exports 154 | */ 155 | module.exports = 156 | { 157 | getCurrentPageUrl : getCurrentPageUrl, 158 | getCurrentPageArgs : getCurrentPageArgs, 159 | getCurrentPageUrlWithArgs : getCurrentPageUrlWithArgs, 160 | serializeArgs : serializeArgs 161 | } -------------------------------------------------------------------------------- /src/pages/create/create.wxss: -------------------------------------------------------------------------------- 1 | /** 2 | * main and form 3 | */ 4 | .main 5 | { 6 | padding: 20rpx 0 0 0; 7 | } 8 | .main .main-form 9 | { 10 | margin: 0; 11 | } 12 | .main .main-form .main-form-section 13 | { 14 | display: flex; 15 | flex-direction: column; 16 | flex-wrap: nowrap; 17 | justify-content: flex-start; 18 | 19 | padding: 20rpx 30rpx 10rpx 30rpx; 20 | } 21 | 22 | .main .main-form .main-form-label 23 | { 24 | flex: 1; 25 | 26 | color: #273b7a; 27 | font-weight: bold; 28 | padding: 10rpx 20rpx 10rpx 0; 29 | } 30 | .main .main-form .main-form-content 31 | { 32 | position: relative; 33 | } 34 | 35 | .main .main-form .main-form-textarea 36 | { 37 | width: 100%; 38 | height: 120rpx; 39 | padding-bottom: 10rpx; 40 | border-bottom: 2px solid #273b7a; 41 | } 42 | .main .main-form .main-form-textarea-placeholder 43 | { 44 | color: #505b80; 45 | } 46 | 47 | .main .main-form .main-form-input 48 | { 49 | height: 90rpx; 50 | border-bottom: 2px solid #273b7a; 51 | } 52 | .main .main-form .main-form-input-placeholder 53 | { 54 | color: #505b80; 55 | } 56 | 57 | 58 | /** 59 | * password hint 60 | */ 61 | .main .main-form .main-form-content .password-hint-input 62 | { 63 | margin-right: 100rpx; 64 | } 65 | .main .main-form .main-form-content .password-hint-button 66 | { 67 | position: absolute; 68 | width: 76rpx; 69 | height: 76rpx; 70 | top: 10rpx; 71 | right: 0rpx; 72 | font-size: 60rpx; 73 | line-height: 38rpx; 74 | color: #273b7a; 75 | border-width: 0; 76 | border: 2px solid #273b7a; 77 | border-radius: 16rpx; 78 | text-align: center; 79 | } 80 | 81 | 82 | 83 | /** 84 | * password hint list 85 | */ 86 | .top-view 87 | { 88 | position: fixed; 89 | width: 100%; 90 | height: 100%; 91 | top: 0; 92 | left: 0; 93 | 94 | display: flex; 95 | flex-direction:row; 96 | 97 | z-index: 5000; 98 | background-color: rgba( 0, 0, 0, 0.2 ); 99 | } 100 | .top-view .space-left 101 | { 102 | flex: 0 0 30rpx; 103 | } 104 | .top-view .space-right 105 | { 106 | flex: 0 0 30rpx; 107 | } 108 | .top-view .password-hint 109 | { 110 | flex: 1; 111 | 112 | margin: 30rpx 0 30rpx 0; 113 | 114 | border: 2px solid #273b7a; 115 | border-radius: 10rpx; 116 | background-color: #fff; 117 | } 118 | .top-view .password-hint .password-hint-wrap 119 | { 120 | display: flex; 121 | flex-direction:column; 122 | flex-wrap: nowrap; 123 | justify-content: flex-start; 124 | 125 | width: 100%; 126 | height: 100%; 127 | } 128 | .top-view .password-hint .password-hint-wrap .password-hint-wrap-title 129 | { 130 | height: 120rpx; 131 | color: #273b7a; 132 | font-weight: bold; 133 | text-align: center; 134 | line-height: 120rpx; 135 | } 136 | .top-view .password-hint .password-hint-wrap .password-hint-wrap-list 137 | { 138 | flex: 1; 139 | height: 100%; 140 | overflow-y: auto; 141 | 142 | padding: 0rpx 10rpx 20rpx 40rpx; 143 | } 144 | .top-view .password-hint .password-hint-wrap .password-hint-wrap-list .password-hint-wrap-list-item 145 | { 146 | color: #273b7a; 147 | padding: 0 0 30rpx 0; 148 | } 149 | .top-view .password-hint .password-hint-wrap .password-hint-wrap-button 150 | { 151 | flex: 0 0 120rpx; 152 | padding: 10rpx 0 20rpx 0; 153 | } 154 | .top-view .password-hint .password-hint-wrap .password-hint-wrap-button .password-hint-wrap-button-close 155 | { 156 | width: 90%; 157 | color: #fff; 158 | background-color: #273b7a; 159 | } -------------------------------------------------------------------------------- /src/pages/create/create.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 内容 20 | 21 |