添加培训
This commit is contained in:
parent
b88b8587f2
commit
0a0ea2de88
86
src/api/modular/main/scrtraindata/scrTrainDataManage.js
Normal file
86
src/api/modular/main/scrtraindata/scrTrainDataManage.js
Normal file
@ -0,0 +1,86 @@
|
||||
import { axios } from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 查询培训
|
||||
*
|
||||
* @author 1
|
||||
* @date 2025-10-17 19:55:20
|
||||
*/
|
||||
export function scrTrainDataPage (parameter) {
|
||||
return axios({
|
||||
url: '/scrTrainData/page',
|
||||
method: 'get',
|
||||
params: parameter
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 培训列表
|
||||
*
|
||||
* @author 1
|
||||
* @date 2025-10-17 19:55:20
|
||||
*/
|
||||
export function scrTrainDataList (parameter) {
|
||||
return axios({
|
||||
url: '/scrTrainData/list',
|
||||
method: 'get',
|
||||
params: parameter
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加培训
|
||||
*
|
||||
* @author 1
|
||||
* @date 2025-10-17 19:55:20
|
||||
*/
|
||||
export function scrTrainDataAdd (parameter) {
|
||||
return axios({
|
||||
url: '/scrTrainData/add',
|
||||
method: 'post',
|
||||
data: parameter
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑培训
|
||||
*
|
||||
* @author 1
|
||||
* @date 2025-10-17 19:55:20
|
||||
*/
|
||||
export function scrTrainDataEdit (parameter) {
|
||||
return axios({
|
||||
url: '/scrTrainData/edit',
|
||||
method: 'post',
|
||||
data: parameter
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除培训
|
||||
*
|
||||
* @author 1
|
||||
* @date 2025-10-17 19:55:20
|
||||
*/
|
||||
export function scrTrainDataDelete (parameter) {
|
||||
return axios({
|
||||
url: '/scrTrainData/delete',
|
||||
method: 'post',
|
||||
data: parameter
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出培训
|
||||
*
|
||||
* @author 1
|
||||
* @date 2025-10-17 19:55:20
|
||||
*/
|
||||
export function scrTrainDataExport (parameter) {
|
||||
return axios({
|
||||
url: '/scrTrainData/export',
|
||||
method: 'get',
|
||||
params: parameter,
|
||||
responseType: 'blob'
|
||||
})
|
||||
}
|
||||
86
src/api/modular/main/scrtrainsche/scrTrainScheManage.js
Normal file
86
src/api/modular/main/scrtrainsche/scrTrainScheManage.js
Normal file
@ -0,0 +1,86 @@
|
||||
import { axios } from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 查询培训安排
|
||||
*
|
||||
* @author 1
|
||||
* @date 2025-10-17 20:13:05
|
||||
*/
|
||||
export function scrTrainSchePage (parameter) {
|
||||
return axios({
|
||||
url: '/scrTrainSche/page',
|
||||
method: 'get',
|
||||
params: parameter
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 培训安排列表
|
||||
*
|
||||
* @author 1
|
||||
* @date 2025-10-17 20:13:05
|
||||
*/
|
||||
export function scrTrainScheList (parameter) {
|
||||
return axios({
|
||||
url: '/scrTrainSche/list',
|
||||
method: 'get',
|
||||
params: parameter
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加培训安排
|
||||
*
|
||||
* @author 1
|
||||
* @date 2025-10-17 20:13:05
|
||||
*/
|
||||
export function scrTrainScheAdd (parameter) {
|
||||
return axios({
|
||||
url: '/scrTrainSche/add',
|
||||
method: 'post',
|
||||
data: parameter
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑培训安排
|
||||
*
|
||||
* @author 1
|
||||
* @date 2025-10-17 20:13:05
|
||||
*/
|
||||
export function scrTrainScheEdit (parameter) {
|
||||
return axios({
|
||||
url: '/scrTrainSche/edit',
|
||||
method: 'post',
|
||||
data: parameter
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除培训安排
|
||||
*
|
||||
* @author 1
|
||||
* @date 2025-10-17 20:13:05
|
||||
*/
|
||||
export function scrTrainScheDelete (parameter) {
|
||||
return axios({
|
||||
url: '/scrTrainSche/delete',
|
||||
method: 'post',
|
||||
data: parameter
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出培训安排
|
||||
*
|
||||
* @author 1
|
||||
* @date 2025-10-17 20:13:05
|
||||
*/
|
||||
export function scrTrainScheExport (parameter) {
|
||||
return axios({
|
||||
url: '/scrTrainSche/export',
|
||||
method: 'get',
|
||||
params: parameter,
|
||||
responseType: 'blob'
|
||||
})
|
||||
}
|
||||
136
src/views/main/scrtraindata/addForm.vue
Normal file
136
src/views/main/scrtraindata/addForm.vue
Normal file
@ -0,0 +1,136 @@
|
||||
<template>
|
||||
<a-modal
|
||||
title="新增"
|
||||
:width="900"
|
||||
:visible="visible"
|
||||
:confirmLoading="confirmLoading"
|
||||
@ok="handleSubmit"
|
||||
@cancel="handleCancel"
|
||||
>
|
||||
<a-spin :spinning="confirmLoading">
|
||||
<a-form :form="form">
|
||||
<a-form-item
|
||||
label="月份"
|
||||
:labelCol="labelCol"
|
||||
:wrapperCol="wrapperCol"
|
||||
has-feedback
|
||||
>
|
||||
<a-month-picker show-time style="width: 100%" placeholder="请选择月份" v-decorator="['happenTime',{rules: [{ required: true, message: '请选择月份!' }]}]" @change="happenTimeOnChange"/>
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
label="培训类型"
|
||||
:labelCol="labelCol"
|
||||
:wrapperCol="wrapperCol"
|
||||
has-feedback
|
||||
>
|
||||
<a-input placeholder="请输入培训类型" v-decorator="['type', {rules: [{required: true, message: '请输入培训类型!'}]}]" />
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
label="数量"
|
||||
:labelCol="labelCol"
|
||||
:wrapperCol="wrapperCol"
|
||||
has-feedback
|
||||
>
|
||||
<a-input-number placeholder="请输入数量" style="width: 100%" v-decorator="['num', {rules: [{required: true, message: '请输入数量!'}]}]" />
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
label="内部还是外部"
|
||||
:labelCol="labelCol"
|
||||
:wrapperCol="wrapperCol"
|
||||
>
|
||||
<a-radio-group placeholder="请选择内部还是外部" v-decorator="['nborwb',{rules: [{ required: true, message: '请选择内部还是外部!' }]}]" >
|
||||
<a-radio v-for="(item,index) in nborwbData" :key="index" :value="item.code">{{ item.name }}</a-radio>
|
||||
</a-radio-group>
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
label="部门"
|
||||
:labelCol="labelCol"
|
||||
:wrapperCol="wrapperCol"
|
||||
has-feedback
|
||||
>
|
||||
<a-input placeholder="请输入部门" v-decorator="['workPlace', {rules: [{required: true, message: '请输入部门!'}]}]" />
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</a-spin>
|
||||
</a-modal>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { scrTrainDataAdd } from '@/api/modular/main/scrtraindata/scrTrainDataManage'
|
||||
import moment from 'moment'
|
||||
export default {
|
||||
data () {
|
||||
return {
|
||||
labelCol: {
|
||||
xs: { span: 24 },
|
||||
sm: { span: 5 }
|
||||
},
|
||||
wrapperCol: {
|
||||
xs: { span: 24 },
|
||||
sm: { span: 15 }
|
||||
},
|
||||
happenTimeDateString: '',
|
||||
visible: false,
|
||||
confirmLoading: false,
|
||||
form: this.$form.createForm(this),
|
||||
nborwbData: [
|
||||
{
|
||||
code: 1,
|
||||
name: '内部'
|
||||
},
|
||||
{
|
||||
code: 0,
|
||||
name: '外部'
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
moment,
|
||||
// 初始化方法
|
||||
add (record) {
|
||||
this.visible = true
|
||||
},
|
||||
/**
|
||||
* 提交表单
|
||||
*/
|
||||
handleSubmit () {
|
||||
const { form: { validateFields } } = this
|
||||
this.confirmLoading = true
|
||||
validateFields((errors, values) => {
|
||||
if (!errors) {
|
||||
for (const key in values) {
|
||||
if (typeof (values[key]) === 'object' && values[key] != null) {
|
||||
values[key] = JSON.stringify(values[key])
|
||||
}
|
||||
}
|
||||
values.happenTime = moment(this.happenTimeDateString).format('YYYY-MM-DD') || null
|
||||
scrTrainDataAdd(values).then((res) => {
|
||||
if (res.success) {
|
||||
this.$message.success('新增成功')
|
||||
this.confirmLoading = false
|
||||
this.$emit('ok', values)
|
||||
this.handleCancel()
|
||||
} else {
|
||||
this.$message.error('新增失败')// + res.message
|
||||
}
|
||||
}).finally((res) => {
|
||||
this.confirmLoading = false
|
||||
})
|
||||
} else {
|
||||
this.confirmLoading = false
|
||||
}
|
||||
})
|
||||
},
|
||||
happenTimeOnChange(date, dateString) {
|
||||
this.happenTimeDateString = dateString
|
||||
},
|
||||
handleCancel () {
|
||||
this.happenTimeDateString = ''
|
||||
this.form.getFieldDecorator('happenTime', { initialValue: null })
|
||||
this.form.resetFields()
|
||||
this.visible = false
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
150
src/views/main/scrtraindata/editForm.vue
Normal file
150
src/views/main/scrtraindata/editForm.vue
Normal file
@ -0,0 +1,150 @@
|
||||
<template>
|
||||
<a-modal
|
||||
title="编辑培训"
|
||||
:width="900"
|
||||
:visible="visible"
|
||||
:confirmLoading="confirmLoading"
|
||||
@ok="handleSubmit"
|
||||
@cancel="handleCancel"
|
||||
>
|
||||
<a-spin :spinning="confirmLoading">
|
||||
<a-form :form="form">
|
||||
<a-form-item v-show="false"><a-input v-decorator="['id']" /></a-form-item>
|
||||
<a-form-item
|
||||
label="月份"
|
||||
:labelCol="labelCol"
|
||||
:wrapperCol="wrapperCol"
|
||||
has-feedback
|
||||
>
|
||||
<a-month-picker show-time style="width: 100%" placeholder="请选择月份" v-decorator="['happenTime',{rules: [{ required: true, message: '请选择月份!' }]}]" @change="happenTimeOnChange"/>
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
label="培训类型"
|
||||
:labelCol="labelCol"
|
||||
:wrapperCol="wrapperCol"
|
||||
has-feedback
|
||||
>
|
||||
<a-input placeholder="请输入培训类型" v-decorator="['type', {rules: [{required: true, message: '请输入培训类型!'}]}]" />
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
label="数量"
|
||||
:labelCol="labelCol"
|
||||
:wrapperCol="wrapperCol"
|
||||
has-feedback
|
||||
>
|
||||
<a-input-number placeholder="请输入数量" style="width: 100%" v-decorator="['num', {rules: [{required: true, message: '请输入数量!'}]}]" />
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
label="内部还是外部"
|
||||
:labelCol="labelCol"
|
||||
:wrapperCol="wrapperCol"
|
||||
>
|
||||
<a-radio-group placeholder="请选择内部还是外部" v-decorator="['nborwb',{rules: [{ required: true, message: '请选择内部还是外部!' }]}]" >
|
||||
<a-radio v-for="(item,index) in nborwbData" :key="index" :value="item.code">{{ item.name }}</a-radio>
|
||||
</a-radio-group>
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
label="部门"
|
||||
:labelCol="labelCol"
|
||||
:wrapperCol="wrapperCol"
|
||||
has-feedback
|
||||
>
|
||||
<a-input placeholder="请输入部门" v-decorator="['workPlace', {rules: [{required: true, message: '请输入部门!'}]}]" />
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</a-spin>
|
||||
</a-modal>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import moment from 'moment'
|
||||
import { scrTrainDataEdit } from '@/api/modular/main/scrtraindata/scrTrainDataManage'
|
||||
export default {
|
||||
data () {
|
||||
return {
|
||||
labelCol: {
|
||||
xs: { span: 24 },
|
||||
sm: { span: 5 }
|
||||
},
|
||||
wrapperCol: {
|
||||
xs: { span: 24 },
|
||||
sm: { span: 15 }
|
||||
},
|
||||
happenTimeDateString: '',
|
||||
visible: false,
|
||||
confirmLoading: false,
|
||||
form: this.$form.createForm(this),
|
||||
nborwbData: [
|
||||
{
|
||||
code: 1,
|
||||
name: '内部'
|
||||
},
|
||||
{
|
||||
code: 0,
|
||||
name: '外部'
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
moment,
|
||||
// 初始化方法
|
||||
edit (record) {
|
||||
this.visible = true
|
||||
setTimeout(() => {
|
||||
this.form.setFieldsValue(
|
||||
{
|
||||
id: record.id,
|
||||
type: record.type,
|
||||
num: record.num,
|
||||
nborwb: record.nborwb,
|
||||
workPlace: record.workPlace
|
||||
}
|
||||
)
|
||||
}, 100)
|
||||
// 时间单独处理
|
||||
if (record.happenTime) {
|
||||
this.form.getFieldDecorator('happenTime', { initialValue: moment(record.happenTime, 'YYYY-MM-DD') })
|
||||
this.happenTimeDateString = moment(record.happenTime).format('YYYY-MM-DD')
|
||||
}
|
||||
},
|
||||
handleSubmit () {
|
||||
const { form: { validateFields } } = this
|
||||
this.confirmLoading = true
|
||||
validateFields((errors, values) => {
|
||||
if (!errors) {
|
||||
for (const key in values) {
|
||||
if (typeof (values[key]) === 'object' && values[key] != null) {
|
||||
values[key] = JSON.stringify(values[key])
|
||||
}
|
||||
}
|
||||
values.happenTime = moment(this.happenTimeDateString).format('YYYY-MM-DD') || null
|
||||
scrTrainDataEdit(values).then((res) => {
|
||||
if (res.success) {
|
||||
this.$message.success('编辑成功')
|
||||
this.confirmLoading = false
|
||||
this.$emit('ok', values)
|
||||
this.handleCancel()
|
||||
} else {
|
||||
this.$message.error('编辑失败')// + res.message
|
||||
}
|
||||
}).finally((res) => {
|
||||
this.confirmLoading = false
|
||||
})
|
||||
} else {
|
||||
this.confirmLoading = false
|
||||
}
|
||||
})
|
||||
},
|
||||
happenTimeOnChange(date, dateString) {
|
||||
this.happenTimeDateString = dateString
|
||||
},
|
||||
handleCancel () {
|
||||
this.happenTimeDateString = ''
|
||||
this.form.getFieldDecorator('happenTime', { initialValue: null })
|
||||
this.form.resetFields()
|
||||
this.visible = false
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
224
src/views/main/scrtraindata/index.vue
Normal file
224
src/views/main/scrtraindata/index.vue
Normal file
@ -0,0 +1,224 @@
|
||||
<template>
|
||||
<div>
|
||||
<a-card :bordered="false" :bodyStyle="tstyle">
|
||||
<div class="table-page-search-wrapper">
|
||||
<a-form layout="inline">
|
||||
<a-row :gutter="48">
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="培训类型">
|
||||
<a-input v-model="queryParam.type" allow-clear placeholder="请输入培训类型"/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="月份">
|
||||
<a-month-picker style="width: 100%" placeholder="请选择月份" v-model="queryParam.happenTimeDate" @change="onChangehappenTime"/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<template v-if="advanced">
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="部门">
|
||||
<a-input v-model="queryParam.workPlace" allow-clear placeholder="请输入部门"/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</template>
|
||||
<a-col :md="8" :sm="24" >
|
||||
<span class="table-page-search-submitButtons">
|
||||
<a-button type="primary" @click="$refs.table.refresh(true)" >查询</a-button>
|
||||
<a-button style="margin-left: 8px" @click="() => queryParam = {}">重置</a-button>
|
||||
<a @click="toggleAdvanced" style="margin-left: 8px">
|
||||
{{ advanced ? '收起' : '展开' }}
|
||||
<a-icon :type="advanced ? 'up' : 'down'"/>
|
||||
</a>
|
||||
</span>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-form>
|
||||
</div>
|
||||
</a-card>
|
||||
<a-card :bordered="false">
|
||||
<s-table
|
||||
ref="table"
|
||||
:columns="columns"
|
||||
:data="loadData"
|
||||
:alert="options.alert"
|
||||
:rowKey="(record) => record.id"
|
||||
:rowSelection="options.rowSelection"
|
||||
>
|
||||
<template class="table-operator" slot="operator">
|
||||
<a-button type="primary" icon="plus" @click="$refs.addForm.add()">新增</a-button>
|
||||
<a-button type="danger" :disabled="selectedRowKeys.length < 1" @click="batchDelete"><a-icon type="delete"/>批量删除</a-button>
|
||||
<x-down
|
||||
ref="batchExport"
|
||||
@batchExport="batchExport"
|
||||
/>
|
||||
</template>
|
||||
<span slot="nborwbScopedSlots" slot-scope="text">
|
||||
{{ text=='0'?'外部':'内部' }}
|
||||
</span>
|
||||
<span slot="action" slot-scope="text, record">
|
||||
<a @click="$refs.editForm.edit(record)">编辑</a>
|
||||
<a-divider type="vertical" />
|
||||
<a-popconfirm placement="topRight" title="确认删除?" @confirm="() => singleDelete(record)">
|
||||
<a>删除</a>
|
||||
</a-popconfirm>
|
||||
</span>
|
||||
</s-table>
|
||||
<add-form ref="addForm" @ok="handleOk" />
|
||||
<edit-form ref="editForm" @ok="handleOk" />
|
||||
</a-card>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { STable, XDown } from '@/components'
|
||||
import moment from 'moment'
|
||||
import { scrTrainDataPage, scrTrainDataDelete, scrTrainDataExport } from '@/api/modular/main/scrtraindata/scrTrainDataManage'
|
||||
import addForm from './addForm.vue'
|
||||
import editForm from './editForm.vue'
|
||||
export default {
|
||||
components: {
|
||||
STable,
|
||||
addForm,
|
||||
editForm,
|
||||
XDown
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
// 高级搜索 展开/关闭
|
||||
advanced: false,
|
||||
// 查询参数
|
||||
queryParam: {},
|
||||
// 表头
|
||||
columns: [
|
||||
{
|
||||
title: '月份',
|
||||
align: 'center',
|
||||
dataIndex: 'happenTime',
|
||||
customRender: (text, record) => {
|
||||
return moment(text).format('YYYY-MM')
|
||||
}
|
||||
},
|
||||
{
|
||||
title: '培训类型',
|
||||
align: 'center',
|
||||
dataIndex: 'type'
|
||||
},
|
||||
{
|
||||
title: '数量',
|
||||
align: 'center',
|
||||
dataIndex: 'num'
|
||||
},
|
||||
{
|
||||
title: '内部/外部',
|
||||
align: 'center',
|
||||
dataIndex: 'nborwb',
|
||||
scopedSlots: { customRender: 'nborwbScopedSlots' }
|
||||
},
|
||||
{
|
||||
title: '部门',
|
||||
align: 'center',
|
||||
dataIndex: 'workPlace'
|
||||
}
|
||||
],
|
||||
tstyle: { 'padding-bottom': '0px', 'margin-bottom': '10px' },
|
||||
// 加载数据方法 必须为 Promise 对象
|
||||
loadData: parameter => {
|
||||
return scrTrainDataPage(Object.assign(parameter, this.switchingDate())).then((res) => {
|
||||
return res.data
|
||||
})
|
||||
},
|
||||
selectedRowKeys: [],
|
||||
selectedRows: [],
|
||||
options: {
|
||||
alert: { show: true, clear: () => { this.selectedRowKeys = [] } },
|
||||
rowSelection: {
|
||||
selectedRowKeys: this.selectedRowKeys,
|
||||
onChange: this.onSelectChange
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
created () {
|
||||
this.columns.push({
|
||||
title: '操作',
|
||||
width: '150px',
|
||||
dataIndex: 'action',
|
||||
scopedSlots: { customRender: 'action' }
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
moment,
|
||||
/**
|
||||
* 查询参数组装
|
||||
*/
|
||||
switchingDate () {
|
||||
const queryParamhappenTime = this.queryParam.happenTimeDate
|
||||
if (queryParamhappenTime != null) {
|
||||
this.queryParam.happenTime = moment(queryParamhappenTime).format('YYYY-MM-DD')
|
||||
if (queryParamhappenTime.length < 1) {
|
||||
delete this.queryParam.happenTime
|
||||
}
|
||||
}
|
||||
const obj = JSON.parse(JSON.stringify(this.queryParam))
|
||||
return obj
|
||||
},
|
||||
/**
|
||||
* 单个删除
|
||||
*/
|
||||
singleDelete (record) {
|
||||
const param = [{ 'id': record.id }]
|
||||
this.scrTrainDataDelete(param)
|
||||
},
|
||||
/**
|
||||
* 批量删除
|
||||
*/
|
||||
batchDelete () {
|
||||
const paramIds = this.selectedRowKeys.map((d) => {
|
||||
return { 'id': d }
|
||||
})
|
||||
this.scrTrainDataDelete(paramIds)
|
||||
},
|
||||
scrTrainDataDelete (record) {
|
||||
scrTrainDataDelete(record).then((res) => {
|
||||
if (res.success) {
|
||||
this.$message.success('删除成功')
|
||||
this.$refs.table.clearRefreshSelected()
|
||||
} else {
|
||||
this.$message.error('删除失败') // + res.message
|
||||
}
|
||||
})
|
||||
},
|
||||
toggleAdvanced () {
|
||||
this.advanced = !this.advanced
|
||||
},
|
||||
onChangehappenTime(date, dateString) {
|
||||
this.happenTimeDateString = dateString
|
||||
},
|
||||
/**
|
||||
* 批量导出
|
||||
*/
|
||||
batchExport () {
|
||||
const paramIds = this.selectedRowKeys.map((d) => {
|
||||
return { 'id': d }
|
||||
})
|
||||
scrTrainDataExport(paramIds).then((res) => {
|
||||
this.$refs.batchExport.downloadfile(res)
|
||||
})
|
||||
},
|
||||
handleOk () {
|
||||
this.$refs.table.refresh()
|
||||
},
|
||||
onSelectChange (selectedRowKeys, selectedRows) {
|
||||
this.selectedRowKeys = selectedRowKeys
|
||||
this.selectedRows = selectedRows
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="less">
|
||||
.table-operator {
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
button {
|
||||
margin-right: 8px;
|
||||
}
|
||||
</style>
|
||||
125
src/views/main/scrtrainsche/addForm.vue
Normal file
125
src/views/main/scrtrainsche/addForm.vue
Normal file
@ -0,0 +1,125 @@
|
||||
<template>
|
||||
<a-modal
|
||||
title="新增"
|
||||
:width="900"
|
||||
:visible="visible"
|
||||
:confirmLoading="confirmLoading"
|
||||
@ok="handleSubmit"
|
||||
@cancel="handleCancel"
|
||||
>
|
||||
<a-spin :spinning="confirmLoading">
|
||||
<a-form :form="form">
|
||||
<a-form-item
|
||||
label="月份"
|
||||
:labelCol="labelCol"
|
||||
:wrapperCol="wrapperCol"
|
||||
has-feedback
|
||||
>
|
||||
<a-month-picker show-time style="width: 100%" placeholder="请选择月份" v-decorator="['happenTime',{rules: [{ required: true, message: '请选择月份!' }]}]" @change="happenTimeOnChange"/>
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
label="培训计划"
|
||||
:labelCol="labelCol"
|
||||
:wrapperCol="wrapperCol"
|
||||
has-feedback
|
||||
>
|
||||
<a-input placeholder="请输入培训计划" v-decorator="['name', {rules: [{required: true, message: '请输入培训计划!'}]}]" />
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
label="线上培训"
|
||||
:labelCol="labelCol"
|
||||
:wrapperCol="wrapperCol"
|
||||
has-feedback
|
||||
>
|
||||
<a-input placeholder="请输入线上培训" v-decorator="['uppx', {rules: [{required: true, message: '请输入线上培训!'}]}]" />
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
label="线下培训"
|
||||
:labelCol="labelCol"
|
||||
:wrapperCol="wrapperCol"
|
||||
has-feedback
|
||||
>
|
||||
<a-input placeholder="请输入线下培训" v-decorator="['downpx', {rules: [{required: true, message: '请输入线下培训!'}]}]" />
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
label="在线考试"
|
||||
:labelCol="labelCol"
|
||||
:wrapperCol="wrapperCol"
|
||||
has-feedback
|
||||
>
|
||||
<a-input placeholder="请输入在线考试" v-decorator="['workPlace', {rules: [{required: true, message: '请输入在线考试!'}]}]" />
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</a-spin>
|
||||
</a-modal>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { scrTrainScheAdd } from '@/api/modular/main/scrtrainsche/scrTrainScheManage'
|
||||
import moment from 'moment'
|
||||
export default {
|
||||
data () {
|
||||
return {
|
||||
labelCol: {
|
||||
xs: { span: 24 },
|
||||
sm: { span: 5 }
|
||||
},
|
||||
wrapperCol: {
|
||||
xs: { span: 24 },
|
||||
sm: { span: 15 }
|
||||
},
|
||||
happenTimeDateString: '',
|
||||
visible: false,
|
||||
confirmLoading: false,
|
||||
form: this.$form.createForm(this)
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
moment,
|
||||
// 初始化方法
|
||||
add (record) {
|
||||
this.visible = true
|
||||
},
|
||||
/**
|
||||
* 提交表单
|
||||
*/
|
||||
handleSubmit () {
|
||||
const { form: { validateFields } } = this
|
||||
this.confirmLoading = true
|
||||
validateFields((errors, values) => {
|
||||
if (!errors) {
|
||||
for (const key in values) {
|
||||
if (typeof (values[key]) === 'object' && values[key] != null) {
|
||||
values[key] = JSON.stringify(values[key])
|
||||
}
|
||||
}
|
||||
values.happenTime = moment(this.happenTimeDateString).format('YYYY-MM-DD') || null
|
||||
scrTrainScheAdd(values).then((res) => {
|
||||
if (res.success) {
|
||||
this.$message.success('新增成功')
|
||||
this.confirmLoading = false
|
||||
this.$emit('ok', values)
|
||||
this.handleCancel()
|
||||
} else {
|
||||
this.$message.error('新增失败')// + res.message
|
||||
}
|
||||
}).finally((res) => {
|
||||
this.confirmLoading = false
|
||||
})
|
||||
} else {
|
||||
this.confirmLoading = false
|
||||
}
|
||||
})
|
||||
},
|
||||
happenTimeOnChange(date, dateString) {
|
||||
this.happenTimeDateString = dateString
|
||||
},
|
||||
handleCancel () {
|
||||
this.happenTimeDateString = ''
|
||||
this.form.getFieldDecorator('happenTime', { initialValue: null })
|
||||
this.form.resetFields()
|
||||
this.visible = false
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
139
src/views/main/scrtrainsche/editForm.vue
Normal file
139
src/views/main/scrtrainsche/editForm.vue
Normal file
@ -0,0 +1,139 @@
|
||||
<template>
|
||||
<a-modal
|
||||
title="编辑培训安排"
|
||||
:width="900"
|
||||
:visible="visible"
|
||||
:confirmLoading="confirmLoading"
|
||||
@ok="handleSubmit"
|
||||
@cancel="handleCancel"
|
||||
>
|
||||
<a-spin :spinning="confirmLoading">
|
||||
<a-form :form="form">
|
||||
<a-form-item v-show="false"><a-input v-decorator="['id']" /></a-form-item>
|
||||
<a-form-item
|
||||
label="月份"
|
||||
:labelCol="labelCol"
|
||||
:wrapperCol="wrapperCol"
|
||||
has-feedback
|
||||
>
|
||||
<a-month-picker show-time style="width: 100%" placeholder="请选择月份" v-decorator="['happenTime',{rules: [{ required: true, message: '请选择月份!' }]}]" @change="happenTimeOnChange"/>
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
label="培训计划"
|
||||
:labelCol="labelCol"
|
||||
:wrapperCol="wrapperCol"
|
||||
has-feedback
|
||||
>
|
||||
<a-input placeholder="请输入培训计划" v-decorator="['name', {rules: [{required: true, message: '请输入培训计划!'}]}]" />
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
label="线上培训"
|
||||
:labelCol="labelCol"
|
||||
:wrapperCol="wrapperCol"
|
||||
has-feedback
|
||||
>
|
||||
<a-input placeholder="请输入线上培训" v-decorator="['uppx', {rules: [{required: true, message: '请输入线上培训!'}]}]" />
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
label="线下培训"
|
||||
:labelCol="labelCol"
|
||||
:wrapperCol="wrapperCol"
|
||||
has-feedback
|
||||
>
|
||||
<a-input placeholder="请输入线下培训" v-decorator="['downpx', {rules: [{required: true, message: '请输入线下培训!'}]}]" />
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
label="在线考试"
|
||||
:labelCol="labelCol"
|
||||
:wrapperCol="wrapperCol"
|
||||
has-feedback
|
||||
>
|
||||
<a-input placeholder="请输入在线考试" v-decorator="['workPlace', {rules: [{required: true, message: '请输入在线考试!'}]}]" />
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</a-spin>
|
||||
</a-modal>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import moment from 'moment'
|
||||
import { scrTrainScheEdit } from '@/api/modular/main/scrtrainsche/scrTrainScheManage'
|
||||
export default {
|
||||
data () {
|
||||
return {
|
||||
labelCol: {
|
||||
xs: { span: 24 },
|
||||
sm: { span: 5 }
|
||||
},
|
||||
wrapperCol: {
|
||||
xs: { span: 24 },
|
||||
sm: { span: 15 }
|
||||
},
|
||||
happenTimeDateString: '',
|
||||
visible: false,
|
||||
confirmLoading: false,
|
||||
form: this.$form.createForm(this)
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
moment,
|
||||
// 初始化方法
|
||||
edit (record) {
|
||||
this.visible = true
|
||||
setTimeout(() => {
|
||||
this.form.setFieldsValue(
|
||||
{
|
||||
id: record.id,
|
||||
name: record.name,
|
||||
uppx: record.uppx,
|
||||
downpx: record.downpx,
|
||||
workPlace: record.workPlace
|
||||
}
|
||||
)
|
||||
}, 100)
|
||||
// 时间单独处理
|
||||
if (record.happenTime) {
|
||||
this.form.getFieldDecorator('happenTime', { initialValue: moment(record.happenTime, 'YYYY-MM-DD') })
|
||||
this.happenTimeDateString = moment(record.happenTime).format('YYYY-MM-DD')
|
||||
}
|
||||
},
|
||||
handleSubmit () {
|
||||
const { form: { validateFields } } = this
|
||||
this.confirmLoading = true
|
||||
validateFields((errors, values) => {
|
||||
if (!errors) {
|
||||
for (const key in values) {
|
||||
if (typeof (values[key]) === 'object' && values[key] != null) {
|
||||
values[key] = JSON.stringify(values[key])
|
||||
}
|
||||
}
|
||||
values.happenTime = moment(this.happenTimeDateString).format('YYYY-MM-DD') || null
|
||||
scrTrainScheEdit(values).then((res) => {
|
||||
if (res.success) {
|
||||
this.$message.success('编辑成功')
|
||||
this.confirmLoading = false
|
||||
this.$emit('ok', values)
|
||||
this.handleCancel()
|
||||
} else {
|
||||
this.$message.error('编辑失败')// + res.message
|
||||
}
|
||||
}).finally((res) => {
|
||||
this.confirmLoading = false
|
||||
})
|
||||
} else {
|
||||
this.confirmLoading = false
|
||||
}
|
||||
})
|
||||
},
|
||||
happenTimeOnChange(date, dateString) {
|
||||
this.happenTimeDateString = dateString
|
||||
},
|
||||
handleCancel () {
|
||||
this.happenTimeDateString = ''
|
||||
this.form.getFieldDecorator('happenTime', { initialValue: null })
|
||||
this.form.resetFields()
|
||||
this.visible = false
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
217
src/views/main/scrtrainsche/index.vue
Normal file
217
src/views/main/scrtrainsche/index.vue
Normal file
@ -0,0 +1,217 @@
|
||||
<template>
|
||||
<div>
|
||||
<a-card :bordered="false" :bodyStyle="tstyle">
|
||||
<div class="table-page-search-wrapper">
|
||||
<a-form layout="inline">
|
||||
<a-row :gutter="48">
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="培训计划">
|
||||
<a-input v-model="queryParam.name" allow-clear placeholder="请输入培训计划"/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-form-item label="月份">
|
||||
<a-month-picker style="width: 100%" placeholder="请选择月份" v-model="queryParam.happenTimeDate" @change="onChangehappenTime"/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<span class="table-page-search-submitButtons">
|
||||
<a-button type="primary" @click="$refs.table.refresh(true)">查询</a-button>
|
||||
<a-button style="margin-left: 8px" @click="() => queryParam = {}">重置</a-button>
|
||||
</span>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-form>
|
||||
</div>
|
||||
</a-card>
|
||||
<a-card :bordered="false">
|
||||
<s-table
|
||||
ref="table"
|
||||
:columns="columns"
|
||||
:data="loadData"
|
||||
:alert="options.alert"
|
||||
:rowKey="(record) => record.id"
|
||||
:rowSelection="options.rowSelection"
|
||||
>
|
||||
<template class="table-operator" slot="operator" >
|
||||
<a-button type="primary" icon="plus" @click="$refs.addForm.add()">新增</a-button>
|
||||
<a-button type="danger" :disabled="selectedRowKeys.length < 1" @click="batchDelete"><a-icon type="delete"/>批量删除</a-button>
|
||||
<x-down
|
||||
ref="batchExport"
|
||||
@batchExport="batchExport"
|
||||
/>
|
||||
</template>
|
||||
<span slot="uppxScopedSlots" slot-scope="text">
|
||||
<ellipsis :length="10" tooltip>{{ text }}</ellipsis>
|
||||
</span>
|
||||
<span slot="downpxScopedSlots" slot-scope="text">
|
||||
<ellipsis :length="10" tooltip>{{ text }}</ellipsis>
|
||||
</span>
|
||||
<span slot="workPlaceScopedSlots" slot-scope="text">
|
||||
<ellipsis :length="10" tooltip>{{ text }}</ellipsis>
|
||||
</span>
|
||||
<span slot="action" slot-scope="text, record">
|
||||
<a @click="$refs.editForm.edit(record)">编辑</a>
|
||||
<a-divider type="vertical" />
|
||||
<a-popconfirm placement="topRight" title="确认删除?" @confirm="() => singleDelete(record)">
|
||||
<a>删除</a>
|
||||
</a-popconfirm>
|
||||
</span>
|
||||
</s-table>
|
||||
<add-form ref="addForm" @ok="handleOk" />
|
||||
<edit-form ref="editForm" @ok="handleOk" />
|
||||
</a-card>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { STable, XDown, Ellipsis } from '@/components'
|
||||
import moment from 'moment'
|
||||
import { scrTrainSchePage, scrTrainScheDelete, scrTrainScheExport } from '@/api/modular/main/scrtrainsche/scrTrainScheManage'
|
||||
import addForm from './addForm.vue'
|
||||
import editForm from './editForm.vue'
|
||||
export default {
|
||||
components: {
|
||||
Ellipsis,
|
||||
STable,
|
||||
addForm,
|
||||
editForm,
|
||||
XDown
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
// 查询参数
|
||||
queryParam: {},
|
||||
// 表头
|
||||
columns: [
|
||||
{
|
||||
title: '月份',
|
||||
align: 'center',
|
||||
dataIndex: 'happenTime',
|
||||
customRender: (text, record) => {
|
||||
return moment(text).format('YYYY-MM')
|
||||
}
|
||||
},
|
||||
{
|
||||
title: '培训计划',
|
||||
align: 'center',
|
||||
dataIndex: 'name'
|
||||
},
|
||||
{
|
||||
title: '线上培训',
|
||||
align: 'center',
|
||||
dataIndex: 'uppx',
|
||||
scopedSlots: { customRender: 'uppxScopedSlots' }
|
||||
},
|
||||
{
|
||||
title: '线下培训',
|
||||
align: 'center',
|
||||
dataIndex: 'downpx',
|
||||
scopedSlots: { customRender: 'downpxScopedSlots' }
|
||||
},
|
||||
{
|
||||
title: '在线考试',
|
||||
align: 'center',
|
||||
dataIndex: 'workPlace',
|
||||
scopedSlots: { customRender: 'workPlaceScopedSlots' }
|
||||
}
|
||||
],
|
||||
tstyle: { 'padding-bottom': '0px', 'margin-bottom': '10px' },
|
||||
// 加载数据方法 必须为 Promise 对象
|
||||
loadData: parameter => {
|
||||
return scrTrainSchePage(Object.assign(parameter, this.switchingDate())).then((res) => {
|
||||
return res.data
|
||||
})
|
||||
},
|
||||
selectedRowKeys: [],
|
||||
selectedRows: [],
|
||||
options: {
|
||||
alert: { show: true, clear: () => { this.selectedRowKeys = [] } },
|
||||
rowSelection: {
|
||||
selectedRowKeys: this.selectedRowKeys,
|
||||
onChange: this.onSelectChange
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
created () {
|
||||
this.columns.push({
|
||||
title: '操作',
|
||||
width: '150px',
|
||||
dataIndex: 'action',
|
||||
scopedSlots: { customRender: 'action' }
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
moment,
|
||||
/**
|
||||
* 查询参数组装
|
||||
*/
|
||||
switchingDate () {
|
||||
const queryParamhappenTime = this.queryParam.happenTimeDate
|
||||
if (queryParamhappenTime != null) {
|
||||
this.queryParam.happenTime = moment(queryParamhappenTime).format('YYYY-MM-DD')
|
||||
if (queryParamhappenTime.length < 1) {
|
||||
delete this.queryParam.happenTime
|
||||
}
|
||||
}
|
||||
const obj = JSON.parse(JSON.stringify(this.queryParam))
|
||||
return obj
|
||||
},
|
||||
/**
|
||||
* 单个删除
|
||||
*/
|
||||
singleDelete (record) {
|
||||
const param = [{ 'id': record.id }]
|
||||
this.scrTrainScheDelete(param)
|
||||
},
|
||||
/**
|
||||
* 批量删除
|
||||
*/
|
||||
batchDelete () {
|
||||
const paramIds = this.selectedRowKeys.map((d) => {
|
||||
return { 'id': d }
|
||||
})
|
||||
this.scrTrainScheDelete(paramIds)
|
||||
},
|
||||
scrTrainScheDelete (record) {
|
||||
scrTrainScheDelete(record).then((res) => {
|
||||
if (res.success) {
|
||||
this.$message.success('删除成功')
|
||||
this.$refs.table.clearRefreshSelected()
|
||||
} else {
|
||||
this.$message.error('删除失败') // + res.message
|
||||
}
|
||||
})
|
||||
},
|
||||
onChangehappenTime(date, dateString) {
|
||||
this.happenTimeDateString = dateString
|
||||
},
|
||||
/**
|
||||
* 批量导出
|
||||
*/
|
||||
batchExport () {
|
||||
const paramIds = this.selectedRowKeys.map((d) => {
|
||||
return { 'id': d }
|
||||
})
|
||||
scrTrainScheExport(paramIds).then((res) => {
|
||||
this.$refs.batchExport.downloadfile(res)
|
||||
})
|
||||
},
|
||||
handleOk () {
|
||||
this.$refs.table.refresh()
|
||||
},
|
||||
onSelectChange (selectedRowKeys, selectedRows) {
|
||||
this.selectedRowKeys = selectedRowKeys
|
||||
this.selectedRows = selectedRows
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="less">
|
||||
.table-operator {
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
button {
|
||||
margin-right: 8px;
|
||||
}
|
||||
</style>
|
||||
Loading…
Reference in New Issue
Block a user