Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
cert-admin
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
cert-admin
Commits
66cff64e
提交
66cff64e
authored
2月 27, 2023
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: 新增导入学员证书
上级
e8ddfa74
隐藏空白字符变更
内嵌
并排
正在显示
11 个修改的文件
包含
348 行增加
和
131 行删除
+348
-131
.config.dev.js
.config.dev.js
+3
-3
.key
build/.key
+0
-7
.pem
build/.pem
+0
-7
dev.ezijing.com.key
build/dev.ezijing.com.key
+27
-26
dev.ezijing.com.pem
build/dev.ezijing.com.pem
+109
-55
package-lock.json
package-lock.json
+0
-0
package.json
package.json
+1
-0
student.js
src/api/student.js
+7
-2
cert.vue
src/pages/student/components/cert.vue
+42
-0
uploadCert.vue
src/pages/student/components/uploadCert.vue
+75
-0
index.vue
src/pages/student/index.vue
+84
-31
没有找到文件。
.config.dev.js
浏览文件 @
66cff64e
module
.
exports
=
{
domain
:
'dev.ezijing.com'
,
url
:
'https://certs-admin
2
.ezijing.com/api'
,
url
:
'https://certs-admin.ezijing.com/api'
,
webpack
:
{
externals
:
{
CKEDITOR
:
'window.CKEDITOR'
,
...
...
@@ -33,7 +33,7 @@ module.exports = {
},
ProvidePlugin
:
{},
others
:
{
loginUrl
:
'https://login2.ezijing.com/auth/login/index'
//
loginUrl: 'https://login.ezijing.com/auth/login/index'
//
loginUrl: 'https://login2.ezijing.com/auth/login/index'
loginUrl
:
'https://login.ezijing.com/auth/login/index'
}
}
build/.key
deleted
100755 → 0
浏览文件 @
e8ddfa74
<html>
<head><title>
404 Not Found
</title></head>
<body
bgcolor=
"white"
>
<center><h1>
404 Not Found
</h1></center>
<hr><center>
nginx/1.12.0
</center>
</body>
</html>
build/.pem
deleted
100755 → 0
浏览文件 @
e8ddfa74
<html>
<head><title>
404 Not Found
</title></head>
<body
bgcolor=
"white"
>
<center><h1>
404 Not Found
</h1></center>
<hr><center>
nginx/1.12.0
</center>
</body>
</html>
build/dev.ezijing.com.key
浏览文件 @
66cff64e
-----BEGIN RSA PRIVATE KEY-----
MIIE
owIBAAKCAQEA9MjUExxOj6tfMUaU+t/k0+VokVkh1GVZACLPdxR2VcjjOkaI
qloY4TK4/uybncLhoqu9ggyiJFNmXVLxe2TxReGXhR8tAc0RTCuaFv0oHJ7HXI48
CZ/zc8sgjyd7XsuyRurKwpHWXfy9FMHE7r/9R+IUHAkIPmZ17qlwqphlePK8I1fn
DU/LOvglXPIlR55TUe6NKVoCPZXQEHHPZClH0qdnXFiUq5I1f6GMUoGCbV5DLECb
OAndCP/snqakw8oeLmoBGSig/FGrc/41l2DJxyIxm/CfaEhfnSN4hvOTAFXcro9c
gyy88H1BfT/bEhM7OO+RRaKUrV5CieeIOEmvGQIDAQABAoIBAGmkcsJ8qPsgPskJ
aSqMjjlU/Lgd+5eq1apVW6xMzHVhaY+w+TJsB+jI90Yt30tK3A5UiEkkIqYCyF7m
eQmEGwzJu5bcSZRJaHmzJ6FcSH9xlyC+0fJlcbA7riWaKIhU6O/qTO+D+Tw+42ud
5NwVR75KN9uRmlkz5xnFTraRZtm3MJmA7dwXK3hrN+dFJR2vLO3KBAtpgtpPdkK1
ObpJQ1Q7jsnEmODVRZ7n1CKZEDmXd8GBPA/jCVqgiEbVVCdkhHkyxyIMQenBReyy
tJIPf7CdL3O3PPsThhMa1P2CP/xehS4bcQSLw9wtNTJcvVPHTvffHKOKUfhUxkHu
0cpl+zECgYEA/jzySW/br7W+xS2e4VBHzY+UZJwxd/3mY3d/kasMV1zuipr6WOhQ
FVsd5uJXPRr+rHBypwyOIlP205V2K5oQEK0yT+tF+IBvKGdJv89wskCgrXcD3Kfb
dCFbt014pHw89A8jb8LBbGOPH6jhZhGkxP33CJdVPtncUc4m0hj4HHcCgYEA9nsc
KcCZOIYRlZmJ93DoukhjxaouGFDTOZoujaqasrfXUaWRnpZYekDZWa1NneOzLBEz
h1RwPcmeYLCVRmXtpRzLOKXfJY0gGSJr979I0AVkzj8A9NZcU/HxUP0GqpwBbzAp
EEShQVhjYppQ62KAwZ1tbsVWX2V1SBsa3McExO8CgYEA6kVy5aTDhOgugDeHnguB
/rN9hDBBjVZTQ/jLfolld+NUlDg21FJN6T/rD+Qli1MitfdwTupM1ukUGugw2gC/
KP7Py8D62wBObaav2KXoLPlMlkuDLYMnv501jHVA5CDvcd25Q7Ts01nyerP97zX2
5Oc5CZuZm67ZTDBwqU0E5AUCgYBIC2wL+DPRBb8WDy74mJQt/wLKwBeBG/7hk2OQ
HRHis0HIp7CMvj1WXqYpRDKvt+KjOtPo9pFoPgqBEJxRW3G/FU+BW1qCS2HadulA
HTVXOHxinJ/W8OFD2DBFD/Bm5fq1WUpnaugHhaJnK9wDMWOZND7MZfn9IFbLoMCV
T8bhGQKBgG7qsZhI9ldAqooZQ1xSua/2SBc8GI8d03g7y8kZkkx/XclbEz6X6wUu
U3PVL+neY8Qw3JxC1cHS++KIdHR2ZSoTpF00A4QvDJL0+eo1KgI88vRV8QaWLxPB
ahvXwmkKW2+jgvCAqFtepZx/KsKpQW+x3GOJyhl2tIT8sZwRmE6u
-----END RSA PRIVATE KEY-----
MIIE
pAIBAAKCAQEAucCbdPPyAp6vmnr5XObuPsctUhVLyXwqbIpgI5jWzjG7wmk8
V6z8WJKPO9KZM6D9ejtN/bbbd3j1cRiw7NSl8AUykiVHJWz9TXAflET2EpILLera
I1B2XAcBsc8dZBGGJD/LT97ZvNLYzuQOr7R1wytWH1uisAK5ClzgnSptMenXFyhw
5Xw0Lm3zoeeqYF/KMQ1McAYMGxgu6s6dxXKiA0BcgWQ31yZey0c4HhCt7T7sA/UN
ahUsxtCcSNSvdgXay5Pu/l3N88TwW2QzaCzrueILHWRFwkREhpqyrwjN3gkaa+1T
jLxzCsk/pTnPccxlFwc3YQ3hYLMl36NJ/OIpHwIDAQABAoIBACuMmaXYz6OHmroI
HNCIH9E+F0UIUyVg4/1gj9uoqKvdAx04WPphRyRo8AXhgSOWmfb/UnCqX1fqVvj2
BfzwehsEzO9wp/aBT/3IzM6RQHPoI5DXX98prSY0SlRqr4RXi3CSOFN4duoLMOOI
mlzdXUKttVpSvJixerqQPeT7HnC18NBKOydFMYPdXsgWcMXvu2BuvRClIzsjlXKM
VP00BNRY3Oje6T9yl8N051jIZh48YD3yyEAVFKPOWaJVzUU/RRPOOdTb2Y3A1bek
IbCdurdzoEQoJxkeTuColnuL1jj2mpxIBskKYhPAMV5arYS0pZ0VAtjoGGCyn7gT
l/bkTVkCgYEA6EB15hzRD2iTTIFMtDBqw0l3vJWcuWPvwFZl6zculO8Cdsvx0cDZ
VbEXByA0+CG3q47/UrVqETRhtyuVnxuKrceKU8/zib1dvvTMNjeYLKosjyG49xO6
gDx7nVBwYHmQN/iEuWTobLg1vtSNyd99WgG4cFHvqF7kIJb2W0IaGrsCgYEAzL70
VHn9BUP3CGecoU8Fnck9/7GWhvGgFU58Q/dU3Jr8g6lroeDas9zQU2tCnJN0e7cr
13thq2kQQHTYCY4J6EUtjO89sNVx4bO83xqQhobZBwZXkE5QDWIKCbiYGRLAb1+f
AAEwIEdPBgM88YFHOU5YbPTYH8TLkJfxyvMonu0CgYEArGWE3n3PdVeT1zs3O52g
8jrrpVGNF1QmWCgJ2VKJwkW0F4iFhMRYzzH3vPNcPj+Q/cjUn4lIJWMzkWrJ0mP4
ScyPUm1PApRNLPy7RRd5XtYm40wN52F+k8fRnlFiSUqTEejoZFGR8Xm/c1qFsS6y
9ofGZ6F6ewmM3uAQGGd1xxcCgYBFhjoVTW8bkJ6b3gMTy2+Oyr0gzD7fB8FiOsp7
kcrhNke0tZz01ROuq7aZ/Pwbiv6s2+ApRZ4+xGheWs7ZP8AhfQwgpUR/fZs0FwJ1
h+G3rKaZeg/V0qHgSYA7GNGdAf8SUpf9OmoLK+urkQHqyAlVbkMcjG+vKfYt3Uqf
rb4HaQKBgQCxm1oz9QrmxWKJ4eYKHSsD9UPu4QZhltBECH1btgvTwAEmwuXaCcta
RaFNhMe609sQ+YVIxa9fK0MXBiq7DG6nSLGvnLfVEYo4nGe6EvL9nQ7IFZywJjTb
/Fw4rTMwT59VSWJdv8BPznV7Gk7p17fcXM55iJxxu65r3ZuOXjQSGA==
-----END RSA PRIVATE KEY-----
\ No newline at end of file
build/dev.ezijing.com.pem
浏览文件 @
66cff64e
-----BEGIN CERTIFICATE-----
MIIFhzCCBG+gAwIBAgIQCzEi4VmynSzbyBV1UEXGojANBgkqhkiG9w0BAQsFADBu
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMS0wKwYDVQQDEyRFbmNyeXB0aW9uIEV2ZXJ5d2hlcmUg
RFYgVExTIENBIC0gRzEwHhcNMjAxMTA5MDAwMDAwWhcNMjExMTA5MjM1OTU5WjAa
MRgwFgYDVQQDEw9kZXYuZXppamluZy5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB
DwAwggEKAoIBAQD0yNQTHE6Pq18xRpT63+TT5WiRWSHUZVkAIs93FHZVyOM6Roiq
WhjhMrj+7JudwuGiq72CDKIkU2ZdUvF7ZPFF4ZeFHy0BzRFMK5oW/SgcnsdcjjwJ
n/NzyyCPJ3tey7JG6srCkdZd/L0UwcTuv/1H4hQcCQg+ZnXuqXCqmGV48rwjV+cN
T8s6+CVc8iVHnlNR7o0pWgI9ldAQcc9kKUfSp2dcWJSrkjV/oYxSgYJtXkMsQJs4
Cd0I/+yepqTDyh4uagEZKKD8Uatz/jWXYMnHIjGb8J9oSF+dI3iG85MAVdyuj1yD
LLzwfUF9P9sSEzs475FFopStXkKJ54g4Sa8ZAgMBAAGjggJzMIICbzAfBgNVHSME
GDAWgBRVdE+yck/1YLpQ0dfmUVyaAYca1zAdBgNVHQ4EFgQUkRHkmubxZAvEWtCY
IBT9sw/3Yb8wGgYDVR0RBBMwEYIPZGV2LmV6aWppbmcuY29tMA4GA1UdDwEB/wQE
AwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwTAYDVR0gBEUwQzA3
BglghkgBhv1sAQIwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQu
Y29tL0NQUzAIBgZngQwBAgEwgYAGCCsGAQUFBwEBBHQwcjAkBggrBgEFBQcwAYYY
aHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEoGCCsGAQUFBzAChj5odHRwOi8vY2Fj
ZXJ0cy5kaWdpY2VydC5jb20vRW5jcnlwdGlvbkV2ZXJ5d2hlcmVEVlRMU0NBLUcx
LmNydDAJBgNVHRMEAjAAMIIBBAYKKwYBBAHWeQIEAgSB9QSB8gDwAHYA9lyUL9F3
MCIUVBgIMJRWjuNNExkzv98MLyALzE7xZOMAAAF1qpa6jQAABAMARzBFAiAwHOcp
Ua1H0WK4OZUHiQ1rndqnYxPHhP9XWunwpRMoagIhAOB2MPSW9M4qj6Yih7eQkydl
lgawpoBZzRzhisU+TN67AHYAXNxDkv7mq0VEsV6a1FbmEDf71fpH3KFzlLJe5vbH
DsoAAAF1qpa63gAABAMARzBFAiEA92ZeW0PgyWW3j+3wypLS0O/wI63C+x0WTvMZ
Vngp6AMCIBoThjaKif+XY11YbaV89ndqs1nDlzbEfBrFftoB9fchMA0GCSqGSIb3
DQEBCwUAA4IBAQA2geo9wQAd+vx+lwAafVRxCBQyBiS0qT413ewYpZYDnSkLX0l1
5kRdxDGWQhPzOio0ckj/jOtOlbbSsiovBBVTyYPB8WfkNjMd0psMNx2e6Wy/WKkQ
X3DqEOB4XGg0RwpebiAmz6lWxyFwIAbCrwCntkkaIF4LnIvczn6pvPFBtK2nXJJC
HL0Igbxo+xJLt3Hql7TcwkFDXz/LIB8AwhhkkhhwW45r3Eyjw8eOyzvflDPwSNH+
ByadQ+AH4H4vYYVo0ILNIPCdaokLQ+u4FttB9VQ+iGmpJ56Yg2muxWh8Qckca+vH
40RbC5aK1RSy2RIRpC5fwvq2JuV/CksP5G5Q
MIIGtjCCBZ6gAwIBAgIQDjUArTRdZ4P5wtQVmCqJGjANBgkqhkiG9w0BAQsFADBj
MQswCQYDVQQGEwJDTjE2MDQGA1UECgwtQmVpamluZyBYaW5jaGFjaGEgQ3JlZGl0
IE1hbmFnZW1lbnQgQ28uLCBMdGQuMRwwGgYDVQQDDBNYY2MgVHJ1c3QgT1YgU1NM
IENBMB4XDTIyMDgxODE0MDAzMVoXDTIzMDkxNzE0MDAzMFowgY4xCzAJBgNVBAYT
AkNOMRIwEAYDVQQIDAnljJfkuqzluIIxEjAQBgNVBAcMCeWMl+S6rOW4gjE/MD0G
A1UECgw25riF5o6n57Sr6I2G77yI5YyX5Lqs77yJ5pWZ6IKy56eR5oqA6IKh5Lu9
5pyJ6ZmQ5YWs5Y+4MRYwFAYDVQQDDA0qLmV6aWppbmcuY29tMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAucCbdPPyAp6vmnr5XObuPsctUhVLyXwqbIpg
I5jWzjG7wmk8V6z8WJKPO9KZM6D9ejtN/bbbd3j1cRiw7NSl8AUykiVHJWz9TXAf
lET2EpILLeraI1B2XAcBsc8dZBGGJD/LT97ZvNLYzuQOr7R1wytWH1uisAK5Clzg
nSptMenXFyhw5Xw0Lm3zoeeqYF/KMQ1McAYMGxgu6s6dxXKiA0BcgWQ31yZey0c4
HhCt7T7sA/UNahUsxtCcSNSvdgXay5Pu/l3N88TwW2QzaCzrueILHWRFwkREhpqy
rwjN3gkaa+1TjLxzCsk/pTnPccxlFwc3YQ3hYLMl36NJ/OIpHwIDAQABo4IDODCC
AzQwDAYDVR0TAQH/BAIwADBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8veGluY2hh
Y2hhMm92LmNybC5jZXJ0dW0ucGwveGluY2hhY2hhMm92LmNybDB5BggrBgEFBQcB
AQRtMGswLwYIKwYBBQUHMAGGI2h0dHA6Ly94aW5jaGFjaGEyb3Yub2NzcC1jZXJ0
dW0uY29tMDgGCCsGAQUFBzAChixodHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwv
eGluY2hhY2hhMm92LmNlcjAfBgNVHSMEGDAWgBT6oMvCx12BtSCSByALtjtwOwkO
VTAdBgNVHQ4EFgQUEJufsd5nLNR+wqR2GsFWDn7qTn0wTAYDVR0gBEUwQzAIBgZn
gQwBAgIwNwYMKoRoAYb2dwIFARYCMCcwJQYIKwYBBQUHAgEWGWh0dHBzOi8vd3d3
LmNlcnR1bS5wbC9DUFMwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4G
A1UdDwEB/wQEAwIFoDAlBgNVHREEHjAcgg0qLmV6aWppbmcuY29tggtlemlqaW5n
LmNvbTCCAX4GCisGAQQB1nkCBAIEggFuBIIBagFoAHYAVYHUwhaQNgFK6gubVzxT
8MDkOHhwJQgXL6OqHQcT0wwAAAGCsUFwdgAABAMARzBFAiAc51lynft4sehXTgyw
tjQ83PAVmfZ3FC55eIpIETe2hgIhANvo5ZtGQpcZQ5HSGbRLy4Y9/MbUrS8dtkwP
l7I/lRj7AHYArfe++nz/EMiLnT2cHj4YarRnKV3PsQwkyoWGNOvcgooAAAGCsUFw
TwAABAMARzBFAiATnQDMw1wykBdnTIRfSSXPj7HZfDdRRq6VaiTbSpYKYQIhAMTp
V6K0W9gtdYGdeg4j6n17S1yMODYvLJxd3kAFFNDTAHYAejKMVNi3LbYg6jjgUh7p
hBZwMhOFTTvSK8E6V6NS61IAAAGCsUFwrQAABAMARzBFAiEAwWKXKxp6DcKG7R/d
rxmPUg8uNbUcdxysrpB3gOzkIlACICWpx7/+2ulDG2EC9m4RqGcXbts3VWu/yxpE
0pAYuAP8MA0GCSqGSIb3DQEBCwUAA4IBAQCf3AdKLO8EUntMjKaRa0lncwh/pBIQ
bcQfkJBfiTpo6tnRphR+DE50oYOX1TSQRm4cDgP2JURYiTK6Z2+ljqMbUx4mNLqe
+6yG+PGCUX6rX4BsJqlRP2W7WONE/I3/3S6MRfclKmakHSyrGFi8O/JJyNqm+5z9
8tnk8c1Cn7FboJZonhX0yszHkXLLeA93xm5+Etkw0+DvRcZGiEqKQivO3CnUh1gs
LZg27a8s3dtmAAHbb2icm5jloK9Jgpx/NkGL/cCoNZ8Ng2TZkRvo6GzIp43uS332
R07dQ6rNWZkPzdxKUdNcT0v3yJJyxD1H3Rk4/bxp78giw4JGHp52Df+U
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEqjCCA5KgAwIBAgIQAnmsRYvBskWr+YBTzSybsTANBgkqhkiG9w0BAQsFADBh
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
QTAeFw0xNzExMjcxMjQ2MTBaFw0yNzExMjcxMjQ2MTBaMG4xCzAJBgNVBAYTAlVT
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
b20xLTArBgNVBAMTJEVuY3J5cHRpb24gRXZlcnl3aGVyZSBEViBUTFMgQ0EgLSBH
MTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALPeP6wkab41dyQh6mKc
oHqt3jRIxW5MDvf9QyiOR7VfFwK656es0UFiIb74N9pRntzF1UgYzDGu3ppZVMdo
lbxhm6dWS9OK/lFehKNT0OYI9aqk6F+U7cA6jxSC+iDBPXwdF4rs3KRyp3aQn6pj
pp1yr7IB6Y4zv72Ee/PlZ/6rK6InC6WpK0nPVOYR7n9iDuPe1E4IxUMBH/T33+3h
yuH3dvfgiWUOUkjdpMbyxX+XNle5uEIiyBsi4IvbcTCh8ruifCIi5mDXkZrnMT8n
wfYCV6v6kDdXkbgGRLKsR4pucbJtbKqIkUGxuZI2t7pfewKRc5nWecvDBZf3+p1M
pA8CAwEAAaOCAU8wggFLMB0GA1UdDgQWBBRVdE+yck/1YLpQ0dfmUVyaAYca1zAf
BgNVHSMEGDAWgBQD3lA1VtFMu2bwo+IbG8OXsj3RVTAOBgNVHQ8BAf8EBAMCAYYw
HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBIGA1UdEwEB/wQIMAYBAf8C
AQAwNAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp
Y2VydC5jb20wQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybDMuZGlnaWNlcnQu
Y29tL0RpZ2lDZXJ0R2xvYmFsUm9vdENBLmNybDBMBgNVHSAERTBDMDcGCWCGSAGG
/WwBAjAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BT
MAgGBmeBDAECATANBgkqhkiG9w0BAQsFAAOCAQEAK3Gp6/aGq7aBZsxf/oQ+TD/B
SwW3AU4ETK+GQf2kFzYZkby5SFrHdPomunx2HBzViUchGoofGgg7gHW0W3MlQAXW
M0r5LUvStcr82QDWYNPaUy4taCQmyaJ+VB+6wxHstSigOlSNF2a6vg4rgexixeiV
4YSB03Yqp2t3TeZHM9ESfkus74nQyW7pRGezj+TC44xCagCQQOzzNmzEAP2SnCrJ
sNE2DpRVMnL8J6xBRdjmOsC3N6cQuKuRXbzByVBjCqAA8t1L0I+9wXJerLPyErjy
rMKWaBFLmfK/AHNF4ZihwPGOc7w6UHczBZXH5RFzJNnww+WnKuTPI0HfnVH8lg==
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-----
package-lock.json
浏览文件 @
66cff64e
This source diff could not be displayed because it is too large. You can
view the blob
instead.
package.json
浏览文件 @
66cff64e
...
...
@@ -74,6 +74,7 @@
"
core-js
"
:
"^3.8.3"
,
"
cross-env
"
:
"^7.0.3"
,
"
element-ui
"
:
"^2.15.0"
,
"
filesize
"
:
"^10.0.6"
,
"
js-cookie
"
:
"^2.2.1"
,
"
lodash
"
:
"^4.17.20"
,
"
vue
"
:
"^2.6.12"
,
...
...
src/api/student.js
浏览文件 @
66cff64e
...
...
@@ -93,4 +93,10 @@ export function getStudentCourseList(id) {
*/
export
function
saveStudentCourseList
(
id
,
data
)
{
return
httpRequest
.
post
(
`/api/certs/v1/student/save-course/
${
id
}
`
,
data
)
}
\ No newline at end of file
}
/**
* 导入学员证书
*/
export
function
uploadStudentCert
(
data
)
{
return
httpRequest
.
post
(
'/api/certs/v1/student/certificates'
,
data
)
}
src/pages/student/components/cert.vue
0 → 100644
浏览文件 @
66cff64e
<
template
>
<div
class=
"student-cert"
>
<el-table
:data=
"fileList"
size=
"mini"
style=
"width: 100%"
>
<el-table-column
label=
"文件名称"
prop=
"file_name"
>
<template
#
default=
"
{row}">
<a
:href=
"row.url"
target=
"_blank"
>
<el-button
type=
"text"
>
{{
row
.
file_name
}}
</el-button>
</a>
</
template
>
</el-table-column>
<el-table-column
label=
"文件大小"
prop=
"file_size"
>
<
template
#
default=
"{row}"
>
{{
filesize
(
row
.
file_size
)
}}
</
template
>
</el-table-column>
<el-table-column
label=
"上传时间"
prop=
"created_time"
/>
</el-table>
</div>
</template>
<
script
>
import
{
filesize
}
from
'filesize'
export
default
{
props
:
{
info
:
{
type
:
Object
}
},
computed
:
{
fileList
()
{
if
(
!
this
.
info
.
certificate
)
return
[]
try
{
const
certJSON
=
JSON
.
parse
(
this
.
info
.
certificate
)
return
[
certJSON
]
}
catch
(
error
)
{
console
.
log
(
error
)
}
return
[]
}
},
methods
:
{
filesize
(
value
)
{
return
filesize
(
value
)
}
}
}
</
script
>
src/pages/student/components/uploadCert.vue
0 → 100644
浏览文件 @
66cff64e
<
template
>
<el-dialog
title=
"批量导入学员证书"
v-bind=
"$attrs"
v-on=
"$listeners"
>
<el-upload
class=
"upload-demo"
action=
"https://webapp-pub.oss-cn-beijing.aliyuncs.com"
drag
multiple
:data=
"uploadData"
:before-upload=
"beforeUpload"
:on-change=
"onChange"
:on-success=
"onSuccess"
ref=
"upload"
>
<i
class=
"el-icon-upload"
></i>
<div
class=
"el-upload__text"
>
将文件拖到此处,或
<em>
点击上传
</em></div>
<div
class=
"el-upload__tip"
>
仅支持pdf格式
</div>
</el-upload>
<template
#
footer
>
<el-row
type=
"flex"
justify=
"space-between"
align=
"middle"
>
<p>
已成功上传
<span>
{{
successNumber
}}
</span
>
/
{{
fileList
.
length
}}
</p>
<el-button
type=
"primary"
@
click=
"$emit('update:visible', false)"
>
完成
</el-button>
</el-row>
</
template
>
</el-dialog>
</template>
<
script
>
import
{
getSignature
}
from
'@/api/common'
import
{
uploadStudentCert
}
from
'@/api/student'
export
default
{
name
:
'uploadCert'
,
data
()
{
return
{
uploadData
:
{},
fileList
:
[]
}
},
computed
:
{
successNumber
()
{
return
this
.
fileList
.
filter
(
item
=>
item
.
status
===
'success'
).
length
}
},
methods
:
{
async
beforeUpload
(
file
)
{
const
key
=
`upload/cert-admin/cert/
${
file
.
name
}
`
const
{
accessid
,
policy
,
signature
,
host
}
=
await
getSignature
()
this
.
uploadData
=
{
key
,
OSSAccessKeyId
:
accessid
,
policy
,
signature
,
success_action_status
:
'200'
}
file
.
src
=
`
${
host
}
/
${
key
}
`
},
onSuccess
(
response
,
file
,
fileList
)
{
uploadStudentCert
({
file_name
:
file
.
name
,
file_size
:
file
.
size
,
url
:
file
.
raw
.
src
}).
catch
(()
=>
{
this
.
$refs
.
upload
.
handleRemove
(
file
)
})
},
onChange
(
file
,
fileList
)
{
this
.
fileList
=
fileList
}
}
}
</
script
>
<
style
lang=
"scss"
>
.upload-demo
{
.el-upload
{
display
:
block
;
}
.el-upload-dragger
{
width
:
100%
;
}
}
</
style
>
src/pages/student/index.vue
浏览文件 @
66cff64e
...
...
@@ -3,15 +3,23 @@
<table-list
v-bind=
"tableOptions"
ref=
"tabList"
@
selection-change=
"handleSelectionChange"
>
<template
#
header-aside
>
<el-button
type=
"primary"
size=
"mini"
@
click=
"dialogVisible = true"
v-if=
"hasImport"
>
导入
</el-button>
<el-button
type=
"primary"
size=
"mini"
@
click=
"uploadCertVisible = true"
v-if=
"hasImport"
>
导入证书
</el-button>
</
template
>
<!-- 图片 -->
<
template
v-slot:table_img=
"{ row }"
>
<img
v-if=
"row.head_img"
:src=
"row.head_img"
height=
"60"
width=
"60"
/>
<img
v-else
src=
"https://zws-imgs-pub.ezijing.com/c78a145ba87f1b0d2f5752a0eb4c9851.jpg"
height=
"60"
width=
"60"
>
<img
v-if=
"row.head_img"
:src=
"row.head_img"
height=
"60"
width=
"60"
/>
<img
v-else
src=
"https://zws-imgs-pub.ezijing.com/c78a145ba87f1b0d2f5752a0eb4c9851.jpg"
height=
"60"
width=
"60"
/>
</
template
>
<!-- Id -->
<
template
v-slot:table_id=
"scope"
>
<span
class=
"details-handle"
style=
"color:#409EFF"
@
click=
"handleDetails(scope.row)"
>
{{
scope
.
row
.
student_number
}}
</span>
<span
class=
"details-handle"
style=
"color:#409EFF"
@
click=
"handleDetails(scope.row)"
>
{{
scope
.
row
.
student_number
}}
</span>
</
template
>
<!-- 中文名 -->
<
template
v-slot:table_name=
"scope"
>
...
...
@@ -43,14 +51,22 @@
:disabled=
"!hasCreate"
></el-switch>
</
template
>
<
template
#
cert=
"{ row }"
>
<el-button
type=
"primary"
size=
"mini"
@
click=
"handleViewCert(row)"
v-if=
"row.certificate"
>
查看
</el-button>
</
template
>
<
template
#
footer
>
<div>
已选中
{{
multipleSelection
.
length
}}
项
<el-button
style=
"margin-left:15px;"
size=
"mini"
:disabled=
"!multipleSelection.length"
@
click=
"handleRemove"
v-if=
"hasDelete"
>
删除
</el-button>
已选中
{{
multipleSelection
.
length
}}
项
<el-button
style=
"margin-left:15px;"
size=
"mini"
:disabled=
"!multipleSelection.length"
@
click=
"handleRemove"
v-if=
"hasDelete"
>
删除
</el-button
>
<el-dropdown
size=
"small"
@
command=
"handleCommand"
v-if=
"hasExport"
>
<el-button
type=
"primary"
size=
"mini"
>
导出
<i
class=
"el-icon-arrow-down el-icon--right"
></i>
</el-button>
<el-button
type=
"primary"
size=
"mini"
>
导出
<i
class=
"el-icon-arrow-down el-icon--right"
></i>
</el-button>
<el-dropdown-menu
slot=
"dropdown"
>
<el-dropdown-item
command=
"all"
>
导出全部
</el-dropdown-item>
<el-dropdown-item
command=
"selected"
:disabled=
"!multipleSelection.length"
>
导出选中项
</el-dropdown-item>
...
...
@@ -66,20 +82,31 @@
:destroy-on-close=
"true"
size=
"1100px"
top=
"15px"
:before-close=
"handleBeforeClose"
>
:before-close=
"handleBeforeClose"
>
<el-tabs
v-model=
"tabsActive"
type=
"card"
>
<el-tab-pane
label=
"基本信息"
name=
"info"
v-if=
"hasViewInfo"
>
<tab-info
:info=
"details"
@
tableRefetch=
"tableRefetch"
/>
<tab-info
:info=
"details"
@
tableRefetch=
"tableRefetch"
/>
</el-tab-pane>
<el-tab-pane
label=
"学位信息"
name=
"degree"
v-if=
"hasViewDegree"
>
<tab-degree
:id=
"details.id"
/>
<tab-degree
:id=
"details.id"
/>
</el-tab-pane>
<el-tab-pane
label=
"项目课程"
name=
"course"
v-if=
"hasViewCourse"
>
<tab-course
:id=
"details.id"
/>
<tab-course
:id=
"details.id"
/>
</el-tab-pane>
<el-tab-pane
label=
"学位证书"
name=
"cert"
>
<tab-cert
:info=
"details"
/>
</el-tab-pane>
</el-tabs>
</el-drawer>
<el-dialog
title=
"导入学员"
:visible
.
sync=
"dialogVisible"
width=
"480px"
:destroy-on-close=
"true"
:close-on-click-modal=
"false"
@
close=
"handleDialogClose"
>
<el-dialog
title=
"导入学员"
:visible
.
sync=
"dialogVisible"
width=
"480px"
:destroy-on-close=
"true"
:close-on-click-modal=
"false"
@
close=
"handleDialogClose"
>
<div>
导入类型:
<el-select
v-model=
"importType"
placeholder=
"请选择"
size=
"mini"
style=
"margin-bottom:15px;"
>
...
...
@@ -96,18 +123,23 @@
:before-upload=
"beforeUpload"
:http-request=
"fetchFileUpload"
accept=
".xls,.xlsx"
>
>
<el-button
slot=
"trigger"
size=
"mini"
type=
"primary"
>
选取文件
</el-button>
<span
slot=
"tip"
style=
"margin-left:10px;"
>
只能上传excel文件
</span>
</el-upload>
<div
style=
"margin-bottom:10px;"
>
导入模板下载:
<a
href=
"/api/certs/files/student_import.xlsx"
download=
"学员模板"
><el-button
type=
"text"
>
student_import.xlsx
</el-button></a>
导入模板下载:
<a
href=
"/api/certs/files/student_import.xlsx"
download=
"学员模板"
><el-button
type=
"text"
>
student_import.xlsx
</el-button></a
>
</div>
<div
style=
"text-align:center;"
>
<el-button
size=
"mini"
@
click=
"dialogVisible = false"
>
取消
</el-button>
<el-button
type=
"primary"
size=
"mini"
@
click=
"submitUpload"
>
确认提交
</el-button>
</div>
</el-dialog>
<!-- 批量导入学员证书 -->
<UploadCert
:visible
.
sync=
"uploadCertVisible"
v-if=
"uploadCertVisible"
></UploadCert>
</div>
</template>
<
script
>
...
...
@@ -115,13 +147,15 @@ import TableList from '@/components/TableList'
import
TabInfo
from
'./components/info.vue'
import
TabDegree
from
'./components/degree.vue'
import
TabCourse
from
'./components/course.vue'
import
TabCert
from
'./components/cert.vue'
import
UploadCert
from
'./components/uploadCert.vue'
import
{
getStudentList
,
deleteStudent
,
importStudents
,
exportStudentList
}
from
'@/api/student'
import
_
from
'lodash'
import
XLSX
from
'xlsx'
import
{
splitStrLast
,
funDownload
}
from
'@/utils/utils'
const
genderMap
=
{
0
:
'女'
,
1
:
'男'
,
2
:
'未知'
}
export
default
{
components
:
{
TableList
,
TabInfo
,
TabDegree
,
TabCourse
},
components
:
{
TableList
,
TabInfo
,
TabDegree
,
TabCourse
,
TabCert
,
UploadCert
},
data
()
{
return
{
multipleSelection
:
[],
...
...
@@ -135,7 +169,8 @@ export default {
{
label
:
'学位信息'
,
value
:
'degree'
},
{
label
:
'课程信息'
,
value
:
'course'
}
],
importType
:
'info'
importType
:
'info'
,
uploadCertVisible
:
false
}
},
computed
:
{
...
...
@@ -175,12 +210,21 @@ export default {
return
{
remote
:
{
httpRequest
:
getStudentList
,
params
:
{
key
:
''
,
mobile
:
''
,
email
:
''
}
params
:
{
key
:
''
,
mobile
:
''
,
email
:
''
,
has_certificate
:
''
}
},
filters
:
[
{
type
:
'input'
,
placeholder
:
'请输入学籍ID/学员姓名'
,
prop
:
'key'
},
{
type
:
'input'
,
placeholder
:
'电话号码'
,
prop
:
'mobile'
},
{
type
:
'input'
,
placeholder
:
'邮箱地址'
,
prop
:
'email'
}
{
type
:
'input'
,
placeholder
:
'邮箱地址'
,
prop
:
'email'
},
{
type
:
'select'
,
placeholder
:
'是否有证书'
,
prop
:
'has_certificate'
,
options
:
[
{
label
:
'是'
,
value
:
1
},
{
label
:
'否'
,
value
:
0
}
]
}
],
columns
:
[
{
type
:
'selection'
,
minWidth
:
'50px'
,
fixed
:
'left'
,
visible
:
this
.
hasDelete
},
...
...
@@ -225,14 +269,14 @@ export default {
{
prop
:
'updated_operator'
,
label
:
'修改人'
,
minWidth
:
'80px'
},
{
prop
:
'updated_time'
,
label
:
'修改时间'
,
minWidth
:
'150px'
},
{
prop
:
'created_operator'
,
label
:
'创建人'
,
minWidth
:
'80px'
},
{
prop
:
'created_time'
,
label
:
'创建时间'
,
minWidth
:
'150px'
}
{
prop
:
'created_time'
,
label
:
'创建时间'
,
minWidth
:
'150px'
},
{
prop
:
'has_certificate'
,
label
:
'毕业证书'
,
slots
:
'cert'
}
],
bodyHeight
:
'calc(100% - 50px)'
}
}
},
created
()
{
},
created
()
{},
methods
:
{
handleSelectionChange
(
val
)
{
this
.
multipleSelection
=
val
...
...
@@ -241,9 +285,11 @@ export default {
this
.
$confirm
(
'确定删除选中项?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
}).
then
(()
=>
{
this
.
fetchDeleteStudents
()
}).
catch
(()
=>
{});
})
.
then
(()
=>
{
this
.
fetchDeleteStudents
()
})
.
catch
(()
=>
{})
},
handleDetails
(
val
)
{
if
(
this
.
hasViewInfo
||
this
.
hasViewDegree
||
this
.
hasViewCourse
)
{
...
...
@@ -366,15 +412,23 @@ export default {
},
tableRefetch
()
{
this
.
$refs
.
tabList
.
refetch
()
},
handleViewCert
(
row
)
{
try
{
const
certJSON
=
JSON
.
parse
(
row
.
certificate
)
window
.
open
(
certJSON
.
url
)
}
catch
(
error
)
{
console
.
log
(
error
)
}
}
}
}
</
script
>
<
style
scoped
>
.el-tabs
{
padding
:
15px
;
.el-tabs
{
padding
:
15px
;
}
.file-import
{
padding-bottom
:
15px
;
.file-import
{
padding-bottom
:
15px
;
}
</
style
>
\ No newline at end of file
</
style
>
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论