删除无用文件

duhanyu
杜函宇 2 years ago
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,481 +0,0 @@
<template>
<div>
<header>
<i class="el-icon-warning-outline"></i>
提示上传附件可以上传学历学位证书等文件支持jpgpngjpegpdfword等格式
</header>
<div class="tableDistance">
<el-table
:data="tableData"
style="width: 100%"
v-loading="loading"
border
>
<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="graduateSchool" label="毕业院校">
</el-table-column>
<el-table-column prop="department" label="系别">
<template slot-scope="scope">
{{ filterDict(scope.row.department, "department") }}
</template>
</el-table-column>
<el-table-column prop="speciality" label="专业"> </el-table-column>
<el-table-column prop="education" label="学历">
<template slot-scope="scope">
{{ filterDict(scope.row.education, "education") }}
</template>
</el-table-column>
<el-table-column prop="degree" label="学位">
<template slot-scope="scope">
{{ filterDict(scope.row.degree, "degree") }}
</template>
</el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<div>
<button
v-hasPermi="[
'inspector:global:educationBacEdit',
'inspector:global:educationBacEdit:s',
]"
class="btnStyle"
@click="handleEdit(scope.$index, scope.row)"
>
编辑
</button>
<button
v-hasPermi="[
'inspector:global:educationBacDel',
'inspector:global:educationBacDel:s',
]"
class="btnStyle green"
@click="handleDelete(scope.$index, scope.row)"
>
删除
</button>
</div>
</template>
</el-table-column>
<el-table-column prop="a9" label="上传附件">
<template slot-scope="scope">
<div>
<button
v-hasPermi="[
'inspector:global:educationBacUpload',
'inspector:global:educationUpload:s',
]"
class="btnStyle update"
@click="uploadFile(scope.$index, scope.row)"
>
上传附件
</button>
</div>
</template>
</el-table-column>
</el-table>
</div>
<!-- 附件上传 -->
<el-dialog
:visible.sync="showUpload"
width="30%"
append-to-body
destroy-on-close
custom-class="my-dialog-container"
:before-close="handleClose"
>
<div slot="title" class="my-dialog-title">附件上传</div>
<FileUpload v-model="filelist" :isShowTip="false">
<el-button size="mini" type="primary">上传附件</el-button>
</FileUpload>
<div slot="footer" class="dialog-footer">
<el-button
size="small"
type="primary"
icon="el-icon-my-save"
@click="fileSubmit()"
>提交</el-button
>
</div>
</el-dialog>
<!-- 教育培训经历dialog -->
<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">{{ 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="begainTime">
<el-date-picker
v-model="form.begainTime"
type="date"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择时间"
>
</el-date-picker>
</el-form-item>
<el-form-item label="结束时间:" prop="endTime">
<el-date-picker
v-model="form.endTime"
type="date"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择时间"
>
</el-date-picker>
</el-form-item>
<el-form-item label="毕业院校:" prop="graduateSchool">
<el-input
v-model="form.graduateSchool"
placeholder="请输入院校名称"
></el-input>
</el-form-item>
<el-form-item label="系别:" prop="department">
<el-select v-model="form.department">
<el-option
:label="dict.dictLabel"
:value="dict.dictValue.toString()"
v-for="dict in dict.department"
:key="dict.dictValue"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="专业:" prop="speciality">
<el-input
v-model="form.speciality"
placeholder="请输入专业"
></el-input>
</el-form-item>
<el-form-item label="学历:" prop="education">
<el-select v-model="form.education">
<el-option
:label="dict.dictLabel"
:value="dict.dictValue.toString()"
v-for="dict in dict.education"
:key="dict.dictValue"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="学位:" prop="degree">
<el-select v-model="form.degree">
<el-option
:label="dict.dictLabel"
:value="dict.dictValue.toString()"
v-for="dict in dict.degree"
:key="dict.dictValue"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="" prop="specialityTitle">
<el-radio-group v-model="form.specialityTitle">
<el-radio :label="1">第一学历</el-radio>
<el-radio :label="2">最高学历</el-radio>
</el-radio-group>
</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 {
getList,
addList,
deleteList,
updataList,
getListInfo,
} from "@/api/schoolMsg";
import { dictList } from "@/api/jcy";
export default {
props: {
//id
inspectorId: {
type: Number,
},
},
data() {
return {
dict: {},
filelist: [],
fileFrom: {},
//
showUpload: false,
//dialog
show: false,
//dialog
title: "",
//
loading: true,
//
tableData: [],
//
form: {
id: null,
inspectorId: null,
begainTime: "",
endTime: "",
graduateSchool: "",
department: "",
speciality: "",
education: "",
degree: "",
specialityTitle: 1,
educationPath: "",
},
queryParams: {
inspectorId: null,
},
//
rules: {
begainTime: [
{
required: true,
message: "请选择日期",
trigger: "change",
},
],
endTime: [
{
required: true,
message: "请选择日期",
trigger: "change",
},
],
graduateSchool: [
{ required: true, message: "请输入毕业院校", trigger: "blur" },
],
department: [
{
required: true,
message: "请输入系别",
trigger: "blur",
},
],
degree: [
{
required: true,
message: "请选择学位",
trigger: "change",
},
],
speciality: [
{ required: true, message: "请输入专业", trigger: "blur" },
],
education: [
{
required: true,
message: "请输入学历",
trigger: "blur",
},
],
},
};
},
created() {
this.queryParams.inspectorId = this.inspectorId;
this.form.inspectorId = this.inspectorId;
this.getDictList("department,education,degree");
},
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();
}
});
},
handleClose(done) {
this.filelist = [];
done();
},
/**文件上传提交 */
fileSubmit() {
if (this.filelist.length == 0) {
this.$modal.msgError("请上传文件!");
} else {
this.fileFrom.degreePath = [];
this.fileFrom.degreePathname = [];
this.filelist.forEach((item) => {
this.fileFrom.degreePath.push(item.url);
this.fileFrom.degreePathname.push(item.name);
});
this.fileFrom.degreePath = this.fileFrom.degreePath.toString();
this.fileFrom.degreePathname = this.fileFrom.degreePathname.toString();
updataList(this.fileFrom).then((res) => {
this.$modal.msgSuccess("修改成功");
this.showUpload = false;
this.filelist = [];
this.getList();
});
}
},
/**打开上传附件 */
uploadFile(index, row) {
getListInfo(row.id).then((res) => {
this.fileFrom = res.result;
if (this.fileFrom.degreePath) {
this.fileFrom.degreePath = this.fileFrom.degreePath.split(",");
this.fileFrom.degreePathname =
this.fileFrom.degreePathname.split(",");
this.fileFrom.degreePath.forEach((item, index) => {
this.filelist.push({
name: this.fileFrom.degreePathname[index],
url: item,
});
});
}
this.showUpload = true;
});
},
/**新增 */
openDialog() {
this.reset();
this.title = "新增教育背景";
this.show = true;
},
/**表格数据 */
getList() {
this.loading = true;
getList(this.queryParams).then((res) => {
this.tableData = res.result.records;
this.loading = false;
});
},
/**重置 */
reset() {
this.form = {
id: null,
inspectorId: this.inspectorId,
begainTime: "",
endTime: "",
graduateSchool: "",
department: "",
speciality: "",
education: "",
degree: "",
specialityTitle: 1,
educationPath: "",
};
this.resetForm("form");
},
/**提交 */
onSubmit(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
if (this.form.id != null) {
updataList(this.form).then((res) => {
this.$modal.msgSuccess("修改成功");
this.show = false;
this.getList();
});
} else {
addList(this.form).then((res) => {
this.$modal.msgSuccess("新增成功");
this.show = false;
this.getList();
});
}
} else {
return false;
}
});
},
/**编辑 */
handleEdit(index, row) {
this.reset();
getListInfo(row.id).then((res) => {
this.title = "编辑教育背景";
this.form = res.result;
this.show = true;
});
},
/**删除 */
handleDelete(index, row) {
const infoIds = row.id;
this.$modal
.confirm("确认删除该条数据项?")
.then(function () {
return deleteList(infoIds);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => {});
},
},
};
</script>
<style lang="scss" scoped>
header {
font-size: 14px;
font-weight: 400;
color: #e61c1c;
line-height: 24px;
}
.tableDistance {
margin-top: 15px;
}
.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-left: 8px;
}
.update {
background: #ebf5ff;
border: 1px solid #a1cbf8;
color: #0e7cf4;
}
</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,393 +0,0 @@
<template>
<div>
<header>
<i class="el-icon-warning-outline"></i>
提示上传附件可以上传工作内容证明职称证书等文件支持jpgpngjpegpdfword等格式
</header>
<div class="tableDistance">
<el-table
:data="tableData"
:border="true"
style="width: 100%"
v-loading="loading"
>
<el-table-column prop="begainTime" label="开始日期" width="110">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.begainTime, "{y}-{m}-{d}") }}</span>
</template>
</el-table-column>
<el-table-column prop="endTime" label="结束日期" width="110">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.endTime, "{y}-{m}-{d}") }}</span>
</template>
</el-table-column>
<el-table-column prop="workPlace" label="工作单位"> </el-table-column>
<el-table-column prop="workUnit" label="工作部门"> </el-table-column>
<el-table-column prop="workUnit" label="从事工作"> </el-table-column>
<el-table-column prop="duty" label="职务">
<template slot-scope="scope">
{{ filterDict(scope.row.duty, "duty") }}
</template>
</el-table-column>
<el-table-column prop="title" label="职称">
<template slot-scope="scope">
{{ filterDict(scope.row.title, "title") }}
</template>
</el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<div>
<button
class="btnStyle"
@click="handleUpdate(scope.$index, scope.row)"
v-hasPermi="[
'inspector:global:workEdit',
'inspector:global:workEdit:s',
]"
>
编辑
</button>
<button
class="btnStyle green"
@click="handleDelete(scope.$index, scope.row)"
v-hasPermi="[
'inspector:global:workDel',
'inspector:global:workDel:s',
]"
>
删除
</button>
</div>
</template>
</el-table-column>
<el-table-column label="上传附件">
<template slot-scope="scope">
<div>
<button
class="btnStyle update"
@click="handleEdit(scope.$index, scope.row)"
v-hasPermi="[
'inspector:global:workUpload',
'inspector:global:workUpload:s',
]"
>
上传附件
</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="100px"
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="workPlace">
<el-input
v-model="form.workPlace"
placeholder="请输入单位名称"
></el-input>
</el-form-item>
<el-form-item label="工作部门:" prop="workUnit">
<el-input
v-model="form.workUnit"
placeholder="请输入部门名称"
></el-input>
</el-form-item>
<el-form-item label="职称:" prop="title">
<!-- <el-input v-model="form.title" placeholder="请输入职称"></el-input> -->
<el-select v-model="form.title" placeholder="请选择">
<el-option
v-for="item in dict.title"
:key="item.dictValue"
:label="item.dictLabel"
:value="item.dictValue.toString()"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="职务:" prop="duty">
<el-select v-model="form.duty" placeholder="请选择">
<el-option
v-for="item in dict.duty"
:key="item.dictValue"
:label="item.dictLabel"
:value="item.dictValue.toString()"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="从事工作:" prop="undertake">
<el-input
type="textarea"
v-model="form.undertake"
placeholder="请输入内容"
></el-input>
</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="work" :showTitle="showTitle"></fileDiaglog>
</div>
</template>
<script>
import fileDiaglog from "../../userMsgPage/components/fileDiaglog.vue";
import { dictList } from "@/api/jcy/index.js";
export default {
data() {
return {
//
dict: {},
showTitle: true,
//
distinguish: "",
loading: true,
//
load1: true,
show: false,
tableData: [],
form: {
begainTime: "",
duty: "",
endTime: "",
inspectorId: undefined,
title: "",
undertake: "",
workPlace: "",
workUnit: "",
},
rules: {
begainTime: [
{ required: true, message: "请选择开始时间", trigger: "blur" },
],
endTime: [
{ required: true, message: "请选择结束时间", trigger: "blur" },
],
workPlace: [
{
required: true,
message: "单位名称不能为空",
trigger: "blur",
},
],
workUnit: [
{ required: true, message: "工作部门不能为空", trigger: "blur" },
],
title: [{ required: true, message: "职称不能为空", trigger: "blur" }],
duty: [{ required: true, message: "请选择职务", trigger: "blur" }],
undertake: [
{
required: true,
message: "从事工作不能为空",
trigger: "blur",
},
],
},
};
},
created() {
//id
this.form.inspectorId = this.inspectorId;
dictList({
list: "duty,title",
}).then((res) => {
if (res.status == 200) {
for (let key in res.result) {
this.dict[key] = res.result[key];
}
this.getList();
}
});
},
props: {
inspectorId: {
type: Number,
default: 0,
},
},
components: {
fileDiaglog,
},
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 : "未知";
},
//
async getList() {
this.loading = true;
let msg = await this.$api.work.listWork({
inspectorId: this.form.inspectorId,
});
if (msg.status == 200) this.loading = false;
this.tableData = msg.result.records;
},
//
reset() {
// this.$refs.formName.resetFields();
this.form = {
begainTime: "",
duty: "",
endTime: "",
//id
inspectorId: this.inspectorId,
title: "",
undertake: "",
workPlace: "",
workUnit: "",
};
},
//
async workAddList() {
this.distinguish = "新增";
this.reset();
this.show = true;
this.load1 = false;
},
//
async handleUpdate(index, row) {
this.show = true;
this.load1 = true;
this.distinguish = "修改";
//
let msg1 = await this.$api.work.detailWork(row.id);
if (msg1.status == 200) this.load1 = false;
this.form = msg1.result;
},
//
submit() {
this.$refs.formName.validate(async (valid) => {
if (valid) {
if (this.distinguish === "新增") {
let msg = await this.$api.work.addWork(this.form);
if (msg.status == 200) this.dialog();
} else if (this.distinguish === "修改") {
let msg = await this.$api.work.updateWork(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.work.deleteWork(row.id);
if (msg1.status == 200) {
this.$message({
type: "success",
message: "删除成功!",
});
this.getList();
}
})
.catch(() => {
this.$message({
type: "info",
message: "已取消删除",
});
});
},
handleEdit(index, row) {
this.$refs.work.open(row.id, "工作");
},
},
};
</script>
<style lang="scss" scoped>
header {
font-size: 14px;
font-weight: 400;
color: #e61c1c;
line-height: 24px;
}
.tableDistance {
margin-top: 15px;
}
.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-left: 8px;
}
.update {
background: #ebf5ff;
border: 1px solid #a1cbf8;
color: #0e7cf4;
}
</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,858 +0,0 @@
<template>
<div class="child-container">
<div class="table-list" v-show="!info">
<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="name">
<el-input v-model="queryParams.name" clearable></el-input>
</el-form-item>
<el-form-item label="性别:" prop="sex">
<el-select v-model="queryParams.sex" clearable>
<el-option
:label="sex.label"
:value="sex.value"
v-for="sex in dictList.sex"
:key="sex.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="部门:" prop="division">
<el-input v-model="queryParams.division" clearable></el-input>
</el-form-item>
<el-form-item label="执法证号:" prop="lawNumber">
<el-input v-model="queryParams.lawNumber" clearable></el-input>
</el-form-item>
<el-form-item label="状态:" prop="status">
<el-select v-model="queryParams.status" clearable>
<el-option label="停用中" :value="1"></el-option>
<el-option label="启用中" :value="2"></el-option>
</el-select>
</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-row :gutter="10" class="mb8 table-top-btn">
<!-- <el-col :span="1.5">
<el-button
v-hasPermi="['inspector:global:score']"
plain
icon="el-icon-star-off"
size="mini"
@click="conditionSet()"
>评分条件设置</el-button
>
</el-col> -->
<el-col :span="1.5">
<el-button
v-hasPermi="['inspector:global:export']"
plain
icon="el-icon-edit-outline"
size="mini"
:disabled="multiple"
@click="openModel(0)"
>导出</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['inspector:global:Import']"
plain
icon="el-icon-my-import"
size="mini"
@click="handleImport()"
>导入</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['inspector:global:download']"
type="text"
icon="el-icon-download"
size="mini"
@click="openModel(1)"
>导入模版下载</el-button
>
</el-col>
</el-row>
<el-table
v-loading="loading"
:data="tableList"
height="83%"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column type="index" label="序号" width="55">
</el-table-column>
<el-table-column label="人员姓名" align="center" prop="name" />
<el-table-column label="性别" align="center" prop="sex">
<template slot-scope="scope">
{{
scope.row.sex == 1 ? "男" : scope.row.sex == 2 ? "女" : "未知"
}}
</template>
</el-table-column>
<el-table-column label="职务" align="center" prop="duty">
<template slot-scope="scope">
{{ filterDict(scope.row.duty, "duty") }}
</template>
</el-table-column>
<el-table-column label="来源" align="center" prop="source">
<template slot-scope="scope">
{{ filterDict(scope.row.source, "source") }}
</template>
</el-table-column>
<el-table-column label="执法证号" align="center" prop="lawNumber">
<!-- <template slot-scope="scope">
{{ filterDict(scope.row.lawNumber, "lawNumber") }}
</template> -->
</el-table-column>
<el-table-column label="执法证有效期" align="center" prop="lawTime">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.lawTime, "{y}-{m}-{d}") }}</span>
</template>
</el-table-column>
<el-table-column
label="部门"
align="center"
prop="division"
:show-overflow-tooltip="true"
>
<template slot-scope="scope">
{{ filterDict(scope.row.division, "division") }}
</template>
</el-table-column>
<el-table-column
label="检查员层级"
align="center"
prop="inspectorLevel"
>
<template slot-scope="scope">
{{ filterDict(scope.row.inspectorLevel, "inspectorLevel") }}
</template>
</el-table-column>
<el-table-column
label="检查员类别"
align="center"
prop="inspectorType"
:show-overflow-tooltip="true"
>
<template slot-scope="scope">
{{ scope.row.inspectorType }}
</template>
</el-table-column>
<el-table-column
label="检查员级别"
align="center"
prop="inspectorGrade"
>
<template slot-scope="scope">
{{ filterDict(scope.row.inspectorGrade, "inspectorGrade") }}
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="status">
<template slot-scope="scope">
{{
scope.row.status == 1
? "停用中"
: scope.row.status == 2
? "启用中"
: "未知"
}}
</template>
</el-table-column>
<el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
<el-button
v-hasPermi="['inspector:global:info']"
size="mini"
plain
type="primary"
@click="getInfo(scope.row)"
>详情</el-button
>
<el-button
v-hasPermi="['inspector:global:state']"
size="mini"
plain
:type="scope.row.status == 1 ? 'success' : 'danger'"
@click="updata(scope.row)"
>{{
scope.row.status == 1
? "启用"
: scope.row.status == 2
? "停用"
: "未知"
}}</el-button
>
</template>
</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 class="table-info" v-if="info">
<userMsgPage
:showBack="true"
@getSonData="getSonData"
:inspectorId="inspectorId"
></userMsgPage>
</div>
<el-dialog
:visible.sync="showSet"
width="35%"
append-to-body
destroy-on-close
custom-class="my-dialog-container"
>
<div slot="title" class="my-dialog-title">评分条件设置</div>
<div class="my-dialog-content">
<div class="content-head">
<i class="el-icon-warning-outline"></i>
提示选择相应条件后系统会根据计算方式自动计算出评分
</div>
<!-- <div class="contentSelect"> -->
<div v-for="(item, index) in formData.list" :key="index">
<div class="contentAdd">
<span>因子1:</span>
<div class="itemContent">
<el-select
v-model="formData.value"
size="small"
placeholder="请选择"
>
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</div>
<div class="itemContent">
<el-input
placeholder="请输入内容"
v-model="formData.value1"
size="small"
>
<template slot="prepend">权重</template>
</el-input>
</div>
<div
:class="[index > 0 ? 'deleteIcon' : 'contentIcon']"
@click="addCondition(index)"
>
<i
:class="[
index > 0
? 'el-icon-remove-outline'
: 'el-icon-circle-plus-outline',
]"
></i>
</div>
</div>
</div>
</div>
<div class="manner">
<span>计算方式:</span>
<div class="inputM">
<el-select v-model="formData.value" size="small" placeholder="请选择">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</div>
</div>
<div slot="footer" class="my-dialog-footer">
<el-button icon="el-icon-refresh-left">重置</el-button>
<el-button type="primary" icon="el-icon-s-promotion">提交</el-button>
</div>
</el-dialog>
<!-- 下载模版 -->
<el-dialog
:visible.sync="uploadTel"
width="400px"
append-to-body
custom-class="my-dialog-container"
>
<div slot="title" class="my-dialog-title">{{ ModelTitle }}</div>
<div class="upload-list">
<div
v-for="item in telList"
:key="item.value"
@click="uploadTemplate(item.value, item.lable)"
>
<el-link type="primary">
{{ item.lable }}<span v-if="ModelTitle != '导出数据'"></span>
<span v-else></span>
</el-link>
</div>
</div>
</el-dialog>
<!-- 用户导入对话框 -->
<el-dialog
:visible.sync="upload.open"
width="400px"
append-to-body
custom-class="my-dialog-container"
destroy-on-close
>
<div slot="title" class="my-dialog-title">{{ upload.title }}</div>
<div class="upload-row">
<div class="row-lable">数据模块</div>
<div class="row-value">
<el-select v-model="uploadData.value" placeholder="请选择">
<el-option
v-for="item in telList"
:key="item.value"
:label="item.lable"
:value="item.value"
></el-option>
</el-select>
</div>
</div>
<el-upload
ref="upload"
:limit="1"
accept=".xlsx,.xls,"
:headers="upload.headers"
:action="upload.url"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
:on-error="handleFileError"
:auto-upload="false"
:data="uploadData"
:file-list="fileList"
:on-change="fileChange"
drag
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<!-- <div class="el-upload__tip" slot="tip">
<el-checkbox v-model="upload.updateSupport" />
是否更新已经存在的用户数据
</div> -->
<span style="color: red"
>仅允许导入xlsxlsx格式文件请按照数据格式要求导入数据</span
>
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button size="small" type="primary" @click="submitFileForm"
> </el-button
>
<el-button size="small" @click="upload.open = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { Loading } from "element-ui";
var downloadLoadingInstance;
import userMsgPage from "../userMsgPage/index2.vue";
// import {
// getList,
// uploadFile,
// dictList,
// updataRow,
// exportFile,
// exportExcel,
// } from "@/api/jcy";
import gridsTitle from "../components/gridsTitle";
export default {
components: {
gridsTitle,
userMsgPage,
},
data() {
return {
fileList: [],
ModelTitle: "",
currentTab: 0, //
ids: [],
multiple: true,
//
dict: {},
inspectorId: null,
//
showSet: false,
//
formData: {
value1: "",
list: [
{
a1: "1",
a2: "2",
},
],
},
options: [],
//
info: false,
//
loading: true,
//
total: 0,
//
queryParams: {
name: "",
sex: "",
lawNumber: "",
division: "",
current: 1,
size: 10,
status: "",
},
//
tableList: [],
//
uploadTel: false,
telList: [
{ lable: "基础信息", value: 0 },
{ lable: "培训情况", value: 1 },
{ lable: "聘任信息", value: 2 },
{ lable: "奖惩信息", value: 3 },
{ lable: "年度考核情况", value: 4 },
],
//
uploadData: {
value: 0,
},
upload: {
//
open: false,
//
title: "",
//
isUploading: false,
//
updateSupport: 0,
//
headers: {
Authentication: localStorage.getItem("MSSM-LIAONING__TOKEN"),
},
//
url: process.env.VUE_APP_BASE_API2 + "/common/importExcel",
},
};
},
created() {
this.getDict(
"duty,source,inspectorLevel,inspectorType,inspectorGrade,division"
);
},
methods: {
/**表格全选 */
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.id);
this.multiple = !selection.length;
},
/**过滤字典 */
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 : value;
},
/**获取字典列表 */
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();
});
},
/**停用 */
updata(row) {
let title = "";
let params = {};
if (row.status == 1) {
params.id = row.id;
params.status = 2;
title = "您确定要启用吗?";
} else {
params.id = row.id;
params.status = 1;
title = "您确定要停用吗?";
}
this.$confirm(`${title}`, "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(async () => {
updataRow(params).then((res) => {
this.$modal.msgSuccess("修改成功");
this.getList();
});
})
.catch(() => {
this.$modal.msgWarning("已取消操作!");
});
},
/**导出或者下载 */
openModel(index) {
this.currentTab = index;
if (index == 0) {
this.ModelTitle = "导出数据";
} else {
this.ModelTitle = "模版下载";
}
this.uploadTel = true;
},
/**下载模板、导出 */
uploadTemplate(value, lable) {
if (this.currentTab == 1) {
let suffix = "xlsx";
let baseUrl =
location.origin +
process.env.VUE_APP_PREFIX +
`/static/file/${lable}.${suffix}`;
const link = document.createElement("a");
link.href = baseUrl;
link.style.display = "none";
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
// let params = {
// value,
// };
// uploadFile(params).then((res) => {
// this.uploadFile(
// res.data.data.result.url,
// res.data.data.result.originalFilename
// );
// });
} else {
let params = {
value: value,
ids: this.ids.toString(),
};
exportExcel(params).then((res) => {
if (res.data.code == 200) {
this.uploadFile(
res.data.data.result.url,
res.data.data.result.originalFilename
);
}
});
}
},
// /** */
// handleExport() {
// let ids = this.ids.toString();
// exportFile(ids).then((res) => {
// if (res.data.status == 200) {
// this.uploadFile(
// res.data.result.url,
// res.data.result.originalFilename
// );
// }
// });
// },
fileChange(file, fileList) {
this.fileList = fileList;
},
/** 导入按钮操作 */
handleImport() {
this.upload.title = "检查员信息导入";
this.upload.open = true;
},
//
handleFileUploadProgress(event, file, fileList) {
console.log("wenjian", fileList);
this.upload.isUploading = true;
},
//
handleFileError(err, file, fileList) {
this.fileList = [];
downloadLoadingInstance.close();
let myError = JSON.parse(err.toString().replace("Error: ", "")); //
this.$modal.msgError(myError.message);
},
//
handleFileSuccess(response, file, fileList) {
downloadLoadingInstance.close();
this.upload.open = false;
this.upload.isUploading = false;
this.$refs.upload.clearFiles();
this.fileList = [];
this.$alert(
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
response.msg +
"</div>",
"导入结果",
{ dangerouslyUseHTMLString: true }
);
if (this.uploadData.value == 0) {
this.getList();
}
},
//
submitFileForm() {
console.log(this.fileList, "文件");
if (this.fileList.length == 0) {
this.$modal.msgError("请先上传文件!");
return;
}
downloadLoadingInstance = Loading.service({
text: "正在导入数据,请稍候",
spinner: "el-icon-loading",
background: "rgba(0, 0, 0, 0.7)",
});
this.$refs.upload.submit();
},
//
conditionSet() {
this.showSet = true;
},
addCondition(e) {
if (e == 0) {
this.formData.list.push({
a1: "1",
a2: "2",
});
} else {
this.formData.list.splice(0, 1);
}
},
/**打开详情页 */
getInfo(rows) {
this.inspectorId = rows.id;
this.info = !this.info;
},
/**详情返回 */
getSonData(e) {
this.info = e.isShow;
this.resetQuery();
},
/**获取表格数据 */
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.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,158 +0,0 @@
<template>
<div class="child-container">
<div class="pass-container">
<el-form
ref="form"
:model="form"
:rules="rules"
label-position="right"
label-width="145px"
:show-message="false"
:status-icon="true"
class="pass-from"
>
<el-form-item label="机构:">
<el-input v-model="form.name1" readonly></el-input>
</el-form-item>
<el-form-item label="姓名:">
<el-input v-model="form.realName" readonly></el-input>
</el-form-item>
<el-form-item label="部门:">
<el-input v-model="form.orgName" readonly></el-input>
</el-form-item>
<el-form-item label="输入旧密码:" prop="oldPassword">
<el-input
v-model="form.oldPassword"
placeholder="请输入旧密码"
></el-input>
</el-form-item>
<el-form-item label="输入新密码:" prop="newPassword">
<el-input
v-model="form.newPassword"
placeholder="请输入新密码"
></el-input>
</el-form-item>
<el-form-item label="重新输入新密码:" prop="checkPass">
<el-input
v-model="form.checkPass"
placeholder="请输入确认密码"
></el-input>
</el-form-item>
<el-form-item>
<el-button
size="small"
@click="resetForm('form')"
icon="el-icon-my-reset"
>重置</el-button
>
<el-button
size="small"
type="primary"
icon="el-icon-my-save"
@click="onSubmit('form')"
>提交</el-button
>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script>
import { changePass } from "@/api/external";
export default {
data() {
const equalToPassword = (rule, value, callback) => {
if (this.form.newPassword !== value) {
callback(new Error("两次输入的密码不一致"));
} else {
callback();
}
};
return {
form: {
name1: "辽宁省药品监督管理局",
realName: "",
orgName: "",
oldPassword: "",
newPassword: "",
checkPass: "",
username: "",
},
rules: {
oldPassword: [
{ required: true, message: "请输入旧密码", trigger: "blur" },
],
newPassword: [
{ required: true, message: "请输入新密码", trigger: "blur" },
// {
// pattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[^]{8,16}$/,
// message: " 8 16 ",
// trigger: "blur",
// },
],
checkPass: [
{ required: true, message: "请输入确认密码", trigger: "blur" },
{ required: true, validator: equalToPassword, trigger: "blur" },
],
},
};
},
created() {
let user = this.$store.state.myselfPermission.userData;
this.form.realName = user.realName;
this.form.orgName = user.orgName;
this.form.username = user.username;
},
methods: {
onSubmit(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
let data = {
oldPassword: this.form.oldPassword,
newPassword: this.form.newPassword,
checkPass: this.form.checkPass,
username: this.form.username,
};
changePass(data).then((res) => {
this.$modal.msgSuccess("修改成功");
this.resetForm();
});
} else {
return false;
}
});
},
resetForm() {
this.form.oldPassword = "";
this.form.newPassword = "";
this.form.checkPass = "";
},
},
};
</script>
<style lang="scss" scoped>
.child-container {
height: 100%;
background: #f2f2f2;
.pass-container {
width: 100%;
height: 100%;
background: #fff;
padding-top: 46px;
border-radius: 6px;
}
.pass-from {
margin: auto;
width: 600px;
}
}
::v-deep .pass-from {
.el-form-item:nth-child(-n + 3) {
.el-input__inner {
border: none;
}
}
}
</style>

