CRM微信小程序

This commit is contained in:
yyy 2024-11-20 17:48:53 +08:00
parent 8b678de6b5
commit 37a9b927dd
6 changed files with 1546 additions and 966 deletions

View File

@ -1,4 +1,4 @@
export const VUE_APP_API_URL = 'http://localhost:48081/admin-api'
export const VUE_APP_API_URL = 'http://192.168.0.179:48080/admin-api'
//export const VUE_APP_API_URL = 'https://apicrm.yixiang.co/admin-api'
export const VUE_APP_RESOURCES_URL = 'https://h5.yixiang.co/static'
export const VUE_APP_UPLOAD_URL = VUE_APP_API_URL + '/infra/file/upload'
@ -18,25 +18,25 @@ const orderListStatus = {}
// -1:已退款
export const orderStatus = {
0: '未支付',
1: '待发货',
2: '待收货',
3: '待评价',
4: '已完成',
5: '退款中',
6: '已退款',
7: '退款',
0: '未支付',
1: '待发货',
2: '待收货',
3: '待评价',
4: '已完成',
5: '退款中',
6: '已退款',
7: '退款',
}
export const orderReStatus = {
0: '等待买家付款',
// 1: '等待卖家发货',
1: '卖家已发货',
2: '等待买家待评价',
3: '订单已完成',
4: '订单退款中',
5: '订单已退款',
6: '退款已完成',
0: '等待买家付款',
// 1: '等待卖家发货',
1: '卖家已发货',
2: '等待买家待评价',
3: '订单已完成',
4: '订单退款中',
5: '订单已退款',
6: '退款已完成',
}
// export const orderReStatus = {
@ -48,4 +48,4 @@ export const orderReStatus = {
// 5: '订单退款中',
// 6: '订单已退款',
// 7: '退款已完成',
// }
// }

View File

@ -1,6 +1,6 @@
{
"name" : "yshop-miniapp",
"appid" : "__UNI__ADC0FB0",
"name" : "中鼐智能CRM",
"appid" : "__UNI__D50CF97",
"description" : "",
"versionName" : "1.0.0",
"versionCode" : 1,
@ -401,7 +401,7 @@
"quickapp" : {},
/* */
"mp-weixin" : {
"appid" : "wx604d2ea4702620d2",
"appid" : "wx91fcb30adb2df321",
"setting" : {
"urlCheck" : false
},

591
package-lock.json generated
View File

@ -1,8 +1,587 @@
{
"name": "yshop-miniapp",
"version": "1.2.0",
"lockfileVersion": 1,
"name": "yshop-crm-miniapp",
"version": "1.0.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "yshop-crm-miniapp",
"version": "1.0.0",
"license": "ISC",
"dependencies": {
"@vant/area-data": "^1.5.0",
"add": "^2.0.6",
"flyio": "^0.6.14",
"jweixin-module": "^1.6.0",
"pinia": "^2.1.6",
"vant": "^4.6.2",
"weixin-js-sdk": "^1.6.3",
"yarn": "^1.22.19"
}
},
"node_modules/@vant/area-data": {
"version": "1.5.0",
"resolved": "https://registry.npmmirror.com/@vant/area-data/-/area-data-1.5.0.tgz",
"integrity": "sha512-SWmDhYmWiOgtAgtJqcW7N4XyGgrg/7l6t1+XSgt8BkPp2oOKO1ZUn8+46brLpT/gzRe/v8BtyTLmdBwMamrmQw=="
},
"node_modules/@vant/popperjs": {
"version": "1.3.0",
"resolved": "https://registry.npmmirror.com/@vant/popperjs/-/popperjs-1.3.0.tgz",
"integrity": "sha512-hB+czUG+aHtjhaEmCJDuXOep0YTZjdlRR+4MSmIFnkCQIxJaXLQdSsR90XWvAI2yvKUI7TCGqR8pQg2RtvkMHw=="
},
"node_modules/@vant/use": {
"version": "1.5.2",
"resolved": "https://registry.npmmirror.com/@vant/use/-/use-1.5.2.tgz",
"integrity": "sha512-CBK61iT568dCHUwFFsErGbW6/5tmrPnZJKGtcSy7Tjcrmws8Ku+YZo7IUFD9Xkj9MfSJ4pfhQ7pU2KouP5Cojg==",
"peerDependencies": {
"vue": "^3.0.0"
}
},
"node_modules/@vue/devtools-api": {
"version": "6.5.0",
"resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.5.0.tgz",
"integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q=="
},
"node_modules/@vue/shared": {
"version": "3.3.4",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.4.tgz",
"integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ=="
},
"node_modules/add": {
"version": "2.0.6",
"resolved": "https://registry.npmmirror.com/add/-/add-2.0.6.tgz",
"integrity": "sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q=="
},
"node_modules/ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/asn1": {
"version": "0.2.6",
"resolved": "https://registry.npmmirror.com/asn1/-/asn1-0.2.6.tgz",
"integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
"dependencies": {
"safer-buffer": "~2.1.0"
}
},
"node_modules/assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
"engines": {
"node": ">=0.8"
}
},
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"node_modules/aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmmirror.com/aws-sign2/-/aws-sign2-0.7.0.tgz",
"integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
"engines": {
"node": "*"
}
},
"node_modules/aws4": {
"version": "1.12.0",
"resolved": "https://registry.npmmirror.com/aws4/-/aws4-1.12.0.tgz",
"integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg=="
},
"node_modules/bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
"integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
"dependencies": {
"tweetnacl": "^0.14.3"
}
},
"node_modules/caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmmirror.com/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
},
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"dependencies": {
"delayed-stream": "~1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
},
"node_modules/dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npmmirror.com/dashdash/-/dashdash-1.14.1.tgz",
"integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
"dependencies": {
"assert-plus": "^1.0.0"
},
"engines": {
"node": ">=0.10"
}
},
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/ecc-jsbn": {
"version": "0.1.2",
"resolved": "https://registry.npmmirror.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
"integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
"dependencies": {
"jsbn": "~0.1.0",
"safer-buffer": "^2.1.0"
}
},
"node_modules/extend": {
"version": "3.0.2",
"resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
"node_modules/extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npmmirror.com/extsprintf/-/extsprintf-1.3.0.tgz",
"integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
"engines": [
"node >=0.6.0"
]
},
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
},
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
},
"node_modules/flyio": {
"version": "0.6.14",
"resolved": "https://registry.npmmirror.com/flyio/-/flyio-0.6.14.tgz",
"integrity": "sha512-RE2OXE1ZZmcXOKb0jCtGyquHDxpAqHg17CZ8lmQKRfl3x1kP+NBpaQDx4WgN7DNpLJjFnspTzTEQpwRGg6/xaA==",
"dependencies": {
"request": "^2.85.0"
}
},
"node_modules/forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmmirror.com/forever-agent/-/forever-agent-0.6.1.tgz",
"integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
"engines": {
"node": "*"
}
},
"node_modules/form-data": {
"version": "2.3.3",
"resolved": "https://registry.npmmirror.com/form-data/-/form-data-2.3.3.tgz",
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
},
"engines": {
"node": ">= 0.12"
}
},
"node_modules/getpass": {
"version": "0.1.7",
"resolved": "https://registry.npmmirror.com/getpass/-/getpass-0.1.7.tgz",
"integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
"dependencies": {
"assert-plus": "^1.0.0"
}
},
"node_modules/har-schema": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/har-schema/-/har-schema-2.0.0.tgz",
"integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==",
"engines": {
"node": ">=4"
}
},
"node_modules/har-validator": {
"version": "5.1.5",
"resolved": "https://registry.npmmirror.com/har-validator/-/har-validator-5.1.5.tgz",
"integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
"deprecated": "this library is no longer supported",
"dependencies": {
"ajv": "^6.12.3",
"har-schema": "^2.0.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/http-signature/-/http-signature-1.2.0.tgz",
"integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
"dependencies": {
"assert-plus": "^1.0.0",
"jsprim": "^1.2.2",
"sshpk": "^1.7.0"
},
"engines": {
"node": ">=0.8",
"npm": ">=1.3.7"
}
},
"node_modules/is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
},
"node_modules/isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmmirror.com/isstream/-/isstream-0.1.2.tgz",
"integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
},
"node_modules/jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmmirror.com/jsbn/-/jsbn-0.1.1.tgz",
"integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
},
"node_modules/json-schema": {
"version": "0.4.0",
"resolved": "https://registry.npmmirror.com/json-schema/-/json-schema-0.4.0.tgz",
"integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
},
"node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
},
"node_modules/json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
},
"node_modules/jsprim": {
"version": "1.4.2",
"resolved": "https://registry.npmmirror.com/jsprim/-/jsprim-1.4.2.tgz",
"integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
"dependencies": {
"assert-plus": "1.0.0",
"extsprintf": "1.3.0",
"json-schema": "0.4.0",
"verror": "1.10.0"
},
"engines": {
"node": ">=0.6.0"
}
},
"node_modules/jweixin-module": {
"version": "1.6.0",
"resolved": "https://registry.npmmirror.com/jweixin-module/-/jweixin-module-1.6.0.tgz",
"integrity": "sha512-dGk9cf+ipipHmtzYmKZs5B2toX+p4hLyllGLF6xuC8t+B05oYxd8fYoaRz0T30U2n3RUv8a4iwvjhA+OcYz52w=="
},
"node_modules/mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"dependencies": {
"mime-db": "1.52.0"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/oauth-sign": {
"version": "0.9.0",
"resolved": "https://registry.npmmirror.com/oauth-sign/-/oauth-sign-0.9.0.tgz",
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
"engines": {
"node": "*"
}
},
"node_modules/performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
},
"node_modules/pinia": {
"version": "2.1.6",
"resolved": "https://registry.npmmirror.com/pinia/-/pinia-2.1.6.tgz",
"integrity": "sha512-bIU6QuE5qZviMmct5XwCesXelb5VavdOWKWaB17ggk++NUwQWWbP5YnsONTk3b752QkW9sACiR81rorpeOMSvQ==",
"dependencies": {
"@vue/devtools-api": "^6.5.0",
"vue-demi": ">=0.14.5"
},
"funding": {
"url": "https://github.com/sponsors/posva"
},
"peerDependencies": {
"@vue/composition-api": "^1.4.0",
"typescript": ">=4.4.4",
"vue": "^2.6.14 || ^3.3.0"
},
"peerDependenciesMeta": {
"@vue/composition-api": {
"optional": true
},
"typescript": {
"optional": true
}
}
},
"node_modules/psl": {
"version": "1.9.0",
"resolved": "https://registry.npmmirror.com/psl/-/psl-1.9.0.tgz",
"integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
},
"node_modules/punycode": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.0.tgz",
"integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
"engines": {
"node": ">=6"
}
},
"node_modules/qs": {
"version": "6.5.3",
"resolved": "https://registry.npmmirror.com/qs/-/qs-6.5.3.tgz",
"integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
"engines": {
"node": ">=0.6"
}
},
"node_modules/request": {
"version": "2.88.2",
"resolved": "https://registry.npmmirror.com/request/-/request-2.88.2.tgz",
"integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
"deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
"dependencies": {
"aws-sign2": "~0.7.0",
"aws4": "^1.8.0",
"caseless": "~0.12.0",
"combined-stream": "~1.0.6",
"extend": "~3.0.2",
"forever-agent": "~0.6.1",
"form-data": "~2.3.2",
"har-validator": "~5.1.3",
"http-signature": "~1.2.0",
"is-typedarray": "~1.0.0",
"isstream": "~0.1.2",
"json-stringify-safe": "~5.0.1",
"mime-types": "~2.1.19",
"oauth-sign": "~0.9.0",
"performance-now": "^2.1.0",
"qs": "~6.5.2",
"safe-buffer": "^5.1.2",
"tough-cookie": "~2.5.0",
"tunnel-agent": "^0.6.0",
"uuid": "^3.3.2"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/feross"
},
{
"type": "patreon",
"url": "https://www.patreon.com/feross"
},
{
"type": "consulting",
"url": "https://feross.org/support"
}
]
},
"node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"node_modules/sshpk": {
"version": "1.17.0",
"resolved": "https://registry.npmmirror.com/sshpk/-/sshpk-1.17.0.tgz",
"integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
"dependencies": {
"asn1": "~0.2.3",
"assert-plus": "^1.0.0",
"bcrypt-pbkdf": "^1.0.0",
"dashdash": "^1.12.0",
"ecc-jsbn": "~0.1.1",
"getpass": "^0.1.1",
"jsbn": "~0.1.0",
"safer-buffer": "^2.0.2",
"tweetnacl": "~0.14.0"
},
"bin": {
"sshpk-conv": "bin/sshpk-conv",
"sshpk-sign": "bin/sshpk-sign",
"sshpk-verify": "bin/sshpk-verify"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/tough-cookie": {
"version": "2.5.0",
"resolved": "https://registry.npmmirror.com/tough-cookie/-/tough-cookie-2.5.0.tgz",
"integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
"dependencies": {
"psl": "^1.1.28",
"punycode": "^2.1.1"
},
"engines": {
"node": ">=0.8"
}
},
"node_modules/tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmmirror.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
"integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
"dependencies": {
"safe-buffer": "^5.0.1"
},
"engines": {
"node": "*"
}
},
"node_modules/tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmmirror.com/tweetnacl/-/tweetnacl-0.14.5.tgz",
"integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="
},
"node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"dependencies": {
"punycode": "^2.1.0"
}
},
"node_modules/uuid": {
"version": "3.4.0",
"resolved": "https://registry.npmmirror.com/uuid/-/uuid-3.4.0.tgz",
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
"deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
"bin": {
"uuid": "bin/uuid"
}
},
"node_modules/vant": {
"version": "4.6.2",
"resolved": "https://registry.npmmirror.com/vant/-/vant-4.6.2.tgz",
"integrity": "sha512-6EHCCAGM5a9VVzpBg/wZNPDFmJ8T1a4k29DPNcEMW3X670awW3rnD7+/x3dw+bE17JhhSg49V/+fQwBP2iQkAg==",
"dependencies": {
"@vant/popperjs": "^1.3.0",
"@vant/use": "^1.5.1",
"@vue/shared": "^3.0.0"
},
"peerDependencies": {
"vue": "^3.0.0"
}
},
"node_modules/verror": {
"version": "1.10.0",
"resolved": "https://registry.npmmirror.com/verror/-/verror-1.10.0.tgz",
"integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
"engines": [
"node >=0.6.0"
],
"dependencies": {
"assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
"extsprintf": "^1.2.0"
}
},
"node_modules/verror/node_modules/extsprintf": {
"version": "1.4.1",
"resolved": "https://registry.npmmirror.com/extsprintf/-/extsprintf-1.4.1.tgz",
"integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==",
"engines": [
"node >=0.6.0"
]
},
"node_modules/vue-demi": {
"version": "0.14.5",
"resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.5.tgz",
"integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==",
"hasInstallScript": true,
"bin": {
"vue-demi-fix": "bin/vue-demi-fix.js",
"vue-demi-switch": "bin/vue-demi-switch.js"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/antfu"
},
"peerDependencies": {
"@vue/composition-api": "^1.0.0-rc.1",
"vue": "^3.0.0-0 || ^2.6.0"
},
"peerDependenciesMeta": {
"@vue/composition-api": {
"optional": true
}
}
},
"node_modules/weixin-js-sdk": {
"version": "1.6.3",
"resolved": "https://registry.npmmirror.com/weixin-js-sdk/-/weixin-js-sdk-1.6.3.tgz",
"integrity": "sha512-5jYNtVcxWmgHNqCLSPoX6vXab9G4RPDZx0klX8IsVwGjDTwx/UDmgfF7fkRMGguRpuFv0O7tk1jb+Oay2QiV1w=="
},
"node_modules/yarn": {
"version": "1.22.19",
"resolved": "https://registry.npmmirror.com/yarn/-/yarn-1.22.19.tgz",
"integrity": "sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ==",
"hasInstallScript": true,
"bin": {
"yarn": "bin/yarn.js",
"yarnpkg": "bin/yarn.js"
},
"engines": {
"node": ">=4.0.0"
}
}
},
"dependencies": {
"@vant/area-data": {
"version": "1.5.0",
@ -17,7 +596,8 @@
"@vant/use": {
"version": "1.5.2",
"resolved": "https://registry.npmmirror.com/@vant/use/-/use-1.5.2.tgz",
"integrity": "sha512-CBK61iT568dCHUwFFsErGbW6/5tmrPnZJKGtcSy7Tjcrmws8Ku+YZo7IUFD9Xkj9MfSJ4pfhQ7pU2KouP5Cojg=="
"integrity": "sha512-CBK61iT568dCHUwFFsErGbW6/5tmrPnZJKGtcSy7Tjcrmws8Ku+YZo7IUFD9Xkj9MfSJ4pfhQ7pU2KouP5Cojg==",
"requires": {}
},
"@vue/devtools-api": {
"version": "6.5.0",
@ -407,7 +987,8 @@
"vue-demi": {
"version": "0.14.5",
"resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.5.tgz",
"integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA=="
"integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==",
"requires": {}
},
"weixin-js-sdk": {
"version": "1.6.3",

View File

@ -1,59 +1,53 @@
{
"pages": [
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": ""
}
},
{
"path" : "pages/customer/index",
"style" :
{
"navigationBarTitleText": "客户",
"enablePullDownRefresh": true
}
}
,{
"path" : "pages/mine/mine",
"style" :
{
"navigationBarTitleText": "我的",
"enablePullDownRefresh": true
}
}
,{
"path" : "pages/msg/index",
"style" :
{
"navigationBarTitleText": "消息",
"enablePullDownRefresh": false
}
}
],
"pages": [{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": ""
}
},
{
"path": "pages/customer/index",
"style": {
"navigationBarTitleText": "客户",
"enablePullDownRefresh": true
}
}, {
"path": "pages/mine/mine",
"style": {
"navigationBarTitleText": "我的",
"enablePullDownRefresh": true
}
}, {
"path": "pages/msg/index",
"style": {
"navigationBarTitleText": "消息",
"enablePullDownRefresh": false
}
}
],
"subPackages": [{
"root": "pages/components",
"pages": [ {
"pages": [{
"path": "pages/business/businessDetails",
"style": {
"navigationBarTitleText": "商机详情",
"navigationBarTextStyle": "black",
"navigationBarBackgroundColor": "#ffffff"
}
},
{
"path": "pages/business/selectProduct",
"style": {
"navigationBarTitleText": "选择商品",
"navigationBarTextStyle": "black",
"navigationBarBackgroundColor": "#ffffff"
}
},
},
{
"path": "pages/business/selectProduct",
"style": {
"navigationBarTitleText": "选择商品",
"navigationBarTextStyle": "black",
"navigationBarBackgroundColor": "#ffffff"
}
},
{
"path": "pages/business/followUp",
"style": {
@ -76,8 +70,8 @@
"navigationBarBackgroundColor": "#ffffff",
"enablePullDownRefresh": true
}
},
{
},
{
"path": "pages/login/login",
"style": {
"navigationBarTitleText": "登录",
@ -99,15 +93,15 @@
"navigationBarTextStyle": "black",
"navigationBarBackgroundColor": "#ffffff"
}
},
{
"path": "pages/customer/repeat",
"style": {
"navigationBarTitleText": "客户查重",
"navigationBarTextStyle": "black",
"navigationBarBackgroundColor": "#ffffff"
}
},
},
{
"path": "pages/customer/repeat",
"style": {
"navigationBarTitleText": "客户查重",
"navigationBarTextStyle": "black",
"navigationBarBackgroundColor": "#ffffff"
}
},
{
"path": "pages/customer/detail",
"style": {
@ -132,8 +126,8 @@
"navigationBarTextStyle": "black",
"navigationBarBackgroundColor": "#ffffff"
}
},
{
},
{
"path": "pages/clues/index",
"style": {
"navigationBarTitleText": "线索",
@ -147,231 +141,210 @@
"navigationBarTextStyle": "black",
"navigationBarBackgroundColor": "#ffffff"
}
},{
"path": "pages/clues/add",
"style": {
"navigationBarTitleText": "添加线索",
"navigationBarTextStyle": "black",
"navigationBarBackgroundColor": "#ffffff"
}
}
,{
"path" : "pages/clues/cluesDetails",
"style" :
{
"navigationBarTitleText": "线索详情",
"enablePullDownRefresh": false
}
},
{
"path": "pages/clues/detail",
"style": {
"navigationBarTitleText": "线索详情",
"enablePullDownRefresh": true
}
}, {
"path": "pages/clues/open",
"style": {
"navigationBarTitleText": "线索池",
"enablePullDownRefresh": true
}
}, {
"path": "pages/contract/index",
"style": {
"navigationBarTitleText": "合同",
"enablePullDownRefresh": true
}
}, {
"path": "pages/contract/add",
"style": {
"navigationBarTitleText": "添加合同",
"enablePullDownRefresh": true
}
}
,{
"path" : "pages/receivables/index",
"style" :
{
"navigationBarTitleText": "回款",
"enablePullDownRefresh": false
}
}
,{
"path" : "pages/receivables/add",
"style" :
{
"navigationBarTitleText": "回款添加",
"enablePullDownRefresh": false
}
}
,{
"path" : "pages/invoice/index",
"style" :
{
"navigationBarTitleText": "发票",
"enablePullDownRefresh": false
}
},
{
"path" : "pages/invoice/add",
"style" :
{
"navigationBarTitleText": "申请发票",
"enablePullDownRefresh": false
}
},
{
"path" : "pages/customer/open",
"style" :
{
"navigationBarTitleText": "公海客户",
"enablePullDownRefresh": false
}
},
{
"path" : "pages/contacts/index",
"style" :
{
"navigationBarTitleText": "联系人",
"enablePullDownRefresh": false
}
},
{
"path" : "pages/contacts/detail",
"style" :
{
"navigationBarTitleText": "联系人详情",
"enablePullDownRefresh": false
}
},
{
"path" : "pages/contacts/addPerson",
"style" :
{
"navigationBarTitleText": "添加联系人",
"enablePullDownRefresh": false
}
},
{
"path" : "pages/product/index",
"style" :
{
"navigationBarTitleText": "商品",
"enablePullDownRefresh": false
}
},
{
"path" : "pages/mine/index",
"style" :
{
"navigationBarTitleText": "设置",
"enablePullDownRefresh": false
}
},
{
"path" : "pages/mine/list",
"style" :
{
"navigationBarTitleText": "通知",
"enablePullDownRefresh": false
}
},
{
"path" : "pages/mine/news",
"style" :
{
"navigationBarTitleText": "通知详情",
"enablePullDownRefresh": false
}
},
{
"path" : "pages/mine/edit",
"style" :
{
"navigationBarTitleText": "修改个人信息",
"enablePullDownRefresh": false
}
},
{
"path" : "pages/mine/pass",
"style" :
{
"navigationBarTitleText": "修改密码",
"enablePullDownRefresh": false
}
},
{
"path" : "pages/msg/wait",
"style" :
{
"navigationBarTitleText": "待办事项",
"enablePullDownRefresh": false
}
},
{
"path" : "pages/msg/exam",
"style" :
{
"navigationBarTitleText": "审批管理",
"enablePullDownRefresh": false
}
}, {
"path": "pages/clues/add",
"style": {
"navigationBarTitleText": "添加线索",
"navigationBarTextStyle": "black",
"navigationBarBackgroundColor": "#ffffff"
}
]
}, {
"path": "pages/clues/cluesDetails",
"style": {
"navigationBarTitleText": "线索详情",
"enablePullDownRefresh": false
}
},
{
"path": "pages/clues/detail",
"style": {
"navigationBarTitleText": "线索详情",
"enablePullDownRefresh": true
}
}, {
"path": "pages/clues/open",
"style": {
"navigationBarTitleText": "线索池",
"enablePullDownRefresh": true
}
}, {
"path": "pages/contract/index",
"style": {
"navigationBarTitleText": "合同",
"enablePullDownRefresh": true
}
}, {
"path": "pages/contract/add",
"style": {
"navigationBarTitleText": "添加合同",
"enablePullDownRefresh": true
}
}, {
"path": "pages/receivables/index",
"style": {
"navigationBarTitleText": "回款",
"enablePullDownRefresh": false
}
}, {
"path": "pages/receivables/add",
"style": {
"navigationBarTitleText": "回款添加",
"enablePullDownRefresh": false
}
}, {
"path": "pages/invoice/index",
"style": {
"navigationBarTitleText": "发票",
"enablePullDownRefresh": false
}
},
{
"path": "pages/invoice/add",
"style": {
"navigationBarTitleText": "申请发票",
"enablePullDownRefresh": false
}
},
{
"path": "pages/customer/open",
"style": {
"navigationBarTitleText": "公海客户",
"enablePullDownRefresh": false
}
},
{
"path": "pages/contacts/index",
"style": {
"navigationBarTitleText": "联系人",
"enablePullDownRefresh": false
}
},
{
"path": "pages/contacts/detail",
"style": {
"navigationBarTitleText": "联系人详情",
"enablePullDownRefresh": false
}
},
{
"path": "pages/contacts/addPerson",
"style": {
"navigationBarTitleText": "添加联系人",
"enablePullDownRefresh": false
}
},
{
"path": "pages/product/index",
"style": {
"navigationBarTitleText": "商品",
"enablePullDownRefresh": false
}
},
{
"path": "pages/mine/index",
"style": {
"navigationBarTitleText": "设置",
"enablePullDownRefresh": false
}
},
{
"path": "pages/mine/list",
"style": {
"navigationBarTitleText": "通知",
"enablePullDownRefresh": false
}
},
{
"path": "pages/mine/news",
"style": {
"navigationBarTitleText": "通知详情",
"enablePullDownRefresh": false
}
},
{
"path": "pages/mine/edit",
"style": {
"navigationBarTitleText": "修改个人信息",
"enablePullDownRefresh": false
}
},
{
"path": "pages/mine/pass",
"style": {
"navigationBarTitleText": "修改密码",
"enablePullDownRefresh": false
}
},
{
"path": "pages/msg/wait",
"style": {
"navigationBarTitleText": "待办事项",
"enablePullDownRefresh": false
}
},
{
"path": "pages/msg/exam",
"style": {
"navigationBarTitleText": "审批管理",
"enablePullDownRefresh": false
}
}
]
}],
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": " ",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8",
"navigationStyle": "custom"
},
"tabBar": {
"color": "#919293",
"selectedColor": "#09b4f1",
"backgroundColor": "#fff",
"borderStyle": "black",
"list": [{
"pagePath": "pages/index/index",
"text": "首页",
"iconPath": "static/images/tabBar/index.png",
"selectedIconPath": "static/images/tabBar/index_selected.png"
},
{
"pagePath": "pages/customer/index",
"text": "客户",
"iconPath": "static/images/tabBar/customer.png",
"selectedIconPath": "static/images/tabBar/customer-selected.png"
}, {
"pagePath": "pages/msg/index",
"text": "消息",
"iconPath": "static/images/tabBar/msg.png",
"selectedIconPath": "static/images/tabBar/msg-select.png"
}, {
"pagePath": "pages/mine/mine",
"text": "我的",
"iconPath": "static/images/tabBar/mine.png",
"selectedIconPath": "static/images/tabBar/mine_selected.png"
}
]
},
"uniIdRouter": {}
}
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": " ",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8",
"navigationStyle": "custom"
},
"tabBar": {
"color": "#919293",
"selectedColor": "#09b4f1",
"backgroundColor": "#fff",
"borderStyle": "black",
"list": [{
"pagePath": "pages/index/index",
"text": "首页",
"iconPath": "static/images/tabBar/index.png",
"selectedIconPath": "static/images/tabBar/index_selected.png"
},
{
"pagePath": "pages/customer/index",
"text": "客户",
"iconPath": "static/images/tabBar/customer.png",
"selectedIconPath": "static/images/tabBar/customer-selected.png"
}, {
"pagePath": "pages/msg/index",
"text": "消息",
"iconPath": "static/images/tabBar/msg.png",
"selectedIconPath": "static/images/tabBar/msg-select.png"
}, {
"pagePath": "pages/mine/mine",
"text": "我的",
"iconPath": "static/images/tabBar/mine.png",
"selectedIconPath": "static/images/tabBar/mine_selected.png"
}
]
},
"uniIdRouter": {}
}

