提交 391a53be authored 作者: 王鹏飞's avatar 王鹏飞

chore: 课程增加尾部视频

上级 dc75b7ad
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCet8qJanYnePII
SE7OALUsp2NJGBttfrKVx7gDV9kBmFMakPyTjyxLoViNmRhwwy4Au6rAD4plqaJC
iSle2SwlOCqKJp4tmLaVBbmEKJ28zLN3L7LJBtMA7AOmAiwquDXOxarPI/tdu7+5
ivylNFzqcCLnLsJXn/MiY9urkipyDU7RTIHiUbWiXBrQKqDHEyoco9YdQk11V7Sb
cb8CDvEfmvSV8N3a36ahM+wT2TB7ubK62i3h4DktAWFyB2xHMoX7kG6T9HQPGCIq
XjJJVJ2XWDG1O0tR9fIpnLEmu9O/9psXEO57gT/ddY62bkPiGI3fwpTje+nVxCW6
RY2RHXz1AgMBAAECggEAM8fYXu6Jr6UIqWUVuKWIdhICFUW1JQrRroXi5cxSMvAE
JMWqcWWjWOVBo6iPzbIPnxOayGAJkdM+6aAgDB6kBVyGnF2u+0c4QfQFKzWpCIBs
CHVaSbVdP47APfe1exZwD45zhHLDvjfTe+/5Ltife6ir6mpZ4wZ+5vhXIWllSaHE
M8c2qA9Vc+BbyrBL8mGkikKYNUxQA4Nf+VmnIGaeOeVPPtynianeEQpklpWfq6GT
8c6DhEx+iFH8ecACPZM5z2+uzApOe4SqJiXUdBNeKlK+ddtkCacQEdeUtCtBJKbz
YhNPuNnae9f25UXxp9CmJlpS57eU+Wq4PKj5pGQ2gQKBgQDBkXsBNN1eoZHEfM1V
0Kx39wBF3sMijVkkfPqawZp4rjqkVncQjp/o/BlpwN4ih0DP/qTeEMx77zSltqG/
bpKvydz1o9SFxN6aRZzYz/EeVcloDsiLCU1h8AOJ7jXg1g0qDhrVEB+0bxcDaDPn
7fw+zuEyL68lvKpFHAlnVYjAoQKBgQDR6Mq1Z4rzgL0fam+RgDG3F9gYsUo9+1CG
psX3vx99JGfg/ZBzVsrlqR791BXucDZ2k4SF3b6iqbt7eYnbwymn+DAKDpt9DI+M
9eOlSjdZTfmgqJfek1u8ABU8xo/3fRX+WtyrqKQo6Cr0XjPDRgo0qjdTkVKz05Bq
rVSnq87X1QKBgQCbeR1iP7Lakk2Bk3hdyAjvJl56wEzdkMibzSKAcKaA7fg+DRD/
JH9+ZBaJYZdKBnbhWTfVAYsstFoGDCXom4iIV0v5pMhLVXAyW116q7KQWfk2ckFT
o3obAuvkuodd+q+CKugUYCoHA/9pBiZC0Fz9ma85XyF/3wSoE7fd3s7DYQKBgCPC
sg4Xlr+HNjEM8/bozQ9xO3pxccF/eCeIb/+WCupJ8nyNFjfgGG7p0gLSR+44Jb8r
wI8ByQFzQyJ1ATx0Ujtwd9auyGSUaDxOg7rcGvPW6ekp772WgzFTHksdVNeH8uBD
YIbKEzV44CCDj/P7ka+JNCXDg0BpkZfq8ZojFfkFAoGALku7v4b89mQ6dsYetoQ/
WYIVgir9TJqTKt4yf96eBA6ZziyMTzQzkvK8NuDhFoWw5Jn82cSt6aN0z+Gq3JaS
nDvOY0N3unUcoxUQiUb7mKT3H4kn/GumwEpIXMv7Onq+pzeNJfmK4gnP4oq/WSt3
3os/+jzk1TtbbCGNsn8aTf4=
-----END PRIVATE KEY-----
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAwZGHX8Zg+EP5uwnEBWkQazq8DMnKz3QfcNRUjFsxsZjM/98r
oYYp+K6/i/b8JXAVMqjC9+X/ZajgbDPLTrgDJ4TQ70ajdusqG3swNqG0qLUogNgU
PcgVRKr2Pk+m79GD/nnxFgeaG6eBfLsb73G2cQUwsgi3bjf6mX6b9bjxjqzwX0PW
es27yyqdS9uQFzV5KLTA2FJJjGGbg54ZLxVc01aVXx2gG0eLnOFcDSmgXUN4hBmN
gYF4FYHhOVXdMl2+yGGp6IvtIIrt+cp2/TQePnxB2QYwrlDMajHrKp0x7LsqWwZT
jepPgGWWDssiSgTCYVaPx28ESbotpzR7D+LlHQIDAQABAoIBAQCCvXGrHcmXRgph
62mrodgGJQioto82aZ9mzPNCTcIVyzgDRtAoa/7jSdx0g+CwxLB8pAH0ADPtjQ/v
5VfXlnAC/DFGu/Zittmc8CqTa8si/CEcTVX2mLLMy5BAa/o8Fs5JTkGo+H99WDkc
byCiLLLmSXQne72xQzwO+rYKVN1K2JUfzch5wpv86IgfJm0gNEOOvtToeNeMbOWj
7AFfpqq7bRMIdZZZhm2n33duSCSnAO7/OuKHY2/RUkc6FvamAth/ME5S2eHrB7yb
KOMZTJH73xnZc3gmsBiIfC1BsqzV/37Ptd7ncTxuK5YZPXIyJ/BjnDTe712LAz+r
f3FEmtJdAoGBAOdPpbT1ylZKinxEIP4sUPUUrrlXqQxYn2xTOCSBz1dB7OpeqiD+
OBa6ur5Sh0+Ot/VRqV2MbXaGee/qqBiziFH23wKoFc6kxeH8RCv247y89yOHqpCP
SM4I7d10RpPh/POU0apGNOP4HOLOMY4V11u68em9hQDeN6oUBWKvDWTPAoGBANY6
mZ/EWKOFJSPfJNNtfXDO27P12ENsa9UvDv7f+FrcPqGkJq1qFBr3ySBjUE7hTv1e
jedRHtBg5Y038vj/MTofEPSaa5POFgzwfG5TPYCcrZkDoLosnuQ92yafMxZPAf16
Nt3vimpxV2Hwf1Nl3IAU/BavngdohWJkO+yOuupTAoGBAMxkTrJmdhJl75T6xoSS
OD83tWTFFvV34fdgWb24jrQ15tj6KS7aNEmxWo4Ocs5T+C1nqVamXZtcHKdpHHwn
OA/lKw435H0ikFCuDrcig/4ko+TbXlY6pkSZE0aaFjtad5/tIo9pVhcTCMNJG/TH
S/Mcb+LwunQX5+v7oP6gXB91AoGAFDbjWBgG5ScjIgdkSi8CrypVwN1p0rLgWfVe
zN4FaU1u+4GpxKNF0mWfLNcyNL893NqXOUSGS9NY1cJ5wtURqBJWXz5S+Fdx7Tak
ByUDoKcoGlAlUmvzckYD79kF0Q0Tev+VPcvkm7amMC+pVA1AiTVxtBJOLxTFwUsD
/IZbTNECgYEA5uwkBWpb/2yYk86cfuUWJjZ0k8jZPrdG4d9gTdD1Fj4abS3FniKM
x9eN8BcnH0j4raRo+MESzYf5hLbfHRG01oRtBQFZXEM0k/zkkRYdKWG1Ulg1+iZR
ZG/lblczYEUW/IOPYZKMX8c5nq7F6huLsioIvsYOdCGjLZbyRHjEPv8=
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
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 wZLv6wJZjpEI33op7JJDhslsY9PU
LmNvbTCCAXwGCisGAQQB1nkCBAIEggFsBIIBaAFmAHUA7s3QZNXbGs7FXLedtM0T
ojKHRny87N7DUUhZRnEftZsAAAGKbjQU6wAABAMARjBEAiAMbEi/VFFT/mgWiXPw
WgVT5THVJCfr9j1oIcfiB5MFHgIgJ2nAv7xTmfoZfcO8sWoGigLdN8QtGksVUSI2
86Wg3O4AdgDatr9rP7W2Ip+bwrtca+hwkXFsu1GEhTS9pD0wSNf7qwAAAYpuNBUS
AAAEAwBHMEUCIDmQ1/B1s3jRr+0SvDSWEFN9/b4/W8QV5yULASXqQkYqAiEA0wKZ
lklUASXMM8mluAimD5e4qSXu76+148bfZA2d404AdQBIsONr2qZHNA/lagL6nTDr
HFIBy1bdLIHZu7+rOdiEcwAAAYpuNBefAAAEAwBGMEQCICyokQlEyxPTPYNBZzwv
W8AxbKUJl+I5TbJEJsiFECRUAiA8fA86Hof/yLHhMl4amx5AttDNhpDrCHDK1N7m
NYx9XjANBgkqhkiG9w0BAQsFAAOCAQEAq4Q2vW3Xh5TOYk/DofnV2uRiK08P5a5I
NRE5Tet3J5rp2WnNgXoSAOabqWGI6VrTyenTZxrmS/2Aq2A008WOj4Z7T3P9iDS/
MgJkPmc/REqHr15LIDnyRRfmn9+1ShVMwukYHSmZgPewAzSkKdGFN85t3uCEUnXz
kna3ZmSqgJrSWSO9n/3t/kICsVivjqSUuHtnCSbBa+DTSNxIkbkr1t1RJkF4KvSk
AKkvyojoKoeCd+WWEl2MBHY6TK4CzfyLN5qhQub0XqTOh6cG9TwALcLZ4MQeaeOO
ZkGv9DcyeOz7FwwzFa+vAyzhq2XlDPLlpZ4ELALbaqnq3x7HHpzlpw==
-----END CERTIFICATE----- -----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEzzCCA7egAwIBAgIRAPJECC2rqQ2ljHLp8pqTQK4wDQYJKoZIhvcNAQELBQAw
fjELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu
QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEiMCAG
A1UEAxMZQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQTAeFw0yMjA3MDEwNzQ4NDda
Fw0yNzA2MzAwNzQ4NDdaMGMxCzAJBgNVBAYTAkNOMTYwNAYDVQQKDC1CZWlqaW5n
IFhpbmNoYWNoYSBDcmVkaXQgTWFuYWdlbWVudCBDby4sIEx0ZC4xHDAaBgNVBAMM
E1hjYyBUcnVzdCBPViBTU0wgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQCz2nxSPEsMeRBdunf+KZ8CrJIj9DUWGVu05WWyES+QkMHzVHCZt8cB2Blp
qzHHqFsXSDHVzcMxDeXBbudmQwYbg5NpSwY9vJHPTl6vlAlK4UWN4+oPTgP9//RN
N6KLmK3kjZ2Zc9F3kFKVaziSwVNjVvneacoUnz6blwLLBc5QelQ8oDT0eEv0QBAY
I0T8pHDgcvWQqTBaRrOb80plDhYju464XbVhtOHvFCiBIkKnfUBnBfptWjGM8Kis
sq4r8YX35B/pioj9g1YX34MLt+5L3vvWXEb2aMiwwB1Z3bSeeiU3N8aMuSb9E9jp
zd0uhzRameU7jAIAr8uuunb7GUJ7AgMBAAGjggFhMIIBXTASBgNVHRMBAf8ECDAG
AQH/AgEAMB0GA1UdDgQWBBT6oMvCx12BtSCSByALtjtwOwkOVTAfBgNVHSMEGDAW
gBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0lBBYw
FAYIKwYBBQUHAwEGCCsGAQUFBwMCMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9j
cmwuY2VydHVtLnBsL2N0bmNhLmNybDBrBggrBgEFBQcBAQRfMF0wKAYIKwYBBQUH
MAGGHGh0dHA6Ly9zdWJjYS5vY3NwLWNlcnR1bS5jb20wMQYIKwYBBQUHMAKGJWh0
dHA6Ly9yZXBvc2l0b3J5LmNlcnR1bS5wbC9jdG5jYS5jZXIwOgYDVR0gBDMwMTAv
BgRVHSAAMCcwJQYIKwYBBQUHAgEWGWh0dHBzOi8vd3d3LmNlcnR1bS5wbC9DUFMw
DQYJKoZIhvcNAQELBQADggEBACWzdb59JyYc/WivKUcTEZ+H8WOTuv3AiR6rPljB
QUEB/1kxIeBK+276WLJn0nFNFuT9QMUBo/iUvNvuRQqVjouuYB0Oea6zKQpeMWry
oYtbheW+5NYAbdl9tYE4MRRK9zBLMRrQz35q+XfgMInozidhNHCvuulWk38OMM51
O73z53+R1879nnoZZznoYnrnkISVDjlhe6OSMifvIJAwSYwH2z79Y6CTVgtqTDR9
793Gr7UUmk5ydoxClxnku7voTX8iJUPcuAjElxFrhSQoxm6uXXOfItEqGvLkWAcq
IC5mcyU9VpUg1YP+KkDMh+KQM7/k+2ka1em9hO+QHvJ08UQ=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEtDCCA5ygAwIBAgIRAJOShUABZXFflH8oj+/JmygwDQYJKoZIhvcNAQELBQAw
PjELMAkGA1UEBhMCUEwxGzAZBgNVBAoTElVuaXpldG8gU3AuIHogby5vLjESMBAG
A1UEAxMJQ2VydHVtIENBMB4XDTA4MTAyMjEyMDczN1oXDTI3MDYxMDEwNDYzOVow
fjELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu
QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEiMCAG
A1UEAxMZQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQTCCASIwDQYJKoZIhvcNAQEB
BQADggEPADCCAQoCggEBAOP7faNyusLwyRSH9WsBTuFuQAe6bSddf/dbLbNax1Ff
q6QypmGHtm4PhtIwApf412lXoRg5XWpkecYBWaw8MUo4fNIE0kso6CBfOweizE1z
2/OuT8dW1Vqnlon686to1COGWSfPCSe8rG5ygxwwct/gounS4XR1Gb0qnnsVVAQb
10M5rVUoxeIau/TA5K44STPMdoWfOUXSpJ7yEoxR+HzkLX/1rF/rFp+xLdG6zJFC
d0wlyZA4b9vwzPuOHpdZPtVgTuYFKO1JeRNLukjbL/ly0znK/h/YNHL1tEDPMQHD
7N4RLRddH7hQ0V4Zp2neBzMoylCV+adUy1SGUEWp+UkCAwEAAaOCAWswggFnMA8G
A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFAh2zcsH/yT2xc3tu5C84oQ3RnX3MFIG
A1UdIwRLMEmhQqRAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNw
LiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQYIDAQAgMA4GA1UdDwEB/wQEAwIB
BjAsBgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vY3JsLmNlcnR1bS5wbC9jYS5jcmww
aAYIKwYBBQUHAQEEXDBaMCgGCCsGAQUFBzABhhxodHRwOi8vc3ViY2Eub2NzcC1j
ZXJ0dW0uY29tMC4GCCsGAQUFBzAChiJodHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0u
cGwvY2EuY2VyMDkGA1UdIAQyMDAwLgYEVR0gADAmMCQGCCsGAQUFBwIBFhhodHRw
Oi8vd3d3LmNlcnR1bS5wbC9DUFMwDQYJKoZIhvcNAQELBQADggEBAI3m/UBmo0yc
p6uh2oTdHDAH5tvHLeyDoVbkHTwmoaUJK+h9Yr6ydZTdCPJ/KEHkgGcCToqPwzXQ
1aknKOrS9KsGhkOujOP5iH3g271CgYACEnWy6BdxqyGVMUZCDYgQOdNv7C9C6kBT
Yr/rynieq6LVLgXqM6vp1peUQl4E7Sztapx6lX0FKgV/CF1mrWHUdqx1lpdzY70a
QVkppV4ig8OLWfqaova9ML9yHRyZhpzyhTwd9yaWLy75ArG1qVDoOPqbCl60BMDO
TjksygtbYvBNWFA0meaaLNKQ1wmB1sCqXs7+0vehukvZ1oaOGR+mBkdCcuBWCgAc
eLmNzJkEN0k=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM
MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM
MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E
jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo
ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI
ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu
Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg
AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7
HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA
uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa
TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg
xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q
CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x
O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs
6GAqm4VKQPNriiTsBhYscw==
-----END CERTIFICATE-----
...@@ -30,7 +30,7 @@ if ($GLOBAL.isDev === 'development') { ...@@ -30,7 +30,7 @@ if ($GLOBAL.isDev === 'development') {
host: $GLOBAL.webConf.domain || 'localhost', host: $GLOBAL.webConf.domain || 'localhost',
http2: false, http2: false,
https: $GLOBAL.webConf.isHttps && { https: $GLOBAL.webConf.isHttps && {
key: fs.readFileSync(path.join(__dirname, $GLOBAL.webConf.domain + '.key')), key: fs.readFileSync(path.join(__dirname, $GLOBAL.webConf.domain + '-key.pem')),
cert: fs.readFileSync(path.join(__dirname, $GLOBAL.webConf.domain + '.pem')) cert: fs.readFileSync(path.join(__dirname, $GLOBAL.webConf.domain + '.pem'))
}, },
overlay: { overlay: {
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -34,9 +34,12 @@ ...@@ -34,9 +34,12 @@
</em> </em>
<em :class="skipClass" @click="toggleSkip">{{ $t('viewerPlayer.skipTitle') }}</em> <em :class="skipClass" @click="toggleSkip">{{ $t('viewerPlayer.skipTitle') }}</em>
</div> </div>
<el-dialog :visible.sync="dialogVisible" width="600px" top="0"> <el-dialog :visible.sync="dialogVisible" width="600px" top="0" class="my-dialog">
<iframe :src="sharePageUrl" style="display:block;width:100%;height:720px;border:0;"></iframe> <iframe :src="sharePageUrl" style="display:block;width:100%;height:720px;border:0;"></iframe>
</el-dialog> </el-dialog>
<el-dialog :visible.sync="videoDialogVisible" width="1000px" top="40px" v-if="videoDialogVisible">
<video-player :video="course.video_address" style="height:600px"></video-player>
</el-dialog>
</div> </div>
</template> </template>
...@@ -80,15 +83,20 @@ export default { ...@@ -80,15 +83,20 @@ export default {
player: null, player: null,
watchedTime: 0, watchedTime: 0,
watchedTimePoint: [], // 视频观看的时间点 watchedTimePoint: [], // 视频观看的时间点
dialogVisible: false // 分享海报弹出 dialogVisible: false, // 分享海报弹出
videoDialogVisible: false // 视频弹出
} }
}, },
inject: ['$course'],
watch: { watch: {
pptIndex(index) { pptIndex(index) {
this.isSeek && this.updateVideoCurrentTime(index) this.isSeek && this.updateVideoCurrentTime(index)
} }
}, },
computed: { computed: {
course() {
return this.$course()
},
// 学期ID // 学期ID
sid() { sid() {
return this.$route.params.sid return this.$route.params.sid
...@@ -166,11 +174,14 @@ export default { ...@@ -166,11 +174,14 @@ export default {
course_id: this.cid, course_id: this.cid,
chapter_id: this.chapter.id chapter_id: this.chapter.id
} }
api.getShare(params).then(res => { api.getShare(params).then((res) => {
if (res.code === 0 && res.data.need_share) { if (res.code === 0 && res.data.need_share) {
this.dialogVisible = true this.dialogVisible = true
} }
}) })
if (this.course.show_end_video && this.course.video_address) {
this.videoDialogVisible = true
}
}, },
// 当前播放时间更新 // 当前播放时间更新
onTimeupdate(time) { onTimeupdate(time) {
...@@ -179,7 +190,7 @@ export default { ...@@ -179,7 +190,7 @@ export default {
return return
} }
const ppts = this.chatperResources.ppts || [] const ppts = this.chatperResources.ppts || []
let index = this.chatperResources.ppts.findIndex(item => item.ppt_point > time) let index = this.chatperResources.ppts.findIndex((item) => item.ppt_point > time)
index = index !== -1 ? index - 1 : ppts.length - 1 index = index !== -1 ? index - 1 : ppts.length - 1
this.$emit('change-ppt', index) this.$emit('change-ppt', index)
const durations = this.player.getDuration() const durations = this.player.getDuration()
...@@ -209,12 +220,12 @@ export default { ...@@ -209,12 +220,12 @@ export default {
getChapterVideo() { getChapterVideo() {
// 视频播放类型 1是CC加密; 2是非加密; 3是阿里云 // 视频播放类型 1是CC加密; 2是非加密; 3是阿里云
if (this.videoProvider === 3) { if (this.videoProvider === 3) {
api.getChapterVideoAliyun(this.resourceId).then(response => { api.getChapterVideoAliyun(this.resourceId).then((response) => {
this.chatperResources = response this.chatperResources = response
Array.isArray(response.ppts) && this.$emit('pptupdate', response.ppts) Array.isArray(response.ppts) && this.$emit('pptupdate', response.ppts)
}) })
} else { } else {
api.getChapterVideo(this.resourceId).then(response => { api.getChapterVideo(this.resourceId).then((response) => {
let { video, audio, ppts } = response let { video, audio, ppts } = response
video = video.reduce( video = video.reduce(
(result, item) => { (result, item) => {
...@@ -239,7 +250,7 @@ export default { ...@@ -239,7 +250,7 @@ export default {
.getChapterVideoProgress(this.sid, this.resourceId, { .getChapterVideoProgress(this.sid, this.resourceId, {
device_id: Cookies.get('_idt') device_id: Cookies.get('_idt')
}) })
.then(response => { .then((response) => {
this.progress = response this.progress = response
// 跳转播放进度 // 跳转播放进度
if (this.player && response.cpt) { if (this.player && response.cpt) {
...@@ -300,15 +311,18 @@ export default { ...@@ -300,15 +311,18 @@ export default {
height: 100%; height: 100%;
background-color: #3f3f3f; background-color: #3f3f3f;
} }
.player-main { .player-main {
display: flex; display: flex;
flex: 1; flex: 1;
overflow: hidden; overflow: hidden;
} }
.player-column { .player-column {
flex: 1; flex: 1;
height: 100%; height: 100%;
} }
.player-footer { .player-footer {
display: flex; display: flex;
align-items: center; align-items: center;
...@@ -316,15 +330,18 @@ export default { ...@@ -316,15 +330,18 @@ export default {
padding: 0 20px; padding: 0 20px;
font-size: 14px; font-size: 14px;
color: #a0a0a0; color: #a0a0a0;
a { a {
color: #a0a0a0; color: #a0a0a0;
text-decoration: none; text-decoration: none;
} }
em { em {
margin-right: 40px; margin-right: 40px;
cursor: pointer; cursor: pointer;
} }
} }
.player-button { .player-button {
display: inline-block; display: inline-block;
color: #a0a0a0; color: #a0a0a0;
...@@ -335,36 +352,44 @@ export default { ...@@ -335,36 +352,44 @@ export default {
background: url(../../assets/play-icons.png) no-repeat 0 0; background: url(../../assets/play-icons.png) no-repeat 0 0;
cursor: pointer; cursor: pointer;
} }
.player-button-download { .player-button-download {
background-position: 0 -240px; background-position: 0 -240px;
} }
.player-button-ppt { .player-button-ppt {
background-position: 0 -240px; background-position: 0 -240px;
} }
.player-button-ppt__active { .player-button-ppt__active {
background-position: 0 -280px; background-position: 0 -280px;
color: #b19241; color: #b19241;
} }
.player-button-skip { .player-button-skip {
background-position: 0 -160px; background-position: 0 -160px;
} }
.player-button-skip__active { .player-button-skip__active {
background-position: 0 -200px; background-position: 0 -200px;
color: #b19241; color: #b19241;
} }
::v-deep .el-dialog {
::v-deep .my-dialog {
background-color: #3f3f3f; background-color: #3f3f3f;
border-radius: 10px; border-radius: 10px;
overflow: hidden; overflow: hidden;
} .el-dialog__header {
::v-deep .el-dialog__header {
display: none; display: none;
min-height: 24px; min-height: 24px;
} }
::v-deep .el-dialog__headerbtn .el-dialog__close {
.el-dialog__headerbtn .el-dialog__close {
font-size: 24px; font-size: 24px;
} }
::v-deep .el-dialog__body {
.el-dialog__body {
padding: 0; padding: 0;
}
} }
</style> </style>
<template> <template>
<div class="video-player" id="player"></div> <div class="video-player" :id="id"></div>
</template> </template>
<script> <script>
import _ from 'lodash'
export default { export default {
name: 'VideoPlayer', name: 'VideoPlayer',
props: { props: {
...@@ -12,9 +13,11 @@ export default { ...@@ -12,9 +13,11 @@ export default {
disabled: { type: Boolean, default: false } disabled: { type: Boolean, default: false }
}, },
data() { data() {
const id = _.uniqueId('player_')
let videoRetry = parseInt(window.localStorage.getItem('videoRetry')) let videoRetry = parseInt(window.localStorage.getItem('videoRetry'))
videoRetry = isNaN(videoRetry) ? 3 : videoRetry videoRetry = isNaN(videoRetry) ? 3 : videoRetry
return { player: null, videoRetry } return { id, player: null, videoRetry }
}, },
methods: { methods: {
createPlayer() { createPlayer() {
...@@ -31,7 +34,7 @@ export default { ...@@ -31,7 +34,7 @@ export default {
*/ */
this.player = new Aliplayer( this.player = new Aliplayer(
{ {
id: 'player', id: this.id,
source: JSON.stringify({ SD, LD, FD }), source: JSON.stringify({ SD, LD, FD }),
width: '100%', width: '100%',
height: '100%', height: '100%',
...@@ -43,26 +46,26 @@ export default { ...@@ -43,26 +46,26 @@ export default {
useHlsPluginForSafari: true, useHlsPluginForSafari: true,
language: this.$i18n.locale === 'zh-CN' ? 'zh-cn' : 'en-us' language: this.$i18n.locale === 'zh-CN' ? 'zh-cn' : 'en-us'
}, },
function (player) { function(player) {
// 禁止调整进度,隐藏声音和倍数 // 禁止调整进度,隐藏声音和倍数
if (_this.disabled) { if (_this.disabled) {
$('.prism-volume, .prism-setting-speed').hide() $('.prism-volume, .prism-setting-speed').hide()
$('.prism-progress').css('pointer-events', 'none') $('.prism-progress').css('pointer-events', 'none')
} }
player.on('ready', function () { player.on('ready', function() {
// 跳过片头 // 跳过片头
_this.isSkip && player.seek(6) _this.isSkip && player.seek(6)
_this.$emit('ready', player) _this.$emit('ready', player)
}) })
player.on('timeupdate', function (event) { player.on('timeupdate', function(event) {
const currentTime = player.getCurrentTime() const currentTime = player.getCurrentTime()
_this.$emit('timeupdate', currentTime) _this.$emit('timeupdate', currentTime)
if (currentTime > 1) { if (currentTime > 1) {
window.localStorage.setItem('videoRetry', 3) window.localStorage.setItem('videoRetry', 3)
} }
}) })
player.on('error', function (event) { player.on('error', function(event) {
_this.$emit('error', event) _this.$emit('error', event)
if (_this.videoRetry) { if (_this.videoRetry) {
window.localStorage.setItem('videoRetry', _this.videoRetry - 1) window.localStorage.setItem('videoRetry', _this.videoRetry - 1)
...@@ -70,7 +73,7 @@ export default { ...@@ -70,7 +73,7 @@ export default {
} }
console.log(event) console.log(event)
}) })
player.on('ended', function () { player.on('ended', function() {
_this.$emit('ended') _this.$emit('ended')
}) })
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论