├── .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 |
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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
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 |
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 |
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 |
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 |
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 |
--------------------------------------------------------------------------------
/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 |
6 |
7 |
8 |
9 |
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 |
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 |
21 | {{ contentCount }}/200
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/pages/movie/detail/rating/index/components/rate-detail/index.js:
--------------------------------------------------------------------------------
1 | Component({
2 | properties: {
3 | rating: {
4 | type: Number
5 | },
6 | voteCount: {
7 | type: Number
8 | },
9 | ratios: {
10 | type: Array,
11 | },
12 | betterThan: {
13 | type: Array,
14 | },
15 | },
16 | })
17 |
--------------------------------------------------------------------------------
/pages/movie/detail/rating/index/components/rate-detail/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/movie/detail/rating/index/components/rate-detail/index.wxml:
--------------------------------------------------------------------------------
1 |
2 | 评分详细
3 |
4 |
5 |
6 |
7 | {{ rating }}
8 | 分
9 |
10 | {{ voteCount }}人评分
11 |
12 |
13 |
14 |
15 |
16 | {{ item.label }}
17 |
18 |
19 |
20 | {{ item.ratio }}
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | 好于
29 | {{ item.ratio }}
30 | 的{{ item.genre }}
31 |
32 |
33 |
--------------------------------------------------------------------------------
/pages/movie/detail/rating/index/components/rate-trend/index.js:
--------------------------------------------------------------------------------
1 | // pages/actor/award/components/award-item/index.js
2 | Component({
3 |
4 | properties: {
5 |
6 | },
7 |
8 |
9 | data: {
10 |
11 | },
12 |
13 |
14 | methods: {
15 |
16 | }
17 | })
18 |
--------------------------------------------------------------------------------
/pages/movie/detail/rating/index/components/rate-trend/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/movie/detail/rating/index/components/rate-trend/index.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NameLi/muying-weapp/4fccfa93fcd0178704a9138374bdb5d5b651b94a/pages/movie/detail/rating/index/components/rate-trend/index.scss
--------------------------------------------------------------------------------
/pages/movie/detail/rating/index/components/rate-trend/index.wxml:
--------------------------------------------------------------------------------
1 |
2 | pages/actor/award/components/award-item/index.wxml
3 |
--------------------------------------------------------------------------------
/pages/movie/detail/rating/index/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | "rate-detail": "./components/rate-detail"
4 | }
5 | }
--------------------------------------------------------------------------------
/pages/movie/detail/rating/index/index.scss:
--------------------------------------------------------------------------------
1 | .loading {
2 | z-index: 2;
3 | position: absolute;
4 | left: 0;
5 | top: 0;
6 | right: 0;
7 | bottom: 0;
8 | background-color: #fff;
9 | display: flex;
10 | align-items: center;
11 | justify-content: center;
12 | }
13 |
14 | .tip {
15 | margin: 20rpx;
16 | font-size: 24rpx;
17 | color: var(--color-theme);
18 | }
--------------------------------------------------------------------------------
/pages/movie/detail/rating/index/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 评分分布功能因样本原因还在开发中,以下仅为示例数据
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/pages/movie/detail/review/index.js:
--------------------------------------------------------------------------------
1 | import { getMovieReviews } from "../../../../api/movie";
2 |
3 | Page({
4 | behaviors: [wx.getInfiniteData],
5 |
6 | data: {
7 | form: {
8 | sortby: "hot",
9 | },
10 | },
11 |
12 | onChange(e) {
13 | const value = e.detail;
14 | if (this.data.form.sortby === value) return;
15 |
16 | this.setData({
17 | page: 1,
18 | list: [],
19 | 'form.sortby': value
20 | })
21 |
22 | this.loadMore();
23 | },
24 |
25 | loadMore() {
26 | this.getData(getMovieReviews, this.data.id);
27 | }
28 | })
--------------------------------------------------------------------------------
/pages/movie/detail/review/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "影评",
3 | "enablePullDownRefresh": true,
4 | "usingComponents": {}
5 | }
--------------------------------------------------------------------------------
/pages/movie/detail/review/index.scss:
--------------------------------------------------------------------------------
1 | page {
2 | background-color: #f5f5f5;
3 | padding-bottom: constant(safe-area-inset-bottom);
4 | padding-bottom: env(safe-area-inset-bottom);
5 | }
6 |
7 | .review-header {
8 | z-index: 1;
9 | position: sticky;
10 | left: 0;
11 | top: 0;
12 | width: 100%;
13 | display: flex;
14 | justify-content: space-between;
15 | align-items: center;
16 | padding: 0 20rpx;
17 | width: 100vw;
18 | height: 80rpx;
19 | font-size: 28rpx;
20 | box-shadow: 0 0 6rpx #ccc;
21 | background-color: #fff;
22 |
23 | &.is-hidden {
24 | visibility: hidden;
25 | }
26 |
27 | .review-count {
28 | font-weight: bold;
29 | }
30 |
31 | .review-type {
32 | z-index: 2;
33 | position: relative;
34 | }
35 | }
36 |
37 | .review-list {
38 | padding-top: 5rpx;
39 | }
40 |
41 | .no-review-container {
42 | display: flex;
43 | align-items: center;
44 | justify-content: center;
45 | height: 70vh;
46 |
47 | .no-review {
48 | color: #aaa;
49 | font-size: 28rpx;
50 | }
51 | }
--------------------------------------------------------------------------------
/pages/movie/detail/review/index.wxml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | 还没有影评
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/pages/movie/detail/role/index.js:
--------------------------------------------------------------------------------
1 | import { getMovieRoles } from "../../../../api/movie";
2 |
3 | Page({
4 | behaviors: [wx.getInfiniteData],
5 |
6 | loadMore() {
7 | this.getData(getMovieRoles, this.data.id);
8 | }
9 | })
--------------------------------------------------------------------------------
/pages/movie/detail/role/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "角色表",
3 | "enablePullDownRefresh": true,
4 | "usingComponents": {}
5 | }
--------------------------------------------------------------------------------
/pages/movie/detail/role/index.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NameLi/muying-weapp/4fccfa93fcd0178704a9138374bdb5d5b651b94a/pages/movie/detail/role/index.scss
--------------------------------------------------------------------------------
/pages/movie/detail/role/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/pages/movie/detail/serial/components/serial-item/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 | if (data.serial) {
14 | return data.serial.movies.map((m) => m.poster);
15 | } else {
16 | return [];
17 | }
18 | },
19 | },
20 |
21 | methods: {
22 | pathToSerial() {
23 | wx.navigateTo({
24 | url: `/pages/movie/serial/detail/index?id=${this.data.serial.id}`
25 | })
26 | }
27 | }
28 | })
29 |
--------------------------------------------------------------------------------
/pages/movie/detail/serial/components/serial-item/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/movie/detail/serial/components/serial-item/index.scss:
--------------------------------------------------------------------------------
1 | .serial-item {
2 | display: flex;
3 | padding: 20rpx 0;
4 | margin: 0 30rpx;
5 | position: relative;
6 | .serial-info {
7 | flex: 1;
8 | margin-left: 28rpx;
9 | .serial-name {
10 | font-size: 32rpx;
11 | color: var(--color-text-primary);
12 | }
13 | .serial-label {
14 | margin-top: 10rpx;
15 | font-size: 28rpx;
16 | color: var(--color-text-secondary);
17 | }
18 | }
19 | }
--------------------------------------------------------------------------------
/pages/movie/detail/serial/components/serial-item/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{ serial.name }}
6 | {{ serial.name_en }}
7 | 影视数量 {{ serial.count }}
8 |
9 |
--------------------------------------------------------------------------------
/pages/movie/detail/serial/index.js:
--------------------------------------------------------------------------------
1 | import { getMovieSerials } from "../../../../api/movie";
2 | Page({
3 | data: {
4 | loading: false,
5 | id: null,
6 | serials: [],
7 | },
8 |
9 | onLoad(options) {
10 | this.data.id = options.id;
11 | this.getMovieSerials();
12 | },
13 |
14 | async getMovieSerials() {
15 | this.setData({ loading: true });
16 | const { code, data } = await getMovieSerials(this.data.id);
17 | this.setData({ loading: false });
18 |
19 | if (code === 200) {
20 | this.setData({
21 | serials: data
22 | })
23 | }
24 |
25 | wx.stopPullDownRefresh();
26 | },
27 |
28 | onPullDownRefresh() {
29 | this.getMovieSerials();
30 | },
31 | })
--------------------------------------------------------------------------------
/pages/movie/detail/serial/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "影视系列",
3 | "enablePullDownRefresh": true,
4 | "usingComponents": {
5 | "serial-item": "./components/serial-item"
6 | }
7 | }
--------------------------------------------------------------------------------
/pages/movie/detail/serial/index.scss:
--------------------------------------------------------------------------------
1 | .list {
2 | margin-top: 15rpx;
3 | }
--------------------------------------------------------------------------------
/pages/movie/detail/serial/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/pages/movie/detail/video/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "相关视频",
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/movie/detail/video/index.scss:
--------------------------------------------------------------------------------
1 | .container {
2 | .navbar-group {
3 | z-index: 9;
4 | position: sticky;
5 | top: 0;
6 | background-color: #fff;
7 | }
8 |
9 | .m-tabs {
10 | border-bottom: 1px solid #e5e5e5;
11 |
12 | .m-tabs__line {
13 | height: 8rpx;
14 | }
15 |
16 | .m-tabs__nav {
17 | display: block;
18 |
19 | .m-tabs-item {
20 | display: inline-block;
21 | font-weight: bold;
22 |
23 | .m-tabs-item__text {
24 | transition: all 0.2s;
25 | }
26 | }
27 | }
28 | }
29 | }
--------------------------------------------------------------------------------
/pages/movie/detail/video/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/pages/movie/index/components/movie-row/index.js:
--------------------------------------------------------------------------------
1 | const app = getApp()
2 |
3 | Component({
4 | properties: {
5 | movie: {
6 | type: Object,
7 | required: true,
8 | },
9 | },
10 |
11 | methods: {
12 | pathTo() {
13 | app.movie = this.data.movie;
14 |
15 | wx.navigateTo({
16 | url: `/pages/movie/detail/index/index?id=${this.data.movie.id}`
17 | })
18 | },
19 | }
20 | })
21 |
--------------------------------------------------------------------------------
/pages/movie/index/components/movie-row/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/movie/index/components/movie-row/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 全{{ movie.episode_count }}集
6 | {{ movie.rating }}
7 |
8 |
9 | {{ movie.title }}
10 |
--------------------------------------------------------------------------------
/pages/movie/index/components/nav-group/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {
4 | "nav-list": "../nav-list"
5 | }
6 | }
--------------------------------------------------------------------------------
/pages/movie/index/components/nav-group/index.scss:
--------------------------------------------------------------------------------
1 | .nav-group-wrapper {
2 | height: 280rpx;
3 | .nav-group {
4 | padding-top: 20rpx;
5 | &.is-fixed {
6 | z-index: 9;
7 | position: fixed;
8 | left: 0;
9 | top: 0;
10 | width: 100%;
11 | background-color: #fff;
12 | border-bottom: 1rpx solid #eee;
13 | }
14 | }
15 |
16 | .nav-group-fixed {
17 | z-index: 8;
18 | position: fixed;
19 | left: 0;
20 | top: 0;
21 | width: 100%;
22 | height: 72rpx;
23 | line-height: 72rpx;
24 | background-color: #f5f5f5;
25 | .current-menu {
26 | text-align: center;
27 | }
28 | .m-icon {
29 | float: right;
30 | text-align: center;
31 | width: 72rpx;
32 | color: var(--color-theme);
33 | }
34 | }
35 | }
--------------------------------------------------------------------------------
/pages/movie/index/components/nav-group/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/pages/movie/index/components/nav-list/index.js:
--------------------------------------------------------------------------------
1 | Component({
2 | properties: {
3 | value: {
4 | type: String,
5 | value: "",
6 | },
7 | list: {
8 | // type: Array,
9 | type: null,
10 | value: []
11 | },
12 | },
13 |
14 | methods: {
15 | checkItem(e) {
16 | const name = e.currentTarget.dataset.name
17 | this.triggerEvent("change", name);
18 | },
19 | }
20 | })
21 |
--------------------------------------------------------------------------------
/pages/movie/index/components/nav-list/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/movie/index/components/nav-list/index.scss:
--------------------------------------------------------------------------------
1 | .nav-list {
2 | position: relative;
3 | padding-left: 20rpx;
4 | width: 100%;
5 | height: 64rpx;
6 | user-select: none;
7 | white-space: nowrap;
8 | overflow-x: scroll;
9 |
10 | .nav-item {
11 | display: inline-block;
12 | margin: 6rpx 10rpx 6rpx 0;
13 | padding: 0 20rpx;
14 | height: 40rpx;
15 | line-height: 40rpx;
16 | font-size: 28rpx;
17 | border-radius: 40rpx;
18 | transition: all 0.2s;
19 |
20 | &.is-active {
21 | color: #fff;
22 | background-color: rgba(#e54847, 0.85);
23 | }
24 | }
25 | }
--------------------------------------------------------------------------------
/pages/movie/index/components/nav-list/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
4 | {{ item.name }}
5 |
6 |
--------------------------------------------------------------------------------
/pages/movie/index/index.js:
--------------------------------------------------------------------------------
1 | import { getMovies } from "../../../api/movie";
2 |
3 | Page({
4 | behaviors: [wx.getInfiniteData],
5 |
6 | data: {
7 | scrollTop: 0,
8 | per_page: 21,
9 | },
10 |
11 | searchChange({ detail }) {
12 | this.setData({
13 | loading: false,
14 | list: [],
15 | page: 1,
16 | noMoreData: false,
17 | form: detail
18 | })
19 |
20 | this.loadMore();
21 | },
22 |
23 | loadMore() {
24 | this.getData(getMovies);
25 | },
26 |
27 | onPageScroll({ scrollTop }) {
28 | this.setData({
29 | scrollTop
30 | })
31 | }
32 | })
--------------------------------------------------------------------------------
/pages/movie/index/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | "movie-row": "./components/movie-row",
4 | "nav-group": "./components/nav-group"
5 | }
6 | }
--------------------------------------------------------------------------------
/pages/movie/index/index.scss:
--------------------------------------------------------------------------------
1 | .main {
2 | display: flex;
3 | justify-content: space-between;
4 | flex-wrap: wrap;
5 | padding: 20rpx;
6 | }
--------------------------------------------------------------------------------
/pages/movie/index/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/pages/movie/serial/detail/components/serial-info/index.js:
--------------------------------------------------------------------------------
1 | Component({
2 | properties: {
3 | serial: {
4 | type: Object,
5 | require: true,
6 | },
7 | scrollTop: {
8 | type: Number,
9 | value: 0
10 | }
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/pages/movie/serial/detail/components/serial-info/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/movie/serial/detail/components/serial-info/index.scss:
--------------------------------------------------------------------------------
1 | .serial-info {
2 | position: relative;
3 | height: 420rpx;
4 | .serial-poster {
5 | width: 100%;
6 | height: 420rpx;
7 | object-fit: cover;
8 | }
9 | .serial-info-footer {
10 | position: absolute;
11 | left: 0;
12 | bottom: 0;
13 | right: 0;
14 | padding: 20rpx 30rpx;
15 | height: 168rpx;
16 | color: #fff;
17 | background-image: linear-gradient(transparent 0%, rgba(0, 0, 0, 0.32) 100%);
18 | color: #fff;
19 | .serial-name {
20 | padding: 10rpx 0;
21 | font-size: 48rpx;
22 | }
23 | .serial-extra {
24 | font-size: 28rpx;
25 | }
26 | }
27 | }
--------------------------------------------------------------------------------
/pages/movie/serial/detail/components/serial-info/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
12 |
--------------------------------------------------------------------------------
/pages/movie/serial/detail/index.js:
--------------------------------------------------------------------------------
1 | import { getSerialMovies } from "../../../../api/serial";
2 |
3 | Page({
4 | data: {
5 | loading: false,
6 | scrollTop: 0,
7 | serial: {
8 | movies: [],
9 | },
10 | },
11 |
12 | onLoad(options) {
13 | this.getSerialMovies(options.id)
14 | },
15 |
16 | async getSerialMovies(id) {
17 | this.setData({ loading: true });
18 | const { code, data } = await getSerialMovies(id);
19 | this.setData({ loading: false });
20 |
21 | if (code === 200) {
22 | this.setData({
23 | serial: data
24 | })
25 | }
26 | },
27 |
28 | onPageScroll({ scrollTop }) {
29 | this.setData({
30 | scrollTop
31 | })
32 | },
33 | })
--------------------------------------------------------------------------------
/pages/movie/serial/detail/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationStyle": "custom",
3 | "usingComponents": {
4 | "serial-info": "./components/serial-info"
5 | }
6 | }
--------------------------------------------------------------------------------
/pages/movie/serial/detail/index.scss:
--------------------------------------------------------------------------------
1 | .serial-list {
2 | padding: 15rpx 0;
3 | }
--------------------------------------------------------------------------------
/pages/movie/serial/detail/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/pages/movie/theater/index.js:
--------------------------------------------------------------------------------
1 | import { getMovieTheater } from "../../../api/api";
2 |
3 | Page({
4 | behaviors: [wx.getInfiniteData],
5 |
6 | loadMore() {
7 | this.getData(getMovieTheater);
8 | }
9 | })
--------------------------------------------------------------------------------
/pages/movie/theater/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "正在热映",
3 | "enablePullDownRefresh": true,
4 | "usingComponents": {
5 | "skeleton": "../components/skeleton"
6 | }
7 | }
--------------------------------------------------------------------------------
/pages/movie/theater/index.scss:
--------------------------------------------------------------------------------
1 | .main {
2 | margin-top: 15rpx;
3 | }
--------------------------------------------------------------------------------
/pages/movie/theater/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/pages/movie/today/index.js:
--------------------------------------------------------------------------------
1 | import { getMovieToday } from "../../../api/api";
2 |
3 | Page({
4 | behaviors: [wx.getInfiniteData],
5 |
6 | data: {
7 | form: {
8 | sortby: "hot",
9 | },
10 | },
11 |
12 | typeChangeHandle(e) {
13 | if (this.data.loading) return;
14 |
15 | const name = e.currentTarget.dataset.type;
16 |
17 | this.setData({
18 | 'form.sortby': name,
19 | page: 1,
20 | list: []
21 | })
22 | this.loadMore();
23 | },
24 |
25 | loadMore() {
26 | this.getData(getMovieToday);
27 | }
28 | })
--------------------------------------------------------------------------------
/pages/movie/today/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "那年今日",
3 | "usingComponents": {
4 | "skeleton": "../components/skeleton"
5 | }
6 | }
--------------------------------------------------------------------------------
/pages/movie/today/index.scss:
--------------------------------------------------------------------------------
1 | .container {
2 | .menu-wrapper {
3 | z-index: 999;
4 | position: fixed;
5 | left: 0;
6 | top: 0;
7 | display: flex;
8 | width: 100%;
9 | height: 90rpx;
10 | line-height: 90rpx;
11 | background: #fff;
12 | border-bottom: 1rpx solid #eee;
13 | .menu {
14 | flex: 1;
15 | text-align: center;
16 | font-size: 28rpx;
17 | &.is-active {
18 | color: var(--color-theme);
19 | }
20 | }
21 | }
22 | .main {
23 | padding-top: 105rpx;
24 | }
25 | }
--------------------------------------------------------------------------------
/pages/movie/today/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/pages/movie/top/index.js:
--------------------------------------------------------------------------------
1 | import { getMovieTop } from "../../../api/api";
2 |
3 | Page({
4 | behaviors: [wx.getInfiniteData],
5 |
6 | loadMore() {
7 | this.getData(getMovieTop);
8 | }
9 | })
--------------------------------------------------------------------------------
/pages/movie/top/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "TOP 100",
3 | "enablePullDownRefresh": true,
4 | "usingComponents": {
5 | "skeleton": "../components/skeleton"
6 | }
7 | }
--------------------------------------------------------------------------------
/pages/movie/top/index.scss:
--------------------------------------------------------------------------------
1 | .main {
2 | margin-top: 15rpx;
3 | }
--------------------------------------------------------------------------------
/pages/movie/top/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/pages/photo/components/photo-item/index.js:
--------------------------------------------------------------------------------
1 | Component({
2 | properties: {
3 | photo: {
4 | type: Object,
5 | },
6 | }
7 | })
8 |
--------------------------------------------------------------------------------
/pages/photo/components/photo-item/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/photo/components/photo-item/index.scss:
--------------------------------------------------------------------------------
1 | .photo-item {
2 | position: relative;
3 | display: inline-block;
4 | margin: 5rpx;
5 | width: 236rpx;
6 | height: 236rpx;
7 | border-radius: 6rpx;
8 | box-sizing: border-box;
9 | background-color: #f6f6f6;
10 | }
--------------------------------------------------------------------------------
/pages/photo/components/photo-item/index.wxml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/pages/photo/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "相册",
3 | "usingComponents": {
4 | "photo-item": "./components/photo-item"
5 | }
6 | }
--------------------------------------------------------------------------------
/pages/photo/index.scss:
--------------------------------------------------------------------------------
1 | .m-tabs {
2 | z-index: 2;
3 | position: sticky;
4 | top: 0;
5 | background-color: #fff;
6 | border-bottom: 1px solid #e5e5e5;
7 |
8 | .m-tabs__line {
9 | height: 8rpx !important;
10 | }
11 | }
12 |
13 | .photo-list {
14 | padding: 5rpx;
15 | }
--------------------------------------------------------------------------------
/pages/photo/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/pages/profile/aboutus/index.js:
--------------------------------------------------------------------------------
1 | Page({
2 | copyText(e) {
3 | const text = e.currentTarget.dataset.text
4 |
5 | wx.setClipboardData({
6 | data: text,
7 | success(res) {
8 |
9 | }
10 | })
11 | },
12 | })
--------------------------------------------------------------------------------
/pages/profile/aboutus/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "关于我们",
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/profile/aboutus/index.scss:
--------------------------------------------------------------------------------
1 | page {
2 | background-color: #f5f5f5;
3 | }
4 |
5 | .main {
6 | .m-cell-group--card {
7 | box-shadow: 0 6rpx 6rpx #eee;
8 | }
9 | }
10 |
11 | .link {
12 | color: var(--color-theme);
13 | }
--------------------------------------------------------------------------------
/pages/profile/aboutus/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | https://ixook.com
9 |
10 |
11 |
--------------------------------------------------------------------------------
/pages/profile/changelog/index.js:
--------------------------------------------------------------------------------
1 | Page({
2 |
3 | })
--------------------------------------------------------------------------------
/pages/profile/changelog/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "更新日志",
3 | "usingComponents": {
4 | "m-timeline": "mind-ui-weapp/timeline",
5 | "m-timeline-item": "mind-ui-weapp/timeline-item"
6 | }
7 | }
--------------------------------------------------------------------------------
/pages/profile/changelog/index.scss:
--------------------------------------------------------------------------------
1 | .container {
2 | padding-top: 20rpx;
3 | }
4 |
5 | .content {
6 | padding: 32rpx;
7 | border-radius: 6rpx;
8 | background-color: #f1f1f1;
9 |
10 | .title {
11 | height: 48rpx;
12 | line-height: 38rpx;
13 | font-weight: bold;
14 | color: var(--color-theme);
15 | }
16 |
17 | .intro {
18 | padding-top: 10rpx;
19 | line-height: 1.6;
20 | color: var(--color-text-regular);
21 | font-size: 24rpx;
22 | }
23 |
24 | .code {
25 | margin: 0 4px;
26 | padding: 2px 4px;
27 | border-radius: 4px;
28 | color: var(--color-theme);
29 | background-color: rgba(249, 106, 25, .15);
30 | }
31 | }
--------------------------------------------------------------------------------
/pages/profile/collection/actor/index.js:
--------------------------------------------------------------------------------
1 | import { getUserCollection } from "../../../../api/user";
2 |
3 | Page({
4 | behaviors: [wx.getInfiniteData],
5 |
6 | loadMore() {
7 | this.getData(getUserCollection, "actors");
8 | }
9 | })
--------------------------------------------------------------------------------
/pages/profile/collection/actor/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "关注影人",
3 | "enablePullDownRefresh": true,
4 | "usingComponents": {}
5 | }
--------------------------------------------------------------------------------
/pages/profile/collection/actor/index.scss:
--------------------------------------------------------------------------------
1 | .list {
2 | margin-top: 20rpx;
3 | }
--------------------------------------------------------------------------------
/pages/profile/collection/actor/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/pages/profile/collection/review/index.js:
--------------------------------------------------------------------------------
1 | import { getUserCollection } from "../../../../api/user";
2 |
3 | Page({
4 | behaviors: [wx.getInfiniteData],
5 |
6 | loadMore() {
7 | this.getData(getUserCollection, "reviews");
8 | }
9 | })
--------------------------------------------------------------------------------
/pages/profile/collection/review/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "收藏影评",
3 | "enablePullDownRefresh": true,
4 | "usingComponents": {}
5 | }
--------------------------------------------------------------------------------
/pages/profile/collection/review/index.scss:
--------------------------------------------------------------------------------
1 | page {
2 | background-color: #f5f5f5;
3 | }
--------------------------------------------------------------------------------
/pages/profile/collection/review/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/pages/profile/collection/role/index.js:
--------------------------------------------------------------------------------
1 | import { getUserCollection } from "../../../../api/user";
2 |
3 | Page({
4 | behaviors: [wx.getInfiniteData],
5 |
6 | loadMore() {
7 | this.getData(getUserCollection, "roles");
8 | }
9 | })
--------------------------------------------------------------------------------
/pages/profile/collection/role/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "关注角色",
3 | "enablePullDownRefresh": true,
4 | "usingComponents": {}
5 | }
--------------------------------------------------------------------------------
/pages/profile/collection/role/index.scss:
--------------------------------------------------------------------------------
1 | .list {
2 | margin-top: 20rpx;
3 | }
--------------------------------------------------------------------------------
/pages/profile/collection/role/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/pages/profile/collection/video/index.js:
--------------------------------------------------------------------------------
1 | import { getUserCollection } from "../../../../api/user";
2 |
3 | Page({
4 | behaviors: [wx.getInfiniteData],
5 |
6 | loadMore() {
7 | this.getData(getUserCollection, "videos");
8 | }
9 | })
--------------------------------------------------------------------------------
/pages/profile/collection/video/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "收藏视频",
3 | "enablePullDownRefresh": true,
4 | "usingComponents": {}
5 | }
--------------------------------------------------------------------------------
/pages/profile/collection/video/index.scss:
--------------------------------------------------------------------------------
1 | page {
2 | background-color: #f5f5f5;
3 | }
--------------------------------------------------------------------------------
/pages/profile/collection/video/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/pages/profile/favorite/components/create-page/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/profile/favorite/components/create-page/index.scss:
--------------------------------------------------------------------------------
1 | .back {
2 | color: var(--color-theme);
3 | padding: 0 10rpx;
4 | font-size: 24rpx;
5 | }
6 |
7 | .create-btn {
8 | font-size: 28rpx;
9 | color: var(--color-theme);
10 | padding: 0 10rpx;
11 | }
12 |
13 | .save-content {
14 | .form {
15 | .field-item {
16 | position: relative;
17 | margin: 0 30rpx;
18 | padding: 20rpx 0;
19 |
20 | .title,
21 | .content {
22 | width: 100%;
23 | border: none;
24 | border-bottom: 1rpx solid #e5e5e5;
25 | }
26 |
27 | .placeholder {
28 | color: rgb(197, 197, 197);
29 | }
30 |
31 | .title {
32 | height: 92rpx;
33 | line-height: 92rpx;
34 | }
35 |
36 | .content {
37 | min-height: 92rpx;
38 | line-height: 1.5;
39 | }
40 |
41 | .field-word-count {
42 | position: absolute;
43 | right: 0;
44 | bottom: 46rpx;
45 | color: rgb(197, 197, 197);
46 | }
47 | }
48 | }
49 | }
--------------------------------------------------------------------------------
/pages/profile/favorite/components/create-page/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 创建
5 |
6 |
7 |
8 |
9 |
11 | {{ nameCount }}/20
12 |
13 |
14 |
16 | {{ briefCount }}/200
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/pages/profile/favorite/components/edit-page/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/profile/favorite/components/edit-page/index.scss:
--------------------------------------------------------------------------------
1 | .back {
2 | color: var(--color-theme);
3 | padding: 0 10rpx;
4 | font-size: 24rpx;
5 | }
6 |
7 | .create-btn {
8 | font-size: 28rpx;
9 | color: var(--color-theme);
10 | padding: 0 10rpx;
11 | }
12 |
13 | .save-content {
14 | .form {
15 | .field-item {
16 | position: relative;
17 | margin: 0 30rpx;
18 | padding: 20rpx 0;
19 |
20 | .title,
21 | .content {
22 | width: 100%;
23 | border: none;
24 | border-bottom: 1rpx solid #e5e5e5;
25 | }
26 |
27 | .placeholder {
28 | color: rgb(197, 197, 197);
29 | }
30 |
31 | .title {
32 | height: 92rpx;
33 | line-height: 92rpx;
34 | }
35 |
36 | .content {
37 | min-height: 92rpx;
38 | line-height: 1.5;
39 | }
40 |
41 | .field-word-count {
42 | position: absolute;
43 | right: 0;
44 | bottom: 46rpx;
45 | color: rgb(197, 197, 197);
46 | }
47 | }
48 | }
49 | }
--------------------------------------------------------------------------------
/pages/profile/favorite/components/edit-page/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 保存
5 |
6 |
7 |
8 |
9 |
10 | {{ nameCount }}/20
11 |
12 |
13 |
14 | {{ briefCount }}/200
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/pages/profile/favorite/components/skeleton/index.js:
--------------------------------------------------------------------------------
1 | Component({
2 | options: {
3 | addGlobalClass: true,
4 | },
5 | })
6 |
--------------------------------------------------------------------------------
/pages/profile/favorite/components/skeleton/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/profile/favorite/components/skeleton/index.scss:
--------------------------------------------------------------------------------
1 | .skeleton-wrapper {
2 | padding-top: 68rpx;
3 | z-index: 3;
4 | position: fixed;
5 | left: 0;
6 | top: 0;
7 | right: 0;
8 | bottom: 0;
9 | background-color: #fff;
10 |
11 | .skeleton {
12 | .skeleton-item {
13 | display: flex;
14 | align-items: center;
15 | margin: 0 30rpx;
16 | height: 130rpx;
17 |
18 | .item-poster {
19 | width: 90rpx;
20 | height: 90rpx;
21 | border-radius: 6rpx;
22 | background-color: var(--color-skeleton);
23 | }
24 |
25 | .item-info {
26 | flex: 1;
27 | margin-left: 16rpx;
28 |
29 | .item-info-title {
30 | margin-bottom: 18rpx;
31 | height: 36rpx;
32 | background-color: var(--color-skeleton);
33 | }
34 |
35 | .item-info-count {
36 | height: 32rpx;
37 | background-color: var(--color-skeleton);
38 | }
39 | }
40 | }
41 | }
42 | }
--------------------------------------------------------------------------------
/pages/profile/favorite/components/skeleton/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/pages/profile/favorite/detail/components/favorite-info/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/profile/favorite/detail/components/favorite-info/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | {{ favorite.name }}
12 | 共 {{ favorite.count }} 部影视
13 | {{ favorite.brief }}
14 |
15 |
16 |
17 |
18 |
19 |
21 |
--------------------------------------------------------------------------------
/pages/profile/favorite/detail/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationStyle": "custom",
3 | "usingComponents": {
4 | "favorite-info":"./components/favorite-info",
5 | "edit-page": "../components/edit-page"
6 | }
7 | }
--------------------------------------------------------------------------------
/pages/profile/favorite/detail/index.scss:
--------------------------------------------------------------------------------
1 | .favorite-container {
2 | .skeleton {
3 | position: absolute;
4 | left: 0;
5 | top: 330rpx;
6 | right: 0;
7 | bottom: 0;
8 | }
9 |
10 | .favorite-list {
11 | padding: 15rpx 0;
12 |
13 | .movie-tool {
14 | display: flex;
15 | justify-content: space-between;
16 | margin: 12rpx -12rpx 0;
17 | padding: 0 12rpx;
18 | height: 36rpx;
19 | line-height: 36rpx;
20 | font-size: 24rpx;
21 | color: var(--color-text-secondary);
22 | }
23 | }
24 | }
--------------------------------------------------------------------------------
/pages/profile/favorite/index/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "我的收藏夹",
3 | "enablePullDownRefresh": true,
4 | "usingComponents": {
5 | "create-page": "../components/create-page",
6 | "skeleton": "../components/skeleton"
7 | }
8 | }
--------------------------------------------------------------------------------
/pages/profile/feedback/index.js:
--------------------------------------------------------------------------------
1 | import { createFeedback } from "../../../api/user";
2 |
3 | Page({
4 | behaviors: [wx.computedBehavior],
5 |
6 | data: {
7 | isFeedback: false,
8 | maxlength: 200,
9 | content: "",
10 | submitLoading: false,
11 | },
12 |
13 | computed: {
14 | wordLength(data) {
15 | return data.content.length;
16 | },
17 | },
18 |
19 | async submit() {
20 | if (this.data.submitLoading) return;
21 |
22 | if (this.data.wordLength < 2) {
23 | wx.$message.warning("反馈内容不能少于2个文字");
24 | return;
25 | }
26 |
27 | let params = {
28 | content: this.data.content,
29 | };
30 |
31 | this.setData({ submitLoading: true })
32 | const { code, message } = await createFeedback(params);
33 | this.setData({ submitLoading: false })
34 |
35 | if (code === 200) {
36 | wx.$toast(message);
37 | this.setData({
38 | content: "",
39 | isFeedback: true
40 | })
41 | }
42 | },
43 | })
--------------------------------------------------------------------------------
/pages/profile/feedback/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "用户反馈",
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/profile/feedback/index.scss:
--------------------------------------------------------------------------------
1 | .main {
2 | padding: 30rpx;
3 |
4 | .success {
5 | height: 40vh;
6 | line-height: 40vh;
7 | text-align: center;
8 | font-size: 28rpx;
9 | color: var(--color-theme);
10 | }
11 |
12 | .container {
13 | position: relative;
14 |
15 | .content {
16 | padding: 20rpx;
17 | width: 100%;
18 | font-size: 28rpx;
19 | border: 0;
20 | border-radius: 8rpx;
21 | background-color: #f5f5f5;
22 | }
23 |
24 | .word-count {
25 | z-index: 1;
26 | position: absolute;
27 | right: 15rpx;
28 | bottom: 15rpx;
29 | color: var(--color-text-regular);
30 | }
31 | }
32 |
33 | .submit {
34 | margin: 40rpx 0 0;
35 | }
36 | }
--------------------------------------------------------------------------------
/pages/profile/feedback/index.wxml:
--------------------------------------------------------------------------------
1 |
2 | 反馈成功,感谢您的支持
3 |
4 |
5 |
6 |
7 |
9 | {{ wordLength }}/{{ maxlength }}
10 |
11 |
12 | 提 交
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/pages/profile/index/components/mine-cell/index.js:
--------------------------------------------------------------------------------
1 | Component({
2 | properties: {
3 | user: {
4 | type: Object,
5 | required: true,
6 | },
7 | }
8 | })
--------------------------------------------------------------------------------
/pages/profile/index/components/mine-cell/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/profile/index/components/mine-cell/index.scss:
--------------------------------------------------------------------------------
1 | .menu-cell {
2 | .cell-group {
3 | box-shadow: 0 6rpx 6rpx #eee;
4 | }
5 | }
--------------------------------------------------------------------------------
/pages/profile/index/components/mine-cell/index.wxml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/pages/profile/index/components/mine-info/index.js:
--------------------------------------------------------------------------------
1 | Component({
2 | properties: {
3 | user: {
4 | type: Object,
5 | required: true,
6 | },
7 | },
8 |
9 | methods: {
10 | // 跳转到我的信息设置
11 | pathToInfo() {
12 | wx.navigateTo({
13 | url: '/pages/profile/information/index',
14 | })
15 | },
16 |
17 | // 跳转登录页
18 | pathToLogin() {
19 | wx.navigateTo({
20 | url: '/pages/account/login/index',
21 | })
22 | }
23 | }
24 | })
--------------------------------------------------------------------------------
/pages/profile/index/components/mine-info/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/profile/index/components/mine-info/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | {{ user.username }}
12 | {{ user.signature }}
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | 立即登录
21 |
22 |
--------------------------------------------------------------------------------
/pages/profile/index/components/mine-menu/index.js:
--------------------------------------------------------------------------------
1 | Component({
2 | properties: {
3 | count: {
4 | type: Object,
5 | required: true,
6 | },
7 | isLogin: {
8 | type: Boolean,
9 | },
10 | },
11 |
12 | methods: {
13 | pathTo(e) {
14 | const type= e.currentTarget.dataset.type;
15 |
16 | if (this.data.isLogin) {
17 | wx.navigateTo({
18 | url: `/pages/profile/collection/${type}/index`,
19 | })
20 | } else {
21 | wx.navigateTo({
22 | url: '/pages/account/login/index',
23 | })
24 | }
25 | },
26 | }
27 | })
--------------------------------------------------------------------------------
/pages/profile/index/components/mine-menu/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/profile/index/components/mine-menu/index.scss:
--------------------------------------------------------------------------------
1 | .menu-list {
2 | z-index: 1;
3 | position: relative;
4 | display: flex;
5 | align-items: center;
6 | justify-content: space-between;
7 | margin: 30rpx;
8 | margin-top: -80rpx;
9 | height: 160rpx;
10 | border-radius: 12rpx;
11 | background-color: #fff;
12 | box-shadow: 0 6rpx 6rpx #eee;
13 |
14 | .menu-item {
15 | display: flex;
16 | align-items: center;
17 | justify-content: center;
18 | flex-direction: column;
19 | flex: 1;
20 | position: relative;
21 |
22 | .menu-count {
23 | height: 64rpx;
24 | line-height: 64rpx;
25 | text-align: center;
26 | color: var(--color-theme);
27 | font-size: 40rpx;
28 | }
29 |
30 | .menu-name {
31 | margin-top: 16rpx;
32 | font-size: 24rpx;
33 | font-weight: bold;
34 | color: var(--color-text-regular);
35 | }
36 | }
37 | }
--------------------------------------------------------------------------------
/pages/profile/index/components/mine-menu/index.wxml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/pages/profile/index/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarBackgroundColor": "#e54847",
3 | "backgroundColor": "#f5f5f5",
4 | "navigationBarTitleText": "",
5 | "enablePullDownRefresh": true,
6 | "usingComponents": {
7 | "mine-cell": "./components/mine-cell",
8 | "mine-info": "./components/mine-info",
9 | "mine-menu": "./components/mine-menu"
10 | }
11 | }
--------------------------------------------------------------------------------
/pages/profile/index/index.scss:
--------------------------------------------------------------------------------
1 | page {
2 | background-color: #f5f5f5;
3 | }
4 |
--------------------------------------------------------------------------------
/pages/profile/index/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/pages/profile/information/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "个人资料"
3 | }
--------------------------------------------------------------------------------
/pages/profile/setting/index.js:
--------------------------------------------------------------------------------
1 | import { APP_NAME, DEVELOPER, VERSION } from "../../../config";
2 |
3 | const app = getApp()
4 |
5 | Page({
6 | behaviors: [wx.computedBehavior],
7 |
8 | data: {
9 | APP_NAME,
10 | DEVELOPER,
11 | VERSION,
12 | },
13 |
14 | computed: {
15 | isLogin() {
16 | return !!app.user;
17 | },
18 | },
19 |
20 | logout() {
21 | app.user = null;
22 | app.isLogin = false;
23 |
24 | try {
25 | wx.removeStorageSync('token');
26 | wx.removeStorageSync('user');
27 | wx.navigateBack();
28 | } catch (e) {
29 | }
30 | },
31 | })
--------------------------------------------------------------------------------
/pages/profile/setting/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "设置",
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/profile/setting/index.scss:
--------------------------------------------------------------------------------
1 | .logout {
2 | position: fixed;
3 | bottom: 20rpx;
4 | left: 15rpx;
5 | right: 15rpx;
6 | padding-bottom: constant(safe-area-inset-bottom);
7 | padding-bottom: env(safe-area-inset-bottom);
8 | }
--------------------------------------------------------------------------------
/pages/profile/setting/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | 退出登录
9 |
--------------------------------------------------------------------------------
/pages/review/detail/components/skeleton/index.js:
--------------------------------------------------------------------------------
1 | const app = getApp();
2 |
3 | Component({
4 | data: {
5 | headerBarH: app.globalData.headerBarH
6 | }
7 | })
8 |
--------------------------------------------------------------------------------
/pages/review/detail/components/skeleton/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/review/detail/components/skeleton/index.scss:
--------------------------------------------------------------------------------
1 | .skeleton-container {
2 | z-index: 99;
3 | position: absolute;
4 | top: 0;
5 | left: 0;
6 | bottom: 0;
7 | width: 100%;
8 | background-color: #fff;
9 |
10 | .skeleton {
11 | padding: 30rpx;
12 |
13 | .title {
14 | height: 48rpx;
15 | background-color: var(--color-skeleton);
16 | }
17 |
18 | .author {
19 | display: flex;
20 | align-items: center;
21 | margin: 40rpx 0;
22 | height: 80rpx;
23 |
24 | .avatar {
25 | width: 80rpx;
26 | height: 80rpx;
27 | border-radius: 50%;
28 | background-color: var(--color-skeleton);
29 | }
30 |
31 | .username {
32 | margin-left: 26rpx;
33 | height: 36rpx;
34 | width: 300rpx;
35 | background-color: var(--color-skeleton);
36 | }
37 | }
38 |
39 | .content {
40 | margin-top: 20rpx;
41 |
42 | .line {
43 | margin-top: 20rpx;
44 | height: 36rpx;
45 | background-color: var(--color-skeleton);
46 | }
47 | }
48 | }
49 | }
--------------------------------------------------------------------------------
/pages/review/detail/components/skeleton/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/pages/review/detail/components/tool-vote/index.js:
--------------------------------------------------------------------------------
1 | import { createReviewVote } from "../../../../../api/user"
2 |
3 | Component({
4 | properties: {
5 | review: {
6 | type: Object,
7 | },
8 | },
9 |
10 | data() {
11 | return {
12 | loading: false,
13 | }
14 | },
15 |
16 | methods: {
17 | async voteClick(e) {
18 | if (this.data.loading) return;
19 |
20 | const type = e.currentTarget.dataset.type;
21 | const id = this.data.review.id;
22 |
23 | let params = {
24 | type: this.data.review.vote_type === 0 ? type : "cancel",
25 | };
26 |
27 | this.setData({ loading: true });
28 | const { code, data, message } = await createReviewVote(id, params);
29 | this.setData({ loading: false });
30 |
31 | if (code === 200) {
32 | this.setData({
33 | review: Object.assign(this.data.review, data)
34 | })
35 |
36 | wx.$toast(message);
37 | }
38 | },
39 | }
40 | })
41 |
--------------------------------------------------------------------------------
/pages/review/detail/components/tool-vote/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/review/detail/components/tool-vote/index.scss:
--------------------------------------------------------------------------------
1 | .tool-vote {
2 | display: flex;
3 | height: 60rpx;
4 | color: var(--color-theme);
5 | .vote-item {
6 | display: flex;
7 | align-items: center;
8 | margin-right: 10rpx;
9 | padding: 0 16rpx;
10 | border-radius: 6rpx;
11 | background-color: rgba(#e54847, 0.08);
12 | &.is-active {
13 | color: #fff;
14 | background-color: var(--color-theme);
15 | }
16 | .review-icon {
17 | font-size: 32rpx;
18 | }
19 | .review-count {
20 | padding: 0 12rpx;
21 | font-size: 24rpx;
22 | }
23 | }
24 | }
--------------------------------------------------------------------------------
/pages/review/detail/components/tool-vote/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
6 | {{ review.vote_type === 1 ? "已赞同 " : "赞同 " }}{{ review.vote_up_count }}
7 |
8 |
9 |
11 |
12 | {{ review.vote_type === 1 ? "已反对 " : "反对 " }}{{ review.vote_down_count }}
13 |
14 |
--------------------------------------------------------------------------------
/pages/review/detail/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "影评",
3 | "navigationStyle": "custom",
4 | "enablePullDownRefresh": true,
5 | "usingComponents": {
6 | "skeleton": "./components/skeleton",
7 | "tool-vote": "./components/tool-vote"
8 | }
9 | }
--------------------------------------------------------------------------------
/pages/role/actor/index.js:
--------------------------------------------------------------------------------
1 | import { getRoleActors } from "../../../api/role";
2 |
3 | Page({
4 | behaviors: [wx.getInfiniteData],
5 |
6 | loadMore() {
7 | this.getData(getRoleActors, this.data.id);
8 | }
9 | })
--------------------------------------------------------------------------------
/pages/role/actor/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "角色影人",
3 | "enablePullDownRefresh": true,
4 | "usingComponents": {}
5 | }
--------------------------------------------------------------------------------
/pages/role/actor/index.scss:
--------------------------------------------------------------------------------
1 | .list {
2 | padding: 10rpx 0;
3 | }
--------------------------------------------------------------------------------
/pages/role/actor/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/pages/role/detail/components/information/index.js:
--------------------------------------------------------------------------------
1 | Component({
2 | properties: {
3 | role: {
4 | type: Object,
5 | },
6 | },
7 |
8 | methods: {
9 | close() {
10 | this.triggerEvent('close', true)
11 | },
12 | }
13 | })
--------------------------------------------------------------------------------
/pages/role/detail/components/information/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/role/detail/components/information/index.scss:
--------------------------------------------------------------------------------
1 | .summary {
2 | margin-top: 20rpx;
3 | padding: 0 32rpx;
4 | line-height: 1.6;
5 | text-align: justify;
6 | word-break: break-all;
7 |
8 | .no-summary {
9 | text-align: center;
10 | font-size: 28rpx;
11 | color: var(--color-text-secondary);
12 | }
13 | }
--------------------------------------------------------------------------------
/pages/role/detail/components/information/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | {{role.brief}}
16 |
17 |
--------------------------------------------------------------------------------
/pages/role/detail/components/role-count/index.js:
--------------------------------------------------------------------------------
1 | Component({
2 | properties: {
3 | role: {
4 | type: Object,
5 | },
6 | },
7 | })
8 |
--------------------------------------------------------------------------------
/pages/role/detail/components/role-count/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/role/detail/components/role-count/index.scss:
--------------------------------------------------------------------------------
1 | .role-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/role/detail/components/role-count/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{ role.collection_count }}人
5 | 关注数
6 |
7 |
8 | {{ role.movie_count }}部
9 | 影视数
10 |
11 |
12 | {{ role.actor_count }}个
13 | 影人数
14 |
15 |
16 |
--------------------------------------------------------------------------------
/pages/role/detail/components/skeleton/index.js:
--------------------------------------------------------------------------------
1 | Component({
2 |
3 | properties: {
4 | isHalf: {
5 | type: Boolean,
6 | },
7 | },
8 | })
9 |
--------------------------------------------------------------------------------
/pages/role/detail/components/skeleton/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/role/detail/components/skeleton/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 |
--------------------------------------------------------------------------------
/pages/role/detail/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationStyle": "custom",
3 | "usingComponents": {
4 | "role-count": "./components/role-count",
5 | "information": "./components/information"
6 | }
7 | }
--------------------------------------------------------------------------------
/pages/role/movie/index.js:
--------------------------------------------------------------------------------
1 | import { getRoleMovies } from "../../../api/role";
2 |
3 | Page({
4 | behaviors: [wx.getInfiniteData],
5 |
6 | loadMore() {
7 | this.getData(getRoleMovies, this.data.id);
8 | }
9 | })
--------------------------------------------------------------------------------
/pages/role/movie/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "角色影视",
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/role/movie/index.scss:
--------------------------------------------------------------------------------
1 | .list {
2 | padding: 10rpx 0;
3 | }
--------------------------------------------------------------------------------
/pages/role/movie/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/pages/search/components/search-bar/index.js:
--------------------------------------------------------------------------------
1 | Component({
2 | properties: {
3 | value: String,
4 | },
5 |
6 | methods: {
7 | keywordChange(e) {
8 | const value = e.detail.value
9 | this.triggerEvent("keyword-change", value);
10 | },
11 |
12 | doSearch(e) {
13 | const value = e.detail.value
14 | this.triggerEvent("keyword-change", value);
15 | },
16 |
17 | clearValue() {
18 | this.triggerEvent("on-clear");
19 | },
20 |
21 | checkedHandle(keyword) {
22 | this.triggerEvent("keyword-change", keyword);
23 | },
24 |
25 | noop() { },
26 |
27 | // 取消
28 | cancel() {
29 | wx.navigateBack();
30 | }
31 | }
32 | })
--------------------------------------------------------------------------------
/pages/search/components/search-bar/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/search/components/search-bar/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
8 |
9 |
10 |
11 | 取消
12 |
13 |
--------------------------------------------------------------------------------
/pages/search/components/search-history/index.js:
--------------------------------------------------------------------------------
1 | Component({
2 | properties: {
3 | histories: {
4 | type: Array,
5 | },
6 | },
7 |
8 | methods: {
9 | keywordChecked(e) {
10 | this.triggerEvent('on-keyword', e.currentTarget.dataset.keyword)
11 | },
12 |
13 | clearHistories() {
14 | wx.$modal({
15 | title: "提示",
16 | content: "确定要清空历史记录吗?",
17 | asyncClose: true,
18 | })
19 | .then(() => {
20 | this.triggerEvent("on-clear");
21 | })
22 | .catch(() => {
23 | });
24 | },
25 | }
26 | })
--------------------------------------------------------------------------------
/pages/search/components/search-history/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/search/components/search-history/index.scss:
--------------------------------------------------------------------------------
1 | .record {
2 | padding: 0 30rpx;
3 |
4 | .record-header {
5 | display: flex;
6 | align-items: center;
7 | justify-content: space-between;
8 | height: 50rpx;
9 |
10 | .record-title {
11 | font-size: 28rpx;
12 | font-weight: bold;
13 | }
14 |
15 | .icon {
16 | font-size: 32rpx;
17 | }
18 | }
19 |
20 | .record-list {
21 | margin: 12rpx -12rpx 0;
22 |
23 | .record-item {
24 | display: inline-block;
25 | margin: 12rpx;
26 | padding: 0 24rpx;
27 | height: 48rpx;
28 | line-height: 48rpx;
29 | border-radius: 4rpx;
30 | border: 1px solid rgb(240, 240, 240);
31 | background-color: rgb(244, 244, 244);
32 | }
33 | }
34 | }
--------------------------------------------------------------------------------
/pages/search/components/search-history/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
10 | {{ keyword }}
11 |
12 |
13 |
--------------------------------------------------------------------------------
/pages/search/components/search-menu/index.js:
--------------------------------------------------------------------------------
1 | Component({
2 | properties: {
3 |
4 | },
5 |
6 | data: {
7 |
8 | },
9 |
10 | methods: {
11 | pathToMovie() {
12 | wx.switchTab({
13 | url: '/pages/movie/index/index',
14 | })
15 | }
16 | }
17 | })
18 |
--------------------------------------------------------------------------------
/pages/search/components/search-menu/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/search/components/search-menu/index.scss:
--------------------------------------------------------------------------------
1 | .menu-list {
2 | display: flex;
3 | justify-content: space-around;
4 | padding: 30rpx 30rpx;
5 | .menu-item {
6 | display: flex;
7 | align-items: center;
8 | justify-content: center;
9 | flex-direction: column;
10 | margin: 0 10rpx;
11 | flex: 1;
12 | height: 150rpx;
13 | .menu-icon {
14 | width: 80rpx;
15 | height: 80rpx;
16 | line-height: 80rpx;
17 | border-radius: 50%;
18 | text-align: center;
19 | font-size: 44rpx;
20 | color: #fff;
21 | background-color: #dedede;
22 | }
23 | .menu-name {
24 | text-align: center;
25 | height: 60rpx;
26 | line-height: 60rpx;
27 | font-size: 24rpx;
28 | }
29 | }
30 | }
--------------------------------------------------------------------------------
/pages/search/components/search-menu/index.wxml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/pages/search/components/search-result/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/search/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "搜索",
3 | "usingComponents": {
4 | "search-bar": "./components/search-bar",
5 | "search-result": "./components/search-result",
6 | "search-history": "./components/search-history"
7 | }
8 | }
--------------------------------------------------------------------------------
/pages/search/index.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NameLi/muying-weapp/4fccfa93fcd0178704a9138374bdb5d5b651b94a/pages/search/index.scss
--------------------------------------------------------------------------------
/pages/search/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/pages/video/components/video-card/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/video/detail/components/video-info/index.js:
--------------------------------------------------------------------------------
1 | Component({
2 | behaviors: [wx.computedBehavior],
3 |
4 | properties: {
5 | video: {
6 | type: Object,
7 | },
8 | },
9 |
10 | data: {
11 | isShowContent: false
12 | },
13 |
14 | computed: {
15 | author(data) {
16 | return data.video.author;
17 | },
18 | },
19 |
20 | methods: {
21 | toggleContent() {
22 | this.setData({
23 | isShowContent: !this.data.isShowContent
24 | })
25 | },
26 | showReportModal() {
27 | this.selectComponent('#reportModal').open(this.data.video.id, "videos");
28 | }
29 | }
30 | })
31 |
--------------------------------------------------------------------------------
/pages/video/detail/components/video-info/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {
4 | "m-collapse": "mind-ui-weapp/collapse",
5 | "report": "/components/report"
6 | }
7 | }
--------------------------------------------------------------------------------
/pages/video/detail/components/video-player/index.js:
--------------------------------------------------------------------------------
1 | Component({
2 | properties: {
3 | video: {
4 | type: Object,
5 | observer(val) {
6 | if (val.sources) {
7 | this.setData({
8 | src: val.sources[0].url
9 | })
10 | }
11 | }
12 | },
13 | },
14 |
15 | data: {
16 | src: "",
17 | autoplay: false
18 | },
19 |
20 | methods: {
21 | doPlay() {
22 | this.setData({
23 | autoplay: true
24 | })
25 | }
26 | }
27 | })
28 |
--------------------------------------------------------------------------------
/pages/video/detail/components/video-player/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/pages/video/detail/components/video-player/index.scss:
--------------------------------------------------------------------------------
1 | .video-wrapper {
2 | width: 100%;
3 | height: 422rpx;
4 | background-color: #000;
5 |
6 | .video-box {
7 | z-index: 98;
8 | position: fixed;
9 | left: 0;
10 | top: 0;
11 | width: 100%;
12 | height: 422rpx;
13 | display: flex;
14 | justify-content: center;
15 | align-items: center;
16 | background-color: #000;
17 |
18 | .video {
19 | width: 100%;
20 | height: 422rpx;
21 | }
22 |
23 | .progress-wrapper {
24 | z-index: 99;
25 | height: 3rpx;
26 | background: #dedede;
27 |
28 | .progress {
29 | height: 3rpx;
30 | background: #51ace6;
31 | }
32 | }
33 | }
34 | }
--------------------------------------------------------------------------------
/pages/video/detail/components/video-player/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
--------------------------------------------------------------------------------
/pages/video/detail/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "看点视频",
3 | "navigationBarBackgroundColor": "#202538",
4 | "navigationBarTextStyle": "white",
5 | "usingComponents": {
6 | "video-player": "./components/video-player",
7 | "video-info": "./components/video-info"
8 | }
9 | }
--------------------------------------------------------------------------------
/pages/video/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarBackgroundColor": "#202538",
3 | "navigationBarTextStyle": "white",
4 | "navigationBarTitleText": "看点",
5 | "usingComponents": {
6 | "video-card": "./components/video-card"
7 | }
8 | }
--------------------------------------------------------------------------------
/pages/video/index.scss:
--------------------------------------------------------------------------------
1 | .container {
2 | margin: 30rpx 0;
3 | }
--------------------------------------------------------------------------------
/pages/video/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/sitemap.json:
--------------------------------------------------------------------------------
1 | {
2 | "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html",
3 | "rules": [{
4 | "action": "allow",
5 | "page": "*"
6 | }]
7 | }
--------------------------------------------------------------------------------
/static/iconfont/iconfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NameLi/muying-weapp/4fccfa93fcd0178704a9138374bdb5d5b651b94a/static/iconfont/iconfont.ttf
--------------------------------------------------------------------------------
/static/iconfont/iconfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NameLi/muying-weapp/4fccfa93fcd0178704a9138374bdb5d5b651b94a/static/iconfont/iconfont.woff
--------------------------------------------------------------------------------
/static/styles/common.scss:
--------------------------------------------------------------------------------
1 | .ellipsis {
2 | overflow: hidden;
3 | text-overflow: ellipsis;
4 | white-space: nowrap;
5 | }
6 |
7 | .overflow-hidden {
8 | overflow: hidden;
9 | }
10 |
11 | ::-webkit-scrollbar {
12 | width: 0;
13 | height: 0;
14 | color: transparent;
15 | }
16 |
17 | .skeleton-animation {
18 | height: 100%;
19 | animation: skeleton 1.3s ease-in-out infinite alternate;
20 | }
21 |
22 | @keyframes skeleton {
23 | from {
24 | opacity: 0.35;
25 | }
26 |
27 | to {
28 | opacity: 0.96;
29 | }
30 | }
--------------------------------------------------------------------------------
/static/styles/reset.scss:
--------------------------------------------------------------------------------
1 | page,
2 | view,
3 | scroll-view,
4 | swiper,
5 | movable-area,
6 | cover-view,
7 | text,
8 | icon,
9 | rich-text,
10 | progress,
11 | button,
12 | checkbox-group,
13 | checkbox,
14 | form,
15 | input,
16 | label,
17 | picker,
18 | picker-view,
19 | radio-group,
20 | slider,
21 | switch,
22 | textarea,
23 | navigator,
24 | audio,
25 | image,
26 | video,
27 | live-player,
28 | live-pusher,
29 | open-data,
30 | web-view {
31 | box-sizing: border-box;
32 | }
33 |
34 | page {
35 | font-size: 28rpx;
36 | color: #303133;
37 | overscroll-behavior-y: none;
38 | font-family: 'PingFang SC', Helvetica, Arial, sans-serif;
39 | padding-bottom: constant(safe-area-inset-bottom);
40 | padding-bottom: env(safe-area-inset-bottom);
41 | }
--------------------------------------------------------------------------------
/static/styles/theme.scss:
--------------------------------------------------------------------------------
1 | /* 颜色定义 */
2 | page {
3 | /* theme */
4 | --color-theme: #e54847;
5 | /* theme */
6 | --color-theme-light: rgba(249, 106, 25, .75);
7 | /* Primary */
8 | --color-primary: #409EFF;
9 | /* Success */
10 | --color-success: #67C23A;
11 | /* Warning */
12 | --color-warning: #E6A23C;
13 | /* Danger */
14 | --color-danger: #F56C6C;
15 | /* Info */
16 | --color-info: #909399;
17 |
18 | /* 主要文字 标题 */
19 | --color-text-primary: #303133;
20 | /* 常规文字 正文 */
21 | --color-text-regular: #606266;
22 | /* 次要文字 辅助 */
23 | --color-text-secondary: #909399;
24 |
25 | /* 边框 */
26 | --color-border: #dcdee2;
27 | /* 遮罩颜色 */
28 | --color-mask: rgba(0, 0, 0, 0.55);
29 |
30 | /* 骨架屏颜色 */
31 | --color-skeleton: #f1f1f1;
32 | }
--------------------------------------------------------------------------------
/utils/color.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @desc 16进制颜色值转换为RGBA,支持大小写与缩写
3 | * @param {string} color 16进制颜色值
4 | * @param {float} [alpha = 1] 透明度
5 | * @return {string} 如果为16进制颜色值则转为 rgba,否则返回原值
6 | */
7 | export default (color, alpha = 1) => {
8 | // 16进制颜色值的正则
9 | let reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
10 |
11 | // 把颜色值变成小写
12 | color = color.toLowerCase();
13 |
14 | if (reg.test(color)) {
15 | // 如果只有三位的值,需变成六位,如:#fff => #ffffff
16 |
17 | if (color.length === 4) {
18 | let colorNew = "#";
19 | for (let i = 1; i < 4; i += 1) {
20 | colorNew += color.slice(i, i + 1).concat(color.slice(i, i + 1));
21 | }
22 | color = colorNew;
23 | }
24 |
25 | // 处理六位的颜色值,转为RGB
26 | let colorChange = [];
27 | for (let i = 1; i < 7; i += 2) {
28 | colorChange.push(parseInt("0x" + color.slice(i, i + 2)));
29 | }
30 | return `RGBA(${colorChange.join(",")}, ${alpha})`;
31 | } else {
32 | return color;
33 | }
34 | }
--------------------------------------------------------------------------------
/utils/systemInfo.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @desc 获取导航栏信息对象
3 | * @return {object} 导航栏信息对象
4 | */
5 |
6 | export default () => {
7 | const windowInfo = wx.getWindowInfo();
8 | const capsule = wx.getMenuButtonBoundingClientRect(); // 胶囊尺寸
9 |
10 | const statusBarH = windowInfo.statusBarHeight; // 状态栏高度
11 | const titleBarH = capsule.top + capsule.bottom - statusBarH * 2; // 标题栏高度
12 | const headerBarH = statusBarH + titleBarH; // 导航栏高度
13 | const capsuleH = capsule.height; // 胶囊高度,用于搜索框
14 | const capsuleW = capsule.width; // 胶囊宽度,用于搜索框
15 |
16 | return {
17 | headerBarH,
18 | statusBarH,
19 | titleBarH,
20 | capsuleH,
21 | capsuleW,
22 | capsule
23 | }
24 | }
--------------------------------------------------------------------------------