Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
L
learn-online-pc
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
learn-online-pc
Commits
c50df1d1
提交
c50df1d1
authored
9月 17, 2020
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修改办事大厅重修模块
上级
25df74d1
隐藏空白字符变更
内嵌
并排
正在显示
13 个修改的文件
包含
643 行增加
和
124 行删除
+643
-124
webpack.base.conf.js
client/build/webpack.base.conf.js
+2
-1
base_api.js
client/src/api/base_api.js
+11
-36
upload.vue
client/src/components/upload.vue
+40
-45
main.js
client/src/main.js
+4
-1
api.js
client/src/pages/affairsHall/api.js
+56
-0
layout.vue
client/src/pages/affairsHall/components/layout.vue
+1
-0
pay.vue
client/src/pages/affairsHall/components/pay.vue
+68
-0
payItem.vue
client/src/pages/affairsHall/components/payItem.vue
+81
-0
hall.vue
client/src/pages/affairsHall/hall.vue
+65
-19
edit.vue
client/src/pages/affairsHall/retake/edit.vue
+269
-0
list.vue
client/src/pages/affairsHall/retake/list.vue
+9
-0
routes.js
client/src/router/routes.js
+21
-3
index.js
client/src/store/index.js
+16
-19
没有找到文件。
client/build/webpack.base.conf.js
浏览文件 @
c50df1d1
...
...
@@ -50,7 +50,8 @@ $GLOBAL.BaseConfig = {
'@api'
:
path
.
resolve
(
__dirname
,
'../'
+
$GLOBAL
.
ResDir
+
'/api'
),
'@action'
:
path
.
resolve
(
__dirname
,
'../'
+
$GLOBAL
.
ResDir
+
'/action'
),
'@tool'
:
path
.
resolve
(
__dirname
,
'../'
+
$GLOBAL
.
ResDir
+
'/tool'
)
}
},
extensions
:
[
'.js'
,
'.jsx'
,
'.json'
,
'.vue'
]
},
module
:
{
rules
:
[
...
...
client/src/api/base_api.js
浏览文件 @
c50df1d1
...
...
@@ -32,32 +32,18 @@ export default class API {
/* 重新封装 请求时的执行函数 */
_request
(
_config
=
{})
{
/* 具体执行请求成功后业务逻辑前,先执行该方法 */
const
beforeSuccess
=
_config
.
beforeSuccess
?
_config
.
beforeSuccess
:
this
.
_reqSuccess
const
beforeSuccess
=
_config
.
beforeSuccess
?
_config
.
beforeSuccess
:
this
.
_reqSuccess
/* 具体执行请求失败后业务逻辑前,先执行该方法 */
const
beforeFail
=
_config
.
beforeFail
?
_config
.
beforeFail
:
this
.
_reqFail
const
headers
=
{
tenant
:
'sofia'
,
version
:
window
.
G
.
VERSION
version
:
window
.
G
.
VERSION
,
'Content-Type'
:
'application/x-www-form-urlencoded'
}
_config
.
headers
=
_
.
assignIn
(
_config
.
headers
,
headers
)
_config
.
headers
=
_
.
assignIn
(
headers
,
_config
.
headers
)
/* 判别 传输方式 */
if
(
_config
.
headers
[
'Content-Type'
]
===
'application/x-www-form-urlencoded'
)
{
let
str
=
''
const
_obj
=
_config
.
data
||
_config
.
params
// for (const key in _obj) {
// str += key + '=' + _obj[key] + '&'
// }
// str = str.substr(0, str.length - 1)
str
=
qs
.
stringify
(
_obj
)
if
(
_config
.
data
)
{
_config
.
data
=
str
}
else
{
_config
.
params
=
str
}
if
(
_config
.
headers
[
'Content-Type'
]
===
'application/x-www-form-urlencoded'
)
{
_config
.
data
=
qs
.
stringify
(
_config
.
data
)
}
if
(
_config
.
headers
[
'Content-Type'
]
===
'multipart/form-data'
)
{
let
fr
=
new
FormData
()
// eslint-disable-line
...
...
@@ -68,10 +54,7 @@ export default class API {
_config
.
data
=
fr
}
/* 创建并根据参数发起请求 */
return
this
.
_axios
(
_config
).
then
(
beforeSuccess
.
bind
(
this
),
beforeFail
.
bind
(
this
)
)
return
this
.
_axios
(
_config
).
then
(
beforeSuccess
.
bind
(
this
),
beforeFail
.
bind
(
this
))
}
setConfirm
(
titleStr
,
btnStr
,
msgStr
)
{
...
...
@@ -91,9 +74,7 @@ export default class API {
_vIn
.
$router
.
go
(
0
)
}
else
{
_vIn
.
$router
.
push
({
path
:
'/login/index?rd='
+
encodeURIComponent
(
href
.
replace
(
/.*
?\/\/
.*
?\/
/gi
,
'/'
))
path
:
'/login/index?rd='
+
encodeURIComponent
(
href
.
replace
(
/.*
?\/\/
.*
?\/
/gi
,
'/'
))
})
}
}
...
...
@@ -155,16 +136,12 @@ export default class API {
/* 重新实现 get请求 */
get
(
url
,
data
,
config
)
{
return
this
.
_request
(
_
.
assignIn
({
url
,
method
:
'GET'
,
params
:
data
},
config
)
)
return
this
.
_request
(
_
.
assignIn
({
url
,
method
:
'GET'
,
params
:
data
},
config
))
}
/* 重新实现 post请求 */
post
(
url
,
data
,
config
)
{
return
this
.
_request
(
_
.
assignIn
({
url
,
method
:
'POST'
,
data
:
data
},
config
)
)
return
this
.
_request
(
_
.
assignIn
({
url
,
method
:
'POST'
,
data
:
data
},
config
))
}
/* 重新实现 put请求 */
...
...
@@ -174,8 +151,6 @@ export default class API {
/* 重新实现 delete请求 */
delete
(
url
,
data
,
config
)
{
return
this
.
_request
(
_
.
assignIn
({
url
,
method
:
'DELETE'
,
params
:
data
},
config
)
)
return
this
.
_request
(
_
.
assignIn
({
url
,
method
:
'DELETE'
,
params
:
data
},
config
))
}
}
client/src/components/upload.vue
浏览文件 @
c50df1d1
<
template
>
<div
class=
"upload"
>
<el-upload
action
:show-file-list=
"false"
:http-request=
"httpRequest"
v-bind=
"$attrs"
>
<slot></slot>
<el-button
type=
"text"
size=
"small"
icon=
"el-icon-upload"
>
点击上传
</el-button>
<template
v-slot:tip
>
<div
class=
"el-upload__tips"
>
<slot
name=
"tip"
></slot>
</div>
</
template
>
</el-upload>
<div
class=
"file-list"
v-if=
"value"
>
<div
class=
"file-list-item"
>
<a
:href=
"value"
target=
"_blank"
>
<i
class=
"el-icon-document"
></i>
{{ fileName }}
</a>
<a
:href=
"value"
:download=
"fileName"
target=
"_blank"
>
<el-tooltip
effect=
"dark"
content=
"下载"
>
<i
class=
"el-icon-download"
></i>
</el-tooltip>
</a>
</div>
</div>
</div>
<el-upload
class=
"avatar-uploader"
action
:accept=
"accept"
:show-file-list=
"showFileList"
:http-request=
"httpRequest"
v-bind=
"$attrs"
>
<slot>
<img
v-if=
"value"
:src=
"value"
class=
"avatar"
/>
<i
v-else
class=
"el-icon-plus uploader-icon"
></i>
</slot>
</el-upload>
</
template
>
<
script
>
...
...
@@ -31,7 +20,9 @@ import cAction from '@action'
export
default
{
name
:
'VUpload'
,
props
:
{
value
:
{
type
:
String
}
value
:
{
type
:
String
},
accept
:
{
type
:
String
,
default
:
'image/*'
},
showFileList
:
{
type
:
Boolean
,
default
:
false
}
},
data
()
{
return
{}
...
...
@@ -52,30 +43,34 @@ export default {
.
catch
(
error
=>
{
console
.
log
(
error
)
})
},
handleRemove
()
{
this
.
$emit
(
'input'
,
''
)
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.file-list-item
{
display
:
flex
;
margin-bottom
:
10px
;
padding
:
0
10px
;
justify-content
:
space-between
;
line-height
:
30px
;
background-color
:
#fff
;
border-radius
:
4px
;
a
{
text-decoration
:
none
;
color
:
#333
;
&
:hover
{
color
:
#b49441
;
}
}
<
style
lang=
"scss"
>
.avatar-uploader
.el-upload
{
border
:
1px
dashed
#d9d9d9
;
border-radius
:
6px
;
cursor
:
pointer
;
position
:
relative
;
overflow
:
hidden
;
}
.avatar-uploader
.el-upload
:hover
{
border-color
:
#b80037
;
}
.uploader-icon
{
font-size
:
28px
;
color
:
#8c939d
;
width
:
220px
;
height
:
220px
;
line-height
:
220px
;
text-align
:
center
;
}
.avatar
{
width
:
220px
;
height
:
220px
;
display
:
block
;
object-fit
:
contain
;
}
</
style
>
client/src/main.js
浏览文件 @
c50df1d1
...
...
@@ -14,6 +14,9 @@ import modules from './modules'
import
createBefore
from
'./components/beforeEnter'
import
store
from
'./store'
import
_
from
'lodash'
Vue
.
prototype
.
$_
=
_
/* 兼容处理 start */
/* 处理低版本浏览器支持axios finally问题 */
require
(
'promise.prototype.finally'
).
shim
()
...
...
@@ -52,5 +55,5 @@ window.G.$instance_vue = new Vue({
router
,
i18n
,
store
,
render
:
(
h
)
=>
h
(
App
)
render
:
h
=>
h
(
App
)
}).
$mount
(
'#app'
)
client/src/pages/affairsHall/api.js
0 → 100644
浏览文件 @
c50df1d1
import
BaseAPI
from
'@/api/base_api'
const
httpRequest
=
new
BaseAPI
(
webConf
)
// 获取事务类型列表
export
function
getAffairType
()
{
return
httpRequest
.
get
(
'/api/lms/v2/lobby/affairs'
)
}
// 获取事务列表
export
function
getAffairList
()
{
return
httpRequest
.
get
(
'/api/lms/v2/lobby/processes'
)
}
// 获取事务详情
export
function
getAffair
(
id
)
{
return
httpRequest
.
get
(
`/api/lms/v2/lobby/processes/
${
id
}
`
)
}
// 创建事务
export
function
createAffair
(
data
)
{
return
httpRequest
.
post
(
'/api/lms/v2/lobby/processes'
,
data
)
}
// 更新事务
export
function
updateAffair
(
id
,
data
)
{
return
httpRequest
.
post
(
`/api/lms/v2/lobby/processes/
${
id
}
`
,
data
)
}
// 删除事务
export
function
deleteAffair
(
id
)
{
return
httpRequest
({
url
:
`/api/lms/v2/lobby/processes/
${
id
}
`
,
method
:
'delete'
})
}
// 上传文件
export
function
upload
(
data
)
{
return
httpRequest
({
url
:
'/api/lms/v2/lobby/tools/upload'
,
method
:
'post'
,
headers
:
{
'Content-Type'
:
'multipart/form-data'
},
data
})
}
// 获取学期
export
function
getSemesters
(
params
)
{
return
httpRequest
.
get
(
'/api/lms/v2/lobby/semesters'
)
}
// 获取课程
export
function
getCourses
(
sid
)
{
return
httpRequest
.
get
(
`/api/lms/v2/lobby/semesters/
${
sid
}
/courses`
)
}
// 获取成绩单
export
function
getReport
()
{
return
httpRequest
.
get
(
'/api/lms/v2/lobby/havereport'
)
}
// 获取学生
export
function
getStudent
()
{
return
httpRequest
.
get
(
'/api/lms/v2/lobby/student'
)
}
client/src/pages/affairsHall/components/layout.vue
0 → 100644
浏览文件 @
c50df1d1
<
template
></
template
>
client/src/pages/affairsHall/components/pay.vue
0 → 100644
浏览文件 @
c50df1d1
<
template
>
<div
class=
"pay"
>
<template
v-for=
"(item, index) in datalist"
>
<div
class=
"pay-box"
:key=
"index"
>
<i
class=
"el-icon-error"
@
click=
"handleRemove(index)"
v-if=
"index && canEditable(item)"
></i>
<pay-item
:data=
"item"
:index=
"index"
:disabled=
"!canEditable(item)"
></pay-item>
</div>
</
template
>
<el-button
icon=
"el-icon-plus"
@
click=
"handleAdd"
style=
"margin-bottom:20px"
size=
"medium"
v-if=
"!disabled"
>
新增缴费凭证
</el-button>
</div>
</template>
<
script
>
import
PayItem
from
'./payItem'
export
default
{
props
:
{
datalist
:
{
type
:
Array
,
default
:
()
=>
[]
},
disabled
:
{
type
:
Boolean
,
default
:
false
}
},
components
:
{
PayItem
},
methods
:
{
canEditable
(
data
)
{
if
(
this
.
disabled
)
{
return
false
}
return
!
[
'1'
,
'2'
].
includes
(
data
.
status
)
},
// 添加
handleAdd
()
{
this
.
datalist
.
push
({
pay_date
:
''
,
type
:
''
,
money
:
''
,
url
:
''
})
},
// 删除
handleRemove
(
index
)
{
this
.
datalist
.
splice
(
index
,
1
)
}
},
beforeMount
()
{
// 默认创建一条
!
this
.
datalist
.
length
&&
this
.
handleAdd
()
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.pay-box
{
position
:
relative
;
border
:
1px
solid
#b80037
;
padding
:
20px
;
.el-icon-error
{
position
:
absolute
;
right
:
-14px
;
top
:
-14px
;
font-size
:
28px
;
color
:
#b80037
;
cursor
:
pointer
;
}
}
.pay-box
{
margin-bottom
:
20px
;
}
</
style
>
client/src/pages/affairsHall/components/payItem.vue
0 → 100644
浏览文件 @
c50df1d1
<
template
>
<div
class=
"pay-item"
>
<el-form-item
label=
"支付时间"
:prop=
"'payment_instrument.' + index + '.pay_date'"
:rules=
"
{ required: true, message: '请选择日期' }"
>
<el-date-picker
v-model=
"data.pay_date"
type=
"date"
value-format=
"yyyy-MM-dd"
placeholder=
"选择日期"
:disabled=
"disabled"
></el-date-picker>
</el-form-item>
<el-form-item
label=
"支付方式"
:prop=
"'payment_instrument.' + index + '.type'"
:rules=
"
{ required: true, message: '请选择支付方式' }"
>
<el-popover
placement=
"top-start"
trigger=
"hover"
>
<p>
银行账户名称:清控紫荆(北京)教育科技股份有限公司
</p>
<p>
银行帐号:694485289
</p>
<p>
开户行:中国民生银行股份有限公司北京魏公村支行
</p>
<el-radio
slot=
"reference"
label=
"1"
v-model=
"data.type"
:disabled=
"disabled"
>
银行卡转账
</el-radio>
</el-popover>
<el-popover
placement=
"top-start"
trigger=
"hover"
>
<p>
支付宝户名:清控紫荆(北京)教育科技股份有限公司
</p>
<el-radio
slot=
"reference"
label=
"2"
v-model=
"data.type"
:disabled=
"disabled"
style=
"margin-left:40px;"
>
支付宝转账
</el-radio>
</el-popover>
</el-form-item>
<el-form-item
label=
"支付金额"
:prop=
"'payment_instrument.' + index + '.money'"
:rules=
"
{ required: true, message: '请输入支付金额' }"
>
<el-input
v-model=
"data.money"
placeholder=
"输入支付金额"
:disabled=
"disabled"
style=
"width:220px"
>
<template
slot=
"append"
>
¥
</
template
>
</el-input>
</el-form-item>
<el-form-item
label=
"上传缴费凭证"
:prop=
"'payment_instrument.' + index + '.url'"
:rules=
"{ required: true, message: '请上传缴费凭证' }"
>
<app-upload
v-model=
"data.url"
:disabled=
"disabled"
></app-upload>
</el-form-item>
<el-form-item
label=
"审核状态"
v-if=
"statusText"
>
<el-tag>
{{statusText}}
</el-tag>
</el-form-item>
</div>
</template>
<
script
>
import
AppUpload
from
'@/components/upload'
export
default
{
props
:
{
data
:
{
type
:
Object
,
required
:
true
},
index
:
{
type
:
Number
},
disabled
:
{
type
:
Boolean
,
default
:
false
}
},
components
:
{
AppUpload
},
computed
:
{
statusText
()
{
const
status
=
{
'-1'
:
'待审核'
,
0
:
'未通过'
,
1
:
'通过'
}
return
status
[
this
.
data
.
status
]
||
''
}
}
}
</
script
>
client/src/pages/affairsHall/hall.vue
浏览文件 @
c50df1d1
...
...
@@ -18,11 +18,21 @@
<el-button
type=
"primary"
v-if=
"tapIndex==2"
@
click=
"golearningAdd('/app/affairs-hall/
again-add/-1
')"
@
click=
"golearningAdd('/app/affairs-hall/
retake/add
')"
>
申请重修
</el-button>
<div
style=
"width: 100%; height: 0.2rem;"
></div>
<table-list
:key=
"affairId"
v-bind=
"tableOption"
v-if=
"affairId && resultName !== '成绩单'"
ref=
"tableList"
></table-list>
<hall-form
v-if=
"resultName === '成绩单'"
:formData=
"formData"
@
submit=
"submit"
@
submitType=
"obtainReport"
></hall-form>
<table-list
:key=
"affairId"
v-bind=
"tableOption"
v-if=
"affairId && resultName !== '成绩单'"
ref=
"tableList"
></table-list>
<hall-form
v-if=
"resultName === '成绩单'"
:formData=
"formData"
@
submit=
"submit"
@
submitType=
"obtainReport"
></hall-form>
</div>
<el-dialog
title=
"提示"
:visible
.
sync=
"dialogVisible"
width=
"30%"
>
<span>
确定删除?
</span>
...
...
@@ -44,9 +54,7 @@ const status = {
'-1'
:
'待审核'
,
0
:
'未通过'
,
1
:
'通过'
,
2
:
'通过'
,
3
:
'未通过'
,
4
:
'通过'
2
:
'审核中'
}
export
default
{
components
:
{
...
...
@@ -209,14 +217,47 @@ export default {
{
prop
:
'remark1'
,
label
:
'备注'
},
{
label
:
'操作'
,
attrs
:
{
width
:
'1
0
0'
},
attrs
:
{
width
:
'1
6
0'
},
buttons
:
[
{
label
:
'查看'
,
onClick
:
row
=>
{
this
.
$router
.
push
({
path
:
`/app/affairs-hall/again-add/
${
row
.
id
}
`
,
query
:
{
id
:
row
.
affair_id
,
is_view
:
true
}
path
:
`/app/affairs-hall/retake/view/
${
row
.
id
}
`
,
query
:
{
id
:
row
.
affair_id
}
})
}
},
{
label
:
'编辑'
,
isShow
:
row
=>
{
return
row
.
status
===
-
1
},
onClick
:
row
=>
{
this
.
$router
.
push
({
path
:
`/app/affairs-hall/retake/edit/
${
row
.
id
}
`
,
query
:
{
id
:
row
.
affair_id
}
})
}
},
{
label
:
'删除'
,
isShow
:
row
=>
{
return
row
.
status
===
-
1
},
onClick
:
row
=>
{
this
.
confirmDeletion
(
row
)
}
},
{
label
:
'上传缴费'
,
isShow
:
row
=>
{
return
row
.
file_put
===
1
},
onClick
:
row
=>
{
this
.
$router
.
push
({
path
:
`/app/affairs-hall/retake/edit/
${
row
.
id
}
`
,
query
:
{
id
:
row
.
affair_id
}
})
}
}
...
...
@@ -243,10 +284,13 @@ export default {
},
methods
:
{
submit
(
row
,
type
)
{
const
params
=
Object
.
assign
({
type
:
type
,
affair_id
:
this
.
affairList
.
find
(
k
=>
k
.
form_name
===
type
).
id
},
row
)
const
params
=
Object
.
assign
(
{
type
:
type
,
affair_id
:
this
.
affairList
.
find
(
k
=>
k
.
form_name
===
type
).
id
},
row
)
cAction
.
Affairs
.
submitLearning
(
params
)
.
then
(()
=>
{
this
.
$message
({
type
:
'success'
,
message
:
'已提交成功!'
})
...
...
@@ -298,12 +342,14 @@ export default {
getTapData
()
{
cAction
.
Affairs
.
getAffairsType
()
.
then
(
data
=>
{
this
.
tapParam
[
0
].
arrItem
=
data
.
map
(
item
=>
{
if
(
item
.
form_name
===
'elreport'
)
{
item
.
affair_name
=
'成绩单'
}
return
{
val
:
item
.
id
,
name
:
item
.
affair_name
,
form_name
:
item
.
form_name
}
}).
filter
(
k
=>
k
.
form_name
!==
'pareport'
)
this
.
tapParam
[
0
].
arrItem
=
data
.
map
(
item
=>
{
if
(
item
.
form_name
===
'elreport'
)
{
item
.
affair_name
=
'成绩单'
}
return
{
val
:
item
.
id
,
name
:
item
.
affair_name
,
form_name
:
item
.
form_name
}
})
.
filter
(
k
=>
k
.
form_name
!==
'pareport'
)
const
[
first
]
=
data
const
datas
=
data
[
this
.
$route
.
query
.
index
]
||
first
this
.
affairId
=
datas
.
id
...
...
client/src/pages/affairsHall/retake/edit.vue
0 → 100644
浏览文件 @
c50df1d1
<
template
>
<div>
<div
class=
"con-title"
>
重修申请
</div>
<div
class=
"con-box"
>
<el-button
type=
"text"
>
<router-link
:to=
"
{ path: '/app/affairs-hall/hall', query: { index: 2 } }">返回列表
</router-link>
</el-button>
<el-row
type=
"flex"
justify=
"center"
>
<el-col
:lg=
"12"
>
<el-form
ref=
"form"
:model=
"ruleForm"
:rules=
"rules"
:disabled=
"isView"
label-width=
"110px"
>
<el-form-item
label=
"姓名"
prop=
"personal_name"
required
>
<el-input
v-model=
"ruleForm.personal_name"
readonly
:disabled=
"disabledInfo"
placeholder=
"请输入您的姓名"
/>
</el-form-item>
<el-form-item
label=
"班级"
prop=
"class_name"
required
>
<el-input
v-model=
"ruleForm.class_name"
readonly
:disabled=
"disabledInfo"
placeholder=
"请输入您的班级"
/>
</el-form-item>
<el-form-item
label=
"Sofia ID"
prop=
"sofia_id"
required
>
<el-input
v-model=
"ruleForm.sofia_id"
readonly
:disabled=
"disabledInfo"
placeholder=
"请输入您的Sofia ID"
/>
</el-form-item>
<el-form-item
label=
"重修学期"
prop=
"semester_name"
>
<el-select
v-model=
"ruleForm.semester_name"
placeholder=
"请选择"
@
change=
"onSemesterChange"
:disabled=
"disabledInfo"
>
<el-option
v-for=
"item in semesterList"
:key=
"item.id"
:value=
"item.semester_name"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"重修课程"
prop=
"course_id"
>
<el-checkbox-group
v-model=
"ruleForm.course_id"
>
<el-checkbox
v-for=
"item in courseList"
:label=
"item.id"
:key=
"item.id"
:disabled=
"disabledInfo"
>
{{
item
.
course_name
}}
</el-checkbox>
</el-checkbox-group>
</el-form-item>
<div
style=
"padding-left:110px"
v-if=
"hasPay"
>
<div
class=
"score"
v-if=
"detail.form"
>
{{
detail
.
form
.
score_sum_str
}}
</div>
<pay
:datalist=
"ruleForm.payment_instrument"
:disabled=
"disabledPay || isView"
></pay>
</div>
<template
v-if=
"isView && detail.status !== -1"
>
<el-form-item
label=
"审核时间"
>
<el-input
:value=
"detail.approve_time1"
readonly
/>
</el-form-item>
<el-form-item
label=
"备注"
prop=
"content"
>
<el-input
type=
"textarea"
:autosize=
"
{ minRows: 5 }"
:value="detail.remark"
readonly
/>
</el-form-item>
</
template
>
<el-form-item>
<el-button
type=
"primary"
@
click=
"onSubmit"
v-if=
"!isView"
>
保存并提交
</el-button>
<el-button
type=
"info"
@
click=
"onAbort"
v-if=
"hasAbort"
>
撤回申请
</el-button>
</el-form-item>
</el-form>
</el-col>
</el-row>
</div>
</div>
</template>
<
script
>
import
*
as
api
from
'../api'
import
Pay
from
'../components/pay'
export
default
{
props
:
{
isAdd
:
{
type
:
Boolean
,
default
:
false
},
isEdit
:
{
type
:
Boolean
,
default
:
false
},
isView
:
{
type
:
Boolean
,
default
:
false
}
},
components
:
{
Pay
},
data
()
{
return
{
detail
:
{},
ruleForm
:
{
personal_name
:
''
,
class_name
:
''
,
sofia_id
:
'123'
,
semester_name
:
''
,
course_id
:
[],
payment_instrument
:
[]
},
rules
:
{
personal_name
:
[{
required
:
true
,
message
:
'请输入您的姓名'
,
trigger
:
'blur'
}],
class_name
:
[{
required
:
true
,
message
:
'请输入您的班级'
,
trigger
:
'blur'
}],
semester_name
:
[{
required
:
true
,
message
:
'请输入您的挂科学期'
,
trigger
:
'blur'
}],
course_name
:
[{
required
:
true
,
message
:
'请选择您的重修课程名称'
,
trigger
:
'blur'
}],
course_id
:
[{
required
:
true
,
message
:
'请选择您的重修课程名称'
,
trigger
:
'blur'
}]
},
semesterList
:
[],
// 学期列表
courseList
:
[]
// 课程列表
}
},
watch
:
{
semesterId
(
value
)
{
value
&&
this
.
getCourses
()
}
},
computed
:
{
pid
()
{
return
this
.
$route
.
params
.
id
},
// 事务ID
affairId
()
{
return
this
.
$route
.
query
.
id
},
// 学期ID
semesterId
()
{
const
found
=
this
.
semesterList
.
find
(
item
=>
item
.
semester_name
===
this
.
ruleForm
.
semester_name
)
return
found
?
found
.
id
:
''
},
// 撤回
hasAbort
()
{
return
this
.
isEdit
&&
this
.
detail
.
status
===
-
1
},
// 支付凭证
hasPay
()
{
return
!
this
.
isAdd
&&
this
.
detail
.
file_put
!==
0
},
// 禁用信息部分
disabledInfo
()
{
return
this
.
isView
||
(
this
.
isEdit
&&
this
.
detail
.
status
!==
-
1
)
},
// 禁用支付凭证模块
disabledPay
()
{
return
this
.
isView
||
(
this
.
isEdit
&&
this
.
detail
.
file_put
===
2
)
}
},
methods
:
{
init
()
{
// 获取学期
this
.
getSemesters
()
if
(
this
.
isEdit
||
this
.
isView
)
{
this
.
getDetail
()
}
else
{
// 获取学生信息
this
.
getStudent
()
}
},
// 获取学生信息
getStudent
()
{
api
.
getStudent
().
then
(
response
=>
{
const
data
=
this
.
$_
.
pick
(
response
,
[
'personal_name'
,
'class_name'
,
'sofia_id'
])
Object
.
assign
(
this
.
ruleForm
,
data
)
})
},
// 获取学期
getSemesters
()
{
api
.
getSemesters
().
then
(
response
=>
{
this
.
semesterList
=
response
.
data
const
[
first
]
=
this
.
semesterList
// 设置默认值
if
(
first
&&
!
this
.
isEdit
)
{
this
.
ruleForm
.
semester_name
=
first
.
semester_name
}
})
},
onSemesterChange
()
{
this
.
ruleForm
.
course_id
=
[]
},
// 获取课程
getCourses
()
{
api
.
getCourses
(
this
.
semesterId
).
then
(
response
=>
{
this
.
courseList
=
response
.
data
})
},
// 获取详情
getDetail
()
{
api
.
getAffair
(
this
.
pid
).
then
(
response
=>
{
const
form
=
response
.
form
if
(
form
.
course_name_arr
)
{
form
.
course_id
=
form
.
course_name_arr
.
map
(
item
=>
item
.
course_id
)
}
// 设置表单数据
const
ruleForm
=
this
.
$_
.
pick
(
response
.
form
,
[
'personal_name'
,
'class_name'
,
'sofia_id'
,
'semester_name'
,
'course_id'
,
'payment_instrument'
])
Object
.
assign
(
this
.
ruleForm
,
ruleForm
)
// 设置接口返回的数据
this
.
detail
=
response
})
},
// 添加
addRequest
(
data
)
{
api
.
createAffair
(
data
).
then
(
response
=>
{
this
.
$message
.
success
(
response
.
message
)
this
.
$router
.
push
({
path
:
'/app/affairs-hall/hall'
,
query
:
{
index
:
2
}
})
})
},
// 修改
updateRequest
(
data
)
{
api
.
updateAffair
(
this
.
pid
,
data
).
then
(
response
=>
{
this
.
$message
.
success
(
response
.
message
)
this
.
$router
.
push
({
path
:
'/app/affairs-hall/hall'
,
query
:
{
index
:
2
}
})
})
},
// 提交
onSubmit
()
{
this
.
$refs
.
form
.
validate
()
.
then
(
response
=>
{
const
data
=
Object
.
assign
({
affair_id
:
this
.
affairId
},
this
.
ruleForm
)
data
.
course_id
=
this
.
ruleForm
.
course_id
.
join
(
','
)
data
.
payment_instrument
=
JSON
.
stringify
(
this
.
ruleForm
.
payment_instrument
)
this
.
isEdit
?
this
.
updateRequest
(
data
)
:
this
.
addRequest
(
data
)
})
.
catch
(()
=>
{
this
.
$message
.
error
(
'请完善表单信息'
)
})
},
// 撤回
onAbort
()
{
this
.
$confirm
(
'你确定要撤回重修申请吗?撤回后,需要重新提交申请并由教务审批。'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
})
.
then
(()
=>
{})
.
catch
(()
=>
{})
}
},
mounted
()
{
this
.
init
()
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
::v-deep
.el-form--label-top
.el-form-item__label
{
line-height
:
1
;
}
.score
{
margin-bottom
:
20px
;
color
:
#b80037
;
}
</
style
>
client/src/pages/affairsHall/retake/list.vue
0 → 100644
浏览文件 @
c50df1d1
<
template
>
</
template
>
<
script
>
export
default
{
}
</
script
>
client/src/router/routes.js
浏览文件 @
c50df1d1
...
...
@@ -6,19 +6,19 @@ export default [
path
:
'/login/index'
,
name
:
'login-normal'
,
component
:
()
=>
import
(
'@/pages/login/index.vue'
),
props
:
(
route
)
=>
({
query
:
route
.
query
,
params
:
route
.
params
})
props
:
route
=>
({
query
:
route
.
query
,
params
:
route
.
params
})
},
{
path
:
'/login/code'
,
name
:
'login-code'
,
component
:
()
=>
import
(
'@/pages/login/code.vue'
),
props
:
(
route
)
=>
({
query
:
route
.
query
,
params
:
route
.
params
})
props
:
route
=>
({
query
:
route
.
query
,
params
:
route
.
params
})
},
{
path
:
'/login/forget'
,
name
:
'login-forget'
,
component
:
()
=>
import
(
'@/pages/login/forget.vue'
),
props
:
(
route
)
=>
({
query
:
route
.
query
,
params
:
route
.
params
})
props
:
route
=>
({
query
:
route
.
query
,
params
:
route
.
params
})
},
/* App 内登录页面未找到时 - 指向 */
{
path
:
'/login/*'
,
redirect
:
'/login/index'
},
...
...
@@ -173,6 +173,24 @@ export default [
path
:
'view-report/:rid'
,
component
:
()
=>
import
(
'../pages/affairsHall/viewReport.vue'
),
props
:
true
},
{
name
:
'ehallRetakeAdd'
,
path
:
'retake/add'
,
component
:
()
=>
import
(
/* webpackChunkName: "ehall" */
'../pages/affairsHall/retake/edit.vue'
),
props
:
{
isAdd
:
true
}
},
{
name
:
'ehallRetakeEdit'
,
path
:
'retake/edit/:id'
,
component
:
()
=>
import
(
/* webpackChunkName: "ehall" */
'../pages/affairsHall/retake/edit.vue'
),
props
:
{
isEdit
:
true
}
},
{
name
:
'ehallRetakeView'
,
path
:
'retake/view/:id'
,
component
:
()
=>
import
(
/* webpackChunkName: "ehall" */
'../pages/affairsHall/retake/edit.vue'
),
props
:
{
isView
:
true
}
}
]
}
...
...
client/src/store/index.js
浏览文件 @
c50df1d1
import
Vue
from
'vue'
import
Vuex
from
'vuex'
Vue
.
use
(
Vuex
)
const
state
=
{
myMsg
:
0
}
const
getters
=
{
myMsg
(
state
)
{
return
state
.
myMsg
}
}
const
mutations
=
{
myMsg
(
state
,
sum
)
{
state
.
myMsg
=
sum
}
}
const
store
=
new
Vuex
.
Store
({
state
,
getters
,
mutations
})
export
default
store
export
default
new
Vuex
.
Store
({
state
:
{
myMsg
:
0
},
getters
:
{
myMsg
(
state
)
{
return
state
.
myMsg
}
},
mutations
:
{
myMsg
(
state
,
sum
)
{
state
.
myMsg
=
sum
}
},
actions
:
{}
})
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论