eslint检查所有文件
This commit is contained in:
parent
6f165f997a
commit
529557fc75
@ -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,7 +1,6 @@
|
||||
import fs from 'fs'
|
||||
|
||||
let read = './data/detail_comments_2024-03-29.json'
|
||||
let save = './data/'
|
||||
|
||||
let video_ids = [
|
||||
'7260749400622894336',
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 = []
|
||||
|
||||
@ -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) => {
|
||||
|
||||
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++) {
|
||||
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
|
||||
|
||||
@ -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) {
|
||||
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) {
|
||||
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++) {
|
||||
let name = nanoid() + '.png'
|
||||
imgList.push({
|
||||
name,
|
||||
url: url,
|
||||
url: url
|
||||
})
|
||||
await downloadImage(url, saveFilePath + name, () => {
|
||||
// console.log('close', name)
|
||||
|
||||
31
package.json
31
package.json
@ -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 @@
|
||||
},
|
||||
"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
516
pnpm-lock.yaml
@ -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:
|
||||
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:
|
||||
'@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:
|
||||
'@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:
|
||||
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:
|
||||
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:
|
||||
'@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:
|
||||
'@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:
|
||||
'@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:
|
||||
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:
|
||||
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:
|
||||
- '@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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
'@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:
|
||||
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:
|
||||
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:
|
||||
'@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:
|
||||
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:
|
||||
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'}
|
||||
|
||||
@ -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,5 +1,4 @@
|
||||
import CONST_VAR from '../../utils/const_var'
|
||||
import posts6 from '@/assets/data/posts6.json'
|
||||
|
||||
export default {
|
||||
videos: [],
|
||||
|
||||
@ -28,7 +28,7 @@ export default {
|
||||
return {}
|
||||
},
|
||||
methods: {
|
||||
changeText(e) {
|
||||
changeText() {
|
||||
this.$emit('update:modelValue', this.$el.innerText)
|
||||
}
|
||||
}
|
||||
|
||||
@ -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 {
|
||||
},
|
||||
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)
|
||||
@ -5,7 +5,7 @@
|
||||
//未以组件的方式使用,FromBottomDialog.vue里面是用js append到dom里面去的,
|
||||
//以组件的方式使用,不好随意插位置,插到app下面,又会出现定位覆盖的问题
|
||||
export default {
|
||||
name: 'Mask',
|
||||
name: 'BaseMask',
|
||||
props: {
|
||||
mode: {
|
||||
type: String,
|
||||
@ -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 {
|
||||
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
|
||||
|
||||
@ -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 @@
|
||||
</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 @@
|
||||
</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'
|
||||
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 {
|
||||
Search
|
||||
},
|
||||
props: {
|
||||
modelValue: false,
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default() {
|
||||
return false
|
||||
}
|
||||
},
|
||||
videoId: {
|
||||
type: String,
|
||||
default: null
|
||||
@ -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 {
|
||||
span {
|
||||
margin-right: 5rem;
|
||||
}
|
||||
|
||||
svg {
|
||||
font-size: 10rem;
|
||||
}
|
||||
|
||||
@ -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 {
|
||||
-webkit-line-clamp: 1; //显示的行
|
||||
}
|
||||
}
|
||||
|
||||
.code {
|
||||
width: 60rem;
|
||||
}
|
||||
|
||||
@ -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" />
|
||||
|
||||
@ -30,7 +30,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
//TODO 背景颜色不对
|
||||
//TODO 背景颜色不对
|
||||
export default {
|
||||
name: 'Search',
|
||||
props: {
|
||||
|
||||
@ -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,40 +142,49 @@
|
||||
|
||||
<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'
|
||||
default() {
|
||||
return 'video'
|
||||
//music
|
||||
//qrcode
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapState(useBaseStore, ['friends']),
|
||||
|
||||
@ -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 @@
|
||||
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 @@
|
||||
<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'
|
||||
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'])
|
||||
const props = defineProps({
|
||||
currentItem: {
|
||||
type: Object,
|
||||
default: {
|
||||
default() {
|
||||
return {
|
||||
author: DefaultUser,
|
||||
aweme_list: []
|
||||
}
|
||||
}
|
||||
},
|
||||
active: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
default() {
|
||||
return false
|
||||
}
|
||||
}
|
||||
})
|
||||
const main = ref(null)
|
||||
@ -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) {
|
||||
|
||||
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) {
|
||||
}
|
||||
}
|
||||
|
||||
function touchEnd(e) {
|
||||
function touchEnd() {
|
||||
if (state.isTop) {
|
||||
state.isTop = false
|
||||
cover.value.style.transition = 'all .3s'
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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 {
|
||||
video.addEventListener('timeupdate', fun)
|
||||
})
|
||||
|
||||
let eventTester = (e, t) => {
|
||||
let eventTester = (e) => {
|
||||
video.addEventListener(
|
||||
e,
|
||||
() => {
|
||||
@ -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%')
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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,6 +1,5 @@
|
||||
<script setup>
|
||||
import { reactive } from 'vue'
|
||||
import bus from '../../utils/bus'
|
||||
|
||||
const props = defineProps({
|
||||
item: {
|
||||
|
||||
@ -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({
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['update:item', 'goUserInfo', 'showComments', 'showShare', 'goMusic'])
|
||||
const state = reactive({})
|
||||
|
||||
function loved() {
|
||||
Utils.updateItem(props, 'isLoved', !props.item.isLoved, emit)
|
||||
|
||||
@ -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 @@
|
||||
@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 @@
|
||||
<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 @@
|
||||
|
||||
<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 {
|
||||
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(() => {
|
||||
|
||||
watch(
|
||||
() => state.localIndex,
|
||||
(newVal) => {
|
||||
() => {
|
||||
GM.$setCss(wrapperEl.value, 'transition-duration', `300ms`)
|
||||
GM.$setCss(
|
||||
wrapperEl.value,
|
||||
@ -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)
|
||||
|
||||
@ -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 @@
|
||||
|
||||
<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 {
|
||||
transform: `translate3d(0, ${this.homeLoadingMoveYDistance > 60 ? 60 : this.homeLoadingMoveYDistance}px, 0)`
|
||||
}
|
||||
}
|
||||
return {}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
@ -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')
|
||||
|
||||
@ -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 @@
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import Posters from '../Posters'
|
||||
import globalMethods from '../../utils'
|
||||
import BaseButton from '../BaseButton'
|
||||
|
||||
export default {
|
||||
name: 'SlideUser',
|
||||
components: {
|
||||
Posters,
|
||||
BaseButton
|
||||
},
|
||||
props: {
|
||||
|
||||
@ -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(
|
||||
|
||||
watch(
|
||||
() => props.active,
|
||||
(newVal, oldVal) => {
|
||||
(newVal) => {
|
||||
if (newVal && !props.list.length) {
|
||||
return emit('refresh')
|
||||
}
|
||||
@ -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()
|
||||
}
|
||||
})
|
||||
|
||||
@ -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) => {
|
||||
})
|
||||
|
||||
// console.log('allRecommendVideos', allRecommendVideos)
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
let t = [
|
||||
{
|
||||
type: 'imgs',
|
||||
@ -47,6 +46,7 @@ let t = [
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
// allRecommendVideos.unshift(...t)
|
||||
// {
|
||||
// type: 'user-imgs',
|
||||
@ -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() {
|
||||
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() {
|
||||
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 }]
|
||||
|
||||
@ -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="" />
|
||||
|
||||
@ -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'
|
||||
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 {
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
shareType(newVal, oldVal) {
|
||||
shareType(newVal) {
|
||||
if (newVal === -1) return
|
||||
this.showSharePassword = true
|
||||
switch (newVal) {
|
||||
|
||||
@ -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 @@
|
||||
</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 @@
|
||||
</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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
</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 @@
|
||||
</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 @@
|
||||
</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 @@
|
||||
</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 @@
|
||||
<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 @@
|
||||
<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 }}
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -91,13 +91,20 @@ export default {
|
||||
props: {
|
||||
currentItem: {
|
||||
type: Object,
|
||||
default: {
|
||||
default() {
|
||||
return {
|
||||
user: DefaultUser,
|
||||
isRequest: false,
|
||||
post: []
|
||||
}
|
||||
}
|
||||
},
|
||||
modelValue: false
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default() {
|
||||
return false
|
||||
}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
||||
@ -55,13 +55,20 @@ export default {
|
||||
props: {
|
||||
currentItem: {
|
||||
type: Object,
|
||||
default: {
|
||||
default() {
|
||||
return {
|
||||
user: DefaultUser,
|
||||
isRequest: false,
|
||||
post: []
|
||||
}
|
||||
}
|
||||
},
|
||||
modelValue: false
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default() {
|
||||
return false
|
||||
}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
||||
@ -63,7 +63,12 @@ export default {
|
||||
Loading
|
||||
},
|
||||
props: {
|
||||
loading: false,
|
||||
loading: {
|
||||
type: Boolean,
|
||||
default() {
|
||||
return false
|
||||
}
|
||||
},
|
||||
//用于和slidList绑定,因为一个页面可能有多个slidList,但只有一个indicator组件
|
||||
name: {
|
||||
type: String,
|
||||
@ -142,6 +147,7 @@ export default {
|
||||
transform: this.transform
|
||||
}
|
||||
}
|
||||
return {}
|
||||
}
|
||||
},
|
||||
created() {},
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 @@
|
||||
</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 {
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
type(newVal, oldVal) {
|
||||
type(newVal) {
|
||||
this.change(newVal)
|
||||
},
|
||||
showShareDialog() {
|
||||
@ -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(() => {
|
||||
|
||||
@ -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 @@
|
||||
</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 @@
|
||||
</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 @@
|
||||
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 {
|
||||
name: 'ShareTo',
|
||||
components: {
|
||||
FromBottomDialog,
|
||||
Search,
|
||||
Check
|
||||
Search
|
||||
},
|
||||
props: {
|
||||
modelValue: false,
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default() {
|
||||
return false
|
||||
}
|
||||
},
|
||||
pageId: {
|
||||
type: String,
|
||||
default: 'home-index'
|
||||
|
||||
@ -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 {
|
||||
name: 'Share',
|
||||
components: {
|
||||
FromBottomDialog,
|
||||
LoadingCircle,
|
||||
// DouyinCode,
|
||||
ToShare: {
|
||||
components: {
|
||||
@ -200,7 +199,12 @@ export default {
|
||||
}
|
||||
},
|
||||
props: {
|
||||
modelValue: false,
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default() {
|
||||
return false
|
||||
}
|
||||
},
|
||||
videoId: {
|
||||
type: String,
|
||||
default: null
|
||||
|
||||
@ -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 @@
|
||||
<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) {
|
||||
}
|
||||
|
||||
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
|
||||
})
|
||||
|
||||
@ -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)"
|
||||
|
||||
|
||||
@ -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(
|
||||
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 = {
|
||||
observer.observe(el)
|
||||
obList.push(observer)
|
||||
},
|
||||
unmounted(el, binding, vnode, prevVnode) {
|
||||
unmounted() {
|
||||
obList.map((v) => {
|
||||
v.disconnect()
|
||||
})
|
||||
@ -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">
|
||||
|
||||
@ -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,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>
|
||||
|
||||
@ -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({
|
||||
},
|
||||
list: {
|
||||
type: Array,
|
||||
default: []
|
||||
default() {
|
||||
return []
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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() {
|
||||
|
||||
@ -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 {
|
||||
watch: {
|
||||
isSendVerificationCode: {
|
||||
immediate: true,
|
||||
handler(newVal, oldVal) {
|
||||
handler(newVal) {
|
||||
if (newVal) {
|
||||
this.verificationCodeBtnText = 60
|
||||
let ticker = setInterval(() => {
|
||||
|
||||
@ -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 {
|
||||
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
|
||||
})
|
||||
|
||||
@ -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 @@
|
||||
</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 @@
|
||||
</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'
|
||||
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 {
|
||||
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 {
|
||||
this.fixedLocationY = this.startLocationY = e.touches[0].pageY
|
||||
this.startTime = Date.now()
|
||||
},
|
||||
move(e) {
|
||||
move() {
|
||||
// (!this.isScroll) && e.preventDefault();
|
||||
},
|
||||
async scroll() {
|
||||
|
||||
@ -58,7 +58,7 @@ export default {
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
shareType(newVal, oldVal) {
|
||||
shareType(newVal) {
|
||||
if (newVal === -1) return
|
||||
this.showSharePassword = true
|
||||
switch (newVal) {
|
||||
|
||||
@ -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 @@
|
||||
<div class="recommend-list">
|
||||
<div
|
||||
class="item"
|
||||
:key="index"
|
||||
v-for="(item, index) in recommendMusic"
|
||||
@click="page2PlayMusic(item)"
|
||||
>
|
||||
@ -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'
|
||||
export default {
|
||||
name: 'MyMusic',
|
||||
components: {
|
||||
FromBottomDialog,
|
||||
Switches,
|
||||
SlideItemMusic,
|
||||
IndicatorLight,
|
||||
GuessMusic,
|
||||
CollectMusic,
|
||||
|
||||
@ -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 @@
|
||||
</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 {}
|
||||
},
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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 {
|
||||
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)
|
||||
})
|
||||
|
||||
@ -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'
|
||||
|
||||
@ -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 @@
|
||||
<div class="wrapper">
|
||||
<div
|
||||
class="l-row"
|
||||
@click="play(index)"
|
||||
:class="{ active: activeIndex === index }"
|
||||
v-for="(item, index) in list"
|
||||
@click="play(index)"
|
||||
:key="index"
|
||||
:class="{ active: activeIndex === index }"
|
||||
>
|
||||
<div class="left">
|
||||
<img
|
||||
@ -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 {
|
||||
components: {
|
||||
SlideVertical,
|
||||
FromBottomDialog,
|
||||
Switches,
|
||||
SlideItemMusic,
|
||||
IndicatorLight,
|
||||
Share,
|
||||
ShareToFriend
|
||||
},
|
||||
props: {
|
||||
list: {
|
||||
type: Array,
|
||||
default: []
|
||||
default() {
|
||||
return []
|
||||
}
|
||||
},
|
||||
page2SlideIndex: {
|
||||
type: Number,
|
||||
@ -123,7 +123,7 @@ export default {
|
||||
},
|
||||
created() {},
|
||||
watch: {
|
||||
activeIndex(newVal, oldVal) {
|
||||
activeIndex(newVal) {
|
||||
this.itemRefs.map((ref) => {
|
||||
ref.togglePlay(false)
|
||||
})
|
||||
|
||||
@ -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 @@
|
||||
@click="play(index)"
|
||||
:class="{ active: guessSlideIndex === index }"
|
||||
v-for="(item, index) in list"
|
||||
:key="index"
|
||||
>
|
||||
<div class="left">
|
||||
<img
|
||||
@ -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 {
|
||||
components: {
|
||||
SlideVertical,
|
||||
FromBottomDialog,
|
||||
Switches,
|
||||
SlideItemMusic,
|
||||
IndicatorLight,
|
||||
Share,
|
||||
ShareToFriend
|
||||
},
|
||||
props: {
|
||||
list: {
|
||||
type: Array,
|
||||
default: []
|
||||
default() {
|
||||
return []
|
||||
}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
@ -108,7 +108,7 @@ export default {
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
guessSlideIndex(newVal, oldVal) {
|
||||
guessSlideIndex(newVal) {
|
||||
this.itemRefs.map((ref) => {
|
||||
ref.togglePlay(false)
|
||||
})
|
||||
|
||||
@ -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 @@
|
||||
@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 {
|
||||
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 {
|
||||
}
|
||||
}
|
||||
})
|
||||
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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 {
|
||||
...mapState(useBaseStore, ['userinfo'])
|
||||
},
|
||||
methods: {
|
||||
async save(item) {
|
||||
async save() {
|
||||
this.$showLoading()
|
||||
let data = { ...this.userinfo, ...{ location: '中国-四川-成都' } }
|
||||
this.baseStore.setUserinfo(data)
|
||||
|
||||
@ -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 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Search from '../../../components/Search'
|
||||
|
||||
export default {
|
||||
name: 'ChooseSchool',
|
||||
components: {
|
||||
Search
|
||||
},
|
||||
components: {},
|
||||
data() {
|
||||
return {
|
||||
departments: [],
|
||||
|
||||
@ -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 {
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async save(item) {
|
||||
async save() {
|
||||
this.$showLoading()
|
||||
let data = { ...this.userinfo, ...{ location: '暂不设置' } }
|
||||
this.baseStore.setUserinfo(data)
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -24,24 +24,22 @@
|
||||
<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)">
|
||||
<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)"
|
||||
>
|
||||
<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>
|
||||
@ -49,6 +47,7 @@
|
||||
</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>
|
||||
|
||||
@ -28,7 +28,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
//TODO 院系点击那个弹窗没做
|
||||
//TODO 院系点击那个弹窗没做
|
||||
export default {
|
||||
name: 'DeclareSchool',
|
||||
data() {
|
||||
|
||||
@ -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 @@
|
||||
</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 {
|
||||
name: 'AllMessage',
|
||||
components: {
|
||||
Scroll,
|
||||
People,
|
||||
Loading,
|
||||
Peoples
|
||||
},
|
||||
@ -175,6 +173,8 @@ export default {
|
||||
return '@我的'
|
||||
case 4:
|
||||
return '评论'
|
||||
default:
|
||||
return ''
|
||||
}
|
||||
},
|
||||
showMessageList() {
|
||||
|
||||
@ -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 @@
|
||||
</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']),
|
||||
|
||||
@ -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 @@
|
||||
<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 @@
|
||||
<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 @@
|
||||
</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 @@
|
||||
</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 @@
|
||||
</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 @@
|
||||
</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 @@
|
||||
</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 {
|
||||
name: 'Message',
|
||||
components: {
|
||||
Scroll,
|
||||
Mask,
|
||||
Footer,
|
||||
Search,
|
||||
FromBottomDialog,
|
||||
Check,
|
||||
@ -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)
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -27,7 +27,12 @@ export default {
|
||||
name: 'RedPacketDetail',
|
||||
components: {},
|
||||
props: {
|
||||
modelValue: false
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default() {
|
||||
return false
|
||||
}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {}
|
||||
|
||||
@ -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 @@
|
||||
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 @@
|
||||
<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 @@
|
||||
</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 {
|
||||
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'
|
||||
|
||||
@ -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 @@
|
||||
<!-- 红包 -->
|
||||
<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 @@
|
||||
<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 {
|
||||
name: 'Chat',
|
||||
components: {
|
||||
Loading,
|
||||
Mask,
|
||||
ChatMessage
|
||||
},
|
||||
data() {
|
||||
|
||||
@ -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 @@
|
||||
<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 {
|
||||
components: {
|
||||
Switches,
|
||||
People,
|
||||
FromBottomDialog,
|
||||
BlockDialog
|
||||
},
|
||||
data() {
|
||||
|
||||
@ -26,7 +26,12 @@ export default {
|
||||
FromBottomDialog
|
||||
},
|
||||
props: {
|
||||
modelValue: false
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default() {
|
||||
return false
|
||||
}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {}
|
||||
|
||||
@ -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 = {
|
||||
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,
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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 @@
|
||||
</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 {
|
||||
extends: BasePage,
|
||||
name: 'LiveNotice',
|
||||
components: {
|
||||
Scroll,
|
||||
FromBottomDialog
|
||||
Scroll
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
||||
@ -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="" />
|
||||
|
||||
@ -79,7 +79,12 @@ export default {
|
||||
name: 'NoticeSetting',
|
||||
components: { Switches },
|
||||
props: {
|
||||
modelValue: false
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default() {
|
||||
return false
|
||||
}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
||||
@ -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>
|
||||
@ -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 @@
|
||||
</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,
|
||||
|
||||
@ -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 @@
|
||||
</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'
|
||||
|
||||
@ -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 @@
|
||||
<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 @@
|
||||
<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>
|
||||
|
||||
@ -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) {
|
||||
}
|
||||
|
||||
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))
|
||||
|
||||
@ -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>
|
||||
@ -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>
|
||||
|
||||
@ -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 @@
|
||||
搜索用户名字/抖音号:<span class="searchKey">{{ searchKey }}</span>
|
||||
</div>
|
||||
<!-- TODO -->
|
||||
<template v-if="isSearch">
|
||||
<People
|
||||
v-if="isSearch"
|
||||
v-for="item in friends.all"
|
||||
: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">
|
||||
|
||||
@ -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 @@
|
||||
</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 @@
|
||||
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 {
|
||||
components: {
|
||||
People,
|
||||
Search,
|
||||
Indicator,
|
||||
FromBottomDialog
|
||||
Indicator
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
@ -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)
|
||||
|
||||
@ -166,7 +166,9 @@ export default {
|
||||
props: {
|
||||
people: {
|
||||
type: Object,
|
||||
default: {}
|
||||
default() {
|
||||
return {}
|
||||
}
|
||||
},
|
||||
mode: {
|
||||
type: String,
|
||||
|
||||
@ -43,7 +43,9 @@ export default {
|
||||
props: {
|
||||
list: {
|
||||
type: Array,
|
||||
default: []
|
||||
default() {
|
||||
return []
|
||||
}
|
||||
},
|
||||
mode: {
|
||||
type: String,
|
||||
|
||||
@ -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 @@
|
||||
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 @@
|
||||
class="item"
|
||||
:class="activeIndexs.includes(i) && 'active'"
|
||||
@click="toggle(i)"
|
||||
:key="i"
|
||||
v-for="(item, i) in 3"
|
||||
>
|
||||
<header>
|
||||
|
||||
@ -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({
|
||||
})
|
||||
|
||||
const nav = useNav()
|
||||
const state = reactive({
|
||||
listEl: null,
|
||||
fixed: false
|
||||
})
|
||||
|
||||
onMounted(() => {})
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
|
||||
@ -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: {
|
||||
|
||||
@ -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…
Reference in New Issue
Block a user