@ -1,196 +0,0 @@
<template>
<div class="people-container">
<div class="tab">
<div
class="tab-item"
v-for="(item, index) in tabList"
:key="index"
:class="currentIndex == index ? 'activeTab' : ''"
@click="clickTab(index)"
>
{{ item.name }}
</div>
</div>
<div id="people"></div>
</div>
</template>
<script>
import * as echarts from "echarts";
export default {
data() {
return {
currentIndex: 0,
tabList: [{ name: "工龄分布" }, { name: "性别分布" }],
queryData: [],
list: [],
myChart: null,
};
},
mounted() {
this.clickTab(0);
// this.initialize()
},
methods: {
clickTab(index) {
this.currentIndex = index;
// if (this.myChart != null && this.myChart != "" && this.myChart != undefined) {
// this.myChart.dispose();
// }
if (index == 0) {
this.ageList();
} else {
this.sexList();
}
},
//
async ageList() {
let msg = await this.$api.screenLeft.detectCompose();
this.queryData = msg.result;
this.list = [];
this.queryData.forEach((value) => {
this.list.push({
value: Number(value.pt) * 10,
name: value.durationGroup + "年",
});
});
let isExist = this.list.some((item) => {
return item.name.includes("10");
});
if (!isExist) {
this.list.push({ value: 0, name: "10年以上" });
}
this.initialize();
},
//
async sexList() {
let msg = await this.$api.screenLeft.sex();
this.queryData = msg.result;
this.list = [];
this.list.push(
{
value: Number(msg.result.level1) * 10,
name: "男",
},
{
value: Number(msg.result.level2) * 10,
name: "女",
}
);
this.initialize();
},
initialize() {
let _this = this;
this.myChart = echarts.init(document.getElementById("people"));
var data = this.list;
var colorList = ["#0E7CF4", "#91CC75", "#FAC858", "#EE6666"];
let option = {
legend: {
orient: "vertical",
x: "50%",
y: "30%",
itemWidth: this.getFontSize(75),
itemHeight: this.getFontSize(100),
itemGap: 15,
borderRadius: 10,
align: "left",
textStyle: {
color: "#333333",
fontSize: _this.getFontSize(140),
},
formatter: (params) => {
const dataAll = data.map((item) => Number(item.value));
const total = dataAll.reduce(
(x, y) => parseInt(x, 10) + parseInt(y, 10)
);
const value = Number(
data.filter((item) => item.name === params)[0].value
);
if (total === 0) {
return `${params}0.00%`;
}
// const name = params
return ` ${params}${((value * 100) / total).toFixed(2)}%`;
},
},
series: [
{
type: "pie",
radius: ["50%", "68%"],
center: ["25%", "60%"],
label: {
show: false,
normal: {
// formatter: '{c}',
position: "inside",
formatter: (params) => {
// return params.name + '\n' + params.value+'%'
return params.value + "%";
},
fontSize: 12,
},
},
data: data,
itemStyle: {
normal: {
color: function (params) {
return colorList[params.dataIndex];
},
label: {
show: false,
color: "#fff",
},
labelLine: {
show: false,
},
},
},
},
],
};
this.myChart.setOption(option, true);
},
},
};
</script>
<style lang="scss" scoped>
.people-container {
height: 100%;
width: 100%;
position: relative;
#people {
height: 100%;
width: 100%;
}
.tab {
position: absolute;
left: 50%;
top: 13px;
transform: translateX(-50%);
display: flex;
z-index: 8;
& > div {
cursor: pointer;
padding: 6px 10px;
font-size: 14px;
font-weight: normal;
color: #4d5158;
border: 1px solid #dbe0e8;
}
& > div:nth-child(1) {
border-radius: 4px 0px 0px 4px;
border-right: 0px;
}
& > div:nth-child(2) {
border-radius: 0px 4px 4px 0px;
border-left: 0px;
}
.activeTab {
background: #1e80eb;
border-color: #1e80eb;
color: #fff;
}
}
}
</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,162 +0,0 @@
<template>
<div class="zf-container">
<div class="tabgrap">
<div class="grap-item">
<div class="item-title">执法监督工作总量</div>
<div class="item-data">
<span class="data-value">34223</span>
<span class="data-lable"></span>
</div>
</div>
<div class="grap-item" style="margin-left: 20px">
<div class="item-title">日常监督检查开展</div>
<div class="item-data">
<span class="data-value">35323</span>
<span class="data-lable"></span>
</div>
</div>
</div>
<div id="zhi-fa"></div>
</div>
</template>
<script>
import * as echarts from "echarts";
export default {
data() {
return {};
},
mounted() {
this.initEcharts();
},
methods: {
initEcharts() {
let _this = this;
var myChart = echarts.init(document.getElementById("zhi-fa"));
const chartData = { min: 0, max: 100, value: 50 };
let option = {
series: [
{
name: "风险指数",
type: "gauge",
center: ["50%", "95%"],
radius: "80%",
min: chartData.min,
max: chartData.max,
startAngle: 180,
endAngle: 0,
splitNumber: 8,
axisLine: {
lineStyle: {
color: [
[0.25, "#FF6060"],
[0.5, "#F88129"],
[0.75, "#FCD678"],
[1, "#33BAAB"],
],
width: 15,
},
},
splitLine: {
// 线
show: false,
},
axisTick: {
// 线线
show: false,
},
axisLabel: false,
detail: {
fontSize: _this.getFontSize(100),
formatter: "{value}%",
color: "auto",
offsetCenter: ["0", "-32%"],
},
pointer: {
icon: "triangle",
show: true,
offsetCenter: [0, "-55%"],
itemStyle: {
color: "auto",
},
length: "10%",
width: "7%",
},
title: {
// fontSize: 12,
// offsetCenter: [0, -20],
},
data: [
{
title: {
show: true,
color: "#333333",
offsetCenter: [0, "-6%"],
fontSize: _this.getFontSize(140),
},
value: chartData.value,
name: "检查完成率",
},
],
},
],
};
myChart.setOption(option, true);
},
},
};
</script>
<style lang="scss" scoped>
.zf-container {
height: 100%;
width: 100%;
position: relative;
#zhi-fa {
height: 100%;
width: 100%;
}
.tabgrap {
position: absolute;
z-index: 100;
left: 50%;
top: 20px;
transform: translateX(-50%);
width: 100%;
display: flex;
align-items: center;
justify-content: center;
.grap-item {
width: 195px;
height: 89px;
background: url("../../../../assets/images/grapItem.png");
background-size: 100% 100%;
padding: 8px 20px;
.item-title {
font-size: 16px;
font-weight: 400;
color: #3d3f40;
}
.item-data {
margin-top: 6px;
span {
display: inline-block;
}
.data-value {
font-size: 36px;
font-family: "DIN-Medium";
font-weight: 500;
color: #0e7cf4;
}
.data-lable {
font-size: 14px;
font-weight: 400;
color: #3d3f40;
margin-left: 6px;
}
}
}
}
}
</style>