View File

@ -1,222 +1,229 @@
<template>
<layout>
<!-- #ifdef MP-WEIXIN -->
<uv-navbar
:fixed="false"
:title="title"
left-arrow
@leftClick="$onClickLeft"
/>
<!-- #endif -->
<view class="wrap">
<view class="top"></view>
<view class="content">
<view class="title">意象CRM</view>
<view class="font-size-base text-center text-color-assist mt-1 mb-5 ">实现线索到回款全流程管理</view>
<view class="text-color-assist mb-2">账户</view>
<uv-input placeholder="请输入账户" prefixIcon="account" border="bottom" v-model="username"></uv-input>
<view class="text-color-assist mt-5 mb-2">密码</view>
<uv-input placeholder="请输入密码" type="password" prefixIcon="lock" border="bottom" v-model="password"></uv-input>
<button @tap="submit" style="" type="primary" class="login">立即登录</button>
</view>
<!-- <view class="buttom">
<view class="hint">
<radio value="isChecked" @tap.stop="onChange" />
我已经阅读并遵守
<text class="link" @tap="serv(29,'用户协议')">用户协议</text>
<text class="link" @tap="serv(30,'隐私政策')">隐私政策</text>
</view>
</view> -->
<uv-toast ref="uToast"></uv-toast>
</view>
</layout>
</template>
<script setup>
import {
ref,
computed
} from 'vue'
import { onLoad,onShow} from '@dcloudio/uni-app'
import { useMainStore } from '@/store/store'
import {
userLogin
} from '@/api/auth'
import * as util from '@/utils/util'
import { mobile as testMobible } from '@/uni_modules/uv-ui-tools/libs/function/test'
import cookie from '@/utils/cookie'
import router from '@/utils/router'
const main = useMainStore()
const title = ref('登录')
const username = ref('admin')
const password = ref('admin123')
const isChecked = ref(false)
const openid = ref(main.openid)
const uToast = ref()
onShow(() => {
// #ifdef MP-WEIXIN
if(!openid.value){
//wechatMiniLogin();
}
// #endif
})
const check = () => {
if(!isChecked.value){
uToast.value.show({
message: '请勾选下面协议',
type: 'error'
});
return
}
}
//
const submit = () => {
if (username.value == '') {
uToast.value.show({
message: '请填写账户',
type: 'error'
});
return
}
if (password.value == '') {
uToast.value.show({
message: '请填写密码',
type: 'error'
});
return
}
login()
}
//
const login = async () => {
let data = await userLogin({
username: username.value,
password: password.value,
socialType: 34
})
if (data) {
// uni.setStorage({
// key: 'userinfo',
// data: data.userInfo
// });
uni.setStorage({
key: 'accessToken',
data: data.accessToken
});
// main.SET_MEMBER(data.userInfo);
main.SET_TOKEN(data.accessToken);
uToast.value.show({
message: '登录成功',
type: 'success'
});
setTimeout(function() {
uni.switchTab({
url: '/pages/index/index'
})
}, 2000);
}
}
const onChange = () => {
isChecked.value = !isChecked.value
}
</script>
<style lang="scss" scoped>
.wrap {
background-color: #ffffff;
font-size: 28rpx;
position: relative;
height: 100%;
padding-bottom: 100rpx;
.content {
width: 600rpx;
margin: 0 auto;
.title {
text-align: center;
font-size: 50rpx;
font-weight: 500;
padding-top: 100rpx;
color: #09b4f1;
font-weight: bolder;
}
.login {
background-color: #09b4f1;
color: #ffffff;
border-radius: 50rem !important;
font-size: 26rpx;
padding: 8rpx 0;
margin-top: 40rpx;
&::after {
border: none;
}
}
.alternative {
color: $uv-tips-color;
display: flex;
justify-content: space-between;
margin-top: 30rpx;
}
}
.buttom {
bottom: 0;
.loginType {
padding: 30rpx 80rpx;
//justify-content:space-between;
.login-btn {
background-color: #1aad19!important;
width: 100%;
font-size: 26rpx;
border-radius: 50rem !important;
display: flex;
align-items: center;
justify-content: center;
padding: 8rpx 0;
text-align: center;
image {
width: 36rpx;
height: 30rpx;
margin-right: 10rpx;
vertical-align: middle;
}
}
}
.hint {
display: flex;
align-items: center;
justify-content: center;
padding: 20rpx 40rpx;
font-size: 20rpx;
color: $uv-tips-color;
.link {
color: $uv-warning;
}
}
}
}
</style>
<template>
<layout>
<!-- #ifdef MP-WEIXIN -->
<uv-navbar :fixed="false" :title="title" left-arrow @leftClick="$onClickLeft" />
<!-- #endif -->
<view class="wrap">
<view class="top"></view>
<view class="content">
<view class="title">意象CRM</view>
<view class="font-size-base text-center text-color-assist mt-1 mb-5 ">实现线索到回款全流程管理</view>
<view class="text-color-assist mb-2">账户</view>
<uv-input placeholder="请输入账户" prefixIcon="account" border="bottom" v-model="username"></uv-input>
<view class="text-color-assist mt-5 mb-2">密码</view>
<uv-input placeholder="请输入密码" type="password" prefixIcon="lock" border="bottom" v-model="password"></uv-input>
<button @tap="submit" style="" type="primary" class="login">立即登录</button>
</view>
<!-- <view class="buttom">
<view class="hint">
<radio value="isChecked" @tap.stop="onChange" />
我已经阅读并遵守
<text class="link" @tap="serv(29,'用户协议')">用户协议</text>
<text class="link" @tap="serv(30,'隐私政策')">隐私政策</text>
</view>
</view> -->
<uv-toast ref="uToast"></uv-toast>
</view>
</layout>
</template>
<script setup>
import {
ref,
computed
} from 'vue'
import {
onLoad,
onShow
} from '@dcloudio/uni-app'
import {
useMainStore
} from '@/store/store'
import {
userLogin
} from '@/api/auth'
import * as util from '@/utils/util'
import {
mobile as testMobible
} from '@/uni_modules/uv-ui-tools/libs/function/test'
import cookie from '@/utils/cookie'
import router from '@/utils/router'
const main = useMainStore()
const title = ref('登录')
const username = ref('admin')
const password = ref('admin123')
const isChecked = ref(false)
const openid = ref(main.openid)
const uToast = ref()
onShow(() => {
// #ifdef MP-WEIXIN
if (!openid.value) {
//wechatMiniLogin();
}
// #endif
})
const check = () => {
if (!isChecked.value) {
uToast.value.show({
message: '请勾选下面协议',
type: 'error'
});
return
}
}
//
const submit = () => {
if (username.value == '') {
uToast.value.show({
message: '请填写账户',
type: 'error'
});
return
}
if (password.value == '') {
uToast.value.show({
message: '请填写密码',
type: 'error'
});
return
}
login()
}
//
const login = async () => {
let data = await userLogin({
username: username.value,
password: password.value,
socialType: 34
})
if (data) {
// uni.setStorage({
// key: 'userinfo',
// data: data.userInfo
// });
uni.setStorage({
key: 'accessToken',
data: data.accessToken
});
// main.SET_MEMBER(data.userInfo);
main.SET_TOKEN(data.accessToken);
uToast.value.show({
message: '登录成功',
type: 'success'
});
setTimeout(function() {
uni.switchTab({
url: '/pages/index/index'
})
}, 2000);
}
}
const onChange = () => {
isChecked.value = !isChecked.value
}
</script>
<style lang="scss" scoped>
.wrap {
background-color: #ffffff;
font-size: 28rpx;
position: relative;
height: 100%;
padding-bottom: 100rpx;
.content {
width: 600rpx;
margin: 0 auto;
.title {
text-align: center;
font-size: 50rpx;
font-weight: 500;
padding-top: 100rpx;
color: #09b4f1;
font-weight: bolder;
}
.login {
background-color: #09b4f1;
color: #ffffff;
border-radius: 50rem !important;
font-size: 26rpx;
padding: 8rpx 0;
margin-top: 40rpx;
&::after {
border: none;
}
}
.alternative {
color: $uv-tips-color;
display: flex;
justify-content: space-between;
margin-top: 30rpx;
}
}
.buttom {
bottom: 0;
.loginType {
padding: 30rpx 80rpx;
//justify-content:space-between;
.login-btn {
background-color: #1aad19 !important;
width: 100%;
font-size: 26rpx;
border-radius: 50rem !important;
display: flex;
align-items: center;
justify-content: center;
padding: 8rpx 0;
text-align: center;
image {
width: 36rpx;
height: 30rpx;
margin-right: 10rpx;
vertical-align: middle;
}
}
}
.hint {
display: flex;
align-items: center;
justify-content: center;
padding: 20rpx 40rpx;
font-size: 20rpx;
color: $uv-tips-color;
.link {
color: $uv-warning;
}
}
}
}
</style>

View File

@ -1,17 +1,16 @@
<template>
<uv-navbar leftIcon="" :safeAreaInsetTop="true" :fixed="false" bgColor="#09b4f1">
<template v-slot:center>
<view class="slot-wrap">
<uv-search placeholder="请输入搜索客户名称" v-model="keyword" bgColor="#ffffff" :showAction="false"
:customStyle="customStyle" @focus="onSearch"></uv-search>
</view>
</template>
</uv-navbar>
<template>
<uv-navbar leftIcon="" :safeAreaInsetTop="true" :fixed="false" bgColor="#09b4f1">
<template v-slot:center>
<view class="slot-wrap">
<uv-search placeholder="请输入搜索客户名称" v-model="keyword" bgColor="#ffffff" :showAction="false"
:customStyle="customStyle" @focus="onSearch"></uv-search>
</view>
</template>
</uv-navbar>
<view class="container">
<view class="top" style="background-color: #09b4f1;">
<view class="statusBar" :is-back="false" style="height: 30rpx;" ></view>
<view class="statusBar" :is-back="false" style="height: 30rpx;"></view>
</view>
<!-- 待办 -->
<view class="notice">
@ -27,449 +26,469 @@
<view class="title flex">
<text>常用功能</text>
</view>
<uv-grid :col="4" :border="false" @click="onGrid" >
<uv-grid-item v-for="(item, index) in toolIcons2" :key="index" :customStyle="customStyle2" @click="item.name == '客户' ? gopage2(item.url) : gopage(item.url)">
<uv-icon :name="item.icon" :size="30" ></uv-icon>
<uv-grid :col="4" :border="false" @click="onGrid">
<uv-grid-item v-for="(item, index) in toolIcons2" :key="index" :customStyle="customStyle2"
@click="item.name == '客户' ? gopage2(item.url) : gopage(item.url)">
<uv-icon :name="item.icon" :size="30"></uv-icon>
<text class="p-1 font-size-sm">{{ item.name }}</text>
</uv-grid-item>
</uv-grid>
</view>
<view class="region mt-3" style="margin-top: 20rpx;">
<view class="title flex">
<text>数据简报</text>
</view>
<uv-grid :col="3" :border="false" @click="onGrid" >
<uv-grid-item v-for="(item, index) in toolIcons3" :key="index" :customStyle="customStyle2">
<text class="p-1 font-size-sm">{{ item.name }}</text>
<text class="p-1 font-size-sm">{{ item.count }}</text>
</uv-grid-item>
</uv-grid>
</view>
<view class="region mt-3" style="margin-top: 20rpx;">
<view class="title flex">
<text>业绩目标</text>
<view class="flex align-center">
<uv-switch v-model="isContract" size="18" inactiveColor="#5ac725" @change="changeChart"></uv-switch>
<view class="ml-1">
<uv-text size="14" text="合同" color="#3c9cff" v-if="isContract"></uv-text>
<uv-text size="14" text="回款" type="success" v-else></uv-text>
</view>
</view>
</view>
<uv-row>
<uv-col span="8">
<qiun-data-charts
type="gauge"
:opts="opts"
:chartData="chartData"
/>
</uv-col>
<uv-col span="4">
<view class="mb-4">
<view class="text-color-assist font-size-medium mb-2">目标金额</view>
<view>¥{{isContract ? chartCountData.contractMoney : chartCountData.receivablesMoney}}</view>
</view>
<view>
<view class="text-color-assist font-size-medium mb-2">完成金额</view>
<view>¥{{isContract ? chartCountData.contractSuccessMoney : chartCountData.receivablesSuccessMoney}}</view>
</view>
</uv-col>
</uv-row>
</view>
<view class="region mt-3" style="margin-top: 20rpx;">
<view class="title flex">
<text>数据简报</text>
</view>
<uv-grid :col="3" :border="false" @click="onGrid">
<uv-grid-item v-for="(item, index) in toolIcons3" :key="index" :customStyle="customStyle2">
<text class="p-1 font-size-sm">{{ item.name }}</text>
<text class="p-1 font-size-sm">{{ item.count }}</text>
</uv-grid-item>
</uv-grid>
</view>
<view class="region mt-3" style="margin-top: 20rpx;">
<view class="title flex">
<text>业绩目标</text>
<view class="flex align-center">
<uv-switch v-model="isContract" size="18" inactiveColor="#5ac725" @change="changeChart"></uv-switch>
<view class="ml-1">
<uv-text size="14" text="合同" color="#3c9cff" v-if="isContract"></uv-text>
<uv-text size="14" text="回款" type="success" v-else></uv-text>
</view>
</view>
</view>
<uv-row>
<uv-col span="8">
<qiun-data-charts type="gauge" :opts="opts" :chartData="chartData" />
</uv-col>
<uv-col span="4">
<view class="mb-4">
<view class="text-color-assist font-size-medium mb-2">目标金额</view>
<view>¥{{isContract ? chartCountData.contractMoney : chartCountData.receivablesMoney}}</view>
</view>
<view>
<view class="text-color-assist font-size-medium mb-2">完成金额</view>
<view>¥{{isContract ? chartCountData.contractSuccessMoney : chartCountData.receivablesSuccessMoney}}</view>
</view>
</uv-col>
</uv-row>
</view>
</view>
</template>
<script setup>
import {ref,computed} from 'vue'
import { onLoad,onShow} from '@dcloudio/uni-app'
import { useMainStore } from '@/store/store'
import { storeToRefs } from 'pinia'
import {
indexCount,
indexChartCount
} from '@/api/index'
const main = useMainStore()
const statusBarHeight = ref(0)
const rightSafeArea = ref(0)
statusBarHeight.value = uni.getSystemInfoSync().statusBarHeight
const windowInfo = uni.getWindowInfo()
const { left } = uni.getMenuButtonBoundingClientRect()
rightSafeArea.value = windowInfo.windowWidth - left + 'px'
const customStyle = computed(() =>{
return {
//width:'100%'
// paddingLeft:'20rpx',
paddingRight: rightSafeArea.value
}
})
const customStyle2 = computed(() =>{
return {
paddingBottom:'40rpx',
// paddingRight:'180rpx'
}
})
const toolIcons = ref([
{
name: '公海客户',
icon: '/static/images/index002.png',
url: '/pages/components/pages/customer/open',
},
{
name: '线索',
icon: '/static/images/index003.png',
url: '/pages/components/pages/clues/index',
},
{
name: '跟进记录',
icon: '/static/images/index004.png',
url: '/pages/components/pages/record/index',
},
{
name: '合同',
icon: '/static/images/index006.png',
url: '/pages/components/pages/contract/index',
}
])
const toolIcons2 = ref([
{
name: '客户',
icon: '/static/images/1.png',
url: '/pages/customer/index',
},
{
name: '商机',
icon: '/static/images/2.png',
url: '/pages/components/pages/business/index',
},
{
name: '线索池',
icon: '/static/images/3.png',
url: '/pages/components/pages/clues/open',
},
{
name: '联系人',
icon: '/static/images/4.png',
url: '/pages/components/pages/contacts/index',
},
{
name: '回款',
icon: '/static/images/5.png',
url: '/pages/components/pages/receivables/index',
},
{
name: '查重',
icon: '/static/images/6.png',
url: '/pages/components/pages/customer/repeat',
},
{
name: '发票',
icon: '/static/images/7.png',
url: '/pages/components/pages/invoice/index',
},
{
name: '产品',
icon: '/static/images/8.png',
url: '/pages/components/pages/product/index',
},
])
const countData = ref({})
const toolIcons3 = ref([
{
name: '新增商机',
count: 0,
},
{
name: '新增线索',
count: 0,
},
{
name: '新增客户',
count: 0,
},
{
name: '新增跟进',
count: 0,
},
{
name: '新增合同',
count: 0,
},
{
name: '合同金额',
count: 0,
},
{
name: '回款金额',
count: 0,
},
{
name: '新增联系人',
count: 0,
},
{
name: '客户成交量',
count: 0,
},
{
name: '客户未成交量',
count: 0,
},
{
name: '商机成交量',
count: 0,
},
{
name: '商机未成交量',
count: 0,
}
])
const chartData = ref(
{
categories: [{"value":0.2,"color":"#1890ff"},{"value":0.8,"color":"#2fc25b"},{"value":1,"color":"#f04864"}],
series: [
{
name: "完成率",
data: 0.2
}
]
}
)
const opts = ref(
{
color: ["#1890FF","#91CB74","#FAC858","#EE6666","#73C0DE","#3CA272","#FC8452","#9A60B4","#ea7ccc"],
padding: undefined,
title: {
name: "完成率",
fontSize: 25,
color: "#2fc25b",
offsetY: 0
},
subtitle: {
name: "200%",
fontSize: 15,
color: "#1890ff",
offsetY: 0
},
extra: {
gauge: {
type: "progress",
width: 15,
labelColor: "#666666",
startAngle: 0.75,
endAngle: 0.25,
startNumber: 0,
endNumber: 100,
labelFormat: "",
splitLine: {
fixRadius: -10,
splitNumber: 10,
width: 15,
color: "#FFFFFF",
childNumber: 5,
childWidth: 12
},
pointer: {
width: 24,
color: "auto"
}
}
}
}
)
const isContract = ref(true)
const chartCountData = ref({})
onShow(()=>{
getData()
getChart()
})
const getChart = async() => {
let data = await indexChartCount({type:2,year:2024,month:0})
chartCountData.value = data
let resData = data.contractPer
chartData.value.series[0].data = resData > 100 ? 1 : resData/100
opts.value.subtitle.name = resData+"%"
}
const changeChart = () => {
let resData = isContract.value ? chartCountData.value.contractPer : chartCountData.value.receivablesPer
chartData.value.series[0].data = resData > 100 ? 1 : resData/100
opts.value.subtitle.name = resData+"%"
}
const getData = async() => {
let data = await indexCount()
let brieCount= data.brieCountVO
toolIcons3.value[0].count = brieCount.count01
toolIcons3.value[1].count = brieCount.count02
toolIcons3.value[2].count = brieCount.count03
toolIcons3.value[3].count = brieCount.count04
toolIcons3.value[4].count = brieCount.count05
toolIcons3.value[5].count = brieCount.count06
toolIcons3.value[6].count = brieCount.count07
toolIcons3.value[7].count = brieCount.count08
toolIcons3.value[8].count = brieCount.count09
toolIcons3.value[9].count = brieCount.count10
toolIcons3.value[10].count = brieCount.count11
toolIcons3.value[11].count = brieCount.count12
main.SET_INDEX_COUNT(data)
let count = brieCount.count13+data.contractCheckCount + data.invoiceCheckCount + data.receivablesCheckCount + data.followBusinessCount + data.followCluesCount + data.followCustomerCount
//let str = count > 0 ? count + '' : ''
if(count > 0){
uni.setTabBarBadge({
index: 2,
text: count + ''
})
}
}
const onSearch = () => {
gopage2('/pages/customer/index')
}
const gopage = (url) => {
uni.navigateTo({
url
})
}
const gopage2 = (url) =>{
uni.switchTab({
url
})
}
<script setup>
import {
ref,
computed
} from 'vue'
import {
onLoad,
onShow
} from '@dcloudio/uni-app'
import {
useMainStore
} from '@/store/store'
import {
storeToRefs
} from 'pinia'
import {
indexCount,
indexChartCount
} from '@/api/index'
const main = useMainStore()
const statusBarHeight = ref(0)
const rightSafeArea = ref(0)
statusBarHeight.value = uni.getSystemInfoSync().statusBarHeight
const windowInfo = uni.getWindowInfo()
const {
left
} = uni.getMenuButtonBoundingClientRect()
rightSafeArea.value = windowInfo.windowWidth - left + 'px'
const customStyle = computed(() => {
return {
//width:'100%'
// paddingLeft:'20rpx',
paddingRight: rightSafeArea.value
}
})
const customStyle2 = computed(() => {
return {
paddingBottom: '40rpx',
// paddingRight:'180rpx'
}
})
const toolIcons = ref([{
name: '公海客户',
icon: '/static/images/index002.png',
url: '/pages/components/pages/customer/open',
},
{
name: '线索',
icon: '/static/images/index003.png',
url: '/pages/components/pages/clues/index',
},
{
name: '跟进记录',
icon: '/static/images/index004.png',
url: '/pages/components/pages/record/index',
},
{
name: '合同',
icon: '/static/images/index006.png',
url: '/pages/components/pages/contract/index',
}
])
const toolIcons2 = ref([{
name: '客户',
icon: '/static/images/1.png',
url: '/pages/customer/index',
},
{
name: '商机',
icon: '/static/images/2.png',
url: '/pages/components/pages/business/index',
},
{
name: '线索池',
icon: '/static/images/3.png',
url: '/pages/components/pages/clues/open',
},
{
name: '联系人',
icon: '/static/images/4.png',
url: '/pages/components/pages/contacts/index',
},
{
name: '回款',
icon: '/static/images/5.png',
url: '/pages/components/pages/receivables/index',
},
{
name: '查重',
icon: '/static/images/6.png',
url: '/pages/components/pages/customer/repeat',
},
{
name: '发票',
icon: '/static/images/7.png',
url: '/pages/components/pages/invoice/index',
},
{
name: '产品',
icon: '/static/images/8.png',
url: '/pages/components/pages/product/index',
},
])
const countData = ref({})
const toolIcons3 = ref([{
name: '新增商机',
count: 0,
},
{
name: '新增线索',
count: 0,
},
{
name: '新增客户',
count: 0,
},
{
name: '新增跟进',
count: 0,
},
{
name: '新增合同',
count: 0,
},
{
name: '合同金额',
count: 0,
},
{
name: '回款金额',
count: 0,
},
{
name: '新增联系人',
count: 0,
},
{
name: '客户成交量',
count: 0,
},
{
name: '客户未成交量',
count: 0,
},
{
name: '商机成交量',
count: 0,
},
{
name: '商机未成交量',
count: 0,
}
])
const chartData = ref({
categories: [{
"value": 0.2,
"color": "#1890ff"
}, {
"value": 0.8,
"color": "#2fc25b"
}, {
"value": 1,
"color": "#f04864"
}],
series: [{
name: "完成率",
data: 0.2
}]
})
const opts = ref({
color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4", "#ea7ccc"],
padding: undefined,
title: {
name: "完成率",
fontSize: 25,
color: "#2fc25b",
offsetY: 0
},
subtitle: {
name: "200%",
fontSize: 15,
color: "#1890ff",
offsetY: 0
},
extra: {
gauge: {
type: "progress",
width: 15,
labelColor: "#666666",
startAngle: 0.75,
endAngle: 0.25,
startNumber: 0,
endNumber: 100,
labelFormat: "",
splitLine: {
fixRadius: -10,
splitNumber: 10,
width: 15,
color: "#FFFFFF",
childNumber: 5,
childWidth: 12
},
pointer: {
width: 24,
color: "auto"
}
}
}
})
const isContract = ref(true)
const chartCountData = ref({})
onShow(() => {
getData()
getChart()
})
const getChart = async () => {
let data = await indexChartCount({
type: 2,
year: 2024,
month: 0
})
chartCountData.value = data
let resData = data.contractPer
chartData.value.series[0].data = resData > 100 ? 1 : resData / 100
opts.value.subtitle.name = resData + "%"
}
const changeChart = () => {
let resData = isContract.value ? chartCountData.value.contractPer : chartCountData.value.receivablesPer
chartData.value.series[0].data = resData > 100 ? 1 : resData / 100
opts.value.subtitle.name = resData + "%"
}
const getData = async () => {
let data = await indexCount()
let brieCount = data.brieCountVO
toolIcons3.value[0].count = brieCount.count01
toolIcons3.value[1].count = brieCount.count02
toolIcons3.value[2].count = brieCount.count03
toolIcons3.value[3].count = brieCount.count04
toolIcons3.value[4].count = brieCount.count05
toolIcons3.value[5].count = brieCount.count06
toolIcons3.value[6].count = brieCount.count07
toolIcons3.value[7].count = brieCount.count08
toolIcons3.value[8].count = brieCount.count09
toolIcons3.value[9].count = brieCount.count10
toolIcons3.value[10].count = brieCount.count11
toolIcons3.value[11].count = brieCount.count12
main.SET_INDEX_COUNT(data)
let count = brieCount.count13 + data.contractCheckCount + data.invoiceCheckCount + data.receivablesCheckCount +
data.followBusinessCount + data.followCluesCount + data.followCustomerCount
//let str = count > 0 ? count + '' : ''
if (count > 0) {
uni.setTabBarBadge({
index: 2,
text: count + ''
})
}
}
const onSearch = () => {
gopage2('/pages/customer/index')
}
const gopage = (url) => {
uni.navigateTo({
url
})
}
const gopage2 = (url) => {
uni.switchTab({
url
})
}
</script>
<style lang="scss" scoped>
.container {
background-color: #F7F7F7 !important;
padding-bottom: 50px;
min-height: 100vh;
}
.container {
background-color: #F7F7F7 !important;
padding-bottom: 50px;
min-height: 100vh;
}
.top {
height: 110rpx;
/* #ifdef H5 */
height: 360rpx;
/* #endif */
color: #fff;
}
.top {
height: 110rpx;
/* #ifdef H5 */
height: 360rpx;
/* #endif */
color: #fff;
}
.notice {
margin: -56px 8px 10px 8px;
left: 0;
right: 0;
background-color: #fff;
border-radius: 10px;
padding: 15px 0px;
.title {
padding: 20rpx;
font-size: 30rpx;
font-weight: 500;
justify-content: space-between;
}
}
.region {
background-color: #fff;
border-radius: 12px;
margin: 0 10px;
padding: 8px 5px;
.title {
padding: 28rpx 20rpx;
font-size: 30rpx;
font-weight: 500;
justify-content: space-between;
}
.plus {
background-color: #FFF0ED;
border-radius: 10rpx;
padding: 15rpx;
}
.nape {
width: 48%;
border-radius: 8px;
background-color: #FBFBFB;
padding: 30rpx 20rpx 30rpx 35rpx;
margin-bottom: 15rpx;
&:nth-child(2n+1){
margin-right: 4%;
}
}
}
.item-padding {
padding: 45rpx 0;
}
.gray {
color: #BFBFBF;
}
.slot-wrap {
display: flex;
align-items: center;
padding: 0 30rpx;
flex:1
}
.statusBar {
position: relative;
}
.arrow-icon {
position: absolute;
bottom: 16px;
left: 10px;
}
.notice {
margin: -50px 8px 10px 8px;
left: 0;
right: 0;
background-color: #fff;
border-radius: 10px;
padding: 15px 0px;
.charts-box{
.charts {
width: 100%;
height:300px;
}
.introduce {
justify-content: space-between;
padding: 45rpx 12px;
.text {
.title {
padding: 20rpx;
font-size: 30rpx;
font-weight: 500;
justify-content: space-between;
}
.screen {
}
.region {
background-color: #fff;
border-radius: 12px;
margin: 0 10px;
padding: 8px 5px;
.title {
padding: 28rpx 20rpx;
font-size: 30rpx;
font-weight: 500;
background-color: #fff;
padding: 10rpx 32rpx;
border-radius: 60rpx;
justify-content: space-between;
}
.plus {
background-color: #FFF0ED;
border-radius: 10rpx;
padding: 15rpx;
}
.nape {
width: 48%;
border-radius: 8px;
background-color: #FBFBFB;
padding: 30rpx 20rpx 30rpx 35rpx;
margin-bottom: 15rpx;
&:nth-child(2n+1) {
margin-right: 4%;
}
}
}
.target {
margin-top: -60rpx;
justify-content: space-around;
.text {
background-color: #D7D7D7;
font-size: 25rpx;
padding: 10rpx 20rpx;
border-radius: 20rpx;
.item-padding {
padding: 45rpx 0;
}
.gray {
color: #BFBFBF;
}
.slot-wrap {
display: flex;
align-items: center;
padding: 0 30rpx;
flex: 1
}
.statusBar {
position: relative;
}
.arrow-icon {
position: absolute;
bottom: 16px;
left: 10px;
}
.charts-box {
.charts {
width: 100%;
height: 300px;
}
.introduce {
justify-content: space-between;
padding: 45rpx 12px;
.text {
font-size: 30rpx;
font-weight: 500;
}
.screen {
font-size: 30rpx;
font-weight: 500;
background-color: #fff;
padding: 10rpx 32rpx;
border-radius: 60rpx;
}
}
.target {
margin-top: -60rpx;
justify-content: space-around;
.text {
background-color: #D7D7D7;
font-size: 25rpx;
padding: 10rpx 20rpx;
border-radius: 20rpx;
}
}
}
}
</style>