This commit is contained in:
caoqianming 2020-07-31 14:49:49 +08:00
commit 54896344ee
8 changed files with 309 additions and 283 deletions

View File

@ -135,12 +135,24 @@ export default {
handleUpdate(scope) { handleUpdate(scope) {
this.$router.push({path:"/employee/train/update",query:{id:scope.row.id}}) this.$router.push({path:"/employee/train/update",query:{id:scope.row.id}})
}, },
handleDelete(scope) { handleDelete(scope) {
deleteImplementRule(scope.row.id).then(res=>{ this.$confirm('确定删除本条数据吗?', '提示', {
this.$message.success('成功') confirmButtonText: '确定',
this.getList() cancelButtonText: '取消',
}) type: 'warning'
} }).then(() => {
deleteTrain(scope.row.id).then(res=>{
this.$message.success('删除成功')
this.getList()
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消删除'
});
});
},
} }
}; };
</script> </script>

View File

@ -54,14 +54,15 @@
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="选择学员" prop="employees"> <el-form-item label="选择学员" prop="employees">
<el-input v-model="formData.employees" readonly="readonly" clearable :style="{width: '80%'}">
</el-input>
<el-button type="text" @click="dialogVisible = true">选择</el-button>
<el-dialog title="" :visible.sync="dialogVisible">
<Userselet @closeMoule="closeMoule"></Userselet>
</el-dialog>
<SpeciesAnalyzed @closeMoule="closeMoule"></SpeciesAnalyzed> <!--<el-lable v-for="(item,index) in type_employees" :key="index">{{item.name}},</el-lable>-->
<el-input v-model="formData.employeeList" placeholder="参加人员" clearable :style="{width: '80%'}"></el-input>
<el-button type="text" @click="dialogVisible = true">选择</el-button>
<el-dialog title="" :visible.sync="dialogVisible">
<Userselet @closeMoule="closeMoule"></Userselet>
</el-dialog>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -121,14 +122,10 @@
<script> <script>
import { createTrain} from "@/api/train"; import { createTrain} from "@/api/train";
import { getUserList} from "@/api/user";
import { getDictList } from "@/api/dict"; import { getDictList } from "@/api/dict";
import { genTree } from "@/utils"; import { genTree } from "@/utils";
import { getOrgAll } from "@/api/org"
import { getRoleAll } from "@/api/role"
import Treeselect from "@riophae/vue-treeselect"; import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css"; import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import { upUrl, upHeaders } from "@/api/file";
import Userselet from '@/views/employee/userselet'; import Userselet from '@/views/employee/userselet';
const defaultForm = { const defaultForm = {
@ -152,11 +149,7 @@ export default {
this.getTypeOptions() this.getTypeOptions()
}, },
mounted() {
this.list = this.$route.query.employeelist;
this.formData.employees = this.$route.query.employeelist;
console.log( this.list)
},
methods: { methods: {
@ -169,10 +162,19 @@ export default {
closeMoule(e) { closeMoule(e) {
this.formData.employees = e,
this.dialogVisible = false
this.type_employees = e;
this.dialogVisible = false;
var arrTemp = [];
var arrName = [];
for(let i=0;i<e.length;i++){
arrTemp.push(e[i].id);
arrName.push(e[i].name);
}
this.formData.employees = arrTemp;
this.formData.employeeList=arrName
} }
, ,
submitForm() { submitForm() {

View File

@ -1,209 +1,207 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-width="100px"> <el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-width="100px">
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="培训主题" prop="name"> <el-form-item label="培训主题" prop="name">
<el-input v-model="formData.name" placeholder="请输入培训主题" clearable :style="{width: '100%'}"></el-input> <el-input v-model="formData.name" placeholder="请输入培训主题" clearable :style="{width: '100%'}"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="培训机构" prop="train_org"> <el-form-item label="培训机构" prop="train_org">
<el-input v-model="formData.train_org" placeholder="请输入培训机构" clearable :style="{width: '100%'}"></el-input> <el-input v-model="formData.train_org" placeholder="请输入培训机构" clearable :style="{width: '100%'}"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="开始日期" prop="start_time"> <el-form-item label="开始日期" prop="start_time">
<el-date-picker v-model="formData.start_time" <el-date-picker v-model="formData.start_time"
type="datetime" type="datetime"
placeholder="选择日期时间"> placeholder="选择日期时间">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="结束日期" prop="end_time"> <el-form-item label="结束日期" prop="end_time">
<el-date-picker v-model="formData.end_time" <el-date-picker v-model="formData.end_time"
type="datetime" type="datetime"
placeholder="选择日期时间"> placeholder="选择日期时间">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="学时" prop="hours"> <el-form-item label="学时" prop="hours">
<el-input v-model="formData.hours" placeholder="请输入学时" clearable :style="{width: '100%'}"> <el-input v-model="formData.hours" placeholder="请输入学时" clearable :style="{width: '100%'}">
</el-input> </el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="考核方式" prop="kaohe_type"> <el-form-item label="考核方式" prop="kaohe_type">
<el-input v-model="formData.kaohe_type" placeholder="请输入考核方式" clearable :style="{width: '100%'}"> <el-input v-model="formData.kaohe_type" placeholder="请输入考核方式" clearable :style="{width: '100%'}">
</el-input> </el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="选择学员" prop="employees"> <el-form-item label="选择学员" prop="employees">
<el-input v-model="formData.employees" readonly="readonly" clearable :style="{width: '80%'}">
</el-input> <!--<el-lable v-for="(item,index) in type_employees" :key="index">{{item.name}},</el-lable>-->
<el-button type="text" @click="dialogVisible = true">选择</el-button> <el-input v-model="formData.employeeList" placeholder="参加人员" clearable :style="{width: '80%'}"></el-input>
<el-dialog title="" :visible.sync="dialogVisible"> <el-button type="text" @click="dialogVisible = true">选择</el-button>
<Userselet @closeMoule="closeMoule"></Userselet> <el-dialog title="" :visible.sync="dialogVisible">
</el-dialog> <Userselet @closeMoule="closeMoule"></Userselet>
</el-dialog>
<SpeciesAnalyzed @closeMoule="closeMoule"></SpeciesAnalyzed>
</el-form-item>
</el-col> </el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="培训讲师" prop="teacher"> <el-col :span="12">
<el-input v-model="formData.teacher" placeholder="请输入培训讲师" clearable :style="{width: '100%'}"> <el-form-item label="培训讲师" prop="teacher">
</el-input> <el-input v-model="formData.teacher" placeholder="请输入培训讲师" clearable :style="{width: '100%'}">
</el-form-item> </el-input>
</el-col> </el-form-item>
</el-row> </el-col>
<el-row> </el-row>
<el-col :span="24"> <el-row>
<el-form-item label="培训内容" prop="teacher"> <el-col :span="24">
<el-input type="textarea" :rows="2" v-model="formData.content" <el-form-item label="培训内容" prop="teacher">
placeholder="请输入培训内容" <el-input type="textarea" :rows="2" v-model="formData.content"
clearable placeholder="请输入培训内容"
:style="{width: '100%'}"></el-input> clearable
:style="{width: '100%'}"></el-input>
</el-form-item>
</el-col> </el-form-item>
</el-row> </el-col>
<el-row> </el-row>
<el-col :span="12"> <el-row>
<el-form-item label="培训类型" prop="train_type"> <el-col :span="12">
<el-select v-model="formData.train_type" <el-form-item label="培训类型" prop="train_type">
placeholder="请选择机构类型" <el-select v-model="formData.train_type"
clearable placeholder="请选择机构类型"
:style="{width: '100%'}"> clearable
<el-option v-for="(item, index) in type_Options" :style="{width: '100%'}">
:key="index" <el-option v-for="(item, index) in type_Options"
:label="item.name" :key="index"
:value="item.value" :label="item.name"
:disabled="item.disabled"> :value="item.value"
:disabled="item.disabled">
</el-option>
</el-select> </el-option>
</el-form-item> </el-select>
</el-col> </el-form-item>
<el-col :span="12"> </el-col>
<el-form-item label="培训备注" prop="remark"> <el-col :span="12">
<el-input v-model="formData.remark" placeholder="请输入培训备注" clearable :style="{width: '100%'}"> <el-form-item label="培训备注" prop="remark">
</el-input> <el-input v-model="formData.remark" placeholder="请输入培训备注" clearable :style="{width: '100%'}">
</el-form-item> </el-input>
</el-col> </el-form-item>
</el-row> </el-col>
</el-row>
<el-form-item size="large">
<el-button type="primary" @click="submitForm">提交</el-button> <el-form-item size="large">
<el-button @click="resetForm">重置</el-button> <el-button type="primary" @click="submitForm">提交</el-button>
</el-form-item> <el-button @click="resetForm">重置</el-button>
</el-form> </el-form-item>
</div> </el-form>
</template> </div>
<script> </template>
<script>
import { createTrain,getTrain} from "@/api/train"; import {getEmployee} from "@/api/employee"
import { getDictList } from "@/api/dict"; import { createTrain ,getTrain,updateTrain} from "@/api/train";
import { genTree } from "@/utils"; import { getDictList } from "@/api/dict";
import { getOrgAll } from "@/api/org" import { genTree } from "@/utils";
import { getRoleAll } from "@/api/role" import Treeselect from "@riophae/vue-treeselect";
import Treeselect from "@riophae/vue-treeselect"; import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import "@riophae/vue-treeselect/dist/vue-treeselect.css"; import Userselet from '@/views/employee/userselet';
import Userselet from '@/views/employee/userselet'; const defaultForm = {
const defaultForm = {
}
} export default {
export default { components: { Treeselect, Userselet },
components: { Treeselect, Userselet }, props: [],
props: [], data() {
data() { return {
return {
dialogVisible: false,
dialogVisible: false, formData: Object.assign({}, defaultForm),
formData: Object.assign({}, defaultForm), rules: {},
rules: {}, type_Options: [
type_Options: [ ],
], }
} },
}, computed: {},
computed: {}, watch: {},
watch: {},
created() { created() {
this.formData.id = this.$route.query.id, //接收参数 this.formData.id = this.$route.query.id , //接收参数
this.getData(), this.getTypeOptions(),
this.getTypeOptions() this.getData()
},
},
mounted() { methods: {
this.list = this.$route.query.employeelist; getData() { getTrain(this.formData.id).then(response => { this.formData = response.data;
this.formData.employees = this.$route.query.employeelist; this.formData.employeeList = response.data.employees_user_name }) },
console.log(this.list)
}, getTypeOptions() {
methods: { getDictList({ type__code: "train_type" }).then(response => {
getData() {
getTrain(this.formData.id).then(response => {
this.formData = response.data
})
},
getTypeOptions() {
getDictList({ type__code: "train_type" }).then(response => {
this.type_Options = genTree(response.data); this.type_Options = genTree(response.data);
});
});
},
},
closeMoule(e) {
closeMoule(e) {
this.formData.employees = e,
this.dialogVisible = false
this.type_employees = e;
} this.dialogVisible = false;
, var arrTemp = [];
submitForm() { var arrName = [];
this.$refs["elForm"].validate(valid => { for (let i = 0; i < e.length; i++) {
if (!valid) return;
arrTemp.push(e[i].id);
// TODO 提交表单 arrName.push(e[i].name);
createTrain(this.formData).then(response => { }
this.formData.employees = arrTemp;
this.$message({ this.formData.employeeList = arrName
type: 'success', }
message: '成功!' ,
submitForm() {
}) this.$refs["elForm"].validate(valid => {
this.$router.go(-1); if (!valid) return;
}); // TODO 提交表单
updateTrain(this.formData.id,this.formData).then(response => {
});
}, this.$message({
type: 'success',
message: '成功!'
resetForm() {
this.$refs['elForm'].resetFields() })
}, this.$router.go(-1);
} });
}
</script> });
},
resetForm() {
this.$refs['elForm'].resetFields()
},
}
}
</script>

View File

@ -1,6 +1,4 @@
<template> <template>
<div class="app-container"> <div class="app-container">
@ -53,59 +51,55 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-col> </el-col>
<el-col :span="2" style="text-align:center;"> <el-col :span="2" style="text-align:center;margin-top:20px">
<el-button @click="addStaff" <el-button @click="addStaff"
type="primary" type="primary"
:disabled="!staffData.length" :disabled="!staffData.length"
icon="el-icon-arrow-right" icon="el-icon-arrow-right"
circle></el-button> circle></el-button>
<el-button @click="removeStaff" <!--<el-button @click="removeStaff"
type="primary" type="primary"
:disabled="!selectedStaffData.length" :disabled="!selectedStaffData.length"
icon="el-icon-arrow-left" icon="el-icon-arrow-left"
circle circle
style="margin-left: 0;margin-top: 10px;"></el-button> style="margin-left: 0;margin-top: 10px;"></el-button>-->
</el-col> </el-col>
<el-col :span="5"> <el-col :span="5">
<el-table ref="selectedStaffTable" <el-table ref="selectedStaffTable"
v-loading="listLoading" v-loading="listLoading"
:key="tableKey"
:data="selectedStaffList" :data="selectedStaffList"
border border
fit fit
highlight-current-row 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"> <el-table-column label="姓名" align="center">
<template slot-scope="{row}"> <template slot-scope="{row}">
<span>{{ row.user.name }}</span> <span>{{ row.user.name }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-button type="danger" icon="el-icon-delete" circle @click.native.prevent="deleteRow(scope.$index, selectedStaffList)"></el-button>
</template>
</el-table-column>
</el-table> </el-table>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20" >
<el-button type="primary" @click="modifyStaff">提交</el-button> <el-button type="primary" @click="modifyStaff">提交</el-button>
</el-row> </el-row>
</div> </div>
</template> </template>
<script> <script>
import { getEmployeeList, deleteEmployee } from "@/api/employee" import { getEmployeeList, deleteEmployee } from "@/api/employee"
import checkPermission from '@/utils/permission'
import { getUserList} from "@/api/user"
import { getDictList } from "@/api/dict"
import { genTree } from "@/utils" import { genTree } from "@/utils"
import { getOrgAll } from "@/api/org" 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 "@riophae/vue-treeselect/dist/vue-treeselect.css"
import { upUrl, upHeaders } from "@/api/file"
const defaultForm = {
}
export default { export default {
components: {}, components: {},
props: [], props: [],
@ -137,10 +131,7 @@ data() {
selectedStaffData: [], selectedStaffData: [],
tableKey: 0, tableKey: 0,
rowKey: "rowKey", rowKey: "rowKey",
staffOptions: [
{ key: 28, display_name: "组长" },
{ key: 29, display_name: "组员" }
],
} }
}, },
watch: { watch: {
@ -169,8 +160,10 @@ methods: {
this.listLoading = false this.listLoading = false
}) })
}, },
deleteRow(index, rows) {
rows.splice(index, 1);
}
,
handleOrgClick(obj, node, vue) { handleOrgClick(obj, node, vue) {
this.listQuery.page = 1; this.listQuery.page = 1;
this.listQuery.dept = obj.id; this.listQuery.dept = obj.id;
@ -204,7 +197,7 @@ methods: {
}, 0); }, 0);
let repeat = false; let repeat = false;
this.selectedStaffList.forEach(item => { this.selectedStaffList.forEach(item => {
if (this.staffData[0] && item.name === this.staffData[0].name) { if (this.staffData[0] && item.id === this.staffData[0].id) {
repeat = true; repeat = true;
alert("此员工已添加"); alert("此员工已添加");
return; return;
@ -247,34 +240,41 @@ methods: {
} }
} }
} }
}, },
// 将右边表格选择项存入selectedStaffData中 // 将右边表格选择项存入selectedStaffData中
handleSelectedStaffChange(rows) { //handleSelectedStaffChange(rows) {
this.selectedStaffData = []; // this.selectedStaffData = [];
if (rows) { // if (rows) {
rows.forEach(row => { // rows.forEach(row => {
if (row) { // if (row) {
this.selectedStaffData.push(row); // this.selectedStaffData.push(row);
} // }
}); // });
} // }
}, //},
// 提交 // 提交
modifyStaff() { modifyStaff() {
console.log(this.selectedStaffList); console.log(this.selectedStaffList);
var userlist = []; var userlist = [];
var userNameList = [];
var arrContact = new Array();
for (let i = 0; i < this.selectedStaffList.length; i++) { for (let i = 0; i < this.selectedStaffList.length; i++) {
var reVal = new Object();
userlist[i]=this.selectedStaffList[i].id reVal["id"]=this.selectedStaffList[i].id
userNameList[i]= this.selectedStaffList[i].user.name reVal["name"]=this.selectedStaffList[i].user.name
arrContact.push(reVal);
} }
userlist=arrContact;
this.$emit('closeMoule',userlist) this.$emit('closeMoule',userlist,)
this.dialogVisible = false this.dialogVisible = false

View File

@ -198,7 +198,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8" font="left"> <el-col :span="8" font="left">
<el-form-item label="联系电话" prop="linkman1_tel"> <el-form-item label="联系电话" prop="linkman1_tel" >
<el-input v-model="formData.linkman1_tel" <el-input v-model="formData.linkman1_tel"
placeholder="联系电话" placeholder="联系电话"
clearable clearable
@ -214,7 +214,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8" font="right"> <el-col :span="8" font="right">
<el-form-item label="Email" prop="linkman1_email"> <el-form-item label="Email" prop="linkman1_email" >
<el-input v-model="formData.linkman1_email" <el-input v-model="formData.linkman1_email"
placeholder="Email" placeholder="Email"
clearable clearable
@ -397,7 +397,7 @@
linkman1_mobile: undefined, linkman1_mobile: undefined,
linkman1_tel: undefined, linkman1_tel: undefined,
linkman1_fax: undefined, linkman1_fax: undefined,
linkman_email: undefined, linkman1_email: undefined,
linkman2_name: undefined, linkman2_name: undefined,
linkman2_duty: undefined, linkman2_duty: undefined,
linkman2_mobile: undefined, linkman2_mobile: undefined,
@ -419,8 +419,14 @@
type_Options: [], type_Options: [],
rule1: { rule1: {
query_code: [{ required: true, message: '请输入组织查询码', trigger: 'blur' }], query_code: [{ required: true, message: '请输入组织查询码', trigger: 'blur' }],
code: [{ required: true, message: '请输入工厂编号', trigger: 'blur' }] code: [{ required: true, message: '请输入工厂编号', trigger: 'blur' }],
}, name: [{ required: true, message: '请输入组织名称', trigger: 'blur' }],
linkman1_email:[
{ required: true, message: '请输入邮箱地址', trigger: 'blur' },
{ type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }
],
},
field101Options: [], field101Options: [],

View File

@ -419,7 +419,12 @@
type_Options: [], type_Options: [],
rule1: { rule1: {
query_code: [{ required: true, message: '请输入组织查询码', trigger: 'blur' }], query_code: [{ required: true, message: '请输入组织查询码', trigger: 'blur' }],
code: [{ required: true, message: '请输入工厂编号', trigger: 'blur' }] code: [{ required: true, message: '请输入工厂编号', trigger: 'blur' }],
name: [{ required: true, message: '请输入组织名称', trigger: 'blur' }],
linkman1_email:[
{ required: true, message: '请输入邮箱地址', trigger: 'blur' },
{ type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }
],
}, },
field101Options: [], field101Options: [],
field101Props: { field101Props: {

View File

@ -6,7 +6,7 @@ import uuid
# Create your models here. # Create your models here.
class Enterprise(CommonBModel): class Enterprise(CommonBModel):
code = models.CharField('工厂编号',unique=True, max_length=300) code = models.CharField('工厂编号',unique=True, max_length=300)
name = models.CharField('工厂名称',null=True, blank=True,max_length=1000) name = models.CharField('工厂名称',null=True,unique=True, blank=True,max_length=1000)
ename = models.CharField('工厂英文名称',null=True, blank=True,max_length=1000) ename = models.CharField('工厂英文名称',null=True, blank=True,max_length=1000)
type = models.ForeignKey(Dict, on_delete=models.SET_NULL,null=True, blank=True,verbose_name='机构类型', related_name= 'enterprise_type') type = models.ForeignKey(Dict, on_delete=models.SET_NULL,null=True, blank=True,verbose_name='机构类型', related_name= 'enterprise_type')
legal = models.CharField('申请单位法人代表',null=True, blank=True,max_length=300) legal = models.CharField('申请单位法人代表',null=True, blank=True,max_length=300)

View File

@ -77,6 +77,9 @@ class TrainSerializer(serializers.ModelSerializer):
""" """
普通序列化 普通序列化
""" """
employees_user_name = serializers.StringRelatedField(source='employees',read_only=True, many=True)
class Meta: class Meta:
model = Train model = Train
fields = '__all__' fields = ['id', 'name', 'start_time', 'end_time', 'hours',
'train_org', 'teacher', 'content', 'rain_address', 'kaohe_type', 'remark', 'employees', 'employees_user_name']