@ -1,301 +0,0 @@
<template>
<div class="map-container">
<div class="top-data-box">
<div class="data-collect">
<div class="collect-num">
<span>39</span>
<span></span>
</div>
<div class="collect-text">全省检验机构</div>
</div>
<div class="data-collect" style="margin-left: 150px">
<div class="collect-num">
<span>{{ allInspector }}</span>
<span></span>
</div>
<div class="collect-text">检查人员</div>
</div>
</div>
<div id="leafletMap"></div>
<div class="legend">
<div class="legend-item" v-for="(item, index) in legendList" :key="index">
<div class="item-color" :style="{ background: item.color }"></div>
<div class="item-text">{{ item.text }}</div>
</div>
</div>
</div>
</template>
<script>
import { dictList } from "@/api/jcy";
import { getinspectorNum } from "@/api/largeSize";
import cityJson from "@/utils/mapJson/liaoning-city.json";
import cityCenter from "@/utils/mapJson/cityCenter.json";
import province from "@/utils/mapJson/liaoning-province.json";
export default {
data() {
return {
cityData: {
沈阳市: 0,
大连市: 0,
鞍山市: 0,
抚顺市: 0,
本溪市: 0,
丹东市: 0,
锦州市: 0,
营口市: 0,
阜新市: 0,
辽阳市: 0,
盘锦市: 0,
铁岭市: 0,
朝阳市: 0,
葫芦岛市: 0,
沈抚示范区: 0,
},
allInspector: 0,
//
dict: {},
legendList: [
{ color: "#28599C", text: ">=600" },
{ color: "#3477B2", text: "400-599" },
{ color: "#4499CE", text: "200-399" },
{ color: "#59BBEC", text: "100-199" },
{ color: "#9BD3F5", text: "1-99" },
{ color: "#C5F0FF", text: "0" },
],
globalMap: null,
latitude: "40.904726971438656",
longitude: "122.80196410332945",
zoom: 8,
maxZoom: 18,
minZoom: 6,
layerObj: {
provinceLayer: null,
cityLayer: null,
textLayer1: null,
},
};
},
mounted() {
this.$nextTick(() => {
this.initMap();
this.getDict("workPlace");
});
},
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.getCityData().then((data) => {
this.initCityLayer(data);
this.initPoitCenter(data);
});
});
},
getCityData() {
return new Promise((resolve, reject) => {
getinspectorNum()
.then((res) => {
res.result.forEach((item) => {
let city = this.filterDict(item.workPlace, "workPlace");
for (let key in this.cityData) {
if (key == city) {
this.cityData[key] = item.count;
this.allInspector = this.allInspector + item.count;
}
}
});
resolve(this.cityData);
})
.catch((error) => {
reject(error);
});
});
},
/**过滤字典 */
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 : "未知";
},
initMap() {
this.globalMap = L.map("leafletMap", {
center: [this.latitude, this.longitude], // []
zoom: this.zoom, //
maxZoom: this.maxZoom,
minZoom: this.minZoom,
zoomControl: false, //
attributionControl: false, // leaflet
dragging: false,
doubleClickZoom: false,
scrollWheelZoom: false,
});
//
this.globalMap.createPane("provinceLayer");
this.globalMap.getPane("provinceLayer").style.zIndex = 504;
this.globalMap.getPane("provinceLayer").style.pointerEvents = "none";
this.layerObj.provinceLayer = L.layerGroup().addTo(this.globalMap);
//
this.globalMap.createPane("cityLayer");
this.globalMap.getPane("cityLayer").style.zIndex = 505;
this.globalMap.getPane("cityLayer").style.pointerEvents = "none";
this.layerObj.cityLayer = L.layerGroup().addTo(this.globalMap);
this.globalMap.createPane("textLayer1");
this.globalMap.getPane("textLayer1").style.zIndex = 506;
this.globalMap.getPane("textLayer1").style.pointerEvents = "none";
this.layerObj.textLayer1 = L.layerGroup().addTo(this.globalMap);
this.provinceLayer();
},
//
provinceLayer() {
let geojson = L.geoJSON(province, {
style: function () {
return {
weight: 2,
color: "#36527D",
fillColor: "",
fillOpacity: 0.7,
};
},
}).addTo(this.layerObj.provinceLayer);
this.globalMap.fitBounds(geojson.getBounds());
},
//
initCityLayer(data) {
let _this = this;
L.geoJSON(cityJson, {
style: function (geoJsonFeature) {
let num = data[geoJsonFeature.properties.name];
let style = {
weight: 1,
color: "#fff",
fillColor: "",
fillOpacity: 0.7,
};
if (num == 0) {
style.fillColor = "#C5F0FF";
} else if (num >= 1 && num <= 99) {
style.fillColor = "#9BD3F5";
} else if (num >= 100 && num <= 199) {
style.fillColor = "#59BBEC";
} else if (num >= 200 && num <= 399) {
style.fillColor = "#4499CE";
} else if (num >= 400 && num <= 599) {
style.fillColor = "#3477B2";
} else {
style.fillColor = "#28599C";
}
return style;
},
}).addTo(this.layerObj.cityLayer);
//
},
initPoitCenter(data) {
L.geoJSON(cityCenter, {
pointToLayer: function (feature, latlng) {
return L.marker(latlng, {
icon: L.divIcon({
className: "city-marker",
html: `<div class="marker-data">
<div class="data-box">
${data[feature.properties.fName]}
</div>
<div class="circle"></div>
<div class="city-name">${feature.properties.fName}</div>
</div>`,
}),
});
},
}).addTo(this.layerObj.textLayer1);
},
},
};
</script>
<style lang="scss" scoped>
.map-container {
height: 100%;
width: 100%;
position: relative;
#leafletMap {
height: 100%;
width: 100%;
}
.top-data-box {
position: absolute;
top: 30px;
left: 0;
width: 100%;
z-index: 500;
display: flex;
align-items: center;
justify-content: center;
.data-collect {
display: flex;
flex-direction: column;
align-items: center;
}
.collect-num {
font-weight: 500;
color: #3d3f40;
font-family: "DIN-Medium";
& > span:nth-child(1) {
font-size: 36px;
}
& > span:nth-child(2) {
display: inline-block;
margin-left: 6px;
font-size: 12px;
}
}
.collect-text {
margin-top: 10px;
font-size: 16px;
font-weight: 400;
color: #7a808a;
}
}
.legend {
position: absolute;
left: 20px;
bottom: 10px;
z-index: 100;
& > div {
display: flex;
align-items: center;
margin-bottom: 15px;
}
.item-color {
width: 26px;
text-align: center;
line-height: 26px;
height: 18px;
border-radius: 6px;
}
.item-text {
margin-left: 10px;
font-size: 14px;
font-weight: 400;
color: #3380be;
}
}
}
::v-deep .leaflet-container {
background: #fff;
}
</style>

