Browse Source

eslint检查所有文件

pull/48/head
zyronon 1 year ago
parent
commit
529557fc75
  1. 11
      .eslintrc.cjs
  2. 1
      node/comment/process.js
  3. 2
      node/post/process-post-img.js
  4. 1
      node/process-post-list.js
  5. 14
      node/user/process-user-img.js
  6. 18
      node/xhs/process-xhs-img.js
  7. 31
      package.json
  8. 516
      pnpm-lock.yaml
  9. 8
      src/App.vue
  10. 1
      src/assets/data/resource.js
  11. 2
      src/components/AutoInput.vue
  12. 6
      src/components/BaseFooter.vue
  13. 2
      src/components/BaseMask.vue
  14. 9
      src/components/Call.vue
  15. 20
      src/components/Comment.vue
  16. 8
      src/components/DouyinCode.vue
  17. 2
      src/components/Posters.vue
  18. 2
      src/components/Search.vue
  19. 40
      src/components/Share.vue
  20. 28
      src/components/UserPanel.vue
  21. 2
      src/components/dialog/FromBottomDialog.vue
  22. 2
      src/components/dialog/SelectDialog.vue
  23. 6
      src/components/slide/BVideo.vue
  24. 2
      src/components/slide/Indicator.vue
  25. 2
      src/components/slide/IndicatorLight.vue
  26. 1
      src/components/slide/ItemDesc.vue
  27. 2
      src/components/slide/ItemToolbar.vue
  28. 25
      src/components/slide/SlideAlbum.vue
  29. 11
      src/components/slide/SlideRowList.vue
  30. 3
      src/components/slide/SlideUser.vue
  31. 8
      src/components/slide/SlideVerticalInfinite.vue
  32. 12
      src/mock/index.js
  33. 2
      src/pages/home/LivePage.vue
  34. 5
      src/pages/home/Music.vue
  35. 21
      src/pages/home/MusicRankList.vue
  36. 1
      src/pages/home/Publish.vue
  37. 16
      src/pages/home/SearchPage.vue
  38. 2
      src/pages/home/SubmitReport.vue
  39. 17
      src/pages/home/components/FollowSetting.vue
  40. 17
      src/pages/home/components/FollowSetting2.vue
  41. 8
      src/pages/home/components/IndicatorHome.vue
  42. 9
      src/pages/home/components/PlayFeedback.vue
  43. 15
      src/pages/home/components/ShareTo.vue
  44. 22
      src/pages/home/components/ShareToFriend.vue
  45. 10
      src/pages/home/components/VideoShare.vue
  46. 16
      src/pages/home/index.vue
  47. 1
      src/pages/home/slide/Community.vue
  48. 16
      src/pages/home/slide/LongVideo.vue
  49. 7
      src/pages/home/slide/Slide0.vue
  50. 2
      src/pages/home/slide/Slide2.vue
  51. 21
      src/pages/home/slide/SlideList.vue
  52. 2
      src/pages/login/Base.js
  53. 2
      src/pages/login/VerificationCode.vue
  54. 16
      src/pages/login/components/LoginInput.vue
  55. 8
      src/pages/login/countryChoose.vue
  56. 15
      src/pages/me/Me.vue
  57. 2
      src/pages/me/MyCard.vue
  58. 12
      src/pages/me/MyMusic.vue
  59. 5
      src/pages/me/MyRequestUpdate.vue
  60. 2
      src/pages/me/RequestUpdate.vue
  61. 9
      src/pages/me/collect/MusicCollect.vue
  62. 1
      src/pages/me/collect/VideoCollect.vue
  63. 16
      src/pages/me/components/CollectMusic.vue
  64. 14
      src/pages/me/components/GuessMusic.vue
  65. 11
      src/pages/me/components/SlideItemMusic.vue
  66. 1
      src/pages/me/userinfo/AddSchool.vue
  67. 4
      src/pages/me/userinfo/ChooseCity.vue
  68. 8
      src/pages/me/userinfo/ChooseDepartment.vue
  69. 6
      src/pages/me/userinfo/ChooseLocation.vue
  70. 2
      src/pages/me/userinfo/ChooseProvince.vue
  71. 33
      src/pages/me/userinfo/ChooseSchool.vue
  72. 2
      src/pages/me/userinfo/DeclareSchool.vue
  73. 6
      src/pages/message/AllMessage.vue
  74. 10
      src/pages/message/JoinedGroupChat.vue
  75. 23
      src/pages/message/Message.vue
  76. 2
      src/pages/message/MoreSearch.vue
  77. 7
      src/pages/message/RedPacketDetail.vue
  78. 35
      src/pages/message/Share2Friend.vue
  79. 7
      src/pages/message/chat/Chat.vue
  80. 3
      src/pages/message/chat/ChatDetail.vue
  81. 7
      src/pages/message/components/BlockDialog.vue
  82. 4
      src/pages/message/components/ChatMessage.vue
  83. 4
      src/pages/message/notice/DouyinHelper.vue
  84. 7
      src/pages/message/notice/LiveNotice.vue
  85. 4
      src/pages/message/notice/MoneyNotice.vue
  86. 7
      src/pages/message/notice/NoticeSetting.vue
  87. 11
      src/pages/message/notice/SystemNotice.vue
  88. 5
      src/pages/message/notice/TaskNotice.vue
  89. 11
      src/pages/other/AlbumDetail.vue
  90. 18
      src/pages/other/VideoDetail.vue
  91. 205
      src/pages/other/VideoDetail2.vue
  92. 2
      src/pages/people/AddressList.vue
  93. 25
      src/pages/people/FindAcquaintance.vue
  94. 12
      src/pages/people/FollowAndFans.vue
  95. 6
      src/pages/people/components/People.vue
  96. 4
      src/pages/people/components/Peoples.vue
  97. 6
      src/pages/shop/GoodsDetail.vue
  98. 9
      src/pages/shop/Shop.vue
  99. 4
      src/pages/test/Test4.vue
  100. 2
      src/utils/dom.js
  101. Some files were not shown because too many files have changed in this diff Show More

11
.eslintrc.cjs

@ -1,14 +1,19 @@ @@ -1,14 +1,19 @@
/* eslint-env node */
require('@rushstack/eslint-patch/modern-module-resolution')
require('@rushstack/eslint-patch/modern-module-resolution');
module.exports = {
root: true,
'extends': [
'plugin:vue/vue3-essential',
'eslint:recommended',
'@vue/eslint-config-typescript',
'@vue/eslint-config-prettier/skip-formatting'
],
parserOptions: {
ecmaVersion: 'latest'
}
}
},
rules: {
'vue/multi-word-component-names': 0
},
'ignorePatterns': ['vite.config.js', 'mobile-select.js']
};

1
node/comment/process.js

