提交 21775d8f authored 作者: 王鹏飞's avatar 王鹏飞

增加办事大厅

上级 64900a30
......@@ -1170,9 +1170,9 @@
}
},
"@ckeditor/ckeditor5-build-classic": {
"version": "23.1.0",
"resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-build-classic/-/ckeditor5-build-classic-23.1.0.tgz",
"integrity": "sha512-wqJZ6yuqm48NoiciRcfs+t73YOfIKovJIiLSHf0yB2I3Mc+bL6iNhwwyJ3b6D/22IgYEXTpc6PiwsYFbGFnq2Q=="
"version": "24.0.0",
"resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-build-classic/-/ckeditor5-build-classic-24.0.0.tgz",
"integrity": "sha512-659ZAYbuQbPj3ElqrTSV7aqPtW4vt30Th0PiheFei7adIgmu1bFTHgcM3hqm7XGRzGmBRV6C07xSwUptxn3cvQ=="
},
"@ckeditor/ckeditor5-vue2": {
"version": "1.0.5",
......@@ -3094,9 +3094,9 @@
}
},
"core-js": {
"version": "3.8.0",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.0.tgz",
"integrity": "sha512-W2VYNB0nwQQE7tKS7HzXd7r2y/y2SVJl4ga6oH/dnaLFzM0o2lB2P3zCkWj5Wc/zyMYjtgd5Hmhk0ObkQFZOIA=="
"version": "3.8.1",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.1.tgz",
"integrity": "sha512-9Id2xHY1W7m8hCl8NkhQn5CufmF/WuR30BTRewvCXc1aZd3kMECwNZ69ndLbekKfakw9Rf2Xyc+QR6E7Gg+obg=="
},
"core-js-compat": {
"version": "3.6.5",
......@@ -8214,6 +8214,11 @@
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
"dev": true
},
"qrcode.vue": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/qrcode.vue/-/qrcode.vue-1.7.0.tgz",
"integrity": "sha512-R7t6Y3fDDtcU7L4rtqwGUDP9xD64gJhIwpfjhRCTKmBoYF6SS49PIJHRJ048cse6OI7iwTwgyy2C46N9Ygoc6g=="
},
"qs": {
"version": "6.9.4",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz",
......
......@@ -72,14 +72,15 @@
"@babel/runtime-corejs3": "^7.11.2"
},
"dependencies": {
"@ckeditor/ckeditor5-build-classic": "^23.1.0",
"@ckeditor/ckeditor5-build-classic": "^24.0.0",
"@ckeditor/ckeditor5-vue2": "^1.0.5",
"axios": "^0.21.0",
"core-js": "^3.8.0",
"core-js": "^3.8.1",
"cross-env": "^7.0.3",
"element-ui": "^2.14.1",
"js-cookie": "^2.2.1",
"lodash": "^4.17.20",
"qrcode.vue": "^1.7.0",
"qs": "^6.9.4",
"vue": "^2.6.12",
"vue-i18n": "^8.22.2",
......
......@@ -163,8 +163,8 @@
"electronicreportcard": "电子成绩单",
"Paperreportcard": "纸质成绩单",
"graduatetip": "毕业生可申请成绩单。",
"msgtip": "(请仔细核查您填写的信息后提交,提交后不可修改。电子成绩单将发送至您填写的邮箱。",
"msgtip2": "(请仔细核查您填写的信息后提交,提交后不可修改。电子成绩单将发送至您填写的邮箱。"
"msgtip": "(请仔细核查您填写的信息后提交,提交后不可修改。电子成绩单将发送至您填写的邮箱。)",
"msgtip2": "(请仔细核查您填写的信息后提交,提交后不可修改。纸质成绩单将按您填写的地址邮寄给您。)"
},
"pay": {
"Newpayment": "新增缴费凭证"
......@@ -183,7 +183,7 @@
"bank1": "银行帐号:694485289",
"bank2": "银行卡转账",
"bank3": "支付宝户名:清控紫荆(北京)教育科技股份有限公司",
"bank4": "支付宝户名:清控紫荆(北京)教育科技股份有限公司"
"bank4": "支付宝转账"
}
},
"learn": {
......
......@@ -51,7 +51,7 @@ export default {
id: _data.val,
name: item.name
}
this.$emit('tapParam', param)
this.$emit('tapParam', param, item)
}
}
}
......
......@@ -110,7 +110,7 @@ export default {
case '1-3': this.$router.push({ path: '/app/learn/report-active-list' }); break
case '2-1': this.$router.push({ path: '/app/grade/credit' }); break
case '3': this.$router.push({ path: '/app/feedback/feedback-list' }); break
case '4': this.$router.push({ path: '/app/affairs-hall/hall' }); break
case '4': this.$router.push({ path: '/app/offices' }); break
}
},
/* 修改头像 - 跳转方法 */
......
import Discuss from './discuss'
import Viewer from './viewer'
import Offices from './offices'
const components = [Discuss, Viewer]
const components = [Discuss, Viewer, Offices]
const install = function(Vue, opts = {}) {
components.forEach(component => {
......
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(params) {
return httpRequest.get('/api/lms/v2/lobby/processes', params).then(response => {
const status = {
'-1': '待审核',
0: '未通过',
1: '通过',
2: '审核中'
}
if (response.list) {
response.list = response.list.map(item => {
item.status_name = status[item.status]
return item
})
}
return response
})
}
// 获取事务详情
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.delete(`/api/lms/v2/lobby/processes/${id}`)
}
// 上传文件
export function upload(data) {
return httpRequest.post('/api/lms/v2/lobby/tools/upload', data, {
headers: { 'Content-Type': 'multipart/form-data' }
})
}
// 获取学期
export function getSemesters() {
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(params) {
return httpRequest.get('/api/lms/v2/lobby/havereport', params)
}
// 获取学生
export function getStudent() {
return httpRequest.get('/api/lms/v2/lobby/student')
}
// 获取重修课程
export function getRetakeCourses() {
return httpRequest.get('/api/lms/v2/lobby/courses')
}
// 更改事务状态
export function changeStatus(data) {
return httpRequest.post('/api/lms/v2/lobby/changestatus', data)
}
// 创建微信支付订单
export function createWxpayOrder(identity, productId, params) {
return httpRequest.get(`/api/pay/v1/wechat/qr/${identity}/${productId}`, params)
}
// 创建支付宝支付订单
export function createAlipayOrder(productId, params) {
return httpRequest.get(`/api/pay/v1/ali/unified-order/${productId}`, params)
}
// 获取订单
export function getOrder(orderId) {
return httpRequest.get(`/api/pay/v1/order/status/${orderId}`)
}
// 支付成功回调
export function paySuccess(id) {
return httpRequest.get(`/api/lms/v2/lobby/update-status-api/${id}`)
}
<template>
<div class="pay">
<!-- 微信 -->
<div class="qr-pay" v-if="payment === '1'">
<qrcode-vue :value="qrcodeValue" size="200"></qrcode-vue>
<p class="tips">微信扫一扫支付</p>
</div>
<!-- 支付宝 -->
<div class="qr-pay" v-else-if="payment === '2'">
<qrcode-vue :value="qrcodeValue" size="200"></qrcode-vue>
<p class="tips">支付宝扫一扫支付</p>
</div>
<!-- 银行转账 -->
<div class="bank-pay" v-else>
<p>银行账户名称:清控紫荆(北京)教育科技股份有限公司</p>
<p>银行帐号:694485289</p>
<p>开户行:中国民生银行股份有限公司北京魏公村支行</p>
<div class="is-center">
<el-button type="primary" @click="$emit('success')">我已支付成功,已告知教务老师</el-button>
</div>
</div>
</div>
</template>
<script>
import * as api from '../api'
import QrcodeVue from 'qrcode.vue'
export default {
props: {
payment: { type: String }, // 支付方式
productId: { type: String, required: true }, // 商品ID
num: { type: [Number, String], default: 1 } // 购买数量
},
components: { QrcodeVue },
data() {
return {
order: {}, // 创建订单返回的数据
rawOrder: {}, // 获取订单返回的数据
timer: null
}
},
computed: {
qrcodeValue() {
return this.order.url
}
},
methods: {
// 创建微信订单
createWxPayOrder(productId, num = 1) {
return api.createWxpayOrder('ezijing', productId, { num }).then(response => {
this.order = response
return response
})
},
// 创建支付宝订单
createAliPayOrder(productId, num = 1) {
return api.createAlipayOrder(productId, { type: 2, num }).then(response => {
this.order = response
return response
})
},
getOrder() {
return api.getOrder(this.order.order_no).then(response => {
const { order } = response
this.rawOrder = order
return order
})
},
setTimer() {
this.timer = setInterval(() => {
this.getOrder().then(response => {
// 支付成功
if (response.status === 1) {
this.$emit('success')
this.clearTimer()
}
})
}, 5000)
},
clearTimer() {
this.timer && clearInterval(this.timer)
}
},
mounted() {
if (this.payment === '1') {
// 微信支付
this.createWxPayOrder(this.productId, this.num).then(this.setTimer)
} else if (this.payment === '2') {
// 支付宝支付
this.createAliPayOrder(this.productId, this.num).then(this.setTimer)
}
},
destroyed() {
this.clearTimer()
}
}
</script>
<style lang="scss" scoped>
.qr-pay {
text-align: center;
}
.tips {
color: #999;
}
.bank-pay {
line-height: 30px;
p {
margin: 0;
}
.el-button {
margin-top: 20px;
}
}
.is-center {
text-align: center;
}
</style>
import Offices from './src/index.vue'
import Routes from './routes'
import zhCN from './languages/zh-CN'
import en from './languages/en'
Offices.install = function(Vue, opts = {}) {
// 国际化
if (opts.i18n) {
opts.i18n.mergeLocaleMessage('zh-CN', zhCN)
opts.i18n.mergeLocaleMessage('en', en)
}
// 路由
if (opts.router) {
opts.router.addRoutes(Routes)
}
}
export default Offices
export default {
officesMain: {},
officesActivity: {
title: 'Apply for academic activity',
activityName: 'Academic activity Name',
enterActivity: 'Enter activity name',
ActivityTime: 'Activity time cannot be empty',
selectTime: 'Select date and time',
address: 'Academic activity address',
enteraddress: 'Enter the event address',
activityContent: 'Academic activity content',
entActCon: 'Enter activity content',
approvalTime: 'Approval Time',
backlist: 'Back to list',
beizhu: 'remarks',
people: 'speaker',
people2: 'Please input speaker',
savesubmit: 'Save submit'
}
}
export default {
officesMain: {},
officesActivity: {
title: '学术活动申请',
activityName: '学术活动名称',
enterActivity: '请输入活动名称',
ActivityTime: '学术活动时间',
selectTime: '选择日期时间',
address: '学术活动地址',
enteraddress: '请输入活动地址',
activityContent: '学术活动内容',
entActCon: '请输入活动内容',
approvalTime: '审核时间',
backlist: '返回列表',
beizhu: '备注',
people: '主 讲 人',
people2: '请输入主讲人',
savesubmit: '保存提交'
}
}
import { isFunction } from 'lodash'
import * as api from '../api'
export default {
props: {
isEdit: { type: Boolean, default: false },
isView: { type: Boolean, default: false }
},
data() {
return {
detail: {},
// 学期列表
semesterList: [
{ value: '春季学期(4月11日---7月10日)' },
{ value: '夏季学期(7月11日---10月10日)' },
{ value: '秋季学期(10月11日---1月10日)' },
{ value: '冬季学期(1月11日---4月10日)' }
],
payList: [
{ label: '微信支付', value: '1' },
{ label: '支付宝支付', value: '2' },
{ label: '银行转账', value: '3' }
]
}
},
computed: {
pid() {
return this.$route.params.id
},
affairId() {
return this.$route.query.id
},
// 撤回
hasAbort() {
return this.isEdit && this.detail.status === -1
},
// 去支付
hasPay() {
return this.isEdit && this.detail.pay === 0
},
// 已支付
isPaid() {
return this.detail.pay === 1
},
// 禁用信息部分
disabledInfo() {
return this.hasPay || this.isView || (this.isEdit && this.detail.status !== -1)
},
// 审核状态
statusText() {
const map = {
'-1': '待审核',
0: '未通过',
1: '通过',
2: '审核中'
}
return map[this.detail.status]
},
// 支付方式
payText() {
const map = {
1: '微信支付',
2: '支付宝支付',
3: '银行转账'
}
return map[this.ruleForm.payment]
},
// 支付状态
payStatusText() {
const map = {
'-1': '无',
0: '待支付',
1: '支付成功'
}
return map[this.detail.pay]
}
},
methods: {
// 获取学生信息
getStudent() {
api.getStudent().then(response => {
const data = this.$_.pick(response, ['personal_name', 'class_name', 'sofia_id'])
Object.assign(this.ruleForm, data)
})
},
// 获取详情
getDetail() {
api.getAffair(this.pid).then(response => {
this.detail = response
this.ruleForm = response.form
})
},
// 返回
goBack() {
this.$router.push({ path: '/app/offices', query: { id: this.affairId } })
},
// 提交
handleSubmit(callback) {
this.$refs.ruleForm.validate().then(() => {
const params = Object.assign({}, this.ruleForm, { affair_id: this.affairId })
this.isEdit ? this.handleUpdate(params, callback) : this.handleAdd(params, callback)
})
},
// 新建
handleAdd(params, callback) {
api
.createAffair(params)
.then(response => {
if (response.success) {
isFunction(callback) ? callback(response) : this.handleSuccess(response)
} else {
this.handleError(response)
}
})
.catch(this.handleError)
},
// 修改
handleUpdate(params, callback) {
api
.updateAffair(this.pid, params)
.then(response => {
if (response.success) {
isFunction(callback) ? callback(response) : this.handleSuccess(response)
} else {
this.handleError(response)
}
})
.catch(this.handleError)
},
// 成功
handleSuccess(response) {
this.$message({ type: 'success', message: response.message })
this.$router.push({ path: '/app/offices', query: { id: this.affairId } })
},
// 失败
handleError(response) {
this.$message({ type: 'error', message: response.message })
}
}
}
import TableList from '@/components/comTable/tableList'
import * as api from '../api'
export default {
props: { affairId: { type: String, required: true } },
components: { TableList },
data() {
return {
remote: {
request: api.getAffairList,
params: { offset: 1 },
beforeRequest: this.tableListbeforeRequest
}
}
},
methods: {
// 列表接口请求之前
tableListbeforeRequest(params) {
params.affair_id = this.affairId
return params
},
// 删除
handleRemove(row) {
api.deleteAffair(row.id).then(response => {
if (response.success) {
this.$message({ type: 'success', message: '删除成功' })
// 刷新列表,强刷新,返回第一页
this.$refs.tableList && this.$refs.tableList.refersh(true)
}
})
},
// 撤销
handleCancel(row) {
api.deleteAffair(row.id).then(response => {
if (response.success) {
this.$message({ type: 'success', message: '撤销成功' })
// 刷新列表,强刷新,返回第一页
this.$refs.tableList && this.$refs.tableList.refersh(true)
}
})
}
}
}
import ActivityEdit from './src/activity/edit.vue'
import ShareEdit from './src/share/edit.vue'
import RetakEdit from './src/retake/edit.vue'
import PareportEdit from './src/reportPaper/edit.vue'
import ElreportEdit from './src/reportE/edit.vue'
import PauseStudyEdit from './src/studyPause/edit.vue'
import ContinueStudyEdit from './src/studyContinue/edit.vue'
import SchoolCertEdit from './src/certSchool/edit.vue'
import StudyCertEdit from './src/certStudy/edit.vue'
export default [
{
path: '/app/offices',
component: () => import('@/pages/mainsite.vue'),
children: [
{ path: '', component: () => import(/* webpackChunkName: "offices" */ './src/index.vue') },
/**
* 学术活动
*/
{ name: 'activityAdd', path: 'activity/add', component: ActivityEdit },
{ name: 'activityEdit', path: 'activity/edit/:id', component: ActivityEdit, props: { isEdit: true } },
{ name: 'activityView', path: 'activity/view/:id', component: ActivityEdit, props: { isView: true } },
/**
* 乐分享
*/
{ name: 'shareAdd', path: 'share/add', component: ShareEdit },
{ name: 'shareEdit', path: 'share/edit/:id', component: ShareEdit, props: { isEdit: true } },
{ name: 'shareView', path: 'share/view/:id', component: ShareEdit, props: { isView: true } },
/**
* 重修
*/
{ name: 'retakeAdd', path: 'retake/add', component: RetakEdit },
{ name: 'retakeEdit', path: 'retake/edit/:id', component: RetakEdit, props: { isEdit: true } },
{ name: 'retakeView', path: 'retake/view/:id', component: RetakEdit, props: { isView: true } },
/**
* 纸质成绩单
*/
{ name: 'pareportAdd', path: 'pareport/add', component: PareportEdit },
{ name: 'pareportEdit', path: 'pareport/edit/:id', component: PareportEdit, props: { isEdit: true } },
{ name: 'pareportView', path: 'pareport/view/:id', component: PareportEdit, props: { isView: true } },
/**
* 电子成绩单
*/
{ name: 'elreportAdd', path: 'elreport/add', component: ElreportEdit },
{ name: 'elreportEdit', path: 'elreport/edit/:id', component: ElreportEdit, props: { isEdit: true } },
{ name: 'elreportView', path: 'elreport/view/:id', component: ElreportEdit, props: { isView: true } },
/**
* 休学
*/
{ name: 'pauseStudyAdd', path: 'pause_study/add', component: PauseStudyEdit },
{ name: 'pauseStudyEdit', path: 'pause_study/edit/:id', component: PauseStudyEdit, props: { isEdit: true } },
{ name: 'pauseStudyView', path: 'pause_study/view/:id', component: PauseStudyEdit, props: { isView: true } },
/**
* 复学
*/
{ name: 'continueStudyAdd', path: 'continue_study/add', component: ContinueStudyEdit },
{
name: 'continueStudyEdit',
path: 'continue_study/edit/:id',
component: ContinueStudyEdit,
props: { isEdit: true }
},
{
name: 'continueStudyView',
path: 'continue_study/view/:id',
component: ContinueStudyEdit,
props: { isView: true }
},
/**
* Sofia在读证明
*/
{ name: 'schoolCertAdd', path: 'school_cret/add', component: SchoolCertEdit },
{ name: 'schoolCertEdit', path: 'school_cret/edit/:id', component: SchoolCertEdit, props: { isEdit: true } },
{ name: 'schoolCertView', path: 'school_cret/view/:id', component: SchoolCertEdit, props: { isView: true } },
/**
* 紫荆在读证明
*/
{ name: 'studyCertAdd', path: 'study_cret/add', component: StudyCertEdit },
{ name: 'studyCertEdit', path: 'study_cret/edit/:id', component: StudyCertEdit, props: { isEdit: true } },
{ name: 'studyCertView', path: 'study_cret/view/:id', component: StudyCertEdit, props: { isView: true } }
]
}
]
<template>
<div>
<div class="con-title">{{ $t('officesActivity.title') }}</div>
<div class="con-box">
<el-button type="text" @click="goBack">{{ $t('officesActivity.backlist') }}</el-button>
<!-- <el-page-header @back="goBack" content="学术活动"></el-page-header> -->
<el-form label-width="120px" :disabled="isView" :model="ruleForm" :rules="rules" ref="ruleForm" class="main-form">
<!-- <el-form-item label="姓名" prop="personal_name">
<el-input v-model="ruleForm.personal_name" placeholder="请输入您的姓名" type="text" />
</el-form-item>
<el-form-item label="班级" prop="class_name">
<el-input v-model="ruleForm.class_name" placeholder="请输入您的班级" type="text" />
</el-form-item> -->
<el-form-item :label="$t('officesActivity.activityName')" prop="symposium_name">
<el-input v-model="ruleForm.symposium_name" :placeholder="$t('officesActivity.enterActivity')" />
</el-form-item>
<el-form-item :label="$t('officesActivity.ActivityTime')" prop="symposium_time">
<el-date-picker
type="datetime"
v-model="ruleForm.symposium_time"
value-format="yyyy-MM-dd HH:mm:ss"
:placeholder="$t('officesActivity.selectTime')"
/>
</el-form-item>
<el-form-item :label="$t('officesActivity.people')" prop="symposium_lecturer">
<el-input v-model="ruleForm.symposium_lecturer" :placeholder="$t('officesActivity.people2')" />
</el-form-item>
<el-form-item :label="$t('officesActivity.address')" prop="symposium_address">
<el-input v-model="ruleForm.symposium_address" :placeholder="$t('officesActivity.enteraddress')" />
</el-form-item>
<el-form-item :label="$t('officesActivity.activityContent')" prop="symposium_contents">
<el-input
type="textarea"
v-model="ruleForm.symposium_contents"
maxlength="50"
:placeholder="$t('officesActivity.entActCon')"
:autosize="{ minRows: 5 }"
/>
</el-form-item>
<template v-if="isView">
<el-form-item v-if="detail.approve_time" :label="$t('officesActivity.approvalTime')">
<el-input v-model="detail.approve_time" readonly />
</el-form-item>
<el-form-item v-if="detail.remark1" :label="$t('officesActivity.beizhu')">
<el-input type="textarea" v-model="detail.remark1" maxlength="50" readonly :autosize="{ minRows: 5 }" />
</el-form-item>
</template>
<el-form-item v-if="!this.isView">
<el-button type="primary" @click="handleSubmit">
{{ $t('officesActivity.savesubmit') }}
</el-button>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script>
import editMixins from '../../mixins/edit'
export default {
mixins: [editMixins],
data() {
return {
ruleForm: {
personal_name: '',
class_name: '',
symposium_name: '',
symposium_time: '',
symposium_lecturer: '',
symposium_address: '',
symposium_contents: ''
},
rules: {
personal_name: [{ required: true, message: '请输入您的姓名', trigger: 'blur' }],
class_name: [{ required: true, message: '请输入您的班级', trigger: 'blur' }],
symposium_name: [{ required: true, message: '活动名称不能为空', trigger: 'blur' }],
symposium_time: [{ required: true, message: '活动时间不能为空', trigger: 'blur' }],
symposium_lecturer: [{ required: true, message: '主讲人不能为空', trigger: 'blur' }],
symposium_address: [{ required: true, message: '学术活动地址不能为空', trigger: 'blur' }],
symposium_contents: [{ required: true, message: '活动内容不能为空', trigger: 'blur' }]
}
}
},
beforeMount() {
if (this.isEdit || this.isView) {
this.getDetail()
}
}
}
</script>
<style lang="scss" scoped>
.main-form {
max-width: 600px;
margin: 0 auto;
}
.el-date-editor.el-input {
width: 100%;
}
</style>
<template>
<div>
<el-button type="primary" @click="handleAdd">申请新的活动</el-button>
<div style="height: 20px"></div>
<table-list :remote="remote" :columns="columns" ref="tableList"></table-list>
</div>
</template>
<script>
import listMixins from '../../mixins/list'
export default {
mixins: [listMixins],
data() {
return {
columns: [
{ prop: 'form.symposium_name', label: '活动名称' },
{ prop: 'form.symposium_time', label: '活动时间' },
{ prop: 'form.symposium_lecturer', label: '主讲人' },
{ prop: 'status_name', label: '审核状态' },
{ prop: 'approve_time1', label: '审核时间' },
{ prop: 'remark1', label: '备注' },
{
label: '操作',
attrs: { width: '200' },
buttons: [
// {
// label: '查看报告',
// isShow(row) {
// return row.form.reportscount !== '0'
// },
// onClick: row => {
// this.$router.push({
// path: `/app/offices/view-report/${row.form.id}`
// })
// }
// },
// {
// label: '上传报告',
// isShow(row) {
// const isPass = [1, 2, 4].includes(row.status)
// return isPass && row.form.reportscount === '0'
// },
// onClick: row => {
// this.$router.push({
// path: `/app/offices/upload-report/${row.form.id}/-1`
// })
// }
// },
{
label: '查看',
onClick: row => {
this.$router.push({ name: 'activityView', params: { id: row.id }, query: { id: row.affair_id } })
}
},
{
label: '编辑',
isShow(row) {
return [-1, 0].includes(row.status)
},
onClick: row => {
this.$router.push({ name: 'activityEdit', params: { id: row.id }, query: { id: row.affair_id } })
}
},
{
label: '删除',
isShow(row) {
return row.status === -1
},
onClick: row => {
this.handleRemove(row)
}
}
]
}
]
}
},
methods: {
// 新增
handleAdd() {
this.$router.push({ name: 'activityAdd', query: { id: this.affairId } })
}
}
}
</script>
<template>
<div>
<div class="con-title">{{ $t('pages.affairsHall.uploadReport.title') }}</div>
<div class="con-box">
<el-button type="text" @click='gobackActiveList'>{{ $t('pages.affairsHall.uploadReport.backText') }}</el-button>
<el-row type="flex" justify="center">
<el-col :xs="24" :sm="24" :md="16" :lg="12" :xl="8">
<el-form ref="setSubmitForm" :label-width="labelWidth" :model="setSubmit" :rules="submitRules">
<el-form-item :label="$t('pages.affairsHall.uploadReport.name')" prop="name">
<el-input v-model="setSubmit.name" :placeholder="$t('pages.affairsHall.uploadReport.placename')" type="text" />
</el-form-item>
<el-form-item :label="$t('pages.affairsHall.uploadReport.labeltitle')" prop="title">
<el-input v-model="setSubmit.title" :placeholder="$t('pages.affairsHall.uploadReport.placetitle')" type="text" />
</el-form-item>
<el-form-item :label="$t('pages.affairsHall.uploadReport.file')" prop="file">
<el-upload
ref="upFile"
class="upload-demo"
action=""
:multiple="false"
:limit="1"
:show-file-list="false"
:on-change="handleChange"
:http-request="uploadFile"
:file-list="filesArr">
<el-button size="small" type="primary">{{ $t('pages.affairsHall.uploadReport.uploadButtonText') }}</el-button>
<div slot="tip" class="el-upload__tip">{{ $t('pages.affairsHall.uploadReport.uploadTips') }}<a href="http://zws-imgs-pub.oss-cn-beijing.aliyuncs.com/static/build/learn-mba/%E3%80%8AMBA%E5%AD%A6%E7%94%9F%E5%AD%A6%E6%9C%AF%E6%B4%BB%E5%8A%A8%E8%AE%B0%E5%BD%95%E6%8A%A5%E5%91%8A%E3%80%8B%E6%A8%A1%E6%9D%BFXXX%E5%AD%A6%E7%94%9F.docx">{{ $t('pages.affairsHall.uploadReport.downloadTemplateText') }}</a></div>
<template v-if="successFileUrl">
{{successFileUrl.replace(/.*\/([^\/]*\.[^.]+)$/gi, '$1')}}
</template>
</el-upload>
<template v-if="successFileUrl">
<a :href="successFileUrl">{{ $t('pages.affairsHall.uploadReport.downloadButtonText') }}</a>
</template>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmitFrom">{{ $t('pages.affairsHall.uploadReport.savesubmit') }}</el-button>
</el-form-item>
</el-form>
</el-col>
</el-row>
</div>
</div>
</template>
<script>
import cAction from '@action'
export default {
props: {
rid: { type: String, required: false },
reid: { type: String, required: false }
},
components: {},
data () {
return {
labelWidth: '110px',
setSubmit: {
name: '',
title: ''
},
submitRules: {
name: [
{ required: true, message: '报告主题不能为空', trigger: 'blur' }
],
title: []
},
successFileUrl: '',
filesArr: [],
file: {
id: 'WU_FILE_0',
name: '',
type: '',
lastModifiedDate: '',
size: '',
file: ''
}
}
},
mounted () {
if (this.reid !== '-1') {
const loading = this.$loading({ lock: true, text: '', spinner: '', background: 'rgba(255, 255, 255, 0.9)' })
cAction.Affairs.getSubmitReport(this.rid, this.reid).then(data => {
if (data.report_name) {
this.setSubmit.name = data.report_name
this.setSubmit.title = data.report_description
this.successFileUrl = data.file_url
}
}).catch(e => { this.$message.error(e.message) }).finally(() => { loading.close() })
}
window.addEventListener('resize', () => {
const width = document.documentElement.clientWidth
if (width < 790) {
this.labelWidth = 'auto'
} else {
this.labelWidth = '110px'
}
})
},
methods: {
handleChange (file, filelist) {
this.file.name = file.raw.name
this.file.type = file.raw.type
this.file.lastModifiedDate = file.raw.lastModifiedDate
this.file.size = file.raw.size
this.file.file = file.raw
},
uploadFile () {
const loading = this.$loading({ lock: true, text: '', spinner: '', background: 'rgba(255, 255, 255, 0.9)' })
cAction.Affairs.uploadFile(this.file).then(data => {
this.successFileUrl = data.url
this.filesArr.pop()
}).catch(e => { this.filesArr.pop(); this.$message.error(e.message) }).finally(() => { loading.close() })
},
gobackActiveList () {
this.$router.push({ path: '/app/affairs-hall/hall' })
},
onSubmitFrom () {
this.$refs.setSubmitForm.validate((valid) => {
if (valid) {
// if (!this.successFileUrl) {
// this.$message.error('请上传附件')
// return
// // this.$refs['setApplyForm'].resetFields()
// }
const loading = this.$loading({ lock: true, text: '', spinner: '', background: 'rgba(255, 255, 255, 0.9)' })
let report = null
if (this.reid !== '-1') {
/* 修改 */
report = cAction.Affairs.updateSubmitReport(this.rid, this.reid, {
report_name: this.setSubmit.name,
report_description: this.setSubmit.title,
file_url: JSON.stringify([{
name: this.file.name,
url: this.successFileUrl
}])
})
} else {
/* 新建 */
report = cAction.Report.submitReport(this.rid, {
report_name: this.setSubmit.name,
report_description: this.setSubmit.title,
file_url: JSON.stringify([{
name: this.file.name,
url: this.successFileUrl
}])
})
}
report.then(data => {
if (data.flag) {
this.$message({ type: 'success', message: '提交成功' })
setTimeout(() => {
this.$router.push({ path: `/app/affairs-hall/view-report/${this.rid}` })
}, 500)
}
}).catch(e => { this.filesArr.pop(); this.$message.error(e.message) }).finally(() => { loading.close() })
} else {
this.$message.error('请检查输入项,确认无误后,重新提交')
return false
}
})
}
}
}
</script>
<style lang="scss" scoped>
/* 申请 */
.el-date-editor.el-input {
width: 100%;
}
.el-upload__tip {
line-height: 1.5;
}
</style>
<template>
<div>
<div class="con-title">{{ $t('pages.affairsHall.uploadReport.title') }}</div>
<div class="con-box">
<!-- <el-button type="primary" @click="goReportSubmit">申请报告</el-button> -->
<el-button type="text" @click='gobackReportActiveList'>{{ $t('pages.affairsHall.uploadReport.backText') }}</el-button>
<div style="width: 100%; height: 0.2rem;"></div>
<m-page
:tableHead="tableHead"
:tableData="tableData"
:params="params"
:objFn="objFn"
:tableConfig="tableConfig"
/>
</div>
</div>
</template>
<script>
import cAction from '@action'
import mPage from '../../components/comTable/mPage.vue'
export default {
props: {
rid: { type: String, required: true }
},
components: { mPage },
data () {
return {
tableConfig: { border: '', size: '', selection: { has: false, sels: [], width: '50px', fix: 'left', align: '' } }, // 增加选择框,has设置为true
tableHead: [
{ prop: 'index', label: '序号', minWidth: '80', fix: false },
{ prop: 'report_name', label: '报告名称', minWidth: '150', fix: false },
{ prop: 'report_description', label: '报告摘要', minWidth: '120', fix: false },
{ prop: 'submit_time', label: '提交时间', minWidth: '120', fix: false },
// { prop: 'approve_status', label: '审核状态', minWidth: '120', fix: false },
{ prop: 'file_url', label: '附件下载', minWidth: '120', fix: false },
// { prop: '', label: '', minWidth: '', fix: false, goObj: { routerName: '', params: {} } }, // 点击跳转页面并传参数
{ prop: 'operate-x', label: '操作', width: '140px', fix: false, commandArr: "[ { command: 'reportlist-', name: '' }, { command: 'reportlist-edit', name: '编辑' }, { command: 'reportlist-delete', name: '删除' } ]" }
],
tableData: [],
params: { keywords: '', curPage: 1, pageSize: 100, total: '' },
objFn: {
paramsFn: (_this) => { return { rid: this.rid } },
nameAPI: 'getReportListAll',
actionClass: 'Report',
// nameExcel: 'getStatSummaryExcel',
nameExcel: 'getExportExcel3_4_14',
callback: (_this, data) => {
_this.params.total = 100
data.forEach((elem, i) => {
elem.approve_status = elem.is_checked === 1 ? '通过' : (elem.is_checked === 0 ? '未通过' : '未审核')
elem.file_url = JSON.parse(elem.file_url)[0].url
elem.index = i + 1 + (_this.params.curPage - 1) * _this.params.pageSize
_this.tableData.push(elem)
})
}
}
}
},
mounted () {
this.VueEvent.$off('command-tablelist-x').$on('command-tablelist-x', (_obj) => {
if (_obj.command.command === 'reportlist-edit') {
const reid = _obj.tableData[_obj.index - 1].id
this.$router.push({ path: `/app/learn/report-submit/${this.rid}/${reid}` })
}
if (_obj.command.command === 'reportlist-delete') {
const reid = _obj.tableData[_obj.index - 1].id
/* 删除 */
const loading = this.$loading({ lock: true, text: '', spinner: '', background: 'rgba(255, 255, 255, 0.9)' })
cAction.Affairs.deleteSubmitReport(this.rid, reid).then(data => {
if (data.flag) {
this.$message({ type: 'success', message: '删除成功' })
}
this.params.pageSize += 1
}).catch(e => { this.$message.error(e.message) }).finally(() => { loading.close() })
}
})
},
methods: {
goReportSubmit () {
this.$router.push({ path: `/app/learn/report-submit/${this.rid}/-1` })
},
gobackReportActiveList () {
this.$router.push({ path: '/app/affairs-hall/hall' })
}
}
}
</script>
<style lang="scss" scoped>
/* 申请 */
.el-date-editor.el-input {
width: 100%;
}
.el-upload__tip {
line-height: 1.5;
}
</style>
<template>
<div>
<div class="con-title">Sofia在读证明申请</div>
<div class="con-box">
<el-button type="text" @click="goBack">返回列表</el-button>
<div class="main-form">
<el-form label-width="120px" :disabled="isView" ref="ruleForm" :model="ruleForm" :rules="rules">
<el-form-item label="姓名" prop="personal_name">
<el-input v-model="ruleForm.personal_name" />
</el-form-item>
<el-form-item label="班级" prop="class_name">
<el-input v-model="ruleForm.class_name" />
</el-form-item>
<el-form-item label="出生年月" prop="birth_date">
<el-date-picker v-model="ruleForm.birth_date" type="date" value-format="yyyy-MM-dd"> </el-date-picker>
</el-form-item>
<el-form-item label="Sofia ID" prop="sofia_id">
<el-input v-model="ruleForm.sofia_id" />
</el-form-item>
<template v-if="isView">
<el-form-item v-if="detail.approve_time" :label="$t('pages.affairsHall.shareAdd.approvalTime')">
<el-input v-model="detail.approve_time" />
</el-form-item>
<el-form-item v-if="detail.remark1" :label="$t('pages.affairsHall.shareAdd.remarks')">
<el-input v-model="detail.remark1" maxlength="50" type="textarea" :autosize="{ minRows: 5 }" />
</el-form-item>
</template>
<el-form-item v-if="!this.isView">
<el-button type="primary" @click="handleSubmit">
{{ $t('pages.affairsHall.shareAdd.savesubmit') }}
</el-button>
</el-form-item>
</el-form>
</div>
</div>
</div>
</template>
<script>
import editMixins from '../../mixins/edit'
export default {
mixins: [editMixins],
data() {
return {
ruleForm: {
affair_id: '',
personal_name: '',
class_name: '',
sofia_id: '',
birth_date: ''
},
rules: {
personal_name: [{ required: true, message: '请输入您的姓名', trigger: 'blur' }],
class_name: [{ required: true, message: '请输入您的班级', trigger: 'blur' }],
sofia_id: [{ required: true, message: '请输入Sofia ID', trigger: 'blur' }],
birth_date: [{ required: true, message: '请选择出生年月', trigger: 'blur' }]
}
}
},
beforeMount() {
if (this.isEdit || this.isView) {
this.getDetail()
} else {
// 获取学生信息
this.getStudent()
}
}
}
</script>
<style lang="scss" scoped>
.main-form {
max-width: 600px;
margin: 0 auto;
}
.el-date-editor.el-input {
width: 100%;
}
</style>
<template>
<div>
<el-button type="primary" @click="handleAdd">申请索菲亚在读证明</el-button>
<div style="height: 20px"></div>
<table-list :remote="remote" :columns="columns" ref="tableList"></table-list>
</div>
</template>
<script>
import listMixins from '../../mixins/list'
export default {
mixins: [listMixins],
data() {
return {
columns: [
{ prop: 'form.sofia_id', label: 'Sofia ID' },
{ prop: 'form.personal_name', label: '姓名' },
{ prop: 'form.class_name', label: '班级' },
{ prop: 'form.birth_date', label: '出生日期' },
{ prop: 'status_name', label: '审核状态' },
{ prop: 'approve_time1', label: '审核时间' },
{ prop: 'remark1', label: '备注' },
{
label: '操作',
attrs: { width: '100' },
buttons: [
{
label: '查看',
isShow(row) {
return row.status !== -1
},
onClick: row => {
this.$router.push({ name: 'schoolCertView', params: { id: row.id }, query: { id: row.affair_id } })
}
},
{
label: '下载',
isShow(row) {
return row.status === 1
},
onClick: row => {
console.log(row)
}
},
{
label: '编辑',
isShow(row) {
return row.status === -1
},
onClick: row => {
this.$router.push({ name: 'schoolCertEdit', params: { id: row.id }, query: { id: row.affair_id } })
}
},
{
label: '删除',
isShow(row) {
return row.status !== 2
},
onClick: row => {
this.handleRemove(row)
}
}
]
}
]
}
},
methods: {
// 新增
handleAdd() {
this.$router.push({ name: 'schoolCertAdd', query: { id: this.affairId } })
}
}
}
</script>
<template>
<div>
<div class="con-title">紫荆在读证明申请</div>
<div class="con-box">
<el-button type="text" @click="goBack">返回列表</el-button>
<div class="main-form">
<el-form label-width="180px" :disabled="isView" ref="ruleForm" :model="ruleForm" :rules="rules">
<el-form-item label="姓名" prop="personal_name">
<el-input v-model="ruleForm.personal_name" />
</el-form-item>
<el-form-item label="班级" prop="class_name">
<el-input v-model="ruleForm.class_name" />
</el-form-item>
<el-form-item label="Sofia ID" prop="sofia_id">
<el-input v-model="ruleForm.sofia_id" />
</el-form-item>
<el-form-item label="在读证明收件人是否为本人" prop="is_self">
<el-radio-group v-model="ruleForm.is_self">
<el-radio label="1"></el-radio>
<el-radio label="2"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="收件人名字" prop="receive_name" v-if="ruleForm.is_self !== '1'">
<el-input v-model="ruleForm.receive_name" />
</el-form-item>
<el-form-item label="收件人联系电话" prop="telephone">
<el-input v-model="ruleForm.telephone" />
</el-form-item>
<el-form-item label="在读证明邮寄地址" prop="email">
<el-input type="textarea" v-model="ruleForm.email" :autosize="{ minRows: 3 }" />
</el-form-item>
<template v-if="isView">
<el-form-item v-if="detail.approve_time" :label="$t('pages.affairsHall.shareAdd.approvalTime')">
<el-input v-model="detail.approve_time" />
</el-form-item>
<el-form-item v-if="detail.remark1" :label="$t('pages.affairsHall.shareAdd.remarks')">
<el-input v-model="detail.remark1" maxlength="50" type="textarea" :autosize="{ minRows: 5 }" />
</el-form-item>
</template>
<el-form-item v-if="!this.isView">
<el-button type="primary" @click="handleSubmit">
{{ $t('pages.affairsHall.shareAdd.savesubmit') }}
</el-button>
</el-form-item>
</el-form>
</div>
</div>
</div>
</template>
<script>
import editMixins from '../../mixins/edit'
export default {
mixins: [editMixins],
data() {
return {
ruleForm: {
affair_id: '',
personal_name: '',
class_name: '',
sofia_id: '',
is_self: '1',
receive_name: '',
telephone: '',
email: ''
},
rules: {
personal_name: [{ required: true, message: '请输入您的姓名', trigger: 'blur' }],
class_name: [{ required: true, message: '请输入您的班级', trigger: 'blur' }],
sofia_id: [{ required: true, message: '请输入Sofia ID', trigger: 'blur' }],
receive_name: [{ required: true, message: '请输入收件人名字', trigger: 'blur' }],
telephone: [{ required: true, message: '请输入收件人联系电话', trigger: 'blur' }],
email: [{ required: true, message: '请输入在读证明邮寄地址', trigger: 'blur' }]
}
}
},
beforeMount() {
if (this.isEdit || this.isView) {
this.getDetail()
} else {
// 获取学生信息
this.getStudent()
}
}
}
</script>
<style lang="scss" scoped>
.main-form {
max-width: 600px;
margin: 0 auto;
}
.el-date-editor.el-input {
width: 100%;
}
</style>
<template>
<div>
<el-button type="primary" @click="handleAdd">申请紫荆在读证明</el-button>
<div style="height: 20px"></div>
<table-list :remote="remote" :columns="columns" ref="tableList"></table-list>
</div>
</template>
<script>
import listMixins from '../../mixins/list'
export default {
mixins: [listMixins],
data() {
return {
columns: [
{ prop: 'form.sharing_theme', label: '紫荆学号' },
{ prop: 'form.receive_name', label: '收件人' },
{ prop: 'form.telephone', label: '收件人电话' },
{ prop: 'form.email', label: '邮寄地址' },
{ prop: 'status_name', label: '审核状态' },
{ prop: 'approve_time1', label: '审核时间' },
{ prop: 'remark1', label: '备注' },
{
label: '操作',
attrs: { width: '100' },
buttons: [
{
label: '查看',
isShow(row) {
return row.status !== -1
},
onClick: row => {
this.$router.push({ name: 'studyCertView', params: { id: row.id }, query: { id: row.affair_id } })
}
},
{
label: '编辑',
isShow(row) {
return row.status === -1
},
onClick: row => {
this.$router.push({ name: 'studyCertEdit', params: { id: row.id }, query: { id: row.affair_id } })
}
},
{
label: '删除',
isShow(row) {
return row.status !== 2
},
onClick: row => {
this.handleRemove(row)
}
}
]
}
]
}
},
methods: {
// 新增
handleAdd() {
this.$router.push({ name: 'studyCertAdd', query: { id: this.affairId } })
}
}
}
</script>
<template>
<div>
<div class="con-title">
<div>{{ $t('pages.affairsHall.hall.title') }}</div>
</div>
<Tap :tapParam="tapParam" @tapParam="tapIndexs"></Tap>
<div class="con-box" v-if="affairId">
<component :is="currentComponent" :affairId="affairId"></component>
</div>
</div>
</template>
<script>
import * as api from '../api'
import Tap from '@/components/comTable/tap.vue'
// 学术活动
import ActivityList from './activity/list'
// 乐分享
import ShareList from './share/list'
// 重修
import RetakeList from './retake/list'
// 纸质成绩单
import PareportList from './reportPaper/list'
// 电子成绩单
import ElreportList from './reportE/list'
// 休学
import PauseStudyList from './studyPause/list'
// 复学
import ContinueStudyList from './studyContinue/list'
// 在职证明
import JobCertList from './certSchool/list'
// 在读证明
import StudyCertList from './certStudy/list'
export default {
components: {
Tap,
ActivityList,
ShareList,
RetakeList,
PareportList,
ElreportList,
PauseStudyList,
ContinueStudyList,
JobCertList,
StudyCertList
},
data() {
return {
types: [],
tapParam: [
{
name: '分类',
isShow: false,
selectIndex: 0,
key: 'cc',
arrItem: []
}
],
active: {}
}
},
computed: {
affairId() {
return this.active ? this.active.id : ''
},
currentComponent() {
const components = {
symposium: 'ActivityList',
sharing: 'ShareList',
retake: 'RetakeList',
pareport: 'PareportList',
elreport: 'ElreportList',
suspend: 'PauseStudyList',
return: 'ContinueStudyList',
job_certification: 'JobCertList',
learn_certification: 'StudyCertList'
}
return components[this.active.form_name]
}
},
methods: {
getTypes() {
api.getAffairType().then(response => {
const [first = {}] = response
this.active = first
this.types = response
if (this.$route.query.id) {
const index = response.findIndex(item => item.id === this.$route.query.id)
this.tapParam[0].selectIndex = index
this.active = response[index]
}
this.tapParam[0].arrItem = response.map(item => {
return Object.assign({}, item, { val: item.id, name: item.affair_name })
})
})
},
tapIndexs(data, rawData) {
this.active = rawData
}
},
beforeMount() {
this.getTypes()
}
}
</script>
<template>
<div>
<div class="con-title">电子成绩单申请</div>
<div class="con-box">
<el-button type="text" @click="goBack">返回列表</el-button>
<div class="main-form">
<el-form label-width="100px" :disabled="isView" ref="ruleForm" :model="ruleForm" :rules="rules">
<el-form-item label="姓名" prop="personal_name">
<el-input v-model="ruleForm.personal_name" />
</el-form-item>
<el-form-item label="班级" prop="class_name">
<el-input v-model="ruleForm.class_name" />
</el-form-item>
<el-form-item label="Sofia ID" prop="sofia_id">
<el-input v-model="ruleForm.sofia_id" />
</el-form-item>
<template v-if="isView">
<el-form-item v-if="detail.approve_time" :label="$t('pages.affairsHall.shareAdd.approvalTime')">
<el-input v-model="detail.approve_time" />
</el-form-item>
<el-form-item v-if="detail.remark1" :label="$t('pages.affairsHall.shareAdd.remarks')">
<el-input v-model="detail.remark1" maxlength="50" type="textarea" :autosize="{ minRows: 5 }" />
</el-form-item>
</template>
<el-form-item v-if="!this.isView">
<el-button type="primary" @click="handleSubmit">
{{ $t('pages.affairsHall.shareAdd.savesubmit') }}
</el-button>
</el-form-item>
</el-form>
</div>
</div>
</div>
</template>
<script>
import editMixins from '../../mixins/edit'
export default {
mixins: [editMixins],
data() {
return {
ruleForm: {
affair_id: '',
personal_name: '',
class_name: '',
sofia_id: ''
},
rules: {
personal_name: [{ required: true, message: '请输入您的姓名', trigger: 'blur' }],
class_name: [{ required: true, message: '请输入您的班级', trigger: 'blur' }],
sofia_id: [{ required: true, message: '请输入Sofia ID', trigger: 'blur' }]
}
}
},
beforeMount() {
if (this.isEdit || this.isView) {
this.getDetail()
} else {
// 获取学生信息
this.getStudent()
}
}
}
</script>
<style lang="scss" scoped>
.main-form {
max-width: 600px;
margin: 0 auto;
}
.el-date-editor.el-input {
width: 100%;
}
</style>
<template>
<div>
<el-button type="primary" @click="handleAdd">申请电子成绩单</el-button>
<div style="height: 20px"></div>
<table-list :remote="remote" :columns="columns" ref="tableList"></table-list>
</div>
</template>
<script>
import listMixins from '../../mixins/list'
export default {
mixins: [listMixins],
data() {
return {
columns: [
{ prop: 'form.sofia_id', label: 'Sofia ID' },
{ prop: 'form.class_name', label: '班级' },
{ prop: 'status_name', label: '审核状态' },
{ prop: 'approve_time1', label: '审核时间' },
{ prop: 'remark1', label: '审核备注' },
{
label: '操作',
attrs: { width: '180' },
buttons: [
{
label: '查看',
isShow(row) {
return row.status !== -1
},
onClick: row => {
this.$router.push({ name: 'elreportView', params: { id: row.id }, query: { id: row.affair_id } })
}
},
{
label: '下载',
isShow(row) {
return row.status === 1
},
onClick: row => {
console.log(row)
}
},
{
label: '编辑',
isShow(row) {
return row.status === -1
},
onClick: row => {
this.$router.push({ name: 'elreportEdit', params: { id: row.id }, query: { id: row.affair_id } })
}
},
{
label: '删除',
isShow(row) {
return row.status !== 2
},
onClick: row => {
this.handleRemove(row)
}
}
]
}
]
}
},
methods: {
// 新增
handleAdd() {
this.$router.push({ name: 'elreportAdd', query: { id: this.affairId } })
}
}
}
</script>
<template>
<div>
<div class="con-title">纸质成绩单申请</div>
<div class="con-box">
<el-button type="text" @click="goBack">返回列表</el-button>
<div class="main-form">
<el-form label-width="180px" :disabled="isView" ref="ruleForm" :model="ruleForm" :rules="rules">
<el-form-item label="姓名" prop="personal_name">
<el-input v-model="ruleForm.personal_name" />
</el-form-item>
<el-form-item label="班级" prop="class_name">
<el-input v-model="ruleForm.class_name" />
</el-form-item>
<el-form-item label="Sofia ID" prop="sofia_id">
<el-input v-model="ruleForm.sofia_id" />
</el-form-item>
<el-form-item label="在读证明收件人是否为本人" prop="is_self">
<el-radio-group v-model="ruleForm.is_self">
<el-radio label="1"></el-radio>
<el-radio label="2"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="收件人名字" prop="receive_name" v-if="ruleForm.is_self !== '1'">
<el-input v-model="ruleForm.receive_name" />
</el-form-item>
<el-form-item label="收件人联系电话" prop="telephone">
<el-input v-model="ruleForm.telephone" />
</el-form-item>
<el-form-item label="邮寄地址" prop="email">
<el-input type="textarea" v-model="ruleForm.email" :autosize="{ minRows: 3 }" />
<div style="line-height: 20px">
国内大陆地区顺丰或EMS包邮,偏远地区及港澳台地区请联系班主任,根据实际情况收取快递费用。
</div>
</el-form-item>
<el-form-item label="需打印份数" prop="number">
<el-select v-model="ruleForm.number" :disabled="isPaid">
<el-option v-for="item in productList" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="支付方式" prop="payment">
<el-radio-group v-model="ruleForm.payment" :disabled="isPaid">
<div v-for="item in payList" :key="item.value" style="margin: 10px 0">
<el-radio :label="item.value">{{ item.label }}</el-radio>
</div>
</el-radio-group>
</el-form-item>
<template v-if="isView && detail.status !== -1">
<el-form-item label="支付方式" style="margin: 0" v-if="detail.pay !== -1">
{{ payText }}
</el-form-item>
<el-form-item label="支付状态" style="margin: 0" v-if="detail.pay !== -1">
{{ payStatusText }}
</el-form-item>
<el-form-item label="审核状态" style="margin: 0">
{{ statusText }}
</el-form-item>
<el-form-item label="审核时间" style="margin: 0" v-if="detail.approve_time1">
{{ detail.approve_time1 }}
</el-form-item>
<el-form-item label="备注" style="margin: 0" v-if="detail.remark">
{{ detail.remark }}
</el-form-item>
</template>
<el-form-item v-if="!isPaid">
<el-button type="primary" @click="handleSubmit(handleSubmitSuccess)">去支付</el-button>
</el-form-item>
<el-form-item v-else>
<el-button type="primary" @click="handleSubmit" v-if="!isView">保存并提交</el-button>
</el-form-item>
</el-form>
</div>
</div>
<el-dialog title="支付" width="400px" :visible.sync="payVisible">
<pay :payment="ruleForm.payment" :productId="productId" @success="handlePaySuccess" v-if="payVisible"></pay>
</el-dialog>
</div>
</template>
<script>
import * as api from '../../api'
import editMixins from '../../mixins/edit'
import Pay from '../../components/pay'
export default {
mixins: [editMixins],
components: { Pay },
data() {
return {
ruleForm: {
affair_id: '',
personal_name: '',
class_name: '',
sofia_id: '',
number: '1',
is_self: '1',
receive_name: '',
telephone: '',
email: '',
payment: '1'
},
rules: {
personal_name: [{ required: true, message: '请输入您的姓名', trigger: 'blur' }],
class_name: [{ required: true, message: '请输入您的班级', trigger: 'blur' }],
sofia_id: [{ required: true, message: '请输入Sofia ID', trigger: 'blur' }],
number: [{ required: true, message: '请输入需打印份数', trigger: 'blur' }],
receive_name: [{ required: true, message: '请输入收件人名字', trigger: 'blur' }],
telephone: [{ required: true, message: '请输入收件人联系电话', trigger: 'blur' }],
email: [{ required: true, message: '请输入邮寄地址', trigger: 'blur' }]
},
productList: [
{ label: '1份—¥126元', value: '1', product_id: '6747325185390542848' },
{ label: '2份—¥201元', value: '2', product_id: '6747325279879823360' },
{ label: '3份—¥276元', value: '3', product_id: '6747325351686307840' }
],
payVisible: false
}
},
computed: {
productId() {
const found = this.productList.find(item => item.value === this.ruleForm.number)
return found ? found.product_id : ''
}
},
methods: {
handleSubmitSuccess(response) {
if (!this.isEdit) {
this.$router.replace({ name: 'pareportEdit', params: { id: response.data.id }, query: { id: this.affairId } })
}
this.handlePay()
},
// 去支付
handlePay() {
this.payVisible = true
},
// 支付成功
handlePaySuccess() {
api.paySuccess(this.pid).then(response => {
// this.$router.replace({ name: 'pareportView', params: { id: this.pid }, query: { id: this.affairId } })
this.getDetail()
this.payVisible = false
})
}
},
beforeMount() {
if (this.isEdit || this.isView) {
this.getDetail()
} else {
// 获取学生信息
this.getStudent()
}
}
}
</script>
<style lang="scss" scoped>
.main-form {
max-width: 600px;
margin: 0 auto;
}
.el-date-editor.el-input {
width: 100%;
}
</style>
<template>
<div>
<el-button type="primary" @click="handleAdd">申请纸质成绩单</el-button>
<div style="height: 20px"></div>
<table-list :remote="remote" :columns="columns" ref="tableList"></table-list>
</div>
</template>
<script>
import listMixins from '../../mixins/list'
export default {
mixins: [listMixins],
data() {
return {
columns: [
{ prop: 'form.number', label: '份数' },
{ prop: 'form.class_name', label: '费用' },
{ prop: 'form.receive_name', label: '收件人' },
{ prop: 'form.telephone', label: '收件人电话' },
{ prop: 'form.email', label: '邮寄地址' },
{ prop: 'status_name', label: '审核状态' },
{ prop: 'approve_time1', label: '审核时间' },
{ prop: 'remark1', label: '审核备注' },
{
label: '操作',
attrs: { width: '160' },
buttons: [
{
label: '查看',
isShow(row) {
return row.status !== -1
},
onClick: row => {
this.$router.push({ name: 'pareportView', params: { id: row.id }, query: { id: row.affair_id } })
}
},
{
label: '编辑',
isShow(row) {
return row.status === -1
},
onClick: row => {
this.$router.push({ name: 'pareportEdit', params: { id: row.id }, query: { id: row.affair_id } })
}
},
{
label: '删除',
isShow(row) {
return row.status !== 2
},
onClick: row => {
this.handleRemove(row)
}
}
]
}
]
}
},
methods: {
// 新增
handleAdd() {
this.$router.push({ name: 'pareportAdd', query: { id: this.affairId } })
}
}
}
</script>
<template>
<div>
<div class="con-title">重修申请</div>
<div class="con-box">
<el-button type="text" @click="goBack">返回列表</el-button>
<el-form
ref="ruleForm"
:model="ruleForm"
:rules="rules"
:disabled="isView"
label-width="100px"
class="main-form"
v-loading="loading"
>
<el-form-item label="姓名" prop="personal_name">
<el-input v-model="ruleForm.personal_name" :disabled="disabledInfo" placeholder="请输入您的姓名" />
</el-form-item>
<el-form-item label="班级" prop="class_name">
<el-input v-model="ruleForm.class_name" :disabled="disabledInfo" placeholder="请输入您的班级" />
</el-form-item>
<el-form-item label="Sofia ID" prop="sofia_id">
<el-input v-model="ruleForm.sofia_id" :disabled="disabledInfo" placeholder="请输入您的Sofia ID" />
</el-form-item>
<el-form-item label="重修时间" prop="semester_name">
<el-radio-group
v-model="ruleForm.semester_name"
:disabled="disabledInfo"
style="line-height: 30px; margin-top: 10px"
>
<div v-for="item in semesterList" :key="item.value">
<el-radio :label="item.value"></el-radio>
</div>
</el-radio-group>
</el-form-item>
<el-form-item label="重修课程" prop="course_id">
<el-checkbox-group
v-model="ruleForm.course_id"
:disabled="disabledInfo"
style="line-height: 24px; margin-top: 10px"
>
<el-checkbox
v-for="item in currentCourseList"
:label="item.id"
:key="item.id"
style="width: 50%; margin: 0"
>{{ item.course_name }}</el-checkbox
>
</el-checkbox-group>
<div class="score" v-if="hasPay && detail.form">{{ detail.form.credit_sum_str }}</div>
</el-form-item>
<template v-if="isView && detail.status !== -1">
<el-form-item label="支付方式" style="margin: 0" v-if="detail.pay !== -1">
{{ payText }}
</el-form-item>
<el-form-item label="支付状态" style="margin: 0" v-if="detail.pay !== -1">
{{ payStatusText }}
</el-form-item>
<el-form-item label="审核状态" style="margin: 0">
{{ statusText }}
</el-form-item>
<el-form-item label="审核时间" style="margin: 0" v-if="detail.approve_time1">
{{ detail.approve_time1 }}
</el-form-item>
<el-form-item label="备注" style="margin: 0" v-if="detail.remark">
{{ detail.remark }}
</el-form-item>
</template>
<template v-if="hasPay">
<el-form-item label="支付方式" prop="payment">
<el-radio-group v-model="ruleForm.payment">
<div v-for="item in payList" :key="item.value" style="margin: 10px 0">
<el-radio :label="item.value">{{ item.label }}</el-radio>
</div>
</el-radio-group>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handlePay">去支付</el-button>
</el-form-item>
</template>
<el-form-item v-else>
<el-button type="primary" @click="handleSubmit" v-if="!isView">保存并提交</el-button>
<!-- <el-button type="info" @click="onAbort" v-if="hasAbort">撤回申请</el-button> -->
</el-form-item>
</el-form>
</div>
<el-dialog title="支付" width="400px" :visible.sync="payVisible">
<pay
:payment="ruleForm.payment"
:productId="productId"
:num="detail.form.credit"
@success="handlePaySuccess"
v-if="payVisible"
></pay>
</el-dialog>
</div>
</template>
<script>
import * as api from '../../api'
import editMixins from '../../mixins/edit'
import Pay from '../../components/pay'
export default {
mixins: [editMixins],
components: { Pay },
data() {
return {
loading: false,
ruleForm: {
personal_name: '',
class_name: '',
sofia_id: '123',
semester_name: '',
course_id: [],
payment: '1'
},
rules: {
personal_name: [{ required: true, message: '请输入您的姓名', trigger: 'blur' }],
class_name: [{ required: true, message: '请输入您的班级', trigger: 'blur' }],
sofia_id: [{ required: true, message: '请输入Sofia ID', trigger: 'blur' }],
semester_name: [{ required: true, message: '请选择您的重修时间', trigger: 'blur' }],
course_id: [{ required: true, message: '请选择您的重修课程', trigger: 'blur' }]
},
courseList: [], // 课程列表
submitedCourseList: [], // 提交的课程列表
productId: '6745273257873637376', // 商品ID
payVisible: false
}
},
computed: {
currentCourseList() {
return this.courseList.concat(this.submitedCourseList)
}
},
methods: {
init() {
if (this.isEdit || this.isView) {
this.getDetail()
} else {
// 获取学生信息
this.getStudent()
}
// 获取重修课程
this.getCourses()
},
// 获取课程
getCourses() {
api.getRetakeCourses().then(response => {
this.courseList = response || []
})
},
// 获取详情
getDetail() {
this.loading = true
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)
this.submitedCourseList = form.course_name_arr.map(item => {
item.id = item.course_id
return item
})
}
// 设置表单数据
const ruleForm = this.$_.pick(response.form, [
'personal_name',
'class_name',
'sofia_id',
'semester_name',
'course_id',
'payment'
])
Object.assign(this.ruleForm, ruleForm)
// 设置接口返回的数据
this.detail = response
})
.finally(() => {
this.loading = false
})
},
// 提交
handleSubmit() {
this.$refs.ruleForm.validate().then(() => {
const params = Object.assign({}, this.ruleForm, { affair_id: this.affairId })
params.course_id = this.ruleForm.course_id.join(',')
this.isEdit ? this.handleUpdate(params) : this.handleAdd(params)
})
},
// 撤回
onAbort() {
this.$confirm('你确定要撤回重修申请吗?撤回后,需要重新提交申请并由教务审批。', {
confirmButtonText: '确定',
cancelButtonText: '取消'
})
.then(() => {})
.catch(() => {})
},
// 去支付
handlePay() {
this.payVisible = true
},
// 支付成功
handlePaySuccess() {
api.paySuccess(this.pid).then(response => {
this.getDetail()
this.payVisible = false
})
}
},
beforeMount() {
this.init()
}
}
</script>
<style lang="scss" scoped>
.main-form {
max-width: 600px;
margin: 0 auto;
}
::v-deep .el-form--label-top .el-form-item__label {
line-height: 2;
}
.score {
color: #b80037;
}
</style>
<template>
<div>
<el-button type="primary" @click="handleAdd">申请重修</el-button>
<div style="height: 20px"></div>
<table-list :remote="remote" :columns="columns" ref="tableList"></table-list>
</div>
</template>
<script>
import listMixins from '../../mixins/list'
export default {
mixins: [listMixins],
data() {
return {
columns: [
{ prop: 'form.sofia_id', label: 'Sofia ID' },
{ prop: 'form.semester_name', label: '重修时间' },
{ prop: 'form.course_name', label: '重修课程' },
{ prop: 'status_name', label: '审核状态', attrs: { width: '100' } },
{ prop: 'approve_time1', label: '审核时间', attrs: { width: '160' } },
{ prop: 'remark1', label: '备注' },
{
label: '操作',
attrs: { width: '160' },
buttons: [
{
label: '查看',
isShow(row) {
return row.status !== -1
},
onClick: row => {
this.$router.push({ name: 'retakeView', params: { id: row.id }, query: { id: row.affair_id } })
}
},
{
label: '支付',
isShow(row) {
return row.pay === 0
},
onClick: row => {
this.$router.push({ name: 'retakeEdit', params: { id: row.id }, query: { id: row.affair_id } })
}
},
{
label: '编辑',
isShow(row) {
return row.status === -1
},
onClick: row => {
this.$router.push({ name: 'retakeEdit', params: { id: row.id }, query: { id: row.affair_id } })
}
},
{
label: '撤销',
isShow(row) {
return row.status === -1
},
onClick: row => {
this.handleCancel(row)
}
},
{
label: '删除',
isShow(row) {
return [0, 1].includes(row.status)
},
onClick: row => {
this.handleRemove(row)
}
}
]
}
]
}
},
methods: {
// 新增
handleAdd() {
this.$router.push({ name: 'retakeAdd', query: { id: this.affairId } })
}
}
}
</script>
<template>
<div>
<div class="con-title">{{ $t('pages.affairsHall.shareAdd.shareapplication') }}</div>
<div class="con-box">
<el-button type="text" @click="goBack">{{ $t('pages.affairsHall.shareAdd.backlist') }}</el-button>
<div class="main-form">
<el-form label-width="100px" :disabled="isView" ref="ruleForm" :model="ruleForm" :rules="rules">
<el-form-item :label="$t('pages.affairsHall.shareAdd.sname')" prop="personal_name">
<el-input v-model="ruleForm.personal_name" :placeholder="$t('pages.affairsHall.shareAdd.inputname')" />
</el-form-item>
<el-form-item :label="$t('pages.affairsHall.shareAdd.industry')" prop="trade_name">
<el-input v-model="ruleForm.trade_name" :placeholder="$t('pages.affairsHall.shareAdd.inputindustry')" />
</el-form-item>
<el-form-item :label="$t('pages.affairsHall.shareAdd.age')" prop="age">
<el-input v-model="ruleForm.age" :placeholder="$t('pages.affairsHall.shareAdd.inputage')" />
</el-form-item>
<el-form-item :label="$t('pages.affairsHall.shareAdd.classs')" prop="class_name">
<el-input v-model="ruleForm.class_name" :placeholder="$t('pages.affairsHall.shareAdd.inputclasss')" />
</el-form-item>
<el-form-item :label="$t('pages.affairsHall.shareAdd.phone')" prop="telephone">
<el-input v-model="ruleForm.telephone" :placeholder="$t('pages.affairsHall.shareAdd.inputphone')" />
</el-form-item>
<el-form-item :label="$t('pages.affairsHall.shareAdd.Sharingthemes')" prop="sharing_theme">
<el-input
v-model="ruleForm.sharing_theme"
:placeholder="$t('pages.affairsHall.shareAdd.inputSharingthemes')"
/>
</el-form-item>
<template v-if="isView">
<el-form-item v-if="detail.approve_time" :label="$t('pages.affairsHall.shareAdd.approvalTime')">
<el-input v-model="detail.approve_time" />
</el-form-item>
<el-form-item v-if="detail.remark1" :label="$t('pages.affairsHall.shareAdd.remarks')">
<el-input v-model="detail.remark1" maxlength="50" type="textarea" :autosize="{ minRows: 5 }" />
</el-form-item>
</template>
<el-form-item v-if="!this.isView">
<el-button type="primary" @click="handleSubmit">
{{ $t('pages.affairsHall.shareAdd.savesubmit') }}
</el-button>
</el-form-item>
</el-form>
</div>
</div>
</div>
</template>
<script>
import editMixins from '../../mixins/edit'
export default {
mixins: [editMixins],
data() {
return {
ruleForm: {
personal_name: '',
trade_name: '',
age: '',
class_name: '',
telephone: '',
sharing_theme: '',
affair_id: ''
},
rules: {
personal_name: [{ required: true, message: '请输入您的姓名', trigger: 'blur' }],
trade_name: [{ required: true, message: '请输入您的行业', trigger: 'blur' }],
age: [{ required: true, message: '请输入您的年龄', trigger: 'blur' }],
class_name: [{ required: true, message: '请输入您的班级', trigger: 'blur' }],
telephone: [{ required: true, message: '请输入您的电话', trigger: 'blur' }],
sharing_theme: [{ required: true, message: '请输入分享主题', trigger: 'blur' }]
}
}
},
beforeMount() {
if (this.isEdit || this.isView) {
this.getDetail()
}
}
}
</script>
<style lang="scss" scoped>
.main-form {
max-width: 600px;
margin: 0 auto;
}
.el-date-editor.el-input {
width: 100%;
}
</style>
<template>
<div>
<el-button type="primary" @click="handleAdd">申请新乐分享</el-button>
<div style="height: 20px"></div>
<table-list :remote="remote" :columns="columns" ref="tableList"></table-list>
</div>
</template>
<script>
import listMixins from '../../mixins/list'
export default {
mixins: [listMixins],
data() {
return {
columns: [
{ prop: 'form.sharing_theme', label: '分享主题' },
{ prop: 'form.class_name', label: '班级' },
{ prop: 'form.personal_name', label: '申请人' },
{ prop: 'form.telephone', label: '电话' },
{ prop: 'status_name', label: '审核状态' },
{ prop: 'approve_time1', label: '审核时间' },
{ prop: 'remark1', label: '备注' },
{
label: '操作',
attrs: { width: '100' },
buttons: [
{
label: '查看',
isShow(row) {
return row.status !== -1
},
onClick: row => {
this.$router.push({ name: 'shareView', params: { id: row.id }, query: { id: row.affair_id } })
}
},
{
label: '编辑',
isShow(row) {
return row.status === -1
},
onClick: row => {
this.$router.push({ name: 'shareEdit', params: { id: row.id }, query: { id: row.affair_id } })
}
},
{
label: '删除',
isShow(row) {
return row.status !== 2
},
onClick: row => {
this.handleRemove(row)
}
}
]
}
]
}
},
methods: {
// 新增
handleAdd() {
this.$router.push({ name: 'shareAdd', query: { id: this.affairId } })
}
}
}
</script>
<template>
<div>
<div class="con-title">复学申请</div>
<div class="con-box">
<el-button type="text" @click="goBack">返回列表</el-button>
<div class="main-form">
<el-form label-width="120px" :disabled="isView" ref="ruleForm" :model="ruleForm" :rules="rules">
<el-form-item label="姓名" prop="personal_name">
<el-input v-model="ruleForm.personal_name" />
</el-form-item>
<el-form-item label="班级" prop="class_name">
<el-input v-model="ruleForm.class_name" />
</el-form-item>
<el-form-item label="Sofia ID" prop="sofia_id">
<el-input v-model="ruleForm.sofia_id" />
</el-form-item>
<el-form-item label="复学时间" prop="semester_name">
<el-radio-group v-model="ruleForm.semester_name">
<div v-for="item in semesterList" :key="item.value" style="margin: 10px 0">
<el-radio :label="item.value">{{ item.value }}</el-radio>
</div>
</el-radio-group>
</el-form-item>
<template v-if="isView">
<el-form-item v-if="detail.approve_time" :label="$t('pages.affairsHall.shareAdd.approvalTime')">
<el-input v-model="detail.approve_time" />
</el-form-item>
<el-form-item v-if="detail.remark1" :label="$t('pages.affairsHall.shareAdd.remarks')">
<el-input v-model="detail.remark1" maxlength="50" type="textarea" :autosize="{ minRows: 5 }" />
</el-form-item>
</template>
<el-form-item v-if="!this.isView">
<el-button type="primary" @click="handleSubmit">
{{ $t('pages.affairsHall.shareAdd.savesubmit') }}
</el-button>
</el-form-item>
</el-form>
</div>
</div>
</div>
</template>
<script>
import editMixins from '../../mixins/edit'
export default {
mixins: [editMixins],
data() {
return {
ruleForm: {
affair_id: '',
personal_name: '',
class_name: '',
sofia_id: '',
semester_name: ''
},
rules: {
personal_name: [{ required: true, message: '请输入您的姓名', trigger: 'blur' }],
class_name: [{ required: true, message: '请输入您的班级', trigger: 'blur' }],
sofia_id: [{ required: true, message: '请输入Sofia ID', trigger: 'blur' }],
semester_name: [{ required: true, message: '请选择复学时间', trigger: 'blur' }]
},
// 学期列表
semesterList: [
{ value: '春季学期(4月11日---7月10日)' },
{ value: '夏季学期(7月11日---10月10日)' },
{ value: '秋季学期(10月11日---1月10日)' },
{ value: '冬季学期(1月11日---4月10日)' }
]
}
},
beforeMount() {
if (this.isEdit || this.isView) {
this.getDetail()
} else {
// 获取学生信息
this.getStudent()
}
}
}
</script>
<style lang="scss" scoped>
.main-form {
max-width: 600px;
margin: 0 auto;
}
.el-date-editor.el-input {
width: 100%;
}
</style>
<template>
<div>
<el-button type="primary" @click="handleAdd">申请复学</el-button>
<div style="height: 20px"></div>
<table-list :remote="remote" :columns="columns" ref="tableList"></table-list>
</div>
</template>
<script>
import listMixins from '../../mixins/list'
export default {
mixins: [listMixins],
data() {
return {
columns: [
{ prop: 'form.sofia_id', label: 'Sofia ID' },
{ prop: 'form.class_name', label: '班级' },
{ prop: 'form.semester_name', label: '复学时间' },
{ prop: 'status_name', label: '审核状态' },
{ prop: 'approve_time1', label: '审核时间' },
{ prop: 'remark1', label: '备注' },
{
label: '操作',
attrs: { width: '100' },
buttons: [
{
label: '查看',
isShow(row) {
return row.status !== -1
},
onClick: row => {
this.$router.push({ name: 'continueStudyView', params: { id: row.id }, query: { id: row.affair_id } })
}
},
{
label: '编辑',
isShow(row) {
return row.status === -1
},
onClick: row => {
this.$router.push({ name: 'continueStudyEdit', params: { id: row.id }, query: { id: row.affair_id } })
}
},
{
label: '删除',
isShow(row) {
return row.status !== 2
},
onClick: row => {
this.handleRemove(row)
}
}
]
}
]
}
},
methods: {
// 新增
handleAdd() {
this.$router.push({ name: 'continueStudyAdd', query: { id: this.affairId } })
}
}
}
</script>
<template>
<div>
<div class="con-title">休学申请</div>
<div class="con-box">
<el-button type="text" @click="goBack">返回列表</el-button>
<div class="main-form">
<el-form label-width="120px" :disabled="isView" ref="ruleForm" :model="ruleForm" :rules="rules">
<el-form-item label="姓名" prop="personal_name">
<el-input v-model="ruleForm.personal_name" />
</el-form-item>
<el-form-item label="班级" prop="class_name">
<el-input v-model="ruleForm.class_name" />
</el-form-item>
<el-form-item label="Sofia ID" prop="sofia_id">
<el-input v-model="ruleForm.sofia_id" />
</el-form-item>
<el-form-item label="休学时间" prop="semester_name">
<el-radio-group v-model="ruleForm.semester_name">
<div v-for="item in semesterList" :key="item.value" style="margin: 10px 0">
<el-radio :label="item.value">{{ item.value }}</el-radio>
</div>
</el-radio-group>
</el-form-item>
<el-form-item label="休学原因" prop="reason">
<el-input type="textarea" v-model="ruleForm.reason" :autosize="{ minRows: 5 }" />
</el-form-item>
<template v-if="isView">
<el-form-item v-if="detail.approve_time" :label="$t('pages.affairsHall.shareAdd.approvalTime')">
<el-input v-model="detail.approve_time" />
</el-form-item>
<el-form-item v-if="detail.remark1" :label="$t('pages.affairsHall.shareAdd.remarks')">
<el-input v-model="detail.remark1" maxlength="50" type="textarea" :autosize="{ minRows: 5 }" />
</el-form-item>
</template>
<el-form-item v-if="!this.isView">
<el-button type="primary" @click="handleSubmit">
{{ $t('pages.affairsHall.shareAdd.savesubmit') }}
</el-button>
</el-form-item>
</el-form>
</div>
</div>
</div>
</template>
<script>
import editMixins from '../../mixins/edit'
export default {
mixins: [editMixins],
data() {
return {
ruleForm: {
affair_id: '',
personal_name: '',
class_name: '',
sofia_id: '',
semester_name: '',
reason: ''
},
rules: {
personal_name: [{ required: true, message: '请输入您的姓名', trigger: 'blur' }],
class_name: [{ required: true, message: '请输入您的班级', trigger: 'blur' }],
sofia_id: [{ required: true, message: '请输入Sofia ID', trigger: 'blur' }],
semester_name: [{ required: true, message: '请选择休学时间', trigger: 'blur' }],
reason: [{ required: true, message: '请输入休学原因', trigger: 'blur' }]
},
// 学期列表
semesterList: [
{ value: '春季学期(4月11日---7月10日)' },
{ value: '夏季学期(7月11日---10月10日)' },
{ value: '秋季学期(10月11日---1月10日)' },
{ value: '冬季学期(1月11日---4月10日)' }
]
}
},
beforeMount() {
if (this.isEdit || this.isView) {
this.getDetail()
} else {
// 获取学生信息
this.getStudent()
}
}
}
</script>
<style lang="scss" scoped>
.main-form {
max-width: 600px;
margin: 0 auto;
}
.el-date-editor.el-input {
width: 100%;
}
</style>
<template>
<div>
<el-button type="primary" @click="handleAdd">申请休学</el-button>
<div style="height: 20px"></div>
<table-list :remote="remote" :columns="columns" ref="tableList"></table-list>
</div>
</template>
<script>
import listMixins from '../../mixins/list'
export default {
mixins: [listMixins],
data() {
return {
columns: [
{ prop: 'form.sofia_id', label: 'Sofia ID' },
{ prop: 'form.semester_name', label: '休学时间' },
{ prop: 'form.reason', label: '休学原因' },
{ prop: 'status_name', label: '审核状态' },
{ prop: 'approve_time1', label: '审核时间' },
{ prop: 'remark1', label: '备注' },
{
label: '操作',
attrs: { width: '100' },
buttons: [
{
label: '查看',
isShow(row) {
return row.status !== -1
},
onClick: row => {
this.$router.push({ name: 'pauseStudyView', params: { id: row.id }, query: { id: row.affair_id } })
}
},
{
label: '编辑',
isShow(row) {
return row.status === -1
},
onClick: row => {
this.$router.push({ name: 'pauseStudyEdit', params: { id: row.id }, query: { id: row.affair_id } })
}
},
{
label: '删除',
isShow(row) {
return row.status !== 2
},
onClick: row => {
this.handleRemove(row)
}
}
]
}
]
}
},
methods: {
// 新增
handleAdd() {
this.$router.push({ name: 'pauseStudyAdd', query: { id: this.affairId } })
}
}
}
</script>
html, body {
html,
body {
font-size: 14px; // 防止html根元素 影响本身DOM元素字体大小继承
padding: 0;
margin: 0;
......@@ -8,17 +9,8 @@ html, body {
}
/* 统一字体样式 */
* {
font-family:
"Source Han Sans CN",
"PingFang SC",
-apple-system,
"Microsoft YaHei",
"Helvetica",
"Arial",
Verdana,
"Hiragino Sans GB",
"Wenquanyi Micro Hei",
sans-serif;
font-family: 'Source Han Sans CN', 'PingFang SC', -apple-system, 'Microsoft YaHei', 'Helvetica', 'Arial', Verdana,
'Hiragino Sans GB', 'Wenquanyi Micro Hei', sans-serif;
}
/* 公共标题 - 样式 /app/learn */
......@@ -38,50 +30,108 @@ html, body {
}
/* 进度条 原始背景色 加深 */
.el-progress-bar__outer { background-color: #e5e5e5 !important; }
.el-progress-bar__innerText { color: #313131; }
.el-progress-bar { margin-right: -65px; padding-right: 65px; }
.el-progress__text { margin-left: 6px; }
.el-progress-bar__outer {
background-color: #e5e5e5 !important;
}
.el-progress-bar__innerText {
color: #313131;
}
.el-progress-bar {
margin-right: -65px;
padding-right: 65px;
}
.el-progress__text {
margin-left: 6px;
}
/* 学分 页面 - 进度条样式 */
.el-progress-bar__outer { border-radius: 0; }
.el-progress-bar__inner { border-radius: 0; }
.el-progress-bar__outer {
border-radius: 0;
}
.el-progress-bar__inner {
border-radius: 0;
}
/* 富文本 */
.course-assess .detail .b1 { display: block; max-width: 5rem; margin: 0.2rem auto; width: 100%; height: auto; }
.course-assess .detail .h1 { font-size: 0.16rem; font-weight: 700; color: #313131; line-height: 0.38rem; }
.course-assess .detail .h2 { font-size: 0.14rem; font-weight: 700; color: #313131; line-height: 0.3rem; }
.course-assess .detail .p { font-size: 0.14rem; color: #313131; line-height: 1.5; text-align: justify; }
.course-assess .detail .em { font-size: 0.12rem; color: #b49441; line-height: 1.5; text-align: justify; }
.course-assess .detail .b1 {
display: block;
max-width: 5rem;
margin: 0.2rem auto;
width: 100%;
height: auto;
}
.course-assess .detail .h1 {
font-size: 0.16rem;
font-weight: 700;
color: #313131;
line-height: 0.38rem;
}
.course-assess .detail .h2 {
font-size: 0.14rem;
font-weight: 700;
color: #313131;
line-height: 0.3rem;
}
.course-assess .detail .p {
font-size: 0.14rem;
color: #313131;
line-height: 1.5;
text-align: justify;
}
.course-assess .detail .em {
font-size: 0.12rem;
color: #b49441;
line-height: 1.5;
text-align: justify;
}
/* 富文本 */
.discuss-scroll .item-list .text p { margin: 0; padding: 0; }
.discuss-scroll .item-list .text p {
margin: 0;
padding: 0;
}
/* 富文本 */
.discuss-detail-scroll .ques .text p { margin: 0; padding: 0; }
.discuss-detail-scroll .ask .text p { margin: 0; padding: 0; }
.discuss-detail-scroll .ques .text p {
margin: 0;
padding: 0;
}
.discuss-detail-scroll .ask .text p {
margin: 0;
padding: 0;
}
/* Extra small devices (portrait phones, less than 576px) */
@media (max-width: 575px) {
html { font-size: 80px; }
html {
font-size: 80px;
}
}
/* Small devices (landscape phones, 576px and up) */
@media (min-width: 576px) and (max-width: 767px) {
html { font-size: 80px; }
html {
font-size: 80px;
}
}
/* Medium devices (tablets, 768px and up) */
@media (min-width: 768px) and (max-width: 991px) {
html { font-size: 80px; }
html {
font-size: 80px;
}
}
/* Large devices (desktops, 992px and up) */
@media (min-width: 992px) and (max-width: 1199px) {
html { font-size: 90px; }
html {
font-size: 90px;
}
}
/* Extra large devices (large desktops, 1200px and up) */
@media (min-width: 1200px) {
html { font-size: 100px; }
html {
font-size: 100px;
}
}
/* 改变主题色变量 */
......@@ -89,16 +139,21 @@ $--color-primary: #b80037;
/* 改变 icon 字体路径变量,必需 */
$--font-path: '~element-ui/lib/theme-chalk/fonts';
/* 引入element-ui对应scss文件,重新编译 */
@import "~element-ui/packages/theme-chalk/src/index";
@import '~element-ui/packages/theme-chalk/src/index';
/* 引入隐藏显示样式 */
@import "~element-ui/lib/theme-chalk/display.css";
@import '~element-ui/lib/theme-chalk/display.css';
/* 引入三方 自定义图标库,方法 vue -> 第三方 自建图标库 中有 */
@import "~@/assets/font-icons/iconfont.css";
[class^="el-icon-self-"], [class*="el-icon-self-"] {
font-family: "selfAllIcon" !important;
@import '~@/assets/font-icons/iconfont.css';
[class^='el-icon-self-'],
[class*='el-icon-self-'] {
font-family: 'selfAllIcon' !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.el-form--label-top .el-form-item__label {
padding: 0;
line-height: 30px;
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论