@ -1,123 +0,0 @@
<template>
<div id="LevelPie"></div>
</template>
<script>
import { getPieLevel } from "@/api/largeSize";
import * as echarts from "echarts";
export default {
data() {
return {};
},
methods: {
getList() {
getPieLevel().then((res) => {
let list = [];
for (let key in res.result) {
list.push(res.result[key]);
}
this.initPie(list);
});
},
initPie(list) {
let _this = this;
var myChart = echarts.init(document.getElementById("LevelPie"));
var level = list;
var data = [
{
value: level[0],
name: "见习检查员",
},
{
value: level[1],
name: "初级检查员",
},
{
value: level[2],
name: "中级检查员",
},
{
value: level[3],
name: "高级检查员",
},
{
value: level[4],
name: "专家级检查员",
},
];
var colorList = ["#0E7CF4", "#91CC75", "#FAC858", "#EE6666", "#36BBB0"];
let option = {
legend: {
orient: "vertical",
x: "50%",
y: "center",
itemWidth: this.getFontSize(75),
itemHeight: this.getFontSize(100),
itemGap: 15,
align: "left",
textStyle: {
color: "#333333",
fontSize: _this.getFontSize(140),
},
formatter: (params) => {
const dataAll = data.map((item) => Number(item.value));
const total = dataAll.reduce(
(x, y) => parseInt(x, 10) + parseInt(y, 10)
);
const value = Number(
data.filter((item) => item.name === params)[0].value
);
return ` ${params}${value}%`;
},
},
series: [
{
type: "pie",
radius: ["48%", "65%"],
center: ["25%", "50%"],
minAngle: 10,
label: {
show: false,
normal: {
// formatter: '{c}',
position: "inside",
formatter: (params) => {
// return params.name + '\n' + params.value+'%'
return params.value + "%";
},
fontSize: 12,
},
},
data: data,
itemStyle: {
normal: {
color: function (params) {
return colorList[params.dataIndex];
},
label: {
show: false,
color: "#fff",
},
labelLine: {
show: false,
},
},
},
},
],
};
myChart.setOption(option, true);
},
},
mounted() {
this.getList();
},
};
</script>
<style lang="scss" scoped>
#LevelPie {
height: 100%;
width: 100%;
}
</style>

