whx 1 maand geleden
bovenliggende
commit
ea57c03648
100 gewijzigde bestanden met toevoegingen van 4512 en 71 verwijderingen
  1. 4 1
      virgo.wzfrontend/workark_wx/App.vue
  2. 101 0
      virgo.wzfrontend/workark_wx/js_sdk/js-md5/CHANGELOG.md
  3. 20 0
      virgo.wzfrontend/workark_wx/js_sdk/js-md5/LICENSE.txt
  4. 76 0
      virgo.wzfrontend/workark_wx/js_sdk/js-md5/README.md
  5. 10 0
      virgo.wzfrontend/workark_wx/js_sdk/js-md5/build/md5.min.js
  6. 74 0
      virgo.wzfrontend/workark_wx/js_sdk/js-md5/package.json
  7. 683 0
      virgo.wzfrontend/workark_wx/js_sdk/js-md5/src/md5.js
  8. 6 1
      virgo.wzfrontend/workark_wx/main.js
  9. 19 6
      virgo.wzfrontend/workark_wx/pages.json
  10. 1 0
      virgo.wzfrontend/workark_wx/pages/login/login.vue
  11. 179 0
      virgo.wzfrontend/workark_wx/pages/message/message.vue
  12. 27 0
      virgo.wzfrontend/workark_wx/request/api/chat.js
  13. 11 0
      virgo.wzfrontend/workark_wx/request/api/workark.js
  14. 387 0
      virgo.wzfrontend/workark_wx/subPages/chatPage/chat/chat.vue
  15. 29 24
      virgo.wzfrontend/workark_wx/subPages/workarkPage/surOrder/surOrder.vue
  16. 9 1
      virgo.wzfrontend/workark_wx/subPages/workarkPage/coupon/coupon.vue
  17. 106 0
      virgo.wzfrontend/workark_wx/subPages/workarkPage/paymentStatus/paymentStatus.vue
  18. 44 7
      virgo.wzfrontend/workark_wx/subPages/workarkPage/workarkDetail/workarkDetail.vue
  19. 189 0
      virgo.wzfrontend/workark_wx/uitls/chat.js
  20. 8 0
      virgo.wzfrontend/workark_wx/uni_modules/kevy-result-page/changelog.md
  21. 274 0
      virgo.wzfrontend/workark_wx/uni_modules/kevy-result-page/components/kevy-result-page/kevy-result-page.vue
  22. 84 0
      virgo.wzfrontend/workark_wx/uni_modules/kevy-result-page/package.json
  23. 99 0
      virgo.wzfrontend/workark_wx/uni_modules/kevy-result-page/readme.md
  24. BIN
      virgo.wzfrontend/workark_wx/uni_modules/kevy-result-page/static/icon/icon_error.png
  25. BIN
      virgo.wzfrontend/workark_wx/uni_modules/kevy-result-page/static/icon/icon_info.png
  26. BIN
      virgo.wzfrontend/workark_wx/uni_modules/kevy-result-page/static/icon/icon_success.png
  27. BIN
      virgo.wzfrontend/workark_wx/uni_modules/kevy-result-page/static/icon/icon_waiting.png
  28. BIN
      virgo.wzfrontend/workark_wx/uni_modules/kevy-result-page/static/icon/icon_warning.png
  29. 5 0
      virgo.wzfrontend/workark_wx/uni_modules/uv-empty/components/uv-empty/props.js
  30. 9 28
      virgo.wzfrontend/workark_wx/uni_modules/uv-empty/components/uv-empty/uv-empty.vue
  31. 191 0
      virgo.wzfrontend/workark_wx/uni_modules/wzJun1-YeIM-Uni-SDK/changelog.md
  32. 1457 0
      virgo.wzfrontend/workark_wx/uni_modules/wzJun1-YeIM-Uni-SDK/js_sdk/yeim-uni-sdk.min.d.ts
  33. 3 0
      virgo.wzfrontend/workark_wx/uni_modules/wzJun1-YeIM-Uni-SDK/js_sdk/yeim-uni-sdk.min.js
  34. 87 0
      virgo.wzfrontend/workark_wx/uni_modules/wzJun1-YeIM-Uni-SDK/package.json
  35. 35 0
      virgo.wzfrontend/workark_wx/uni_modules/wzJun1-YeIM-Uni-SDK/readme.md
  36. 0 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/.automator/mp-weixin/.automator.json
  37. 4 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/app.js
  38. 70 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/app.json
  39. 3 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/app.wxss
  40. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/common/main.js
  41. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/common/main.wxss
  42. 4 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/common/runtime.js
  43. 25 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/common/vendor.js
  44. 10 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/components/login/imageCode.js
  45. 4 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/components/login/imageCode.json
  46. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/components/login/imageCode.wxml
  47. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/components/login/imageCode.wxss
  48. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/index/index.js
  49. 4 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/index/index.json
  50. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/index/index.wxml
  51. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/login/login.js
  52. 12 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/login/login.json
  53. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/login/login.wxml
  54. 5 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/login/login.wxss
  55. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/message/message.js
  56. 8 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/message/message.json
  57. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/message/message.wxml
  58. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/message/message.wxss
  59. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/model/model.js
  60. 4 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/model/model.json
  61. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/model/model.wxml
  62. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/my/my.js
  63. 4 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/my/my.json
  64. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/my/my.wxml
  65. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/my/my.wxss
  66. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/shopping/shopping.js
  67. 4 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/shopping/shopping.json
  68. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/shopping/shopping.wxml
  69. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/workark/workark.js
  70. 7 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/workark/workark.json
  71. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/workark/workark.wxml
  72. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/workark/workark.wxss
  73. 29 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/project.config.json
  74. 7 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/project.private.config.json
  75. BIN
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/static/images/empty/null.png
  76. BIN
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/static/images/tabbar/chat-active.png
  77. BIN
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/static/images/tabbar/chat.png
  78. BIN
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/static/images/tabbar/data-active.png
  79. BIN
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/static/images/tabbar/data.png
  80. BIN
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/static/images/tabbar/highseas-active.png
  81. BIN
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/static/images/tabbar/highseas.png
  82. BIN
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/static/images/tabbar/index-active.png
  83. BIN
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/static/images/tabbar/index.png
  84. BIN
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/static/images/tabbar/my-active.png
  85. BIN
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/static/images/tabbar/my.png
  86. 24 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/static/scss/common.scss
  87. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/subPages/chatPage/chat/chat.js
  88. 6 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/subPages/chatPage/chat/chat.json
  89. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/subPages/chatPage/chat/chat.wxml
  90. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/subPages/chatPage/chat/chat.wxss
  91. 10 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/subPages/workarkPage/components/sureOrder.js
  92. 2 2
      virgo.wzfrontend/workark_wx/unpackage/dist/dev/mp-weixin/subPages/workarkPage/surOrder/surOrder.json
  93. 1 1
      virgo.wzfrontend/workark_wx/unpackage/dist/dev/mp-weixin/subPages/workarkPage/surOrder/surOrder.wxml
  94. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/subPages/workarkPage/components/sureOrder.wxss
  95. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/subPages/workarkPage/coupon/coupon.js
  96. 9 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/subPages/workarkPage/coupon/coupon.json
  97. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/subPages/workarkPage/coupon/coupon.wxml
  98. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/subPages/workarkPage/coupon/coupon.wxss
  99. 1 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/subPages/workarkPage/paymentStatus/paymentStatus.js
  100. 0 0
      virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/subPages/workarkPage/paymentStatus/paymentStatus.json

+ 4 - 1
virgo.wzfrontend/workark_wx/App.vue

@@ -1,13 +1,16 @@
 <script>
 	export default {
 		onLaunch: function() {
-			console.log('App Launch')
+			// 设备高度
+			const systemInfo = uni.getWindowInfo();
+			uni.$windowHeight = systemInfo.windowHeight;
 		},
 		// 在页面的onShow生命周期中
 		onShow() {
 			// 尝试从本地存储中恢复数据
 			const savedState = uni.getStorageSync('vuex_state');
 			if (savedState) this.$store.replaceState(Object.assign({}, this.$store.state, savedState));
+			if (this.$store.getters.user.userId) this.$chat.connect('workark' + this.$store.getters.user.userId);
 		},
 		// 在页面的onHide生命周期中
 		onHide() {

+ 101 - 0
virgo.wzfrontend/workark_wx/js_sdk/js-md5/CHANGELOG.md

@@ -0,0 +1,101 @@
+# Change Log
+
+## v0.7.3 / 2017-12-18
+### Fixed
+- incorrect result when first bit is 1 of bytes. #18
+
+## v0.7.2 / 2017-10-31
+### Improved
+- performance of hBytes increment.
+
+## v0.7.1 / 2017-10-29
+### Fixed
+- incorrect result when file size >= 4G.
+
+## v0.7.0 / 2017-10-29
+### Fixed
+- incorrect result when file size >= 512M.
+
+## v0.6.1 / 2017-10-07
+### Fixed
+- ArrayBuffer.isView issue in IE10.
+
+### Improved
+- performance of input check.
+
+## v0.6.0 / 2017-07-28
+### Added
+- support base64 string output.
+
+## v0.5.0 / 2017-07-14
+### Added
+- support for web worker. #11
+
+### Changed
+- throw error if input type is incorrect.
+- prevent webpack to require dependencies.
+
+## v0.4.2 / 2017-01-18
+### Fixed
+- `root` is undefined in some special environment. #7
+
+## v0.4.1 / 2016-03-31
+### Removed
+- length detection in node.js.
+### Deprecated
+- `buffer` and replace by `arrayBuffer`.
+
+## v0.4.0 / 2015-12-28
+### Added
+- support for update hash.
+- support for bytes array output.
+- support for ArrayBuffer output.
+- support for AMD.
+
+## v0.3.0 / 2015-03-07
+### Added
+- support byte Array, Uint8Array and ArrayBuffer input.
+
+## v0.2.2 / 2015-02-01
+### Fixed
+- bug when special length.
+### Improve
+- performance for node.js.
+
+## v0.2.1 / 2015-01-13
+### Improve
+- performance.
+
+## v0.2.0 / 2015-01-12
+### Removed
+- ascii parameter.
+### Improve
+- performance.
+
+## v0.1.4 / 2015-01-11
+### Improve
+- performance.
+### Added
+- test cases.
+
+## v0.1.3 / 2015-01-05
+### Added
+- bower package.
+- travis.
+- coveralls.
+### Improved
+- performance.
+### Fixed
+- JSHint warnings.
+
+## v0.1.2 / 2014-07-27
+### Fixed
+- accents bug
+
+## v0.1.1 / 2014-01-05
+### Changed
+- license
+
+## v0.1.0 / 2014-01-04
+### Added
+- initial release

+ 20 - 0
virgo.wzfrontend/workark_wx/js_sdk/js-md5/LICENSE.txt

@@ -0,0 +1,20 @@
+Copyright 2014-2017 Chen, Yi-Cyuan
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 76 - 0
virgo.wzfrontend/workark_wx/js_sdk/js-md5/README.md

@@ -0,0 +1,76 @@
+# js-md5
+[![Build Status](https://travis-ci.org/emn178/js-md5.svg?branch=master)](https://travis-ci.org/emn178/js-md5)
+[![Coverage Status](https://coveralls.io/repos/emn178/js-md5/badge.svg?branch=master)](https://coveralls.io/r/emn178/js-md5?branch=master)  
+[![NPM](https://nodei.co/npm/js-md5.png?stars&downloads)](https://nodei.co/npm/js-md5/)
+
+A simple MD5 hash function for JavaScript supports UTF-8 encoding.
+
+## Demo
+[MD5 Online](http://emn178.github.io/online-tools/md5.html)  
+[MD5 File Checksum Online](http://emn178.github.io/online-tools/md5_checksum.html)
+
+## Download
+[Compress](https://raw.github.com/emn178/js-md5/master/build/md5.min.js)  
+[Uncompress](https://raw.github.com/emn178/js-md5/master/src/md5.js)
+
+## Installation
+You can also install js-md5 by using Bower.
+
+    bower install md5
+
+For node.js, you can use this command to install:
+
+    npm install js-md5
+
+## Notice
+`buffer` method is deprecated. This maybe confuse with Buffer in node.js. Please use `arrayBuffer` instead.
+
+## Usage
+You could use like this:
+```JavaScript
+md5('Message to hash');
+var hash = md5.create();
+hash.update('Message to hash');
+hash.hex();
+```
+If you use node.js, you should require the module first:
+```JavaScript
+md5 = require('js-md5');
+```
+It supports AMD:
+```JavaScript
+require(['your/path/md5.js'], function(md5) {
+// ...
+});
+```
+[See document](https://emn178.github.com/js-md5/doc/)
+
+## Example
+```JavaScript
+md5(''); // d41d8cd98f00b204e9800998ecf8427e
+md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6
+md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0
+
+// It also supports UTF-8 encoding
+md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07
+
+// It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`
+md5([]); // d41d8cd98f00b204e9800998ecf8427e
+md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e
+
+// Different output
+md5(''); // d41d8cd98f00b204e9800998ecf8427e
+md5.hex(''); // d41d8cd98f00b204e9800998ecf8427e
+md5.array(''); // [212, 29, 140, 217, 143, 0, 178, 4, 233, 128, 9, 152, 236, 248, 66, 126]
+md5.digest(''); // [212, 29, 140, 217, 143, 0, 178, 4, 233, 128, 9, 152, 236, 248, 66, 126]
+md5.arrayBuffer(''); // ArrayBuffer
+md5.buffer(''); // ArrayBuffer, deprecated, This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.
+md5.base64(''); // 1B2M2Y8AsgTpgAmY7PhCfg==
+```
+
+## License
+The project is released under the [MIT license](http://www.opensource.org/licenses/MIT).
+
+## Contact
+The project's website is located at https://github.com/emn178/js-md5  
+Author: Chen, Yi-Cyuan (emn178@gmail.com)

File diff suppressed because it is too large
+ 10 - 0
virgo.wzfrontend/workark_wx/js_sdk/js-md5/build/md5.min.js


+ 74 - 0
virgo.wzfrontend/workark_wx/js_sdk/js-md5/package.json

@@ -0,0 +1,74 @@
+{
+  "_from": "js-md5",
+  "_id": "js-md5@0.7.3",
+  "_inBundle": false,
+  "_integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==",
+  "_location": "/js-md5",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "tag",
+    "registry": true,
+    "raw": "js-md5",
+    "name": "js-md5",
+    "escapedName": "js-md5",
+    "rawSpec": "",
+    "saveSpec": null,
+    "fetchSpec": "latest"
+  },
+  "_requiredBy": [
+    "#DEV:/",
+    "#USER"
+  ],
+  "_resolved": "https://registry.npmjs.org/js-md5/-/js-md5-0.7.3.tgz",
+  "_shasum": "b4f2fbb0b327455f598d6727e38ec272cd09c3f2",
+  "_spec": "js-md5",
+  "_where": "C:\\Users\\dcloud\\Documents\\HBuilderProjects\\test-npm",
+  "author": {
+    "name": "Chen, Yi-Cyuan",
+    "email": "emn178@gmail.com"
+  },
+  "bugs": {
+    "url": "https://github.com/emn178/js-md5/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "A simple MD5 hash function for JavaScript supports UTF-8 encoding.",
+  "devDependencies": {
+    "expect.js": "~0.3.1",
+    "jsdoc": "^3.4.0",
+    "mocha": "~2.3.4",
+    "nyc": "^11.3.0",
+    "requirejs": "^2.1.22",
+    "uglify-js": "^3.1.9",
+    "webworker-threads": "^0.7.11"
+  },
+  "homepage": "https://github.com/emn178/js-md5",
+  "keywords": [
+    "md5",
+    "hash",
+    "encryption",
+    "cryptography",
+    "HMAC"
+  ],
+  "license": "MIT",
+  "main": "src/md5.js",
+  "name": "js-md5",
+  "nyc": {
+    "exclude": [
+      "tests"
+    ]
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/emn178/js-md5.git"
+  },
+  "scripts": {
+    "build": "npm run-script compress;npm run-script doc",
+    "compress": "uglifyjs src/md5.js -c -m eval --comments --output build/md5.min.js",
+    "coveralls": "nyc report --reporter=text-lcov | coveralls",
+    "doc": "rm -rf doc;jsdoc src README.md -d doc",
+    "report": "nyc --reporter=html --reporter=text mocha tests/node-test.js",
+    "test": "nyc mocha tests/node-test.js"
+  },
+  "version": "0.7.3"
+}

+ 683 - 0
virgo.wzfrontend/workark_wx/js_sdk/js-md5/src/md5.js

@@ -0,0 +1,683 @@
+/**
+ * [js-md5]{@link https://github.com/emn178/js-md5}
+ *
+ * @namespace md5
+ * @version 0.7.3
+ * @author Chen, Yi-Cyuan [emn178@gmail.com]
+ * @copyright Chen, Yi-Cyuan 2014-2017
+ * @license MIT
+ */
+(function () {
+  'use strict';
+
+  var ERROR = 'input is invalid type';
+  var WINDOW = typeof window === 'object';
+  var root = WINDOW ? window : {};
+  if (root.JS_MD5_NO_WINDOW) {
+    WINDOW = false;
+  }
+  var WEB_WORKER = !WINDOW && typeof self === 'object';
+  var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;
+  if (NODE_JS) {
+    root = global;
+  } else if (WEB_WORKER) {
+    root = self;
+  }
+  var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;
+  var AMD = typeof define === 'function' && define.amd;
+  var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';
+  var HEX_CHARS = '0123456789abcdef'.split('');
+  var EXTRA = [128, 32768, 8388608, -2147483648];
+  var SHIFT = [0, 8, 16, 24];
+  var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];
+  var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
+
+  var blocks = [], buffer8;
+  if (ARRAY_BUFFER) {
+    var buffer = new ArrayBuffer(68);
+    buffer8 = new Uint8Array(buffer);
+    blocks = new Uint32Array(buffer);
+  }
+
+  if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {
+    Array.isArray = function (obj) {
+      return Object.prototype.toString.call(obj) === '[object Array]';
+    };
+  }
+
+  if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {
+    ArrayBuffer.isView = function (obj) {
+      return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;
+    };
+  }
+
+  /**
+   * @method hex
+   * @memberof md5
+   * @description Output hash as hex string
+   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
+   * @returns {String} Hex string
+   * @example
+   * md5.hex('The quick brown fox jumps over the lazy dog');
+   * // equal to
+   * md5('The quick brown fox jumps over the lazy dog');
+   */
+  /**
+   * @method digest
+   * @memberof md5
+   * @description Output hash as bytes array
+   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
+   * @returns {Array} Bytes array
+   * @example
+   * md5.digest('The quick brown fox jumps over the lazy dog');
+   */
+  /**
+   * @method array
+   * @memberof md5
+   * @description Output hash as bytes array
+   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
+   * @returns {Array} Bytes array
+   * @example
+   * md5.array('The quick brown fox jumps over the lazy dog');
+   */
+  /**
+   * @method arrayBuffer
+   * @memberof md5
+   * @description Output hash as ArrayBuffer
+   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
+   * @returns {ArrayBuffer} ArrayBuffer
+   * @example
+   * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');
+   */
+  /**
+   * @method buffer
+   * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.
+   * @memberof md5
+   * @description Output hash as ArrayBuffer
+   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
+   * @returns {ArrayBuffer} ArrayBuffer
+   * @example
+   * md5.buffer('The quick brown fox jumps over the lazy dog');
+   */
+  /**
+   * @method base64
+   * @memberof md5
+   * @description Output hash as base64 string
+   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
+   * @returns {String} base64 string
+   * @example
+   * md5.base64('The quick brown fox jumps over the lazy dog');
+   */
+  var createOutputMethod = function (outputType) {
+    return function (message) {
+      return new Md5(true).update(message)[outputType]();
+    };
+  };
+
+  /**
+   * @method create
+   * @memberof md5
+   * @description Create Md5 object
+   * @returns {Md5} Md5 object.
+   * @example
+   * var hash = md5.create();
+   */
+  /**
+   * @method update
+   * @memberof md5
+   * @description Create and update Md5 object
+   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
+   * @returns {Md5} Md5 object.
+   * @example
+   * var hash = md5.update('The quick brown fox jumps over the lazy dog');
+   * // equal to
+   * var hash = md5.create();
+   * hash.update('The quick brown fox jumps over the lazy dog');
+   */
+  var createMethod = function () {
+    var method = createOutputMethod('hex');
+    if (NODE_JS) {
+      method = nodeWrap(method);
+    }
+    method.create = function () {
+      return new Md5();
+    };
+    method.update = function (message) {
+      return method.create().update(message);
+    };
+    for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
+      var type = OUTPUT_TYPES[i];
+      method[type] = createOutputMethod(type);
+    }
+    return method;
+  };
+
+  var nodeWrap = function (method) {
+    var crypto = eval("require('crypto')");
+    var Buffer = eval("require('buffer').Buffer");
+    var nodeMethod = function (message) {
+      if (typeof message === 'string') {
+        return crypto.createHash('md5').update(message, 'utf8').digest('hex');
+      } else {
+        if (message === null || message === undefined) {
+          throw ERROR;
+        } else if (message.constructor === ArrayBuffer) {
+          message = new Uint8Array(message);
+        }
+      }
+      if (Array.isArray(message) || ArrayBuffer.isView(message) ||
+        message.constructor === Buffer) {
+        return crypto.createHash('md5').update(new Buffer(message)).digest('hex');
+      } else {
+        return method(message);
+      }
+    };
+    return nodeMethod;
+  };
+
+  /**
+   * Md5 class
+   * @class Md5
+   * @description This is internal class.
+   * @see {@link md5.create}
+   */
+  function Md5(sharedMemory) {
+    if (sharedMemory) {
+      blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =
+      blocks[4] = blocks[5] = blocks[6] = blocks[7] =
+      blocks[8] = blocks[9] = blocks[10] = blocks[11] =
+      blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
+      this.blocks = blocks;
+      this.buffer8 = buffer8;
+    } else {
+      if (ARRAY_BUFFER) {
+        var buffer = new ArrayBuffer(68);
+        this.buffer8 = new Uint8Array(buffer);
+        this.blocks = new Uint32Array(buffer);
+      } else {
+        this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
+      }
+    }
+    this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;
+    this.finalized = this.hashed = false;
+    this.first = true;
+  }
+
+  /**
+   * @method update
+   * @memberof Md5
+   * @instance
+   * @description Update hash
+   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
+   * @returns {Md5} Md5 object.
+   * @see {@link md5.update}
+   */
+  Md5.prototype.update = function (message) {
+    if (this.finalized) {
+      return;
+    }
+
+    var notString, type = typeof message;
+    if (type !== 'string') {
+      if (type === 'object') {
+        if (message === null) {
+          throw ERROR;
+        } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {
+          message = new Uint8Array(message);
+        } else if (!Array.isArray(message)) {
+          if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {
+            throw ERROR;
+          }
+        }
+      } else {
+        throw ERROR;
+      }
+      notString = true;
+    }
+    var code, index = 0, i, length = message.length, blocks = this.blocks;
+    var buffer8 = this.buffer8;
+
+    while (index < length) {
+      if (this.hashed) {
+        this.hashed = false;
+        blocks[0] = blocks[16];
+        blocks[16] = blocks[1] = blocks[2] = blocks[3] =
+        blocks[4] = blocks[5] = blocks[6] = blocks[7] =
+        blocks[8] = blocks[9] = blocks[10] = blocks[11] =
+        blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
+      }
+
+      if (notString) {
+        if (ARRAY_BUFFER) {
+          for (i = this.start; index < length && i < 64; ++index) {
+            buffer8[i++] = message[index];
+          }
+        } else {
+          for (i = this.start; index < length && i < 64; ++index) {
+            blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];
+          }
+        }
+      } else {
+        if (ARRAY_BUFFER) {
+          for (i = this.start; index < length && i < 64; ++index) {
+            code = message.charCodeAt(index);
+            if (code < 0x80) {
+              buffer8[i++] = code;
+            } else if (code < 0x800) {
+              buffer8[i++] = 0xc0 | (code >> 6);
+              buffer8[i++] = 0x80 | (code & 0x3f);
+            } else if (code < 0xd800 || code >= 0xe000) {
+              buffer8[i++] = 0xe0 | (code >> 12);
+              buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);
+              buffer8[i++] = 0x80 | (code & 0x3f);
+            } else {
+              code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
+              buffer8[i++] = 0xf0 | (code >> 18);
+              buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);
+              buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);
+              buffer8[i++] = 0x80 | (code & 0x3f);
+            }
+          }
+        } else {
+          for (i = this.start; index < length && i < 64; ++index) {
+            code = message.charCodeAt(index);
+            if (code < 0x80) {
+              blocks[i >> 2] |= code << SHIFT[i++ & 3];
+            } else if (code < 0x800) {
+              blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];
+              blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
+            } else if (code < 0xd800 || code >= 0xe000) {
+              blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];
+              blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
+              blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
+            } else {
+              code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
+              blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];
+              blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];
+              blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
+              blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
+            }
+          }
+        }
+      }
+      this.lastByteIndex = i;
+      this.bytes += i - this.start;
+      if (i >= 64) {
+        this.start = i - 64;
+        this.hash();
+        this.hashed = true;
+      } else {
+        this.start = i;
+      }
+    }
+    if (this.bytes > 4294967295) {
+      this.hBytes += this.bytes / 4294967296 << 0;
+      this.bytes = this.bytes % 4294967296;
+    }
+    return this;
+  };
+
+  Md5.prototype.finalize = function () {
+    if (this.finalized) {
+      return;
+    }
+    this.finalized = true;
+    var blocks = this.blocks, i = this.lastByteIndex;
+    blocks[i >> 2] |= EXTRA[i & 3];
+    if (i >= 56) {
+      if (!this.hashed) {
+        this.hash();
+      }
+      blocks[0] = blocks[16];
+      blocks[16] = blocks[1] = blocks[2] = blocks[3] =
+      blocks[4] = blocks[5] = blocks[6] = blocks[7] =
+      blocks[8] = blocks[9] = blocks[10] = blocks[11] =
+      blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
+    }
+    blocks[14] = this.bytes << 3;
+    blocks[15] = this.hBytes << 3 | this.bytes >>> 29;
+    this.hash();
+  };
+
+  Md5.prototype.hash = function () {
+    var a, b, c, d, bc, da, blocks = this.blocks;
+
+    if (this.first) {
+      a = blocks[0] - 680876937;
+      a = (a << 7 | a >>> 25) - 271733879 << 0;
+      d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;
+      d = (d << 12 | d >>> 20) + a << 0;
+      c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;
+      c = (c << 17 | c >>> 15) + d << 0;
+      b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;
+      b = (b << 22 | b >>> 10) + c << 0;
+    } else {
+      a = this.h0;
+      b = this.h1;
+      c = this.h2;
+      d = this.h3;
+      a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;
+      a = (a << 7 | a >>> 25) + b << 0;
+      d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;
+      d = (d << 12 | d >>> 20) + a << 0;
+      c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;
+      c = (c << 17 | c >>> 15) + d << 0;
+      b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;
+      b = (b << 22 | b >>> 10) + c << 0;
+    }
+
+    a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;
+    a = (a << 7 | a >>> 25) + b << 0;
+    d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;
+    d = (d << 12 | d >>> 20) + a << 0;
+    c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;
+    c = (c << 17 | c >>> 15) + d << 0;
+    b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;
+    b = (b << 22 | b >>> 10) + c << 0;
+    a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;
+    a = (a << 7 | a >>> 25) + b << 0;
+    d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;
+    d = (d << 12 | d >>> 20) + a << 0;
+    c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;
+    c = (c << 17 | c >>> 15) + d << 0;
+    b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;
+    b = (b << 22 | b >>> 10) + c << 0;
+    a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;
+    a = (a << 7 | a >>> 25) + b << 0;
+    d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;
+    d = (d << 12 | d >>> 20) + a << 0;
+    c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;
+    c = (c << 17 | c >>> 15) + d << 0;
+    b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;
+    b = (b << 22 | b >>> 10) + c << 0;
+    a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;
+    a = (a << 5 | a >>> 27) + b << 0;
+    d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;
+    d = (d << 9 | d >>> 23) + a << 0;
+    c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;
+    c = (c << 14 | c >>> 18) + d << 0;
+    b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;
+    b = (b << 20 | b >>> 12) + c << 0;
+    a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;
+    a = (a << 5 | a >>> 27) + b << 0;
+    d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;
+    d = (d << 9 | d >>> 23) + a << 0;
+    c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;
+    c = (c << 14 | c >>> 18) + d << 0;
+    b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;
+    b = (b << 20 | b >>> 12) + c << 0;
+    a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;
+    a = (a << 5 | a >>> 27) + b << 0;
+    d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;
+    d = (d << 9 | d >>> 23) + a << 0;
+    c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;
+    c = (c << 14 | c >>> 18) + d << 0;
+    b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;
+    b = (b << 20 | b >>> 12) + c << 0;
+    a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;
+    a = (a << 5 | a >>> 27) + b << 0;
+    d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;
+    d = (d << 9 | d >>> 23) + a << 0;
+    c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;
+    c = (c << 14 | c >>> 18) + d << 0;
+    b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;
+    b = (b << 20 | b >>> 12) + c << 0;
+    bc = b ^ c;
+    a += (bc ^ d) + blocks[5] - 378558;
+    a = (a << 4 | a >>> 28) + b << 0;
+    d += (bc ^ a) + blocks[8] - 2022574463;
+    d = (d << 11 | d >>> 21) + a << 0;
+    da = d ^ a;
+    c += (da ^ b) + blocks[11] + 1839030562;
+    c = (c << 16 | c >>> 16) + d << 0;
+    b += (da ^ c) + blocks[14] - 35309556;
+    b = (b << 23 | b >>> 9) + c << 0;
+    bc = b ^ c;
+    a += (bc ^ d) + blocks[1] - 1530992060;
+    a = (a << 4 | a >>> 28) + b << 0;
+    d += (bc ^ a) + blocks[4] + 1272893353;
+    d = (d << 11 | d >>> 21) + a << 0;
+    da = d ^ a;
+    c += (da ^ b) + blocks[7] - 155497632;
+    c = (c << 16 | c >>> 16) + d << 0;
+    b += (da ^ c) + blocks[10] - 1094730640;
+    b = (b << 23 | b >>> 9) + c << 0;
+    bc = b ^ c;
+    a += (bc ^ d) + blocks[13] + 681279174;
+    a = (a << 4 | a >>> 28) + b << 0;
+    d += (bc ^ a) + blocks[0] - 358537222;
+    d = (d << 11 | d >>> 21) + a << 0;
+    da = d ^ a;
+    c += (da ^ b) + blocks[3] - 722521979;
+    c = (c << 16 | c >>> 16) + d << 0;
+    b += (da ^ c) + blocks[6] + 76029189;
+    b = (b << 23 | b >>> 9) + c << 0;
+    bc = b ^ c;
+    a += (bc ^ d) + blocks[9] - 640364487;
+    a = (a << 4 | a >>> 28) + b << 0;
+    d += (bc ^ a) + blocks[12] - 421815835;
+    d = (d << 11 | d >>> 21) + a << 0;
+    da = d ^ a;
+    c += (da ^ b) + blocks[15] + 530742520;
+    c = (c << 16 | c >>> 16) + d << 0;
+    b += (da ^ c) + blocks[2] - 995338651;
+    b = (b << 23 | b >>> 9) + c << 0;
+    a += (c ^ (b | ~d)) + blocks[0] - 198630844;
+    a = (a << 6 | a >>> 26) + b << 0;
+    d += (b ^ (a | ~c)) + blocks[7] + 1126891415;
+    d = (d << 10 | d >>> 22) + a << 0;
+    c += (a ^ (d | ~b)) + blocks[14] - 1416354905;
+    c = (c << 15 | c >>> 17) + d << 0;
+    b += (d ^ (c | ~a)) + blocks[5] - 57434055;
+    b = (b << 21 | b >>> 11) + c << 0;
+    a += (c ^ (b | ~d)) + blocks[12] + 1700485571;
+    a = (a << 6 | a >>> 26) + b << 0;
+    d += (b ^ (a | ~c)) + blocks[3] - 1894986606;
+    d = (d << 10 | d >>> 22) + a << 0;
+    c += (a ^ (d | ~b)) + blocks[10] - 1051523;
+    c = (c << 15 | c >>> 17) + d << 0;
+    b += (d ^ (c | ~a)) + blocks[1] - 2054922799;
+    b = (b << 21 | b >>> 11) + c << 0;
+    a += (c ^ (b | ~d)) + blocks[8] + 1873313359;
+    a = (a << 6 | a >>> 26) + b << 0;
+    d += (b ^ (a | ~c)) + blocks[15] - 30611744;
+    d = (d << 10 | d >>> 22) + a << 0;
+    c += (a ^ (d | ~b)) + blocks[6] - 1560198380;
+    c = (c << 15 | c >>> 17) + d << 0;
+    b += (d ^ (c | ~a)) + blocks[13] + 1309151649;
+    b = (b << 21 | b >>> 11) + c << 0;
+    a += (c ^ (b | ~d)) + blocks[4] - 145523070;
+    a = (a << 6 | a >>> 26) + b << 0;
+    d += (b ^ (a | ~c)) + blocks[11] - 1120210379;
+    d = (d << 10 | d >>> 22) + a << 0;
+    c += (a ^ (d | ~b)) + blocks[2] + 718787259;
+    c = (c << 15 | c >>> 17) + d << 0;
+    b += (d ^ (c | ~a)) + blocks[9] - 343485551;
+    b = (b << 21 | b >>> 11) + c << 0;
+
+    if (this.first) {
+      this.h0 = a + 1732584193 << 0;
+      this.h1 = b - 271733879 << 0;
+      this.h2 = c - 1732584194 << 0;
+      this.h3 = d + 271733878 << 0;
+      this.first = false;
+    } else {
+      this.h0 = this.h0 + a << 0;
+      this.h1 = this.h1 + b << 0;
+      this.h2 = this.h2 + c << 0;
+      this.h3 = this.h3 + d << 0;
+    }
+  };
+
+  /**
+   * @method hex
+   * @memberof Md5
+   * @instance
+   * @description Output hash as hex string
+   * @returns {String} Hex string
+   * @see {@link md5.hex}
+   * @example
+   * hash.hex();
+   */
+  Md5.prototype.hex = function () {
+    this.finalize();
+
+    var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;
+
+    return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +
+      HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +
+      HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +
+      HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +
+      HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +
+      HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +
+      HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +
+      HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +
+      HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +
+      HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +
+      HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +
+      HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +
+      HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +
+      HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +
+      HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +
+      HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];
+  };
+
+  /**
+   * @method toString
+   * @memberof Md5
+   * @instance
+   * @description Output hash as hex string
+   * @returns {String} Hex string
+   * @see {@link md5.hex}
+   * @example
+   * hash.toString();
+   */
+  Md5.prototype.toString = Md5.prototype.hex;
+
+  /**
+   * @method digest
+   * @memberof Md5
+   * @instance
+   * @description Output hash as bytes array
+   * @returns {Array} Bytes array
+   * @see {@link md5.digest}
+   * @example
+   * hash.digest();
+   */
+  Md5.prototype.digest = function () {
+    this.finalize();
+
+    var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;
+    return [
+      h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,
+      h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,
+      h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,
+      h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF
+    ];
+  };
+
+  /**
+   * @method array
+   * @memberof Md5
+   * @instance
+   * @description Output hash as bytes array
+   * @returns {Array} Bytes array
+   * @see {@link md5.array}
+   * @example
+   * hash.array();
+   */
+  Md5.prototype.array = Md5.prototype.digest;
+
+  /**
+   * @method arrayBuffer
+   * @memberof Md5
+   * @instance
+   * @description Output hash as ArrayBuffer
+   * @returns {ArrayBuffer} ArrayBuffer
+   * @see {@link md5.arrayBuffer}
+   * @example
+   * hash.arrayBuffer();
+   */
+  Md5.prototype.arrayBuffer = function () {
+    this.finalize();
+
+    var buffer = new ArrayBuffer(16);
+    var blocks = new Uint32Array(buffer);
+    blocks[0] = this.h0;
+    blocks[1] = this.h1;
+    blocks[2] = this.h2;
+    blocks[3] = this.h3;
+    return buffer;
+  };
+
+  /**
+   * @method buffer
+   * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.
+   * @memberof Md5
+   * @instance
+   * @description Output hash as ArrayBuffer
+   * @returns {ArrayBuffer} ArrayBuffer
+   * @see {@link md5.buffer}
+   * @example
+   * hash.buffer();
+   */
+  Md5.prototype.buffer = Md5.prototype.arrayBuffer;
+
+  /**
+   * @method base64
+   * @memberof Md5
+   * @instance
+   * @description Output hash as base64 string
+   * @returns {String} base64 string
+   * @see {@link md5.base64}
+   * @example
+   * hash.base64();
+   */
+  Md5.prototype.base64 = function () {
+    var v1, v2, v3, base64Str = '', bytes = this.array();
+    for (var i = 0; i < 15;) {
+      v1 = bytes[i++];
+      v2 = bytes[i++];
+      v3 = bytes[i++];
+      base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
+        BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +
+        BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +
+        BASE64_ENCODE_CHAR[v3 & 63];
+    }
+    v1 = bytes[i];
+    base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
+      BASE64_ENCODE_CHAR[(v1 << 4) & 63] +
+      '==';
+    return base64Str;
+  };
+
+  var exports = createMethod();
+
+  if (COMMON_JS) {
+    module.exports = exports;
+  } else {
+    /**
+     * @method md5
+     * @description Md5 hash function, export to global in browsers.
+     * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
+     * @returns {String} md5 hashes
+     * @example
+     * md5(''); // d41d8cd98f00b204e9800998ecf8427e
+     * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6
+     * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0
+     *
+     * // It also supports UTF-8 encoding
+     * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07
+     *
+     * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`
+     * md5([]); // d41d8cd98f00b204e9800998ecf8427e
+     * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e
+     */
+    root.md5 = exports;
+    if (AMD) {
+      define(function () {
+        return exports;
+      });
+    }
+  }
+})();

+ 6 - 1
virgo.wzfrontend/workark_wx/main.js

@@ -10,7 +10,12 @@ uni.$uv.setConfig({
 		unit: 'rpx'
 	}
 })
-Vue.prototype.$store = store;
+Vue.prototype.$store = store;
+
+import chat from './uitls/chat.js'
+chat.init();
+Vue.prototype.$chat = chat;
+
 Vue.prototype.$toast = msg => {
 	uni.showToast({
 		title: msg,

+ 19 - 6
virgo.wzfrontend/workark_wx/pages.json

@@ -29,6 +29,11 @@
 		"style": {
 			"navigationBarTitleText": ""
 		}
+	}, {
+		"path": "pages/message/message",
+		"style": {
+			"navigationBarTitleText": "消息"
+		}
 	}],
 	"subPackages": [{
 		"root": "subPages/workarkPage",
@@ -38,14 +43,22 @@
 				"navigationBarTitleText": "服务详情"
 			}
 		}, {
-			"path": "surOrder/surOrder",
+			"path": "coupon/coupon",
 			"style": {
-				"navigationBarTitleText": "确认订单"
+				"navigationBarTitleText": "优惠券"
 			}
 		}, {
-			"path": "coupon/coupon",
+			"path": "paymentStatus/paymentStatus",
 			"style": {
-				"navigationBarTitleText": "优惠券"
+				"navigationBarTitleText": "支付详情"
+			}
+		}]
+	}, {
+		"root": "subPages/chatPage",
+		"pages": [{
+			"path": "chat/chat",
+			"style": {
+				"navigationBarTitleText": ""
 			}
 		}]
 	}],
@@ -58,10 +71,10 @@
 			"selectedIconPath": "static/images/tabbar/index-active.png",
 			"text": "首页"
 		}, {
-			"pagePath": "pages/model/model",
+			"pagePath": "pages/message/message",
 			"iconPath": "static/images/tabbar/chat.png",
 			"selectedIconPath": "static/images/tabbar/chat-active.png",
-			"text": "模型"
+			"text": "消息"
 		}, {
 			"pagePath": "pages/workark/workark",
 			"iconPath": "static/images/tabbar/highseas.png",

+ 1 - 0
virgo.wzfrontend/workark_wx/pages/login/login.vue

@@ -177,6 +177,7 @@
 				if (!userData.state) return;
 				this.$store.dispatch('app/changeOrganization', userData.data.workarkOrganization);
 				this.$store.dispatch('app/changeUser', userData.data);
+				this.$chat.connect('workark' + userData.data.userId);
 				uni.setStorageSync('vuex_state', this.$store.state);
 				uni.hideLoading();
 				this.$toast('登录成功');

+ 179 - 0
virgo.wzfrontend/workark_wx/pages/message/message.vue

@@ -0,0 +1,179 @@
+<template>
+	<view class="message">
+		<view class="message-empty" v-if="chatList.length === 0">
+			<uv-empty icon="https://file-node.oss-cn-shanghai.aliyuncs.com/youji/fa57e25b38c442ebb0ba023cace796bb"
+				:isImg="true" textSize="28" width="360" :text="option.tip">
+				<view class="message-button-box">
+					<uv-button type="primary" :text="option.btnText" size="small" v-if="option.btnText"
+						@tap="$navigateTo('/pages/login/login')">
+					</uv-button>
+				</view>
+			</uv-empty>
+		</view>
+		<view class="message-list" v-else>
+			<!-- 消息提示 -->
+			<view class="message-item" v-for="(item,index) in chatList" :key="index" @click="linkTo(item)">
+				<view class="message-image-box">
+					<uv-badge type="error" max="99" numberType="overflow" :value="item.unread" :absolute="true"
+						:offset="[0,0]" :customStyle="{
+							zIndex:99
+						}">
+					</uv-badge>
+					<image :src="item.userInfo.avatarUrl" class="message-image" mode="aspectFill">
+					</image>
+				</view>
+				<view class="message-content">
+					<view class="message-title">{{item.userInfo.nickname}}</view>
+					<view class="message-sub-content">
+						{{item.lastMessage.type === 'image'?'[图片]':item.lastMessage.body.text}}
+					</view>
+				</view>
+				<view class="message-date">
+					<uni-dateformat class="visitor-time" :date="item.updatedAt || item.createdAt"
+						:threshold="[60000,3600000 * 24 * 365]">
+					</uni-dateformat>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				option: {
+					tip: '暂无会话'
+				},
+				chatList: [],
+				systemCount: 0,
+				systemDate: ''
+			}
+		},
+		onLoad() {
+			uni.$on('changeChatList', this.countNumber);
+		},
+		onShow() {
+			if (!uni.getStorageSync('token')) {
+				this.chatList = [];
+				this.option = {
+					tip: '暂未登录',
+					btnText: '点击登录'
+				}
+			} else {
+				this.option = {
+					tip: '暂无会话'
+				}
+				this.$chat.listenerList();
+				this.init();
+			}
+		},
+		methods: {
+			init() {
+				this.$chat.getConversationList(data => {
+					this.countNumber(data.data);
+				});
+			},
+			countNumber(data) {
+				this.chatList = data.filter(node => node.conversationId !== 'system');
+				this.unread();
+			},
+			linkTo(item) {
+				this.$chat.clearConversationUnread(item.conversationId);
+				this.$navigateTo('/subPages/chatPage/chat/chat?userId=' + item.conversationId + '&userName=' + item
+					.userInfo.nickname)
+			},
+			unread() {
+				let badge = this.systemCount;
+				let list = this.chatList;
+				for (let i = 0; i < list.length; i++) {
+					badge += list[i].unread
+				}
+				if (!badge) {
+					uni.removeTabBarBadge({
+						index: 1
+					})
+				} else {
+					uni.setTabBarBadge({
+						index: 1,
+						text: String(badge)
+					})
+				}
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.message {
+		padding: 30rpx 0;
+
+		.message-button-box {
+			margin-top: 40rpx;
+		}
+
+		.message-empty {
+			padding-top: 80rpx;
+		}
+
+		.message-item {
+			background: #fff;
+			display: flex;
+			padding: 24rpx 30rpx;
+			position: relative;
+
+			&::before {
+				content: '';
+				position: absolute;
+				bottom: 0;
+				right: 0;
+				left: 150rpx;
+				height: 2rpx;
+				background: $uv-border-color;
+			}
+		}
+
+		.message-image {
+			width: 100rpx;
+			height: 100rpx;
+			border-radius: 16rpx;
+			overflow: hidden;
+			position: relative;
+		}
+
+		.message-image-box {
+			width: 100rpx;
+			height: 100rpx;
+			position: relative;
+		}
+
+		.message-content {
+			flex: 1;
+			width: 0;
+			margin-left: 20rpx;
+			display: flex;
+			flex-direction: column;
+			justify-content: center;
+		}
+
+		.message-title {
+			font-size: 32rpx;
+			font-weight: 600;
+			margin-bottom: 10rpx;
+		}
+
+		.message-sub-content {
+			font-weight: 300;
+			color: $uv-content-color;
+		}
+
+		.message-date {
+			position: absolute;
+			top: 34rpx;
+			right: 30rpx;
+			font-size: 24rpx;
+			font-weight: 300;
+			color: $uv-content-color;
+		}
+	}
+</style>

+ 27 - 0
virgo.wzfrontend/workark_wx/request/api/chat.js

@@ -0,0 +1,27 @@
+import {
+	request
+} from '@/request/request.js';
+/* 
+ * 聊天登录
+ * 
+ * 
+ */
+export function login(data) {
+	return request({
+		url: `/im/user/token/get`,
+		method: 'post',
+		data: data
+	})
+}
+/* 
+ * 发送聊天消息
+ * 
+ * 
+ */
+export function sendSystem(data) {
+	return request({
+		url: `/im/message/save`,
+		method: 'post',
+		data: data
+	})
+}

+ 11 - 0
virgo.wzfrontend/workark_wx/request/api/workark.js

@@ -90,4 +90,15 @@ export function getWxPay(orderNo, openId) {
 		url: `/api/workarkWxPay/jsapi/${orderNo}/${openId}`,
 		method: 'post'
 	})
+}
+/* 
+ * 订单详情
+ * 
+ * 
+ */
+export function getOrderDetail(id) {
+	return request({
+		url: `/api/workarkOrderInfo/${id}`,
+		method: 'get'
+	})
 }

+ 387 - 0
virgo.wzfrontend/workark_wx/subPages/chatPage/chat/chat.vue

@@ -0,0 +1,387 @@
+<template>
+	<view class="chat-box">
+		<view class="chat-tips" v-if="postData.loading">
+			{{postData.loadText}}
+		</view>
+		<view class="chat-list">
+			<view :id="`msg-${item.time}`" v-for="(item,index) in chatList" :key="index">
+				<view class="chat-item" :class="item.from == `workark${nowUserId}` ? 'push':'pull' ">
+					<image :src="item.fromUserInfo.avatarUrl" mode="aspectFill" class="avatar"></image>
+					<view class="content-box">
+						<view class="content" v-if="item.type === 'text'">{{item.body.text}}</view>
+						<image :src="item.body.thumbnailUrl" mode="aspectFill"
+							@tap="previewImage(item.body.originalUrl)" :class="[returnImageClass(item.body)]" v-else>
+						</image>
+					</view>
+					<text class="date">
+						{{$uv.timeFormat(item.time,'yyyy-mm-dd hh:MM')}}
+					</text>
+				</view>
+			</view>
+		</view>
+		<view class="chat-submit">
+			<input type="text" class="message-content" v-model="message" placeholder="请输入聊天内容"
+				placeholder-class="message-placeholder" :cursor-spacing="6" />
+			<view class="send-image send-button" @tap="sendImage">
+				<uv-icon name="photo-fill" color="#8c8c8c" size="48"></uv-icon>
+			</view>
+			<view class="send-submit send-button" @tap="send">
+				<uv-icon name="checkbox-mark" color="#fff" size="48"></uv-icon>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		YeIMUniSDK,
+		YeIMUniSDKDefines
+	} from '@/uni_modules/wzJun1-YeIM-Uni-SDK/js_sdk/yeim-uni-sdk.min.js'
+	export default {
+		data() {
+			return {
+				message: '',
+				chatList: [],
+				postData: {
+					rows: 10, //每页数量
+					page: 1, //页码
+					flag: true, // 请求开关
+					loading: true, // 加载中
+					loadText: '正在获取消息...'
+				},
+				nextMessageId: '',
+				nowUserId: ''
+			}
+		},
+		onUnload() {
+			YeIMUniSDK.getInstance().removeEventListener(YeIMUniSDKDefines.EVENT.MESSAGE_RECEIVED, this.onMessage);
+		},
+		onLoad(body) {
+			YeIMUniSDK.getInstance().addEventListener(YeIMUniSDKDefines.EVENT.MESSAGE_RECEIVED, this.onMessage);
+			uni.setNavigationBarTitle({
+				title: body.userName
+			});
+			this.nowUserId = this.$store.getters.user.userId;
+			this.userId = body.userId;
+			this.getHistoryMsg();
+		},
+		onPageScroll(e) {
+			if (e.scrollTop < 5) {
+				this.getHistoryMsg();
+			}
+		},
+		methods: {
+			returnImageClass(item) {
+				let w = item.thumbnailWidth,
+					h = item.thumbnailHeight;
+				let str = ''
+				if (w > h) str = 'image-width';
+				if (w == h) str = 'image-width-height';
+				if (w < h) str = 'image-height';
+				return str + ' image-box';
+			},
+			onMessage(e) {
+				let message = e;
+				if (this.userId != message.conversationId) return;
+				this.insertMessage(message);
+				this.$chat.clearConversationUnread(this.userId);
+			},
+			insertMessage(message) {
+				try {
+					this.chatList.push(message);
+					setTimeout(() => {
+						uni.pageScrollTo({
+							scrollTop: 99999999, // -30 为多显示出大半个消息的高度,示意上面还有信息。
+							duration: 0
+						});
+					}, 200)
+				} catch (e) {
+					console.log(e)
+				}
+			},
+			getHistoryMsg() {
+				if (!this.postData.flag || this.nextMessageId === 'null') {
+					return; //
+				}
+				// 此处用到 ES7 的 async/await 知识,为使代码更加优美。不懂的请自行学习。
+				let get = async () => {
+					this.toggleTips();
+					this.postData.flag = false;
+					let data = await this.joinHistoryMsg();
+					// 获取待滚动元素选择器,解决插入数据后,滚动条定位时使用
+					let selector = '';
+					if (this.postData.page > 1) {
+						// 非第一页,则取历史消息数据的第一条信息元素
+						selector = `#msg-${this.chatList[0].time}`;
+					} else {
+						if (data.length > 0) {
+							// 第一页,则取当前消息数据的最后一条信息元素
+							selector = `#msg-${data[data.length-1].time}`;
+						}
+					}
+					// 将获取到的消息数据合并到消息数组中
+					this.chatList = [...data, ...this.chatList];
+					// 数据挂载后执行,不懂的请自行阅读 Vue.js 文档对 Vue.nextTick 函数说明。
+					this.$nextTick(() => {
+						// 设置当前滚动的位置
+						this.setPageScrollTo(selector);
+						this.toggleTips(true);
+						if (data.length < this.postData.rows) {
+							// 当前消息数据条数小于请求要求条数时,则无更多消息,不再允许请求。
+							// 可在此处编写无更多消息数据时的逻辑
+							this.postData.flag = true;
+						} else {
+							this.postData.page++;
+							// 延迟 200ms ,以保证设置窗口滚动已完成
+							setTimeout(() => {
+								this.postData.flag = true;
+							}, 200)
+						}
+
+					})
+				}
+				get();
+			},
+			// 设置页面滚动位置
+			setPageScrollTo(selector) {
+				if (!selector) return;
+				let view = uni.createSelectorQuery().in(this).select(selector);
+				view.boundingClientRect((res) => {
+					uni.pageScrollTo({
+						scrollTop: res.top - 30, // -30 为多显示出大半个消息的高度,示意上面还有信息。
+						duration: 0
+					});
+				}).exec();
+			},
+			toggleTips(flag) {
+				if (flag) {
+					this.postData.loadText = '消息获取成功';
+					setTimeout(() => {
+						this.postData.loading = false;
+					}, 300);
+				} else {
+					this.postData.loading = true;
+					this.postData.loadText = '正在获取消息...';
+				}
+			},
+			joinHistoryMsg() {
+				return new Promise((done, fail) => {
+					this.$chat.getHistoryMessageList(this.nextMessageId, this.userId, res => {
+						this.nextMessageId = res.data.nextMessageId || 'null';
+						done(!res.data ? [] : res.data.list);
+					}, () => {
+						done([]);
+					});
+				})
+			},
+			previewImage(url) {
+				// 预览图片
+				uni.previewImage({
+					urls: [url]
+				});
+			},
+			sendImage() {
+				this.$chat.sendImage(this.userId, this.sendSuccess);
+			},
+			// 发送信息
+			send() {
+				if (!this.message) return this.$toast('内容不能为空');
+				uni.showLoading();
+				this.$chat.sendText(this.userId, this.message, this.sendSuccess);
+			},
+			sendSuccess(res) {
+				this.chatList.push(res.data);
+				this.message = '';
+				uni.hideLoading();
+				setTimeout(() => {
+					uni.pageScrollTo({
+						scrollTop: 99999999, // -30 为多显示出大半个消息的高度,示意上面还有信息。
+						duration: 0
+					});
+				}, 200)
+			}
+		},
+	}
+</script>
+
+<style lang="scss">
+	.chat-box {
+		.chat-tips {
+			position: fixed;
+			left: 0;
+			top: 0;
+			width: 100%;
+			z-index: 9;
+			background-color: $uv-primary;
+			height: 72rpx;
+			line-height: 72rpx;
+			color: #fff;
+			text-align: center;
+			opacity: 0.9;
+		}
+
+		.chat-list {
+			width: 100%;
+			height: auto;
+			padding-bottom: 120rpx;
+			box-sizing: content-box;
+			/* 兼容iPhoneX */
+			margin-bottom: 0;
+			margin-bottom: constant(safe-area-inset-bottom);
+			margin-bottom: env(safe-area-inset-bottom);
+
+			.chat-item {
+				display: flex;
+				padding: 20rpx;
+				align-items: flex-start;
+				align-content: flex-start;
+				position: relative;
+
+				.date {
+					position: absolute;
+					bottom: -5rpx;
+					font-size: 20rpx;
+					color: $uv-content-color;
+				}
+
+				.avatar {
+					width: 80rpx;
+					height: 80rpx;
+					border-radius: 50%;
+					border: #fff solid 1px;
+				}
+
+				.content-box {
+					flex: 1;
+					width: 0;
+					display: flex;
+				}
+
+				.image-box {
+					border-radius: 16rpx;
+					padding-bottom: 4rpx;
+				}
+
+				.image-width {
+					width: 280rpx;
+					height: 200rpx;
+				}
+
+				.image-height {
+					width: 200rpx;
+					height: 280rpx;
+				}
+
+				.image-width-height {
+					width: 200rpx;
+					height: 200rpx;
+				}
+
+				.content {
+					padding: 20rpx 30rpx;
+					border-radius: 16rpx;
+					word-break: break-all;
+					line-height: 42rpx;
+					position: relative;
+					font-weight: 300;
+				}
+
+				/* 收到的消息 */
+				&.pull {
+					.content-box {
+						margin-right: 100rpx;
+					}
+
+					.image-box {
+						margin-left: 20rpx;
+					}
+
+					.content {
+						margin-left: 20rpx;
+						background-color: #fff;
+					}
+
+					.date {
+						left: 124rpx;
+					}
+				}
+
+				/* 发出的消息 */
+				&.push {
+					/* 主轴为水平方向,起点在右端。使不修改DOM结构,也能改变元素排列顺序 */
+					flex-direction: row-reverse;
+
+					.content-box {
+						flex-direction: row-reverse;
+						margin-left: 100rpx;
+					}
+
+					.image-box {
+						margin-right: 20rpx;
+					}
+
+					.content {
+						margin-right: 20rpx;
+						background-color: $uv-primary;
+						color: #fff;
+						box-shadow: 0px 1px 12px rgba(3, 3, 3, 0.08);
+					}
+
+					.date {
+						right: 124rpx;
+					}
+				}
+			}
+		}
+
+		.chat-submit {
+			position: fixed;
+			left: 0;
+			width: 100%;
+			bottom: 0;
+			height: 100rpx;
+			z-index: 2;
+			background-color: #fff;
+			box-shadow: 0px 2px 10px rgba(3, 3, 3, 0.1);
+			/* 兼容iPhoneX */
+			padding-bottom: 0;
+			padding-bottom: constant(safe-area-inset-bottom);
+			padding-bottom: env(safe-area-inset-bottom);
+			display: flex;
+			align-items: center;
+
+			.message-content {
+				flex: 1;
+				margin: 0 30rpx;
+				border: 1px solid $uv-border-color;
+				border-radius: 68rpx;
+				height: 68rpx;
+				padding: 0 20rpx;
+			}
+
+			.message-placeholder {
+				color: #8c8c8c;
+				font-weight: 300;
+			}
+
+			.send-button {
+				width: 68rpx;
+				height: 68rpx;
+				border-radius: 50%;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+
+				&.send-image {
+					border: 1px solid $uv-border-color;
+					margin-right: 20rpx;
+				}
+
+				&.send-submit {
+					background: $uv-primary;
+					margin-right: 30rpx;
+				}
+			}
+		}
+	}
+</style>

+ 29 - 24
virgo.wzfrontend/workark_wx/subPages/workarkPage/surOrder/surOrder.vue

@@ -57,9 +57,14 @@
 		getWxPay
 	} from '@/request/api/workark.js'
 	export default {
+		props: {
+			orderId: {
+				type: Number,
+				default: 0
+			},
+		},
 		data() {
 			return {
-				orderId: '',
 				orderData: {
 					price: 0
 				},
@@ -72,11 +77,13 @@
 				order: {}
 			};
 		},
-		onLoad(body) {
-			this.orderId = body.orderId;
+		mounted() {
 			uni.$on('changeCoupon', this.changeCoupon);
 			if (this.orderId) this.init();
 		},
+		beforeDestroy() {
+			uni.$off('changeCoupon', this.changeCoupon);
+		},
 		computed: {
 			minus() {
 				let data = this.countPriceData.productCoupon || [];
@@ -116,32 +123,30 @@
 				uni.showLoading({
 					title: '订单确认中...'
 				})
-				let wxConfig = await getWxPay('ORDER_20250516154349168', uni.getStorageSync('openId'));
-				uni.requestPayment({
-					provider: 'wxpay',
-					timeStamp: wxConfig.data.timeStamp,
-					nonceStr: wxConfig.data.nonceStr,
-					package: wxConfig.data.prepayId,
-					signType: wxConfig.data.signType,
-					paySign: wxConfig.data.paySign,
-					success: function(res) {
-						console.log('success:' + JSON.stringify(res));
-					},
-					fail: function(err) {
-						console.log('fail:' + JSON.stringify(err));
-					}
-				});
-				console.log(wxConfig);
-				uni.hideLoading();
-				return;
 				let couponIds = this.couponChecked.map(node => node.id).join(',') || -1;
 				let orderData = await createOrder(this.orderData.id, this.$store.getters.organization.id, couponIds);
 				if (orderData.state) {
 					let wxConfig = await getWxPay(orderData.data.orderNo, uni.getStorageSync('openId'));
-					console.log(wxConfig);
-
-					uni.hideLoading();
+					uni.requestPayment({
+						provider: 'wxpay',
+						timeStamp: wxConfig.data.timeStamp,
+						nonceStr: wxConfig.data.nonceStr,
+						package: wxConfig.data.prepayId,
+						signType: wxConfig.data.signType,
+						paySign: wxConfig.data.paySign,
+						success: res => {
+							this.paymentCallback('success', orderData.id);
+						},
+						fail: err => {
+							this.paymentCallback('warning', orderData.id);
+						}
+					});
 				}
+			},
+			paymentCallback(status, orderId) {
+				this.$emit('closePopup');
+				uni.hideLoading();
+				this.$navigateTo(`/subPages/workarkPage/paymentStatus/paymentStatus?status=${status}&orderId=${orderId}`);
 			}
 		},
 	}

+ 9 - 1
virgo.wzfrontend/workark_wx/subPages/workarkPage/coupon/coupon.vue

@@ -1,6 +1,10 @@
 <template>
 	<view class="coupon-list">
-		<uv-empty mode="coupon" textSize="28" iconSize="180" v-if="coupon.length === 0"></uv-empty>
+		<view class="coupon-empty" v-if="coupon.length === 0">
+			<uv-empty icon="https://file-node.oss-cn-shanghai.aliyuncs.com/youji/7f79138c39aa49a29edd2204ffcbad60"
+				textSize="28" width="360" :isImg="true" text="暂无优惠券">
+			</uv-empty>
+		</view>
 		<view v-else>
 			<view :class="returnCouponClass(item) ?'coupon-card' : 'coupon-card disabled'"
 				v-for="(item,index) in coupon" :key="index" @tap="checkCoupon(item)">
@@ -93,6 +97,10 @@
 		padding: 30rpx;
 	}
 
+	.coupon-empty {
+		padding-top: 80rpx;
+	}
+
 	.coupon-card {
 		margin-bottom: 20rpx;
 

+ 106 - 0
virgo.wzfrontend/workark_wx/subPages/workarkPage/paymentStatus/paymentStatus.vue

@@ -0,0 +1,106 @@
+<template>
+	<view class="content">
+		<kevy-result-page v-if="type" :type="type" :title="title" :primarColor="primarColor" :details="details"
+			:primaryBtnText="primaryBtnText" secondaryBtnText="返回" @primaryBtnClick="primaryBtnClick"
+			@secondaryBtnClick="secondaryBtnClick" :codeUrlFailureTime="orderData.codeUrlFailureTime" @finish="finish">
+		</kevy-result-page>
+	</view>
+</template>
+
+<script>
+	import {
+		getOrderDetail,
+		getWxPay
+	} from '@/request/api/workark.js'
+	export default {
+		data() {
+			return {
+				type: '',
+				title: '',
+				details: [],
+				primarColor: '',
+				primaryBtnText: '',
+				orderId: '72',
+				orderData: {},
+				codeUrlFailureTime: ''
+			}
+		},
+		onLoad(body) {
+			// this.orderId = body.orderId;
+			if (this.orderId) this.init();
+		},
+		methods: {
+			async init() {
+				let orderData = await getOrderDetail(this.orderId);
+				if (!orderData.state) return;
+				this.orderData = orderData.data;
+				this.details = [{
+					label: '订单编号',
+					value: orderData.data.orderNo
+				}, {
+					label: '订单金额',
+					value: orderData.data.totalFee
+				}, {
+					label: '支付状态',
+					value: orderData.data.orderStatus
+				}];
+				this.initStatus();
+			},
+			initStatus() {
+				if (this.orderData.orderStatus === '支付成功') {
+					this.type = 'success';
+					this.title = '支付成功';
+					this.primarColor = '#4fc08d';
+					this.primaryBtnText = '查看订单';
+				} else if (this.orderData.orderStatus === '未支付') {
+					this.type = 'warning';
+					this.title = '暂未支付';
+					this.primarColor = '#f9b04d';
+					this.primaryBtnText = '立即支付';
+				} else if (this.orderData.orderStatus === '超时已关闭') {
+					this.type = 'error';
+					this.title = '订单已失效';
+					this.primarColor = '#ff3927';
+					this.primaryBtnText = '查看订单';
+				}
+			},
+			async primaryBtnClick() {
+				if (this.type === 'success') {
+
+				} else if (this.type === 'warning') {
+					let wxConfig = await getWxPay(this.orderData.orderNo, uni.getStorageSync('openId'));
+					uni.requestPayment({
+						provider: 'wxpay',
+						timeStamp: wxConfig.data.timeStamp,
+						nonceStr: wxConfig.data.nonceStr,
+						package: wxConfig.data.prepayId,
+						signType: wxConfig.data.signType,
+						paySign: wxConfig.data.paySign,
+						success: res => {
+							this.init();
+						},
+						fail: err => {}
+					});
+				}
+			},
+			secondaryBtnClick() {
+				uni.navigateBack();
+			},
+			finish() {
+				this.init();
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	::v-deep .uv-count-down {
+		.uv-count-down__text {
+			color: #fff;
+		}
+	}
+
+	.content {
+		box-sizing: border-box;
+	}
+</style>

+ 44 - 7
virgo.wzfrontend/workark_wx/subPages/workarkPage/workarkDetail/workarkDetail.vue

@@ -17,8 +17,7 @@
 			<view class="workark-specifications">
 				<uv-text text="规格" type="tips" size="28"></uv-text>
 				<view class="specifications-list">
-					<view class="coupon-card" v-for="(item,index) in productList" :key="index"
-						@tap="initDetail(index)">
+					<view class="coupon-card" v-for="(item,index) in productList" :key="index" @tap="initDetail(index)">
 						<view class="coupon-card-box" :class="{active:detail.id === item.id}">
 							<uv-text :text="item.name" :type="detail.id === item.id?'primary':''" size="28"></uv-text>
 							<view class="icon-check">
@@ -36,33 +35,48 @@
 			</view>
 		</view>
 		<view class="hui-button-box">
-			<view class="icon-kefu">
+			<view class="icon-kefu" @click="openChat">
 				<uv-icon name="kefu-ermai" color="primary" size="50" label="客服" labelPos="bottom" labelSize="20">
 				</uv-icon>
 			</view>
-			<uv-button type="primary" text="立即购买"
-				@tap="$navigateTo('/subPages/workarkPage/surOrder/surOrder?orderId=' + detail.id)">
+			<uv-button type="primary" text="立即购买" @tap="$refs.popup.open()">
 			</uv-button>
 		</view>
+		<uv-popup ref="popup" mode="bottom" :round="16" @change="popupChange" :custom-style="{
+			height: popupHeight
+		}">
+			<view class="popup-title">确认订单</view>
+			<view class="popup-content">
+				<sure-order v-if="popupShow" :orderId="detail.id" @closePopup="closePopup"></sure-order>
+			</view>
+		</uv-popup>
 	</view>
 </template>
 
 <script>
 	import {
-		getServeListByQuery
+		getServeListByQuery,
+		getCustomerServeDetail
 	} from '@/request/api/workark.js'
+	import sureOrder from '@/subPages/workarkPage/components/sureOrder.vue'
 	export default {
+		components: {
+			sureOrder
+		},
 		data() {
 			return {
 				productLevelId: '',
 				productList: [],
 				detail: {},
 				rotatingImages: [],
-				detailedImage: []
+				detailedImage: [],
+				popupHeight: 0,
+				popupShow: false
 			}
 		},
 		onLoad(body) {
 			this.productLevelId = body.productLevelId;
+			this.popupHeight = this.$uv.addUnit((uni.$windowHeight - 200) * 2);
 			if (this.productLevelId) this.init();
 		},
 		methods: {
@@ -80,6 +94,22 @@
 				this.detail = this.productList[len];
 				if (this.detail.rotatingImages) this.rotatingImages = JSON.parse(this.detail.rotatingImages);
 				if (this.detail.detailedImage) this.detailedImage = JSON.parse(this.detail.detailedImage);
+			},
+			closePopup() {
+				this.$refs.popup.close();
+			},
+			popupChange(e) {
+				this.popupShow = e.show;
+			},
+			async openChat() {
+				if (!this.detail.customerId) return this.$toast('该产品暂未设置客服');
+				let customerServe = await getCustomerServeDetail(this.detail.customerId);
+				if (customerServe.state) {
+					if (!customerServe.data) return this.$toast('该产品暂未设置客服');
+					this.$chat.clearConversationUnread(customerServe.data.customerId);
+					this.$navigateTo('/subPages/chatPage/chat/chat?userId=' + customerServe.data.customerId +
+						'&userName=' + customerServe.data.nickName)
+				}
 			}
 		},
 	}
@@ -117,6 +147,13 @@
 		margin-top: 10px;
 	}
 
+	.popup-title {
+		line-height: 88rpx;
+		border-bottom: 2rpx solid $uv-border-color;
+		text-align: center;
+		font-size: 32rpx;
+	}
+
 	.coupon-card-box {
 		background: #fff;
 		padding: 14rpx 30rpx;

+ 189 - 0
virgo.wzfrontend/workark_wx/uitls/chat.js

@@ -0,0 +1,189 @@
+import {
+	YeIMUniSDK,
+	YeIMUniSDKDefines
+} from '@/uni_modules/wzJun1-YeIM-Uni-SDK/js_sdk/yeim-uni-sdk.min.js'
+import {
+	login
+} from '@/request/api/chat.js'
+import md5 from '@/js_sdk/js-md5/build/md5.min.js';
+import config from "@/config";
+let userIds, isListenerChatList = false;
+const connect = success => {
+	if (!userIds) return;
+	let code = YeIMUniSDK.getInstance().readyState();
+	if (code !== 3) {
+		if (success) success();
+		return;
+	}
+	YeIMUniSDK.getInstance().connect({
+		userId: userIds,
+		token: uni.getStorageSync('chatToken'),
+		success: (response) => {
+			if (response.code === 200) {
+				$chat.listenerList();
+				if (success) success();
+			}
+		},
+		fail: (err) => {
+			logins();
+		}
+	});
+}
+const logins = () => {
+	let timestamp = (new Date()).getTime() + 86400 * 1000; //1000天后过期
+	let sign = md5(String(userIds) + timestamp + "50abd47112ebe8c5a73f4694c96a49ce");
+	login({
+		userId: userIds,
+		timestamp: timestamp,
+		sign: sign
+	}).then(res => {
+		if (res.code === 200) {
+			uni.setStorageSync('chatToken', res.data.token);
+			connect();
+		}
+	})
+}
+const $chat = {
+	init() {
+		//初始化YeIMUniSDK
+		uni.$YeIMUniSDKDefines = YeIMUniSDKDefines;
+		uni.$YeIM = YeIMUniSDK.init({
+			baseURL: config.baseUrl + '/im', // YeIMServer http url (如无特殊需求,服务端启动后仅需修改ip或者域名即可)
+			socketURL: config.socketURL, // YeIMServer socket url(如无特殊需求,服务端启动后仅需修改ip或者域名即可)
+			/**
+			 * 	日志等级
+			 *  0 普通日志,日志量较多,接入时建议使用
+			 *	1 关键性日志,日志量较少,生产环境时建议使用 
+			 *	2 无日志级别,SDK 将不打印任何日志
+			 */
+			logLevel: 2, // 日志等级, 
+			reConnectInterval: 3000, // 重连时间间隔
+			reConnectTotal: 99, // 最大重连次数,0不限制一直重连 
+			heartInterval: 35000, //心跳时间间隔(默认30s) 
+		});
+	},
+	connect(userId) {
+		userIds = userId;
+		if (!userId) return;
+		if (!uni.getStorageSync('chatToken')) {
+			logins()
+		} else {
+			connect();
+		}
+	},
+	getConversationList(success) {
+		connect(() => {
+			YeIMUniSDK.getInstance().getConversationList({
+				page: 1, //页码
+				limit: 100, //每页数量
+				success: success,
+				fail: (err) => {
+					console.log('error');
+				}
+			});
+		});
+	},
+	getHistoryMessageList(nextMessageId, userId, success, fail) {
+		connect(() => {
+			YeIMUniSDK.getInstance().getHistoryMessageList({
+				nextMessageId: nextMessageId,
+				conversationId: userId,
+				success: success,
+				fail: fail
+			});
+		});
+	},
+	sendImage(userId, success) {
+		connect(() => {
+			uni.chooseImage({
+				count: 1, //图片数量
+				sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
+				sourceType: ['album'], //从相册选择
+				success: res => {
+					uni.getImageInfo({
+						src: res.tempFilePaths[0],
+						success: image => {
+							//创建图片消息
+							let message = YeIMUniSDK.getInstance()
+								.createImageMessage({
+									toId: userId, //接收者用户ID字符串
+									conversationType: YeIMUniSDKDefines
+										.CONVERSATION_TYPE
+										.PRIVATE, //会话类型:私聊
+									body: {
+										file: {
+											tempFilePath: res.tempFilePaths[
+												0], //本地图片临时路径
+											width: image.width, //图片宽度
+											height: image.height //图片高度
+										}
+									},
+									extra: "",
+									onProgress: (progress) => {
+										// console.log(progress);
+									}
+								});
+							//发送消息
+							uni.showLoading();
+							YeIMUniSDK.getInstance().sendMessage({
+								message: message,
+								success: success,
+								fail: (err) => {
+									uni.hideLoading();
+									uni.showToast({
+										title: '发送失败',
+										icon: "none"
+									});
+								}
+							});
+						}
+					});
+				}
+			});
+		});
+	},
+	sendText(userId, content, success) {
+		connect(() => {
+			//创建文字消息
+			let message = YeIMUniSDK.getInstance().createTextMessage({
+				toId: userId, //接收者用户ID字符串
+				conversationType: YeIMUniSDKDefines.CONVERSATION_TYPE.PRIVATE, //会话类型:私聊
+				body: {
+					text: content //文本消息内容字符串
+				},
+				extra: ""
+			});
+			//发送消息
+			YeIMUniSDK.getInstance().sendMessage({
+				message: message,
+				success: success,
+				fail: (err) => {
+					uni.hideLoading();
+					uni.showToast({
+						title: '发送失败',
+						icon: "none"
+					});
+				}
+			});
+		});
+	},
+	disConnect() {
+		YeIMUniSDK.getInstance().disConnect();
+	},
+	listenerList() {
+		if (isListenerChatList) return;
+		connect(() => {
+			isListenerChatList = true;
+			//监听会话列表更新
+			YeIMUniSDK.getInstance().addEventListener(YeIMUniSDKDefines.EVENT.CONVERSATION_LIST_CHANGED, (
+				list) => {
+				uni.$emit('changeChatList', list);
+			});
+		})
+	},
+	clearConversationUnread(conversationId) {
+		//清除指定会话未读数,并给对方发送已读回执
+		YeIMUniSDK.getInstance().clearConversationUnread(conversationId);
+	}
+}
+export default $chat;

+ 8 - 0
virgo.wzfrontend/workark_wx/uni_modules/kevy-result-page/changelog.md

@@ -0,0 +1,8 @@
+## 1.0.2(2023-06-13)
+代码优化。
+## 1.0.1(2023-04-12)
+- 这是一个通用的结果页组件,主要是对前一步操作的结果进行反馈。
+- 插件符合uni_modules和easycom规范,导入后可直接在页面通过标签引用。
+- 
+## 1.0.2(2023-06-13)
+- 代码优化。

+ 274 - 0
virgo.wzfrontend/workark_wx/uni_modules/kevy-result-page/components/kevy-result-page/kevy-result-page.vue

@@ -0,0 +1,274 @@
+<template>
+	<view class="t-wrap">
+		<view class="t-krp-header">
+			<image class="t-icon" :src="icon"></image>
+			<view class="t-title">{{title}}</view>
+			<uv-count-down :time="time" format="HH时mm分ss秒后失效" v-if="type === 'warning'" @finish="finish">
+			</uv-count-down>
+			<view class="t-description">{{description}}</view>
+			<view class="t-detail-con" v-if="detailData && detailData.length>0">
+				<view class="t-detail" v-for="(item,index) in detailData" :key="index">
+					<text :style="{'font-weight':item['bold']?'600':'unset'}">{{item.label}}</text>
+					<text :style="{'font-weight':item['bold']?'600':'unset'}">{{item.value}}</text>
+				</view>
+				<view class="t-collapse" @click="changeExpand" v-if="details.length>2">
+					<view class="t-collapse-box" :style="{'transform': isExpand?'rotate(-45deg)':'rotate(135deg)'}">
+					</view>
+				</view>
+			</view>
+			<view class="t-bg-wrap">
+				<view class="t-bg" :style="{'background-color':primarColor}"></view>
+			</view>
+		</view>
+		<view class="t-krp-footer" v-if="primaryBtnText || secondaryBtnText"
+			:style="{'justify-content': primaryBtnText && secondaryBtnText?'space-between':'center'}">
+			<view v-if="secondaryBtnText" hover-class="t-hover" class="t-btn t-secondary" @click="secondaryBtnClick">
+				{{secondaryBtnText}}
+			</view>
+			<view v-if="primaryBtnText" hover-class="t-hover" class="t-btn t-primary" @click="primaryBtnClick"
+				:style="{'background-color':primarColor}">{{primaryBtnText}}</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: "kevyResultPage",
+		props: {
+			/**
+			 * 类型
+			 */
+			type: {
+				type: String,
+				default: 'success'
+			},
+			/**
+			 * 标题
+			 */
+			title: {
+				type: String,
+				default: ''
+			},
+			/**
+			 * 描述
+			 */
+			description: {
+				type: String,
+				default: ''
+			},
+			/**
+			 * 详细数量列表,超过三条自动折叠
+			 */
+			details: {
+				type: Array,
+				default: []
+			},
+			/**
+			 * 主背景色
+			 */
+			primarColor: {
+				type: String,
+				default: '#4fc08d'
+			},
+			/**
+			 * 主要按钮文字,不填不显示主要按钮
+			 */
+			primaryBtnText: {
+				type: String,
+				default: ''
+			},
+			/**
+			 * 次要按钮文字,不填不显示次要按钮
+			 */
+			secondaryBtnText: {
+				type: String,
+				default: ''
+			},
+			/**
+			 * 倒计时
+			 */
+			codeUrlFailureTime: {
+				type: String,
+				default: ''
+			}
+		},
+		data() {
+			return {
+				//是否展开
+				isExpand: false,
+			};
+		},
+		created() {
+
+		},
+		computed: {
+			//状态图标
+			icon: function() {
+				return '/uni_modules/kevy-result-page/static/icon/icon_' + this.type + '.png';
+			},
+			//详情数据
+			detailData: function() {
+				if (this.isExpand) {
+					return this.details;
+				} else {
+					return this.details.length > 2 ? this.details.slice(0, 2) : this.details;
+				}
+			},
+			//时间
+			time() {
+				let date = this.codeUrlFailureTime.replaceAll('-', '/');
+				return (new Date(date).getTime() - new Date().getTime());
+			}
+		},
+		methods: {
+			//切换展开状态
+			changeExpand() {
+				this.isExpand = !this.isExpand;
+			},
+			//主按钮点击
+			primaryBtnClick() {
+				this.$emit('primaryBtnClick');
+			},
+			//辅助按钮点击
+			secondaryBtnClick() {
+				this.$emit('secondaryBtnClick');
+			},
+			//倒计时结束
+			finish() {
+				this.$emit('finish');
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.t-wrap {
+		width: 100%;
+		box-sizing: border-box;
+		position: relative;
+		background-color: rgb(245, 245, 245);
+		height: 100vh;
+	}
+
+	.t-krp-header {
+		display: flex;
+		align-items: center;
+		flex-direction: column;
+		background-color: transparent;
+		position: relative;
+		padding: 40rpx 40rpx 200rpx;
+		z-index: 1;
+		overflow: hidden;
+
+		.t-icon {
+			width: 64rpx;
+			height: 64rpx;
+		}
+
+		.t-title {
+			font-size: 36rpx;
+			color: #ffffff;
+			text-align: center;
+			line-height: 1.4;
+			margin-top: 20rpx;
+		}
+
+		.t-description {
+			margin-top: 16rpx;
+			margin-bottom: 48rpx;
+			font-size: 28rpx;
+			color: hsla(0, 0%, 100%, .6);
+			line-height: 1.4;
+			text-align: center;
+		}
+
+		.t-detail-con {
+			width: 100%;
+			box-sizing: border-box;
+
+			.t-detail {
+				width: 100%;
+				display: flex;
+				flex-direction: row;
+				justify-content: space-between;
+				margin-bottom: 10rpx;
+				color: #ffffff;
+				font-size: 28rpx;
+			}
+
+			.t-collapse {
+				box-sizing: border-box;
+				padding: 17rpx;
+				width: 100%;
+				display: flex;
+
+				.t-collapse-box {
+					opacity: 0.6;
+					width: 20rpx;
+					height: 20rpx;
+					margin: auto auto 20rpx;
+					border-top: 4rpx solid #ffffff;
+					border-right: 4rpx solid #ffffff;
+					transform: rotate(135deg);
+				}
+			}
+		}
+
+		.t-bg-wrap {
+			position: relative;
+			align-self: flex-start;
+			top: 54rpx;
+
+			.t-bg {
+				--width: 440vw;
+				position: absolute;
+				height: var(--width);
+				width: var(--width);
+				left: calc(var(--width)*-1/2 + 50vw - 40rpx);
+				top: calc(var(--width)*-1 + 1vw);
+				border-radius: 50%;
+				z-index: -1;
+			}
+		}
+	}
+
+	.t-krp-footer {
+		display: flex;
+		flex-direction: row;
+		justify-content: space-between;
+		align-items: center;
+		box-sizing: border-box;
+		position: fixed;
+		bottom: 0;
+		width: 100%;
+		padding: 24rpx 24rpx 48rpx;
+		background-color: #f5f5f5;
+		z-index: 3;
+
+		.t-btn {
+			padding: 22rpx 24rpx;
+			font-size: 36rpx;
+			display: flex;
+			flex-direction: row;
+			justify-content: center;
+			align-items: center;
+			box-sizing: border-box;
+			border-radius: 8rpx;
+			flex: 1 1;
+			max-width: calc(50vw - 36rpx);
+		}
+
+		.t-primary {
+			color: #ffffff;
+		}
+
+		.t-secondary {
+			background: #ffffff;
+			color: rgb(51, 51, 51);
+		}
+
+		.t-hover {
+			opacity: 0.7;
+		}
+	}
+</style>

+ 84 - 0
virgo.wzfrontend/workark_wx/uni_modules/kevy-result-page/package.json

@@ -0,0 +1,84 @@
+{
+  "id": "kevy-result-page",
+  "displayName": "Result结果页 简单的设置完成一个反馈页面展示",
+  "version": "1.0.2",
+  "description": "这是一个通用的结果页组件,主要是对前一步操作的结果进行反馈。",
+  "keywords": [
+    "结果",
+    "反馈",
+    "通用",
+    "uniapp"
+],
+  "repository": "",
+  "engines": {
+    "HBuilderX": "^3.6.10"
+  },
+"dcloudext": {
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "无",
+      "permissions": "无"
+    },
+    "npmurl": "",
+    "type": "component-vue"
+  },
+  "uni_modules": {
+    "dependencies": [],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y"
+      },
+      "client": {
+        "App": {
+          "app-vue": "y",
+          "app-nvue": "y"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "n",
+          "IE": "n",
+          "Edge": "n",
+          "Firefox": "n",
+          "Safari": "n"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "y",
+          "百度": "y",
+          "字节跳动": "y",
+        "QQ": "y",
+        "钉钉": "y",
+        "快手": "y",
+        "飞书": "y",
+        "京东": "y"
+        },
+        "快应用": {
+          "华为": "y",
+          "联盟": "y"
+        },
+        "Vue": {
+            "vue2": "y",
+            "vue3": "y"
+        }
+      }
+    }
+  }
+}

+ 99 - 0
virgo.wzfrontend/workark_wx/uni_modules/kevy-result-page/readme.md

@@ -0,0 +1,99 @@
+# kevy-result-page
+
+#### 介绍
+这是一个**全端通用的结果页组件**,简单的设置完成一个反馈页面展示。
+祝您使用愉快,本插件会长期维护更新,开源不易,如果本插件对您有帮助的话请及时点个好评吧或者赞赏一下,总之谢谢您的鼓励啦。
+
+
+#### 方法和属性
+
+|   名称     |    类型 |     默认值    |    字段说明    |
+| -------  | -------    |------    |------
+|  type    |      String   |     'success'   |  类型:可选参数为success、info、error、waiting、warning(用于改变顶部图标) |
+|  title    |      String   |     ''   |  标题 |
+|  description|      String   |     ''   |  描述  |
+|  details  |      Array  |     []   |  详细数量列表(可选),内部数据为Object类型,超过三条自动折叠,通过收缩按钮点击查看,**数据格式见下方details说明** |
+|  primarColor    |      String   |     #4fc08d   |  主题色(背景) |
+|  primaryBtnText    |      String   |     ''   |  底部主要按钮文字,不填不显示主要按钮 |
+|  secondaryBtnText    |      String   |     ''   |  底部次要按钮文字,不填不显示次要按钮 |
+|  primaryBtnClick    |      Event   |        |  主要按钮点击事件 |
+|  secondaryBtnClick    |      Event   |        |  次要按钮点击事件 |
+
+#### details字段说明(Object对象属性)
+| 名称  | 类型  | 说明  |
+| :------------ | :------------ | :------------ |
+| label  | String  | 字段名  |
+| value | String  | 字段值  |
+| bold | Boolean  |  是否加粗,默认false |
+
+#### 使用方式
+插件详情页点击导入hbuilder即可。插件符合uni_modules和easycom规范,导入后可直接在页面通过标签引用。
+
+#### 代码使用示例
+```
+<template>
+	<view class="content">
+		<kevy-result-page v-if="type" :type="type" :title="title" :description="description" :details="details" primaryBtnText="主要操作" secondaryBtnText="次要操作" @primaryBtnClick="primaryBtnClick" @secondaryBtnClick="secondaryBtnClick"></kevy-result-page>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				//类型:可选参数为success、info、error、waiting、warning
+				type:'',
+				//标题
+				title:'',
+				//描述
+				description:'',
+				//详情数据列表
+				details:[],
+			}
+		},
+		onLoad() {
+			//这里模拟请求到了数据后设置组件
+			this.type = 'success';
+			this.title = '预约成功';
+			this.description = '这里是操作描述,内容会自动换行,建议最多设置两行更佳好';
+			this.details = [{
+						label: '预约人',
+						value: '张某某',
+						bold: true,
+					},
+					{
+						label: '预约地点',
+						value: '秦岭野生动物园',
+					},
+					{
+						label: '预约时间',
+						value: '2023/4/8 13:23',
+					},
+					{
+						label: '流水号',
+						value: '1000802909309389',
+					},
+					{
+						label: '备注',
+						value: '携带相关证件享受优惠',
+					}
+				];
+			
+		},
+		methods: {
+			primaryBtnClick(){
+				console.log("主要按钮被点击了");
+			},
+			secondaryBtnClick(){
+				console.log("次要按钮被点击了");
+			}
+		}
+	}
+</script>
+
+<style scoped>
+	.content {
+		box-sizing: border-box;
+	}
+</style>
+```

BIN
virgo.wzfrontend/workark_wx/uni_modules/kevy-result-page/static/icon/icon_error.png


BIN
virgo.wzfrontend/workark_wx/uni_modules/kevy-result-page/static/icon/icon_info.png


BIN
virgo.wzfrontend/workark_wx/uni_modules/kevy-result-page/static/icon/icon_success.png


BIN
virgo.wzfrontend/workark_wx/uni_modules/kevy-result-page/static/icon/icon_waiting.png


BIN
virgo.wzfrontend/workark_wx/uni_modules/kevy-result-page/static/icon/icon_warning.png


+ 5 - 0
virgo.wzfrontend/workark_wx/uni_modules/uv-empty/components/uv-empty/props.js

@@ -54,6 +54,11 @@ export default {
 		marginTop: {
 			type: [String, Number],
 			default: 0
+		},
+		// 是否图片
+		isImg: {
+			type: Boolean,
+			default: true
 		},
 		...uni.$uv?.props?.empty
 	}

+ 9 - 28
virgo.wzfrontend/workark_wx/uni_modules/uv-empty/components/uv-empty/uv-empty.vue

@@ -1,29 +1,12 @@
 <template>
-	<view
-	  class="uv-empty"
-	  :style="[emptyStyle]"
-	  v-if="show"
-	>
-		<uv-icon
-		  v-if="!isImg"
-		  :name="mode === 'message' ? 'chat' : `empty-${mode}`"
-		  :size="iconSize"
-		  :color="iconColor"
-		  margin-top="14"
-		></uv-icon>
-		<image
-		  v-else
-		  :style="{
+	<view class="uv-empty" :style="[emptyStyle]" v-if="show">
+		<uv-icon v-if="!isImg" :name="mode === 'message' ? 'chat' : `empty-${mode}`" :size="iconSize" :color="iconColor"
+			margin-top="14"></uv-icon>
+		<image v-else :style="{
 				width: $uv.addUnit(width),
 				height: $uv.addUnit(height)
-			}"
-		  :src="icon"
-		  mode="widthFix"
-		></image>
-		<text
-		  class="uv-empty__text"
-		  :style="[textStyle]"
-		>{{text ? text : icons[mode]}}</text>
+			}" :src="icon" mode="widthFix"></image>
+		<text class="uv-empty__text" :style="[textStyle]">{{text ? text : icons[mode]}}</text>
 		<view class="uv-empty__wrap">
 			<slot />
 		</view>
@@ -92,11 +75,6 @@
 				style.color = this.textColor
 				style.fontSize = this.$uv.addUnit(this.textSize)
 				return style
-			},
-			// 判断icon是否图片路径
-			isImg() {
-				const isBase64 = this.icon.indexOf('data:') > -1 && this.icon.indexOf('base64') > -1;
-				return this.icon.indexOf('/') !== -1 || isBase64;
 			}
 		}
 	}
@@ -105,11 +83,13 @@
 	@import '@/uni_modules/uv-ui-tools/libs/css/components.scss';
 	$uv-empty-text-margin-top: 20rpx !default;
 	$uv-empty-slot-margin-top: 20rpx !default;
+
 	.uv-empty {
 		@include flex;
 		flex-direction: column;
 		justify-content: center;
 		align-items: center;
+
 		&__text {
 			@include flex;
 			justify-content: center;
@@ -117,6 +97,7 @@
 			margin-top: $uv-empty-text-margin-top;
 		}
 	}
+
 	.uv-slot-wrap {
 		@include flex;
 		justify-content: center;

+ 191 - 0
virgo.wzfrontend/workark_wx/uni_modules/wzJun1-YeIM-Uni-SDK/changelog.md

@@ -0,0 +1,191 @@
+## 1.2.82(2025-03-12)
+- 【YeIM-Uni-SDK】 
+    - 修复调用获取历史消息记录时的离线消息异常
+	- 修复Web、Uni环境下上传下载异常
+## 1.2.5(2023-05-09)
+- 【YeIM-Uni-SDK】 
+    - 修复 `updateUserInfo` 无法正常更新的问题 
+    - 修复 用户资料 `好友添加方式` 异常
+    - 修复 好友申请已读状态异常
+
+- 【YeIM-Uni-Server】 
+    - 优化 用户申请已读发送更新事件
+## 1.2.4(2023-05-02)
+- 【YeIM-Uni-SDK】 
+    - 修复因 `1.2.0` 引出的本地上传异常 
+    - 修复在 `nvue` 页面下无法使用实例的异常
+## 1.2.3(2023-04-10)
+- 【YeIM-Uni-SDK】 
+    - 优化 `createCustomMessage`
+    - 优化 获取好友及申请列表方式
+    
+- 【YeIM-Uni-Server】 
+    - 修复因配置文件异常导致的无法启动
+## 1.2.2(2023-04-05)
+- 【YeIM-Uni-SDK】 
+    - 新增 好友关系及相关方法
+    - 新增 用户资料字段 `性别` `电话` `扩展字段` 等
+    - 优化 方法 `getUserInfo` `updateUserInfo`
+
+- 【YeIM-Uni-Server】 
+    - 新增 好友关系相关接口
+    - 修改 接口 `register` `updateUser`
+    
+- 【数据库】 
+    - 新增 `user`表字段 `性别` `电话` `扩展字段` 等
+    - 新增 好友表 `friend`
+    - 新增 好友申请表 `friend_apply`
+## 1.2.1(2023-03-26)
+- 【YeIM-Uni-SDK】
+    - 优化代码
+## 1.2.0(2023-03-24)
+- 【YeIM-Uni-SDK】
+    - 适配 支持非uni编译器打包,可单独用在任何H5环境,支持ts types
+    - 新增 创建@消息接口 `createTextAtMessage` 创建合并消息接口 `createMergerMessage` 创建转发消息接口 `createForwardMessage`
+    - 新增 媒体消息通过URL直发接口 `createImageMessageFromUrl` `createVideoMessageFromUrl` `createAudioMessageFromUrl`
+    - 修改 使用`mitt`代替uni事件总线
+    - 修复 群组获取历史消息记录异常
+
+- 【YeIM-Uni-Server】
+    - 修复 群成员移除后再加入会话报错
+    - 修复 设置群管理员重复
+    - 优化 移出群成员给指定接收者发送系统通知
+    - 优化 群成员获取历史消息记录方式
+## 1.1.9(2023-03-21)
+- 【YeIM-Uni-SDK】
+    - 修复 因`1.1.8`版本引出的用户多端登录被踢反复重连的问题
+    - 优化 客户端代码
+
+- 【YeIM-Uni-Server】
+    - 优化 Socket消息通道
+## 1.1.8(2023-03-17)
+- 【YeIM-Uni-SDK】
+    - 新增 离线通知相关自定义配置
+    - 修复 `getGroupApplyList`接口获取入群申请异常的问题
+    - 修复 撤回消息事件异常响应
+    - 优化 客户端接口返回值 
+    - 优化 客户端接口通信
+
+- 【YeIM-Uni-Server】
+    - 优化 服务端接口返回值 
+## 1.1.7(2023-03-10)
+- 【YeIM-Uni-SDK】
+    - 新增 `getHistoryMessageList` 获取历史消息记录方法
+    - 弃用 `getMessageList` 
+
+- 【YeIM-Uni-Server】
+    - 新增 通过 `nextMessageId` 获取历史记录
+    - 弃用 分页获取历史记录
+## 1.1.6(2023-02-19)
+- 【YeIM-Uni-SDK】
+    - 新增 `加入黑名单` `移除黑名单` `获取黑名单列表` 方法
+    - 修复 低版本安卓创建推送渠道的异常 
+    - 修复 本地消息缓存逻辑
+
+- 【YeIM-Uni-Server】
+    - 新增 `加入黑名单` `移除黑名单` `获取黑名单列表` 接口
+
+- 【数据库】 
+    - 新增私聊黑名单表
+## 1.1.5(2023-01-31)
+- 【YeIM-Uni-SDK】
+    - 修复 使用 `Vue3` 编译时的上传异常
+    - 文档新增 `Vue3 + TypeScript` 使用示例
+## 1.1.4(2023-01-27)
+- 【YeIM-Uni-SDK】
+    - 新增 删除消息 `deleteMessage` 接口  
+    - 新增 Message消息字段 `conversationType` 会话类型 
+    - 修复 因推送服务引发的非APP端登录异常
+    - 优化 小视频消息封面字段 `thumbnailUrl` 创建时为空
+    - 优化 媒体消息接口本地上传目录名称
+
+- 【YeIM-Uni-Server】
+    - 移除 `receivedCallMessage` 方法 (v1.1.2遗留)
+
+- 【数据库】 
+    - 新增群消息删除记录表
+## 1.1.3(2023-01-16)
+- 【YeIM-Uni-SDK】
+    - 新增 `个推离线消息通知` 
+
+- 【YeIM-Uni-Server】
+    - 新增 `个推离线消息通知` 服务
+
+- 【数据库】 
+    - 新增 `user` 表字段 `mobile_device_id` (移动APP端推送标识符)
+## 1.1.2(2022-12-16)
+- 【YeIM-Uni-SDK】
+    - 弃用 `notifySocketMessageReceived`
+    - 弃用 Message 对象 `receive` 字段
+
+- 【YeIM-Uni-Server】
+    - 修复 私聊/群聊会话发送者会话未读数异常
+    - 修复 上传图片缩略图路径异常
+    - 弃用 `received_call` 
+    - 弃用 Message 对象 `receive` 字段
+
+- 【数据库】 
+    - 弃用 数据表 message、group_message 中 `receive` 字段
+
+## 1.1.1(2022-12-15)
+- 【YeIM-Uni-SDK】
+    - 更新 WebSocket使用方式为SocketTask,便于支持项目多路WebSocket 
+    - 预弃用 `notifySocketMessageReceived`,下版本删除。基于YeIMUniSDK的收发消息逻辑考虑,接收方不需要返回接收状态(ACK)
+    - 优化 重连机制
+    - 优化 代码注释
+    
+- 【YeIM-Uni-Server】
+    - 预弃用 `received_call`,下版本删除。基于YeIMUniSDK的收发消息逻辑考虑,接收方不需要返回接收状态(ACK)
+
+## 1.1.0(2022-12-14)
+- 新增 【重要】群组聊天方式
+- 新增 `getConversation` 获取会话详情
+- 修复 部分接口返回异常
+## 1.0.9(2022-12-07)
+- 【YeIM-Uni-SDK】
+    - 修复 `getConversationList` 获取会话列表异常
+    - 更新 开发文档
+## 1.0.8(2022-12-06)
+- 【YeIM-Uni-SDK】
+    - 更新 媒体文件保存路径  
+ 
+- 【YeIM-Uni-Server】
+    - 更新 本地仓库文件保存路径 
+    - 修复 多媒体处理第三方库 `javacv` 依赖过大问题
+
+- 【数据库】
+    - 无更新 
+## 1.0.7(2022-12-05)
+- 新增 存储仓库 `本地存储`
+- 修复 重复上线互踢连接异常
+## 1.0.6(2022-12-04)
+- 新增 存储仓库 `阿里云对象存储`
+- 更新 `YeIM-Uni-Server`中 `SpringBoot` 版本 2.7.6 `Spring-WebSocket` 版本 5.3.24
+- 修复已知BUG
+## 1.0.5(2022-12-03)
+- 新增 `disConnect` 断开连接接口
+- 新增 `deleteConversation` 删除指定会话及会话内聊天记录
+- 新增 `revokeMessage` 撤回消息
+- 新增 `clearConversationUnread` 清除指定会话未读数接口,此接口将触发 `PRIVATE_READ_RECEIPT` 事件
+- 新增 监听事件 `PRIVATE_READ_RECEIPT` 私聊会话已读回执
+- 新增 创建消息接口 `extra` 字段,用于各个消息扩展自定义数据
+- 修改 消息ID由前端生成改为服务端生成
+- 修改 撤回字段 `is_recall` 为 `is_revoke`
+- 更新 后端私聊消息数据模型
+## 1.0.4(2022-11-29)
+- 新增查询用户信息接口
+- 修复语音消息接口异常
+- 修复YeIM-Uni-Server消息通知异常
+## 1.0.3(2022-11-27)
+- 1. 新增发送位置消息
+- 2. 新增查询登陆连接状态接口
+- 3. 新增外部上传接口
+- 4. 修复已知BUG
+## 1.0.2(2022-11-26)
+1.新增发送图片消息、语音消息、小视频消息
+2.修复已知BUG
+## 1.0.1(2022-11-21)
+1. 更新readme.md
+2. 修复监听异常
+## 1.0.0(2022-11-20)
+首次发布

File diff suppressed because it is too large
+ 1457 - 0
virgo.wzfrontend/workark_wx/uni_modules/wzJun1-YeIM-Uni-SDK/js_sdk/yeim-uni-sdk.min.d.ts


File diff suppressed because it is too large
+ 3 - 0
virgo.wzfrontend/workark_wx/uni_modules/wzJun1-YeIM-Uni-SDK/js_sdk/yeim-uni-sdk.min.js


+ 87 - 0
virgo.wzfrontend/workark_wx/uni_modules/wzJun1-YeIM-Uni-SDK/package.json

@@ -0,0 +1,87 @@
+{
+	"id": "wzJun1-YeIM-Uni-SDK",
+	"displayName": "YeIM-Uni-SDK 即时通讯IM SDK 全端通用 完全免费",
+	"version": "1.2.82",
+	"description": "可私有化部署的全开源即时通讯jssdk,仅需植入 SDK 即可轻松集成聊天能力,支持Web、uni-app项目接入使用,满足通信需要。",
+	"keywords": [
+        "IM",
+        "IMSDK",
+        "即时通信",
+        "即时通讯",
+        "聊天"
+    ],
+	"repository": "https://github.com/wzJun1/YeIM-Uni-SDK",
+	"engines": {
+		"HBuilderX": "^3.3.1"
+	},
+	"types": "js_sdk/yeim-uni-sdk.min.d.ts",
+	"dcloudext": {
+		"type": "sdk-js",
+		"sale": {
+			"regular": {
+				"price": "0.00"
+			},
+			"sourcecode": {
+				"price": "0.00"
+			}
+		},
+		"contact": {
+			"qq": ""
+		},
+		"declaration": {
+			"ads": "无",
+			"data": "无",
+			"permissions": "无"
+		},
+		"npmurl": "https://www.npmjs.com/package/yeim-uni-sdk"
+	},
+	"uni_modules": {
+		"dependencies": [],
+		"encrypt": [],
+		"platforms": {
+			"cloud": {
+				"tcb": "y",
+                "aliyun": "y",
+                "alipay": "n"
+			},
+			"client": {
+				"Vue": {
+					"vue2": "y",
+					"vue3": "y"
+				},
+				"App": {
+					"app-vue": "y",
+					"app-nvue": "y"
+				},
+				"H5-mobile": {
+					"Safari": "y",
+					"Android Browser": "y",
+					"微信浏览器(Android)": "y",
+					"QQ浏览器(Android)": "y"
+				},
+				"H5-pc": {
+					"Chrome": "y",
+					"IE": "n",
+					"Edge": "y",
+					"Firefox": "y",
+					"Safari": "y"
+				},
+				"小程序": {
+					"微信": "y",
+					"阿里": "y",
+					"百度": "y",
+					"字节跳动": "y",
+					"QQ": "y",
+					"钉钉": "y",
+					"快手": "y",
+					"飞书": "y",
+					"京东": "y"
+				},
+				"快应用": {
+					"华为": "y",
+					"联盟": "y"
+				}
+			}
+		}
+	}
+}

+ 35 - 0
virgo.wzfrontend/workark_wx/uni_modules/wzJun1-YeIM-Uni-SDK/readme.md

@@ -0,0 +1,35 @@
+<p align="center">
+    <strong><font size="6">YeIM-Uni-SDK</font></strong>
+    <br>
+    <br>
+    <strong><font size="5">即时通讯JSSDK</font></strong> 
+    <br>
+    <br>
+    <a target="_blank" href="https://wzjun1.netlify.app/ye_plugins/sdk/yeimunisdk">查看文档</a>
+    | <a target="_blank" href="https://wzjun1.github.io/ye_plugins/sdk/yeimunisdk">备用文档</a> 
+    <br>
+    <img src="https://wzjun1.netlify.app/ye_plugins/code2.png" width="500"/>
+</p>
+
+`此为社区开源项目,用于学习交流使用,禁止用于非法途径。如作他用所造成的一切法律责任均不由作者承担。` 
+
+- 注:不是聊天项目!不是聊天项目!不是聊天项目!只是SDK,通过使用SDK里的一系列接口可实现聊天,跟环信、融云、腾讯云即时通信等等类似的一种可实现聊天的IMSDK。
+
+`YeIM-Uni-SDK`是可以`私有化部署`的`全开源`即时通讯`UniAPP JSSDK`,仅需集成 SDK 即可轻松实现聊天能力,支持基于[uni-app](https://uniapp.dcloud.net.cn/)的任何项目接入使用,满足通信需要。
+
+支持私聊和群聊,支持发送的消息类型:文字消息、图片消息、语音消息、视频消息、位置消息、自定义消息。
+
+必须搭配`YeIM-Uni-Server`服务端,开箱即用。
+
+## 使用文档
+
+<a target="_blank" href="https://wzjun1.netlify.app/ye_plugins/sdk/yeimunisdk">查看文档</a>
+    | <a target="_blank" href="https://wzjun1.github.io/ye_plugins/sdk/yeimunisdk">备用文档</a> 
+
+## 反馈与共建
+
+- 普通交流QQ群:[391276294](https://qm.qq.com/cgi-bin/qm/qr?k=hEQnVRj3c1B0gDpD2QJrD7UIfWMzCUuM&jump_from=webapi&authKey=kbrD7NHXGIPaiVb2puw+vJeRCIQSXVhIci7eFvFLBH/UjGt+hrdOk4upK731S+1+)
+
+## 演示Demo说明
+
+演示Demo中的原生会话页面组件使用了付费插件,仅支持APP,如果需要看原生会话页面演示,需要把此原生插件打包到自定义基座:[YeIM-Chat-Page 原生聊天会话组件,极致用户体验,高性能聊天页](https://ext.dcloud.net.cn/plugin?id=9998)

+ 0 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/.automator/mp-weixin/.automator.json


+ 4 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/app.js

@@ -0,0 +1,4 @@
+
+require('./common/runtime.js')
+require('./common/vendor.js')
+require('./common/main.js')

+ 70 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/app.json

@@ -0,0 +1,70 @@
+{
+  "pages": [
+    "pages/workark/workark",
+    "pages/index/index",
+    "pages/model/model",
+    "pages/shopping/shopping",
+    "pages/my/my",
+    "pages/login/login",
+    "pages/message/message"
+  ],
+  "subPackages": [
+    {
+      "root": "subPages/workarkPage",
+      "pages": [
+        "workarkDetail/workarkDetail",
+        "coupon/coupon",
+        "paymentStatus/paymentStatus"
+      ]
+    },
+    {
+      "root": "subPages/chatPage",
+      "pages": [
+        "chat/chat"
+      ]
+    }
+  ],
+  "window": {
+    "navigationBarTextStyle": "black",
+    "navigationBarTitleText": "workark",
+    "navigationBarBackgroundColor": "#fff"
+  },
+  "tabBar": {
+    "color": "#7d7380",
+    "selectedColor": "#3c9cff",
+    "list": [
+      {
+        "pagePath": "pages/index/index",
+        "iconPath": "static/images/tabbar/index.png",
+        "selectedIconPath": "static/images/tabbar/index-active.png",
+        "text": "首页"
+      },
+      {
+        "pagePath": "pages/message/message",
+        "iconPath": "static/images/tabbar/chat.png",
+        "selectedIconPath": "static/images/tabbar/chat-active.png",
+        "text": "消息"
+      },
+      {
+        "pagePath": "pages/workark/workark",
+        "iconPath": "static/images/tabbar/highseas.png",
+        "selectedIconPath": "static/images/tabbar/highseas-active.png",
+        "text": "workark"
+      },
+      {
+        "pagePath": "pages/shopping/shopping",
+        "iconPath": "static/images/tabbar/data.png",
+        "selectedIconPath": "static/images/tabbar/data-active.png",
+        "text": "商城"
+      },
+      {
+        "pagePath": "pages/my/my",
+        "iconPath": "static/images/tabbar/my.png",
+        "selectedIconPath": "static/images/tabbar/my-active.png",
+        "text": "我的"
+      }
+    ]
+  },
+  "lazyCodeLoading": "requiredComponents",
+  "usingComponents": {}
+}

+ 3 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/app.wxss

@@ -0,0 +1,3 @@
+@import './common/main.wxss';
+
+[data-custom-hidden="true"],[bind-data-custom-hidden="true"]{display: none !important;}

File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/common/main.js


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/common/main.wxss


File diff suppressed because it is too large
+ 4 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/common/runtime.js


File diff suppressed because it is too large
+ 25 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/common/vendor.js


File diff suppressed because it is too large
+ 10 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/components/login/imageCode.js


+ 4 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/components/login/imageCode.json

@@ -0,0 +1,4 @@
+{
+  "usingComponents": {},
+  "component": true
+}

File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/components/login/imageCode.wxml


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/components/login/imageCode.wxss


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/index/index.js


+ 4 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/index/index.json

@@ -0,0 +1,4 @@
+{
+  "navigationBarTitleText": "首页",
+  "usingComponents": {}
+}

+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/index/index.wxml

@@ -0,0 +1 @@
+<view class="workark-list data-v-66fcf0c7"></view>

File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/login/login.js


+ 12 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/login/login.json

@@ -0,0 +1,12 @@
+{
+  "navigationBarTitleText": "",
+  "usingComponents": {
+    "uv-icon": "/uni_modules/uv-icon/components/uv-icon/uv-icon",
+    "uv-button": "/uni_modules/uv-button/components/uv-button/uv-button",
+    "uv-code": "/uni_modules/uv-code/components/uv-code/uv-code",
+    "uv-checkbox-group": "/uni_modules/uv-checkbox/components/uv-checkbox-group/uv-checkbox-group",
+    "uv-checkbox": "/uni_modules/uv-checkbox/components/uv-checkbox/uv-checkbox",
+    "uv-text": "/uni_modules/uv-text/components/uv-text/uv-text",
+    "image-code": "/components/login/imageCode"
+  }
+}

File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/login/login.wxml


File diff suppressed because it is too large
+ 5 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/login/login.wxss


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/message/message.js


+ 8 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/message/message.json

@@ -0,0 +1,8 @@
+{
+  "navigationBarTitleText": "消息",
+  "usingComponents": {
+    "uv-empty": "/uni_modules/uv-empty/components/uv-empty/uv-empty",
+    "uv-button": "/uni_modules/uv-button/components/uv-button/uv-button",
+    "uv-badge": "/uni_modules/uv-badge/components/uv-badge/uv-badge"
+  }
+}

File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/message/message.wxml


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/message/message.wxss


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/model/model.js


+ 4 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/model/model.json

@@ -0,0 +1,4 @@
+{
+  "navigationBarTitleText": "模型",
+  "usingComponents": {}
+}

+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/model/model.wxml

@@ -0,0 +1 @@
+<view></view>

File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/my/my.js


+ 4 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/my/my.json

@@ -0,0 +1,4 @@
+{
+  "navigationBarTitleText": "我的",
+  "usingComponents": {}
+}

File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/my/my.wxml


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/my/my.wxss


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/shopping/shopping.js


+ 4 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/shopping/shopping.json

@@ -0,0 +1,4 @@
+{
+  "navigationBarTitleText": "商城",
+  "usingComponents": {}
+}

+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/shopping/shopping.wxml

@@ -0,0 +1 @@
+<view></view>

File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/workark/workark.js


+ 7 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/workark/workark.json

@@ -0,0 +1,7 @@
+{
+  "navigationBarTitleText": "WORKARK",
+  "usingComponents": {
+    "uv-image": "/uni_modules/uv-image/components/uv-image/uv-image",
+    "uv-text": "/uni_modules/uv-text/components/uv-text/uv-text"
+  }
+}

File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/workark/workark.wxml


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/pages/workark/workark.wxss


+ 29 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/project.config.json

@@ -0,0 +1,29 @@
+{
+  "description": "项目配置文件。",
+  "packOptions": {
+    "ignore": [],
+    "include": []
+  },
+  "setting": {
+    "urlCheck": false,
+    "es6": false,
+    "postcss": true,
+    "minified": true,
+    "newFeature": true,
+    "bigPackageSizeSupport": true,
+    "babelSetting": {
+      "ignore": [],
+      "disablePlugins": [],
+      "outputPath": ""
+    }
+  },
+  "compileType": "miniprogram",
+  "libVersion": "3.8.4",
+  "appid": "wx3c006d364161d240",
+  "projectname": "workark_wx",
+  "condition": {},
+  "editorSetting": {
+    "tabIndent": "insertSpaces",
+    "tabSize": 2
+  }
+}

+ 7 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/project.private.config.json

@@ -0,0 +1,7 @@
+{
+  "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
+  "projectname": "workark_wx",
+  "setting": {
+    "compileHotReLoad": true
+  }
+}

BIN
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/static/images/empty/null.png


BIN
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/static/images/tabbar/chat-active.png


BIN
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/static/images/tabbar/chat.png


BIN
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/static/images/tabbar/data-active.png


BIN
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/static/images/tabbar/data.png


BIN
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/static/images/tabbar/highseas-active.png


BIN
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/static/images/tabbar/highseas.png


BIN
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/static/images/tabbar/index-active.png


BIN
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/static/images/tabbar/index.png


BIN
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/static/images/tabbar/my-active.png


BIN
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/static/images/tabbar/my.png


+ 24 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/static/scss/common.scss

@@ -0,0 +1,24 @@
+//底部按钮
+.hui-button-box {
+	background-color: #ffffff;
+	box-shadow: 0px 2px 10px rgba(3, 3, 3, 0.1);
+	position: fixed;
+	bottom: 0;
+	left: 0;
+	right: 0;
+	height: 100rpx;
+	display: flex;
+	align-items: center;
+	justify-content: flex-end;
+	padding-bottom: 0;
+	padding-bottom: constant(safe-area-inset-bottom);  
+	padding-bottom: env(safe-area-inset-bottom);
+	padding-right: 40rpx;
+	padding-left: 40rpx;
+}
+
+.text-flex {
+	display: flex;
+	justify-content: space-between;
+	align-items: center;
+}

File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/subPages/chatPage/chat/chat.js


+ 6 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/subPages/chatPage/chat/chat.json

@@ -0,0 +1,6 @@
+{
+  "navigationBarTitleText": "",
+  "usingComponents": {
+    "uv-icon": "/uni_modules/uv-icon/components/uv-icon/uv-icon"
+  }
+}

File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/subPages/chatPage/chat/chat.wxml


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/subPages/chatPage/chat/chat.wxss


File diff suppressed because it is too large
+ 10 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/subPages/workarkPage/components/sureOrder.js


+ 2 - 2
virgo.wzfrontend/workark_wx/unpackage/dist/dev/mp-weixin/subPages/workarkPage/surOrder/surOrder.json

@@ -1,9 +1,9 @@
 {
-  "navigationBarTitleText": "确认订单",
   "usingComponents": {
     "uv-text": "/uni_modules/uv-text/components/uv-text/uv-text",
     "uv-image": "/uni_modules/uv-image/components/uv-image/uv-image",
     "uv-icon": "/uni_modules/uv-icon/components/uv-icon/uv-icon",
     "uv-button": "/uni_modules/uv-button/components/uv-button/uv-button"
-  }
+  },
+  "component": true
 }

File diff suppressed because it is too large
+ 1 - 1
virgo.wzfrontend/workark_wx/unpackage/dist/dev/mp-weixin/subPages/workarkPage/surOrder/surOrder.wxml


+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/subPages/workarkPage/components/sureOrder.wxss

@@ -0,0 +1 @@
+.sure-order{padding:30rpx}.order-detail{background:#fff;padding:30rpx;border-radius:16rpx}.order-title{padding-bottom:30rpx}.order-content{display:flex}.order-content-detail{flex:1;width:0;margin-left:30rpx}.order-item{display:flex;justify-content:space-between;align-items:center;height:88rpx;border-bottom:1px solid #dadbde;margin-bottom:30rpx}.order-item-icon{color:#f56c6c}.order-count{display:flex;justify-content:flex-end}.button-flex{margin-right:20rpx}

File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/subPages/workarkPage/coupon/coupon.js


+ 9 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/subPages/workarkPage/coupon/coupon.json

@@ -0,0 +1,9 @@
+{
+  "navigationBarTitleText": "优惠券",
+  "usingComponents": {
+    "uv-empty": "/uni_modules/uv-empty/components/uv-empty/uv-empty",
+    "uv-text": "/uni_modules/uv-text/components/uv-text/uv-text",
+    "uv-icon": "/uni_modules/uv-icon/components/uv-icon/uv-icon",
+    "uv-button": "/uni_modules/uv-button/components/uv-button/uv-button"
+  }
+}

File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/subPages/workarkPage/coupon/coupon.wxml


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/subPages/workarkPage/coupon/coupon.wxss


File diff suppressed because it is too large
+ 1 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/subPages/workarkPage/paymentStatus/paymentStatus.js


+ 0 - 0
virgo.wzfrontend/workark_wx/unpackage/dist/build/mp-weixin/subPages/workarkPage/paymentStatus/paymentStatus.json


Some files were not shown because too many files changed in this diff