parent
efe7721783
commit
1f12f2d7b2
@ -1,9 +0,0 @@
|
||||
import request from "@/utils/request2";
|
||||
|
||||
export function getList(query) {
|
||||
return request({
|
||||
url: "/inspectorAssign",
|
||||
method: "GET",
|
||||
params: query,
|
||||
});
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
import request from "@/utils/request2";
|
||||
|
||||
export function getList(query) {
|
||||
return request({
|
||||
url: "/inspectorAssignRecord",
|
||||
method: "GET",
|
||||
params: query,
|
||||
});
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
import request from "@/utils/request2.js";
|
||||
export function getList(query) {
|
||||
return request({
|
||||
url: "/inspectorTrain/selectAllInspectorTrain",
|
||||
method: "GET",
|
||||
params: query,
|
||||
});
|
||||
}
|
@ -1,50 +0,0 @@
|
||||
import request from "@/utils/request2";
|
||||
// 查询检查队伍级别分布;
|
||||
export function getPieLevel(query) {
|
||||
return request({
|
||||
url: "/inspectorScreen/grade",
|
||||
method: "GET",
|
||||
params: query,
|
||||
});
|
||||
}
|
||||
//查询检查队伍类别分布
|
||||
export function getPieType(query) {
|
||||
return request({
|
||||
url: "/inspectorScreen/type",
|
||||
method: "GET",
|
||||
params: query,
|
||||
});
|
||||
}
|
||||
//查询检查队伍层级分布
|
||||
export function getPieCj(query) {
|
||||
return request({
|
||||
url: "/inspectorScreen/level",
|
||||
method: "GET",
|
||||
params: query,
|
||||
});
|
||||
}
|
||||
//查询检查队伍学历分布
|
||||
export function getPieXl(query) {
|
||||
return request({
|
||||
url: "/inspectorScreen/education",
|
||||
method: "GET",
|
||||
params: query,
|
||||
});
|
||||
}
|
||||
|
||||
// 2023年年度培训情况统计
|
||||
export function getTrainData(query) {
|
||||
return request({
|
||||
url: "/inspectorScreen/train",
|
||||
method: "GET",
|
||||
params: query,
|
||||
});
|
||||
}
|
||||
|
||||
//检查园数量
|
||||
export function getinspectorNum() {
|
||||
return request({
|
||||
url: "/inspectorInformation/getinspectorNum",
|
||||
method: "POST",
|
||||
});
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
import request from '@/utils/request2'
|
||||
|
||||
export default {
|
||||
// 获取单个检查员信息
|
||||
detail(e) {
|
||||
return request({
|
||||
url: `/inspectorInformation/${e}`,
|
||||
method: 'get',
|
||||
})
|
||||
},
|
||||
// 修改单个检查员信息
|
||||
update(data) {
|
||||
return request({
|
||||
url: '/inspectorInformation',
|
||||
method: 'put',
|
||||
data
|
||||
})
|
||||
},
|
||||
//上传文件
|
||||
updateFile(data) {
|
||||
return request({
|
||||
url: '/common/uploadMinioonfile',
|
||||
method: 'post',
|
||||
headers: {
|
||||
"Content-Type": "multipart/form-data",
|
||||
},
|
||||
data
|
||||
})
|
||||
},
|
||||
//根据word模板导出数据
|
||||
exportFile(id) {
|
||||
return request({
|
||||
url: `/inspectorInformation/exportWord/${id}`,
|
||||
method: 'post',
|
||||
headers: {
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
},
|
||||
})
|
||||
},
|
||||
}
|
@ -1,41 +0,0 @@
|
||||
import request from "@/utils/request2";
|
||||
|
||||
export default {
|
||||
// 获取奖惩信息列表
|
||||
list(e) {
|
||||
return request({
|
||||
url: `/inspectorPunishment`,
|
||||
method: "get",
|
||||
params: e,
|
||||
});
|
||||
},
|
||||
// // 修改单个检查员信息
|
||||
// update(data) {
|
||||
// return request({
|
||||
// url: '/inspectorInformation',
|
||||
// method: 'put',
|
||||
// data
|
||||
// })
|
||||
// },
|
||||
// //上传文件
|
||||
// updateFile(data) {
|
||||
// return request({
|
||||
// url: '/common/uploadMinioonfile',
|
||||
// method: 'post',
|
||||
// headers: {
|
||||
// "Content-Type": "multipart/form-data",
|
||||
// },
|
||||
// data
|
||||
// })
|
||||
// },
|
||||
// //根据word模板导出数据
|
||||
// exportFile(id) {
|
||||
// return request({
|
||||
// url: `/inspectorInformation/exportWord/${id}`,
|
||||
// method: 'post',
|
||||
// headers: {
|
||||
// "Content-Type": "application/x-www-form-urlencoded",
|
||||
// },
|
||||
// })
|
||||
// },
|
||||
};
|
@ -1,41 +0,0 @@
|
||||
import request from "@/utils/request2";
|
||||
|
||||
export default {
|
||||
// 获取聘任信息列表
|
||||
list(e) {
|
||||
return request({
|
||||
url: `/inspectorAppointment`,
|
||||
method: "get",
|
||||
params: e,
|
||||
});
|
||||
},
|
||||
// // 修改单个检查员信息
|
||||
// update(data) {
|
||||
// return request({
|
||||
// url: '/inspectorInformation',
|
||||
// method: 'put',
|
||||
// data
|
||||
// })
|
||||
// },
|
||||
// //上传文件
|
||||
// updateFile(data) {
|
||||
// return request({
|
||||
// url: '/common/uploadMinioonfile',
|
||||
// method: 'post',
|
||||
// headers: {
|
||||
// "Content-Type": "multipart/form-data",
|
||||
// },
|
||||
// data
|
||||
// })
|
||||
// },
|
||||
// //根据word模板导出数据
|
||||
// exportFile(id) {
|
||||
// return request({
|
||||
// url: `/inspectorInformation/exportWord/${id}`,
|
||||
// method: 'post',
|
||||
// headers: {
|
||||
// "Content-Type": "application/x-www-form-urlencoded",
|
||||
// },
|
||||
// })
|
||||
// },
|
||||
};
|
@ -1,22 +0,0 @@
|
||||
import request from '@/utils/request2'
|
||||
|
||||
export default {
|
||||
// 检查人员工龄分布
|
||||
detectCompose(query) {
|
||||
return request({
|
||||
url: '/inspectorScreen/seniority',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
},
|
||||
//检查人员男女性别分布
|
||||
sex(query) {
|
||||
return request({
|
||||
url: '/inspectorScreen/sex',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
},
|
||||
//执法监督工作
|
||||
|
||||
}
|
@ -1,50 +0,0 @@
|
||||
import request from "@/utils/request2";
|
||||
|
||||
export default {
|
||||
// 检查员培训情况列表
|
||||
listTraining(query) {
|
||||
return request({
|
||||
url: "/inspectorTrain",
|
||||
method: "get",
|
||||
params: query,
|
||||
});
|
||||
},
|
||||
// 检查员培训情况添加
|
||||
addTraining(data) {
|
||||
return request({
|
||||
url: "/inspectorTrain",
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
},
|
||||
// 检查员培训情况修改
|
||||
updateTraining(data) {
|
||||
return request({
|
||||
url: "/inspectorTrain",
|
||||
method: "put",
|
||||
data,
|
||||
});
|
||||
},
|
||||
// 检查员培训情况删除
|
||||
deleteTraining(e) {
|
||||
return request({
|
||||
url: `/inspectorTrain?idList=${e}`,
|
||||
method: "delete",
|
||||
});
|
||||
},
|
||||
// 检查员培训情况查询单个
|
||||
detailTraining(e) {
|
||||
return request({
|
||||
url: `/inspectorTrain/${e}`,
|
||||
method: "get",
|
||||
});
|
||||
},
|
||||
//导出
|
||||
exportMsg(e) {
|
||||
return request({
|
||||
url: `/inspectorTrain/export`,
|
||||
method: "get",
|
||||
params: e,
|
||||
});
|
||||
},
|
||||
};
|
@ -1,27 +0,0 @@
|
||||
import request from "@/utils/request2";
|
||||
|
||||
export default {
|
||||
//检查员特质列表
|
||||
listTraits(e) {
|
||||
return request({
|
||||
url: "/inspectorSpeciality",
|
||||
method: "get",
|
||||
params: e,
|
||||
});
|
||||
},
|
||||
// 检查员特质修改
|
||||
updateTraits(data) {
|
||||
return request({
|
||||
url: "/inspectorSpeciality",
|
||||
method: "put",
|
||||
data,
|
||||
});
|
||||
},
|
||||
// 检查员特质详情
|
||||
detailTraits(e) {
|
||||
return request({
|
||||
url: `/inspectorSpeciality/${e}`,
|
||||
method: "get",
|
||||
});
|
||||
},
|
||||
};
|
@ -1,43 +0,0 @@
|
||||
import request from '@/utils/request2'
|
||||
|
||||
export default {
|
||||
// 检查员工作经历列表
|
||||
listWork(query) {
|
||||
return request({
|
||||
url: '/inspectorWorkexperiences',
|
||||
method: 'get',
|
||||
params: query,
|
||||
|
||||
})
|
||||
},
|
||||
// 检查员工作经历添加
|
||||
addWork(data) {
|
||||
return request({
|
||||
url: '/inspectorWorkexperiences',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
},
|
||||
// 检查员工作经历修改
|
||||
updateWork(data) {
|
||||
return request({
|
||||
url: "/inspectorWorkexperiences",
|
||||
method: 'put',
|
||||
data
|
||||
})
|
||||
},
|
||||
// 检查员工作经历删除
|
||||
deleteWork(e) {
|
||||
return request({
|
||||
url: `/inspectorWorkexperiences?idList=${e}`,
|
||||
method: 'delete',
|
||||
})
|
||||
},
|
||||
// 检查员工作经历查询单个
|
||||
detailWork(e) {
|
||||
return request({
|
||||
url: `/inspectorWorkexperiences/${e}`,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
}
|
@ -1,36 +0,0 @@
|
||||
import request from "@/utils/request2";
|
||||
|
||||
export function getList(query) {
|
||||
return request({
|
||||
url: "/inspectorEducation",
|
||||
method: "GET",
|
||||
params: query,
|
||||
});
|
||||
}
|
||||
export function addList(data) {
|
||||
return request({
|
||||
url: "/inspectorEducation",
|
||||
method: "POST",
|
||||
data,
|
||||
});
|
||||
}
|
||||
export function deleteList(ids) {
|
||||
return request({
|
||||
url: `/inspectorEducation?idList=${ids}`,
|
||||
method: "DELETE",
|
||||
});
|
||||
}
|
||||
export function updataList(data) {
|
||||
return request({
|
||||
url: `/inspectorEducation`,
|
||||
method: "PUT",
|
||||
data,
|
||||
});
|
||||
}
|
||||
|
||||
export function getListInfo(id) {
|
||||
return request({
|
||||
url: `/inspectorEducation/${id}`,
|
||||
method: "GET",
|
||||
});
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
import request from "@/utils/request2";
|
||||
|
||||
export function getList(query) {
|
||||
return request({
|
||||
url: "/inspectorAssess",
|
||||
method: "GET",
|
||||
params: query,
|
||||
});
|
||||
}
|
||||
|
||||
export function updateRow(data) {
|
||||
return request({
|
||||
url: "/inspectorAssess",
|
||||
method: "PUT",
|
||||
data,
|
||||
});
|
||||
}
|
@ -1,3 +0,0 @@
|
||||
<template>
|
||||
<div> 11111111</div>
|
||||
</template>
|
@ -1,130 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="tableDistance">
|
||||
<el-table
|
||||
:data="tableData"
|
||||
:border="true"
|
||||
style="width: 100%"
|
||||
v-loading="loading"
|
||||
>
|
||||
<el-table-column prop="begainTime" label="聘任开始时间">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.begainTime, "{y}-{m}-{d}") }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="endTime" label="聘任结束时间">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.endTime, "{y}-{m}-{d}") }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="appointmentType" label="聘任序列类型">
|
||||
<template slot-scope="scope">
|
||||
{{ filterDict(scope.row.appointmentType, "appointmentType") }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="appointmentLevel" label="聘任层级">
|
||||
<template slot-scope="scope">
|
||||
{{
|
||||
filterDict(scope.row.appointmentLevel, "appointmentLevel")
|
||||
}}</template
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column prop="appointmentInspectorType" label="聘任检查员类型">
|
||||
<template slot-scope="scope">
|
||||
{{
|
||||
filterDict(scope.row.appointmentInspectorType, "inspectorType")
|
||||
}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="situation" label="专/兼职情况">
|
||||
</el-table-column>
|
||||
<el-table-column prop="groupLeader" label="组长资格"> </el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.current"
|
||||
:limit.sync="queryParams.size"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { dictList } from "@/api/jcy/index.js";
|
||||
import { exportExcel } from "@/api/jcy";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
dict: {},
|
||||
loading: false,
|
||||
total: 20,
|
||||
queryParams: {
|
||||
inspectorId: undefined,
|
||||
current: 1,
|
||||
size: 10,
|
||||
},
|
||||
tableData: [],
|
||||
allList: {},
|
||||
};
|
||||
},
|
||||
props: {
|
||||
//检查员id
|
||||
inspectorId: {
|
||||
type: Number,
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.queryParams.inspectorId = this.inspectorId;
|
||||
this.getDict("inspectorType,appointmentLevel,appointmentType");
|
||||
},
|
||||
methods: {
|
||||
/**导出 */
|
||||
exportExcel() {
|
||||
let params = {
|
||||
value: 2,
|
||||
ids: this.inspectorId,
|
||||
};
|
||||
exportExcel(params).then((res) => {
|
||||
if (res.data.code == 200) {
|
||||
this.uploadFile(
|
||||
res.data.data.result.url,
|
||||
res.data.data.result.originalFilename
|
||||
);
|
||||
}
|
||||
});
|
||||
},
|
||||
/**获取字典列表 */
|
||||
getDict(typeList) {
|
||||
let query = {
|
||||
list: typeList,
|
||||
};
|
||||
dictList(query).then((res) => {
|
||||
if (res.status == 200) {
|
||||
for (let key in res.result) {
|
||||
this.dict[key] = res.result[key];
|
||||
}
|
||||
this.getList();
|
||||
}
|
||||
});
|
||||
},
|
||||
/**过滤字典 */
|
||||
filterDict(value, type) {
|
||||
if (this.dict[type] == undefined) {
|
||||
return value;
|
||||
}
|
||||
|
||||
let dictLable = this.dict[type].filter((item) => item.dictValue == value);
|
||||
return dictLable.length > 0 ? dictLable[0].dictLabel : "未知";
|
||||
},
|
||||
async getList() {
|
||||
this.loading = true;
|
||||
let msg1 = await this.$api.pinren.list(this.queryParams);
|
||||
if (msg1.status == 200) this.loading = false;
|
||||
this.total = msg1.result.total;
|
||||
this.tableData = msg1.result.records;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped></style>
|
File diff suppressed because it is too large
Load Diff
@ -1,73 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="tableDistance">
|
||||
<el-table
|
||||
:data="tableData"
|
||||
:border="true"
|
||||
style="width: 100%"
|
||||
v-loading="loading"
|
||||
>
|
||||
<el-table-column prop="year" label="年度">
|
||||
<!-- <template slot-scope="scope"> -->
|
||||
<!-- <span>{{ parseTime(scope.row.begainTime, "{y}-{m}-{d}") }}</span> -->
|
||||
<!-- </template> -->
|
||||
</el-table-column>
|
||||
<el-table-column prop="assignCount" label="调派次数">
|
||||
<!-- <template slot-scope="scope"> -->
|
||||
<!-- <span>{{ parseTime(scope.row.endTime, "{y}-{m}-{d}") }}</span> -->
|
||||
<!-- </template> -->
|
||||
</el-table-column>
|
||||
<el-table-column prop="acceptAssignCount" label="接受调派次数">
|
||||
</el-table-column>
|
||||
<el-table-column prop="unacceptAssignCount" label="未接受调派次数">
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.current"
|
||||
:limit.sync="queryParams.size"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { getList } from "@/api/deployMsg";
|
||||
export default {
|
||||
props: {
|
||||
//检查员id
|
||||
inspectorId: {
|
||||
type: Number,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
tableData: [],
|
||||
// 总条数
|
||||
total: 0,
|
||||
queryParams: {
|
||||
inspectorId: undefined,
|
||||
current: 1,
|
||||
size: 10,
|
||||
},
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.queryParams.inspectorId = this.inspectorId;
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
getList() {
|
||||
this.loading = true;
|
||||
getList(this.queryParams).then((res) => {
|
||||
this.tableData = res.result.records;
|
||||
this.total = res.result.total;
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped></style>
|
@ -1,113 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="tableDistance">
|
||||
<el-table
|
||||
:data="tableData"
|
||||
:border="true"
|
||||
style="width: 100%"
|
||||
v-loading="loading"
|
||||
>
|
||||
<el-table-column
|
||||
prop="assignUnit"
|
||||
label="调派单位"
|
||||
:show-overflow-tooltip="true"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
{{ filterDict(scope.row.assignUnit, "assignUnit") }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="assignMechanism" label="调派机制">
|
||||
<template slot-scope="scope">
|
||||
{{ filterDict(scope.row.assignMechanism, "assignMechanism") }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="taskType" label="任务类型"> </el-table-column>
|
||||
<el-table-column prop="begainTime" label="检查时间起">
|
||||
</el-table-column>
|
||||
<el-table-column prop="endTime" label="检查时间止"> </el-table-column>
|
||||
<el-table-column prop="assignStatus" label="是否接受调派">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="reaseons"
|
||||
label="原因说明"
|
||||
:show-overflow-tooltip="true"
|
||||
>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.current"
|
||||
:limit.sync="queryParams.size"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { getList } from "@/api/deployRecord";
|
||||
import { dictList } from "@/api/jcy";
|
||||
export default {
|
||||
props: {
|
||||
//检查员id
|
||||
inspectorId: {
|
||||
type: Number,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
dict: {},
|
||||
loading: false,
|
||||
tableData: [],
|
||||
// 总条数
|
||||
total: 0,
|
||||
queryParams: {
|
||||
inspectorId: undefined,
|
||||
current: 1,
|
||||
size: 10,
|
||||
},
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.queryParams.inspectorId = this.inspectorId;
|
||||
this.getDict("assignMechanism,taskType,assignStatus");
|
||||
},
|
||||
methods: {
|
||||
/**获取字典列表 */
|
||||
getDict(typeList) {
|
||||
let query = {
|
||||
list: typeList,
|
||||
};
|
||||
dictList(query).then((res) => {
|
||||
if (res.status == 200) {
|
||||
for (let key in res.result) {
|
||||
this.dict[key] = res.result[key];
|
||||
}
|
||||
this.getList();
|
||||
}
|
||||
});
|
||||
},
|
||||
/**过滤字典 */
|
||||
filterDict(value, type) {
|
||||
if (value) {
|
||||
if (this.dict[type] == undefined) {
|
||||
return value;
|
||||
}
|
||||
let dictLable = this.dict[type].filter(
|
||||
(item) => item.dictValue == value
|
||||
);
|
||||
return dictLable.length > 0 ? dictLable[0].dictLabel : "未知";
|
||||
}
|
||||
},
|
||||
getList() {
|
||||
this.loading = true;
|
||||
getList(this.queryParams).then((res) => {
|
||||
this.tableData = res.result.records;
|
||||
this.total = res.result.total;
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped></style>
|
@ -1,421 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-descriptions
|
||||
:border="true"
|
||||
:column="2"
|
||||
labelClassName="leftStyle"
|
||||
contentClassName="rightStyle"
|
||||
v-loading="loading"
|
||||
>
|
||||
<el-descriptions-item>
|
||||
<template slot="label"> 生产质量监管/管理年限 </template>
|
||||
{{ userData.regulatoryYears }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template slot="label"> 擅长领域</template>
|
||||
{{ userData.field }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template slot="label"> 参加生产企业现场检查的次数 </template>
|
||||
{{ userData.sceneCheckNumber }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template slot="label"> 参加省级检查的次数</template>
|
||||
{{ userData.provincialCheckNumber }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template slot="label"> 参加国家级飞行检查的次数 </template>
|
||||
{{ userData.nationalCheckNumber }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template slot="label"> 担任现场检查组组长的次数 </template>
|
||||
{{ userData.checkLeaderNumber }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template slot="label"> 熟悉检查的生产类别 </template>
|
||||
{{ getType(userData.productionCategory) }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template slot="label"> 担任组长次数</template>
|
||||
{{ userData.teamNumber }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<!-- 检查员特质 -->
|
||||
<el-dialog
|
||||
:visible.sync="show"
|
||||
width="55%"
|
||||
append-to-body
|
||||
destroy-on-close
|
||||
custom-class="my-dialog-container"
|
||||
>
|
||||
<div slot="title" class="my-dialog-title">检查员特质</div>
|
||||
<el-form
|
||||
ref="formName"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
label-position="right"
|
||||
label-width="210px"
|
||||
class="my-dialog-body"
|
||||
v-loading="load1"
|
||||
>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item
|
||||
label="生产质量监管/管理年限:"
|
||||
prop="regulatoryYears"
|
||||
>
|
||||
<el-input
|
||||
v-model.number="form.regulatoryYears"
|
||||
placeholder="请输入年限"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item
|
||||
label="参加省级检查的次数:"
|
||||
prop="provincialCheckNumber"
|
||||
>
|
||||
<el-input
|
||||
v-model.number="form.provincialCheckNumber"
|
||||
placeholder="请输入次数"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item
|
||||
label="参加生产企业现场检查的次数:"
|
||||
prop="sceneCheckNumber"
|
||||
>
|
||||
<el-input
|
||||
v-model.number="form.sceneCheckNumber"
|
||||
placeholder="请输入次数"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item
|
||||
label="担任现场检查组组长的次数:"
|
||||
prop="checkLeaderNumber"
|
||||
>
|
||||
<el-input
|
||||
v-model.number="form.checkLeaderNumber"
|
||||
placeholder="请输入次数"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item
|
||||
label="参加国家级飞行检查的次数:"
|
||||
prop="nationalCheckNumber"
|
||||
>
|
||||
<el-input
|
||||
v-model.number="form.nationalCheckNumber"
|
||||
placeholder="请输入次数"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="担任组长的次数:" prop="teamNumber">
|
||||
<el-input
|
||||
v-model.number="form.teamNumber"
|
||||
placeholder="请输入次数"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="擅长领域:" prop="field">
|
||||
<el-select v-model="form.field" placeholder="请选择擅长领域">
|
||||
<el-option label="区域一" value="shanghai"></el-option>
|
||||
<el-option label="区域二" value="beijing"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="熟悉检查的生产类别:">
|
||||
<el-checkbox-group v-model="form.productionCategory">
|
||||
<div>
|
||||
<el-checkbox label="1" name="type">化学药品</el-checkbox>
|
||||
<el-checkbox label="2" name="type">中药制剂</el-checkbox>
|
||||
<el-checkbox label="3" name="type">中药饮片</el-checkbox>
|
||||
<el-checkbox label="4" name="type">体外诊断试剂</el-checkbox>
|
||||
</div>
|
||||
<div>
|
||||
<el-checkbox label="5" name="type">特殊药品</el-checkbox>
|
||||
<el-checkbox label="6" name="type">药用辅料</el-checkbox>
|
||||
<el-checkbox label="7" name="type">医用氧</el-checkbox>
|
||||
<el-checkbox label="8" name="type">生物制品</el-checkbox>
|
||||
</div>
|
||||
</el-checkbox-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button
|
||||
size="small"
|
||||
type="primary"
|
||||
icon="el-icon-my-save"
|
||||
@click="submit()"
|
||||
>提交</el-button
|
||||
>
|
||||
<el-button size="small" icon="el-icon-my-reset" @click="reset()"
|
||||
>重置</el-button
|
||||
>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
loading: true,
|
||||
show: false,
|
||||
form: {
|
||||
id: 0,
|
||||
inspectorId: null,
|
||||
regulatoryYears: 0,
|
||||
sceneCheckNumber: 0,
|
||||
checkLeaderNumber: 0,
|
||||
nationalCheckNumber: 0,
|
||||
teamNumber: 0,
|
||||
field: "区域一",
|
||||
provincialCheckNumber: 0,
|
||||
productionCategory: "",
|
||||
},
|
||||
load1: true,
|
||||
rules: {
|
||||
regulatoryYears: [
|
||||
{
|
||||
required: true,
|
||||
message: "生产质量监管/管理年限不能为空",
|
||||
trigger: "blur",
|
||||
},
|
||||
{
|
||||
type: "number",
|
||||
message: "请输入数字",
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
provincialCheckNumber: [
|
||||
{
|
||||
required: true,
|
||||
message: "参加省级检查的次数不能为空",
|
||||
trigger: "blur",
|
||||
},
|
||||
{
|
||||
type: "number",
|
||||
message: "请输入数字",
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
sceneCheckNumber: [
|
||||
{
|
||||
required: true,
|
||||
message: "参加企业现场检查的次数不能为空",
|
||||
trigger: "blur",
|
||||
},
|
||||
{
|
||||
type: "number",
|
||||
message: "请输入数字",
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
checkLeaderNumber: [
|
||||
{
|
||||
required: true,
|
||||
message: "担任现场检查组组长的次数不能为空",
|
||||
trigger: "blur",
|
||||
},
|
||||
{
|
||||
type: "number",
|
||||
message: "请输入数字",
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
nationalCheckNumber: [
|
||||
{
|
||||
required: true,
|
||||
message: "参加国家级飞行检查的次数不能为空",
|
||||
trigger: "blur",
|
||||
},
|
||||
{
|
||||
type: "number",
|
||||
message: "请输入数字",
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
|
||||
teamNumber: [
|
||||
{
|
||||
required: true,
|
||||
message: "担任组长的次数不能为空",
|
||||
trigger: "blur",
|
||||
},
|
||||
{
|
||||
type: "number",
|
||||
message: "请输入数字",
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
field: [
|
||||
{
|
||||
required: true,
|
||||
message: "擅长领域不能为空",
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
},
|
||||
option: [
|
||||
{
|
||||
value: "1",
|
||||
label: "化学药品",
|
||||
},
|
||||
{
|
||||
value: "2",
|
||||
label: "中药制剂",
|
||||
},
|
||||
{
|
||||
value: "3",
|
||||
label: "中药饮片",
|
||||
},
|
||||
{
|
||||
value: "4",
|
||||
label: "体外诊断试剂",
|
||||
},
|
||||
{
|
||||
value: "5",
|
||||
label: "特殊药品",
|
||||
},
|
||||
{
|
||||
value: "6",
|
||||
label: "药用辅料",
|
||||
},
|
||||
{
|
||||
value: "7",
|
||||
label: "医用氧",
|
||||
},
|
||||
{
|
||||
value: "8",
|
||||
label: "生物制品",
|
||||
},
|
||||
],
|
||||
userData: {},
|
||||
};
|
||||
},
|
||||
created() {
|
||||
//获取检查员的id并赋值
|
||||
this.form.inspectorId = this.inspectorId;
|
||||
this.getMsg();
|
||||
},
|
||||
props: {
|
||||
inspectorId: {
|
||||
type: Number,
|
||||
default: 0,
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
reset() {
|
||||
let id = this.form.id;
|
||||
this.form = {
|
||||
id,
|
||||
inspectorId: this.inspectorId,
|
||||
regulatoryYears: 0,
|
||||
sceneCheckNumber: 0,
|
||||
checkLeaderNumber: 0,
|
||||
nationalCheckNumber: 0,
|
||||
teamNumber: 0,
|
||||
field: "",
|
||||
provincialCheckNumber: 0,
|
||||
productionCategory: "",
|
||||
};
|
||||
},
|
||||
getType(e) {
|
||||
if (e == undefined || null || "") return;
|
||||
let arr1 = [...e];
|
||||
var names = [];
|
||||
arr1.forEach((v, i) => {
|
||||
this.option.forEach((value, index) => {
|
||||
if (value.value == v) {
|
||||
names.push(value.label);
|
||||
}
|
||||
});
|
||||
});
|
||||
return names.join("、");
|
||||
},
|
||||
async examineUpdate() {
|
||||
this.show = true;
|
||||
this.load1 = true;
|
||||
let msg = await this.$api.traits.detailTraits(this.userData.id);
|
||||
if (msg.status == 200) this.load1 = false;
|
||||
|
||||
this.form = msg.result;
|
||||
let arr1 = this.form.productionCategory;
|
||||
this.form.productionCategory = arr1.split(",");
|
||||
},
|
||||
async getMsg() {
|
||||
this.loading = true;
|
||||
let msg = await this.$api.traits.listTraits({
|
||||
inspectorId: this.form.inspectorId,
|
||||
});
|
||||
if (msg.status == 200) this.loading = false;
|
||||
if (msg.result.records.length > 0) {
|
||||
this.userData = msg.result.records[0];
|
||||
} else {
|
||||
this.userData = {
|
||||
regulatoryYears: "",
|
||||
field: "",
|
||||
sceneCheckNumber: "",
|
||||
provincialCheckNumber: "",
|
||||
nationalCheckNumber: "",
|
||||
checkLeaderNumber: "",
|
||||
productionCategory: "",
|
||||
teamNumber: "",
|
||||
};
|
||||
}
|
||||
},
|
||||
submit() {
|
||||
this.$refs.formName.validate(async (valid) => {
|
||||
if (valid) {
|
||||
if (this.form.productionCategory != "") {
|
||||
let arr1 = this.form.productionCategory.join(",");
|
||||
this.form.productionCategory = arr1;
|
||||
}
|
||||
let msg = await this.$api.traits.updateTraits(this.form);
|
||||
|
||||
if (msg.status == 200)
|
||||
this.$message({
|
||||
type: "success",
|
||||
message: `修改成功!`,
|
||||
});
|
||||
this.show = false;
|
||||
this.getMsg();
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.leftStyle {
|
||||
background-color: #f6faff !important;
|
||||
font-size: 14px !important;
|
||||
font-weight: 500 !important;
|
||||
color: #292f38 !important;
|
||||
width: 18%;
|
||||
}
|
||||
.rightStyle {
|
||||
font-size: 14px !important;
|
||||
font-weight: 400 !important;
|
||||
color: #4d5158 !important;
|
||||
width: 32%;
|
||||
}
|
||||
</style>
|
@ -1,30 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<div>
|
||||
<el-table :data="tableData" :border="true" style="width: 100%">
|
||||
<el-table-column prop="a1" label="姓名" width="110"> </el-table-column>
|
||||
<el-table-column prop="a2" label="检查类型"> </el-table-column>
|
||||
<el-table-column prop="a3" label="受理号/任务编号"> </el-table-column>
|
||||
<el-table-column prop="a4" label="被检查单位" width="180">
|
||||
</el-table-column>
|
||||
<el-table-column prop="a5" label="品种名称" width="190">
|
||||
</el-table-column>
|
||||
<el-table-column prop="a6" label="检查开始时间"> </el-table-column>
|
||||
<el-table-column prop="a7" label="检查结束时间"> </el-table-column>
|
||||
<el-table-column prop="a8" label="检查天数"> </el-table-column>
|
||||
<el-table-column prop="a9" label="检查身份"> </el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
tableData: [],
|
||||
};
|
||||
},
|
||||
methods: {},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped></style>
|
@ -1,115 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="tableDistance">
|
||||
<el-table
|
||||
:data="tableData"
|
||||
:border="true"
|
||||
style="width: 100%"
|
||||
v-loading="loading"
|
||||
>
|
||||
<el-table-column prop="punishmenType" label="奖惩类型">
|
||||
<template slot-scope="scope">
|
||||
{{ filterDict(scope.row.punishmenType, "punishmenType") }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="punishmentTime" label="时间">
|
||||
<template slot-scope="scope">
|
||||
<span>{{
|
||||
parseTime(scope.row.punishmentTime, "{y}-{m}-{d}")
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="punishmentName" label="奖惩名称">
|
||||
</el-table-column>
|
||||
<el-table-column prop="backgroundReasons" label="背景原因">
|
||||
</el-table-column>
|
||||
<el-table-column prop="remark" label="备注"> </el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.current"
|
||||
:limit.sync="queryParams.size"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { dictList, exportExcel } from "@/api/jcy";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
dict: {},
|
||||
total: 0,
|
||||
loading: false,
|
||||
tableData: [],
|
||||
queryParams: {
|
||||
inspectorId: undefined,
|
||||
current: 1,
|
||||
size: 10,
|
||||
},
|
||||
};
|
||||
},
|
||||
props: {
|
||||
//检查员id
|
||||
inspectorId: {
|
||||
type: Number,
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.queryParams.inspectorId = this.inspectorId;
|
||||
this.getDict("punishmenType");
|
||||
},
|
||||
methods: {
|
||||
//导出
|
||||
async exportTrain() {
|
||||
let params = {
|
||||
value: 3,
|
||||
ids: this.inspectorId,
|
||||
};
|
||||
exportExcel(params, this.form).then((res) => {
|
||||
if (res.data.code == 200) {
|
||||
this.uploadFile(
|
||||
res.data.data.result.url,
|
||||
res.data.data.result.originalFilename
|
||||
);
|
||||
}
|
||||
});
|
||||
},
|
||||
/**获取字典列表 */
|
||||
getDict(typeList) {
|
||||
let query = {
|
||||
list: typeList,
|
||||
};
|
||||
dictList(query).then((res) => {
|
||||
if (res.status == 200) {
|
||||
for (let key in res.result) {
|
||||
this.dict[key] = res.result[key];
|
||||
}
|
||||
|
||||
this.getList();
|
||||
}
|
||||
});
|
||||
},
|
||||
/**过滤字典 */
|
||||
filterDict(value, type) {
|
||||
if (this.dict[type] == undefined) {
|
||||
return value;
|
||||
}
|
||||
|
||||
let dictLable = this.dict[type].filter((item) => item.dictValue == value);
|
||||
return dictLable.length > 0 ? dictLable[0].dictLabel : "未知";
|
||||
},
|
||||
//获取列表
|
||||
async getList() {
|
||||
this.loading = true;
|
||||
let msg1 = await this.$api.jiangcheng.list(this.queryParams);
|
||||
if (msg1.status == 200) this.loading = false;
|
||||
this.tableData = msg1.result.records;
|
||||
this.total = msg1.result.total;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped></style>
|
@ -1,335 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<section class="userFooterBox">
|
||||
<div class="userItemA">
|
||||
<div class="ItemAText">2023年普通案件办理数量</div>
|
||||
<div class="ItemNumberBox">
|
||||
<div class="startBox">
|
||||
<span>23</span>
|
||||
<span>家</span>
|
||||
</div>
|
||||
<div class="centerBox">
|
||||
<span>环比去年</span>
|
||||
<span style="margin: 0 5px"> 87% </span>
|
||||
<i class="el-icon-top"></i>
|
||||
</div>
|
||||
<div class="imgBox"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="userItemA">
|
||||
<div class="ItemAText">2023年简易案件办理数量</div>
|
||||
<div class="ItemNumberBox">
|
||||
<div class="startBox">
|
||||
<span>11</span>
|
||||
<span>家</span>
|
||||
</div>
|
||||
<div class="centerBox colors">
|
||||
<span>环比去年</span>
|
||||
<span style="margin: 0 5px"> 3% </span>
|
||||
<!-- <i class="el-icon-top"></i> -->
|
||||
<i class="el-icon-bottom"></i>
|
||||
</div>
|
||||
<div
|
||||
class="imgBox"
|
||||
:style="{
|
||||
backgroundImage:
|
||||
'url(' + require('@/assets/images/icon3.png') + ')',
|
||||
}"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="userItemA">
|
||||
<div class="ItemAText">2023年药品生产监督检查数量</div>
|
||||
<div class="ItemNumberBox">
|
||||
<div class="startBox">
|
||||
<span>8</span>
|
||||
<span>家次</span>
|
||||
</div>
|
||||
<div class="centerBox">
|
||||
<span>环比去年</span>
|
||||
<span style="margin: 0 5px"> 87% </span>
|
||||
<i class="el-icon-top"></i>
|
||||
<!-- <i class="el-icon-bottom"></i> -->
|
||||
</div>
|
||||
<div
|
||||
class="imgBox"
|
||||
:style="{
|
||||
backgroundImage:
|
||||
'url(' + require('@/assets/images/icon4.png') + ')',
|
||||
}"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="userItemA">
|
||||
<div class="ItemAText">2023年参加检查发现缺陷类型统计</div>
|
||||
<div class="ItemNumberBox">
|
||||
<div class="itemleft">
|
||||
<div class="one">
|
||||
<section>一般</section>
|
||||
<section><span>8</span>条</section>
|
||||
</div>
|
||||
<div class="two">
|
||||
<section>主要</section>
|
||||
<section><span>8</span>条</section>
|
||||
</div>
|
||||
<div class="three">
|
||||
<section>严重</section>
|
||||
<section><span>8</span>条</section>
|
||||
</div>
|
||||
</div>
|
||||
<div class="itemright">
|
||||
<div
|
||||
class="imgBox"
|
||||
:style="{
|
||||
backgroundImage:
|
||||
'url(' + require('@/assets/images/icon8.png') + ')',
|
||||
}"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="userItemA">
|
||||
<div class="ItemAText">2023年药品流通监督检查数量</div>
|
||||
<div class="ItemNumberBox">
|
||||
<div class="startBox">
|
||||
<span>3</span>
|
||||
<span>家次</span>
|
||||
</div>
|
||||
<div class="centerBox">
|
||||
<span>环比去年</span>
|
||||
<span style="margin: 0 5px"> 87% </span>
|
||||
<i class="el-icon-top"></i>
|
||||
<!-- <i class="el-icon-bottom"></i> -->
|
||||
</div>
|
||||
<div
|
||||
class="imgBox"
|
||||
:style="{
|
||||
backgroundImage:
|
||||
'url(' + require('@/assets/images/icon5.png') + ')',
|
||||
}"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="userItemA">
|
||||
<div class="ItemAText">2023年医疗器械监督检查数量</div>
|
||||
<div class="ItemNumberBox">
|
||||
<div class="startBox">
|
||||
<span>3</span>
|
||||
<span>家次</span>
|
||||
</div>
|
||||
<div class="centerBox">
|
||||
<span>环比去年</span>
|
||||
<span style="margin: 0 5px"> 87% </span>
|
||||
<i class="el-icon-top"></i>
|
||||
<!-- <i class="el-icon-bottom"></i> -->
|
||||
</div>
|
||||
<div
|
||||
class="imgBox"
|
||||
:style="{
|
||||
backgroundImage:
|
||||
'url(' + require('@/assets/images/icon6.png') + ')',
|
||||
}"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="userItemA">
|
||||
<div class="ItemAText">2023年化妆品监督检查数量</div>
|
||||
<div class="ItemNumberBox">
|
||||
<div class="startBox">
|
||||
<span>17</span>
|
||||
<span>家次</span>
|
||||
</div>
|
||||
<div class="centerBox">
|
||||
<span>环比去年</span>
|
||||
<span style="margin: 0 5px"> 87% </span>
|
||||
<i class="el-icon-top"></i>
|
||||
<!-- <i class="el-icon-bottom"></i> -->
|
||||
</div>
|
||||
<div
|
||||
class="imgBox"
|
||||
:style="{
|
||||
backgroundImage:
|
||||
'url(' + require('@/assets/images/icon7.png') + ')',
|
||||
}"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="userItemA">
|
||||
<div class="ItemAText">
|
||||
{{ trainData.begainYear }} —
|
||||
{{ trainData.endBegainYear }} 年年度培训情况统计
|
||||
</div>
|
||||
<div class="ItemNumberBox">
|
||||
<div class="itemleft">
|
||||
<div class="one">
|
||||
<section>总学时</section>
|
||||
<section>
|
||||
<span>{{ trainData.sm }}</span
|
||||
>学时
|
||||
</section>
|
||||
</div>
|
||||
<div class="two">
|
||||
<section>总次数</section>
|
||||
<section>
|
||||
<span>{{ trainData.total }}</span
|
||||
>次
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
<div class="itemright">
|
||||
<div
|
||||
class="imgBox"
|
||||
:style="{
|
||||
backgroundImage:
|
||||
'url(' + require('@/assets/images/icon1.png') + ')',
|
||||
}"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { getTrainData } from "@/api/largeSize";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
trainData: {
|
||||
year: "",
|
||||
sm: "",
|
||||
total: "",
|
||||
},
|
||||
};
|
||||
},
|
||||
created() {
|
||||
let yearParams = {
|
||||
begainYear: new Date().getFullYear(),
|
||||
endBegainYear: new Date().getFullYear(),
|
||||
};
|
||||
this.getTrain(yearParams);
|
||||
},
|
||||
methods: {
|
||||
getinfoData(yearParams) {
|
||||
this.getTrain(yearParams);
|
||||
},
|
||||
getTrain(year) {
|
||||
getTrainData(year).then((res) => {
|
||||
if (res.result.length > 0) {
|
||||
this.trainData = res.result[0];
|
||||
this.trainData.begainYear = year.begainYear;
|
||||
this.trainData.endBegainYear = year.endBegainYear;
|
||||
} else {
|
||||
this.trainData = {
|
||||
begainYear: year.begainYear,
|
||||
endBegainYear: year.endBegainYear,
|
||||
sm: 0,
|
||||
total: 0,
|
||||
};
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.userFooterBox {
|
||||
height: calc(340px - 50px);
|
||||
padding: 10px 15px 20px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-content: space-between;
|
||||
flex-wrap: wrap;
|
||||
.userItemA {
|
||||
background-color: rgba($color: #1e80eb, $alpha: 0.04);
|
||||
border-radius: 4px;
|
||||
width: 24.2%;
|
||||
height: 47%;
|
||||
padding: 0 15px;
|
||||
.ItemAText {
|
||||
height: 55px;
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
color: #292f38;
|
||||
line-height: 50px;
|
||||
}
|
||||
.ItemNumberBox {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
.startBox {
|
||||
font-family: "DINPro-Medium";
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
display: flex;
|
||||
align-items: end;
|
||||
|
||||
& > span:nth-of-type(1) {
|
||||
color: #2468f2;
|
||||
font-size: 42px;
|
||||
margin-right: 8px;
|
||||
line-height: 100%;
|
||||
}
|
||||
}
|
||||
.colors {
|
||||
color: #52cd80 !important;
|
||||
}
|
||||
.centerBox {
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
color: #f04f54;
|
||||
display: flex;
|
||||
align-items: end;
|
||||
& > span:nth-of-type(1) {
|
||||
color: #85898b;
|
||||
}
|
||||
}
|
||||
|
||||
.itemleft {
|
||||
width: 75%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
color: #3d3f40;
|
||||
& span {
|
||||
font-size: 32px;
|
||||
margin-right: 5px;
|
||||
font-family: "DINPro-Medium";
|
||||
}
|
||||
.one,
|
||||
.two,
|
||||
.three {
|
||||
& > section:nth-of-type(1) {
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
}
|
||||
.one span {
|
||||
color: #1e80eb;
|
||||
}
|
||||
.two span {
|
||||
color: #52cd80;
|
||||
}
|
||||
.three span {
|
||||
color: #f88129;
|
||||
}
|
||||
}
|
||||
.itemright {
|
||||
width: 25%;
|
||||
display: flex;
|
||||
flex-direction: row-reverse;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//图片公用样式
|
||||
.imgBox {
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
background-image: url("../../../assets/images/icon2.png");
|
||||
background-size: 100% 100%;
|
||||
// img {
|
||||
// width: 100%;
|
||||
// height: 100%;
|
||||
// }
|
||||
}
|
||||
</style>
|
@ -1,579 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<div>
|
||||
<el-table
|
||||
:data="tableData"
|
||||
:border="true"
|
||||
style="width: 100%"
|
||||
v-loading="loading"
|
||||
>
|
||||
<el-table-column prop="begainTime" label="开班时间">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.begainTime, "{y}-{m}-{d}") }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="begainTime" label="开班结束时间">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.begainTime, "{y}-{m}-{d}") }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="traningName" label="培训名称"> </el-table-column>
|
||||
<el-table-column
|
||||
prop="traningUnit"
|
||||
label="培训组织单位"
|
||||
:show-overflow-tooltip="true"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column prop="traningAddress" label="培训地点">
|
||||
</el-table-column>
|
||||
<el-table-column prop="narionalProvincialLevel" label="国家级/省级">
|
||||
</el-table-column>
|
||||
<el-table-column prop="classHour" label="学时"> </el-table-column>
|
||||
<el-table-column prop="courseType" label="课程类型">
|
||||
<template slot-scope="scope">
|
||||
{{ filterDict(scope.row.courseType, "courseType") }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="learningStyle" label="学习方式">
|
||||
<template slot-scope="scope">
|
||||
{{ filterDict(scope.row.learningStyle, "learningStyle") }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="traningResults" label="培训成绩">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="assessmentResults"
|
||||
label="考核结果"
|
||||
:formatter="
|
||||
(row, column, cellValue, index) => {
|
||||
return cellValue == 1
|
||||
? '优秀'
|
||||
: cellValue == 2
|
||||
? '合格'
|
||||
: cellValue == 3
|
||||
? '不合格'
|
||||
: '';
|
||||
}
|
||||
"
|
||||
>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="操作">
|
||||
<template slot-scope="scope">
|
||||
<div v-if="scope.row.exportStatus == null">
|
||||
<button
|
||||
class="btnStyle"
|
||||
@click="handleUpdate(scope.$index, scope.row)"
|
||||
v-hasPermi="[
|
||||
'inspector:global:trainEdit',
|
||||
'inspector:global:trainEdit:s',
|
||||
]"
|
||||
>
|
||||
编辑
|
||||
</button>
|
||||
<button
|
||||
class="btnStyle green"
|
||||
@click="handleDelete(scope.$index, scope.row)"
|
||||
v-hasPermi="[
|
||||
'inspector:global:trainDel',
|
||||
'inspector:global:trainDel:s',
|
||||
]"
|
||||
>
|
||||
删除
|
||||
</button>
|
||||
<!-- <button
|
||||
class="btnStyle update"
|
||||
@click="handleEdit(scope.$index, scope.row)"
|
||||
|
||||
>
|
||||
上传附件
|
||||
</button> -->
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<!-- 培训班情况 -->
|
||||
<el-dialog
|
||||
:visible.sync="show"
|
||||
width="30%"
|
||||
append-to-body
|
||||
destroy-on-close
|
||||
custom-class="my-dialog-container"
|
||||
>
|
||||
<div slot="title" class="my-dialog-title">
|
||||
{{ this.distinguish }}培训情况
|
||||
</div>
|
||||
<el-form
|
||||
ref="formName"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
label-position="right"
|
||||
label-width="155px"
|
||||
class="my-dialog-body"
|
||||
v-loading="load1"
|
||||
>
|
||||
<el-form-item label="开班时间:" prop="begainTime">
|
||||
<el-date-picker
|
||||
v-model="form.begainTime"
|
||||
type="date"
|
||||
placeholder="请选择时间"
|
||||
value-format="yyyy-MM-dd hh:mm:ss"
|
||||
>
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="结束时间:" prop="endTime">
|
||||
<el-date-picker
|
||||
v-model="form.endTime"
|
||||
type="date"
|
||||
placeholder="请选择时间"
|
||||
value-format="yyyy-MM-dd hh:mm:ss"
|
||||
>
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="培训名称:" prop="traningName">
|
||||
<el-input
|
||||
v-model="form.traningName"
|
||||
placeholder="请输入名称"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="培训地点:" prop="traningAddress">
|
||||
<el-input
|
||||
v-model="form.traningAddress"
|
||||
placeholder="请输入地点"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="培训班级别:" prop="narionalProvincialLevel">
|
||||
<el-select
|
||||
v-model="form.narionalProvincialLevel"
|
||||
placeholder="请选择"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in options"
|
||||
:key="item.label"
|
||||
:label="item.value"
|
||||
:value="item.value"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="学时:" prop="classHour" class="input-units">
|
||||
<el-input
|
||||
v-model.number="form.classHour"
|
||||
placeholder="请输入学时"
|
||||
></el-input>
|
||||
<div class="units-text">时</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="培训组织单位:" prop="traningUnit">
|
||||
<el-input
|
||||
v-model="form.traningUnit"
|
||||
placeholder="请输入单位"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="培训成绩:" class="input-units">
|
||||
<el-input
|
||||
v-model.number="form.traningResults"
|
||||
placeholder="请输入成绩"
|
||||
></el-input>
|
||||
<div class="units-text">分</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="课程类型:" prop="courseType">
|
||||
<el-select v-model="form.courseType" placeholder="请选择">
|
||||
<el-option
|
||||
v-for="item in dict.courseType"
|
||||
:key="item.dictValue"
|
||||
:label="item.dictLabel"
|
||||
:value="item.dictValue"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="学习方式:" prop="learningStyle">
|
||||
<el-select v-model="form.learningStyle" placeholder="请选择">
|
||||
<el-option
|
||||
v-for="item in dict.learningStyle"
|
||||
:key="item.dictValue"
|
||||
:label="item.dictLabel"
|
||||
:value="item.dictValue.toString()"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="考核结果:">
|
||||
<el-radio-group v-model="form.assessmentResults">
|
||||
<el-radio
|
||||
v-for="item in radio"
|
||||
:key="item.label"
|
||||
:label="item.label"
|
||||
>{{ item.value }}</el-radio
|
||||
>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="上传附件:" prop="assessmentFilename">
|
||||
<FileUpload v-model="list" :isShowTip="false">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="primary"
|
||||
v-hasPermi="[
|
||||
'inspector:global:trainUpload',
|
||||
'inspector:global:trainUpload:s',
|
||||
]"
|
||||
>上传培训情况附件</el-button
|
||||
>
|
||||
</FileUpload>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button
|
||||
size="small"
|
||||
type="primary"
|
||||
icon="el-icon-my-save"
|
||||
@click="submit()"
|
||||
>提交</el-button
|
||||
>
|
||||
<el-button size="small" icon="el-icon-my-reset" @click="reset()"
|
||||
>重置</el-button
|
||||
>
|
||||
</div>
|
||||
</el-dialog>
|
||||
<!-- <fileDiaglog ref="fileDiaglog"></fileDiaglog> -->
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { exportExcel, dictList } from "@/api/jcy";
|
||||
export default {
|
||||
data() {
|
||||
const unitName = (rule, value, callback) => {
|
||||
if (value.includes("辽宁省药品监督管理局")) {
|
||||
callback(new Error("不得输入辽宁省药品监督管理局等字样"));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
return {
|
||||
dict: {},
|
||||
list: [],
|
||||
//单选按钮
|
||||
radio: [
|
||||
{
|
||||
value: "优秀",
|
||||
label: 1,
|
||||
},
|
||||
{
|
||||
value: "合格",
|
||||
label: 2,
|
||||
},
|
||||
{
|
||||
value: "不合格",
|
||||
label: 3,
|
||||
},
|
||||
],
|
||||
//区分修改和新增
|
||||
distinguish: "",
|
||||
options: [
|
||||
{
|
||||
value: "国家级",
|
||||
label: "0",
|
||||
},
|
||||
{
|
||||
value: "省级",
|
||||
label: "1",
|
||||
},
|
||||
],
|
||||
loading: true,
|
||||
//弹出框的等待效果
|
||||
load1: true,
|
||||
show: false,
|
||||
tableData: [],
|
||||
form: {
|
||||
assessmentResults: 1,
|
||||
assessmentFilename: "",
|
||||
assessmentResultsUrl: "",
|
||||
begainTime: "",
|
||||
|
||||
endTime: "",
|
||||
|
||||
classHour: "",
|
||||
courseType: "",
|
||||
idCard: null,
|
||||
//检查员id
|
||||
inspectorId: null,
|
||||
learningStyle: "",
|
||||
narionalProvincialLevel: "",
|
||||
remark: "",
|
||||
traningAddress: "",
|
||||
traningName: "",
|
||||
traningResults: "",
|
||||
traningUnit: "",
|
||||
},
|
||||
rules: {
|
||||
begainTime: [
|
||||
{ required: true, message: "请选择时间", trigger: "blur" },
|
||||
],
|
||||
endTime: [{ required: true, message: "请选择时间", trigger: "blur" }],
|
||||
|
||||
traningName: [
|
||||
{ required: true, message: "培训名称不能为空", trigger: "blur" },
|
||||
],
|
||||
|
||||
traningAddress: [
|
||||
{ required: true, message: "培训地点不能为空", trigger: "blur" },
|
||||
],
|
||||
narionalProvincialLevel: [
|
||||
{ required: true, message: "请选择培训班级别", trigger: "blur" },
|
||||
],
|
||||
classHour: [
|
||||
{ required: true, message: "学时不能为空", trigger: "blur" },
|
||||
{
|
||||
type: "number",
|
||||
message: "请输入数字类型的学时",
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
traningUnit: [
|
||||
{
|
||||
required: true,
|
||||
message: "培训组织单位不能为空",
|
||||
trigger: "blur",
|
||||
},
|
||||
{ required: true, validator: unitName, trigger: "blur" },
|
||||
],
|
||||
traningResults: [
|
||||
{ required: true, message: "培训成绩不能为空", trigger: "blur" },
|
||||
{
|
||||
type: "number",
|
||||
message: "请输入数字类型的培训成绩",
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
courseType: [
|
||||
{ required: true, message: "课程类型不能为空", trigger: "blur" },
|
||||
],
|
||||
learningStyle: [
|
||||
{ required: true, message: "学习方式不能为空", trigger: "blur" },
|
||||
],
|
||||
// assessmentResults: [
|
||||
// { required: true, message: "请选择考核结果", trigger: "change" },
|
||||
// ],
|
||||
assessmentFilename: [
|
||||
{ required: true, message: "请选择附件", trigger: "blur" },
|
||||
],
|
||||
},
|
||||
};
|
||||
},
|
||||
props: {
|
||||
inspectorId: {
|
||||
type: Number,
|
||||
default: 0,
|
||||
},
|
||||
},
|
||||
components: {
|
||||
// fileDiaglog,
|
||||
},
|
||||
created() {
|
||||
//获取检查员的id并赋值
|
||||
this.form.inspectorId = this.inspectorId;
|
||||
this.getDictList("courseType,learningStyle");
|
||||
},
|
||||
methods: {
|
||||
/**过滤字典 */
|
||||
filterDict(value, type) {
|
||||
if (this.dict[type] == undefined) {
|
||||
return value;
|
||||
}
|
||||
let dictLable = this.dict[type].filter((item) => item.dictValue == value);
|
||||
return dictLable.length > 0 ? dictLable[0].dictLabel : "未知";
|
||||
},
|
||||
getDictList(typeList) {
|
||||
let query = {
|
||||
list: typeList,
|
||||
};
|
||||
dictList(query).then((res) => {
|
||||
if (res.status == 200) {
|
||||
for (let key in res.result) {
|
||||
this.dict[key] = res.result[key];
|
||||
}
|
||||
this.getList();
|
||||
}
|
||||
});
|
||||
},
|
||||
//获取培训详情列表
|
||||
async getList() {
|
||||
this.loading = true;
|
||||
let msg = await this.$api.training.listTraining({
|
||||
inspectorId: this.form.inspectorId,
|
||||
});
|
||||
if (msg.status == 200) this.loading = false;
|
||||
this.tableData = msg.result.records;
|
||||
},
|
||||
//重置
|
||||
reset() {
|
||||
this.form = {
|
||||
assessmentResults: 1,
|
||||
assessmentFilename: "",
|
||||
assessmentResultsUrl: "",
|
||||
begainTime: "",
|
||||
classHour: "",
|
||||
courseType: "",
|
||||
//检查员id
|
||||
inspectorId: this.inspectorId,
|
||||
learningStyle: "",
|
||||
narionalProvincialLevel: "",
|
||||
remark: "",
|
||||
traningAddress: "",
|
||||
traningName: "",
|
||||
traningResults: "",
|
||||
traningUnit: "",
|
||||
};
|
||||
this.list = [];
|
||||
},
|
||||
//新增
|
||||
async handleAdd() {
|
||||
this.distinguish = "新增";
|
||||
this.reset();
|
||||
this.show = true;
|
||||
this.load1 = false;
|
||||
},
|
||||
//编辑
|
||||
async handleUpdate(index, row) {
|
||||
this.reset();
|
||||
this.show = true;
|
||||
this.load1 = true;
|
||||
this.distinguish = "修改";
|
||||
//获取详情
|
||||
let msg1 = await this.$api.training.detailTraining(row.id);
|
||||
if (msg1.status == 200) this.load1 = false;
|
||||
this.form = msg1.result;
|
||||
if (msg1.result.assessmentResultsUrl && msg1.result.assessmentFilename) {
|
||||
let arr1 = [];
|
||||
let arr2 = [];
|
||||
arr1 = msg1.result.assessmentResultsUrl.split(",");
|
||||
arr2 = msg1.result.assessmentFilename.split(",");
|
||||
arr1.forEach((value, index) => {
|
||||
this.list.push({
|
||||
url: value,
|
||||
name: arr2[index],
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
//弹窗的确认
|
||||
submit() {
|
||||
let arr1 = [];
|
||||
let arr2 = [];
|
||||
this.list.forEach((value, index) => {
|
||||
arr1.push(value.name);
|
||||
arr2.push(value.url);
|
||||
});
|
||||
this.form.assessmentFilename = arr1.join(",");
|
||||
this.form.assessmentResultsUrl = arr2.join(",");
|
||||
this.$refs.formName.validate(async (valid) => {
|
||||
if (valid) {
|
||||
if (this.distinguish === "新增") {
|
||||
let msg = await this.$api.training.addTraining(this.form);
|
||||
if (msg.status == 200) this.dialog();
|
||||
} else if (this.distinguish === "修改") {
|
||||
let msg = await this.$api.training.updateTraining(this.form);
|
||||
if (msg.status == 200) this.dialog();
|
||||
}
|
||||
this.show = false;
|
||||
this.getList();
|
||||
}
|
||||
});
|
||||
},
|
||||
//成功弹窗
|
||||
dialog() {
|
||||
this.$message({
|
||||
type: "success",
|
||||
message: `${this.distinguish}成功!`,
|
||||
});
|
||||
},
|
||||
//删除
|
||||
handleDelete(index, row) {
|
||||
this.$confirm("此操作将删除该条培训情况, 是否继续?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
})
|
||||
.then(async () => {
|
||||
let msg1 = await this.$api.training.deleteTraining(row.id);
|
||||
if (msg1.status == 200) {
|
||||
this.$message({
|
||||
type: "success",
|
||||
message: "删除成功!",
|
||||
});
|
||||
this.getList();
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
this.$message({
|
||||
type: "info",
|
||||
message: "已取消删除",
|
||||
});
|
||||
});
|
||||
},
|
||||
//上传附件
|
||||
async handleEdit(index, row) {
|
||||
this.$refs.fileDiaglog.open(row.id, "培训");
|
||||
},
|
||||
//导出
|
||||
async exportTrain() {
|
||||
let params = {
|
||||
value: 1,
|
||||
ids: this.inspectorId,
|
||||
};
|
||||
exportExcel(params).then((res) => {
|
||||
if (res.data.code == 200) {
|
||||
this.uploadFile(
|
||||
res.data.data.result.url,
|
||||
res.data.data.result.originalFilename
|
||||
);
|
||||
}
|
||||
});
|
||||
},
|
||||
//判断上午下午
|
||||
timerChange(e) {
|
||||
let timer = new Date(e);
|
||||
let hours = timer.getHours();
|
||||
if (hours < 12) {
|
||||
return "上午";
|
||||
} else {
|
||||
return "下午";
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.btnStyle {
|
||||
border: 1px solid #ffc89f;
|
||||
background: #ffefe3;
|
||||
border-radius: 4px;
|
||||
color: #f88129;
|
||||
font-size: 12px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.green {
|
||||
background: #ffe0de;
|
||||
border: 1px solid #f89d97;
|
||||
color: #f76359;
|
||||
margin: 0 8px;
|
||||
}
|
||||
.update {
|
||||
background: #ebf5ff;
|
||||
border: 1px solid #a1cbf8;
|
||||
color: #0e7cf4;
|
||||
}
|
||||
.input-units {
|
||||
position: relative;
|
||||
.units-text {
|
||||
font-size: 13px;
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
color: #c0c4cc;
|
||||
}
|
||||
}
|
||||
</style>
|
@ -1,266 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<div>
|
||||
<el-table
|
||||
:data="tableData"
|
||||
:border="true"
|
||||
v-loading="loading"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-table-column prop="name" label="姓名" width="110">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="workUnit"
|
||||
label="工作单位"
|
||||
:show-overflow-tooltip="true"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column prop="assessYear" label="考核年度"> </el-table-column>
|
||||
<el-table-column
|
||||
prop="division"
|
||||
label="考核部门"
|
||||
:show-overflow-tooltip="true"
|
||||
/>
|
||||
<el-table-column prop="assessTime" label="考核时间">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.assessTime, "{y}-{m}-{d}") }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="remark"
|
||||
label="年度综合评定意见"
|
||||
:show-overflow-tooltip="true"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
{{ filterDict(scope.row.remark, "remark") }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作">
|
||||
<template slot-scope="scope">
|
||||
<div v-hasPermi="['inspector:global:yearEdit']">
|
||||
<button class="btnStyle" @click="handleEdit(scope.row)">
|
||||
编辑
|
||||
</button>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<el-dialog
|
||||
:visible.sync="open"
|
||||
width="30%"
|
||||
append-to-body
|
||||
destroy-on-close
|
||||
custom-class="my-dialog-container"
|
||||
>
|
||||
<div slot="title" class="my-dialog-title">编辑年度考核</div>
|
||||
|
||||
<el-form
|
||||
ref="form"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
label-position="right"
|
||||
label-width="100px"
|
||||
class="my-dialog-body"
|
||||
>
|
||||
<el-form-item label="姓名:" prop="name">
|
||||
<el-input v-model="form.name" placeholder="请输入姓名"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="工作单位:" prop="workUnit">
|
||||
<el-select v-model="form.workUnit" placeholder="请选择">
|
||||
<el-option
|
||||
:label="dict.dictLabel"
|
||||
:value="dict.dictLabel.toString()"
|
||||
v-for="dict in dict.workUnit"
|
||||
:key="dict.dictValue"
|
||||
></el-option>
|
||||
</el-select>
|
||||
<!-- <el-input
|
||||
v-model="form.workUnit"
|
||||
placeholder="请输入工作单位"
|
||||
></el-input> -->
|
||||
</el-form-item>
|
||||
<el-form-item label="考核年度:" prop="assessYear">
|
||||
<el-date-picker
|
||||
v-model="form.assessYear"
|
||||
type="year"
|
||||
placeholder="请选择"
|
||||
value-format="yyyy"
|
||||
>
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="考核部门:" prop="division">
|
||||
<el-select v-model="form.division" placeholder="请选择">
|
||||
<el-option
|
||||
:label="dict.dictLabel"
|
||||
:value="dict.dictLabel.toString()"
|
||||
v-for="dict in dict.division"
|
||||
:key="dict.dictValue"
|
||||
></el-option>
|
||||
</el-select>
|
||||
<!-- <el-input
|
||||
v-model="form.division"
|
||||
placeholder="请输入考核部门"
|
||||
></el-input> -->
|
||||
</el-form-item>
|
||||
<el-form-item label="考核时间:" prop="assessTime">
|
||||
<el-date-picker
|
||||
v-model="form.assessTime"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="选择日期"
|
||||
>
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="综合评定意见:" prop="remark">
|
||||
<el-select v-model="form.remark" placeholder="请选择">
|
||||
<el-option
|
||||
:label="dict.dictLabel"
|
||||
:value="dict.dictValue.toString()"
|
||||
v-for="dict in dict.remark"
|
||||
:key="dict.dictValue"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button
|
||||
size="small"
|
||||
type="primary"
|
||||
icon="el-icon-my-save"
|
||||
@click="onSubmit('form')"
|
||||
>提交</el-button
|
||||
>
|
||||
<el-button size="small" icon="el-icon-my-reset" @click="reset()"
|
||||
>重置</el-button
|
||||
>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { exportExcel, dictList } from "@/api/jcy";
|
||||
import { getList, updateRow } from "@/api/yearAssess";
|
||||
export default {
|
||||
props: {
|
||||
inspectorId: {
|
||||
type: Number,
|
||||
default: 0,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
dict: {},
|
||||
open: false,
|
||||
loading: true,
|
||||
tableData: [],
|
||||
queryParams: {
|
||||
inspectorId: undefined,
|
||||
},
|
||||
form: {},
|
||||
rules: {
|
||||
name: [{ required: true, message: "请填写姓名", trigger: "blur" }],
|
||||
workUnit: [
|
||||
{ required: true, message: "请选择工作单位", trigger: "change" },
|
||||
],
|
||||
assessYear: [
|
||||
{ required: true, message: "请选择考核年", trigger: "change" },
|
||||
],
|
||||
division: [
|
||||
{ required: true, message: "请选择考核部门", trigger: "change" },
|
||||
],
|
||||
assessTime: [
|
||||
{ required: true, message: "请选择考核时间", trigger: "change" },
|
||||
],
|
||||
remark: [
|
||||
{ required: true, message: "请选择综合评定意见", trigger: "change" },
|
||||
],
|
||||
},
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.queryParams.inspectorId = this.inspectorId;
|
||||
dictList({ list: "remark,workUnit,division" }).then((res) => {
|
||||
if (res.status == 200) {
|
||||
for (let key in res.result) {
|
||||
this.dict[key] = res.result[key];
|
||||
}
|
||||
this.getList();
|
||||
}
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
/**过滤字典 */
|
||||
filterDict(value, type) {
|
||||
if (this.dict[type] == undefined) {
|
||||
return value;
|
||||
}
|
||||
let dictLable = this.dict[type].filter((item) => item.dictValue == value);
|
||||
return dictLable.length > 0 ? dictLable[0].dictLabel : "未知";
|
||||
},
|
||||
/**重置 */
|
||||
reset() {
|
||||
this.form = {
|
||||
id: null,
|
||||
name: "",
|
||||
workUnit: "",
|
||||
assessYear: "",
|
||||
division: "",
|
||||
assessTime: "",
|
||||
remark: "",
|
||||
};
|
||||
this.resetForm("form");
|
||||
},
|
||||
/**提交 */
|
||||
onSubmit(formName) {
|
||||
this.$refs[formName].validate((valid) => {
|
||||
if (valid) {
|
||||
updateRow(this.form).then((res) => {
|
||||
this.open = false;
|
||||
this.$modal.msgSuccess("修改成功");
|
||||
this.getList();
|
||||
});
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
},
|
||||
/**编辑 */
|
||||
handleEdit(row) {
|
||||
this.form = JSON.parse(JSON.stringify(row));
|
||||
this.open = true;
|
||||
},
|
||||
getList() {
|
||||
this.loading = true;
|
||||
getList(this.queryParams).then((res) => {
|
||||
this.tableData = res.result.records;
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
exportTrain() {
|
||||
let params = {
|
||||
value: 4,
|
||||
ids: this.inspectorId,
|
||||
};
|
||||
exportExcel(params).then((res) => {
|
||||
if (res.data.code == 200) {
|
||||
this.uploadFile(
|
||||
res.data.data.result.url,
|
||||
res.data.data.result.originalFilename
|
||||
);
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.btnStyle {
|
||||
border: 1px solid #ffc89f;
|
||||
background: #ffefe3;
|
||||
border-radius: 4px;
|
||||
color: #f88129;
|
||||
font-size: 12px;
|
||||
cursor: pointer;
|
||||
}
|
||||
</style>
|
@ -1,165 +0,0 @@
|
||||
<template>
|
||||
<div id="xuexi"></div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getPieXl } from "@/api/largeSize";
|
||||
import * as echarts from "echarts";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
queryData: null,
|
||||
//内部人员
|
||||
arr1: [],
|
||||
//外部人员
|
||||
arr2: [],
|
||||
list: [
|
||||
{
|
||||
id: 1,
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
},
|
||||
|
||||
{
|
||||
id: 3,
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
},
|
||||
],
|
||||
interior: [],
|
||||
exterior: [],
|
||||
};
|
||||
},
|
||||
created() {},
|
||||
mounted() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
getList() {
|
||||
getPieXl().then((res) => {
|
||||
res.result.forEach((item) => {
|
||||
if (item.source == 1) {
|
||||
//内部人员加进数组
|
||||
this.arr1.push(item);
|
||||
} else {
|
||||
//外部人员加进数组
|
||||
this.arr2.push(item);
|
||||
}
|
||||
});
|
||||
this.list.forEach((value) => {
|
||||
this.arr1.forEach((v) => {
|
||||
if (value.id == v.education) {
|
||||
this.interior.push(v.count);
|
||||
} else {
|
||||
this.interior.push(0);
|
||||
}
|
||||
});
|
||||
this.arr2.forEach((v) => {
|
||||
if (value.id == v.education) {
|
||||
this.exterior.push(v.count);
|
||||
} else {
|
||||
this.exterior.push(0);
|
||||
}
|
||||
});
|
||||
});
|
||||
this.initEchatrs();
|
||||
});
|
||||
},
|
||||
initEchatrs() {
|
||||
let _this = this;
|
||||
var myChart = echarts.init(document.getElementById("xuexi"));
|
||||
let option = {
|
||||
tooltip: {},
|
||||
grid: {
|
||||
top: "10%",
|
||||
bottom: "13%",
|
||||
left: "3%",
|
||||
right: "0",
|
||||
containLabel: true,
|
||||
},
|
||||
legend: {
|
||||
data: ["内部", "外部"],
|
||||
icon: "circle",
|
||||
itemWidth: 10,
|
||||
itemHeight: 10,
|
||||
itemGap: 36,
|
||||
bottom: "2%",
|
||||
textStyle: {
|
||||
color: "#9DA2AB",
|
||||
fontSize: _this.getFontSize(140),
|
||||
},
|
||||
},
|
||||
xAxis: {
|
||||
data: ["本科", "硕士", "博士", "博士后", "其他"],
|
||||
grid: {
|
||||
borderColor: "rgba(210, 210, 210, 0.2)",
|
||||
},
|
||||
axisTick: {
|
||||
show: false,
|
||||
},
|
||||
axisLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
color: "#D2D2D2",
|
||||
},
|
||||
},
|
||||
axisLabel: {
|
||||
color: "#616367",
|
||||
fontSize: _this.getFontSize(140),
|
||||
},
|
||||
},
|
||||
yAxis: {
|
||||
minInterval: 20,
|
||||
axisLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
color: "#D2D2D2",
|
||||
},
|
||||
},
|
||||
axisLabel: {
|
||||
color: "#616367",
|
||||
fontSize: _this.getFontSize(140),
|
||||
},
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: "内部",
|
||||
type: "bar",
|
||||
barWidth: "15%",
|
||||
data: this.interior,
|
||||
itemStyle: {
|
||||
color: "#0E7CF4",
|
||||
borderRadius: 3, // 柱子圆角半径
|
||||
},
|
||||
barGap: "30%",
|
||||
},
|
||||
{
|
||||
name: "外部",
|
||||
type: "bar",
|
||||
barWidth: "15%",
|
||||
data: this.exterior,
|
||||
itemStyle: {
|
||||
color: "#FAC858",
|
||||
borderRadius: 3, // 柱子圆角半径
|
||||
},
|
||||
barGap: "30%",
|
||||
},
|
||||
],
|
||||
};
|
||||
myChart.setOption(option, true);
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
#xuexi {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
@ -1,193 +0,0 @@
|
||||
<template>
|
||||
<div class="container">
|
||||
<div class="right-content">
|
||||
<div class="name-content">
|
||||
<div class="drug-name">
|
||||
<span class="name">药品通用名称 : </span>
|
||||
<span class="tag">健母宝经典修护精华液</span>
|
||||
<div class="info-Tag">
|
||||
<div>10年老企</div>
|
||||
<div>高风险企业</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="close-icon">
|
||||
<i class="el-icon-close" size="50"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="left">
|
||||
<div class="left-grids">
|
||||
<gridsTitle title="检查人员组成" />
|
||||
<div class="main">
|
||||
<people />
|
||||
</div>
|
||||
</div>
|
||||
<div class="left-grids middle-box">
|
||||
<gridsTitle title="检查队伍学历分布" />
|
||||
<div class="main">
|
||||
<xueli />
|
||||
</div>
|
||||
</div>
|
||||
<div class="left-grids">
|
||||
<gridsTitle title="执法监督工作" />
|
||||
<div class="main">
|
||||
<zfdb />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="middle">
|
||||
<gridsTitle title="全省数据" />
|
||||
<div class="main">
|
||||
<leafletMap />
|
||||
</div>
|
||||
</div>
|
||||
<div class="right">
|
||||
<div class="right-grids">
|
||||
<gridsTitle title="检查员层级分布" />
|
||||
<div class="main">
|
||||
<hierarchy />
|
||||
</div>
|
||||
</div>
|
||||
<div class="right-grids middle-box">
|
||||
<gridsTitle title="检查员类别分布" />
|
||||
<div class="main">
|
||||
<typePie />
|
||||
</div>
|
||||
</div>
|
||||
<div class="right-grids">
|
||||
<gridsTitle title="检查员级别分布" />
|
||||
<div class="main">
|
||||
<LevelPie />
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import gridsTitle from "../components/gridsTitle";
|
||||
import leafletMap from "../components/home/map";
|
||||
// 左侧图表
|
||||
import people from "../components/home/leftEcharts/people.vue";
|
||||
import xueli from "../components/home/leftEcharts/xueli.vue";
|
||||
import zfdb from "../components/home/leftEcharts/zfdb.vue";
|
||||
// 右侧图表
|
||||
import hierarchy from "../components/home/rightEchats/hierarchy.vue";
|
||||
import typePie from "../components/home/rightEchats/typePie.vue";
|
||||
import LevelPie from "../components/home/rightEchats/LevelPie.vue";
|
||||
export default {
|
||||
components: {
|
||||
gridsTitle,
|
||||
leafletMap,
|
||||
people,
|
||||
xueli,
|
||||
zfdb,
|
||||
hierarchy,
|
||||
typePie,
|
||||
LevelPie,
|
||||
},
|
||||
data() {
|
||||
return {};
|
||||
},
|
||||
mounted() {},
|
||||
methods: {},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.container {
|
||||
height: 100%;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
background: #f2f2f2;
|
||||
padding: 10px;
|
||||
& > div {
|
||||
flex: 1;
|
||||
height: 100%;
|
||||
}
|
||||
& > div:nth-child(2) {
|
||||
flex: 2;
|
||||
margin: 0 10px;
|
||||
}
|
||||
.middle {
|
||||
height: 100%;
|
||||
background: #ffff;
|
||||
border-radius: 8px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.left,
|
||||
.right {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
& > div {
|
||||
width: 100%;
|
||||
border-radius: 8px;
|
||||
flex: 1;
|
||||
background: #ffffff;
|
||||
}
|
||||
}
|
||||
.middle-box {
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
.main {
|
||||
height: calc(100% - 40px);
|
||||
}
|
||||
.right-content {
|
||||
background-color: #fff;
|
||||
.name-content {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 10px;
|
||||
border-bottom: 1px solid #F2F3F5;
|
||||
.drug-name {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 18px;
|
||||
font-family: Source Han Sans SC-Bold, Source Han Sans SC;
|
||||
font-weight: bold;
|
||||
color: #323233;
|
||||
.name {
|
||||
|
||||
}
|
||||
.tag {
|
||||
color: #1349C5;
|
||||
margin-left: 4px;
|
||||
}
|
||||
.info-Tag {
|
||||
// margin-top: vh(9);
|
||||
margin-left: 12px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 12px;
|
||||
font-family: Source Han Sans CN;
|
||||
font-weight: 400;
|
||||
div {
|
||||
padding: 4px 11px;
|
||||
margin-right: 10px;
|
||||
background: #DDEBFA;
|
||||
border-radius: 4px;
|
||||
color: #1E80EB;
|
||||
&:last-child {
|
||||
margin-right: 0;
|
||||
background: #FDEBEB;
|
||||
border-radius: 4px;
|
||||
color: #E42424;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
.close-icon {
|
||||
cursor: pointer;
|
||||
i {
|
||||
font-size: 25px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
@ -1,3 +0,0 @@
|
||||
<template>
|
||||
<div> 22222</div>
|
||||
</template>
|
@ -1,3 +0,0 @@
|
||||
<template>
|
||||
<div> 4444</div>
|
||||
</template>
|
@ -1,14 +0,0 @@
|
||||
<template>
|
||||
<div style="height: 100%">
|
||||
<userMsgPage></userMsgPage>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import userMsgPage from "../userMsgPage/index.vue";
|
||||
export default {
|
||||
components: {
|
||||
userMsgPage,
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped></style>
|
@ -1,3 +0,0 @@
|
||||
<template>
|
||||
<div>77777777777</div>
|
||||
</template>
|
@ -1,375 +0,0 @@
|
||||
<template>
|
||||
<div class="child-container">
|
||||
<div class="table-list">
|
||||
<div class="search-box">
|
||||
<gridsTitle title="查询条件" />
|
||||
<el-form
|
||||
:model="queryParams"
|
||||
ref="queryForm"
|
||||
size="small"
|
||||
:inline="true"
|
||||
label-width="95px"
|
||||
class="search-from"
|
||||
>
|
||||
<el-form-item label="培训名称:" prop="traningName">
|
||||
<el-input v-model="queryParams.traningName" clearable></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="课程类型:" prop="courseType">
|
||||
<el-select v-model="queryParams.courseType" clearable>
|
||||
<el-option
|
||||
:label="sex.dictLabel"
|
||||
:value="sex.dictValue"
|
||||
v-for="sex in dict.courseType"
|
||||
:key="sex.dictValue"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="培训时间:">
|
||||
<el-date-picker
|
||||
v-model="timeData"
|
||||
value-format="yyyy-MM-dd"
|
||||
type="daterange"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
@change="changePicker"
|
||||
>
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
<div class="search-btn">
|
||||
<el-button icon="el-icon-my-reset" size="mini" @click="resetQuery"
|
||||
>重置</el-button
|
||||
>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="el-icon-search"
|
||||
size="mini"
|
||||
@click="handleQuery"
|
||||
>搜索</el-button
|
||||
>
|
||||
</div>
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="table-box">
|
||||
<gridsTitle title="培训记录列表" />
|
||||
<div class="table-data">
|
||||
<el-table v-loading="loading" :data="tableList" height="90%">
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="55"
|
||||
align="center"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="培训名称"
|
||||
align="center"
|
||||
prop="traningName"
|
||||
/>
|
||||
<el-table-column
|
||||
label="培训开始时间"
|
||||
align="center"
|
||||
prop="begainTime"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<span>{{
|
||||
parseTime(scope.row.begainTime, "{y}-{m}-{d}")
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="培训结束时间" align="center" prop="duty">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.endTime, "{y}-{m}-{d}") }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="培训组织单位"
|
||||
align="center"
|
||||
prop="traningUnit"
|
||||
/>
|
||||
|
||||
<el-table-column label="课程类型" align="center" prop="courseType">
|
||||
<template slot-scope="scope">
|
||||
{{ filterDict(scope.row.courseType, "courseType") }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="培训学时" align="center" prop="classHour" />
|
||||
<el-table-column
|
||||
label="学习方式"
|
||||
align="center"
|
||||
prop="learningStyle"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
{{ filterDict(scope.row.learningStyle, "learningStyle") }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="参与总人数"
|
||||
align="center"
|
||||
prop="countNumber"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="省局监管人员参与人数"
|
||||
align="center"
|
||||
prop="countDeptNumber"
|
||||
>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.current"
|
||||
:limit.sync="queryParams.size"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { dictList } from "@/api/jcy";
|
||||
import { getList } from "@/api/inspectorTrain";
|
||||
import gridsTitle from "../components/gridsTitle";
|
||||
export default {
|
||||
components: {
|
||||
gridsTitle,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
//字典
|
||||
dict: {},
|
||||
inspectorId: null,
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
//接口条件
|
||||
timeData: null,
|
||||
queryParams: {
|
||||
traningName: undefined,
|
||||
courseType: undefined,
|
||||
begainTime: undefined,
|
||||
endTime: undefined,
|
||||
current: 1,
|
||||
size: 10,
|
||||
},
|
||||
//表格数据
|
||||
tableList: [],
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getDict("learningStyle,courseType");
|
||||
},
|
||||
|
||||
methods: {
|
||||
changePicker(e) {
|
||||
if (e) {
|
||||
this.queryParams.begainTime = e[0];
|
||||
this.queryParams.endTime = e[1];
|
||||
} else {
|
||||
this.queryParams.begainTime = undefined;
|
||||
this.queryParams.endTime = undefined;
|
||||
}
|
||||
},
|
||||
/**过滤字典 */
|
||||
filterDict(value, type) {
|
||||
if (this.dict[type] == undefined) {
|
||||
return value;
|
||||
}
|
||||
let dictLable = this.dict[type].filter((item) => item.dictValue == value);
|
||||
return dictLable.length > 0 ? dictLable[0].dictLabel : "未知";
|
||||
},
|
||||
/**获取字典列表 */
|
||||
getDict(typeList) {
|
||||
let query = {
|
||||
list: typeList,
|
||||
};
|
||||
dictList(query).then((res) => {
|
||||
if (res.status == 200) {
|
||||
for (let key in res.result) {
|
||||
this.dict[key] = res.result[key];
|
||||
}
|
||||
}
|
||||
this.getList();
|
||||
});
|
||||
},
|
||||
|
||||
/**获取表格数据 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
getList(this.queryParams).then((res) => {
|
||||
this.tableList = res.result.records;
|
||||
this.total = res.result.total;
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.current = 1;
|
||||
this.getList();
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm");
|
||||
this.timeData = null;
|
||||
this.queryParams.begainTime = undefined;
|
||||
this.queryParams.endTime = undefined;
|
||||
this.handleQuery();
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.child-container {
|
||||
height: 100%;
|
||||
& > div {
|
||||
height: 100%;
|
||||
}
|
||||
// 表格部分
|
||||
.table-list {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
.search-box {
|
||||
.search-from {
|
||||
padding: 15px;
|
||||
}
|
||||
.search-btn {
|
||||
position: relative;
|
||||
left: 50%;
|
||||
bottom: 0;
|
||||
transform: translateZ(-50%);
|
||||
}
|
||||
}
|
||||
.table-box {
|
||||
flex: 1;
|
||||
margin-top: 10px;
|
||||
.table-data {
|
||||
height: calc(100% - 40px);
|
||||
box-sizing: border-box;
|
||||
padding: 15px;
|
||||
position: relative;
|
||||
.paginBox {
|
||||
position: absolute;
|
||||
bottom: 15px;
|
||||
width: 100%;
|
||||
width: 98%;
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
& > div {
|
||||
width: 100%;
|
||||
border-radius: 6px;
|
||||
background-color: #fff;
|
||||
}
|
||||
}
|
||||
.table-top-btn {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
// 结束
|
||||
}
|
||||
::v-deep .search-from {
|
||||
.el-form-item__label {
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
color: #4d5158;
|
||||
}
|
||||
.el-select,
|
||||
.el-input {
|
||||
width: 300px;
|
||||
}
|
||||
}
|
||||
//弹出框
|
||||
.my-dialog-title {
|
||||
font-size: 16px;
|
||||
font-weight: 550;
|
||||
color: #333333;
|
||||
background: #e9eff7;
|
||||
padding: 10px 0 10px 16px;
|
||||
}
|
||||
.my-dialog-content {
|
||||
padding-left: 40px;
|
||||
|
||||
.content-head {
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
color: #8e8e8e;
|
||||
line-height: 24px;
|
||||
}
|
||||
.contentAdd {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-top: 10px;
|
||||
span {
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
color: #4d5158;
|
||||
margin-right: 4px;
|
||||
}
|
||||
.itemContent {
|
||||
width: 40%;
|
||||
margin: 0 4px;
|
||||
}
|
||||
.contentIcon {
|
||||
font-size: 22px;
|
||||
color: #22c98d;
|
||||
margin-left: 4px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.deleteIcon {
|
||||
font-size: 22px;
|
||||
color: #f76359;
|
||||
margin-left: 4px;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
.manner {
|
||||
padding-left: 19px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-top: 10px;
|
||||
span {
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
color: #4d5158;
|
||||
margin-right: 4px;
|
||||
}
|
||||
.inputM {
|
||||
width: 78.5%;
|
||||
margin-left: 4px;
|
||||
}
|
||||
}
|
||||
::v-deep .el-select {
|
||||
width: 100%;
|
||||
}
|
||||
.my-dialog-footer ::v-deep .el-button {
|
||||
padding: 8px 10px !important;
|
||||
}
|
||||
.my-dialog-footer ::v-deep .el-button--primary {
|
||||
background: #ff9822 !important;
|
||||
border: 1px solid #ff9822;
|
||||
}
|
||||
.upload-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 15px;
|
||||
.row-lable {
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
.upload-list {
|
||||
& > div {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
& > :last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
@ -1,168 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 附件上传 -->
|
||||
<el-dialog
|
||||
:visible.sync="showUpload"
|
||||
width="30%"
|
||||
append-to-body
|
||||
destroy-on-close
|
||||
custom-class="my-dialog-container"
|
||||
>
|
||||
<div slot="title" class="my-dialog-title">附件上传</div>
|
||||
<FileUpload
|
||||
v-model="list"
|
||||
:isShowTip="false"
|
||||
v-loading="fileLoading"
|
||||
v-if="!showTitle"
|
||||
>
|
||||
<el-button size="mini" type="primary">上传培训情况附件</el-button>
|
||||
</FileUpload>
|
||||
<div v-if="showTitle" v-loading="fileLoading">
|
||||
<FileUpload v-model="list2" :isShowTip="false">
|
||||
<el-button size="mini" type="primary">上传工作内容证明、职称证书等附件</el-button>
|
||||
</FileUpload>
|
||||
</div>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button
|
||||
size="small"
|
||||
type="primary"
|
||||
icon="el-icon-my-save"
|
||||
@click="fileSubmit()"
|
||||
>提交</el-button
|
||||
>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
showUpload: false,
|
||||
fileLoading: true,
|
||||
list: [],
|
||||
// list1: [],
|
||||
list2: [],
|
||||
//培训
|
||||
filelist: {
|
||||
id: null,
|
||||
assessmentFilename: "",
|
||||
assessmentResultsUrl: "",
|
||||
},
|
||||
//工作
|
||||
workList: {
|
||||
//职称证书
|
||||
titleCertificate: "",
|
||||
titleFilename: "",
|
||||
// //工作证明
|
||||
// workCertificate: "",
|
||||
// workFilename: "",
|
||||
id: null,
|
||||
},
|
||||
type: "",
|
||||
};
|
||||
},
|
||||
props: {
|
||||
showTitle: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
//打开弹窗
|
||||
async open(e, s) {
|
||||
this.showUpload = true;
|
||||
this.fileLoading = true;
|
||||
this.list = [];
|
||||
// this.list1 = [];
|
||||
this.list2 = [];
|
||||
this.type = s;
|
||||
if (s == "培训") {
|
||||
//获取培训情况的详情
|
||||
this.filelist.id = e;
|
||||
let msg1 = await this.$api.training.detailTraining(e);
|
||||
if (msg1.status == 200) this.fileLoading = false;
|
||||
if (
|
||||
msg1.result.assessmentResultsUrl &&
|
||||
msg1.result.assessmentFilename
|
||||
) {
|
||||
this.list = this.begin(
|
||||
msg1.result.assessmentResultsUrl,
|
||||
msg1.result.assessmentFilename
|
||||
);
|
||||
}
|
||||
} else if (s == "工作") {
|
||||
this.workList.id = e;
|
||||
let msg1 = await this.$api.work.detailWork(e);
|
||||
if (msg1.status == 200) this.fileLoading = false;
|
||||
// if (msg1.result.workCertificate && msg1.result.workFilename) {
|
||||
// this.list1 = this.begin(
|
||||
// msg1.result.workCertificate,
|
||||
// msg1.result.workFilename
|
||||
// );
|
||||
// }
|
||||
if (msg1.result.titleCertificate && msg1.result.titleFilename) {
|
||||
this.list2 = this.begin(
|
||||
msg1.result.titleCertificate,
|
||||
msg1.result.titleFilename
|
||||
);
|
||||
}
|
||||
}
|
||||
},
|
||||
//点击上传文件弹窗的确认按钮
|
||||
async fileSubmit() {
|
||||
if (this.type == "培训") {
|
||||
let newList = this.submit(this.list);
|
||||
this.filelist.assessmentFilename = newList[0].join(",");
|
||||
this.filelist.assessmentResultsUrl = newList[1].join(",");
|
||||
let msg = await this.$api.training.updateTraining(this.filelist);
|
||||
if (msg.status == 200)
|
||||
this.$message({
|
||||
type: "success",
|
||||
message: `修改成功!`,
|
||||
});
|
||||
} else if (this.type == "工作") {
|
||||
// let newList1 = this.submit(this.list1);
|
||||
// this.workList.workFilename = newList1[0].join(",");
|
||||
// this.workList.workCertificate = newList1[1].join(",");
|
||||
let newList2 = this.submit(this.list2);
|
||||
this.workList.titleFilename = newList2[0].join(",");
|
||||
this.workList.titleCertificate = newList2[1].join(",");
|
||||
let msg = await this.$api.work.updateWork(this.workList);
|
||||
if (msg.status == 200)
|
||||
this.$message({
|
||||
type: "success",
|
||||
message: `修改成功!`,
|
||||
});
|
||||
}
|
||||
this.showUpload = false;
|
||||
},
|
||||
//进入时的循环函数
|
||||
begin(a, b) {
|
||||
let arr1 = [];
|
||||
let arr2 = [];
|
||||
let arr3 = [];
|
||||
arr1 = a.split(",");
|
||||
arr2 = b.split(",");
|
||||
arr1.forEach((value, index) => {
|
||||
arr3.push({
|
||||
url: value,
|
||||
name: arr2[index],
|
||||
});
|
||||
});
|
||||
return arr3;
|
||||
},
|
||||
//提交时的循环函数
|
||||
submit(a) {
|
||||
let arr1 = [];
|
||||
let arr2 = [];
|
||||
a.forEach((value, index) => {
|
||||
arr1.push(value.name);
|
||||
arr2.push(value.url);
|
||||
});
|
||||
return [arr1, arr2];
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped></style>
|
@ -1,103 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-dialog
|
||||
:visible.sync="editVisible"
|
||||
width="40%"
|
||||
append-to-body
|
||||
destroy-on-close
|
||||
custom-class="my-dialog-container"
|
||||
>
|
||||
<div slot="title" class="my-dialog-title">签名</div>
|
||||
<div class="content">
|
||||
<VueSignaturePad id="signature" ref="signaturePad" :options="options" />
|
||||
</div>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="success" plain @click="save">保存</el-button>
|
||||
<el-button type="danger" plain @click="close">关闭</el-button>
|
||||
<el-button type="danger" plain @click="resume">重置</el-button>
|
||||
<el-button type="primary" plain @click="undo">撤销</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
editVisible: false,
|
||||
options: {
|
||||
penColor: "#000",
|
||||
minWidth: 2, //控制画笔最小宽度
|
||||
maxWidth: 2, //控制画笔最大宽度
|
||||
},
|
||||
// uploadImgUrl: process.env.VUE_APP_BASE_API2 + "/common/uploadMinioonfile", // 上传的图片服务器地址
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
open() {
|
||||
this.editVisible = true;
|
||||
},
|
||||
//撤销
|
||||
undo() {
|
||||
this.$refs.signaturePad.undoSignature();
|
||||
},
|
||||
//重置
|
||||
resume() {
|
||||
this.$refs.signaturePad.clearSignature();
|
||||
},
|
||||
//保存
|
||||
async save() {
|
||||
const { isEmpty, data } = this.$refs.signaturePad.saveSignature();
|
||||
if (isEmpty) {
|
||||
this.$message({
|
||||
type: "error",
|
||||
message: "请您完成签名",
|
||||
});
|
||||
} else {
|
||||
var form1 = new FormData();
|
||||
form1.append("file", this.dataURLtoFile(data, "我的签名"));
|
||||
let msg1 = await this.$api.infoMsg.updateFile(form1);
|
||||
console.log(msg1);
|
||||
// 拼接图片并且显示;
|
||||
this.$emit("getWrite", msg1.result.url);
|
||||
this.editVisible = false;
|
||||
this.$message({
|
||||
type: "success",
|
||||
message: "保存成功",
|
||||
});
|
||||
}
|
||||
},
|
||||
dataURLtoFile(dataurl, filename) {
|
||||
var arr = dataurl.split(","),
|
||||
mime = arr[0].match(/:(.*?);/)[1],
|
||||
bstr = atob(arr[1]),
|
||||
n = bstr.length,
|
||||
u8arr = new Uint8Array(n);
|
||||
while (n--) {
|
||||
u8arr[n] = bstr.charCodeAt(n);
|
||||
}
|
||||
return new File([u8arr], filename, { type: mime });
|
||||
},
|
||||
close() {
|
||||
this.editVisible = false;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
#signature {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border: double 3px transparent;
|
||||
border-radius: 2px;
|
||||
background-image: linear-gradient(white, #ffffff),
|
||||
radial-gradient(circle at top left, #4bc5e8, #9f6274);
|
||||
background-origin: border-box;
|
||||
background-clip: content-box, border-box;
|
||||
}
|
||||
.content {
|
||||
width: 100%;
|
||||
height: 450px;
|
||||
padding: 20px;
|
||||
}
|
||||
</style>
|
Loading…
Reference in new issue