├── .gitignore ├── LICENSE ├── README.md ├── api ├── actor.js ├── api.js ├── article.js ├── award.js ├── common.js ├── movie.js ├── review.js ├── role.js ├── serial.js ├── user.js └── video.js ├── app.js ├── app.json ├── app.scss ├── components ├── actor │ ├── actor-item │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml │ └── actor-row │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml ├── app │ └── footer-info │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml ├── article │ └── article-item │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml ├── c-icon │ ├── index.js │ ├── index.json │ └── index.wxml ├── comment-page │ ├── components │ │ ├── comment-bar │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ ├── comment-edit │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ ├── comment-item │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ └── comment-tool │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ ├── index.js │ ├── index.json │ ├── index.scss │ └── index.wxml ├── half-page │ ├── index.js │ ├── index.json │ ├── index.scss │ └── index.wxml ├── header │ ├── header-bar │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml │ └── header-scroll-bar │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml ├── image-group │ ├── index.js │ ├── index.json │ ├── index.scss │ └── index.wxml ├── m-panel │ ├── index.js │ ├── index.json │ ├── index.scss │ └── index.wxml ├── movie │ ├── movie-card │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml │ ├── movie-item │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml │ └── movie-row │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml ├── no-data │ ├── index.js │ ├── index.json │ ├── index.scss │ └── index.wxml ├── photo │ └── photo-group │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml ├── player │ ├── index.js │ ├── index.json │ └── index.wxml ├── report │ ├── index.js │ ├── index.json │ ├── index.scss │ └── index.wxml ├── review │ └── review-item │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml ├── role │ ├── role-item │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml │ └── role-row │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml ├── tab-switch │ ├── index.js │ ├── index.json │ ├── index.scss │ └── index.wxml ├── tool │ ├── tool-bar │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml │ ├── user-collection │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml │ └── user-like │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml └── video │ ├── video-item │ ├── index.js │ ├── index.json │ ├── index.scss │ └── index.wxml │ └── video-row │ ├── index.js │ ├── index.json │ ├── index.scss │ └── index.wxml ├── config.js ├── extend └── page.js ├── http └── index.js ├── images ├── honour-cup.png ├── logo.png └── tabbar │ ├── home-active.png │ ├── home.png │ ├── movie-active.png │ ├── movie.png │ ├── profile-active.png │ ├── profile.png │ ├── video-active.png │ └── video.png ├── jsconfig.json ├── mixins └── getInfiniteData.js ├── package.json ├── pages ├── account │ ├── components │ │ └── captcha-modal │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ ├── forget │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml │ ├── login │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml │ └── register │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml ├── actor │ ├── award │ │ ├── components │ │ │ └── award-item │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.scss │ │ │ │ └── index.wxml │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml │ ├── detail │ │ ├── components │ │ │ ├── actor-award │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.scss │ │ │ │ └── index.wxml │ │ │ ├── actor-count │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.scss │ │ │ │ └── index.wxml │ │ │ └── information │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.scss │ │ │ │ └── index.wxml │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml │ ├── role │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml │ └── works │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml ├── article │ ├── detail │ │ ├── components │ │ │ └── skeleton │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.scss │ │ │ │ └── index.wxml │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml │ ├── index.js │ ├── index.json │ ├── index.scss │ └── index.wxml ├── award │ ├── detail │ │ ├── components │ │ │ └── award-info │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.scss │ │ │ │ └── index.wxml │ │ ├── index │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ └── info │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ ├── index │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml │ └── session │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml ├── home │ ├── components │ │ ├── home-header │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ ├── home-loading │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ ├── home-menu │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ └── home-swiper │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ ├── index.js │ ├── index.json │ ├── index.scss │ └── index.wxml ├── movie │ ├── coming │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml │ ├── components │ │ └── skeleton │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ ├── detail │ │ ├── article │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ ├── award │ │ │ ├── components │ │ │ │ └── award-item │ │ │ │ │ ├── index.js │ │ │ │ │ ├── index.json │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.wxml │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ ├── cast │ │ │ ├── components │ │ │ │ └── cast-panel │ │ │ │ │ ├── index.js │ │ │ │ │ ├── index.json │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.wxml │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ ├── company │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ ├── dialogue │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ ├── index │ │ │ ├── components │ │ │ │ ├── favorite-list │ │ │ │ │ ├── index.js │ │ │ │ │ ├── index.json │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.wxml │ │ │ │ ├── information │ │ │ │ │ ├── index.js │ │ │ │ │ ├── index.json │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.wxml │ │ │ │ ├── movie-award │ │ │ │ │ ├── index.js │ │ │ │ │ ├── index.json │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.wxml │ │ │ │ ├── movie-bar │ │ │ │ │ ├── index.js │ │ │ │ │ ├── index.json │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.wxml │ │ │ │ ├── movie-extra │ │ │ │ │ ├── index.js │ │ │ │ │ ├── index.json │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.wxml │ │ │ │ ├── movie-info │ │ │ │ │ ├── index.js │ │ │ │ │ ├── index.json │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.wxml │ │ │ │ ├── movie-rating │ │ │ │ │ ├── index.js │ │ │ │ │ ├── index.json │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.wxml │ │ │ │ ├── photo-wall │ │ │ │ │ ├── index.js │ │ │ │ │ ├── index.json │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.wxml │ │ │ │ ├── serial-row │ │ │ │ │ ├── index.js │ │ │ │ │ ├── index.json │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.wxml │ │ │ │ └── skeleton │ │ │ │ │ ├── index.js │ │ │ │ │ ├── index.json │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.wxml │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ ├── knowledge │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ ├── level │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ ├── pubdate │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ ├── rating │ │ │ ├── create │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.scss │ │ │ │ └── index.wxml │ │ │ └── index │ │ │ │ ├── components │ │ │ │ ├── rate-detail │ │ │ │ │ ├── index.js │ │ │ │ │ ├── index.json │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.wxml │ │ │ │ └── rate-trend │ │ │ │ │ ├── index.js │ │ │ │ │ ├── index.json │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.wxml │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.scss │ │ │ │ └── index.wxml │ │ ├── review │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ ├── role │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ ├── serial │ │ │ ├── components │ │ │ │ └── serial-item │ │ │ │ │ ├── index.js │ │ │ │ │ ├── index.json │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.wxml │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ └── video │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ ├── index │ │ ├── components │ │ │ ├── movie-row │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.scss │ │ │ │ └── index.wxml │ │ │ ├── nav-group │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.scss │ │ │ │ └── index.wxml │ │ │ └── nav-list │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.scss │ │ │ │ └── index.wxml │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml │ ├── serial │ │ └── detail │ │ │ ├── components │ │ │ └── serial-info │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.scss │ │ │ │ └── index.wxml │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ ├── theater │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml │ ├── today │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml │ └── top │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml ├── photo │ ├── components │ │ └── photo-item │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ ├── index.js │ ├── index.json │ ├── index.scss │ └── index.wxml ├── profile │ ├── aboutus │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml │ ├── changelog │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml │ ├── collection │ │ ├── actor │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ ├── review │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ ├── role │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ └── video │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ ├── favorite │ │ ├── components │ │ │ ├── create-page │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.scss │ │ │ │ └── index.wxml │ │ │ ├── edit-page │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.scss │ │ │ │ └── index.wxml │ │ │ └── skeleton │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.scss │ │ │ │ └── index.wxml │ │ ├── detail │ │ │ ├── components │ │ │ │ └── favorite-info │ │ │ │ │ ├── index.js │ │ │ │ │ ├── index.json │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.wxml │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ └── index │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ ├── feedback │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml │ ├── index │ │ ├── components │ │ │ ├── mine-cell │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.scss │ │ │ │ └── index.wxml │ │ │ ├── mine-info │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.scss │ │ │ │ └── index.wxml │ │ │ └── mine-menu │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.scss │ │ │ │ └── index.wxml │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml │ ├── information │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml │ └── setting │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml ├── review │ └── detail │ │ ├── components │ │ ├── skeleton │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ └── tool-vote │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml ├── role │ ├── actor │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml │ ├── detail │ │ ├── components │ │ │ ├── information │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.scss │ │ │ │ └── index.wxml │ │ │ ├── role-count │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.scss │ │ │ │ └── index.wxml │ │ │ └── skeleton │ │ │ │ ├── index.js │ │ │ │ ├── index.json │ │ │ │ ├── index.scss │ │ │ │ └── index.wxml │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml │ └── movie │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml ├── search │ ├── components │ │ ├── search-bar │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ ├── search-history │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ ├── search-menu │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ └── search-result │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ ├── index.js │ ├── index.json │ ├── index.scss │ └── index.wxml └── video │ ├── components │ └── video-card │ │ ├── index.js │ │ ├── index.json │ │ ├── index.scss │ │ └── index.wxml │ ├── detail │ ├── components │ │ ├── video-info │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ │ └── video-player │ │ │ ├── index.js │ │ │ ├── index.json │ │ │ ├── index.scss │ │ │ └── index.wxml │ ├── index.js │ ├── index.json │ ├── index.scss │ └── index.wxml │ ├── index.js │ ├── index.json │ ├── index.scss │ └── index.wxml ├── project.config.json ├── sitemap.json ├── static ├── iconfont │ ├── iconfont.ttf │ ├── iconfont.woff │ └── iconfont.wxss └── styles │ ├── common.scss │ ├── iconfont.scss │ ├── reset.scss │ └── theme.scss ├── typings └── wx.d.ts └── utils ├── color.js ├── index.js └── systemInfo.js /.gitignore: -------------------------------------------------------------------------------- 1 | project.private.config.json 2 | package-lock.json 3 | 4 | miniprogram_npm 5 | node_modules 6 | 7 | # Editor directories and files 8 | .idea 9 | .vscode 10 | *.suo 11 | *.ntvs* 12 | *.njsproj 13 | *.sln 14 | *.sw? 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 慕影网(微信小程序版) 2 | 3 | ## 项目介绍 4 | 微信小程序实现的影视评分类网站 5 | 一个使用 `原生微信小程序` 实现的影视评分应用,涉及 50+ 个页面,70+ 个接口,包含注册登录、个人中心、影视信息、影人信息、相册、评分等多个功能。 本项目会长期更新。 6 | 7 | ## 微信预览 8 | 小程序码 9 | 10 | 11 | ## 技术栈 12 | - `微信小程序` 13 | - `computed` [微信小程序官方提供的 computed 扩展](https://github.com/wechat-miniprogram/computed) 14 | - `iconfont` [阿里字体图标库](https://www.iconfont.cn/) 15 | - `mind-ui-weapp` [为本项目开发的`微信小程序`移动端组件库](https://github.com/NameLi/mind-ui-weapp) 16 | 17 | ## 开发文档 18 | - `muying-weapp-doc` [慕影网微信小程序版开发文档](https://weapp-doc.ixook.com) 19 | 20 | ## 项目下载 21 | ``` 22 | git clone https://github.com/NameLi/muying-weapp.git 23 | ``` 24 | ## 项目运行 25 | 使用 `微信开发者工具` 打开本项目 26 | 27 | ## 安装依赖 28 | ``` 29 | npm install 30 | ``` 31 | ## 构建 `npm` 32 | 使用微信开发者工具打开本项目后,选择顶部菜单栏 `工具`-> `构建 npm`,待生成 `miniprogram_npm` 文件后,重新编译小程序。 33 | 34 | ## 联系作者 35 | 使用中如遇到问题可以提 `issue` 或者加入qq群: `577133021` 交流 36 | 37 | 作者主页:[https://ixook.com](https://ixook.com) 38 | 39 | 40 | ## License 41 | GPL 42 | -------------------------------------------------------------------------------- /api/actor.js: -------------------------------------------------------------------------------- 1 | import http from '../http/index' 2 | 3 | // 影人相关 4 | export const getActor = (id) => http.get(`/actors/${id}`); // 获取影人信息 5 | export const getActorAwards = (id) => http.get(`/actors/${id}/awards`); // 获取影人奖项 6 | export const getActorPhotos = (id, params) => http.get(`/actors/${id}/photos`, params); // 获取影人相册 7 | export const getActorWorks = (id, params) => http.get(`/actors/${id}/works`, params); // 获取影人参演作品 8 | export const getActorRoles = (id, params) => http.get(`/actors/${id}/roles`, params); // 获取影人饰演角色 9 | -------------------------------------------------------------------------------- /api/api.js: -------------------------------------------------------------------------------- 1 | import http from '../http/index'; 2 | 3 | export const getCover = () => http.get('/movie/cover'); // 今日封面 4 | export const getIndex = () => http.get('/index'); // 首页聚合接口 5 | 6 | export const getCategories = () => http.get("/categories"); // 影视分类 7 | export const getMovieTheater = (params) => http.get('/movie/theater', params); // 正在热映 8 | export const getMovieComing = (params) => http.get('/movie/coming', params); // 即将上映 9 | export const getMovieTop = (params) => http.get('/movie/top', params); // TOP 100 10 | export const getMovieToday = (params) => http.get('/movie/today', params); // 历史上的今日上映影片 11 | -------------------------------------------------------------------------------- /api/article.js: -------------------------------------------------------------------------------- 1 | import http from '../http/index' 2 | 3 | // 文章相关 4 | export const getArticle = (id) => http.get(`/articles/${id}`); // 文章详情 5 | -------------------------------------------------------------------------------- /api/award.js: -------------------------------------------------------------------------------- 1 | import http from '../http/index' 2 | 3 | export const getAwards = () => http.get(`/awards`); // 奖项列表 4 | export const getAward = (name) => http.get(`/awards/${name}`); // 奖项详情 5 | export const getAwardSession = (name, session) => http.get(`/awards/${name}/${session}`); // 奖项届详情 -------------------------------------------------------------------------------- /api/common.js: -------------------------------------------------------------------------------- 1 | import http from '../http/index' 2 | 3 | export const getVersion = () => http.get("/version") // 获取版本号 4 | export const getQiniuUpToken = params => http.get("/qiniu/uptoken", params) // 七牛文件上传token 5 | 6 | export const getCaptcha = () => http.get("/captcha") // 获取图片验证码 7 | export const createPhoneCode = (params) => http.get("/code", params) // 获取手机验证码 8 | export const checkPhoneCode = (params) => http.post("/code", params) // 校验手机验证码 9 | 10 | export const search = (params) => http.get("/search", params); // 搜索 11 | 12 | // 获取评论 13 | export const getComments = (type, id, params) => http.get(`/${type}/${id}/comments`, params); 14 | export const createComment = (type, id, params) => http.post(`/${type}/${id}/comments`, params); 15 | export const deleteComment = (id) => http.delete(`/comments/${id}`); 16 | 17 | 18 | 19 | // 举报 20 | export const getReport = (params) => http.get(`/reports`, params); 21 | export const createReport = (params) => http.post(`/reports`, params); -------------------------------------------------------------------------------- /api/review.js: -------------------------------------------------------------------------------- 1 | import http from '../http/index' 2 | 3 | // 影评相关接口 4 | export const getReview = (id) => http.get(`/reviews/${id}`); // 影评详情 5 | 6 | 7 | -------------------------------------------------------------------------------- /api/role.js: -------------------------------------------------------------------------------- 1 | import http from '../http/index' 2 | 3 | // 角色相关接口 4 | export const getRole = (id) => http.get(`/roles/${id}`); // 角色详情 5 | export const getRolePhotos = (id, params) => http.get(`/roles/${id}/photos`, params); // 角色相册 6 | export const getRoleMovies = (id, params) => http.get(`/roles/${id}/movies`, params); // 角色影视 7 | export const getRoleActors = (id, params) => http.get(`/roles/${id}/actors`, params); // 角色影人 -------------------------------------------------------------------------------- /api/serial.js: -------------------------------------------------------------------------------- 1 | import http from '../http/index' 2 | 3 | // 系列相关接口 4 | export const getSerials = (params) => http.get(`/serials`, params); // 系列列表 5 | export const getSerialMovies = (id, params) => http.get(`/serials/${id}/movies`, params); // 系列影视 6 | -------------------------------------------------------------------------------- /api/video.js: -------------------------------------------------------------------------------- 1 | import http from '../http/index' 2 | 3 | export const getVideos = (params) => http.get('/videos', params); // 获取视频列表 4 | export const getVideo = (id) => http.get(`/videos/${id}`); // 获取视频详情 5 | -------------------------------------------------------------------------------- /app.scss: -------------------------------------------------------------------------------- 1 | @import "miniprogram_npm/mind-ui-weapp/assets/style/border.wxss"; 2 | @import 'static/styles/reset.scss'; 3 | @import 'static/styles/theme.scss'; 4 | @import 'static/styles/common.scss'; 5 | @import 'static/styles/iconfont.scss'; -------------------------------------------------------------------------------- /components/actor/actor-item/index.js: -------------------------------------------------------------------------------- 1 | const app = getApp() 2 | 3 | Component({ 4 | behaviors: [wx.computedBehavior], 5 | 6 | options: { 7 | addGlobalClass: true, 8 | }, 9 | 10 | properties: { 11 | actor: { 12 | type: Object, 13 | required: true, 14 | }, 15 | keyword: { 16 | type: String, 17 | value: "" 18 | }, 19 | }, 20 | 21 | computed: { 22 | name(data) { 23 | return data.keyword ? 24 | data.actor.name.replace(data.keyword, `${data.keyword}`) : 25 | data.actor.name; 26 | }, 27 | }, 28 | 29 | methods: { 30 | pathTo() { 31 | app.actor = this.data.actor; 32 | 33 | wx.navigateTo({ 34 | url: `/pages/actor/detail/index?id=${this.data.actor.id}` 35 | }) 36 | } 37 | } 38 | }) -------------------------------------------------------------------------------- /components/actor/actor-item/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /components/actor/actor-item/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | {{ actor.name_en }} 9 | 10 | {{ actor.gender }} 11 | · 12 | {{ actor.country }} 13 | 14 | 15 | -------------------------------------------------------------------------------- /components/actor/actor-row/index.js: -------------------------------------------------------------------------------- 1 | const app = getApp() 2 | 3 | Component({ 4 | options: { 5 | virtualHost: true, 6 | styleIsolation: 'apply-shared' 7 | }, 8 | 9 | properties: { 10 | actor: { 11 | type: Object, 12 | required: true, 13 | }, 14 | }, 15 | 16 | methods: { 17 | pathTo() { 18 | app.actor = this.data.actor; 19 | 20 | wx.navigateTo({ 21 | url: `/pages/actor/detail/index?id=${this.data.actor.id}` 22 | }) 23 | } 24 | } 25 | }) 26 | -------------------------------------------------------------------------------- /components/actor/actor-row/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /components/actor/actor-row/index.scss: -------------------------------------------------------------------------------- 1 | .actor-row { 2 | display: inline-block; 3 | position: relative; 4 | vertical-align: top; 5 | margin-right: 16rpx; 6 | padding-bottom: 15rpx; 7 | width: 188rpx; 8 | 9 | &:nth-last-child(1) { 10 | margin-right: 0; 11 | } 12 | 13 | .actor-avatar { 14 | position: relative; 15 | width: 188rpx; 16 | height: 268rpx; 17 | overflow: hidden; 18 | object-fit: cover; 19 | border-radius: 6rpx; 20 | background-color: rgba(#f5f5f5, 0.45); 21 | } 22 | 23 | .actor-info { 24 | .actor-name { 25 | padding-top: 10rpx; 26 | line-height: 32rpx; 27 | font-size: 28rpx; 28 | overflow: hidden; 29 | text-overflow: ellipsis; 30 | white-space: nowrap; 31 | } 32 | 33 | .actor-label { 34 | color: #ccc; 35 | font-size: 24rpx; 36 | overflow: hidden; 37 | white-space: nowrap; 38 | text-overflow: ellipsis; 39 | } 40 | } 41 | } -------------------------------------------------------------------------------- /components/actor/actor-row/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {{ actor.name }} 6 | 导演 7 | 8 | 饰: {{ actor.act }} 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /components/app/footer-info/index.js: -------------------------------------------------------------------------------- 1 | import { APP_NAME } from "../../../config" 2 | 3 | Component({ 4 | data: { 5 | APP_NAME, 6 | }, 7 | }) 8 | -------------------------------------------------------------------------------- /components/app/footer-info/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /components/app/footer-info/index.scss: -------------------------------------------------------------------------------- 1 | .app-info { 2 | display: flex; 3 | align-items: center; 4 | justify-content: center; 5 | height: 80rpx; 6 | color: #cbcbcb; 7 | .app-logo { 8 | width: 40rpx; 9 | height: 40rpx; 10 | filter: grayscale(100%); 11 | opacity: 0.5; 12 | } 13 | .app-name { 14 | margin-left: 6rpx; 15 | } 16 | } -------------------------------------------------------------------------------- /components/app/footer-info/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{ APP_NAME }} 4 | -------------------------------------------------------------------------------- /components/article/article-item/index.js: -------------------------------------------------------------------------------- 1 | const app = getApp() 2 | 3 | Component({ 4 | externalClasses: ['article-class'], 5 | 6 | options: { 7 | virtualHost: true, 8 | styleIsolation: 'apply-shared' 9 | }, 10 | 11 | behaviors: [wx.computedBehavior], 12 | 13 | properties: { 14 | article: { 15 | type: Object, 16 | required: true, 17 | }, 18 | }, 19 | 20 | computed: { 21 | author(data) { 22 | return data.article?.author; 23 | }, 24 | created_at(data) { 25 | return app.dateBefore(data.article?.created_at) 26 | } 27 | }, 28 | 29 | methods: { 30 | pathTo() { 31 | wx.navigateTo({ 32 | url: `/pages/article/detail/index?id=${this.data.article.id}` 33 | }) 34 | } 35 | } 36 | }) -------------------------------------------------------------------------------- /components/article/article-item/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /components/article/article-item/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{ article.title }} 4 | 5 | 6 | 7 | 8 | {{ author.username }} 9 | 10 | 11 | 12 | {{ article.brief }} 13 | 14 | 15 | 16 | 17 | 18 | 19 | {{ article.like_count }} 点赞 20 | · 21 | {{ article.read_count }} 浏览 22 | 23 | {{ created_at }} 24 | 25 | -------------------------------------------------------------------------------- /components/c-icon/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['class'], 3 | 4 | options: { 5 | addGlobalClass: true, 6 | }, 7 | 8 | properties: { 9 | name: { 10 | type: String 11 | }, 12 | color: { 13 | type: String 14 | }, 15 | }, 16 | }) -------------------------------------------------------------------------------- /components/c-icon/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /components/c-icon/index.wxml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /components/comment-page/components/comment-bar/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | 3 | properties: { 4 | _id: { 5 | type: Number, 6 | required: true, 7 | }, 8 | type: { 9 | type: String, 10 | required: true, 11 | }, 12 | }, 13 | 14 | data: { 15 | isFocus: false, 16 | content: "", 17 | }, 18 | 19 | methods: { 20 | showCommentBox() { 21 | this.setData({ 22 | isFocus: true 23 | }) 24 | }, 25 | 26 | hideCommentBox() { 27 | this.setData({ 28 | isFocus: false 29 | }) 30 | }, 31 | 32 | contentChange(e) { 33 | this.setData({ 34 | content: e.detail 35 | }) 36 | }, 37 | 38 | create() { 39 | this.setData({ 40 | content: "" 41 | }) 42 | this.triggerEvent("create-success"); 43 | }, 44 | } 45 | }) 46 | -------------------------------------------------------------------------------- /components/comment-page/components/comment-bar/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": { 4 | "comment-edit": "../comment-edit" 5 | } 6 | } -------------------------------------------------------------------------------- /components/comment-page/components/comment-bar/index.scss: -------------------------------------------------------------------------------- 1 | .comment-bar { 2 | display: flex; 3 | align-items: center; 4 | justify-content: space-between; 5 | height: 92rpx; 6 | border-top: 1rpx solid #eee; 7 | background-color: #fff; 8 | 9 | .input-bar { 10 | flex: 1; 11 | margin: 0 30rpx; 12 | 13 | .virtual-input { 14 | padding: 0 30rpx; 15 | height: 60rpx; 16 | line-height: 60rpx; 17 | font-size: 24rpx; 18 | border-radius: 60rpx; 19 | color: var(--color-text-secondary); 20 | background-color: #efefef; 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /components/comment-page/components/comment-bar/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 来点碎碎念... 4 | 6 | 7 | -------------------------------------------------------------------------------- /components/comment-page/components/comment-edit/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /components/comment-page/components/comment-item/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /components/comment-page/components/comment-tool/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": { 4 | "report": "/components/report" 5 | } 6 | } -------------------------------------------------------------------------------- /components/comment-page/components/comment-tool/index.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NameLi/muying-weapp/4fccfa93fcd0178704a9138374bdb5d5b651b94a/components/comment-page/components/comment-tool/index.scss -------------------------------------------------------------------------------- /components/comment-page/components/comment-tool/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /components/comment-page/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": { 4 | "comment-item": "./components/comment-item", 5 | "comment-tool": "./components/comment-tool", 6 | "comment-bar": "./components/comment-bar" 7 | } 8 | } -------------------------------------------------------------------------------- /components/comment-page/index.scss: -------------------------------------------------------------------------------- 1 | .comment-header { 2 | display: flex; 3 | justify-content: space-between; 4 | align-items: center; 5 | padding: 0 20rpx; 6 | height: 80rpx; 7 | font-size: 28rpx; 8 | .comment-count { 9 | font-weight: bold; 10 | } 11 | } 12 | .comment-bar { 13 | height: 92rpx; 14 | } 15 | .no-comment-container { 16 | display: flex; 17 | align-items: center; 18 | justify-content: center; 19 | height: calc(100vh - 300rpx); 20 | .no-comment { 21 | color: #aaa; 22 | font-size: 28rpx; 23 | } 24 | } -------------------------------------------------------------------------------- /components/half-page/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /components/header/header-bar/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /components/header/header-bar/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | {{ title }} 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /components/header/header-scroll-bar/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /components/image-group/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | behaviors: [wx.computedBehavior], 3 | 4 | externalClasses: ['class'], 5 | 6 | properties: { 7 | images: { 8 | type: Array, 9 | value: [], 10 | }, 11 | }, 12 | 13 | computed: { 14 | photos(data) { 15 | let photos = []; 16 | for (let i = 0; i < 3; i++) { 17 | if (data.images[i]) { 18 | photos.push(data.images[i]); 19 | } else { 20 | photos.push("https://img.ixook.com/image/default.jpg@avatar"); 21 | } 22 | } 23 | return photos; 24 | } 25 | }, 26 | }) 27 | -------------------------------------------------------------------------------- /components/image-group/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /components/image-group/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /components/m-panel/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | externalClasses: ['panel-class'], 3 | 4 | options: { 5 | addGlobalClass: true, 6 | }, 7 | 8 | properties: { 9 | color: { 10 | type: String, 11 | value: "", 12 | }, 13 | title: { 14 | type: String, 15 | }, 16 | subtitle: { 17 | type: String, 18 | value: "", 19 | }, 20 | replace: { 21 | type: Boolean, 22 | value: false, 23 | }, 24 | to: { 25 | type: String, 26 | }, 27 | arrow: { 28 | type: Boolean, 29 | value: false 30 | }, 31 | scrollX: { 32 | type: Boolean, 33 | value: true, 34 | }, 35 | }, 36 | 37 | methods: { 38 | pathTo() { 39 | if (this.data.to) { 40 | if (this.data.replace) { 41 | wx.redirectTo({ 42 | url: this.data.to 43 | }) 44 | } else { 45 | wx.navigateTo({ 46 | url: this.data.to 47 | }) 48 | } 49 | } 50 | }, 51 | } 52 | }) 53 | -------------------------------------------------------------------------------- /components/m-panel/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /components/m-panel/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{ title }} 4 | 5 | 6 | {{ subtitle }} 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /components/movie/movie-card/index.js: -------------------------------------------------------------------------------- 1 | const app = getApp() 2 | 3 | Component({ 4 | properties: { 5 | movie: { 6 | type: Object, 7 | }, 8 | }, 9 | 10 | methods: { 11 | pathTo() { 12 | app.movie = this.data.movie; 13 | 14 | wx.navigateTo({ 15 | url: `/pages/movie/detail/index/index?id=${this.data.movie.id}` 16 | }) 17 | } 18 | } 19 | }) 20 | -------------------------------------------------------------------------------- /components/movie/movie-card/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /components/movie/movie-item/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /components/movie/movie-row/index.js: -------------------------------------------------------------------------------- 1 | const app = getApp() 2 | 3 | Component({ 4 | options: { 5 | virtualHost: true, 6 | styleIsolation: 'apply-shared' 7 | }, 8 | 9 | behaviors: [wx.computedBehavior], 10 | 11 | properties: { 12 | movie: { 13 | type: Object, 14 | required: true, 15 | }, 16 | isComing: { 17 | type: Boolean, 18 | value: false, 19 | }, 20 | }, 21 | 22 | computed: { 23 | isShowCategory(data) { 24 | if (data.movie) { 25 | return data.movie.category && data.movie.category !== "电影"; 26 | } else { 27 | return false; 28 | } 29 | }, 30 | }, 31 | 32 | methods: { 33 | pathTo() { 34 | this.triggerEvent("on-checked", this.data.movie); 35 | 36 | app.movie = this.data.movie; 37 | 38 | wx.navigateTo({ 39 | url: `/pages/movie/detail/index/index?id=${this.data.movie.id}` 40 | }) 41 | }, 42 | } 43 | }) 44 | -------------------------------------------------------------------------------- /components/movie/movie-row/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /components/movie/movie-row/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {{ movie.category }} 6 | 7 | 8 | 全{{ movie.episode_count }}集 9 | {{ movie.rating }}分 10 | 暂无评分 11 | 12 | 13 | 14 | {{ movie.wish_count }} 想看 15 | 16 | 17 | 18 | {{ movie.title }} 19 | 20 | -------------------------------------------------------------------------------- /components/no-data/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | properties: { 3 | type: { 4 | type: String, 5 | }, 6 | content: { 7 | type: String, 8 | value: "", 9 | }, 10 | height: { 11 | type: String, 12 | } 13 | }, 14 | 15 | // ready() { 16 | // // try { 17 | // setTimeout(() => { 18 | // wx.nextTick(() => { 19 | 20 | // const query = this.createSelectorQuery() 21 | // query.select('.no-data-container').boundingClientRect() 22 | // query.exec((res) => { 23 | // // res[0].top // #the-id节点的上边界坐标 24 | // console.log(res) 25 | 26 | // this.setData({ 27 | // height: `calc(100vh - 567px)` 28 | // }) 29 | // }) 30 | // }) 31 | 32 | // // let top = this.$refs.noData?.parentNode?.getBoundingClientRect().top; 33 | // // this.height = 34 | // // this.showContent = true; 35 | // }, 300); 36 | // // } catch (error) { 37 | // // console.warn(error); 38 | // // } 39 | // } 40 | }) 41 | -------------------------------------------------------------------------------- /components/no-data/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /components/no-data/index.scss: -------------------------------------------------------------------------------- 1 | .no-data-container { 2 | display: flex; 3 | align-items: center; 4 | justify-content: center; 5 | height: 40vh; 6 | 7 | .no-data { 8 | color: #aaa; 9 | font-size: 28rpx; 10 | } 11 | } -------------------------------------------------------------------------------- /components/no-data/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{ content }} 4 | 5 | 6 | -------------------------------------------------------------------------------- /components/photo/photo-group/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | properties: { 3 | photos: { 4 | type: Array, 5 | } 6 | } 7 | }) 8 | -------------------------------------------------------------------------------- /components/photo/photo-group/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /components/photo/photo-group/index.scss: -------------------------------------------------------------------------------- 1 | .photo-group { 2 | .photo-item { 3 | display: inline-block; 4 | margin-right: 8rpx; 5 | .photo { 6 | height: 180rpx; 7 | border-radius: 6rpx; 8 | object-fit: cover; 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /components/photo/photo-group/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /components/player/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | options: { 3 | addGlobalClass: true, 4 | }, 5 | }) 6 | -------------------------------------------------------------------------------- /components/player/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /components/player/index.wxml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /components/report/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /components/report/index.scss: -------------------------------------------------------------------------------- 1 | .loading { 2 | display: flex; 3 | align-items: center; 4 | justify-content: center; 5 | height: 120rpx; 6 | } 7 | 8 | .reason-list { 9 | display: flex; 10 | flex-wrap: wrap; 11 | color: var(--color-text-primary); 12 | 13 | .reason-item { 14 | width: 50%; 15 | height: 60rpx; 16 | line-height: 60rpx; 17 | 18 | &.is-active { 19 | color: var(--color-theme); 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /components/report/index.wxml: -------------------------------------------------------------------------------- 1 | 11 | 12 | 13 | 14 | 15 | 16 | 23 | {{ item.label }} 24 | 25 | 26 | -------------------------------------------------------------------------------- /components/review/review-item/index.js: -------------------------------------------------------------------------------- 1 | const app = getApp() 2 | 3 | Component({ 4 | behaviors: [wx.computedBehavior], 5 | 6 | properties: { 7 | review: { 8 | type: Object, 9 | required: true, 10 | } 11 | }, 12 | 13 | computed: { 14 | author(data) { 15 | return data.review?.author; 16 | }, 17 | created_at(data) { 18 | return app.dateBefore(data.review?.created_at) 19 | } 20 | }, 21 | 22 | methods: { 23 | pathTo() { 24 | wx.navigateTo({ 25 | url: `/pages/review/detail/index?id=${this.data.review.id}` 26 | }) 27 | } 28 | } 29 | }) 30 | -------------------------------------------------------------------------------- /components/review/review-item/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /components/review/review-item/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{ review.title }} 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | {{ review.brief }} 12 | 13 | 14 | 15 | {{ review.vote_up_count }} 赞 · {{ review.read_count }} 浏览 16 | 转载自{{ review.from_zh }} 17 | {{ created_at }} 18 | 19 | -------------------------------------------------------------------------------- /components/role/role-item/index.js: -------------------------------------------------------------------------------- 1 | const app = getApp() 2 | 3 | Component({ 4 | behaviors: [wx.computedBehavior], 5 | 6 | options: { 7 | addGlobalClass: true, 8 | }, 9 | 10 | properties: { 11 | role: { 12 | type: Object, 13 | required: true, 14 | }, 15 | keyword: { 16 | type: String, 17 | value: "" 18 | }, 19 | }, 20 | 21 | computed: { 22 | name(data) { 23 | return data.keyword ? 24 | data.role.name.replace(data.keyword, `${data.keyword}`) : 25 | data.role.name; 26 | }, 27 | info(data) { 28 | return data.role.defaults 29 | ?.filter((item) => item.value) 30 | .map((item) => item.value) 31 | .join(" · "); 32 | }, 33 | }, 34 | 35 | methods: { 36 | pathTo() { 37 | this.triggerEvent("on-checked", this.data.role); 38 | app.role = this.data.role; 39 | 40 | wx.navigateTo({ 41 | url: `/pages/role/detail/index?id=${this.data.role.id}` 42 | }) 43 | } 44 | } 45 | }) -------------------------------------------------------------------------------- /components/role/role-item/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /components/role/role-item/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | {{ role.name_en }} 9 | {{ info }} 10 | 11 | 12 | -------------------------------------------------------------------------------- /components/role/role-row/index.js: -------------------------------------------------------------------------------- 1 | const app = getApp(); 2 | 3 | Component({ 4 | externalClasses: ['role-class', 'role-name-class'], 5 | 6 | options: { 7 | virtualHost: true, 8 | styleIsolation: 'apply-shared' 9 | }, 10 | 11 | properties: { 12 | role: { 13 | type: Object, 14 | required: true, 15 | }, 16 | }, 17 | 18 | methods: { 19 | pathTo() { 20 | app.role = this.data.role; 21 | 22 | wx.navigateTo({ 23 | url: `/pages/role/detail/index?id=${this.data.role.id}` 24 | }) 25 | } 26 | } 27 | }) -------------------------------------------------------------------------------- /components/role/role-row/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /components/role/role-row/index.scss: -------------------------------------------------------------------------------- 1 | .role-row { 2 | display: inline-block; 3 | position: relative; 4 | vertical-align: top; 5 | margin-right: 16rpx; 6 | padding-bottom: 15rpx; 7 | width: 188rpx; 8 | 9 | &:nth-last-child(1) { 10 | margin-right: 0; 11 | } 12 | 13 | .role-avatar { 14 | position: relative; 15 | width: 188rpx; 16 | height: 268rpx; 17 | overflow: hidden; 18 | object-fit: cover; 19 | border-radius: 6rpx; 20 | background-color: rgba(#f5f5f5, 0.45); 21 | } 22 | 23 | .role-info { 24 | .role-name { 25 | padding-top: 10rpx; 26 | line-height: 32rpx; 27 | font-size: 28rpx; 28 | overflow: hidden; 29 | text-overflow: ellipsis; 30 | white-space: nowrap; 31 | } 32 | 33 | .role-label { 34 | color: #888; 35 | font-size: 24rpx; 36 | overflow: hidden; 37 | text-overflow: ellipsis; 38 | } 39 | } 40 | } -------------------------------------------------------------------------------- /components/role/role-row/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{ role.name }} 5 | 6 | -------------------------------------------------------------------------------- /components/tab-switch/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | options: { 3 | styleIsolation: 'shared' 4 | }, 5 | 6 | properties: { 7 | tabs: { 8 | type: Array, 9 | value: [ 10 | { 11 | label: "热度", 12 | value: "hot", 13 | }, 14 | { 15 | label: "最新", 16 | value: "created_at", 17 | }, 18 | ], 19 | }, 20 | 21 | aciveName: { 22 | type: String, 23 | value: "hot", 24 | }, 25 | 26 | disabled: { 27 | type: Boolean, 28 | value: false, 29 | }, 30 | }, 31 | 32 | methods: { 33 | onChange({ detail }) { 34 | if (this.data.disabled) return; 35 | this.triggerEvent("change", detail); 36 | }, 37 | } 38 | }) 39 | -------------------------------------------------------------------------------- /components/tab-switch/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /components/tab-switch/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /components/tool/tool-bar/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | options: { 3 | multipleSlots: true 4 | }, 5 | 6 | properties: { 7 | useSlotLeft: { 8 | type: Boolean, 9 | value: false 10 | }, 11 | type: { 12 | required: true, 13 | type: String, 14 | }, 15 | data: { 16 | type: Object, 17 | }, 18 | commentHeight: { 19 | type: String, 20 | value: "88vh" 21 | } 22 | }, 23 | 24 | data: { 25 | isShowComment: false 26 | }, 27 | 28 | methods: { 29 | // 发布评论 30 | pathToCommentEdit() { 31 | this.showCommentPage() 32 | }, 33 | 34 | halfPageEnter() { 35 | 36 | }, 37 | 38 | halfPageLeave() { 39 | this.setData({ 40 | isShowComment: false 41 | }) 42 | }, 43 | 44 | // 评论列表 45 | showCommentPage() { 46 | this.setData({ 47 | isShowComment: true 48 | }) 49 | }, 50 | 51 | hideCommentPage() { 52 | this.setData({ 53 | isShowComment: false 54 | }) 55 | } 56 | } 57 | }) 58 | -------------------------------------------------------------------------------- /components/tool/tool-bar/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": { 4 | "comment-page": "/components/comment-page" 5 | } 6 | } -------------------------------------------------------------------------------- /components/tool/user-collection/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /components/tool/user-collection/index.scss: -------------------------------------------------------------------------------- 1 | .tool-item { 2 | .tool-item-icon { 3 | display: flex; 4 | align-items: center; 5 | justify-content: center; 6 | height: 48rpx; 7 | 8 | &.is-checked { 9 | color: var(--color-theme); 10 | } 11 | 12 | .icon { 13 | font-size: 40rpx; 14 | } 15 | } 16 | 17 | .tool-item-count { 18 | height: 32rpx; 19 | line-height: 28rpx; 20 | font-size: 24rpx; 21 | } 22 | } -------------------------------------------------------------------------------- /components/tool/user-collection/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | {{ data.collection_count || defaultCount }} 7 | 8 | -------------------------------------------------------------------------------- /components/tool/user-like/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /components/tool/user-like/index.scss: -------------------------------------------------------------------------------- 1 | .tool-item { 2 | .tool-item-icon { 3 | display: flex; 4 | align-items: center; 5 | justify-content: center; 6 | height: 48rpx; 7 | 8 | &.is-checked { 9 | color: var(--color-theme); 10 | } 11 | 12 | .icon { 13 | font-size: 40rpx; 14 | } 15 | } 16 | 17 | .tool-item-count { 18 | height: 32rpx; 19 | line-height: 28rpx; 20 | font-size: 24rpx; 21 | } 22 | } -------------------------------------------------------------------------------- /components/tool/user-like/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {{ data.like_count || defaultCount }} 6 | -------------------------------------------------------------------------------- /components/video/video-item/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /components/video/video-item/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 播放中 6 | 7 | {{ duration }} 8 | 9 | 10 | {{ video.title }} 11 | 12 | 13 | 14 | {{ video.like_count }}赞 · {{ video.play_count }}播放 15 | 16 | {{ created_at }} 17 | 18 | 19 | -------------------------------------------------------------------------------- /components/video/video-row/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | properties: { 3 | video: { 4 | type: Object, 5 | required: true, 6 | }, 7 | }, 8 | 9 | methods: { 10 | 11 | } 12 | }) 13 | -------------------------------------------------------------------------------- /components/video/video-row/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /components/video/video-row/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | {{ video.title }} 7 | -------------------------------------------------------------------------------- /config.js: -------------------------------------------------------------------------------- 1 | export const APP_NAME = '慕影网' 2 | export const DEVELOPER = '冰糖雪梨' 3 | export const SHARE_IMG = "https://api.ixook.com/images/share.jpg" 4 | export const VERSION = '1.1' 5 | export const HOST = 'https://test-h5-api.ixook.com' -------------------------------------------------------------------------------- /images/honour-cup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NameLi/muying-weapp/4fccfa93fcd0178704a9138374bdb5d5b651b94a/images/honour-cup.png -------------------------------------------------------------------------------- /images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NameLi/muying-weapp/4fccfa93fcd0178704a9138374bdb5d5b651b94a/images/logo.png -------------------------------------------------------------------------------- /images/tabbar/home-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NameLi/muying-weapp/4fccfa93fcd0178704a9138374bdb5d5b651b94a/images/tabbar/home-active.png -------------------------------------------------------------------------------- /images/tabbar/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NameLi/muying-weapp/4fccfa93fcd0178704a9138374bdb5d5b651b94a/images/tabbar/home.png -------------------------------------------------------------------------------- /images/tabbar/movie-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NameLi/muying-weapp/4fccfa93fcd0178704a9138374bdb5d5b651b94a/images/tabbar/movie-active.png -------------------------------------------------------------------------------- /images/tabbar/movie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NameLi/muying-weapp/4fccfa93fcd0178704a9138374bdb5d5b651b94a/images/tabbar/movie.png -------------------------------------------------------------------------------- /images/tabbar/profile-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NameLi/muying-weapp/4fccfa93fcd0178704a9138374bdb5d5b651b94a/images/tabbar/profile-active.png -------------------------------------------------------------------------------- /images/tabbar/profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NameLi/muying-weapp/4fccfa93fcd0178704a9138374bdb5d5b651b94a/images/tabbar/profile.png -------------------------------------------------------------------------------- /images/tabbar/video-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NameLi/muying-weapp/4fccfa93fcd0178704a9138374bdb5d5b651b94a/images/tabbar/video-active.png -------------------------------------------------------------------------------- /images/tabbar/video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NameLi/muying-weapp/4fccfa93fcd0178704a9138374bdb5d5b651b94a/images/tabbar/video.png -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2015", 4 | "module": "commonjs" 5 | } 6 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "fast-deep-equal": "^3.1.3", 4 | "mind-ui-weapp": "^1.1.0", 5 | "miniprogram-computed": "^4.4.0", 6 | "rfdc": "^1.3.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /pages/account/components/captcha-modal/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/account/components/captcha-modal/index.scss: -------------------------------------------------------------------------------- 1 | .title { 2 | line-height: 60rpx; 3 | } 4 | 5 | .captcha-main { 6 | margin-top: 20rpx; 7 | display: flex; 8 | align-items: center; 9 | justify-content: center; 10 | height: 70rpx; 11 | 12 | .captcha { 13 | height: 70rpx; 14 | } 15 | } 16 | 17 | .code-input-main { 18 | display: flex; 19 | flex-direction: row; 20 | justify-content: space-around; 21 | position: relative; 22 | padding: 40rpx 0 0; 23 | } 24 | 25 | .code-input { 26 | height: 68rpx; 27 | width: 100%; 28 | position: absolute; 29 | border: none; 30 | outline: none; 31 | color: transparent; 32 | background-color: transparent; 33 | text-shadow: 0 0 0 transparent; 34 | } 35 | 36 | .code-input-main-item { 37 | width: 34rpx; 38 | height: 68rpx; 39 | line-height: 68rpx; 40 | margin: 0 5rpx; 41 | padding-bottom: 0; 42 | opacity: 0.8; 43 | border-bottom: 1px solid #323232; 44 | text-align: center; 45 | font-size: 36rpx; 46 | color: #323232; 47 | } -------------------------------------------------------------------------------- /pages/account/components/captcha-modal/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 请输入以下验证码数字 3 | 4 | 5 | 点击重新获取 6 | 7 | 8 | 9 | 10 | {{ code[index] || "" }} 11 | 12 | 14 | 15 | -------------------------------------------------------------------------------- /pages/account/forget/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "忘记密码", 3 | "usingComponents": { 4 | "captcha-modal": "../components/captcha-modal" 5 | } 6 | } -------------------------------------------------------------------------------- /pages/account/login/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarBackgroundColor": "#ffffff", 3 | "navigationBarTextStyle": "black", 4 | "navigationBarTitleText": "慕影网", 5 | "usingComponents": {} 6 | } -------------------------------------------------------------------------------- /pages/account/register/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarBackgroundColor": "#ffffff", 3 | "navigationBarTextStyle": "black", 4 | "navigationBarTitleText": "", 5 | "usingComponents": { 6 | "captcha-modal": "../components/captcha-modal" 7 | } 8 | } -------------------------------------------------------------------------------- /pages/actor/award/components/award-item/index.js: -------------------------------------------------------------------------------- 1 | const app = getApp(); 2 | 3 | Component({ 4 | options: { 5 | addGlobalClass: true, 6 | }, 7 | 8 | properties: { 9 | award: { 10 | type: Object, 11 | required: true, 12 | }, 13 | }, 14 | 15 | methods: { 16 | pathToMovie(e) { 17 | const movie = e.currentTarget.dataset.movie; 18 | app.movie = movie; 19 | 20 | wx.navigateTo({ 21 | url: `/pages/movie/detail/index/index?id=${movie.id}` 22 | }) 23 | } 24 | } 25 | }) 26 | -------------------------------------------------------------------------------- /pages/actor/award/components/award-item/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/actor/award/index.js: -------------------------------------------------------------------------------- 1 | import { getActorAwards } from "../../../api/actor" 2 | 3 | Page({ 4 | data: { 5 | loading: true, 6 | awards: [], 7 | }, 8 | 9 | onLoad(options) { 10 | this.getActorAwards(options.id); 11 | }, 12 | 13 | async getActorAwards(id) { 14 | this.setData({ loading: true }) 15 | const { code, data } = await getActorAwards(id); 16 | 17 | if (code === 200) { 18 | this.setData({ 19 | awards: data 20 | }, () => { 21 | this.setData({ loading: false }) 22 | }) 23 | } 24 | } 25 | }) -------------------------------------------------------------------------------- /pages/actor/award/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "荣誉奖项", 3 | "usingComponents": { 4 | "award-item": "./components/award-item" 5 | } 6 | } -------------------------------------------------------------------------------- /pages/actor/award/index.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NameLi/muying-weapp/4fccfa93fcd0178704a9138374bdb5d5b651b94a/pages/actor/award/index.scss -------------------------------------------------------------------------------- /pages/actor/award/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pages/actor/detail/components/actor-award/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | 3 | properties: { 4 | _id: { 5 | type: Number 6 | }, 7 | award: { 8 | type: Object, 9 | }, 10 | awardCount: { 11 | type: Number, 12 | }, 13 | }, 14 | 15 | methods: { 16 | pathTo() { 17 | wx.navigateTo({ 18 | url: `/pages/actor/award/index?id=${this.data._id}` 19 | }) 20 | } 21 | } 22 | }) 23 | -------------------------------------------------------------------------------- /pages/actor/detail/components/actor-award/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/actor/detail/components/actor-award/index.scss: -------------------------------------------------------------------------------- 1 | .award { 2 | display: flex; 3 | align-items: center; 4 | margin: 20rpx; 5 | padding: 0 20rpx; 6 | height: 150rpx; 7 | border-radius: 8rpx; 8 | background-color: #fff; 9 | .poster { 10 | width: 90rpx; 11 | height: 90rpx; 12 | border-radius: 50%; 13 | object-fit: cover; 14 | } 15 | .info { 16 | margin-left: 20rpx; 17 | flex: 1; 18 | .title { 19 | font-size: 32rpx; 20 | font-weight: bold; 21 | } 22 | .content { 23 | margin-top: 10rpx; 24 | font-size: 28rpx; 25 | } 26 | } 27 | .count { 28 | font-size: 28rpx; 29 | color: var(--color-text-secondary); 30 | .icon { 31 | font-size: 24rpx; 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /pages/actor/detail/components/actor-award/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{ award.title }} 5 | {{ award.type_name }} 6 | 7 | 8 | 获奖{{ awardCount }}次 9 | 10 | 11 | -------------------------------------------------------------------------------- /pages/actor/detail/components/actor-count/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | properties: { 3 | actor: { 4 | type: Object, 5 | }, 6 | }, 7 | }) 8 | -------------------------------------------------------------------------------- /pages/actor/detail/components/actor-count/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/actor/detail/components/actor-count/index.scss: -------------------------------------------------------------------------------- 1 | .actor-count { 2 | margin: 20rpx; 3 | background-color: #fff; 4 | border-radius: 12rpx; 5 | padding: 20rpx 0; 6 | .info-card { 7 | display: flex; 8 | height: 110rpx; 9 | align-items: center; 10 | .card-item { 11 | position: relative; 12 | flex: 1; 13 | display: flex; 14 | align-items: center; 15 | justify-content: center; 16 | flex-direction: column; 17 | &:nth-child(1)::after, 18 | &:nth-child(2)::after { 19 | content: ""; 20 | position: absolute; 21 | right: 0; 22 | width: 1px; 23 | height: 80rpx; 24 | background-color: #e5e5e5; 25 | } 26 | .value { 27 | font-size: 32rpx; 28 | font-weight: bold; 29 | line-height: 46rpx; 30 | } 31 | .label { 32 | font-size: 28rpx; 33 | color: #888; 34 | } 35 | } 36 | } 37 | } -------------------------------------------------------------------------------- /pages/actor/detail/components/actor-count/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{ actor.collection_count }}人 5 | 已关注数 6 | 7 | 8 | {{ actor.works_count }}部 9 | 作品总数 10 | 11 | 12 | {{ actor.role_count }}个 13 | 饰演角色 14 | 15 | 16 | -------------------------------------------------------------------------------- /pages/actor/detail/components/information/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | properties: { 3 | actor: { 4 | type: Object, 5 | }, 6 | loading: { 7 | type: Boolean, 8 | }, 9 | }, 10 | 11 | methods: { 12 | close() { 13 | this.triggerEvent('close', true) 14 | }, 15 | } 16 | }) 17 | -------------------------------------------------------------------------------- /pages/actor/detail/components/information/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/actor/detail/components/information/index.scss: -------------------------------------------------------------------------------- 1 | .content { 2 | margin-top: 20rpx; 3 | padding: 30rpx; 4 | line-height: 1.6; 5 | text-align: justify; 6 | word-break: break-all; 7 | } -------------------------------------------------------------------------------- /pages/actor/detail/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationStyle": "custom", 3 | "usingComponents": { 4 | "actor-count": "./components/actor-count", 5 | "actor-award": "./components/actor-award", 6 | "information": "./components/information" 7 | } 8 | } -------------------------------------------------------------------------------- /pages/actor/role/index.js: -------------------------------------------------------------------------------- 1 | import { getActorRoles } from "../../../api/actor" 2 | 3 | Page({ 4 | behaviors: [wx.getInfiniteData], 5 | 6 | data: { 7 | form: { 8 | sortby: "hot", 9 | }, 10 | }, 11 | 12 | onChange(e) { 13 | const sortby = e.detail; 14 | 15 | if (this.data.form.sortby === sortby) return; 16 | 17 | this.setData({ 18 | page: 1, 19 | list: [], 20 | 'form.sortby': sortby 21 | }) 22 | 23 | this.loadMore(); 24 | }, 25 | 26 | loadMore() { 27 | this.getData(getActorRoles, this.data.id); 28 | } 29 | }) -------------------------------------------------------------------------------- /pages/actor/role/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "饰演角色", 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/actor/role/index.scss: -------------------------------------------------------------------------------- 1 | .role-header { 2 | display: flex; 3 | justify-content: space-between; 4 | align-items: center; 5 | padding: 0 20rpx; 6 | height: 80rpx; 7 | font-size: 28rpx; 8 | .role-count { 9 | font-weight: bold; 10 | } 11 | } -------------------------------------------------------------------------------- /pages/actor/role/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 角色 {{ total }} 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /pages/actor/works/index.js: -------------------------------------------------------------------------------- 1 | import { getActorWorks } from "../../../api/actor" 2 | 3 | Page({ 4 | behaviors: [wx.getInfiniteData], 5 | 6 | data: { 7 | tabs: [ 8 | { 9 | label: "热度", 10 | value: "hot", 11 | }, 12 | { 13 | label: "时间", 14 | value: "year", 15 | }, 16 | { 17 | label: "评分", 18 | value: "rating", 19 | }, 20 | ], 21 | form: { 22 | sortby: "hot", 23 | }, 24 | per_page: 21, 25 | }, 26 | 27 | onChange(e) { 28 | const sortby = e.detail; 29 | 30 | if (this.data.form.sortby === sortby) return; 31 | 32 | this.setData({ 33 | page: 1, 34 | list: [], 35 | 'form.sortby': sortby 36 | }) 37 | 38 | this.loadMore(); 39 | }, 40 | 41 | loadMore() { 42 | this.getData(getActorWorks, this.data.id); 43 | } 44 | }) -------------------------------------------------------------------------------- /pages/actor/works/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "影人作品", 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/actor/works/index.scss: -------------------------------------------------------------------------------- 1 | .works-header { 2 | display: flex; 3 | justify-content: space-between; 4 | align-items: center; 5 | padding: 0 20rpx; 6 | height: 80rpx; 7 | font-size: 28rpx; 8 | .works-count { 9 | font-weight: bold; 10 | } 11 | } 12 | 13 | .works-list { 14 | padding: 0 20rpx; 15 | display: flex; 16 | flex-wrap: wrap; 17 | justify-content: space-between; 18 | .movie-row { 19 | width: 220rpx; 20 | padding-bottom: 30rpx; 21 | margin-right: 0; 22 | display: block; 23 | .poster-wrapper { 24 | position: relative; 25 | width: 100%; 26 | height: 320rpx; 27 | overflow: hidden; 28 | border-radius: 6rpx; 29 | .img-cover { 30 | width: 220rpx; 31 | height: 320rpx; 32 | background-color: #eee; 33 | } 34 | } 35 | } 36 | .place-holder { 37 | height: 0; 38 | } 39 | } -------------------------------------------------------------------------------- /pages/actor/works/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 作品 {{ total }} 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /pages/article/detail/components/skeleton/index.js: -------------------------------------------------------------------------------- 1 | const app = getApp(); 2 | 3 | Component({ 4 | options: { 5 | addGlobalClass: true, 6 | }, 7 | 8 | data: { 9 | headerBarH: app.globalData.headerBarH 10 | } 11 | }) 12 | -------------------------------------------------------------------------------- /pages/article/detail/components/skeleton/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/article/detail/components/skeleton/index.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pages/article/detail/components/skeleton/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /pages/article/detail/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationStyle": "custom", 3 | "enablePullDownRefresh": true, 4 | "usingComponents": { 5 | "skeleton": "./components/skeleton" 6 | } 7 | } -------------------------------------------------------------------------------- /pages/article/index.js: -------------------------------------------------------------------------------- 1 | const app = getApp() 2 | 3 | Page({ 4 | data: { 5 | 6 | }, 7 | 8 | onLoad(options) { 9 | 10 | }, 11 | 12 | onReady() { 13 | 14 | }, 15 | 16 | onShow() { 17 | 18 | }, 19 | 20 | onHide() { 21 | 22 | }, 23 | 24 | onUnload() { 25 | 26 | }, 27 | 28 | onPullDownRefresh() { 29 | 30 | }, 31 | 32 | onReachBottom() { 33 | 34 | }, 35 | 36 | onShareAppMessage() { 37 | 38 | } 39 | }) -------------------------------------------------------------------------------- /pages/article/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "usingComponents": {} 3 | } -------------------------------------------------------------------------------- /pages/article/index.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NameLi/muying-weapp/4fccfa93fcd0178704a9138374bdb5d5b651b94a/pages/article/index.scss -------------------------------------------------------------------------------- /pages/article/index.wxml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NameLi/muying-weapp/4fccfa93fcd0178704a9138374bdb5d5b651b94a/pages/article/index.wxml -------------------------------------------------------------------------------- /pages/award/detail/components/award-info/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | properties: { 3 | award: { 4 | type: Object, 5 | } 6 | }, 7 | 8 | methods: { 9 | pathTo() { 10 | wx.navigateTo({ 11 | url: `/pages/award/detail/info/index?name=${this.data.award.name}`, 12 | }) 13 | }, 14 | } 15 | }) 16 | -------------------------------------------------------------------------------- /pages/award/detail/components/award-info/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/award/detail/components/award-info/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {{ award.categories }} 6 | 始于{{ award.year }}年 7 | {{ award.country }} 8 | 9 | 10 | 11 | {{ award.title }} 12 | {{ award.original_title }} 13 | {{ award.brief }} 14 | -------------------------------------------------------------------------------- /pages/award/detail/index/index.js: -------------------------------------------------------------------------------- 1 | import { getAward } from "../../../../api/award" 2 | 3 | Page({ 4 | data: { 5 | loading: false, 6 | name: "", 7 | award: {}, 8 | scrollTop: 0 9 | }, 10 | 11 | onLoad(options) { 12 | this.data.name = options.name 13 | this.getAward(); 14 | }, 15 | 16 | async getAward() { 17 | this.setData({ loading: true }); 18 | const { code, data } = await getAward(this.data.name); 19 | this.setData({ loading: false }); 20 | 21 | if (code === 200) { 22 | this.setData({ 23 | award: data 24 | }) 25 | } 26 | }, 27 | 28 | pathToSession(e) { 29 | const session = e.target.dataset.session; 30 | 31 | wx.navigateTo({ 32 | url: `/pages/award/session/index?name=${this.data.name}&session=${session}`, 33 | }) 34 | }, 35 | 36 | onPageScroll({ scrollTop }) { 37 | this.setData({ 38 | scrollTop 39 | }) 40 | }, 41 | }) -------------------------------------------------------------------------------- /pages/award/detail/index/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationStyle": "custom", 3 | "usingComponents": { 4 | "award-info": "../components/award-info" 5 | } 6 | } -------------------------------------------------------------------------------- /pages/award/detail/index/index.scss: -------------------------------------------------------------------------------- 1 | .award-session-list { 2 | padding: 30rpx; 3 | font-size: 0; 4 | 5 | .session-title { 6 | height: 60rpx; 7 | height: 60rpx; 8 | font-size: 28rpx; 9 | } 10 | 11 | .session-item { 12 | display: inline-block; 13 | width: 25%; 14 | height: 60rpx; 15 | line-height: 60rpx; 16 | font-size: 28rpx; 17 | text-align: center; 18 | color: #777; 19 | } 20 | } -------------------------------------------------------------------------------- /pages/award/detail/index/index.wxml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 历届列表 8 | 10 | 第{{ award.session - index }}届 11 | 12 | -------------------------------------------------------------------------------- /pages/award/detail/info/index.js: -------------------------------------------------------------------------------- 1 | import { getAward } from "../../../../api/award"; 2 | 3 | Page({ 4 | data: { 5 | name: "", 6 | award: {}, 7 | }, 8 | 9 | onLoad(options) { 10 | this.getAward(options.name); 11 | }, 12 | 13 | async getAward(name) { 14 | this.setData({ loading: true }); 15 | const { code, data } = await getAward(name); 16 | this.setData({ loading: false }); 17 | 18 | if (code === 200) { 19 | this.setData({ 20 | award: data 21 | }) 22 | } 23 | }, 24 | }) -------------------------------------------------------------------------------- /pages/award/detail/info/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "奖项详情", 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/award/detail/info/index.scss: -------------------------------------------------------------------------------- 1 | .label { 2 | color: var(--color-text-secondary); 3 | } 4 | 5 | .content { 6 | padding: 30rpx; 7 | font-size: 28rpx; 8 | line-height: 1.6; 9 | text-align: justify; 10 | } -------------------------------------------------------------------------------- /pages/award/detail/info/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | {{ award.akas }} 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 简介:{{ award.brief }} -------------------------------------------------------------------------------- /pages/award/index/index.js: -------------------------------------------------------------------------------- 1 | import { getAwards } from "../../../api/award" 2 | 3 | Page({ 4 | data: { 5 | loading: false, 6 | awards: [], 7 | }, 8 | 9 | onLoad() { 10 | this.getAwards(); 11 | }, 12 | 13 | async getAwards() { 14 | this.setData({ loading: true }); 15 | const { code, data } = await getAwards(); 16 | this.setData({ loading: false }); 17 | 18 | if (code === 200) { 19 | this.setData({ 20 | awards: data 21 | }) 22 | } 23 | }, 24 | 25 | pathTo(e) { 26 | const name = e.currentTarget.dataset.name; 27 | 28 | wx.navigateTo({ 29 | url: '/pages/award/detail/index/index?name=' + name, 30 | }) 31 | }, 32 | }) -------------------------------------------------------------------------------- /pages/award/index/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "奖项列表", 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/award/index/index.scss: -------------------------------------------------------------------------------- 1 | .award-main { 2 | .award-group { 3 | display: inline-block; 4 | width: 50%; 5 | 6 | &:nth-child(2n) .border_right::before { 7 | display: none; 8 | } 9 | 10 | .award-content { 11 | .award-item { 12 | font-size: 28rpx; 13 | display: flex; 14 | align-items: center; 15 | justify-content: center; 16 | height: 80rpx; 17 | line-height: 80rpx; 18 | &.is-hover { 19 | background-color: #f5f5f5; 20 | } 21 | } 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /pages/award/index/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {{ item.title }} 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /pages/award/session/index.js: -------------------------------------------------------------------------------- 1 | import { getAwardSession } from "../../../api/award" 2 | 3 | Page({ 4 | data: { 5 | name: "", 6 | session: null, 7 | loading: false, 8 | award: {}, 9 | }, 10 | 11 | onLoad(options) { 12 | this.data.name = options.name 13 | this.data.session = options.session 14 | this.getAwardSession(); 15 | }, 16 | 17 | async getAwardSession() { 18 | this.setData({ loading: true }); 19 | const { code, data, message } = await getAwardSession(this.data.name, this.data.session); 20 | wx.stopPullDownRefresh(); 21 | 22 | if (code === 200) { 23 | this.setData({ 24 | award: data 25 | }) 26 | } 27 | 28 | this.setData({ loading: false }); 29 | }, 30 | 31 | onPullDownRefresh() { 32 | this.getAwardSession(); 33 | } 34 | }) -------------------------------------------------------------------------------- /pages/award/session/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "奖项详情", 3 | "enablePullDownRefresh": true, 4 | "usingComponents": {} 5 | } -------------------------------------------------------------------------------- /pages/home/components/home-header/index.js: -------------------------------------------------------------------------------- 1 | const app = getApp() 2 | 3 | Component({ 4 | properties: { 5 | // 当前页面滚动是否未超过阈值 6 | isTop: { 7 | type: Boolean, 8 | value: true 9 | } 10 | }, 11 | 12 | data: { 13 | headerBarH: app.globalData.headerBarH, 14 | statusBarH: app.globalData.statusBarH, 15 | titleBarH: app.globalData.titleBarH, 16 | searchBarH: app.globalData.capsuleH, 17 | capsuleW: app.globalData.capsuleW, 18 | }, 19 | 20 | methods: { 21 | pathToSearch() { 22 | wx.navigateTo({ 23 | url: '/pages/search/index', 24 | }) 25 | } 26 | } 27 | }) -------------------------------------------------------------------------------- /pages/home/components/home-header/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/home/components/home-header/index.scss: -------------------------------------------------------------------------------- 1 | .header-bar { 2 | z-index: 99; 3 | position: fixed; 4 | left: 0; 5 | right: 0; 6 | top: 0; 7 | transition: background-color .15s; 8 | 9 | &:not(.is-top) { 10 | background-color: var(--color-theme); 11 | 12 | .search { 13 | background-color: #e5e5e5; 14 | } 15 | } 16 | 17 | .header-bar-title { 18 | display: flex; 19 | align-items: center; 20 | padding: 0 8px; 21 | transition: background-color .2s; 22 | 23 | .search { 24 | display: flex; 25 | width: 100%; 26 | align-items: center; 27 | border-radius: 100rpx; 28 | color: var(--color-text-regular); 29 | background-color: rgba(#fff, 0.65); 30 | 31 | .search-icon { 32 | display: inline-flex; 33 | align-items: center; 34 | margin-left: 10rpx; 35 | font-size: 24rpx; 36 | } 37 | 38 | .search-label { 39 | flex: 1; 40 | margin-left: 10rpx; 41 | font-size: 28rpx; 42 | } 43 | } 44 | } 45 | } -------------------------------------------------------------------------------- /pages/home/components/home-header/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 请输入你要搜索的内容 13 | 14 | 15 | -------------------------------------------------------------------------------- /pages/home/components/home-loading/index.js: -------------------------------------------------------------------------------- 1 | const app = getApp() 2 | 3 | Component({ 4 | options: { 5 | addGlobalClass: true, 6 | }, 7 | 8 | data: { 9 | headerBarH: app.globalData.headerBarH, 10 | statusBarH: app.globalData.statusBarH, 11 | titleBarH: app.globalData.titleBarH, 12 | searchBarH: app.globalData.capsuleH, 13 | capsuleW: app.globalData.capsuleW, 14 | } 15 | }) -------------------------------------------------------------------------------- /pages/home/components/home-loading/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/home/components/home-loading/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /pages/home/components/home-menu/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | methods: { 3 | navigateTo(e) { 4 | wx.navigateTo({ 5 | url: e.currentTarget.dataset.url 6 | }) 7 | } 8 | } 9 | }) -------------------------------------------------------------------------------- /pages/home/components/home-menu/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/home/components/home-menu/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 热映中 6 | 7 | 8 | 9 | 高分榜 10 | 11 | 12 | 13 | 奖项 14 | 15 | 16 | 17 | 那年今日 18 | 19 | 20 | -------------------------------------------------------------------------------- /pages/home/components/home-swiper/index.js: -------------------------------------------------------------------------------- 1 | import colorToRgba from "../../../../utils/color" 2 | 3 | Component({ 4 | properties: { 5 | swiper: { 6 | type: Array, 7 | observer(val) { 8 | if (val.length) { 9 | this.swiperChange() 10 | } 11 | } 12 | }, 13 | isTop: { 14 | type: Boolean, 15 | value: true 16 | } 17 | }, 18 | 19 | data: { 20 | swiperIndex: 0, 21 | backgroundStyle: "" 22 | }, 23 | 24 | 25 | methods: { 26 | swiperChange(e) { 27 | const index = e ? e.detail.current : 0; 28 | const bgcolor = this.data.swiper[index].bgcolor; 29 | const bgcolorRgba = colorToRgba(bgcolor, 0); 30 | 31 | this.setData({ 32 | swiperIndex: index, 33 | backgroundStyle: `background-image: linear-gradient(${bgcolor}, ${bgcolorRgba})` 34 | }) 35 | } 36 | } 37 | }) -------------------------------------------------------------------------------- /pages/home/components/home-swiper/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/home/components/home-swiper/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /pages/home/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationStyle": "custom", 3 | "navigationBarTextStyle": "white", 4 | "usingComponents": { 5 | "header-bar": "./components/home-header", 6 | "home-menu": "./components/home-menu", 7 | "home-swiper": "./components/home-swiper", 8 | "home-loading": "./components/home-loading" 9 | } 10 | } -------------------------------------------------------------------------------- /pages/home/index.scss: -------------------------------------------------------------------------------- 1 | page { 2 | background-color: #f5f5f5; 3 | padding-bottom: 10rpx; 4 | } 5 | 6 | .main { 7 | visibility: hidden; 8 | 9 | &.is-visible { 10 | visibility: visible; 11 | } 12 | } 13 | 14 | // 即将上映日期 15 | .coming-date { 16 | height: 36rpx; 17 | line-height: 40rpx; 18 | font-size: 24rpx; 19 | color: var(--color-text-secondary); 20 | } 21 | 22 | .article-item { 23 | padding: 20rpx 0 !important; 24 | } -------------------------------------------------------------------------------- /pages/movie/coming/index.js: -------------------------------------------------------------------------------- 1 | import { getMovieComing } from "../../../api/api"; 2 | 3 | Page({ 4 | behaviors: [wx.computedBehavior, wx.getInfiniteData], 5 | 6 | computed: { 7 | // 电影按日期分组 8 | groups(data) { 9 | let groups = []; 10 | data.list.map((movie) => { 11 | const gLen = groups.length; 12 | if (gLen && movie.release_date === groups[gLen - 1].date) { 13 | groups[gLen - 1].children.push(movie); 14 | } else { 15 | const group = { 16 | date: movie.release_date, 17 | children: [movie], 18 | }; 19 | groups.push(group); 20 | } 21 | }); 22 | 23 | return groups; 24 | }, 25 | }, 26 | 27 | loadMore() { 28 | this.getData(getMovieComing); 29 | } 30 | }) -------------------------------------------------------------------------------- /pages/movie/coming/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "即将上映", 3 | "enablePullDownRefresh": true, 4 | "usingComponents": { 5 | "skeleton": "../components/skeleton" 6 | } 7 | } -------------------------------------------------------------------------------- /pages/movie/coming/index.scss: -------------------------------------------------------------------------------- 1 | .main { 2 | position: relative; 3 | 4 | .group-title-holder { 5 | z-index: 1; 6 | position: fixed; 7 | left: 0; 8 | top: 0; 9 | right: 0; 10 | height: 80rpx; 11 | box-shadow: 0 2rpx 6rpx #cdcdcd; 12 | } 13 | 14 | .group { 15 | margin-bottom: 1px; 16 | .group-title { 17 | z-index: 1; 18 | position: sticky; 19 | top: 0; 20 | height: 80rpx; 21 | line-height: 80rpx; 22 | padding: 0 30rpx; 23 | font-size: 28rpx; 24 | font-weight: bold; 25 | background-color: #fff; 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /pages/movie/coming/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | {{ group.date }} 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /pages/movie/components/skeleton/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | options: { 3 | addGlobalClass: true, 4 | }, 5 | 6 | properties: { 7 | total: { 8 | type: Number, 9 | value: 8, 10 | }, 11 | top: { 12 | type: String, 13 | value: "0", 14 | }, 15 | }, 16 | }) 17 | -------------------------------------------------------------------------------- /pages/movie/components/skeleton/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/movie/components/skeleton/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /pages/movie/detail/article/index.js: -------------------------------------------------------------------------------- 1 | import { getMovieArticles } from "../../../../api/movie"; 2 | 3 | Page({ 4 | behaviors: [wx.getInfiniteData], 5 | 6 | loadMore() { 7 | this.getData(getMovieArticles, this.data.id); 8 | } 9 | }) -------------------------------------------------------------------------------- /pages/movie/detail/article/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "文章资讯", 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/movie/detail/article/index.scss: -------------------------------------------------------------------------------- 1 | page { 2 | background-color: #f5f5f5; 3 | } 4 | 5 | .main { 6 | margin-bottom: 20rpx; 7 | } -------------------------------------------------------------------------------- /pages/movie/detail/article/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pages/movie/detail/award/components/award-item/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | options: { 3 | addGlobalClass: true, 4 | }, 5 | 6 | properties: { 7 | award: { 8 | type: Object, 9 | required: true, 10 | } 11 | } 12 | }) 13 | -------------------------------------------------------------------------------- /pages/movie/detail/award/components/award-item/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/movie/detail/award/components/award-item/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 第{{ award.session }}届 {{ award.award }} 8 | {{ award.year }}年 9 | 10 | 11 | 12 | 13 | 14 | 15 | {{ item.type }} {{ item.win === 0 ? "(提名)" : "(获奖)" }} 16 | 17 | 18 | {{ actor.name }} {{ item.actors.length - 1 > index ? "/" : "" }} 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /pages/movie/detail/award/index.js: -------------------------------------------------------------------------------- 1 | import { getMovieAwards } from "../../../../api/movie"; 2 | 3 | Page({ 4 | 5 | data: { 6 | id: null, 7 | loading: false, 8 | awards: [], 9 | }, 10 | 11 | onLoad(options) { 12 | this.data.id = options.id; 13 | this.getMovieAwards(); 14 | }, 15 | 16 | async getMovieAwards() { 17 | this.setData({ loading: true }) 18 | const { code, data } = await getMovieAwards(this.data.id); 19 | this.setData({ loading: false }) 20 | 21 | if (code === 200) { 22 | this.setData({ 23 | awards: data 24 | }) 25 | } 26 | } 27 | }) -------------------------------------------------------------------------------- /pages/movie/detail/award/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "奖项荣誉", 3 | "usingComponents": { 4 | "award-item": "./components/award-item" 5 | } 6 | } -------------------------------------------------------------------------------- /pages/movie/detail/award/index.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NameLi/muying-weapp/4fccfa93fcd0178704a9138374bdb5d5b651b94a/pages/movie/detail/award/index.scss -------------------------------------------------------------------------------- /pages/movie/detail/award/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pages/movie/detail/cast/components/cast-panel/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | properties: { 3 | title: { 4 | type: String, 5 | required: true, 6 | }, 7 | subtitle: { 8 | type: String, 9 | value: "", 10 | }, 11 | count: { 12 | type: Number, 13 | value: 0, 14 | }, 15 | actors: { 16 | type: Array, 17 | value: [], 18 | } 19 | } 20 | }) 21 | -------------------------------------------------------------------------------- /pages/movie/detail/cast/components/cast-panel/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/movie/detail/cast/components/cast-panel/index.scss: -------------------------------------------------------------------------------- 1 | .panel { 2 | padding: 0; 3 | .panel-header { 4 | z-index: 1; 5 | position: sticky; 6 | top: 0; 7 | display: flex; 8 | padding: 0 20rpx; 9 | height: 86rpx; 10 | line-height: 86rpx; 11 | font-size: 28rpx; 12 | background-color: rgb(245, 245, 245); 13 | .panel-title { 14 | flex: 1; 15 | .panel-type { 16 | font-weight: bold; 17 | display: inline-block; 18 | &::before { 19 | content: ""; 20 | vertical-align: middle; 21 | display: inline-block; 22 | margin-top: -4rpx; 23 | margin-right: 12rpx; 24 | width: 8rpx; 25 | height: 8rpx; 26 | background: #f8a52d; 27 | } 28 | } 29 | } 30 | .panel-count { 31 | padding-right: 20rpx; 32 | font-size: 24rpx; 33 | padding-left: 8rpx; 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /pages/movie/detail/cast/components/cast-panel/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{ title }} 5 | 6 | ({{ count }}) 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /pages/movie/detail/cast/index.js: -------------------------------------------------------------------------------- 1 | import { getMovieCast } from "../../../../api/movie"; 2 | 3 | Page({ 4 | 5 | data: { 6 | id: null, 7 | loading: false, 8 | cast: [], 9 | }, 10 | 11 | onLoad(options) { 12 | this.data.id = options.id; 13 | this.getMovieCast(); 14 | }, 15 | 16 | async getMovieCast() { 17 | this.setData({ loading: true }) 18 | const { code, data } = await getMovieCast(this.data.id); 19 | 20 | if (code === 200) { 21 | this.setData({ 22 | cast: data 23 | }, () => { 24 | this.setData({ loading: false }) 25 | }) 26 | } 27 | 28 | wx.stopPullDownRefresh(); 29 | }, 30 | 31 | onPullDownRefresh() { 32 | this.getMovieCast(); 33 | }, 34 | }) -------------------------------------------------------------------------------- /pages/movie/detail/cast/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "演员表", 3 | "enablePullDownRefresh": true, 4 | "usingComponents": { 5 | "cast-panel": "./components/cast-panel" 6 | } 7 | } -------------------------------------------------------------------------------- /pages/movie/detail/cast/index.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NameLi/muying-weapp/4fccfa93fcd0178704a9138374bdb5d5b651b94a/pages/movie/detail/cast/index.scss -------------------------------------------------------------------------------- /pages/movie/detail/cast/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /pages/movie/detail/company/index.js: -------------------------------------------------------------------------------- 1 | import { getMovieCompanies } from "../../../../api/movie"; 2 | 3 | Page({ 4 | 5 | data: { 6 | loading: false, 7 | id: null, 8 | list: [], 9 | }, 10 | 11 | onLoad(options) { 12 | this.data.id = options.id; 13 | this.getMovieCompanies() 14 | }, 15 | 16 | async getMovieCompanies() { 17 | this.setData({ loading: true }); 18 | const { code, data } = await getMovieCompanies(this.data.id); 19 | this.setData({ loading: false }); 20 | 21 | wx.stopPullDownRefresh(); 22 | 23 | if (code === 200) { 24 | this.setData({ 25 | list: data 26 | }) 27 | } 28 | }, 29 | 30 | onPullDownRefresh() { 31 | this.getMovieCompanies(); 32 | }, 33 | }) -------------------------------------------------------------------------------- /pages/movie/detail/company/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "制作发行", 3 | "enablePullDownRefresh": true, 4 | "usingComponents": {} 5 | } -------------------------------------------------------------------------------- /pages/movie/detail/company/index.scss: -------------------------------------------------------------------------------- 1 | .list { 2 | .item { 3 | line-height: 92rpx; 4 | font-size: 28rpx; 5 | 6 | .type { 7 | position: sticky; 8 | left: 0; 9 | top: 0; 10 | width: 100%; 11 | font-weight: bold; 12 | padding: 0 30rpx; 13 | background-color: rgb(245, 245, 245); 14 | } 15 | 16 | .company-list { 17 | .company-item { 18 | padding: 0 30rpx; 19 | height: 100rpx; 20 | line-height: 100rpx; 21 | } 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /pages/movie/detail/company/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {{ item.type_zh }} 6 | 7 | 8 | {{ company.name }} 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /pages/movie/detail/dialogue/index.js: -------------------------------------------------------------------------------- 1 | import { getMovieDialogues } from "../../../../api/movie"; 2 | 3 | Page({ 4 | behaviors: [wx.getInfiniteData], 5 | 6 | loadMore() { 7 | this.getData(getMovieDialogues, this.data.id); 8 | } 9 | }) -------------------------------------------------------------------------------- /pages/movie/detail/dialogue/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "经典台词", 3 | "enablePullDownRefresh": true, 4 | "usingComponents": {} 5 | } -------------------------------------------------------------------------------- /pages/movie/detail/dialogue/index.scss: -------------------------------------------------------------------------------- 1 | .list { 2 | padding: 0 30rpx 30rpx; 3 | 4 | .item { 5 | padding: 26rpx 0; 6 | line-height: 1.6; 7 | font-size: 28rpx; 8 | text-align: justify; 9 | white-space: pre-line; 10 | } 11 | } -------------------------------------------------------------------------------- /pages/movie/detail/dialogue/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{ index + 1 }}. {{item.content}} 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /pages/movie/detail/index/components/favorite-list/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/movie/detail/index/components/favorite-list/index.scss: -------------------------------------------------------------------------------- 1 | .create-btn { 2 | padding: 0 10rpx; 3 | color: var(--color-theme); 4 | } 5 | 6 | .save-main { 7 | 8 | .no-data { 9 | margin-top: 20vh; 10 | text-align: center; 11 | font-size: 28rpx; 12 | color: var(--color-text-secondary); 13 | } 14 | 15 | .loading { 16 | padding-top: 20vh; 17 | } 18 | } 19 | 20 | .footer { 21 | padding-bottom: 14rpx; 22 | height: 100rpx; 23 | 24 | .save-btn { 25 | font-size: 28rpx; 26 | font-weight: bold; 27 | } 28 | } -------------------------------------------------------------------------------- /pages/movie/detail/index/components/information/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/movie/detail/index/components/movie-award/index.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | Component({ 4 | behaviors: [wx.computedBehavior], 5 | 6 | properties: { 7 | movie: { 8 | type: Object, 9 | required: true, 10 | }, 11 | }, 12 | 13 | computed: { 14 | award(data) { 15 | if (data.movie.awards.length) { 16 | let detail = data.movie.awards[0].children[0].desc; 17 | let title = detail.split(" ")[0]; 18 | let info = detail.split(" ")[1]; 19 | return { 20 | title, 21 | info, 22 | }; 23 | } 24 | 25 | return {}; 26 | } 27 | } 28 | }) 29 | -------------------------------------------------------------------------------- /pages/movie/detail/index/components/movie-award/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/movie/detail/index/components/movie-award/index.scss: -------------------------------------------------------------------------------- 1 | .movie-award { 2 | display: flex; 3 | align-items: center; 4 | padding: 30rpx; 5 | height: 150rpx; 6 | background-color: rgb(246, 246, 246); 7 | border-radius: 6rpx; 8 | .award-item { 9 | width: 120rpx; 10 | text-align: center; 11 | .award-count { 12 | .award-count__value { 13 | font-weight: bold; 14 | font-size: 32rpx; 15 | color: rgb(223, 57, 54); 16 | } 17 | .award-count__label { 18 | font-size: 20rpx; 19 | color: rgb(223, 57, 54); 20 | } 21 | } 22 | .award-label { 23 | display: block; 24 | margin-top: 20rpx; 25 | font-size: 24rpx; 26 | color: rgb(176, 179, 187); 27 | } 28 | &.award-detail { 29 | padding-left: 30rpx; 30 | flex: 1; 31 | text-align: left; 32 | .award-name { 33 | font-size: 28rpx; 34 | font-weight: bold; 35 | overflow: hidden; 36 | text-overflow: ellipsis; 37 | white-space: nowrap; 38 | } 39 | } 40 | } 41 | } -------------------------------------------------------------------------------- /pages/movie/detail/index/components/movie-award/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{ movie.awards_count }} 5 | 6 | 7 | 获奖 8 | 9 | 10 | 11 | 12 | {{ movie.awards_nominate_count }} 13 | 14 | 15 | 提名 16 | 17 | 18 | 19 | {{ award.title }} 20 | {{ award.info }} 21 | 22 | -------------------------------------------------------------------------------- /pages/movie/detail/index/components/movie-bar/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | 3 | properties: { 4 | movie: { 5 | type: Object, 6 | }, 7 | }, 8 | 9 | methods: { 10 | showFavoriteModal() { 11 | this.triggerEvent('show-favorite') 12 | }, 13 | 14 | showCommentModal() { 15 | this.triggerEvent('show-comment') 16 | }, 17 | 18 | pathToReview() { 19 | const id = this.data.movie.id; 20 | 21 | wx.navigateTo({ 22 | url: `/pages/movie/detail/review/index?id=${id}` 23 | }) 24 | } 25 | } 26 | }) 27 | -------------------------------------------------------------------------------- /pages/movie/detail/index/components/movie-bar/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/movie/detail/index/components/movie-extra/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | properties: { 3 | movie: { 4 | type: Object, 5 | required: true, 6 | }, 7 | }, 8 | 9 | methods: { 10 | pathTo(e) { 11 | const type = e.currentTarget.dataset.type; 12 | const id = this.data.movie.id; 13 | 14 | wx.navigateTo({ 15 | url: `/pages/movie/detail/${type}/index?id=${id}` 16 | }) 17 | } 18 | } 19 | }) 20 | -------------------------------------------------------------------------------- /pages/movie/detail/index/components/movie-extra/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/movie/detail/index/components/movie-extra/index.scss: -------------------------------------------------------------------------------- 1 | .movie-extra { 2 | white-space: nowrap; 3 | padding: 20rpx 10rpx; 4 | background-color: rgb(246, 246, 246); 5 | border-radius: 6rpx; 6 | .extra-item { 7 | margin: 0 20rpx; 8 | display: flex; 9 | justify-content: space-between; 10 | height: 70rpx; 11 | line-height: 70rpx; 12 | .extra-name { 13 | font-weight: bold; 14 | font-size: 28rpx; 15 | color: var(--color-text-primary); 16 | } 17 | .extra-label { 18 | font-size: 26rpx; 19 | color: rgb(128, 141, 176); 20 | .m-icon { 21 | font-size: 24rpx !important; 22 | } 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /pages/movie/detail/index/components/movie-info/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/movie/detail/index/components/movie-rating/index.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | Component({ 4 | behaviors: [wx.computedBehavior], 5 | 6 | properties: { 7 | movie: { 8 | type: Object, 9 | required: true, 10 | }, 11 | }, 12 | 13 | data: { 14 | visible: false, 15 | }, 16 | 17 | computed: { 18 | imdb(data) { 19 | return data.movie.thrid_rating?.imdb || { rating: 0, count: 0 }; 20 | }, 21 | douban(data) { 22 | return data.movie.thrid_rating?.douban || { rating: 0, count: 0 }; 23 | }, 24 | }, 25 | 26 | methods: { 27 | // 豆瓣评分描述 28 | showDoubanRatingTip() { 29 | this.setData({ 30 | visible: true 31 | }) 32 | }, 33 | 34 | handleConfirm() { 35 | this.setData({ 36 | visible: false 37 | }) 38 | }, 39 | 40 | // 评分详情 41 | pathToRate() { 42 | this.triggerEvent('show-rate', true) 43 | }, 44 | } 45 | }) 46 | -------------------------------------------------------------------------------- /pages/movie/detail/index/components/movie-rating/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/movie/detail/index/components/photo-wall/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | properties: { 3 | photos: { 4 | type: Array, 5 | value: [], 6 | }, 7 | }, 8 | }) 9 | -------------------------------------------------------------------------------- /pages/movie/detail/index/components/photo-wall/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/movie/detail/index/components/photo-wall/index.scss: -------------------------------------------------------------------------------- 1 | .photo-wall { 2 | white-space: nowrap; 3 | .photo-item { 4 | display: inline-block; 5 | margin-right: 16rpx; 6 | .photo { 7 | height: 180rpx; 8 | border-radius: 6rpx; 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /pages/movie/detail/index/components/photo-wall/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pages/movie/detail/index/components/serial-row/index.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | behaviors: [wx.computedBehavior], 3 | 4 | properties: { 5 | serial: { 6 | type: Object, 7 | required: true, 8 | }, 9 | }, 10 | 11 | computed: { 12 | photos(data) { 13 | return data.serial?.movies.map((m) => m.poster); 14 | }, 15 | }, 16 | 17 | methods: { 18 | pathTo() { 19 | wx.navigateTo({ 20 | url: "/pages/movie/serial/detail/index?id=" + this.data.serial.id 21 | }) 22 | }, 23 | } 24 | }) 25 | -------------------------------------------------------------------------------- /pages/movie/detail/index/components/serial-row/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/movie/detail/index/components/serial-row/index.scss: -------------------------------------------------------------------------------- 1 | .serial-row { 2 | vertical-align: top; 3 | display: inline-block; 4 | margin: 0 8rpx; 5 | padding-bottom: 15rpx; 6 | width: 188rpx; 7 | box-sizing: border-box; 8 | .poster-group { 9 | display: flex; 10 | justify-content: center; 11 | height: 170rpx; 12 | .image-group { 13 | transform: scale(1.1); 14 | transform-origin: 0 0; 15 | } 16 | } 17 | .title { 18 | padding-top: 12rpx; 19 | line-height: 36rpx; 20 | font-size: 28rpx; 21 | color: var(--color-text-primary); 22 | overflow: hidden; 23 | text-overflow: ellipsis; 24 | white-space: nowrap; 25 | text-align: center; 26 | } 27 | } -------------------------------------------------------------------------------- /pages/movie/detail/index/components/serial-row/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | {{ serial.name }} 7 | -------------------------------------------------------------------------------- /pages/movie/detail/index/components/skeleton/index.js: -------------------------------------------------------------------------------- 1 | const app = getApp(); 2 | 3 | Component({ 4 | behaviors: [wx.computedBehavior], 5 | 6 | options: { 7 | addGlobalClass: true, 8 | }, 9 | 10 | properties: { 11 | isHalf: { 12 | type: Boolean, 13 | }, 14 | }, 15 | 16 | data: { 17 | headerBarH: app.globalData.headerBarH 18 | }, 19 | 20 | computed: { 21 | style(data) { 22 | return data.isHalf ? `margin-top: ${data.headerBarH}px` : `padding-top: ${data.headerBarH}px`; 23 | }, 24 | }, 25 | }) -------------------------------------------------------------------------------- /pages/movie/detail/index/components/skeleton/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": {} 4 | } -------------------------------------------------------------------------------- /pages/movie/detail/index/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationStyle": "custom", 3 | "usingComponents": { 4 | "movie-info": "./components/movie-info", 5 | "movie-rating": "./components/movie-rating", 6 | "photo-wall": "./components/photo-wall", 7 | "serial-row": "./components/serial-row", 8 | "movie-award": "./components/movie-award", 9 | "movie-extra": "./components/movie-extra", 10 | "movie-bar": "./components/movie-bar", 11 | "skeleton": "./components/skeleton", 12 | "favorite-list": "./components/favorite-list", 13 | "favorite-create": "/pages/profile/favorite/components/create-page", 14 | "information": "./components/information", 15 | "rate-create-page": "../rating/create", 16 | "rate-detail-page": "../rating/index", 17 | "comment-page": "/components/comment-page" 18 | } 19 | } -------------------------------------------------------------------------------- /pages/movie/detail/knowledge/index.js: -------------------------------------------------------------------------------- 1 | import { getMovieKnowledges } from "../../../../api/movie"; 2 | 3 | Page({ 4 | behaviors: [wx.getInfiniteData], 5 | 6 | loadMore() { 7 | this.getData(getMovieKnowledges, this.data.id); 8 | } 9 | }) -------------------------------------------------------------------------------- /pages/movie/detail/knowledge/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "幕后知识", 3 | "enablePullDownRefresh": true, 4 | "usingComponents": {} 5 | } -------------------------------------------------------------------------------- /pages/movie/detail/knowledge/index.scss: -------------------------------------------------------------------------------- 1 | .list { 2 | padding: 0 30rpx 30rpx; 3 | .item { 4 | padding: 26rpx 0; 5 | line-height: 1.6; 6 | font-size: 28rpx; 7 | text-align: justify; 8 | white-space: pre-line; 9 | } 10 | } -------------------------------------------------------------------------------- /pages/movie/detail/knowledge/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | {{index + 1}}. {{item.content}} 3 | 4 | 5 | -------------------------------------------------------------------------------- /pages/movie/detail/level/index.js: -------------------------------------------------------------------------------- 1 | import { getMovieLevels } from "../../../../api/movie"; 2 | 3 | Page({ 4 | behaviors: [wx.getInfiniteData], 5 | 6 | loadMore() { 7 | this.getData(getMovieLevels, this.data.id); 8 | }, 9 | }) -------------------------------------------------------------------------------- /pages/movie/detail/level/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "家长引导", 3 | "enablePullDownRefresh": true, 4 | "usingComponents": {} 5 | } -------------------------------------------------------------------------------- /pages/movie/detail/level/index.scss: -------------------------------------------------------------------------------- 1 | .list { 2 | padding: 0 30rpx 30rpx; 3 | 4 | .item { 5 | padding: 26rpx 0; 6 | line-height: 1.6; 7 | font-size: 28rpx; 8 | 9 | .content { 10 | margin-top: 12rpx; 11 | text-align: justify; 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /pages/movie/detail/level/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{ item.content }} 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /pages/movie/detail/pubdate/index.js: -------------------------------------------------------------------------------- 1 | import { getMoviePubdates } from "../../../../api/movie"; 2 | 3 | Page({ 4 | behaviors: [wx.getInfiniteData], 5 | 6 | loadMore() { 7 | this.getData(getMoviePubdates, this.data.id); 8 | } 9 | }) -------------------------------------------------------------------------------- /pages/movie/detail/pubdate/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "上映日期", 3 | "enablePullDownRefresh": true, 4 | "usingComponents": {} 5 | } -------------------------------------------------------------------------------- /pages/movie/detail/pubdate/index.scss: -------------------------------------------------------------------------------- 1 | .is-premiere { 2 | font-size: 24rpx; 3 | color: var(--color-text-secondary); 4 | } -------------------------------------------------------------------------------- /pages/movie/detail/pubdate/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | {{ p.country }} 3 | {{ p.premiere ? "(首映)" : "" }} 4 | 5 | 6 | -------------------------------------------------------------------------------- /pages/movie/detail/rating/create/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "usingComponents": {} 3 | } -------------------------------------------------------------------------------- /pages/movie/detail/rating/create/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 发布 8 | 9 | 10 | 11 | {{ rating }} 12 | 13 | 14 | 16 | 17 | 18 | 19 |