From 4fa3918c672019e6b737f65277b49fd4fe8fbb2a Mon Sep 17 00:00:00 2001 From: lnn19986213 <1667908750@qq.com> Date: Fri, 12 Aug 2022 17:28:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 262 +++ package.json | 13 +- src/components/loading.vue | 58 + src/components/msgList2/msgList2.vue | 217 ++ src/components/nothing/nothing.vue | 36 + src/components/pageLoading.vue | 89 + src/components/topLoading.vue | 71 + .../uni-swipe-action-item/bindingx.js | 245 +++ .../uni-swipe-action-item/index.wxs | 204 ++ .../uni-swipe-action-item/mpalipay.js | 160 ++ .../uni-swipe-action-item/mpother.js | 158 ++ src/components/uni-swipe-action-item/mpwxs.js | 97 + .../uni-swipe-action-item.vue | 270 +++ .../uni-swipe-action/uni-swipe-action.vue | 58 + src/pages.json | 21 +- src/pages/PolicyExpress/PolicyExpress.vue | 21 + src/pages/PublishWorks/PublishWorks.vue | 2 +- src/pages/famousArts/artistList.vue | 42 +- src/pages/famousArts/famousArts.vue | 19 +- src/pages/my/My.vue | 103 +- src/pages/orderHall/addOrder.vue | 54 +- src/pages/pageHome/pageHome.vue | 16 +- src/pages/shop/Shop.vue | 5 +- src/pagesA/msgTalk/msgTalk.vue | 145 ++ src/pagesA/talkPage/talkPage.vue | 1825 +++++++++++++++++ src/request/interface.js | 2 +- src/static/nogoods.png | Bin 0 -> 7729 bytes src/static/play.png | Bin 0 -> 2408 bytes src/static/talk/add.png | Bin 0 -> 1710 bytes src/static/talk/close.png | Bin 0 -> 1938 bytes src/static/talk/cyy.png | Bin 0 -> 1256 bytes src/static/talk/dg.png | Bin 0 -> 1136 bytes src/static/talk/jp.png | Bin 0 -> 1998 bytes src/static/talk/myt.png | Bin 0 -> 8353 bytes src/static/talk/push.png | Bin 0 -> 1969 bytes src/static/talk/t1.png | Bin 0 -> 1606 bytes src/static/talk/t2.png | Bin 0 -> 1031 bytes src/static/talk/t3.png | Bin 0 -> 1573 bytes src/static/talk/t4.png | Bin 0 -> 2013 bytes src/static/talk/t5.png | Bin 0 -> 15274 bytes src/static/talk/talk.png | Bin 0 -> 3435 bytes src/static/talk/tt.png | Bin 0 -> 8307 bytes src/static/txIcon.png | Bin 0 -> 13122 bytes src/uni.scss | 1 + .../uni-datetime-picker/changelog.md | 93 + .../uni-datetime-picker/calendar-item.vue | 185 ++ .../uni-datetime-picker/calendar.vue | 907 ++++++++ .../uni-datetime-picker/i18n/en.json | 22 + .../uni-datetime-picker/i18n/index.js | 8 + .../uni-datetime-picker/i18n/zh-Hans.json | 22 + .../uni-datetime-picker/i18n/zh-Hant.json | 22 + .../uni-datetime-picker/keypress.js | 45 + .../uni-datetime-picker/time-picker.vue | 927 +++++++++ .../uni-datetime-picker.vue | 1012 +++++++++ .../components/uni-datetime-picker/util.js | 410 ++++ .../uni-datetime-picker/package.json | 90 + src/uni_modules/uni-datetime-picker/readme.md | 21 + src/utils/utils.js | 646 +++++- 58 files changed, 8519 insertions(+), 85 deletions(-) create mode 100644 src/components/loading.vue create mode 100644 src/components/msgList2/msgList2.vue create mode 100644 src/components/nothing/nothing.vue create mode 100644 src/components/pageLoading.vue create mode 100644 src/components/topLoading.vue create mode 100644 src/components/uni-swipe-action-item/bindingx.js create mode 100644 src/components/uni-swipe-action-item/index.wxs create mode 100644 src/components/uni-swipe-action-item/mpalipay.js create mode 100644 src/components/uni-swipe-action-item/mpother.js create mode 100644 src/components/uni-swipe-action-item/mpwxs.js create mode 100644 src/components/uni-swipe-action-item/uni-swipe-action-item.vue create mode 100644 src/components/uni-swipe-action/uni-swipe-action.vue create mode 100644 src/pagesA/msgTalk/msgTalk.vue create mode 100644 src/pagesA/talkPage/talkPage.vue create mode 100644 src/static/nogoods.png create mode 100644 src/static/play.png create mode 100644 src/static/talk/add.png create mode 100644 src/static/talk/close.png create mode 100644 src/static/talk/cyy.png create mode 100644 src/static/talk/dg.png create mode 100644 src/static/talk/jp.png create mode 100644 src/static/talk/myt.png create mode 100644 src/static/talk/push.png create mode 100644 src/static/talk/t1.png create mode 100644 src/static/talk/t2.png create mode 100644 src/static/talk/t3.png create mode 100644 src/static/talk/t4.png create mode 100644 src/static/talk/t5.png create mode 100644 src/static/talk/talk.png create mode 100644 src/static/talk/tt.png create mode 100644 src/static/txIcon.png create mode 100644 src/uni_modules/uni-datetime-picker/changelog.md create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/keypress.js create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js create mode 100644 src/uni_modules/uni-datetime-picker/package.json create mode 100644 src/uni_modules/uni-datetime-picker/readme.md diff --git a/package-lock.json b/package-lock.json index b82ab3f..86fed66 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5645,6 +5645,15 @@ "keygrip": "~1.1.0" } }, + "copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "requires": { + "is-what": "^3.14.1" + } + }, "copy-concurrently": { "version": "1.0.5", "resolved": "https://registry.npmmirror.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz", @@ -8296,6 +8305,13 @@ "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", "dev": true }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "optional": true + }, "immediate": { "version": "3.0.6", "resolved": "https://registry.npmmirror.com/immediate/-/immediate-3.0.6.tgz", @@ -8889,6 +8905,12 @@ "call-bind": "^1.0.2" } }, + "is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/is-windows/-/is-windows-1.0.2.tgz", @@ -11013,6 +11035,119 @@ "invert-kv": "^3.0.0" } }, + "less": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", + "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", + "dev": true, + "requires": { + "copy-anything": "^2.0.1", + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "parse-node-version": "^1.0.1", + "source-map": "~0.6.0", + "tslib": "^2.3.0" + }, + "dependencies": { + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "optional": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "less-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-6.2.0.tgz", + "integrity": "sha512-Cl5h95/Pz/PWub/tCBgT1oNMFeH1WTD33piG80jn5jr12T4XbxZcjThwNXDQ7AG649WEynuIzO4b0+2Tn9Qolg==", + "dev": true, + "requires": { + "clone": "^2.1.2", + "less": "^3.11.3", + "loader-utils": "^2.0.0", + "schema-utils": "^2.7.0" + }, + "dependencies": { + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true + }, + "less": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/less/-/less-3.13.1.tgz", + "integrity": "sha512-SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw==", + "dev": true, + "requires": { + "copy-anything": "^2.0.1", + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "native-request": "^1.0.5", + "source-map": "~0.6.0", + "tslib": "^1.10.0" + } + }, + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "optional": true + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, "leven": { "version": "3.1.0", "resolved": "https://registry.npmmirror.com/leven/-/leven-3.1.0.tgz", @@ -11722,12 +11857,53 @@ "to-regex": "^3.0.1" } }, + "native-request": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.1.0.tgz", + "integrity": "sha512-uZ5rQaeRn15XmpgE0xoPL8YWqcX90VtCFglYwAgkvKM5e8fog+vePLAhHxuuv/gRkrQxIeh5U3q9sMNUrENqWw==", + "dev": true, + "optional": true + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "needle": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.1.0.tgz", + "integrity": "sha512-gCE9weDhjVGCRqS8dwDR/D3GTAeyXLXuqp7I8EzH6DllZGXSUyxuqqLh+YX9rMAWaaTFyVAg6rHGL25dqvczKw==", + "dev": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz", @@ -12400,6 +12576,12 @@ "lines-and-columns": "^1.1.6" } }, + "parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true + }, "parse5": { "version": "3.0.3", "resolved": "https://registry.npmmirror.com/parse5/-/parse5-3.0.3.tgz", @@ -14278,6 +14460,86 @@ } } }, + "sass-resources-loader": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/sass-resources-loader/-/sass-resources-loader-2.2.5.tgz", + "integrity": "sha512-po8rfETH9cOQACWxubT/1CCu77KjxwRtCDm6QAXZH99aUHBydwSoxdIjC40SGp/dcS/FkSNJl0j1VEojGZqlvQ==", + "dev": true, + "requires": { + "async": "^3.2.3", + "chalk": "^4.1.0", + "glob": "^7.1.6", + "loader-utils": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz", diff --git a/package.json b/package.json index 3c292dc..5d556dc 100644 --- a/package.json +++ b/package.json @@ -89,11 +89,14 @@ "babel-plugin-import": "^1.11.0", "cross-env": "^7.0.2", "jest": "^25.4.0", + "less": "^4.1.3", + "less-loader": "^6.2.0", "mini-types": "*", "miniprogram-api-typings": "*", "node-sass": "^4.14.1", "postcss-comment": "^2.0.0", "sass-loader": "^10.0.1", + "sass-resources-loader": "^2.2.5", "vue-template-compiler": "^2.6.11" }, "browserslist": [ @@ -102,5 +105,13 @@ ], "uni-app": { "scripts": {} - } + }, + "description": "```\r yarn install\r ```", + "main": "babel.config.js", + "repository": { + "type": "git", + "url": "git@git.zdool.com:xs/yyx/h5.git" + }, + "author": "", + "license": "ISC" } diff --git a/src/components/loading.vue b/src/components/loading.vue new file mode 100644 index 0000000..c6a9ea8 --- /dev/null +++ b/src/components/loading.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/src/components/msgList2/msgList2.vue b/src/components/msgList2/msgList2.vue new file mode 100644 index 0000000..9c5a7cf --- /dev/null +++ b/src/components/msgList2/msgList2.vue @@ -0,0 +1,217 @@ + + + + + diff --git a/src/components/nothing/nothing.vue b/src/components/nothing/nothing.vue new file mode 100644 index 0000000..9eb2785 --- /dev/null +++ b/src/components/nothing/nothing.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/src/components/pageLoading.vue b/src/components/pageLoading.vue new file mode 100644 index 0000000..622ca79 --- /dev/null +++ b/src/components/pageLoading.vue @@ -0,0 +1,89 @@ + + + + + diff --git a/src/components/topLoading.vue b/src/components/topLoading.vue new file mode 100644 index 0000000..7b2016c --- /dev/null +++ b/src/components/topLoading.vue @@ -0,0 +1,71 @@ + + + + + diff --git a/src/components/uni-swipe-action-item/bindingx.js b/src/components/uni-swipe-action-item/bindingx.js new file mode 100644 index 0000000..50b9241 --- /dev/null +++ b/src/components/uni-swipe-action-item/bindingx.js @@ -0,0 +1,245 @@ +const BindingX = uni.requireNativePlugin('bindingx'); +const dom = uni.requireNativePlugin('dom'); +const animation = uni.requireNativePlugin('animation'); + +export default { + data() { + return { + right: 0, + button: [], + preventGesture: false + } + }, + + watch: { + show(newVal) { + if (!this.position || JSON.stringify(this.position) === '{}') return; + if (this.autoClose) return + if (this.isInAnimation) return + if (newVal) { + this.open() + } else { + this.close() + } + }, + }, + created() { + if (this.swipeaction.children !== undefined) { + this.swipeaction.children.push(this) + } + }, + mounted() { + this.boxSelector = this.getEl(this.$refs['selector-box-hock']); + this.selector = this.getEl(this.$refs['selector-content-hock']); + this.buttonSelector = this.getEl(this.$refs['selector-button-hock']); + this.position = {} + this.x = 0 + setTimeout(() => { + this.getSelectorQuery() + }, 200) + }, + beforeDestroy() { + if (this.timing) { + BindingX.unbind({ + token: this.timing.token, + eventType: 'timing' + }) + } + if (this.eventpan) { + BindingX.unbind({ + token: this.eventpan.token, + eventType: 'pan' + }) + } + this.swipeaction.children.forEach((item, index) => { + if (item === this) { + this.swipeaction.children.splice(index, 1) + } + }) + }, + methods: { + onClick(index, item) { + this.$emit('click', { + content: item, + index + }) + }, + touchstart(e) { + if (this.isInAnimation) return + if (this.stop) return + this.stop = true + if (this.autoClose) { + this.swipeaction.closeOther(this) + } + let endWidth = this.right + let boxStep = `(x+${this.x})` + let pageX = `${boxStep}> ${-endWidth} && ${boxStep} < 0?${boxStep}:(x+${this.x} < 0? ${-endWidth}:0)` + + let props = [{ + element: this.selector, + property: 'transform.translateX', + expression: pageX + }] + + let left = 0 + for (let i = 0; i < this.options.length; i++) { + let buttonSelectors = this.getEl(this.$refs['button-hock'][i]); + if (this.button.length === 0 || !this.button[i] || !this.button[i].width) return + let moveMix = endWidth - left + left += this.button[i].width + let step = `(${this.x}+x)/${endWidth}` + let moveX = `(${step}) * ${moveMix}` + let pageButtonX = `${moveX}&& (x+${this.x} > ${-endWidth})?${moveX}:${-moveMix}` + props.push({ + element: buttonSelectors, + property: 'transform.translateX', + expression: pageButtonX + }) + } + + this.eventpan = this._bind(this.boxSelector, props, 'pan', (e) => { + if (e.state === 'end') { + this.x = e.deltaX + this.x; + if (this.x < -endWidth) { + this.x = -endWidth + } + if (this.x > 0) { + this.x = 0 + } + this.stop = false + this.bindTiming(); + } + }) + }, + touchend(e) { + this.$nextTick(() => { + if (this.isopen && !this.isDrag && !this.isInAnimation) { + this.close() + } + }) + }, + bindTiming() { + if (this.isopen) { + this.move(this.x, -this.right) + } else { + this.move(this.x, -40) + } + }, + move(left, value) { + if (left >= value) { + this.close() + } else { + this.open() + } + }, + /** + * 开启swipe + */ + open() { + this.animation(true) + }, + /** + * 关闭swipe + */ + close() { + this.animation(false) + }, + /** + * 开启关闭动画 + * @param {Object} type + */ + animation(type) { + this.isDrag = true + let endWidth = this.right + let time = 200 + this.isInAnimation = true; + + let exit = `t>${time}`; + let translate_x_expression = `easeOutExpo(t,${this.x},${type?(-endWidth-this.x):(-this.x)},${time})` + let props = [{ + element: this.selector, + property: 'transform.translateX', + expression: translate_x_expression + }] + + let left = 0 + for (let i = 0; i < this.options.length; i++) { + let buttonSelectors = this.getEl(this.$refs['button-hock'][i]); + if (this.button.length === 0 || !this.button[i] || !this.button[i].width) return + let moveMix = endWidth - left + left += this.button[i].width + let step = `${this.x}/${endWidth}` + let moveX = `(${step}) * ${moveMix}` + let pageButtonX = `easeOutExpo(t,${moveX},${type ? -moveMix + '-' + moveX: 0 + '-' + moveX},${time})` + props.push({ + element: buttonSelectors, + property: 'transform.translateX', + expression: pageButtonX + }) + } + + this.timing = BindingX.bind({ + eventType: 'timing', + exitExpression: exit, + props: props + }, (e) => { + if (e.state === 'end' || e.state === 'exit') { + this.x = type ? -endWidth : 0 + this.isInAnimation = false; + + this.isopen = this.isopen || false + if (this.isopen !== type) { + this.$emit('change', type) + } + this.isopen = type + this.isDrag = false + } + }); + }, + /** + * 绑定 BindingX + * @param {Object} anchor + * @param {Object} props + * @param {Object} fn + */ + _bind(anchor, props, eventType, fn) { + return BindingX.bind({ + anchor, + eventType, + props + }, (e) => { + typeof(fn) === 'function' && fn(e) + }); + }, + /** + * 获取ref + * @param {Object} el + */ + getEl(el) { + return el.ref + }, + /** + * 获取节点信息 + */ + getSelectorQuery() { + dom.getComponentRect(this.$refs['selector-content-hock'], (data) => { + if (this.position.content) return + this.position.content = data.size + }) + for (let i = 0; i < this.options.length; i++) { + dom.getComponentRect(this.$refs['button-hock'][i], (data) => { + if (!this.button) { + this.button = [] + } + if (this.options.length === this.button.length) return + this.button.push(data.size) + this.right += data.size.width + if (this.autoClose) return + if (this.show) { + this.open() + } + }) + } + } + } +} diff --git a/src/components/uni-swipe-action-item/index.wxs b/src/components/uni-swipe-action-item/index.wxs new file mode 100644 index 0000000..24c94bb --- /dev/null +++ b/src/components/uni-swipe-action-item/index.wxs @@ -0,0 +1,204 @@ +/** + * 监听页面内值的变化,主要用于动态开关swipe-action + * @param {Object} newValue + * @param {Object} oldValue + * @param {Object} ownerInstance + * @param {Object} instance + */ +function sizeReady(newValue, oldValue, ownerInstance, instance) { + var state = instance.getState() + state.position = JSON.parse(newValue) + if (!state.position || state.position.length === 0) return + var show = state.position[0].show + state.left = state.left || state.position[0].left; + // 通过用户变量,开启或关闭 + if (show) { + openState(true, instance, ownerInstance) + } else { + openState(false, instance, ownerInstance) + } +} + +/** + * 开始触摸操作 + * @param {Object} e + * @param {Object} ins + */ +function touchstart(e, ins) { + var instance = e.instance; + var state = instance.getState(); + var pageX = e.touches[0].pageX; + // 开始触摸时移除动画类 + instance.removeClass('ani'); + var owner = ins.selectAllComponents('.button-hock') + for (var i = 0; i < owner.length; i++) { + owner[i].removeClass('ani'); + } + // state.position = JSON.parse(instance.getDataset().position); + state.left = state.left || state.position[0].left; + // 获取最终按钮组的宽度 + state.width = pageX - state.left; + ins.callMethod('closeSwipe') +} + +/** + * 开始滑动操作 + * @param {Object} e + * @param {Object} ownerInstance + */ +function touchmove(e, ownerInstance) { + var instance = e.instance; + var disabled = instance.getDataset().disabled + var state = instance.getState() + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false; + + if (disabled) return + var pageX = e.touches[0].pageX; + move(pageX - state.width, instance, ownerInstance) +} + +/** + * 结束触摸操作 + * @param {Object} e + * @param {Object} ownerInstance + */ +function touchend(e, ownerInstance) { + var instance = e.instance; + var disabled = instance.getDataset().disabled + var state = instance.getState() + + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false; + + if (disabled) return + // 滑动过程中触摸结束,通过阙值判断是开启还是关闭 + // fixed by mehaotian 定时器解决点击按钮,touchend 触发比 click 事件时机早的问题 ,主要是 ios13 + moveDirection(state.left, -40, instance, ownerInstance) +} + +/** + * 设置移动距离 + * @param {Object} value + * @param {Object} instance + * @param {Object} ownerInstance + */ +function move(value, instance, ownerInstance) { + var state = instance.getState() + // 获取可滑动范围 + var x = Math.max(-state.position[1].width, Math.min((value), 0)); + state.left = x; + instance.setStyle({ + transform: 'translateX(' + x + 'px)', + '-webkit-transform': 'translateX(' + x + 'px)' + }) + // 折叠按钮动画 + buttonFold(x, instance, ownerInstance) +} + +/** + * 移动方向判断 + * @param {Object} left + * @param {Object} value + * @param {Object} ownerInstance + * @param {Object} ins + */ +function moveDirection(left, value, ins, ownerInstance) { + var state = ins.getState() + var position = state.position + var isopen = state.isopen + if (!position[1].width) { + openState(false, ins, ownerInstance) + return + } + // 如果已经是打开状态,进行判断是否关闭,还是保留打开状态 + if (isopen) { + if (-left <= position[1].width) { + openState(false, ins, ownerInstance) + } else { + openState(true, ins, ownerInstance) + } + return + } + // 如果是关闭状态,进行判断是否打开,还是保留关闭状态 + if (left <= value) { + openState(true, ins, ownerInstance) + } else { + openState(false, ins, ownerInstance) + } +} + +/** + * 设置按钮移动距离 + * @param {Object} value + * @param {Object} instance + * @param {Object} ownerInstance + */ +function buttonFold(value, instance, ownerInstance) { + var ins = ownerInstance.selectAllComponents('.button-hock'); + var state = instance.getState(); + var position = state.position; + var arr = []; + var w = 0; + for (var i = 0; i < ins.length; i++) { + if (!ins[i].getDataset().button) return + var btnData = JSON.parse(ins[i].getDataset().button) + + // fix by mehaotian TODO 在 app-vue 中,字符串转对象,需要转两次,这里先这么兼容 + if (typeof(btnData) === 'string') { + btnData = JSON.parse(btnData) + } + + var button = btnData[i] && btnData[i].width || 0 + w += button + arr.push(-w) + // 动态计算按钮组每个按钮的折叠动画移动距离 + var distance = arr[i - 1] + value * (arr[i - 1] / position[1].width) + if (i != 0) { + ins[i].setStyle({ + transform: 'translateX(' + distance + 'px)', + }) + } + } +} + +/** + * 开启状态 + * @param {Boolean} type + * @param {Object} ins + * @param {Object} ownerInstance + */ +function openState(type, ins, ownerInstance) { + var state = ins.getState() + var position = state.position + if (state.isopen === undefined) { + state.isopen = false + } + // 只有状态有改变才会通知页面改变状态 + if (state.isopen !== type) { + // 通知页面,已经打开 + ownerInstance.callMethod('change', { + open: type + }) + } + // 设置打开和移动状态 + state.isopen = type + + + // 添加动画类 + ins.addClass('ani'); + var owner = ownerInstance.selectAllComponents('.button-hock') + for (var i = 0; i < owner.length; i++) { + owner[i].addClass('ani'); + } + // 设置最终移动位置 + move(type ? -position[1].width : 0, ins, ownerInstance) + +} + +module.exports = { + sizeReady: sizeReady, + touchstart: touchstart, + touchmove: touchmove, + touchend: touchend +} diff --git a/src/components/uni-swipe-action-item/mpalipay.js b/src/components/uni-swipe-action-item/mpalipay.js new file mode 100644 index 0000000..2b494a4 --- /dev/null +++ b/src/components/uni-swipe-action-item/mpalipay.js @@ -0,0 +1,160 @@ +export default { + data() { + return { + isshow: false, + viewWidth: 0, + buttonWidth: 0, + disabledView: false, + x: 0, + transition: false + } + }, + watch: { + show(newVal) { + if (this.autoClose) return + if (newVal) { + this.open() + } else { + this.close() + } + }, + }, + created() { + if (this.swipeaction.children !== undefined) { + this.swipeaction.children.push(this) + } + }, + beforeDestroy() { + this.swipeaction.children.forEach((item, index) => { + if (item === this) { + this.swipeaction.children.splice(index, 1) + } + }) + }, + mounted() { + this.isopen = false + this.transition = true + setTimeout(() => { + this.getQuerySelect() + }, 50) + + }, + methods: { + onClick(index, item) { + this.$emit('click', { + content: item, + index + }) + }, + touchstart(e) { + let { + pageX, + pageY + } = e.changedTouches[0] + this.transition = false + this.startX = pageX + if (this.autoClose) { + this.swipeaction.closeOther(this) + } + }, + touchmove(e) { + let { + pageX, + } = e.changedTouches[0] + this.slide = this.getSlide(pageX) + if (this.slide === 0) { + this.disabledView = false + } + + }, + touchend(e) { + this.stop = false + this.transition = true + if (this.isopen) { + if (this.moveX === -this.buttonWidth) { + this.close() + return + } + this.move() + } else { + if (this.moveX === 0) { + this.close() + return + } + this.move() + } + }, + open() { + this.x = this.moveX + this.$nextTick(() => { + this.x = -this.buttonWidth + this.moveX = this.x + + if(!this.isopen){ + this.isopen = true + this.$emit('change', true) + } + }) + }, + close() { + this.x = this.moveX + this.$nextTick(() => { + this.x = 0 + this.moveX = this.x + if(this.isopen){ + this.isopen = false + this.$emit('change', false) + } + }) + }, + move() { + if (this.slide === 0) { + this.open() + } else { + this.close() + } + }, + onChange(e) { + let x = e.detail.x + this.moveX = x + if (x >= this.buttonWidth) { + this.disabledView = true + this.$nextTick(() => { + this.x = this.buttonWidth + }) + } + }, + getSlide(x) { + if (x >= this.startX) { + this.startX = x + return 1 + } else { + this.startX = x + return 0 + } + + }, + getQuerySelect() { + const query = uni.createSelectorQuery().in(this); + query.selectAll('.viewWidth-hook').boundingClientRect(data => { + + this.viewWidth = data[0].width + this.buttonWidth = data[1].width + this.transition = false + this.$nextTick(() => { + this.transition = true + }) + + if (!this.buttonWidth) { + this.disabledView = true + } + + if (this.autoClose) return + if (this.show) { + this.open() + } + }).exec(); + + } + } +} diff --git a/src/components/uni-swipe-action-item/mpother.js b/src/components/uni-swipe-action-item/mpother.js new file mode 100644 index 0000000..3534b81 --- /dev/null +++ b/src/components/uni-swipe-action-item/mpother.js @@ -0,0 +1,158 @@ +// #ifdef APP-NVUE +const dom = weex.requireModule('dom'); +// #endif +export default { + data() { + return { + uniShow: false, + left: 0 + } + }, + computed: { + moveLeft() { + return `translateX(${this.left}px)` + } + }, + watch: { + show(newVal) { + if (!this.position || JSON.stringify(this.position) === '{}') return; + if (this.autoClose) return + if (newVal) { + this.$emit('change', true) + this.open() + } else { + this.$emit('change', false) + this.close() + } + } + }, + mounted() { + this.position = {} + if (this.swipeaction.children !== undefined) { + this.swipeaction.children.push(this) + } + setTimeout(() => { + this.getSelectorQuery() + }, 100) + }, + beforeDestoy() { + this.swipeaction.children.forEach((item, index) => { + if (item === this) { + this.swipeaction.children.splice(index, 1) + } + }) + }, + methods: { + onClick(index, item) { + this.$emit('click', { + content: item, + index + }) + this.close() + }, + touchstart(e) { + const { + pageX + } = e.touches[0] + if (this.disabled) return + const left = this.position.content.left + if (this.autoClose) { + this.swipeaction.closeOther(this) + } + this.width = pageX - left + if (this.isopen) return + if (this.uniShow) { + this.uniShow = false + this.isopen = true + this.openleft = this.left + this.position.button.width + } + }, + touchmove(e, index) { + if (this.disabled) return + const { + pageX + } = e.touches[0] + this.setPosition(pageX) + }, + touchend() { + if (this.disabled) return + if (this.isopen) { + this.move(this.openleft, 0) + return + } + this.move(this.left, -40) + }, + setPosition(x, y) { + if (!this.position.button.width) { + return + } + // this.left = x - this.width + this.setValue(x - this.width) + }, + setValue(value) { + // 设置最大最小值 + this.left = Math.max(-this.position.button.width, Math.min(parseInt(value), 0)) + this.position.content.left = this.left + if (this.isopen) { + this.openleft = this.left + this.position.button.width + } + }, + move(left, value) { + if (left >= value) { + this.$emit('change', false) + this.close() + } else { + this.$emit('change', true) + this.open() + } + }, + open() { + this.uniShow = true + this.left = -this.position.button.width + this.setValue(-this.position.button.width) + }, + close() { + this.uniShow = true + this.setValue(0) + setTimeout(() => { + this.uniShow = false + this.isopen = false + }, 300) + }, + getSelectorQuery() { + // #ifndef APP-NVUE + const views = uni.createSelectorQuery() + .in(this) + views + .selectAll('.selector-query-hock') + .boundingClientRect(data => { + this.position.content = data[1] + this.position.button = data[0] + if (this.autoClose) return + if (this.show) { + this.open() + } else { + this.close() + } + }) + .exec() + // #endif + // #ifdef APP-NVUE + dom.getComponentRect(this.$refs['selector-content-hock'], (data) => { + if (this.position.content) return + this.position.content = data.size + }) + dom.getComponentRect(this.$refs['selector-button-hock'], (data) => { + if (this.position.button) return + this.position.button = data.size + if (this.autoClose) return + if (this.show) { + this.open() + } else { + this.close() + } + }) + // #endif + } + } +} diff --git a/src/components/uni-swipe-action-item/mpwxs.js b/src/components/uni-swipe-action-item/mpwxs.js new file mode 100644 index 0000000..f9d2813 --- /dev/null +++ b/src/components/uni-swipe-action-item/mpwxs.js @@ -0,0 +1,97 @@ +export default { + data() { + return { + position: [], + button: [] + } + }, + computed: { + pos() { + return JSON.stringify(this.position) + }, + btn() { + return JSON.stringify(this.button) + } + }, + watch: { + show(newVal) { + if (this.autoClose) return + let valueObj = this.position[0] + if (!valueObj) { + this.init() + return + } + valueObj.show = newVal + this.$set(this.position, 0, valueObj) + } + }, + created() { + if (this.swipeaction.children !== undefined) { + this.swipeaction.children.push(this) + } + }, + mounted() { + this.init() + + }, + beforeDestroy() { + this.swipeaction.children.forEach((item, index) => { + if (item === this) { + this.swipeaction.children.splice(index, 1) + } + }) + }, + methods: { + init() { + + setTimeout(() => { + this.getSize() + this.getButtonSize() + }, 50) + }, + closeSwipe(e) { + if (!this.autoClose) return + this.swipeaction.closeOther(this) + }, + + change(e) { + this.$emit('change', e.open) + let valueObj = this.position[0] + if (valueObj.show !== e.open) { + valueObj.show = e.open + this.$set(this.position, 0, valueObj) + } + }, + onClick(index, item) { + this.$emit('click', { + content: item, + index + }) + }, + appTouchStart(){}, + appTouchEnd(){}, + getSize() { + const views = uni.createSelectorQuery().in(this) + views + .selectAll('.selector-query-hock') + .boundingClientRect(data => { + if (this.autoClose) { + data[0].show = false + } else { + data[0].show = this.show + } + this.position = data + }) + .exec() + }, + getButtonSize() { + const views = uni.createSelectorQuery().in(this) + views + .selectAll('.button-hock') + .boundingClientRect(data => { + this.button = data + }) + .exec() + } + } +} diff --git a/src/components/uni-swipe-action-item/uni-swipe-action-item.vue b/src/components/uni-swipe-action-item/uni-swipe-action-item.vue new file mode 100644 index 0000000..af962d6 --- /dev/null +++ b/src/components/uni-swipe-action-item/uni-swipe-action-item.vue @@ -0,0 +1,270 @@ + + + + diff --git a/src/components/uni-swipe-action/uni-swipe-action.vue b/src/components/uni-swipe-action/uni-swipe-action.vue new file mode 100644 index 0000000..c8b656c --- /dev/null +++ b/src/components/uni-swipe-action/uni-swipe-action.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/src/pages.json b/src/pages.json index fd12ba6..9d390cd 100644 --- a/src/pages.json +++ b/src/pages.json @@ -21,7 +21,8 @@ "path": "pages/famousArts/artistList", "style": { "navigationBarTitleText": "文艺名家", - "enablePullDownRefresh": false + "enablePullDownRefresh": true, + "onReachBottomDistance": 20 } }, { @@ -561,6 +562,24 @@ } ], + "subPackages":[ + { + "root": "pagesA/", + "pages": [{ + "path": "msgTalk/msgTalk", + "style": { + "navigationBarTitleText": "我的消息" + } + }, + { + "path": "talkPage/talkPage", + "style": { + "navigationBarTitleText": "消息" + } + } + ] + } + ], "globalStyle": { "navigationBarTitleText": "艺象心", "navigationBarTextStyle": "black", //导航栏标题颜色及状态栏前景颜色,仅支持 black/white diff --git a/src/pages/PolicyExpress/PolicyExpress.vue b/src/pages/PolicyExpress/PolicyExpress.vue index e696406..3a9e3e7 100644 --- a/src/pages/PolicyExpress/PolicyExpress.vue +++ b/src/pages/PolicyExpress/PolicyExpress.vue @@ -19,7 +19,28 @@ }; }, + onLoad() { + this.getData() + }, methods:{ + getData(){ + let _this = this + this.http.request('/policy/list', {}, "GET").then(res => { + if (res.code == 200) { + + // res.data.forEach(function(item) { + // _this.list.push(item.imagePath) + // }) + // this.load = false + // this.getEnjoy() + } + }).catch(e => { + uni.showToast({ + title: e.data.message, + icon: "none", + }); + }) + }, toDetail(val){ uni.navigateTo({ url: "/pages/PolicyExpress/PolicyExpressDetail?id=" + val diff --git a/src/pages/PublishWorks/PublishWorks.vue b/src/pages/PublishWorks/PublishWorks.vue index df4ffa1..14267f2 100644 --- a/src/pages/PublishWorks/PublishWorks.vue +++ b/src/pages/PublishWorks/PublishWorks.vue @@ -50,7 +50,7 @@ - + 作品内容可上传图片(png/jpg/jpeg/bmp/gif/tif/tiff)或pdf diff --git a/src/pages/famousArts/artistList.vue b/src/pages/famousArts/artistList.vue index 4decfb6..aaa0017 100644 --- a/src/pages/famousArts/artistList.vue +++ b/src/pages/famousArts/artistList.vue @@ -23,6 +23,8 @@ return { load: true, writerList: [], + pages: 1, + size: 20, }; }, onReady() { @@ -37,23 +39,43 @@ // #endif }, onShow() { + this.pages = 1 + this.writerList = [] this.getArtist() }, + // 下拉刷新 + onPullDownRefresh() { + this.pages = 1 + this.writerList = [] + this.getArtist() + setTimeout(function() { + uni.stopPullDownRefresh(); + }, 1000); + }, + //上拉 + onReachBottom() { + this.pages++ + this.getArtist(); + }, methods: { getArtist(){ let _this = this - this.http.request('/indexImage/artists', {}, "GET").then(res => { + this.http.request('/indexImage/artists', {page:this.pages,size:this.size}, "GET").then(res => { if (res.code == 200) { - res.data.forEach(function(item) { - if (item.images != undefined) { - let img = JSON.parse(item.images) - item.images = img[0] - } - }) - this.writerList = res.data - console.log(this.writerList) + if(res.data.records.length > 0){ + res.data.records.forEach(function(item) { + if (item.images) { + let img = JSON.parse(item.images) + item.images = img[0] + }else{ + item.images = '../../static/txIcon.png' + } + _this.writerList.push(item) + }) + }else{ + this.pages-- + } this.load = false - // this.getEnjoy() } }).catch(e => { uni.showToast({ diff --git a/src/pages/famousArts/famousArts.vue b/src/pages/famousArts/famousArts.vue index 4b77997..5075c35 100644 --- a/src/pages/famousArts/famousArts.vue +++ b/src/pages/famousArts/famousArts.vue @@ -38,7 +38,7 @@ - + @@ -51,7 +51,7 @@ - + @@ -65,7 +65,7 @@ - + @@ -117,25 +117,28 @@ let _this = this this.http.request('/indexImage/artistsDetails', {id:this.userId}, "GET").then(res => { if (res.code == 200) { - console.log(res.data) - if (res.data.images != undefined) { + if (res.data.images) { let img = JSON.parse(res.data.images) _this.userImg = img[0] + }else{ + _this.userImg = '../../static/txIcon.png' } //成就 - if (res.data.artAtt != undefined) { + if (res.data.artAtt) { let art = JSON.parse(res.data.artAtt) _this.achievement = art } //荣誉 - if (res.data.greats != undefined) { + if (res.data.greats) { let great = JSON.parse(res.data.greats) _this.honor = great } //代表作 - if (res.data.opus != undefined) { + if (res.data.opus) { let opu = JSON.parse(res.data.opus) _this.represe = opu + }else{ + _this.represe = [] } this.userName = res.data.userName this.load = false diff --git a/src/pages/my/My.vue b/src/pages/my/My.vue index 434e5af..1013ea2 100644 --- a/src/pages/my/My.vue +++ b/src/pages/my/My.vue @@ -13,11 +13,17 @@ {{userName}} - - - - - + + + + + + + + + + + @@ -111,7 +117,7 @@ - + 消息 @@ -280,6 +286,12 @@ uni.navigateTo({ url: "/pages/my/logOut" }) + }, + // 消息 + myNews(){ + uni.navigateTo({ + url: "/pagesA/msgTalk/msgTalk" + }) } } } @@ -296,7 +308,7 @@ } .top { - height: 280rpx; + height: 180rpx; border: 1px solid transparent; position: relative; @@ -307,14 +319,14 @@ box-sizing: border-box; position: absolute; bottom: 0px; - height: 80px; + height: 160rpx; border: 1px solid transparent; width: 100%; - padding: 2px 16px; + padding: 4rpx 32rpx; .tou { - width: 72px; - height: 72px; + width: 144rpx; + height: 144rpx; border: 1px solid transparent; border-radius: 50%; overflow: hidden; @@ -322,29 +334,40 @@ .user_name { flex-grow: 1; - margin-left: 12px; + margin-left: 24rpx; .user_name_de { color: #251B1D; font-size: 40rpx; font-weight: 600; - .sf_text { - width: 180rpx; - height: 56rpx; + .sf_textA { + width: 146rpx; + height: 48rpx; + margin-top: 12rpx; + } + .sf_textB { + width: 166rpx; + height: 48rpx; + margin-top: 12rpx; + } + .sf_textC { + width: 186rpx; + height: 48rpx; + margin-top: 16rpx; } } .words { - margin-top: 8px; + margin-top: 16rpx; color: #AFADB0; - font-size: 12px; + font-size: 24rpx; } } .arrow { - width: 24px; - height: 24px; + width: 48rpx; + height: 48rpx; } } @@ -352,14 +375,15 @@ .content_area { - padding: 0 16px; - margin-bottom: 60px; + padding: 0 32rpx; + margin-bottom: 120rpx; + margin-top: 20rpx; .fans_box { display: flex; justify-content: space-around; align-items: center; - height: 80px; + height: 160rpx; border: 1px solid transparent; border-radius: 8px; background-color: #FFFFFF; @@ -374,56 +398,55 @@ .itms_name { color: #AFADB0; - font-size: 12px; - margin-top: 8px; + font-size: 24rpx; + margin-top: 16rpx; } } } .jifen_box { - - padding: 16px 0px; + padding: 32rpx 0px; display: flex; justify-content: space-between; align-items: center; .jifen_box_itm { box-sizing: border-box; - padding: 12px; + padding: 24rpx; display: flex; - width: 166px; - height: 68px; + width: 332rpx; + height: 136rpx; background-color: #FFFFFF; border-radius: 8px; .ji_ico { - width: 22px; - height: 22px; + width: 44rpx; + height: 44rpx; border-radius: 50%; overflow: hidden; } .ji_word_box { - margin-left: 8px; + margin-left: 16rpx; .ji_word_title { - font-size: 14px; + font-size: 28rpx; color: #251B1D; font-weight: 600; } .ji_con { color: #AFADB0; - font-size: 12px; + font-size: 24rpx; font-weight: 400; - margin-top: 4px; + margin-top: 8rpx; } } } } .content_bott { - padding: 16px; + padding: 32rpx; background-color: #FFFFFF; border-radius: 8px; @@ -431,17 +454,17 @@ display: flex; justify-content: space-between; align-items: center; - margin: 26px 0px; + margin: 52rpx 0px; .content_bott_wods { - font-size: 14px; + font-size: 28rpx; color: #251B1D; font-weight: 600; } .content_bott_arrow { - width: 16px; - height: 16px; + width: 32rpx; + height: 32rpx; } } } diff --git a/src/pages/orderHall/addOrder.vue b/src/pages/orderHall/addOrder.vue index fc76f24..df42c9a 100644 --- a/src/pages/orderHall/addOrder.vue +++ b/src/pages/orderHall/addOrder.vue @@ -50,24 +50,27 @@ 截止时间 - - + + 活动时间 - - + + - + + 接单设置 @@ -215,9 +218,9 @@ }, sureTime(e) { if (this.timeTab == 0) { - this.eTime = uni.$u.timeFormat(e.value) + this.eTime = uni.$u.timeFormat(e.value,'yyyy-mm-dd hh:MM') } else { - this.wTime = uni.$u.timeFormat(e.value) + this.wTime = uni.$u.timeFormat(e.value,'yyyy-mm-dd hh:MM') } this.showTime = false }, @@ -329,7 +332,7 @@ } if(this.eTime == ''){ uni.showToast({ - title: '请选择截止时间', + title: '请选择截止日期', icon: "none", }); this.ok = false @@ -337,7 +340,23 @@ } if(this.wTime == ''){ uni.showToast({ - title: '请请选择活动时间', + title: '请选择活动日期', + icon: "none", + }); + this.ok = false + return + } + if(this.eTime.length < 12){ + uni.showToast({ + title: '请选择截止时间', + icon: "none", + }); + this.ok = false + return + } + if(this.wTime.length < 12){ + uni.showToast({ + title: '请选择活动时间', icon: "none", }); this.ok = false @@ -412,7 +431,18 @@ } + + diff --git a/src/pagesA/talkPage/talkPage.vue b/src/pagesA/talkPage/talkPage.vue new file mode 100644 index 0000000..1f5eb9c --- /dev/null +++ b/src/pagesA/talkPage/talkPage.vue @@ -0,0 +1,1825 @@ + + + + + diff --git a/src/request/interface.js b/src/request/interface.js index 4877534..d1b2974 100644 --- a/src/request/interface.js +++ b/src/request/interface.js @@ -7,7 +7,7 @@ export default { config: { // baseUrl: "http://192.168.0.57:8080/h5/api", //王锡 // baseUrl: "http://192.168.124.110:8088/api", //周源 - // baseUrl: "http://10.0.0.78:8080/h5/api", //俞燕红 + // baseUrl: "http://10.0.0.48:8080/h5/api", //俞燕红 baseUrl: "https://yxx.ydool.net/h5/api", //线上 header: { 'Content-Type': 'application/json;charset=UTF-8', diff --git a/src/static/nogoods.png b/src/static/nogoods.png new file mode 100644 index 0000000000000000000000000000000000000000..7e859a262444c47d00deea3ed4ab1dce4436771b GIT binary patch literal 7729 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 literal 0 HcmV?d00001 diff --git a/src/static/play.png b/src/static/play.png new file mode 100644 index 0000000000000000000000000000000000000000..918f505b51a8208826a4acecd49cad3af7d05ebf GIT binary patch literal 2408 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 W6aeP6uFdfu0hlAv#?9AV;{FSh?AKWU literal 0 HcmV?d00001 diff --git a/src/static/talk/add.png b/src/static/talk/add.png new file mode 100644 index 0000000000000000000000000000000000000000..a9737992bb8c6a9c0871d860c26e73b5d8d92432 GIT binary patch literal 1710 zcmV;f22uHmP)I;D5e0NvzF)zV{a&kB_sbPKs&-HxG~%E zF5N1;7S#5@5KD&n6o5~I3YO6BAb}2KtrJH|xs{th+Or8IEoL(HY26YBgZL2$;!wxR z<;>army3Y)SxbB|sjOs}&NO6OU6hxVj1bw6Wcz+T?WZ#k#FAkisPm^>zix@e z)y5Aj>1@knng;wFl6=2gw}dkSJTG5}m1M%#eu5<5@6|0aZT{JaX_al`F~6jRFT|2z z9&JE2CN&TN^yrpY>lGxP5G(n>k0eJ~5OHaO2%E9lD<3%{#EFdbzw|?c5~`_!2;g+n z&3yk%8S)t+mU8B+AiNzUY!YabHi!UYn_d*}xcNFWM8hlsSegK!AR^NT5jdk;!u3_1o1YZHfe+ikamyW_mi0Fvpd9G{v{B-mk^*JV$%tc`DMLWct03K!*mvN z9u4AcLT%Cs5jd<{Vx2F<-|x70{_NS~4XGrkGA^wUF*=%AaOWS#|EUH!Z8(<<^9cZ7 zCKO>o#ikY_fG2fJeB}vo$T0UZuqCLs3AIZtL<06@E%Cf}B<4&3LOvllLB*yRBL9-L z3Y~t#`9jF*te{}Rv`aBWT*_Kvz8}OiEI_3eq62T%P2;yUpFDYS5@gMb#VN47qS0`e zkV&X*sv#2dec58+xGTiLWh?V!Ytv@rAwV5wpvNYh3em^4>7qW-JN3puhZ(!3F~i&i zrY;Z`#<1}j-4fT9N@^nUe8;NCZMF|Z6h1n~=0#~M1$OhLWSF}FY>ntAK-jMLiEGK3 z8i<2Aa|;pnMiEYoo!O#zBTC_ ztjq1u;Ea@5LIE(rscr~eDpI4@^O+d`?Ht#~$^NOH;sBWW?X2dB!D7I3p6G~Z#M-Wl z>8XxH&o7n=MD^|L5s-u+-_9zF<2j}Y0kSwMpXmKu43HVSISQQ4ytB5X3h3QG?tGdsO#N_dw-M zUGIG?j@lP=OMK}3BPFFDg&-hjAB&^A5j(0XKKBx%S4v7hJVd!Wsw&Y~@4bED-Im)! z?%uxZFB!GV)a`fj-BC5QliKe*9b;&S<)N*1-dCfH1hMjrOhXBt)Tdxw&w!Y;T%ATz zCJ{Ljt6nzhTpStWL7mVfgCYQRR+uD^>eM<(AghuV>ik3*Ow~!AGAII2XUa+fIVnb+ zZY&vS^*P%FHUVm9U|vu)PIVT*{R|TSt8=#f0FA6zv2biuYiFW%5ZYm*{Fl)W4gJnv zV(xF6ZTDC2X!4Vr^!?ahEJ+)9Bgj_}CHzVXq6CQl0lSeVe?5JxM*si-07*qoM6N<$ Ef{HL282|tP literal 0 HcmV?d00001 diff --git a/src/static/talk/close.png b/src/static/talk/close.png new file mode 100644 index 0000000000000000000000000000000000000000..aac1737d553986dd06da8580620d38cb3dfa1695 GIT binary patch literal 1938 zcmV;D2W|L?P)9GdKM+MBA|eZ*L_?Id9WU!G<9+L<6eI#MAYwc{#s( zdV0=tp68TMCmmjPHxzy!TMFz_#cR$|&WAPD=WhmKy>t5c19K_LG1=mJlF zjGhvRmN2kbje}a+5^zXnJ~*a=4^(%w2es%>BV#JWUa{dx8L?FWJ+H0Tr8S zq_&@p)q7W)DG(!d4PG#>0{9iP99OTGwu5MsE7TTHFFU$~p%Bl{X_z%u;5V2QfDnv! z)&PAnF>Sgd)8-kSZD$P77gu2j#IrMJR#sL{S_j18O*G0m6ZKpNXj5O`we=65JJ+Yz zj&6uO;)0nn3tNb=M6WZ2mS@I6f#j7=sr{TD+qxijiJnCS+Cjh+Jx&x;mVwI*ZkZ|t zf6?lPW{ACY-j`&?ms$;5O->-ZToVd>rNu8z5F>8y77$+7V$jkuj89$Rz)H0~s)iU5 zy~_MCL#?3_YJc7(1!k)8R~5u=(Q}zV52!IviftKurB({&J_1ml!kuEm3 zk@ji3OY*N6{%#7y#F>bE$PBj$=wx7y8M?Df_MI{?oq(}M+Y}%y9)4z%0x=?bb{T!B zM2vR_5~K!*4BjD_FkGle{%mFhY#S*#@gfEE-Cmz zQs)rFUU&UGnfREo#sC&%Z|$&S%S&RTyC1P{Oadv5K}FMp($R3TADy!oPPoT$yBnZM zM)pl$nqL$4A6Ik^L5zsrH2^*|(hz_PE-8=}HZuui8o*> z2j<6tw<&YtPXM0IPr#g31pHVrj+?53!CRR?4&Mt~3t-%v{nR6Rk1;UM96YMD?&<5h z-jq+ipfyHdaz?^&Wh7o2EOSuRV>22Pu&c&Bt%-K-jAherC4hrIMiq!`1`w?}iD;)Y z$A^=aRgi`sLdPKboWoM?YL>jSyJB-V*U@{7(;`^g*&a(yT?OY^pp z*s(C%&T11k2HO?<~vLVM?P4iZ|bGgL$s6J&hvTuM#0=JW+9^1S8v*AW*Zb!~bhBK@LT>6(>sZjDA5&%k`*>UK(kW{ ze3t~-?e_SHNXbGo^p!CyEHN6(B0rId@!mM*&u$SO7eH&6@R*?lktIJ-F;Y&Mvc^J7 z)i!FTY@ybSW_Hkg-8pi$;}GrYfzh5re$@kt2D^?WGsnE^SQK%)qADXqbrn^EbE93` zm%>tIZJ#1*SDB^|)K+Dhm>cbSXXvSSPCf^_@?K} z-VhZ9_Psb+){knpN%jp*>BLlx#H6@=S6C`YO%US|AN$t2A(EOQDjMwj6B8VDL5wfR z?VCLHLsUT8cgm{$dLE^{eY>%NFztJ`4TNdm_--If`?m)SgsG^qe+9!}po+S3_&t{Y Y0da485(Be>-~a#s07*qoM6N<$f;B{baR2}S literal 0 HcmV?d00001 diff --git a/src/static/talk/cyy.png b/src/static/talk/cyy.png new file mode 100644 index 0000000000000000000000000000000000000000..f3a9db05f1cb86094dfbb819262abea11b1e959e GIT binary patch literal 1256 zcmVP)wh*CF6sbL!oek7Ov$Ig+enCW0bCFt5yc9$m5D)cYD@xH857tYCih?a( z1QBdi=t(MC>?u&p>DwrEXGILQGh5LjLJ9>9l6_^y?7GI?W_IRnvSHuC1~$C+|Nh^P z|7M2l>>I+W$1k3Fa2fmzKt(V-5VozZ8M@bu-$C#JuH`_V-tF6O+8I#$i+ZVikeS{a zI!HZkn22A>S1Tu)Z7qnQXSheLp)YrR8}o~Q1f}w6VtRJysq_edi9ab+EBmNkG>(nm}k$@oY+wu5cY%xe@8sISixAtQL-8E^6zyUY-oclxN z^Pj!RU0aa*t{)!6Ap*GQ`gT`8%x2NNwDaEaTyD#yEE?T<`v8$IxPIl~P78(;<)=V2 z#h_7#cq;>=(UX9!tLt6gPB(v7FPb-)@My=k66iXJ7r|I$&>}I<e`>~x&OA2 zk>zWf1R}n0efwm)*`R3l6R;nIa>7l_c7S*^VQ*9xeUNnA_3hdAp3pOY0=T6IokXSL zNhHGQeAUjhQdF8c!_0dVx%sy!E5v`4m=C$N$~!GD-qckF-_@g+HOs{z0(jr`?Thh& z#Vfx>pu=mr_B_a6IqZ*FvxS5kSwS^t6r;;p_$)cL4Y-gIQ6C(J7DX+lNBWL`UjZGWhD)D*ko` zFuSr+$CKlP8<2(=EqjF+btXKJ&_m*~en3pT_)QA?0a3!&x+PJOs>L(jYn;9UXTzDR6}DVcQ#(?MzwUu z6yrJDk%UfsPY1F!@x9ruvt@e+`Ja0aG~4wq7|B3(y$eROUGK-z0puF@W4Qsz%%rYz SAovyl0000oQ4nCh=y+hE zi;AIuEQ^enix3X3aNs3I27ksM-A}f^eB3yrQRAgDgZgi~qTVO#988qFq8LB?negmA z`y$4`OS%l_dozCdEA%-|DUm)9KZg)I}7#53fW^?cjuAhSs2 zrCx(C+ks}4^Q@1gG(EpF~uZr86xI$OLVMGnpDUBp+xk6 z1B=4SO9JoM=fCV+dP>DeXRUF!#>;R9>D7D>XZkNvf8aAuxLAJ)ujkyg&pRcz7wxqc zF@<%@8`+P35stPu)!3?H6Mn0r@Y=j98X z=S(##S8mz1ek&ul%T$doahzp-D{UGxLzZ4N%`0ZyqOi>Dv`W0x^~HLBVlVMBOuIZm zI-xP6QgX9Pk-zu?x37+u`Web3e!bv|P}s+paB;(DplahS*?T*eyk^jOo?m`IF6r0S zUHhI$AHJwRspj&9bz9XYtz)b>xZ$uH(D7+baSA){UwC+B_)haWDx?-7Rx@K_xR6VJj>*V!|@j%{TJ8A!fi|rHF zvm2?+KJO`KDiiWnZPGsWgq>-*yag#j-HXpQ{F(B^dh1j#E{`at51SI@*E03Fo{_mV ze}YY(#fdjS=P*9>zLUov*Y@-Eer=fWvngcERj4XD*RLQkCP%{7t%lPM&CAU?dv3ASB*U9iWWApY z--rqyzCC@nHeB`6omWEf>UOjQd z=+Qcr+Ls>=D{6~g`qUq+a(Q~uvZ8F>jroT>@6Y$P|IhSe@{{|)n%A$tye7C@HYegg z^Tmhzr8*j4C_D&Ink3P|$Hb?q)QO$@qTz=;|GY_^GArYXfF%ior>mdKI;Vst09VTR A{Qv*} literal 0 HcmV?d00001 diff --git a/src/static/talk/jp.png b/src/static/talk/jp.png new file mode 100644 index 0000000000000000000000000000000000000000..026f9a546c62fc47a902c05fda9c2ff4fd581fcb GIT binary patch literal 1998 zcmV;<2Qm1GP)I&YY8FkxPoDML>nNL=xYOhn@j?5Ho0k9>gBR3gDOne$4i3xWJn z!|+cs^D!yq@eFFt++xllj*nMN!|>MvxDcSFfIssW7u2ctKSVg{`#1*hF(Nt&_(dt@ z-pt9wFl;%*VzHQCv}n<%ndvhCtp)hv82N@t-(|*=ME+j@j7ce9$-qrr~El0 z{wjda0$8e@VIm=o0X$Z%o*Eq<9zK!CBF3PmL-agvh3{hvfa_x9m6deT_x;hKA^FR! z4D0zc4PvQOT9(W8ZwC0bW)`61O@#f`Dvu5giKle*aW$DkER{+h%H{g*0BWrKiRca~&4;q`%?zUFdF!iHzMqKZ zRrfUj^1u&E(Bj`uJT)~8Km4#yvs()w7M z_^BW&Ro(^gT%5Y3skz?Rx23ceCpAqBQK|9`0RJXw;Q2R>e=ns7E(T(6i6APaRsu#b zcC>jufQYsTVcr)v&DaoK*S&<9g7d5o#0}OCdSQ6Vbgwm|sr`(fcca3IQT={nUCkBFHo$*6e2j5r?aENxI8pj~G3sV?rC&5>n-6C;Ta*UD-uF17xk`AqLQt9 zt=%>d19;5&LE9dDt{%wH>FhYp`9!%lqq{IrbUwsj*Ag~!LLs`YyOEiG-Glgl0uxeN zpN!RsuIoLzmwYYQu9(g+46L)P+GVl^)4BX_X4YIX?+%E} zxZSp`pPk)Abs-))bZEhX1qB!OS>d+g8m&Ox@}1INo|9Jgnbm-LX$3 zqUVJ$FV*Tq*DY^l=AZT;))06{O6y!Lh>qiKC88e08isUIO0(u!qq@`Cbt_+C_8;kW zVhw>wDXjsmPE<-=4j2b}5NinRlhO(vmp)^w+lfl4j{?Tw9>f}4zm?M5s0Fc9D)r@Z zegEx2tRe72DXnj7K@3E$>%Gp5C3+x}Tp6@tOp+Mk6*J>j+qQn84bgGDaU$4y5W7QV z7+7Oj*6tV(%l8xUrtZL_S7o(&>ips1;eTmER7!mwF!t!#cY})dN@-qIuhP(^uwt?J z!Sl{rd=fxkHz10tk%(^+LeyR9Z+OepalFTfbXT{d(rEABiTENR#IabN7>FIm{TdO~ z9F5}P@I!B<#`8&|PWx0ZJt3uebyx-wH}A{Kaygz%lRn^&NGUZIZPP_*G+HT-Q@Y)WI{AkNhAAEgvu(j6BI;xx$e zqX2jCTLk=KKA&4vC=_088pN6X<0LaL(+$#II{&J;-`R=Xi2)GL^FHDGc)q>hL}yFH zTZ9nJe?f9K70>h5_&%P9POUu@%yge^o581NVsD8$aW;xl>Q2De9y{v18xX!$sFP|c zh|~K=cQrHBESc*BpAQ;l{()_a@1)5kHN+W^mjJY%85gBVrqyGKj4udLNd3W~Odtlu zPrnO&&Q1W=wi-s2ReKs0Gma2phm_W6R`6zhnga23SGqScQvg$Bow%+aGfxrG z4(95pZQHNuj*FvfD#Rd>iHV8+_uf0Tg(&#^AAKZFa_P0Si+L)5S4!^{?$C6Iv!N@M z%95!mKRDbgF$C(%)n))(;;0{_AQ~eEQ-b0l8 zgOr7qKXA~pPSgOJ=)=5*fqj-`9cV?zg~gb2h+&EKJ`p{aZ7~P2=WQp>0gJ>Tdk_<& gJ3X)mF$0MI1Jb3de;LGiNdN!<07*qoM6N<$f|V-ThyVZp literal 0 HcmV?d00001 diff --git a/src/static/talk/myt.png b/src/static/talk/myt.png new file mode 100644 index 0000000000000000000000000000000000000000..51157aa795194b6a1ffdbc40c2f85a38bb07ec78 GIT binary patch literal 8353 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 literal 0 HcmV?d00001 diff --git a/src/static/talk/push.png b/src/static/talk/push.png new file mode 100644 index 0000000000000000000000000000000000000000..589319aa0058d1d53d34c47c9155acfcc8175777 GIT binary patch literal 1969 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 B+xP$g literal 0 HcmV?d00001 diff --git a/src/static/talk/t3.png b/src/static/talk/t3.png new file mode 100644 index 0000000000000000000000000000000000000000..555680def854a8f3c8110530dab0e43663be34d6 GIT binary patch literal 1573 zcmV+=2HN?FP)btg%YSBf)FA^t8xel;V4J9yBt#5Ep+X{5kY|vLn;Ok5($Zl;ZQI^ z0ue~4Dcej9yDb&4yFH-DT`?X+g`k0gM6M!W3p?|EW+t6lN{^kg+eE|swL9~B-|uIB z^WN_rOqOK{|DlUL1`hMrdYs`fCm8?#439jzB(mq7>aU5A(B5n^;Kc22T^;^m+wPdv zFr8tiKVvxw@u69xrtt#UQRI*pnAI@_JhgJp(-F0`KNIjIWAF+t<(W2ARXc$BT00?0 z(~4~FeP%RF0jHF>av6}tfZG8}^b5s_yRMiq(_)8KuC(;6J$F?5$$%?$(VYhEPuO`Q zSe>AOll@sEC81Pm!c5}tdTjX{f;DLxmr_3SMXuaGL4+s*zASXe8Nq5j0Q{;i`;|xp zRuW+lV~A=Z(uD|}z;O1`GyMjgj9(WB)}*;Or$6Hz5@M~M0N^qh$cQ6?!hoMt$+D@) zw!5rx`vzbwgBGDw5YXz{LRh5aqD1%pM}gJa#+}*1#$2i>YpvQafCQIbD@=0lG5i{U zojzB&)|fF=gYm7z@KDJSg8f=#cb7aWtkHhb!FjRPz}*>Ous)DQz)C{Q1z{iQ`F(d(oYqG6rTthEq#iiuRBsDZS9<_Lw&+ zKx(;n2&tk!19j(&)dYxLtd8n;@^r!)UE9nx)t^1wA_B*>Hfof$-`;V#)p~z7mY3}X zo^*U(*Qi^!mvJDQfL=|Z7{e_=@KR*d2Sww*_$^rIumGo(X3ij0-AX`gLmvZFFkA;A zmVn4c_wPgE?|W?d9|Z#)a$u)FV<`!tn=_z}7`7=a!hO8g=&Gyni}Vte;-5KyLzxZ| zIYj8LcR9d)r1$vQModfaAq7q=%S;!F>aI7dQmxkXy<>APv}A5SGC!u%-J0!0n65)J ztShw3D_hHS$bcu8&FyAY@0=wdZGYwhq?8owVnDVQt1!#xV*Bpn zVb5@CiA$T3a~Q+lN~AU37`<%+17ptQM0LM(`8yB>FouI3yKD<9us%CgS6n6_j)3)r z4tYf|pp9eFN;6$TRd?&<%4+T3QdbH|mze6y8et*j8yz4rVyJg~-VbJhwJgU~U;a~D zqJs0cyh-_6o6`sha9UYrmQd7O#!&0A%Q0qQjd-Web%+R~z_8J4mzRbO*y+#6At5$2 zo!`xZJAJMKA~*@iD|EYT)cpS1`SKD(reJ&pnCV*j!*Dfz^7Pu^X zm_-TbRixch^R&_|J69EbX{kg<_bE=;^@n-j0ys+wstM@HIA7sO%3mM03{N<<=!w`H z*R%m+g~S(oZTVZw0w_`-tEGaNg^X2Zpr{YvQRD*)Ov|po$2b7T|6J;cfjt!{+aY4_k7+>vGW=bZTkF0w%<#M6fWR)Z<8>2&A{zBqVj% zQ15?pEgyWUs*nhi>+hWwTzc=vVM9uqf@{VRBCv{pDfO|x)OCp&b6~`do2|WINP#sY z?R=q6?YYeyc*8Jez;yuM3g9XSVu|4;5T0##&QM<4ImXo%tQH?~U<0DQ)UDCpp_PnX zK?6H|t~zZ% za7miA$L2N`=fMpAu*4*nWhF?8Qm%|Q-jd#un@-ia!*qJ#}5H(H`2;7X9-1J4WMs_5w&2X zoos^hPY(AQyRmWqZ}#-kQT}FUOQh1UMek^Mp>XBExE(dk`38O5+R@N0`8@^>_m}tw XKohEl%Fn*I00000NkvXXu0mjfh2-}t literal 0 HcmV?d00001 diff --git a/src/static/talk/t4.png b/src/static/talk/t4.png new file mode 100644 index 0000000000000000000000000000000000000000..0442ddfda9c8fc3c93557a52ebe625d60217ec33 GIT binary patch literal 2013 zcmV<32O{{1P)g|ti1FfQi5~mx3fi}9eX&a|yTUFYz^f`=Wq-g375+{!Bd(g{d$7vJy z{kV2w_q~5&Dd&9eIUk>Q?|nax3GU&T06A801>izdPy{YS7oq|J3MAZ0ELVs%O-Jh_ z(N_U1Bc>`4jRG8FjSj}1to@UMyp>AKsYAjsL{Q!j3d9sWF+@Xi-ex;Oz1F<;+ zvAQMt2r<5IHWvc^Fa~TI3f}7PLv92_$5Nn#F3mE(_fU2yAKItKuZy$K7?vGA1ocI<5qG*oZ z4bWG>yaI%q0qOzsan`6iwyXB#Ou#iQ$6A?Xr;`K>Ut@ke6As?tRL8ErQi!6dw*jPW z0r<8V17bYuA^hasaIjxA_x&ZWt;wtyoQ|E-D`#tNR0i?Jdk)>;mEN}iT6pE$DWZpK z8%1;UEPzj4+1`YOOs&wLUiFpb9O0B%wRk%3jQaPWx57?hYRfjDuc!Stflh!}K|z@NA3H?6%) zE!Ll2HKat#qKFcR)y;hm6L`DDvB8XeL{PD+zNv?UU$i>DDtjdmMbohcknFM=6sKuD zd055%u3ZlY9dDJa#-FiQ1M%M8Wk}O0D?u>O9}5SUil*o@AbiV;?>?<8%I} zg#U{VuTCaYOC-w$nMge3`LEaOefL_wKbkMPL~?vlB9Zu9N~Uj=Qf9Ayh-lcORSeFn z^#0R7@0v4aGh`qM;C(PfBkjI|Y{v6KYzU19AyZpHxYKOVbJ>o80V3>-wEC5<>S<3;GfQAD7IrGI*4TQuE>K`r)_KGI8F<(Ar#*M#&=WKo_02?<+vX`y^ z?Uj;4LWsk;3NAzdUJoZicML@V177~axQ1t@Zv+B?{TWLaA^@M4@mQnr^w#vz9SDd9 z7h(=C8xSESz9fX0xG-@m(OxAQ5Wg#gFrJ$i590MzgzFa&-usYoA-O%tM6w{#8k2n zGenQ}r}6vV6#g+NO;t@Hj7lD22FfdMr|_FYDV!TA{(MMQJOUA7PnaC>@^h!<`u%vNmKL44zM z8hZ{WCvH>}>nIzD#&+hnM^ZQ*E6(09_X{d{i2u33c;QGAube18ybQ>ag=j1qFC0xG z(w8dAyq9lkume#_Y!*W7F6#Zn(56Z(S@co!lu>nEeZ`&k3II_EA!0>^SSvjE>|(;{ z4|rDQJ;e~ifq-bqXu8i>090rgePZL;zXH4#z{jqzD>x)2?h-;|TTWbv9}$~)cyD}& z#bPTpZ35<6W*C1zo&)tUDe)A>)?=orWR^k;Z(F{}< zqDqMMPmJA9QvSjW`7*RQ8)@?|vYS`766-rhHV~-Wu23oa5$MldZN7DObI3ycdWaV$ zc=SWNLM81-^utK2&vxU})b4>${C8k%ENLJ%f@k(D?{2TO)UTa8%+x-Xj?pz5@#{9? zC|MT*?e1#xndoetImOF5s_H}WM~U%J$x^WrIAahMa%JR!YaRUn$Mn5@S4UIOn3S}B z|5o2?R=7`RJ7bq=c{fSYI|Sa`)#g9s6rkasx8J!wG}1^+#;LtZ#b9$lV+@R)7l(&_ z^xF2RHxZn~X0r2sq>ePY1x(98oYRuvWauLKGLj(tn}H}Up5NcS{nN^S`O_4{BBfih v!?+L?e045F7oq|J3MAZ0bRjArpg`jP^bbpa#t`&200000NkvXXu0mjf#TUjo literal 0 HcmV?d00001 diff --git a/src/static/talk/t5.png b/src/static/talk/t5.png new file mode 100644 index 0000000000000000000000000000000000000000..30cb687a2deaf84482797f641c6a33a904e88cb8 GIT binary patch literal 15274 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 A7XSbN literal 0 HcmV?d00001 diff --git a/src/static/talk/talk.png b/src/static/talk/talk.png new file mode 100644 index 0000000000000000000000000000000000000000..3be6679c1c5fced8008f3fa0b07bfa82c2d6206d GIT binary patch literal 3435 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 literal 0 HcmV?d00001 diff --git a/src/uni.scss b/src/uni.scss index a653d83..ab26a5f 100644 --- a/src/uni.scss +++ b/src/uni.scss @@ -12,6 +12,7 @@ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 */ @import 'uview-ui/theme.scss'; +@import "uview-ui/index.scss"; /* 颜色变量 */ $red:#99241B; $black:#251B1D; diff --git a/src/uni_modules/uni-datetime-picker/changelog.md b/src/uni_modules/uni-datetime-picker/changelog.md new file mode 100644 index 0000000..5c9735a --- /dev/null +++ b/src/uni_modules/uni-datetime-picker/changelog.md @@ -0,0 +1,93 @@ +## 2.2.6(2022-06-30) +- 优化 组件样式,调整了组件图标大小、高度、颜色等,与uni-ui风格保持一致 +## 2.2.5(2022-06-24) +- 修复 日历顶部年月及底部确认未国际化 bug +## 2.2.4(2022-03-31) +- 修复 Vue3 下动态赋值,单选类型未响应的 bug +## 2.2.3(2022-03-28) +- 修复 Vue3 下动态赋值未响应的 bug +## 2.2.2(2021-12-10) +- 修复 clear-icon 属性在小程序平台不生效的 bug +## 2.2.1(2021-12-10) +- 修复 日期范围选在小程序平台,必须多点击一次才能取消选中状态的 bug +## 2.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-datetime-picker](https://uniapp.dcloud.io/component/uniui/uni-datetime-picker) +## 2.1.5(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +## 2.1.4(2021-09-10) +- 修复 hide-second 在移动端的 bug +- 修复 单选赋默认值时,赋值日期未高亮的 bug +- 修复 赋默认值时,移动端未正确显示时间的 bug +## 2.1.3(2021-09-09) +- 新增 hide-second 属性,支持只使用时分,隐藏秒 +## 2.1.2(2021-09-03) +- 优化 取消选中时(范围选)直接开始下一次选择, 避免多点一次 +- 优化 移动端支持清除按钮,同时支持通过 ref 调用组件的 clear 方法 +- 优化 调整字号大小,美化日历界面 +- 修复 因国际化导致的 placeholder 失效的 bug +## 2.1.1(2021-08-24) +- 新增 支持国际化 +- 优化 范围选择器在 pc 端过宽的问题 +## 2.1.0(2021-08-09) +- 新增 适配 vue3 +## 2.0.19(2021-08-09) +- 新增 支持作为 uni-forms 子组件相关功能 +- 修复 在 uni-forms 中使用时,选择时间报 NAN 错误的 bug +## 2.0.18(2021-08-05) +- 修复 type 属性动态赋值无效的 bug +- 修复 ‘确认’按钮被 tabbar 遮盖 bug +- 修复 组件未赋值时范围选左、右日历相同的 bug +## 2.0.17(2021-08-04) +- 修复 范围选未正确显示当前值的 bug +- 修复 h5 平台(移动端)报错 'cale' of undefined 的 bug +## 2.0.16(2021-07-21) +- 新增 return-type 属性支持返回 date 日期对象 +## 2.0.15(2021-07-14) +- 修复 单选日期类型,初始赋值后不在当前日历的 bug +- 新增 clearIcon 属性,显示框的清空按钮可配置显示隐藏(仅 pc 有效) +- 优化 移动端移除显示框的清空按钮,无实际用途 +## 2.0.14(2021-07-14) +- 修复 组件赋值为空,界面未更新的 bug +- 修复 start 和 end 不能动态赋值的 bug +- 修复 范围选类型,用户选择后再次选择右侧日历(结束日期)显示不正确的 bug +## 2.0.13(2021-07-08) +- 修复 范围选择不能动态赋值的 bug +## 2.0.12(2021-07-08) +- 修复 范围选择的初始时间在一个月内时,造成无法选择的bug +## 2.0.11(2021-07-08) +- 优化 弹出层在超出视窗边缘定位不准确的问题 +## 2.0.10(2021-07-08) +- 修复 范围起始点样式的背景色与今日样式的字体前景色融合,导致日期字体看不清的 bug +- 优化 弹出层在超出视窗边缘被遮盖的问题 +## 2.0.9(2021-07-07) +- 新增 maskClick 事件 +- 修复 特殊情况日历 rpx 布局错误的 bug,rpx -> px +- 修复 范围选择时清空返回值不合理的bug,['', ''] -> [] +## 2.0.8(2021-07-07) +- 新增 日期时间显示框支持插槽 +## 2.0.7(2021-07-01) +- 优化 添加 uni-icons 依赖 +## 2.0.6(2021-05-22) +- 修复 图标在小程序上不显示的 bug +- 优化 重命名引用组件,避免潜在组件命名冲突 +## 2.0.5(2021-05-20) +- 优化 代码目录扁平化 +## 2.0.4(2021-05-12) +- 新增 组件示例地址 +## 2.0.3(2021-05-10) +- 修复 ios 下不识别 '-' 日期格式的 bug +- 优化 pc 下弹出层添加边框和阴影 +## 2.0.2(2021-05-08) +- 修复 在 admin 中获取弹出层定位错误的bug +## 2.0.1(2021-05-08) +- 修复 type 属性向下兼容,默认值从 date 变更为 datetime +## 2.0.0(2021-04-30) +- 支持日历形式的日期+时间的范围选择 + > 注意:此版本不向后兼容,不再支持单独时间选择(type=time)及相关的 hide-second 属性(时间选可使用内置组件 picker) +## 1.0.6(2021-03-18) +- 新增 hide-second 属性,时间支持仅选择时、分 +- 修复 选择跟显示的日期不一样的 bug +- 修复 chang事件触发2次的 bug +- 修复 分、秒 end 范围错误的 bug +- 优化 更好的 nvue 适配 diff --git a/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue new file mode 100644 index 0000000..3d2dbea --- /dev/null +++ b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue @@ -0,0 +1,185 @@ + + + + + diff --git a/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue new file mode 100644 index 0000000..8f7f181 --- /dev/null +++ b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue @@ -0,0 +1,907 @@ + + + + + diff --git a/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json new file mode 100644 index 0000000..9acf1ab --- /dev/null +++ b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json @@ -0,0 +1,22 @@ +{ + "uni-datetime-picker.selectDate": "select date", + "uni-datetime-picker.selectTime": "select time", + "uni-datetime-picker.selectDateTime": "select datetime", + "uni-datetime-picker.startDate": "start date", + "uni-datetime-picker.endDate": "end date", + "uni-datetime-picker.startTime": "start time", + "uni-datetime-picker.endTime": "end time", + "uni-datetime-picker.ok": "ok", + "uni-datetime-picker.clear": "clear", + "uni-datetime-picker.cancel": "cancel", + "uni-datetime-picker.year": "-", + "uni-datetime-picker.month": "", + "uni-calender.MON": "MON", + "uni-calender.TUE": "TUE", + "uni-calender.WED": "WED", + "uni-calender.THU": "THU", + "uni-calender.FRI": "FRI", + "uni-calender.SAT": "SAT", + "uni-calender.SUN": "SUN", + "uni-calender.confirm": "confirm" +} diff --git a/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json new file mode 100644 index 0000000..d2df5e7 --- /dev/null +++ b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json @@ -0,0 +1,22 @@ +{ + "uni-datetime-picker.selectDate": "选择日期", + "uni-datetime-picker.selectTime": "选择时间", + "uni-datetime-picker.selectDateTime": "选择日期时间", + "uni-datetime-picker.startDate": "开始日期", + "uni-datetime-picker.endDate": "结束日期", + "uni-datetime-picker.startTime": "开始时间", + "uni-datetime-picker.endTime": "结束时间", + "uni-datetime-picker.ok": "确定", + "uni-datetime-picker.clear": "清除", + "uni-datetime-picker.cancel": "取消", + "uni-datetime-picker.year": "年", + "uni-datetime-picker.month": "月", + "uni-calender.SUN": "日", + "uni-calender.MON": "一", + "uni-calender.TUE": "二", + "uni-calender.WED": "三", + "uni-calender.THU": "四", + "uni-calender.FRI": "五", + "uni-calender.SAT": "六", + "uni-calender.confirm": "确认" +} \ No newline at end of file diff --git a/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json new file mode 100644 index 0000000..d23fa3c --- /dev/null +++ b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json @@ -0,0 +1,22 @@ +{ + "uni-datetime-picker.selectDate": "選擇日期", + "uni-datetime-picker.selectTime": "選擇時間", + "uni-datetime-picker.selectDateTime": "選擇日期時間", + "uni-datetime-picker.startDate": "開始日期", + "uni-datetime-picker.endDate": "結束日期", + "uni-datetime-picker.startTime": "開始时间", + "uni-datetime-picker.endTime": "結束时间", + "uni-datetime-picker.ok": "確定", + "uni-datetime-picker.clear": "清除", + "uni-datetime-picker.cancel": "取消", + "uni-datetime-picker.year": "年", + "uni-datetime-picker.month": "月", + "uni-calender.SUN": "日", + "uni-calender.MON": "一", + "uni-calender.TUE": "二", + "uni-calender.WED": "三", + "uni-calender.THU": "四", + "uni-calender.FRI": "五", + "uni-calender.SAT": "六", + "uni-calender.confirm": "確認" +} \ No newline at end of file diff --git a/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/keypress.js b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/keypress.js new file mode 100644 index 0000000..9601aba --- /dev/null +++ b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/keypress.js @@ -0,0 +1,45 @@ +// #ifdef H5 +export default { + name: 'Keypress', + props: { + disable: { + type: Boolean, + default: false + } + }, + mounted () { + const keyNames = { + esc: ['Esc', 'Escape'], + tab: 'Tab', + enter: 'Enter', + space: [' ', 'Spacebar'], + up: ['Up', 'ArrowUp'], + left: ['Left', 'ArrowLeft'], + right: ['Right', 'ArrowRight'], + down: ['Down', 'ArrowDown'], + delete: ['Backspace', 'Delete', 'Del'] + } + const listener = ($event) => { + if (this.disable) { + return + } + const keyName = Object.keys(keyNames).find(key => { + const keyName = $event.key + const value = keyNames[key] + return value === keyName || (Array.isArray(value) && value.includes(keyName)) + }) + if (keyName) { + // 避免和其他按键事件冲突 + setTimeout(() => { + this.$emit(keyName, {}) + }, 0) + } + } + document.addEventListener('keyup', listener) + this.$once('hook:beforeDestroy', () => { + document.removeEventListener('keyup', listener) + }) + }, + render: () => {} +} +// #endif \ No newline at end of file diff --git a/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue new file mode 100644 index 0000000..699aa63 --- /dev/null +++ b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue @@ -0,0 +1,927 @@ + + + + + diff --git a/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue new file mode 100644 index 0000000..9bdf8bc --- /dev/null +++ b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue @@ -0,0 +1,1012 @@ + + + + diff --git a/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js new file mode 100644 index 0000000..efa5773 --- /dev/null +++ b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js @@ -0,0 +1,410 @@ +class Calendar { + constructor({ + date, + selected, + startDate, + endDate, + range, + // multipleStatus + } = {}) { + // 当前日期 + this.date = this.getDate(new Date()) // 当前初入日期 + // 打点信息 + this.selected = selected || []; + // 范围开始 + this.startDate = startDate + // 范围结束 + this.endDate = endDate + this.range = range + // 多选状态 + this.cleanMultipleStatus() + // 每周日期 + this.weeks = {} + // this._getWeek(this.date.fullDate) + // this.multipleStatus = multipleStatus + this.lastHover = false + } + /** + * 设置日期 + * @param {Object} date + */ + setDate(date) { + this.selectDate = this.getDate(date) + this._getWeek(this.selectDate.fullDate) + } + + /** + * 清理多选状态 + */ + cleanMultipleStatus() { + this.multipleStatus = { + before: '', + after: '', + data: [] + } + } + + /** + * 重置开始日期 + */ + resetSatrtDate(startDate) { + // 范围开始 + this.startDate = startDate + + } + + /** + * 重置结束日期 + */ + resetEndDate(endDate) { + // 范围结束 + this.endDate = endDate + } + + /** + * 获取任意时间 + */ + getDate(date, AddDayCount = 0, str = 'day') { + if (!date) { + date = new Date() + } + if (typeof date !== 'object') { + date = date.replace(/-/g, '/') + } + const dd = new Date(date) + switch (str) { + case 'day': + dd.setDate(dd.getDate() + AddDayCount) // 获取AddDayCount天后的日期 + break + case 'month': + if (dd.getDate() === 31) { + dd.setDate(dd.getDate() + AddDayCount) + } else { + dd.setMonth(dd.getMonth() + AddDayCount) // 获取AddDayCount天后的日期 + } + break + case 'year': + dd.setFullYear(dd.getFullYear() + AddDayCount) // 获取AddDayCount天后的日期 + break + } + const y = dd.getFullYear() + const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 获取当前月份的日期,不足10补0 + const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 获取当前几号,不足10补0 + return { + fullDate: y + '-' + m + '-' + d, + year: y, + month: m, + date: d, + day: dd.getDay() + } + } + + + /** + * 获取上月剩余天数 + */ + _getLastMonthDays(firstDay, full) { + let dateArr = [] + for (let i = firstDay; i > 0; i--) { + const beforeDate = new Date(full.year, full.month - 1, -i + 1).getDate() + dateArr.push({ + date: beforeDate, + month: full.month - 1, + disable: true + }) + } + return dateArr + } + /** + * 获取本月天数 + */ + _currentMonthDys(dateData, full) { + let dateArr = [] + let fullDate = this.date.fullDate + for (let i = 1; i <= dateData; i++) { + let isinfo = false + let nowDate = full.year + '-' + (full.month < 10 ? + full.month : full.month) + '-' + (i < 10 ? + '0' + i : i) + // 是否今天 + let isDay = fullDate === nowDate + // 获取打点信息 + let info = this.selected && this.selected.find((item) => { + if (this.dateEqual(nowDate, item.date)) { + return item + } + }) + + // 日期禁用 + let disableBefore = true + let disableAfter = true + if (this.startDate) { + // let dateCompBefore = this.dateCompare(this.startDate, fullDate) + // disableBefore = this.dateCompare(dateCompBefore ? this.startDate : fullDate, nowDate) + disableBefore = this.dateCompare(this.startDate, nowDate) + } + + if (this.endDate) { + // let dateCompAfter = this.dateCompare(fullDate, this.endDate) + // disableAfter = this.dateCompare(nowDate, dateCompAfter ? this.endDate : fullDate) + disableAfter = this.dateCompare(nowDate, this.endDate) + } + let multiples = this.multipleStatus.data + let checked = false + let multiplesStatus = -1 + if (this.range) { + if (multiples) { + multiplesStatus = multiples.findIndex((item) => { + return this.dateEqual(item, nowDate) + }) + } + if (multiplesStatus !== -1) { + checked = true + } + } + let data = { + fullDate: nowDate, + year: full.year, + date: i, + multiple: this.range ? checked : false, + beforeMultiple: this.isLogicBefore(nowDate, this.multipleStatus.before, this.multipleStatus.after), + afterMultiple: this.isLogicAfter(nowDate, this.multipleStatus.before, this.multipleStatus.after), + month: full.month, + disable: !(disableBefore && disableAfter), + isDay, + userChecked: false + } + if (info) { + data.extraInfo = info + } + + dateArr.push(data) + } + return dateArr + } + /** + * 获取下月天数 + */ + _getNextMonthDays(surplus, full) { + let dateArr = [] + for (let i = 1; i < surplus + 1; i++) { + dateArr.push({ + date: i, + month: Number(full.month) + 1, + disable: true + }) + } + return dateArr + } + + /** + * 获取当前日期详情 + * @param {Object} date + */ + getInfo(date) { + if (!date) { + date = new Date() + } + const dateInfo = this.canlender.find(item => item.fullDate === this.getDate(date).fullDate) + return dateInfo + } + + /** + * 比较时间大小 + */ + dateCompare(startDate, endDate) { + // 计算截止时间 + startDate = new Date(startDate.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + endDate = new Date(endDate.replace('-', '/').replace('-', '/')) + if (startDate <= endDate) { + return true + } else { + return false + } + } + + /** + * 比较时间是否相等 + */ + dateEqual(before, after) { + // 计算截止时间 + before = new Date(before.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + after = new Date(after.replace('-', '/').replace('-', '/')) + if (before.getTime() - after.getTime() === 0) { + return true + } else { + return false + } + } + + /** + * 比较真实起始日期 + */ + + isLogicBefore(currentDay, before, after) { + let logicBefore = before + if (before && after) { + logicBefore = this.dateCompare(before, after) ? before : after + } + return this.dateEqual(logicBefore, currentDay) + } + + isLogicAfter(currentDay, before, after) { + let logicAfter = after + if (before && after) { + logicAfter = this.dateCompare(before, after) ? after : before + } + return this.dateEqual(logicAfter, currentDay) + } + + /** + * 获取日期范围内所有日期 + * @param {Object} begin + * @param {Object} end + */ + geDateAll(begin, end) { + var arr = [] + var ab = begin.split('-') + var ae = end.split('-') + var db = new Date() + db.setFullYear(ab[0], ab[1] - 1, ab[2]) + var de = new Date() + de.setFullYear(ae[0], ae[1] - 1, ae[2]) + var unixDb = db.getTime() - 24 * 60 * 60 * 1000 + var unixDe = de.getTime() - 24 * 60 * 60 * 1000 + for (var k = unixDb; k <= unixDe;) { + k = k + 24 * 60 * 60 * 1000 + arr.push(this.getDate(new Date(parseInt(k))).fullDate) + } + return arr + } + + /** + * 获取多选状态 + */ + setMultiple(fullDate) { + let { + before, + after + } = this.multipleStatus + if (!this.range) return + if (before && after) { + if (!this.lastHover) { + this.lastHover = true + return + } + this.multipleStatus.before = fullDate + this.multipleStatus.after = '' + this.multipleStatus.data = [] + this.multipleStatus.fulldate = '' + this.lastHover = false + } else { + if (!before) { + this.multipleStatus.before = fullDate + this.lastHover = false + } else { + this.multipleStatus.after = fullDate + if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus + .after); + } else { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus + .before); + } + this.lastHover = true + } + } + this._getWeek(fullDate) + } + + /** + * 鼠标 hover 更新多选状态 + */ + setHoverMultiple(fullDate) { + let { + before, + after + } = this.multipleStatus + + if (!this.range) return + if (this.lastHover) return + + if (!before) { + this.multipleStatus.before = fullDate + } else { + this.multipleStatus.after = fullDate + if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus.after); + } else { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus.before); + } + } + this._getWeek(fullDate) + } + + /** + * 更新默认值多选状态 + */ + setDefaultMultiple(before, after) { + this.multipleStatus.before = before + this.multipleStatus.after = after + if (before && after) { + if (this.dateCompare(before, after)) { + this.multipleStatus.data = this.geDateAll(before, after); + this._getWeek(after) + } else { + this.multipleStatus.data = this.geDateAll(after, before); + this._getWeek(before) + } + } + } + + /** + * 获取每周数据 + * @param {Object} dateData + */ + _getWeek(dateData) { + const { + fullDate, + year, + month, + date, + day + } = this.getDate(dateData) + let firstDay = new Date(year, month - 1, 1).getDay() + let currentDay = new Date(year, month, 0).getDate() + let dates = { + lastMonthDays: this._getLastMonthDays(firstDay, this.getDate(dateData)), // 上个月末尾几天 + currentMonthDys: this._currentMonthDys(currentDay, this.getDate(dateData)), // 本月天数 + nextMonthDays: [], // 下个月开始几天 + weeks: [] + } + let canlender = [] + const surplus = 42 - (dates.lastMonthDays.length + dates.currentMonthDys.length) + dates.nextMonthDays = this._getNextMonthDays(surplus, this.getDate(dateData)) + canlender = canlender.concat(dates.lastMonthDays, dates.currentMonthDys, dates.nextMonthDays) + let weeks = {} + // 拼接数组 上个月开始几天 + 本月天数+ 下个月开始几天 + for (let i = 0; i < canlender.length; i++) { + if (i % 7 === 0) { + weeks[parseInt(i / 7)] = new Array(7) + } + weeks[parseInt(i / 7)][i % 7] = canlender[i] + } + this.canlender = canlender + this.weeks = weeks + } + + //静态方法 + // static init(date) { + // if (!this.instance) { + // this.instance = new Calendar(date); + // } + // return this.instance; + // } +} + + +export default Calendar diff --git a/src/uni_modules/uni-datetime-picker/package.json b/src/uni_modules/uni-datetime-picker/package.json new file mode 100644 index 0000000..60fa1d0 --- /dev/null +++ b/src/uni_modules/uni-datetime-picker/package.json @@ -0,0 +1,90 @@ +{ + "id": "uni-datetime-picker", + "displayName": "uni-datetime-picker 日期选择器", + "version": "2.2.6", + "description": "uni-datetime-picker 日期时间选择器,支持日历,支持范围选择", + "keywords": [ + "uni-datetime-picker", + "uni-ui", + "uniui", + "日期时间选择器", + "日期时间" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "n" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-datetime-picker/readme.md b/src/uni_modules/uni-datetime-picker/readme.md new file mode 100644 index 0000000..162fbef --- /dev/null +++ b/src/uni_modules/uni-datetime-picker/readme.md @@ -0,0 +1,21 @@ + + +> `重要通知:组件升级更新 2.0.0 后,支持日期+时间范围选择,组件 ui 将使用日历选择日期,ui 变化较大,同时支持 PC 和 移动端。此版本不向后兼容,不再支持单独的时间选择(type=time)及相关的 hide-second 属性(时间选可使用内置组件 picker)。若仍需使用旧版本,可在插件市场下载*非uni_modules版本*,旧版本将不再维护` + +## DatetimePicker 时间选择器 + +> **组件名:uni-datetime-picker** +> 代码块: `uDatetimePicker` + + +该组件的优势是,支持**时间戳**输入和输出(起始时间、终止时间也支持时间戳),可**同时选择**日期和时间。 + +若只是需要单独选择日期和时间,不需要时间戳输入和输出,可使用原生的 picker 组件。 + +**_点击 picker 默认值规则:_** + +- 若设置初始值 value, 会显示在 picker 显示框中 +- 若无初始值 value,则初始值 value 为当前本地时间 Date.now(), 但不会显示在 picker 显示框中 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-datetime-picker) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/utils/utils.js b/src/utils/utils.js index 1c06ed6..0b26b3d 100644 --- a/src/utils/utils.js +++ b/src/utils/utils.js @@ -1,6 +1,648 @@ //返回 -function navigateBackFun(){ - uni.navigateBack(); +// function navigateBackFun(){ +// uni.navigateBack(); +// } +export default { + isNotANumber(inputData) { + if (!inputData) { + return false + } + //isNaN(inputData)不能判断空串或一个空格 + //如果是一个空串或是一个空格,而isNaN是做为数字0进行处理的,而parseInt与parseFloat是返回一个错误消息,这个isNaN检查不严密而导致的。 + if (parseFloat(inputData).toString() == "NaN") { + //alert(“请输入数字……”); + return false; + } else { + if (inputData > 0) { + return true; + } else { + return false + } + } + }, + //无图标toast + toast(title) { + uni.showToast({ + title, + icon: 'none', + mask: true, + duration: 2000 + }); + }, + //验证手机号码部分 + chickPhone(phone) { + if (phone.length == 11) { + return true + } else { + return false + } + // let reg = 11 && /^((13|14|15|17|18)[0-9]{1}\d{8})$/; + // //var url="/nptOfficialWebsite/apply/sendSms?mobile="+this.ruleForm.phone; + // if (!phone) { + // return false + // } else if (!reg.test(phone)) { + // return false + // } else { + // return true + // } + }, + formatTime(data) { + if (!data) return '' + let dataArray = data.split(':') + let date0 = dataArray['0'].split('T') + let date1 = dataArray['1'] + return date0[1] + ':' + date1 + }, + toLogin() { + // #ifdef MP-WEIXIN + uni.navigateTo({ + url: "/pages/login/wxLogin/wxLogin" + }) + // #endif + + // #ifndef MP-WEIXIN + uni.navigateTo({ + url: "/pages/login/pasLogin/pasLogin" + }) + // #endif + }, + toastNoIcon(title) { + uni.showToast({ + title: title, + icon: "none", + duration: 2000 + }); + }, + showMyLoading(title = "加载中", mask = true) { + uni.showLoading({ + title, + mask + }) + }, + getTodayYMD() { + let myDate = new Date() + let year = myDate.getFullYear(); //获取完整的年份(4位,1970-????) + let month = myDate.getMonth(); //获取当前月份(0-11,0代表1月) + let date = myDate.getDate(); //获取当前日(1-31) + return `${year}-${month+1}-${date}` + }, + + /** + * 处理富文本里的图片宽度自适应 + * 1.去掉img标签里的style、width、height属性 + * 2.img标签添加style属性:max-width:100%;height:auto + * 3.修改所有style里的width属性为max-width:100% + * 4.去掉
标签 + * @param html + * @returns {void|string|*} + */ + formatRichText(html) { + let newContent = html.replace(/]*>/gi, function(match, capture) { + match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, ''); + match = match.replace(/width="[^"]+"/gi, '').replace(/width='[^']+'/gi, ''); + match = match.replace(/height="[^"]+"/gi, '').replace(/height='[^']+'/gi, ''); + return match; + }); + newContent = newContent.replace(/style="[^"]+"/gi, function(match, capture) { + match = match.replace(/width:[^;]+;/gi, 'max-width:100%;').replace(/width:[^;]+;/gi, 'max-width:100%;'); + return match; + }); + newContent = newContent.replace(/]*\/>/gi, ''); + newContent = newContent.replace(/\/g, '/div>'); + let isCms = 'isCMS' + newContent = newContent.split(isCms)[0] + return newContent; + }, + hideMyLoading() { + try { + uni.hideLoading() + } catch (e) { + + } + }, + upLoadImg(filePath, successfn, type = 1) { + // console.log(filePath,"filePath") + // console.log(successfn,"successfn") + uni.uploadFile({ + url: 'https://api.ghniu.com/upload/file/img/account', //仅为示例,非真实的接口地址 + filePath: filePath, + name: 'files', + formData: { + type + }, + success: (uploadFileRes) => { + // console.log(uploadFileRes,"uploadFileRes") + if (uploadFileRes.statusCode != 200) { + this.toast("上传失败") + return + } + if (JSON.parse(uploadFileRes.data).code != "0") { + this.toast("上传失败") + return + } + successfn(JSON.parse(uploadFileRes.data).data[0]) + } + }); + }, + myBackPage(time = 1500) { + setTimeout(() => { + uni.navigateBack() + }, time) + }, + toGoodsInfo(type, id) { + switch (type) { + //普通 + case 1: + uni.navigateTo({ + url: "/pages/goodsInfo/type12Info/type12Info?goodsid=" + id + }) + break; + //大众 + case 2: + uni.navigateTo({ + url: "/pages/goodsInfo/type12Info/type12Info?goodsid=" + id + }) + break; + //服务 + case 3: + uni.navigateTo({ + url: "/pagesA/service/info/info?id=" + id + }) + break; + //汽车 + case 4: + uni.navigateTo({ + url: "/pages/car/info/info?goodsid=" + id + }) + break; + //司机 + case 5: + uni.navigateTo({ + url: "/pagesA/driver/info/info?id=" + id + }) + break; + default: + break; + } + }, + wxMinShare(imageUrl, title, path) { + this.toast("需要小程序先上架才可以分享") + return + console.log(imageUrl) + uni.share({ + provider: 'weixin', + scene: "WXSceneSession", + type: 5, + imageUrl, + title, + miniProgram: { + id: 'wx902fccb81a579f91', + path, + type: 0, + webUrl: 'https://hdc.nbjice.com' + }, + success: ret => { + console.log(JSON.stringify(ret)); + } + }); + }, + toFLList(item) { + const type = item.classType + switch (type) { + case 1: + uni.navigateTo({ + url: "/pages/tabbar-2/classify/classify?threeId=" + item.threeId + "&name=" + item.name + "&oneId=" + item.oneId + + "&twoId=" + item.twoId + "&type=" + type + }) + break; + case 2: + uni.navigateTo({ + url: "/pages/tabbar-2/classify/classify?threeId=" + item.threeId + "&name=" + item.name + "&oneId=" + item.oneId + + "&twoId=" + item.twoId + "&type=" + type + }) + break; + case 3: + uni.setStorageSync("icoImg", item.icoImg) + uni.navigateTo({ + url: "/pages/car/home/home?threeId=" + item.threeId + "&name=" + item.name + "&oneId=" + item.oneId + }) + break; + case 4: + uni.navigateTo({ + url: "/pagesA/service/list/list?threeId=" + item.threeId + "&name=" + item.name + }) + break; + default: + break; + } + }, + bannerClick(item) { + // banner类型(1外链 2.商品列表 3.商品详情 4.个人中心)/ + switch (item.bannerType) { + case -1: + this.toast("该商品或分类已删除") + return + break; + case 1: + uni.setStorageSync("webviewUrl", item.externalUrl) + uni.navigateTo({ + url: "/pages/webview/webview" + }) + break; + case 2: + if (item.classType == 4) { + uni.navigateTo({ + url: "/pagesA/service/sclass/sclass" + }) + + } else { + uni.navigateTo({ + url: "/pages/tabbar/tabbar-1/classinfo/classinfo?className=" + item.className + "&id=" + item.objectKey + + "&name=" + item.name + "&classType=" + item.classType + }) + } + break; + case 3: + this.toGoodsInfo(item.type, item.objectKey) + break; + case 4: + //店铺首页 + uni.navigateTo({ + url: "/pages/shop/home/home?id=" + item.objectKey + }) + break; + case 5: + this.toFLList(item) + break; + default: + break; + } + }, + checkLocToken() { + if (uni.getStorageSync("token")) { + return true + } else { + uni.showModal({ + title: '提示', + confirmText: "去登录", + confirmColor: "#f56e5d", + cancelText: "取消", + content: '登录后才能使用该功能~', + success: (res) => { + if (res.confirm) { + this.toLogin() + } else if (res.cancel) { + console.log('用户点击取消'); + } + } + }); + return false + } + }, + //加法函数 + accAdd(arg1, arg2) { + var r1, r2, m, c; + try { + r1 = arg1.toString().split(".")[1].length; + } catch (e) { + r1 = 0; + } + try { + r2 = arg2.toString().split(".")[1].length; + } catch (e) { + r2 = 0; + } + c = Math.abs(r1 - r2); + m = Math.pow(10, Math.max(r1, r2)); + if (c > 0) { + var cm = Math.pow(10, c); + if (r1 > r2) { + arg1 = Number(arg1.toString().replace(".", "")); + arg2 = Number(arg2.toString().replace(".", "")) * cm; + } else { + arg1 = Number(arg1.toString().replace(".", "")) * cm; + arg2 = Number(arg2.toString().replace(".", "")); + } + } else { + arg1 = Number(arg1.toString().replace(".", "")); + arg2 = Number(arg2.toString().replace(".", "")); + } + return (arg1 + arg2) / m; + }, + //减法函数 + accSub(arg1, arg2) { + var r1, r2, m, n; + try { + r1 = arg1.toString().split(".")[1].length; + } catch (e) { + r1 = 0; + } + try { + r2 = arg2.toString().split(".")[1].length; + } catch (e) { + r2 = 0; + } + m = Math.pow(10, Math.max(r1, r2)); //last modify by deeka //动态控制精度长度 + n = (r1 >= r2) ? r1 : r2; + return ((arg1 * m - arg2 * m) / m).toFixed(n); + }, + /** + ** 乘法函数,用来得到精确的乘法结果 + ** 说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。 + ** 调用:accMul(arg1,arg2) + ** 返回值:arg1乘以 arg2的精确结果 + **/ + accMul(arg1, arg2) { + + var m = 0, + s1 = arg1.toString(), + s2 = arg2.toString(); + try { + m += s1.split(".")[1].length; + } catch (e) {} + try { + m += s2.split(".")[1].length; + } catch (e) {} + console.log(s1) + return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m); + }, + //除法函数 + accDiv(arg1, arg2) { + var t1 = 0, + t2 = 0, + r1, r2; + try { + t1 = arg1.toString().split(".")[1].length; + } catch (e) {} + try { + t2 = arg2.toString().split(".")[1].length; + } catch (e) {} + r1 = Number(arg1.toString().replace(".", "")); + r2 = Number(arg2.toString().replace(".", "")); + return (r1 / r2) * Math.pow(10, t2 - t1); + }, + getSence(data) { + let a = data.split(",") + console.log(a) + let obj = {} + a.forEach(item => { + let sp = item.split(":") + obj[sp[0]] = sp[1] + }) + return obj + }, + getShowOrHide(state) { + switch (state) { + case 0: + return false + break; + case 1: + return true + break; + case 2: + return true + break; + case 3: + return true + break; + case 4: + return true + break; + case 5: + return true + break; + case 6: + return false + break; + case 7: + return false + break; + case 8: + return true + break; + default: + break; + } + }, + getSellShowOrHide(state) { + switch (state) { + case 0: + return false + break; + case 1: + return false + break; + case 2: + return true + break; + case 3: + return false + break; + case 4: + return false + break; + case 5: + return false + break; + case 6: + return true + break; + case 7: + return false + break; + case 8: + return false + break; + default: + break; + } + }, + getBtn1ShowOrHide(state) { + switch (state) { + case 0: + return false + break; + case 1: + return true + break; + case 2: + return true + break; + case 3: + return true + break; + case 4: + return true + break; + case 5: + return false + break; + case 6: + return false + break; + case 7: + return false + break; + case 8: + return true + break; + default: + break; + } + }, + getBtn2ShowOrHide(state) { + switch (state) { + case 0: + return false + break; + case 1: + return true + break; + case 2: + return true + break; + case 3: + return true + break; + case 4: + return true + break; + case 5: + return true + break; + case 6: + return false + break; + case 7: + return false + break; + case 8: + return true + break; + default: + break; + } + }, + getSellBtn1ShowOrHide(item) { + switch (item.state) { + case 0: + return false + break; + case 1: + return false + break; + case 2: + if (item.itemType == '3') { + return true + } else { + return false + } + return false + break; + case 3: + return false + break; + case 4: + return false + break; + case 5: + return false + break; + case 6: + return true + break; + case 7: + return false + break; + case 8: + return false + break; + default: + break; + } + }, + getSellBtn2ShowOrHide(state) { + switch (state) { + case 0: + return false + break; + case 1: + return false + break; + case 2: + return true + break; + case 3: + return false + break; + case 4: + return false + break; + case 5: + return false + break; + case 6: + return true + break; + case 7: + return false + break; + case 8: + return false + break; + default: + break; + } + }, + //保存图片到本地 + saveImgUtils(url) { + this.showMyLoading("保存中") + uni.downloadFile({ + url, + success: (res) => { + uni.saveImageToPhotosAlbum({ + filePath: res.tempFilePath, + success: (dres) => { + this.toast("图片已保存") + }, + fail: (err) => { + this.toast("保存失败,请检查系统权限") + } + }) + } + }) + }, + clearTokenSet() { + if (uni.getStorageSync("setin")) { + let setin = uni.getStorageSync("setin") + clearInterval(setin) + } + }, + toTalk(toId) { + if (this.checkLocToken()) { + uni.navigateTo({ + url: "/pages/im/talkPage/talkPage?toId=" + toId + }) + } + }, + chickCanSee(item) { + if (item.isMyself != 1 && item.state != 3) { + uni.showModal({ + title: '提示', + confirmText: "确定", + confirmColor: "#f56e5d", + showCancel: false, + content: '该商品已下架', + success: (res) => { + if (res.confirm) { + uni.navigateBack() + } + } + }); + } + } }