xuanzzeqi

This commit is contained in:
shilixia 2020-07-16 17:42:53 +08:00
parent bd1255c47b
commit 76b442e5db
5 changed files with 438 additions and 44 deletions

View File

@ -107,6 +107,13 @@ export const asyncRoutes = [
meta: { title: '修改人员培训', icon: 'example', perms: ['Train_update'] },
hidden: true
},
{
path: 'user/select',
name: 'UserSelect',
component: () => import('@/views/employee/userselet'),
meta: { title: '选择人员', icon: 'example', perms: ['User_select'] },
hidden: true
},
]
},
{

View File

@ -46,6 +46,26 @@
<el-col :span="12">
<el-form-item label="考核方式" prop="kaohe_type">
<el-input v-model="formData.kaohe_type" placeholder="请输入考核方式" clearable :style="{width: '100%'}">
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="选择学员" prop="hours">
<router-link to="/employee/user/select">
<span class="spanfour">link跳转</span>
</router-link>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="培训讲师" prop="teacher">
<el-input v-model="formData.teacher" placeholder="请输入培训讲师" clearable :style="{width: '100%'}">
@ -53,66 +73,91 @@
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="培训内容" prop="teacher">
<el-input type="textarea" :rows="2" v-model="formData.teacher"
placeholder="请输入培训内容"
clearable
:style="{width: '100%'}"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="培训内容" prop="content">
<el-input v-model="formData.teacher" placeholder="请输入培训内容" clearable :style="{width: '100%'}">
<el-form-item label="培训类型" prop="train_type">
<el-select v-model="formData.train_type"
placeholder="请选择机构类型"
clearable
:style="{width: '100%'}">
<el-option v-for="(item, index) in type_Options"
:key="index"
:label="item.name"
:value="item.value"
:disabled="item.disabled">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="培训备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入培训备注" clearable :style="{width: '100%'}">
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="培训类型" prop="content">
<el-select v-model="formData.train_type"
placeholder="请选择机构类型"
clearable
:style="{width: '100%'}">
<el-option v-for="(item, index) in type_Options"
:key="index"
:label="item.name"
:value="item.value"
:disabled="item.disabled">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="培训备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入培训备注" clearable :style="{width: '100%'}">
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item size="large">
<el-button type="primary" @click="submitForm">提交</el-button>
<el-button @click="resetForm">重置</el-button>
</el-form-item>
<el-form-item size="large">
<el-button type="primary" @click="submitForm">提交</el-button>
<el-button @click="resetForm">重置</el-button>
</el-form-item>
</el-form>
</div>
</template>
<script>
import { getUserList} from "@/api/user";
import { getDictList } from "@/api/dict";
import { genTree } from "@/utils";
import { getOrgAll } from "@/api/org"
import { getRoleAll } from "@/api/role"
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import { upUrl, upHeaders } from "@/api/file";
const defaultForm = {
}
export default {
components: {},
components: {Treeselect},
props: [],
data() {
return {
formData: Object.assign({}, defaultForm),
rules: {},
genderOptions:[
{'value':'','label':''},
{'value':'','label':''}
]
type_Options: [
],
}
},
computed: {},
watch: {},
created() {},
created() {
this.getTypeOptions(),
this.getOrgAll(),
this. getRoleAll()
},
mounted() {},
methods: {
submitForm() {
@ -121,6 +166,24 @@ export default {
// TODO 提交表单
})
},
getOrgAll() {
this.treeLoding = true;
getOrgAll().then(response => {
this.orgData = genTree(response.data);
this.treeLoding = false;
});
},
getRoleAll() {
getRoleAll().then(response => {
this.roles = genTree(response.data);
});
},
getTypeOptions() {
getDictList({ type__code: "train_type" }).then(response => {
this.type_Options = genTree(response.data);
});
},
resetForm() {
this.$refs['elForm'].resetFields()
},

View File

@ -0,0 +1,275 @@
<template>
<div class="app-container">
<el-row :gutter="20">
<el-col :span="4">
<el-input placeholder="输入关键字进行过滤"
v-model="filterText">
</el-input>
<el-tree class="filter-tree"
:data="orgList"
:props="defaultProps"
default-expand-all
:expand-on-click-node="false"
:filter-node-method="filterNode"
@node-click="handleOrgClick"
ref="tree">
<span class="custom-tree-node" slot-scope="{ node, data }">
<span>{{ node.label }}</span>
</span>
</el-tree>
</el-col>
<el-col :span="9">
<el-table ref="staffTable"
v-loading="listLoading"
:key="tableKey"
:data="staffList"
border
fit
highlight-current-row
@selection-change="handleStaffChange">
<el-table-column type="selection" :reserve-selection="true" width="55"></el-table-column>
<el-table-column label="姓名" align="center">
<template slot-scope="{row}">
<span>{{ row.name }}</span>
</template>
</el-table-column>
<el-table-column label="邮箱" align="center">
<template slot-scope="{row}">
<span>{{ row.email }}</span>
</template>
</el-table-column>
</el-table>
</el-col>
<el-col :span="2" style="text-align:center;">
<el-button @click="addStaff"
type="primary"
:disabled="!staffData.length"
icon="el-icon-arrow-right"
circle></el-button>
<el-button @click="removeStaff"
type="primary"
:disabled="!selectedStaffData.length"
icon="el-icon-arrow-left"
circle
style="margin-left: 0;margin-top: 10px;"></el-button>
</el-col>
<el-col :span="9">
<el-table ref="selectedStaffTable"
v-loading="listLoading"
:key="tableKey"
:data="selectedStaffList"
border
fit
highlight-current-row
@selection-change="handleSelectedStaffChange">
<el-table-column type="selection" :reserve-selection="true" width="55"></el-table-column>
<el-table-column label="姓名" align="center">
<template slot-scope="{row}">
<span>{{ row.name }}</span>
</template>
</el-table-column>
<el-table-column label="邮箱" align="center">
<template slot-scope="{row}">
<span>{{ row.email }}</span>
</template>
</el-table-column>
<!--<el-table-column label="类型" align="center">
<template slot-scope="{row}">
<el-select class="filter-item" placeholder="请选择" v-model="row.staffTypeId">
<el-option v-for="item in staffOptions"
:key="item.key"
:label="item.display_name"
:value="item.key"></el-option>
</el-select>
</template>
</el-table-column>-->
</el-table>
</el-col>
</el-row>
<el-row :gutter="20">
<el-button type="primary" @click="modifyStaff">提交</el-button>
</el-row>
</div>
</template>
<script>
import checkPermission from '@/utils/permission'
import { getUserList} from "@/api/user"
import { getDictList } from "@/api/dict"
import { genTree } from "@/utils"
import { getOrgAll } from "@/api/org"
import { getRoleAll } from "@/api/role"
import Treeselect from "@riophae/vue-treeselect"
import "@riophae/vue-treeselect/dist/vue-treeselect.css"
import { upUrl, upHeaders } from "@/api/file"
const defaultForm = {
}
export default {
components: {},
props: [],
data() {
return {
listLoading: true,
staffTemp: {
name: "",
email: "",
staffTypeId: ""
},
filterText: '',
orgList: [],
staffList: [],
userlist:{count:0},
listQuery: {
page: 1,
page_size: 20
},
selectedStaffList: [],
staffData: [],
defaultProps: {
"label": "name",
"children": "children"
},
selectedStaffData: [],
tableKey: 0,
rowKey: "rowKey",
staffOptions: [
{ key: 28, display_name: "组长" },
{ key: 29, display_name: "组员" }
],
}
},
watch: {
filterText(val) {
this.$refs.tree.filter(val);
}
},
created() {
this.getStaffList(),
this.getList()
},
methods: {
// 从后台获取左边表格的数据
filterNode(value, data) {
if (!value) return true;
return data.label.indexOf(value) !== -1;
},
getList() {
getOrgAll().then(response => {
this.orgList = genTree(response.data);
this.listLoading = false
})
},
handleOrgClick(obj, node, vue) {
this.listQuery.page = 1;
this.listQuery.dept = obj.id;
this.getStaffList();
},
getStaffList() {
getUserList(this.listQuery).then(response => {
this.staffList = response.data.results;
});
this.listLoading = false;
},
// 将左边表格选择项存入staffData中
handleStaffChange(rows) {
this.staffData = [];
if (rows) {
rows.forEach(row => {
if (row) {
this.staffData.push(row);
}
});
}
},
// 左边表格选择项移到右边
addStaff() {
setTimeout(() => {
this.$refs["staffTable"].clearSelection();
this.$refs["selectedStaffTable"].clearSelection();
}, 0);
let repeat = false;
this.selectedStaffList.forEach(item => {
if (this.staffData[0] && item.name === this.staffData[0].name) {
repeat = true;
alert("此员工已添加");
return;
}
});
if (repeat === false) {
this.staffData.forEach(item => {
this.selectedStaffList.push(item);
});
for (let i = 0; i < this.staffList.length; i++) {
for (let j = 0; j < this.staffData.length; j++) {
if (
this.staffList[i] &&
this.staffData[j] &&
this.staffList[i].name === this.staffData[j].name
) {
this.staffList.splice(i, 1);
}
}
}
}
},
// 右边表格选择项移到左边
removeStaff() {
setTimeout(() => {
this.$refs["staffTable"].clearSelection();
this.$refs["selectedStaffTable"].clearSelection();
}, 0);
this.selectedStaffData.forEach(item => {
this.staffList.push(item);
});
for (let i = 0; i < this.selectedStaffList.length; i++) {
for (let j = 0; j < this.selectedStaffData.length; j++) {
if (
this.selectedStaffList[i] &&
this.selectedStaffData[j] &&
this.selectedStaffList[i].name === this.selectedStaffData[j].name
) {
this.selectedStaffList.splice(i, 1);
}
}
}
},
// 将右边表格选择项存入selectedStaffData中
handleSelectedStaffChange(rows) {
this.selectedStaffData = [];
if (rows) {
rows.forEach(row => {
if (row) {
this.selectedStaffData.push(row);
}
});
}
},
// 提交
modifyStaff() {
console.log(this.selectedStaffList[0].name)
}
}
}
</script>

View File

@ -0,0 +1,50 @@
# Generated by Django 3.0.5 on 2020-07-14 01:43
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('system', '0022_auto_20200710_1535'),
('employee', '0004_auto_20200710_1535'),
]
operations = [
migrations.AddField(
model_name='train',
name='kaohe_type',
field=models.CharField(blank=True, max_length=200, null=True, verbose_name='考核方式'),
),
migrations.AddField(
model_name='train',
name='rain_address',
field=models.CharField(blank=True, max_length=500, null=True, verbose_name='地点机构'),
),
migrations.AddField(
model_name='train',
name='train_type',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='train_train_type', to='system.Dict', verbose_name='培训类型'),
),
migrations.AlterField(
model_name='train',
name='hours',
field=models.IntegerField(blank=True, default=1, null=True, verbose_name='学时'),
),
migrations.AlterField(
model_name='train',
name='remark',
field=models.TextField(blank=True, null=True, verbose_name='备注'),
),
migrations.AlterField(
model_name='train',
name='teacher',
field=models.CharField(blank=True, max_length=200, null=True, verbose_name='主讲人'),
),
migrations.AlterField(
model_name='train',
name='train_org',
field=models.CharField(blank=True, max_length=200, null=True, verbose_name='培训机构'),
),
]

