Merge branch 'master' of http://122.51.230.86:3000/sunliwei/lanan-repair
This commit is contained in:
commit
911b1655e9
@ -50,7 +50,7 @@ export function getCodeImg() {
|
|||||||
// 获取验证码
|
// 获取验证码
|
||||||
export function loginApp(data) {
|
export function loginApp(data) {
|
||||||
return request({
|
return request({
|
||||||
'url': '/rescue/loginApp',
|
'url': '/rescue/loginQx',
|
||||||
headers: {
|
headers: {
|
||||||
isToken: false
|
isToken: false
|
||||||
},
|
},
|
||||||
|
@ -65,7 +65,7 @@
|
|||||||
this.identity = uni.getStorageSync('identity');
|
this.identity = uni.getStorageSync('identity');
|
||||||
// #endif
|
// #endif
|
||||||
this.aindex = this.msg
|
this.aindex = this.msg
|
||||||
this.getbottom()
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
async getbottom() {
|
async getbottom() {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
// 应用全局配置
|
// 应用全局配置
|
||||||
module.exports = {
|
module.exports = {
|
||||||
//baseUrl: 'https://www.nuoyunr.com/admin-api',
|
//baseUrl: 'https://www.nuoyunr.com/admin-api',
|
||||||
baseUrl: 'http://192.168.1.4:48080/admin-api',
|
baseUrl: 'http://192.168.1.4:48080/userClient',
|
||||||
imagesUrl: 'http://shequ.0315e.com/static/images/pages/',
|
imagesUrl: 'http://shequ.0315e.com/static/images/pages/',
|
||||||
baseImageUrl: 'https://www.nuoyunr.com/minio',
|
baseImageUrl: 'https://www.nuoyunr.com/minio',
|
||||||
//wsUrl: 'wss://www.nuoyunr.com/admin-api',
|
//wsUrl: 'wss://www.nuoyunr.com/admin-api',
|
||||||
|
20
node_modules/extend/.editorconfig
generated
vendored
Normal file
20
node_modules/extend/.editorconfig
generated
vendored
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
indent_style = tab
|
||||||
|
indent_size = 4
|
||||||
|
end_of_line = lf
|
||||||
|
charset = utf-8
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
insert_final_newline = true
|
||||||
|
max_line_length = 150
|
||||||
|
|
||||||
|
[CHANGELOG.md]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
|
||||||
|
[*.json]
|
||||||
|
max_line_length = off
|
||||||
|
|
||||||
|
[Makefile]
|
||||||
|
max_line_length = off
|
17
node_modules/extend/.eslintrc
generated
vendored
Normal file
17
node_modules/extend/.eslintrc
generated
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"root": true,
|
||||||
|
|
||||||
|
"extends": "@ljharb",
|
||||||
|
|
||||||
|
"rules": {
|
||||||
|
"complexity": [2, 20],
|
||||||
|
"eqeqeq": [2, "allow-null"],
|
||||||
|
"func-name-matching": [1],
|
||||||
|
"max-depth": [1, 4],
|
||||||
|
"max-statements": [2, 26],
|
||||||
|
"no-extra-parens": [1],
|
||||||
|
"no-magic-numbers": [0],
|
||||||
|
"no-restricted-syntax": [2, "BreakStatement", "ContinueStatement", "DebuggerStatement", "LabeledStatement", "WithStatement"],
|
||||||
|
"sort-keys": [0],
|
||||||
|
}
|
||||||
|
}
|
175
node_modules/extend/.jscs.json
generated
vendored
Normal file
175
node_modules/extend/.jscs.json
generated
vendored
Normal file
@ -0,0 +1,175 @@
|
|||||||
|
{
|
||||||
|
"es3": true,
|
||||||
|
|
||||||
|
"additionalRules": [],
|
||||||
|
|
||||||
|
"requireSemicolons": true,
|
||||||
|
|
||||||
|
"disallowMultipleSpaces": true,
|
||||||
|
|
||||||
|
"disallowIdentifierNames": [],
|
||||||
|
|
||||||
|
"requireCurlyBraces": {
|
||||||
|
"allExcept": [],
|
||||||
|
"keywords": ["if", "else", "for", "while", "do", "try", "catch"]
|
||||||
|
},
|
||||||
|
|
||||||
|
"requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch", "function"],
|
||||||
|
|
||||||
|
"disallowSpaceAfterKeywords": [],
|
||||||
|
|
||||||
|
"disallowSpaceBeforeComma": true,
|
||||||
|
"disallowSpaceAfterComma": false,
|
||||||
|
"disallowSpaceBeforeSemicolon": true,
|
||||||
|
|
||||||
|
"disallowNodeTypes": [
|
||||||
|
"DebuggerStatement",
|
||||||
|
"LabeledStatement",
|
||||||
|
"SwitchCase",
|
||||||
|
"SwitchStatement",
|
||||||
|
"WithStatement"
|
||||||
|
],
|
||||||
|
|
||||||
|
"requireObjectKeysOnNewLine": { "allExcept": ["sameLine"] },
|
||||||
|
|
||||||
|
"requireSpacesInAnonymousFunctionExpression": { "beforeOpeningRoundBrace": true, "beforeOpeningCurlyBrace": true },
|
||||||
|
"requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true },
|
||||||
|
"disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true },
|
||||||
|
"requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true },
|
||||||
|
"disallowSpacesInFunctionDeclaration": { "beforeOpeningRoundBrace": true },
|
||||||
|
|
||||||
|
"requireSpaceBetweenArguments": true,
|
||||||
|
|
||||||
|
"disallowSpacesInsideParentheses": true,
|
||||||
|
|
||||||
|
"disallowSpacesInsideArrayBrackets": true,
|
||||||
|
|
||||||
|
"disallowQuotedKeysInObjects": { "allExcept": ["reserved"] },
|
||||||
|
|
||||||
|
"disallowSpaceAfterObjectKeys": true,
|
||||||
|
|
||||||
|
"requireCommaBeforeLineBreak": true,
|
||||||
|
|
||||||
|
"disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"],
|
||||||
|
"requireSpaceAfterPrefixUnaryOperators": [],
|
||||||
|
|
||||||
|
"disallowSpaceBeforePostfixUnaryOperators": ["++", "--"],
|
||||||
|
"requireSpaceBeforePostfixUnaryOperators": [],
|
||||||
|
|
||||||
|
"disallowSpaceBeforeBinaryOperators": [],
|
||||||
|
"requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="],
|
||||||
|
|
||||||
|
"requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="],
|
||||||
|
"disallowSpaceAfterBinaryOperators": [],
|
||||||
|
|
||||||
|
"disallowImplicitTypeConversion": ["binary", "string"],
|
||||||
|
|
||||||
|
"disallowKeywords": ["with", "eval"],
|
||||||
|
|
||||||
|
"requireKeywordsOnNewLine": [],
|
||||||
|
"disallowKeywordsOnNewLine": ["else"],
|
||||||
|
|
||||||
|
"requireLineFeedAtFileEnd": true,
|
||||||
|
|
||||||
|
"disallowTrailingWhitespace": true,
|
||||||
|
|
||||||
|
"disallowTrailingComma": true,
|
||||||
|
|
||||||
|
"excludeFiles": ["node_modules/**", "vendor/**"],
|
||||||
|
|
||||||
|
"disallowMultipleLineStrings": true,
|
||||||
|
|
||||||
|
"requireDotNotation": { "allExcept": ["keywords"] },
|
||||||
|
|
||||||
|
"requireParenthesesAroundIIFE": true,
|
||||||
|
|
||||||
|
"validateLineBreaks": "LF",
|
||||||
|
|
||||||
|
"validateQuoteMarks": {
|
||||||
|
"escape": true,
|
||||||
|
"mark": "'"
|
||||||
|
},
|
||||||
|
|
||||||
|
"disallowOperatorBeforeLineBreak": [],
|
||||||
|
|
||||||
|
"requireSpaceBeforeKeywords": [
|
||||||
|
"do",
|
||||||
|
"for",
|
||||||
|
"if",
|
||||||
|
"else",
|
||||||
|
"switch",
|
||||||
|
"case",
|
||||||
|
"try",
|
||||||
|
"catch",
|
||||||
|
"finally",
|
||||||
|
"while",
|
||||||
|
"with",
|
||||||
|
"return"
|
||||||
|
],
|
||||||
|
|
||||||
|
"validateAlignedFunctionParameters": {
|
||||||
|
"lineBreakAfterOpeningBraces": true,
|
||||||
|
"lineBreakBeforeClosingBraces": true
|
||||||
|
},
|
||||||
|
|
||||||
|
"requirePaddingNewLinesBeforeExport": true,
|
||||||
|
|
||||||
|
"validateNewlineAfterArrayElements": {
|
||||||
|
"maximum": 6
|
||||||
|
},
|
||||||
|
|
||||||
|
"requirePaddingNewLinesAfterUseStrict": true,
|
||||||
|
|
||||||
|
"disallowArrowFunctions": true,
|
||||||
|
|
||||||
|
"disallowMultiLineTernary": true,
|
||||||
|
|
||||||
|
"validateOrderInObjectKeys": false,
|
||||||
|
|
||||||
|
"disallowIdenticalDestructuringNames": true,
|
||||||
|
|
||||||
|
"disallowNestedTernaries": { "maxLevel": 1 },
|
||||||
|
|
||||||
|
"requireSpaceAfterComma": { "allExcept": ["trailing"] },
|
||||||
|
"requireAlignedMultilineParams": false,
|
||||||
|
|
||||||
|
"requireSpacesInGenerator": {
|
||||||
|
"afterStar": true
|
||||||
|
},
|
||||||
|
|
||||||
|
"disallowSpacesInGenerator": {
|
||||||
|
"beforeStar": true
|
||||||
|
},
|
||||||
|
|
||||||
|
"disallowVar": false,
|
||||||
|
|
||||||
|
"requireArrayDestructuring": false,
|
||||||
|
|
||||||
|
"requireEnhancedObjectLiterals": false,
|
||||||
|
|
||||||
|
"requireObjectDestructuring": false,
|
||||||
|
|
||||||
|
"requireEarlyReturn": false,
|
||||||
|
|
||||||
|
"requireCapitalizedConstructorsNew": {
|
||||||
|
"allExcept": ["Function", "String", "Object", "Symbol", "Number", "Date", "RegExp", "Error", "Boolean", "Array"]
|
||||||
|
},
|
||||||
|
|
||||||
|
"requireImportAlphabetized": false,
|
||||||
|
|
||||||
|
"requireSpaceBeforeObjectValues": true,
|
||||||
|
"requireSpaceBeforeDestructuredValues": true,
|
||||||
|
|
||||||
|
"disallowSpacesInsideTemplateStringPlaceholders": true,
|
||||||
|
|
||||||
|
"disallowArrayDestructuringReturn": false,
|
||||||
|
|
||||||
|
"requireNewlineBeforeSingleStatementsInIf": false,
|
||||||
|
|
||||||
|
"disallowUnusedVariables": true,
|
||||||
|
|
||||||
|
"requireSpacesInsideImportedObjectBraces": true,
|
||||||
|
|
||||||
|
"requireUseStrict": true
|
||||||
|
}
|
||||||
|
|
230
node_modules/extend/.travis.yml
generated
vendored
Normal file
230
node_modules/extend/.travis.yml
generated
vendored
Normal file
@ -0,0 +1,230 @@
|
|||||||
|
language: node_js
|
||||||
|
os:
|
||||||
|
- linux
|
||||||
|
node_js:
|
||||||
|
- "10.7"
|
||||||
|
- "9.11"
|
||||||
|
- "8.11"
|
||||||
|
- "7.10"
|
||||||
|
- "6.14"
|
||||||
|
- "5.12"
|
||||||
|
- "4.9"
|
||||||
|
- "iojs-v3.3"
|
||||||
|
- "iojs-v2.5"
|
||||||
|
- "iojs-v1.8"
|
||||||
|
- "0.12"
|
||||||
|
- "0.10"
|
||||||
|
- "0.8"
|
||||||
|
before_install:
|
||||||
|
- 'case "${TRAVIS_NODE_VERSION}" in 0.*) export NPM_CONFIG_STRICT_SSL=false ;; esac'
|
||||||
|
- 'nvm install-latest-npm'
|
||||||
|
install:
|
||||||
|
- 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ] || [ "${TRAVIS_NODE_VERSION}" = "0.9" ]; then nvm install --latest-npm 0.8 && npm install && nvm use "${TRAVIS_NODE_VERSION}"; else npm install; fi;'
|
||||||
|
script:
|
||||||
|
- 'if [ -n "${PRETEST-}" ]; then npm run pretest ; fi'
|
||||||
|
- 'if [ -n "${POSTTEST-}" ]; then npm run posttest ; fi'
|
||||||
|
- 'if [ -n "${COVERAGE-}" ]; then npm run coverage ; fi'
|
||||||
|
- 'if [ -n "${TEST-}" ]; then npm run tests-only ; fi'
|
||||||
|
sudo: false
|
||||||
|
env:
|
||||||
|
- TEST=true
|
||||||
|
matrix:
|
||||||
|
fast_finish: true
|
||||||
|
include:
|
||||||
|
- node_js: "lts/*"
|
||||||
|
env: PRETEST=true
|
||||||
|
- node_js: "lts/*"
|
||||||
|
env: POSTTEST=true
|
||||||
|
- node_js: "4"
|
||||||
|
env: COVERAGE=true
|
||||||
|
- node_js: "10.6"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "10.5"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "10.4"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "10.3"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "10.2"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "10.1"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "10.0"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "9.10"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "9.9"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "9.8"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "9.7"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "9.6"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "9.5"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "9.4"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "9.3"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "9.2"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "9.1"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "9.0"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "8.10"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "8.9"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "8.8"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "8.7"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "8.6"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "8.5"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "8.4"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "8.3"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "8.2"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "8.1"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "8.0"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "7.9"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "7.8"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "7.7"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "7.6"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "7.5"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "7.4"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "7.3"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "7.2"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "7.1"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "7.0"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "6.13"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "6.12"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "6.11"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "6.10"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "6.9"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "6.8"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "6.7"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "6.6"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "6.5"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "6.4"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "6.3"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "6.2"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "6.1"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "6.0"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "5.11"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "5.10"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "5.9"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "5.8"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "5.7"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "5.6"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "5.5"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "5.4"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "5.3"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "5.2"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "5.1"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "5.0"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "4.8"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "4.7"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "4.6"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "4.5"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "4.4"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "4.3"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "4.2"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "4.1"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "4.0"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "iojs-v3.2"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "iojs-v3.1"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "iojs-v3.0"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "iojs-v2.4"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "iojs-v2.3"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "iojs-v2.2"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "iojs-v2.1"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "iojs-v2.0"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "iojs-v1.7"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "iojs-v1.6"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "iojs-v1.5"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "iojs-v1.4"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "iojs-v1.3"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "iojs-v1.2"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "iojs-v1.1"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "iojs-v1.0"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "0.11"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "0.9"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "0.6"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
- node_js: "0.4"
|
||||||
|
env: TEST=true ALLOW_FAILURE=true
|
||||||
|
allow_failures:
|
||||||
|
- os: osx
|
||||||
|
- env: TEST=true ALLOW_FAILURE=true
|
83
node_modules/extend/CHANGELOG.md
generated
vendored
Normal file
83
node_modules/extend/CHANGELOG.md
generated
vendored
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
3.0.2 / 2018-07-19
|
||||||
|
==================
|
||||||
|
* [Fix] Prevent merging `__proto__` property (#48)
|
||||||
|
* [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape`
|
||||||
|
* [Tests] up to `node` `v10.7`, `v9.11`, `v8.11`, `v7.10`, `v6.14`, `v4.9`; use `nvm install-latest-npm`
|
||||||
|
|
||||||
|
3.0.1 / 2017-04-27
|
||||||
|
==================
|
||||||
|
* [Fix] deep extending should work with a non-object (#46)
|
||||||
|
* [Dev Deps] update `tape`, `eslint`, `@ljharb/eslint-config`
|
||||||
|
* [Tests] up to `node` `v7.9`, `v6.10`, `v4.8`; improve matrix
|
||||||
|
* [Docs] Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG.
|
||||||
|
* [Docs] Add example to readme (#34)
|
||||||
|
|
||||||
|
3.0.0 / 2015-07-01
|
||||||
|
==================
|
||||||
|
* [Possible breaking change] Use global "strict" directive (#32)
|
||||||
|
* [Tests] `int` is an ES3 reserved word
|
||||||
|
* [Tests] Test up to `io.js` `v2.3`
|
||||||
|
* [Tests] Add `npm run eslint`
|
||||||
|
* [Dev Deps] Update `covert`, `jscs`
|
||||||
|
|
||||||
|
2.0.1 / 2015-04-25
|
||||||
|
==================
|
||||||
|
* Use an inline `isArray` check, for ES3 browsers. (#27)
|
||||||
|
* Some old browsers fail when an identifier is `toString`
|
||||||
|
* Test latest `node` and `io.js` versions on `travis-ci`; speed up builds
|
||||||
|
* Add license info to package.json (#25)
|
||||||
|
* Update `tape`, `jscs`
|
||||||
|
* Adding a CHANGELOG
|
||||||
|
|
||||||
|
2.0.0 / 2014-10-01
|
||||||
|
==================
|
||||||
|
* Increase code coverage to 100%; run code coverage as part of tests
|
||||||
|
* Add `npm run lint`; Run linter as part of tests
|
||||||
|
* Remove nodeType and setInterval checks in isPlainObject
|
||||||
|
* Updating `tape`, `jscs`, `covert`
|
||||||
|
* General style and README cleanup
|
||||||
|
|
||||||
|
1.3.0 / 2014-06-20
|
||||||
|
==================
|
||||||
|
* Add component.json for browser support (#18)
|
||||||
|
* Use SVG for badges in README (#16)
|
||||||
|
* Updating `tape`, `covert`
|
||||||
|
* Updating travis-ci to work with multiple node versions
|
||||||
|
* Fix `deep === false` bug (returning target as {}) (#14)
|
||||||
|
* Fixing constructor checks in isPlainObject
|
||||||
|
* Adding additional test coverage
|
||||||
|
* Adding `npm run coverage`
|
||||||
|
* Add LICENSE (#13)
|
||||||
|
* Adding a warning about `false`, per #11
|
||||||
|
* General style and whitespace cleanup
|
||||||
|
|
||||||
|
1.2.1 / 2013-09-14
|
||||||
|
==================
|
||||||
|
* Fixing hasOwnProperty bugs that would only have shown up in specific browsers. Fixes #8
|
||||||
|
* Updating `tape`
|
||||||
|
|
||||||
|
1.2.0 / 2013-09-02
|
||||||
|
==================
|
||||||
|
* Updating the README: add badges
|
||||||
|
* Adding a missing variable reference.
|
||||||
|
* Using `tape` instead of `buster` for tests; add more tests (#7)
|
||||||
|
* Adding node 0.10 to Travis CI (#6)
|
||||||
|
* Enabling "npm test" and cleaning up package.json (#5)
|
||||||
|
* Add Travis CI.
|
||||||
|
|
||||||
|
1.1.3 / 2012-12-06
|
||||||
|
==================
|
||||||
|
* Added unit tests.
|
||||||
|
* Ensure extend function is named. (Looks nicer in a stack trace.)
|
||||||
|
* README cleanup.
|
||||||
|
|
||||||
|
1.1.1 / 2012-11-07
|
||||||
|
==================
|
||||||
|
* README cleanup.
|
||||||
|
* Added installation instructions.
|
||||||
|
* Added a missing semicolon
|
||||||
|
|
||||||
|
1.0.0 / 2012-04-08
|
||||||
|
==================
|
||||||
|
* Initial commit
|
||||||
|
|
23
node_modules/extend/LICENSE
generated
vendored
Normal file
23
node_modules/extend/LICENSE
generated
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2014 Stefan Thomas
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
81
node_modules/extend/README.md
generated
vendored
Normal file
81
node_modules/extend/README.md
generated
vendored
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
[![Build Status][travis-svg]][travis-url]
|
||||||
|
[![dependency status][deps-svg]][deps-url]
|
||||||
|
[![dev dependency status][dev-deps-svg]][dev-deps-url]
|
||||||
|
|
||||||
|
# extend() for Node.js <sup>[![Version Badge][npm-version-png]][npm-url]</sup>
|
||||||
|
|
||||||
|
`node-extend` is a port of the classic extend() method from jQuery. It behaves as you expect. It is simple, tried and true.
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
|
||||||
|
* Since Node.js >= 4,
|
||||||
|
[`Object.assign`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
|
||||||
|
now offers the same functionality natively (but without the "deep copy" option).
|
||||||
|
See [ECMAScript 2015 (ES6) in Node.js](https://nodejs.org/en/docs/es6).
|
||||||
|
* Some native implementations of `Object.assign` in both Node.js and many
|
||||||
|
browsers (since NPM modules are for the browser too) may not be fully
|
||||||
|
spec-compliant.
|
||||||
|
Check [`object.assign`](https://www.npmjs.com/package/object.assign) module for
|
||||||
|
a compliant candidate.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
This package is available on [npm][npm-url] as: `extend`
|
||||||
|
|
||||||
|
``` sh
|
||||||
|
npm install extend
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
**Syntax:** extend **(** [`deep`], `target`, `object1`, [`objectN`] **)**
|
||||||
|
|
||||||
|
*Extend one object with one or more others, returning the modified object.*
|
||||||
|
|
||||||
|
**Example:**
|
||||||
|
|
||||||
|
``` js
|
||||||
|
var extend = require('extend');
|
||||||
|
extend(targetObject, object1, object2);
|
||||||
|
```
|
||||||
|
|
||||||
|
Keep in mind that the target object will be modified, and will be returned from extend().
|
||||||
|
|
||||||
|
If a boolean true is specified as the first argument, extend performs a deep copy, recursively copying any objects it finds. Otherwise, the copy will share structure with the original object(s).
|
||||||
|
Undefined properties are not copied. However, properties inherited from the object's prototype will be copied over.
|
||||||
|
Warning: passing `false` as the first argument is not supported.
|
||||||
|
|
||||||
|
### Arguments
|
||||||
|
|
||||||
|
* `deep` *Boolean* (optional)
|
||||||
|
If set, the merge becomes recursive (i.e. deep copy).
|
||||||
|
* `target` *Object*
|
||||||
|
The object to extend.
|
||||||
|
* `object1` *Object*
|
||||||
|
The object that will be merged into the first.
|
||||||
|
* `objectN` *Object* (Optional)
|
||||||
|
More objects to merge into the first.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
`node-extend` is licensed under the [MIT License][mit-license-url].
|
||||||
|
|
||||||
|
## Acknowledgements
|
||||||
|
|
||||||
|
All credit to the jQuery authors for perfecting this amazing utility.
|
||||||
|
|
||||||
|
Ported to Node.js by [Stefan Thomas][github-justmoon] with contributions by [Jonathan Buchanan][github-insin] and [Jordan Harband][github-ljharb].
|
||||||
|
|
||||||
|
[travis-svg]: https://travis-ci.org/justmoon/node-extend.svg
|
||||||
|
[travis-url]: https://travis-ci.org/justmoon/node-extend
|
||||||
|
[npm-url]: https://npmjs.org/package/extend
|
||||||
|
[mit-license-url]: http://opensource.org/licenses/MIT
|
||||||
|
[github-justmoon]: https://github.com/justmoon
|
||||||
|
[github-insin]: https://github.com/insin
|
||||||
|
[github-ljharb]: https://github.com/ljharb
|
||||||
|
[npm-version-png]: http://versionbadg.es/justmoon/node-extend.svg
|
||||||
|
[deps-svg]: https://david-dm.org/justmoon/node-extend.svg
|
||||||
|
[deps-url]: https://david-dm.org/justmoon/node-extend
|
||||||
|
[dev-deps-svg]: https://david-dm.org/justmoon/node-extend/dev-status.svg
|
||||||
|
[dev-deps-url]: https://david-dm.org/justmoon/node-extend#info=devDependencies
|
||||||
|
|
32
node_modules/extend/component.json
generated
vendored
Normal file
32
node_modules/extend/component.json
generated
vendored
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"name": "extend",
|
||||||
|
"author": "Stefan Thomas <justmoon@members.fsf.org> (http://www.justmoon.net)",
|
||||||
|
"version": "3.0.0",
|
||||||
|
"description": "Port of jQuery.extend for node.js and the browser.",
|
||||||
|
"scripts": [
|
||||||
|
"index.js"
|
||||||
|
],
|
||||||
|
"contributors": [
|
||||||
|
{
|
||||||
|
"name": "Jordan Harband",
|
||||||
|
"url": "https://github.com/ljharb"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"keywords": [
|
||||||
|
"extend",
|
||||||
|
"clone",
|
||||||
|
"merge"
|
||||||
|
],
|
||||||
|
"repository" : {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/justmoon/node-extend.git"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"tape" : "~3.0.0",
|
||||||
|
"covert": "~0.4.0",
|
||||||
|
"jscs": "~1.6.2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
117
node_modules/extend/index.js
generated
vendored
Normal file
117
node_modules/extend/index.js
generated
vendored
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
var hasOwn = Object.prototype.hasOwnProperty;
|
||||||
|
var toStr = Object.prototype.toString;
|
||||||
|
var defineProperty = Object.defineProperty;
|
||||||
|
var gOPD = Object.getOwnPropertyDescriptor;
|
||||||
|
|
||||||
|
var isArray = function isArray(arr) {
|
||||||
|
if (typeof Array.isArray === 'function') {
|
||||||
|
return Array.isArray(arr);
|
||||||
|
}
|
||||||
|
|
||||||
|
return toStr.call(arr) === '[object Array]';
|
||||||
|
};
|
||||||
|
|
||||||
|
var isPlainObject = function isPlainObject(obj) {
|
||||||
|
if (!obj || toStr.call(obj) !== '[object Object]') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var hasOwnConstructor = hasOwn.call(obj, 'constructor');
|
||||||
|
var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');
|
||||||
|
// Not own constructor property must be Object
|
||||||
|
if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Own properties are enumerated firstly, so to speed up,
|
||||||
|
// if last one is own, then all properties are own.
|
||||||
|
var key;
|
||||||
|
for (key in obj) { /**/ }
|
||||||
|
|
||||||
|
return typeof key === 'undefined' || hasOwn.call(obj, key);
|
||||||
|
};
|
||||||
|
|
||||||
|
// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target
|
||||||
|
var setProperty = function setProperty(target, options) {
|
||||||
|
if (defineProperty && options.name === '__proto__') {
|
||||||
|
defineProperty(target, options.name, {
|
||||||
|
enumerable: true,
|
||||||
|
configurable: true,
|
||||||
|
value: options.newValue,
|
||||||
|
writable: true
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
target[options.name] = options.newValue;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Return undefined instead of __proto__ if '__proto__' is not an own property
|
||||||
|
var getProperty = function getProperty(obj, name) {
|
||||||
|
if (name === '__proto__') {
|
||||||
|
if (!hasOwn.call(obj, name)) {
|
||||||
|
return void 0;
|
||||||
|
} else if (gOPD) {
|
||||||
|
// In early versions of node, obj['__proto__'] is buggy when obj has
|
||||||
|
// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.
|
||||||
|
return gOPD(obj, name).value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return obj[name];
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = function extend() {
|
||||||
|
var options, name, src, copy, copyIsArray, clone;
|
||||||
|
var target = arguments[0];
|
||||||
|
var i = 1;
|
||||||
|
var length = arguments.length;
|
||||||
|
var deep = false;
|
||||||
|
|
||||||
|
// Handle a deep copy situation
|
||||||
|
if (typeof target === 'boolean') {
|
||||||
|
deep = target;
|
||||||
|
target = arguments[1] || {};
|
||||||
|
// skip the boolean and the target
|
||||||
|
i = 2;
|
||||||
|
}
|
||||||
|
if (target == null || (typeof target !== 'object' && typeof target !== 'function')) {
|
||||||
|
target = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
for (; i < length; ++i) {
|
||||||
|
options = arguments[i];
|
||||||
|
// Only deal with non-null/undefined values
|
||||||
|
if (options != null) {
|
||||||
|
// Extend the base object
|
||||||
|
for (name in options) {
|
||||||
|
src = getProperty(target, name);
|
||||||
|
copy = getProperty(options, name);
|
||||||
|
|
||||||
|
// Prevent never-ending loop
|
||||||
|
if (target !== copy) {
|
||||||
|
// Recurse if we're merging plain objects or arrays
|
||||||
|
if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {
|
||||||
|
if (copyIsArray) {
|
||||||
|
copyIsArray = false;
|
||||||
|
clone = src && isArray(src) ? src : [];
|
||||||
|
} else {
|
||||||
|
clone = src && isPlainObject(src) ? src : {};
|
||||||
|
}
|
||||||
|
|
||||||
|
// Never move original objects, clone them
|
||||||
|
setProperty(target, { name: name, newValue: extend(deep, clone, copy) });
|
||||||
|
|
||||||
|
// Don't bring in undefined values
|
||||||
|
} else if (typeof copy !== 'undefined') {
|
||||||
|
setProperty(target, { name: name, newValue: copy });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return the modified object
|
||||||
|
return target;
|
||||||
|
};
|
75
node_modules/extend/package.json
generated
vendored
Normal file
75
node_modules/extend/package.json
generated
vendored
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
{
|
||||||
|
"_from": "extend@^3.0.2",
|
||||||
|
"_id": "extend@3.0.2",
|
||||||
|
"_inBundle": false,
|
||||||
|
"_integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
|
||||||
|
"_location": "/extend",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"type": "range",
|
||||||
|
"registry": true,
|
||||||
|
"raw": "extend@^3.0.2",
|
||||||
|
"name": "extend",
|
||||||
|
"escapedName": "extend",
|
||||||
|
"rawSpec": "^3.0.2",
|
||||||
|
"saveSpec": null,
|
||||||
|
"fetchSpec": "^3.0.2"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"/weapp-qrcode"
|
||||||
|
],
|
||||||
|
"_resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz",
|
||||||
|
"_shasum": "f8b1136b4071fbd8eb140aff858b1019ec2915fa",
|
||||||
|
"_spec": "extend@^3.0.2",
|
||||||
|
"_where": "D:\\lananWork\\lanan-repair\\node_modules\\weapp-qrcode",
|
||||||
|
"author": {
|
||||||
|
"name": "Stefan Thomas",
|
||||||
|
"email": "justmoon@members.fsf.org",
|
||||||
|
"url": "http://www.justmoon.net"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/justmoon/node-extend/issues"
|
||||||
|
},
|
||||||
|
"bundleDependencies": false,
|
||||||
|
"contributors": [
|
||||||
|
{
|
||||||
|
"name": "Jordan Harband",
|
||||||
|
"url": "https://github.com/ljharb"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"dependencies": {},
|
||||||
|
"deprecated": false,
|
||||||
|
"description": "Port of jQuery.extend for node.js and the browser",
|
||||||
|
"devDependencies": {
|
||||||
|
"@ljharb/eslint-config": "^12.2.1",
|
||||||
|
"covert": "^1.1.0",
|
||||||
|
"eslint": "^4.19.1",
|
||||||
|
"jscs": "^3.0.7",
|
||||||
|
"tape": "^4.9.1"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/justmoon/node-extend#readme",
|
||||||
|
"keywords": [
|
||||||
|
"extend",
|
||||||
|
"clone",
|
||||||
|
"merge"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "index",
|
||||||
|
"name": "extend",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/justmoon/node-extend.git"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"coverage": "covert test/index.js",
|
||||||
|
"coverage-quiet": "covert test/index.js --quiet",
|
||||||
|
"eslint": "eslint *.js */*.js",
|
||||||
|
"jscs": "jscs *.js */*.js",
|
||||||
|
"lint": "npm run jscs && npm run eslint",
|
||||||
|
"posttest": "npm run coverage-quiet",
|
||||||
|
"pretest": "npm run lint",
|
||||||
|
"test": "npm run tests-only",
|
||||||
|
"tests-only": "node test"
|
||||||
|
},
|
||||||
|
"version": "3.0.2"
|
||||||
|
}
|
9
node_modules/weapp-qrcode/.editorconfig
generated
vendored
Normal file
9
node_modules/weapp-qrcode/.editorconfig
generated
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
end_of_line = lf
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
2
node_modules/weapp-qrcode/.eslintignore
generated
vendored
Normal file
2
node_modules/weapp-qrcode/.eslintignore
generated
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
build/*.js
|
||||||
|
src/qrcode.js
|
26
node_modules/weapp-qrcode/.eslintrc.js
generated
vendored
Normal file
26
node_modules/weapp-qrcode/.eslintrc.js
generated
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
module.exports = {
|
||||||
|
root: true,
|
||||||
|
parser: 'babel-eslint',
|
||||||
|
parserOptions: {
|
||||||
|
sourceType: 'module'
|
||||||
|
},
|
||||||
|
env: {
|
||||||
|
browser: true,
|
||||||
|
},
|
||||||
|
// https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style
|
||||||
|
extends: 'standard',
|
||||||
|
"globals": {
|
||||||
|
__VERSION__: false,
|
||||||
|
ENV: false,
|
||||||
|
wx: false
|
||||||
|
},
|
||||||
|
// add your custom rules here
|
||||||
|
'rules': {
|
||||||
|
// allow paren-less arrow functions
|
||||||
|
'arrow-parens': 0,
|
||||||
|
// allow async-await
|
||||||
|
'generator-star-spacing': 0,
|
||||||
|
// allow debugger during development
|
||||||
|
'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0
|
||||||
|
}
|
||||||
|
}
|
37
node_modules/weapp-qrcode/.github/ISSUE_TEMPLATE.md
generated
vendored
Normal file
37
node_modules/weapp-qrcode/.github/ISSUE_TEMPLATE.md
generated
vendored
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
# Description
|
||||||
|
|
||||||
|
[问题简单描述]
|
||||||
|
|
||||||
|
# Environment
|
||||||
|
|
||||||
|
* Platform: [开发者工具/iOS/Andriod/Web]
|
||||||
|
* Platform version: [对应工具或者iOS或者Andriod的版本号]
|
||||||
|
* Wechat version: [微信版本号]
|
||||||
|
* weapp-qrcode version: [在package.json里]
|
||||||
|
* other version: [如果在某一设备下出现该问题,请填写设备号]
|
||||||
|
|
||||||
|
# Reproduce
|
||||||
|
|
||||||
|
**问题复现步骤:**
|
||||||
|
|
||||||
|
1. [第一步]
|
||||||
|
2. [第二步]
|
||||||
|
3. [其他步骤...]
|
||||||
|
|
||||||
|
**期望的表现:**
|
||||||
|
|
||||||
|
[在这里描述期望的表现]
|
||||||
|
|
||||||
|
**观察到的表现:**
|
||||||
|
|
||||||
|
[在这里描述观察到的表现]
|
||||||
|
|
||||||
|
**屏幕截图和动态 GIF 图**
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
# Relevant Code / Logs
|
||||||
|
|
||||||
|
```
|
||||||
|
// TODO(you): code or logs here to reproduce the problem
|
||||||
|
```
|
23
node_modules/weapp-qrcode/.travis.yml
generated
vendored
Normal file
23
node_modules/weapp-qrcode/.travis.yml
generated
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
language: node_js
|
||||||
|
sudo: required
|
||||||
|
node_js:
|
||||||
|
- 10.0.0
|
||||||
|
cache:
|
||||||
|
directories:
|
||||||
|
- node_modules
|
||||||
|
before_install:
|
||||||
|
- export TZ='Asia/Shanghai'
|
||||||
|
install:
|
||||||
|
- npm install
|
||||||
|
script:
|
||||||
|
- npm run publish
|
||||||
|
|
||||||
|
after_script:
|
||||||
|
- git init
|
||||||
|
- git config user.name "${USER_NAME}"
|
||||||
|
- git config user.email "${USER_EMAIL}"
|
||||||
|
- git add .
|
||||||
|
- git commit -m "publish"
|
||||||
|
- git push -f https://${access_token}@github.com/yingye/weapp-qrcode HEAD:master
|
||||||
|
|
||||||
|
branch: master
|
40
node_modules/weapp-qrcode/CHANGELOG.md
generated
vendored
Normal file
40
node_modules/weapp-qrcode/CHANGELOG.md
generated
vendored
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# Change Log
|
||||||
|
|
||||||
|
Change log for weapp-qrcode. [Details at Github](https://github.com/yingye/weapp-qrcode)
|
||||||
|
|
||||||
|
## [1.0.0] - 2018-12-25
|
||||||
|
|
||||||
|
- 支持传入绘图上下文(CanvasContext).
|
||||||
|
|
||||||
|
## [1.0.0-beta] - 2018-12-13
|
||||||
|
|
||||||
|
- 支持二维码在 canvas 上绘制的起始位置.
|
||||||
|
- 支持在二维码上绘制图片及绘制位置.
|
||||||
|
|
||||||
|
## [0.9.0] - 2018-05-31
|
||||||
|
|
||||||
|
- 支持绘制带中文的二维码.
|
||||||
|
|
||||||
|
## [0.8.0] - 2018-05-15
|
||||||
|
|
||||||
|
- 绘制二维码后添加回调函数.
|
||||||
|
|
||||||
|
## [0.7.0] - 2018-05-11
|
||||||
|
|
||||||
|
- 支持在小程序组件中绘制二维码.
|
||||||
|
|
||||||
|
## [0.6.0] - 2018-04-16
|
||||||
|
|
||||||
|
- Add multi-output.
|
||||||
|
|
||||||
|
## [0.5.0] - 2018-03-11
|
||||||
|
|
||||||
|
- Add version in weapp.qrcode.js.
|
||||||
|
|
||||||
|
## [0.4.0] - 2018-03-10
|
||||||
|
|
||||||
|
- Fix options.
|
||||||
|
|
||||||
|
## [0.3.0] - 2018-02-03
|
||||||
|
|
||||||
|
- Initial release.
|
21
node_modules/weapp-qrcode/LICENSE
generated
vendored
Normal file
21
node_modules/weapp-qrcode/LICENSE
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2018 yingye
|
||||||
|
|
||||||
|
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.
|
96
node_modules/weapp-qrcode/README.md
generated
vendored
Normal file
96
node_modules/weapp-qrcode/README.md
generated
vendored
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
# weapp-qrcode
|
||||||
|
|
||||||
|
[](https://badge.fury.io/js/weapp-qrcode)
|
||||||
|
[](https://github.com/yingye/weapp-qrcode/blob/master/CHANGELOG.md)
|
||||||
|
|
||||||
|
weapp.qrcode.js 在 微信小程序 中,快速生成二维码
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
先在 wxml 文件中,创建绘制的 `canvas`,并定义好 `width`, `height`, `canvasId` 。
|
||||||
|
|
||||||
|
```html
|
||||||
|
<canvas style="width: 200px; height: 200px;" canvas-id="myQrcode"></canvas>
|
||||||
|
```
|
||||||
|
|
||||||
|
直接引入 js 文件,使用 `drawQrcode()` 绘制二维码。!!!在 调用 `drawQrcode()` 方法之前,一定要确保可以获取到 `canvas context` 。
|
||||||
|
|
||||||
|
在 v0.6.0 版本构建出多个文件,详情移步[Build Files说明](https://github.com/yingye/weapp-qrcode/blob/master/dist/README.md)。
|
||||||
|
|
||||||
|
```js
|
||||||
|
// 将 dist 目录下,weapp.qrcode.esm.js 复制到项目目录中
|
||||||
|
import drawQrcode from '../../utils/weapp.qrcode.esm.js'
|
||||||
|
|
||||||
|
drawQrcode({
|
||||||
|
width: 200,
|
||||||
|
height: 200,
|
||||||
|
canvasId: 'myQrcode',
|
||||||
|
// ctx: wx.createCanvasContext('myQrcode'),
|
||||||
|
text: 'https://github.com/yingye',
|
||||||
|
// v1.0.0+版本支持在二维码上绘制图片
|
||||||
|
image: {
|
||||||
|
imageResource: '../../images/icon.png',
|
||||||
|
dx: 70,
|
||||||
|
dy: 70,
|
||||||
|
dWidth: 60,
|
||||||
|
dHeight: 60
|
||||||
|
}
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
如果项目使用了 wepy 框架,可直接安装 `weapp-qrcode` npm包。
|
||||||
|
|
||||||
|
```
|
||||||
|
npm install weapp-qrcode --save
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
import drawQrcode from 'weapp-qrcode'
|
||||||
|
|
||||||
|
drawQrcode({
|
||||||
|
width: 200,
|
||||||
|
height: 200,
|
||||||
|
canvasId: 'myQrcode',
|
||||||
|
text: 'https://github.com/yingye'
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
## DEMO
|
||||||
|
|
||||||
|
<img src="./examples/demo.jpg" width=300 >
|
||||||
|
|
||||||
|
更多 demo 可以参考 [examples目录](https://github.com/yingye/weapp-qrcode/tree/master/examples),示例包含原生语法及WePY、mpvue、Taro框架。
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
### drawQrcode([options])
|
||||||
|
|
||||||
|
#### options
|
||||||
|
|
||||||
|
Type: Object
|
||||||
|
|
||||||
|
| 参数 | 说明 | 示例|
|
||||||
|
| ------ | ------ | ------ |
|
||||||
|
| width | 必须,二维码宽度,与`canvas`的`width`保持一致 | 200 |
|
||||||
|
| height | 必须,二维码高度,与`canvas`的`height`保持一致 | 200 |
|
||||||
|
| canvasId | 非必须,绘制的`canvasId` | `'myQrcode'` |
|
||||||
|
| ctx | 非必须,绘图上下文,可通过 `wx.createCanvasContext('canvasId')` 获取,v1.0.0+版本支持 | `'wx.createCanvasContext('canvasId')'` |
|
||||||
|
| text | 必须,二维码内容 | 'https://github.com/yingye' |
|
||||||
|
| typeNumber | 非必须,二维码的计算模式,默认值-1 | 8 |
|
||||||
|
| correctLevel | 非必须,二维码纠错级别,默认值为高级,取值:`{ L: 1, M: 0, Q: 3, H: 2 }` | 1 |
|
||||||
|
| background | 非必须,二维码背景颜色,默认值白色 | `'#ffffff'` |
|
||||||
|
| foreground | 非必须,二维码前景色,默认值黑色 | `'#000000'` |
|
||||||
|
| _this | 非必须,若在组件中使用,需要传入,v0.7.0+版本支持 | this |
|
||||||
|
| callback | 非必须,绘制完成后的回调函数,v0.8.0+版本支持。安卓手机兼容性问题,可通过自行设置计时器来解决,更多可以参考 [issue #18](https://github.com/yingye/weapp-qrcode/issues/18) | `function (e) { console.log('e', e) }` |
|
||||||
|
| x | 非必须,二维码绘制的 x 轴起始位置,默认值0,v1.0.0+版本支持 | 100 |
|
||||||
|
| y | 非必须,二维码绘制的 y 轴起始位置,默认值0,v1.0.0+版本支持 | 100 |
|
||||||
|
| image | 非必须,在 canvas 上绘制图片,**层级高于二维码**,v1.0.0+版本支持,更多可参考[drawImage](https://developers.weixin.qq.com/miniprogram/dev/api/CanvasContext.drawImage.html) | `{ imageResource: '', dx: 0, dy: 0, dWidth: 100, dHeight: 100 }` |
|
||||||
|
|
||||||
|
|
||||||
|
**位置信息可以参见下图:**
|
||||||
|
|
||||||
|
<image src="./examples/api.png" width=500 height=500>
|
||||||
|
|
||||||
|
## TIPS
|
||||||
|
|
||||||
|
weapp.qrcode.js 二维码生成部分借鉴了 jquery-qrcode 源码,可以参考 [jquery-qrcode](https://github.com/jeromeetienne/jquery-qrcode)。
|
39
node_modules/weapp-qrcode/build/rollup.dev.config.js
generated
vendored
Normal file
39
node_modules/weapp-qrcode/build/rollup.dev.config.js
generated
vendored
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
var babel = require('rollup-plugin-babel')
|
||||||
|
var resolve = require('rollup-plugin-node-resolve')
|
||||||
|
var commonjs = require('rollup-plugin-commonjs')
|
||||||
|
var eslint = require('rollup-plugin-eslint')
|
||||||
|
var license = require('rollup-plugin-license')
|
||||||
|
|
||||||
|
var path = require('path')
|
||||||
|
|
||||||
|
var pkg = require('../package.json')
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
input: path.resolve(__dirname, '../src/index.js'),
|
||||||
|
output: [
|
||||||
|
{
|
||||||
|
file: path.resolve(__dirname, '../dist/weapp.qrcode.js'),
|
||||||
|
format: 'umd'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
file: path.resolve(__dirname, '../examples/wechat-app/utils/weapp.qrcode.js'),
|
||||||
|
format: 'umd'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
moduleName: 'drawQrcode',
|
||||||
|
plugins: [
|
||||||
|
eslint(),
|
||||||
|
resolve({
|
||||||
|
jsnext: true,
|
||||||
|
main: true,
|
||||||
|
browser: true
|
||||||
|
}),
|
||||||
|
commonjs(),
|
||||||
|
babel({
|
||||||
|
exclude: 'node_modules/**'
|
||||||
|
}),
|
||||||
|
license({
|
||||||
|
banner: 'weapp.qrcode.js v' + pkg.version + ' (' + pkg.homepage + ')'
|
||||||
|
})
|
||||||
|
]
|
||||||
|
}
|
49
node_modules/weapp-qrcode/build/rollup.prod.config.js
generated
vendored
Normal file
49
node_modules/weapp-qrcode/build/rollup.prod.config.js
generated
vendored
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
var babel = require('rollup-plugin-babel')
|
||||||
|
var babel = require('rollup-plugin-babel')
|
||||||
|
var resolve = require('rollup-plugin-node-resolve')
|
||||||
|
var commonjs = require('rollup-plugin-commonjs')
|
||||||
|
var eslint = require('rollup-plugin-eslint')
|
||||||
|
var license = require('rollup-plugin-license')
|
||||||
|
var uglify = require('rollup-plugin-uglify')
|
||||||
|
|
||||||
|
var path = require('path')
|
||||||
|
var pkg = require('../package.json')
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
input: path.resolve(__dirname, '../src/index.js'),
|
||||||
|
output: [
|
||||||
|
{
|
||||||
|
file: path.resolve(__dirname, '../dist/weapp.qrcode.min.js'),
|
||||||
|
format: 'umd'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
file: path.resolve(__dirname, '../dist/weapp.qrcode.common.js'),
|
||||||
|
format: 'cjs'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
file: path.resolve(__dirname, '../dist/weapp.qrcode.esm.js'),
|
||||||
|
format: 'es'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
moduleName: 'drawQrcode',
|
||||||
|
plugins: [
|
||||||
|
eslint(),
|
||||||
|
resolve({
|
||||||
|
jsnext: true,
|
||||||
|
main: true,
|
||||||
|
browser: true
|
||||||
|
}),
|
||||||
|
commonjs(),
|
||||||
|
babel({
|
||||||
|
exclude: 'node_modules/**'
|
||||||
|
}),
|
||||||
|
uglify({
|
||||||
|
compress: {
|
||||||
|
// 'drop_console': true
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
license({
|
||||||
|
banner: 'weapp.qrcode.js v' + pkg.version + ' (' + pkg.homepage + ')'
|
||||||
|
})
|
||||||
|
]
|
||||||
|
}
|
6
node_modules/weapp-qrcode/dist/README.md
generated
vendored
Normal file
6
node_modules/weapp-qrcode/dist/README.md
generated
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
## Explanation of Build Files
|
||||||
|
|
||||||
|
| | UMD | CommonJS | ES Module |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| **Develpment** | weapp.qrcode.js | weapp.qrcode.common.js | weapp.qrcode.esm.js |
|
||||||
|
| **Production** | weapp.qrcode.min.js | | |
|
5
node_modules/weapp-qrcode/dist/weapp.qrcode.common.js
generated
vendored
Normal file
5
node_modules/weapp-qrcode/dist/weapp.qrcode.common.js
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
5
node_modules/weapp-qrcode/dist/weapp.qrcode.esm.js
generated
vendored
Normal file
5
node_modules/weapp-qrcode/dist/weapp.qrcode.esm.js
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
1281
node_modules/weapp-qrcode/dist/weapp.qrcode.js
generated
vendored
Normal file
1281
node_modules/weapp-qrcode/dist/weapp.qrcode.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
5
node_modules/weapp-qrcode/dist/weapp.qrcode.min.js
generated
vendored
Normal file
5
node_modules/weapp-qrcode/dist/weapp.qrcode.min.js
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
78
node_modules/weapp-qrcode/package.json
generated
vendored
Normal file
78
node_modules/weapp-qrcode/package.json
generated
vendored
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
{
|
||||||
|
"_from": "weapp-qrcode",
|
||||||
|
"_id": "weapp-qrcode@1.0.0",
|
||||||
|
"_inBundle": false,
|
||||||
|
"_integrity": "sha512-4sa3W0rGDVJ9QaeZpAKlAuUxVyjhDwiUqHyGK/jJMsRMXnhb4yO8qWU/pZruMo+iT5J6CraS67lDMFb1VY+RaA==",
|
||||||
|
"_location": "/weapp-qrcode",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"type": "tag",
|
||||||
|
"registry": true,
|
||||||
|
"raw": "weapp-qrcode",
|
||||||
|
"name": "weapp-qrcode",
|
||||||
|
"escapedName": "weapp-qrcode",
|
||||||
|
"rawSpec": "",
|
||||||
|
"saveSpec": null,
|
||||||
|
"fetchSpec": "latest"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"#USER",
|
||||||
|
"/"
|
||||||
|
],
|
||||||
|
"_resolved": "https://registry.npmmirror.com/weapp-qrcode/-/weapp-qrcode-1.0.0.tgz",
|
||||||
|
"_shasum": "4f3b4b4e7d37710c513439166734587859aebbfc",
|
||||||
|
"_spec": "weapp-qrcode",
|
||||||
|
"_where": "D:\\lananWork\\lanan-repair",
|
||||||
|
"author": {
|
||||||
|
"name": "yingye"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/yingye/weapp-qrcode/issues"
|
||||||
|
},
|
||||||
|
"bundleDependencies": false,
|
||||||
|
"dependencies": {
|
||||||
|
"extend": "^3.0.2"
|
||||||
|
},
|
||||||
|
"deprecated": false,
|
||||||
|
"description": "generate qrcode in weapp",
|
||||||
|
"devDependencies": {
|
||||||
|
"babel-core": "^6.26.0",
|
||||||
|
"babel-eslint": "^8.2.1",
|
||||||
|
"eslint": "^4.16.0",
|
||||||
|
"eslint-config-standard": "^11.0.0-beta.0",
|
||||||
|
"eslint-plugin-import": "^2.8.0",
|
||||||
|
"eslint-plugin-node": "^5.2.1",
|
||||||
|
"eslint-plugin-promise": "^3.6.0",
|
||||||
|
"eslint-plugin-standard": "^3.0.1",
|
||||||
|
"rollup": "^0.55.1",
|
||||||
|
"rollup-plugin-babel": "^3.0.3",
|
||||||
|
"rollup-plugin-commonjs": "^8.3.0",
|
||||||
|
"rollup-plugin-eslint": "^4.0.0",
|
||||||
|
"rollup-plugin-license": "^0.6.0",
|
||||||
|
"rollup-plugin-node-resolve": "^3.0.2",
|
||||||
|
"rollup-plugin-replace": "^2.0.0",
|
||||||
|
"rollup-plugin-uglify": "^3.0.0"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/yingye/weapp-qrcode#readme",
|
||||||
|
"keywords": [
|
||||||
|
"wechat",
|
||||||
|
"weapp",
|
||||||
|
"qrcode",
|
||||||
|
"canvas"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "dist/weapp.qrcode.common.js",
|
||||||
|
"module": "dist/weapp.qrcode.esm.js",
|
||||||
|
"name": "weapp-qrcode",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/yingye/weapp-qrcode.git"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"build": "rollup --config build/rollup.prod.config.js",
|
||||||
|
"dev": "rollup --config build/rollup.dev.config.js -w",
|
||||||
|
"publish": "rollup --config build/rollup.dev.config.js & npm run build",
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"version": "1.0.0"
|
||||||
|
}
|
94
node_modules/weapp-qrcode/src/index.js
generated
vendored
Normal file
94
node_modules/weapp-qrcode/src/index.js
generated
vendored
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
import extend from 'extend'
|
||||||
|
import {
|
||||||
|
QRCode,
|
||||||
|
QRErrorCorrectLevel
|
||||||
|
} from './qrcode'
|
||||||
|
|
||||||
|
// support Chinese
|
||||||
|
function utf16to8 (str) {
|
||||||
|
var out, i, len, c
|
||||||
|
out = ''
|
||||||
|
len = str.length
|
||||||
|
for (i = 0; i < len; i++) {
|
||||||
|
c = str.charCodeAt(i)
|
||||||
|
if ((c >= 0x0001) && (c <= 0x007F)) {
|
||||||
|
out += str.charAt(i)
|
||||||
|
} else if (c > 0x07FF) {
|
||||||
|
out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F))
|
||||||
|
out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F))
|
||||||
|
out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F))
|
||||||
|
} else {
|
||||||
|
out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F))
|
||||||
|
out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
function drawQrcode (options) {
|
||||||
|
options = options || {}
|
||||||
|
options = extend(true, {
|
||||||
|
width: 256,
|
||||||
|
height: 256,
|
||||||
|
x: 0,
|
||||||
|
y: 0,
|
||||||
|
typeNumber: -1,
|
||||||
|
correctLevel: QRErrorCorrectLevel.H,
|
||||||
|
background: '#ffffff',
|
||||||
|
foreground: '#000000',
|
||||||
|
image: {
|
||||||
|
imageResource: '',
|
||||||
|
dx: 0,
|
||||||
|
dy: 0,
|
||||||
|
dWidth: 100,
|
||||||
|
dHeight: 100
|
||||||
|
}
|
||||||
|
}, options)
|
||||||
|
|
||||||
|
if (!options.canvasId && !options.ctx) {
|
||||||
|
console.warn('please set canvasId or ctx!')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
createCanvas()
|
||||||
|
|
||||||
|
function createCanvas () {
|
||||||
|
// create the qrcode itself
|
||||||
|
var qrcode = new QRCode(options.typeNumber, options.correctLevel)
|
||||||
|
qrcode.addData(utf16to8(options.text))
|
||||||
|
qrcode.make()
|
||||||
|
|
||||||
|
// get canvas context
|
||||||
|
var ctx
|
||||||
|
if (options.ctx) {
|
||||||
|
ctx = options.ctx
|
||||||
|
} else {
|
||||||
|
ctx = options._this ? wx.createCanvasContext && wx.createCanvasContext(options.canvasId, options._this) : wx.createCanvasContext && wx.createCanvasContext(options.canvasId)
|
||||||
|
}
|
||||||
|
|
||||||
|
// compute tileW/tileH based on options.width/options.height
|
||||||
|
var tileW = options.width / qrcode.getModuleCount()
|
||||||
|
var tileH = options.height / qrcode.getModuleCount()
|
||||||
|
|
||||||
|
// draw in the canvas
|
||||||
|
for (var row = 0; row < qrcode.getModuleCount(); row++) {
|
||||||
|
for (var col = 0; col < qrcode.getModuleCount(); col++) {
|
||||||
|
var style = qrcode.isDark(row, col) ? options.foreground : options.background
|
||||||
|
ctx.setFillStyle(style)
|
||||||
|
var w = (Math.ceil((col + 1) * tileW) - Math.floor(col * tileW))
|
||||||
|
var h = (Math.ceil((row + 1) * tileW) - Math.floor(row * tileW))
|
||||||
|
ctx.fillRect(Math.round(col * tileW) + options.x, Math.round(row * tileH) + options.y, w, h)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.image.imageResource) {
|
||||||
|
ctx.drawImage(options.image.imageResource, options.image.dx, options.image.dy, options.image.dWidth, options.image.dHeight)
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.draw(false, function (e) {
|
||||||
|
options.callback && options.callback(e)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default drawQrcode
|
1242
node_modules/weapp-qrcode/src/qrcode.js
generated
vendored
Normal file
1242
node_modules/weapp-qrcode/src/qrcode.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
19
package-lock.json
generated
Normal file
19
package-lock.json
generated
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"requires": true,
|
||||||
|
"lockfileVersion": 1,
|
||||||
|
"dependencies": {
|
||||||
|
"extend": {
|
||||||
|
"version": "3.0.2",
|
||||||
|
"resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz",
|
||||||
|
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
|
||||||
|
},
|
||||||
|
"weapp-qrcode": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/weapp-qrcode/-/weapp-qrcode-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-4sa3W0rGDVJ9QaeZpAKlAuUxVyjhDwiUqHyGK/jJMsRMXnhb4yO8qWU/pZruMo+iT5J6CraS67lDMFb1VY+RaA==",
|
||||||
|
"requires": {
|
||||||
|
"extend": "^3.0.2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
{
|
{
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"uview-ui": "^2.0.36"
|
"uview-ui": "^2.0.36",
|
||||||
|
"weapp-qrcode": "^1.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"sass": "^1.69.5",
|
"sass": "^1.69.5",
|
||||||
|
@ -144,6 +144,13 @@
|
|||||||
{
|
{
|
||||||
"navigationBarTitleText" : ""
|
"navigationBarTitleText" : ""
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path" : "pages/login/bindPhoe",
|
||||||
|
"style" :
|
||||||
|
{
|
||||||
|
"navigationBarTitleText" : ""
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"globalStyle": {
|
"globalStyle": {
|
||||||
|
217
pages/login/bindPhoe.vue
Normal file
217
pages/login/bindPhoe.vue
Normal file
@ -0,0 +1,217 @@
|
|||||||
|
<template>
|
||||||
|
<view class="container">
|
||||||
|
<view class="title">绑定手机号</view>
|
||||||
|
<view class="phone formItem">
|
||||||
|
<image style="width: 28rpx;height: 28rpx;" src="../../static/icons/order-icon2.png" mode="aspectFit">
|
||||||
|
</image>
|
||||||
|
<input v-model="phone" placeholder="请输入手机号" class="formItemInput" type="text" />
|
||||||
|
</view>
|
||||||
|
<view class="validaCode formItem">
|
||||||
|
<uni-icons type="locked"></uni-icons>
|
||||||
|
<input v-model="validaCode" class="formItemInput" placeholder="请输入验证码" type="text" />
|
||||||
|
<view :class="{ 'disabled': isButtonDisabled }" class="validaCodeBtn" @click="sendVerificationCode">{{buttonText}}</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="submit" @click="bindPhone">
|
||||||
|
绑定
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { setToken } from '../../utils/auth';
|
||||||
|
import request from '../../utils/request';
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
phone: '15254781016',
|
||||||
|
validaCode: '',
|
||||||
|
countdownTime: 60,
|
||||||
|
isButtonDisabled: false,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
buttonText() {
|
||||||
|
if (this.isButtonDisabled) {
|
||||||
|
return `${this.countdownTime}s 后重新发送`;
|
||||||
|
} else {
|
||||||
|
return "获取验证码";
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
sendVerificationCode() {
|
||||||
|
if (this.isButtonDisabled) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let reg = /^((13[0-9])|(14[0-9])|(15[0-9])|(17[0-9])|(18[0-9]))\d{8}$/;
|
||||||
|
if (!reg.test(this.phone)) {
|
||||||
|
uni.showToast({
|
||||||
|
icon: 'none',
|
||||||
|
title: '请输入正确的11位手机号'
|
||||||
|
})
|
||||||
|
this.phone = '';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (this.isButtonDisabled) {
|
||||||
|
return; // 如果按钮已禁用,则直接返回
|
||||||
|
}
|
||||||
|
const data = {
|
||||||
|
phone: this.phone,
|
||||||
|
}
|
||||||
|
request({
|
||||||
|
url: '/rescue/sendSmsQx',
|
||||||
|
method: 'get',
|
||||||
|
params: data,
|
||||||
|
headers: {
|
||||||
|
isToken: false,
|
||||||
|
},
|
||||||
|
header: {
|
||||||
|
Authorization: 'Bearer ' + uni.getStorageSync('validaCodeToken')
|
||||||
|
}
|
||||||
|
}).then((res) => {
|
||||||
|
console.log('验证码', res);
|
||||||
|
if (res.code == 200) {
|
||||||
|
uni.showToast({
|
||||||
|
title: '验证码已发送 请注意查收',
|
||||||
|
icon: 'none'
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
uni.showToast({
|
||||||
|
title: '网络不佳请稍后再试',
|
||||||
|
icon: 'none'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.disableButton(); // 禁用按钮
|
||||||
|
this.startCountdown(); // 启动倒计时
|
||||||
|
},
|
||||||
|
disableButton() {
|
||||||
|
this.isButtonDisabled = true;
|
||||||
|
},
|
||||||
|
enableButton() {
|
||||||
|
this.isButtonDisabled = false;
|
||||||
|
},
|
||||||
|
startCountdown() {
|
||||||
|
let countdown = setInterval(() => {
|
||||||
|
this.countdownTime--;
|
||||||
|
if (this.countdownTime === 0) {
|
||||||
|
clearInterval(countdown);
|
||||||
|
this.enableButton(); // 启用按钮
|
||||||
|
}
|
||||||
|
}, 1000);
|
||||||
|
},
|
||||||
|
bindPhone() {
|
||||||
|
let reg = /^((13[0-9])|(14[0-9])|(15[0-9])|(17[0-9])|(18[0-9]))\d{8}$/;
|
||||||
|
if (!reg.test(this.phone)) {
|
||||||
|
uni.showToast({
|
||||||
|
icon: 'none',
|
||||||
|
title: '请输入正确的11位手机号'
|
||||||
|
})
|
||||||
|
this.phone = '';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!this.validaCode) {
|
||||||
|
uni.showToast({
|
||||||
|
icon: 'none',
|
||||||
|
title: '请输入验证码'
|
||||||
|
})
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
request({
|
||||||
|
url: '/rescue/updateUserQx',
|
||||||
|
method: 'post',
|
||||||
|
data: {
|
||||||
|
phone: this.phone,
|
||||||
|
code: this.validaCode
|
||||||
|
},
|
||||||
|
headers: {
|
||||||
|
isToken: false,
|
||||||
|
},
|
||||||
|
header: {
|
||||||
|
Authorization: 'Bearer ' + uni.getStorageSync('validaCodeToken')
|
||||||
|
}
|
||||||
|
}).then(res => {
|
||||||
|
console.log('updateUserQx: ',res);
|
||||||
|
if (res.code == 200) {
|
||||||
|
setToken(uni.getStorageSync('validaCodeToken'))
|
||||||
|
uni.reLaunch({
|
||||||
|
url: '/pages/home/home'
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
uni.showToast({
|
||||||
|
title: res.msg,
|
||||||
|
icon: 'none'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.container {
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
row-gap: 40rpx;
|
||||||
|
background-color: #F5F5F5;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
font-size: 40rpx;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-bottom: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.formItem {
|
||||||
|
box-sizing: border-box;
|
||||||
|
width: 680rpx;
|
||||||
|
height: 100rpx;
|
||||||
|
border-radius: 50rpx;
|
||||||
|
background-color: #fff;
|
||||||
|
padding: 0 30rpx;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
column-gap: 16rpx;
|
||||||
|
|
||||||
|
.formItemInput {
|
||||||
|
flex: 1;
|
||||||
|
width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.validaCodeBtn {
|
||||||
|
background-color: #1890ff;
|
||||||
|
color: #fff;
|
||||||
|
height: 60rpx;
|
||||||
|
border-radius: 30rpx;
|
||||||
|
padding: 0 30rpx;
|
||||||
|
font-size: 28rpx;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
&.disabled {
|
||||||
|
background-color: #1890ff99;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.submit {
|
||||||
|
height: 100rpx;
|
||||||
|
border-radius: 50rpx;
|
||||||
|
width: 600rpx;
|
||||||
|
background-color: #1890ff;
|
||||||
|
color: #fff;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -1,226 +1,449 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="content">
|
<view class="content">
|
||||||
<view class="top">
|
<view class="top">
|
||||||
<view class="inputs" >
|
<view class="touxiang">
|
||||||
<input type="text" v-model="userName" placeholder="请输入用户名">
|
<image src="../../static/xinlogo.png" mode=""></image>
|
||||||
</view>
|
</view>
|
||||||
<view class="inputs">
|
<view class="inputs">
|
||||||
<input type="password" v-model="wrod" placeholder="请输入密码">
|
<input type="text" v-model="userName" placeholder="请输入用户名">
|
||||||
</view>
|
</view>
|
||||||
</view>
|
<view class="inputs">
|
||||||
|
<input type="password" v-model="wrod" placeholder="请输入密码">
|
||||||
<view class="dl" @click="getlogin()">
|
</view>
|
||||||
<text>登 录</text>
|
<view class="wjworb" @click="goforgot()">
|
||||||
</view>
|
<view class="">忘记密码</view>
|
||||||
</view>
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="dl" @click="getlogin()">
|
||||||
|
<text>登 录</text>
|
||||||
|
</view>
|
||||||
|
<!-- <view class="hging">
|
||||||
|
<text>没有账号?</text>
|
||||||
|
<text style="color: #0078FF;" @click="goregister()">立即注册</text>
|
||||||
|
</view> -->
|
||||||
|
<view class="dbottom">
|
||||||
|
<view class="quanzi" v-if="qindex == false " @click="qindex =! qindex"></view>
|
||||||
|
<view class="lanquanzi" v-if="qindex == true" @click="qindex =! qindex">
|
||||||
|
<uni-icons type="checkmarkempty" color="#ffffff" size="14"></uni-icons>
|
||||||
|
</view>
|
||||||
|
<text>请仔细阅读</text>
|
||||||
|
<text class="lan">《用户协议》</text>
|
||||||
|
<text>和</text>
|
||||||
|
<text class="lan">《隐私政策》</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import request from '../../utils/request';
|
import request from '../../utils/request';
|
||||||
import {setToken, setTenantId} from '../../utils/auth.js'
|
import {
|
||||||
import {
|
loginApp
|
||||||
getTenantIdByWebsite
|
} from '@/api/login.js';
|
||||||
} from '@/api/login.js'
|
import {
|
||||||
export default{
|
setToken,
|
||||||
data(){
|
setTenantId
|
||||||
return{
|
} from '@/utils/auth.js'
|
||||||
phoneNumber: "",
|
import {
|
||||||
isButtonDisabled: false,
|
login,
|
||||||
countdownTime: 60,
|
getInfo,
|
||||||
qh:[
|
getTenantIdByWebsite
|
||||||
{text:'密码登录'},
|
} from '@/api/login.js'
|
||||||
{text:'验证码登录'}
|
export default {
|
||||||
],
|
data() {
|
||||||
userName:'',
|
return {
|
||||||
yzm:'',
|
phoneNumber: "",
|
||||||
wrod:'',
|
baseUrl: this.$baseUrl,
|
||||||
activeid:0,
|
isButtonDisabled: false,
|
||||||
tenantCode: 'lanan'
|
countdownTime: 60,
|
||||||
}
|
qindex: false,
|
||||||
},
|
sfindex: 'user',
|
||||||
created() {
|
userName: '',
|
||||||
// getTenantIdByWebsite(this.tenantCode).then(res => {
|
yzm: '',
|
||||||
// const tenantId = res.data;
|
wrod: '',
|
||||||
// if (tenantId && tenantId >= 0) {
|
activeid: 0,
|
||||||
// setTenantId(tenantId)
|
tenantCode: 'lanan'
|
||||||
// }
|
}
|
||||||
// })
|
},
|
||||||
},
|
computed: {
|
||||||
computed: {
|
groupChange(n) {
|
||||||
buttonText() {
|
console.log('groupChange', n);
|
||||||
if (this.isButtonDisabled) {
|
},
|
||||||
return `${this.countdownTime}s 后重新发送`;
|
radioChange(n) {
|
||||||
} else {
|
console.log('radioChange', n);
|
||||||
return "获取验证码";
|
},
|
||||||
}
|
buttonText() {
|
||||||
},
|
if (this.isButtonDisabled) {
|
||||||
},
|
return `${this.countdownTime}s 后重新发送`;
|
||||||
methods:{
|
} else {
|
||||||
//登录请求
|
return "获取验证码";
|
||||||
getlogin(){
|
}
|
||||||
if(this.userName == ''){
|
},
|
||||||
uni.showToast({
|
},
|
||||||
title:'输入框不能为空!',
|
mounted() {},
|
||||||
icon:'none'
|
methods: {
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
let data ={
|
setidentity(text) {
|
||||||
username:this.userName,
|
this.sfindex = text
|
||||||
password:this.wrod,
|
|
||||||
type:0
|
|
||||||
}
|
|
||||||
console.log('密码请求',data);
|
|
||||||
request({
|
|
||||||
url: '/rescue/loginQx',
|
|
||||||
method: 'post',
|
|
||||||
data: data
|
|
||||||
}).then((res)=>{
|
|
||||||
console.log('密码请求',res);
|
|
||||||
if(res.code == 200){
|
|
||||||
setToken(res.data.accessToken)
|
|
||||||
|
|
||||||
uni.reLaunch({
|
},
|
||||||
url: '/pages/index/index'
|
//登录请求
|
||||||
})
|
getlogin() {
|
||||||
}
|
if (this.qindex != true) {
|
||||||
})
|
uni.showToast({
|
||||||
},
|
icon: "none",
|
||||||
}
|
title: "请阅读并勾选用户协议",
|
||||||
}
|
duration: 2000
|
||||||
|
})
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (this.userName == '') {
|
||||||
|
uni.showToast({
|
||||||
|
title: '输入框不能为空!',
|
||||||
|
icon: 'none'
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
uni.setStorageSync('identity', this.sfindex);
|
||||||
|
|
||||||
|
const loginFun = () => {
|
||||||
|
const data = {
|
||||||
|
username: this.userName,
|
||||||
|
password: this.wrod,
|
||||||
|
type: 0
|
||||||
|
}
|
||||||
|
loginApp(data).then(res => {
|
||||||
|
if (res.data.needMobile === "1") {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pages/login/bindPhoe'
|
||||||
|
})
|
||||||
|
uni.setStorageSync('validaCodeToken', res.data.accessToken)
|
||||||
|
} else {
|
||||||
|
setToken(res.data.accessToken)
|
||||||
|
uni.reLaunch({
|
||||||
|
url: '/pages/home/home'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
getTenantIdByWebsite(this.tenantCode).then(res => {
|
||||||
|
if (res.code === 200 && res.data && res.data.length > 0) {
|
||||||
|
uni.showActionSheet({
|
||||||
|
itemList: res.data.map(m => m.name),
|
||||||
|
success: ({
|
||||||
|
tapIndex
|
||||||
|
}) => {
|
||||||
|
setTenantId(res.data[tapIndex].id)
|
||||||
|
loginFun()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
setTenantId('')
|
||||||
|
loginFun()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
getxz(index) {
|
||||||
|
this.activeid = index
|
||||||
|
},
|
||||||
|
goregister() {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pages/login/register'
|
||||||
|
})
|
||||||
|
},
|
||||||
|
goforgot() {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pages/login/forgot'
|
||||||
|
})
|
||||||
|
},
|
||||||
|
goselect() {
|
||||||
|
console.log('执行去救援', this.sfindex);
|
||||||
|
// pages/rescue/trafficPolice
|
||||||
|
if (this.sfindex == 'police') {
|
||||||
|
uni.reLaunch({
|
||||||
|
url: '/pages/rescue/trafficPolice'
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
uni.reLaunch({
|
||||||
|
url: '/pages/rescue/rescue'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
// 验证码方法
|
||||||
|
sendVerificationCode() {
|
||||||
|
let reg = /^((13[0-9])|(14[0-9])|(15[0-9])|(17[0-9])|(18[0-9]))\d{8}$/;
|
||||||
|
if (!reg.test(this.userName)) {
|
||||||
|
uni.showToast({
|
||||||
|
icon: 'none',
|
||||||
|
title: '请输入正确的11位手机号'
|
||||||
|
})
|
||||||
|
this.userName = '';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (this.isButtonDisabled) {
|
||||||
|
return; // 如果按钮已禁用,则直接返回
|
||||||
|
}
|
||||||
|
const data = {
|
||||||
|
phone: this.userName,
|
||||||
|
}
|
||||||
|
request({
|
||||||
|
url: '/loginSmsCode',
|
||||||
|
method: 'post',
|
||||||
|
params: data
|
||||||
|
}).then((res) => {
|
||||||
|
console.log('验证码', res);
|
||||||
|
if (res.code == 200) {
|
||||||
|
uni.showToast({
|
||||||
|
title: '验证码已发送 请注意查收',
|
||||||
|
icon: 'none'
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
uni.showToast({
|
||||||
|
title: '网络不佳请稍后再试',
|
||||||
|
icon: 'none'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
this.disableButton(); // 禁用按钮
|
||||||
|
this.startCountdown(); // 启动倒计时
|
||||||
|
|
||||||
|
},
|
||||||
|
disableButton() {
|
||||||
|
this.isButtonDisabled = true;
|
||||||
|
},
|
||||||
|
enableButton() {
|
||||||
|
this.isButtonDisabled = false;
|
||||||
|
},
|
||||||
|
startCountdown() {
|
||||||
|
let countdown = setInterval(() => {
|
||||||
|
this.countdownTime--;
|
||||||
|
if (this.countdownTime === 0) {
|
||||||
|
clearInterval(countdown);
|
||||||
|
this.enableButton(); // 启用按钮
|
||||||
|
}
|
||||||
|
}, 1000);
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.jsq{
|
.jsq {
|
||||||
border: none !important;
|
border: none !important;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
color: #0078FF;
|
color: #0078FF;
|
||||||
}
|
}
|
||||||
button {
|
|
||||||
border: none !important;
|
|
||||||
background: none !important;
|
|
||||||
margin: 0px;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
button:focus {
|
|
||||||
color: #0078FF;
|
|
||||||
outline: none;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
.content{
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
.top{
|
|
||||||
box-sizing: border-box;
|
|
||||||
padding: 0px 27px;
|
|
||||||
padding-top: 100px;
|
|
||||||
// background-color:lightseagreen;
|
|
||||||
//background-image: url('../../static/loginbj.png');
|
|
||||||
background-size: cover;
|
|
||||||
background-position: center;
|
|
||||||
width: 100%;
|
|
||||||
// height: 385px;
|
|
||||||
}
|
|
||||||
.touxiang{
|
|
||||||
width: 88px;
|
|
||||||
height: 88px;
|
|
||||||
border-radius: 10px;
|
|
||||||
background: #D7D7D7;
|
|
||||||
margin: 0 auto;
|
|
||||||
margin-bottom: 40px;
|
|
||||||
overflow: hidden;
|
|
||||||
image{
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.twotap{
|
|
||||||
width: 100%;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
view{
|
|
||||||
font-size: 15px;
|
|
||||||
font-family: Microsoft YaHei;
|
|
||||||
font-weight: 400;
|
|
||||||
color: #666666;
|
|
||||||
margin-right: 38.5px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.blck{
|
|
||||||
color: #333333 !important;
|
|
||||||
font-weight: bold !important;
|
|
||||||
}
|
|
||||||
.inputs{
|
|
||||||
box-sizing: border-box;
|
|
||||||
padding: 16px 0px;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
border-bottom: 2px solid #E8E8E8 ;
|
|
||||||
margin-top: 20px;
|
|
||||||
}
|
|
||||||
.wjworb{
|
|
||||||
margin-top: 5px;
|
|
||||||
width: 100%;
|
|
||||||
display: flex;
|
|
||||||
font-size: 12px;
|
|
||||||
color: #0078FF;
|
|
||||||
justify-content: flex-end;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
}
|
button {
|
||||||
.dl{
|
border: none !important;
|
||||||
width: 90%;
|
background: none !important;
|
||||||
height: 44px;
|
margin: 0px;
|
||||||
background: linear-gradient(-46deg, #0853C4 0%, #4282D8 80%);
|
display: block;
|
||||||
border-radius: 5px;
|
}
|
||||||
margin: 0 auto;
|
|
||||||
font-size: 16px;
|
button:focus {
|
||||||
color: #FFFFFF;
|
color: #0078FF;
|
||||||
display: flex;
|
outline: none;
|
||||||
justify-content: center;
|
box-shadow: none;
|
||||||
align-items: center;
|
}
|
||||||
margin-top: 22px;
|
|
||||||
}
|
.content {
|
||||||
.hging{
|
box-sizing: border-box;
|
||||||
width: 100%;
|
}
|
||||||
text-align: center;
|
|
||||||
font-size: 14px;
|
.top {
|
||||||
font-weight: 400;
|
box-sizing: border-box;
|
||||||
color: #636363;
|
padding: 0px 27px;
|
||||||
margin-top: 20px;
|
padding-top: 100px;
|
||||||
}
|
background-image: url('../../static/loginbj.png');
|
||||||
.wx{
|
// background-color:lightseagreen;
|
||||||
width: 38px;
|
// background-image: url('../../static/loginbj.png');
|
||||||
height: 38px;
|
background-size: cover;
|
||||||
overflow: hidden;
|
background-position: center;
|
||||||
box-sizing: border-box;
|
width: 100%;
|
||||||
margin: 0px auto;
|
// height: 385px;
|
||||||
margin-top: 20px;
|
}
|
||||||
image{
|
|
||||||
width: 100%;
|
.touxiang {
|
||||||
height: 100%;
|
width: 88px;
|
||||||
}
|
height: 88px;
|
||||||
}
|
border-radius: 10px;
|
||||||
.hui{
|
background: #D7D7D7;
|
||||||
font-size: 10px;
|
margin: 0 auto;
|
||||||
width: 100%;
|
margin-bottom: 40px;
|
||||||
text-align: center;
|
overflow: hidden;
|
||||||
font-weight: 400;
|
|
||||||
color: #666666;
|
image {
|
||||||
}
|
width: 100%;
|
||||||
.dbottom{
|
height: 100%;
|
||||||
width: 100%;
|
}
|
||||||
text-align: center;
|
}
|
||||||
font-size: 12px;
|
|
||||||
color: #333333;
|
.twotap {
|
||||||
margin-top: 40px;
|
width: 100%;
|
||||||
position: fixed;
|
display: flex;
|
||||||
bottom: 25px;
|
align-items: center;
|
||||||
}
|
|
||||||
.lan{
|
view {
|
||||||
color: #0078FF;
|
font-size: 15px;
|
||||||
}
|
font-family: Microsoft YaHei;
|
||||||
</style>
|
font-weight: 400;
|
||||||
|
color: #666666;
|
||||||
|
margin-right: 38.5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.blck {
|
||||||
|
color: #333333 !important;
|
||||||
|
font-weight: bold !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inputs {
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 16px 0px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
border-bottom: 2px solid #E8E8E8;
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wjworb {
|
||||||
|
margin-top: 5px;
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #0078FF;
|
||||||
|
justify-content: flex-end;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.dl {
|
||||||
|
width: 90%;
|
||||||
|
height: 44px;
|
||||||
|
background: linear-gradient(-46deg, #0853C4 0%, #4282D8 80%);
|
||||||
|
border-radius: 5px;
|
||||||
|
margin: 0 auto;
|
||||||
|
font-size: 16px;
|
||||||
|
color: #FFFFFF;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
margin-top: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hging {
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #636363;
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wx {
|
||||||
|
width: 38px;
|
||||||
|
height: 38px;
|
||||||
|
overflow: hidden;
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin: 0px auto;
|
||||||
|
margin-top: 20px;
|
||||||
|
|
||||||
|
image {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.hui {
|
||||||
|
font-size: 10px;
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #666666;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dbottom {
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #333333;
|
||||||
|
margin-top: 40px;
|
||||||
|
position: fixed;
|
||||||
|
bottom: 25px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.quanzi {
|
||||||
|
width: 14px;
|
||||||
|
height: 14px;
|
||||||
|
border: 1px solid #666666;
|
||||||
|
border-radius: 50%;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lanquanzi {
|
||||||
|
width: 14px;
|
||||||
|
height: 14px;
|
||||||
|
border: 1px solid #0078FF;
|
||||||
|
border-radius: 50%;
|
||||||
|
margin-right: 10px;
|
||||||
|
background: #0078FF;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lan {
|
||||||
|
color: #0078FF;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jiuzhong {
|
||||||
|
width: 90%;
|
||||||
|
margin: 10px auto;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dist {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin: 0px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.d-zi {
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.d-qian {
|
||||||
|
width: 14px;
|
||||||
|
height: 14px;
|
||||||
|
margin-right: 5px;
|
||||||
|
overflow: hidden;
|
||||||
|
border-radius: 50%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
border: 1px solid #666666;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.d-qian-lan {
|
||||||
|
width: 14px;
|
||||||
|
height: 14px;
|
||||||
|
margin-right: 5px;
|
||||||
|
overflow: hidden;
|
||||||
|
border-radius: 50%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
background: #0078FF;
|
||||||
|
border: 1px solid #0078FF;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
</style>
|
@ -17,40 +17,52 @@
|
|||||||
订单编号:{{item.orderNo}}
|
订单编号:{{item.orderNo}}
|
||||||
</view>
|
</view>
|
||||||
<text class="orderStatus" :class="['status_' + item.status]">
|
<text class="orderStatus" :class="['status_' + item.status]">
|
||||||
{{ getStatus(item.status) }}
|
{{ getStatus(item.orderStatus) }}
|
||||||
</text>
|
</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="orderInfo">
|
<view class="orderInfo">
|
||||||
<image class="orderInfoIcon" src="" mode="aspectFit"></image>
|
<image class="orderInfoIcon" src="" mode="aspectFit"></image>
|
||||||
<text class="orderInfoText">{{ item.busiTypeStr }}</text>
|
<text class="orderInfoText">{{ item.goodsTitle }}</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="orderInfo">
|
<view class="orderInfo">
|
||||||
<image class="orderInfoIcon" src="" mode="aspectFit"></image>
|
<image class="orderInfoIcon" src="" mode="aspectFit"></image>
|
||||||
<text class="orderInfoText">{{ item.address }}</text>
|
<text class="orderInfoText">{{ item.tenantName | 蓝安-中鑫之宝 }}</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="line2">
|
<view class="line2">
|
||||||
<view>
|
<view>
|
||||||
共计
|
共计
|
||||||
<text class="orderAmountUnit">¥</text>
|
<text class="orderAmountUnit">¥</text>
|
||||||
<text class="orderAmount">781</text>
|
<text class="orderAmount">{{item.payMoney}}</text>
|
||||||
</view>
|
</view>
|
||||||
<text>{{ item.date }}</text>
|
<text>{{formatTimestamp(item.createTime)}}</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="line3">
|
<view class="line3">
|
||||||
<view @click="gotoDetail(item)" class="showOrder" v-if="item.status === '1'">查看订单</view>
|
<view @click="goPay(item)" class="showOrder" >支付</view>
|
||||||
<view @click="gotoEvaluate(item)" class="evaluate" v-if="item.status === '2'">评价订单</view>
|
<view @click="gotoDetail(item)" class="showOrder" >查看订单</view>
|
||||||
|
<view @click="gotoEvaluate(item)" class="evaluate" >评价订单</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
<uni-popup ref="popup" type="center" border-radius="10px 10px 0 0" @change="popupChange">
|
||||||
|
<view style="padding: 30rpx;border-radius:20rpx;width: 600rpx;background-color: #fff;display: flex;align-items: center;row-gap: 10rpx;flex-direction: column;">
|
||||||
|
<canvas style="width:200px; height: 200px; z-index: 9999999;margin: 40px auto;"
|
||||||
|
canvas-id="myQrcode"></canvas>
|
||||||
|
<view class="popup-title">收款码</view>
|
||||||
|
</view>
|
||||||
|
</uni-popup>
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<tabBarVue msg="2"></tabBarVue>
|
<tabBarVue msg="2"></tabBarVue>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import request from '../../utils/request';
|
||||||
import VNavigationBar from '@/components/VNavigationBar.vue'
|
import VNavigationBar from '@/components/VNavigationBar.vue'
|
||||||
import tabBarVue from '@/components/tabBar/tabBar.vue'
|
import tabBarVue from '@/components/tabBar/tabBar.vue'
|
||||||
|
import drawQrcode from 'weapp-qrcode';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
tabBarVue,
|
tabBarVue,
|
||||||
@ -58,7 +70,10 @@
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
payShow:false,
|
||||||
activeKey: 0,
|
activeKey: 0,
|
||||||
|
pageNum:1,
|
||||||
|
totalPages:0,
|
||||||
tabList: [{
|
tabList: [{
|
||||||
id: 0,
|
id: 0,
|
||||||
title: '全部订单'
|
title: '全部订单'
|
||||||
@ -72,39 +87,95 @@
|
|||||||
title: '待评价'
|
title: '待评价'
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
orderList: [{
|
orderList: [
|
||||||
orderNo: '20198104817050157810',
|
|
||||||
status: '1',
|
|
||||||
busiTypeStr: '维修轮胎',
|
|
||||||
address: '顺捷汽车维修搭电救援补胎中心',
|
|
||||||
amount: '781',
|
|
||||||
date: '2024-07-02 12:00'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
orderNo: '20198104817050157810',
|
|
||||||
status: '2',
|
|
||||||
busiTypeStr: '维修轮胎',
|
|
||||||
address: '顺捷汽车维修搭电救援补胎中心',
|
|
||||||
amount: '781',
|
|
||||||
date: '2024-07-02 12:00'
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
onShow() {
|
||||||
|
this.orderList = []
|
||||||
|
this.getList()
|
||||||
|
},
|
||||||
|
onReachBottom() {
|
||||||
|
if (this.pageNum >= this.totalPages) {
|
||||||
|
uni.showToast({
|
||||||
|
title: '没有下一页数据',
|
||||||
|
icon: 'none'
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
this.pageNum++
|
||||||
|
this.getList()
|
||||||
|
}
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
formatTimestamp(timestamp) {
|
||||||
|
// 将时间戳转换为Date对象
|
||||||
|
const date = new Date(timestamp);
|
||||||
|
// 获取年月日时分秒
|
||||||
|
const year = date.getFullYear();
|
||||||
|
const month = (date.getMonth() + 1).toString().padStart(2, '0');
|
||||||
|
const day = date.getDate().toString().padStart(2, '0');
|
||||||
|
const hours = date.getHours().toString().padStart(2, '0');
|
||||||
|
const minutes = date.getMinutes().toString().padStart(2, '0');
|
||||||
|
const seconds = date.getSeconds().toString().padStart(2, '0');
|
||||||
|
// 组合成日期时间字符串
|
||||||
|
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
|
||||||
|
},
|
||||||
|
async getList(){
|
||||||
|
let data = {
|
||||||
|
pageSize: 20,
|
||||||
|
pageNo: this.pageNum
|
||||||
|
}
|
||||||
|
await request({
|
||||||
|
url: '/order/page',
|
||||||
|
method: 'get',
|
||||||
|
params: data
|
||||||
|
}).then((res) => {
|
||||||
|
if (res.code == 200) {
|
||||||
|
this.orderList = this.orderList.concat(res.rows)
|
||||||
|
let total = res.total
|
||||||
|
this.totalPages = Math.ceil(total / this.pageSize);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
changeTabFun(id) {
|
changeTabFun(id) {
|
||||||
this.activeKey = id
|
this.activeKey = id
|
||||||
},
|
},
|
||||||
getStatus(status) {
|
getStatus(status) {
|
||||||
switch (status) {
|
switch (status) {
|
||||||
|
case '0':
|
||||||
|
return '待支付'
|
||||||
case '1':
|
case '1':
|
||||||
return '维修中'
|
return '已支付'
|
||||||
case '2':
|
|
||||||
return '待评价'
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
async goPay(data){
|
||||||
|
let that = this
|
||||||
|
await request({
|
||||||
|
url: '/pay/toPay',
|
||||||
|
method: 'get',
|
||||||
|
params: {orderId:data.id}
|
||||||
|
}).then((res) => {
|
||||||
|
|
||||||
|
this.$refs.popup.open()
|
||||||
|
setTimeout(()=>{
|
||||||
|
|
||||||
|
drawQrcode({
|
||||||
|
width: 200,
|
||||||
|
height: 200,
|
||||||
|
canvasId: 'myQrcode',
|
||||||
|
text: res.data.code_url
|
||||||
|
})
|
||||||
|
}, 60)
|
||||||
|
|
||||||
|
})
|
||||||
|
},
|
||||||
|
popupChange({show}) {
|
||||||
|
if (show) {
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
gotoDetail() {
|
gotoDetail() {
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: '/pages/orderDetail/orderDetail'
|
url: '/pages/orderDetail/orderDetail'
|
||||||
|
BIN
static/loginbj.png
Normal file
BIN
static/loginbj.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 67 KiB |
BIN
static/xinlogo.png
Normal file
BIN
static/xinlogo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 25 KiB |
86
uni_modules/uni-popup/changelog.md
Normal file
86
uni_modules/uni-popup/changelog.md
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
## 1.9.2(2024-09-21)
|
||||||
|
- 修复 uni-popup在android上的重复点击弹出位置不正确的bug
|
||||||
|
## 1.9.1(2024-04-02)
|
||||||
|
- 修复 uni-popup-dialog vue3下使用value无法进行绑定的bug(双向绑定兼容旧写法)
|
||||||
|
## 1.9.0(2024-03-28)
|
||||||
|
- 修复 uni-popup-dialog 双向绑定时初始化逻辑修正
|
||||||
|
## 1.8.9(2024-03-20)
|
||||||
|
- 修复 uni-popup-dialog 数据输入时修正为双向绑定
|
||||||
|
## 1.8.8(2024-02-20)
|
||||||
|
- 修复 uni-popup 在微信小程序下出现文字向上闪动的bug
|
||||||
|
## 1.8.7(2024-02-02)
|
||||||
|
- 新增 uni-popup-dialog 新增属性focus:input模式下,是否自动自动聚焦
|
||||||
|
## 1.8.6(2024-01-30)
|
||||||
|
- 新增 uni-popup-dialog 新增属性maxLength:限制输入框字数
|
||||||
|
## 1.8.5(2024-01-26)
|
||||||
|
- 新增 uni-popup-dialog 新增属性showClose:控制关闭按钮的显示
|
||||||
|
## 1.8.4(2023-11-15)
|
||||||
|
- 新增 uni-popup 支持uni-app-x 注意暂时仅支持 `maskClick` `@open` `@close`
|
||||||
|
## 1.8.3(2023-04-17)
|
||||||
|
- 修复 uni-popup 重复打开时的 bug
|
||||||
|
## 1.8.2(2023-02-02)
|
||||||
|
- uni-popup-dialog 组件新增 inputType 属性
|
||||||
|
## 1.8.1(2022-12-01)
|
||||||
|
- 修复 nvue 下 v-show 报错
|
||||||
|
## 1.8.0(2022-11-29)
|
||||||
|
- 优化 主题样式
|
||||||
|
## 1.7.9(2022-04-02)
|
||||||
|
- 修复 弹出层内部无法滚动的bug
|
||||||
|
## 1.7.8(2022-03-28)
|
||||||
|
- 修复 小程序中高度错误的bug
|
||||||
|
## 1.7.7(2022-03-17)
|
||||||
|
- 修复 快速调用open出现问题的Bug
|
||||||
|
## 1.7.6(2022-02-14)
|
||||||
|
- 修复 safeArea 属性不能设置为false的bug
|
||||||
|
## 1.7.5(2022-01-19)
|
||||||
|
- 修复 isMaskClick 失效的bug
|
||||||
|
## 1.7.4(2022-01-19)
|
||||||
|
- 新增 cancelText \ confirmText 属性 ,可自定义文本
|
||||||
|
- 新增 maskBackgroundColor 属性 ,可以修改蒙版颜色
|
||||||
|
- 优化 maskClick属性 更新为 isMaskClick ,解决微信小程序警告的问题
|
||||||
|
## 1.7.3(2022-01-13)
|
||||||
|
- 修复 设置 safeArea 属性不生效的bug
|
||||||
|
## 1.7.2(2021-11-26)
|
||||||
|
- 优化 组件示例
|
||||||
|
## 1.7.1(2021-11-26)
|
||||||
|
- 修复 vuedoc 文字错误
|
||||||
|
## 1.7.0(2021-11-19)
|
||||||
|
- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
|
||||||
|
- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-popup](https://uniapp.dcloud.io/component/uniui/uni-popup)
|
||||||
|
## 1.6.2(2021-08-24)
|
||||||
|
- 新增 支持国际化
|
||||||
|
## 1.6.1(2021-07-30)
|
||||||
|
- 优化 vue3下事件警告的问题
|
||||||
|
## 1.6.0(2021-07-13)
|
||||||
|
- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
|
||||||
|
## 1.5.0(2021-06-23)
|
||||||
|
- 新增 mask-click 遮罩层点击事件
|
||||||
|
## 1.4.5(2021-06-22)
|
||||||
|
- 修复 nvue 平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug
|
||||||
|
## 1.4.4(2021-06-18)
|
||||||
|
- 修复 H5平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug
|
||||||
|
## 1.4.3(2021-06-08)
|
||||||
|
- 修复 错误的 watch 字段
|
||||||
|
- 修复 safeArea 属性不生效的问题
|
||||||
|
- 修复 点击内容,再点击遮罩无法关闭的Bug
|
||||||
|
## 1.4.2(2021-05-12)
|
||||||
|
- 新增 组件示例地址
|
||||||
|
## 1.4.1(2021-04-29)
|
||||||
|
- 修复 组件内放置 input 、textarea 组件,无法聚焦的问题
|
||||||
|
## 1.4.0 (2021-04-29)
|
||||||
|
- 新增 type 属性的 left\right 值,支持左右弹出
|
||||||
|
- 新增 open(String:type) 方法参数 ,可以省略 type 属性 ,直接传入类型打开指定弹窗
|
||||||
|
- 新增 backgroundColor 属性,可定义主窗口背景色,默认不显示背景色
|
||||||
|
- 新增 safeArea 属性,是否适配底部安全区
|
||||||
|
- 修复 App\h5\微信小程序底部安全区占位不对的Bug
|
||||||
|
- 修复 App 端弹出等待的Bug
|
||||||
|
- 优化 提升低配设备性能,优化动画卡顿问题
|
||||||
|
- 优化 更简单的组件自定义方式
|
||||||
|
## 1.2.9(2021-02-05)
|
||||||
|
- 优化 组件引用关系,通过uni_modules引用组件
|
||||||
|
## 1.2.8(2021-02-05)
|
||||||
|
- 调整为uni_modules目录规范
|
||||||
|
## 1.2.7(2021-02-05)
|
||||||
|
- 调整为uni_modules目录规范
|
||||||
|
- 新增 支持 PC 端
|
||||||
|
- 新增 uni-popup-message 、uni-popup-dialog扩展组件支持 PC 端
|
@ -0,0 +1,45 @@
|
|||||||
|
// #ifdef H5
|
||||||
|
export default {
|
||||||
|
name: 'Keypress',
|
||||||
|
props: {
|
||||||
|
disable: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted () {
|
||||||
|
const keyNames = {
|
||||||
|
esc: ['Esc', 'Escape'],
|
||||||
|
tab: 'Tab',
|
||||||
|
enter: 'Enter',
|
||||||
|
space: [' ', 'Spacebar'],
|
||||||
|
up: ['Up', 'ArrowUp'],
|
||||||
|
left: ['Left', 'ArrowLeft'],
|
||||||
|
right: ['Right', 'ArrowRight'],
|
||||||
|
down: ['Down', 'ArrowDown'],
|
||||||
|
delete: ['Backspace', 'Delete', 'Del']
|
||||||
|
}
|
||||||
|
const listener = ($event) => {
|
||||||
|
if (this.disable) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const keyName = Object.keys(keyNames).find(key => {
|
||||||
|
const keyName = $event.key
|
||||||
|
const value = keyNames[key]
|
||||||
|
return value === keyName || (Array.isArray(value) && value.includes(keyName))
|
||||||
|
})
|
||||||
|
if (keyName) {
|
||||||
|
// 避免和其他按键事件冲突
|
||||||
|
setTimeout(() => {
|
||||||
|
this.$emit(keyName, {})
|
||||||
|
}, 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
document.addEventListener('keyup', listener)
|
||||||
|
this.$once('hook:beforeDestroy', () => {
|
||||||
|
document.removeEventListener('keyup', listener)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
render: () => {}
|
||||||
|
}
|
||||||
|
// #endif
|
@ -0,0 +1,316 @@
|
|||||||
|
<template>
|
||||||
|
<view class="uni-popup-dialog">
|
||||||
|
<view class="uni-dialog-title">
|
||||||
|
<text class="uni-dialog-title-text" :class="['uni-popup__'+dialogType]">{{titleText}}</text>
|
||||||
|
</view>
|
||||||
|
<view v-if="mode === 'base'" class="uni-dialog-content">
|
||||||
|
<slot>
|
||||||
|
<text class="uni-dialog-content-text">{{content}}</text>
|
||||||
|
</slot>
|
||||||
|
</view>
|
||||||
|
<view v-else class="uni-dialog-content">
|
||||||
|
<slot>
|
||||||
|
<input class="uni-dialog-input" :maxlength="maxlength" v-model="val" :type="inputType"
|
||||||
|
:placeholder="placeholderText" :focus="focus">
|
||||||
|
</slot>
|
||||||
|
</view>
|
||||||
|
<view class="uni-dialog-button-group">
|
||||||
|
<view class="uni-dialog-button" v-if="showClose" @click="closeDialog">
|
||||||
|
<text class="uni-dialog-button-text">{{closeText}}</text>
|
||||||
|
</view>
|
||||||
|
<view class="uni-dialog-button" :class="showClose?'uni-border-left':''" @click="onOk">
|
||||||
|
<text class="uni-dialog-button-text uni-button-color">{{okText}}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import popup from '../uni-popup/popup.js'
|
||||||
|
import {
|
||||||
|
initVueI18n
|
||||||
|
} from '@dcloudio/uni-i18n'
|
||||||
|
import messages from '../uni-popup/i18n/index.js'
|
||||||
|
const {
|
||||||
|
t
|
||||||
|
} = initVueI18n(messages)
|
||||||
|
/**
|
||||||
|
* PopUp 弹出层-对话框样式
|
||||||
|
* @description 弹出层-对话框样式
|
||||||
|
* @tutorial https://ext.dcloud.net.cn/plugin?id=329
|
||||||
|
* @property {String} value input 模式下的默认值
|
||||||
|
* @property {String} placeholder input 模式下输入提示
|
||||||
|
* @property {Boolean} focus input模式下是否自动聚焦,默认为true
|
||||||
|
* @property {String} type = [success|warning|info|error] 主题样式
|
||||||
|
* @value success 成功
|
||||||
|
* @value warning 提示
|
||||||
|
* @value info 消息
|
||||||
|
* @value error 错误
|
||||||
|
* @property {String} mode = [base|input] 模式、
|
||||||
|
* @value base 基础对话框
|
||||||
|
* @value input 可输入对话框
|
||||||
|
* @showClose {Boolean} 是否显示关闭按钮
|
||||||
|
* @property {String} content 对话框内容
|
||||||
|
* @property {Boolean} beforeClose 是否拦截取消事件
|
||||||
|
* @property {Number} maxlength 输入
|
||||||
|
* @event {Function} confirm 点击确认按钮触发
|
||||||
|
* @event {Function} close 点击取消按钮触发
|
||||||
|
*/
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "uniPopupDialog",
|
||||||
|
mixins: [popup],
|
||||||
|
emits: ['confirm', 'close', 'update:modelValue', 'input'],
|
||||||
|
props: {
|
||||||
|
inputType: {
|
||||||
|
type: String,
|
||||||
|
default: 'text'
|
||||||
|
},
|
||||||
|
showClose: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true
|
||||||
|
},
|
||||||
|
// #ifdef VUE2
|
||||||
|
value: {
|
||||||
|
type: [String, Number],
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
// #endif
|
||||||
|
// #ifdef VUE3
|
||||||
|
modelValue: {
|
||||||
|
type: [Number, String],
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
// #endif
|
||||||
|
|
||||||
|
|
||||||
|
placeholder: {
|
||||||
|
type: [String, Number],
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
type: {
|
||||||
|
type: String,
|
||||||
|
default: 'error'
|
||||||
|
},
|
||||||
|
mode: {
|
||||||
|
type: String,
|
||||||
|
default: 'base'
|
||||||
|
},
|
||||||
|
title: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
content: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
beforeClose: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
cancelText: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
confirmText: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
maxlength: {
|
||||||
|
type: Number,
|
||||||
|
default: -1,
|
||||||
|
},
|
||||||
|
focus: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
dialogType: 'error',
|
||||||
|
val: ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
okText() {
|
||||||
|
return this.confirmText || t("uni-popup.ok")
|
||||||
|
},
|
||||||
|
closeText() {
|
||||||
|
return this.cancelText || t("uni-popup.cancel")
|
||||||
|
},
|
||||||
|
placeholderText() {
|
||||||
|
return this.placeholder || t("uni-popup.placeholder")
|
||||||
|
},
|
||||||
|
titleText() {
|
||||||
|
return this.title || t("uni-popup.title")
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
type(val) {
|
||||||
|
this.dialogType = val
|
||||||
|
},
|
||||||
|
mode(val) {
|
||||||
|
if (val === 'input') {
|
||||||
|
this.dialogType = 'info'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
value(val) {
|
||||||
|
if (this.maxlength != -1 && this.mode === 'input') {
|
||||||
|
this.val = val.slice(0, this.maxlength);
|
||||||
|
} else {
|
||||||
|
this.val = val
|
||||||
|
}
|
||||||
|
},
|
||||||
|
val(val) {
|
||||||
|
// #ifdef VUE2
|
||||||
|
// TODO 兼容 vue2
|
||||||
|
this.$emit('input', val);
|
||||||
|
// #endif
|
||||||
|
// #ifdef VUE3
|
||||||
|
// TODO 兼容 vue3
|
||||||
|
this.$emit('update:modelValue', val);
|
||||||
|
// #endif
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
// 对话框遮罩不可点击
|
||||||
|
this.popup.disableMask()
|
||||||
|
// this.popup.closeMask()
|
||||||
|
if (this.mode === 'input') {
|
||||||
|
this.dialogType = 'info'
|
||||||
|
this.val = this.value;
|
||||||
|
// #ifdef VUE3
|
||||||
|
this.val = this.modelValue;
|
||||||
|
// #endif
|
||||||
|
} else {
|
||||||
|
this.dialogType = this.type
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
/**
|
||||||
|
* 点击确认按钮
|
||||||
|
*/
|
||||||
|
onOk() {
|
||||||
|
if (this.mode === 'input') {
|
||||||
|
this.$emit('confirm', this.val)
|
||||||
|
} else {
|
||||||
|
this.$emit('confirm')
|
||||||
|
}
|
||||||
|
if (this.beforeClose) return
|
||||||
|
this.popup.close()
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 点击取消按钮
|
||||||
|
*/
|
||||||
|
closeDialog() {
|
||||||
|
this.$emit('close')
|
||||||
|
if (this.beforeClose) return
|
||||||
|
this.popup.close()
|
||||||
|
},
|
||||||
|
close() {
|
||||||
|
this.popup.close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.uni-popup-dialog {
|
||||||
|
width: 300px;
|
||||||
|
border-radius: 11px;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-dialog-title {
|
||||||
|
/* #ifndef APP-NVUE */
|
||||||
|
display: flex;
|
||||||
|
/* #endif */
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: center;
|
||||||
|
padding-top: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-dialog-title-text {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-dialog-content {
|
||||||
|
/* #ifndef APP-NVUE */
|
||||||
|
display: flex;
|
||||||
|
/* #endif */
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-dialog-content-text {
|
||||||
|
font-size: 14px;
|
||||||
|
color: #6C6C6C;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-dialog-button-group {
|
||||||
|
/* #ifndef APP-NVUE */
|
||||||
|
display: flex;
|
||||||
|
/* #endif */
|
||||||
|
flex-direction: row;
|
||||||
|
border-top-color: #f5f5f5;
|
||||||
|
border-top-style: solid;
|
||||||
|
border-top-width: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-dialog-button {
|
||||||
|
/* #ifndef APP-NVUE */
|
||||||
|
display: flex;
|
||||||
|
/* #endif */
|
||||||
|
|
||||||
|
flex: 1;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
height: 45px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-border-left {
|
||||||
|
border-left-color: #f0f0f0;
|
||||||
|
border-left-style: solid;
|
||||||
|
border-left-width: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-dialog-button-text {
|
||||||
|
font-size: 16px;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-button-color {
|
||||||
|
color: #007aff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-dialog-input {
|
||||||
|
flex: 1;
|
||||||
|
font-size: 14px;
|
||||||
|
border: 1px #eee solid;
|
||||||
|
height: 40px;
|
||||||
|
padding: 0 10px;
|
||||||
|
border-radius: 5px;
|
||||||
|
color: #555;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-popup__success {
|
||||||
|
color: #4cd964;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-popup__warn {
|
||||||
|
color: #f0ad4e;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-popup__error {
|
||||||
|
color: #dd524d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-popup__info {
|
||||||
|
color: #909399;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,143 @@
|
|||||||
|
<template>
|
||||||
|
<view class="uni-popup-message">
|
||||||
|
<view class="uni-popup-message__box fixforpc-width" :class="'uni-popup__'+type">
|
||||||
|
<slot>
|
||||||
|
<text class="uni-popup-message-text" :class="'uni-popup__'+type+'-text'">{{message}}</text>
|
||||||
|
</slot>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import popup from '../uni-popup/popup.js'
|
||||||
|
/**
|
||||||
|
* PopUp 弹出层-消息提示
|
||||||
|
* @description 弹出层-消息提示
|
||||||
|
* @tutorial https://ext.dcloud.net.cn/plugin?id=329
|
||||||
|
* @property {String} type = [success|warning|info|error] 主题样式
|
||||||
|
* @value success 成功
|
||||||
|
* @value warning 提示
|
||||||
|
* @value info 消息
|
||||||
|
* @value error 错误
|
||||||
|
* @property {String} message 消息提示文字
|
||||||
|
* @property {String} duration 显示时间,设置为 0 则不会自动关闭
|
||||||
|
*/
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'uniPopupMessage',
|
||||||
|
mixins:[popup],
|
||||||
|
props: {
|
||||||
|
/**
|
||||||
|
* 主题 success/warning/info/error 默认 success
|
||||||
|
*/
|
||||||
|
type: {
|
||||||
|
type: String,
|
||||||
|
default: 'success'
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 消息文字
|
||||||
|
*/
|
||||||
|
message: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 显示时间,设置为 0 则不会自动关闭
|
||||||
|
*/
|
||||||
|
duration: {
|
||||||
|
type: Number,
|
||||||
|
default: 3000
|
||||||
|
},
|
||||||
|
maskShow:{
|
||||||
|
type:Boolean,
|
||||||
|
default:false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.popup.maskShow = this.maskShow
|
||||||
|
this.popup.messageChild = this
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
timerClose(){
|
||||||
|
if(this.duration === 0) return
|
||||||
|
clearTimeout(this.timer)
|
||||||
|
this.timer = setTimeout(()=>{
|
||||||
|
this.popup.close()
|
||||||
|
},this.duration)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="scss" >
|
||||||
|
.uni-popup-message {
|
||||||
|
/* #ifndef APP-NVUE */
|
||||||
|
display: flex;
|
||||||
|
/* #endif */
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-popup-message__box {
|
||||||
|
background-color: #e1f3d8;
|
||||||
|
padding: 10px 15px;
|
||||||
|
border-color: #eee;
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 1px;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (min-width: 500px) {
|
||||||
|
.fixforpc-width {
|
||||||
|
margin-top: 20px;
|
||||||
|
border-radius: 4px;
|
||||||
|
flex: none;
|
||||||
|
min-width: 380px;
|
||||||
|
/* #ifndef APP-NVUE */
|
||||||
|
max-width: 50%;
|
||||||
|
/* #endif */
|
||||||
|
/* #ifdef APP-NVUE */
|
||||||
|
max-width: 500px;
|
||||||
|
/* #endif */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-popup-message-text {
|
||||||
|
font-size: 14px;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-popup__success {
|
||||||
|
background-color: #e1f3d8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-popup__success-text {
|
||||||
|
color: #67C23A;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-popup__warn {
|
||||||
|
background-color: #faecd8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-popup__warn-text {
|
||||||
|
color: #E6A23C;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-popup__error {
|
||||||
|
background-color: #fde2e2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-popup__error-text {
|
||||||
|
color: #F56C6C;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-popup__info {
|
||||||
|
background-color: #F2F6FC;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-popup__info-text {
|
||||||
|
color: #909399;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,187 @@
|
|||||||
|
<template>
|
||||||
|
<view class="uni-popup-share">
|
||||||
|
<view class="uni-share-title"><text class="uni-share-title-text">{{shareTitleText}}</text></view>
|
||||||
|
<view class="uni-share-content">
|
||||||
|
<view class="uni-share-content-box">
|
||||||
|
<view class="uni-share-content-item" v-for="(item,index) in bottomData" :key="index" @click.stop="select(item,index)">
|
||||||
|
<image class="uni-share-image" :src="item.icon" mode="aspectFill"></image>
|
||||||
|
<text class="uni-share-text">{{item.text}}</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="uni-share-button-box">
|
||||||
|
<button class="uni-share-button" @click="close">{{cancelText}}</button>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import popup from '../uni-popup/popup.js'
|
||||||
|
import {
|
||||||
|
initVueI18n
|
||||||
|
} from '@dcloudio/uni-i18n'
|
||||||
|
import messages from '../uni-popup/i18n/index.js'
|
||||||
|
const { t } = initVueI18n(messages)
|
||||||
|
export default {
|
||||||
|
name: 'UniPopupShare',
|
||||||
|
mixins:[popup],
|
||||||
|
emits:['select'],
|
||||||
|
props: {
|
||||||
|
title: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
beforeClose: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
bottomData: [{
|
||||||
|
text: '微信',
|
||||||
|
icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/c2b17470-50be-11eb-b680-7980c8a877b8.png',
|
||||||
|
name: 'wx'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: '支付宝',
|
||||||
|
icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/d684ae40-50be-11eb-8ff1-d5dcf8779628.png',
|
||||||
|
name: 'ali'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: 'QQ',
|
||||||
|
icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/e7a79520-50be-11eb-b997-9918a5dda011.png',
|
||||||
|
name: 'qq'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: '新浪',
|
||||||
|
icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/0dacdbe0-50bf-11eb-8ff1-d5dcf8779628.png',
|
||||||
|
name: 'sina'
|
||||||
|
},
|
||||||
|
// {
|
||||||
|
// text: '百度',
|
||||||
|
// icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/1ec6e920-50bf-11eb-8a36-ebb87efcf8c0.png',
|
||||||
|
// name: 'copy'
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// text: '其他',
|
||||||
|
// icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/2e0fdfe0-50bf-11eb-b997-9918a5dda011.png',
|
||||||
|
// name: 'more'
|
||||||
|
// }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {},
|
||||||
|
computed: {
|
||||||
|
cancelText() {
|
||||||
|
return t("uni-popup.cancel")
|
||||||
|
},
|
||||||
|
shareTitleText() {
|
||||||
|
return this.title || t("uni-popup.shareTitle")
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
/**
|
||||||
|
* 选择内容
|
||||||
|
*/
|
||||||
|
select(item, index) {
|
||||||
|
this.$emit('select', {
|
||||||
|
item,
|
||||||
|
index
|
||||||
|
})
|
||||||
|
this.close()
|
||||||
|
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 关闭窗口
|
||||||
|
*/
|
||||||
|
close() {
|
||||||
|
if(this.beforeClose) return
|
||||||
|
this.popup.close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="scss" >
|
||||||
|
.uni-popup-share {
|
||||||
|
background-color: #fff;
|
||||||
|
border-top-left-radius: 11px;
|
||||||
|
border-top-right-radius: 11px;
|
||||||
|
}
|
||||||
|
.uni-share-title {
|
||||||
|
/* #ifndef APP-NVUE */
|
||||||
|
display: flex;
|
||||||
|
/* #endif */
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
height: 40px;
|
||||||
|
}
|
||||||
|
.uni-share-title-text {
|
||||||
|
font-size: 14px;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
.uni-share-content {
|
||||||
|
/* #ifndef APP-NVUE */
|
||||||
|
display: flex;
|
||||||
|
/* #endif */
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: center;
|
||||||
|
padding-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-share-content-box {
|
||||||
|
/* #ifndef APP-NVUE */
|
||||||
|
display: flex;
|
||||||
|
/* #endif */
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
width: 360px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-share-content-item {
|
||||||
|
width: 90px;
|
||||||
|
/* #ifndef APP-NVUE */
|
||||||
|
display: flex;
|
||||||
|
/* #endif */
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 10px 0;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-share-content-item:active {
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-share-image {
|
||||||
|
width: 30px;
|
||||||
|
height: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-share-text {
|
||||||
|
margin-top: 10px;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #3B4144;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-share-button-box {
|
||||||
|
/* #ifndef APP-NVUE */
|
||||||
|
display: flex;
|
||||||
|
/* #endif */
|
||||||
|
flex-direction: row;
|
||||||
|
padding: 10px 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-share-button {
|
||||||
|
flex: 1;
|
||||||
|
border-radius: 50px;
|
||||||
|
color: #666;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-share-button::after {
|
||||||
|
border-radius: 50px;
|
||||||
|
}
|
||||||
|
</style>
|
7
uni_modules/uni-popup/components/uni-popup/i18n/en.json
Normal file
7
uni_modules/uni-popup/components/uni-popup/i18n/en.json
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"uni-popup.cancel": "cancel",
|
||||||
|
"uni-popup.ok": "ok",
|
||||||
|
"uni-popup.placeholder": "pleace enter",
|
||||||
|
"uni-popup.title": "Hint",
|
||||||
|
"uni-popup.shareTitle": "Share to"
|
||||||
|
}
|
8
uni_modules/uni-popup/components/uni-popup/i18n/index.js
Normal file
8
uni_modules/uni-popup/components/uni-popup/i18n/index.js
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import en from './en.json'
|
||||||
|
import zhHans from './zh-Hans.json'
|
||||||
|
import zhHant from './zh-Hant.json'
|
||||||
|
export default {
|
||||||
|
en,
|
||||||
|
'zh-Hans': zhHans,
|
||||||
|
'zh-Hant': zhHant
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"uni-popup.cancel": "取消",
|
||||||
|
"uni-popup.ok": "确定",
|
||||||
|
"uni-popup.placeholder": "请输入",
|
||||||
|
"uni-popup.title": "提示",
|
||||||
|
"uni-popup.shareTitle": "分享到"
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"uni-popup.cancel": "取消",
|
||||||
|
"uni-popup.ok": "確定",
|
||||||
|
"uni-popup.placeholder": "請輸入",
|
||||||
|
"uni-popup.title": "提示",
|
||||||
|
"uni-popup.shareTitle": "分享到"
|
||||||
|
}
|
45
uni_modules/uni-popup/components/uni-popup/keypress.js
Normal file
45
uni_modules/uni-popup/components/uni-popup/keypress.js
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
// #ifdef H5
|
||||||
|
export default {
|
||||||
|
name: 'Keypress',
|
||||||
|
props: {
|
||||||
|
disable: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted () {
|
||||||
|
const keyNames = {
|
||||||
|
esc: ['Esc', 'Escape'],
|
||||||
|
tab: 'Tab',
|
||||||
|
enter: 'Enter',
|
||||||
|
space: [' ', 'Spacebar'],
|
||||||
|
up: ['Up', 'ArrowUp'],
|
||||||
|
left: ['Left', 'ArrowLeft'],
|
||||||
|
right: ['Right', 'ArrowRight'],
|
||||||
|
down: ['Down', 'ArrowDown'],
|
||||||
|
delete: ['Backspace', 'Delete', 'Del']
|
||||||
|
}
|
||||||
|
const listener = ($event) => {
|
||||||
|
if (this.disable) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const keyName = Object.keys(keyNames).find(key => {
|
||||||
|
const keyName = $event.key
|
||||||
|
const value = keyNames[key]
|
||||||
|
return value === keyName || (Array.isArray(value) && value.includes(keyName))
|
||||||
|
})
|
||||||
|
if (keyName) {
|
||||||
|
// 避免和其他按键事件冲突
|
||||||
|
setTimeout(() => {
|
||||||
|
this.$emit(keyName, {})
|
||||||
|
}, 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
document.addEventListener('keyup', listener)
|
||||||
|
// this.$once('hook:beforeDestroy', () => {
|
||||||
|
// document.removeEventListener('keyup', listener)
|
||||||
|
// })
|
||||||
|
},
|
||||||
|
render: () => {}
|
||||||
|
}
|
||||||
|
// #endif
|
26
uni_modules/uni-popup/components/uni-popup/popup.js
Normal file
26
uni_modules/uni-popup/components/uni-popup/popup.js
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created(){
|
||||||
|
this.popup = this.getParent()
|
||||||
|
},
|
||||||
|
methods:{
|
||||||
|
/**
|
||||||
|
* 获取父元素实例
|
||||||
|
*/
|
||||||
|
getParent(name = 'uniPopup') {
|
||||||
|
let parent = this.$parent;
|
||||||
|
let parentName = parent.$options.name;
|
||||||
|
while (parentName !== name) {
|
||||||
|
parent = parent.$parent;
|
||||||
|
if (!parent) return false
|
||||||
|
parentName = parent.$options.name;
|
||||||
|
}
|
||||||
|
return parent;
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
90
uni_modules/uni-popup/components/uni-popup/uni-popup.uvue
Normal file
90
uni_modules/uni-popup/components/uni-popup/uni-popup.uvue
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
<template>
|
||||||
|
<view class="popup-root" v-if="isOpen" v-show="isShow" @click="clickMask">
|
||||||
|
<view @click.stop>
|
||||||
|
<slot></slot>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
type CloseCallBack = ()=> void;
|
||||||
|
let closeCallBack:CloseCallBack = () :void => {};
|
||||||
|
export default {
|
||||||
|
emits:["close","clickMask"],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
isShow:false,
|
||||||
|
isOpen:false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
maskClick: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true
|
||||||
|
},
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
// 设置show = true 时,如果没有 open 需要设置为 open
|
||||||
|
isShow:{
|
||||||
|
handler(isShow) {
|
||||||
|
// console.log("isShow",isShow)
|
||||||
|
if(isShow && this.isOpen == false){
|
||||||
|
this.isOpen = true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
immediate:true
|
||||||
|
},
|
||||||
|
// 设置isOpen = true 时,如果没有 isShow 需要设置为 isShow
|
||||||
|
isOpen:{
|
||||||
|
handler(isOpen) {
|
||||||
|
// console.log("isOpen",isOpen)
|
||||||
|
if(isOpen && this.isShow == false){
|
||||||
|
this.isShow = true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
immediate:true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods:{
|
||||||
|
open(){
|
||||||
|
// ...funs : CloseCallBack[]
|
||||||
|
// if(funs.length > 0){
|
||||||
|
// closeCallBack = funs[0]
|
||||||
|
// }
|
||||||
|
this.isOpen = true;
|
||||||
|
},
|
||||||
|
clickMask(){
|
||||||
|
if(this.maskClick == true){
|
||||||
|
this.$emit('clickMask')
|
||||||
|
this.close()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
close(): void{
|
||||||
|
this.isOpen = false;
|
||||||
|
this.$emit('close')
|
||||||
|
closeCallBack()
|
||||||
|
},
|
||||||
|
hiden(){
|
||||||
|
this.isShow = false
|
||||||
|
},
|
||||||
|
show(){
|
||||||
|
this.isShow = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.popup-root {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 750rpx;
|
||||||
|
height: 100%;
|
||||||
|
flex: 1;
|
||||||
|
background-color: rgba(0, 0, 0, 0.3);
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
z-index: 99;
|
||||||
|
}
|
||||||
|
</style>
|
506
uni_modules/uni-popup/components/uni-popup/uni-popup.vue
Normal file
506
uni_modules/uni-popup/components/uni-popup/uni-popup.vue
Normal file
@ -0,0 +1,506 @@
|
|||||||
|
<template>
|
||||||
|
<view v-if="showPopup" class="uni-popup" :class="[popupstyle, isDesktop ? 'fixforpc-z-index' : '']">
|
||||||
|
<view @touchstart="touchstart">
|
||||||
|
<uni-transition key="1" v-if="maskShow" name="mask" mode-class="fade" :styles="maskClass"
|
||||||
|
:duration="duration" :show="showTrans" @click="onTap" />
|
||||||
|
<uni-transition key="2" :mode-class="ani" name="content" :styles="transClass" :duration="duration"
|
||||||
|
:show="showTrans" @click="onTap">
|
||||||
|
<view class="uni-popup__wrapper" :style="getStyles" :class="[popupstyle]" @click="clear">
|
||||||
|
<slot />
|
||||||
|
</view>
|
||||||
|
</uni-transition>
|
||||||
|
</view>
|
||||||
|
<!-- #ifdef H5 -->
|
||||||
|
<keypress v-if="maskShow" @esc="onTap" />
|
||||||
|
<!-- #endif -->
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// #ifdef H5
|
||||||
|
import keypress from './keypress.js'
|
||||||
|
// #endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PopUp 弹出层
|
||||||
|
* @description 弹出层组件,为了解决遮罩弹层的问题
|
||||||
|
* @tutorial https://ext.dcloud.net.cn/plugin?id=329
|
||||||
|
* @property {String} type = [top|center|bottom|left|right|message|dialog|share] 弹出方式
|
||||||
|
* @value top 顶部弹出
|
||||||
|
* @value center 中间弹出
|
||||||
|
* @value bottom 底部弹出
|
||||||
|
* @value left 左侧弹出
|
||||||
|
* @value right 右侧弹出
|
||||||
|
* @value message 消息提示
|
||||||
|
* @value dialog 对话框
|
||||||
|
* @value share 底部分享示例
|
||||||
|
* @property {Boolean} animation = [true|false] 是否开启动画
|
||||||
|
* @property {Boolean} maskClick = [true|false] 蒙版点击是否关闭弹窗(废弃)
|
||||||
|
* @property {Boolean} isMaskClick = [true|false] 蒙版点击是否关闭弹窗
|
||||||
|
* @property {String} backgroundColor 主窗口背景色
|
||||||
|
* @property {String} maskBackgroundColor 蒙版颜色
|
||||||
|
* @property {String} borderRadius 设置圆角(左上、右上、右下和左下) 示例:"10px 10px 10px 10px"
|
||||||
|
* @property {Boolean} safeArea 是否适配底部安全区
|
||||||
|
* @event {Function} change 打开关闭弹窗触发,e={show: false}
|
||||||
|
* @event {Function} maskClick 点击遮罩触发
|
||||||
|
*/
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'uniPopup',
|
||||||
|
components: {
|
||||||
|
// #ifdef H5
|
||||||
|
keypress
|
||||||
|
// #endif
|
||||||
|
},
|
||||||
|
emits: ['change', 'maskClick'],
|
||||||
|
props: {
|
||||||
|
// 开启动画
|
||||||
|
animation: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true
|
||||||
|
},
|
||||||
|
// 弹出层类型,可选值,top: 顶部弹出层;bottom:底部弹出层;center:全屏弹出层
|
||||||
|
// message: 消息提示 ; dialog : 对话框
|
||||||
|
type: {
|
||||||
|
type: String,
|
||||||
|
default: 'center'
|
||||||
|
},
|
||||||
|
// maskClick
|
||||||
|
isMaskClick: {
|
||||||
|
type: Boolean,
|
||||||
|
default: null
|
||||||
|
},
|
||||||
|
// TODO 2 个版本后废弃属性 ,使用 isMaskClick
|
||||||
|
maskClick: {
|
||||||
|
type: Boolean,
|
||||||
|
default: null
|
||||||
|
},
|
||||||
|
backgroundColor: {
|
||||||
|
type: String,
|
||||||
|
default: 'none'
|
||||||
|
},
|
||||||
|
safeArea: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true
|
||||||
|
},
|
||||||
|
maskBackgroundColor: {
|
||||||
|
type: String,
|
||||||
|
default: 'rgba(0, 0, 0, 0.4)'
|
||||||
|
},
|
||||||
|
borderRadius:{
|
||||||
|
type: String,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
watch: {
|
||||||
|
/**
|
||||||
|
* 监听type类型
|
||||||
|
*/
|
||||||
|
type: {
|
||||||
|
handler: function(type) {
|
||||||
|
if (!this.config[type]) return
|
||||||
|
this[this.config[type]](true)
|
||||||
|
},
|
||||||
|
immediate: true
|
||||||
|
},
|
||||||
|
isDesktop: {
|
||||||
|
handler: function(newVal) {
|
||||||
|
if (!this.config[newVal]) return
|
||||||
|
this[this.config[this.type]](true)
|
||||||
|
},
|
||||||
|
immediate: true
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 监听遮罩是否可点击
|
||||||
|
* @param {Object} val
|
||||||
|
*/
|
||||||
|
maskClick: {
|
||||||
|
handler: function(val) {
|
||||||
|
this.mkclick = val
|
||||||
|
},
|
||||||
|
immediate: true
|
||||||
|
},
|
||||||
|
isMaskClick: {
|
||||||
|
handler: function(val) {
|
||||||
|
this.mkclick = val
|
||||||
|
},
|
||||||
|
immediate: true
|
||||||
|
},
|
||||||
|
// H5 下禁止底部滚动
|
||||||
|
showPopup(show) {
|
||||||
|
// #ifdef H5
|
||||||
|
// fix by mehaotian 处理 h5 滚动穿透的问题
|
||||||
|
document.getElementsByTagName('body')[0].style.overflow = show ? 'hidden' : 'visible'
|
||||||
|
// #endif
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
duration: 300,
|
||||||
|
ani: [],
|
||||||
|
showPopup: false,
|
||||||
|
showTrans: false,
|
||||||
|
popupWidth: 0,
|
||||||
|
popupHeight: 0,
|
||||||
|
config: {
|
||||||
|
top: 'top',
|
||||||
|
bottom: 'bottom',
|
||||||
|
center: 'center',
|
||||||
|
left: 'left',
|
||||||
|
right: 'right',
|
||||||
|
message: 'top',
|
||||||
|
dialog: 'center',
|
||||||
|
share: 'bottom'
|
||||||
|
},
|
||||||
|
maskClass: {
|
||||||
|
position: 'fixed',
|
||||||
|
bottom: 0,
|
||||||
|
top: 0,
|
||||||
|
left: 0,
|
||||||
|
right: 0,
|
||||||
|
backgroundColor: 'rgba(0, 0, 0, 0.4)'
|
||||||
|
},
|
||||||
|
transClass: {
|
||||||
|
backgroundColor: 'transparent',
|
||||||
|
borderRadius: this.borderRadius || "0",
|
||||||
|
position: 'fixed',
|
||||||
|
left: 0,
|
||||||
|
right: 0
|
||||||
|
},
|
||||||
|
maskShow: true,
|
||||||
|
mkclick: true,
|
||||||
|
popupstyle: 'top'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
getStyles() {
|
||||||
|
let res = { backgroundColor: this.bg };
|
||||||
|
if (this.borderRadius || "0") {
|
||||||
|
res = Object.assign(res, { borderRadius: this.borderRadius })
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
isDesktop() {
|
||||||
|
return this.popupWidth >= 500 && this.popupHeight >= 500
|
||||||
|
},
|
||||||
|
bg() {
|
||||||
|
if (this.backgroundColor === '' || this.backgroundColor === 'none') {
|
||||||
|
return 'transparent'
|
||||||
|
}
|
||||||
|
return this.backgroundColor
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
const fixSize = () => {
|
||||||
|
const {
|
||||||
|
windowWidth,
|
||||||
|
windowHeight,
|
||||||
|
windowTop,
|
||||||
|
safeArea,
|
||||||
|
screenHeight,
|
||||||
|
safeAreaInsets
|
||||||
|
} = uni.getSystemInfoSync()
|
||||||
|
this.popupWidth = windowWidth
|
||||||
|
this.popupHeight = windowHeight + (windowTop || 0)
|
||||||
|
// TODO fix by mehaotian 是否适配底部安全区 ,目前微信ios 、和 app ios 计算有差异,需要框架修复
|
||||||
|
if (safeArea && this.safeArea) {
|
||||||
|
// #ifdef MP-WEIXIN
|
||||||
|
this.safeAreaInsets = screenHeight - safeArea.bottom
|
||||||
|
// #endif
|
||||||
|
// #ifndef MP-WEIXIN
|
||||||
|
this.safeAreaInsets = safeAreaInsets.bottom
|
||||||
|
// #endif
|
||||||
|
} else {
|
||||||
|
this.safeAreaInsets = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fixSize()
|
||||||
|
// #ifdef H5
|
||||||
|
// window.addEventListener('resize', fixSize)
|
||||||
|
// this.$once('hook:beforeDestroy', () => {
|
||||||
|
// window.removeEventListener('resize', fixSize)
|
||||||
|
// })
|
||||||
|
// #endif
|
||||||
|
},
|
||||||
|
// #ifndef VUE3
|
||||||
|
// TODO vue2
|
||||||
|
destroyed() {
|
||||||
|
this.setH5Visible()
|
||||||
|
},
|
||||||
|
// #endif
|
||||||
|
// #ifdef VUE3
|
||||||
|
// TODO vue3
|
||||||
|
unmounted() {
|
||||||
|
this.setH5Visible()
|
||||||
|
},
|
||||||
|
// #endif
|
||||||
|
activated() {
|
||||||
|
this.setH5Visible(!this.showPopup);
|
||||||
|
},
|
||||||
|
deactivated() {
|
||||||
|
this.setH5Visible(true);
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
// this.mkclick = this.isMaskClick || this.maskClick
|
||||||
|
if (this.isMaskClick === null && this.maskClick === null) {
|
||||||
|
this.mkclick = true
|
||||||
|
} else {
|
||||||
|
this.mkclick = this.isMaskClick !== null ? this.isMaskClick : this.maskClick
|
||||||
|
}
|
||||||
|
if (this.animation) {
|
||||||
|
this.duration = 300
|
||||||
|
} else {
|
||||||
|
this.duration = 0
|
||||||
|
}
|
||||||
|
// TODO 处理 message 组件生命周期异常的问题
|
||||||
|
this.messageChild = null
|
||||||
|
// TODO 解决头条冒泡的问题
|
||||||
|
this.clearPropagation = false
|
||||||
|
this.maskClass.backgroundColor = this.maskBackgroundColor
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
setH5Visible(visible = true) {
|
||||||
|
// #ifdef H5
|
||||||
|
// fix by mehaotian 处理 h5 滚动穿透的问题
|
||||||
|
document.getElementsByTagName('body')[0].style.overflow = visible ? "visible" : "hidden";
|
||||||
|
// #endif
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 公用方法,不显示遮罩层
|
||||||
|
*/
|
||||||
|
closeMask() {
|
||||||
|
this.maskShow = false
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 公用方法,遮罩层禁止点击
|
||||||
|
*/
|
||||||
|
disableMask() {
|
||||||
|
this.mkclick = false
|
||||||
|
},
|
||||||
|
// TODO nvue 取消冒泡
|
||||||
|
clear(e) {
|
||||||
|
// #ifndef APP-NVUE
|
||||||
|
e.stopPropagation()
|
||||||
|
// #endif
|
||||||
|
this.clearPropagation = true
|
||||||
|
},
|
||||||
|
|
||||||
|
open(direction) {
|
||||||
|
// fix by mehaotian 处理快速打开关闭的情况
|
||||||
|
if (this.showPopup) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let innerType = ['top', 'center', 'bottom', 'left', 'right', 'message', 'dialog', 'share']
|
||||||
|
if (!(direction && innerType.indexOf(direction) !== -1)) {
|
||||||
|
direction = this.type
|
||||||
|
}
|
||||||
|
if (!this.config[direction]) {
|
||||||
|
console.error('缺少类型:', direction)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this[this.config[direction]]()
|
||||||
|
this.$emit('change', {
|
||||||
|
show: true,
|
||||||
|
type: direction
|
||||||
|
})
|
||||||
|
},
|
||||||
|
close(type) {
|
||||||
|
this.showTrans = false
|
||||||
|
this.$emit('change', {
|
||||||
|
show: false,
|
||||||
|
type: this.type
|
||||||
|
})
|
||||||
|
clearTimeout(this.timer)
|
||||||
|
// // 自定义关闭事件
|
||||||
|
// this.customOpen && this.customClose()
|
||||||
|
this.timer = setTimeout(() => {
|
||||||
|
this.showPopup = false
|
||||||
|
}, 300)
|
||||||
|
},
|
||||||
|
// TODO 处理冒泡事件,头条的冒泡事件有问题 ,先这样兼容
|
||||||
|
touchstart() {
|
||||||
|
this.clearPropagation = false
|
||||||
|
},
|
||||||
|
|
||||||
|
onTap() {
|
||||||
|
if (this.clearPropagation) {
|
||||||
|
// fix by mehaotian 兼容 nvue
|
||||||
|
this.clearPropagation = false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.$emit('maskClick')
|
||||||
|
if (!this.mkclick) return
|
||||||
|
this.close()
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 顶部弹出样式处理
|
||||||
|
*/
|
||||||
|
top(type) {
|
||||||
|
this.popupstyle = this.isDesktop ? 'fixforpc-top' : 'top'
|
||||||
|
this.ani = ['slide-top']
|
||||||
|
this.transClass = {
|
||||||
|
position: 'fixed',
|
||||||
|
left: 0,
|
||||||
|
right: 0,
|
||||||
|
backgroundColor: this.bg,
|
||||||
|
borderRadius:this.borderRadius || "0"
|
||||||
|
}
|
||||||
|
// TODO 兼容 type 属性 ,后续会废弃
|
||||||
|
if (type) return
|
||||||
|
this.showPopup = true
|
||||||
|
this.showTrans = true
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.showPoptrans()
|
||||||
|
if (this.messageChild && this.type === 'message') {
|
||||||
|
this.messageChild.timerClose()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 底部弹出样式处理
|
||||||
|
*/
|
||||||
|
bottom(type) {
|
||||||
|
this.popupstyle = 'bottom'
|
||||||
|
this.ani = ['slide-bottom']
|
||||||
|
this.transClass = {
|
||||||
|
position: 'fixed',
|
||||||
|
left: 0,
|
||||||
|
right: 0,
|
||||||
|
bottom: 0,
|
||||||
|
paddingBottom: this.safeAreaInsets + 'px',
|
||||||
|
backgroundColor: this.bg,
|
||||||
|
borderRadius:this.borderRadius || "0",
|
||||||
|
}
|
||||||
|
// TODO 兼容 type 属性 ,后续会废弃
|
||||||
|
if (type) return
|
||||||
|
this.showPoptrans()
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 中间弹出样式处理
|
||||||
|
*/
|
||||||
|
center(type) {
|
||||||
|
this.popupstyle = 'center'
|
||||||
|
//微信小程序下,组合动画会出现文字向上闪动问题,再此做特殊处理
|
||||||
|
// #ifdef MP-WEIXIN
|
||||||
|
this.ani = ['fade']
|
||||||
|
// #endif
|
||||||
|
// #ifndef MP-WEIXIN
|
||||||
|
this.ani = ['zoom-out', 'fade']
|
||||||
|
// #endif
|
||||||
|
this.transClass = {
|
||||||
|
position: 'fixed',
|
||||||
|
/* #ifndef APP-NVUE */
|
||||||
|
display: 'flex',
|
||||||
|
flexDirection: 'column',
|
||||||
|
/* #endif */
|
||||||
|
bottom: 0,
|
||||||
|
left: 0,
|
||||||
|
right: 0,
|
||||||
|
top: 0,
|
||||||
|
justifyContent: 'center',
|
||||||
|
alignItems: 'center',
|
||||||
|
borderRadius:this.borderRadius || "0"
|
||||||
|
}
|
||||||
|
// TODO 兼容 type 属性 ,后续会废弃
|
||||||
|
if (type) return
|
||||||
|
this.showPoptrans()
|
||||||
|
},
|
||||||
|
left(type) {
|
||||||
|
this.popupstyle = 'left'
|
||||||
|
this.ani = ['slide-left']
|
||||||
|
this.transClass = {
|
||||||
|
position: 'fixed',
|
||||||
|
left: 0,
|
||||||
|
bottom: 0,
|
||||||
|
top: 0,
|
||||||
|
backgroundColor: this.bg,
|
||||||
|
borderRadius:this.borderRadius || "0",
|
||||||
|
/* #ifndef APP-NVUE */
|
||||||
|
display: 'flex',
|
||||||
|
flexDirection: 'column'
|
||||||
|
/* #endif */
|
||||||
|
}
|
||||||
|
// TODO 兼容 type 属性 ,后续会废弃
|
||||||
|
if (type) return
|
||||||
|
this.showPoptrans()
|
||||||
|
},
|
||||||
|
right(type) {
|
||||||
|
this.popupstyle = 'right'
|
||||||
|
this.ani = ['slide-right']
|
||||||
|
this.transClass = {
|
||||||
|
position: 'fixed',
|
||||||
|
bottom: 0,
|
||||||
|
right: 0,
|
||||||
|
top: 0,
|
||||||
|
backgroundColor: this.bg,
|
||||||
|
borderRadius:this.borderRadius || "0",
|
||||||
|
/* #ifndef APP-NVUE */
|
||||||
|
display: 'flex',
|
||||||
|
flexDirection: 'column'
|
||||||
|
/* #endif */
|
||||||
|
}
|
||||||
|
// TODO 兼容 type 属性 ,后续会废弃
|
||||||
|
if (type) return
|
||||||
|
this.showPoptrans()
|
||||||
|
},
|
||||||
|
showPoptrans(){
|
||||||
|
this.$nextTick(()=>{
|
||||||
|
this.showPopup = true
|
||||||
|
this.showTrans = true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="scss">
|
||||||
|
.uni-popup {
|
||||||
|
position: fixed;
|
||||||
|
/* #ifndef APP-NVUE */
|
||||||
|
z-index: 99;
|
||||||
|
|
||||||
|
/* #endif */
|
||||||
|
&.top,
|
||||||
|
&.left,
|
||||||
|
&.right {
|
||||||
|
/* #ifdef H5 */
|
||||||
|
top: var(--window-top);
|
||||||
|
/* #endif */
|
||||||
|
/* #ifndef H5 */
|
||||||
|
top: 0;
|
||||||
|
/* #endif */
|
||||||
|
}
|
||||||
|
|
||||||
|
.uni-popup__wrapper {
|
||||||
|
/* #ifndef APP-NVUE */
|
||||||
|
display: block;
|
||||||
|
/* #endif */
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
/* iphonex 等安全区设置,底部安全区适配 */
|
||||||
|
/* #ifndef APP-NVUE */
|
||||||
|
// padding-bottom: constant(safe-area-inset-bottom);
|
||||||
|
// padding-bottom: env(safe-area-inset-bottom);
|
||||||
|
/* #endif */
|
||||||
|
&.left,
|
||||||
|
&.right {
|
||||||
|
/* #ifdef H5 */
|
||||||
|
padding-top: var(--window-top);
|
||||||
|
/* #endif */
|
||||||
|
/* #ifndef H5 */
|
||||||
|
padding-top: 0;
|
||||||
|
/* #endif */
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixforpc-z-index {
|
||||||
|
/* #ifndef APP-NVUE */
|
||||||
|
z-index: 999;
|
||||||
|
/* #endif */
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixforpc-top {
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
</style>
|
88
uni_modules/uni-popup/package.json
Normal file
88
uni_modules/uni-popup/package.json
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
{
|
||||||
|
"id": "uni-popup",
|
||||||
|
"displayName": "uni-popup 弹出层",
|
||||||
|
"version": "1.9.2",
|
||||||
|
"description": " Popup 组件,提供常用的弹层",
|
||||||
|
"keywords": [
|
||||||
|
"uni-ui",
|
||||||
|
"弹出层",
|
||||||
|
"弹窗",
|
||||||
|
"popup",
|
||||||
|
"弹框"
|
||||||
|
],
|
||||||
|
"repository": "https://github.com/dcloudio/uni-ui",
|
||||||
|
"engines": {
|
||||||
|
"HBuilderX": ""
|
||||||
|
},
|
||||||
|
"directories": {
|
||||||
|
"example": "../../temps/example_temps"
|
||||||
|
},
|
||||||
|
"dcloudext": {
|
||||||
|
"sale": {
|
||||||
|
"regular": {
|
||||||
|
"price": "0.00"
|
||||||
|
},
|
||||||
|
"sourcecode": {
|
||||||
|
"price": "0.00"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"contact": {
|
||||||
|
"qq": ""
|
||||||
|
},
|
||||||
|
"declaration": {
|
||||||
|
"ads": "无",
|
||||||
|
"data": "无",
|
||||||
|
"permissions": "无"
|
||||||
|
},
|
||||||
|
"npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
|
||||||
|
"type": "component-vue"
|
||||||
|
},
|
||||||
|
"uni_modules": {
|
||||||
|
"dependencies": [
|
||||||
|
"uni-scss",
|
||||||
|
"uni-transition"
|
||||||
|
],
|
||||||
|
"encrypt": [],
|
||||||
|
"platforms": {
|
||||||
|
"cloud": {
|
||||||
|
"tcb": "y",
|
||||||
|
"aliyun": "y",
|
||||||
|
"alipay": "n"
|
||||||
|
},
|
||||||
|
"client": {
|
||||||
|
"App": {
|
||||||
|
"app-vue": "y",
|
||||||
|
"app-nvue": "y"
|
||||||
|
},
|
||||||
|
"H5-mobile": {
|
||||||
|
"Safari": "y",
|
||||||
|
"Android Browser": "y",
|
||||||
|
"微信浏览器(Android)": "y",
|
||||||
|
"QQ浏览器(Android)": "y"
|
||||||
|
},
|
||||||
|
"H5-pc": {
|
||||||
|
"Chrome": "y",
|
||||||
|
"IE": "y",
|
||||||
|
"Edge": "y",
|
||||||
|
"Firefox": "y",
|
||||||
|
"Safari": "y"
|
||||||
|
},
|
||||||
|
"小程序": {
|
||||||
|
"微信": "y",
|
||||||
|
"阿里": "y",
|
||||||
|
"百度": "y",
|
||||||
|
"字节跳动": "y",
|
||||||
|
"QQ": "y"
|
||||||
|
},
|
||||||
|
"快应用": {
|
||||||
|
"华为": "u",
|
||||||
|
"联盟": "u"
|
||||||
|
},
|
||||||
|
"Vue": {
|
||||||
|
"vue2": "y",
|
||||||
|
"vue3": "y"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
17
uni_modules/uni-popup/readme.md
Normal file
17
uni_modules/uni-popup/readme.md
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
|
||||||
|
|
||||||
|
## Popup 弹出层
|
||||||
|
> **组件名:uni-popup**
|
||||||
|
> 代码块: `uPopup`
|
||||||
|
> 关联组件:`uni-transition`
|
||||||
|
|
||||||
|
|
||||||
|
弹出层组件,在应用中弹出一个消息提示窗口、提示框等
|
||||||
|
|
||||||
|
### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-popup)
|
||||||
|
#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
24
uni_modules/uni-transition/changelog.md
Normal file
24
uni_modules/uni-transition/changelog.md
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
## 1.3.3(2024-04-23)
|
||||||
|
- 修复 当元素会受变量影响自动隐藏的bug
|
||||||
|
## 1.3.2(2023-05-04)
|
||||||
|
- 修复 NVUE 平台报错的问题
|
||||||
|
## 1.3.1(2021-11-23)
|
||||||
|
- 修复 init 方法初始化问题
|
||||||
|
## 1.3.0(2021-11-19)
|
||||||
|
- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
|
||||||
|
- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-transition](https://uniapp.dcloud.io/component/uniui/uni-transition)
|
||||||
|
## 1.2.1(2021-09-27)
|
||||||
|
- 修复 init 方法不生效的 Bug
|
||||||
|
## 1.2.0(2021-07-30)
|
||||||
|
- 组件兼容 vue3,如何创建 vue3 项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
|
||||||
|
## 1.1.1(2021-05-12)
|
||||||
|
- 新增 示例地址
|
||||||
|
- 修复 示例项目缺少组件的 Bug
|
||||||
|
## 1.1.0(2021-04-22)
|
||||||
|
- 新增 通过方法自定义动画
|
||||||
|
- 新增 custom-class 非 NVUE 平台支持自定义 class 定制样式
|
||||||
|
- 优化 动画触发逻辑,使动画更流畅
|
||||||
|
- 优化 支持单独的动画类型
|
||||||
|
- 优化 文档示例
|
||||||
|
## 1.0.2(2021-02-05)
|
||||||
|
- 调整为 uni_modules 目录规范
|
@ -0,0 +1,131 @@
|
|||||||
|
// const defaultOption = {
|
||||||
|
// duration: 300,
|
||||||
|
// timingFunction: 'linear',
|
||||||
|
// delay: 0,
|
||||||
|
// transformOrigin: '50% 50% 0'
|
||||||
|
// }
|
||||||
|
// #ifdef APP-NVUE
|
||||||
|
const nvueAnimation = uni.requireNativePlugin('animation')
|
||||||
|
// #endif
|
||||||
|
class MPAnimation {
|
||||||
|
constructor(options, _this) {
|
||||||
|
this.options = options
|
||||||
|
// 在iOS10+QQ小程序平台下,传给原生的对象一定是个普通对象而不是Proxy对象,否则会报parameter should be Object instead of ProxyObject的错误
|
||||||
|
this.animation = uni.createAnimation({
|
||||||
|
...options
|
||||||
|
})
|
||||||
|
this.currentStepAnimates = {}
|
||||||
|
this.next = 0
|
||||||
|
this.$ = _this
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
_nvuePushAnimates(type, args) {
|
||||||
|
let aniObj = this.currentStepAnimates[this.next]
|
||||||
|
let styles = {}
|
||||||
|
if (!aniObj) {
|
||||||
|
styles = {
|
||||||
|
styles: {},
|
||||||
|
config: {}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
styles = aniObj
|
||||||
|
}
|
||||||
|
if (animateTypes1.includes(type)) {
|
||||||
|
if (!styles.styles.transform) {
|
||||||
|
styles.styles.transform = ''
|
||||||
|
}
|
||||||
|
let unit = ''
|
||||||
|
if(type === 'rotate'){
|
||||||
|
unit = 'deg'
|
||||||
|
}
|
||||||
|
styles.styles.transform += `${type}(${args+unit}) `
|
||||||
|
} else {
|
||||||
|
styles.styles[type] = `${args}`
|
||||||
|
}
|
||||||
|
this.currentStepAnimates[this.next] = styles
|
||||||
|
}
|
||||||
|
_animateRun(styles = {}, config = {}) {
|
||||||
|
let ref = this.$.$refs['ani'].ref
|
||||||
|
if (!ref) return
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
nvueAnimation.transition(ref, {
|
||||||
|
styles,
|
||||||
|
...config
|
||||||
|
}, res => {
|
||||||
|
resolve()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
_nvueNextAnimate(animates, step = 0, fn) {
|
||||||
|
let obj = animates[step]
|
||||||
|
if (obj) {
|
||||||
|
let {
|
||||||
|
styles,
|
||||||
|
config
|
||||||
|
} = obj
|
||||||
|
this._animateRun(styles, config).then(() => {
|
||||||
|
step += 1
|
||||||
|
this._nvueNextAnimate(animates, step, fn)
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
this.currentStepAnimates = {}
|
||||||
|
typeof fn === 'function' && fn()
|
||||||
|
this.isEnd = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
step(config = {}) {
|
||||||
|
// #ifndef APP-NVUE
|
||||||
|
this.animation.step(config)
|
||||||
|
// #endif
|
||||||
|
// #ifdef APP-NVUE
|
||||||
|
this.currentStepAnimates[this.next].config = Object.assign({}, this.options, config)
|
||||||
|
this.currentStepAnimates[this.next].styles.transformOrigin = this.currentStepAnimates[this.next].config.transformOrigin
|
||||||
|
this.next++
|
||||||
|
// #endif
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
run(fn) {
|
||||||
|
// #ifndef APP-NVUE
|
||||||
|
this.$.animationData = this.animation.export()
|
||||||
|
this.$.timer = setTimeout(() => {
|
||||||
|
typeof fn === 'function' && fn()
|
||||||
|
}, this.$.durationTime)
|
||||||
|
// #endif
|
||||||
|
// #ifdef APP-NVUE
|
||||||
|
this.isEnd = false
|
||||||
|
let ref = this.$.$refs['ani'] && this.$.$refs['ani'].ref
|
||||||
|
if(!ref) return
|
||||||
|
this._nvueNextAnimate(this.currentStepAnimates, 0, fn)
|
||||||
|
this.next = 0
|
||||||
|
// #endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const animateTypes1 = ['matrix', 'matrix3d', 'rotate', 'rotate3d', 'rotateX', 'rotateY', 'rotateZ', 'scale', 'scale3d',
|
||||||
|
'scaleX', 'scaleY', 'scaleZ', 'skew', 'skewX', 'skewY', 'translate', 'translate3d', 'translateX', 'translateY',
|
||||||
|
'translateZ'
|
||||||
|
]
|
||||||
|
const animateTypes2 = ['opacity', 'backgroundColor']
|
||||||
|
const animateTypes3 = ['width', 'height', 'left', 'right', 'top', 'bottom']
|
||||||
|
animateTypes1.concat(animateTypes2, animateTypes3).forEach(type => {
|
||||||
|
MPAnimation.prototype[type] = function(...args) {
|
||||||
|
// #ifndef APP-NVUE
|
||||||
|
this.animation[type](...args)
|
||||||
|
// #endif
|
||||||
|
// #ifdef APP-NVUE
|
||||||
|
this._nvuePushAnimates(type, args)
|
||||||
|
// #endif
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
export function createAnimation(option, _this) {
|
||||||
|
if(!_this) return
|
||||||
|
clearTimeout(_this.timer)
|
||||||
|
return new MPAnimation(option, _this)
|
||||||
|
}
|
@ -0,0 +1,286 @@
|
|||||||
|
<template>
|
||||||
|
<!-- #ifndef APP-NVUE -->
|
||||||
|
<view v-show="isShow" ref="ani" :animation="animationData" :class="customClass" :style="transformStyles" @click="onClick"><slot></slot></view>
|
||||||
|
<!-- #endif -->
|
||||||
|
<!-- #ifdef APP-NVUE -->
|
||||||
|
<view v-if="isShow" ref="ani" :animation="animationData" :class="customClass" :style="transformStyles" @click="onClick"><slot></slot></view>
|
||||||
|
<!-- #endif -->
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { createAnimation } from './createAnimation'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Transition 过渡动画
|
||||||
|
* @description 简单过渡动画组件
|
||||||
|
* @tutorial https://ext.dcloud.net.cn/plugin?id=985
|
||||||
|
* @property {Boolean} show = [false|true] 控制组件显示或隐藏
|
||||||
|
* @property {Array|String} modeClass = [fade|slide-top|slide-right|slide-bottom|slide-left|zoom-in|zoom-out] 过渡动画类型
|
||||||
|
* @value fade 渐隐渐出过渡
|
||||||
|
* @value slide-top 由上至下过渡
|
||||||
|
* @value slide-right 由右至左过渡
|
||||||
|
* @value slide-bottom 由下至上过渡
|
||||||
|
* @value slide-left 由左至右过渡
|
||||||
|
* @value zoom-in 由小到大过渡
|
||||||
|
* @value zoom-out 由大到小过渡
|
||||||
|
* @property {Number} duration 过渡动画持续时间
|
||||||
|
* @property {Object} styles 组件样式,同 css 样式,注意带’-‘连接符的属性需要使用小驼峰写法如:`backgroundColor:red`
|
||||||
|
*/
|
||||||
|
export default {
|
||||||
|
name: 'uniTransition',
|
||||||
|
emits:['click','change'],
|
||||||
|
props: {
|
||||||
|
show: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
modeClass: {
|
||||||
|
type: [Array, String],
|
||||||
|
default() {
|
||||||
|
return 'fade'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
duration: {
|
||||||
|
type: Number,
|
||||||
|
default: 300
|
||||||
|
},
|
||||||
|
styles: {
|
||||||
|
type: Object,
|
||||||
|
default() {
|
||||||
|
return {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
customClass:{
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
onceRender:{
|
||||||
|
type:Boolean,
|
||||||
|
default:false
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
isShow: false,
|
||||||
|
transform: '',
|
||||||
|
opacity: 1,
|
||||||
|
animationData: {},
|
||||||
|
durationTime: 300,
|
||||||
|
config: {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
show: {
|
||||||
|
handler(newVal) {
|
||||||
|
if (newVal) {
|
||||||
|
this.open()
|
||||||
|
} else {
|
||||||
|
// 避免上来就执行 close,导致动画错乱
|
||||||
|
if (this.isShow) {
|
||||||
|
this.close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
immediate: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
// 生成样式数据
|
||||||
|
stylesObject() {
|
||||||
|
let styles = {
|
||||||
|
...this.styles,
|
||||||
|
'transition-duration': this.duration / 1000 + 's'
|
||||||
|
}
|
||||||
|
let transform = ''
|
||||||
|
for (let i in styles) {
|
||||||
|
let line = this.toLine(i)
|
||||||
|
transform += line + ':' + styles[i] + ';'
|
||||||
|
}
|
||||||
|
return transform
|
||||||
|
},
|
||||||
|
// 初始化动画条件
|
||||||
|
transformStyles() {
|
||||||
|
return 'transform:' + this.transform + ';' + 'opacity:' + this.opacity + ';' + this.stylesObject
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
// 动画默认配置
|
||||||
|
this.config = {
|
||||||
|
duration: this.duration,
|
||||||
|
timingFunction: 'ease',
|
||||||
|
transformOrigin: '50% 50%',
|
||||||
|
delay: 0
|
||||||
|
}
|
||||||
|
this.durationTime = this.duration
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
/**
|
||||||
|
* ref 触发 初始化动画
|
||||||
|
*/
|
||||||
|
init(obj = {}) {
|
||||||
|
if (obj.duration) {
|
||||||
|
this.durationTime = obj.duration
|
||||||
|
}
|
||||||
|
this.animation = createAnimation(Object.assign(this.config, obj),this)
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 点击组件触发回调
|
||||||
|
*/
|
||||||
|
onClick() {
|
||||||
|
this.$emit('click', {
|
||||||
|
detail: this.isShow
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* ref 触发 动画分组
|
||||||
|
* @param {Object} obj
|
||||||
|
*/
|
||||||
|
step(obj, config = {}) {
|
||||||
|
if (!this.animation) return
|
||||||
|
for (let i in obj) {
|
||||||
|
try {
|
||||||
|
if(typeof obj[i] === 'object'){
|
||||||
|
this.animation[i](...obj[i])
|
||||||
|
}else{
|
||||||
|
this.animation[i](obj[i])
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error(`方法 ${i} 不存在`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.animation.step(config)
|
||||||
|
return this
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* ref 触发 执行动画
|
||||||
|
*/
|
||||||
|
run(fn) {
|
||||||
|
if (!this.animation) return
|
||||||
|
this.animation.run(fn)
|
||||||
|
},
|
||||||
|
// 开始过度动画
|
||||||
|
open() {
|
||||||
|
clearTimeout(this.timer)
|
||||||
|
this.transform = ''
|
||||||
|
this.isShow = true
|
||||||
|
let { opacity, transform } = this.styleInit(false)
|
||||||
|
if (typeof opacity !== 'undefined') {
|
||||||
|
this.opacity = opacity
|
||||||
|
}
|
||||||
|
this.transform = transform
|
||||||
|
// 确保动态样式已经生效后,执行动画,如果不加 nextTick ,会导致 wx 动画执行异常
|
||||||
|
this.$nextTick(() => {
|
||||||
|
// TODO 定时器保证动画完全执行,目前有些问题,后面会取消定时器
|
||||||
|
this.timer = setTimeout(() => {
|
||||||
|
this.animation = createAnimation(this.config, this)
|
||||||
|
this.tranfromInit(false).step()
|
||||||
|
this.animation.run()
|
||||||
|
this.$emit('change', {
|
||||||
|
detail: this.isShow
|
||||||
|
})
|
||||||
|
}, 20)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 关闭过度动画
|
||||||
|
close(type) {
|
||||||
|
if (!this.animation) return
|
||||||
|
this.tranfromInit(true)
|
||||||
|
.step()
|
||||||
|
.run(() => {
|
||||||
|
this.isShow = false
|
||||||
|
this.animationData = null
|
||||||
|
this.animation = null
|
||||||
|
let { opacity, transform } = this.styleInit(false)
|
||||||
|
this.opacity = opacity || 1
|
||||||
|
this.transform = transform
|
||||||
|
this.$emit('change', {
|
||||||
|
detail: this.isShow
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 处理动画开始前的默认样式
|
||||||
|
styleInit(type) {
|
||||||
|
let styles = {
|
||||||
|
transform: ''
|
||||||
|
}
|
||||||
|
let buildStyle = (type, mode) => {
|
||||||
|
if (mode === 'fade') {
|
||||||
|
styles.opacity = this.animationType(type)[mode]
|
||||||
|
} else {
|
||||||
|
styles.transform += this.animationType(type)[mode] + ' '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (typeof this.modeClass === 'string') {
|
||||||
|
buildStyle(type, this.modeClass)
|
||||||
|
} else {
|
||||||
|
this.modeClass.forEach(mode => {
|
||||||
|
buildStyle(type, mode)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return styles
|
||||||
|
},
|
||||||
|
// 处理内置组合动画
|
||||||
|
tranfromInit(type) {
|
||||||
|
let buildTranfrom = (type, mode) => {
|
||||||
|
let aniNum = null
|
||||||
|
if (mode === 'fade') {
|
||||||
|
aniNum = type ? 0 : 1
|
||||||
|
} else {
|
||||||
|
aniNum = type ? '-100%' : '0'
|
||||||
|
if (mode === 'zoom-in') {
|
||||||
|
aniNum = type ? 0.8 : 1
|
||||||
|
}
|
||||||
|
if (mode === 'zoom-out') {
|
||||||
|
aniNum = type ? 1.2 : 1
|
||||||
|
}
|
||||||
|
if (mode === 'slide-right') {
|
||||||
|
aniNum = type ? '100%' : '0'
|
||||||
|
}
|
||||||
|
if (mode === 'slide-bottom') {
|
||||||
|
aniNum = type ? '100%' : '0'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.animation[this.animationMode()[mode]](aniNum)
|
||||||
|
}
|
||||||
|
if (typeof this.modeClass === 'string') {
|
||||||
|
buildTranfrom(type, this.modeClass)
|
||||||
|
} else {
|
||||||
|
this.modeClass.forEach(mode => {
|
||||||
|
buildTranfrom(type, mode)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.animation
|
||||||
|
},
|
||||||
|
animationType(type) {
|
||||||
|
return {
|
||||||
|
fade: type ? 0 : 1,
|
||||||
|
'slide-top': `translateY(${type ? '0' : '-100%'})`,
|
||||||
|
'slide-right': `translateX(${type ? '0' : '100%'})`,
|
||||||
|
'slide-bottom': `translateY(${type ? '0' : '100%'})`,
|
||||||
|
'slide-left': `translateX(${type ? '0' : '-100%'})`,
|
||||||
|
'zoom-in': `scaleX(${type ? 1 : 0.8}) scaleY(${type ? 1 : 0.8})`,
|
||||||
|
'zoom-out': `scaleX(${type ? 1 : 1.2}) scaleY(${type ? 1 : 1.2})`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 内置动画类型与实际动画对应字典
|
||||||
|
animationMode() {
|
||||||
|
return {
|
||||||
|
fade: 'opacity',
|
||||||
|
'slide-top': 'translateY',
|
||||||
|
'slide-right': 'translateX',
|
||||||
|
'slide-bottom': 'translateY',
|
||||||
|
'slide-left': 'translateX',
|
||||||
|
'zoom-in': 'scale',
|
||||||
|
'zoom-out': 'scale'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 驼峰转中横线
|
||||||
|
toLine(name) {
|
||||||
|
return name.replace(/([A-Z])/g, '-$1').toLowerCase()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style></style>
|
85
uni_modules/uni-transition/package.json
Normal file
85
uni_modules/uni-transition/package.json
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
{
|
||||||
|
"id": "uni-transition",
|
||||||
|
"displayName": "uni-transition 过渡动画",
|
||||||
|
"version": "1.3.3",
|
||||||
|
"description": "元素的简单过渡动画",
|
||||||
|
"keywords": [
|
||||||
|
"uni-ui",
|
||||||
|
"uniui",
|
||||||
|
"动画",
|
||||||
|
"过渡",
|
||||||
|
"过渡动画"
|
||||||
|
],
|
||||||
|
"repository": "https://github.com/dcloudio/uni-ui",
|
||||||
|
"engines": {
|
||||||
|
"HBuilderX": ""
|
||||||
|
},
|
||||||
|
"directories": {
|
||||||
|
"example": "../../temps/example_temps"
|
||||||
|
},
|
||||||
|
"dcloudext": {
|
||||||
|
"sale": {
|
||||||
|
"regular": {
|
||||||
|
"price": "0.00"
|
||||||
|
},
|
||||||
|
"sourcecode": {
|
||||||
|
"price": "0.00"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"contact": {
|
||||||
|
"qq": ""
|
||||||
|
},
|
||||||
|
"declaration": {
|
||||||
|
"ads": "无",
|
||||||
|
"data": "无",
|
||||||
|
"permissions": "无"
|
||||||
|
},
|
||||||
|
"npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
|
||||||
|
"type": "component-vue"
|
||||||
|
},
|
||||||
|
"uni_modules": {
|
||||||
|
"dependencies": ["uni-scss"],
|
||||||
|
"encrypt": [],
|
||||||
|
"platforms": {
|
||||||
|
"cloud": {
|
||||||
|
"tcb": "y",
|
||||||
|
"aliyun": "y",
|
||||||
|
"alipay": "n"
|
||||||
|
},
|
||||||
|
"client": {
|
||||||
|
"App": {
|
||||||
|
"app-vue": "y",
|
||||||
|
"app-nvue": "y"
|
||||||
|
},
|
||||||
|
"H5-mobile": {
|
||||||
|
"Safari": "y",
|
||||||
|
"Android Browser": "y",
|
||||||
|
"微信浏览器(Android)": "y",
|
||||||
|
"QQ浏览器(Android)": "y"
|
||||||
|
},
|
||||||
|
"H5-pc": {
|
||||||
|
"Chrome": "y",
|
||||||
|
"IE": "y",
|
||||||
|
"Edge": "y",
|
||||||
|
"Firefox": "y",
|
||||||
|
"Safari": "y"
|
||||||
|
},
|
||||||
|
"小程序": {
|
||||||
|
"微信": "y",
|
||||||
|
"阿里": "y",
|
||||||
|
"百度": "y",
|
||||||
|
"字节跳动": "y",
|
||||||
|
"QQ": "y"
|
||||||
|
},
|
||||||
|
"快应用": {
|
||||||
|
"华为": "u",
|
||||||
|
"联盟": "u"
|
||||||
|
},
|
||||||
|
"Vue": {
|
||||||
|
"vue2": "y",
|
||||||
|
"vue3": "y"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
uni_modules/uni-transition/readme.md
Normal file
11
uni_modules/uni-transition/readme.md
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
|
||||||
|
|
||||||
|
## Transition 过渡动画
|
||||||
|
> **组件名:uni-transition**
|
||||||
|
> 代码块: `uTransition`
|
||||||
|
|
||||||
|
|
||||||
|
元素过渡动画
|
||||||
|
|
||||||
|
### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-transition)
|
||||||
|
#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
|
@ -13,6 +13,8 @@ const request = config => {
|
|||||||
config.header = config.header || {}
|
config.header = config.header || {}
|
||||||
if (getToken() && !isToken) {
|
if (getToken() && !isToken) {
|
||||||
config.header['Authorization'] = 'Bearer ' + getToken()
|
config.header['Authorization'] = 'Bearer ' + getToken()
|
||||||
|
}else{
|
||||||
|
config.header['Authorization'] = 'Bearer ' +'1c734ee940d94a9fbbedf7422c866bb8'
|
||||||
}
|
}
|
||||||
// get请求映射params参数
|
// get请求映射params参数
|
||||||
if (config.params) {
|
if (config.params) {
|
||||||
|
Loading…
Reference in New Issue
Block a user