Compare commits

...

71 Commits

Author SHA1 Message Date
A1300399510
4c0d840705 no message 2025-02-08 12:10:33 +08:00
A1300399510
2b2bd9da53 修改登录判断 2025-02-08 11:45:15 +08:00
A1300399510
f6091b0b28 修改详情删除提示 2024-12-09 17:07:59 +08:00
A1300399510
170ba990fa no message 2024-12-04 19:22:21 +08:00
A1300399510
bc299037e5 no message 2024-12-03 18:58:14 +08:00
A1300399510
1d0d54e445 no message 2024-12-03 18:51:04 +08:00
A1300399510
00f30db09e no message 2024-12-03 18:32:38 +08:00
A1300399510
ca024d9a16 no message 2024-12-03 17:54:23 +08:00
A1300399510
44aeb78e4f no message 2024-12-03 17:53:36 +08:00
A1300399510
70f4c35039 no message 2024-12-03 17:44:22 +08:00
A1300399510
380dde983a no message 2024-12-03 17:21:57 +08:00
A1300399510
a7deaea24e no message 2024-12-03 17:06:22 +08:00
A1300399510
cc4295f008 加向小程序发url ,分享用 2024-12-03 16:58:46 +08:00
A1300399510
3ee03375b8 no message 2024-10-21 11:36:05 +08:00
A1300399510
3589d6a3f0 增加登录后定时器,修改socket链接 2024-10-21 11:16:14 +08:00
A1300399510
f0de39f135 修改统计代码 2024-10-21 10:47:53 +08:00
A1300399510
399922bb77 no message 2024-08-26 17:16:43 +08:00
A1300399510
11056a74a4 增加管理员删除操作 2024-08-26 16:58:58 +08:00
A1300399510
98301d80fe 去掉顿号 2024-08-14 17:13:28 +08:00
A1300399510
25e15aa336 详情页加求定位 2024-08-14 17:08:38 +08:00
A1300399510
deffec9e26 no message 2024-08-09 15:33:44 +08:00
A1300399510
1abc53b06d no message 2024-08-09 15:15:12 +08:00
A1300399510
e29e0e36b9 no message 2024-08-09 15:06:07 +08:00
A1300399510
7563c6c30e no message 2024-08-09 14:56:57 +08:00
A1300399510
4d520f5665 no message 2024-08-09 14:55:08 +08:00
A1300399510
6501d55e4f no message 2024-08-09 14:46:53 +08:00
A1300399510
da5e80313b 重新打包 2024-06-11 16:11:52 +08:00
A1300399510
22ff67243f no message 2024-06-11 16:06:51 +08:00
A1300399510
094aac1ac7 修改我的页面 跳转 小程序 2024-06-11 14:58:09 +08:00
A1300399510
3df8333302 no message 2024-05-30 10:55:53 +08:00
A1300399510
983ec684ce no message 2024-05-30 10:48:20 +08:00
A1300399510
725786811a 修改的标签判断 2024-03-06 11:14:13 +08:00
A1300399510
4e3046596e no message 2024-02-29 11:43:19 +08:00
A1300399510
0425959db4 no message 2024-02-29 11:42:23 +08:00
A1300399510
c791f02ee4 no message 2024-02-29 11:32:58 +08:00
A1300399510
46a14bea6c no message 2024-02-28 19:09:34 +08:00
A1300399510
e0af963c4a no message 2023-12-18 11:08:45 +08:00
A1300399510
1138eac28f 修改发布按钮图层点击问题 2023-11-10 13:50:23 +08:00
A1300399510
72aa4006b7 修改取消跳转PC,修改图片大小 2023-11-10 12:10:14 +08:00
A1300399510
3c35324cfa no message 2023-10-30 14:15:23 +08:00
A1300399510
b7fc627226 no message 2023-10-23 14:05:52 +08:00
A1300399510
59d40d3609 no message 2023-10-23 13:31:55 +08:00
A1300399510
bc778c3a48 no message 2023-10-17 11:01:32 +08:00
A1300399510
bd0beb426b no message 2023-10-17 10:37:15 +08:00
A1300399510
c0bc6c5431 no message 2023-10-16 18:43:39 +08:00
A1300399510
442ad9ff31 no message 2023-10-16 17:26:27 +08:00
A1300399510
462aefb7b9 no message 2023-10-16 17:03:34 +08:00
A1300399510
98d53ad45e no message 2023-10-16 16:59:04 +08:00
A1300399510
07b7eb2471 no message 2023-10-16 16:55:40 +08:00
A1300399510
562481d08c no message 2023-10-16 16:45:12 +08:00
A1300399510
7dc3c78715 no message 2023-10-16 16:40:32 +08:00
A1300399510
9fe6c9046b no message 2023-10-16 16:39:37 +08:00
A1300399510
4b9614be25 no message 2023-10-16 16:15:39 +08:00
A1300399510
2c601cf573 no message 2023-10-16 16:15:11 +08:00
A1300399510
7d3a84d6ae no message 2023-10-16 16:08:23 +08:00
A1300399510
517d4803c3 no message 2023-10-16 16:03:29 +08:00
A1300399510
126fb7355c 开放dist 2023-10-16 15:38:04 +08:00
A1300399510
e1bcfc00c5 添加socket 2023-09-20 15:51:18 +08:00
A1300399510
787f4e8094 修改 2023-08-18 18:06:00 +08:00
A1300399510
2f3e1198e6 修改详情投币bug 2023-08-18 17:19:53 +08:00
A1300399510
25b6e6128d 修改登录按钮样式 2023-07-13 12:26:45 +08:00
A1300399510
79405f8853 修改统计代码 2023-07-07 11:20:30 +08:00
A1300399510
261a6c61c4 提交增加统计代码 2023-07-07 11:04:32 +08:00
A1300399510
bcfaa0b260 提交 2023-05-22 19:19:28 +08:00
A1300399510
39456715c8 提交我的页面的 UID 2023-04-28 11:51:37 +08:00
xiaoronghao
7b2c4584b4 提交 2023-04-18 16:44:14 +08:00
xiaoronghao
4e228cadd1 提交 2023-04-17 19:24:06 +08:00
xiaoronghao
808baf798b no message 2023-04-17 16:19:01 +08:00
xiaoronghao
34d052255f 提交测试 2023-04-17 15:47:08 +08:00
xiaoronghao
1ecc639410 全部板块左边需要溢出,详情页的提示框需要页面居中 2023-04-14 19:13:49 +08:00
xiaoronghao
bb952fc553 提交 2023-04-13 19:12:17 +08:00
111 changed files with 18791 additions and 4549 deletions

2
.gitignore vendored
View File

@@ -3,5 +3,5 @@ logs
*.log *.log
node_modules node_modules
.DS_Store .DS_Store
dist # dist
*.local *.local

4
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,4 @@
{
"editor.suggest.snippetsPreventQuickSuggestions": false,
"aiXcoder.showTrayIcon": true
}

21
.vscode/tasks.json vendored Normal file
View File

@@ -0,0 +1,21 @@
{
"version": "2.0.0",
"tasks": [{
"label": "save",
"command": "git",
"type": "shell",
"args": [
"commit",
"-a",
"-m",
"auto commit",
"&&",
"git",
"push",
"origin",
"master"
],
"problemMatcher": []
}],
"preShutdownTask": "save"
}

1
dist/css/124.fd7ddcad.css vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/css/217.0fc0e835.css vendored Normal file
View File