View File

@ -140,15 +140,14 @@ class Train(CommonAModel):
name = models.CharField('培训主题', max_length=200)
start_time = models.DateTimeField('开始时间')
end_time = models.DateTimeField('结束时间')
hours = models.IntegerField('学时', default=1)
train_org = models.CharField('培训机构', max_length=200)
teacher = models.CharField('主讲人', max_length=200)
hours = models.IntegerField('学时', null=True, blank=True, default=1)
train_org = models.CharField('培训机构', null=True, blank=True, max_length=200)
teacher = models.CharField('主讲人', null=True, blank=True, max_length=200)
content = models.TextField('培训内容')
rain_address = models.CharField('地点机构', max_length=500)
examine_Type = models.CharField('考核方式', max_length=200)
train_type =models.ForeignKey(
Dict, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='培训类型', related_name='train_level')
remark = models.TextField('备注')
rain_address = models.CharField('地点机构', null=True, blank=True, max_length=500)
kaohe_type = models.CharField('考核方式', null=True, blank=True, max_length=200)
train_type =models.ForeignKey(Dict, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='培训类型', related_name='train_train_type')
remark = models.TextField('备注', null=True, blank=True, )
employees = models.ManyToManyField(Employee, verbose_name='参加人员', related_name='train_employees')
class Meta: