Browse Source

feature:新增AI绘画相关内容

feature-1.0
Penny 3 years ago
parent
commit
c52893603c
  1. 24
      api/atlas.js
  2. 41
      api/paint.js
  3. 405
      package-lock.json
  4. 39
      pages.json
  5. 22
      pages/ai/gpt/chatgpt.vue
  6. 607
      pages/ai/paint/paint.vue
  7. 574
      pages/ai/paint/paintDetail.vue
  8. 44
      pages/atlas/atlas.vue
  9. 228
      pages/atlas/hotSearch.vue
  10. 172
      pages/userInfo/aiPaint/aiPaint.vue
  11. 10
      pages/userInfo/userInfo.vue
  12. 2
      uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json
  13. 31
      utils/base64Utils.js
  14. 27
      utils/request.js
  15. 157
      yarn.lock

24
api/atlas.js

@ -39,3 +39,27 @@ export function querySignImgBySignName(data) {
data
})
}
// 获取近一个月热度最高的前10条热搜词
export function getHotKeywordList() {
return request({
url: `${serviceTitle}${prefix}/getHotKeywordList`,
method: 'get'
})
}
// 添加热搜词热度次数
export function insertHotKeyword(keyword) {
return request({
url: `${serviceTitle}${prefix}/insertHotKeyword/${keyword}`,
method: 'get'
})
}
// 点击增长热搜词热度次数
export function incrementHotKeywordScore(keyword) {
return request({
url: `${serviceTitle}${prefix}/incrementHotKeywordScore/${keyword}`,
method: 'get'
})
}

41
api/paint.js

@ -0,0 +1,41 @@
import request from '@/utils/request'
const serviceTitle = '/img'
const prefix = '/img/mini/tiktok'
//GET 传参需要用 params
//POST 传参需要用 data
// 获取绘画风格
export function getPaintStyle() {
return request({
url: `${serviceTitle}${prefix}/getPaintStyle`,
method: 'get'
})
}
// 获取提示词列表
export function getPrompt() {
return request({
url: `${serviceTitle}${prefix}/getPrompt`,
method: 'get'
})
}
// 文生图
export function textToImg(data) {
return request({
url: `${serviceTitle}${prefix}/textToImg`,
method: 'post',
data
})
}
// 获取绘画者ai绘画分页
export function getAiPaintPage(data) {
return request({
url: `${serviceTitle}${prefix}/getAiPaintPage`,
method: 'post',
data
})
}

405
package-lock.json

@ -11,11 +11,135 @@
"vuex": "^4.0.2"
}
},
"node_modules/@babel/parser": {
"version": "7.21.3",
"resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.21.3.tgz",
"integrity": "sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==",
"peer": true,
"bin": {
"parser": "bin/babel-parser.js"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@vue/compiler-core": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.47.tgz",
"integrity": "sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==",
"peer": true,
"dependencies": {
"@babel/parser": "^7.16.4",
"@vue/shared": "3.2.47",
"estree-walker": "^2.0.2",
"source-map": "^0.6.1"
}
},
"node_modules/@vue/compiler-dom": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz",
"integrity": "sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==",
"peer": true,
"dependencies": {
"@vue/compiler-core": "3.2.47",
"@vue/shared": "3.2.47"
}
},
"node_modules/@vue/compiler-sfc": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz",
"integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==",
"peer": true,
"dependencies": {
"@babel/parser": "^7.16.4",
"@vue/compiler-core": "3.2.47",
"@vue/compiler-dom": "3.2.47",
"@vue/compiler-ssr": "3.2.47",
"@vue/reactivity-transform": "3.2.47",
"@vue/shared": "3.2.47",
"estree-walker": "^2.0.2",
"magic-string": "^0.25.7",
"postcss": "^8.1.10",
"source-map": "^0.6.1"
}
},
"node_modules/@vue/compiler-ssr": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz",
"integrity": "sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==",
"peer": true,
"dependencies": {
"@vue/compiler-dom": "3.2.47",
"@vue/shared": "3.2.47"
}
},
"node_modules/@vue/devtools-api": {
"version": "6.1.4",
"resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.1.4.tgz",
"integrity": "sha512-IiA0SvDrJEgXvVxjNkHPFfDx6SXw0b/TUkqMcDZWNg9fnCAHbTpoo59YfJ9QLFkwa3raau5vSlRVzMSLDnfdtQ=="
},
"node_modules/@vue/reactivity": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.47.tgz",
"integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==",
"peer": true,
"dependencies": {
"@vue/shared": "3.2.47"
}
},
"node_modules/@vue/reactivity-transform": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz",
"integrity": "sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==",
"peer": true,
"dependencies": {
"@babel/parser": "^7.16.4",
"@vue/compiler-core": "3.2.47",
"@vue/shared": "3.2.47",
"estree-walker": "^2.0.2",
"magic-string": "^0.25.7"
}
},
"node_modules/@vue/runtime-core": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.47.tgz",
"integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==",
"peer": true,
"dependencies": {
"@vue/reactivity": "3.2.47",
"@vue/shared": "3.2.47"
}
},
"node_modules/@vue/runtime-dom": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz",
"integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==",
"peer": true,
"dependencies": {
"@vue/runtime-core": "3.2.47",
"@vue/shared": "3.2.47",
"csstype": "^2.6.8"
}
},
"node_modules/@vue/server-renderer": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.47.tgz",
"integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==",
"peer": true,
"dependencies": {
"@vue/compiler-ssr": "3.2.47",
"@vue/shared": "3.2.47"
},
"peerDependencies": {
"vue": "3.2.47"
}
},
"node_modules/@vue/shared": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.47.tgz",
"integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==",
"peer": true
},
"node_modules/axios": {
"version": "0.26.1",
"resolved": "https://registry.npmmirror.com/axios/-/axios-0.26.1.tgz",
@ -33,6 +157,18 @@
"get-intrinsic": "^1.0.2"
}
},
"node_modules/csstype": {
"version": "2.6.21",
"resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz",
"integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==",
"peer": true
},
"node_modules/estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
"peer": true
},
"node_modules/follow-redirects": {
"version": "1.15.0",
"resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.0.tgz",
@ -80,11 +216,52 @@
"node": ">= 0.4"
}
},
"node_modules/magic-string": {
"version": "0.25.9",
"resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz",
"integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
"peer": true,
"dependencies": {
"sourcemap-codec": "^1.4.8"
}
},
"node_modules/nanoid": {
"version": "3.3.6",
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz",
"integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
"peer": true,
"bin": {
"nanoid": "bin/nanoid.cjs"
},
"engines": {
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
"node_modules/object-inspect": {
"version": "1.12.0",
"resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.0.tgz",
"integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g=="
},
"node_modules/picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz",
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
"peer": true
},
"node_modules/postcss": {
"version": "8.4.21",
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.21.tgz",
"integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
"peer": true,
"dependencies": {
"nanoid": "^3.3.4",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
},
"engines": {
"node": "^10 || ^12 || >=14"
}
},
"node_modules/qs": {
"version": "6.10.3",
"resolved": "https://registry.npmmirror.com/qs/-/qs-6.10.3.tgz",
@ -106,6 +283,44 @@
"object-inspect": "^1.9.0"
}
},
"node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/source-map-js": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz",
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
"peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/sourcemap-codec": {
"version": "1.4.8",
"resolved": "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
"integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
"deprecated": "Please use @jridgewell/sourcemap-codec instead",
"peer": true
},
"node_modules/vue": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.47.tgz",
"integrity": "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==",
"peer": true,
"dependencies": {
"@vue/compiler-dom": "3.2.47",
"@vue/compiler-sfc": "3.2.47",
"@vue/runtime-dom": "3.2.47",
"@vue/server-renderer": "3.2.47",
"@vue/shared": "3.2.47"
}
},
"node_modules/vue-router": {
"version": "4.0.15",
"resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.0.15.tgz",
@ -130,11 +345,126 @@
}
},
"dependencies": {
"@babel/parser": {
"version": "7.21.3",
"resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.21.3.tgz",
"integrity": "sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==",
"peer": true
},
"@vue/compiler-core": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.47.tgz",
"integrity": "sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==",
"peer": true,
"requires": {
"@babel/parser": "^7.16.4",
"@vue/shared": "3.2.47",
"estree-walker": "^2.0.2",
"source-map": "^0.6.1"
}
},
"@vue/compiler-dom": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz",
"integrity": "sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==",
"peer": true,
"requires": {
"@vue/compiler-core": "3.2.47",
"@vue/shared": "3.2.47"
}
},
"@vue/compiler-sfc": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz",
"integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==",
"peer": true,
"requires": {
"@babel/parser": "^7.16.4",
"@vue/compiler-core": "3.2.47",
"@vue/compiler-dom": "3.2.47",
"@vue/compiler-ssr": "3.2.47",
"@vue/reactivity-transform": "3.2.47",
"@vue/shared": "3.2.47",
"estree-walker": "^2.0.2",
"magic-string": "^0.25.7",
"postcss": "^8.1.10",
"source-map": "^0.6.1"
}
},
"@vue/compiler-ssr": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz",
"integrity": "sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==",
"peer": true,
"requires": {
"@vue/compiler-dom": "3.2.47",
"@vue/shared": "3.2.47"
}
},
"@vue/devtools-api": {
"version": "6.1.4",
"resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.1.4.tgz",
"integrity": "sha512-IiA0SvDrJEgXvVxjNkHPFfDx6SXw0b/TUkqMcDZWNg9fnCAHbTpoo59YfJ9QLFkwa3raau5vSlRVzMSLDnfdtQ=="
},
"@vue/reactivity": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.47.tgz",
"integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==",
"peer": true,
"requires": {
"@vue/shared": "3.2.47"
}
},
"@vue/reactivity-transform": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz",
"integrity": "sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==",
"peer": true,
"requires": {
"@babel/parser": "^7.16.4",
"@vue/compiler-core": "3.2.47",
"@vue/shared": "3.2.47",
"estree-walker": "^2.0.2",
"magic-string": "^0.25.7"
}
},
"@vue/runtime-core": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.47.tgz",
"integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==",
"peer": true,
"requires": {
"@vue/reactivity": "3.2.47",
"@vue/shared": "3.2.47"
}
},
"@vue/runtime-dom": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz",
"integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==",
"peer": true,
"requires": {
"@vue/runtime-core": "3.2.47",
"@vue/shared": "3.2.47",
"csstype": "^2.6.8"
}
},
"@vue/server-renderer": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.47.tgz",
"integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==",
"peer": true,
"requires": {
"@vue/compiler-ssr": "3.2.47",
"@vue/shared": "3.2.47"
}
},
"@vue/shared": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.47.tgz",
"integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==",
"peer": true
},
"axios": {
"version": "0.26.1",
"resolved": "https://registry.npmmirror.com/axios/-/axios-0.26.1.tgz",
@ -152,6 +482,18 @@
"get-intrinsic": "^1.0.2"
}
},
"csstype": {
"version": "2.6.21",
"resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz",
"integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==",
"peer": true
},
"estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
"peer": true
},
"follow-redirects": {
"version": "1.15.0",
"resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.0.tgz",
@ -185,11 +527,43 @@
"resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
},
"magic-string": {
"version": "0.25.9",
"resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz",
"integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
"peer": true,
"requires": {
"sourcemap-codec": "^1.4.8"
}
},
"nanoid": {
"version": "3.3.6",
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz",
"integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
"peer": true
},
"object-inspect": {
"version": "1.12.0",
"resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.0.tgz",
"integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g=="
},
"picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz",
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
"peer": true
},
"postcss": {
"version": "8.4.21",
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.21.tgz",
"integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
"peer": true,
"requires": {
"nanoid": "^3.3.4",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
}
},
"qs": {
"version": "6.10.3",
"resolved": "https://registry.npmmirror.com/qs/-/qs-6.10.3.tgz",
@ -208,6 +582,37 @@
"object-inspect": "^1.9.0"
}
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"peer": true
},
"source-map-js": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz",
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
"peer": true
},
"sourcemap-codec": {
"version": "1.4.8",
"resolved": "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
"integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
"peer": true
},
"vue": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.47.tgz",
"integrity": "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==",
"peer": true,
"requires": {
"@vue/compiler-dom": "3.2.47",
"@vue/compiler-sfc": "3.2.47",
"@vue/runtime-dom": "3.2.47",
"@vue/server-renderer": "3.2.47",
"@vue/shared": "3.2.47"
}
},
"vue-router": {
"version": "4.0.15",
"resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.0.15.tgz",

39
pages.json

@ -35,6 +35,34 @@
"enablePullDownRefresh": true
}
},
{
"path": "pages/atlas/hotSearch",
"style": {
"navigationBarTitleText": "",
"enablePullDownRefresh": false
}
},
{
"path": "pages/ai/gpt/chatgpt",
"style": {
"navigationBarTitleText": "意境GPT",
"enablePullDownRefresh": false
}
},
{
"path": "pages/ai/paint/paint",
"style": {
"navigationBarTitleText": "意境绘画",
"enablePullDownRefresh": false
}
},
{
"path": "pages/ai/paint/paintDetail",
"style": {
"navigationBarTitleText": "意境绘画",
"enablePullDownRefresh": false
}
},
{
"path": "pages/userInfo/userInfo",
"style": {
@ -48,7 +76,16 @@
"enablePullDownRefresh": true
}
}, {
},
{
"path": "pages/userInfo/aiPaint/aiPaint",
"style": {
"navigationBarTitleText": "创作工坊",
"enablePullDownRefresh": true
}
},
{
"path": "pages/userInfo/question/question",
"style": {
"navigationBarTitleText": "常见问题",

22
pages/ai/gpt/chatgpt.vue

@ -0,0 +1,22 @@
<template>
<view>
我是chatgpt页面
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
}
}
</script>
<style>
</style>

607
pages/ai/paint/paint.vue