@@ -0,0 +1 @@
.path-box[data-v-07dc0a79]{display:flex;flex-direction:row;height:1.28rem;line-height:1.28rem;margin:.5rem .35rem 0;padding:0 .4rem;border-radius:1.68rem 1.68rem 0 1.68rem;background-color:#fff;font-size:.32rem;box-shadow:0 0 .16rem rgba(0,0,0,.1);position:relative}.path-box .path-slash[data-v-07dc0a79]{color:#d7d7d7;font-size:.32rem;margin:0 .18rem}.path-box div[data-v-07dc0a79]{color:#7f7f7f;max-width:2.5rem}.path-box div[data-v-07dc0a79]:last-child{max-width:50%;color:#000;font-weight:700}.path-box[data-v-07dc0a79]:after{content:"";width:0;height:0;position:absolute;bottom:0;right:0;border-top:.24rem solid #62b1ff;border-left:.24rem solid transparent;transform:rotateX(180deg);margin:0 .09rem .09rem 0}.result-empty-box[data-v-02de74be]{height:10.3333rem}.allSections[data-v-02de74be]{display:flex;flex-direction:row;margin-top:.666667rem;filter:drop-shadow(.05rem 0 .09rem rgba(0,0,0,.1));margin:.64rem .35rem;height:calc(100vh - 3rem);position:relative}.allSections[data-v-02de74be]:after{content:"";top:0;left:.17rem;width:3.4rem;height:100%;border-radius:.32rem 0 0 .32rem;border-left:.013333rem solid #ddd;background-color:hsla(0,0%,92%,.557);position:absolute;z-index:-1}.allSections-left[data-v-02de74be]{width:3.57rem;border-radius:.32rem 0 0 .32rem;display:flex;flex-direction:column;text-align:center;-ms-overflow-style:none;overflow:-moz-scrollbars-none;-webkit-overflow-scrolling:touch;position:relative;overflow-x:hidden;overflow-y:auto}.allSections-left[data-v-02de74be]::-webkit-scrollbar{display:none}.allSections-left span[data-v-02de74be]{height:1.28rem;line-height:1.28rem;border-radius:.32rem;font-size:.32rem;position:relative}.allSections-left span.active[data-v-02de74be]{background-color:#fff;font-weight:bolder;border-radius:.32rem 0 0 .32rem;color:#000;width:101%;filter:drop-shadow(0 0 .08rem rgba(0,0,0,.1))}.allSections-left span.active[data-v-02de74be]:before{content:"";width:.36rem;height:101%;position:absolute;right:0;top:-100%;box-shadow:.14rem .14rem #fff;border-radius:0 0 .32rem 0}.allSections-left span.active[data-v-02de74be]:after{content:"";width:.36rem;height:101%;position:absolute;right:0;bottom:-100%;box-shadow:.14rem -.14rem #fff;border-radius:0 .32rem 0 0}.allSections-left span:first-child.active[data-v-02de74be]:before,.allSections-left span:last-child.active[data-v-02de74be]:after{display:none}.allSections-right[data-v-02de74be]{flex:1;background-color:#fff;border-radius:0 .32rem .32rem 0;display:flex;flex-direction:column;z-index:1;padding-bottom:.4rem;overflow-x:hidden;overflow-y:auto}.allSections-right.active[data-v-02de74be]{display:block}.allSections-right .allSections-right-item[data-v-02de74be]{padding:.4rem 0;margin:0 .32rem 0 .7rem;border-bottom:.013333rem solid #ddd;display:flex;justify-content:space-between;position:relative}.allSections-right .allSections-right-item .item-content[data-v-02de74be]{width:80%}.allSections-right .allSections-right-item .item-title[data-v-02de74be]{color:#000;font-size:.32rem}.allSections-right .allSections-right-item .item-text[data-v-02de74be]{margin:.266667rem 0;color:#aaa;font-size:.28rem;word-wrap:break-word}.allSections-right .allSections-right-item .item-star[data-v-02de74be]{display:flex;align-items:center}.allSections-right .allSections-right-item .item-star img[data-v-02de74be]{width:.48rem;height:.46rem}.allSections-right .allSections-right-item[data-v-02de74be]:before{content:"";width:.12rem;height:.32rem;border-radius:.16rem;position:absolute;top:.48rem;left:-.35rem;background-color:#62b1ff}.paging[data-v-02de74be]{margin-top:.48rem}.paging[data-v-02de74be] .el-pagination.is-background .el-pager li:not(.disabled).active{background:#62b1ff;border-radius:50%}.paging[data-v-02de74be] .el-pagination .btn-next .el-icon,.paging[data-v-02de74be] .el-pagination .btn-prev .el-icon{font-size:.4rem}

1
dist/css/280.0915ca91.css vendored Normal file
View File

@@ -0,0 +1 @@
.path-box[data-v-07dc0a79]{display:flex;flex-direction:row;height:1.28rem;line-height:1.28rem;margin:.5rem .35rem 0;padding:0 .4rem;border-radius:1.68rem 1.68rem 0 1.68rem;background-color:#fff;font-size:.32rem;box-shadow:0 0 .16rem rgba(0,0,0,.1);position:relative}.path-box .path-slash[data-v-07dc0a79]{color:#d7d7d7;font-size:.32rem;margin:0 .18rem}.path-box div[data-v-07dc0a79]{color:#7f7f7f;max-width:2.5rem}.path-box div[data-v-07dc0a79]:last-child{max-width:50%;color:#000;font-weight:700}.path-box[data-v-07dc0a79]:after{content:"";width:0;height:0;position:absolute;bottom:0;right:0;border-top:.24rem solid #62b1ff;border-left:.24rem solid transparent;transform:rotateX(180deg);margin:0 .09rem .09rem 0}.paging[data-v-28440cd8]{margin-top:.48rem;padding-bottom:1rem}.paging[data-v-28440cd8] .el-pagination.is-background .el-pager li.active{background:#62b1ff;border-radius:50%}.paging[data-v-28440cd8] .el-pagination .btn-next .el-icon,.paging[data-v-28440cd8] .el-pagination .btn-prev .el-icon{font-size:.4rem}.paging[data-v-28440cd8] .is-background.el-pagination--small .el-pager li{border-radius:50%!important}.paging[data-v-28440cd8] .el-pagination.is-background.el-pagination--small .btn-next,.paging[data-v-28440cd8] .el-pagination.is-background.el-pagination--small .btn-prev,.paging[data-v-28440cd8] .el-pagination.is-background.el-pagination--small .el-pager li{border-radius:50%}section[data-v-28440cd8]{padding-top:.45rem}

1
dist/css/336.7f7c43de.css vendored Normal file
View File

@@ -0,0 +1 @@
.container[data-v-5e99c0b6]{padding-top:1.3rem}.container .header[data-v-5e99c0b6]{padding:1rem 0 .8rem}.container .header .portrait[data-v-5e99c0b6]{width:2rem;height:2rem;border-radius:50%;background-color:#fff;position:relative}.container .header .portrait-icom[data-v-5e99c0b6]{width:1.8rem;height:1.8rem;border-radius:50%}.container .header .header-username[data-v-5e99c0b6]{color:#000;font-size:.48rem;line-height:normal;margin-top:.24rem;font-weight:650}.container .header .header-uid[data-v-5e99c0b6]{color:#7f7f7f;font-weight:400;margin-top:.12rem}.container .operation-box[data-v-5e99c0b6]{background-color:#fff;margin:0 .2933rem .4rem;border-radius:.4rem}.container .operation-box .operation-item[data-v-5e99c0b6]{height:1.8rem;justify-content:space-between;padding:0 .4rem}.container .operation-box .operation-item[data-v-5e99c0b6]:not(:first-of-type){border-top:.0133rem dotted #d7d7d7}.container .operation-box .operation-item .operation-left[data-v-5e99c0b6]{color:#333;font-size:.36rem;line-height:.6rem}.container .operation-box .operation-item .operation-icom[data-v-5e99c0b6]{width:.48rem;margin-right:.32rem}.container .operation-box .operation-item .operation-data[data-v-5e99c0b6]{background-color:#f6f6f6;border-radius:.64rem;font-size:.28rem;color:#555;min-width:.9rem;text-align:center;padding:0 .2rem;box-sizing:border-box}.container .operation-box .operation-item .unread-info[data-v-5e99c0b6]{background:#fd3f5d;height:.42rem;border-radius:.64rem;color:#fff;font-size:.28rem;text-align:center;padding:0 .1rem;box-sizing:border-box}.container .operation-box .operation-item .operation-right-icom[data-v-5e99c0b6]{width:.12rem;height:.22rem;margin-left:.2rem}.container .operation-box.data-presentation[data-v-5e99c0b6]{padding-top:.4rem;padding-bottom:.4rem}.container .operation-box.data-presentation .data-presentation-item[data-v-5e99c0b6]{flex-direction:column}.container .operation-box.data-presentation .data-presentation-item[data-v-5e99c0b6]:not(:last-of-type){border-right:.0133rem solid #ebebeb}.container .operation-box.data-presentation .data-presentation-item .data-presentation-number[data-v-5e99c0b6]{color:#000;line-height:.6rem;font-size:.4rem;font-weight:900}.container .operation-box.data-presentation .data-presentation-item .data-presentation-name[data-v-5e99c0b6]{color:#333;line-height:.6rem;font-size:.32rem}.container .log-out[data-v-5e99c0b6]{font-size:.36rem;line-height:.6rem;color:#555;border-bottom:.0133rem solid #797979;width:1.46rem;margin:.6rem auto 1rem}

1
dist/css/337.fd7ddcad.css vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/css/354.fd7ddcad.css vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/css/356.f7682b16.css vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/css/831.25be828c.css vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/css/878.0c2853cd.css vendored Normal file
View File

@@ -0,0 +1 @@
.container[data-v-500ea229]{padding-top:1.3rem;padding-bottom:1.3rem}.container .search-input-box[data-v-500ea229]{margin-left:.32rem}.container .search-input-box .search-input[data-v-500ea229]{width:8.2rem;height:.96rem;border-radius:2.56rem;background:#ebebeb}.container .search-input-box .search-input .search-input-cross[data-v-500ea229],.container .search-input-box .search-input .search-input-icon[data-v-500ea229]{width:.4rem;height:.4rem}.container .search-input-box .search-input .search-input-icon[data-v-500ea229]{padding:0 .4rem}.container .search-input-box .search-input .search-input-cross[data-v-500ea229]{padding-right:.4rem}.container .search-input-box .search-input .search-input-input[data-v-500ea229]{height:100%;font-size:.4rem}.container .search-input-box .search-input-cancel[data-v-500ea229]{color:#000;font-size:.36rem;padding-left:.46rem;width:.74rem}.container .numberResults[data-v-500ea229]{font-size:.32rem;color:#555;margin:.64rem .32rem .48rem}.container .numberResults .number[data-v-500ea229]{color:#000;font-weight:650;margin:0 .1667rem}.container .result-box[data-v-500ea229]{justify-content:center;flex-direction:column;overflow:auto}.container .result-box .result-item[data-v-500ea229]{margin-bottom:.32rem;width:9.36rem;height:3.96rem;background-color:#fff;border:none;border-radius:.32rem;box-shadow:0 0 .16rem rgba(0,0,0,.08);padding:.4rem;box-sizing:border-box;flex-direction:column;position:relative}.container .result-box .result-item .result-header[data-v-500ea229]{margin-bottom:.32rem}.container .result-box .result-item .result-header .result-label[data-v-500ea229]{font-size:.28rem;height:.52rem;line-height:.52rem;background:#333;color:#fff;display:inline-block;border-radius:.16rem;padding:0 .12rem;margin-right:.12rem}.container .result-box .result-item .result-header .result-title[data-v-500ea229]{color:#000;font-size:.37333rem;line-height:.65rem;display:inline}.container .result-box .result-item .result-header .result-title[data-v-500ea229] em{color:#f95d5d}.container .result-box .result-item .result-content[data-v-500ea229]{line-height:.52rem;font-size:.3rem;color:#7f7f7f;height:1.04rem}.container .result-box .result-item .reply-visible[data-v-500ea229]{font-size:.32rem;height:1.04rem;background:hsla(0,0%,95%,.7)}.container .result-box .result-item .result-info[data-v-500ea229]{align-items:self-end;justify-content:space-between}.container .result-box .result-item .result-info .user-info .icon-head[data-v-500ea229]{width:.64rem;height:.64rem;border-radius:50%}.container .result-box .result-item .result-info .user-info .user-name[data-v-500ea229]{font-size:.32rem;color:#333;margin-left:.2rem}.container .result-box .result-item .result-info .item-data[data-v-500ea229]{font-size:.28rem}.container .result-box .result-item .result-info .item-data .item-data-item[data-v-500ea229]:last-of-type{margin-left:.4rem}.container .result-box .result-item .result-info .item-data .item-data-item .icon-look[data-v-500ea229]{width:.4267rem;height:.18rem;margin-right:.16rem}.container .result-box .result-item .result-info .item-data .item-data-item .icon-msg[data-v-500ea229]{width:.32rem;height:.28rem;margin-right:.16rem}.container .paging[data-v-500ea229]{margin-top:.48rem}.container .paging[data-v-500ea229] .el-pagination.is-background .el-pager li:not(.disabled).active{background:#62b1ff;border-radius:50%}.container .paging[data-v-500ea229] .el-pagination .btn-next .el-icon,.container .paging[data-v-500ea229] .el-pagination .btn-prev .el-icon{font-size:.4rem}.container .result-empty-box[data-v-500ea229]{height:70vh;width:9.36rem;background:#fff;margin:0 auto;border-radius:.32rem}.container .result-empty-box .result-empty-icon[data-v-500ea229]{width:2.04rem;height:2.4rem}

1
dist/css/884.9aa3ed80.css vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/css/app~189e7968.8b7662a1.css vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

BIN
dist/fonts/element-icons.f1a45d74.ttf vendored Normal file

Binary file not shown.

BIN
dist/fonts/element-icons.ff18efd1.woff vendored Normal file

Binary file not shown.

BIN
dist/img/defaultAvatar.jpg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

BIN
dist/img/empty.698c52d4.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
dist/img/favicon.ico vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
dist/img/notCollect.698c52d4.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

0
src/assets/img/detail/unlock.png → dist/img/unlock.png vendored Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

BIN
dist/img/user/avatarsetting.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
dist/img/user/bindemail.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
dist/img/user/bindingthird-party.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
dist/img/user/bindmobile.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
dist/img/user/changepassword.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
dist/img/user/collect.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1011 B

After

Width:  |  Height:  |  Size: 1011 B

BIN
dist/img/user/mystatus.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
dist/img/user/personaldata.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
dist/img/user/postmessage.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
dist/img/user/replymessage.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 968 B

BIN
dist/img/user/visithomepage.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

12
dist/index.html vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/js/124.79130f1c.js vendored Normal file
View File

@@ -0,0 +1 @@
"use strict";(self["webpackChunkninepage"]=self["webpackChunkninepage"]||[]).push([[124],{9143:function(e,t,n){n.r(t),n.d(t,{default:function(){return l}});var a=function(){var e=this,t=e._self._c;return t("div",[t("header-nav",{attrs:{issearch:!0,needgetuser:!0}},[t("template",{slot:"header-title"},[e._v("帖子详情")])],2),t("router-view",{key:e.key})],1)},r=[],u=n(517),s={name:"detail",data(){return{}},computed:{key(){return this.$route.path+Math.random()}},mounted(){},methods:{},components:{HeaderNav:u.Z}},d=s,i=n(1001),o=(0,i.Z)(d,a,r,!1,null,"10593ad7",null),l=o.exports}}]);

1
dist/js/217.d1ddcd5f.js vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/js/280.ed574ed9.js vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/js/336.52ad8d34.js vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/js/337.4b2508a0.js vendored Normal file
View File

@@ -0,0 +1 @@
"use strict";(self["webpackChunkninepage"]=self["webpackChunkninepage"]||[]).push([[337],{5817:function(e,t,n){n.r(t),n.d(t,{default:function(){return h}});var r=function(){var e=this,t=e._self._c;return t("div",[t("header-nav",{attrs:{issearch:!1,needgetuser:!0}},[t("template",{slot:"header-title"},[e._v("搜索帖子")])],2),t("router-view",{key:e.key})],1)},a=[],u=n(517),s={name:"search",data(){return{}},computed:{key(){return this.$route.path+Math.random()}},mounted(){},methods:{},components:{HeaderNav:u.Z}},o=s,c=n(1001),d=(0,c.Z)(o,r,a,!1,null,"24c9f798",null),h=d.exports}}]);

1
dist/js/354.bc2d16ec.js vendored Normal file
View File

@@ -0,0 +1 @@
"use strict";(self["webpackChunkninepage"]=self["webpackChunkninepage"]||[]).push([[354],{6170:function(e,t,n){n.r(t),n.d(t,{default:function(){return o}});var r=function(){var e=this,t=e._self._c;return t("div",[t("header-nav",{attrs:{issearch:!0,needgetuser:!0}},[t("template",{slot:"header-title"},[e._v("我的寄托")])],2),t("router-view")],1)},a=[],u=n(517),s={name:"user",data(){return{}},mounted(){},methods:{},components:{HeaderNav:u.Z}},d=s,i=n(1001),l=(0,i.Z)(d,r,a,!1,null,"7090fd6a",null),o=l.exports}}]);

1
dist/js/517.b66c61bd.js vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/js/718.165fc1ef.js vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/js/831.6fddd3bb.js vendored Normal file
View File

@@ -0,0 +1 @@
"use strict";(self["webpackChunkninepage"]=self["webpackChunkninepage"]||[]).push([[831],{2013:function(e,t,n){n.r(t),n.d(t,{default:function(){return u}});var a=function(){var e=this,t=e._self._c;return t("div",[t("header-nav",{attrs:{issearch:!0,needgetuser:!0}},[t("template",{slot:"header-title"},[e._v("寄托天下论坛")])],2),t("nav",[t("router-link",{attrs:{to:e.recommendURl,exact:""}},[e._v("推荐阅读")]),t("router-link",{attrs:{to:e.collect,exact:""}},[e._v("收藏的版块")]),t("router-link",{attrs:{to:e.allSections,exact:""}},[e._v("全部版块")])],1),t("div",{staticClass:"publish flexcolumn flexcenter",on:{click:function(t){return t.stopPropagation(),e.$skipUrl(e.invitationPost)}}},[t("svg-icon",{attrs:{"icon-class":"add","class-name":"icon-publish"}}),e._v(" 发帖 ")],1),t("router-view",{key:e.key})],1)},l=[],o=n(517),i=n(6799),r={name:"Index",data(){return{favorite:[],recommend:[],fid:null,allSections:"/allSections",collect:"/collect",recommendURl:"/recommend",invitationPost:i.a}},computed:{key(){return this.$route.path+Math.random()}},watch:{"$store.state.homeRequestState":{handler(e,t){let{favoriteList:n,recommendList:a}=this.$store.state;this.favorite=n,this.recommend=a},immediate:!0},$route:{handler(e,t){let n=e.fullPath;-1!=n.indexOf("allSections")&&(this.allSections=n),-1!=n.indexOf("collect")&&(this.collect=n),-1!=n.indexOf("recommend")&&(this.recommendURl=n)},immediate:!0}},mounted(){},components:{HeaderNav:o.Z},methods:{}},s=r,c=n(1001),d=(0,c.Z)(s,a,l,!1,null,null,null),u=d.exports}}]);

1
dist/js/878.25f811f5.js vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/js/884.b48d5ca7.js vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/js/app~42f9d7e6.9764086e.js vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/js/app~449a49d2.7db7a012.js vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/js/app~d363ae0c.bcaf0192.js vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/js/app~d92c34c1.f3d32b35.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

545
dist/js/jweixin-1.3.2.js vendored Normal file
View File

@@ -0,0 +1,545 @@
;((e, n) => {
"function" == typeof define && (define.amd || define.cmd)
? define(function () {
return n(e)
})
: n(e, !0)
})(this, function (r, e) {
var a, c, n, i, t, s, d, o, l, u, p, f, m, g, h, I, S, y, v, _, w, T
if (!r.jWeixin)
return (
(a = { config: "preVerifyJSAPI", onMenuShareTimeline: "menu:share:timeline", onMenuShareAppMessage: "menu:share:appmessage", onMenuShareQQ: "menu:share:qq", onMenuShareWeibo: "menu:share:weiboApp", onMenuShareQZone: "menu:share:QZone", previewImage: "imagePreview", getLocation: "geoLocation", openProductSpecificView: "openProductViewWithPid", addCard: "batchAddCard", openCard: "batchViewCard", chooseWXPay: "getBrandWCPayRequest", openEnterpriseRedPacket: "getRecevieBizHongBaoRequest", startSearchBeacons: "startMonitoringBeacons", stopSearchBeacons: "stopMonitoringBeacons", onSearchBeacons: "onBeaconsInRange", consumeAndShareCard: "consumedShareCard", openAddress: "editAddress" }),
(c = (() => {
var e,
n = {}
for (e in a) n[a[e]] = e
return n
})()),
(i = (n = r.document).title),
(t = navigator.userAgent.toLowerCase()),
(f = navigator.platform.toLowerCase()),
(s = !(!f.match("mac") && !f.match("win"))),
(d = -1 != t.indexOf("wxdebugger")),
(o = -1 != t.indexOf("micromessenger")),
(l = -1 != t.indexOf("android")),
(u = -1 != t.indexOf("iphone") || -1 != t.indexOf("ipad")),
(p = (f = t.match(/micromessenger\/(\d+\.\d+\.\d+)/) || t.match(/micromessenger\/(\d+\.\d+)/)) ? f[1] : ""),
(m = { initStartTime: L(), initEndTime: 0, preVerifyStartTime: 0, preVerifyEndTime: 0 }),
(g = { version: 1, appId: "", initTime: 0, preVerifyTime: 0, networkType: "", isPreVerifyOk: 1, systemType: u ? 1 : l ? 2 : -1, clientVersion: p, url: encodeURIComponent(location.href) }),
(h = {}),
(I = { _completes: [] }),
(S = { state: 0, data: {} }),
B(function () {
m.initEndTime = L()
}),
(y = !1),
(v = []),
(_ = {
config: function (e) {
C("config", (h = e))
var o = !1 !== h.check
B(function () {
if (o)
k(
a.config,
{ verifyJsApiList: V(h.jsApiList) },
((I._complete = function (e) {
;(m.preVerifyEndTime = L()), (S.state = 1), (S.data = e)
}),
(I.success = function (e) {
g.isPreVerifyOk = 0
}),
(I.fail = function (e) {
I._fail ? I._fail(e) : (S.state = -1)
}),
(t = I._completes).push(function () {
var n
s ||
d ||
h.debug ||
p < "6.0.2" ||
g.systemType < 0 ||
((n = new Image()),
(g.appId = h.appId),
(g.initTime = m.initEndTime - m.initStartTime),
(g.preVerifyTime = m.preVerifyEndTime - m.preVerifyStartTime),
_.getNetworkType({
isInnerInvoke: !0,
success: function (e) {
;(g.networkType = e.networkType), (n.src = "https://open.weixin.qq.com/sdk/report?v=" + g.version + "&o=" + g.isPreVerifyOk + "&s=" + g.systemType + "&c=" + g.clientVersion + "&a=" + g.appId + "&n=" + g.networkType + "&i=" + g.initTime + "&p=" + g.preVerifyTime + "&u=" + g.url)
},
}))
}),
(I.complete = function (e) {
for (var n = 0, i = t.length; n < i; ++n) t[n]()
I._completes = []
}),
I)
),
(m.preVerifyStartTime = L())
else {
S.state = 1
for (var e = I._completes, n = 0, i = e.length; n < i; ++n) e[n]()
I._completes = []
}
var t
}),
_.invoke ||
((_.invoke = function (e, n, i) {
r.WeixinJSBridge && WeixinJSBridge.invoke(e, P(n), i)
}),
(_.on = function (e, n) {
r.WeixinJSBridge && WeixinJSBridge.on(e, n)
}))
},
ready: function (e) {
;(0 != S.state || (I._completes.push(e), !o && h.debug)) && e()
},
error: function (e) {
p < "6.0.2" || (-1 == S.state ? e(S.data) : (I._fail = e))
},
checkJsApi: function (e) {
k(
"checkJsApi",
{ jsApiList: V(e.jsApiList) },
((e._complete = function (e) {
l && (i = e.checkResult) && (e.checkResult = JSON.parse(i))
var n,
i = e,
t = i.checkResult
for (n in t) {
var o = c[n]
o && ((t[o] = t[n]), delete t[n])
}
}),
e)
)
},
onMenuShareTimeline: function (e) {
M(
a.onMenuShareTimeline,
{
complete: function () {
k("shareTimeline", { title: e.title || i, desc: e.title || i, img_url: e.imgUrl || "", link: e.link || location.href, type: e.type || "link", data_url: e.dataUrl || "" }, e)
},
},
e
)
},
onMenuShareAppMessage: function (n) {
M(
a.onMenuShareAppMessage,
{
complete: function (e) {
"favorite" === e.scene ? k("sendAppMessage", { title: n.title || i, desc: n.desc || "", link: n.link || location.href, img_url: n.imgUrl || "", type: n.type || "link", data_url: n.dataUrl || "" }) : k("sendAppMessage", { title: n.title || i, desc: n.desc || "", link: n.link || location.href, img_url: n.imgUrl || "", type: n.type || "link", data_url: n.dataUrl || "" }, n)
},
},
n
)
},
onMenuShareQQ: function (e) {
M(
a.onMenuShareQQ,
{
complete: function () {
k("shareQQ", { title: e.title || i, desc: e.desc || "", img_url: e.imgUrl || "", link: e.link || location.href }, e)
},
},
e
)
},
onMenuShareWeibo: function (e) {
M(
a.onMenuShareWeibo,
{
complete: function () {
k("shareWeiboApp", { title: e.title || i, desc: e.desc || "", img_url: e.imgUrl || "", link: e.link || location.href }, e)
},
},
e
)
},
onMenuShareQZone: function (e) {
M(
a.onMenuShareQZone,
{
complete: function () {
k("shareQZone", { title: e.title || i, desc: e.desc || "", img_url: e.imgUrl || "", link: e.link || location.href }, e)
},
},
e
)
},
startRecord: function (e) {
k("startRecord", {}, e)
},
stopRecord: function (e) {
k("stopRecord", {}, e)
},
onVoiceRecordEnd: function (e) {
M("onVoiceRecordEnd", e)
},
playVoice: function (e) {
k("playVoice", { localId: e.localId }, e)
},
pauseVoice: function (e) {
k("pauseVoice", { localId: e.localId }, e)
},
stopVoice: function (e) {
k("stopVoice", { localId: e.localId }, e)
},
onVoicePlayEnd: function (e) {
M("onVoicePlayEnd", e)
},
uploadVoice: function (e) {
k("uploadVoice", { localId: e.localId, isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 }, e)
},
downloadVoice: function (e) {
k("downloadVoice", { serverId: e.serverId, isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 }, e)
},
translateVoice: function (e) {
k("translateVoice", { localId: e.localId, isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 }, e)
},
chooseImage: function (e) {
k(
"chooseImage",
{ scene: "1|2", count: e.count || 9, sizeType: e.sizeType || ["original", "compressed"], sourceType: e.sourceType || ["album", "camera"] },
((e._complete = function (e) {
if (l) {
var n = e.localIds
try {
n && (e.localIds = JSON.parse(n))
} catch (e) {}
}
}),
e)
)
},
getLocation: function (e) {},
getLocation: function (e) {
;(e = e || {}),
k(
a.getLocation,
{ type: e.type || "wgs84" },
((e._complete = function (e) {
delete e.type
}),
e)
)
},
previewImage: function (e) {
k(a.previewImage, { current: e.current, urls: e.urls }, e)
},
uploadImage: function (e) {
k("uploadImage", { localId: e.localId, isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 }, e)
},
downloadImage: function (e) {
k("downloadImage", { serverId: e.serverId, isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 }, e)
},
getLocalImgData: function (e) {
!1 === y
? ((y = !0),
k(
"getLocalImgData",
{ localId: e.localId },
((e._complete = function (e) {
var n
;(y = !1), 0 < v.length && ((n = v.shift()), wx.getLocalImgData(n))
}),
e)
))
: v.push(e)
},
getNetworkType: function (e) {
k(
"getNetworkType",
{},
((e._complete = function (e) {
var n = e,
e = n.errMsg,
i = ((n.errMsg = "getNetworkType:ok"), n.subtype)
if ((delete n.subtype, i)) n.networkType = i
else {
var i = e.indexOf(":"),
t = e.substring(i + 1)
switch (t) {
case "wifi":
case "edge":
case "wwan":
n.networkType = t
break
default:
n.errMsg = "getNetworkType:fail"
}
}
}),
e)
)
},
openLocation: function (e) {
k("openLocation", { latitude: e.latitude, longitude: e.longitude, name: e.name || "", address: e.address || "", scale: e.scale || 28, infoUrl: e.infoUrl || "" }, e)
},
hideOptionMenu: function (e) {
k("hideOptionMenu", {}, e)
},
showOptionMenu: function (e) {
k("showOptionMenu", {}, e)
},
closeWindow: function (e) {
k("closeWindow", {}, (e = e || {}))
},
hideMenuItems: function (e) {
k("hideMenuItems", { menuList: e.menuList }, e)
},
showMenuItems: function (e) {
k("showMenuItems", { menuList: e.menuList }, e)
},
hideAllNonBaseMenuItem: function (e) {
k("hideAllNonBaseMenuItem", {}, e)
},
showAllNonBaseMenuItem: function (e) {
k("showAllNonBaseMenuItem", {}, e)
},
scanQRCode: function (e) {
k(
"scanQRCode",
{ needResult: (e = e || {}).needResult || 0, scanType: e.scanType || ["qrCode", "barCode"] },
((e._complete = function (e) {
var n
u && (n = e.resultStr) && ((n = JSON.parse(n)), (e.resultStr = n && n.scan_code && n.scan_code.scan_result))
}),
e)
)
},
openAddress: function (e) {
k(
a.openAddress,
{},
((e._complete = function (e) {
;((e = e).postalCode = e.addressPostalCode), delete e.addressPostalCode, (e.provinceName = e.proviceFirstStageName), delete e.proviceFirstStageName, (e.cityName = e.addressCitySecondStageName), delete e.addressCitySecondStageName, (e.countryName = e.addressCountiesThirdStageName), delete e.addressCountiesThirdStageName, (e.detailInfo = e.addressDetailInfo), delete e.addressDetailInfo
}),
e)
)
},
openProductSpecificView: function (e) {
k(a.openProductSpecificView, { pid: e.productId, view_type: e.viewType || 0, ext_info: e.extInfo }, e)
},
addCard: function (e) {
for (var n = e.cardList, i = [], t = 0, o = n.length; t < o; ++t) {
var r = n[t],
r = { card_id: r.cardId, card_ext: r.cardExt }
i.push(r)
}
k(
a.addCard,
{ card_list: i },
((e._complete = function (e) {
if ((n = e.card_list)) {
for (var n, i = 0, t = (n = JSON.parse(n)).length; i < t; ++i) {
var o = n[i]
;(o.cardId = o.card_id), (o.cardExt = o.card_ext), (o.isSuccess = !!o.is_succ), delete o.card_id, delete o.card_ext, delete o.is_succ
}
;(e.cardList = n), delete e.card_list
}
}),
e)
)
},
chooseCard: function (e) {
k(
"chooseCard",
{ app_id: h.appId, location_id: e.shopId || "", sign_type: e.signType || "SHA1", card_id: e.cardId || "", card_type: e.cardType || "", card_sign: e.cardSign, time_stamp: e.timestamp + "", nonce_str: e.nonceStr },
((e._complete = function (e) {
;(e.cardList = e.choose_card_info), delete e.choose_card_info
}),
e)
)
},
openCard: function (e) {
for (var n = e.cardList, i = [], t = 0, o = n.length; t < o; ++t) {
var r = n[t],
r = { card_id: r.cardId, code: r.code }
i.push(r)
}
k(a.openCard, { card_list: i }, e)
},
consumeAndShareCard: function (e) {
k(a.consumeAndShareCard, { consumedCardId: e.cardId, consumedCode: e.code }, e)
},
chooseWXPay: function (e) {
k(a.chooseWXPay, x(e), e)
},
openEnterpriseRedPacket: function (e) {
k(a.openEnterpriseRedPacket, x(e), e)
},
startSearchBeacons: function (e) {
k(a.startSearchBeacons, { ticket: e.ticket }, e)
},
stopSearchBeacons: function (e) {
k(a.stopSearchBeacons, {}, e)
},
onSearchBeacons: function (e) {
M(a.onSearchBeacons, e)
},
openEnterpriseChat: function (e) {
k("openEnterpriseChat", { useridlist: e.userIds, chatname: e.groupName }, e)
},
launchMiniProgram: function (e) {
k(
"launchMiniProgram",
{
targetAppId: e.targetAppId,
path: (e => {
var n
if ("string" == typeof e && 0 < e.length) return (n = e.split("?")[0]), (n += ".html"), void 0 !== (e = e.split("?")[1]) ? n + "?" + e : n
})(e.path),
envVersion: e.envVersion,
},
e
)
},
miniProgram: {
navigateBack: function (e) {
;(e = e || {}),
B(function () {
k("invokeMiniProgramAPI", { name: "navigateBack", arg: { delta: e.delta || 1 } }, e)
})
},
navigateTo: function (e) {
B(function () {
k("invokeMiniProgramAPI", { name: "navigateTo", arg: { url: e.url } }, e)
})
},
redirectTo: function (e) {
B(function () {
k("invokeMiniProgramAPI", { name: "redirectTo", arg: { url: e.url } }, e)
})
},
switchTab: function (e) {
B(function () {
k("invokeMiniProgramAPI", { name: "switchTab", arg: { url: e.url } }, e)
})
},
reLaunch: function (e) {
B(function () {
k("invokeMiniProgramAPI", { name: "reLaunch", arg: { url: e.url } }, e)
})
},
postMessage: function (e) {
B(function () {
k("invokeMiniProgramAPI", { name: "postMessage", arg: e.data || {} }, e)
})
},
getEnv: function (e) {
B(function () {
e({ miniprogram: "miniprogram" === r.__wxjs_environment })
})
},
},
}),
(w = 1),
(T = {}),
n.addEventListener(
"error",
function (e) {
var n, i, t
l ||
((t = (n = e.target).tagName), (i = n.src), "IMG" != t && "VIDEO" != t && "AUDIO" != t && "SOURCE" != t) ||
(-1 != i.indexOf("wxlocalresource://") &&
(e.preventDefault(),
e.stopPropagation(),
(t = n["wx-id"]) || ((t = w++), (n["wx-id"] = t)),
T[t] ||
((T[t] = !0),
wx.ready(function () {
wx.getLocalImgData({
localId: i,
success: function (e) {
n.src = e.localData
},
})
}))))
},
!0
),
n.addEventListener(
"load",
function (e) {
var n
l || ((n = (e = e.target).tagName), "IMG" != n && "VIDEO" != n && "AUDIO" != n && "SOURCE" != n) || ((n = e["wx-id"]) && (T[n] = !1))
},
!0
),
e && (r.wx = r.jWeixin = _),
_
)
function k(n, e, i) {
r.WeixinJSBridge
? WeixinJSBridge.invoke(n, P(e), function (e) {
A(n, e, i)
})
: C(n, i)
}
function M(n, i, t) {
r.WeixinJSBridge
? WeixinJSBridge.on(n, function (e) {
t && t.trigger && t.trigger(e), A(n, e, i)
})
: C(n, t || i)
}
function P(e) {
return ((e = e || {}).appId = h.appId), (e.verifyAppId = h.appId), (e.verifySignType = "sha1"), (e.verifyTimestamp = h.timestamp + ""), (e.verifyNonceStr = h.nonceStr), (e.verifySignature = h.signature), e
}
function x(e) {
return { timeStamp: e.timestamp + "", nonceStr: e.nonceStr, package: e.package, paySign: e.paySign, signType: e.signType || "SHA1" }
}
function A(e, n, i) {
"openEnterpriseChat" == e && (n.errCode = n.err_code), delete n.err_code, delete n.err_desc, delete n.err_detail
var t = n.errMsg,
e =
(t ||
((t = n.err_msg),
delete n.err_msg,
(t = ((e, n) => {
var i,
t = c[e]
return t && (e = t), (t = "ok"), n && ((i = n.indexOf(":")), ("access denied" != (t = (t = (t = -1 != (t = -1 != (t = "failed" == (t = "confirm" == (t = n.substring(i + 1)) ? "ok" : t) ? "fail" : t).indexOf("failed_") ? t.substring(7) : t).indexOf("fail_") ? t.substring(5) : t).replace(/_/g, " ")).toLowerCase()) && "no permission to execute" != t) || (t = "permission denied"), "" == (t = "config" == e && "function not exist" == t ? "ok" : t)) && (t = "fail"), (n = e + ":" + t)
})(e, t)),
(n.errMsg = t)),
(i = i || {})._complete && (i._complete(n), delete i._complete),
(t = n.errMsg || ""),
h.debug && !i.isInnerInvoke && alert(JSON.stringify(n)),
t.indexOf(":"))
switch (t.substring(e + 1)) {
case "ok":
i.success && i.success(n)
break
case "cancel":
i.cancel && i.cancel(n)
break
default:
i.fail && i.fail(n)
}
i.complete && i.complete(n)
}
function V(e) {
if (e) {
for (var n = 0, i = e.length; n < i; ++n) {
var t = e[n],
t = a[t]
t && (e[n] = t)
}
return e
}
}
function C(e, n) {
var i
!h.debug || (n && n.isInnerInvoke) || ((i = c[e]) && (e = i), n && n._complete && delete n._complete, console.log('"' + e + '",', n || ""))
}
function L() {
return new Date().getTime()
}
function B(e) {
o && (r.WeixinJSBridge ? e() : n.addEventListener && n.addEventListener("WeixinJSBridgeReady", e, !1))
}
})

17109
package-lock.json generated Executable file → Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -14,7 +14,6 @@
"svg-sprite-loader": "^6.0.11", "svg-sprite-loader": "^6.0.11",
"vue": "^2.6.14", "vue": "^2.6.14",
"vue-router": "^3.5.1", "vue-router": "^3.5.1",
"vue-sanitize": "^0.2.3",
"vuex": "^3.6.2" "vuex": "^3.6.2"
}, },
"devDependencies": { "devDependencies": {
@@ -22,9 +21,11 @@
"@vue/cli-plugin-router": "~5.0.0", "@vue/cli-plugin-router": "~5.0.0",
"@vue/cli-plugin-vuex": "~5.0.0", "@vue/cli-plugin-vuex": "~5.0.0",
"@vue/cli-service": "~5.0.0", "@vue/cli-service": "~5.0.0",
"postcss": "^8.4.21",
"sass-loader": "^13.2.0", "sass-loader": "^13.2.0",
"vue-template-compiler": "^2.6.14", "vue-template-compiler": "^2.6.14",
"vue2-svg-icon": "^1.3.2" "vue2-svg-icon": "^1.3.2",
"webpack-bundle-analyzer": "^4.8.0"
}, },
"browserslist": [ "browserslist": [
"> 1%", "> 1%",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

BIN
public/img/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -1,17 +1,51 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang=""> <html lang="">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" /> <meta content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" />
<link rel="icon" href="<%= BASE_URL %>favicon.ico"> <!-- <link rel="icon" href="<%= BASE_URL %>/img/favicon.ico"> -->
<title><%= htmlWebpackPlugin.options.title %></title> <!-- <link rel="icon" href="<%= BASE_URL %>/img/favicon.ico"> -->
<link rel="icon" href="https://ansnid.oss-cn-shenzhen.aliyuncs.com/forum/img/favicon.ico" />
<!-- <title><%= htmlWebpackPlugin.options.title %></title> -->
<title>寄托家园留学论坛_出国留学经验分享|留学申请|留学考试|DIY留学</title>
<meta name="application-name" content="寄托家园留学论坛" />
<meta name="msapplication-tooltip" content="寄托家园留学论坛" />
<meta name="Keywords" content="美国留学,加拿大留学,香港留学,新加坡留学,英国留学,欧洲留学, 留学经验分享,DIY留学,留学申请,留学流程,留学费用,出国留学,留学论坛, 留学网站,留学考试,GRE,TOEFL,IBT,GMAT,IELTS,SAT,VISA,文书,签证" />
<meta name="Description" content="提供最有用的出国留学资讯和最热心的留学交流论坛。在BBS上你可以咨询签证面试机经offer奖学金名校专业等也可以分享雅思、托福、GRE的学习心得。无论你留学在美国、加拿大、英国还是澳洲都能在留学论坛上找到寄托情感的归宿。" />
<title>寄托论坛</title>
</head> </head>
<body> <body>
<noscript> <noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong> <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript> </noscript>
<div id="app"></div> <div id="app"></div>
<div style="display: none">
<!-- <script type="text/javascript" src="//v1.cnzz.com/z_stat.php?id=1281224882&amp;web_id=1281224882"></script> -->
<script>
let $baseURL = "https://framework.x-php.com/forum/"
document.addEventListener("DOMContentLoaded", function () {
const script = document.createElement("script")
script.src = (["localhost"].includes(location.hostname) ? "" : $baseURL) + "/js/jweixin-1.3.2.js"
document.head.appendChild(script)
})
</script>
<script defer src="//stat.gter.net/script.js" data-website-id="28aa17dc7c163e7e7cf88d0c556a729b"></script>
<script type="text/javascript">
var _hmt = _hmt || []
;(function () {
var hm = document.createElement("script")
hm.src = "//hm.baidu.com/hm.js?4bd66cbe45a640b607fe46c48f658746"
var s = document.getElementsByTagName("script")[0]
s.parentNode.insertBefore(hm, s)
})()
</script>
</div>
<!-- 这个统计代码 明天加在H5论坛页面 -->
<!-- built files will be auto injected --> <!-- built files will be auto injected -->
</body> </body>
</html> </html>

545
public/js/jweixin-1.3.2.js Normal file
View File

@@ -0,0 +1,545 @@
;((e, n) => {
"function" == typeof define && (define.amd || define.cmd)
? define(function () {
return n(e)
})
: n(e, !0)
})(this, function (r, e) {
var a, c, n, i, t, s, d, o, l, u, p, f, m, g, h, I, S, y, v, _, w, T
if (!r.jWeixin)
return (
(a = { config: "preVerifyJSAPI", onMenuShareTimeline: "menu:share:timeline", onMenuShareAppMessage: "menu:share:appmessage", onMenuShareQQ: "menu:share:qq", onMenuShareWeibo: "menu:share:weiboApp", onMenuShareQZone: "menu:share:QZone", previewImage: "imagePreview", getLocation: "geoLocation", openProductSpecificView: "openProductViewWithPid", addCard: "batchAddCard", openCard: "batchViewCard", chooseWXPay: "getBrandWCPayRequest", openEnterpriseRedPacket: "getRecevieBizHongBaoRequest", startSearchBeacons: "startMonitoringBeacons", stopSearchBeacons: "stopMonitoringBeacons", onSearchBeacons: "onBeaconsInRange", consumeAndShareCard: "consumedShareCard", openAddress: "editAddress" }),
(c = (() => {
var e,
n = {}
for (e in a) n[a[e]] = e
return n
})()),
(i = (n = r.document).title),
(t = navigator.userAgent.toLowerCase()),
(f = navigator.platform.toLowerCase()),
(s = !(!f.match("mac") && !f.match("win"))),
(d = -1 != t.indexOf("wxdebugger")),
(o = -1 != t.indexOf("micromessenger")),
(l = -1 != t.indexOf("android")),
(u = -1 != t.indexOf("iphone") || -1 != t.indexOf("ipad")),
(p = (f = t.match(/micromessenger\/(\d+\.\d+\.\d+)/) || t.match(/micromessenger\/(\d+\.\d+)/)) ? f[1] : ""),
(m = { initStartTime: L(), initEndTime: 0, preVerifyStartTime: 0, preVerifyEndTime: 0 }),
(g = { version: 1, appId: "", initTime: 0, preVerifyTime: 0, networkType: "", isPreVerifyOk: 1, systemType: u ? 1 : l ? 2 : -1, clientVersion: p, url: encodeURIComponent(location.href) }),
(h = {}),
(I = { _completes: [] }),
(S = { state: 0, data: {} }),
B(function () {
m.initEndTime = L()
}),
(y = !1),
(v = []),
(_ = {
config: function (e) {
C("config", (h = e))
var o = !1 !== h.check
B(function () {
if (o)
k(
a.config,
{ verifyJsApiList: V(h.jsApiList) },
((I._complete = function (e) {
;(m.preVerifyEndTime = L()), (S.state = 1), (S.data = e)
}),
(I.success = function (e) {
g.isPreVerifyOk = 0
}),
(I.fail = function (e) {
I._fail ? I._fail(e) : (S.state = -1)
}),
(t = I._completes).push(function () {
var n
s ||
d ||
h.debug ||
p < "6.0.2" ||
g.systemType < 0 ||
((n = new Image()),
(g.appId = h.appId),
(g.initTime = m.initEndTime - m.initStartTime),
(g.preVerifyTime = m.preVerifyEndTime - m.preVerifyStartTime),
_.getNetworkType({
isInnerInvoke: !0,
success: function (e) {
;(g.networkType = e.networkType), (n.src = "https://open.weixin.qq.com/sdk/report?v=" + g.version + "&o=" + g.isPreVerifyOk + "&s=" + g.systemType + "&c=" + g.clientVersion + "&a=" + g.appId + "&n=" + g.networkType + "&i=" + g.initTime + "&p=" + g.preVerifyTime + "&u=" + g.url)
},
}))
}),
(I.complete = function (e) {
for (var n = 0, i = t.length; n < i; ++n) t[n]()
I._completes = []
}),
I)
),
(m.preVerifyStartTime = L())
else {
S.state = 1
for (var e = I._completes, n = 0, i = e.length; n < i; ++n) e[n]()
I._completes = []
}
var t
}),
_.invoke ||
((_.invoke = function (e, n, i) {
r.WeixinJSBridge && WeixinJSBridge.invoke(e, P(n), i)
}),
(_.on = function (e, n) {
r.WeixinJSBridge && WeixinJSBridge.on(e, n)
}))
},
ready: function (e) {
;(0 != S.state || (I._completes.push(e), !o && h.debug)) && e()
},
error: function (e) {
p < "6.0.2" || (-1 == S.state ? e(S.data) : (I._fail = e))
},
checkJsApi: function (e) {
k(
"checkJsApi",
{ jsApiList: V(e.jsApiList) },
((e._complete = function (e) {
l && (i = e.checkResult) && (e.checkResult = JSON.parse(i))
var n,
i = e,
t = i.checkResult
for (n in t) {
var o = c[n]
o && ((t[o] = t[n]), delete t[n])
}
}),
e)
)
},
onMenuShareTimeline: function (e) {
M(
a.onMenuShareTimeline,
{
complete: function () {
k("shareTimeline", { title: e.title || i, desc: e.title || i, img_url: e.imgUrl || "", link: e.link || location.href, type: e.type || "link", data_url: e.dataUrl || "" }, e)
},
},
e
)
},
onMenuShareAppMessage: function (n) {
M(
a.onMenuShareAppMessage,
{
complete: function (e) {
"favorite" === e.scene ? k("sendAppMessage", { title: n.title || i, desc: n.desc || "", link: n.link || location.href, img_url: n.imgUrl || "", type: n.type || "link", data_url: n.dataUrl || "" }) : k("sendAppMessage", { title: n.title || i, desc: n.desc || "", link: n.link || location.href, img_url: n.imgUrl || "", type: n.type || "link", data_url: n.dataUrl || "" }, n)
},
},
n
)
},
onMenuShareQQ: function (e) {
M(
a.onMenuShareQQ,
{
complete: function () {
k("shareQQ", { title: e.title || i, desc: e.desc || "", img_url: e.imgUrl || "", link: e.link || location.href }, e)
},
},
e
)
},
onMenuShareWeibo: function (e) {
M(
a.onMenuShareWeibo,
{
complete: function () {
k("shareWeiboApp", { title: e.title || i, desc: e.desc || "", img_url: e.imgUrl || "", link: e.link || location.href }, e)
},
},
e
)
},
onMenuShareQZone: function (e) {
M(
a.onMenuShareQZone,
{
complete: function () {
k("shareQZone", { title: e.title || i, desc: e.desc || "", img_url: e.imgUrl || "", link: e.link || location.href }, e)
},
},
e
)
},
startRecord: function (e) {
k("startRecord", {}, e)
},
stopRecord: function (e) {
k("stopRecord", {}, e)
},
onVoiceRecordEnd: function (e) {
M("onVoiceRecordEnd", e)
},
playVoice: function (e) {
k("playVoice", { localId: e.localId }, e)
},
pauseVoice: function (e) {
k("pauseVoice", { localId: e.localId }, e)
},
stopVoice: function (e) {
k("stopVoice", { localId: e.localId }, e)
},
onVoicePlayEnd: function (e) {
M("onVoicePlayEnd", e)
},
uploadVoice: function (e) {
k("uploadVoice", { localId: e.localId, isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 }, e)
},
downloadVoice: function (e) {
k("downloadVoice", { serverId: e.serverId, isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 }, e)
},
translateVoice: function (e) {
k("translateVoice", { localId: e.localId, isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 }, e)
},
chooseImage: function (e) {
k(
"chooseImage",
{ scene: "1|2", count: e.count || 9, sizeType: e.sizeType || ["original", "compressed"], sourceType: e.sourceType || ["album", "camera"] },
((e._complete = function (e) {
if (l) {
var n = e.localIds
try {
n && (e.localIds = JSON.parse(n))
} catch (e) {}
}
}),
e)
)
},
getLocation: function (e) {},
getLocation: function (e) {
;(e = e || {}),
k(
a.getLocation,
{ type: e.type || "wgs84" },
((e._complete = function (e) {
delete e.type
}),
e)
)
},
previewImage: function (e) {
k(a.previewImage, { current: e.current, urls: e.urls }, e)
},
uploadImage: function (e) {
k("uploadImage", { localId: e.localId, isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 }, e)
},
downloadImage: function (e) {
k("downloadImage", { serverId: e.serverId, isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 }, e)
},
getLocalImgData: function (e) {
!1 === y
? ((y = !0),
k(
"getLocalImgData",
{ localId: e.localId },
((e._complete = function (e) {
var n
;(y = !1), 0 < v.length && ((n = v.shift()), wx.getLocalImgData(n))
}),
e)
))
: v.push(e)
},
getNetworkType: function (e) {
k(
"getNetworkType",
{},
((e._complete = function (e) {
var n = e,
e = n.errMsg,
i = ((n.errMsg = "getNetworkType:ok"), n.subtype)
if ((delete n.subtype, i)) n.networkType = i
else {
var i = e.indexOf(":"),
t = e.substring(i + 1)
switch (t) {
case "wifi":
case "edge":
case "wwan":
n.networkType = t
break
default:
n.errMsg = "getNetworkType:fail"
}
}
}),
e)
)
},
openLocation: function (e) {
k("openLocation", { latitude: e.latitude, longitude: e.longitude, name: e.name || "", address: e.address || "", scale: e.scale || 28, infoUrl: e.infoUrl || "" }, e)
},
hideOptionMenu: function (e) {
k("hideOptionMenu", {}, e)
},
showOptionMenu: function (e) {
k("showOptionMenu", {}, e)
},
closeWindow: function (e) {
k("closeWindow", {}, (e = e || {}))
},
hideMenuItems: function (e) {
k("hideMenuItems", { menuList: e.menuList }, e)
},
showMenuItems: function (e) {
k("showMenuItems", { menuList: e.menuList }, e)
},
hideAllNonBaseMenuItem: function (e) {
k("hideAllNonBaseMenuItem", {}, e)
},
showAllNonBaseMenuItem: function (e) {
k("showAllNonBaseMenuItem", {}, e)
},
scanQRCode: function (e) {
k(
"scanQRCode",
{ needResult: (e = e || {}).needResult || 0, scanType: e.scanType || ["qrCode", "barCode"] },
((e._complete = function (e) {
var n
u && (n = e.resultStr) && ((n = JSON.parse(n)), (e.resultStr = n && n.scan_code && n.scan_code.scan_result))
}),
e)
)
},
openAddress: function (e) {
k(
a.openAddress,
{},
((e._complete = function (e) {
;((e = e).postalCode = e.addressPostalCode), delete e.addressPostalCode, (e.provinceName = e.proviceFirstStageName), delete e.proviceFirstStageName, (e.cityName = e.addressCitySecondStageName), delete e.addressCitySecondStageName, (e.countryName = e.addressCountiesThirdStageName), delete e.addressCountiesThirdStageName, (e.detailInfo = e.addressDetailInfo), delete e.addressDetailInfo
}),
e)
)
},
openProductSpecificView: function (e) {
k(a.openProductSpecificView, { pid: e.productId, view_type: e.viewType || 0, ext_info: e.extInfo }, e)
},
addCard: function (e) {
for (var n = e.cardList, i = [], t = 0, o = n.length; t < o; ++t) {
var r = n[t],
r = { card_id: r.cardId, card_ext: r.cardExt }
i.push(r)
}
k(
a.addCard,
{ card_list: i },
((e._complete = function (e) {
if ((n = e.card_list)) {
for (var n, i = 0, t = (n = JSON.parse(n)).length; i < t; ++i) {
var o = n[i]
;(o.cardId = o.card_id), (o.cardExt = o.card_ext), (o.isSuccess = !!o.is_succ), delete o.card_id, delete o.card_ext, delete o.is_succ
}
;(e.cardList = n), delete e.card_list
}
}),
e)
)
},
chooseCard: function (e) {
k(
"chooseCard",
{ app_id: h.appId, location_id: e.shopId || "", sign_type: e.signType || "SHA1", card_id: e.cardId || "", card_type: e.cardType || "", card_sign: e.cardSign, time_stamp: e.timestamp + "", nonce_str: e.nonceStr },
((e._complete = function (e) {
;(e.cardList = e.choose_card_info), delete e.choose_card_info
}),
e)
)
},
openCard: function (e) {
for (var n = e.cardList, i = [], t = 0, o = n.length; t < o; ++t) {
var r = n[t],
r = { card_id: r.cardId, code: r.code }
i.push(r)
}
k(a.openCard, { card_list: i }, e)
},
consumeAndShareCard: function (e) {
k(a.consumeAndShareCard, { consumedCardId: e.cardId, consumedCode: e.code }, e)
},
chooseWXPay: function (e) {
k(a.chooseWXPay, x(e), e)
},
openEnterpriseRedPacket: function (e) {
k(a.openEnterpriseRedPacket, x(e), e)
},
startSearchBeacons: function (e) {
k(a.startSearchBeacons, { ticket: e.ticket }, e)
},
stopSearchBeacons: function (e) {
k(a.stopSearchBeacons, {}, e)
},
onSearchBeacons: function (e) {
M(a.onSearchBeacons, e)
},
openEnterpriseChat: function (e) {
k("openEnterpriseChat", { useridlist: e.userIds, chatname: e.groupName }, e)
},
launchMiniProgram: function (e) {
k(
"launchMiniProgram",
{
targetAppId: e.targetAppId,
path: (e => {
var n
if ("string" == typeof e && 0 < e.length) return (n = e.split("?")[0]), (n += ".html"), void 0 !== (e = e.split("?")[1]) ? n + "?" + e : n
})(e.path),
envVersion: e.envVersion,
},
e
)
},
miniProgram: {
navigateBack: function (e) {
;(e = e || {}),
B(function () {
k("invokeMiniProgramAPI", { name: "navigateBack", arg: { delta: e.delta || 1 } }, e)
})
},
navigateTo: function (e) {
B(function () {
k("invokeMiniProgramAPI", { name: "navigateTo", arg: { url: e.url } }, e)
})
},
redirectTo: function (e) {
B(function () {
k("invokeMiniProgramAPI", { name: "redirectTo", arg: { url: e.url } }, e)
})
},
switchTab: function (e) {
B(function () {
k("invokeMiniProgramAPI", { name: "switchTab", arg: { url: e.url } }, e)
})
},
reLaunch: function (e) {
B(function () {
k("invokeMiniProgramAPI", { name: "reLaunch", arg: { url: e.url } }, e)
})
},
postMessage: function (e) {
B(function () {
k("invokeMiniProgramAPI", { name: "postMessage", arg: e.data || {} }, e)
})
},
getEnv: function (e) {
B(function () {
e({ miniprogram: "miniprogram" === r.__wxjs_environment })
})
},
},
}),
(w = 1),
(T = {}),
n.addEventListener(
"error",
function (e) {
var n, i, t
l ||
((t = (n = e.target).tagName), (i = n.src), "IMG" != t && "VIDEO" != t && "AUDIO" != t && "SOURCE" != t) ||
(-1 != i.indexOf("wxlocalresource://") &&
(e.preventDefault(),
e.stopPropagation(),
(t = n["wx-id"]) || ((t = w++), (n["wx-id"] = t)),
T[t] ||
((T[t] = !0),
wx.ready(function () {
wx.getLocalImgData({
localId: i,
success: function (e) {
n.src = e.localData
},
})
}))))
},
!0
),
n.addEventListener(
"load",
function (e) {
var n
l || ((n = (e = e.target).tagName), "IMG" != n && "VIDEO" != n && "AUDIO" != n && "SOURCE" != n) || ((n = e["wx-id"]) && (T[n] = !1))
},
!0
),
e && (r.wx = r.jWeixin = _),
_
)
function k(n, e, i) {
r.WeixinJSBridge
? WeixinJSBridge.invoke(n, P(e), function (e) {
A(n, e, i)
})
: C(n, i)
}
function M(n, i, t) {
r.WeixinJSBridge
? WeixinJSBridge.on(n, function (e) {
t && t.trigger && t.trigger(e), A(n, e, i)
})
: C(n, t || i)
}
function P(e) {
return ((e = e || {}).appId = h.appId), (e.verifyAppId = h.appId), (e.verifySignType = "sha1"), (e.verifyTimestamp = h.timestamp + ""), (e.verifyNonceStr = h.nonceStr), (e.verifySignature = h.signature), e
}
function x(e) {
return { timeStamp: e.timestamp + "", nonceStr: e.nonceStr, package: e.package, paySign: e.paySign, signType: e.signType || "SHA1" }
}
function A(e, n, i) {
"openEnterpriseChat" == e && (n.errCode = n.err_code), delete n.err_code, delete n.err_desc, delete n.err_detail
var t = n.errMsg,
e =
(t ||
((t = n.err_msg),
delete n.err_msg,
(t = ((e, n) => {
var i,
t = c[e]
return t && (e = t), (t = "ok"), n && ((i = n.indexOf(":")), ("access denied" != (t = (t = (t = -1 != (t = -1 != (t = "failed" == (t = "confirm" == (t = n.substring(i + 1)) ? "ok" : t) ? "fail" : t).indexOf("failed_") ? t.substring(7) : t).indexOf("fail_") ? t.substring(5) : t).replace(/_/g, " ")).toLowerCase()) && "no permission to execute" != t) || (t = "permission denied"), "" == (t = "config" == e && "function not exist" == t ? "ok" : t)) && (t = "fail"), (n = e + ":" + t)
})(e, t)),
(n.errMsg = t)),
(i = i || {})._complete && (i._complete(n), delete i._complete),
(t = n.errMsg || ""),
h.debug && !i.isInnerInvoke && alert(JSON.stringify(n)),
t.indexOf(":"))
switch (t.substring(e + 1)) {
case "ok":
i.success && i.success(n)
break
case "cancel":
i.cancel && i.cancel(n)
break
default:
i.fail && i.fail(n)
}
i.complete && i.complete(n)
}
function V(e) {
if (e) {
for (var n = 0, i = e.length; n < i; ++n) {
var t = e[n],
t = a[t]
t && (e[n] = t)
}
return e
}
}
function C(e, n) {
var i
!h.debug || (n && n.isInnerInvoke) || ((i = c[e]) && (e = i), n && n._complete && delete n._complete, console.log('"' + e + '",', n || ""))
}
function L() {
return new Date().getTime()
}
function B(e) {
o && (r.WeixinJSBridge ? e() : n.addEventListener && n.addEventListener("WeixinJSBridgeReady", e, !1))
}
})

View File

@@ -1,11 +1,13 @@
<!-- node 版本是18.20.0 -->
<template> <template>
<div id="app"> <div id="app">
<div class="container"> <div class="container">
<router-view /> <router-view />
</div> </div>
</div> </div>
</template> </template>
<script src="../public/js/jweixin-1.3.2.js"></script>
<script> <script>
export default { export default {
@@ -13,24 +15,182 @@ export default {
data() { data() {
return { return {
loading: null, loading: null,
pathname: "",
parameterObject: {},
isPc: false,
socketTask: null,
} }
}, },
watch: { watch: {
// "$route": {
// handler(to, from) {
// console.log("1111111");
// //避免首次获取不到window._czc
// if (window._czc) {
// let location = window.location
// let contentUrl = location.pathname + location.hash
// let refererUrl = "/"
// window._czc.push(["_trackPageview", contentUrl, refererUrl])
// window._czc.push(["_setAutoPageview", false])
// }
// if (window._hmt) {
// if (to["path"]) window._hmt.push(["_trackPageview", to["fullPath"]])
// }
// },
// // immediate: true, // 首次进入页面即执行
// },
}, },
mounted() { mounted() {
this.$store.dispatch('fetchHistoricalSearch') // 获取历史搜索记录 // console.log(new Date());
this.$store.dispatch('getAllForum', this) // 获取全部板块 console.log("初始化");
// this.$store.dispatch('getUserInfo', this) /// 获取用户信息
this.$store.dispatch("fetchHistoricalSearch") // 获取历史搜索记录
this.$store.dispatch("getAllForum", this) // 获取全部板块
// this.isJudgePc()
// this.$skipUrl("gggg", false)
// setTimeout(() => {
// // this.hasMiucmsSessionCookie()
// // this.useSocket
// console.log(this.$store.state['user']);
// }, 1000)
let timer = setInterval(() => {
if (Object.keys(this.$store.state.user).length !== 0) {
this.useSocket()
clearInterval(timer)
}
}, 1000)
}, },
methods: {
// 开启socket
useSocket() {
let token = this.getMiucmsSessionCookie() || ""
this.socketTask = new WebSocket(`wss://socket.gter.net?token=${token}`)
this.socketTask.onopen = () => {
let user = this.$store.state.user || {}
if (user && token) {
this.socketTask.send(
JSON.stringify({
type: "bind",
data: {
token,
uid: user.uid || 0,
},
})
)
}
setTimeout(() => this.timedTransmission(), 50000)
}
this.socketTask.onclose = () => {
console.log("socket关闭了", new Date())
}
},
// 定时发送
timedTransmission() {
if (this.socketTask.readyState != 1) return
this.socketTask.send(JSON.stringify({type: "ping"}))
setTimeout(() => this.timedTransmission(), 50000)
},
getMiucmsSessionCookie() {
let cookies = document.cookie.split(";")
for (let i = 0; i < cookies.length; i++) {
let cookie = cookies[i].split("=")
if (cookie[0].trim() === "miucms_session") {
return cookie[1]
}
}
return null
},
isJudgePc() {
const userAgentInfo = navigator.userAgent
const Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]
let flag = true
for (let i = 0; i < Agents.length; i++) {
if (userAgentInfo.indexOf(Agents[i]) > 0) {
flag = false
break
}
}
if (flag) {
console.log("flag", flag)
let pathname = window.location.pathname
const queryString = window.location.search
const parameters = queryString.substring(1)
let parameterObject = Object.fromEntries(new URLSearchParams(parameters))
this.pathname = pathname
this.parameterObject = parameterObject
if (this.pathname.indexOf("allSections") != -1 && this.parameterObject["fid"]) {
this.handleNeedAllSkipPc()
return
}
if (this.pathname.indexOf("userIndex") != -1) {
this.handleNeedInfo()
return
}
let url = ""
if (pathname.indexOf("detailIndex") != -1) url = `https://bbs.gter.net/thread-${parameterObject["tid"]}-${parameterObject["page"] || 1}-1.html`
if (pathname.indexOf("searchResult") != -1) url = `https://search.gter.net/index.html?type=forum${parameterObject["kw"] ? `&kw=${parameterObject["kw"]}` : ""}`
if (pathname.indexOf("allSections") != -1 && !parameterObject["fid"]) url = `https://bbs.gter.net/forum.php`
if (pathname.indexOf("recommend") != -1) url = `https://bbs.gter.net/forum.php`
if (pathname.indexOf("collect") != -1) url = `https://bbs.gter.net/forum.php`
if (pathname == "/" || pathname == "" || !pathname) url = `https://bbs.gter.net/forum.php`
if (url) this.$skipUrl(url, false)
}
},
// 处理需要user信息的跳转PC端
handleNeedInfo() {
let user = this.$store.state.user || {}
let url = ""
if (JSON.stringify(user) != "{}") {
url = `https://bbs.gter.net/home.php?mod=space&uid=${user.uin}`
this.$skipUrl(url, false)
} else {
setTimeout(() => {
this.handleNeedInfo()
}, 300)
}
},
// 处理需要全部板块的跳转PC端
handleNeedAllSkipPc() {
let allForumList = this.$store.state.allForumList || []
let url = ""
let fid = this.parameterObject["fid"] || null
if (allForumList.length != 0) {
allForumList.forEach((element, index) => {
if (element.fid == fid) url = `https://bbs.gter.net/forum.php?gid=${element.fid}`
element.data.forEach((el, i) => {
if (el.fid == fid) url = `https://bbs.gter.net/forum-${el.fid}-${this.parameterObject["page"] || 1}.html`
})
})
this.$skipUrl(url, false)
} else {
setTimeout(() => {
this.handleNeedAllSkipPc()
}, 300)
}
},
},
} }
</script> </script>
<style lang="scss"> <style lang="scss">
@import 'assets/css/normalize.css'; @import "assets/css/normalize.css";
@import 'assets/css/public.scss'; //帖子内容样式 @import "assets/css/public.scss"; //帖子内容样式
#app { #app {
font-family: Avenir, Helvetica, Arial, sans-serif; font-family: Avenir, Helvetica, Arial, sans-serif;
@@ -110,8 +270,8 @@ a {
// 阴影 // 阴影
.shadow { .shadow {
-webkit-box-shadow: 0 0 .3rem rgba(0, 0, 0, .1); -webkit-box-shadow: 0 0 0.3rem rgba(0, 0, 0, 0.1);
box-shadow: 0 0 .3rem rgba(0, 0, 0, .1); box-shadow: 0 0 0.3rem rgba(0, 0, 0, 0.1);
} }
// 弹窗公共类 蒙版 // 弹窗公共类 蒙版

View File

@@ -1,6 +1,6 @@
// 热门版块标签 // 热门版块标签
.hot-box { .hot-box {
padding: .34rem 0 0.3rem; padding: .34rem 0 0;
display: flex; display: flex;
justify-content: flex-start; justify-content: flex-start;
flex-wrap: wrap; flex-wrap: wrap;
@@ -12,9 +12,9 @@
font-size: 0.3rem; font-size: 0.3rem;
margin: 0 .16rem .24rem 0; margin: 0 .16rem .24rem 0;
padding: 0 0.15rem; padding: 0 0.15rem;
height: 0.72rem;
line-height: 0.72rem; line-height: 0.72rem;
text-align: center; text-align: center;
word-break: break-word;
&.active { &.active {
border: 0.02rem solid #62B1FF; border: 0.02rem solid #62B1FF;
@@ -93,12 +93,18 @@ section {
flex-direction: row; flex-direction: row;
justify-content: space-between; justify-content: space-between;
.bottom-box { .bottom-box {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
justify-content: flex-start; justify-content: flex-start;
align-items: center; align-items: center;
&:first-of-type {
margin-right: .2rem;
}
.icon-head { .icon-head {
width: 0.64rem; width: 0.64rem;
height: 0.64rem; height: 0.64rem;
@@ -108,16 +114,15 @@ section {
.bottom-name { .bottom-name {
margin-left: 0.15rem; margin-left: 0.15rem;
font-size: 0.32rem; font-size: 0.32rem;
word-break: break-word;
} }
.bottom-right { .bottom-right {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
align-items: center; align-items: center;
// padding-left: 0.25rem;
&:last-child { &:last-child {
// margin-left: 0.133333rem;
margin-left: .4rem; margin-left: .4rem;
} }
@@ -161,7 +166,6 @@ section {
transform: rotate(45deg); transform: rotate(45deg);
transform-origin: bottom; transform-origin: bottom;
margin-top: 0.05rem; margin-top: 0.05rem;
// margin-top: 0.01rem;
margin-left: 0.25rem; margin-left: 0.25rem;
width: 0.9rem; width: 0.9rem;
font-size: 0.3rem; font-size: 0.3rem;
@@ -174,16 +178,11 @@ section {
// 广告 // 广告
.banner-box { .banner-box {
border-radius: 0.32rem; margin-bottom: 0.32rem;
margin-bottom: 0.2rem;
// 广告图
.banner {
width: 100%; width: 100%;
display: block; display: block;
border-radius: 0.32rem; border-radius: 0.32rem;
} }
}
// 分页 // 分页
.paging-box { .paging-box {

View File

@@ -0,0 +1,9 @@
{
"{:1_1:}": "https://bbs.gter.net/static/image/smiley/default/smile.gif",
":(": "https://bbs.gter.net/static/image/smiley/default/frown.gif",
":@": "https://bbs.gter.net/static/image/smiley/default/default.gif",
":O": "https://bbs.gter.net/static/image/smiley/default/shocked.gif",
":p": "https://bbs.gter.net/static/image/smiley/default/frown.gif",
":(": "https://bbs.gter.net/static/image/smiley/default/frown.gif",
":(": "https://bbs.gter.net/static/image/smiley/default/frown.gif"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

View File

@@ -12,14 +12,12 @@
<div class="discussion-single-box flexflex flex1"> <div class="discussion-single-box flexflex flex1">
<div class="discussion-single-content flexacenter flex1"> <div class="discussion-single-content flexacenter flex1">
<input class="discussion-single-input flex1" cursor-spacing="5" type="text" <input class="discussion-single-input flex1" cursor-spacing="5" type="text"
:placeholder="twoCommentData ? '写回复…' : '想问啥,大胆问…'" :value="commentContent" :placeholder="twoCommentData ? '写回复…' : '想问啥,大胆问…'" maxlength="500" :value="commentContent"
@input="inputCommentContent($event)" v-focus /> @input="inputCommentContent($event)" v-focus />
<img class="discussion-single-input-icom" @click.stop="setValue()" <img class="discussion-single-input-icom" @click.stop="setValue()"
src="@/assets/img/detail/unfold.png" /> src="@/assets/img/detail/unfold.png" />
</div> </div>
<div class="discussion-single-btn flexcenter" @click.stop="postComment()"> <div class="discussion-single-btn flexcenter" @click.stop="postComment()">发布</div>
发布
</div>
</div> </div>
</div> </div>
</div> </div>
@@ -59,7 +57,6 @@ export default {
props: ["twoCommentData", "popState", "commentContent"], props: ["twoCommentData", "popState", "commentContent"],
mounted() { mounted() {
// console.log("子组件");
}, },
methods: { methods: {
@@ -73,8 +70,6 @@ export default {
this.$parent.twoCommentData = null this.$parent.twoCommentData = null
this.$parent.popState = "" this.$parent.popState = ""
this.$parent.commentContent = "" this.$parent.commentContent = ""
}, },
// 清空 // 清空
@@ -107,11 +102,17 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.pop-box {
height: 100%;
}
.pop-box-box { .pop-box-box {
width: 100vw; width: 100vw;
background-color: #fff; background-color: #fff;
border-radius: .64rem .64rem 0 0; border-radius: .64rem .64rem 0 0;
position: relative; position: fixed;
bottom: 0;
left: 0;
} }
.discussion-single-box { .discussion-single-box {
@@ -148,6 +149,7 @@ export default {
.discussion-single-input { .discussion-single-input {
height: 100%; height: 100%;
font-size: 0.4rem;
} }
.discussion-header { .discussion-header {
@@ -189,7 +191,8 @@ export default {
.discussion-multi-content { .discussion-multi-content {
position: relative; position: relative;
height: 8.84rem; // height: 8.84rem;
max-height: 40vh;
box-sizing: border-box; box-sizing: border-box;
} }
@@ -198,7 +201,8 @@ export default {
font-size: .4rem; font-size: .4rem;
padding: .32rem; padding: .32rem;
box-sizing: border-box; box-sizing: border-box;
height: 50vh; // height: 50vh;
height: 40vh;
overflow: auto; overflow: auto;

View File

@@ -21,34 +21,35 @@
<div class="head-arrows" :class="{ animation: headMorePopState }" v-if="headMorePopState"></div> <div class="head-arrows" :class="{ animation: headMorePopState }" v-if="headMorePopState"></div>
<div class="head-more-pop" :class="{ animation: headMorePopState }"> <div class="head-more-pop" :class="{ animation: headMorePopState }">
<div class="head-more-userinfo flex1 flexacenter"> <div class="head-more-userinfo flex1 flexacenter">
<div class="head-more-left flexacenter"> <div class="head-more-left flexacenter" v-if="islogin">
<router-link to="/user"> <router-link class="flexacenter" to="/user" @click.native="headMorePopState = !headMorePopState">
<img class="head-more-userinfo-avatar" :src="userInfo.avatar || './img/defaultAvatar.jpg'" /> <img class="head-more-userinfo-avatar" :src="userInfo.avatar || $baseURL + '/img/defaultAvatar.jpg'" />
<div class="head-more-userinfo-username">{{ userInfo.nickname || "未登录" }}</div>
</router-link> </router-link>
</div>
<div class="head-more-left flexacenter" v-else @click="handleRegister()">
<img class="head-more-userinfo-avatar" :src="userInfo.avatar || $baseURL + '/img/defaultAvatar.jpg'" />
<div class="head-more-userinfo-username">{{ userInfo.nickname || "未登录" }}</div>
</div>
<div class="head-more-userinfo-username">
{{ userInfo.nickname || '未登录' }}
</div>
</div>
<div class="head-more-right"> <div class="head-more-right">
<!-- 消息 --> <!-- 消息 -->
<div class="information-box" v-if="userInfo.messagenum"> <div class="information-box" v-if="userInfo.messagenum">
<img class="information-icon" src="@/assets/img/headerNav/information.png" /> <img class="information-icon" src="@/assets/img/icon/email.png" />
<div class="red-dot flexcenter">{{ userInfo.messagenum }}</div> <div class="red-dot flexcenter">{{ userInfo.messagenum }}</div>
</div> </div>
<!-- 登录按钮 --> <!-- 登录按钮 -->
<div v-if="!islogin" class="loginBtn flexcenter" @click="handleRegister"> <div v-if="!islogin" class="loginBtn flexcenter" @click="handleRegister()">
登录/注册 登录/注册
</div> </div>
</div> </div>
</div> </div>
<div class="tab-list"> <div class="tab-list">
<a class="tab-item flexacenter" :href="item.url" target="_blank" :class="{ pitch: item.current == 1 }" <a class="tab-item flexacenter" :href="item.url" target="_blank" :class="{ pitch: item.current == 1 }" v-for="(item, index) in menu" :key="index">{{ item.name }}</a>
v-for="(item, index) in menu" :key="index">{{ item.name }}</a>
</div> </div>
<div class="head-more-post flexcenter" @click.stop="$skipUrl('https://www.gter.net/bbs/post.html', false)"> <div class="head-more-post flexcenter" @click.stop="$skipUrl(invitationPost, false)">
<div class="head-more-post-icon flexcenter"> <div class="head-more-post-icon flexcenter">
<svg-icon icon-class="addyellow" class-name="head-more-post-img"></svg-icon> <svg-icon icon-class="addyellow" class-name="head-more-post-img"></svg-icon>
</div> </div>
@@ -58,8 +59,6 @@
<div v-if="headMorePopState" @click="headMorePopState = !headMorePopState"> <div v-if="headMorePopState" @click="headMorePopState = !headMorePopState">
<svg-icon icon-class="cross" class-name="cross-icon"></svg-icon> <svg-icon icon-class="cross" class-name="cross-icon"></svg-icon>
</div> </div>
</div> </div>
</div> </div>
<div class="head-pop" v-if="headMorePopState" @click="headMorePopState = !headMorePopState"></div> <div class="head-pop" v-if="headMorePopState" @click="headMorePopState = !headMorePopState"></div>
@@ -68,7 +67,9 @@
</template> </template>
<script> <script>
import SearchBox from "../components/SearchBox.vue"; import SearchBox from "../components/SearchBox.vue"
import { invitationPost } from "@/utils/bizarreUrl"
export default { export default {
name: "HeaderNav", name: "HeaderNav",
@@ -81,63 +82,52 @@ export default {
userInfo: {}, // 注意 userInfo 写I 是否是大写 ,, 因为 user 已经改为全局,后面要删除传值的 user userInfo: {}, // 注意 userInfo 写I 是否是大写 ,, 因为 user 已经改为全局,后面要删除传值的 user
menu: [], menu: [],
hotSearchkeywords: [], // 热门搜索 hotSearchkeywords: [], // 热门搜索
}; invitationPost,
$baseURL: "", // 根目录
}
}, },
props: ["issearch", "needgetuser", "userinfo"], props: ["issearch", "needgetuser", "userinfo"],
watch: { watch: {
headMorePopState(newValue, oldValue) { headMorePopState(newValue, oldValue) {
if (newValue) this.$pageStop(); if (newValue) this.$pageStop()
else this.$pageMove(); else this.$pageMove()
}, },
}, },
mounted() { mounted() {
let user = this.$store.state.user let user = this.$store.state.user
if (JSON.stringify(user) === "{}") this.$store.dispatch('getUserInfo', this) if (JSON.stringify(user) === "{}") this.$store.dispatch("getUserInfo", this)
else { else {
this.userInfo = user this.userInfo = user
this.islogin = user.uid > 0 ? true : false; this.islogin = user.uid > 0 || user.uin > 0 ? true : false
this.hotSearchkeywords = this.$store.state.hotSearchkeywords this.hotSearchkeywords = this.$store.state.hotSearchkeywords
this.menu = this.$store.state.menu this.menu = this.$store.state.menu
} }
},
components: {
SearchBox,
}, },
methods: { methods: {
// 处理登录 // 处理登录
handleRegister() { handleRegister() {
let url = encodeURIComponent(location.href); let url = encodeURIComponent(location.href)
this.$skipUrl(`${this.$loginUrl}?referer=${url}`, false); this.$skipUrl(`${this.$loginUrl}?referer=${url}`, false)
},
// 获取用户信息
getUserInfoData() {
return
// this.$http.post("/widget/getUser").then((res) => {
this.$http.post("/api/index",).then((res) => {
if (res.code != 200) return;
this.userInfo = res.data.user;
this.islogin = res.data.user.uid > 0 ? true : false;
this.hotSearchkeywords = res.data.hotSearchkeywords
}).catch(err => {
this.$message.error(err.message)
});
}, },
collapseClick() { collapseClick() {
if (this.collapseShow == true) this.collapseShow = false; if (this.collapseShow == true) this.collapseShow = false
else this.collapseShow = true; else this.collapseShow = true
}, },
collapseClose() { collapseClose() {
this.collapseShow = false; this.collapseShow = false
}, },
}, },
};
destroyed() {
this.$pageMove()
},
components: {
SearchBox,
},
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@@ -164,44 +154,42 @@ export default {
} }
.right { .right {
.head-more { .head-more {
position: relative; position: relative;
.head-more-icon { .head-more-icon {
width: .48rem; width: 0.48rem;
height: .4rem; height: 0.4rem;
} }
.red-dot { .red-dot {
position: absolute; position: absolute;
right: -0.2rem; right: -0.2rem;
top: -0.2rem; top: -0.2rem;
width: .16rem; width: 0.16rem;
height: .16rem; height: 0.16rem;
border-radius: .64rem; border-radius: 0.64rem;
background-color: rgba(253, 63, 93, 1); background-color: rgba(253, 63, 93, 1);
} }
} }
} }
.head-arrows { .head-arrows {
width: .1333rem; width: 0.1333rem;
height: .1333rem; height: 0.1333rem;
position: absolute; position: absolute;
bottom: -.0133rem; bottom: -0.0133rem;
right: -0.5333rem; right: -0.5333rem;
width: 0; width: 0;
height: 0; height: 0;
transform: translateX(50%); transform: translateX(50%);
border: .24rem solid #000; border: 0.24rem solid #000;
border-top-color: transparent; border-top-color: transparent;
border-bottom-color: rgb(255, 255, 255); border-bottom-color: rgb(255, 255, 255);
border-left-color: transparent; border-left-color: transparent;
border-right-color: transparent; border-right-color: transparent;
opacity: 0; opacity: 0;
transition: all .2s; transition: all 0.2s;
&.animation { &.animation {
animation: slide-in-left2 0.5s ease-out forwards; animation: slide-in-left2 0.5s ease-out forwards;
@@ -210,13 +198,13 @@ export default {
.head-more-pop { .head-more-pop {
position: absolute; position: absolute;
top: calc(100% - .0133rem); top: calc(100% - 0.0133rem);
height: calc(100vh - 1.3rem); height: calc(100vh - 1.3rem);
width: 7.6rem; width: 7.6rem;
right: 0; right: 0;
background-color: #fff; background-color: #fff;
overflow: auto; overflow: auto;
transition: all .2s; transition: all 0.2s;
right: -100%; right: -100%;
opacity: 0; opacity: 0;
@@ -248,40 +236,37 @@ export default {
} }
} }
.head-more-userinfo { .head-more-userinfo {
height: 2.88rem; height: 2.88rem;
margin-left: .64rem; margin-left: 0.64rem;
padding-right: .72rem; margin-right: 0.72rem;
box-sizing: border-box; box-sizing: border-box;
border-bottom: .0133rem solid #ebebeb; border-bottom: 0.0133rem solid #ebebeb;
justify-content: space-between; justify-content: space-between;
.head-more-left { .head-more-left {
.head-more-userinfo-avatar { .head-more-userinfo-avatar {
margin-right: .24rem; margin-right: 0.24rem;
width: 1.28rem; width: 1.28rem;
height: 1.28rem; height: 1.28rem;
border-radius: 50%; border-radius: 50%;
} }
.head-more-userinfo-username { .head-more-userinfo-username {
font-size: .36rem; font-size: 0.36rem;
color: #333333; color: #333333;
} }
} }
.head-more-right { .head-more-right {
.information-box { .information-box {
position: relative; position: relative;
width: .44rem; width: 0.44rem;
height: .44rem; height: 0.44rem;
.information-icon { .information-icon {
width: .44rem; width: 0.44rem;
height: .44rem; height: 0.44rem;
} }
} }
@@ -289,36 +274,36 @@ export default {
position: absolute; position: absolute;
right: -0.2rem; right: -0.2rem;
top: -0.2rem; top: -0.2rem;
width: .36rem; width: 0.36rem;
height: .36rem; height: 0.36rem;
color: #fff; color: #fff;
border-radius: .64rem; border-radius: 0.64rem;
background-color: rgba(253, 63, 93, 1); background-color: rgba(253, 63, 93, 1);
font-size: .26rem; font-size: 0.26rem;
} }
.loginBtn { .loginBtn {
width: 2.24rem; width: 2.24rem;
height: .8rem; height: 0.8rem;
border-radius: 3.12rem; border-radius: 3.12rem;
background-color: rgba(98, 177, 255, 1); background-color: rgba(98, 177, 255, 1);
color: #fff; color: #fff;
font-size: .34rem; font-size: 0.34rem;
} }
} }
} }
.tab-list { .tab-list {
padding-right: .72rem; padding-right: 0.72rem;
margin-left: 0.64rem; margin-left: 0.64rem;
border-bottom: .0133rem solid #ebebeb; border-bottom: 0.0133rem solid #ebebeb;
.tab-item { .tab-item {
height: 1.44rem; height: 1.44rem;
margin: .328rem 0; margin: 0.328rem 0;
border-radius: .22rem; border-radius: 0.22rem;
padding-left: .64rem; padding-left: 0.64rem;
font-size: .36rem; font-size: 0.36rem;
color: #555555; color: #555555;
text-decoration: none; text-decoration: none;
@@ -332,28 +317,28 @@ export default {
.head-more-post { .head-more-post {
color: #000; color: #000;
font-size: .4rem; font-size: 0.4rem;
margin: 1.28rem 0 2.6667rem; margin: 1.28rem 0 2.6667rem;
.head-more-post-icon { .head-more-post-icon {
width: .48rem; width: 0.48rem;
height: .48rem; height: 0.48rem;
margin-right: .1333rem; margin-right: 0.1333rem;
background-color: #fddf6d; background-color: #fddf6d;
border-radius: 50%; border-radius: 50%;
.head-more-post-img { .head-more-post-img {
width: .24rem; width: 0.24rem;
height: .24rem; height: 0.24rem;
} }
} }
} }
.cross-icon { .cross-icon {
width: .32rem; width: 0.32rem;
height: .32rem; height: 0.32rem;
// padding: .8rem; // padding: .8rem;
padding: .4rem; padding: 0.4rem;
// position: sticky; // position: sticky;
position: fixed; position: fixed;
// bottom: .2667rem; // bottom: .2667rem;
@@ -369,10 +354,7 @@ export default {
justify-content: center; justify-content: center;
margin: 0 auto; margin: 0 auto;
} }
} }
} }
.head-pop { .head-pop {
@@ -554,7 +536,6 @@ export default {
} }
} }
header { header {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
@@ -597,7 +578,5 @@ header {
top: -0.15rem; top: -0.15rem;
right: -0.2rem; right: -0.2rem;
} }
} }
</style> </style>

View File

@@ -24,7 +24,6 @@ export default {
}, },
mounted() { mounted() {
console.log(this.messagehint, "messagehint");
}, },
methods: { methods: {

View File

@@ -1,9 +1,14 @@
<template> <template>
<div> <div>
<!-- 帖子 --> <!-- 帖子 -->
<div class="card-box" v-for="(item,index) in list" :key="index" @click.stop="toDetail(item.tid)"> <div v-for="(item, index) in list" :key="index">
<template v-if="item.type == 'ad'">
<a :href="item.url"><img class="banner-box" :src="item.image"></a>
</template>
<div class="card-box" v-else @click.stop="toDetail(item.tid)">
<div class="top moreEllipsis"> <div class="top moreEllipsis">
<div class="top-label">{{ item.typename }}</div> <div class="top-label" v-if="item.typename">{{ item.typename }}</div>
<div class="top-title">{{ item.subject }}</div> <div class="top-title">{{ item.subject }}</div>
</div> </div>
<div class="center"> <div class="center">
@@ -11,7 +16,6 @@
</div> </div>
<div class="bottom"> <div class="bottom">
<div class="bottom-box"> <div class="bottom-box">
<!-- <svg-icon icon-class="test-head" class-name="icon-head"></svg-icon> -->
<img class="icon-head" :src="item.avatar"> <img class="icon-head" :src="item.avatar">
<div class="bottom-name">{{ item.author }}</div> <div class="bottom-name">{{ item.author }}</div>
</div> </div>
@@ -32,6 +36,9 @@
<span>精华</span> <span>精华</span>
</div> </div>
</div> </div>
</div>
<!-- <div class="card-box"> <!-- <div class="card-box">
<div class="top moreEllipsis"> <div class="top moreEllipsis">
<div class="top-label">经验</div> <div class="top-label">经验</div>
@@ -81,7 +88,6 @@ export default {
}, },
methods: { methods: {
// 跳转详细 // 跳转详细
toDetail(tid) { toDetail(tid) {
this.$router.push(`/detail?tid=${tid}`) this.$router.push(`/detail?tid=${tid}`)

View File

@@ -1,13 +1,12 @@
<!-- 板块导航 头部 点击板块后的头部导航 --> <!-- 板块导航 头部 点击板块后的头部导航 -->
<template> <template>
<div class="path-box"> <router-link class="path-box" :to="`/allSections?fid=${fid}`">
<div>论坛</div> <div>论坛</div>
<span class="path-slash">/</span> <span class="path-slash">/</span>
<div class="oneEllipsis">{{ stairname }}</div> <div class="oneEllipsis">{{ stairname }}</div>
<span class="path-slash">/</span> <span class="path-slash">/</span>
<div class="oneEllipsis">{{ subsectionsname }}</div> <div class="oneEllipsis">{{ subsectionsname }}</div>
<router-link v-if="isskip" class="path-box-a" :to="path"></router-link> </router-link>
</div>
</template> </template>
<script> <script>
@@ -19,7 +18,7 @@ export default {
path: "/allSections", path: "/allSections",
}; };
}, },
props: ["stairname", "subsectionsname", "isskip"], props: ["stairname", "subsectionsname", "fid"],
mounted() { mounted() {
}, },
@@ -37,8 +36,7 @@ export default {
flex-direction: row; flex-direction: row;
height: 1.28rem; height: 1.28rem;
line-height: 1.28rem; line-height: 1.28rem;
margin: 0.2rem 0.35rem 0; margin: 0.5rem 0.35rem 0;
// padding: 0 0.25rem;
padding: 0 .4rem; padding: 0 .4rem;
border-radius: 1.68rem 1.68rem 0 1.68rem; border-radius: 1.68rem 1.68rem 0 1.68rem;
background-color: #fff; background-color: #fff;
@@ -47,14 +45,6 @@ export default {
box-shadow: 0 0 0.16rem rgba(0, 0, 0, 0.1); box-shadow: 0 0 0.16rem rgba(0, 0, 0, 0.1);
position: relative; position: relative;
.path-box-a {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.path-slash { .path-slash {
color: #D7D7D7; color: #D7D7D7;
font-size: .32rem; font-size: .32rem;
@@ -65,22 +55,11 @@ export default {
color: #7F7F7F; color: #7F7F7F;
max-width: 2.5rem; max-width: 2.5rem;
// &::before {
// content: "/";
// width: 0.2rem;
// padding: 0 0.07rem;
// color: #7F7F7F;
// }
&:last-child { &:last-child {
max-width: 50%; max-width: 50%;
color: #000; color: #000;
font-weight: bold; font-weight: bold;
} }
// &:first-child::before {
// content: "";
// }
} }
&::after { &::after {
@@ -97,6 +76,4 @@ export default {
} }
} }
</style> </style>

View File

@@ -12,7 +12,7 @@
<div class="form flexacenter"> <div class="form flexacenter">
<img class="search-icon" src="@/assets/img/headerNav/search.png"> <img class="search-icon" src="@/assets/img/headerNav/search.png">
<input class="flex1" ref="searchInput" v-model="searchText" type="text" placeholder="请输入搜索关键词" <input class="flex1" ref="searchInput" v-model="searchText" type="text" placeholder="请输入搜索关键词"
@keydown.enter="toSearchResult(searchText)" /> @keydown.enter="toSearchResult(searchText)" maxlength="20" />
<img v-if="searchText" @click.stop="clearText()" class="clear-text" src="@/assets/img/icon/clear.png"> <img v-if="searchText" @click.stop="clearText()" class="clear-text" src="@/assets/img/icon/clear.png">
</div> </div>
@@ -22,7 +22,8 @@
<div class="search-content flexcolumn" v-if="$store.state.historicalSearch.length != 0"> <div class="search-content flexcolumn" v-if="$store.state.historicalSearch.length != 0">
<div class="search-text">历史搜索</div> <div class="search-text">历史搜索</div>
<div class="search-label"> <div class="search-label">
<span v-for="(item, index) in $store.state.historicalSearch" :key="index" @click.stop="toSearchResult(item)">{{ item <span v-for="(item, index) in $store.state.historicalSearch" :key="index"
@click.stop="toSearchResult(item)">{{ item
}}</span> }}</span>
</div> </div>
</div> </div>
@@ -55,6 +56,7 @@ export default {
else this.showClear = false else this.showClear = false
}, },
methods: { methods: {
collapseClick() { collapseClick() {
if (this.collapseShow == true) this.collapseShow = false; if (this.collapseShow == true) this.collapseShow = false;
@@ -145,7 +147,7 @@ export default {
} }
input { input {
font-size: 0.36rem; font-size: 0.40rem;
border: none; border: none;
outline: 0; outline: 0;
color: #000; color: #000;
@@ -185,7 +187,7 @@ export default {
span { span {
padding: 0 0.2rem; padding: 0 0.2rem;
height: 0.96rem; // height: 0.96rem;
line-height: 0.96rem; line-height: 0.96rem;
background-color: #fff; background-color: #fff;
border-radius: 0.16rem; border-radius: 0.16rem;
@@ -194,6 +196,7 @@ export default {
font-size: 0.36rem; font-size: 0.36rem;
margin-right: .2rem; margin-right: .2rem;
margin-bottom: .24rem; margin-bottom: .24rem;
word-break: break-word;
} }
} }
} }

View File

@@ -29,7 +29,7 @@
</div> </div>
<div class="unlockCoin-hint flexacenter" style="font-size: .36rem;">作者设置了阅读限制解锁所有内容仅需 <div <div class="unlockCoin-hint flexacenter" style="font-size: .36rem;">作者设置了阅读限制解锁所有内容仅需 <div
class="unlockCoin-hint-sum">{{ info.price }}</div> 寄托币</div> class="unlockCoin-hint-sum">{{ info.price }}</div> 寄托币</div>
<div class="unlockCoin-btn flexcenter" @click="postCoin(defaultcoinnum)">立即解锁 <div class="unlockCoin-btn flexcenter" @click="postCoin()">立即解锁
</div> </div>
<div class="unlockCoin-hint flexcenter">你共有 {{ mybalance }} 个寄托币</div> <div class="unlockCoin-hint flexcenter">你共有 {{ mybalance }} 个寄托币</div>
</div> </div>
@@ -44,14 +44,12 @@ export default {
props: ["popState", "coinConfig", "info", "mybalance"], props: ["popState", "coinConfig", "info", "mybalance"],
data() { data() {
return { return {
defaultcoinnum: 1
}; };
}, },
mounted() { mounted() {
}, },
methods: { methods: {
@@ -59,6 +57,11 @@ export default {
this.$parent.popState = "" this.$parent.popState = ""
}, },
// 点击投币解锁
postCoin() {
this.$parent.postCoin()
}
}, },
}; };
@@ -69,7 +72,9 @@ export default {
width: 100vw; width: 100vw;
background-color: #fff; background-color: #fff;
border-radius: .64rem .64rem 0 0; border-radius: .64rem .64rem 0 0;
position: relative; position: fixed;
bottom: 0;
left: 0;
} }
.coin-insufficient { .coin-insufficient {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -2,17 +2,14 @@ import Vue from 'vue'
import App from './App.vue' import App from './App.vue'
import router from './router' import router from './router'
import store from './store' import store from './store'
import ElementUI, { Message, Pagination, loading } from 'element-ui'; import { Message, Pagination, Alert, Loading, Dialog } from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css'; import 'element-ui/lib/theme-chalk/index.css';
import { skipUrl, pageStop, pageMove, goTologin, copy, startupUnderLoading, closeUnderLoading, formattedDate, updateURLSearchParams, clearCookies } from "@/utils/common.js" import { skipUrl, pageStop, pageMove, goTologin, copy, startupUnderLoading, closeUnderLoading, formattedDate, updateURLSearchParams, clearCookies } from "@/utils/common.js"
import http from "@/utils/request" import http from "@/utils/request"
import VueSanitize from 'vue-sanitize'
import hintBox from '@/components/Hintbox'
Vue.config.productionTip = false Vue.config.productionTip = false
Vue.prototype.$baseURL = "https://forum.gter.net/api" // 请求接口的共 url
Vue.prototype.$loginUrl = "https://passport.gter.net/" // 跳转登录的url Vue.prototype.$loginUrl = "https://passport.gter.net/" // 跳转登录的url
Vue.prototype.$http = http // 跳转登录页面的方法 Vue.prototype.$http = http // 跳转登录页面的方法
@@ -23,7 +20,7 @@ Vue.prototype.$goTologin = goTologin // 跳转登录页面的方法
Vue.prototype.$pageStop = pageStop // 页面禁止滑动 Vue.prototype.$pageStop = pageStop // 页面禁止滑动
Vue.prototype.$pageMove = pageMove // 页面可以滑动 Vue.prototype.$pageMove = pageMove // 页面可以滑动
Vue.prototype.$Message = Message // 消息提示框 Vue.prototype.$Message = Message // 消息提示框
Vue.prototype.$loading = loading // 消息提示框 Vue.prototype.$loading = Loading // 消息提示框
Vue.prototype.$copy = copy // 复制 Vue.prototype.$copy = copy // 复制
Vue.prototype.$startupUnderLoading = startupUnderLoading // 开启加载提示 element的 Vue.prototype.$startupUnderLoading = startupUnderLoading // 开启加载提示 element的
Vue.prototype.$closeUnderLoading = closeUnderLoading // 关闭加载提示 element的 Vue.prototype.$closeUnderLoading = closeUnderLoading // 关闭加载提示 element的
@@ -31,12 +28,13 @@ Vue.prototype.$formattedDate = formattedDate // 时间戳转格式
Vue.prototype.$updateURLSearchParams = updateURLSearchParams // 不刷新的情况下修改url Vue.prototype.$updateURLSearchParams = updateURLSearchParams // 不刷新的情况下修改url
Vue.prototype.$clearCookies = clearCookies // 清空Cookies Vue.prototype.$clearCookies = clearCookies // 清空Cookies
Vue.prototype.$baseURL = $baseURL // 清空Cookies
//svg文件引入 //svg文件引入
import './icons' import './icons'
//动态设置fontsize //动态设置fontsize
import './utils/fontSize.js' import './utils/fontSize.js'
// 判断是否是数组的 ,兼容操作 // 判断是否是数组的 ,兼容操作
if (!Array.isArray) { if (!Array.isArray) {
Array.isArray = function (arg) { Array.isArray = function (arg) {
@@ -44,14 +42,11 @@ if (!Array.isArray) {
} }
} }
//ElementUI // Vue.use(ElementUI);
Vue.use(ElementUI);
Vue.use(Pagination); Vue.use(Pagination);
Vue.use(Alert);
// 不要的 Vue.use(Loading);
Vue.use(VueSanitize); Vue.use(Dialog);
// v-focus // v-focus
Vue.directive('focus', { Vue.directive('focus', {

View File

@@ -1,6 +1,5 @@
import Vue from 'vue' import Vue from "vue"
import VueRouter from 'vue-router' import VueRouter from "vue-router"
// import Recommend from "views/recommend/Recommend.vue"
Vue.use(VueRouter) Vue.use(VueRouter)
@@ -8,113 +7,152 @@ const VueRouterPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(to) { VueRouter.prototype.push = function push(to) {
return VueRouterPush.call(this, to).catch(err => err) return VueRouterPush.call(this, to).catch(err => err)
} }
//标题js //标题js
import getPageTitle from "@/utils/title-config"; import getPageTitle from "@/utils/title-config"
const Index = () => import("views/index/index")
const Index = () => import('views/index/index') const Recommend = () => import("views/index/recommend/Recommend")
const Recommend = () => import('views/index/recommend/Recommend') const Collect = () => import("views/index/collect/Collect")
const Collect = () => import('views/index/collect/Collect') const AllSections = () => import("views/index/allSections/AllSections")
const AllSections = () => import('views/index/allSections/AllSections') const search = () => import("views/search/search")
const search = () => import('views/search/search') const SearchResult = () => import("views/search/searchResult/SearchResult")
const SearchResult = () => import('views/search/searchResult/SearchResult') const user = () => import("views/user/user")
const user = () => import('views/user/user') const userIndex = () => import("views/user/UserIndex")
const userIndex = () => import('views/user/UserIndex') const detail = () => import("views/detail/detail")
const detail = () => import('views/detail/detail') const detailIndex = () => import("views/detail/detailIndex")
const detailIndex = () => import('views/detail/detailIndex')
const routes = [ const routes = [
{ {
// 首页 // 首页
path: '/', // path: '*',
name: 'Index', path: "/",
name: "Index",
redirect: "/recommend", redirect: "/recommend",
component: Index, component: Index,
children: [ children: [
{ {
path: '/recommend', path: "/recommend",
name: 'Recommend', name: "Recommend",
component: Recommend, component: Recommend,
meta: { meta: {
title: "推荐版块" title: "推荐版块",
} },
}, },
{ {
path: '/collect', path: "/collect",
name: 'Collect', name: "Collect",
component: Collect, component: Collect,
meta: { meta: {
title: "收藏的版块" title: "收藏的版块",
} },
}, },
{ {
path: '/allSections', path: "/allSections",
name: 'AllSections', name: "AllSections",
component: AllSections, component: AllSections,
meta: { meta: {
title: "全部版块" title: "全部版块",
}
}, },
},
] ],
}, { },
path: '/searchResult', // 搜索结果 {
name: 'search', path: "/searchResult", // 搜索结果
name: "search",
redirect: "/searchResult", redirect: "/searchResult",
component: search, component: search,
children: [ children: [
{ {
path: '/searchResult', path: "/searchResult",
name: 'Recommend', name: "Recommend",
component: SearchResult, component: SearchResult,
meta: { meta: {
title: "搜索帖子" title: "搜索帖子",
}
}, },
] },
}, { ],
path: '/user', // 我的 },
name: 'user', {
path: "/user", // 我的
name: "user",
redirect: "/userIndex", redirect: "/userIndex",
component: user, component: user,
children: [ children: [
{ {
path: '/userIndex', path: "/userIndex",
name: 'userIndex', name: "userIndex",
component: userIndex, component: userIndex,
meta: { meta: {
title: "我的寄托" title: "我的寄托",
}
}, },
] },
}, { ],
path: '/detail', // 帖子详情 },
name: 'detail', {
path: "/detail", // 帖子详情
name: "detail",
redirect: "/detailIndex", redirect: "/detailIndex",
component: detail, component: detail,
children: [ children: [
{ {
path: '/detailIndex', path: "/detailIndex",
name: 'detailIndex', name: "detailIndex",
component: detailIndex, component: detailIndex,
meta: { meta: {
title: "帖子详情" title: "帖子详情",
} },
},
],
}, },
]
}
] ]
const router = new VueRouter({ const router = new VueRouter({
mode: 'history', mode: "history",
base: process.env.BASE_URL, // mode: 'hash',
routes // mode: process.env.NODE_ENV == "development" ? 'hash' : 'history',
// base: process.env.BASE_URL,
routes,
}) })
router.beforeEach(async (to, from, next) => {
if (to.meta.title) document.title = getPageTitle(to.meta.title);
next(); // 判断是不是首次 加载
}); let isInitialNavigation = true
router.beforeEach(async (to, from, next) => {
if (to.meta.title) document.title = getPageTitle(to.meta.title)
if (isInitialNavigation) {
isInitialNavigation = false
} else {
if (window._hmt) {
if (to.path) {
window._hmt.push(["_trackPageview", "/#" + to.fullPath])
}
}
// if (window._czc) {
// let location = window.location
// let contentUrl = location.pathname + location.hash
// let refererUrl = "/"
// // 用于发送某个URL的PV统计请求
// window._czc.push(["_trackPageview", contentUrl, refererUrl])
// }
}
if (typeof wx !== "undefined") {
// console.log("to.fullPath", to.fullPath)
setTimeout(() => {
wx.miniProgram.postMessage({
data: location.href,
})
}, 200)
// wx.miniProgram.postMessage({
// data: to.fullPath,
// })
}
next()
})
export default router export default router

View File

@@ -1,5 +1,5 @@
import Vue from 'vue' import Vue from "vue"
import Vuex from 'vuex' import Vuex from "vuex"
Vue.use(Vuex) Vue.use(Vuex)
@@ -16,8 +16,7 @@ export default new Vuex.Store({
hotSearchkeywords: [], // 热门搜索 hotSearchkeywords: [], // 热门搜索
loading: null, loading: null,
}, },
getters: { getters: {},
},
mutations: { mutations: {
setHistoricalSearch(state, payload) { setHistoricalSearch(state, payload) {
@@ -26,7 +25,7 @@ export default new Vuex.Store({
if (targetArr.length > 10) targetArr = targetArr.slice(0, 10) if (targetArr.length > 10) targetArr = targetArr.slice(0, 10)
state.historicalSearch = targetArr state.historicalSearch = targetArr
localStorage.setItem('historicalSearch', JSON.stringify(targetArr)) localStorage.setItem("historicalSearch", JSON.stringify(targetArr))
}, },
setAllForumList(state, payload) { setAllForumList(state, payload) {
@@ -59,70 +58,78 @@ export default new Vuex.Store({
setMenu(state, payload) { setMenu(state, payload) {
state.menu = payload state.menu = payload
} },
}, },
actions: { actions: {
// 获取历史搜索的数据 // 获取历史搜索的数据
fetchHistoricalSearch({ commit }) { fetchHistoricalSearch({ commit }) {
let historicalSearch = JSON.parse(localStorage.getItem('historicalSearch')) || [] let historicalSearch = JSON.parse(localStorage.getItem("historicalSearch")) || []
commit('setHistoricalSearch', historicalSearch) commit("setHistoricalSearch", historicalSearch)
}, },
// 获取全部板块的数据 // 获取全部板块的数据
getAllForum({ commit }, that) { getAllForum({ commit }, that) {
// getAllForum(commit, that) { that.$http
that.$startupUnderLoading(that) .get("/api/home/allForum")
that.$http.get("/api/home/allForum").then(res => { .then(res => {
if (res.code != 200) return; if (res.code != 200) return
let allForumList = res.data let allForumList = res.data
commit('setAllForumList', allForumList) commit("setAllForumList", allForumList)
})
}).catch(err => { .catch(err => {
that.$message.error(err.message) that.$message.error(err.message)
}).finally(() => {
that.$closeUnderLoading(that)
}) })
}, },
// 获取用户信息 获取收藏信息那些数据 // 获取用户信息 获取收藏信息那些数据
getUserInfo({ state, commit }, that) { getUserInfo({ state, commit }, that) {
if (state.getUserInfoState) return if (state.getUserInfoState) return
commit('setgetUserInfoState', true) commit("setgetUserInfoState", true)
// that.$startupUnderLoading(that) that.$http
that.$http.post("/api/home").then(res => { .post("/api/home")
if (res.code != 200) return; .then(res => {
if (res.code != 200) return
let data = res.data let data = res.data
let { config, favorite, hotSearchkeywords, recommend, user, menu } = data let { config, favorite, hotSearchkeywords, recommend, user, menu } = data
commit('setHomeRequestState', true) const islogin = user.uin > 0 || user.uid > 0 ? true : false
commit('setUser', user) // console.log("islogin", islogin)
commit('setFavoriteList', favorite) commit("setHomeRequestState", true)
commit('setRecommendList', recommend) commit("setUser", user)
commit('setHotSearchkeywords', hotSearchkeywords) commit("setFavoriteList", favorite)
commit('setMenu', menu) commit("setRecommendList", recommend)
commit("setHotSearchkeywords", hotSearchkeywords)
commit("setMenu", menu)
if (that.userInfo) { // 这个是顶部用户数据的 这样不用监听是否请求成功 if (user.uid > 0 || user.uin > 0) {
// 这个是顶部用户数据的 这样不用监听是否请求成功
setTimeout(() => {
if (typeof xstat !== "undefined") {
xstat.identify({
uid: user.uid,
uin: user.uin,
})
}
}, 600)
}
if (that.userInfo) {
// 这个是顶部用户数据的 这样不用监听是否请求成功
that.userInfo = user that.userInfo = user
that.islogin = user.uid > 0 ? true : false; that.islogin = user.uid > 0 || user.uin > 0 ? true : false
that.hotSearchkeywords = hotSearchkeywords that.hotSearchkeywords = hotSearchkeywords
that.menu = menu that.menu = menu
} }
})
}).catch(err => { .catch(err => {
that.$message.error(err.message) that.$message.error(err.message)
}).finally(() => { })
.finally(() => {
// that.$closeUnderLoading(that) // that.$closeUnderLoading(that)
commit('setgetUserInfoState', false) commit("setgetUserInfoState", false)
}) })
}, },
}, },
modules: { modules: {},
}
}) })

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