├── .babelrc
├── .electron-vue
├── build.config.js
├── build.js
├── dev-client.js
├── dev-runner.js
├── webpack.main.config.js
├── webpack.renderer.config.js
└── webpack.web.config.js
├── .eslintignore
├── .eslintrc.js
├── .gitignore
├── README.md
├── build
└── icons
│ ├── 256x256.png
│ ├── icon.icns
│ └── icon.ico
├── package.json
├── src
├── index.ejs
├── main
│ ├── index.dev.js
│ └── index.js
└── renderer
│ ├── App.vue
│ ├── assets
│ ├── default_user.jpg
│ ├── error_video.jpg
│ ├── icon_repeat-cycle.gif
│ ├── icon_repeat-once.png
│ ├── icon_repeat-random.png
│ ├── info_tra.svg
│ └── userbg.png
│ ├── components
│ ├── FileIndexPage.vue
│ ├── ImagesDetailPage.vue
│ ├── ImagesIndexPage.vue
│ ├── IndexPage.vue
│ ├── MusicIndexPage.vue
│ ├── NoteIndexPage.vue
│ ├── SettingIndexPage.vue
│ ├── SingLoginPage.vue
│ ├── VideoDetailPage.vue
│ ├── VideoIndexPage.vue
│ └── VideoPushPage.vue
│ ├── main.js
│ ├── mixins
│ └── index.js
│ ├── router
│ └── index.js
│ ├── store
│ ├── index.js
│ └── modules
│ │ ├── file.js
│ │ ├── images.js
│ │ ├── index.js
│ │ ├── login.js
│ │ ├── main.js
│ │ ├── music.js
│ │ ├── note.js
│ │ └── video.js
│ └── tool
│ ├── config.js
│ ├── cookie.js
│ ├── datastore.js
│ ├── download.js
│ ├── function.js
│ └── http.js
└── static
├── css
├── app.scss
├── file
│ └── index.scss
├── images
│ ├── detail.scss
│ └── index.scss
├── index
│ └── index.scss
├── music
│ └── index.scss
├── note
│ └── index.scss
├── reset.scss
├── setting
│ └── index.scss
├── sing
│ └── login.scss
└── video
│ ├── index.scss
│ ├── play.scss
│ └── push.scss
├── html
└── setting.html
├── img
├── icon.ico
└── preview
│ ├── 1.jpg
│ ├── 10.jpg
│ ├── 2.jpg
│ ├── 3.jpg
│ ├── 4.jpg
│ ├── 5.jpg
│ ├── 6.jpg
│ ├── 7.jpg
│ ├── 8.jpg
│ └── 9.jpg
└── vue
├── fonts
└── ionicons.ttf
├── iview.css
├── iview.min.js
└── vue.js
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "comments": false,
3 | "env": {
4 | "test": {
5 | "presets": [
6 | [
7 | "env",
8 | {
9 | "targets": {
10 | "node": 7
11 | }
12 | }
13 | ],
14 | "stage-0"
15 | ],
16 | "plugins": [
17 | "istanbul"
18 | ]
19 | },
20 | "main": {
21 | "presets": [
22 | [
23 | "env",
24 | {
25 | "targets": {
26 | "node": 7
27 | }
28 | }
29 | ],
30 | "stage-0"
31 | ]
32 | },
33 | "renderer": {
34 | "presets": [
35 | [
36 | "env",
37 | {
38 | "modules": false
39 | }
40 | ],
41 | "stage-0"
42 | ]
43 | },
44 | "web": {
45 | "presets": [
46 | [
47 | "env",
48 | {
49 | "modules": false
50 | }
51 | ],
52 | "stage-0"
53 | ]
54 | }
55 | },
56 | "plugins": [
57 | "transform-runtime"
58 | ]
59 | }
--------------------------------------------------------------------------------
/.electron-vue/build.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path')
2 |
3 | /**
4 | * `electron-packager` options
5 | * https://simulatedgreg.gitbooks.io/electron-vue/content/en/using-electron-packager.html
6 | */
7 | module.exports = {
8 | arch: 'x64',
9 | asar: true,
10 | dir: path.join(__dirname, '../'),
11 | icon: path.join(__dirname, '../build/icons/icon'),
12 | ignore: /(^\/(src|test|\.[a-z]+|README|yarn|static|dist\/web))|\.gitkeep/,
13 | out: path.join(__dirname, '../build'),
14 | overwrite: true,
15 | platform: process.env.BUILD_TARGET || 'all'
16 | }
17 |
--------------------------------------------------------------------------------
/.electron-vue/build.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | process.env.NODE_ENV = 'production'
4 |
5 | const { say } = require('cfonts')
6 | const chalk = require('chalk')
7 | const del = require('del')
8 | const packager = require('electron-packager')
9 | const webpack = require('webpack')
10 | const Multispinner = require('multispinner')
11 |
12 | const buildConfig = require('./build.config')
13 | const mainConfig = require('./webpack.main.config')
14 | const rendererConfig = require('./webpack.renderer.config')
15 | const webConfig = require('./webpack.web.config')
16 |
17 | const doneLog = chalk.bgGreen.white(' DONE ') + ' '
18 | const errorLog = chalk.bgRed.white(' ERROR ') + ' '
19 | const okayLog = chalk.bgBlue.white(' OKAY ') + ' '
20 | const isCI = process.env.CI || false
21 |
22 | if (process.env.BUILD_TARGET === 'clean') clean()
23 | else if (process.env.BUILD_TARGET === 'web') web()
24 | else build()
25 |
26 | function clean () {
27 | del.sync(['build/*', '!build/icons', '!build/icons/icon.*'])
28 | console.log(`\n${doneLog}\n`)
29 | process.exit()
30 | }
31 |
32 | function build () {
33 | greeting()
34 | const tasks = ['main', 'renderer']
35 | const m = new Multispinner(tasks, {
36 | preText: 'building',
37 | postText: 'process'
38 | })
39 |
40 | let results = ''
41 |
42 | m.on('success', () => {
43 | process.stdout.write('\x1B[2J\x1B[0f')
44 | console.log(`\n\n${results}`)
45 | console.log(`${okayLog}take it away ${chalk.yellow('`electron-packager`')}\n`)
46 | bundleApp()
47 | })
48 |
49 | pack(mainConfig).then(result => {
50 | results += result + '\n\n'
51 | m.success('main')
52 | }).catch(err => {
53 | m.error('main')
54 | console.log(`\n ${errorLog}failed to build main process`)
55 | console.error(`\n${err}\n`)
56 | process.exit(1)
57 | })
58 |
59 | pack(rendererConfig).then(result => {
60 | results += result + '\n\n'
61 | m.success('renderer')
62 | }).catch(err => {
63 | m.error('renderer')
64 | console.log(`\n ${errorLog}failed to build renderer process`)
65 | console.error(`\n${err}\n`)
66 | process.exit(1)
67 | })
68 | }
69 |
70 | function pack (config) {
71 | return new Promise((resolve, reject) => {
72 | webpack(config, (err, stats) => {
73 | if (err) reject(err.stack || err)
74 | else if (stats.hasErrors()) {
75 | let err = ''
76 |
77 | stats.toString({
78 | chunks: false,
79 | colors: true
80 | })
81 | .split(/\r?\n/)
82 | .forEach(line => {
83 | err += ` ${line}\n`
84 | })
85 |
86 | reject(err)
87 | } else {
88 | resolve(stats.toString({
89 | chunks: false,
90 | colors: true
91 | }))
92 | }
93 | })
94 | })
95 | }
96 |
97 | function bundleApp () {
98 | packager(buildConfig, (err, appPaths) => {
99 | if (err) {
100 | console.log(`\n${errorLog}${chalk.yellow('`electron-packager`')} says...\n`)
101 | console.log(err + '\n')
102 | } else {
103 | console.log(`\n${doneLog}\n`)
104 | }
105 | })
106 | }
107 |
108 | function web () {
109 | webpack(webConfig, (err, stats) => {
110 | if (err || stats.hasErrors()) console.log(err)
111 |
112 | console.log(stats.toString({
113 | chunks: false,
114 | colors: true
115 | }))
116 |
117 | process.exit()
118 | })
119 | }
120 |
121 | function greeting () {
122 | const cols = process.stdout.columns
123 | let text = ''
124 |
125 | if (cols > 85) text = 'lets-build'
126 | else if (cols > 60) text = 'lets-|build'
127 | else text = false
128 |
129 | if (text && !isCI) {
130 | say(text, {
131 | colors: ['yellow'],
132 | font: 'simple3d',
133 | space: false
134 | })
135 | } else console.log(chalk.yellow.bold('\n lets-build'))
136 | console.log()
137 | }
138 |
--------------------------------------------------------------------------------
/.electron-vue/dev-client.js:
--------------------------------------------------------------------------------
1 | const hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true')
2 |
3 | hotClient.subscribe(event => {
4 | /**
5 | * Reload browser when HTMLWebpackPlugin emits a new index.html
6 | */
7 | if (event.action === 'reload') {
8 | window.location.reload()
9 | }
10 |
11 | /**
12 | * Notify `mainWindow` when `main` process is compiling,
13 | * giving notice for an expected reload of the `electron` process
14 | */
15 | if (event.action === 'compiling') {
16 | document.body.innerHTML += `
17 |
30 |
31 |
32 | Compiling Main Process...
33 |
34 | `
35 | }
36 | })
37 |
--------------------------------------------------------------------------------
/.electron-vue/dev-runner.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | const chalk = require('chalk')
4 | const electron = require('electron')
5 | const path = require('path')
6 | const { say } = require('cfonts')
7 | const { spawn } = require('child_process')
8 | const webpack = require('webpack')
9 | const WebpackDevServer = require('webpack-dev-server')
10 | const webpackHotMiddleware = require('webpack-hot-middleware')
11 |
12 | const mainConfig = require('./webpack.main.config')
13 | const rendererConfig = require('./webpack.renderer.config')
14 |
15 | let electronProcess = null
16 | let manualRestart = false
17 | let hotMiddleware
18 |
19 | function logStats (proc, data) {
20 | let log = ''
21 |
22 | log += chalk.yellow.bold(`┏ ${proc} Process ${new Array((19 - proc.length) + 1).join('-')}`)
23 | log += '\n\n'
24 |
25 | if (typeof data === 'object') {
26 | data.toString({
27 | colors: true,
28 | chunks: false
29 | }).split(/\r?\n/).forEach(line => {
30 | log += ' ' + line + '\n'
31 | })
32 | } else {
33 | log += ` ${data}\n`
34 | }
35 |
36 | log += '\n' + chalk.yellow.bold(`┗ ${new Array(28 + 1).join('-')}`) + '\n'
37 |
38 | console.log(log)
39 | }
40 |
41 | function startRenderer () {
42 | return new Promise((resolve, reject) => {
43 | rendererConfig.entry.renderer = [path.join(__dirname, 'dev-client')].concat(rendererConfig.entry.renderer)
44 |
45 | const compiler = webpack(rendererConfig)
46 | hotMiddleware = webpackHotMiddleware(compiler, {
47 | log: false,
48 | heartbeat: 2500
49 | })
50 |
51 | compiler.plugin('compilation', compilation => {
52 | compilation.plugin('html-webpack-plugin-after-emit', (data, cb) => {
53 | hotMiddleware.publish({ action: 'reload' })
54 | cb()
55 | })
56 | })
57 |
58 | compiler.plugin('done', stats => {
59 | logStats('Renderer', stats)
60 | })
61 |
62 | const server = new WebpackDevServer(
63 | compiler,
64 | {
65 | contentBase: path.join(__dirname, '../'),
66 | quiet: true,
67 | setup (app, ctx) {
68 | app.use(hotMiddleware)
69 | ctx.middleware.waitUntilValid(() => {
70 | resolve()
71 | })
72 | }
73 | }
74 | )
75 |
76 | server.listen(9080)
77 | })
78 | }
79 |
80 | function startMain () {
81 | return new Promise((resolve, reject) => {
82 | mainConfig.entry.main = [path.join(__dirname, '../src/main/index.dev.js')].concat(mainConfig.entry.main)
83 |
84 | const compiler = webpack(mainConfig)
85 |
86 | compiler.plugin('watch-run', (compilation, done) => {
87 | logStats('Main', chalk.white.bold('compiling...'))
88 | hotMiddleware.publish({ action: 'compiling' })
89 | done()
90 | })
91 |
92 | compiler.watch({}, (err, stats) => {
93 | if (err) {
94 | console.log(err)
95 | return
96 | }
97 |
98 | logStats('Main', stats)
99 |
100 | if (electronProcess && electronProcess.kill) {
101 | manualRestart = true
102 | process.kill(electronProcess.pid)
103 | electronProcess = null
104 | startElectron()
105 |
106 | setTimeout(() => {
107 | manualRestart = false
108 | }, 5000)
109 | }
110 |
111 | resolve()
112 | })
113 | })
114 | }
115 |
116 | function startElectron () {
117 | electronProcess = spawn(electron, ['--inspect=5858', path.join(__dirname, '../dist/electron/main.js')])
118 |
119 | electronProcess.stdout.on('data', data => {
120 | electronLog(data, 'blue')
121 | })
122 | electronProcess.stderr.on('data', data => {
123 | electronLog(data, 'red')
124 | })
125 |
126 | electronProcess.on('close', () => {
127 | if (!manualRestart) process.exit()
128 | })
129 | }
130 |
131 | function electronLog (data, color) {
132 | let log = ''
133 | data = data.toString().split(/\r?\n/)
134 | data.forEach(line => {
135 | log += ` ${line}\n`
136 | })
137 | if (/[0-9A-z]+/.test(log)) {
138 | console.log(
139 | chalk[color].bold('┏ Electron -------------------') +
140 | '\n\n' +
141 | log +
142 | chalk[color].bold('┗ ----------------------------') +
143 | '\n'
144 | )
145 | }
146 | }
147 |
148 | function greeting () {
149 | const cols = process.stdout.columns
150 | let text = ''
151 |
152 | if (cols > 104) text = 'electron-vue'
153 | else if (cols > 76) text = 'electron-|vue'
154 | else text = false
155 |
156 | if (text) {
157 | say(text, {
158 | colors: ['yellow'],
159 | font: 'simple3d',
160 | space: false
161 | })
162 | } else console.log(chalk.yellow.bold('\n electron-vue'))
163 | console.log(chalk.blue(' getting ready...') + '\n')
164 | }
165 |
166 | function init () {
167 | greeting()
168 |
169 | Promise.all([startRenderer(), startMain()])
170 | .then(() => {
171 | startElectron()
172 | })
173 | .catch(err => {
174 | console.error(err)
175 | })
176 | }
177 |
178 | init()
179 |
--------------------------------------------------------------------------------
/.electron-vue/webpack.main.config.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | process.env.BABEL_ENV = 'main'
4 |
5 | const path = require('path')
6 | const { dependencies } = require('../package.json')
7 | const webpack = require('webpack')
8 |
9 | const BabiliWebpackPlugin = require('babili-webpack-plugin')
10 |
11 | let mainConfig = {
12 | entry: {
13 | main: path.join(__dirname, '../src/main/index.js')
14 | },
15 | externals: [
16 | ...Object.keys(dependencies || {})
17 | ],
18 | module: {
19 | rules: [
20 | {
21 | test: /\.(js)$/,
22 | enforce: 'pre',
23 | exclude: /node_modules/,
24 | use: {
25 | loader: 'eslint-loader',
26 | options: {
27 | formatter: require('eslint-friendly-formatter')
28 | }
29 | }
30 | },
31 | {
32 | test: /\.js$/,
33 | use: 'babel-loader',
34 | exclude: /node_modules/
35 | },
36 | {
37 | test: /\.node$/,
38 | use: 'node-loader'
39 | }
40 | ]
41 | },
42 | node: {
43 | __dirname: process.env.NODE_ENV !== 'production',
44 | __filename: process.env.NODE_ENV !== 'production'
45 | },
46 | output: {
47 | filename: '[name].js',
48 | libraryTarget: 'commonjs2',
49 | path: path.join(__dirname, '../dist/electron')
50 | },
51 | plugins: [
52 | new webpack.NoEmitOnErrorsPlugin()
53 | ],
54 | resolve: {
55 | extensions: ['.js', '.json', '.node']
56 | },
57 | target: 'electron-main'
58 | }
59 |
60 | /**
61 | * Adjust mainConfig for development settings
62 | */
63 | if (process.env.NODE_ENV !== 'production') {
64 | mainConfig.plugins.push(
65 | new webpack.DefinePlugin({
66 | '__static': `"${path.join(__dirname, '../static').replace(/\\/g, '\\\\')}"`
67 | })
68 | )
69 | }
70 |
71 | /**
72 | * Adjust mainConfig for production settings
73 | */
74 | if (process.env.NODE_ENV === 'production') {
75 | mainConfig.plugins.push(
76 | new BabiliWebpackPlugin({
77 | removeConsole: true,
78 | removeDebugger: true
79 | }),
80 | new webpack.DefinePlugin({
81 | 'process.env.NODE_ENV': '"production"'
82 | })
83 | )
84 | }
85 |
86 | module.exports = mainConfig
87 |
--------------------------------------------------------------------------------
/.electron-vue/webpack.renderer.config.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | process.env.BABEL_ENV = 'renderer'
4 |
5 | const path = require('path')
6 | const { dependencies } = require('../package.json')
7 | const webpack = require('webpack')
8 |
9 | const BabiliWebpackPlugin = require('babili-webpack-plugin')
10 | const CopyWebpackPlugin = require('copy-webpack-plugin')
11 | const ExtractTextPlugin = require('extract-text-webpack-plugin')
12 | const HtmlWebpackPlugin = require('html-webpack-plugin')
13 |
14 | /**
15 | * List of node_modules to include in webpack bundle
16 | *
17 | * Required for specific packages like Vue UI libraries
18 | * that provide pure *.vue files that need compiling
19 | * https://simulatedgreg.gitbooks.io/electron-vue/content/en/webpack-configurations.html#white-listing-externals
20 | */
21 | let whiteListedModules = ['vue']
22 |
23 | let rendererConfig = {
24 | devtool: '#cheap-module-eval-source-map',
25 | entry: {
26 | renderer: path.join(__dirname, '../src/renderer/main.js')
27 | },
28 | externals: [
29 | ...Object.keys(dependencies || {}).filter(
30 | d => !whiteListedModules.includes(d)
31 | )
32 | ],
33 | module: {
34 | rules: [
35 | {
36 | test: /\.(js|vue)$/,
37 | enforce: 'pre',
38 | exclude: /node_modules/,
39 | use: {
40 | loader: 'eslint-loader',
41 | options: {
42 | formatter: require('eslint-friendly-formatter')
43 | }
44 | }
45 | },
46 | {
47 | test: /\.css$/,
48 | use: ExtractTextPlugin.extract({
49 | fallback: 'style-loader',
50 | use: 'css-loader'
51 | })
52 | },
53 | {
54 | test: /\.scss$/,
55 | use: [
56 | {
57 | loader: 'style-loader' // creates style nodes from JS strings
58 | },
59 | {
60 | loader: 'css-loader' // translates CSS into CommonJS
61 | },
62 | {
63 | loader: 'sass-loader' // compiles Sass to CSS
64 | }
65 | ]
66 | },
67 | {
68 | test: /\.html$/,
69 | use: 'vue-html-loader'
70 | },
71 | {
72 | test: /\.js$/,
73 | use: 'babel-loader',
74 | exclude: /node_modules/
75 | },
76 | {
77 | test: /\.node$/,
78 | use: 'node-loader'
79 | },
80 | {
81 | test: /\.vue$/,
82 | use: {
83 | loader: 'vue-loader',
84 | options: {
85 | extractCSS: process.env.NODE_ENV === 'production',
86 | loaders: {
87 | sass: 'vue-style-loader!css-loader!sass-loader?indentedSyntax=1',
88 | scss: 'vue-style-loader!css-loader!sass-loader'
89 | }
90 | }
91 | }
92 | },
93 | {
94 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
95 | use: {
96 | loader: 'url-loader',
97 | query: {
98 | limit: 10000,
99 | name: 'imgs/[name].[ext]'
100 | }
101 | }
102 | },
103 | {
104 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
105 | use: {
106 | loader: 'url-loader',
107 | query: {
108 | limit: 10000,
109 | name: 'fonts/[name].[ext]'
110 | }
111 | }
112 | }
113 | ]
114 | },
115 | node: {
116 | __dirname: process.env.NODE_ENV !== 'production',
117 | __filename: process.env.NODE_ENV !== 'production'
118 | },
119 | plugins: [
120 | new ExtractTextPlugin('styles.css'),
121 | new HtmlWebpackPlugin({
122 | filename: 'index.html',
123 | template: path.resolve(__dirname, '../src/index.ejs'),
124 | minify: {
125 | collapseWhitespace: true,
126 | removeAttributeQuotes: true,
127 | removeComments: true
128 | },
129 | nodeModules: process.env.NODE_ENV !== 'production'
130 | ? path.resolve(__dirname, '../node_modules')
131 | : false
132 | }),
133 | new webpack.HotModuleReplacementPlugin(),
134 | new webpack.NoEmitOnErrorsPlugin()
135 | ],
136 | output: {
137 | filename: '[name].js',
138 | libraryTarget: 'commonjs2',
139 | path: path.join(__dirname, '../dist/electron')
140 | },
141 | resolve: {
142 | alias: {
143 | '@': path.join(__dirname, '../src/renderer'),
144 | vue$: 'vue/dist/vue.esm.js'
145 | },
146 | extensions: ['.js', '.vue', '.json', '.css', '.node']
147 | },
148 | target: 'electron-renderer'
149 | }
150 |
151 | /**
152 | * Adjust rendererConfig for development settings
153 | */
154 | if (process.env.NODE_ENV !== 'production') {
155 | rendererConfig.plugins.push(
156 | new webpack.DefinePlugin({
157 | __static: `"${path.join(__dirname, '../static').replace(/\\/g, '\\\\')}"`
158 | })
159 | )
160 | }
161 |
162 | /**
163 | * Adjust rendererConfig for production settings
164 | */
165 | if (process.env.NODE_ENV === 'production') {
166 | rendererConfig.devtool = ''
167 |
168 | rendererConfig.plugins.push(
169 | new BabiliWebpackPlugin({
170 | removeConsole: true,
171 | removeDebugger: true
172 | }),
173 | new CopyWebpackPlugin([
174 | {
175 | from: path.join(__dirname, '../static'),
176 | to: path.join(__dirname, '../dist/electron/static'),
177 | ignore: ['.*']
178 | }
179 | ]),
180 | new webpack.DefinePlugin({
181 | 'process.env.NODE_ENV': '"production"'
182 | }),
183 | new webpack.LoaderOptionsPlugin({
184 | minimize: true
185 | })
186 | )
187 | }
188 |
189 | module.exports = rendererConfig
190 |
--------------------------------------------------------------------------------
/.electron-vue/webpack.web.config.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | process.env.BABEL_ENV = 'web'
4 |
5 | const path = require('path')
6 | const webpack = require('webpack')
7 |
8 | const BabiliWebpackPlugin = require('babili-webpack-plugin')
9 | const CopyWebpackPlugin = require('copy-webpack-plugin')
10 | const ExtractTextPlugin = require('extract-text-webpack-plugin')
11 | const HtmlWebpackPlugin = require('html-webpack-plugin')
12 |
13 | let webConfig = {
14 | devtool: '#cheap-module-eval-source-map',
15 | entry: {
16 | web: path.join(__dirname, '../src/renderer/main.js')
17 | },
18 | module: {
19 | rules: [
20 | {
21 | test: /\.(js|vue)$/,
22 | enforce: 'pre',
23 | exclude: /node_modules/,
24 | use: {
25 | loader: 'eslint-loader',
26 | options: {
27 | formatter: require('eslint-friendly-formatter')
28 | }
29 | }
30 | },
31 | {
32 | test: /\.css$/,
33 | use: ExtractTextPlugin.extract({
34 | fallback: 'style-loader',
35 | use: 'css-loader'
36 | })
37 | },
38 | {
39 | test: /\.scss$/,
40 | use: [
41 | {
42 | loader: 'style-loader' // creates style nodes from JS strings
43 | },
44 | {
45 | loader: 'css-loader' // translates CSS into CommonJS
46 | },
47 | {
48 | loader: 'sass-loader' // compiles Sass to CSS
49 | }
50 | ]
51 | },
52 | {
53 | test: /\.html$/,
54 | use: 'vue-html-loader'
55 | },
56 | {
57 | test: /\.js$/,
58 | use: 'babel-loader',
59 | include: [path.resolve(__dirname, '../src/renderer')],
60 | exclude: /node_modules/
61 | },
62 | {
63 | test: /\.vue$/,
64 | use: {
65 | loader: 'vue-loader',
66 | options: {
67 | extractCSS: true,
68 | loaders: {
69 | sass: 'vue-style-loader!css-loader!sass-loader?indentedSyntax=1',
70 | scss: 'vue-style-loader!css-loader!sass-loader'
71 | }
72 | }
73 | }
74 | },
75 | {
76 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
77 | use: {
78 | loader: 'url-loader',
79 | query: {
80 | limit: 10000,
81 | name: 'imgs/[name].[ext]'
82 | }
83 | }
84 | },
85 | {
86 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
87 | use: {
88 | loader: 'url-loader',
89 | query: {
90 | limit: 10000,
91 | name: 'fonts/[name].[ext]'
92 | }
93 | }
94 | }
95 | ]
96 | },
97 | plugins: [
98 | new ExtractTextPlugin('styles.css'),
99 | new HtmlWebpackPlugin({
100 | filename: 'index.html',
101 | template: path.resolve(__dirname, '../src/index.ejs'),
102 | minify: {
103 | collapseWhitespace: true,
104 | removeAttributeQuotes: true,
105 | removeComments: true
106 | },
107 | nodeModules: false
108 | }),
109 | new webpack.DefinePlugin({
110 | 'process.env.IS_WEB': 'true'
111 | }),
112 | new webpack.HotModuleReplacementPlugin(),
113 | new webpack.NoEmitOnErrorsPlugin()
114 | ],
115 | output: {
116 | filename: '[name].js',
117 | path: path.join(__dirname, '../dist/web')
118 | },
119 | resolve: {
120 | alias: {
121 | '@': path.join(__dirname, '../src/renderer'),
122 | vue$: 'vue/dist/vue.esm.js'
123 | },
124 | extensions: ['.js', '.vue', '.json', '.css']
125 | },
126 | target: 'web'
127 | }
128 |
129 | /**
130 | * Adjust webConfig for production settings
131 | */
132 | if (process.env.NODE_ENV === 'production') {
133 | webConfig.devtool = ''
134 |
135 | webConfig.plugins.push(
136 | new BabiliWebpackPlugin({
137 | removeConsole: true,
138 | removeDebugger: true
139 | }),
140 | new CopyWebpackPlugin([
141 | {
142 | from: path.join(__dirname, '../static'),
143 | to: path.join(__dirname, '../dist/web/static'),
144 | ignore: ['.*']
145 | }
146 | ]),
147 | new webpack.DefinePlugin({
148 | 'process.env.NODE_ENV': '"production"'
149 | }),
150 | new webpack.LoaderOptionsPlugin({
151 | minimize: true
152 | })
153 | )
154 | }
155 |
156 | module.exports = webConfig
157 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | test/unit/coverage/**
2 | test/unit/*.js
3 | test/e2e/*.js
4 |
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | parser: 'babel-eslint',
4 | parserOptions: {
5 | sourceType: 'module'
6 | },
7 | env: {
8 | browser: true,
9 | node: true
10 | },
11 | extends: 'standard',
12 | globals: {
13 | __static: true
14 | },
15 | plugins: ['html'],
16 | rules: {
17 | // allow paren-less arrow functions
18 | 'arrow-parens': 0,
19 | // allow async-await
20 | 'generator-star-spacing': 0,
21 | // allow debugger during development
22 | 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
23 | 'space-before-function-paren': 0,
24 | 'eol-last': 0,
25 | 'no-extra-semi': 0,
26 | semi: 0,
27 | eqeqeq: 0,
28 | 'one-var': 0,
29 | 'no-undef': 0
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | dist/electron/*
3 | dist/web/*
4 | src/renderer/tool/config.js
5 | build/*
6 | !build/icons
7 | coverage
8 | node_modules/
9 | .idea/
10 | package-lock.json
11 | npm-debug.log
12 | npm-debug.log.*
13 | thumbs.db
14 | !.gitkeep
15 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 贝壳云笔记客户端
2 |
3 | > 一个基于 electron-vue 开发的云储存平台
4 |
5 | ### 运行
6 |
7 | ``` bash
8 | node -v : v12.18.2
9 |
10 | git clone https://github.com/EliseCaro/eibk_client.git
11 |
12 | cd eibk_client
13 |
14 | npm install
15 |
16 | # 运行开发模式
17 | npm run dev
18 |
19 | # 打包安装文件
20 | npm run build
21 |
22 | # 请自行配置src/renderer/tool/config.js
23 |
24 | ```
25 |
26 | ### 服务端PHP代码
27 |
28 | [https://github.com/EliseCaro/eibk_service](https://github.com/EliseCaro/eibk_service)
29 |
30 | ### 联系本人
31 |
32 | ``` bash
33 |
34 | # QQ:1368213727 (一根小腿毛)
35 |
36 | ```
37 |
--------------------------------------------------------------------------------
/build/icons/256x256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EliseCaro/eibk_client/35fc05e7100f7934f990d21f7c0ee420e6d774fc/build/icons/256x256.png
--------------------------------------------------------------------------------
/build/icons/icon.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EliseCaro/eibk_client/35fc05e7100f7934f990d21f7c0ee420e6d774fc/build/icons/icon.icns
--------------------------------------------------------------------------------
/build/icons/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EliseCaro/eibk_client/35fc05e7100f7934f990d21f7c0ee420e6d774fc/build/icons/icon.ico
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "eibk",
3 | "productName": "eibk",
4 | "version": "1.2.0",
5 | "author": "Yang☆YongFei",
6 | "description": "贝壳云笔记",
7 | "license": "",
8 | "main": "./dist/electron/main.js",
9 | "scripts": {
10 | "build:w32": "cross-env BUILD_TARGET=win32 node .electron-vue/build.js",
11 | "build": "node .electron-vue/build.js",
12 | "build:darwin": "cross-env BUILD_TARGET=darwin node .electron-vue/build.js",
13 | "build:linux": "cross-env BUILD_TARGET=linux node .electron-vue/build.js",
14 | "build:mas": "cross-env BUILD_TARGET=mas node .electron-vue/build.js",
15 | "build:win32": "cross-env BUILD_TARGET=win32 node .electron-vue/build.js && electron-builder --platform=win32 --arch=ia32",
16 | "build:clean": "cross-env BUILD_TARGET=clean node .electron-vue/build.js",
17 | "build:web": "cross-env BUILD_TARGET=web node .electron-vue/build.js",
18 | "dev": "node .electron-vue/dev-runner.js",
19 | "lint": "eslint --ext .js,.vue -f ./node_modules/eslint-friendly-formatter src test",
20 | "lint:fix": "eslint --ext .js,.vue -f ./node_modules/eslint-friendly-formatter --fix src test",
21 | "pack": "npm run pack:main && npm run pack:renderer",
22 | "pack:main": "cross-env NODE_ENV=production webpack --progress --colors --config .electron-vue/webpack.main.config.js",
23 | "pack:renderer": "cross-env NODE_ENV=production webpack --progress --colors --config .electron-vue/webpack.renderer.config.js",
24 | "test": "npm run unit",
25 | "unit": "karma start test/unit/karma.conf.js",
26 | "postinstall": "npm run lint:fix"
27 | },
28 | "build": {
29 | "artifactName": "贝壳云笔记.exe",
30 | "appId": "com.bkybj.950201",
31 | "copyright": "滇ICP备14005543号-5 (C) 爱贝壳",
32 | "directories": {
33 | "output": "build"
34 | },
35 | "nsis": {
36 | "oneClick": false,
37 | "allowToChangeInstallationDirectory": true,
38 | "installerIcon": "build/icons/icon.ico",
39 | "uninstallerIcon": "build/icons/icon.ico",
40 | "installerHeaderIcon": "build/icons/icon.ico",
41 | "createDesktopShortcut": true,
42 | "createStartMenuShortcut": true,
43 | "artifactName": "贝壳云笔记.exe",
44 | "shortcutName": "贝壳云笔记",
45 | "uninstallDisplayName": "贝壳云笔记",
46 | "perMachine": true
47 | },
48 | "publish": [
49 | {
50 | "provider": "generic",
51 | "url": "http://api.bkybj.com/client/exe/"
52 | }
53 | ],
54 | "files": [
55 | "dist/electron/**/*"
56 | ],
57 | "win": {
58 | "icon": "build/icons/icon.ico"
59 | }
60 | },
61 | "dependencies": {
62 | "axios": "^0.16.1",
63 | "electron-updater": "^4.0.6",
64 | "iview": "^2.14.1",
65 | "nedb": "^1.8.0",
66 | "node-sass": "^4.5.3",
67 | "sass-loader": "^6.0.6",
68 | "vue": "^2.3.3",
69 | "vue-electron": "^1.0.6",
70 | "vue-quill-editor": "^3.0.6",
71 | "vue-router": "^2.5.3",
72 | "vue-video-player": "^5.0.2",
73 | "vuex": "^2.3.1"
74 | },
75 | "devDependencies": {
76 | "babel-core": "^6.22.1",
77 | "babel-eslint": "^7.0.0",
78 | "babel-loader": "^7.0.0",
79 | "babel-plugin-istanbul": "^4.1.1",
80 | "babel-plugin-transform-runtime": "^6.22.0",
81 | "babel-preset-env": "^1.3.3",
82 | "babel-preset-stage-0": "^6.5.0",
83 | "babel-register": "^6.2.0",
84 | "babili-webpack-plugin": "^0.1.1",
85 | "cfonts": "^1.1.3",
86 | "chai": "^4.0.0",
87 | "chalk": "^1.1.3",
88 | "copy-webpack-plugin": "^4.0.1",
89 | "cross-env": "^5.0.0",
90 | "css-loader": "^0.28.4",
91 | "del": "^2.2.1",
92 | "devtron": "^1.1.0",
93 | "electron": "^4.0.1",
94 | "electron-builder": "^20.19.2",
95 | "electron-debug": "^1.1.0",
96 | "electron-devtools-installer": "^2.0.1",
97 | "electron-packager": "^8.5.0",
98 | "electron-rebuild": "^1.1.3",
99 | "eslint": "^4.19.1",
100 | "eslint-config-standard": "^10.2.1",
101 | "eslint-friendly-formatter": "^3.0.0",
102 | "eslint-loader": "^1.3.0",
103 | "eslint-plugin-html": "^3.0.0",
104 | "eslint-plugin-import": "^2.3.0",
105 | "eslint-plugin-node": "^4.2.2",
106 | "eslint-plugin-promise": "^3.4.0",
107 | "eslint-plugin-standard": "^3.0.1",
108 | "extract-text-webpack-plugin": "^2.0.0-beta.4",
109 | "file-loader": "^0.11.1",
110 | "html-webpack-plugin": "^2.16.1",
111 | "inject-loader": "^3.0.0",
112 | "json-loader": "^0.5.4",
113 | "karma": "^1.3.0",
114 | "karma-chai": "^0.1.0",
115 | "karma-coverage": "^1.1.1",
116 | "karma-electron": "^5.1.1",
117 | "karma-mocha": "^1.2.0",
118 | "karma-sourcemap-loader": "^0.3.7",
119 | "karma-spec-reporter": "^0.0.31",
120 | "karma-webpack": "^2.0.1",
121 | "mocha": "^3.0.2",
122 | "multispinner": "^0.2.1",
123 | "style-loader": "^0.18.1",
124 | "url-loader": "^0.5.7",
125 | "vue-html-loader": "^1.2.2",
126 | "vue-loader": "^12.2.1",
127 | "vue-style-loader": "^3.0.1",
128 | "vue-template-compiler": "^2.3.3",
129 | "webpack": "^2.6.1",
130 | "webpack-dev-server": "^2.3.0",
131 | "webpack-hot-middleware": "^2.18.0",
132 | "webpack-merge": "^4.1.0"
133 | }
134 | }
135 |
--------------------------------------------------------------------------------
/src/index.ejs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 贝壳云
6 |
7 |
8 |
9 | <% if (htmlWebpackPlugin.options.nodeModules) { %>
10 |
11 |
14 | <% } %>
15 |
16 |
17 |
18 |
19 |
20 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/src/main/index.dev.js:
--------------------------------------------------------------------------------
1 | /**
2 | * This file is used specifically and only for development. It installs
3 | * `electron-debug` & `vue-devtools`. There shouldn't be any need to
4 | * modify this file, but it can be used to extend your development
5 | * environment.
6 | */
7 |
8 | /* eslint-disable */
9 |
10 | // Set environment for development
11 | process.env.NODE_ENV = 'development'
12 |
13 | // Install `electron-debug` with `devtron`
14 | require('electron-debug')({ showDevTools: true })
15 |
16 | // Install `vue-devtools`
17 | require('electron').app.on('ready', () => {
18 | let installExtension = require('electron-devtools-installer')
19 | installExtension.default(installExtension.VUEJS_DEVTOOLS)
20 | .then(() => {})
21 | .catch(err => {
22 | console.log('Unable to install `vue-devtools`: \n', err)
23 | })
24 | })
25 |
26 | // Require `main` process to boot app
27 | require('./index')
28 |
--------------------------------------------------------------------------------
/src/main/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | /**
4 | * Set `__static` path to static files in production
5 | * https://simulatedgreg.gitbooks.io/electron-vue/content/en/using-static-assets.html
6 | */
7 | import { app, BrowserWindow, ipcMain, Tray, nativeImage } from 'electron';
8 | if (process.env.NODE_ENV !== 'development') {
9 | global.__static = require('path').join(__dirname, '/static').replace(/\\/g, '\\\\')
10 | }
11 | var appTray = null;
12 | let mainWindow;
13 | let newWin;
14 | const winURL = process.env.NODE_ENV === 'development'
15 | ? `http://localhost:9080`
16 | : `file://${__dirname}/index.html`;
17 |
18 | function createWindow() {
19 | /**
20 | * Initial window options
21 | */
22 | mainWindow = new BrowserWindow({
23 | height: 800,
24 | width: 1280,
25 | minHeight: 800,
26 | minWidth: 1280,
27 | frame: false,
28 | resizable: false,
29 | titleBarStyle: 'hidden',
30 | backgroundColor: '#0E2037',
31 | show: false,
32 | skipTaskbar: false
33 | });
34 | mainWindow.setMenuBarVisibility(false);
35 | mainWindow.loadURL(winURL);
36 | mainWindow.closeDevTools();
37 |
38 | mainWindow.on('closed', (event) => {
39 | mainWindow = null;
40 | });
41 | mainWindow.on('close', (event) => {
42 | mainWindow.hide();
43 | event.preventDefault();
44 | });
45 |
46 | appTray = new Tray(nativeImage.createFromPath(__static + '/img/icon.ico'));
47 | appTray.setToolTip('贝壳云笔记');
48 | appTray.on('click', function() {
49 | mainWindow.show();
50 | });
51 |
52 | appTray.on('right-click', function(e, b) {
53 | if (!newWin) {
54 | newWin = new BrowserWindow({
55 | width: 210,
56 | height: 151,
57 | x: b.x + 20,
58 | y: b.y - 158,
59 | frame: false,
60 | resizable: false,
61 | parent: mainWindow,
62 | devTools: false
63 | });
64 | newWin.loadURL(__static + `/html/setting.html`); // new.html是新开窗口的渲染进程
65 | } else {
66 | newWin.show();
67 | }
68 | newWin.on('closed', () => { newWin = null; });
69 | newWin.on('blur', () => { newWin.hide(); });
70 | newWin.closeDevTools();
71 | });
72 |
73 | mainWindow.once('ready-to-show', () => {
74 | mainWindow.show()
75 | })
76 | }
77 |
78 | app.on('ready', createWindow);
79 | app.on('window-all-closed', () => {
80 | if (process.platform !== 'darwin') {
81 | app.quit()
82 | }
83 | });
84 | app.on('activate', () => {
85 | if (mainWindow === null) {
86 | createWindow();
87 | }
88 | });
89 |
90 | ipcMain.on('close_system', () => {
91 | mainWindow.destroy();
92 | });
93 |
94 | ipcMain.on('main_window', (evt, args) => {
95 | if (args === 'show') {
96 | mainWindow.show();
97 | } else {
98 | mainWindow.hide();
99 | }
100 | });
101 |
102 | ipcMain.on('open_system_setting', () => {
103 | mainWindow.show();
104 | mainWindow.webContents.send('open_system_setting', 'true')
105 | });
106 |
107 | ipcMain.on('play_system_controller', (evt, args) => {
108 | mainWindow.webContents.send('play_system_controller', args)
109 | });
110 |
111 | ipcMain.on('electron_play_interception_setting', (evt, args) => {
112 | if (newWin) {
113 | newWin.webContents.send('electron_play_interception', args)
114 | }
115 | });
116 |
117 | /**
118 | * 测试使用
119 | */
120 | ipcMain.on('open-devtools', () => {
121 | mainWindow.openDevTools();
122 | });
123 | /**
124 | 进程通知||下载文件
125 | **/
126 | ipcMain.on('download', (evt, args) => {
127 | mainWindow.webContents.downloadURL(args);
128 | mainWindow.webContents.session.on('will-download', (event, item, webContents) => {
129 | item.on('updated', (event, state) => {
130 | if (state === 'interrupted') {
131 | // mainWindow.webContents.send('downStateInterrupted', item);
132 | } else if (state === 'progressing') {
133 | if (item.isPaused()) {
134 | // mainWindow.webContents.send('downStateInterrupted', item);
135 | } else {
136 | const obj = {
137 | url: item.getURL(),
138 | name: item.getFilename(),
139 | updated: item.getState(),
140 | file_size: item.getTotalBytes(),
141 | this_size: item.getReceivedBytes(),
142 | done: '',
143 | state: 'updated',
144 | percentage: 0,
145 | save_path: ''
146 | };
147 | mainWindow.webContents.send('downStateInterrupted', JSON.stringify(obj));
148 | }
149 | }
150 | });
151 | item.once('done', (event, state) => {
152 | const obj = {
153 | name: item.getFilename(),
154 | state: 'done',
155 | done: state,
156 | save_path: item.getSavePath()
157 | };
158 | event.preventDefault();
159 | mainWindow.webContents.send('downStateDone', JSON.stringify(obj))
160 | })
161 | });
162 | });
163 | /**
164 | end
165 | */
166 |
167 | /**
168 | * 检测更新,在你想要检查更新的时候执行,renderer事件触发后的操作自行编写
169 | */
170 |
171 | const {autoUpdater} = require('electron-updater');
172 | const message = {
173 | error: '0', // 检查更新出错
174 | checking: '1', // 正在检查更新
175 | updateAva: '2', // 检测到新版本,正在下载……
176 | updateNotAva: '3'// 现在使用的就是最新版本,不用更新
177 | };
178 | autoUpdater.on('error', function (_error) {
179 | console.log(autoUpdater.error);
180 | sendUpdateMessage(message.error)
181 | });
182 | autoUpdater.on('checking-for-update', function () {
183 | sendUpdateMessage(message.checking)
184 | });
185 | autoUpdater.on('update-available', function (info) {
186 | sendUpdateMessage(message.updateAva)
187 | });
188 | autoUpdater.on('update-not-available', function (info) {
189 | sendUpdateMessage(message.updateNotAva)
190 | });
191 | autoUpdater.on('download-progress', function (progressObj) {
192 | mainWindow.webContents.send('downloadProgress', progressObj)
193 | });
194 | autoUpdater.on('update-downloaded', function (event, releaseNotes, releaseName, releaseDate, updateUrl, quitAndUpdate) {
195 | ipcMain.on('isUpdateNow', (e, arg) => {
196 | autoUpdater.quitAndInstall();
197 | });
198 | mainWindow.webContents.send('isUpdateNow')
199 | });
200 | ipcMain.on('checkForUpdate', () => {
201 | autoUpdater.checkForUpdates();
202 | });
203 |
204 | function sendUpdateMessage(text) {
205 | mainWindow.webContents.send('update_message', text)
206 | }
--------------------------------------------------------------------------------
/src/renderer/assets/default_user.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EliseCaro/eibk_client/35fc05e7100f7934f990d21f7c0ee420e6d774fc/src/renderer/assets/default_user.jpg
--------------------------------------------------------------------------------
/src/renderer/assets/error_video.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EliseCaro/eibk_client/35fc05e7100f7934f990d21f7c0ee420e6d774fc/src/renderer/assets/error_video.jpg
--------------------------------------------------------------------------------
/src/renderer/assets/icon_repeat-cycle.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EliseCaro/eibk_client/35fc05e7100f7934f990d21f7c0ee420e6d774fc/src/renderer/assets/icon_repeat-cycle.gif
--------------------------------------------------------------------------------
/src/renderer/assets/icon_repeat-once.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EliseCaro/eibk_client/35fc05e7100f7934f990d21f7c0ee420e6d774fc/src/renderer/assets/icon_repeat-once.png
--------------------------------------------------------------------------------
/src/renderer/assets/icon_repeat-random.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EliseCaro/eibk_client/35fc05e7100f7934f990d21f7c0ee420e6d774fc/src/renderer/assets/icon_repeat-random.png
--------------------------------------------------------------------------------
/src/renderer/assets/info_tra.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/renderer/assets/userbg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EliseCaro/eibk_client/35fc05e7100f7934f990d21f7c0ee420e6d774fc/src/renderer/assets/userbg.png
--------------------------------------------------------------------------------
/src/renderer/components/FileIndexPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 上传文件
6 |
7 |
8 |
9 |
10 |
11 |
12 |
{{v.title}}
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
35 |
36 |
42 |
43 |
44 |
45 |
56 |
57 |
58 |
59 |
选择文件
60 |
{{up_parameters._textMsg}}
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
文件标题(用于快速查找):
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
85 |
86 |
87 |
88 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
--------------------------------------------------------------------------------
/src/renderer/components/ImagesDetailPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
85 |
86 |
87 |
93 |
94 |
95 |
96 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
225 |
--------------------------------------------------------------------------------
/src/renderer/components/ImagesIndexPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
10 |
11 |
12 |
13 |
![]()
14 |
15 |
16 |
17 |
18 |
19 |
20 |
{{v.name}}
21 |
{{$formatDate(v.update_time,"Y-m-d")}}
22 |
{{v.description}}
23 |
24 |
25 |
26 |
{{$store.state.images.list.items[1].name}}
27 |
{{$formatDate($store.state.images.list.items[1].update_time,"Y-m-d")}}
28 |
{{$store.state.images.list.items[1].description}}
29 |
30 |
31 |
32 |
33 |
34 |
35 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
![]()
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
![]()
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
{{$store.state.images.list.items[4].name}}
78 |
{{$formatDate($store.state.images.list.items[4].update_time,"Y-m-d")}}
79 |
{{$store.state.images.list.items[4].description}}
80 |
81 |
82 |
83 |
{{$store.state.images.list.items[5].name}}
84 |
{{$formatDate($store.state.images.list.items[5].update_time,"Y-m-d")}}
85 |
{{$store.state.images.list.items[5].description}}
86 |
87 |
88 |
89 |
90 |
91 |
92 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
123 |
124 |
130 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
--------------------------------------------------------------------------------
/src/renderer/components/IndexPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
{{v.count}}
8 |
{{v.title}}
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | 我的音乐
17 |
18 |
19 |
20 |
21 |
22 | {{v.title}} - {{v.artist}}
23 |
24 |
25 |
26 |
27 |
28 |
87 |
88 |
89 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
146 |
--------------------------------------------------------------------------------
/src/renderer/components/MusicIndexPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
112 |
113 |
114 |
115 |
116 |
117 | {{v.title}}
118 | {{v.artist}}
119 |
120 |
121 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
--------------------------------------------------------------------------------
/src/renderer/components/NoteIndexPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | 我的笔迹
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
{{v.title}}
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
{{v.descriptions}}
33 |
34 |
35 | {{$formatDate(v.update_time,"Y-m-d")}}
36 |
37 |
38 |
39 |
40 |
41 |
42 |
49 |
50 |
51 |
52 |
53 |
54 |
67 |
68 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
--------------------------------------------------------------------------------
/src/renderer/components/SettingIndexPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | 个人资料管理
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | 提交修改
22 | 退出登录
23 |
24 |
25 |
26 |
27 |
28 | 接口密钥
29 |
30 | AP:{{userInfo.api_openid}}
31 | SK:{{userInfo.api_secret}}
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 | 主题模板选择
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
56 |
57 |
58 |
59 |
60 |
66 |
67 |
68 |
69 |
70 |
![]()
71 |
72 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
--------------------------------------------------------------------------------
/src/renderer/components/SingLoginPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
12 |
13 |
14 |
15 |
![]()
16 |
贝壳云笔记
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
立即登录
27 |
28 |
贝壳云笔记
www.eibk.com
29 |
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/src/renderer/components/VideoDetailPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
{{$store.state.video.detail.info.title}}
6 |
——————— {{$store.state.video.detail.info.description}}
7 |
8 |
9 |
10 |
11 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
85 |
--------------------------------------------------------------------------------
/src/renderer/components/VideoIndexPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 我的视频
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
![]()
14 |
15 |
16 |
17 |
18 |
{{v.title}}
19 |
20 |
{{v.title}}
21 |
22 |
23 |
24 |
25 |
26 |
27 |
35 |
36 |
42 |
43 |
44 |
45 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/src/renderer/components/VideoPushPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
16 |
17 |
18 |
19 |
20 |
选择视频
21 |
{{up_config._textMsg}}
22 |
23 |
24 |
上传单个文件最大2G。支持上传格式:{{up_config._accept_text}}
25 |
26 |
27 | 禁止发布的视频内容 | 高清、超高清视频标识 | 传视频赚外快
28 |
29 |
30 |
31 |
32 |
视频标题(用于快速查找):
33 |
34 |
公开程度(公开视频将所有人可见):
35 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 | 最新视频动态
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
{{v.title}}
59 |
{{v.description}}
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
{{v.title}}
74 |
{{v.description}}
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
{{v.title}}
89 |
{{v.description}}
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
--------------------------------------------------------------------------------
/src/renderer/main.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 |
3 | import App from './App'
4 | import router from './router'
5 | import store from './store'
6 | import db from './tool/datastore'
7 | import {post} from './tool/http'
8 | import {ProcessingPic, formatDate, onError} from './tool/function';
9 | import iView from 'iview'
10 |
11 | import '../../static/css/reset.scss'
12 | import 'iview/dist/styles/iview.css'
13 |
14 | if (!process.env.IS_WEB) Vue.use(require('vue-electron'));
15 | Vue.prototype.$db = db;
16 | Vue.prototype.$post = post;
17 | Vue.prototype.$ProcessingPic = ProcessingPic;
18 | Vue.prototype.$formatDate = formatDate;
19 | Vue.prototype.$onError = onError;
20 | Vue.config.productionTip = false;
21 |
22 | // 定义全局变量
23 | Vue.use(iView);
24 | router.beforeEach((to, from, next) => {
25 | if (to.matched.some(m => m.meta.auth)) {
26 | if (store.state.login.token === '') {
27 | next({path: '/sing/login'});
28 | } else {
29 | next();
30 | }
31 | } else {
32 | next();
33 | }
34 | });
35 | new Vue({
36 | components: { App },
37 | router,
38 | store,
39 | template: ''
40 | }).$mount('#app');
41 |
--------------------------------------------------------------------------------
/src/renderer/mixins/index.js:
--------------------------------------------------------------------------------
1 | export default {
2 | methods: {
3 | jump(to) {
4 | if (this.$router) {
5 | console.log(to);
6 | if (isNaN(to)) {
7 | this.$router.push(to);
8 | } else {
9 | this.$router.go(to);
10 | }
11 | }
12 | }
13 | }
14 | };
15 |
--------------------------------------------------------------------------------
/src/renderer/router/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Router from 'vue-router'
3 |
4 | Vue.use(Router)
5 |
6 | export default new Router({
7 | routes: [
8 | {
9 | path: '/',
10 | name: 'IndexPage',
11 | component: require('@/components/IndexPage'),
12 | meta: {auth: true}
13 | },
14 |
15 | {
16 | path: '/video/index',
17 | name: 'VideoIndexPage',
18 | component: require('@/components/VideoIndexPage'),
19 | meta: {auth: true}
20 | },
21 | {
22 | path: '/video/detail',
23 | name: 'VideoDetailPage',
24 | component: require('@/components/VideoDetailPage'),
25 | meta: {auth: true}
26 | },
27 | {
28 | path: '/video/push',
29 | name: 'VideoPushPage',
30 | component: require('@/components/VideoPushPage'),
31 | meta: {auth: true}
32 | },
33 |
34 | {
35 | path: '/note/index',
36 | name: 'NoteIndexPage',
37 | component: require('@/components/NoteIndexPage'),
38 | meta: {auth: true}
39 | },
40 | {
41 | path: '/file/index',
42 | name: 'FileIndexPage',
43 | component: require('@/components/FileIndexPage'),
44 | meta: {auth: true}
45 | },
46 | {
47 | path: '/images/index',
48 | name: 'ImagesIndexPage',
49 | component: require('@/components/ImagesIndexPage'),
50 | meta: {auth: true}
51 | },
52 | {
53 | path: '/images/detail',
54 | name: 'ImagesDetailPage',
55 | component: require('@/components/ImagesDetailPage'),
56 | meta: {auth: true}
57 | },
58 | {
59 | path: '/music/index',
60 | name: 'MusicIndexPage',
61 | component: require('@/components/MusicIndexPage'),
62 | meta: {auth: true}
63 | },
64 | {
65 | path: '/setting/index',
66 | name: 'SettingIndexPage',
67 | component: require('@/components/SettingIndexPage'),
68 | meta: {auth: true}
69 | },
70 | {
71 | path: '/sing/login',
72 | name: 'SingLoginPage',
73 | component: require('@/components/SingLoginPage')
74 | },
75 | {
76 | path: '*',
77 | redirect: '/'
78 | }
79 | ]
80 | })
81 |
--------------------------------------------------------------------------------
/src/renderer/store/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Vuex from 'vuex'
3 |
4 | import modules from './modules'
5 |
6 | Vue.use(Vuex);
7 |
8 | export default new Vuex.Store({
9 | modules,
10 | strict: process.env.NODE_ENV !== 'production'
11 | })
--------------------------------------------------------------------------------
/src/renderer/store/modules/file.js:
--------------------------------------------------------------------------------
1 |
2 | const state = {
3 | list: {items: []}
4 | };
5 |
6 | const mutations = {
7 | file_update_list(state, value) { state.list = value; }
8 | };
9 |
10 | const actions = {};
11 |
12 | export default {
13 | state,
14 | mutations,
15 | actions
16 | }
--------------------------------------------------------------------------------
/src/renderer/store/modules/images.js:
--------------------------------------------------------------------------------
1 |
2 | const state = {
3 | list: {items: []},
4 | detail: {items: []},
5 | detail_cate: []
6 | };
7 |
8 | const mutations = {
9 | images_update_list(state, value) { state.list = value; },
10 | image_update_detail(state, value) { state.detail = value; },
11 | image_update_detail_cate(state, value) { state.detail_cate = value; }
12 | };
13 |
14 | const actions = {};
15 |
16 | export default {
17 | state,
18 | mutations,
19 | actions
20 | }
--------------------------------------------------------------------------------
/src/renderer/store/modules/index.js:
--------------------------------------------------------------------------------
1 | /**
2 | * The file enables `@/store/index.js` to import all vuex modules
3 | * in a one-shot manner. There should not be any reason to edit this file.
4 | */
5 |
6 | const files = require.context('.', false, /\.js$/)
7 | const modules = {}
8 |
9 | files.keys().forEach(key => {
10 | if (key === './index.js') return
11 | modules[key.replace(/(\.\/|\.js)/g, '')] = files(key).default
12 | })
13 |
14 | export default modules
15 |
--------------------------------------------------------------------------------
/src/renderer/store/modules/login.js:
--------------------------------------------------------------------------------
1 |
2 | import {getCookie, setCookie} from '../../tool/function';
3 |
4 | const state = {
5 | token: getCookie('token') ? getCookie('token') : '',
6 | avatar: require('../../assets/default_user.jpg')
7 | };
8 |
9 | const mutations = {
10 | login_update_avatar(state, value) { state.avatar = value; },
11 | login_update_token(state, value) {
12 | setCookie('token', value);
13 | state.token = value;
14 | }
15 | };
16 |
17 | const actions = {};
18 |
19 | export default {
20 | state,
21 | mutations,
22 | actions
23 | }
--------------------------------------------------------------------------------
/src/renderer/store/modules/main.js:
--------------------------------------------------------------------------------
1 |
2 | const state = {
3 | data: {comment: {items: []}},
4 | user: {}
5 | };
6 |
7 | const mutations = {
8 | main_update_data(state, value) { state.data = value; },
9 | main_update_user(state, value) { state.user = value; }
10 | };
11 |
12 | const actions = {};
13 |
14 | export default {
15 | state,
16 | mutations,
17 | actions
18 | }
--------------------------------------------------------------------------------
/src/renderer/store/modules/music.js:
--------------------------------------------------------------------------------
1 |
2 | const state = {
3 | list: {
4 | items: []
5 | },
6 | item: {},
7 | play_status: {
8 | is_play: false,
9 | duration: 0,
10 | progress: 0,
11 | volume: 0,
12 | leftTime: 0,
13 | repeat_type: 'cycle'
14 | }
15 | };
16 |
17 | const mutations = {
18 | music_update_item(state, value) { state.item = value; },
19 | music_update_list(state, value) { state.list = value; },
20 | music_update_items(state, value) { state.list.items = value; },
21 |
22 | music_update_is_play(state, value) { state.play_status.is_play = value; },
23 | music_update_duration(state, value) { state.play_status.duration = value; },
24 | music_update_progress(state, value) { state.play_status.progress = value; },
25 | music_update_volume(state, value) { state.play_status.volume = value; },
26 | music_update_leftTime(state, value) { state.play_status.leftTime = value; },
27 | music_update_repeat(state, value) { state.play_status.repeat_type = value; }
28 |
29 | };
30 |
31 | const actions = {};
32 |
33 | export default {
34 | state,
35 | mutations,
36 | actions
37 | }
--------------------------------------------------------------------------------
/src/renderer/store/modules/note.js:
--------------------------------------------------------------------------------
1 |
2 | const state = {
3 | list: {items: []},
4 | detail: {}
5 | };
6 |
7 | const mutations = {
8 | note_update_list(state, value) { state.list = value; },
9 | note_update_detail(state, value) { state.detail = value; }
10 | };
11 |
12 | const actions = {};
13 |
14 | export default {
15 | state,
16 | mutations,
17 | actions
18 | }
--------------------------------------------------------------------------------
/src/renderer/store/modules/video.js:
--------------------------------------------------------------------------------
1 |
2 | const state = {
3 | data: {items: []},
4 | detail: {info: {}, btn: {}},
5 | push: {
6 | up_config: {},
7 | lists: {}
8 | }
9 | };
10 |
11 | const mutations = {
12 | video_update_data(state, value) { state.data = value; },
13 | video_update_detail(state, value) { state.detail = value; },
14 | video_update_up_config(state, value) { state.push.up_config = value; },
15 | video_update_lists(state, value) { state.push.lists = value; }
16 | };
17 |
18 | const actions = {};
19 |
20 | export default {
21 | state,
22 | mutations,
23 | actions
24 | }
--------------------------------------------------------------------------------
/src/renderer/tool/config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | host: 'http://api.bkybj.com',
3 | qiniuPath: 'http://static.bkybj.com/'
4 | }
5 |
--------------------------------------------------------------------------------
/src/renderer/tool/cookie.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EliseCaro/eibk_client/35fc05e7100f7934f990d21f7c0ee420e6d774fc/src/renderer/tool/cookie.js
--------------------------------------------------------------------------------
/src/renderer/tool/datastore.js:
--------------------------------------------------------------------------------
1 | import Datastore from 'nedb'
2 | import path from 'path'
3 | import { remote } from 'electron'
4 |
5 | export default {
6 | download: new Datastore({
7 | autoload: true,
8 | filename: path.join(remote.app.getPath('userData'), '/download.db')
9 | })
10 | }
--------------------------------------------------------------------------------
/src/renderer/tool/download.js:
--------------------------------------------------------------------------------
1 | import { ipcRenderer, remote } from 'electron';
2 | import db from './datastore';
3 | let download = {
4 | /**
5 | * msg
6 | */
7 | message: '',
8 | /**
9 | * 初始化
10 | * @param path
11 | * @returns {boolean}
12 | */
13 | init: function (path) {
14 | if (!path) {
15 | this.message = '下载地址不合法!!!';
16 | return false;
17 | }
18 | ipcRenderer.send('download', { 'path': path, 'savePath': this.savePath() });
19 | ipcRenderer.on('dwo', function(event, arg) {
20 | console.log(arg);
21 | /* if (arg) {
22 | switch (arg.Type) {
23 | case 'updated':
24 | dowload.updated(arg);
25 | break;
26 | case 'done':
27 | dowload.done(arg);
28 | break;
29 | }
30 | } */
31 | });
32 | },
33 | /**
34 | * 下载中处理
35 | */
36 | updated: function (o) {
37 | db.dow.findOne({
38 | ETag: o.ETag,
39 | Filename: o.Filename
40 | }, (_, ret) => {
41 | if (ret) {
42 | db.dow.update({
43 | ETag: o.ETag,
44 | Filename: o.Filename
45 | }, {$set: o});
46 | } else {
47 | db.dow.insert(o);
48 | }
49 | });
50 | },
51 | /**
52 | * 下载完成或失败处理
53 | */
54 | done: function (o) {
55 | db.dow.update({
56 | ETag: o.ETag,
57 | Filename: o.Filename
58 | }, {$set: {
59 | 'Type': o.Type,
60 | 'State': o.State
61 | }}, (_, ret) => {
62 | if (ret) {
63 | console.log(o.Filename + '下载完成!!!');
64 | }
65 | });
66 | },
67 | /**
68 | * 获取保存路径
69 | */
70 | savePath: function () {
71 | let savePath = localStorage.getItem('dowSavePath');
72 | if (!savePath || this.readdir(savePath)) {
73 | remote.dialog.showOpenDialog({
74 | defaultPath: '../',
75 | properties: ['openDirectory'],
76 | filters: [{name: 'All', extensions: ['*']}]
77 | }, function (res) {
78 | savePath = res[0];
79 | localStorage.setItem('dowSavePath', savePath);
80 | return localStorage.getItem('dowSavePath');
81 | });
82 | } else {
83 | return savePath;
84 | }
85 | },
86 | /**
87 | * 暂停下载
88 | */
89 | pause: function(ETag) {
90 | ipcRenderer.send('download_pause', {'ETag': ETag});
91 | },
92 | /**
93 | * 恢复暂停的下载
94 | */
95 | resume: function (ETag) {
96 | ipcRenderer.send('download_resume', {'ETag': ETag});
97 | },
98 | /**
99 | * 取消下载不可恢复
100 | */
101 | cancel: function (ETag) {
102 | console.log('download_cancel');
103 | ipcRenderer.send('download_cancel', {'ETag': ETag});
104 | },
105 | /**
106 | * 读取文件夹
107 | */
108 | readdir: function (path) {
109 | require('fs').readdir(path, function(err, files) {
110 | if (err) {
111 | return false;
112 | } else {
113 | return files;
114 | }
115 | });
116 | }
117 |
118 | };
119 | export default download;
--------------------------------------------------------------------------------
/src/renderer/tool/function.js:
--------------------------------------------------------------------------------
1 |
2 | import { Notice } from 'iview';
3 | import config from './config'
4 |
5 | export function ProcessingPic(name, string) {
6 | if (!name) {
7 | return require('../assets/error_video.jpg');
8 | }
9 | if (string) {
10 | return config.qiniuPath + name + string;
11 | } else {
12 | return config.qiniuPath + name
13 | }
14 | }
15 |
16 | export function getImg(src, maxWidth, maxHeight, func) {
17 | let image = new Image();
18 | image.src = src;
19 | image.onload = function () {
20 | // 用于设定图片的宽度和高度
21 | var tempWidth;
22 | var tempHeight;
23 | // 原图片宽高比例 大于 指定的宽高比例,这就说明了原图片的宽度必然 > 高度
24 | if (image.width / image.height >= maxWidth / maxHeight) {
25 | if (image.width > maxWidth) {
26 | tempWidth = maxWidth;
27 | // 按原图片的比例进行缩放
28 | tempHeight = (image.height * maxWidth) / image.width;
29 | } else {
30 | // 按原图片的大小进行缩放
31 | tempWidth = image.width;
32 | tempHeight = image.height;
33 | }
34 | } else { // 原图片的高度必然 > 宽度
35 | if (image.height > maxHeight) {
36 | tempHeight = maxHeight;
37 | // 按原图片的比例进行缩放
38 | tempWidth = (image.width * maxHeight) / image.height;
39 | } else {
40 | // 按原图片的大小进行缩放
41 | tempWidth = image.width;
42 | tempHeight = image.height;
43 | }
44 | }
45 | func({
46 | width: tempWidth,
47 | height: tempHeight
48 | })
49 | }
50 | }
51 |
52 | export function randomRange(under, over) {
53 | return Math.ceil(Math.random() * (over - under) + under);
54 | }
55 |
56 | export function onError(name) {
57 | let path = require('../assets/' + name);
58 | let str = 'this.src="' + path + '"';
59 | return str
60 | }
61 | export function formatDate(now, fmt) {
62 | var date = new Date(parseInt(now + '000'));
63 | var Y = date.getFullYear() + '-';
64 | var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
65 | var D = date.getDate() + ' ';
66 | var h = date.getHours() + ':';
67 | var m = date.getMinutes() + ':';
68 | var s = date.getSeconds();
69 | return (fmt === 'Y-m-d') ? Y + M + D : Y + M + D + h + m + s;
70 | }
71 |
72 | export function NoticeInfo(title, content) {
73 | Notice.info({
74 | title: title || '',
75 | desc: content || ''
76 | });
77 | }
78 |
79 | export function NoticeWarning(title, content) {
80 | Notice.warning({
81 | title: title || '',
82 | desc: content || ''
83 | });
84 | }
85 |
86 | export function NoticeSuccess(title, content) {
87 | Notice.success({
88 | title: title || '',
89 | desc: content || ''
90 | });
91 | }
92 |
93 | export function NoticeError(title, content) {
94 | Notice.error({
95 | title: title || '',
96 | desc: content || ''
97 | });
98 | }
99 |
100 | export function getCookie(key) {
101 | return localStorage.getItem(key);
102 | }
103 |
104 | export function setCookie(key, val) {
105 | return localStorage.setItem(key, val);
106 | }
107 |
108 | export function deleteCookie(key) {
109 | return localStorage.removeItem(key)
110 | }
111 |
--------------------------------------------------------------------------------
/src/renderer/tool/http.js:
--------------------------------------------------------------------------------
1 | import axios from 'axios';
2 | import Qs from 'qs';
3 | import {LoadingBar} from 'iview';
4 | import config from './config'
5 | import router from '../router'
6 | import store from '../store'
7 |
8 | axios.defaults.timeout = 50000;
9 | axios.defaults.baseURL = config.host;
10 | LoadingBar.config({
11 | color: '#0EAE81',
12 | failedColor: '#0EAE81',
13 | height: 2
14 | });
15 | axios.interceptors.request.use(
16 | config => {
17 | config.data = Qs.stringify(config.data);
18 | config.headers = {
19 | 'Content-Type': 'application/x-www-form-urlencoded'
20 | };
21 | config.params = config.params || {};
22 | if (store.state.login.token) {
23 | config.params = {'token': store.state.login.token}
24 | }
25 | config.params.is_client = 1;
26 | return config;
27 | }
28 | );
29 |
30 | axios.interceptors.response.use(
31 | response => {
32 | if (parseInt(response.data.code) === 2) {
33 | store.commit('login_update_token', '');
34 | router.push({
35 | path: '/sing/login',
36 | querry: {redirect: router.currentRoute.fullPath}
37 | })
38 | }
39 | return response;
40 | },
41 | error => {
42 | return Promise.reject(error)
43 | }
44 | );
45 |
46 | /**
47 | * 封装get方法
48 | * @param url
49 | * @param data
50 | * @returns {Promise}
51 | */
52 |
53 | export function fetch(url, params = {}) {
54 | return new Promise((resolve, reject) => {
55 | axios.get(url, {
56 | params: params
57 | })
58 | .then(response => {
59 | resolve(response.data);
60 | })
61 | .catch(err => {
62 | reject(err)
63 | })
64 | })
65 | }
66 |
67 | /**
68 | * 封装post请求
69 | * @param url
70 | * @param data
71 | * @returns {Promise}
72 | */
73 |
74 | export function post(url, data = {}) {
75 | return new Promise((resolve, reject) => {
76 | LoadingBar.start();
77 | axios.post(url, data).then(response => {
78 | LoadingBar.finish();
79 | resolve(response.data);
80 | LoadingBar.error();
81 | }, err => {
82 | reject(err)
83 | })
84 | })
85 | }
86 |
87 | /**
88 | * 封装patch请求
89 | * @param url
90 | * @param data
91 | * @returns {Promise}
92 | */
93 |
94 | export function patch(url, data = {}) {
95 | return new Promise((resolve, reject) => {
96 | axios.patch(url, data)
97 | .then(response => {
98 | resolve(response.data);
99 | }, err => {
100 | reject(err)
101 | })
102 | })
103 | }
104 |
105 | /**
106 | * 封装put请求
107 | * @param url
108 | * @param data
109 | * @returns {Promise}
110 | */
111 |
112 | export function put(url, data = {}) {
113 | return new Promise((resolve, reject) => {
114 | axios.put(url, data)
115 | .then(response => {
116 | resolve(response.data);
117 | }, err => {
118 | reject(err)
119 | })
120 | })
121 | }
--------------------------------------------------------------------------------
/static/css/app.scss:
--------------------------------------------------------------------------------
1 | #app{
2 | height: 100%;
3 | font-family: "PingFang SC","Hiragino Sans GB","Helvetica Neue",Helvetica,"Microsoft YaHei","微软雅黑",Arial,sans-serif;
4 | background-position: center;
5 | background-size: cover;
6 | background-repeat: no-repeat;
7 | background-image: url("~@/assets/userbg.png");
8 | }
9 | *{
10 | -moz-user-select: none; /*mozilar*/
11 | -webkit-user-select: none; /*webkit*/
12 | -ms-user-select: none; /*IE*/
13 | user-select: none;
14 | }
15 | .ivu-loading-bar{
16 | /* top: 63px;*/
17 | }
18 |
19 | .app_bg{
20 | position: absolute;
21 | width: 100%;
22 | height:800px ;
23 | background-position: center;
24 | background-size: cover;
25 | background-repeat: no-repeat;
26 | }
27 | /**
28 | 主体结构
29 | */
30 | .app_left{
31 | height: 800px;
32 | background-color: rgba(19,71,111,.8);
33 | width: 240px;
34 | }
35 |
36 | .app_header{
37 | background-color: rgba(19,71,111,.6);
38 | width: 1040px;
39 | padding: 0;
40 | -webkit-app-region: drag;
41 | }
42 | .app_content{
43 | width: 1040px;
44 | background: none;
45 | }
46 | .app_right{
47 | position: absolute;
48 | right: 0;
49 | background: #ffffff;
50 | border-left: 1px solid #eeeeee;
51 | /* background: -webkit-linear-gradient(left,#eff,#fff);
52 | background: -o-linear-gradient(right,#eff,#fff);
53 | background: linear-gradient(to right,#eff,#fff);*/
54 | height: 800px;
55 | .app_right_tables{
56 | .ivu-tabs-bar{
57 | border-bottom: 0;
58 | margin-bottom: 0;
59 | }
60 | .ivu-tabs-tab{
61 | width: 115px;
62 | margin-right: 0 !important;
63 | border: 0 !important;
64 | text-align: center;
65 | border-radius: 0 !important;
66 | }
67 | .ivu-tabs-tab-active{
68 | background: #3363A4 !important;
69 | color: #ffffff !important;
70 | }
71 | .app_right_tables_dow_init:hover{
72 | /* background: #DEF2FE;*/
73 | background: -webkit-linear-gradient(left,#DEF2FE,#fff);
74 | background: -o-linear-gradient(right,#DEF2FE,#fff);
75 | background: linear-gradient(to right,#DEF2FE,#fff);
76 | }
77 | .app_right_tables_dow_init{
78 | /*border-bottom:1px solid #ddd;*/
79 | cursor: pointer;
80 | padding: 5px 8px;
81 | overflow: hidden;
82 | .app_right_tables_dow_init_text{
83 | float: left;
84 | font-size: 11px;
85 | line-height: 18px;
86 | width: 78%;
87 | }
88 | .app_right_tables_dow_init_i{
89 | float: right;
90 | width: 47px;
91 | line-height: 20px;
92 | text-align: center;
93 | i{
94 | padding-top: 4px;
95 | padding-right: 5px;
96 | cursor: pointer;
97 | }
98 | :nth-child(1){
99 | padding-top: 0;
100 | margin-top: -5px;
101 | }
102 | }
103 |
104 | }
105 | }
106 | }
107 | /**
108 | end
109 | */
110 |
111 | /**
112 | 头部四个按钮
113 | */
114 | .app_left_top{
115 | height: 64px;
116 | padding: 0 20px;
117 | background: rgba(18,39,60,.5);
118 | -webkit-app-region: drag;
119 | }
120 | .app_left_top_init{
121 | line-height: 64px;
122 | text-align: center;
123 | color: #fff;
124 | font-size: 30px;
125 | -webkit-app-region: no-drag;
126 | }
127 | .app_left_top_init .ivu-avatar{
128 | background: none;
129 | border:1px solid #ffffff;
130 | font-size: 17px;
131 | margin-top: -6.5px;
132 | width: 32px;
133 | height: 32px;
134 | line-height: 32px;
135 | cursor: pointer;
136 | }
137 | .app_left_top_init .ivu-avatar i{
138 | margin-top: -8px;
139 | }
140 |
141 | /**
142 | end
143 | */
144 |
145 | /**
146 | 头像部分
147 | */
148 | .up_upload_avatar_obj{
149 | width: 100px;
150 | height: 150px;
151 | margin: auto;
152 | cursor: pointer;
153 | }
154 | .app_avatar_box span{
155 | width: 100px;
156 | height: 100px;
157 | border-radius: 50%;
158 | margin: auto;
159 | display: block;
160 | margin-top: 50px;
161 | }
162 | .app_avatar_box_nickname{
163 | margin-top: 8px;
164 | line-height: 30px;
165 | font-size: 16px;
166 | color: #ffffff;
167 | text-align: center;
168 | padding-bottom: 18px;
169 | border-bottom: 1px solid #3E628D;
170 | }
171 | /**
172 | end
173 | */
174 |
175 | /**
176 | 菜单样式
177 | */
178 | .app_menu_box{
179 | background: none;
180 | z-index: 1;
181 | }
182 | .app_menu_box .ivu-menu{
183 | color: #ffffff;
184 | }
185 | .app_menu_box.ivu-menu-vertical .ivu-menu-item{
186 | border-bottom:1px solid #3E628D;
187 | }
188 | .app_menu_box.ivu-menu-vertical .ivu-menu-submenu-title{
189 | border-bottom:1px solid #3E628D;
190 | }
191 | .app_menu_box.ivu-menu-vertical.ivu-menu-light:after{
192 | width: 0;
193 | }
194 | .app_menu_box.ivu-menu-vertical .ivu-menu-item-active:not(.ivu-menu-submenu) {
195 | color: #07A285;
196 | border-right: 2px solid #07A285;
197 | z-index: 2;
198 | background: rgba(0,0,0,0.2);
199 | }
200 | .app_menu_box.ivu-menu-vertical .ivu-menu-item:hover, .ivu-menu-vertical .ivu-menu-submenu-title:hover {
201 | background: none;
202 | color: #07A285;
203 | }
204 | /**
205 | end
206 | */
207 |
208 |
209 | /**
210 | 头部右边开始
211 | */
212 | .index_input{
213 | width: 250px;
214 | float: left;
215 | margin: 15px 0 0 15px;
216 | -webkit-app-region: no-drag;
217 | }
218 | .index_top_dow_icon{
219 | float: left;
220 | -webkit-app-region: no-drag;
221 | width: 81px;
222 | height: 100%;
223 | margin-left:104px;
224 | font-size: 25px;
225 | text-align: center;
226 | color: #ffffff;
227 | }
228 | .index_input input{
229 | background: rgba(18,39,60,.5);
230 | border: 0;
231 | color: #00a988;
232 | outline:none !important;
233 | }
234 | .index_input .ivu-input:focus,.index_input .ivu-input:hover{
235 | border: 0 !important;
236 | -webkit-box-shadow:none;
237 | box-shadow:none;
238 | }
239 | .index_input .ivu-btn:focus,.index_input .ivu-btn:hover{
240 | -webkit-box-shadow:none;
241 | box-shadow:none;
242 | }
243 | .index_input .ivu-input-group-prepend{
244 | background: rgba(18,39,60,.5);
245 | border: 0;
246 | border-radius: 14px;
247 | }
248 | .index_input .ivu-input-group-append{
249 | background: rgba(18,39,60,.5);
250 | border: 0;
251 | color: #00a988;
252 | border-radius: 14px;
253 | }
254 | .index_input .ivu-input-group-append button{
255 | font-size: 15px;
256 | }
257 | .index_input .ivu-input-group-prepend .ivu-select-placeholder,.index_input .ivu-input-group-prepend .ivu-select-arrow,.index_input .ivu-input-group-prepend .ivu-select-selected-value{
258 | color: #00a988;
259 | }
260 | .index_header_right{
261 | float: right;
262 | height: 15px;
263 | margin-top: 23.5px;
264 | margin-right: 17px;
265 | width: 45px;
266 | overflow: hidden;
267 | color: #ffffff;
268 | line-height: 16px;
269 | text-align: center;
270 | font-size: 9px;
271 | }
272 | .index_header_right_close{
273 | background: #C81212;
274 | border-radius: 50%;
275 | width: 15px;
276 | height: 15px;
277 | float: left;
278 | cursor: pointer;
279 | -webkit-app-region: no-drag;
280 | }
281 | .index_header_right_mini{
282 | background: #0eae81;
283 | border-radius: 50%;
284 | width: 15px;
285 | height: 15px;
286 | float: left;
287 | margin-right: 15px;
288 | cursor: pointer;
289 | font-weight: 700;
290 | -webkit-app-region: no-drag;
291 | }
292 |
293 |
294 | .music-volume-container:hover .volume-high-progress{
295 | opacity: 1;
296 | }
297 |
298 |
299 | .music_mini{
300 | float: left;
301 | height: 64px;
302 | color: #ffffff;
303 | text-align: center;
304 | font-size: 20px;
305 | margin-left: 20px;
306 | -webkit-animation: fadeinL 0.5s ease-in forwards;
307 | -webkit-app-region: no-drag;
308 | margin-right: 180px;
309 |
310 | i{
311 | cursor: pointer;
312 | }
313 | .music_mini_p{
314 | float: left;
315 | line-height: 64px;
316 | }
317 | .music_mini_p_cover{
318 | float: left;
319 | margin-top: 7px;
320 | margin-left: 10px;
321 | background-size: cover;
322 | overflow: hidden;
323 | border-radius: 50%;
324 | }
325 | .music_mini_n{
326 | float: left;
327 | margin-left: 10px;
328 | line-height: 64px;
329 | }
330 | .music_mini_p_right{
331 | height: 64px;
332 | float: left;
333 | margin-left: 20px;
334 | width: 200px;
335 | text-align: left;
336 | .music_mini_p_right_title{
337 | line-height: 17px;
338 | margin-top: 10px;
339 | font-size: 14px;
340 | -o-text-overflow: ellipsis;
341 | text-overflow: ellipsis;
342 | white-space: nowrap;
343 | display: block;
344 |
345 | }
346 | .music_mini_p_right_icon{
347 | position: relative;
348 | .music-volume-container{
349 | position: absolute;
350 | top: 4px;
351 | left: 0;
352 | cursor: pointer;
353 | }
354 | line-height: 27px;
355 | i{
356 | font-size: 18px;
357 | margin-right: 5px;
358 | }
359 | i:nth-child(2){
360 | margin-left: 76px;
361 | }
362 | i:nth-child(3){
363 | margin-left: 76px;
364 | }
365 | .icon {
366 | display: inline-block;
367 | width: 18px;
368 | height: 18px;
369 | background-size:cover;
370 | background-position: center;
371 | margin-left: 3px;
372 | }
373 | .icon.repeat-cycle {
374 | background-image: url(~@/assets/icon_repeat-cycle.gif);
375 | }
376 | .icon.repeat-once {
377 | background-image: url(~@/assets/icon_repeat-once.png);
378 | }
379 | .icon.repeat-random {
380 | background-image: url(~@/assets/icon_repeat-random.png);
381 | }
382 | }
383 | .music_mini_p_right_progress{
384 | line-height: 3px;
385 | .music_mini-high-progress{
386 | cursor: pointer;
387 | }
388 | .ivu-progress-bg{
389 | background: #0eae81;
390 | }
391 | }
392 | }
393 | }
394 |
395 |
396 | /**主题动画*/
397 | .fade-enter-active, .fade-leave-active {transition: opacity .2s;}
398 | .fade-enter, .fade-leave-to{opacity: 0;}
399 | /**往下掉动画*/
400 | .bounceInDown-enter-active, .bounceInDown-leave-active {-webkit-animation: bounceinT 1s ease-in forwards;}
401 | .bounceInDown-enter, .bounceInDown-leave-to{opacity: 0;}
402 | @keyframes bounceInDown{
403 | 0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}
404 | 60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}
405 | 75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}
406 | 90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}
407 | 100%{-webkit-transform:none;transform:none}
408 | }
409 | /* 弹入-从左 */
410 | @-webkit-keyframes bounceinL{
411 | 0%{opacity:0;-webkit-transform:translateX(-100px);}
412 | 60%{opacity:1;-webkit-transform:translateX(30px);}
413 | 80%{-webkit-transform:translateX(-10px);}
414 | 100%{-webkit-transform:translateX(0);}
415 | }
416 | @-moz-keyframes bounceinL{
417 | 0%{opacity:0;-moz-transform:translateX(-100px);}
418 | 60%{opacity:1;-moz-transform:translateX(30px);}
419 | 80%{-moz-transform:translateX(-10px);}
420 | 100%{-moz-transform:translateX(0);}
421 | }
422 | @-ms-keyframes bounceinL{
423 | 0%{opacity:0;-ms-transform:translateX(-100px);}
424 | 60%{opacity:1;-ms-transform:translateX(30px);}
425 | 80%{-ms-transform:translateX(-10px);}
426 | 100%{-ms-transform:translateX(0);}
427 | }
428 | @keyframes bounceinL{
429 | 0%{opacity:0;transform:translateX(-100px);}
430 | 60%{opacity:1;transform:translateX(30px);}
431 | 80%{transform:translateX(-10px);}
432 | 100%{transform:translateX(0);}
433 | }
434 | /* 弹入-从上 */
435 | @-webkit-keyframes bounceinT{
436 | 0%{opacity:0;-webkit-transform:translateY(-100px);}
437 | 60%{opacity:1;-webkit-transform:translateY(30px);}
438 | 80%{-webkit-transform:translateY(-10px);}
439 | 100%{-webkit-transform:translateY(0);}
440 | }
441 | @-moz-keyframes bounceinT{
442 | 0%{opacity:0;-moz-transform:translateY(-100px);}
443 | 60%{opacity:1;-moz-transform:translateY(30px);}
444 | 80%{-moz-transform:translateY(-10px);}
445 | 100%{-moz-transform:translateY(0);}
446 | }
447 | @-ms-keyframes bounceinT{
448 | 0%{opacity:0;-ms-transform:translateY(-100px);}
449 | 60%{opacity:1;-ms-transform:translateY(30px);}
450 | 80%{-ms-transform:translateY(-10px);}
451 | 100%{-ms-transform:translateY(0);}
452 | }
453 | @keyframes bounceinT{
454 | 0%{opacity:0;transform:translateY(-100px);}
455 | 60%{opacity:1;transform:translateY(30px);}
456 | 80%{transform:translateY(-10px);}
457 | 100%{transform:translateY(0);}
458 | }
459 | /* 淡出-向左 */
460 | @-webkit-keyframes fadeinL{
461 | 0%{opacity:0;-webkit-transform:translateX(-100px);}
462 | 100%{opacity:1;-webkit-transform:translateX(0);}
463 | }
464 | @-moz-keyframes fadeinL{
465 | 0%{opacity:0;-moz-transform:translateX(-100px);}
466 | 100%{opacity:1;-moz-transform:translateX(0);}
467 | }
468 | @-ms-keyframes fadeinL{
469 | 0%{opacity:0;-ms-transform:translateX(-100px);}
470 | 100%{opacity:1;-ms-transform:translateX(0);}
471 | }
472 | @keyframes fadeinL{
473 | 0%{opacity:0;transform:translateX(-100px);}
474 | 100%{opacity:1;transform:translateX(0);}
475 | }
476 | /**从右到左*/
477 | .slide-fade-enter-active {transition: all .2s ease;}
478 | .slide-fade-leave-active {transition: all .2s ease;}
479 | .slide-fade-enter, .slide-fade-leave-to{transform: translateX(230px);opacity: 1;}
480 |
481 |
482 |
483 |
--------------------------------------------------------------------------------
/static/css/file/index.scss:
--------------------------------------------------------------------------------
1 | .file_index{
2 | background: #fff;
3 | border-radius: 5px;
4 | margin: 15px;
5 | padding: 12px;
6 | padding-top: 5px;
7 | height: 705px;
8 | }
9 |
10 | .file_index_list_box .ivu-col-span-4{
11 | padding-top: .9vw;
12 | cursor: pointer;
13 | }
14 | .file_index_list_box .ivu-col-span-4 .ivu-card{
15 | height: 135px;
16 | }
17 | .file_index_list_page{
18 | padding:15px;
19 | text-align: center;
20 | position: absolute;
21 | width: 100%;
22 | font-size: 12px;
23 | }
24 | .file_index_list_init_icon{
25 | font-size: 50px;
26 | margin-bottom: 10px;
27 | }
28 | .file_index_list_init_font{
29 | font-size: 12px;
30 | line-height: 18px;
31 | }
32 |
33 | .file_up_center_modal{
34 | display: flex;
35 | align-items: center;
36 | justify-content: center;
37 | .file_up_center_modal_body_left{
38 | height: 100%;
39 | cursor: pointer;
40 | background: -webkit-linear-gradient(#49e6fd,#4fabf7);
41 | background: -o-linear-gradient(#49e6fd,#4fabf7);
42 | background: -webkit-gradient(linear,left top,left bottom,from(#49e6fd),to(#4fabf7));
43 | background: linear-gradient(#49e6fd,#4fabf7);
44 | color: #ffffff;
45 | .file_up_center_modal_body_left_upload_file,.file_up_center_modal_body_left_upload_file .ivu-upload{
46 | background: none;
47 | }
48 | }
49 | .file_up_center_modal_body_right {
50 | padding-left: 25px;
51 | textarea{
52 | border-radius: 4px;
53 | height: 5vw;
54 | background: hsla(0,0%,100%,0);
55 | outline: none;
56 | resize: none;
57 | margin-top: 1vw;
58 | width: 90%;
59 | }
60 | .file-mag-select_open {
61 | border-radius: 4px;
62 | padding-top: 9px;
63 | margin-bottom: 17px;
64 | width: 90%;
65 | }
66 | .file-mag-select_title {
67 | line-height: 26px;
68 | text-align: left;
69 | color: #888;
70 | }
71 |
72 |
73 | }
74 |
75 | .ivu-modal{
76 | width: 600px !important;
77 | top: 0;
78 | }
79 | .file_up_center_modal_body_left_btn{
80 | width: 255px;
81 | height: 70px;
82 | border:1px solid #fff;
83 | margin: 73px auto;
84 | margin-top: 65px;
85 | margin-left: 21px;
86 | border-radius: 3px;
87 | padding: 5px 0;
88 | i{
89 | display: block;
90 | font-size: 55px;
91 | margin: auto;
92 | float: left;
93 | padding-top: 0;
94 | padding-left: 24px;
95 | }
96 | div{
97 | float: right;
98 | width: 180px;
99 | h3{
100 | font-size: 20px;
101 | line-height: 35px;
102 | text-align: center;
103 | }
104 | p{
105 | font-size: 13px;
106 | line-height: 22px;
107 | text-align: center;
108 | }
109 | }
110 | }
111 | .ivu-modal-body{
112 | padding: 0;
113 | width: 600px;
114 | height: 210px;
115 | }
116 | .ivu-modal-content{
117 | border-radius: 3px;
118 | overflow: hidden;
119 | }
120 | .ivu-modal-footer{
121 | display: none;
122 | }
123 | }
124 |
125 | .file_index_list_box_card{
126 | position: relative;
127 | .file_index_list_box_card_fix{
128 | position: absolute;
129 | background: #ffffff;
130 | top: 0;
131 | left: 0;
132 | height: 133px;
133 | width: 100%;
134 | opacity:0;
135 | display: block;
136 | transition: opacity 0.3s linear;
137 | padding-top: 35px;
138 | p{
139 | text-align: center;
140 | line-height: 25px;
141 | margin-bottom: 8px;
142 | font-size: 12px;
143 | button{
144 | padding: 3px 15px;
145 | background: #ffffff;
146 | }
147 | }
148 | }
149 | .ivu-card-body:hover .file_index_list_box_card_fix{
150 | opacity:1;
151 | }
152 | }
153 |
154 | /**
155 | 编辑box
156 | */
157 | .file_edit_center_modal{
158 | display: flex;
159 | align-items: center;
160 | justify-content: center;
161 | .file_edit_center_modal_body{
162 | height: 240px;
163 | padding: 15px;
164 | textarea{
165 | border-radius: 4px;
166 | background: hsla(0,0%,100%,0);
167 | outline: none;
168 | resize: none;
169 | width: 100%;
170 | height:75px;
171 |
172 | }
173 | input{
174 | margin: 10px auto;
175 | }
176 | }
177 | .ivu-modal{
178 | top: 0;
179 | width: 380px !important;
180 | }
181 | .ivu-modal-body{
182 | padding: 0;
183 | }
184 | .ivu-modal-footer{
185 | display: none;
186 | }
187 | }
--------------------------------------------------------------------------------
/static/css/images/detail.scss:
--------------------------------------------------------------------------------
1 | .images_detail{
2 | margin: 15px;
3 | height: 705px;
4 | }
5 | .images_detail_header{
6 | margin: 0 !important;
7 | }
8 | .images_detail_header_left,.images_detail_header_right{
9 | border-radius: 6px;
10 | height: 228px;
11 | }
12 | .images_detail_header_left{
13 | background-color: #fff;
14 | background-position: 50%;
15 | background-size: cover;
16 | padding: 0 !important;
17 | }
18 | .images_detail_header_left h1,.images_detail_header_left h2{
19 | font-family: \\534E\6587\5B8B\4F53;
20 | color: #fff;
21 | font-weight: 100;
22 | text-align: center;
23 | }
24 | .images_detail_header_left h1{
25 | font-size: 33px;
26 | margin-top: 30px;
27 | }
28 | .images_detail_header_left h2{
29 | font-size: 25px;
30 | margin-top: 10px;
31 | margin-bottom: 10px;
32 | }
33 | .icon_list{
34 | text-align: center;
35 | .ivu-poptip-body{
36 | text-align: left;
37 | }
38 | }
39 | .icon_list i{
40 | margin-left: 5px;
41 | cursor: pointer;
42 | color: #fff;
43 | margin-bottom: 10px;
44 | font-size: 23px;
45 | }
46 | .icon_list i:nth-child(1){
47 | margin-left: 0;
48 | }
49 | .images_detail_header_left p{
50 | color: #fff;
51 | font-size: 12px;
52 | text-align: center;
53 | padding: 0 15px;
54 | line-height: 18px;
55 | }
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 | .images_detail_header_right{
67 | margin-left: 10px;
68 | background-color: rgba(255, 255, 255, 0.9);
69 | border-radius: 6px;
70 | padding: 10px;
71 | padding-top: 5px;
72 | padding-right: 0;
73 | padding-left: 9px;
74 | }
75 | .images_detail_header_right .ivu-upload-drag{
76 | background-color: #fbfbfb;
77 | border: 1px dashed #d9d9d9;
78 | }
79 | .images_detail_header_right-upload-list{
80 | display: inline-block;
81 | width: 92px;
82 | height: 100px;
83 | text-align: center;
84 | line-height: 60px;
85 | /*border: 1px solid transparent;*/
86 | border-radius: 4px;
87 | overflow: hidden;
88 | background: #fff;
89 | position: relative;
90 | margin-right: 10px;
91 | margin-top: 5px;
92 | padding: 6px;
93 | border: 1px solid #d9d9d9;
94 | }
95 | .images_detail_header_right-upload-list:nth-child(6n+6){
96 | margin-right: 0;
97 | }
98 | .images_detail_header_right-upload-list:nth-child(11n+11){
99 | margin-right: 6px;
100 | }
101 | .images_detail_header_right-upload-list img{
102 | width: 100%;
103 | height: 100%;
104 | }
105 | .images_detail_header_right-upload-list-upload-list-cover{
106 | display: none;
107 | position: absolute;
108 | top: 0;
109 | bottom: 0;
110 | left: 0;
111 | right: 0;
112 | background: rgba(0,0,0,.6);
113 | padding-top: 20px;
114 | }
115 | .images_detail_header_right-upload-list:hover .images_detail_header_right-upload-list-upload-list-cover{
116 | display: block;
117 | }
118 | .images_detail_header_right-upload-list-upload-list-cover i{
119 | color: #fff;
120 | font-size: 20px;
121 | cursor: pointer;
122 | margin: 0 2px;
123 | }
124 |
125 |
126 | /**
127 | 下面部分
128 | */
129 | .images_detail_box{
130 | background-color: rgba(255, 255, 255, 0.9);
131 | margin:0;
132 | height: 458px;
133 | border-radius: 6px;
134 | margin-top: 17px;
135 | padding: 10px 13px 0 13px;
136 | }
137 | .images_detail_list_init:hover .images_detail_list_init_foucs{
138 | opacity: 1;
139 | }
140 | .images_detail_list_init{
141 | cursor: pointer;
142 | height: 175px;
143 | margin-top: 10px;
144 | position: relative;
145 | .images_detail_list_init_foucs{
146 | position: absolute;
147 | width: 157px;
148 | margin-left: 4px;
149 | height: 100%;
150 | background: rgba(0, 0, 0, 0.5);
151 | top: 0;
152 | left: 0;
153 | color: #ffffff;
154 | text-align: center;
155 | font-size: 25px;
156 | padding-top: 80px;
157 | opacity:0;
158 | display: block;
159 | transition: opacity 0.3s linear;
160 | i{
161 | margin-right: 5px;
162 | }
163 | i:nth-child(1){
164 | margin-right: 7px;
165 | }
166 | i:nth-child(2){
167 | font-size: 22px;
168 | }
169 | }
170 | }
171 | .images_detail_list_init img{
172 | width: 100%;
173 | height: 100%;
174 | }
175 | .images_detail_list_page{
176 | text-align: center;
177 | position: absolute;
178 | width: 100%;
179 | font-size: 12px;
180 | bottom: 20px;
181 | }
182 |
183 |
184 | .browse_edit_center_modal{
185 | display: flex;
186 | align-items: center;
187 | justify-content: center;
188 | .ivu-modal{
189 | top: 0;
190 | width: auto !important;
191 | }
192 | .browse_edit_center_modal_body:hover .browse_edit_center_modal_btn{
193 | opacity:1;
194 | }
195 | .browse_edit_center_modal_body{
196 | max-height: 650px;
197 | max-width: 960px;
198 | overflow: hidden;
199 | position: relative;
200 | .browse_edit_center_modal_btn{
201 | position: absolute;
202 | top:50%;
203 | width: 100%;
204 | padding: 0 30px;
205 | overflow: hidden;
206 | margin-top: -35px;
207 | opacity:0;
208 | display: block;
209 | transition: opacity 0.3s linear;
210 | i{
211 | font-size: 70px;
212 | color: #ffffff;
213 | cursor: pointer;
214 | }
215 | .l{
216 | float: left;
217 | }
218 | .r{
219 | float: right;
220 | }
221 | }
222 | }
223 | .ivu-modal-body{
224 | padding: 0;
225 | line-height: unset;
226 | }
227 | .ivu-modal-content{
228 | overflow: hidden;
229 | }
230 | .ivu-modal-footer{
231 | display: none;
232 | }
233 | }
234 |
235 | /**
236 | 编辑box
237 | */
238 | .images_edit_center_modal{
239 | display: flex;
240 | align-items: center;
241 | justify-content: center;
242 | .images_edit_center_modal_body{
243 | height: 240px;
244 | padding: 15px;
245 | textarea{
246 | border-radius: 4px;
247 | background: hsla(0,0%,100%,0);
248 | outline: none;
249 | resize: none;
250 | width: 100%;
251 | height:75px;
252 |
253 | }
254 | input{
255 | margin: 10px auto;
256 | }
257 | }
258 | .ivu-modal{
259 | top: 0;
260 | width: 380px !important;
261 | }
262 | .ivu-modal-body{
263 | padding: 0;
264 | }
265 | .ivu-modal-footer{
266 | display: none;
267 | }
268 | }
269 |
--------------------------------------------------------------------------------
/static/css/images/index.scss:
--------------------------------------------------------------------------------
1 | .images_index{
2 | background: #fff;
3 | border-radius: 5px;
4 | margin: 15px;
5 | padding: 12px;
6 | padding-top: 5px;
7 | height: 705px;
8 | }
9 | .images_index_header{
10 | margin-top: 50px;
11 | }
12 | .images_index_header h3{
13 | text-align: center;
14 | font-size: 35px;
15 | font-weight: 100;
16 | }
17 | .images_index_header p {
18 | color: #878787;
19 | font-size: 12px;
20 | text-align: center;
21 | text-indent: 10vw;
22 | line-height: 30px;
23 | }
24 |
25 | .images_index_list_page{
26 | padding:15px;
27 | padding-top: 28px;
28 | text-align: center;
29 | position: absolute;
30 | width: 100%;
31 | font-size: 12px;
32 | }
33 |
34 | .pic-details-image-wrapper{
35 | /* border:1px solid red;*/
36 | position: relative;
37 | width: 94%;
38 | margin: auto;
39 | margin-top: 30px;
40 | }
41 | .pic-details-image-wrapper_init{
42 | height: 231.2px;
43 | position: relative;
44 | cursor: pointer;
45 | }
46 | .pic-details-image-wrapper_init_avt{
47 | display: block;
48 | z-index: 1;
49 | position: absolute;
50 | left: 50%;
51 | top: 50%;
52 | width: 100px;
53 | height: 100px;
54 | margin: -50px 0 0 -50px;
55 | -webkit-border-image: initial;
56 | -o-border-image: initial;
57 | border-image: initial;
58 | overflow: hidden;
59 | }
60 | .pic-details-image-wrapper_init_avt img {
61 | width: 100%;
62 | border-radius: 50%;
63 | border: 2px solid #fff;
64 | height: 100%;
65 | }
66 | .pic-details-image-wrapper_init_bg {
67 | display: block;
68 | height: 100%;
69 | width: 100%;
70 | background-size: cover;
71 | background-position: 50%;
72 | opacity: .25;
73 | }
74 | .pic-details-image-wrapper_init_recommend-infobox {
75 | position: relative;
76 | height: 50%;
77 | width: 100%;
78 | background: #fafafa;
79 | -webkit-box-sizing: border-box;
80 | box-sizing: border-box;
81 | overflow: hidden;
82 | }
83 | .text_left {
84 | text-align: left;
85 | padding: 2px 8px 0 16px;
86 | }
87 | .text_right {
88 | text-align: right;
89 | padding: 2px 16px 0 8px;
90 | }
91 | .pic-details-image-wrapper_init_recommend-data {
92 | font-size: 25px;
93 | color: #aaa;
94 | font-weight: 400;
95 | line-height: 40px;
96 | }
97 | .pic-details-image-wrapper_init_recommend-infobox h2 {
98 | color: rgba(0,0,0,.85);
99 | font-weight: 100;
100 | font-size: 15px;
101 | padding-bottom: 5px;
102 | }
103 | .pic-details-image-wrapper_init_recommend-infobox p{
104 | font-size: 11px;
105 | line-height: 16px;
106 | }
107 | .info-tra-left, .info-tra-right {
108 | z-index: 1;
109 | position: absolute;
110 | width: 14px;
111 | height: 28px;
112 | }
113 | .info-tra-left {
114 | top: 21%;
115 | left: -14px;
116 | background: url(~@/assets/info_tra.svg) no-repeat;
117 | background-position: 0 0;
118 | }
119 | .info-tra-right {
120 | top: 74%;
121 | right: -14px;
122 | background: url(~@/assets/info_tra.svg) no-repeat;
123 | background-position: 0 -51px;
124 | }
125 | .rotateXz90{
126 | -webkit-transform: rotate(90deg);
127 | -moz-transform: rotate(90deg);
128 | -o-transform: rotate(90deg);
129 | -ms-transform: rotate(90deg);
130 | transform: rotate(90deg);
131 | }
132 |
133 | .rotateXz180{
134 | -webkit-transform: rotate(270deg);
135 | -moz-transform: rotate(270deg);
136 | -o-transform: rotate(270deg);
137 | -ms-transform: rotate(270deg);
138 | transform: rotate(270deg);
139 | width: 100%;
140 | height: 100%;
141 | display: block;
142 | }
143 |
144 |
145 | .images_up_center_modal{
146 | display: flex;
147 | align-items: center;
148 | justify-content: center;
149 | .ivu-modal-footer{
150 | display: none;
151 | }
152 | .ivu-modal-body{
153 | padding: 0;
154 | }
155 | .ivu-modal{
156 | width: 490px !important;
157 | top: 0;
158 | }
159 |
160 | .images_up_center_modal_body_left{
161 | height: 180px;
162 | .images_up_center_modal_body_left_btn{
163 | background: -webkit-linear-gradient(#49e6fd,#4fabf7);
164 | background: -o-linear-gradient(#49e6fd,#4fabf7);
165 | background: -webkit-gradient(linear,left top,left bottom,from(#49e6fd),to(#4fabf7));
166 | background: linear-gradient(#49e6fd,#4fabf7);
167 | background-position: center;
168 | background-size: cover;
169 | color: #ffffff;
170 | height:180px;
171 | i{
172 | font-size: 80px;
173 | padding-top: 30px;
174 | }
175 | p{
176 | font-size: 20px;
177 | line-height: 30px;
178 | text-align: center;
179 | }
180 | }
181 | }
182 | .images_up_center_modal_body_right {
183 | padding-left: 15px;
184 | textarea{
185 | border-radius: 4px;
186 | height: 55px;
187 | background: hsla(0,0%,100%,0);
188 | outline: none;
189 | resize: none;
190 | margin-top:8px;
191 | width: 95%;
192 | }
193 | input {
194 | margin-top: 5px;
195 | margin-bottom: 5px;
196 | width: 95%;
197 | }
198 | .ivu-select{
199 | width: 95%;
200 | margin-bottom: 6px;
201 | }
202 | .images-mag-select_title {
203 | line-height: 26px;
204 | text-align: left;
205 | color: #888;
206 | }
207 |
208 |
209 | }
210 | }
--------------------------------------------------------------------------------
/static/css/index/index.scss:
--------------------------------------------------------------------------------
1 | .index_left_title {
2 | background: hsla(0,0%,100%,.6);
3 | text-align: right;
4 | }
5 | .index_left_title .ivu-col-span-6{
6 | padding: 15px 0;
7 | width: 20%;
8 | }
9 | .index_left_title_init {
10 | cursor: pointer;
11 | border-left: 1px solid #fff;
12 | }
13 | .index_left_title .ivu-col-span-6:nth-child(1) .index_left_title_init{
14 | border-left: 0;
15 | }
16 | .index_left_title .index_left_title_init_p1 {
17 | font-size: 40px;
18 | width: 68%;
19 | line-height: 67px;
20 | }
21 | .index_left_title .index_left_title_init_p2 {
22 | color: #00a988;
23 | width: 68%;
24 | font-size: 15px;
25 | margin-top: -8px;
26 | }
27 | /**
28 | 音乐
29 | */
30 | .index_left_music {
31 | background: hsla(0,0%,100%,.6);
32 | width: 95%;
33 | margin: 20px auto;
34 | border-radius: 5px;
35 | border: none;
36 |
37 | }
38 | .index_left_music .ivu-card-body{
39 | padding: 0;
40 | }
41 | .index_user_content_title{
42 | height: 45px;
43 | width: 100%;
44 | border-bottom: 1px solid #cfebf9;
45 | }
46 | .index_user_content_title_span{
47 | line-height: 45px;
48 | text-align: center;
49 | margin-left: 20px;
50 | font-size: 15px;
51 | font-weight: 500;
52 | }
53 | .index_user_content_title_span i{
54 | margin-right: 1px;
55 | font-size: 19px;
56 | }
57 | .index_left_music_box{
58 |
59 | }
60 | .index_left_music_init {
61 | padding: 15px 0;
62 | cursor: pointer;
63 | }
64 | .index_left_music_init img {
65 | display: block;
66 | border-radius: 50%;
67 | width: 80px;
68 | height: 80px;
69 | margin: auto;
70 | }
71 | .index_left_music_init p {
72 | text-align: center;
73 | line-height: 30px;
74 | overflow: hidden;
75 | white-space: nowrap;
76 | text-overflow: ellipsis;
77 | width: 85%;
78 | margin: auto;
79 | }
80 | /**
81 | 相册
82 | */
83 | .index_left_button_box{
84 | width: 95%;
85 | border-radius: 5px;
86 | margin: auto;
87 | overflow: hidden;
88 | }
89 | .index_left_button_box_left{
90 | padding-right: 10px;
91 | }
92 | .index_left_button_box_left_box, .index_left_button_box_right_box {
93 | background: hsla(0,0%,100%,.6);
94 | border-radius: 5px;
95 | overflow: hidden;
96 | }
97 | .index_left_button_photos{
98 |
99 | }
100 | .index_left_button_photos_max {
101 | cursor: pointer;
102 | position: relative;
103 | height: 170px;
104 | }
105 | .index_left_button_photos_max_bg {
106 | display: block;
107 | height: 100%;
108 | width: 100%;
109 | background-size: cover;
110 | background-position: 50%;
111 | opacity: .25;
112 | }
113 | .index_left_button_photos_max_avt {
114 | display: block;
115 | z-index: 1;
116 | position: absolute;
117 | left: 50%;
118 | top: 50%;
119 | width: 6vw;
120 | height: 6vw;
121 | margin: -3vw 0 0 -3vw;
122 | -webkit-border-image: initial;
123 | -o-border-image: initial;
124 | border-image: initial;
125 | overflow: hidden;
126 | }
127 | .index_left_button_photos_max_avt img {
128 | width: 100%;
129 | border-radius: 50%;
130 | border: 2px solid #fff;
131 | height: 100%;
132 | }
133 | .index_left_button_photos_right {
134 | position: relative;
135 | }
136 | .index_left_button_photos_right_top {
137 | padding: 10px 15px;
138 | height: 85px;
139 | background: hsla(0,0%,98%,.7);
140 | }
141 | .index_left_button_photos .ant-row:first-child .index_left_button_photos_right .index_left_button_photos_right_top:nth-child(1), .index_left_button_photos .ant-row:nth-child(2) .index_left_button_photos_right .index_left_button_photos_right_top:first-child {
142 | padding: 20px 15px 0;
143 | }
144 | .index_left_button_photos_right_top p:first-child {
145 | font-size: 1.2rem;
146 | color: #aaa;
147 | font-weight: 100;
148 | line-height: 40px;
149 | }
150 | .index_left_button_photos_right_top p:nth-child(2) {
151 | color: rgba(0,0,0,.85);
152 | font-weight: 100;
153 | font-size: 15px;
154 | padding-bottom: .1vw;
155 | }
156 | .index_left_button_photos_right_top_left_icon {
157 | top: 30%;
158 | left: -14px;
159 | z-index: 1;
160 | position: absolute;
161 | width: 14px;
162 | height: 28px;
163 | background: url(~@/assets/info_tra.svg) no-repeat;
164 | background-position: 0 0;
165 | }
166 | .index_left_button_photos_right_top_list{}
167 | .index_left_button_photos_right_top_list img {
168 | width: 100%;
169 | height: 100%;
170 | display: block;
171 | margin: auto;
172 | }
173 | .index_left_button_photos_right_top_list .ivu-col:nth-child(1) img{
174 | padding-right: 1px;
175 | }
176 | .index_left_button_photos_right_top_list .ivu-col:nth-child(2) img{
177 | padding-left: 1px;
178 | }
179 | /*第二个*/
180 | .index_left_button_photos .ivu-row:nth-child(2) .index_left_button_photos_right {
181 | text-align: right;
182 | }
183 | .index_left_button_photos .ivu-row:nth-child(2) .index_left_button_photos_right .index_left_button_photos_right_top_left_icon {
184 | top: 67%;
185 | right: 0;
186 | left: 180px;
187 | z-index: 1;
188 | position: absolute;
189 | width: 14px;
190 | height: 28px;
191 | background: url(~@/assets/info_tra.svg) no-repeat;
192 | background-position: 0 -51px;
193 | }
194 | /**
195 | 评论
196 | */
197 | .index_left_button_box_right {
198 | padding-left: 10px;
199 | }
200 | .index_comment_init {
201 | width: 100%;
202 | overflow: hidden;
203 | padding: 15px 10px 10px;
204 | border-bottom: 1px solid #fff;
205 | }
206 | .index_comment_init_avatar {
207 | float: left;
208 | height: 50px;
209 | width: 50px;
210 | line-height: 47px;
211 | text-align: center;
212 | font-size: 27px;
213 | font-style: italic;
214 | border: 1px solid #fff;
215 | -webkit-border-image: initial;
216 | -o-border-image: initial;
217 | border-image: initial;
218 | border-radius: 100%;
219 | overflow: hidden;
220 | }
221 | .index_comment_init_avatar img {
222 | width: 100%;
223 | height: 100%;
224 | }
225 | .index_comment_init_right {
226 | float: left;
227 | width: 525px;
228 | padding-left: 10px;
229 | }
230 | .index_comment_init_right_nickname {
231 | line-height: 24px;
232 | font-weight: 600;
233 | font-size: 13px;
234 | }
235 | .index_comment_init_right_nickname span {
236 | color: #b2b5b7;
237 | font-size: 13px;
238 | margin-left: 10px;
239 | }
240 | .index_comment_init_right_content {
241 | line-height: 20px;
242 | font-size: 12px;
243 | display: block;
244 | min-height: 40px;
245 | max-height: 40px;
246 | overflow: hidden;
247 | /* white-space: nowrap;
248 | text-overflow: ellipsis;*/
249 |
250 | }
251 | .index_comment_init_right_content img{
252 | width: 20px;
253 | height: 20px;
254 | margin-left: 5px;
255 | }
256 | .index_comment_page{
257 | height: 69px;
258 | text-align: center;
259 | padding-top: 18px;
260 | }
261 | .index_comment_page .ivu-page-item-jump-next,.index_comment_page .ivu-page-item-jump-prev{
262 | background: #ffffff;
263 | }
--------------------------------------------------------------------------------
/static/css/music/index.scss:
--------------------------------------------------------------------------------
1 | .music_index{
2 | margin: 18px;
3 | height: 705px;
4 | .ivu-spin{
5 | background-color: rgba(0,0,0,.3)
6 | }
7 | }
8 | .music_index_header{
9 |
10 | }
11 |
12 | /**
13 | 播放器
14 | */
15 | .music_index_header_left{
16 | padding: 0 !important;
17 | }
18 | .music_index_header_left_music{
19 | border-radius: 5px;
20 | background-color: hsla(0,0%,100%,.9);
21 | margin-right: 8px;
22 | height: 166px;
23 | }
24 | .music_index_header_left_music_left{
25 | padding: 23px 12px 10px 20px;
26 | }
27 | .music_index_header_left_music_right{
28 | cursor: pointer;
29 | }
30 | .music_index_header_left_music_right img{
31 | width: 132px;
32 | height: 132px;
33 | border-radius: 50%;
34 | display: block;
35 | margin-top: 17px;
36 | margin-left: 8px;
37 | }
38 | .music_index_header_left_music_left_title{
39 | font-size: 21px;
40 | font-weight: 400;
41 | color: #030303;
42 | overflow: hidden;
43 | text-overflow:ellipsis;
44 | white-space: nowrap;
45 | }
46 | .music_index_header_left_music_left_auth{
47 | font-size: 15px;
48 | font-weight: 400;
49 | line-height: 1.2;
50 | margin-top: 7px;
51 | color: #4a4a4a;
52 | overflow: hidden;
53 | text-overflow:ellipsis;
54 | white-space: nowrap;
55 | }
56 | .music-left_progress{
57 | margin: 15.5px 0 0;
58 | background-size: 371px;
59 | }
60 | .music-progress_top {
61 | bottom: 10px;
62 | height: 18px;
63 | line-height: 13px;
64 | font-size: 11px;
65 | font-weight: 400;
66 | color: #9b9b9b;
67 | width: 100%;
68 | }
69 | .music-progress_time {
70 | color: #9b9b9b;
71 | font-weight: 400;
72 | margin-right: 10px;
73 | display: block;
74 | width: 40px;
75 | line-height: 18px;
76 | float: left;
77 | font-size: 14px;
78 | }
79 | .music-volume-container:hover .volume-high-progress{
80 | opacity: 1;
81 | }
82 | .music-volume-container {
83 | position: relative;
84 | left: 20px;
85 | float: left;
86 | overflow: hidden;
87 | line-height: 18px;
88 | font-size: 18px;
89 | width: 70px;
90 | .volume-high-progress{
91 | top: 0;
92 | right: 0;
93 | position: absolute;
94 | left: 20px;
95 | opacity:0;
96 | transition: opacity 0.3s linear;
97 | width: 49px;
98 | cursor: pointer;
99 | .ivu-progress-inner{
100 | background: #ddd;
101 | .ivu-progress-bg{
102 | background: rgb(170, 170, 170);
103 | }
104 | }
105 | }
106 | }
107 | .music-progress-icon {
108 | float: right;
109 | font-size: 18px;
110 | cursor: pointer;
111 | }
112 | .music-progress-icon i{
113 | margin-right: 3px;
114 | }
115 | .music-progress-icon i:nth-child(1){
116 | font-size: 17px;
117 | }
118 | .music-progress-icon i:nth-child(3){
119 | /*margin-right:10px;*/
120 | }
121 | .music-left_progress_init{
122 | top: -3px;
123 | cursor: pointer;
124 | }
125 | .music-left_progress_init .ivu-progress-inner {
126 | background-color: #dedede!important;
127 | }
128 | .music-left_progress_init .ivu-progress-inner .ivu-progress-bg{
129 | background-color:#22B14C;
130 | }
131 | .music-left_btn i {
132 | margin-right: 20px;
133 | cursor: pointer;
134 | font-size: 23px;
135 | }
136 | .music-left_btn i:nth-child(1) {
137 | font-size: 25px;
138 | }
139 | .music-left_btn i:nth-child(2) {
140 | margin-right: 180px;
141 | }
142 | .music-left_btn i:last-child {
143 | margin-right: 0;
144 | text-align: right;
145 | }
146 |
147 | .music-left_btn .icon {
148 | display: inline-block;
149 | width: 20px;
150 | height: 20px;
151 | background-size:cover;
152 | background-position: center;
153 | }
154 | .icon.repeat-cycle {
155 | background-image: url(~@/assets/icon_repeat-cycle.gif);
156 | }
157 | .icon.repeat-once {
158 | background-image: url(~@/assets/icon_repeat-once.png);
159 | }
160 | .icon.repeat-random {
161 | background-image: url(~@/assets/icon_repeat-random.png);
162 | }
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 | /*头部右侧*/
183 | .music_index_header_right{
184 | padding: 0 !important;
185 | }
186 | .music_index_header_right_box{
187 | border-radius: 5px;
188 | background-color: hsla(0,0%,100%,.9);
189 | margin-left: 8px;
190 | height: 166px;
191 | }
192 | .music_index_header_right_box_input_{
193 | border-bottom:1px dashed #4A9EF6;
194 | height: 53px;
195 | padding-top: 10px;
196 | }
197 | .music_index_header_right_box_input_box{
198 | width: 285px;
199 | height: 32px;
200 | margin:auto;
201 | }
202 | .music_index_header_right_box_Carousel_{
203 | position: relative;
204 | }
205 | .music_index_header_right_box_Carousel_init{
206 |
207 | }
208 | .music_index_header_right_box_Carousel_init img{
209 | width: 71px;
210 | height: 71px;
211 | border-radius: 50%;
212 | display: block;
213 | margin: 5px auto;
214 |
215 | }
216 |
217 | .music_index_header_right_box_Carousel_init h2:nth-child(2){
218 | font-size: 12px;
219 | font-weight: 100;
220 | text-align: center;
221 | color: #000;
222 | width: 100%;
223 | display: block;
224 | line-height: 15px;
225 | overflow: hidden;
226 | text-overflow:ellipsis;
227 | white-space: nowrap;
228 | }
229 | .music_index_header_right_box_Carousel_init h2:nth-child(3){
230 | font-size: 11px;
231 | color: #acacac;
232 | text-align: center;
233 | width: 100%;
234 | display: block;
235 | line-height: 15px;
236 | overflow: hidden;
237 | text-overflow:ellipsis;
238 | white-space: nowrap;
239 | }
240 |
241 | /*
242 | 下部分列表*/
243 | .music_index_list{
244 | border-radius: 5px;
245 | background-color: hsla(0,0%,100%,.9);
246 | height: 515px;
247 | margin:20px 0 0 0 !important;
248 | }
249 | .music_index_list img{
250 | width: 95px;
251 | height: 95px;
252 | border-radius: 50%;
253 | display: block;
254 | margin: 5px auto;
255 | }
256 | .music_index_list_init{
257 | margin-top: 10px;
258 | cursor: pointer;
259 | }
260 | .music_index_list_init h2:nth-child(2){
261 | font-size: 13px;
262 | font-weight: 100;
263 | text-align: center;
264 | color: #000;
265 | width: 100%;
266 | display: block;
267 | line-height: 20px;
268 | overflow: hidden;
269 | text-overflow:ellipsis;
270 | white-space: nowrap;
271 | }
272 | .music_index_list_init h2:nth-child(3){
273 | font-size: 12px;
274 | color: #acacac;
275 | text-align: center;
276 | width: 100%;
277 | display: block;
278 | line-height: 15px;
279 | overflow: hidden;
280 | text-overflow:ellipsis;
281 | white-space: nowrap;
282 | }
283 | .music_index_list_page{
284 | text-align: center;
285 | position: absolute;
286 | width: 100%;
287 | font-size: 12px;
288 | bottom: 15px;
289 | }
290 | .on_search_page{
291 | text-align: center;
292 | position: absolute;
293 | width: 100%;
294 | bottom: 10px;
295 | font-size: 12px;
296 | }
297 | .on_search_page_box{
298 | .ivu-select-dropdown{
299 | padding-bottom: 40px;
300 | }
301 | }
--------------------------------------------------------------------------------
/static/css/note/index.scss:
--------------------------------------------------------------------------------
1 | .note_left{
2 |
3 | }
4 | .note_left_box{
5 | border-radius: 10px;
6 | margin-right: 20px;
7 | overflow: hidden;
8 | }
9 | .note_left_box_init{
10 | background-color: hsla(0,0%,100%,.7);
11 | position: relative;
12 | }
13 | .note_left_box_add_icon{
14 | position: absolute;
15 | width: 50px;
16 | height: 50px;
17 | right: 0;
18 | top: 0;
19 | line-height: 44px;
20 | text-align: center;
21 | font-size: 21px;
22 | cursor: pointer;
23 | }
24 | .note_left_box_desc_{
25 | font-size: 11px;
26 | }
27 | .note_left_box_title{
28 | line-height: 45px;
29 | text-align: center;
30 | margin-left: 20px;
31 | font-size: 14px;
32 | font-weight: 500;
33 | }
34 | .note_left_box .ivu-card:first-child {
35 | margin-top: 2px;
36 | }
37 | .note_left_box .ivu-card{
38 | background: none;
39 | background-color: hsla(0,0%,100%,.7);
40 | padding: 6px 0;
41 | border-radius: 0;
42 | margin-bottom: 2px;
43 | height: 8.85vw;
44 | position: relative;
45 | }
46 | .note_left_box .ivu-card-head {
47 | height: 25px;
48 | line-height: 25px;
49 | padding: 0 11px !important;
50 | background: none;
51 | /*border: 0;*/
52 | font-size: 13px;
53 | font-weight: bold;
54 | }
55 | .note_left_box .ivu-card-body{
56 | padding: 5px 11px 0;
57 | }
58 | .note_left_box .ivu-card-body div .note_left_box_desc_:nth-child(1){
59 | line-height: 18px;
60 | font-size: 11px;
61 | }
62 | .note_left_box .ivu-card-body div p:nth-child(2){
63 | line-height: 20px;
64 | text-align: right;
65 | position: absolute;
66 | font-size: 13px;
67 | width: 93%;
68 | bottom: 3px;
69 | font-weight: 100;
70 | }
71 | .note_left_page{
72 | text-align: center;
73 | font-size: 15px;
74 | font-weight: 500;
75 | margin-left: 0;
76 | line-height: 2.8vw;
77 | padding: 1vw 0;
78 | }
79 | .note_left_int_title{
80 | position: relative;
81 | }
82 | .note_left_int_title_text{
83 | overflow: hidden;
84 | text-overflow:ellipsis;
85 | white-space: nowrap;
86 | width: 71%;
87 | }
88 | .note_left_int_title_icon{
89 | position: absolute;
90 | right: 0;
91 | top: 2px;
92 | overflow: hidden;
93 | }
94 | .note_left_int_title_icon div{
95 | border-radius: 50%;
96 | width: 20px;
97 | height: 20px;
98 | border:1px solid #aaa;
99 | float: left;
100 | line-height: 20px;
101 | text-align: center;
102 | margin-right: 6px;
103 | font-size: 12px;
104 | cursor: pointer;
105 | color: #aaa;
106 | }
107 | .note_left_int_title_icon div:nth-last-child(1){
108 | margin-right: 0;
109 | }
110 | .note_left_int_title_icon div:nth-last-child(2){
111 | font-size: 14px;
112 | }
113 | .note_left_int_title_icon div:nth-last-child(3){
114 | font-size: 11px;
115 | }
116 | /**
117 | 右边部分
118 | */
119 | .ql-toolbar{
120 | padding: 9.5px;
121 | border-bottom: none;
122 | background-color: hsla(0,0%,100%,.7);
123 | border-radius: 10px;
124 | }
125 | .ql-container{
126 | background-color: hsla(0,0%,100%,.7);
127 | border: 0;
128 | border-radius: 10px;
129 | margin-top: 10px;
130 | height: 608px;
131 | }
132 | .edit_upload_img {
133 | display: none;
134 | }
--------------------------------------------------------------------------------
/static/css/reset.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * Eric Meyer's Reset CSS v2.0 (http://meyerweb.com/eric/tools/css/reset/)
3 | * http://cssreset.com
4 | */
5 | html, body, div, span, applet, object, iframe,
6 | h1, h2, h3, h4, h5, h6, p, blockquote, pre,
7 | a, abbr, acronym, address, big, cite, code,
8 | del, dfn, em, img, ins, kbd, q, s, samp,
9 | small, strike, strong, sub, sup, tt, var,
10 | b, u, i, center,
11 | dl, dt, dd, ol, ul, li,
12 | fieldset, form, label, legend,
13 | table, caption, tbody, tfoot, thead, tr, th, td,
14 | article, aside, canvas, details, embed,
15 | figure, figcaption, footer, header,
16 | menu, nav, output, ruby, section, summary,
17 | time, mark, audio, video, input {
18 | margin: 0;
19 | padding: 0;
20 | border: 0;
21 | font-size: 100%;
22 | font-weight: normal;
23 | vertical-align: baseline;
24 | }
25 |
26 | /* HTML5 display-role reset for older browsers */
27 | article, aside, details, figcaption, figure,
28 | footer, header, menu, nav, section {
29 | display: block;
30 | }
31 |
32 | body {
33 | line-height: 1;
34 | }
35 |
36 | blockquote, q {
37 | quotes: none;
38 | }
39 |
40 | blockquote:before, blockquote:after,
41 | q:before, q:after {
42 | content: none;
43 | }
44 |
45 | table {
46 | border-collapse: collapse;
47 | border-spacing: 0;
48 | }
49 |
50 | /* custom */
51 | a,a:link,a:visited,a:active {
52 | color: #7e8c8d;
53 | text-decoration: none;
54 | -webkit-backface-visibility: hidden;
55 | }
56 |
57 | li {
58 | list-style: none;
59 | }
60 | ::-webkit-scrollbar {
61 | width: 1px;
62 | height: 5px;
63 | }
64 |
65 | ::-webkit-scrollbar-track-piece {
66 | background-color: rgba(0, 0, 0, 0.2);
67 | -webkit-border-radius: 6px;
68 | }
69 |
70 | ::-webkit-scrollbar-thumb:vertical {
71 | height: 5px;
72 | background-color: rgba(125, 125, 125, 0.7);
73 | -webkit-border-radius: 6px;
74 | }
75 |
76 | ::-webkit-scrollbar-thumb:horizontal {
77 | width: 5px;
78 | background-color: rgba(125, 125, 125, 0.7);
79 | -webkit-border-radius: 6px;
80 | }
81 |
82 | html, body {
83 | width: 100%;
84 | height: 100%;
85 | overflow: hidden;
86 | }
87 |
88 | body {
89 | -webkit-text-size-adjust: none;
90 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
91 | }
92 |
93 | @media screen and(min-width: 769px) {
94 | html, body {
95 | width: 100%;
96 | margin: 0 auto;
97 | }
98 |
99 | body{
100 | box-shadow: 0 0 30px gray;
101 | }
102 | }
--------------------------------------------------------------------------------
/static/css/setting/index.scss:
--------------------------------------------------------------------------------
1 | .setting_index{
2 | margin: 30px;
3 | height: 678px;
4 | }
5 | .setting_index_box{
6 | margin:0 !important;
7 | }
8 |
9 |
10 |
11 | .setting_index_left{
12 | height: 675px;
13 | background-color: hsla(0,0%,100%,.9);
14 | border-radius: 6px;
15 | padding: 0 !important;
16 | }
17 | .setting_index_left input,.setting_index_left textarea{
18 | margin: 10px auto;
19 | display: block;
20 | width: 85%;
21 | outline:none;
22 | resize:none;
23 | }
24 | .setting_index_left_btn{
25 | text-align: center;
26 | line-height: 50px;
27 | }
28 |
29 |
30 |
31 |
32 | .setting_index_right{
33 | margin-left: 37px;
34 | width: 67%;
35 | padding: 0 !important;
36 | }
37 | .personalIndex_right_open_api{
38 | background-color: hsla(0,0%,100%,.9);
39 | border-radius: 6px;
40 | }
41 | .personalIndex_right_open_api .ivu-col-span-8 {
42 | border-right: 1px dashed #d9d9d9;
43 | line-height: 100px;
44 | text-align: center;
45 | font-size: 18px;
46 | }
47 | .personalIndex_right_open_api .ivu-col-span-16 {
48 | padding: 10px;
49 | padding-left: 30px;
50 | line-height: 40px;
51 | text-align: left;
52 | }
53 | .personalIndex_right_open_api .ivu-col-span-16 p {
54 | text-align: left;
55 | font-size: 15px;
56 | color: #adbcd9;
57 | }
58 | .personalIndex_right_open_api .ivu-col-span-16 p span {
59 | font-size: 12px;
60 | background-color: #eee;
61 | border-radius: 4px;
62 | margin-left: 14px;
63 | padding: 5px 15px;
64 | }
65 |
66 | /**
67 | 最后部分
68 | */
69 | .personalIndex_right_bg {
70 | height: 532px;
71 | margin-top: 40px;
72 | background-color: hsla(0,0%,100%,.9);
73 | border-radius: 6px;
74 | }
75 | .personalIndex_right_bg_img{
76 | width: 100%;
77 | height: 120px;
78 | border-radius: 4px;
79 | cursor: pointer;
80 | }
81 | .personalIndex_right_bg_list{
82 | padding: 0 13px;
83 | }
84 | .personalIndex_right_bg_list_init{
85 | margin-top: 10px;
86 | }
87 | .setting_index_list_page{
88 | padding-top:23px;
89 | text-align: center;
90 | position: absolute;
91 | width: 100%;
92 | font-size: 12px;
93 | }
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 | .modalBG_center_modal{
102 | display: flex;
103 | align-items: center;
104 | justify-content: center;
105 | .ivu-modal{
106 | top: 0;
107 | width: auto !important;
108 | }
109 | .ivu-modal-body{
110 | padding: 0;
111 | width: 710px;
112 | height: 500px;
113 | border-radius: 4px;
114 | overflow: hidden;
115 | }
116 | .ivu-modal-footer{
117 | display: none;
118 | }
119 | .modalBG_body{
120 | background-position: 50%;
121 | background-repeat: no-repeat;
122 | background-size: cover;
123 | height: 100%;
124 | }
125 | .personalIndex_modal_bg_msk {
126 | background-color: hsla(0,0%,100%,.7);
127 | width: 100%;
128 | height: 100%;
129 | }
130 | .personalIndex_modal_bg_o{
131 | padding-top: 50px;
132 | position: absolute;
133 | left: 0;
134 | top: 0;
135 | width: 100%;
136 | height: 100%;
137 | }
138 | .personalIndex_modal_bg_b {
139 | width: 500px;
140 | height: 300px;
141 | margin: auto;
142 | border-radius: 5px;
143 | overflow: hidden;
144 | }
145 | .personalIndex_modal_bg_b img {
146 | left: 0;
147 | top: 0;
148 | width: 100%;
149 | height: 100%;
150 | }
151 | .personalIndex_modal_bg_button {
152 | text-align: center;
153 | padding: 0 0 20px;
154 | }
155 | .personalIndex_modal_bg_button p {
156 | font-size: 15px;
157 | color: #171717;
158 | line-height: 46px;
159 | text-align: center;
160 | }
161 | .personalIndex_modal_bg_button button{
162 | padding: 4px 12px;
163 | }
164 | .personalIndex_modal_bg_button button:nth-child(2) {
165 | margin-right: 10px;
166 | }
167 | .personalIndex_modal_bg_close {
168 | width: 35px;
169 | height: 35px;
170 | border-radius: 50%;
171 | margin: auto;
172 | border: 2px solid #fff;
173 | color: #fff;
174 | text-align: center;
175 | line-height: 35px;
176 | font-size: 20px;
177 | cursor: pointer;
178 | }
179 | }
180 | .ivu-modal-mask{
181 | background-color: rgba(55,55,55,.5);
182 | }
183 |
184 |
--------------------------------------------------------------------------------
/static/css/sing/login.scss:
--------------------------------------------------------------------------------
1 | .login_box_header_{
2 | height: 30px;
3 | position: absolute;
4 | right: 0;
5 | padding-top: 15px;
6 | padding-right: 15px;
7 | width: 60px;
8 | overflow: hidden;
9 | color: #ffffff;
10 | line-height: 16px;
11 | text-align: center;
12 | font-size: 9px;
13 | }
14 | .sing_login{
15 | height: 800px;
16 | -webkit-app-region: drag;
17 | }
18 | .login_box_box_{
19 | width: 350px;
20 | height: 500px;
21 | background: hsla(0,0%,100%,.7);
22 | border-radius: 5px;
23 | position: absolute;
24 | margin-top: -250px;
25 | top: 50%;
26 | margin-left: -175px;
27 | left: 50%;
28 | -webkit-app-region: no-drag;
29 | }
30 | .login_box_avatar{
31 | width: 180px;
32 | margin: auto;
33 | padding-top: 50px;
34 | margin-bottom: 20px;
35 | }
36 | .login_box_avatar img{
37 | width: 120px;
38 | height: 120px;
39 | display: block;
40 | margin: auto;
41 | border-radius: 100%;
42 | }
43 | .login_box_avatar p{
44 | line-height: 50px;
45 | width: 100%;
46 | text-align: center;
47 | font-size: 18px;
48 | font-weight: 600;
49 | font-family: SimSun;
50 | margin-top: 10px;
51 | }
52 | .login_box_input{
53 | width: 78%;
54 | height: 37px;
55 | margin: auto;
56 | border-radius: 7px;
57 | background: #7f9aad;
58 | margin-bottom: 15px;
59 | }
60 | .login_box_input i{
61 | color: #fff;
62 | height: 24px;
63 | display: block;
64 | float: left;
65 | width: 30px;
66 | margin-top: 6px;
67 | font-style: normal;
68 | vertical-align: baseline;
69 | text-align: center;
70 | text-transform: none;
71 | line-height: 1;
72 | text-rendering: optimizeLegibility;
73 | -webkit-font-smoothing: antialiased;
74 | font-size: 23px;
75 | }
76 | .login_box_input input{
77 | border-radius: 0;
78 | width: 240px;
79 | background: #7f9aad;
80 | border: 0;
81 | border-left: 1px solid #fff;
82 | margin-top: 7px;
83 | outline: none!important;
84 | padding-left: 8px;
85 | font-size: 14px;
86 | height: 23px;
87 | color: #fff;
88 | display: block;
89 | float: left;
90 | }
91 | .login_box_input input::-webkit-input-placeholder {
92 | color: #ffffff;
93 | }
94 | .login_box_btn{
95 | background: #112232;
96 | line-height: 37px;
97 | color: #fff;
98 | font-size: 15px;
99 | cursor: pointer;
100 | text-align: center;
101 | width: 78%;
102 | height: 37px;
103 | margin: auto;
104 | border-radius: 7px;
105 | margin-bottom: 15px;
106 | }
107 | .login_box_btn_text{
108 | text-align: center;
109 | bottom: 10px;
110 | width: 100%;
111 | line-height: 18px;
112 | color: #999;
113 | position: absolute;
114 | font-size: 12px;
115 | }
--------------------------------------------------------------------------------
/static/css/video/index.scss:
--------------------------------------------------------------------------------
1 | .video_index{
2 | background: #fff;
3 | border-radius: 5px;
4 | margin: 15px;
5 | height: 705px;
6 | }
7 | .video_index_list_box .ivu-col-span-6{
8 | padding-top: 10px;
9 | cursor: pointer;
10 | }
11 | .video_index_list_box{
12 | padding: 12px;
13 | padding-top: 0;
14 | }
15 | .video_index_list_page{
16 | padding:7px;
17 | text-align: center;
18 | position: absolute;
19 | width: 100%;
20 | font-size: 12px;
21 | }
22 | .video_index_list_box .ivu-col-span-6 .ivu-card{
23 | height: 138px;
24 | }
25 | .video_index_list_init_images{
26 | position: relative;
27 | height: 138px;
28 | border-radius: 4px;
29 | overflow: hidden;
30 | }
31 | .video_index_list_init_img{
32 | width: 100%;
33 | height: 100%;
34 | }
35 | .video_index_list_box .ivu-card-body{
36 | padding: 0;
37 | }
38 |
39 | .video_index_list_init_font{
40 | padding: 0 10px;
41 | line-height: 17px;
42 | }
43 | .video_index_list_init_foucs{
44 | width: 100%;
45 | height: 138px;
46 | background-color:rgba(000,000,000,0.5);
47 | position: absolute;
48 | top: 0;
49 | left: 0;
50 | color: #ffffff;
51 | opacity:0;
52 | display: block;
53 | transition: opacity 0.3s linear;
54 | }
55 | .video_index_list_init_images:hover .video_index_list_init_foucs{
56 | opacity:1;
57 | }
58 | .video_index_list_init_images:hover .video_index_list_init_botton_font{
59 | display: none;
60 | }
61 | .video_index_list_init_botton_font{
62 | position: absolute;
63 | bottom: 0;
64 | background-color:rgba(000,000,000,0.5);
65 | width: 100%;
66 | padding: 8px;
67 | color: #ffffff;
68 | font-size: 12px;
69 | overflow: hidden;
70 | white-space: nowrap;
71 | text-overflow: ellipsis;
72 | margin: auto;
73 | }
74 |
75 |
76 |
77 | /**
78 | 编辑box
79 | */
80 | .video_edit_center_modal{
81 | display: flex;
82 | align-items: center;
83 | justify-content: center;
84 | .video_edit_center_modal_body{
85 | height: 240px;
86 | padding: 15px;
87 | textarea{
88 | border-radius: 4px;
89 | background: hsla(0,0%,100%,0);
90 | outline: none;
91 | resize: none;
92 | width: 100%;
93 | height:75px;
94 |
95 | }
96 | input{
97 | margin: 10px auto;
98 | }
99 | }
100 | .ivu-modal{
101 | top: 0;
102 | width: 380px !important;
103 | }
104 | .ivu-modal-body{
105 | padding: 0;
106 | }
107 | .ivu-modal-footer{
108 | display: none;
109 | }
110 | }
--------------------------------------------------------------------------------
/static/css/video/play.scss:
--------------------------------------------------------------------------------
1 | .del_video_play_box{
2 | overflow: hidden;
3 | height: 735px;
4 | }
5 | .del_videoIndex_title {
6 | width: 95%;
7 | text-align: center;
8 | margin: 40px auto;
9 | margin-bottom: 20px;
10 | color: #fff;
11 | }
12 | .del_videoIndex_title h1 {
13 | font-size: 1.8rem;
14 | font-weight: 100;
15 | line-height: 3.5vw;
16 | color: rgb(255, 255, 255);
17 | }
18 | .del_videoIndex_title p {
19 | font-size: 12px;
20 | text-indent: 10vw;
21 | line-height: 20px;
22 | }
23 | .del_videoIndex_btn_left, .del_videoIndex_btn_right {
24 | position: absolute;
25 | top: 50%;
26 | margin-top: -25px;
27 | font-size: 98px;
28 | color: #fff;
29 | cursor: pointer;
30 | }
31 | .del_videoIndex_box {
32 | position: relative;
33 | width: 85%;
34 | margin: auto;
35 | border-radius: 8px;
36 | overflow: hidden;
37 | height: 520px;
38 | margin-top: 60px;
39 | }
40 | .del_videoIndex_box .vjs-poster{
41 | background-position: 0 0;
42 | background-size: cover;
43 | }
--------------------------------------------------------------------------------
/static/css/video/push.scss:
--------------------------------------------------------------------------------
1 | .video_push_top{
2 | background: hsla(0,0%,100%,.2);
3 | padding: 30px;
4 | margin: 2%;
5 | width: 96%;
6 | }
7 | .video_push_top_left{
8 | height: 360px;
9 | border: 1px dashed #999;
10 | background: hsla(0,0%,100%,.5);
11 | }
12 | .video_push_top_left .ivu-upload{
13 | background: none;
14 | }
15 | .video_push_top_left_text{
16 | position: absolute;
17 | margin: auto;
18 | width: 100%;
19 | bottom: 21px;
20 | text-align: center;
21 | color: #777;
22 | font-size: 15px;
23 | font-weight: 400;
24 | }
25 | .video_push_top_left_btn_box{
26 | width: 273px;
27 | height: 70px;
28 | margin: auto;
29 | color: #fff;
30 | border-radius: 3px;
31 | background-color: rgba(160,131,242,.6);
32 | }
33 | .video_push_top_left_btn_box_i{
34 | float: left;
35 | display: block;
36 | width: 90px;
37 | font-size: 51px;
38 | text-align: center;
39 | padding-top: 12px;
40 | padding-left: 40px;
41 | }
42 | .video_push_top_left_btn_box_text{
43 | float: left;
44 | width: 160px;
45 | }
46 | .video_push_top_left_btn_box_text p:first-child {
47 | font-size: 20px;
48 | line-height: 37px;
49 | font-weight: 500;
50 | margin-top: 4px;
51 | }
52 | .video_push_top_left_btn_box_text p:nth-child(2) {
53 | line-height: 20px;
54 | font-size: 15px;
55 | }
56 | .video_push_top_left_box_text{
57 | margin-top: 20px;
58 | font-size: 14px;
59 | font-weight: 400;
60 | }
61 | .video_push_ul_box{
62 | width: 100%;
63 | position: relative;
64 | margin-top: 110px;
65 | margin-bottom: 142px;
66 | }
67 | /**
68 | 右边input
69 | */
70 | .video_push_top_right{
71 | padding-left: 2vw;
72 | background: hsla(0,0%,100%,.9);
73 | }
74 | .video_push_top_right_desc{
75 | border-radius: 4px;
76 | width: 92%;
77 | background: hsla(0,0%,100%,0);
78 | outline: none;
79 | resize: none;
80 | margin-top: 2vw;
81 | }
82 | .video_push_top_right_btn{
83 | padding-top: 1vw;
84 | margin-bottom: 1.5vw;
85 | border-radius: 4px;
86 | width: 92%;
87 | }
88 | .video_push_top_right_btn_title{
89 | line-height: 26px;
90 | text-align: left;
91 | color: #888;
92 | margin-bottom: .3vw;
93 | font-size: 14px;
94 | }
95 | .video_push_top_right_btn_1{
96 | background: hsla(0,0%,100%,0);
97 | outline: none;
98 | resize: none;
99 | margin-bottom: 1vw;
100 | }
101 | .video_push_top_right_btn_status{
102 | width: 100%;
103 | }
104 | /**
105 | 走马灯
106 | */
107 | .video_push_btn_box{
108 | height: 274px;
109 | padding: 0 2%;
110 | background: hsla(0,0%,100%,.9);
111 | }
112 | .video_push_btn{
113 | margin-top: 1%;
114 | }
115 | .video_push_btn .ivu-row .ivu-col .ivu-card-body{
116 | padding: 0;
117 | cursor: pointer;
118 | }
119 | .video_push_btn .ivu-row .ivu-col .ivu-card-body img{
120 | width: 100%;
121 | height: 120px;
122 | display: block;
123 | }
124 | .video_push_btn_titleBox{
125 | display: block;
126 | padding: 5px;
127 | height: 70px;
128 | overflow: hidden;
129 | }
130 | .video_push_btn_titleBox h3{
131 | display: -webkit-box;
132 | -webkit-box-orient: vertical;
133 | overflow: hidden;
134 | line-height: 26px;
135 | }
136 | .video_push_btn_titleBox p{
137 | /*margin-top: 5px;*/
138 | color: #999;
139 | font-size: 12px;
140 | line-height: 18px;
141 | }
--------------------------------------------------------------------------------
/static/html/setting.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | 系统设置
107 |
108 |
109 | 关闭系统
110 |
111 |
112 |
132 |
133 |
--------------------------------------------------------------------------------
/static/img/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EliseCaro/eibk_client/35fc05e7100f7934f990d21f7c0ee420e6d774fc/static/img/icon.ico
--------------------------------------------------------------------------------
/static/img/preview/1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EliseCaro/eibk_client/35fc05e7100f7934f990d21f7c0ee420e6d774fc/static/img/preview/1.jpg
--------------------------------------------------------------------------------
/static/img/preview/10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EliseCaro/eibk_client/35fc05e7100f7934f990d21f7c0ee420e6d774fc/static/img/preview/10.jpg
--------------------------------------------------------------------------------
/static/img/preview/2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EliseCaro/eibk_client/35fc05e7100f7934f990d21f7c0ee420e6d774fc/static/img/preview/2.jpg
--------------------------------------------------------------------------------
/static/img/preview/3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EliseCaro/eibk_client/35fc05e7100f7934f990d21f7c0ee420e6d774fc/static/img/preview/3.jpg
--------------------------------------------------------------------------------
/static/img/preview/4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EliseCaro/eibk_client/35fc05e7100f7934f990d21f7c0ee420e6d774fc/static/img/preview/4.jpg
--------------------------------------------------------------------------------
/static/img/preview/5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EliseCaro/eibk_client/35fc05e7100f7934f990d21f7c0ee420e6d774fc/static/img/preview/5.jpg
--------------------------------------------------------------------------------
/static/img/preview/6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EliseCaro/eibk_client/35fc05e7100f7934f990d21f7c0ee420e6d774fc/static/img/preview/6.jpg
--------------------------------------------------------------------------------
/static/img/preview/7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EliseCaro/eibk_client/35fc05e7100f7934f990d21f7c0ee420e6d774fc/static/img/preview/7.jpg
--------------------------------------------------------------------------------
/static/img/preview/8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EliseCaro/eibk_client/35fc05e7100f7934f990d21f7c0ee420e6d774fc/static/img/preview/8.jpg
--------------------------------------------------------------------------------
/static/img/preview/9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EliseCaro/eibk_client/35fc05e7100f7934f990d21f7c0ee420e6d774fc/static/img/preview/9.jpg
--------------------------------------------------------------------------------
/static/vue/fonts/ionicons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EliseCaro/eibk_client/35fc05e7100f7934f990d21f7c0ee420e6d774fc/static/vue/fonts/ionicons.ttf
--------------------------------------------------------------------------------