@ -1,112 +0,0 @@
<template>
<div id="hierarchy"></div>
</template>
<script>
import { getPieCj } from "@/api/largeSize";
import * as echarts from "echarts";
export default {
data() {
return {};
},
methods: {
getList() {
getPieCj().then((res) => {
let list = [];
for (let key in res.result) {
list.push(res.result[key]);
}
this.initPie(list);
});
},
initPie(list) {
let _this = this;
var myChart = echarts.init(document.getElementById("hierarchy"));
var level = list;
var data = [
{
value: level[0],
name: "省级",
},
{
value: level[1],
name: "国家级",
},
];
var colorList = ["#0E7CF4", "#91CC75"];
let option = {
legend: {
orient: "vertical",
x: "50%",
y: "center",
itemWidth: this.getFontSize(75),
itemHeight: this.getFontSize(100),
itemGap: 20,
borderRadius: 10,
align: "left",
textStyle: {
color: "#333333",
fontSize: _this.getFontSize(140),
},
formatter: (params) => {
const dataAll = data.map((item) => Number(item.value));
const total = dataAll.reduce(
(x, y) => parseInt(x, 10) + parseInt(y, 10)
);
const value = Number(
data.filter((item) => item.name === params)[0].value
);
return ` ${params}${value}%`;
},
},
series: [
{
type: "pie",
radius: ["48%", "65%"],
center: ["25%", "50%"],
label: {
show: false,
normal: {
// formatter: '{c}',
position: "inside",
formatter: (params) => {
// return params.name + '\n' + params.value+'%'
return params.value + "%";
},
fontSize: 12,
},
},
data: data,
minAngle: 10,
itemStyle: {
normal: {
color: function (params) {
return colorList[params.dataIndex];
},
label: {
show: false,
color: "#fff",
},
labelLine: {
show: false,
},
},
},
},
],
};
myChart.setOption(option, true);
},
},
mounted() {
this.getList();
},
};
</script>
<style lang="scss" scoped>
#hierarchy {
height: 100%;
width: 100%;
}
</style>

@ -1,149 +0,0 @@
<template>
<div id="typePie"></div>
</template>
<script>
import { getPieType } from "@/api/largeSize";
import * as echarts from "echarts";
export default {
data() {
return {};
},
methods: {
getList() {
getPieType().then((res) => {
let list = [];
for (let key in res.result) {
list.push(res.result[key]);
}
this.initPie(list);
});
},
initPie(list) {
let _this = this;
var myChart = echarts.init(document.getElementById("typePie"));
var level = list;
var data = [
{
value: level[0],
name: " 药物非临床检查员",
},
{
value: level[1],
name: "药物临床检查员",
},
{
value: level[2],
name: "药品生产检查员",
},
{
value: level[3],
name: "药品流通检查员",
},
{
value: level[4],
name: "医疗器械临床检查员",
},
{
value: level[5],
name: "医疗器械生产检查员",
},
{
value: level[6],
name: "医疗器械流通检查员",
},
{
value: level[7],
name: "化妆品研制检查员",
},
{
value: level[8],
name: "化妆品生产检查员",
},
];
var colorList = [
"#0E7CF4",
"#91CC75",
"#FAC858",
"#EE6666",
"#36BBB0",
"#91CC75",
"#FAC858",
"#EE6666",
"#36BBB0",
];
let option = {
legend: {
orient: "vertical",
x: "50%",
y: "center",
itemWidth: this.getFontSize(100),
itemHeight: this.getFontSize(120),
itemGap: 4,
align: "left",
textStyle: {
color: "#333333",
fontSize: _this.getFontSize(170),
},
formatter: (params) => {
const dataAll = data.map((item) => Number(item.value));
const total = dataAll.reduce(
(x, y) => parseInt(x, 10) + parseInt(y, 10)
);
const value = Number(
data.filter((item) => item.name === params)[0].value
);
return ` ${params}${value}%`;
},
},
series: [
{
type: "pie",
radius: ["48%", "65%"],
center: ["25%", "50%"],
label: {
show: false,
normal: {
// formatter: '{c}',
position: "inside",
formatter: (params) => {
// return params.name + '\n' + params.value+'%'
return params.value + "%";
},
fontSize: 12,
},
},
data: data,
minAngle: 10,
itemStyle: {
normal: {
color: function (params) {
return colorList[params.dataIndex];
},
label: {
show: false,
color: "#fff",
},
labelLine: {
show: false,
},
},
},
},
],
};
myChart.setOption(option, true);
},
},
mounted() {
this.getList();
},
};
</script>
<style lang="scss" scoped>
#typePie {
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>

@ -73,18 +73,18 @@
:stripe="false"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column type="index" label="序号" width="55" />
<el-table-column label="产品名称">
<template slot-scope="scope">
<el-table-column type="index" label="序号" width="55" align="center" />
<el-table-column label="产品名称" align="center">
<template slot-scope="scope" >
{{ scope.row.mc || scope.row.cpmc }}
</template>
</el-table-column>
<el-table-column :label="A2">
<el-table-column :label="A2" align="center">
<template slot-scope="scope">
{{ scope.row.bah || scope.row.pzrq }}
</template>
</el-table-column>
<el-table-column :label="A3">
<el-table-column :label="A3" align="center">
<template slot-scope="scope">
{{ scope.row.qy || scope.row.sf }}
</template>
@ -93,6 +93,7 @@
label="操作"
class-name="small-padding fixed-width"
width="140"
align="center"
>
<template slot-scope="scope">
<el-button
@ -102,7 +103,7 @@
@click="toDetail(scope.row)"
>详情</el-button
>
<el-button size="mini" plain type="warning">编辑</el-button>
<!-- <el-button size="mini" plain type="warning">编辑</el-button> -->
</template>
</el-table-column>
</el-table>

@ -1,3 +0,0 @@
<template>
<div>77777777777</div>
</template>

@ -57,22 +57,24 @@
</div>
<section class="table-box">
<div class="table-item">
<el-table v-loading="loading" :data="tableData" border height="300">
<el-table v-loading="loading" :data="tableData" border height="300" align="center">
<el-table-column type="selection" width="55" align="center" />
<el-table-column type="index" label="序号" width="55" />
<el-table-column label="产品名称" prop="cpmc"> </el-table-column>
<el-table-column label="产品类型" prop="cplx"></el-table-column>
<el-table-column label="生产企业" prop="zcsqr"></el-table-column>
<el-table-column type="index" label="序号" align="center" width="55" />
<el-table-column label="产品名称" prop="cpmc" align="center"> </el-table-column>
<el-table-column label="产品类型" prop="cplx" align="center"></el-table-column>
<el-table-column label="生产企业" prop="zcsqr" align="center"></el-table-column>
<el-table-column
label="产品管理类别"
prop="cplb"
align="center"
></el-table-column>
<el-table-column label="注册证编号/备案编号" prop="zczh">
<el-table-column label="注册证编号/备案编号" prop="zczh" align="center">
</el-table-column>
<el-table-column
label="操作"
class-name="small-padding fixed-width"
width="140"
align="center"
>
<template slot-scope="scope">
<el-button
@ -82,7 +84,7 @@
@click="toDetail(scope.row)"
>详情</el-button
>
<el-button size="mini" plain type="warning">编辑</el-button>
<!-- <el-button size="mini" plain type="warning">编辑</el-button> -->
</template>
</el-table-column>
</el-table>

@ -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>