@ -0,0 +1,607 @@
<template>
<view class="container">
<uni-forms :modelValue="formData">
<!-- 提示词 -->
<view class="head">
<view>
<uni-easyinput type="textarea" autoHeight v-model="formData.promptText" placeholder="请输入想生成画的提示词" class="promptInput"></uni-easyinput>
</view>
</view>
<view class="keywords">
<view class="head">
<view class="left">
<view class="icon">
<uni-icons type="fire-filled" size="20"></uni-icons>
</view>
<view class="title">提示词示例</view>
</view>
<view class="right" @click="getRandPrompt">
<view class="title">换一批</view>
<view class="icon">
<uni-icons type="refreshempty" size="20"></uni-icons>
</view>
</view>
</view>
<view class="lists">
<view @click="onClickPrompt(index)" :class="index == prompt_active?'item active':'item'"
v-for="(item,index) in promptList" :key="index">{{ item.text }}</view>
</view>
</view>
<!-- 创作风格 -->
<view class="style">
<view class="head">
<view class="left">
<view class="icon">
<uni-icons type="star-filled" size="20"></uni-icons>
</view>
<view class="title">选择创作风格</view>
</view>
</view>
</view>
<scroll-view scroll-x="true" class="styleBox">
<block v-for="(item,index) in paintStyle" :key="index">
<view class="styleItem" :class="style_active == item.id?'styleItem styleActive':'styleItem'" @click="onClickStyle(item.id,item.modelName,item.name)">
<image :src="item.imgUrl" class="styleCover" mode="aspectFill"></image>
<text class="styleName">{{item.name}}</text>
</view>
</block>
</scroll-view>
<!-- 尺寸 -->
<view class="size">
<view class="head">
<view class="left">
<view class="icon">
<uni-icons type="map-filled" size="20"></uni-icons>
</view>
<view class="title">选择画布大小</view>
</view>
</view>
<view class="lists">
<view :class="size_active==item.id?'item active':'item'" @click="onClickSize(item.id,item.height,item.width)"
v-for="(item,index) in size" :key="index">{{ item.text }}</view>
</view>
</view>
<view class="bottom">
<view>
<button type="default" @click="$noMultipleClicks(startPaint)" class="startPaint">开始创作</button>
</view>
</view>
</uni-forms>
</view>
</template>
<script>
import base64ToImg from '@/utils/base64Utils';
import {getPaintStyle, getPrompt, textToImg} from '@/api/paint.js';
export default {
data() {
return {
formData:{
size_height: undefined,
size_width: undefined,
modelName: undefined,
styleName: undefined,
promptText: undefined
},
noClick:true, //
promptList: [],
paintStyle:[],
size_active: 0,
prompt_active: 0,
style_active: 0,
size: [
{
id: 1,
text: '正方形(512x512)',
height: 512,
width: 512
},
{
id: 2,
text: '宽屏(1280x720)',
height: 1280,
width: 720
},
{
id: 3,
text: '竖屏(720x1280)',
height: 720,
width: 1280
}
],
rules:{
prompt:{
rules:[{
required: true,
errorMessage: '请输入关键词',
}]
}
}
}
},
// onReady() {
// //
// this.$refs.form.setRules(this.rules);
// },
created() {
//this.base64ToPath();
},
onLoad() {
this.getPaintStyleList();
this.getPrompt();
},
methods: {
startPaint(){
//
let that = this;
// console.log('prompt',that.formData.promptText)
// console.log('',that.formData.size_height)
// console.log('',that.formData.size_width)
// console.log('',that.formData.style_model_name)
//
const userInfo = uni.getStorageSync('userInfo');
console.log('userInfo:',userInfo)
const token = uni.getStorageSync('token');
if((Object.keys(userInfo).length!=0) && (Object.keys(token).length!=0)){
//
uni.showModal({
title: '温馨提示',
content: '任务创建完成,点击跳转生成内容!',
success(res) {
if(res.confirm){
const data = {
width: that.formData.size_width,
height: that.formData.size_height,
prompt: that.formData.promptText,
modelName: that.formData.modelName,
styleName: that.formData.styleName,
painterId: userInfo.id,
painterName: userInfo.username
}
uni.navigateTo({
url: './paintDetail?data='+JSON.stringify(data)
})
}
}
});
}else{
uni.showModal({
title:'提示',
content:'您还没有登录!点击确定跳转登录界面以体验服务',
success(res) {
if (res.confirm) {
//
uni.switchTab({
url: '/pages/userInfo/userInfo'
});
}else if(res.cancel){
uni.showToast({
title:'登录获取更好的服务体验哟!',
duration: 2000
});
}
}
});
}
},
//
onClickSize(id,height,width) {
this.size_active = id
//console.log('id',this.size_active)
this.formData.size_height = height
//console.log('',this.formData.size_height)
this.formData.size_width = width
//console.log('',this.formData.size_width)
},
//
onClickPrompt(index) {
this.prompt_active = index
this.formData.promptText = this.promptList[index].text
//console.log('this.prompt_active',this.prompt_active)
},
//
onClickStyle(id,modelName,styleName) {
this.style_active = id
//console.log('id',this.style_active)
this.formData.modelName = modelName
this.formData.styleName = styleName
//console.log('',this.formData.style_model_name)
},
//
getRandPrompt() {
this.promptList = this.getRandomArrayElements(this.promptList, 10)
this.promptText = this.promptList[this.prompt_active].text
},
//
async getPaintStyleList() {
const res = await getPaintStyle();
if (res.data.code === 200) {
this.paintStyle = res.data.data
//console.log('this.paintStyle',this.paintStyle)
}else {
uni.showModal({
content: '绘画风格加载失败!',
showCancel: false
});
}
},
//
async getPrompt() {
const res = await getPrompt();
if (res.data.code === 200) {
this.promptList = res.data.data
//console.log('this.promptList',this.promptList)
}else {
uni.showModal({
content: '提示词列表加载失败!',
showCancel: false
});
}
},
getRandomArrayElements(arr, count) {
var shuffled = arr.slice(0),
i = arr.length,
min = i - count,
temp, index;
while (i-- > min) {
index = Math.floor((i + 1) * Math.random());
temp = shuffled[index];
shuffled[index] = shuffled[i];
shuffled[i] = temp;
}
return shuffled.slice(min);
},
}
}
</script>
<style lang="scss">
.size {
width: 100%;
margin: 15rpx auto;
.lists {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: space-between;
.item {
background-color: #fff;
padding: 10rpx 30rpx;
border-radius: 10rpx;
color: #666;
border: 1rpx solid #666;
margin-bottom: 10rpx;
font-size: 24rpx;
}
.active {
color: #060101;
border: 1rpx solid #F22E38;
background-color: #FFDEE0; //# FFDEE0
}
}
.head {
display: flex;
flex-direction: row;
justify-content: space-between;
margin-bottom: 30rpx;
.left {
display: flex;
flex-direction: row;
align-items: center;
.title {
font-size: 28rpx;
}
}
.right {
display: flex;
flex-direction: row;
align-items: center;
.title {
margin-right: 15rpx;
}
}
}
}
.play {
width: 92%;
margin: 15rpx auto;
.lists {
display: flex;
flex-direction: row;
.item {
background-color: #FFDEE0;
padding: 10rpx 30rpx;
border-radius: 10rpx;
height: 30rpx;
color: #F22E38;
border: 1rpx solid #F22E38;
margin-bottom: 10rpx;
font-size: 24rpx;
}
}
.head {
display: flex;
flex-direction: row;
justify-content: space-between;
margin-bottom: 30rpx;
.left {
display: flex;
flex-direction: row;
align-items: center;
.title {
font-size: 28rpx;
}
}
.right {
display: flex;
flex-direction: row;
align-items: center;
.title {
margin-right: 15rpx;
}
}
}
}
.style {
width: 92%;
margin: 15rpx auto;
.lists {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: space-between;
.item {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
margin-bottom: 30rpx;
.title {
margin-top: 15rpx;
}
}
.active {
position: relative;
color: #F22E38;
}
}
.head {
display: flex;
flex-direction: row;
justify-content: space-between;
margin-bottom: 30rpx;
.left {
display: flex;
flex-direction: row;
align-items: center;
.title {
font-size: 28rpx;
}
}
.right {
display: flex;
flex-direction: row;
align-items: center;
.title {
margin-right: 15rpx;
}
}
}
}
.keywords {
width: 92%;
margin: 15rpx auto;
.lists {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: space-between;
.item {
background-color: #fff;
padding: 10rpx 15rpx;
border-radius: 10rpx;
color: #666;
border: 1rpx solid #666;
max-width: 128rpx;
margin-bottom: 10rpx;
font-size: 24rpx;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.active {
color: #060101;
border: 1rpx solid #F22E38;
background-color: #FFDEE0;
}
}
.head {
display: flex;
flex-direction: row;
justify-content: space-between;
margin-bottom: 15rpx;
.left {
display: flex;
flex-direction: row;
align-items: center;
.title {
font-size: 28rpx;
}
}
.right {
display: flex;
flex-direction: row;
align-items: center;
.title {
margin-right: 15rpx;
}
}
}
}
page {
background-color: #fff;
padding-bottom: 120rpx;
}
.btn-action {
width: 90%;
position: fixed;
bottom: 0rpx;
left: 4%;
height: 120rpx;
.btn-group {
display: flex;
flex-direction: row;
justify-content: space-between;
.rand {
width: 40%;
.u-button {
height: 100rpx;
}
}
.start {
width: 55%;
.btn-normal {
height: 100rpx;
line-height: normal;
font-size: 28rpx;
border-radius: 50rpx;
background-color: #f22e38;
border: none;
color: #f4f4f5;
display: flex;
flex-direction: column;
justify-content: center;
box-shadow: 3rpx 3rpx 10rpx #dd6161;
.title {
font-weight: bolder;
}
.small {
font-size: 24rpx;
}
}
.btn-normal::after {
border: initial;
}
}
}
}
.styleBox{
white-space: nowrap; //
width: 700rpx;
margin-left: 30rpx;
//padding-right: 20rpx;
.styleItem{
width: 166rpx;
height: 170rpx;
margin-right: 20rpx;
display: inline-flex; // item inline-block / inline-flex
flex-direction: column;
align-items: center;
border: 5rpx solid #fff;
border-radius: 10rpx;
overflow: hidden;
position: relative;
}
.styleActive {
color: #060101;
border: 1rpx solid #F22E38;
background-color: #FFDEE0;
opacity: 0.9;
font-weight: 900;
}
.styleCover{
width: 165rpx;
height: 165rpx;
}
.styleName{
font-size: 36rpx;
color: #000000;
line-height: 42rpx;
padding: 0;
width: 100%;
text-align: center;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
position: absolute;
background-color: #FFF;
opacity: 0.5;
top: 125rpx;
}
}
.startPaint{
background-color: #1A96DB;
border: 1px solid #F22E38;
border-radius: 10rpx;
}
</style>

574
pages/ai/paint/paintDetail.vue

@ -0,0 +1,574 @@
<template>
<view class="container">
<!-- 图片绘制区域 -->
<view class="paint">
<view class="cover" v-if="successFlag === false">
<view class="plate">
<view class="loading-icon">
<uni-icons type="spinner-cycle" size="40"></uni-icons>
</view>
<view class="loading-tips">
Ai正在拼命绘制中.....
</view>
</view>
</view>
<!-- 绘制好的图替换默认图展示 -->
<view class="successCover" @click="onPreviewImage" v-if="successFlag === true">
<image :src="transImg" mode="aspectFill" class="img"></image>
</view>
</view>
<view class="complete">
<!-- prompt关键词 -->
<view class="keywords">
<view>
<view class="promptTitle">关键词</view>
</view>
<view class="content">
<text>{{prompt}}</text>
</view>
</view>
<!-- 图画详细参数 -->
<view class="label">
<!-- <view class="style">
<view class="i">关键词</view>
<view class="text">{{ prompt }}</view>
</view> -->
<view class="style">
<view class="i">画布:</view>
<view class="text">{{ imgWidth }}x{{ imgHeight }}</view>
</view>
<view class="style">
<view class="i">创作风格:</view>
<view class="text">{{styleName}}</view>
</view>
<view class="style" v-if="successFlag === true">
<view class="i">作品编号:</view>
<view class="text">{{paintId}}</view>
</view>
<view class="style" v-if="successFlag === true">
<view class="i">创作时间:</view>
<view class="text">{{paintTime}}</view>
</view>
</view>
<!-- 底部操作栏(绘制成功替换告知图片保存在用户画册里) -->
<view class="action" v-if="successFlag === true">
<view class="action-group">
<view class="actionBtn">
<view class="grid" @click="onCopyPrompt">
<uni-icons type="paperplane-filled" size="30"></uni-icons>
<text class="grid-text">复制关键词</text>
</view>
</view>
<view class="actionBtn">
<view class="grid" @click="onSaveImage(transImg)">
<uni-icons type="cloud-download-filled" size="30"></uni-icons>
<text class="grid-text">保存作品</text>
</view>
</view>
<view class="actionBtn">
<view class="grid" @click="onShareImage">
<uni-icons type="pyq" size="30"></uni-icons>
<button open-type="share" size="mini" plain="true" type="default">分享好友</button>
</view>
</view>
</view>
</view>
</view>
<!-- 底部流量主 -->
<!-- <view class="ad" v-if="spool.video.status == 10"> -->
<view class="ad">
<ad :unit-id="spool.video.id" ad-type="video" ad-theme="white"></ad>
</view>
</view>
</template>
<script>
import base64ToImg from '@/utils/base64Utils';
import { textToImg} from '@/api/paint.js';
import {loginTiktok} from '@/api/auth.js'
export default {
data() {
return {
imgHeight: undefined,
imgWidth: undefined,
transImg: undefined,
prompt: undefined,
successFlag: false,
paintId: undefined,
paintTime: undefined,
styleName: undefined,
//imgHeight: 512,
//imgWidth: 512,
}
},
onLoad(options) {
//
const paintData = JSON.parse(options.data);
console.log('paintData',paintData);
this.imgHeight = paintData.height;
this.imgWidth = paintData.width;
this.prompt = paintData.prompt;
this.styleName = paintData.styleName;
textToImg(paintData).then(res =>{
if(res.data.code === 200){
uni.hideLoading();
console.log('res',res);
this.base64ToPath(res.data.data.images);
this.successFlag = true;
this.paintTime = res.data.data.paintTime;
this.paintId = res.data.data.paintId;
}
});
},
onShareTimeline() {
let _this = this
let referee_id = ''
if (_this.userInfo.user_id) {
referee_id = _this.userInfo.user_id
}
return {
imageUrl: _this.share.share.image_url,
title: _this.share.share.title,
path: '/pages/main/draw/index?referee_id=' + referee_id
}
},
onShareAppMessage() {
console.log('惦记了分享')
// let _this = this
// let referee_id = ''
// if (_this.userInfo.user_id) {
// referee_id = _this.userInfo.user_id
// }
// return {
// imageUrl: _this.share.share.image_url,
// desc: _this.share.share.desc,
// title: '@'+_this.share.share.title,
// path: '/pages/main/draw/index?referee_id=' + referee_id
// }
},
methods: {
//
async loginFunc(res, userInfo, callBack) {
const params = {
code: res.code,
encryptedData: userInfo.encryptedData,
iv: userInfo.iv
}
//
await loginTiktok(params).then(res => {
if (res.data.code === 200) {
uni.setStorage({
key: 'userInfo',
data: res.data.data.userInfo,
})
this.userInfo = res.data.data.userInfo;
console.log('this.userInfo',this.userInfo)
uni.setStorage({
key: 'token',
data: res.data.data.access_token
})
let headers = {
TiktokAuthorization: res.data.data.access_token
}
callBack && callBack(headers)
} else {
uni.showToast({
title: res.data.msg,
icon: 'none'
})
}
}).catch(res => {})
},
//
async getUserInfoLogin(callBack) {
uni.getSetting({
success: (settingObj) => {
if (settingObj.authSetting['scope.userInfo'] === undefined || settingObj.authSetting['scope.userInfo']) {
uni.login({
force: true,
success: (res) => {
uni.getUserInfo({
withCredentials: true,
success: async (userInfo) => {
await this.loginFunc(res, userInfo, callBack)
},
})
},
})
} else {
uni.showModal({
title: '您已拒绝授权用户信息',
content: '是否进入权限管理,调整授权?',
success: function (res) {
if (res.confirm) {
uni.openSetting({
success: (settingRes) => {
if (settingRes.authSetting['scope.userInfo']) {
uni.login({
force: true,
success: (res) => {
uni.getUserInfo({
withCredentials: true,
success: async (userInfo) => {
await this.loginFunc(res, userInfo, callBack)
},
})
},
})
}
},
})
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
}
}
})
},
//
onSaveImage(url){
let that = this;
console.log('点击了保存图片事件')
that.download(url)
},
//
download(url) {
let that = this;
//console.log('',that.transImg)
uni.showLoading({
title: '正在保存图片...'
});
//
uni.getSetting({
success: (res) => {
//
if (!res.authSetting["scope.album"]) {
//
uni.authorize({
scope: "scope.album",
success: () => {
uni.saveImageToPhotosAlbum({
//
filePath: url,
success: (res) => {
},
fail: (res) => {
return uni.showToast({
title: res.errMsg,
icon: 'none'
});
},
complete: (res) => {
uni.hideLoading();
if (res.errMsg !== "saveImageToPhotosAlbum:ok") {
return uni.showToast({
title: "下载失败!",
icon: 'none'
});
} else {
return uni.showToast({
title: "保存成功!",
icon: 'none',
success() {
}
});
}
},
});
},
//
fail: () => {
uni.hideLoading();
uni.showModal({
title: "您已拒绝获取相册权限",
content: "是否进入权限管理,调整授权?",
success: (res) => {
if (res.confirm) {
//
uni.openSetting({
success: (res) => {
},
});
} else if (res.cancel) {
return uni.showToast({
title: "已取消!",
icon: 'none'
});
}
},
});
},
});
} else {
//
uni.saveImageToPhotosAlbum({
filePath: url,
success: (res) => {
console.log('有权限下载图片结果为',res)
uni.hideLoading();
console.log('333333')
if(res.errMsg === "saveImageToPhotosAlbum:ok"){
console.log('44444')
return uni.showToast({
title: "保存成功!",
duration: 2000,
icon: 'none'
});
}
},
fail: (res) => {
uni.hideLoading();
return uni.showToast({
title: res.errMsg,
icon: 'none'
});
},
//
complete: (res) => {
uni.hideLoading();
},
});
}
},
fail: (res) => {},
});
},
//
onCopyPrompt(){
let that = this;
//console.log('')
uni.setClipboardData({
data: that.prompt,
success() {
uni.showToast({
title: '复制关键词成功!'
});
}
})
},
//
onShareImage(){
console.log('点击分享事件')
},
//
onPreviewImage(){
console.log('点击查看大图事件')
},
//base64
base64ToPath(url){
let str = "data:image/png;base64,"+url;
base64ToImg(str,res =>{
console.log('解析出的图片路径为:',res)
this.transImg = res;
});
},
},
}
</script>
<style lang="scss">
page {
background-color: #f4f4f4;
height: 100%;
}
@keyframes xing {
0% {
transform: scale(1);
}
25% {
transform: scale(1.2);
}
50% {
transform: scale(1);
}
75% {
transform: scale(1.2);
}
}
@keyframes fadenum {
100% {
transform: rotate(360deg);
}
}
.ad {
margin-top: 30rpx;
}
.complete {
.action {
width: 100%;
position: fixed;
bottom: 0rpx;
left: 0rpx;
background-color: #fff;
padding: 30rpx 10rpx;
.action-group {
width: 90%;
margin: 0 auto;
display: flex;
flex-direction: row;
justify-content: space-between;
.actionBtn{
width: 50%;
display: flex;
flex-direction: row;
justify-content: center;
//margin:0rpx 25rpx 0rpx 25rpx;
.grid {
display: flex;
flex-direction: column;
align-items: center;
.grid-text {
font-size: 30rpx;
margin-top: 10rpx;
}
button {
background-color: transparent;
border: 0;
outline: 0;
font-size: 30rpx;
}
button::after{
border: none;
outline: 0;
}
}
}
}
}
.label {
width: 92%;
margin: 0 auto;
display: flex;
flex-direction: column;
justify-content: left;
align-items: flex-start;
margin-top: 15rpx;
.style {
display: flex;
flex-direction: row;
align-items: flex-start;
margin-top: 30rpx;
.i {
//background-color: #fff;
color: #1A96DB;
padding: 5rpx 10rpx;
border-radius: 5rpx;
margin-right: 15rpx;
}
.text {
font-size: 40rpx;
font-weight: bolder;
color: #000000;
background-color: #1A94BC1A;
}
}
}
.promptTitle{
text-align: center;
font-weight: bolder;
font-size: 40rpx;
color: #1A96DB;
}
.keywords {
width: 90%;
margin: 0 auto;
background-color: #1A94BC1A;
padding: 15rpx;
border-radius: 10rpx;
margin-top: 15rpx;
.content {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
/*这里设置几行*/
overflow: hidden;
}
}
}
.paint {
.cover {
width: 100%;
height: 720rpx;
border-radius: 10rpx;
background-image: url('https://codefun-proj-user-res-1256085488.cos.ap-guangzhou.myqcloud.com/63889c845a7e3f0310de5223/6398219cd109e60012196b2c/16715997158982711362.png');
background-size: 100% 100%;
background-repeat: no-repeat;
.plate {
width: 100%;
height: 720rpx;
backdrop-filter: blur(25rpx);
background: rgba(255, 255, 255, .3);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
.loading-icon {
animation: fadenum 5s infinite;
}
.loading-tips {
margin-top: 30rpx;
color: #fff;
}
}
}
.successCover {
width: 100%;
height: 720rpx;
border-radius: 10rpx;
.img{
width: 100%;
height: 720rpx;
border-radius: 10rpx;
}
}
}
</style>

44
pages/atlas/atlas.vue

@ -1,7 +1,6 @@
<template>
<view class="atlas">
<uni-search-bar class="uni-mt-10" placeholder="请输入标签名" clearButton="auto" cancelButton="none"
@confirm="search" />
<uni-search-bar class="uni-mt-10" @focus="jumpToHot" clearButton='none' cancelButton='none'/>
<view class="title">
<uni-segmented-control :current="current" :values="arrList" @clickItem="onClickItem" styleType="text"
:activeColor="primaryColor"></uni-segmented-control>
@ -28,7 +27,6 @@
listType,
signImgList,
querySignImg,
querySignImgBySignName
} from '@/api/atlas.js'
export default {
data() {
@ -74,43 +72,13 @@
}
},
methods: {
search(res) {
if (res.value) {
console.log('res.value',res.value);
const params = {
pageNum: 1,
pageSize: 10,
signName: res.value
}
querySignImgBySignName(params).then(response =>{
console.log('response',response);
if (response.data.code != 200) {
uni.showToast({
title: response.data.msg,
icon: 'none',
})
}else{
uni.setStorage({
key: 'atlas_detailId',
data: {
signName: res.value,
type:'search'
},
success() {
//
jumpToHot(){
uni.navigateTo({
url: './atlasList'
})
}
})
}
url: './hotSearch'
});
} else {
uni.showToast({
title: '请输入要搜索的标签名',
icon: 'none',
})
}
},
//
async getListType() {
this.arrList = []
@ -159,7 +127,7 @@
this.current = val.currentIndex
},
changeItem(val) {
console.log(val)
//console.log(val)
this.pageNum = 1
this.pageSize = 10
this.imgList = []

228
pages/atlas/hotSearch.vue

@ -0,0 +1,228 @@
<template>
<view class="container">
<view class="head">
<view>
<uni-search-bar class="uni-mt-10" placeholder="开启你的探索旅程吧" clearButton="auto" cancelButton="none" @confirm="search" ></uni-search-bar>
</view>
</view>
<view class="hotSearch">
<view>
<uni-section title="大家都在搜">
<uni-group>
<uni-data-checkbox mode="tag" v-model="hotKeywordSelected" :localdata="hotKeywordList" @change="selectedHotKeyword" max="1"></uni-data-checkbox>
</uni-group>
</uni-section>
</view>
</view>
</view>
</template>
<script>
import {
querySignImgBySignName,getHotKeywordList,insertHotKeyword,incrementHotKeywordScore
} from '@/api/atlas.js'
export default {
data() {
return {
hotKeywordList:[],
hotKeywordSelected: "",
}
},
onShow() {
//BUG
this.hotKeywordList = [];
this.getHotKeywordList();
},
methods: {
//
async selectedHotKeyword(e){
let that = this;
console.log('e',e);
that.hotKeywordSelected = e.detail.data.text;
//console.log('',that.hotKeywordSelected)
//+1
that.incrementHotKeywordScore(that.hotKeywordSelected);
//
const params = {
pageNum: 1,
pageSize: 10,
signName: that.hotKeywordSelected
}
const response = await querySignImgBySignName(params)
if (response.data.code != 200) {
uni.showToast({
title: response.data.msg,
icon: 'none',
})
}else{
//AI
if(response.data.rows.length > 0){
uni.setStorage({
key: 'atlas_detailId',
data: {
signName: that.hotKeywordSelected,
type:'search'
},
success() {
uni.navigateTo({
url: './atlasList'
})
}
})
}else{
uni.showModal({
title: '提示',
content: '抱歉没有找到想要的图片。不如试试意境绘画!',
success(res){
if(res.confirm){
uni.navigateTo({
url: '../ai/paint/paint'
})
}
}
});
}
}
},
//
async insertHotKeyword(keyword){
const res = await insertHotKeyword(keyword);
if (res.data.code !== 200) {
uni.showModal({
content: res.data.msg,
showCancel: false
});
}
},
//
async incrementHotKeywordScore(keyword){
const res = await incrementHotKeywordScore(keyword);
if (res.data.code !== 200) {
uni.showModal({
content: res.data.msg,
showCancel: false
});
}
},
//
async getHotKeywordList() {
const res = await getHotKeywordList()
if (res.data.code === 200) {
for (let i = 0; i < res.data.data.length; i++) {
let data = {
value: i,
text: res.data.data[i]
}
this.hotKeywordList.push(data);
}
} else {
uni.showModal({
content: res.data.msg,
showCancel: false
});
}
},
//
async search(res) {
if (res.value) {
//redis
this.insertHotKeyword(res.value)
const params = {
pageNum: 1,
pageSize: 10,
signName: res.value
}
const response = await querySignImgBySignName(params)
if (response.data.code != 200) {
uni.showToast({
title: response.data.msg,
icon: 'none',
})
}else{
//AI
if(response.data.rows.length > 0){
uni.setStorage({
key: 'atlas_detailId',
data: {
signName: res.value,
type:'search'
},
success() {
uni.navigateTo({
url: './atlasList'
})
}
})
}else{
uni.showModal({
title: '提示',
content: '抱歉没有找到想要的图片。不如试试意境绘画!',
success(res){
if(res.confirm){
uni.navigateTo({
url: '../ai/paint/paint'
})
}
}
});
}
}
} else {
uni.showToast({
title: '请输入要搜索的标签名',
icon: 'none',
})
}
},
}
}
</script>
<style lang="scss">
.container{
//width: 670rpx;
//height: 100vh;
//margin: 0 auto;
//position: relative;
.recentSearch{
margin-top: 50rpx;
height: 30vh;
border: 2px solid red;
font-size: 36rpx;
}
.hotSearch{
margin-top: 50rpx;
height: 50vh;
//border: 2px solid blue;
.title{
font-size: 50px;
}
}
.uni-searchbar {
border: 1px solid $uni-primary;
border-radius: 16rpx;
padding: 0;
margin-left: 40rpx;
margin-right: 40rpx;
margin-top: 20rpx;
margin-bottom: 50rpx;
.uni-searchbar__box {
padding: 0;
border-radius: 16rpx !important;
}
}
}
</style>

172
pages/userInfo/aiPaint/aiPaint.vue

@ -0,0 +1,172 @@
<template>
<view class="myCollection">
<waterfallList ref="waterfallRef" :col="2" :clickItem="targetDetail" ></waterfallList>
<!-- 显示加载中或者全部加载完成 -->
<view>
<uni-load-more :status="loadStatus"></uni-load-more>
</view>
<!-- <view class="ad-view">
<ad adpid="__UNI__069D14D" type="banner" @load="onload" @close="onclose" @error="onerror"></ad>
</view> -->
</view>
</template>
<script>
import {
getAiPaintPage
} from '@/api/paint.js'
import waterfallList from '@/components/waterfall-list/waterfall-list.vue'
export default {
components:{
waterfallList
},
data() {
return {
userInfo: {}, //
imgList: [], //
imgWidth: 0, //
imgHeight: 0, //
pageNum: 1,
pageSize: 4,
loadStatus:'noMore', //more - loading - noMore -
isLoadMore:false, //
}
},
onShow() {
let that = this;
that.userInfo = uni.getStorageSync('userInfo')
if (that.userInfo) {
that.pageNum = 1;
that.$refs.waterfallRef && that.$refs.waterfallRef.init();
that.getImgList()
}
},
//
onPullDownRefresh() {
this.pageNum = 1
this.imgList = []
this.getImgList()
uni.stopPullDownRefresh()
},
//
onReachBottom() {//
if(!this.isLoadMore) { //
this.isLoadMore=true
if (this.loadStatus === "more") {
this.pageNum += 1 //
this.getImgList();
}
}
},
methods: {
// ai
async getImgList() {
let that = this
const res = await getAiPaintPage({
painterId: that.userInfo.id,
source: '1',
pageNum: that.pageNum,
pageSize: that.pageSize
})
console.log('res',res)
if (res.data.code === 200) {
that.$refs.waterfallRef.addData(res.data.rows);
if(res.data.rows.length < that.pageSize){ //
that.isLoadMore = true
that.loadStatus = 'noMore'
}else{
this.loadStatus = 'more';
that.isLoadMore = false
}
} else {
uni.showToast({
title: res.data.msg,
icon: 'none'
})
that.isLoadMore = false
if(that.page > 1){
that.page -= 1
}
}
},
//
targetDetail(item) {
if (item.id) {
console.log('图片为',item)
uni.setStorage({
key: 'detailId',
data: item.imgId,
success() {
uni.navigateTo({
url: '../../creator/imgDetail'
})
}
})
}
/*if (item.id) {
uni.setStorage({
key: 'detailId',
data: item.id,
success() {
uni.navigateTo({
url: '../creator/imgDetail'
})
}
})
}*/
},
},
// onload(e) {
// console.log("广");
// },
// onclose(e) {
// console.log("广: " + e.detail);
// },
// onerror(e) {
// console.log("onerror: " + e.detail.errCode + " message:: " + e.detail.errMsg);
// }
}
</script>
<style lang="scss">
.myCollection {
padding-right: 40rpx;
padding-top: 40rpx;
.uni-searchbar {
border: 1px solid #11A8FD;
border-radius: 16rpx;
padding: 0;
margin-left: 40rpx;
.uni-searchbar__box {
padding: 0;
border-radius: 16rpx !important;
}
}
.myCollection-list {
display: flex;
.first-box {
border-radius: 16rpx;
font-size: 16px;
margin-top: 40rpx;
margin-left: 40rpx;
color: #fff;
line-height: 60rpx;
text-align: center;
height: 60rpx;
background-color: #11A8FD;
display: inline-block;
vertical-align: top;
}
image {
margin-top: 40rpx;
margin-left: 40rpx;
border-radius: 16rpx;
}
}
}
</style>

10
pages/userInfo/userInfo.vue

@ -20,6 +20,12 @@
<uni-icons custom-prefix="iconfont" type="icon-wodeshoucang"size="40" :color="primaryColor" />
</view>
</view>
<view class="prominent-menu-item collect-menu" @click="toLinkAuth('/pages/userInfo/aiPaint/aiPaint')">
<view class="prominent-menu-title">创作工坊</view>
<view class="prominent-menu-icon">
<uni-icons custom-prefix="iconfont" type="icon-wodeshoucang"size="40" :color="primaryColor" />
</view>
</view>
</view>
<view class="list-menu">
<view class="list-menu-item" v-for="item in menus" @click="toLink(item.url)">
@ -289,8 +295,8 @@ import UniIcons from "../../uni_modules/uni-icons/components/uni-icons/uni-icons
align-items: center;
justify-content: space-between;
//width
//width: calc(50% - 10rpx);
width: 100%;
width: calc(50% - 10rpx);
//width: 100%;
height: 100%;
border-radius: 10rpx;
background-image: linear-gradient(-225deg, #E3FDF5 0%, #FFE6FA 100%);

2
uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json

@ -1,4 +1,4 @@
{
"uni-search-bar.cancel": "cancel",
"uni-search-bar.placeholder": "请输入搜索内容"
"uni-search-bar.placeholder": "点击发现精彩!"
}

31
utils/base64Utils.js

@ -0,0 +1,31 @@
const fsm = tt.getFileSystemManager();
var index = 0
function getNewFileId() {
return Date.now() + String(index++)
}
const FILE_BASE_NAME = getNewFileId(); //自定义文件名
function base64ToImg(base64data, cb) {
const [, format, bodyData] = /data:image\/(\w+);base64,(.*)/.exec(base64data) || [];
if (!format) {
return (new Error('图片转换错误!'));
}
const filePath = `${tt.getEnvInfoSync().common.USER_DATA_PATH}/${FILE_BASE_NAME}.${format}`;
const buffer = tt.base64ToArrayBuffer(bodyData);
fsm.writeFile({
filePath,
data: buffer,
encoding: 'binary',
success() {
cb(filePath);
},
fail() {
return (new Error('图片转换错误!'));
},
});
};
module.exports = base64ToImg;

27
utils/request.js

@ -7,7 +7,7 @@ const service = axios.create({
withCredentials: true,
crossDomain: true,
baseURL: Vue.prototype.baseURL, //这个baseURL是我在main.js下配置的请求url
timeout: 10000
timeout: 90000
})
const loginFunc = (res, userInfo) => {
const params = {
@ -139,10 +139,27 @@ service.interceptors.request.use(
//配置成功后的拦截器
service.interceptors.response.use(res => {
if (res.data.code === 200) {
return res
//未授权
if(res.data.code === 401){
uni.showModal({
title:'提示',
content:'您还没有登录!点击确定跳转登录界面以体验服务',
success(res) {
if (res.confirm) {
//跳转登录界面
uni.switchTab({
url: '/pages/userInfo/userInfo'
});
}else if(res.cancel){
uni.showToast({
title:'登录获取更好的服务体验哟!',
duration: 2000
});
}
}
});
}else{
return Promise.reject(res.data.msg);
return res;
}
}, error => {
if(error.response.status === 401){
@ -152,6 +169,8 @@ service.interceptors.response.use(res => {
}
})
axios.defaults.adapter = function(config) { //自己定义个适配器,用来适配uniapp的语法
return new Promise((resolve, reject) => {
// console.log(config)

157
yarn.lock

@ -2,11 +2,106 @@
# yarn lockfile v1
"@babel/parser@^7.16.4":
"integrity" "sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ=="
"resolved" "https://registry.npmmirror.com/@babel/parser/-/parser-7.21.3.tgz"
"version" "7.21.3"
"@vue/compiler-core@3.2.47":
"integrity" "sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig=="
"resolved" "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.47.tgz"
"version" "3.2.47"
dependencies:
"@babel/parser" "^7.16.4"
"@vue/shared" "3.2.47"
"estree-walker" "^2.0.2"
"source-map" "^0.6.1"
"@vue/compiler-dom@3.2.47":
"integrity" "sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ=="
"resolved" "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz"
"version" "3.2.47"
dependencies:
"@vue/compiler-core" "3.2.47"
"@vue/shared" "3.2.47"
"@vue/compiler-sfc@3.2.47":
"integrity" "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ=="
"resolved" "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz"
"version" "3.2.47"
dependencies:
"@babel/parser" "^7.16.4"
"@vue/compiler-core" "3.2.47"
"@vue/compiler-dom" "3.2.47"
"@vue/compiler-ssr" "3.2.47"
"@vue/reactivity-transform" "3.2.47"
"@vue/shared" "3.2.47"
"estree-walker" "^2.0.2"
"magic-string" "^0.25.7"
"postcss" "^8.1.10"
"source-map" "^0.6.1"
"@vue/compiler-ssr@3.2.47":
"integrity" "sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw=="
"resolved" "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz"
"version" "3.2.47"
dependencies:
"@vue/compiler-dom" "3.2.47"
"@vue/shared" "3.2.47"
"@vue/devtools-api@^6.0.0", "@vue/devtools-api@^6.0.0-beta.11":
"integrity" "sha512-IiA0SvDrJEgXvVxjNkHPFfDx6SXw0b/TUkqMcDZWNg9fnCAHbTpoo59YfJ9QLFkwa3raau5vSlRVzMSLDnfdtQ=="
"resolved" "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.1.4.tgz"
"version" "6.1.4"
"@vue/reactivity-transform@3.2.47":
"integrity" "sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA=="
"resolved" "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz"
"version" "3.2.47"
dependencies:
"@babel/parser" "^7.16.4"
"@vue/compiler-core" "3.2.47"
"@vue/shared" "3.2.47"
"estree-walker" "^2.0.2"
"magic-string" "^0.25.7"
"@vue/reactivity@3.2.47":
"integrity" "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ=="
"resolved" "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.47.tgz"
"version" "3.2.47"
dependencies:
"@vue/shared" "3.2.47"
"@vue/runtime-core@3.2.47":
"integrity" "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA=="
"resolved" "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.47.tgz"
"version" "3.2.47"
dependencies:
"@vue/reactivity" "3.2.47"
"@vue/shared" "3.2.47"
"@vue/runtime-dom@3.2.47":
"integrity" "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA=="
"resolved" "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz"
"version" "3.2.47"
dependencies:
"@vue/runtime-core" "3.2.47"
"@vue/shared" "3.2.47"
"csstype" "^2.6.8"
"@vue/server-renderer@3.2.47":
"integrity" "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA=="
"resolved" "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.47.tgz"
"version" "3.2.47"
dependencies:
"@vue/compiler-ssr" "3.2.47"
"@vue/shared" "3.2.47"
"@vue/shared@3.2.47":
"integrity" "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ=="
"resolved" "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.47.tgz"
"version" "3.2.47"
"axios@^0.26.1":
"integrity" "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA=="
"resolved" "https://registry.npmmirror.com/axios/-/axios-0.26.1.tgz"
@ -22,6 +117,16 @@
"function-bind" "^1.1.1"
"get-intrinsic" "^1.0.2"
"csstype@^2.6.8":
"integrity" "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w=="
"resolved" "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz"
"version" "2.6.21"
"estree-walker@^2.0.2":
"integrity" "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
"resolved" "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz"
"version" "2.0.2"
"follow-redirects@^1.14.8":
"integrity" "sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ=="
"resolved" "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.0.tgz"
@ -53,11 +158,37 @@
dependencies:
"function-bind" "^1.1.1"
"magic-string@^0.25.7":
"integrity" "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ=="
"resolved" "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz"
"version" "0.25.9"
dependencies:
"sourcemap-codec" "^1.4.8"
"nanoid@^3.3.4":
"integrity" "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA=="
"resolved" "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz"
"version" "3.3.6"
"object-inspect@^1.9.0":
"integrity" "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g=="
"resolved" "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.0.tgz"
"version" "1.12.0"
"picocolors@^1.0.0":
"integrity" "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
"resolved" "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz"
"version" "1.0.0"
"postcss@^8.1.10":
"integrity" "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg=="
"resolved" "https://registry.npmmirror.com/postcss/-/postcss-8.4.21.tgz"
"version" "8.4.21"
dependencies:
"nanoid" "^3.3.4"
"picocolors" "^1.0.0"
"source-map-js" "^1.0.2"
"qs@^6.10.3":
"integrity" "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ=="
"resolved" "https://registry.npmmirror.com/qs/-/qs-6.10.3.tgz"
@ -74,6 +205,21 @@
"get-intrinsic" "^1.0.2"
"object-inspect" "^1.9.0"
"source-map-js@^1.0.2":
"integrity" "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
"resolved" "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz"
"version" "1.0.2"
"source-map@^0.6.1":
"integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
"resolved" "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz"
"version" "0.6.1"
"sourcemap-codec@^1.4.8":
"integrity" "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="
"resolved" "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz"
"version" "1.4.8"
"vue-router@^4.0.14":
"integrity" "sha512-xa+pIN9ZqORdIW1MkN2+d9Ui2pCM1b/UMgwYUCZOiFYHAvz/slKKBDha8DLrh5aCG/RibtrpyhKjKOZ85tYyWg=="
"resolved" "https://registry.npmmirror.com/vue-router/-/vue-router-4.0.15.tgz"
@ -81,6 +227,17 @@
dependencies:
"@vue/devtools-api" "^6.0.0"
"vue@^3.0.2", "vue@^3.2.0", "vue@3.2.47":
"integrity" "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ=="
"resolved" "https://registry.npmmirror.com/vue/-/vue-3.2.47.tgz"
"version" "3.2.47"
dependencies:
"@vue/compiler-dom" "3.2.47"
"@vue/compiler-sfc" "3.2.47"
"@vue/runtime-dom" "3.2.47"
"@vue/server-renderer" "3.2.47"
"@vue/shared" "3.2.47"
"vuex@^4.0.2":
"integrity" "sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q=="
"resolved" "https://registry.npmmirror.com/vuex/-/vuex-4.0.2.tgz"

Loading…
Cancel
Save