@ -1,7 +1,6 @@ @@ -1,7 +1,6 @@
import fs from 'fs'
let read = './data/detail_comments_2024-03-29.json'
let save = './data/'
let video_ids = [
'7260749400622894336',

2
node/post/process-post-img.js

@ -10,7 +10,7 @@ let saveFilePath = './imgs/' @@ -10,7 +10,7 @@ let saveFilePath = './imgs/'
const downloadImage = async (src, dest) => {
console.log('下载:', src)
return new Promise((resolve) => {
request.head(src, (err, res, body) => {
request.head(src, (err) => {
if (err) {
console.log(err)
return

1
node/process-post-list.js

@ -2,7 +2,6 @@ import fs from 'fs' @@ -2,7 +2,6 @@ import fs from 'fs'
import { users } from './user/data.js'
let read = './post/data/'
let save = './format/'
let max = 0
let map = []

14
node/user/process-user-img.js

@ -9,7 +9,7 @@ let inputData = JSON.parse(saveFileStr) @@ -9,7 +9,7 @@ let inputData = JSON.parse(saveFileStr)
const downloadImage = async (src, dest, callback) => {
console.log('下载:', src, dest, Date.now())
return new Promise((resolve) => {
request.head(src, (err, res, body) => {
request.head(src, (err) => {
if (err) {
console.log(err)
return
@ -27,12 +27,6 @@ const downloadImage = async (src, dest, callback) => { @@ -27,12 +27,6 @@ const downloadImage = async (src, dest, callback) => {
let saveFilePath = './user-imgs/'
async function sleep(val) {
return new Promise((resolve) => {
setTimeout(resolve, val)
})
}
async function test(list) {
for (let j = 0; j < list.length; j++) {
let a = list[j]
@ -70,11 +64,7 @@ for (let i = 0; i < inputData.slice(0, 1111).length; i++) { @@ -70,11 +64,7 @@ for (let i = 0; i < inputData.slice(0, 1111).length; i++) {
await test(v.white_cover_url)
delete v.cover_and_head_image_info
fs.writeFileSync(fileName, JSON.stringify(inputData, null, 2))
if (
v.share_info &&
v.share_info.share_image_url &&
v.share_info.share_image_url.url_list
) {
if (v.share_info && v.share_info.share_image_url && v.share_info.share_image_url.url_list) {
let r = await test2(v.share_info.share_image_url.url_list)
if (r.length) {
v.share_info.share_image_url.url_list = r

18
node/xhs/process-xhs-img.js

@ -10,7 +10,7 @@ let inputData = JSON.parse(saveFileStr) @@ -10,7 +10,7 @@ let inputData = JSON.parse(saveFileStr)
const downloadImage = async (src, dest, callback) => {
console.log('下载:', src, dest, Date.now())
return new Promise((resolve) => {
request.head(src, (err, res, body) => {
request.head(src, (err) => {
if (err) {
console.log(err)
return
@ -41,16 +41,16 @@ async function test(list) { @@ -41,16 +41,16 @@ async function test(list) {
let name = nanoid() + '.png'
imgList.push({
name,
url: coverUrl,
url: coverUrl
})
await downloadImage(coverUrl, saveFilePath + name, () => {
// console.log('close', name)
list[j] = {
info_list: [
{
url: name,
},
],
url: name
}
]
}
fs.writeFileSync(savefileName, JSON.stringify(inputData, null, 2))
})
@ -59,9 +59,9 @@ async function test(list) { @@ -59,9 +59,9 @@ async function test(list) {
list[j] = {
info_list: [
{
url: imgList[rIndex].name,
},
],
url: imgList[rIndex].name
}
]
}
console.log('重复')
fs.writeFileSync(savefileName, JSON.stringify(inputData, null, 2))
@ -77,7 +77,7 @@ for (let i = 0; i < inputData.slice(0, 111111).length; i++) { @@ -77,7 +77,7 @@ for (let i = 0; i < inputData.slice(0, 111111).length; i++) {
let name = nanoid() + '.png'
imgList.push({
name,
url: url,
url: url
})
await downloadImage(url, saveFilePath + name, () => {
// console.log('close', name)

31
package.json

@ -17,6 +17,7 @@ @@ -17,6 +17,7 @@
"core-js": "3.21.1",
"dayjs": "1.11.0",
"gl-matrix": "3.4.3",
"jquery": "^3.7.1",
"mitt": "3.0.0",
"mobile-select": "1.1.2",
"mockjs": "^1.1.0",
@ -27,20 +28,36 @@ @@ -27,20 +28,36 @@
},
"devDependencies": {
"@iconify/vue": "^4.1.1",
"@rushstack/eslint-patch": "^1.3.3",
"@types/jquery": "3.5.29",
"@types/lodash-es": "^4.17.9",
"@vitejs/plugin-vue": "4.0.0",
"@vitejs/plugin-vue-jsx": "^3.1.0",
"@vue/eslint-config-prettier": "^8.0.0",
"@vue/eslint-config-typescript": "^12.0.0",
"eslint": "^8.57.0",
"eslint-plugin-vue": "^9.17.0",
"husky": "^9.0.11",
"less": "4.1.3",
"lint-staged": "^15.2.2",
"prettier": "^3.2.5",
"rollup-plugin-visualizer": "^5.9.2",
"unplugin-vue-define-options": "^1.4.1",
"vite": "4.5.2",
"vite-plugin-cdn-import": "0.3.5",
"vite-plugin-compression": "^0.5.1",
"vite-plugin-imagemin": "^0.6.1",
"@rushstack/eslint-patch": "^1.3.3",
"@vitejs/plugin-vue-jsx": "^3.1.0",
"@vue/eslint-config-prettier": "^8.0.0",
"eslint": "^8.49.0",
"eslint-plugin-vue": "^9.17.0",
"prettier": "^3.0.3"
"vite-plugin-imagemin": "^0.6.1"
},
"husky":{
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"src/**": [
"prettier --write src/",
"eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore",
"git add"
]
}
}

516
pnpm-lock.yaml

@ -23,6 +23,9 @@ dependencies: @@ -23,6 +23,9 @@ dependencies:
gl-matrix:
specifier: 3.4.3
version: 3.4.3
jquery:
specifier: ^3.7.1
version: 3.7.1
mitt:
specifier: 3.0.0
version: 3.0.0
@ -34,10 +37,10 @@ dependencies: @@ -34,10 +37,10 @@ dependencies:
version: 1.1.0
pinia:
specifier: ^2.1.7
version: 2.1.7(vue@3.4.21)
version: 2.1.7(typescript@5.4.3)(vue@3.4.21)
vue:
specifier: 3.4.21
version: 3.4.21
version: 3.4.21(typescript@5.4.3)
vue-router:
specifier: 4.3.0
version: 4.3.0(vue@3.4.21)
@ -52,6 +55,9 @@ devDependencies: @@ -52,6 +55,9 @@ devDependencies:
'@rushstack/eslint-patch':
specifier: ^1.3.3
version: 1.10.1
'@types/jquery':
specifier: 3.5.29
version: 3.5.29
'@types/lodash-es':
specifier: ^4.17.9
version: 4.17.12
@ -64,17 +70,26 @@ devDependencies: @@ -64,17 +70,26 @@ devDependencies:
'@vue/eslint-config-prettier':
specifier: ^8.0.0
version: 8.0.0(eslint@8.57.0)(prettier@3.2.5)
'@vue/eslint-config-typescript':
specifier: ^12.0.0
version: 12.0.0(eslint-plugin-vue@9.24.0)(eslint@8.57.0)(typescript@5.4.3)
eslint:
specifier: ^8.49.0
specifier: ^8.57.0
version: 8.57.0
eslint-plugin-vue:
specifier: ^9.17.0
version: 9.24.0(eslint@8.57.0)
husky:
specifier: ^9.0.11
version: 9.0.11
less:
specifier: 4.1.3
version: 4.1.3
lint-staged:
specifier: ^15.2.2
version: 15.2.2
prettier:
specifier: ^3.0.3
specifier: ^3.2.5
version: 3.2.5
rollup-plugin-visualizer:
specifier: ^5.9.2
@ -755,7 +770,7 @@ packages: @@ -755,7 +770,7 @@ packages:
vue: '>=3'
dependencies:
'@iconify/types': 2.0.0
vue: 3.4.21
vue: 3.4.21(typescript@5.4.3)
dev: true
/@jambonn/vue-lazyload@1.0.9(vue@3.4.21):
@ -764,7 +779,7 @@ packages: @@ -764,7 +779,7 @@ packages:
peerDependencies:
vue: ^3.0.11
dependencies:
vue: 3.4.21
vue: 3.4.21(typescript@5.4.3)
dev: false
/@jridgewell/gen-mapping@0.3.3:
@ -934,6 +949,16 @@ packages: @@ -934,6 +949,16 @@ packages:
'@types/node': 20.11.30
dev: true
/@types/jquery@3.5.29:
resolution: {integrity: sha512-oXQQC9X9MOPRrMhPHHOsXqeQDnWeCDT3PelUIg/Oy8FAbzSZtFHRjc7IpbfFVmpLtJ+UOoywpRsuO5Jxjybyeg==}
dependencies:
'@types/sizzle': 2.3.8
dev: true
/@types/json-schema@7.0.15:
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
dev: true
/@types/keyv@3.1.4:
resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
dependencies:
@ -966,12 +991,152 @@ packages: @@ -966,12 +991,152 @@ packages:
'@types/node': 20.11.30
dev: true
/@types/semver@7.5.8:
resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==}
dev: true
/@types/sizzle@2.3.8:
resolution: {integrity: sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==}
dev: true
/@types/svgo@2.6.4:
resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==}
dependencies:
'@types/node': 20.11.30
dev: true
/@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.3):
resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
'@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha
eslint: ^7.0.0 || ^8.0.0
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
dependencies:
'@eslint-community/regexpp': 4.10.0
'@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.3)
'@typescript-eslint/scope-manager': 6.21.0
'@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.4.3)
'@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.3)
'@typescript-eslint/visitor-keys': 6.21.0
debug: 4.3.4
eslint: 8.57.0
graphemer: 1.4.0
ignore: 5.3.1
natural-compare: 1.4.0
semver: 7.6.0
ts-api-utils: 1.3.0(typescript@5.4.3)
typescript: 5.4.3
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.3):
resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
dependencies:
'@typescript-eslint/scope-manager': 6.21.0
'@typescript-eslint/types': 6.21.0
'@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.3)
'@typescript-eslint/visitor-keys': 6.21.0
debug: 4.3.4
eslint: 8.57.0
typescript: 5.4.3
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/scope-manager@6.21.0:
resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==}
engines: {node: ^16.0.0 || >=18.0.0}
dependencies:
'@typescript-eslint/types': 6.21.0
'@typescript-eslint/visitor-keys': 6.21.0
dev: true
/@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.4.3):
resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
dependencies:
'@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.3)
'@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.3)
debug: 4.3.4
eslint: 8.57.0
ts-api-utils: 1.3.0(typescript@5.4.3)
typescript: 5.4.3
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/types@6.21.0:
resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==}
engines: {node: ^16.0.0 || >=18.0.0}
dev: true
/@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.3):
resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
dependencies:
'@typescript-eslint/types': 6.21.0
'@typescript-eslint/visitor-keys': 6.21.0
debug: 4.3.4
globby: 11.1.0
is-glob: 4.0.3
minimatch: 9.0.3
semver: 7.6.0
ts-api-utils: 1.3.0(typescript@5.4.3)
typescript: 5.4.3
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.4.3):
resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
'@types/json-schema': 7.0.15
'@types/semver': 7.5.8
'@typescript-eslint/scope-manager': 6.21.0
'@typescript-eslint/types': 6.21.0
'@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.3)
eslint: 8.57.0
semver: 7.6.0
transitivePeerDependencies:
- supports-color
- typescript
dev: true
/@typescript-eslint/visitor-keys@6.21.0:
resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==}
engines: {node: ^16.0.0 || >=18.0.0}
dependencies:
'@typescript-eslint/types': 6.21.0
eslint-visitor-keys: 3.4.3
dev: true
/@ungap/structured-clone@1.2.0:
resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
dev: true
@ -987,7 +1152,7 @@ packages: @@ -987,7 +1152,7 @@ packages:
'@babel/plugin-transform-typescript': 7.24.1(@babel/core@7.24.3)
'@vue/babel-plugin-jsx': 1.1.5(@babel/core@7.24.3)
vite: 4.5.2(less@4.1.3)
vue: 3.4.21
vue: 3.4.21(typescript@5.4.3)
transitivePeerDependencies:
- supports-color
dev: true
@ -1000,7 +1165,7 @@ packages: @@ -1000,7 +1165,7 @@ packages:
vue: ^3.2.25
dependencies:
vite: 4.5.2(less@4.1.3)
vue: 3.4.21
vue: 3.4.21(typescript@5.4.3)
dev: true
/@vue-macros/common@1.10.1(rollup@2.79.1)(vue@3.4.21):
@ -1018,7 +1183,7 @@ packages: @@ -1018,7 +1183,7 @@ packages:
ast-kit: 0.11.3(rollup@2.79.1)
local-pkg: 0.5.0
magic-string-ast: 0.3.0
vue: 3.4.21
vue: 3.4.21(typescript@5.4.3)
transitivePeerDependencies:
- rollup
dev: true
@ -1106,6 +1271,27 @@ packages: @@ -1106,6 +1271,27 @@ packages:
- '@types/eslint'
dev: true
/@vue/eslint-config-typescript@12.0.0(eslint-plugin-vue@9.24.0)(eslint@8.57.0)(typescript@5.4.3):
resolution: {integrity: sha512-StxLFet2Qe97T8+7L8pGlhYBBr8Eg05LPuTDVopQV6il+SK6qqom59BA/rcFipUef2jD8P2X44Vd8tMFytfvlg==}
engines: {node: ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.2.0 || ^7.0.0 || ^8.0.0
eslint-plugin-vue: ^9.0.0
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
dependencies:
'@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.3)
'@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.3)
eslint: 8.57.0
eslint-plugin-vue: 9.24.0(eslint@8.57.0)
typescript: 5.4.3
vue-eslint-parser: 9.4.2(eslint@8.57.0)
transitivePeerDependencies:
- supports-color
dev: true
/@vue/reactivity@3.4.21:
resolution: {integrity: sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==}
dependencies:
@ -1131,7 +1317,7 @@ packages: @@ -1131,7 +1317,7 @@ packages:
dependencies:
'@vue/compiler-ssr': 3.4.21
'@vue/shared': 3.4.21
vue: 3.4.21
vue: 3.4.21(typescript@5.4.3)
/@vue/shared@3.4.21:
resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==}
@ -1159,6 +1345,11 @@ packages: @@ -1159,6 +1345,11 @@ packages:
uri-js: 4.4.1
dev: true
/ansi-escapes@6.2.1:
resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==}
engines: {node: '>=14.16'}
dev: true
/ansi-regex@2.1.1:
resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==}
engines: {node: '>=0.10.0'}
@ -1170,6 +1361,11 @@ packages: @@ -1170,6 +1361,11 @@ packages:
requiresBuild: true
dev: true
/ansi-regex@6.0.1:
resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
engines: {node: '>=12'}
dev: true
/ansi-styles@2.2.1:
resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==}
engines: {node: '>=0.10.0'}
@ -1189,6 +1385,11 @@ packages: @@ -1189,6 +1385,11 @@ packages:
color-convert: 2.0.1
dev: true
/ansi-styles@6.2.1:
resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
engines: {node: '>=12'}
dev: true
/anymatch@3.1.3:
resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
engines: {node: '>= 8'}
@ -1359,6 +1560,12 @@ packages: @@ -1359,6 +1560,12 @@ packages:
concat-map: 0.0.1
dev: true
/brace-expansion@2.0.1:
resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
dependencies:
balanced-match: 1.0.2
dev: true
/braces@3.0.2:
resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
engines: {node: '>=8'}
@ -1480,6 +1687,11 @@ packages: @@ -1480,6 +1687,11 @@ packages:
supports-color: 7.2.0
dev: true
/chalk@5.3.0:
resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
dev: true
/chokidar@3.6.0:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
engines: {node: '>= 8.10.0'}
@ -1495,6 +1707,21 @@ packages: @@ -1495,6 +1707,21 @@ packages:
fsevents: 2.3.3
dev: true
/cli-cursor@4.0.0:
resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dependencies:
restore-cursor: 4.0.0
dev: true
/cli-truncate@4.0.0:
resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==}
engines: {node: '>=18'}
dependencies:
slice-ansi: 5.0.0
string-width: 7.1.0
dev: true
/cliui@8.0.1:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
engines: {node: '>=12'}
@ -1531,6 +1758,10 @@ packages: @@ -1531,6 +1758,10 @@ packages:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
dev: true
/colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
dev: true
/combined-stream@1.0.8:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
engines: {node: '>= 0.8'}
@ -1545,6 +1776,11 @@ packages: @@ -1545,6 +1776,11 @@ packages:
keypress: 0.1.0
dev: false
/commander@11.1.0:
resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
engines: {node: '>=16'}
dev: true
/commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
dev: true
@ -1882,6 +2118,10 @@ packages: @@ -1882,6 +2118,10 @@ packages:
resolution: {integrity: sha512-rxFVtrMGMFROr4qqU6n95rUi9IlfIm+lIAt+hOToy/9r6CDv0XiEcQdC3VP71y1pE5CFTzKV0RvxOGYCPWWHPw==}
dev: true
/emoji-regex@10.3.0:
resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==}
dev: true
/emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
requiresBuild: true
@ -2315,6 +2555,10 @@ packages: @@ -2315,6 +2555,10 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
/eventemitter3@5.0.1:
resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
dev: true
/exec-buffer@3.2.0:
resolution: {integrity: sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==}
engines: {node: '>=4'}
@ -2382,6 +2626,21 @@ packages: @@ -2382,6 +2626,21 @@ packages:
strip-final-newline: 2.0.0
dev: true
/execa@8.0.1:
resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
engines: {node: '>=16.17'}
dependencies:
cross-spawn: 7.0.3
get-stream: 8.0.1
human-signals: 5.0.0
is-stream: 3.0.0
merge-stream: 2.0.0
npm-run-path: 5.3.0
onetime: 6.0.0
signal-exit: 4.1.0
strip-final-newline: 3.0.0
dev: true
/executable@4.1.1:
resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==}
engines: {node: '>=4'}
@ -2622,6 +2881,11 @@ packages: @@ -2622,6 +2881,11 @@ packages:
engines: {node: 6.* || 8.* || >= 10.*}
dev: true
/get-east-asian-width@1.2.0:
resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==}
engines: {node: '>=18'}
dev: true
/get-proxy@2.1.0:
resolution: {integrity: sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==}
engines: {node: '>=4'}
@ -2666,6 +2930,11 @@ packages: @@ -2666,6 +2930,11 @@ packages:
engines: {node: '>=10'}
dev: true
/get-stream@8.0.1:
resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
engines: {node: '>=16'}
dev: true
/gifsicle@5.2.0:
resolution: {integrity: sha512-vOIS3j0XoTCxq9pkGj43gEix82RkI5FveNgaFZutjbaui/HH+4fR8Y56dwXDuxYo8hR4xOo6/j2h1WHoQW6XLw==}
engines: {node: '>=10'}
@ -2734,6 +3003,18 @@ packages: @@ -2734,6 +3003,18 @@ packages:
slash: 3.0.0
dev: true
/globby@11.1.0:
resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
engines: {node: '>=10'}
dependencies:
array-union: 2.1.0
dir-glob: 3.0.1
fast-glob: 3.3.2
ignore: 5.3.1
merge2: 1.4.1
slash: 3.0.0
dev: true
/got@7.1.0:
resolution: {integrity: sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==}
engines: {node: '>=4'}
@ -2847,6 +3128,17 @@ packages: @@ -2847,6 +3128,17 @@ packages:
engines: {node: '>=10.17.0'}
dev: true
/human-signals@5.0.0:
resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
engines: {node: '>=16.17.0'}
dev: true
/husky@9.0.11:
resolution: {integrity: sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==}
engines: {node: '>=18'}
hasBin: true
dev: true
/iconv-lite@0.6.3:
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
engines: {node: '>=0.10.0'}
@ -3050,6 +3342,18 @@ packages: @@ -3050,6 +3342,18 @@ packages:
requiresBuild: true
dev: true
/is-fullwidth-code-point@4.0.0:
resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
engines: {node: '>=12'}
dev: true
/is-fullwidth-code-point@5.0.0:
resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==}
engines: {node: '>=18'}
dependencies:
get-east-asian-width: 1.2.0
dev: true
/is-gif@3.0.0:
resolution: {integrity: sha512-IqJ/jlbw5WJSNfwQ/lHEDXF8rxhRgF6ythk2oiEvhpG29F704eX9NO6TvPfMiq9DrbwgcEDnETYNcZDPewQoVw==}
engines: {node: '>=6'}
@ -3118,6 +3422,11 @@ packages: @@ -3118,6 +3422,11 @@ packages:
engines: {node: '>=8'}
dev: true
/is-stream@3.0.0:
resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dev: true
/is-svg@4.4.0:
resolution: {integrity: sha512-v+AgVwiK5DsGtT9ng+m4mClp6zDAmwrW8nZi6Gg15qzvBnRWWdfWA1TGaXyCDnWq5g5asofIgMVl3PjKxvk1ug==}
engines: {node: '>=6'}
@ -3177,6 +3486,10 @@ packages: @@ -3177,6 +3486,10 @@ packages:
bin-wrapper: 4.1.0
dev: true
/jquery@3.7.1:
resolution: {integrity: sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==}
dev: false
/js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
dev: true
@ -3277,6 +3590,42 @@ packages: @@ -3277,6 +3590,42 @@ packages:
type-check: 0.4.0
dev: true
/lilconfig@3.0.0:
resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==}
engines: {node: '>=14'}
dev: true
/lint-staged@15.2.2:
resolution: {integrity: sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==}
engines: {node: '>=18.12.0'}
hasBin: true
dependencies:
chalk: 5.3.0
commander: 11.1.0
debug: 4.3.4
execa: 8.0.1
lilconfig: 3.0.0
listr2: 8.0.1
micromatch: 4.0.5
pidtree: 0.6.0
string-argv: 0.3.2
yaml: 2.3.4
transitivePeerDependencies:
- supports-color
dev: true
/listr2@8.0.1:
resolution: {integrity: sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==}
engines: {node: '>=18.0.0'}
dependencies:
cli-truncate: 4.0.0
colorette: 2.0.20
eventemitter3: 5.0.1
log-update: 6.0.0
rfdc: 1.3.1
wrap-ansi: 9.0.0
dev: true
/load-json-file@1.1.0:
resolution: {integrity: sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==}
engines: {node: '>=0.10.0'}
@ -3311,6 +3660,17 @@ packages: @@ -3311,6 +3660,17 @@ packages:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
dev: true
/log-update@6.0.0:
resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==}
engines: {node: '>=18'}
dependencies:
ansi-escapes: 6.2.1
cli-cursor: 4.0.0
slice-ansi: 7.1.0
strip-ansi: 7.1.0
wrap-ansi: 9.0.0
dev: true
/logalot@2.1.0:
resolution: {integrity: sha512-Ah4CgdSRfeCJagxQhcVNMi9BfGYyEKLa6d7OA6xSbld/Hg3Cf2QiOa1mDpmG7Ve8LOH6DN3mdttzjQAvWTyVkw==}
engines: {node: '>=0.10.0'}
@ -3483,6 +3843,11 @@ packages: @@ -3483,6 +3843,11 @@ packages:
engines: {node: '>=6'}
dev: true
/mimic-fn@4.0.0:
resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
engines: {node: '>=12'}
dev: true
/mimic-response@1.0.1:
resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==}
engines: {node: '>=4'}
@ -3495,6 +3860,13 @@ packages: @@ -3495,6 +3860,13 @@ packages:
brace-expansion: 1.1.11
dev: true
/minimatch@9.0.3:
resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
engines: {node: '>=16 || 14 >=14.17'}
dependencies:
brace-expansion: 2.0.1
dev: true
/minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
dev: true
@ -3625,6 +3997,13 @@ packages: @@ -3625,6 +3997,13 @@ packages:
path-key: 3.1.1
dev: true
/npm-run-path@5.3.0:
resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dependencies:
path-key: 4.0.0
dev: true
/nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
dependencies:
@ -3650,6 +4029,13 @@ packages: @@ -3650,6 +4029,13 @@ packages:
mimic-fn: 2.1.0
dev: true
/onetime@6.0.0:
resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
engines: {node: '>=12'}
dependencies:
mimic-fn: 4.0.0
dev: true
/open@8.4.2:
resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
engines: {node: '>=12'}
@ -3821,6 +4207,11 @@ packages: @@ -3821,6 +4207,11 @@ packages:
engines: {node: '>=8'}
dev: true
/path-key@4.0.0:
resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
engines: {node: '>=12'}
dev: true
/path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
dev: true
@ -3859,6 +4250,12 @@ packages: @@ -3859,6 +4250,12 @@ packages:
engines: {node: '>=8.6'}
dev: true
/pidtree@0.6.0:
resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==}
engines: {node: '>=0.10'}
hasBin: true
dev: true
/pify@2.3.0:
resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
engines: {node: '>=0.10.0'}
@ -3875,7 +4272,7 @@ packages: @@ -3875,7 +4272,7 @@ packages:
requiresBuild: true
dev: true
/pinia@2.1.7(vue@3.4.21):
/pinia@2.1.7(typescript@5.4.3)(vue@3.4.21):
resolution: {integrity: sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==}
peerDependencies:
'@vue/composition-api': ^1.4.0
@ -3888,7 +4285,8 @@ packages: @@ -3888,7 +4285,8 @@ packages:
optional: true
dependencies:
'@vue/devtools-api': 6.5.1
vue: 3.4.21
typescript: 5.4.3
vue: 3.4.21(typescript@5.4.3)
vue-demi: 0.14.7(vue@3.4.21)
dev: false
@ -4104,11 +4502,23 @@ packages: @@ -4104,11 +4502,23 @@ packages:
lowercase-keys: 1.0.1
dev: true
/restore-cursor@4.0.0:
resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dependencies:
onetime: 5.1.2
signal-exit: 3.0.7
dev: true
/reusify@1.0.4:
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
dev: true
/rfdc@1.3.1:
resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==}
dev: true
/rimraf@2.7.1:
resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
hasBin: true
@ -4262,11 +4672,32 @@ packages: @@ -4262,11 +4672,32 @@ packages:
requiresBuild: true
dev: true
/signal-exit@4.1.0:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines: {node: '>=14'}
dev: true
/slash@3.0.0:
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
engines: {node: '>=8'}
dev: true
/slice-ansi@5.0.0:
resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==}
engines: {node: '>=12'}
dependencies:
ansi-styles: 6.2.1
is-fullwidth-code-point: 4.0.0
dev: true
/slice-ansi@7.1.0:
resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==}
engines: {node: '>=18'}
dependencies:
ansi-styles: 6.2.1
is-fullwidth-code-point: 5.0.0
dev: true
/sort-keys-length@1.0.1:
resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==}
engines: {node: '>=0.10.0'}
@ -4348,6 +4779,11 @@ packages: @@ -4348,6 +4779,11 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
/string-argv@0.3.2:
resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
engines: {node: '>=0.6.19'}
dev: true
/string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
@ -4358,6 +4794,15 @@ packages: @@ -4358,6 +4794,15 @@ packages:
strip-ansi: 6.0.1
dev: true
/string-width@7.1.0:
resolution: {integrity: sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==}
engines: {node: '>=18'}
dependencies:
emoji-regex: 10.3.0
get-east-asian-width: 1.2.0
strip-ansi: 7.1.0
dev: true
/string_decoder@1.1.1:
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
dependencies:
@ -4379,6 +4824,13 @@ packages: @@ -4379,6 +4824,13 @@ packages:
ansi-regex: 5.0.1
dev: true
/strip-ansi@7.1.0:
resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
engines: {node: '>=12'}
dependencies:
ansi-regex: 6.0.1
dev: true
/strip-bom@2.0.0:
resolution: {integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==}
engines: {node: '>=0.10.0'}
@ -4402,6 +4854,11 @@ packages: @@ -4402,6 +4854,11 @@ packages:
engines: {node: '>=6'}
dev: true
/strip-final-newline@3.0.0:
resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
engines: {node: '>=12'}
dev: true
/strip-indent@1.0.1:
resolution: {integrity: sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==}
engines: {node: '>=0.10.0'}
@ -4542,6 +4999,15 @@ packages: @@ -4542,6 +4999,15 @@ packages:
escape-string-regexp: 1.0.5
dev: true
/ts-api-utils@1.3.0(typescript@5.4.3):
resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==}
engines: {node: '>=16'}
peerDependencies:
typescript: '>=4.2.0'
dependencies:
typescript: 5.4.3
dev: true
/tslib@2.6.2:
resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
dev: true
@ -4569,6 +5035,11 @@ packages: @@ -4569,6 +5035,11 @@ packages:
engines: {node: '>=10'}
dev: true
/typescript@5.4.3:
resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==}
engines: {node: '>=14.17'}
hasBin: true
/ufo@1.4.0:
resolution: {integrity: sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==}
dev: true
@ -4766,7 +5237,7 @@ packages: @@ -4766,7 +5237,7 @@ packages:
'@vue/composition-api':
optional: true
dependencies:
vue: 3.4.21
vue: 3.4.21(typescript@5.4.3)
dev: false
/vue-eslint-parser@9.4.2(eslint@8.57.0):
@ -4793,7 +5264,7 @@ packages: @@ -4793,7 +5264,7 @@ packages:
vue: ^3.2.0
dependencies:
'@vue/devtools-api': 6.5.1
vue: 3.4.21
vue: 3.4.21(typescript@5.4.3)
dev: false
/vue-switches@2.0.1:
@ -4810,7 +5281,7 @@ packages: @@ -4810,7 +5281,7 @@ packages:
csstype: 3.1.2
dev: false
/vue@3.4.21:
/vue@3.4.21(typescript@5.4.3):
resolution: {integrity: sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==}
peerDependencies:
typescript: '*'
@ -4823,6 +5294,7 @@ packages: @@ -4823,6 +5294,7 @@ packages:
'@vue/runtime-dom': 3.4.21
'@vue/server-renderer': 3.4.21(vue@3.4.21)
'@vue/shared': 3.4.21
typescript: 5.4.3
/webpack-sources@3.2.3:
resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
@ -4857,6 +5329,15 @@ packages: @@ -4857,6 +5329,15 @@ packages:
strip-ansi: 6.0.1
dev: true
/wrap-ansi@9.0.0:
resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==}
engines: {node: '>=18'}
dependencies:
ansi-styles: 6.2.1
string-width: 7.1.0
strip-ansi: 7.1.0
dev: true
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
requiresBuild: true
@ -4889,6 +5370,11 @@ packages: @@ -4889,6 +5370,11 @@ packages:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
dev: true
/yaml@2.3.4:
resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==}
engines: {node: '>= 14'}
dev: true
/yargs-parser@21.1.1:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'}

8
src/App.vue

@ -76,10 +76,14 @@ export default { @@ -76,10 +76,14 @@ export default {
try {
navigator.control.gesture(false)
} catch (e) {}
} catch (e) {
//
}
try {
navigator.control.longpressMenu(false)
} catch (e) {}
} catch (e) {
//
}
document.onselectstart = new Function('return false') //
}
}

1
src/assets/data/resource.js

@ -1,5 +1,4 @@ @@ -1,5 +1,4 @@
import CONST_VAR from '../../utils/const_var'
import posts6 from '@/assets/data/posts6.json'
export default {
videos: [],

2
src/components/AutoInput.vue

@ -28,7 +28,7 @@ export default { @@ -28,7 +28,7 @@ export default {
return {}
},
methods: {
changeText(e) {
changeText() {
this.$emit('update:modelValue', this.$el.innerText)
}
}

6
src/components/Footer.vue → src/components/BaseFooter.vue

@ -27,7 +27,7 @@ @@ -27,7 +27,7 @@
import bus, { EVENT_KEY } from '../utils/bus'
export default {
name: 'Footer',
name: 'BaseFooter',
props: ['initTab', 'isWhite'],
data() {
return {
@ -39,8 +39,8 @@ export default { @@ -39,8 +39,8 @@ export default {
},
created() {
bus.on('setFooterVisible', (e) => (this.visible = e))
bus.on(EVENT_KEY.ENTER_FULLSCREEN, (e) => (this.visible = false))
bus.on(EVENT_KEY.EXIT_FULLSCREEN, (e) => (this.visible = true))
bus.on(EVENT_KEY.ENTER_FULLSCREEN, () => (this.visible = false))
bus.on(EVENT_KEY.EXIT_FULLSCREEN, () => (this.visible = true))
},
unmounted() {
bus.off(EVENT_KEY.ENTER_FULLSCREEN)

2
src/components/Mask.vue → src/components/BaseMask.vue

@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
//使FromBottomDialog.vuejs appenddom
//使app
export default {
name: 'Mask',
name: 'BaseMask',
props: {
mode: {
type: String,

9
src/components/Call.vue

@ -77,7 +77,12 @@ export default { @@ -77,7 +77,12 @@ export default {
name: 'Call',
components: {},
props: {
modelValue: false
modelValue: {
type: Boolean,
default() {
return false
}
}
},
data() {
return {
@ -118,7 +123,7 @@ export default { @@ -118,7 +123,7 @@ export default {
this.callFloatLeft = e.touches[0].pageX - 35
this.callFloatTop = e.touches[0].pageY - 40
},
touchend(e) {
touchend() {
this.callFloatTransitionTime = 300
if (this.callFloatLeft < this.width / 2) {
this.callFloatLeft = 15

20
src/components/Comment.vue

@ -23,7 +23,8 @@ @@ -23,7 +23,8 @@
<div class="comment">
<div class="wrapper" v-if="comments.length">
<div class="items">
<div class="item" v-for="item in comments" v-longpress="(e) => showOptions(item)">
<div class="item" :key="i" v-for="(item, i) in comments">
<!-- v-longpress="(e) => showOptions(item)"-->
<div class="main">
<div class="content">
<img :src="_checkImgUrl(item.avatar)" alt="" class="head-image" />
@ -69,7 +70,7 @@ @@ -69,7 +70,7 @@
</div>
<div class="replies" v-if="Number(item.sub_comment_count)">
<template v-if="item.showChildren">
<div class="reply" v-for="child in item.children">
<div class="reply" :key="i" v-for="(child, i) in item.children">
<!-- v-longpress="e => showOptions(child)"-->
<div class="content">
<img :src="_checkImgUrl(child.avatar)" alt="" class="head-image" />
@ -129,12 +130,12 @@ @@ -129,12 +130,12 @@
</div>
<Loading v-else style="position: absolute" />
<transition name="fade">
<Mask v-if="isCall" mode="lightgray" @click="isCall = false" />
<BaseMask v-if="isCall" mode="lightgray" @click="isCall = false" />
</transition>
<div class="input-toolbar">
<transition name="fade">
<div class="call-friend" v-if="isCall">
<div class="friend" v-for="item in friends.all" @click="toggleCall(item)">
<div class="friend" :key="i" v-for="(item, i) in friends.all" @click="toggleCall(item)">
<img
:style="item.select ? 'opacity: .5;' : ''"
class="avatar"
@ -179,12 +180,10 @@ import Search from './Search' @@ -179,12 +180,10 @@ import Search from './Search'
import { $no, _checkImgUrl, _formatNumber, sampleSize } from '@/utils'
import { useBaseStore } from '@/store/pinia'
import { videoComments } from '@/api/videos'
import Popover from '@/pages/login/components/Tooltip.vue'
export default {
name: 'Comment',
components: {
Popover,
AutoInput,
ConfirmDialog,
FromBottomDialog,
@ -192,7 +191,12 @@ export default { @@ -192,7 +191,12 @@ export default {
Search
},
props: {
modelValue: false,
modelValue: {
type: Boolean,
default() {
return false
}
},
videoId: {
type: String,
default: null
@ -300,7 +304,6 @@ export default { @@ -300,7 +304,6 @@ export default {
row.user_digged = !row.user_digged
},
showOptions(row) {
return
this.$showSelectDialog(this.options, (e) => {
if (e.id === 1) {
this.selectRow = row
@ -437,6 +440,7 @@ export default { @@ -437,6 +440,7 @@ export default {
span {
margin-right: 5rem;
}
svg {
font-size: 10rem;
}

8
src/components/DouyinCode.vue

@ -49,7 +49,12 @@ export default { @@ -49,7 +49,12 @@ export default {
name: 'DouyinCode',
props: {
item: {},
modelValue: false
modelValue: {
type: Boolean,
default() {
return false
}
}
},
data() {
return {}
@ -108,6 +113,7 @@ export default { @@ -108,6 +113,7 @@ export default {
-webkit-line-clamp: 1; //
}
}
.code {
width: 60rem;
}

2
src/components/Posters.vue

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
<template>
<div class="posters">
<div class="poster-item" v-for="(i, index) in list" @click="goDetail(index)">
<div class="poster-item" :key="index" v-for="(i, index) in list" @click="goDetail(index)">
<img class="poster" v-lazy="_checkImgUrl(i.video.cover.url_list[0])" alt="" />
<div class="num" v-if="mode === 'normal'">
<Icon icon="icon-park-outline:like" />

2
src/components/Search.vue

@ -30,7 +30,7 @@ @@ -30,7 +30,7 @@
</template>
<script>
//TODO 
//TODO
export default {
name: 'Search',
props: {

40
src/components/Share.vue

@ -16,7 +16,12 @@ @@ -16,7 +16,12 @@
<dy-back mode="light" img="close" direction="right" @click.stop="closeShare"></dy-back>
</div>
<div class="friends list">
<div class="option" v-for="item in friends.all" @click.stop="toggleCall(item)">
<div
class="option"
:key="i"
v-for="(item, i) in friends.all"
@click.stop="toggleCall(item)"
>
<img
:style="item.select ? 'opacity: .5;' : ''"
class="avatar"
@ -137,39 +142,48 @@ @@ -137,39 +142,48 @@
<script>
import { mapState } from 'pinia'
import Check from './Check'
import FromBottomDialog from './dialog/FromBottomDialog'
import DouyinCode from './DouyinCode'
import { useBaseStore } from '@/store/pinia'
import { $no, _copy } from '@/utils'
export default {
name: 'Share',
components: {
FromBottomDialog,
Check,
DouyinCode
FromBottomDialog
},
props: {
modelValue: false,
modelValue: {
type: Boolean,
default() {
return false
}
},
item: {},
videoId: {
type: String,
default: null
default() {
return null
}
},
pageId: {
type: String,
default: 'home-index'
default() {
return 'home-index'
}
},
canDownload: {
type: Boolean,
default: true
default() {
return true
}
},
mode: {
type: String,
default: 'video'
//music
//qrcode
default() {
return 'video'
//music
//qrcode
}
}
},
computed: {

28
src/components/UserPanel.vue

@ -141,7 +141,7 @@ @@ -141,7 +141,7 @@
</div>
<div class="other">
<div class="scroll-x" @touchmove="stop">
<div class="item" v-for="item in props.currentItem.author.card_entries">
<div class="item" :key="i" v-for="(item, i) in props.currentItem.author.card_entries">
<img :src="_checkImgUrl(item.icon_dark.url_list[0])" alt="" />
<div class="right">
<div class="top">{{ item.title }}</div>
@ -157,6 +157,7 @@ @@ -157,6 +157,7 @@
class="follow-wrapper"
:class="props.currentItem.author.follow_status ? 'follow-wrapper-followed' : ''"
>
<!-- eslint-disable-next-line vue/no-mutating-props-->
<div class="no-follow" @click="props.currentItem.author.follow_status = 1">
<img src="@/assets/img/icon/add-white.png" alt="" />
<span>关注</span>
@ -193,7 +194,7 @@ @@ -193,7 +194,7 @@
<img src="@/assets/img/icon/about-gray.png" />
</div>
<div class="friends" @touchmove="stop">
<div class="friend" v-for="item in baseStore.friends.all">
<div class="friend" :key="i" v-for="(item, i) in baseStore.friends.all">
<img
:style="item.select ? 'opacity: .5;' : ''"
class="avatar"
@ -238,9 +239,8 @@ import { useNav } from '@/utils/hooks/useNav' @@ -238,9 +239,8 @@ import { useNav } from '@/utils/hooks/useNav'
import Posters from '@/components/Posters'
import { DefaultUser } from '@/utils/const_var'
import Loading from '@/components/Loading.vue'
import { FILE_URL } from '@/config'
import { useBaseStore } from '@/store/pinia'
import { userinfo, userVideoList } from '@/api/user'
import { userVideoList } from '@/api/user'
const $nav = useNav()
const baseStore = useBaseStore()
@ -248,14 +248,18 @@ const emit = defineEmits(['update:currentItem', 'back']) @@ -248,14 +248,18 @@ const emit = defineEmits(['update:currentItem', 'back'])
const props = defineProps({
currentItem: {
type: Object,
default: {
author: DefaultUser,
aweme_list: []
default() {
return {
author: DefaultUser,
aweme_list: []
}
}
},
active: {
type: Boolean,
default: false
default() {
return false
}
}
})
const main = ref(null)
@ -308,7 +312,7 @@ watch( @@ -308,7 +312,7 @@ watch(
watch(
() => props.currentItem.author.uid,
async (newVal) => {
async () => {
if (props.currentItem.author.uid !== state.uid) {
state.uid = props.currentItem.author.uid
emit('update:currentItem', Object.assign(props.currentItem, { aweme_list: [] }))
@ -322,9 +326,7 @@ function stop(e) { @@ -322,9 +326,7 @@ function stop(e) {
function followButton() {}
function back() {}
function scroll(e) {
function scroll() {
// console.log('scroll', page.value.scrollTop)
let scrollTop = page.value.scrollTop
let totalY = total.value.getBoundingClientRect().y
@ -366,7 +368,7 @@ function touchMove(e) { @@ -366,7 +368,7 @@ function touchMove(e) {
}
}
function touchEnd(e) {
function touchEnd() {
if (state.isTop) {
state.isTop = false
cover.value.style.transition = 'all .3s'

2
src/components/dialog/FromBottomDialog.vue

@ -160,7 +160,7 @@ export default { @@ -160,7 +160,7 @@ export default {
this.$setCss(this.$refs.dialog, 'transform', `translate3d(0,${this.moveYDistance}px,0)`)
}
},
end(e) {
end() {
//
if (Date.now() - this.startTime < 150 && Math.abs(this.moveYDistance) < 30) {
return

2
src/components/dialog/SelectDialog.vue

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
<template>
<div class="SelectDialog" @click="$emit('cancel')">
<div class="content">
<div class="item" v-for="item in list" @click.stop="$emit('ok', item)">
<div class="item" :key="i" v-for="(item, i) in list" @click.stop="$emit('ok', item)">
{{ item.name }}
</div>
</div>

6
src/components/slide/BVideo.vue

@ -185,7 +185,7 @@ export default { @@ -185,7 +185,7 @@ export default {
this.currentTime = Math.ceil(e.target.currentTime)
this.playX = (this.currentTime - 1) * this.step
}
video.addEventListener('loadedmetadata', (e) => {
video.addEventListener('loadedmetadata', () => {
this.videoScreenHeight = video.videoHeight / (video.videoWidth / this.width)
this.duration = video.duration
this.progressBarRect = this.$refs.progress.getBoundingClientRect()
@ -193,7 +193,7 @@ export default { @@ -193,7 +193,7 @@ export default {
video.addEventListener('timeupdate', fun)
})
let eventTester = (e, t) => {
let eventTester = (e) => {
video.addEventListener(
e,
() => {
@ -287,7 +287,7 @@ export default { @@ -287,7 +287,7 @@ export default {
this.commentVisible = true
}
},
onCloseComments(id) {
onCloseComments() {
if (this.commentVisible) {
Utils.$setCss(this.$refs.video, 'transition-duration', `300ms`)
Utils.$setCss(this.$refs.video, 'height', '100%')

2
src/components/slide/Indicator.vue

@ -63,7 +63,7 @@ export default { @@ -63,7 +63,7 @@ export default {
style={{
width: this.tabStyleWidth || 100 / this.tabTexts.length + '%'
}}
onClick={(e) => this.changeIndex(index)}
onClick={() => this.changeIndex(index)}
>
<span> {item}</span>
</div>

2
src/components/slide/IndicatorLight.vue

@ -63,7 +63,7 @@ export default { @@ -63,7 +63,7 @@ export default {
style={{
width: this.tabStyleWidth || 100 / this.tabTexts.length + '%'
}}
onClick={(e) => this.changeIndex(index)}
onClick={( ) => this.changeIndex(index)}
>
<span> {item}</span>
</div>

1
src/components/slide/ItemDesc.vue

@ -1,6 +1,5 @@ @@ -1,6 +1,5 @@
<script setup>
import { reactive } from 'vue'
import bus from '../../utils/bus'
const props = defineProps({
item: {

2
src/components/slide/ItemToolbar.vue

@ -1,7 +1,6 @@ @@ -1,7 +1,6 @@
<script setup>
import BaseMusic from '../BaseMusic'
import Utils from '../../utils'
import { reactive } from 'vue'
import bus, { EVENT_KEY } from '@/utils/bus'
import { Icon } from '@iconify/vue'
@ -26,7 +25,6 @@ const props = defineProps({ @@ -26,7 +25,6 @@ const props = defineProps({
}
})
const emit = defineEmits(['update:item', 'goUserInfo', 'showComments', 'showShare', 'goMusic'])
const state = reactive({})
function loved() {
Utils.updateItem(props, 'isLoved', !props.item.isLoved, emit)

25
src/components/slide/SlideAlbum.vue

@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
@touchmove="touchMove"
@touchend="touchEnd"
>
<div class="img-slide-item" v-for="(img, index) in item.imgs">
<div class="img-slide-item" :key="index" v-for="(img, index) in item.imgs">
<img :ref="(e) => setItemRef(e, 'itemRefs')" :src="img + '&d=' + index" />
</div>
</div>
@ -40,7 +40,7 @@ @@ -40,7 +40,7 @@
@touchmove="progressBarTouchMove"
@touchend="progressBarTouchMEnd"
>
<div class="bar" v-for="(img, index) in item.imgs">
<div class="bar" :key="index" v-for="(img, index) in item.imgs">
<div class="progress" :style="getWidth(index)"></div>
</div>
</div>
@ -50,6 +50,7 @@ @@ -50,6 +50,7 @@
<img
:src="img + '&d=' + index"
:class="{ 'preview-img': index === state.localIndex }"
:key="index"
v-for="(img, index) in props.item.imgs"
:ref="(e) => setItemRef(e, 'previewImgs')"
/>
@ -86,19 +87,19 @@ @@ -86,19 +87,19 @@
<script setup lang="jsx">
import enums from '../../utils/enums'
import Utils, { $no, $notice } from '../../utils'
import Utils from '../../utils'
import GM, { $notice } from '../../utils'
import { mat4 } from 'gl-matrix'
import { Icon } from '@iconify/vue'
import {
onMounted,
nextTick,
onBeforeUpdate,
onMounted,
onUnmounted,
provide,
reactive,
ref,
watch,
computed,
provide,
nextTick,
onUnmounted
watch
} from 'vue'
import {
getSlideDistance,
@ -111,9 +112,9 @@ import { @@ -111,9 +112,9 @@ import {
import { SlideAlbumOperationStatus, SlideItemPlayStatus, SlideType } from '../../utils/const_var'
import ItemToolbar from './ItemToolbar'
import ItemDesc from './ItemDesc'
import GM from '../../utils'
import { cloneDeep } from '@/utils'
import bus, { EVENT_KEY } from '../../utils/bus'
import $ from 'jquery'
let out = new Float32Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
let ov = new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1])
@ -348,7 +349,7 @@ onBeforeUpdate(() => { @@ -348,7 +349,7 @@ onBeforeUpdate(() => {
watch(
() => state.localIndex,
(newVal) => {
() => {
GM.$setCss(wrapperEl.value, 'transition-duration', `300ms`)
GM.$setCss(
wrapperEl.value,
@ -594,7 +595,7 @@ function setItemRef(el, key) { @@ -594,7 +595,7 @@ function setItemRef(el, key) {
el && state[key].push(el)
}
function canNext(isNext, e) {
function canNext(isNext) {
let res = !(
(state.localIndex === 0 && !isNext) ||
(state.localIndex === props.item.imgs.length - 1 && isNext)

11
src/components/slide/SlideRowList.vue

@ -4,7 +4,8 @@ @@ -4,7 +4,8 @@
<div
class="bullet"
:class="{ active: currentSlideItemIndex === item - 1 }"
v-for="item in slideItems.length"
:key="i"
v-for="(item, i) in slideItems.length"
></div>
</div>
@ -23,14 +24,11 @@ @@ -23,14 +24,11 @@
<script>
import bus from '../../utils/bus'
import Loading from '../Loading'
import { useBaseStore } from '@/store/pinia'
export default {
name: 'BaseSlideList',
components: {
Loading
},
components: {},
props: {
canMove: {
type: Boolean,
@ -100,6 +98,7 @@ export default { @@ -100,6 +98,7 @@ export default {
transform: `translate3d(0, ${this.homeLoadingMoveYDistance > 60 ? 60 : this.homeLoadingMoveYDistance}px, 0)`
}
}
return {}
}
},
data() {
@ -199,7 +198,7 @@ export default { @@ -199,7 +198,7 @@ export default {
)
}
},
async checkChildren(init) {
async checkChildren() {
this.slideList = this.$refs.slideList
this.slideItems = this.slideList.children
this.wrapperWidth = this.$getCss(this.slideList, 'width')

3
src/components/slide/SlideUser.vue

@ -18,6 +18,7 @@ @@ -18,6 +18,7 @@
<div class="poster-wrapper">
<div
class="poster-item"
:key="index"
v-for="(i, index) in modelValue.videos.slice(0, 3)"
@click="globalMethods.$no"
>
@ -36,14 +37,12 @@ @@ -36,14 +37,12 @@
</div>
</template>
<script>
import Posters from '../Posters'
import globalMethods from '../../utils'
import BaseButton from '../BaseButton'
export default {
name: 'SlideUser',
components: {
Posters,
BaseButton
},
props: {

8
src/components/slide/SlideVerticalInfinite.vue

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
<script setup lang="jsx">
import { createApp, onMounted, reactive, ref, render, watch } from 'vue'
import { createApp, onMounted, reactive, ref, render as vueRender, watch } from 'vue'
import GM from '../../utils'
import {
getSlideDistance,
@ -125,7 +125,7 @@ watch( @@ -125,7 +125,7 @@ watch(
watch(
() => props.active,
(newVal, oldVal) => {
(newVal) => {
if (newVal && !props.list.length) {
return emit('refresh')
}
@ -206,10 +206,10 @@ function getInsEl(item, index, play = false) { @@ -206,10 +206,10 @@ function getInsEl(item, index, play = false) {
if (import.meta.env.PROD) {
parent.classList.add('slide-item')
parent.setAttribute('data-index', index)
render(slideVNode, parent)
vueRender(slideVNode, parent)
appInsMap.set(index, {
unmount: () => {
render(null, parent)
vueRender(null, parent)
parent.remove()
}
})

12
src/mock/index.js

@ -1,12 +1,10 @@ @@ -1,12 +1,10 @@
import resource from '../assets/data/resource.js'
import posts6 from '@/assets/data/posts6.json'
import { _copy, cloneDeep, random, sampleSize } from '@/utils'
import { cloneDeep, random } from '@/utils'
import { BASE_URL, FILE_URL } from '@/config'
import { useBaseStore } from '@/store/pinia'
import axiosInstance from '@/utils/request'
import MockAdapter from 'axios-mock-adapter'
import Mock from 'mockjs'
import { panel } from '@/api/user'
const mock = new MockAdapter(axiosInstance, { delayResponse: 300 })
@ -24,6 +22,7 @@ let allRecommendVideos = posts6.map((v) => { @@ -24,6 +22,7 @@ let allRecommendVideos = posts6.map((v) => {
})
// console.log('allRecommendVideos', allRecommendVideos)
// eslint-disable-next-line no-unused-vars
let t = [
{
type: 'imgs',
@ -47,6 +46,7 @@ let t = [ @@ -47,6 +46,7 @@ let t = [
}
}
]
// allRecommendVideos.unshift(...t)
// {
// type: 'user-imgs',
@ -210,7 +210,7 @@ export async function startMock() { @@ -210,7 +210,7 @@ export async function startMock() {
]
})
mock.onGet(/user\/collect/).reply(async (config) => {
mock.onGet(/user\/collect/).reply(async () => {
return [
200,
{
@ -240,7 +240,7 @@ export async function startMock() { @@ -240,7 +240,7 @@ export async function startMock() {
return [200, { code: 500 }]
})
mock.onGet(/user\/panel/).reply(async (config) => {
mock.onGet(/user\/panel/).reply(async () => {
let r2 = await fetch(BASE_URL + '/data/users.json')
let v = await r2.json()
// let item = v.find(a => a.uid === '68310389333')
@ -252,7 +252,7 @@ export async function startMock() { @@ -252,7 +252,7 @@ export async function startMock() {
return [200, { code: 500 }]
})
mock.onGet(/user\/friends/).reply(async (config) => {
mock.onGet(/user\/friends/).reply(async () => {
let r2 = await fetch(BASE_URL + '/data/users.json')
let v = await r2.json()
return [200, { data: v, code: 200 }]

2
src/pages/home/LivePage.vue

@ -68,7 +68,7 @@ @@ -68,7 +68,7 @@
>欢迎来到直播间抖音严禁未成年人直播或打赏直接间内严禁出现违法违规低俗色情吸烟酗酒等内容如主播在直播过程中以不当方式诱导打赏私下交易请谨慎判断以防人身财产损失请大家注意财产安全谨防网络诈骗</span
>
</div>
<div class="comment" v-for="i in list">
<div class="comment" :key="j" v-for="(i, j) in list">
<div class="level">
<div class="wrapper">
<img src="../../assets/img/icon/home/level.webp" alt="" />

5
src/pages/home/Music.vue

@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
</div>
</transition>
<div class="right">
<!-- TODO 没有淡入淡出的特效-->
<!-- TODO 没有淡入淡出的特效-->
<template v-if="isFixed">
<img
class="star"
@ -110,7 +110,6 @@ import Share from '../../components/Share' @@ -110,7 +110,6 @@ import Share from '../../components/Share'
import DouyinCode from '../../components/DouyinCode'
import ConfirmDialog from '../../components/dialog/ConfirmDialog'
import ShareToFriend from './components/ShareToFriend'
import resource from '../../assets/data/resource'
import { myVideo } from '@/api/videos'
export default {
@ -157,7 +156,7 @@ export default { @@ -157,7 +156,7 @@ export default {
}
},
watch: {
shareType(newVal, oldVal) {
shareType(newVal) {
if (newVal === -1) return
this.showSharePassword = true
switch (newVal) {

21
src/pages/home/MusicRankList.vue

@ -20,7 +20,12 @@ @@ -20,7 +20,12 @@
<SlideHorizontal name="musicRankList" v-model:index="contentIndex">
<SlideItem>
<div class="list">
<div class="item" v-for="(item, index) in hotList" @click="togglePlay(item, hotList)">
<div
class="item"
:key="index"
v-for="(item, index) in hotList"
@click="togglePlay(item, hotList)"
>
<div class="top">
<div class="rank-wrapper">
<img
@ -108,7 +113,12 @@ @@ -108,7 +113,12 @@
</SlideItem>
<SlideItem>
<div class="list">
<div class="item" v-for="(item, index) in hotList" @click="togglePlay(item, hotList)">
<div
class="item"
:key="index"
v-for="(item, index) in hotList"
@click="togglePlay(item, hotList)"
>
<div class="top">
<div class="rank-wrapper">
<img
@ -196,7 +206,12 @@ @@ -196,7 +206,12 @@
</SlideItem>
<SlideItem>
<div class="list">
<div class="item" v-for="(item, index) in hotList" @click="togglePlay(item, hotList)">
<div
class="item"
:key="index"
v-for="(item, index) in hotList"
@click="togglePlay(item, hotList)"
>
<div class="top">
<div class="rank-wrapper">
<img

1
src/pages/home/Publish.vue

@ -62,6 +62,7 @@ function getUserMedia(constrains, success, error) { @@ -62,6 +62,7 @@ function getUserMedia(constrains, success, error) {
navigator.webkitGetUserMedia(constrains).then(success).catch(error)
} else if (navigator.mozGetUserMedia) {
//Firefox
// eslint-disable-next-line no-undef
navagator.mozGetUserMedia(constrains).then(success).catch(error)
} else if (navigator.getUserMedia) {
//API

16
src/pages/home/SearchPage.vue

@ -2,11 +2,11 @@ @@ -2,11 +2,11 @@
<div class="Search">
<div class="header">
<dy-back mode="light" @click="$back" class="mr1r"></dy-back>
<BSearch placeholder="搜索用户名字/抖音号" :isShowRightText="true" @notice="$no"> </BSearch>
<BSearch placeholder="搜索用户名字/抖音号" :isShowRightText="true" @notice="$no"></BSearch>
</div>
<div class="content">
<div class="history">
<div class="row" v-for="(item, index) in lHistory">
<div class="row" :key="index" v-for="(item, index) in lHistory">
<div class="left">
<img src="../../assets/img/icon/home/time-white.png" alt="" />
<span> {{ item }}</span>
@ -26,7 +26,7 @@ @@ -26,7 +26,7 @@
</div>
</div>
<div class="keys">
<div class="key" v-for="(item, index) in randomGuess">
<div class="key" :key="index" v-for="(item, index) in randomGuess">
<span class="desc">{{ item.name }}</span>
<img
v-if="item.type === 1"
@ -66,7 +66,7 @@ @@ -66,7 +66,7 @@
</div>
</div>
</div>
<div class="l-row" v-for="(item, index) in hotRankList">
<div class="l-row" :key="index" v-for="(item, index) in hotRankList">
<div class="rank-wrapper">
<img
v-if="index === 0"
@ -112,7 +112,7 @@ @@ -112,7 +112,7 @@
</SlideItem>
<SlideItem>
<div class="slide1" ref="slide1">
<div class="l-row" v-for="(item, index) in liveRankList">
<div class="l-row" :key="index" v-for="(item, index) in liveRankList">
<div class="rank-wrapper">
<div class="rank" :class="{ top: index < 3 }">
{{ index + 1 }}
@ -143,6 +143,7 @@ @@ -143,6 +143,7 @@
<div class="slide2" ref="slide2">
<div
class="l-row"
:key="index"
v-for="(item, index) in musicRankList"
@click="$nav('/home/music-rank-list')"
>
@ -174,13 +175,14 @@ @@ -174,13 +175,14 @@
<div
class="brand"
@click="toggleKey(key)"
:key="i"
:class="{ active: key === selectBrandKey }"
v-for="key in Object.keys(brandRankList)"
v-for="(key, i) in Object.keys(brandRankList)"
>
{{ key }}
</div>
</div>
<div class="l-row" v-for="(item, index) in selectBrandList">
<div class="l-row" :key="index" v-for="(item, index) in selectBrandList">
<div class="rank-wrapper">
<div class="rank" :class="{ top: index < 3 }">
{{ index + 1 }}

2
src/pages/home/SubmitReport.vue

@ -33,7 +33,7 @@ @@ -33,7 +33,7 @@
<div class="text-num">{{ desc.length }}/200</div>
</div>
<div class="upload-photo">
<div class="photo-wrapper" v-for="(item, index) in photos">
<div class="photo-wrapper" :key="index" v-for="(item, index) in photos">
<img class="photo" :src="item" alt="" />
<img
class="close"

17
src/pages/home/components/FollowSetting.vue

@ -91,13 +91,20 @@ export default { @@ -91,13 +91,20 @@ export default {
props: {
currentItem: {
type: Object,
default: {
user: DefaultUser,
isRequest: false,
post: []
default() {
return {
user: DefaultUser,
isRequest: false,
post: []
}
}
},
modelValue: false
modelValue: {
type: Boolean,
default() {
return false
}
}
},
data() {
return {

17
src/pages/home/components/FollowSetting2.vue

@ -55,13 +55,20 @@ export default { @@ -55,13 +55,20 @@ export default {
props: {
currentItem: {
type: Object,
default: {
user: DefaultUser,
isRequest: false,
post: []
default() {
return {
user: DefaultUser,
isRequest: false,
post: []
}
}
},
modelValue: false
modelValue: {
type: Boolean,
default() {
return false
}
}
},
data() {
return {

8
src/pages/home/components/IndicatorHome.vue

@ -63,7 +63,12 @@ export default { @@ -63,7 +63,12 @@ export default {
Loading
},
props: {
loading: false,
loading: {
type: Boolean,
default() {
return false
}
},
//slidListslidListindicator
name: {
type: String,
@ -142,6 +147,7 @@ export default { @@ -142,6 +147,7 @@ export default {
transform: this.transform
}
}
return {}
}
},
created() {},

9
src/pages/home/components/PlayFeedback.vue

@ -165,13 +165,18 @@ import Check from '../../../components/Check' @@ -165,13 +165,18 @@ import Check from '../../../components/Check'
export default {
name: 'Test',
props: {
modelValue: false
modelValue: {
type: Boolean,
default() {
return false
}
}
},
components: {
Check
},
watch: {
modelValue(newVal) {
modelValue() {
this.type1 = false
this.type2 = false
this.type3 = false

15
src/pages/home/components/ShareTo.vue

@ -46,8 +46,8 @@ @@ -46,8 +46,8 @@
发送视频到微博
</dy-button>
<dy-button v-if="!showDownload" class="mt1r" type="white" @click="$no"
>复制口令发给好友</dy-button
>
>复制口令发给好友
</dy-button>
</template>
<template v-else>
@ -96,7 +96,12 @@ @@ -96,7 +96,12 @@
</template>
</div>
<div class="dialog-friends">
<div class="dialog-friend" v-for="item in localFriends.all" @click="share(item)">
<div
class="dialog-friend"
:key="i"
v-for="(item, i) in localFriends.all"
@click="share(item)"
>
<img :src="$imgPreview(item.avatar)" alt="" />
<div class="right">
<span>{{ item.name }}</span>
@ -141,7 +146,7 @@ export default { @@ -141,7 +146,7 @@ export default {
}
},
watch: {
type(newVal, oldVal) {
type(newVal) {
this.change(newVal)
},
showShareDialog() {
@ -203,7 +208,7 @@ export default { @@ -203,7 +208,7 @@ export default {
this.$emit('update:type', -1)
},
downloadVideo() {
return new Promise((resolve, reject) => {
return new Promise((resolve) => {
this.progress = 0
this.downloading = true
let time = setInterval(() => {

22
src/pages/home/components/ShareToFriend.vue

@ -20,7 +20,12 @@ @@ -20,7 +20,12 @@
/>
<template v-if="searchKey">
<div class="friend-list" v-if="searchResult.length">
<div class="friend-item" v-for="item in searchResult" @click="handleClick2(item)">
<div
class="friend-item"
:key="i"
v-for="(item, i) in searchResult"
@click="handleClick2(item)"
>
<img class="left" v-lazy="$imgPreview(item.avatar)" alt="" />
<div class="right">
<div class="info">
@ -54,7 +59,7 @@ @@ -54,7 +59,7 @@
</div>
<div class="friend-list">
<div class="index">所有朋友</div>
<div class="friend-item" v-for="item in localFriends">
<div class="friend-item" :key="i" v-for="(item, i) in localFriends">
<img class="left" v-lazy="$imgPreview(item.avatar)" alt="" />
<div class="right">
<span>{{ item.name }}</span>
@ -74,7 +79,7 @@ @@ -74,7 +79,7 @@
</div>
<div class="chat-list">
<div class="chat-item" v-for="item in localFriends">
<div class="chat-item" :key="i" v-for="(item, i) in localFriends">
<img class="left" v-lazy="$imgPreview(item.avatar)" alt="" />
<div class="right">
<div class="title">
@ -95,7 +100,6 @@ @@ -95,7 +100,6 @@
import FromBottomDialog from '../../../components/dialog/FromBottomDialog'
import { mapState } from 'pinia'
import Search from '../../../components/Search'
import Check from '../../../components/Check'
import { useBaseStore } from '@/store/pinia'
/*
分享给朋友
@ -104,11 +108,15 @@ export default { @@ -104,11 +108,15 @@ export default {
name: 'ShareTo',
components: {
FromBottomDialog,
Search,
Check
Search
},
props: {
modelValue: false,
modelValue: {
type: Boolean,
default() {
return false
}
},
pageId: {
type: String,
default: 'home-index'

10
src/pages/home/components/VideoShare.vue

@ -54,7 +54,7 @@ @@ -54,7 +54,7 @@
<to-share item-type="code" @click="$no" />
</div>
<div class="friends">
<div class="item" v-for="item in friends.all">
<div class="item" :key="i" v-for="(item, i) in friends.all">
<img class="left" v-lazy="$imgPreview(item.avatar)" alt="" />
<div class="right">
<span>{{ item.name }}</span>
@ -87,7 +87,6 @@ export default { @@ -87,7 +87,6 @@ export default {
name: 'Share',
components: {
FromBottomDialog,
LoadingCircle,
// DouyinCode,
ToShare: {
components: {
@ -200,7 +199,12 @@ export default { @@ -200,7 +199,12 @@ export default {
}
},
props: {
modelValue: false,
modelValue: {
type: Boolean,
default() {
return false
}
},
videoId: {
type: String,
default: null

16
src/pages/home/index.vue

@ -46,7 +46,7 @@ @@ -46,7 +46,7 @@
</div>
</div>
<div class="content">
<div class="item avatar" @click="$no" v-for="i in 6">
<div class="item avatar" @click="$no" :key="i" v-for="i in 6">
<img
src="https://img.tol.vip/avatar/WEIXIN/3aSuTGYTzjHvcHy0y0tH1eiShKRk9Sgd.jpg?_upt=de4a5c251709635127"
/>
@ -123,8 +123,8 @@ @@ -123,8 +123,8 @@
<Slide4 :active="state.navIndex === 4 && state.baseIndex === 1" />
</SlideHorizontal>
<Footer v-bind:init-tab="1" />
<Mask
<BaseFooter v-bind:init-tab="1" />
<BaseMask
v-if="state.baseIndex === 0"
@click="state.baseIndex = 1"
mode="white"
@ -278,25 +278,25 @@ function setCurrentItem(item) { @@ -278,25 +278,25 @@ function setCurrentItem(item) {
}
onMounted(() => {
bus.on(EVENT_KEY.ENTER_FULLSCREEN, (e) => {
bus.on(EVENT_KEY.ENTER_FULLSCREEN, () => {
if (!state.active) return
state.fullScreen = true
})
bus.on(EVENT_KEY.EXIT_FULLSCREEN, (e) => {
bus.on(EVENT_KEY.EXIT_FULLSCREEN, () => {
if (!state.active) return
state.fullScreen = false
})
bus.on(EVENT_KEY.OPEN_COMMENTS, (e) => {
bus.on(EVENT_KEY.OPEN_COMMENTS, () => {
if (!state.active) return
bus.emit(EVENT_KEY.ENTER_FULLSCREEN)
state.commentVisible = true
})
bus.on(EVENT_KEY.CLOSE_COMMENTS, (e) => {
bus.on(EVENT_KEY.CLOSE_COMMENTS, () => {
if (!state.active) return
bus.emit(EVENT_KEY.EXIT_FULLSCREEN)
state.commentVisible = false
})
bus.on(EVENT_KEY.SHOW_SHARE, (e) => {
bus.on(EVENT_KEY.SHOW_SHARE, () => {
if (!state.active) return
state.isSharing = true
})

1
src/pages/home/slide/Community.vue

@ -56,6 +56,7 @@ import ScrollList from '@/components/ScrollList.vue' @@ -56,6 +56,7 @@ import ScrollList from '@/components/ScrollList.vue'
import { useBaseStore } from '@/store/pinia'
import AlbumDetail from '@/pages/other/AlbumDetail.vue'
import Mock from 'mockjs'
import $ from 'jquery'
//@click="nav('album-detail',{},item)"

16
src/pages/home/slide/LongVideo.vue

@ -1,23 +1,14 @@ @@ -1,23 +1,14 @@
<script setup>
import { onMounted, reactive, ref, watch } from 'vue'
import { reactive, ref, watch } from 'vue'
import { _checkImgUrl, _duration, _formatNumber } from '@/utils'
import { recommendedVideo } from '@/api/videos'
import { useBaseStore } from '@/store/pinia'
import ScrollList from '@/components/ScrollList.vue'
import { useNav } from '@/utils/hooks/useNav'
const baseStore = useBaseStore()
const props = defineProps({
active: Boolean
})
const p = {
onShowComments() {
console.log('onShowComments')
}
}
const playingEl = ref()
const state = reactive({
show: false,
@ -52,7 +43,7 @@ watch( @@ -52,7 +43,7 @@ watch(
const obList = []
const vIsCanPlay = {
mounted(el, binding, vnode, prevVnode) {
mounted(el) {
const observer = new IntersectionObserver(
(entries) => {
if (entries[0].isIntersecting) {
@ -76,7 +67,7 @@ const vIsCanPlay = { @@ -76,7 +67,7 @@ const vIsCanPlay = {
observer.observe(el)
obList.push(observer)
},
unmounted(el, binding, vnode, prevVnode) {
unmounted() {
obList.map((v) => {
v.disconnect()
})
@ -99,6 +90,7 @@ const nav = useNav() @@ -99,6 +90,7 @@ const nav = useNav()
i % 9 === 0 ? '' : i % 2 === 1 && 'l',
i % 9 === 0 ? '' : i % 2 === 0 && 'r'
]"
:key="i"
v-for="(item, i) in list"
>
<div class="video-wrapper" v-if="i % 9 === 0">

7
src/pages/home/slide/Slide0.vue

@ -77,18 +77,11 @@ const props = defineProps({ @@ -77,18 +77,11 @@ const props = defineProps({
default: false
}
})
const emit = defineEmits(['update:item', 'goUserInfo', 'showComments', 'showShare', 'goMusic'])
function stop(e) {
e.stopPropagation()
}
const p = {
onShowComments() {
console.log('onShowComments')
}
}
const subTypeRef = ref(null)
const state = reactive({
index: 0,

2
src/pages/home/slide/Slide2.vue

@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
<SlideItem class="slide-item-class">
<div class="sub-type" :class="state.subTypeIsTop ? 'top' : ''" ref="subTypeRef">
<div class="card" @touchmove.capture="stop">
<div class="nav-item" v-for="i in store.users">
<div class="nav-item" :key="j" v-for="(i, j) in store.users">
<img :src="_checkImgUrl(i.avatar_168x168.url_list[0])" alt="" />
<span>{{ i.nickname }}</span>
</div>

21
src/pages/home/slide/SlideList.vue

@ -19,7 +19,6 @@ @@ -19,7 +19,6 @@
import SlideVerticalInfinite from '@/components/slide/SlideVerticalInfinite.vue'
import { onMounted, onUnmounted, reactive, ref } from 'vue'
import bus, { EVENT_KEY } from '@/utils/bus'
import { $notice } from '@/utils'
import { useSlideListItemRender } from '@/utils/hooks/useSlideListItemRender'
import { useBaseStore } from '@/store/pinia'
@ -44,7 +43,9 @@ const props = defineProps({ @@ -44,7 +43,9 @@ const props = defineProps({
},
list: {
type: Array,
default: []
default() {
return []
}
}
})
@ -94,15 +95,15 @@ async function getData(refresh = false) { @@ -94,15 +95,15 @@ async function getData(refresh = false) {
}
}
function dislike() {
listRef.value.dislike(state.list[1])
state.list[state.index] = state.list[1]
$notice('操作成功,将减少此类视频的推荐')
}
// function dislike() {
// listRef.value.dislike(state.list[1])
// state.list[state.index] = state.list[1]
// $notice('')
// }
function end() {
// this.$notice('')
}
// function end() {
// // this.$notice('')
// }
function click(uniqueId) {
if (uniqueId !== state.uniqueId) return

2
src/pages/login/Base.js

@ -14,7 +14,7 @@ export default { @@ -14,7 +14,7 @@ export default {
created() {},
methods: {
async check() {
return new Promise((resolve, reject) => {
return new Promise((resolve) => {
if (this.isAgree) {
resolve(true)
} else {

2
src/pages/login/VerificationCode.vue

@ -36,13 +36,11 @@ @@ -36,13 +36,11 @@
</div>
</template>
<script>
import Check from '../../components/Check'
import LoginInput from './components/LoginInput'
export default {
name: 'VerificationCode',
components: {
Check,
LoginInput
},
data() {

16
src/pages/login/components/LoginInput.vue

@ -68,8 +68,18 @@ @@ -68,8 +68,18 @@
export default {
name: 'LoginInput',
props: {
modelValue: '',
placeholder: '',
modelValue: {
type: String,
default() {
return ''
}
},
placeholder: {
type: String,
default() {
return ''
}
},
type: {
type: String,
default: 'phone'
@ -102,7 +112,7 @@ export default { @@ -102,7 +112,7 @@ export default {
watch: {
isSendVerificationCode: {
immediate: true,
handler(newVal, oldVal) {
handler(newVal) {
if (newVal) {
this.verificationCodeBtnText = 60
let ticker = setInterval(() => {

8
src/pages/login/countryChoose.vue

@ -51,11 +51,11 @@ @@ -51,11 +51,11 @@
<div v-if="currentFixedIndicator" class="row no-active no-padding border index fixed">
<span>{{ currentFixedIndicator }}</span>
</div>
<div v-for="(value, name) of countryOk">
<div :key="name" v-for="(value, name) of countryOk">
<div :class="name" class="row no-active no-padding border index">
<span>{{ name }}</span>
</div>
<div class="row no-active no-padding border" v-for="item of value">
<div class="row no-active no-padding border" :key="i" v-for="(item, i) of value">
<span>{{ item.name }}</span>
</div>
</div>
@ -2366,8 +2366,8 @@ export default { @@ -2366,8 +2366,8 @@ export default {
render(currentIndex)
}
})
ul.addEventListener('touchend', function ($e) {
items.forEach((el, index) => {
ul.addEventListener('touchend', function () {
items.forEach((el) => {
el.style.transform = `translate3d(0,0,0) ${resetScale}`
el.style.color = resetColor
})

15
src/pages/me/Me.vue

@ -115,7 +115,7 @@ @@ -115,7 +115,7 @@
</div>
<div class="item" v-if="userinfo.province || userinfo.city">
{{ userinfo.province }}
<template v-if="userinfo.province && userinfo.city"> - </template>
<template v-if="userinfo.province && userinfo.city"> -</template>
{{ userinfo.city }}
</div>
<div class="item" v-if="userinfo.school?.name">
@ -220,7 +220,8 @@ @@ -220,7 +220,8 @@
<div
class="item"
@click.stop="$nav('/home/music', i)"
v-for="i in videos.collect.music.list.slice(0, 3)"
:key="j"
v-for="(i, j) in videos.collect.music.list.slice(0, 3)"
>
<img class="poster" :src="$imgPreview(i.cover)" alt="" />
<div class="title">{{ i.name }}</div>
@ -233,7 +234,7 @@ @@ -233,7 +234,7 @@
</SlideItem>
</SlideRowList>
</div>
<Footer v-bind:init-tab="5" />
<BaseFooter v-bind:init-tab="5" />
<transition name="fade">
<div class="mask" v-if="baseActiveIndex === 1" @click="baseActiveIndex = 0"></div>
</transition>
@ -371,7 +372,6 @@ @@ -371,7 +372,6 @@
</template>
<script>
import Posters from '../../components/Posters'
import Footer from '../../components/Footer'
import Indicator from '../../components/slide/Indicator'
import { nextTick } from 'vue'
import { mapState } from 'pinia'
@ -379,14 +379,13 @@ import { mapState } from 'pinia' @@ -379,14 +379,13 @@ import { mapState } from 'pinia'
import bus from '../../utils/bus'
import ConfirmDialog from '../../components/dialog/ConfirmDialog'
import { $no, _checkImgUrl, _formatNumber, _getUserDouyinId } from '@/utils'
import SlideHorizontal from '@/components/slide/SlideHorizontal.vue'
import { likeVideo, myVideo, privateVideo } from '@/api/videos'
import { useBaseStore } from '@/store/pinia'
import { userCollect } from '@/api/user'
export default {
name: 'Me',
components: { Posters, Footer, Indicator, ConfirmDialog, SlideHorizontal },
components: { Posters, Indicator, ConfirmDialog },
data() {
return {
previewImg: '',
@ -508,7 +507,7 @@ export default { @@ -508,7 +507,7 @@ export default {
async getScrollAreaHeight(index = this.contentIndex) {
let scrollAreaHeight = 0
if (index === 3) {
await nextTick(async () => {
nextTick(async () => {
scrollAreaHeight = this.$refs.collect.clientHeight + 60 + 40
})
} else {
@ -638,7 +637,7 @@ export default { @@ -638,7 +637,7 @@ export default {
this.fixedLocationY = this.startLocationY = e.touches[0].pageY
this.startTime = Date.now()
},
move(e) {
move() {
// (!this.isScroll) && e.preventDefault();
},
async scroll() {

2
src/pages/me/MyCard.vue

@ -58,7 +58,7 @@ export default { @@ -58,7 +58,7 @@ export default {
}
},
watch: {
shareType(newVal, oldVal) {
shareType(newVal) {
if (newVal === -1) return
this.showSharePassword = true
switch (newVal) {

12
src/pages/me/MyMusic.vue

@ -27,7 +27,12 @@ @@ -27,7 +27,12 @@
<img class="menu" src="../../assets/img/icon/menu-white.png" alt="" />
</div>
<div class="collect-list">
<div class="item" v-for="(item, index) in collectMusic" @click="page2PlayMusic(item)">
<div
class="item"
:key="index"
v-for="(item, index) in collectMusic"
@click="page2PlayMusic(item)"
>
<div class="left">
<div class="cover-wrapper">
<img v-lazy="$imgPreview(item.cover)" alt="" class="cover" />
@ -60,6 +65,7 @@ @@ -60,6 +65,7 @@
<div class="recommend-list">
<div
class="item"
:key="index"
v-for="(item, index) in recommendMusic"
@click="page2PlayMusic(item)"
>
@ -150,9 +156,7 @@ @@ -150,9 +156,7 @@
<script>
import { mapState } from 'pinia'
import Switches from '../message/components/swtich/switches'
import SlideItemMusic from './components/SlideItemMusic'
import IndicatorLight from '../../components/slide/IndicatorLight'
import FromBottomDialog from '../../components/dialog/FromBottomDialog'
import GuessMusic from './components/GuessMusic'
import CollectMusic from './components/CollectMusic'
import Loading from '../../components/Loading'
@ -163,9 +167,7 @@ import { useBaseStore } from '@/store/pinia' @@ -163,9 +167,7 @@ import { useBaseStore } from '@/store/pinia'
export default {
name: 'MyMusic',
components: {
FromBottomDialog,
Switches,
SlideItemMusic,
IndicatorLight,
GuessMusic,
CollectMusic,

5
src/pages/me/MyRequestUpdate.vue

@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
<div class="content">
<div class="request">
<div class="list">
<div class="item" v-for="item in friends.all">
<div class="item" :key="i" v-for="(item, i) in friends.all">
<div class="left">
<img :src="$imgPreview(item.avatar)" />
<span class="name">{{ item.name }}</span>
@ -22,12 +22,11 @@ @@ -22,12 +22,11 @@
</template>
<script>
import { mapState } from 'pinia'
import FromBottomDialog from '../../components/dialog/FromBottomDialog'
import { useBaseStore } from '@/store/pinia'
export default {
name: 'MyRequestUpdate',
components: { FromBottomDialog },
components: {},
data() {
return {}
},

2
src/pages/me/RequestUpdate.vue

@ -26,7 +26,7 @@ @@ -26,7 +26,7 @@
<!-- <div class="subtitle f12">上次发布作品2020-08-01 上次开播昨天23:12</div>-->
<div class="subtitle f12">历史求更新粉丝送礼后7天未开播则退还礼物</div>
<div class="list">
<div class="item" v-for="item in friends.all">
<div class="item" :key="i" v-for="(item, i) in friends.all">
<div class="left">
<img :src="$imgPreview(item.avatar)" />
<span class="name">{{ item.name }}</span>

9
src/pages/me/collect/MusicCollect.vue

@ -7,7 +7,12 @@ @@ -7,7 +7,12 @@
</BaseHeader>
<div class="content">
<div class="list">
<div class="item" v-for="(item, index) in list" @click="togglePlay(item, list)">
<div
class="item"
v-for="(item, index) in list"
:key="index"
@click="togglePlay(item, list)"
>
<div class="music">
<div class="cover-wrapper">
<img v-lazy="$imgPreview(item.cover)" alt="" class="cover" />
@ -103,7 +108,7 @@ export default { @@ -103,7 +108,7 @@ export default {
this.getData()
},
mounted() {
this.audio.addEventListener('loadedmetadata', (e) => {
this.audio.addEventListener('loadedmetadata', () => {
this.currentItem.duration = this.audio.duration
this.step = this.bodyWidth / Math.floor(this.audio.duration)
})

1
src/pages/me/collect/VideoCollect.vue

@ -15,7 +15,6 @@ @@ -15,7 +15,6 @@
</div>
</template>
<script>
import resource from '../../../assets/data/resource'
import Posters from '../../../components/Posters'
import Scroll from '../../../components/Scroll'
import { myVideo } from '@/api/videos'

16
src/pages/me/components/CollectMusic.vue

@ -12,9 +12,10 @@ @@ -12,9 +12,10 @@
@previous="previous"
@next="next"
@slideCanMove="(e) => (this.slideCanMove = e)"
v-model="list[index]"
:model-value="list[index]"
v-model:isLoop="isLoop"
v-for="(item, index) in list"
:key="index"
/>
</SlideVertical>
<from-bottom-dialog
@ -37,9 +38,10 @@ @@ -37,9 +38,10 @@
<div class="wrapper">
<div
class="l-row"
v-for="(item, index) in list"
@click="play(index)"
:key="index"
:class="{ active: activeIndex === index }"
v-for="(item, index) in list"
>
<div class="left">
<img
@ -71,9 +73,7 @@ @@ -71,9 +73,7 @@
</template>
<script>
import FromBottomDialog from '../../../components/dialog/FromBottomDialog'
import Switches from '../../message/components/swtich/switches'
import SlideItemMusic from './SlideItemMusic'
import IndicatorLight from '../../../components/slide/IndicatorLight'
import Share from '../../../components/Share'
import ShareToFriend from '../../home/components/ShareToFriend'
import SlideVertical from '@/components/slide/SlideVertical.vue'
@ -83,16 +83,16 @@ export default { @@ -83,16 +83,16 @@ export default {
components: {
SlideVertical,
FromBottomDialog,
Switches,
SlideItemMusic,
IndicatorLight,
Share,
ShareToFriend
},
props: {
list: {
type: Array,
default: []
default() {
return []
}
},
page2SlideIndex: {
type: Number,
@ -123,7 +123,7 @@ export default { @@ -123,7 +123,7 @@ export default {
},
created() {},
watch: {
activeIndex(newVal, oldVal) {
activeIndex(newVal) {
this.itemRefs.map((ref) => {
ref.togglePlay(false)
})

14
src/pages/me/components/GuessMusic.vue

@ -12,8 +12,9 @@ @@ -12,8 +12,9 @@
@previous="previous"
@next="next"
@slideCanMove="(e) => (this.slideCanMove = e)"
v-model="list[index]"
:model-value="list[index]"
v-model:isLoop="isLoop"
:key="index"
v-for="(item, index) in list"
/>
</SlideVertical>
@ -40,6 +41,7 @@ @@ -40,6 +41,7 @@
@click="play(index)"
:class="{ active: guessSlideIndex === index }"
v-for="(item, index) in list"
:key="index"
>
<div class="left">
<img
@ -71,9 +73,7 @@ @@ -71,9 +73,7 @@
</template>
<script>
import FromBottomDialog from '../../../components/dialog/FromBottomDialog'
import Switches from '../../message/components/swtich/switches'
import SlideItemMusic from './SlideItemMusic'
import IndicatorLight from '../../../components/slide/IndicatorLight'
import Share from '../../../components/Share'
import ShareToFriend from '../../home/components/ShareToFriend'
import SlideVertical from '@/components/slide/SlideVertical.vue'
@ -83,16 +83,16 @@ export default { @@ -83,16 +83,16 @@ export default {
components: {
SlideVertical,
FromBottomDialog,
Switches,
SlideItemMusic,
IndicatorLight,
Share,
ShareToFriend
},
props: {
list: {
type: Array,
default: []
default() {
return []
}
}
},
data() {
@ -108,7 +108,7 @@ export default { @@ -108,7 +108,7 @@ export default {
}
},
watch: {
guessSlideIndex(newVal, oldVal) {
guessSlideIndex(newVal) {
this.itemRefs.map((ref) => {
ref.togglePlay(false)
})

11
src/pages/me/components/SlideItemMusic.vue

@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
</div>
<div class="lyrics-wrapper" ref="lyrics-wrapper" @click="isFullLyrics = true">
<div class="container">
<div class="lyrics" v-for="item in lyricsFullTexts">{{ item.c }}</div>
<div class="lyrics" :key="i" v-for="(item, i) in lyricsFullTexts">{{ item.c }}</div>
</div>
</div>
<!-- <div class="lyrics-mask" @click="isFullLyrics = true"></div>-->
@ -18,7 +18,7 @@ @@ -18,7 +18,7 @@
@touchmove="$emit('slideCanMove', false)"
@touchend="$emit('slideCanMove', true)"
>
<div class="item" v-for="item in lyricsFullTexts">{{ item.c }}</div>
<div class="item" :key="i" v-for="(item, i) in lyricsFullTexts">{{ item.c }}</div>
</div>
</div>
<div class="bottom">
@ -139,10 +139,11 @@ export default { @@ -139,10 +139,11 @@ export default {
created() {},
mounted() {
this.audio.src = this.modelValue.mp3
// eslint-disable-next-line no-undef
if (process.env.NODE_ENV === 'development') {
this.audio.volume = 0.2
}
this.audio.addEventListener('loadedmetadata', (e) => {
this.audio.addEventListener('loadedmetadata', () => {
this.duration = this.audio.duration
this.slideBarWidth = this.$refs.slideBar.clientWidth
this.step = this.slideBarWidth / Math.floor(this.duration)
@ -180,8 +181,8 @@ export default { @@ -180,8 +181,8 @@ export default {
}
}
})
this.audio.addEventListener('play', (e) => (this.isPlay = true))
this.audio.addEventListener('ended', (e) => {
this.audio.addEventListener('play', () => (this.isPlay = true))
this.audio.addEventListener('ended', () => {
if (this.isLoop) {
this.lastPageX = 0
this.audio.currentTime = 0

1
src/pages/me/userinfo/AddSchool.vue

@ -103,6 +103,7 @@ export default { @@ -103,6 +103,7 @@ export default {
if (this.localSchool.displayType === enums.DISPLAY_TYPE.ALL) return '公开可见'
if (this.localSchool.displayType === enums.DISPLAY_TYPE.SCHOOL) return '校友可见'
if (this.localSchool.displayType === enums.DISPLAY_TYPE.ME) return '仅自己可见'
return ''
},
school() {
return this.userinfo.school

4
src/pages/me/userinfo/ChooseCity.vue

@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
</BaseHeader>
<div class="content">
<div class="schools">
<div class="row" @click="save(item)" v-for="item in list">
<div class="row" @click="save(item)" :key="i" v-for="(item, i) in list">
<span>{{ item }}</span>
</div>
</div>
@ -56,7 +56,7 @@ export default { @@ -56,7 +56,7 @@ export default {
...mapState(useBaseStore, ['userinfo'])
},
methods: {
async save(item) {
async save() {
this.$showLoading()
let data = { ...this.userinfo, ...{ location: '中国-四川-成都' } }
this.baseStore.setUserinfo(data)

8
src/pages/me/userinfo/ChooseDepartment.vue

@ -10,7 +10,7 @@ @@ -10,7 +10,7 @@
</BaseHeader>
<div class="content">
<div class="nearby">
<div class="item" v-for="item in departments" @click="setDepartment(item)">
<div class="item" :key="i" v-for="(item, i) in departments" @click="setDepartment(item)">
{{ item }}
</div>
</div>
@ -19,13 +19,9 @@ @@ -19,13 +19,9 @@
</template>
<script>
import Search from '../../../components/Search'
export default {
name: 'ChooseSchool',
components: {
Search
},
components: {},
data() {
return {
departments: [],

6
src/pages/me/userinfo/ChooseLocation.vue

@ -26,11 +26,11 @@ @@ -26,11 +26,11 @@
<dy-back scale=".8" direction="right"></dy-back>
</div>
</div>
<div v-for="(value, name) of countryOk">
<div :key="name" v-for="(value, name) of countryOk">
<div class="row">
<span>{{ name }}</span>
</div>
<div class="row" v-for="item of value">
<div class="row" :key="i" v-for="(item, i) of value">
<span>{{ item.name }}</span>
</div>
</div>
@ -1197,7 +1197,7 @@ export default { @@ -1197,7 +1197,7 @@ export default {
}
},
methods: {
async save(item) {
async save() {
this.$showLoading()
let data = { ...this.userinfo, ...{ location: '暂不设置' } }
this.baseStore.setUserinfo(data)

2
src/pages/me/userinfo/ChooseProvince.vue

@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
</BaseHeader>
<div class="content">
<div class="schools">
<div class="row" @click="$nav('/me/choose-city')" v-for="item in list">
<div class="row" @click="$nav('/me/choose-city')" :key="i" v-for="(item, i) in list">
<span>{{ item }}</span>
<div class="right">
<dy-back scale=".8" direction="right"></dy-back>

33
src/pages/me/userinfo/ChooseSchool.vue

@ -24,31 +24,30 @@ @@ -24,31 +24,30 @@
<img src="../../../assets/img/icon/location.svg" alt="" />
<span>离我最近</span>
</div>
<div v-if="nearby.length" class="item" v-for="item in nearby" @click="setSchool(item)">
{{ item }}
</div>
<template v-if="nearby.length">
<div class="item" :key="i" v-for="(item, i) in nearby" @click="setSchool(item)">
{{ item }}
</div>
</template>
<div v-else class="item">无法获取</div>
</div>
<div class="line" style="width: calc(100% - 40rem); margin-left: 20rem"></div>
<div class="schools" v-if="!isSearch">
<div class="item" v-for="item in schools" @click="setSchool(item)">
<div class="item" :key="i" v-for="(item, i) in schools" @click="setSchool(item)">
{{ item }}
</div>
</div>
<div v-if="isSearch">
<div
v-if="searchSchools.length"
class="item"
v-for="item in searchSchools"
@click="setSchool(item)"
>
<span v-if="item.indexOf(schoolName) > -1">
{{ item.substr(0, item.indexOf(schoolName)) }}
<span style="color: #f50">{{ schoolName }}</span>
{{ item.substr(item.indexOf(schoolName) + schoolName.length) }}
</span>
<span v-else>{{ item }}</span>
</div>
<template v-if="searchSchools.length">
<div class="item" :key="i" v-for="(item, i) in searchSchools" @click="setSchool(item)">
<span v-if="item.indexOf(schoolName) > -1">
{{ item.substr(0, item.indexOf(schoolName)) }}
<span style="color: #f50">{{ schoolName }}</span>
{{ item.substr(item.indexOf(schoolName) + schoolName.length) }}
</span>
<span v-else>{{ item }}</span>
</div>
</template>
<div v-else class="empty">
<img src="../../../assets/img/icon/head-image.jpeg" alt="" />
<div class="title">搜索结果为空</div>

2
src/pages/me/userinfo/DeclareSchool.vue

@ -28,7 +28,7 @@ @@ -28,7 +28,7 @@
</template>
<script>
//TODO 
//TODO
export default {
name: 'DeclareSchool',
data() {

6
src/pages/message/AllMessage.vue

@ -71,7 +71,7 @@ @@ -71,7 +71,7 @@
<img v-lazy="_checkImgUrl(userinfo.cover_url[0].url_list[0])" alt="" class="poster" />
</div>
</div>
<div class="message" v-for="item in showMessageList" @click="$no">
<div class="message" :key="i" v-for="(item, i) in showMessageList" @click="$no">
<div class="left">
<img v-lazy="$imgPreview(item.author.avatar)" alt="" class="avatar" />
<img
@ -134,7 +134,6 @@ @@ -134,7 +134,6 @@
</template>
<script>
import { mapState } from 'pinia'
import People from '../people/components/People'
import Scroll from '../../components/Scroll'
import Loading from '../../components/Loading'
import Peoples from '../people/components/Peoples'
@ -148,7 +147,6 @@ export default { @@ -148,7 +147,6 @@ export default {
name: 'AllMessage',
components: {
Scroll,
People,
Loading,
Peoples
},
@ -175,6 +173,8 @@ export default { @@ -175,6 +173,8 @@ export default {
return '@我的'
case 4:
return '评论'
default:
return ''
}
},
showMessageList() {

10
src/pages/message/JoinedGroupChat.vue

@ -14,7 +14,12 @@ @@ -14,7 +14,12 @@
</BaseHeader>
<div class="content">
<div class="list">
<div class="local-row" v-for="item of friends.all" @click="toggleSelect(item)">
<div
class="local-row"
:key="i"
v-for="(item, i) of friends.all"
@click="toggleSelect(item)"
>
<Check mode="red" v-model="item.select" />
<img :src="$imgPreview(item.avatar)" alt="" />
<div class="desc">
@ -30,13 +35,12 @@ @@ -30,13 +35,12 @@
</div>
</template>
<script>
import Search from '../../components/Search'
import Check from '../../components/Check'
import { friends } from '@/api/user'
export default {
name: 'Share2Friend',
components: { Search, Check },
components: { Check },
props: {},
computed: {
// ...mapState(['friends']),

23
src/pages/message/Message.vue

@ -12,6 +12,7 @@ @@ -12,6 +12,7 @@
<div
class="friend pr1r pl1r"
@click="$nav('/message/chat')"
:key="index"
v-for="(item, index) in friends.all"
>
<div class="avatar" :class="index % 2 === 0 ? 'on-line' : ''">
@ -260,7 +261,8 @@ @@ -260,7 +261,8 @@
<div class="search-result" v-if="searchFriends.length">
<div
class="search-result-item"
v-for="item in searchFriends"
:key="i"
v-for="(item, i) in searchFriends"
@click="handleClick(item)"
>
<img class="left" src="../../assets/img/icon/head-image.jpeg" alt="" />
@ -295,7 +297,8 @@ @@ -295,7 +297,8 @@
<div class="index">Z</div>
<div
class="friend-item"
v-for="item in friends.all"
:key="i"
v-for="(item, i) in friends.all"
@click="item.select = !item.select"
>
<img class="left" :src="$imgPreview(item.avatar)" alt="" />
@ -318,7 +321,7 @@ @@ -318,7 +321,7 @@
</div>
<div class="chat-list">
<div class="chat-item" v-for="item in 15">
<div class="chat-item" :key="i" v-for="(item, i) in 15">
<img class="left" src="../../assets/img/icon/head-image.jpeg" alt="" />
<div class="right">
<div class="title">
@ -362,10 +365,10 @@ @@ -362,10 +365,10 @@
</Scroll>
</div>
</div>
<Mask />
<BaseMask />
</div>
</transition>
<Footer v-bind:init-tab="4" />
<BaseFooter v-bind:init-tab="4" />
</div>
<div class="searching" v-show="searching">
@ -390,7 +393,7 @@ @@ -390,7 +393,7 @@
</div>
</div>
<People
v-for="(item, index) in searchFriendsAll.slice(0, 3)"
v-for="item in searchFriendsAll.slice(0, 3)"
:key="item.id"
mode="search"
:searchKey="searchKey"
@ -411,7 +414,7 @@ @@ -411,7 +414,7 @@
</template>
<template v-else>
<div class="sub-title">更多聊天</div>
<People v-for="(item, index) in moreChat" :key="item.id" :people="item" />
<People v-for="item in moreChat" :key="item.id" :people="item" />
</template>
</div>
</div>
@ -419,13 +422,11 @@ @@ -419,13 +422,11 @@
</template>
<script>
import Footer from '../../components/Footer.vue'
import Search from '../../components/Search'
import FromBottomDialog from '../../components/dialog/FromBottomDialog'
import Check from '../../components/Check'
import { mapState } from 'pinia'
import Peoples from '../people/components/Peoples'
import Mask from '../../components/Mask'
import Scroll from '../../components/Scroll'
import People from '../people/components/People'
import BasePage from '../BasePage'
@ -436,8 +437,6 @@ export default { @@ -436,8 +437,6 @@ export default {
name: 'Message',
components: {
Scroll,
Mask,
Footer,
Search,
FromBottomDialog,
Check,
@ -474,7 +473,7 @@ export default { @@ -474,7 +473,7 @@ export default {
watch: {
createChatSearchKey(newVal) {
if (newVal) {
//TODO 
//TODO
this.searchFriends = this.friends.all.filter((v) => {
if (v.name.includes(newVal)) return true
return v.account.includes(newVal)

2
src/pages/message/MoreSearch.vue

@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
:isShowRightText="true"
/>
<People
v-for="(item, index) in searchFriendsAll"
v-for="item in searchFriendsAll"
:key="item.id"
mode="search"
:searchKey="searchKey"

7
src/pages/message/RedPacketDetail.vue

@ -27,7 +27,12 @@ export default { @@ -27,7 +27,12 @@ export default {
name: 'RedPacketDetail',
components: {},
props: {
modelValue: false
modelValue: {
type: Boolean,
default() {
return false
}
}
},
data() {
return {}

35
src/pages/message/Share2Friend.vue

@ -10,7 +10,8 @@ @@ -10,7 +10,8 @@
<div class="wrapper">
<img
:src="$imgPreview(item.avatar)"
v-for="item in selectFriends"
:key="i"
v-for="(item, i) in selectFriends"
@click="toggleSelect(item)"
/>
</div>
@ -37,7 +38,12 @@ @@ -37,7 +38,12 @@
v-show="searchKey"
>
<div class="list" v-if="searchResult.length">
<div class="local-row" v-for="item of searchResult" @click="handleClick(item)">
<div
class="local-row"
:key="i"
v-for="(item, i) of searchResult"
@click="handleClick(item)"
>
<Check mode="red" v-model="item.select" />
<img :src="$imgPreview(item.avatar)" alt="" />
<div class="desc">
@ -79,23 +85,33 @@ @@ -79,23 +85,33 @@
<dy-back :scale="0.7" direction="right"></dy-back>
</div>
<div class="title">最近聊天</div>
<div class="local-row" v-for="item of friends.recent" @click="toggleSelect(item)">
<div
class="local-row"
:key="i"
v-for="(item, i) of friends.recent"
@click="toggleSelect(item)"
>
<Check mode="red" v-model="item.select" />
<img :src="$imgPreview(item.avatar)" alt="" />
<span>{{ item.name }}</span>
</div>
<div class="title">互关好友</div>
<div class="local-row" v-for="item of friends.eachOther" @click="toggleSelect(item)">
<div
class="local-row"
:key="i"
v-for="(item, i) of friends.eachOther"
@click="toggleSelect(item)"
>
<Check mode="red" v-model="item.select" />
<img :src="$imgPreview(item.avatar)" alt="" />
<span>{{ item.name }}</span>
</div>
<div class="title">全部</div>
<div v-for="(value, name) of friendsSort">
<div :key="name" v-for="(value, name) of friendsSort">
<div :class="name === '#' ? 'top' : name" class="title">
<span>{{ name }}</span>
</div>
<div class="local-row" v-for="item of value" @click="toggleSelect(item)">
<div class="local-row" :key="i" v-for="(item, i) of value" @click="toggleSelect(item)">
<Check mode="red" v-model="item.select" />
<img :src="$imgPreview(item.avatar)" alt="" />
<span>{{ item.name }}</span>
@ -161,13 +177,12 @@ @@ -161,13 +177,12 @@
</div>
</template>
<script>
import Search from '../../components/Search'
import Check from '../../components/Check'
import { friends } from '@/api/user'
export default {
name: 'Share2Friend',
components: { Search, Check },
components: { Check },
props: {},
computed: {
// ...mapState(['friends']),
@ -231,11 +246,11 @@ export default { @@ -231,11 +246,11 @@ export default {
render(currentIndex)
}
})
ul.addEventListener('touchend', (e) => {
ul.addEventListener('touchend', () => {
return (this.currentFixedIndicator = '')
})
let render = (currentIndex) => {
items.forEach((el, index) => {
items.forEach((el) => {
el.style.color = resetColor
})
items[currentIndex].style.color = '#fff'

7
src/pages/message/chat/Chat.vue

@ -26,8 +26,8 @@ @@ -26,8 +26,8 @@
@itemClick="clickItem"
v-longpress="showTooltip"
:message="item"
:key="index"
v-for="(item, index) in messages"
:key="item"
></ChatMessage>
</div>
<div class="footer">
@ -135,7 +135,7 @@ @@ -135,7 +135,7 @@
<!-- 红包 -->
<transition name="scale">
<div class="red-packet" v-if="isShowOpenRedPacket">
<Mask @click="isShowOpenRedPacket = false" />
<BaseMask @click="isShowOpenRedPacket = false" />
<div class="content">
<template v-if="isOpened">
<img src="../../../assets/img/icon/message/chat/bg-open.png" alt="" class="bg" />
@ -184,11 +184,11 @@ @@ -184,11 +184,11 @@
<script>
import ChatMessage from '../components/ChatMessage'
import { inject, nextTick } from 'vue'
import Mask from '../../../components/Mask'
import { mapState } from 'pinia'
import Loading from '../../../components/Loading'
import { useBaseStore } from '@/store/pinia'
import { _checkImgUrl } from '@/utils'
import $ from "jquery";
let CALL_STATE = {
REJECT: 0,
@ -228,7 +228,6 @@ export default { @@ -228,7 +228,6 @@ export default {
name: 'Chat',
components: {
Loading,
Mask,
ChatMessage
},
data() {

3
src/pages/message/chat/ChatDetail.vue

@ -11,6 +11,7 @@ @@ -11,6 +11,7 @@
@follow="follow(index)"
@unfollow="unfollow(index)"
mode="normal-add-button"
:key="index"
v-for="(item, index) in list"
:people="item"
/>
@ -58,7 +59,6 @@ @@ -58,7 +59,6 @@
<script>
import Switches from '../components/swtich/switches'
import People from '../../people/components/People'
import FromBottomDialog from '../../../components/dialog/FromBottomDialog'
import BlockDialog from '../components/BlockDialog'
import CONST_VAR from '../../../utils/const_var'
@ -67,7 +67,6 @@ export default { @@ -67,7 +67,6 @@ export default {
components: {
Switches,
People,
FromBottomDialog,
BlockDialog
},
data() {

7
src/pages/message/components/BlockDialog.vue

@ -26,7 +26,12 @@ export default { @@ -26,7 +26,12 @@ export default {
FromBottomDialog
},
props: {
modelValue: false
modelValue: {
type: Boolean,
default() {
return false
}
}
},
data() {
return {}

4
src/pages/message/components/ChatMessage.vue

@ -91,6 +91,7 @@ @@ -91,6 +91,7 @@
<div class="loves" v-if="message.loved?.length">
<img src="../../../assets/img/icon/loved.svg" alt="" />
<img
:key="user"
v-for="user in message.loved"
src="../../../assets/img/icon/head-image.jpeg"
alt=""
@ -112,14 +113,17 @@ let CALL_STATE = { @@ -112,14 +113,17 @@ let CALL_STATE = {
RESOLVE: 1,
NONE: 2
}
// eslint-disable-next-line
let VIDEO_STATE = {
VALID: 0,
INVALID: 1
}
// eslint-disable-next-line
let AUDIO_STATE = {
NORMAL: 0,
SENDING: 1
}
// eslint-disable-next-line
let READ_STATE = {
SENDING: 0,
ARRIVED: 1,

4
src/pages/message/notice/DouyinHelper.vue

@ -10,8 +10,8 @@ @@ -10,8 +10,8 @@
<div class="content">
<NoMore />
<div class="list">
<!--TODO 超过3行显示全文-->
<div class="item" v-for="item in list" @click="goDetail(item)">
<!--TODO 超过3行显示全文-->
<div class="item" :key="i" v-for="(item, i) in list" @click="goDetail(item)">
<div class="title">
{{ item.title }}
<div class="ml1r not-read" v-if="!item.read"></div>

7
src/pages/message/notice/LiveNotice.vue

@ -13,7 +13,7 @@ @@ -13,7 +13,7 @@
<Scroll ref="mainScroll">
<div class="list">
<NoMore />
<div class="item" v-for="item in list" @click="goDetail(item)">
<div class="item" :key="i" v-for="(item, i) in list" @click="goDetail(item)">
<div class="title">{{ item.title }}</div>
<div class="time">{{ item.time }}</div>
<div class="content-text">{{ item.content }}</div>
@ -25,8 +25,6 @@ @@ -25,8 +25,6 @@
</template>
<script>
import { nextTick } from 'vue'
import Mask from '../../../components/Mask'
import FromBottomDialog from '../../../components/dialog/FromBottomDialog'
import Scroll from '../../../components/Scroll'
import BasePage from '../../BasePage'
@ -34,8 +32,7 @@ export default { @@ -34,8 +32,7 @@ export default {
extends: BasePage,
name: 'LiveNotice',
components: {
Scroll,
FromBottomDialog
Scroll
},
data() {
return {

4
src/pages/message/notice/MoneyNotice.vue

@ -15,8 +15,8 @@ @@ -15,8 +15,8 @@
<Scroll ref="mainScroll">
<div class="list">
<NoMore />
<!--TODO 超过3行显示全文-->
<div class="item" v-for="item in list" @click="$no">
<!--TODO 超过3行显示全文-->
<div class="item" :key="i" v-for="(item, i) in list" @click="$no">
<div class="header">
<div class="left">
<img src="../../../assets/img/icon/msg-icon9.webp" alt="" />

7
src/pages/message/notice/NoticeSetting.vue

@ -79,7 +79,12 @@ export default { @@ -79,7 +79,12 @@ export default {
name: 'NoticeSetting',
components: { Switches },
props: {
modelValue: false
modelValue: {
type: Boolean,
default() {
return false
}
}
},
data() {
return {

11
src/pages/message/notice/SystemNotice.vue

@ -15,8 +15,8 @@ @@ -15,8 +15,8 @@
<Scroll ref="mainScroll">
<div class="list">
<NoMore />
<!--TODO 超过3行显示全文-->
<div class="item" v-for="item in list" @click="goDetail(item)">
<!--TODO 超过3行显示全文-->
<div class="item" :key="i" v-for="(item, i) in list" @click="goDetail(item)">
<div class="title">
{{ item.title }}
<div class="ml1r not-read" v-if="!item.read"></div>
@ -31,7 +31,7 @@ @@ -31,7 +31,7 @@
</div>
</Scroll>
<!-- TODO 子页面未做-->
<!--TODO 子页面未做-->
<div class="hover-dialog left" v-if="isShowLeftHover">
<div class="arrow"></div>
<div class="l-row no-border" @click="$no">登录设备管理</div>
@ -45,7 +45,7 @@ @@ -45,7 +45,7 @@
<div class="l-row" @click="$no">安全课堂</div>
</div>
<Mask mode="white" v-if="isShowMask" @click="isShowMask = false" />
<BaseMask mode="white" v-if="isShowMask" @click="isShowMask = false" />
<div class="options">
<div class="option" @click="isShowLeftHover = !isShowLeftHover">
@ -65,14 +65,13 @@ @@ -65,14 +65,13 @@
</template>
<script>
import { nextTick } from 'vue'
import Mask from '../../../components/Mask'
import Scroll from '../../../components/Scroll'
import BasePage from '../../BasePage'
export default {
extends: BasePage,
name: 'SystemNotice',
components: { Mask, Scroll },
components: { Scroll },
data() {
return {
loading: false,

5
src/pages/message/notice/TaskNotice.vue

@ -13,8 +13,8 @@ @@ -13,8 +13,8 @@
<Scroll ref="mainScroll">
<div class="list">
<NoMore />
<!--TODO 超过3行显示全文-->
<div class="item" v-for="item in list" @click="goDetail(item)">
<!--TODO 超过3行显示全文-->
<div class="item" :key="i" v-for="(item, i) in list" @click="goDetail(item)">
<div class="header">
<div class="left">
<img src="../../../assets/img/icon/message/task.webp" alt="" />
@ -63,7 +63,6 @@ @@ -63,7 +63,6 @@
</template>
<script>
import { nextTick } from 'vue'
import Mask from '../../../components/Mask'
import FromBottomDialog from '../../../components/dialog/FromBottomDialog'
import Scroll from '../../../components/Scroll'
import BasePage from '../../BasePage'

11
src/pages/other/AlbumDetail.vue

@ -10,7 +10,7 @@ @@ -10,7 +10,7 @@
<div class="scroll" ref="scrollEl">
<div class="slide-imgs">
<SlideHorizontal v-model:index="state.index">
<SlideItem v-for="item in props.detail.note_card?.image_list">
<SlideItem :key="i" v-for="(item, i) in props.detail.note_card?.image_list">
<img :src="_checkImgUrl(item.info_list?.[0]?.url)" alt="" />
</SlideItem>
</SlideHorizontal>
@ -19,7 +19,8 @@ @@ -19,7 +19,8 @@
<div
class="indicator"
:class="[i <= state.index + 1 && 'active']"
v-for="i in props.detail.note_card?.image_list?.length"
:key="j"
v-for="(i, j) in props.detail.note_card?.image_list?.length"
></div>
</div>
</div>
@ -49,7 +50,11 @@ @@ -49,7 +50,11 @@
<Icon class="arrow" icon="mingcute:right-line" />
</div>
</header>
<div class="comment" v-for="i in props.detail.note_card.comment_list.slice(0, 2)">
<div
class="comment"
:key="j"
v-for="(i, j) in props.detail.note_card.comment_list.slice(0, 2)"
>
<img src="https://cdn.seovx.com/?mom=302" alt="" class="avatar" />
<span> {{ i.name }}{{ i.text }} </span>
</div>

18
src/pages/other/VideoDetail.vue

@ -129,14 +129,6 @@ const nav = useNav() @@ -129,14 +129,6 @@ const nav = useNav()
const router = useRouter()
const baseStore = useBaseStore()
const data = reactive({
dialog: {
shareToFriend: false,
permissionDialog: false,
test: false
},
isMy: false
})
const state = reactive({
baseIndex: 1,
@ -199,17 +191,17 @@ function setCurrentItem(item) { @@ -199,17 +191,17 @@ function setCurrentItem(item) {
}
onMounted(() => {
bus.on(EVENT_KEY.ENTER_FULLSCREEN, (e) => (state.fullScreen = true))
bus.on(EVENT_KEY.EXIT_FULLSCREEN, (e) => (state.fullScreen = false))
bus.on(EVENT_KEY.OPEN_COMMENTS, (e) => {
bus.on(EVENT_KEY.ENTER_FULLSCREEN, () => (state.fullScreen = true))
bus.on(EVENT_KEY.EXIT_FULLSCREEN, () => (state.fullScreen = false))
bus.on(EVENT_KEY.OPEN_COMMENTS, () => {
bus.emit(EVENT_KEY.ENTER_FULLSCREEN)
state.commentVisible = true
})
bus.on(EVENT_KEY.CLOSE_COMMENTS, (e) => {
bus.on(EVENT_KEY.CLOSE_COMMENTS, () => {
bus.emit(EVENT_KEY.EXIT_FULLSCREEN)
state.commentVisible = false
})
bus.on(EVENT_KEY.SHOW_SHARE, (e) => {
bus.on(EVENT_KEY.SHOW_SHARE, () => {
state.isSharing = true
})
bus.on(EVENT_KEY.NAV, ({ path, query }) => nav(path, query))

205
src/pages/other/VideoDetail2.vue

@ -1,205 +0,0 @@ @@ -1,205 +0,0 @@
<template>
<div id="video-detail">
<div class="search-wrapper">
<Icon class="back" icon="icon-park-outline:left" @click="$back" />
<div class="search" @click="nav('/home/search')">
<div class="left">
<Icon class="icon" icon="ion:search" />
<span>搜你想看的</span>
</div>
<div class="right">
<span class="gang">|</span>
<span class="txt">搜索</span>
</div>
</div>
</div>
<div class="content">
<SlideVerticalInfinite
ref="listRef"
v-love="state.uniqueId"
:id="state.uniqueId"
:uniqueId="state.uniqueId"
name="main"
:active="true"
:loading="false"
v-model:index="state.index"
:render="render"
:list="state.list"
/>
</div>
<div class="footer">
<div class="comment">
<div class="left">
<img
:src="_checkImgUrl(store.userinfo.avatar_168x168.url_list[0])"
class="avatar"
alt=""
/>
<span>善语结善缘恶言伤人心</span>
</div>
<div class="right">
<Icon icon="tabler:photo" />
<Icon icon="ion:at-sharp" />
<Icon icon="fa-regular:laugh" />
</div>
</div>
</div>
</div>
</template>
<script setup>
import { onMounted, reactive } from 'vue'
import { useBaseStore } from '@/store/pinia'
import SlideVerticalInfinite from '@/components/slide/SlideVerticalInfinite.vue'
import { useSlideListItemRender } from '@/utils/hooks/useSlideListItemRender'
import { _checkImgUrl } from '@/utils'
import { useNav } from '@/utils/hooks/useNav'
defineOptions({
name: 'VideoDetail'
})
const nav = useNav()
const store = useBaseStore()
const data = reactive({
dialog: {
shareToFriend: false,
permissionDialog: false,
test: false
},
isMy: false
})
const state = reactive({
index: 0,
list: [],
uniqueId: 'uniqueId_2',
totalSize: 0,
pageSize: 10,
pageNo: 0
})
const render = useSlideListItemRender()
onMounted(() => {
// console.log('s', store.routeData)
state.index = store.routeData.index
state.list = store.routeData.list
// console.log('sss', state.list[state.index])
})
</script>
<style scoped lang="less">
@import '../../assets/less/index';
#video-detail {
position: fixed;
font-size: 14rem;
top: 0;
bottom: 0;
left: 0;
right: 0;
height: 100%;
width: 100%;
background: black;
.search-wrapper {
z-index: 9;
position: fixed;
top: 8rem;
left: 0;
width: 100vw;
padding: 0 15rem;
box-sizing: border-box;
display: flex;
align-items: center;
gap: 15rem;
.back {
color: white;
font-size: 30rem;
}
.search {
color: var(--second-btn-color);
display: flex;
background: rgba(171, 169, 169, 0.4);
border-radius: 8rem;
flex: 1;
padding: 8rem;
justify-content: space-between;
.left {
font-size: 15rem;
display: flex;
align-items: center;
color: gainsboro;
gap: 5rem;
line-height: 1;
svg {
font-size: 14rem;
}
}
.right {
display: flex;
align-items: center;
gap: 10rem;
font-size: 16rem;
.gang {
color: dimgrey;
}
.txt {
color: white;
}
}
}
}
.content {
height: calc(var(--vh, 1vh) * 100 - var(--footer-height));
}
.footer {
height: var(--footer-height);
position: fixed;
bottom: 0;
width: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.comment {
color: var(--second-text-color);
z-index: 9;
width: 95%;
height: 75%;
box-sizing: border-box;
padding: 0 10px;
display: flex;
justify-content: space-between;
align-items: center;
background: rgb(37, 37, 37);
border-radius: 50rem;
.avatar {
height: 70%;
border-radius: 50%;
}
.left {
height: 100%;
display: flex;
align-items: center;
gap: 10rem;
}
.right {
.left;
gap: 15rem;
font-size: 24rem;
}
}
}
</style>

2
src/pages/people/AddressList.vue

@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@
<div class="left">已有20+位朋友加入抖音</div>
</div>
<div class="list">
<People v-for="item in list" :people="item"></People>
<People :key="i" v-for="(item, i) in list" :people="item"></People>
</div>
</div>
<div class="footer">为尊重用户选择仅展示已授权用户</div>

25
src/pages/people/FindAcquaintance.vue

@ -58,7 +58,12 @@ @@ -58,7 +58,12 @@
style="width: 10rem; margin-left: 2rem"
/>
</div>
<People v-for="item in friends.all" :people="item" mode="recommend"></People>
<People
:key="i"
v-for="(item, i) in friends.all"
:people="item"
mode="recommend"
></People>
</div>
<div class="is-search" v-else>
<div class="tooltip" v-if="searchKey && !isSearch">
@ -66,24 +71,26 @@ @@ -66,24 +71,26 @@
搜索用户名字/抖音号<span class="searchKey">{{ searchKey }}</span>
</div>
<!-- TODO -->
<People
v-if="isSearch"
v-for="item in friends.all"
:people="item"
mode="recommend"
></People>
<template v-if="isSearch">
<People
:key="i"
v-for="(item, i) in friends.all"
:people="item"
mode="recommend"
></People>
</template>
</div>
</SlideItem>
<SlideItem class="tab2" style="overflow: auto">
<Search placeholder="搜索用户备注或名字" class="mr20p ml20p mt10p"></Search>
<div class="title">{{ friends.all.length }} 位朋友</div>
<People v-for="item in friends.all" :people="item" mode="friend"></People>
<People :key="i" v-for="(item, i) in friends.all" :people="item" mode="friend"></People>
<NoMore class="mb5r" />
</SlideItem>
</SlideHorizontal>
<transition name="fade">
<Mask v-if="maskDialog" @click="maskDialog = false"></Mask>
<BaseMask v-if="maskDialog" @click="maskDialog = false"/>
</transition>
<transition name="fade">

12
src/pages/people/FollowAndFans.vue

@ -35,7 +35,7 @@ @@ -35,7 +35,7 @@
/>
<div class="is-search" v-if="searchKey">
<div class="search-result" v-if="searchFriends.length">
<People v-for="item in searchFriends" :people="item"></People>
<People :key="i" v-for="(item, i) in searchFriends" :people="item"></People>
</div>
<div class="no-result" v-else>
<img src="../../assets/img/icon/no-result.png" alt="" />
@ -45,11 +45,11 @@ @@ -45,11 +45,11 @@
</div>
<div class="no-search" v-else>
<div class="title">我的关注</div>
<People v-for="item in friends.all" :people="item"></People>
<People :key="i" v-for="(item, i) in friends.all" :people="item"></People>
</div>
</SlideItem>
<SlideItem class="tab2">
<People v-for="item in friends.all" :people="item"></People>
<People :key="i" v-for="(item, i) in friends.all" :people="item"></People>
<NoMore />
</SlideItem>
</SlideHorizontal>
@ -60,7 +60,6 @@ @@ -60,7 +60,6 @@
import People from './components/People'
import Search from '../../components/Search'
import Indicator from '../../components/slide/Indicator'
import FromBottomDialog from '../../components/dialog/FromBottomDialog'
import { mapState } from 'pinia'
import { useBaseStore } from '@/store/pinia'
@ -69,8 +68,7 @@ export default { @@ -69,8 +68,7 @@ export default {
components: {
People,
Search,
Indicator,
FromBottomDialog
Indicator
},
data() {
return {
@ -87,7 +85,7 @@ export default { @@ -87,7 +85,7 @@ export default {
watch: {
searchKey(newVal) {
if (newVal) {
//TODO 
//TODO
this.searchFriends = this.friends.all.filter((v) => {
if (v.name.includes(newVal)) return true
return v.account.includes(newVal)

6
src/pages/people/components/People.vue

@ -64,7 +64,7 @@ @@ -64,7 +64,7 @@
<template v-if="people.type === RELATE_ENUM.REQUEST_FOLLOW">
发来一个关注请求
</template>
<template v-else> 关注了你 </template>
<template v-else> 关注了你</template>
</div>
<div class="detail">07-23</div>
</div>
@ -166,7 +166,9 @@ export default { @@ -166,7 +166,9 @@ export default {
props: {
people: {
type: Object,
default: {}
default() {
return {}
}
},
mode: {
type: String,

4
src/pages/people/components/Peoples.vue

@ -43,7 +43,9 @@ export default { @@ -43,7 +43,9 @@ export default {
props: {
list: {
type: Array,
default: []
default() {
return []
}
},
mode: {
type: String,

6
src/pages/shop/GoodsDetail.vue

@ -48,7 +48,7 @@ @@ -48,7 +48,7 @@
<div class="slide-imgs">
<SlideHorizontal v-model:index="state.index">
<SlideItem v-for="item in state.detail.imgs">
<SlideItem v-for="(item, i) in state.detail.imgs" :key="i">
<img v-lazy="_checkImgUrl('goods/' + item)" alt="" />
</SlideItem>
</SlideHorizontal>
@ -264,7 +264,8 @@ @@ -264,7 +264,8 @@
v-lazy="_checkImgUrl('goods/' + i)"
alt=""
class="avatar"
v-for="i in state.detail.imgs"
:key="j"
v-for="(i, j) in state.detail.imgs"
/>
</div>
</div>
@ -275,6 +276,7 @@ @@ -275,6 +276,7 @@
class="item"
:class="activeIndexs.includes(i) && 'active'"
@click="toggle(i)"
:key="i"
v-for="(item, i) in 3"
>
<header>

9
src/pages/shop/Shop.vue

@ -108,12 +108,11 @@ @@ -108,12 +108,11 @@
</WaterfallList>
</template>
</ScrollList>
<Footer v-bind:init-tab="2" :is-white="true" style="position: fixed; left: 0" />
<BaseFooter v-bind:init-tab="2" :is-white="true" style="position: fixed; left: 0" />
</div>
</template>
<script setup lang="jsx">
import { onMounted, reactive } from 'vue'
import { useNav } from '@/utils/hooks/useNav'
import { $no, _checkImgUrl } from '@/utils'
import ScrollList from '@/components/ScrollList.vue'
@ -125,12 +124,6 @@ defineOptions({ @@ -125,12 +124,6 @@ defineOptions({
})
const nav = useNav()
const state = reactive({
listEl: null,
fixed: false
})
onMounted(() => {})
</script>
<style scoped lang="less">

4
src/pages/test/Test4.vue

@ -6,17 +6,13 @@ @@ -6,17 +6,13 @@
</div>
</template>
<script>
import ShareToFriend from '../home/components/ShareToFriend'
import BaseButton from '../../components/BaseButton'
import Search from '../../components/Search'
import VideoShare from '../home/components/VideoShare'
export default {
name: 'Test4',
components: {
BaseButton,
ShareToFriend,
Search,
VideoShare
},
props: {

2
src/utils/dom.js

@ -1,5 +1,3 @@ @@ -1,5 +1,3 @@
import globalMethods from './index'
export default class Dom {
els = []

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

Loading…
Cancel
Save