@ -1,777 +0,0 @@
<template>
<diV class="child-container">
<div
class="child-container"
:class="[showBack ? 'changeMgPx' : '']"
v-if="inspectorId"
>
<!-- 左边菜单导航 -->
<div class="leftAside">
<div class="asideHeader">
菜单导航
<footer></footer>
</div>
<div class="asideItemBox">
<div
v-for="(item, index) in asideDate"
:key="index"
id="asideFooter"
@click="handleIndex(index)"
:class="[changeNum == index ? 'activeColor' : '']"
>
{{ item.name }}
</div>
</div>
</div>
<!-- 右边个人信息栏 -->
<div class="rightBox" ref="rightBox" @scroll="handScroll">
<!-- 个人情况统计 -->
<div class="userInfo" ref="userInfo">
<div class="userHeaderBox">
<div class="userText">
<div>个人情况统计</div>
</div>
<div class="userOption">
<div class="absiluteBox" v-if="showBack">
<el-button size="small" @click="backIndex()"></el-button>
</div>
<el-date-picker
v-model="yearParams.begainYear"
type="year"
placeholder="选择开始年"
value-format="yyyy"
>
</el-date-picker>
<span class="year-middle"></span>
<el-date-picker
v-model="yearParams.endBegainYear"
type="year"
placeholder="选择结束年"
@change="changeYear"
value-format="yyyy"
>
</el-date-picker>
</div>
</div>
<infoMsg ref="infoMsg"></infoMsg>
</div>
<!-- 基础信息 -->
<div class="baseMsg" style="margin-top: 8px" ref="baseMsg">
<div class="userHeaderBox">
<div class="userText">
<div>基础信息</div>
</div>
</div>
<div class="baseMsgFooterBox">
<baseMsg :inspectorId="inspectorId"></baseMsg>
</div>
</div>
<!-- 教育背景 -->
<div class="schoolBack" style="margin-top: 8px" ref="schoolBack">
<div class="userHeaderBox">
<div class="userText">
<div>教育背景从大学开始填写</div>
</div>
<div @click.stop="addBackground()">
<el-button
type="primary"
icon="el-icon-plus"
size="mini"
v-hasPermi="['inspector:global:educationBacAdd']"
>新增</el-button
>
</div>
</div>
<div class="schoolBackFooterBox">
<schoolMsg ref="teach" :inspectorId="inspectorId"></schoolMsg>
</div>
</div>
<!-- 聘任信息 -->
<div class="schoolBack" style="margin-top: 8px" ref="toAppointment">
<div class="userHeaderBox">
<div class="userText">
<div>聘任信息</div>
</div>
<el-button
type="success"
icon="el-icon-edit-outline"
size="mini"
@click="exportAppointmentMsg()"
v-hasPermi="['inspector:global:trainExport']"
>导出</el-button
>
<!-- <div @click.stop="addBackground()">
<el-button
type="primary"
icon="el-icon-plus"
size="mini"
v-hasPermi="['inspector:global:educationBacAdd']"
>新增</el-button
>
</div> -->
</div>
<div class="schoolBackFooterBox">
<appointmentMsg
ref="appointmentMsgRefs"
:inspectorId="inspectorId"
></appointmentMsg>
</div>
</div>
<!-- 工作经历 -->
<div class="schoolBack" style="margin-top: 8px" ref="work">
<div class="userHeaderBox">
<div class="userText">
<div>工作经历</div>
</div>
<div @click="addWork()">
<el-button
type="primary"
icon="el-icon-plus"
size="mini"
v-hasPermi="['inspector:global:workAdd']"
>新增</el-button
>
</div>
</div>
<div class="schoolBackFooterBox">
<work ref="workA" :inspectorId="inspectorId"></work>
</div>
</div>
<!-- 检查员特质 -->
<div class="traits" style="margin-top: 8px" ref="traitsType">
<div class="userHeaderBox">
<div class="userText">
<div>检查员特质</div>
</div>
<div>
<el-button
type="primary"
icon="el-icon-edit"
size="mini"
@click="updateTraits()"
v-hasPermi="['inspector:global:traitsEdit']"
>编辑</el-button
>
</div>
</div>
<div class="traitsFooter">
<examine ref="examine" :inspectorId="inspectorId"></examine>
</div>
</div>
<!-- 参加培训情况 -->
<div class="traits" style="margin-top: 8px" ref="traitsSituation">
<div class="userHeaderBox">
<div class="userText">
<div>参加培训情况</div>
</div>
<div class="footerBoxEnd">
<el-button
type="success"
icon="el-icon-edit-outline"
size="mini"
@click="exportTrain()"
v-hasPermi="['inspector:global:trainExport']"
>导出</el-button
>
<el-button
type="primary"
icon="el-icon-edit"
size="mini"
@click="addTraining()"
v-hasPermi="['inspector:global:trainAdd']"
>新增</el-button
>
</div>
</div>
<div class="traitsFooter">
<trainingMsg
ref="trainingMsgA"
:inspectorId="inspectorId"
></trainingMsg>
</div>
</div>
<!-- 检查情况表 -->
<div class="traits" style="margin-top: 8px" ref="traitsTable">
<div class="userHeaderBox">
<div class="userText">
<div>检查情况表</div>
</div>
<div class="footerBoxEnd">
<el-button
type="success"
icon="el-icon-edit-outline"
size="mini"
v-hasPermi="['inspector:global:examineExport']"
>导出</el-button
>
</div>
</div>
<div class="traitsFooter">
<examineTable></examineTable>
</div>
</div>
<!-- 年度考核情况 -->
<div class="traits" style="margin-top: 8px" ref="traitsMsg">
<div class="userHeaderBox">
<div class="userText">
<div>年度考核情况</div>
</div>
<div class="footerBoxEnd">
<el-button
@click="exportYear"
type="success"
icon="el-icon-edit-outline"
size="mini"
v-hasPermi="['inspector:global:checkExport']"
>导出</el-button
>
</div>
</div>
<div class="traitsFooter">
<yearAssess
ref="yearAssess"
:inspectorId="inspectorId"
></yearAssess>
</div>
</div>
<!-- 奖惩信息 -->
<div class="schoolBack" style="margin-top: 8px" ref="toIncentive">
<div class="userHeaderBox">
<div class="userText">
<div>奖惩信息</div>
</div>
<div>
<el-button
type="success"
icon="el-icon-edit-outline"
size="mini"
@click="exportIncentiveMsg()"
v-hasPermi="['inspector:global:trainExport']"
>导出</el-button
>
</div>
</div>
<div class="schoolBackFooterBox">
<incentiveMsg
ref="incentiveMsgRefs"
:inspectorId="inspectorId"
></incentiveMsg>
</div>
</div>
<!-- 调派信息 -->
<div class="schoolBack" style="margin-top: 8px" ref="toDeployed">
<div class="userHeaderBox">
<div class="userText">
<div>调派信息</div>
</div>
<!-- <div @click.stop="addBackground()">
<el-button
type="primary"
icon="el-icon-plus"
size="mini"
v-hasPermi="['inspector:global:educationBacAdd']"
>新增</el-button
>
</div> -->
</div>
<div class="schoolBackFooterBox">
<deployedMsg
ref="deployedMsgRefs"
:inspectorId="inspectorId"
></deployedMsg>
</div>
</div>
<!-- 调派记录 -->
<div class="schoolBack" style="margin-top: 8px" ref="toDispatchRecords">
<div class="userHeaderBox">
<div class="userText">
<div>调派记录</div>
</div>
<!-- <div @click.stop="addBackground()">
<el-button
type="primary"
icon="el-icon-plus"
size="mini"
v-hasPermi="['inspector:global:educationBacAdd']"
>新增</el-button
>
</div> -->
</div>
<div class="schoolBackFooterBox">
<dispatchRecords
ref="dispatchRecordsRefs"
:inspectorId="inspectorId"
></dispatchRecords>
</div>
</div>
<div
class="backTop"
@click="backTop()"
id="backTop"
v-show="scrollShow"
>
<i class="el-icon-caret-top"></i>
</div>
</div>
</div>
<div class="child-container no-data" v-if="!inspectorId">
<el-empty description="您不在检察员列表中!"></el-empty>
</div>
</diV>
</template>
<script>
import { mapGetters } from "vuex";
//
import infoMsg from "../censor/components/infoMsg.vue";
//
import baseMsg from "../censor/components/baseMsg.vue";
//
import schoolMsg from "../censor/components/schoolMsg.vue";
//
import appointmentMsg from "../censor/components/appointmentMsg.vue";
//
import work from "../censor/components/work.vue";
//
import examine from "../censor/components/examine.vue";
//
import trainingMsg from "../censor/components/trainingMsg.vue";
//
import examineTable from "../censor/components/examineTable.vue";
//
import yearAssess from "../censor/components/yearAssess.vue";
//
import incentiveMsg from "../censor/components/incentiveMsg.vue";
//
import deployedMsg from "../censor/components/deployedMsg.vue";
//
import dispatchRecords from "../censor/components/dispatchRecords.vue";
export default {
name: "Notice",
data() {
return {
scrollShow: false,
isdisabled: false,
allRefs: [
{
index: 0,
name: "userInfo",
},
{
index: 1,
name: "baseMsg",
},
{
index: 2,
name: "schoolBack",
},
{
index: 3,
name: "toAppointment",
},
{
index: 4,
name: "work",
},
{
index: 5,
name: "traitsType",
},
{
index: 6,
name: "traitsSituation",
},
{
index: 7,
name: "traitsTable",
},
{
index: 8,
name: "traitsMsg",
},
{
index: 9,
name: "toIncentive",
},
{
index: 10,
name: "toDeployed",
},
{
index: 11,
name: "toDispatchRecords",
},
],
changeNum: 0,
asideDate: [
{
name: "个人信息统计",
},
{
name: "基本信息",
},
{
name: "教育背景",
},
{
name: "聘任信息",
},
{
name: "工作经历",
},
{
name: "检查员特质",
},
{
name: "参加培训情况",
},
{
name: "检查情况",
},
{
name: "年度考核情况",
},
{
name: "奖惩信息",
},
{
name: "调派信息",
},
{
name: "调派记录",
},
],
options: [
{
value: "选项1",
label: "2022",
},
{
value: "选项2",
label: "2023",
},
],
refsList: [
"userInfo",
"baseMsg",
"schoolBack",
"work",
"traitsType",
"traitsSituation",
"traitsTable",
"traitsMsg",
],
value: "",
a1: 0,
// previous: 0,
yearParams: {
begainYear: null,
endBegainYear: null,
},
};
},
props: {
showBack: {
type: Boolean,
default: false,
},
},
components: {
infoMsg,
baseMsg,
schoolMsg,
work,
examine,
trainingMsg,
examineTable,
yearAssess,
appointmentMsg,
incentiveMsg,
deployedMsg,
dispatchRecords,
},
created() {},
computed: {
...mapGetters(["inspectorId"]),
},
methods: {
backTop() {
//
this.$refs.rightBox.scrollTo({
top: 0,
behavior: "smooth", // 使
});
},
/**年变化 */
changeYear(e) {
if (e) {
if (!this.yearParams.begainYear) {
this.$modal.msgError("请选择开始年份!");
return;
} else if (this.yearParams.begainYear > this.yearParams.endBegainYear) {
this.$modal.msgError("开始年不能大于结束年!");
} else {
this.$refs.infoMsg.getinfoData(this.yearParams);
}
}
},
//
addTraining() {
this.$refs.trainingMsgA.handleAdd();
},
//
addBackground() {
this.$refs.teach.openDialog();
},
//
addWork() {
this.$refs.workA.workAddList();
},
//
updateTraits() {
this.$refs.examine.examineUpdate();
},
//
exportTrain() {
this.$refs.trainingMsgA.exportTrain();
},
//
exportYear() {
this.$refs.yearAssess.exportTrain();
},
exportIncentiveMsg() {
this.$refs.incentiveMsgRefs.exportTrain();
},
exportAppointmentMsg() {
this.$refs.appointmentMsgRefs.exportExcel();
},
backIndex() {
this.$emit("getSonData", { isShow: false });
},
/**单击左侧tab */
handleIndex(index) {
this.changeNum = index;
this.$refs[this.allRefs[index].name].scrollIntoView({
behavior: "smooth",
block: "start",
});
this.isdisabled = true;
setTimeout(() => {
this.isdisabled = false;
}, 1000);
},
/**容器滚动 */
handScroll(e) {
if (this.isdisabled == true) return;
let scrollData = e.target.scrollTop;
if (scrollData > 0) {
this.scrollShow = true;
} else {
this.scrollShow = false;
}
var data = [];
this.allRefs.forEach((value) => {
data.push(this.$refs[value.name].offsetHeight);
});
let addData = 0;
let count = 0;
for (let i = 0; i < this.asideDate.length; i++) {
if (
scrollData >= addData + 8 * count &&
scrollData < addData + data[i] + 8 * count + 8
) {
this.changeNum = i;
break;
}
count += 1;
addData += data[i];
}
},
},
mounted() {},
beforeDestroy() {},
};
</script>
<style lang="scss" scoped>
//
::v-deep .el-button--mini {
padding: 6px 8px;
border-radius: 5px;
}
::v-deep .el-button--success {
background-color: #52cd80;
border-color: #52cd80;
}
::v-deep .el-button--primary {
background-color: #1e80eb;
border-color: #1e80eb;
}
.changeMgPx {
padding: 0 !important;
height: 100% !important;
}
::v-deep .el-backtop {
width: 45px;
height: 45px;
font-size: 16px;
}
.child-container {
height: 100%;
background-color: rgb(242, 242, 242);
display: flex;
.leftAside {
height: 100%;
background-color: white;
width: 180px;
padding: 20px;
border-radius: 8px;
.asideHeader {
font-size: 16px;
font-weight: bold;
line-height: 30px;
letter-spacing: 0.045em;
color: #323233;
footer {
width: 50px;
width: 34px;
height: 3px;
border-radius: 4px;
background-color: #1e80eb;
}
}
.asideItemBox {
user-select: none;
width: 100%;
margin-top: 15px;
cursor: pointer;
#asideFooter {
width: 100%;
height: 38px;
border-bottom: 1px solid #dee2ee;
font-size: 14px;
line-height: 14px;
letter-spacing: 0.045em;
display: flex;
align-items: center;
padding-left: 12px;
}
.activeColor {
background-color: #1e80eb;
color: white;
}
}
}
.rightBox {
flex: 1;
margin-left: 10px;
overflow: auto;
position: relative;
border-radius: 6px;
.userInfo {
height: 340px;
border-radius: 8px;
background: white;
}
.baseMsg {
// margin-top: 10px;
// height: 1430px;
border-radius: 8px;
background: white;
.baseMsgFooterBox {
padding: 10px 15px 20px;
}
}
.schoolBack {
// margin-top: 10px;
border-radius: 8px;
background: white;
.schoolBackFooterBox {
padding: 20px 15px;
}
}
.traits {
// margin-top: 10px;
border-radius: 8px;
background: white;
.traitsFooter {
padding: 20px 15px;
}
}
}
}
//
.userHeaderBox {
height: 50px;
border-bottom: 1px solid #e8ebea;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 18px 0 35px;
position: relative;
.absiluteBox {
height: 100%;
position: absolute;
right: 140px;
display: flex;
align-items: center;
justify-content: center;
}
.userText {
font-size: 16px;
letter-spacing: -0.018000000000000002em;
&::before {
content: "";
position: absolute;
top: 17px;
left: 20px;
width: 4px;
height: 17px;
background: linear-gradient(180deg, #8bc2ff 0%, #1e80eb 100%);
border-radius: 3px;
}
}
.userOption {
cursor: pointer;
display: flex;
align-items: center;
.absiluteBox {
margin-right: 15px;
}
}
}
::v-deep .el-date-editor {
width: 135px;
}
.year-middle {
margin: 0 10px;
}
.back-icon {
font-weight: bold;
}
.no-data {
width: 100%;
background: #fff;
border-radius: 6px;
display: flex;
align-items: center;
justify-content: center;
}
.backTop {
position: fixed;
right: 35px;
bottom: 30px;
height: 40px;
text-align: center;
line-height: 40px;
width: 40px;
z-index: 100;
background: #fff;
border-radius: 6px;
box-shadow: 0 0 6px rgba(0, 0, 0, 0.12);
color: #409eff;
font-size: 20px;
cursor: pointer;
}
</style>

@ -1,758 +0,0 @@
<template>
<div class="child-container" :class="[showBack ? 'changeMgPx' : '']">
<!-- 左边菜单导航 -->
<div class="leftAside">
<div class="asideHeader">
菜单导航
<footer></footer>
</div>
<div class="asideItemBox">
<div
v-for="(item, index) in asideDate"
:key="index"
id="asideFooter"
@click="handleIndex(index)"
:class="[changeNum == index ? 'activeColor' : '']"
>
{{ item.name }}
</div>
</div>
</div>
<!-- 右边个人信息栏 -->
<div class="rightBox" ref="rightBox" @scroll="handScroll">
<!-- 个人情况统计 -->
<div class="userInfo" ref="userInfo">
<div class="userHeaderBox">
<div class="userText">
<div>个人情况统计</div>
</div>
<div class="userOption">
<div class="absiluteBox" v-if="showBack">
<el-button size="small" @click="backIndex()"></el-button>
</div>
<el-date-picker
v-model="yearParams.begainYear"
type="year"
placeholder="选择开始年"
value-format="yyyy"
>
</el-date-picker>
<span class="year-middle"></span>
<el-date-picker
v-model="yearParams.endBegainYear"
type="year"
placeholder="选择结束年"
@change="changeYear"
value-format="yyyy"
>
</el-date-picker>
</div>
</div>
<infoMsg ref="infoMsg"></infoMsg>
</div>
<!-- 基础信息 -->
<div class="baseMsg" style="margin-top: 8px" ref="baseMsg">
<div class="userHeaderBox">
<div class="userText">
<div>基础信息</div>
</div>
</div>
<div class="baseMsgFooterBox">
<baseMsg :inspectorId="inspectorId"></baseMsg>
</div>
</div>
<!-- 教育背景 -->
<div class="schoolBack" style="margin-top: 8px" ref="schoolBack">
<div class="userHeaderBox">
<div class="userText">
<div>教育背景从大学开始填写</div>
</div>
<div @click.stop="addBackground()">
<el-button
type="primary"
icon="el-icon-plus"
size="mini"
v-hasPermi="['inspector:global:educationBacAdd:s']"
>新增</el-button
>
</div>
</div>
<div class="schoolBackFooterBox">
<schoolMsg ref="teach" :inspectorId="inspectorId"></schoolMsg>
</div>
</div>
<!-- 聘任信息 -->
<div class="schoolBack" style="margin-top: 8px" ref="toAppointment">
<div class="userHeaderBox">
<div class="userText">
<div>聘任信息</div>
</div>
<el-button
type="success"
icon="el-icon-edit-outline"
size="mini"
@click="exportAppointmentMsg()"
v-hasPermi="['inspector:global:trainExport:s']"
>导出</el-button
>
<!-- <div @click.stop="addBackground()">
<el-button
type="primary"
icon="el-icon-plus"
size="mini"
v-hasPermi="['inspector:global:educationBacAdd']"
>新增</el-button
>
</div> -->
</div>
<div class="schoolBackFooterBox">
<appointmentMsg
ref="appointmentMsgRefs"
:inspectorId="inspectorId"
></appointmentMsg>
</div>
</div>
<!-- 工作经历 -->
<div class="schoolBack" style="margin-top: 8px" ref="work">
<div class="userHeaderBox">
<div class="userText">
<div>工作经历</div>
</div>
<div @click="addWork()">
<el-button
type="primary"
icon="el-icon-plus"
size="mini"
v-hasPermi="['inspector:global:workAdd:s']"
>新增</el-button
>
</div>
</div>
<div class="schoolBackFooterBox">
<work ref="workA" :inspectorId="inspectorId"></work>
</div>
</div>
<!-- 检查员特质 -->
<div class="traits" style="margin-top: 8px" ref="traitsType">
<div class="userHeaderBox">
<div class="userText">
<div>检查员特质</div>
</div>
<div>
<el-button
type="primary"
icon="el-icon-edit"
size="mini"
@click="updateTraits()"
v-hasPermi="['inspector:global:traitsEdit:s']"
>编辑</el-button
>
</div>
</div>
<div class="traitsFooter">
<examine ref="examine" :inspectorId="inspectorId"></examine>
</div>
</div>
<!-- 参加培训情况 -->
<div class="traits" style="margin-top: 8px" ref="traitsSituation">
<div class="userHeaderBox">
<div class="userText">
<div>参加培训情况</div>
</div>
<div class="footerBoxEnd">
<el-button
type="success"
icon="el-icon-edit-outline"
size="mini"
@click="exportTrain()"
v-hasPermi="['inspector:global:trainExport:s']"
>导出</el-button
>
<el-button
type="primary"
icon="el-icon-edit"
size="mini"
@click="addTraining()"
v-hasPermi="['inspector:global:trainAdd:s']"
>新增</el-button
>
</div>
</div>
<div class="traitsFooter">
<trainingMsg
ref="trainingMsgA"
:inspectorId="inspectorId"
></trainingMsg>
</div>
</div>
<!-- 检查情况表 -->
<div class="traits" style="margin-top: 8px" ref="traitsTable">
<div class="userHeaderBox">
<div class="userText">
<div>检查情况表</div>
</div>
<div class="footerBoxEnd">
<el-button
type="success"
icon="el-icon-edit-outline"
size="mini"
v-hasPermi="['inspector:global:examineExport:s']"
>导出</el-button
>
</div>
</div>
<div class="traitsFooter">
<examineTable></examineTable>
</div>
</div>
<!-- 年度考核情况 -->
<div class="traits" style="margin-top: 8px" ref="traitsMsg">
<div class="userHeaderBox">
<div class="userText">
<div>年度考核情况</div>
</div>
<div class="footerBoxEnd">
<el-button
@click="exportYear"
type="success"
icon="el-icon-edit-outline"
size="mini"
v-hasPermi="['inspector:global:checkExport:s']"
>导出</el-button
>
</div>
</div>
<div class="traitsFooter">
<yearAssess ref="yearAssess" :inspectorId="inspectorId"></yearAssess>
</div>
</div>
<!-- 奖惩信息 -->
<div class="schoolBack" style="margin-top: 8px" ref="toIncentive">
<div class="userHeaderBox">
<div class="userText">
<div>奖惩信息</div>
</div>
<div>
<el-button
type="success"
icon="el-icon-edit-outline"
size="mini"
@click="exportIncentiveMsg()"
v-hasPermi="['inspector:global:trainExport:s']"
>导出</el-button
>
</div>
</div>
<div class="schoolBackFooterBox">
<incentiveMsg
ref="incentiveMsgRefs"
:inspectorId="inspectorId"
></incentiveMsg>
</div>
</div>
<!-- 调派信息 -->
<div class="schoolBack" style="margin-top: 8px" ref="toDeployed">
<div class="userHeaderBox">
<div class="userText">
<div>调派信息</div>
</div>
<!-- <div @click.stop="addBackground()">
<el-button
type="primary"
icon="el-icon-plus"
size="mini"
v-hasPermi="['inspector:global:educationBacAdd']"
>新增</el-button
>
</div> -->
</div>
<div class="schoolBackFooterBox">
<deployedMsg
ref="deployedMsgRefs"
:inspectorId="inspectorId"
></deployedMsg>
</div>
</div>
<!-- 调派记录 -->
<div class="schoolBack" style="margin-top: 8px" ref="toDispatchRecords">
<div class="userHeaderBox">
<div class="userText">
<div>调派记录</div>
</div>
<!-- <div @click.stop="addBackground()">
<el-button
type="primary"
icon="el-icon-plus"
size="mini"
v-hasPermi="['inspector:global:educationBacAdd']"
>新增</el-button
>
</div> -->
</div>
<div class="schoolBackFooterBox">
<dispatchRecords
ref="dispatchRecordsRefs"
:inspectorId="inspectorId"
></dispatchRecords>
</div>
</div>
<div class="backTop" @click="backTop()" id="backTop" v-show="scrollShow">
<i class="el-icon-caret-top"></i>
</div>
</div>
</div>
</template>
<script>
//
import infoMsg from "../censor/components/infoMsg.vue";
//
import baseMsg from "../censor/components/baseMsg.vue";
//
import schoolMsg from "../censor/components/schoolMsg.vue";
//
import appointmentMsg from "../censor/components/appointmentMsg.vue";
//
import work from "../censor/components/work.vue";
//
import examine from "../censor/components/examine.vue";
//
import trainingMsg from "../censor/components/trainingMsg.vue";
//
import examineTable from "../censor/components/examineTable.vue";
//
import yearAssess from "../censor/components/yearAssess.vue";
//
import incentiveMsg from "../censor/components/incentiveMsg.vue";
//
import deployedMsg from "../censor/components/deployedMsg.vue";
//
import dispatchRecords from "../censor/components/dispatchRecords.vue";
export default {
name: "Notice",
data() {
return {
scrollShow: false,
isdisabled: false,
allRefs: [
{
index: 0,
name: "userInfo",
},
{
index: 1,
name: "baseMsg",
},
{
index: 2,
name: "schoolBack",
},
{
index: 3,
name: "toAppointment",
},
{
index: 4,
name: "work",
},
{
index: 5,
name: "traitsType",
},
{
index: 6,
name: "traitsSituation",
},
{
index: 7,
name: "traitsTable",
},
{
index: 8,
name: "traitsMsg",
},
{
index: 9,
name: "toIncentive",
},
{
index: 10,
name: "toDeployed",
},
{
index: 11,
name: "toDispatchRecords",
},
],
changeNum: 0,
asideDate: [
{
name: "个人信息统计",
},
{
name: "基本信息",
},
{
name: "教育背景",
},
{
name: "聘任信息",
},
{
name: "工作经历",
},
{
name: "检查员特质",
},
{
name: "参加培训情况",
},
{
name: "检查情况",
},
{
name: "年度考核情况",
},
{
name: "奖惩信息",
},
{
name: "调派信息",
},
{
name: "调派记录",
},
],
options: [
{
value: "选项1",
label: "2022",
},
{
value: "选项2",
label: "2023",
},
],
refsList: [
"userInfo",
"baseMsg",
"schoolBack",
"work",
"traitsType",
"traitsSituation",
"traitsTable",
"traitsMsg",
],
value: "",
year: new Date(),
a1: 0,
// previous: 0,
yearParams: {
begainYear: null,
endBegainYear: null,
},
};
},
props: {
showBack: {
type: Boolean,
default: false,
},
inspectorId: {
type: Number,
default: null,
},
},
components: {
infoMsg,
baseMsg,
schoolMsg,
work,
examine,
trainingMsg,
examineTable,
yearAssess,
appointmentMsg,
incentiveMsg,
deployedMsg,
dispatchRecords,
},
methods: {
backTop() {
//
this.$refs.rightBox.scrollTo({
top: 0,
behavior: "smooth", // 使
});
},
setInspectorId(id) {
this.inspectorId = id;
},
/**年变化 */
changeYear(e) {
if (e) {
if (!this.yearParams.begainYear) {
this.$modal.msgError("请选择开始年份!");
return;
} else if (this.yearParams.begainYear > this.yearParams.endBegainYear) {
this.$modal.msgError("开始年不能大于结束年!");
} else {
this.$refs.infoMsg.getinfoData(this.yearParams);
}
}
},
//
addTraining() {
this.$refs.trainingMsgA.handleAdd();
},
//
addBackground() {
this.$refs.teach.openDialog();
},
//
addWork() {
this.$refs.workA.workAddList();
},
//
updateTraits() {
this.$refs.examine.examineUpdate();
},
//
exportTrain() {
this.$refs.trainingMsgA.exportTrain();
},
//
exportYear() {
this.$refs.yearAssess.exportTrain();
},
exportIncentiveMsg() {
this.$refs.incentiveMsgRefs.exportTrain();
},
exportAppointmentMsg() {
this.$refs.appointmentMsgRefs.exportExcel();
},
backIndex() {
this.$emit("getSonData", { isShow: false });
},
/**单击左侧tab */
handleIndex(index) {
this.changeNum = index;
this.$refs[this.allRefs[index].name].scrollIntoView({
behavior: "smooth",
block: "start",
});
this.isdisabled = true;
setTimeout(() => {
this.isdisabled = false;
}, 1000);
},
/**容器滚动 */
handScroll(e) {
if (this.isdisabled == true) return;
let scrollData = e.target.scrollTop;
if (scrollData > 0) {
this.scrollShow = true;
} else {
this.scrollShow = false;
}
var data = [];
this.allRefs.forEach((value) => {
data.push(this.$refs[value.name].offsetHeight);
});
let addData = 0;
let count = 0;
for (let i = 0; i < this.asideDate.length; i++) {
if (
scrollData >= addData + 8 * count &&
scrollData < addData + data[i] + 8 * count + 8
) {
this.changeNum = i;
break;
}
count += 1;
addData += data[i];
}
},
},
mounted() {},
beforeDestroy() {},
};
</script>
<style lang="scss" scoped>
//
::v-deep .el-button--mini {
padding: 6px 8px;
border-radius: 5px;
}
::v-deep .el-button--success {
background-color: #52cd80;
border-color: #52cd80;
}
::v-deep .el-button--primary {
background-color: #1e80eb;
border-color: #1e80eb;
}
.changeMgPx {
padding: 0 !important;
height: 100% !important;
}
::v-deep .el-backtop {
width: 45px;
height: 45px;
font-size: 16px;
}
.child-container {
height: 100%;
background-color: rgb(242, 242, 242);
display: flex;
.leftAside {
height: 100%;
background-color: white;
width: 180px;
padding: 20px;
border-radius: 8px;
.asideHeader {
font-size: 16px;
font-weight: bold;
line-height: 30px;
letter-spacing: 0.045em;
color: #323233;
footer {
width: 50px;
width: 34px;
height: 3px;
border-radius: 4px;
background-color: #1e80eb;
}
}
.asideItemBox {
user-select: none;
width: 100%;
margin-top: 15px;
cursor: pointer;
#asideFooter {
width: 100%;
height: 38px;
border-bottom: 1px solid #dee2ee;
font-size: 14px;
line-height: 14px;
letter-spacing: 0.045em;
display: flex;
align-items: center;
padding-left: 12px;
}
.activeColor {
background-color: #1e80eb;
color: white;
}
}
}
.rightBox {
flex: 1;
margin-left: 10px;
overflow: auto;
position: relative;
border-radius: 6px;
.userInfo {
height: 340px;
border-radius: 8px;
background: white;
}
.baseMsg {
// margin-top: 10px;
// height: 1430px;
border-radius: 8px;
background: white;
.baseMsgFooterBox {
padding: 10px 15px 20px;
}
}
.schoolBack {
// margin-top: 10px;
border-radius: 8px;
background: white;
.schoolBackFooterBox {
padding: 20px 15px;
}
}
.traits {
// margin-top: 10px;
border-radius: 8px;
background: white;
.traitsFooter {
padding: 20px 15px;
}
}
}
}
//
.userHeaderBox {
height: 50px;
border-bottom: 1px solid #e8ebea;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 18px 0 35px;
position: relative;
.absiluteBox {
// height: 100%;
// position: absolute;
// right: 140px;
// display: flex;
// align-items: center;
// justify-content: center;
}
.userText {
font-size: 16px;
letter-spacing: -0.018000000000000002em;
&::before {
content: "";
position: absolute;
top: 17px;
left: 20px;
width: 4px;
height: 17px;
background: linear-gradient(180deg, #8bc2ff 0%, #1e80eb 100%);
border-radius: 3px;
}
}
.userOption {
cursor: pointer;
display: flex;
align-items: center;
.absiluteBox {
margin-right: 15px;
}
}
}
::v-deep .el-date-editor {
width: 135px;
}
.year-middle {
margin: 0 10px;
}
.back-icon {
font-weight: bold;
border: 1px solid red;
}
.backTop {
position: fixed;
right: 35px;
bottom: 30px;
height: 40px;
text-align: center;
line-height: 40px;
width: 40px;
z-index: 100;
background: #fff;
border-radius: 6px;
box-shadow: 0 0 6px rgba(0, 0, 0, 0.12);
color: #409eff;
font-size: 20px;
cursor: pointer;
}
</style>
Loading…
Cancel
Save