gengxin化妆品

main
李劲龙 12 months ago
parent 88679669ec
commit c8a85362e2

@ -1,6 +1,6 @@
{
"name": "ruoyi",
"version": "3.8.5",
"version": "3.8.6",
"description": "辽宁药品",
"author": "若依",
"license": "MIT",

@ -30,12 +30,13 @@ export default {
},
mounted() {
//! api-login.js(线api) main request basurl
/*
/usr/local/nginx/html/
npm run build:prod
/usr/share/nginx/html/ggfw-jg
! login.js(切换本地与线上的api) main 切换basurl
sudo mv ggfw-jg.zip /usr/share/nginx/html/ggfw-jg MSSM-Dev 文件夹下 移动压缩包到 ggfw文件夹下
@ -51,7 +52,11 @@ export default {
</script>
<style lang="scss">
@import "@/assets/styles/utils.scss";
.customClass{
.el-textarea__inner{
min-height: vh(200) !important;
}
}
.el-input--mini .el-input__icon {
line-height: vh(35);
}

@ -177,4 +177,16 @@ export default {
data
});
},
sendInfo(data) {
return request({
// baseURL: location.origin,
baseURL: api,
url: `/api/common/smsMsg/sendInfo`,
method: "post",
headers: {
repeatSubmit: false,
},
data
});
},
};

@ -19,7 +19,7 @@ export default {
myArr.push(element.menuPerms);
});
const permissions = myArr;
console.log("nihaonihao1", permissions);
// console.log("nihaonihao1", permissions);
if (value && value instanceof Array && value.length > 0) {
const permissionFlag = value;

@ -18,7 +18,7 @@ export default {
myArr.push(element.menuPerms);
});
const permissions = myArr;
console.log("nihaonihao1", permissions);
// console.log("nihaonihao1", permissions);
if (value && value instanceof Array && value.length > 0) {
const permissionFlag = value;
const hasPermissions = permissions.some((permission) => {

@ -0,0 +1,552 @@
<template>
<div class="Fillng_content">
<div class="fillng_title">
<MyCarVue mytitle="化妆品召回查询">
<el-form
ref="sizeForm"
:model="queryCondition"
size="mini"
:inline="true"
:inline-message="true"
>
<div class="myfiling-top">
<div class="screen">
<div class="task-name">
<span class="task-name-text">召回企业名称</span>
<div class="task-input">
<el-form-item prop="entName">
<el-input
v-model="queryCondition.entName"
placeholder="请输入内容"
></el-input>
</el-form-item>
</div>
</div>
<div class="time-interval">
<div class="interval-text">召回时间</div>
<div class="interval-select">
<el-form-item prop="startTime">
<div class="star-time">
<el-date-picker
v-model="queryCondition.startTime"
type="datetime"
align="right"
:clearable="false"
format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="开始时间"
>
</el-date-picker>
<!-- -->
</div>
</el-form-item>
<div class="symbol">
<i class="icon-jiantou el-icon-sort-down"></i>
</div>
<el-form-item prop="endTime">
<div class="end-time">
<el-date-picker
v-model="queryCondition.endTime"
type="datetime"
align="right"
:clearable="false"
format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="结束时间"
>
</el-date-picker>
<i class="el-icon-date data_icon"></i>
</div>
</el-form-item>
</div>
</div>
<!-- <div class="task-name lasttask-name">
<span class="task-name-text">召回等级</span>
<div class="task-input">
<el-form-item prop="recallLevel">
<el-select
v-model="queryCondition.recallLevel"
placeholder="全部"
>
<el-option
:label="item.name"
:value="item.id"
v-for="(item, index) in recallLevelLise"
:key="index"
></el-option>
</el-select>
</el-form-item>
</div>
</div> -->
<div class="task-name">
<span class="task-name-text">召回状态</span>
<div class="task-input">
<el-form-item prop="recallStatus">
<el-select
v-model="queryCondition.recallStatus"
placeholder="全部"
>
<el-option
:label="item.name"
:value="item.id"
v-for="(item, index) in recallStatusLise"
:key="index"
></el-option>
</el-select>
</el-form-item>
</div>
</div>
</div>
<div class="screen">
<div class="task-name">
<!-- <span class="task-name-text">召回状态</span>
<div class="task-input">
<el-form-item prop="recallStatus">
<el-select
v-model="queryCondition.recallStatus"
placeholder="全部"
>
<el-option
:label="item.name"
:value="item.id"
v-for="(item, index) in recallStatusLise"
:key="index"
></el-option>
</el-select>
</el-form-item>
</div> -->
</div>
<div class="btns">
<el-button class="reset" @click="resetForm('sizeForm')"
>重置</el-button
>
<el-button class="inquire" @click="submitForm('sizeForm')"
>查询</el-button
>
</div>
</div>
</div>
</el-form>
</MyCarVue>
</div>
<div class="fillng_ctn">
<MyCarVue mytitle="化妆品召回列表">
<div class="fillng_ctn_box">
<div class="ctn_nwe" @click="addassignment" >
<img src="@/assets/images/monitor/add.png" alt="" />
<span>新增责令召回</span>
</div>
<div class="ctn_biaoge">
<zhaohuiList
:tableData="tableData"
:titList="titList"
:querydata="querydata"
@zaohui="getTabList"
ref="zhaohuiList"
typemy="2"
></zhaohuiList>
</div>
</div>
</MyCarVue>
</div>
<!-- 填报 -->
<ReportDialog
ref="ReportDialog"
@mychange="getTabList"
recallProductsType="3"
></ReportDialog>
</div>
</template>
<script>
import MyCarVue from "@/pages/components/MyCar/MyCar.vue";
import zhaohuiList from "@/pages/components/zhaohuiList/indexhzp.vue";
import ReportDialog from "@/pages/components/dialogTow/index.vue";
export default {
name: "",
components: { MyCarVue, zhaohuiList, ReportDialog },
data() {
return {
//
queryCondshow: true,
queryCondition: {
entName: "", //
startTime: "", //
endTime: "", //
recallLevel: "", // 1 2 3
recallStatus: "", //1 2 3
current: "",
size: "",
recallProductsType: "3", // 1 2
type:2
},
recallLevelLise: [
{
id: 1,
name: "一级召回",
},
{
id: 2,
name: "二级召回",
},
{
id: 3,
name: "三级召回",
},
],
recallStatusLise: [
{
id: 1,
name: "召回开始",
},
{
id: 2,
name: "进展汇报",
},
{
id: 3,
name: "召回完成",
},
],
tableData: [
{
id: 1,
name: "药品生产企业填报1",
starDate: "2023-04-01",
hierarchy: "100/100",
type: "企业召回",
endDate: "2023-04-01",
submitter: "进行中",
},
],
titList: [
"序号",
"召回企业名称",
"召回类型",
"召回产品",
"召回开始时间",
"召回状态",
"审批状态",
"操作",
],
querydata: {
//
current: 0,
//
pages: 0,
//
total: 0,
//
size: 0,
},
};
},
created() {},
methods: {
//
submitForm(sizeForm) {
this.$refs[sizeForm].validate((valid) => {
if (this.queryCondshow) {
this.queryCondshow = false;
//
this.getTabList(null, null, this.queryCondition);
setTimeout(() => {
this.queryCondshow = true;
}, 1500);
} else {
this.$message({
message: "请勿重复点击",
type: "warning",
});
}
if (valid) {
} else {
return false;
}
});
},
//
resetForm(sizeForm) {
this.$refs[sizeForm].resetFields();
this.querydata.current = 1;
this.getTabList();
},
//
addassignment() {
this.$refs["ReportDialog"].open();
this.querydata.current = 1;
},
//
async getTabList(current, pagesyema, queryCondition) {
this.$refs["zhaohuiList"].lodinShow();
let result = [];
if (current && pagesyema) {
this.queryCondition.current = current;
this.queryCondition.size = pagesyema;
result = await this.$api.Zhaohui.recallInfo(
"get",
null,
this.queryCondition
);
} else {
this.queryCondition.current = 1;
if (queryCondition) {
result = await this.$api.Zhaohui.recallInfo(
"get",
null,
this.queryCondition
);
// if (result.code == 200) {
// setTimeout(() => {
// this.$message({
// message: "",
// type: "success",
// });
// }, 0);
// }
} else {
result = await this.$api.Zhaohui.recallInfo(
"get",
null,
this.queryCondition
);
}
}
if (result.code === 200) {
this.$refs["zhaohuiList"].lodinBlock();
this.querydata.current = result.data.current;
this.querydata.pages = result.data.pages;
this.querydata.total = result.data.total;
this.querydata.size = result.data.size;
this.tableData = result.data.records;
this.tableData.forEach((item, index) => {
item.index = index + 1;
});
}
},
mychange() {},
},
mounted() {
this.getTabList();
this.queryCondition.recallProductsType = "3";
},
computed: {},
};
</script>
<style scoped lang="scss">
@import "@/assets/styles/utils.scss";
.Fillng_content {
width: 100%;
.fillng_title {
.myfiling-top {
.screen {
padding: vh(10) 0 vh(10) vw(0);
display: flex;
align-items: center;
justify-content: space-between;
.task-name {
display: flex;
align-items: center;
margin-right: vw(58);
.task-name-text {
width: vw(150);
text-align: right;
font-size: vb(16);
font-family: Source Han Sans CN;
font-weight: 400;
color: #000000;
line-height: vh(50);
// margin-right: vw(10);
}
.task-input {
width: vw(290);
::v-deep .el-input {
width: vw(306);
height: vh(40);
}
::v-deep .el-input__inner {
width: 100%;
height: 100%;
font-size: vb(16);
font-family: Source Han Sans CN;
font-weight: 400;
// color: #b1b6bf;
line-height: vh(50);
padding-left: vw(15);
}
}
}
.lasttask-name {
margin-right: vw(15);
}
.time-interval {
display: flex;
align-items: center;
margin-right: vw(20);
background-color: #fff;
.interval-text {
font-size: vb(16);
font-family: Source Han Sans CN;
font-weight: 400;
color: #6a6c6f;
line-height: vh(50);
// margin-right: vw(10);
}
.interval-select {
display: flex;
align-items: center;
border: vw(1) solid #dbe0e8;
border-radius: vw(4);
.star-time,
.end-time {
position: relative;
.data_icon {
position: absolute;
top: 50%;
right: vw(10);
z-index: 9;
color: #c0c4cc;
font-size: vb(14);
transform: translateY(-50%);
}
::v-deep .el-input__prefix {
display: none;
}
::v-deep .el-input {
padding: 0 vw(10);
width: vw(200);
height: vh(40);
}
::v-deep .el-input__inner {
padding: vw(10) 0;
width: 100%;
height: 100%;
font-size: vb(16);
font-family: Source Han Sans CN;
font-weight: 400;
// color: #b1b6bf;
line-height: vh(50);
// padding-left: vw(15);
border: none;
cursor: pointer;
}
}
.symbol {
// background: rgba(219, 224, 232, 0.5);
margin-left: vw(-25);
width: vw(40);
height: vh(38);
display: flex;
align-items: center;
justify-content: center;
font-size: vb(16);
font-family: Source Han Sans CN;
font-weight: 400;
color: #292f38;
line-height: vh(28);
.icon-jiantou {
transform: rotate(-90deg) rotateY(180deg);
}
}
}
}
.btns {
display: flex;
align-items: center;
.inquire {
display: flex;
justify-content: center;
align-items: center;
border: none;
width: vw(64);
height: vh(40);
background: #1e80eb;
border-radius: vw(4);
font-size: vb(16);
font-family: Source Han Sans CN;
font-weight: 400;
color: #ffffff;
line-height: vh(50);
cursor: pointer;
}
.reset {
display: flex;
justify-content: center;
align-items: center;
width: vw(64);
height: vh(40);
border: vw(1) solid #1e80eb;
border-radius: vw(4);
background-color: #fff;
font-size: vb(16);
font-family: Source Han Sans CN;
font-weight: 400;
color: #1e80eb;
line-height: vh(50);
cursor: pointer;
}
}
}
}
::v-deep .el-form-item--mini.el-form-item {
margin: 0;
}
::v-deep .el-form--inline .el-form-item {
margin: 0;
}
::v-deep .el-form-item__error--inline {
position: absolute;
width: vw(50);
font-size: vb(14);
font-family: Source Han Regular CN;
transform: scale(0.9);
bottom: vh(-25);
left: 0;
}
}
.fillng_ctn {
height: 80%;
margin-top: 1%;
overflow: hidden;
.fillng_ctn_box {
position: relative;
.ctn_nwe {
display: flex;
align-items: center;
justify-content: center;
position: absolute;
top: vh(-68);
right: vw(0);
padding: vw(3);
border: vw(2) solid #1e80eb;
border-radius: vw(4);
cursor: pointer;
img {
width: vw(13);
height: vw(13);
margin-right: vw(5);
}
span {
font-size: vb(16);
font-family: Source Han Regular CN;
font-weight: 400;
color: #1e80eb;
}
}
.ctn_biaoge {
margin-top: vh(5);
}
}
}
}
</style>

@ -9,8 +9,8 @@
<div class="task-name">
<span class="task-name-text">年度</span>
<div class="task-input">
<el-form-item prop="tjrq">
<el-input v-model="queryCondition.tjrq" placeholder="请输入内容"></el-input>
<el-form-item prop="">
<el-input v-model="tjrqTow" placeholder="请输入内容"></el-input>
</el-form-item>
</div>
</div>
@ -96,6 +96,26 @@
</div>
</div>
</div>
<div class="screen screenSan">
<div class="task-name">
<span class="task-name-text">事项类型</span>
<div class="task-input">
<el-form-item prop="sx">
<el-input v-model="queryConditionTow.sx" placeholder="请输入内容"></el-input>
</el-form-item>
</div>
</div>
<div class="task-name">
<span class="task-name-text">变更年份</span>
<div class="task-input">
<el-form-item prop="tjrq">
<el-input v-model="tjrqTowTow" placeholder="请输入内容"></el-input>
</el-form-item>
</div>
</div>
<div class="btns">
<el-button class="reset" @click="resetFormTow('sizeFormTow')"></el-button>
<el-button class="inquire" @click="sizeFormTow('sizeFormTow')"></el-button>
@ -133,16 +153,20 @@ export default {
return {
isTrue: true,
activeName: "first",
tjrqTow:"",
queryCondition: {
tjrq: "",
ypssxkcyrmc: "",
ypssxkcyrmc: "",
tyshxydm: "",
ypscxkzbh: "",
ypmc: "",
},
tjrqTowTow:"",
queryConditionTow: {
yppzwh: "",
yptymc: "",
sx:"",
tjrq:"",
},
querydata: {},
size: 10,
@ -163,7 +187,6 @@ export default {
mounted() { },
methods: {
handleClick(tab, event) {
console.log(tab);
if (this.activeName == "first") {
setTimeout(() => {
this.$refs.nianbaoList.showtrue();
@ -197,6 +220,7 @@ export default {
},
//
sizeFormTow(sizeForm) {
this.queryConditionTow.tjrq = (this.tjrqTowTow-0)+1
this.$refs.qiyeniantijiao.open(this.queryConditionTow);
},
//
@ -205,6 +229,7 @@ export default {
// let isEmpty = Object.values(this.queryCondition).every(
// (value) => value == null || value === ""
// );
this.queryCondition.tjrq = (this.tjrqTow-0)+1
if (isQuery) {
let queryCondition = {};
for (let key in this.queryCondition) {
@ -226,6 +251,7 @@ export default {
},
//
resetForm(sizeForm) {
this.tjrqTow = ""
if (this.isInquire) {
this.$refs[sizeForm].resetFields();
this.isInquire = 0;
@ -235,6 +261,7 @@ export default {
}
},
resetFormTow(sizeForm) {
this.tjrqTowTow = ""
this.$refs[sizeForm].resetFields();
this.$refs.qiyeniantijiao.open(this.queryConditionTow);
},
@ -534,4 +561,8 @@ export default {
}
}
}
::v-deep .el-tabs__item{
font-size: vb(16) !important;
}
</style>

@ -35,7 +35,7 @@
<fileDeliver @input="orderRecallNotice" :isShowTip="false" ref="fileDeliver"></fileDeliver>
</el-form-item>
</div>
<div class="form form-f" v-show="recallType == 1">
<div class="form form-f" v-show="recallType == 1" v-if="isrecallProductsType!=3">
<el-form-item label="操作" prop="orderRecallNotice">
<el-button type="success" @click="zelingadd('sizeForm')"></el-button>
</el-form-item>
@ -79,6 +79,7 @@ export default {
recallInfoId: [{ required: true, message: "请输入", trigger: "blur" }],
isRemoveDefects: [{ required: true, message: "请选择", trigger: "blur" }],
},
isrecallProductsType:""
};
},
props: {
@ -88,10 +89,11 @@ export default {
},
watch: {},
methods: {
async open(id, recallType) {
async open(id, recallType,row) {
console.log(id);
this.sizeForm.recallInfoId = id;
this.recallType = recallType
this.isrecallProductsType = row.recallProductsType
this.dialogVisible = true;
},
Close() {

@ -7,7 +7,7 @@
-->
<template>
<el-dialog :visible.sync="dialogVisible" :show-close="false" :destroy-on-close="true" :close-on-click-modal="false"
append-to-body custom-class="dialog-boxed" width="80%">
append-to-body custom-class="dialog-boxed" width="85%">
<div class="dialog-slot">
<div class="closeClick">
<div>{{ title }}</div>
@ -31,7 +31,7 @@
<el-form-item label="产品规格:" prop="productSpecifications">
<el-input v-model="sizeForm.productSpecifications" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="召回等级:" prop="recallLevel">
<el-form-item label="召回等级:" prop="recallLevel" v-if="recallProductsType != 3">
<el-select v-model="sizeForm.recallLevel" placeholder="请输入">
<el-option label="一级召回 " :value="1"></el-option>
<el-option label="二级召回 " :value="2"></el-option>
@ -77,7 +77,8 @@
</div>
<!-- 第五 -->
<div class="form form-e" v-for="(item, index) in sizeForm.recallPlanList" :key="index">
<div class="form form-e" v-for="(item, index) in sizeForm.recallPlanList" :key="index"
v-if="recallProductsType != 3">
<el-form-item label="产品批号:" :prop="`recallPlanList[${index}].productLotNumber`" :rules="[
{
required: true,
@ -132,6 +133,68 @@
<img src="../../../assets/images/home/xianshishan.png" alt="" v-else />
</div>
</div>
<div class="form form-e form-eTow" v-for="(item, index) in sizeForm.recallPlanList" :key="index"
v-if="recallProductsType == 3">
<el-form-item label="产品批号/生产日期:" :prop="`recallPlanList[${index}].productLotNumber`" :rules="[
{ required: true, message: '产品批号不能为空', trigger: 'blur' },
]">
<el-input v-model="sizeForm.recallPlanList[index].productLotNumber" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="净含量:" :prop="`recallPlanList[${index}].totalPlannedRecalls`" :rules="[
{
required: true,
message: '净含量不能为空',
trigger: 'blur',
},
{
type: 'number',
message: '净含量必须为数值',
},
]">
<el-input v-model.number="sizeForm.recallPlanList[index].totalPlannedRecalls" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="使用期限/有效期至:" :prop="`recallPlanList[${index}].expiraeDate`" :rules="[
{ required: true, message: '使用期限/有效期至不能为空', trigger: 'blur' },
]">
<!-- <el-input v-model.number="" placeholder="请输入"></el-input> -->
<el-date-picker v-model="sizeForm.recallPlanList[index].expiraeDate" type="date" placeholder="选择日期"
format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
</el-form-item>
<el-form-item label="生产数量:" :prop="`recallPlanList[${index}].throughput`" :rules="[
{
required: true,
message: '生产数量不能为空',
trigger: 'blur',
},
{
type: 'number',
message: '生产数量必须为数值',
},
]">
<el-input v-model.number="sizeForm.recallPlanList[index].throughput
" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="召回数量:" :prop="`recallPlanList[${index}].totalSales`" :rules="[
{
required: true,
message: '召回数量不能为空',
trigger: 'blur',
},
{
type: 'number',
message: '召回数量必须为数值',
},
]">
<el-input v-model.number="sizeForm.recallPlanList[index].totalSales
" placeholder="请输入"></el-input>
</el-form-item>
<div class="anjian" @click="renderDynamicForm(item, index)">
<img src="../../../assets/images/home/tianija.png" alt="" v-if="index == 0" />
<img src="../../../assets/images/home/xianshishan.png" alt="" v-else />
</div>
</div>
<!-- 第六 orderRecallNotice -->
<div class="form form-f">
@ -157,6 +220,34 @@
</div>
</el-form>
</div>
<el-dialog :visible.sync="neibuqueren" :show-close="false" :destroy-on-close="true" :close-on-click-modal="false"
append-to-body custom-class="dialog-boxed" width="25%">
<div class="dialog-slot">
<div class="closeClick">
<div>请编辑短信内容</div>
<i class="el-icon-close" @click="neibudianji(0)"></i>
</div>
<el-form ref="duanxinfrom" :model="duanxinfrom" size="mini" :rules="duanxinfromrules">
<el-form-item label="联系方式:" prop="mobile">
<el-input placeholder="请输入" v-model="duanxinfrom.mobile"></el-input>
</el-form-item>
<div style="margin: 20px;">
</div>
<el-form-item label="短信内容:" prop="content">
<el-input placeholder="请输入" v-model="duanxinfrom.content" type="textarea" :rows="2"></el-input>
</el-form-item>
<!-- 确定重置 -->
<div class="bottom">
<el-form-item>
<el-button type="primary" @click="neibudianji(0)"></el-button>
<el-button type="success" @click="neibudianji(1)">
</el-button>
</el-form-item>
</div>
</el-form>
</div>
</el-dialog>
</el-dialog>
</template>
@ -172,6 +263,20 @@ export default {
},
data() {
return {
neibuqueren: false,
duanxinfrom: {
content: "您在辽宁省药品监督管理局智慧监管系统中有***事项待办理请通过辽宁政务服务网登录企业公共服务系统进行办理系统地址为https://lnypjg.lnzwfw.gov.cn/ggfw",
mobile: ""
},
duanxinfromrules: {
content: [{ required: true, message: "请输入", trigger: "blur" }],
mobile: [
{ required: true, message: "请输入", trigger: "blur" },
],
},
qiyedata: {},
//
title: "编辑责令召回",
suiji: Math.random() * 100,
@ -233,6 +338,46 @@ export default {
},
watch: {},
methods: {
neibudianji(type) {
if (type == 0) {
this.neibuqueren = false
this.duanxinfrom = {
content: "您在辽宁省药品监督管理局智慧监管系统中有***事项待办理请通过辽宁政务服务网登录企业公共服务系统进行办理系统地址为https://lnypjg.lnzwfw.gov.cn/ggfw",
mobile: ""
}
}
if (type == 1) {
this.$refs["duanxinfrom"].validate(async (valid) => {
if (valid) {
let result = await this.$api.Zhaohui.recallInfo(
"post",
this.sizeForm
);
if (result.code === 200) {
this.$api.login.sendInfo(this.duanxinfrom)
this.$message({
message: "添加成功",
type: "success",
});
this.$refs["sizeForm"].resetFields();
this.$refs["FileUploadTwo"].handleDelete(0);
this.$emit("addList");
setTimeout(() => {
this.neibudianji(0)
this.dialogVisible = false;
}, 500);
}
} else {
this.$message({
message: "请填写完整",
type: "warning",
});
return false;
}
})
}
},
//
querySearchAsync(queryString, cb) {
if (this.xuanzechanpinListTow.length != 0) {
@ -280,6 +425,8 @@ export default {
},
//
async xuanzechanpin(item) {
this.qiyedata = item;
console.log(item);
this.sizeForm.recallProductName = "";
this.sizeForm.entCode = item.uniscid;
@ -362,45 +509,32 @@ export default {
this.sizeForm.type = index;
this.$refs[sizeForm].validate(async (valid) => {
if (valid) {
let result = await this.$api.Zhaohui.recallInfo(
"post",
this.sizeForm
);
if (result.code === 200) {
this.$message({
message: "添加成功",
type: "success",
});
this.sizeForm = {
//
recallType: 2, // 1 2
entName: "", //
recallProductName: "", //
recallProductId: this.suiji, // ID
recallProductsType: this.recallProductsType, // 1 2
productSpecifications: "", //
recallLevel: "", // 1 2 3
recallTimeLimit: "", //
orderRecallNotice: "", //
entCode: "",
recallPlanList: [
{
productLotNumber: "", //
// recallInfoId: "", //id
throughput: "", //
totalPlannedRecalls: "", //
// totalRecalls: "", //
totalSales: "", //
},
],
};
this.$refs["sizeForm"].resetFields();
this.$refs["FileUploadTwo"].handleDelete(0);
this.$emit("addList");
setTimeout(() => {
this.dialogVisible = false;
}, 500);
if (index == 2) {
if (this.qiyedata.contactsPhone && !this.qiyedata.contactsPhone.includes("无")) {
this.duanxinfrom.mobile = this.qiyedata.contactsPhone
}
this.neibuqueren = true
} else {
let result = await this.$api.Zhaohui.recallInfo(
"post",
this.sizeForm
);
if (result.code === 200) {
this.$api.login.sendInfo(this.duanxinfrom)
this.$message({
message: "添加成功",
type: "success",
});
this.$refs["sizeForm"].resetFields();
this.$refs["FileUploadTwo"].handleDelete(0);
this.$emit("addList");
setTimeout(() => {
this.neibudianji(0)
this.dialogVisible = false;
}, 500);
}
}
} else {
this.$message({
message: "请填写完整",
@ -620,5 +754,30 @@ export default {
height: vw(16);
}
}
}
::v-deep .el-textarea__inner {
width: vw(250);
height: vh(300);
}
::v-deep .form-eTow {
.el-form-item__label {
width: vw(100);
}
.el-form-item__content {
width: vw(180);
.el-input {
width: vw(180);
.el-input__inner {
width: vw(180);
}
}
}
}
</style>

@ -32,7 +32,7 @@
<el-form-item label="产品规格:" prop="productSpecifications">
<el-input v-model="sizeForm.productSpecifications" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="召回等级:" prop="recallLevel">
<el-form-item label="召回等级:" prop="recallLevel" v-if="recallProductsType != 3">
<el-select v-model="sizeForm.recallLevel" placeholder="请输入">
<el-option label="一级召回 " :value="1"></el-option>
<el-option label="二级召回 " :value="2"></el-option>
@ -45,7 +45,8 @@
<el-form-item prop="recallTimeLimit" label="召回时限:">
<el-date-picker v-model="sizeForm.recallTimeLimit" type="datetime" align="center" :clearable="false"
format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择时间" :default-time="nowHHMM">
format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择时间"
:default-time="nowHHMM">
</el-date-picker>
</el-form-item>
<el-form-item label="产品单位:" prop="unitOfMeasure">
@ -55,7 +56,8 @@
</div>
<!-- 第五 -->
<div class="form form-e" v-for="(item, index) in sizeForm.recallPlanList" :key="index">
<div class="form form-e" v-for="(item, index) in sizeForm.recallPlanList" :key="index"
v-if="recallProductsType != 3">
<el-form-item label="产品批号:" :prop="`recallPlanList[${index}].productLotNumber`" :rules="[
{
required: true,
@ -110,6 +112,68 @@
<img src="../../../assets/images/home/xianshishan.png" alt="" v-else />
</div>
</div>
<div class="form form-e form-eTow" v-for="(item, index) in sizeForm.recallPlanList" :key="index"
v-if="recallProductsType == 3">
<el-form-item label="产品批号/生产日期:" :prop="`recallPlanList[${index}].productLotNumber`" :rules="[
{ required: true, message: '产品批号不能为空', trigger: 'blur' },
]">
<el-input v-model="sizeForm.recallPlanList[index].productLotNumber" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="净含量:" :prop="`recallPlanList[${index}].totalPlannedRecalls`" :rules="[
{
required: true,
message: '净含量不能为空',
trigger: 'blur',
},
{
type: 'number',
message: '净含量必须为数值',
},
]">
<el-input v-model.number="sizeForm.recallPlanList[index].totalPlannedRecalls" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="使用期限/有效期至:" :prop="`recallPlanList[${index}].expiraeDate`" :rules="[
{ required: true, message: '使用期限/有效期至不能为空', trigger: 'blur' },
]">
<!-- <el-input v-model.number="" placeholder="请输入"></el-input> -->
<el-date-picker v-model="sizeForm.recallPlanList[index].expiraeDate" type="date" placeholder="选择日期"
format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
</el-form-item>
<el-form-item label="生产数量:" :prop="`recallPlanList[${index}].throughput`" :rules="[
{
required: true,
message: '生产数量不能为空',
trigger: 'blur',
},
{
type: 'number',
message: '生产数量必须为数值',
},
]">
<el-input v-model.number="sizeForm.recallPlanList[index].throughput
" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="召回数量:" :prop="`recallPlanList[${index}].totalSales`" :rules="[
{
required: true,
message: '召回数量不能为空',
trigger: 'blur',
},
{
type: 'number',
message: '召回数量必须为数值',
},
]">
<el-input v-model.number="sizeForm.recallPlanList[index].totalSales
" placeholder="请输入"></el-input>
</el-form-item>
<div class="anjian" @click="renderDynamicForm(item, index)">
<img src="../../../assets/images/home/tianija.png" alt="" v-if="index == 0" />
<img src="../../../assets/images/home/xianshishan.png" alt="" v-else />
</div>
</div>
<!-- 第六 orderRecallNotice -->
<div class="form form-f">
@ -135,6 +199,35 @@
</div>
</el-form>
</div>
<el-dialog :visible.sync="neibuqueren" :show-close="false" :destroy-on-close="true" :close-on-click-modal="false"
append-to-body custom-class="dialog-boxed" width="25%">
<div class="dialog-slot">
<div class="closeClick">
<div>请编辑短信内容</div>
<i class="el-icon-close" @click="neibudianji(0)"></i>
</div>
<el-form ref="duanxinfrom" :model="duanxinfrom" size="mini" :rules="duanxinfromrules">
<el-form-item label="联系方式:" prop="mobile">
<el-input placeholder="请输入" v-model="duanxinfrom.mobile"></el-input>
</el-form-item>
<div style="margin: 20px;">
</div>
<el-form-item label="短信内容:" prop="content">
<el-input placeholder="请输入" v-model="duanxinfrom.content" type="textarea" :rows="2"></el-input>
</el-form-item>
<!-- 确定重置 -->
<div class="bottom">
<el-form-item>
<el-button type="primary" @click="neibudianji(0)"></el-button>
<el-button type="success" @click="neibudianji(1)">
</el-button>
</el-form-item>
</div>
</el-form>
</div>
</el-dialog>
</el-dialog>
</template>
@ -150,6 +243,19 @@ export default {
},
data() {
return {
neibuqueren: false,
duanxinfrom: {
content: "您在辽宁省药品监督管理局智慧监管系统中有***事项待办理请通过辽宁政务服务网登录企业公共服务系统进行办理系统地址为https://lnypjg.lnzwfw.gov.cn/ggfw",
mobile: ""
},
duanxinfromrules: {
content: [{ required: true, message: "请输入", trigger: "blur" }],
mobile: [
{ required: true, message: "请输入", trigger: "blur" },
],
},
qiyedata: {},
//
title: "新增责令召回",
suiji: Math.random() * 100,
@ -255,6 +361,8 @@ export default {
},
//
async xuanzechanpin(item) {
this.qiyedata = item;
console.log(item);
this.sizeForm.entName = item.name
this.sizeForm.recallProductName = "";
@ -295,28 +403,80 @@ export default {
Close() {
this.dialogVisible = false;
},
neibudianji(type) {
if (type == 0) {
this.neibuqueren = false
this.duanxinfrom = {
content: "您在辽宁省药品监督管理局智慧监管系统中有***事项待办理请通过辽宁政务服务网登录企业公共服务系统进行办理系统地址为https://lnypjg.lnzwfw.gov.cn/ggfw",
mobile: ""
}
}
if (type == 1) {
this.$refs["duanxinfrom"].validate(async (valid) => {
if (valid) {
let result = await this.$api.Zhaohui.recallInfo(
"post",
this.sizeForm
);
if (result.code === 200) {
this.$api.login.sendInfo(this.duanxinfrom)
this.$message({
message: "添加成功",
type: "success",
});
this.$refs["sizeForm"].resetFields();
this.$refs["FileUploadTwo"].handleDelete(0);
this.$emit("mychange");
setTimeout(() => {
this.neibudianji(0)
this.dialogVisible = false;
}, 500);
}
} else {
this.$message({
message: "请填写完整",
type: "warning",
});
return false;
}
})
}
},
//
submitForm(sizeForm, index) {
console.log(this.sizeForm);
this.sizeForm.type = index;
this.$refs[sizeForm].validate(async (valid) => {
if (valid) {
let result = await this.$api.Zhaohui.recallInfo(
"post",
this.sizeForm
);
if (result.code === 200) {
this.$message({
message: "添加成功",
type: "success",
});
this.$refs["sizeForm"].resetFields();
this.$refs["FileUploadTwo"].handleDelete(0);
this.$emit("mychange");
setTimeout(() => {
this.dialogVisible = false;
}, 500);
if (index == 2) {
if (this.qiyedata.contactsPhone && !this.qiyedata.contactsPhone.includes("无")) {
this.duanxinfrom.mobile = this.qiyedata.contactsPhone
}
this.neibuqueren = true
} else {
let result = await this.$api.Zhaohui.recallInfo(
"post",
this.sizeForm
);
if (result.code === 200) {
this.$api.login.sendInfo(this.duanxinfrom)
this.$message({
message: "添加成功",
type: "success",
});
this.$refs["sizeForm"].resetFields();
this.$refs["FileUploadTwo"].handleDelete(0);
this.$emit("mychange");
setTimeout(() => {
this.neibudianji(0)
this.dialogVisible = false;
}, 500);
}
}
} else {
this.$message({
message: "请填写完整",
@ -428,7 +588,7 @@ export default {
.form-f {
display: flex;
align-items: center;
padding: 0 0 0 vw(15);
padding: 0 0 0 vw(10);
.form-f-titme {
width: vw(140);
@ -521,4 +681,31 @@ export default {
}
}
}
::v-deep .el-textarea__inner {
width: vw(250);
height: vh(300);
}
::v-deep .form-eTow {
.el-form-item__label {
width: vw(100);
}
.el-form-item__content {
width: vw(180);
.el-input {
width: vw(180);
.el-input__inner {
width: vw(180);
}
}
}
}
</style>

@ -1,6 +1,6 @@
<template>
<el-dialog :visible.sync="dialogVisible" :show-close="false" :destroy-on-close="true" :close-on-click-modal="false"
append-to-body custom-class="dialog-boxed" width="80%">
append-to-body custom-class="dialog-boxed" width="83%">
<div class="dialog-slot">
<div class="closeClick">
<div>产品召回审批</div>
@ -20,7 +20,7 @@
<el-form-item label="产品规格:" prop="productSpecifications">
<el-input v-model="sizeForm.productSpecifications" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="召回等级:" prop="recallLevel">
<el-form-item label="召回等级:" prop="recallLevel" v-if="recallProductsType != 3">
<el-input v-model="sizeForm.recallLevel" placeholder="请输入">
</el-input>
</el-form-item>
@ -37,7 +37,8 @@
</el-form-item>
</div>
<!-- 第五 -->
<div class="form form-e" v-for="(item, index) in sizeForm.recallPlanList" :key="index">
<div class="form form-e" v-for="(item, index) in sizeForm.recallPlanList" :key="index"
v-if="recallProductsType != 3">
<el-form-item label="产品批号:" :prop="`recallPlanList[${index}].productLotNumber`" :rules="[
{
required: true,
@ -92,6 +93,68 @@
<img src="../../../assets/images/home/xianshishan.png" alt="" v-else />
</div>
</div>
<div class="form form-e form-eTow" v-for="(item, index) in sizeForm.recallPlanList" :key="index"
v-if="recallProductsType == 3">
<el-form-item label="产品批号/生产日期:" :prop="`recallPlanList[${index}].productLotNumber`" :rules="[
{ required: true, message: '产品批号不能为空', trigger: 'blur' },
]">
<el-input v-model="sizeForm.recallPlanList[index].productLotNumber" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="净含量:" :prop="`recallPlanList[${index}].totalPlannedRecalls`" :rules="[
{
required: true,
message: '净含量不能为空',
trigger: 'blur',
},
{
type: 'number',
message: '净含量必须为数值',
},
]">
<el-input v-model.number="sizeForm.recallPlanList[index].totalPlannedRecalls" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="使用期限/有效期至:" :prop="`recallPlanList[${index}].expiraeDate`" :rules="[
{ required: true, message: '使用期限/有效期至不能为空', trigger: 'blur' },
]">
<!-- <el-input v-model.number="" placeholder="请输入"></el-input> -->
<el-date-picker v-model="sizeForm.recallPlanList[index].expiraeDate" type="date" placeholder="选择日期"
format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
</el-form-item>
<el-form-item label="生产数量:" :prop="`recallPlanList[${index}].throughput`" :rules="[
{
required: true,
message: '生产数量不能为空',
trigger: 'blur',
},
{
type: 'number',
message: '生产数量必须为数值',
},
]">
<el-input v-model.number="sizeForm.recallPlanList[index].throughput
" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="召回数量:" :prop="`recallPlanList[${index}].totalSales`" :rules="[
{
required: true,
message: '召回数量不能为空',
trigger: 'blur',
},
{
type: 'number',
message: '召回数量必须为数值',
},
]">
<el-input v-model.number="sizeForm.recallPlanList[index].totalSales
" placeholder="请输入"></el-input>
</el-form-item>
<div class="anjian" @click="renderDynamicForm(item, index)">
<img src="../../../assets/images/home/tianija.png" alt="" v-if="index == 0" />
<img src="../../../assets/images/home/xianshishan.png" alt="" v-else />
</div>
</div>
<!-- 第六 orderRecallNotice -->
<div class="form form-f">
@ -771,5 +834,26 @@ export default {
.el-date-editor.el-input {
width: vw(242);
}
}
::v-deep .form-eTow {
.el-form-item__label {
width: vw(100);
}
.el-form-item__content {
width: vw(180);
.el-input {
width: vw(180);
.el-input__inner {
width: vw(180);
}
}
}
}
</style>

@ -288,11 +288,11 @@
<span>{{ scope.row.sczt == "0" ? "未生产" : "生产" }}</span>
</template>
</el-table-column>
<el-table-column prop="" label="年度内是否变更">
<!-- <el-table-column prop="" label="年度内是否变更">
<template slot-scope="scope">
<span>{{ scope.row.sczt == "0" ? "是" : "否" }}</span>
</template>
</el-table-column>
</el-table-column> -->
<!-- <el-table-column prop="isPerformance" label="是否已填报完成">
</el-table-column> -->
<el-table-column

@ -1,6 +1,6 @@
<template>
<DialogTitle
title="药物警戒体系建设及运行情"
title="药物警戒体系建设及运行情"
ref="yunxing_dialog"
width="50%"
custom-class="dialog-boxed"

@ -1,34 +1,16 @@
<template>
<div class="filled">
<div class="tables">
<el-table
ref="filterTable"
:data="tableData"
class="tableBox"
v-loading="loadingShow"
:cell-style="columnStyle"
border
style="width: 100%"
>
<el-table-column
prop=""
label="年度"
column-key="date"
header-align="center"
min-width="50"
class-name="column-text-one"
>
<el-table ref="filterTable" :data="tableData" class="tableBox" v-loading="loadingShow" :cell-style="columnStyle"
border style="width: 100%">
<el-table-column prop="" label="年度" column-key="date" header-align="center" min-width="50"
class-name="column-text-one">
<template slot-scope="scope">
<span>{{ getYear(scope.row.tjrq) }}</span>
</template>
</el-table-column>
<el-table-column
prop="ypssxkcyrmc"
label="药品上市许可持有人"
header-align="center"
class-name="column-text-two"
min-width="100"
>
<el-table-column prop="ypssxkcyrmc" label="药品上市许可持有人" header-align="center" class-name="column-text-two"
min-width="100">
</el-table-column>
<!-- <el-table-column
prop="ssxkcyrmc"
@ -46,21 +28,10 @@
min-width="120"
>
</el-table-column> -->
<el-table-column
prop="ypssxkcyrmc"
label="填报单位"
header-align="center"
class-name="column-text-five"
min-width="100"
>
<el-table-column prop="ypssxkcyrmc" label="填报单位" header-align="center" class-name="column-text-five"
min-width="100">
</el-table-column>
<el-table-column
prop="tjrq"
label="提交日期"
header-align="center"
class-name="column-text-six"
min-width="80"
>
<el-table-column prop="tjrq" label="提交日期" header-align="center" class-name="column-text-six" min-width="80">
</el-table-column>
<!-- <div>
<el-table-column
@ -72,49 +43,30 @@
>
</el-table-column>
</div> -->
<el-table-column
label="操作"
header-align="center"
min-width="30"
class-name="column-text-eight"
>
<el-table-column label="操作" header-align="center" min-width="30" class-name="column-text-eight">
<template slot-scope="scope">
<div class="button">
<el-button
type="primary"
class="informant-btn"
@click="filesUpload(scope.$index, scope.row)"
v-hasPermi="['nianbao:btn:chakan']"
>查看</el-button
>
<el-button type="primary" class="informant-btn" @click="filesUpload(scope.$index, scope.row)"
v-hasPermi="['nianbao:btn:chakan']">查看</el-button>
</div>
</template>
</el-table-column>
</el-table>
</div>
<div class="pagination">
<span class="custom"
>{{ total }}显示
<span class="custom">{{ total }}显示
{{
total == 0
? 0
: current == 1
? current
: current * pageSize - pageSize + 1
? current
: current * pageSize - pageSize + 1
}}-
{{
mypageSizetow == current ? total : current * tableData.length
}}</span
>
<el-pagination
background
@current-change="currentChange"
@size-change="sizeChange"
:current-page="current"
:page-sizes="[10, 5]"
layout=" prev, pager, next, sizes, jumper"
:total="total"
>
}}</span>
<el-pagination background @current-change="currentChange" @size-change="sizeChange" :current-page="current"
:page-sizes="[10, 5]" layout=" prev, pager, next, sizes, jumper" :total="total">
</el-pagination>
</div>
@ -134,7 +86,7 @@ export default {
name: "zhaohuiList",
props: {
querydata: {
default: () => {},
default: () => { },
},
},
data() {
@ -213,6 +165,8 @@ export default {
// }
// }
// console.log(ypnbJkcyrts);
console.log(777, this.tableData);
},
deep: true,
},
@ -223,12 +177,14 @@ export default {
// let data = await this.$api.Nianbao.ypnbxxtsId("258279490A47091F1B75951879FD544E");
// console.log(data);
this.tableData = data.data.records;
console.log(777, this.tableData);
this.total = data.data.total;
this.current = data.data.current;
this.mypageSizetow = data.data.pages;
if (data.code == 200) this.loadingShow = false;
},
methods: {
//
showfalse() {
this.loadingShow = true;
@ -286,7 +242,7 @@ export default {
return (str) => {
if (str) {
let year = str.split("-")[0];
return year;
return year -1;
}
return "";
};
@ -302,15 +258,19 @@ export default {
</script>
<style lang="scss" scoped>
@import "@/assets/styles/utils.scss";
.hieracy-left {
color: #ff4520;
}
.hieracy-leftTow {
color: #1bb238;
}
.hieracy-right {
color: #292f38;
}
.filled {
// padding: 0 vw(25) 0 vw(17);
@ -325,59 +285,71 @@ export default {
display: flex;
align-items: center;
}
.btn-deleat {
background: #ffedee;
border: vw(1) solid #f93f4d;
::v-deep span {
display: inline-block;
color: #f93f4d;
}
}
::v-deep .column-text-one {
text-align: center;
font-size: vb(14);
line-height: vh(39);
}
::v-deep .column-text-two {
text-align: center;
font-size: vb(14);
line-height: vh(39);
}
::v-deep .column-text-three {
text-align: center;
font-size: vb(14);
line-height: vh(39);
}
::v-deep .column-text-four {
text-align: center;
font-size: vb(14);
line-height: vh(39);
}
::v-deep .column-text-five {
text-align: center;
font-size: vb(14);
line-height: vh(39);
}
::v-deep .column-text-six {
text-align: center;
font-size: vb(14);
line-height: vh(39);
}
::v-deep .column-text-seven {
text-align: center;
font-size: vb(14);
line-height: vh(39);
}
::v-deep .column-text-eight {
text-align: center;
font-size: vb(14);
line-height: vh(39);
}
::v-deep .el-table td {
height: vh(44);
padding: 0;
font-size: vb(16); }
font-size: vb(16);
}
::v-deep .el-table th {
height: vh(50);
padding: 0;
@ -387,6 +359,7 @@ export default {
color: #292f38;
line-height: vh(50);
}
::v-deep .cell {
padding: 0;
// text-align: center;
@ -394,22 +367,27 @@ export default {
align-items: center;
justify-content: center;
}
::v-deep .el-table__column-filter-trigger i {
display: none;
}
}
.tablesTow {
min-height: vh(651);
}
.pagination {
// margin-top: vh(10);
display: flex;
align-items: center;
justify-content: flex-end;
// padding-bottom: vh(20);
::v-deep .el-pagination__jump {
margin: 0;
}
.custom {
font-size: vb(14);
font-family: Source Han Regular CN;

@ -125,7 +125,7 @@ export default {
this.formInline.radio1 = result.data.sffbzqy || "无"; //
this.formInline.radio2 = result.data.sfstsc || "无"; //
this.formInline.proFirmName = result.data.stscqymc || "无"; //
this.formInline.proAddress = result.data.sczt || "无"; //
this.formInline.proAddress = result.data.scdz || "无"; //
this.formInline.proWorkShop = result.data.cj || "无"; //
this.formInline.proLine = result.data.scx || "无"; // 线
}

@ -0,0 +1,189 @@
<template>
<DialogTitle
title="风险管理情况"
ref="biangeng_dialog"
width="50%"
>
<div class="biangeng">
<el-form :model="formInline" class="demo-form-inline" v-loading="loading">
<el-form-item>
<span class="basic_span"><span class="star">*</span>药品批准文号注册证号</span>
<el-input v-model="formInline.yppzwh" placeholder=""></el-input>
</el-form-item>
<el-form-item>
<span class="basic_span"><span class="star">*</span>药品通用名称</span>
<el-input v-model="formInline.yptymc" placeholder=""></el-input>
</el-form-item>
<el-form-item>
<span class="basic_span"><span class="star">*</span>规格</span>
<el-input v-model="formInline.gg" placeholder=""></el-input>
</el-form-item>
<el-form-item>
<span class="basic_span">项目</span>
<el-input
v-model="formInline.proPeoject"
placeholder="请输入"
readonly
></el-input>
</el-form-item>
<el-form-item>
<span class="basic_span">是否委托开展药物警戒活动</span>
<el-radio-group v-model="formInline.radio1" readonly>
<el-radio label="1" disabled></el-radio>
<el-radio label="0" disabled></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item>
<span class="basic_span">附件</span>
<div class="attachment">
<div class="up_attachment_input">
<el-input
v-model="formInline.proAttachment"
placeholder="暂无"
readonly
></el-input>
<img src="@/assets/images/home/downloadFile.png" alt="" />
</div>
<!-- <span class="attachment_span">附件内容说明</span>
<span
>1.简述上市后相关情况如已完成并提交提供相关受理号批准证明文件</span
>
<span>2.文件格式仅限word只能上传一个附件大小不超过10</span> -->
</div>
</el-form-item>
</el-form>
</div>
</DialogTitle>
</template>
<script>
import DialogTitle from "@/pages/components/dialogTitle/index.vue"
export default {
data() {
return {
formInline: {
proPeoject:'', //
radio1:2, //
proAttachment:'', //
},
loading: false,
}
},
components:{DialogTitle},
methods:{
async open(item) {
// this.dialogVisible = true;
this.loading = true;
this.$refs['biangeng_dialog'].open()
let result = await this.$api.Nianbao.chacun.ypnbpzxxfxglqkts(item.id);
if (result.code == 200) {
console.log(result);
this.loading = false;
this.formInline = result.data
this.formInline.proPeoject = result.data.xm || "无";
this.formInline.radio1 = result.data.sfwnr || "无";
this.formInline.proPeoject = result.data.xm || "无";
}
},
},
}
</script>
<style lang="scss" scoped>
@import "@/assets/styles/utils.scss";
::v-deep .el-dialog__body {
padding-bottom: vh(10);
}
.biangeng {
::v-deep .el-form {
// width: 600px;
width: 100%;
.el-form-item {
margin-right: 0;
}
.el-form-item__content {
display: flex;
.el-radio-group {
flex: 1;
display: flex;
align-items: center;
// margin-left: vw(20);
.is-checked {
.el-radio__inner {
background-color: #fff;
border: vw(1) solid #1890ff;
}
.el-radio__inner::after {
width: vw(9);
height: vw(9);
background-color: #1890ff;
}
}
}
}
.el-form-item {
display: flex;
// align-items: flex-start;
.basic_span {
display: inline-block;
width: vw(210);
text-align: right;
font-size: vb(16);
font-family: Source Han Sans CN;
font-weight: 400;
color: #6a6c6f;
// line-height: vh(20);
.star {
color: #ff0808;
}
}
.attachment {
display: flex;
flex-direction: column;
justify-content: flex-start;
.up_attachment_input {
display: flex;
align-items: center;
img {
width: vw(15);
height: vh(16);
margin-top: vh(10);
margin-left: vw(10);
cursor: pointer;
}
}
.attachment_span {
margin-top: vh(10);
}
span {
font-size: vb(14);
font-family: Source Han Sans CN;
font-weight: 400;
color: #f93f4d;
line-height: vh(28);
}
}
}
.el-input {
width: vw(640);
height: vh(40);
.el-input__inner {
width: 100%;
height: 100%;
}
}
}
}
</style>

@ -217,7 +217,7 @@
min-width="140"
>
</el-table-column>
<el-table-column prop="sfwnr" label="是否有内容" align="center">
<el-table-column prop="sfwnr" label="是否有内容" align="center" width="180">
<template slot-scope="scope">
<span>{{ scope.row.sfwnr == "0" ? "否" : "是" }}</span>
</template>
@ -328,7 +328,7 @@ import RecallModule from "@/views/components/RecallModule/RecallModule.vue";
import BasicInfoDialog from "@/pages/components/pinzhongDialog/basicInfoDialog/basicInfoDialog.vue";
import AddressDialog from "@/pages/components/pinzhongDialog/addressDialog/addressDialog.vue";
import BiangengDialog from "@/pages/components/pinzhongDialog/biangengDialog/biangengDialog.vue";
import FengxianDialog from "@/pages/components/pinzhongDialog/fengxianDialog/fengxianDialog.vue";
import FengxianDialog from "@/pages/components/pinzhongDialog/fengxianDialogtow/fengxianDialog.vue";
export default {
data() {
@ -388,28 +388,30 @@ export default {
async open(b) {
this.qiyexinxi = b;
this.dialogVisible = true;
console.log(this.qiyexinxi);
//
let ypnbPzjbxxts = await this.$api.Nianbao.ypnbPzjbxxts({ypmc: this.qiyexinxi.ypmc}, "");
let ypnbPzjbxxts = await this.$api.Nianbao.ypnbPzjbxxts({yppzwh: this.qiyexinxi.yppzwh}, "");
this.jibenList = ypnbPzjbxxts.data.records;
this.jibenTotal = ypnbPzjbxxts.data.total;
//
let ypnbpzxxscdzxxts = await this.$api.Nianbao.ypnbpzxxscdzxxts({pzbgid:this.qiyexinxi.pzbgid});
// let ypnbpzxxscdzxxts = await this.$api.Nianbao.ypnbpzxxscdzxxts({pzbgid:this.qiyexinxi.pzbgid});
let ypnbpzxxscdzxxts = await this.$api.Nianbao.ypnbpzxxscdzxxts({yppzwh:this.qiyexinxi.yppzwh});
this.chandiList = ypnbpzxxscdzxxts.data.records;
this.chandiTotal = ypnbpzxxscdzxxts.data.total;
//
let ypnbpzxxcpscxsckqkts = await this.$api.Nianbao.ypnbpzxxcpscxsckqkts({pzbgid:this.qiyexinxi.pzbgid});
let ypnbpzxxcpscxsckqkts = await this.$api.Nianbao.ypnbpzxxcpscxsckqkts({yppzwh:this.qiyexinxi.yppzwh});
this.xiaoshouList = ypnbpzxxcpscxsckqkts.data.records;
this.xiaoshouTotal = ypnbpzxxcpscxsckqkts.data.total;
//
let ypnbpzxxyjjbgglts = await this.$api.Nianbao.ypnbpzxxyjjbgglts({pzbgid:this.qiyexinxi.pzbgid}, "");
let ypnbpzxxyjjbgglts = await this.$api.Nianbao.ypnbpzxxyjjbgglts({yppzwh:this.qiyexinxi.yppzwh}, "");
this.biangengList = ypnbpzxxyjjbgglts.data.records;
this.biangengTotal = ypnbpzxxyjjbgglts.data.total;
//
let ypnbpzxxfxglqkts = await this.$api.Nianbao.ypnbpzxxfxglqkts({pzbgid:this.qiyexinxi.pzbgid}, "");
let ypnbpzxxfxglqkts = await this.$api.Nianbao.ypnbpzxxfxglqkts({yppzwh:this.qiyexinxi.yppzwh}, "");
this.fengxianList = ypnbpzxxfxglqkts.data.records;
this.fengxianTotal = ypnbpzxxfxglqkts.data.total;

@ -4,41 +4,60 @@
<div class="tables">
<el-table :data="tableData" style="width: 100%" v-loading="loading" @select="selecta" @select-all="selectAll"
row-key="id" border>
<el-table-column type="selection" min-width="10" :reserve-selection="true">
</el-table-column>
<!-- <el-table-column type="selection" min-width="10" :reserve-selection="true">
</el-table-column> -->
<el-table-column prop="index" header-align="center" label="序号" width="80">
</el-table-column>
<el-table-column prop="entName" header-align="center" label="企业名称" :show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="yearReporting" header-align="center" label="年度">
<el-table-column prop="address" header-align="center" label="企业所在地" :show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="totalQuantity" label="门店数量(家)" header-align="center" >
<template slot-scope="scope">
{{ (scope.row.jmmdsl - 0 + scope.row.totalQuantity - 0) }}
</template>
<el-table-column prop="ypNumber" header-align="center" label="许可证号" :show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="sales" label="销售额" header-align="center">
<el-table-column prop="ypNumber" header-align="center" label="企业类型" :show-overflow-tooltip="true">
<template slot-scope="scope">
{{ scope.row.entType == 1 ? "药品批发" : "药品零售连锁总部" }}
</template>
</el-table-column>
<el-table-column prop="yearReporting" header-align="center" label="经营年份">
</el-table-column>
<el-table-column prop="sales" label="经营额" header-align="center">
<template slot-scope="scope">
{{ scope.row.sales }}
</template>
</el-table-column>
<el-table-column prop="salesProfit" label="销售利润" header-align="center">
<!-- <el-table-column prop="totalQuantity" label="门店数量(家)" header-align="center" >
<template slot-scope="scope">
{{ (scope.row.jmmdsl - 0 + scope.row.totalQuantity - 0) }}
</template>
</el-table-column> -->
<!-- <el-table-column prop="salesProfit" label="销售利润" header-align="center">
<template slot-scope="scope">
{{ scope.row.salesProfit }}
</template>
</el-table-column>
<el-table-column prop="debtRatio" label="负债率" header-align="center">
</el-table-column> -->
<!-- <el-table-column prop="debtRatio" label="负债率" header-align="center">
<template slot-scope="scope">
{{ scope.row.debtRatio }}%
</template>
</el-table-column>
<el-table-column prop="sellOnline" label="是否网上销售" header-align="center">
</el-table-column> -->
<!-- <el-table-column prop="sellOnline" label="是否网上销售" header-align="center">
<template slot-scope="scope">
{{ scope.row.sellOnline == 0 ? "否" : "是" }}
</template>
</el-table-column> -->
<el-table-column prop="reportingTime" label="上报日期" header-align="center">
</el-table-column>
<el-table-column prop="reportingTime" label="上报时间" header-align="center">
<el-table-column label="操作" header-align="center">
<template slot-scope="scope">
<div class="button">
<el-button size="mini" class="informant-btn" plain type="primary"
@click="handleEdit(scope.row, 'chakan')">退回
</el-button>
</div>
</template>
</el-table-column>
@ -69,7 +88,8 @@ export default {
pages: {
current: 1,
size: 10,
total: 0
total: 0,
status: 1
},
loading: false,
xingzhengchufaStyle: {
@ -86,7 +106,7 @@ export default {
methods: {
//
open(queryCondition) {
this.pages = {...queryCondition}
this.pages = { ...queryCondition }
console.log(this.pages);
this.getablist()
},
@ -100,7 +120,31 @@ export default {
this.pages.size = index
this.getablist()
},
handleEdit(row) {
this.$confirm('是否退回该数据', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
let obj = { ...row }
obj.status = 2
let reault = await this.$api.fillTask.businessInfo("put", obj)
if (reault.code == 200) {
this.$message({
type: 'success',
message: '退回成功!'
});
this.getablist()
}
}).catch(() => {
this.$message({
type: 'info',
message: '已取消退回'
});
});
},
selecta(selection, row) {
this.enterpriseList = selection;
@ -191,7 +235,7 @@ export default {
}
}
::v-deep .el-table td {
height: vh(40);
padding: 0;

@ -19,37 +19,49 @@
>
</el-table-column>
<el-table-column
prop="gg"
label="规格"
prop="yppzwh"
label="批准文号"
align="center"
min-width="120"
class-name="column-text-six"
>
</el-table-column>
<el-table-column
prop="xm"
label="项目"
prop="tjrq"
label="变更年份"
align="center"
min-width="120"
class-name="column-text-six"
>
<template slot-scope="scope">
<span >{{getYear(scope.row.tjrq) }}</span>
</template>
</el-table-column>
<el-table-column
<!-- <el-table-column
prop="sfwnr"
label="是否有内容"
align="center"
min-width="30"
class-name="column-text-six"
width="120"
>
<template slot-scope="scope">
<span>{{ scope.row.sfwnr == "0" ? "否" : "是" }}</span>
</template>
</el-table-column> -->
<el-table-column
prop="xm"
label="项目"
align="center"
min-width="50"
class-name="column-text-six"
>
</el-table-column>
<el-table-column
prop="sx"
label="事项"
align="center"
min-width="80"
min-width="50"
class-name="column-text-six"
>
<template slot-scope="scope">
@ -57,17 +69,35 @@
<span v-else>{{ scope.row.sx }}</span>
</template>
</el-table-column>
<el-table-column
prop="bagssj"
label="备案公示时间"
align="center"
min-width="100"
class-name="column-text-six"
>
</el-table-column>
<el-table-column
prop="bah"
label="备案号"
align="center"
min-width="100"
class-name="column-text-six"
>
</el-table-column>
<!-- <el-table-column
prop="count"
label="附件数量"
align="center"
min-width="30"
min-width="80"
class-name="column-text-six"
>
<!-- <template slot-scope="scope">
<template slot-scope="scope">
<span>{{ Number(scope.row.count) }}</span>
</template> -->
</el-table-column>
</template>
</el-table-column> -->
<el-table-column
prop="address"
label="操作"
@ -205,7 +235,7 @@ export default {
return (str) => {
if (str) {
let year = str.split("-")[0];
return year;
return year -1;
}
return "";
};

@ -29,10 +29,10 @@
</el-select>
</el-form-item>
<el-form-item label="是否稽查处审核:" prop="unAudit">
<el-radio-group v-model="form.unAudit">
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
<el-radio-group v-model="form.unAudit">
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
</div>
<div class="form-d">
@ -51,6 +51,7 @@
</div>
</el-form-item>
</div>
<div class="form-c">
<el-form-item label="表单填报:" prop="surveyDirectoryId">
<!-- <div class="upLoad">
@ -82,7 +83,9 @@
</div>
</el-form-item>
</div>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="deleatFrom('myfrom')"></el-button>
<el-button type="primary" @click="onSubmit('myfrom', 0)">暂存</el-button>
@ -142,6 +145,7 @@ export default {
};
return {
title: "新增填报任务",
quanping: true,
dialogFormVisible: false,
@ -455,21 +459,48 @@ export default {
return
}
}
this.$api.Tianbao.pharmaceuticals(this.form).then((res) => {
if (res.code == 200) {
this.$message({
message: "添加成功",
type: "success",
});
setTimeout(() => {
this.title = "新增填报任务";
this.deleatFrom();
this.Close();
}, 500);
this.isShow2 = false;
this.$emit("tianjia");
}
this.$prompt('', '', {
confirmButtonText: '确定',
cancelButtonText: '取消',
title: "请编辑短信内容",
inputType: "textarea",
inputValue: "您在辽宁省药品监督管理局智慧监管系统中有***事项待办理请通过辽宁政务服务网登录企业公共服务系统进行办理系统地址为https://lnypjg.lnzwfw.gov.cn/ggfw",
customClass: "customClass"
}).then(({ value }) => {
console.log(value);
this.form.entList.forEach(item => {
let obj = {}
console.log(777999, item.contactsPhone);
if (item.contactsPhone && !item.contactsPhone.includes("无")) {
obj.mobile = item.contactsPhone //
obj.content = value
this.$api.login.sendInfo(obj)
}
})
this.$api.Tianbao.pharmaceuticals(this.form).then((res) => {
if (res.code == 200) {
this.$message({
message: "添加成功",
type: "success",
});
setTimeout(() => {
this.title = "新增填报任务";
this.deleatFrom();
this.Close();
}, 500);
this.isShow2 = false;
this.$emit("tianjia");
}
});
}).catch(() => {
this.$message({
type: 'info',
message: '取消'
});
});
} else {
return false;
}
@ -568,6 +599,7 @@ export default {
.dialog-slot {
padding-left: vw(50);
.closeClick {
position: absolute;
top: vh(0);
@ -597,6 +629,8 @@ export default {
}
}
.form-a,
.form-b,
.form-c,
@ -913,4 +947,9 @@ export default {
font-size: vb(12);
}
.form-a,
.form-b {
margin-left: vw(-10) !important;
}
</style>

@ -1,213 +1,407 @@
<template>
<el-dialog :visible.sync="dialogVisible" :show-close="false" :destroy-on-close="true" :close-on-click-modal="false"
append-to-body custom-class="dialog-boxed" width="90%">
<div class="dialog-slot">
<div class="closeClick">
<div>{{ titName }}</div>
<i class="el-icon-close" @click="Close"></i>
</div>
<el-form ref="sizeForm" :model="sizeForm" size="mini" :inline="true" :inline-message="true" :rules="rules">
<RecallModule title="召回基本信息"></RecallModule>
<!-- 第一行 -->
<div class="form form-a">
<el-form-item label="产品名称:" prop="recallProductName">
<el-input v-model="sizeForm.recallProductName" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="注册证或备案凭证编码:" prop="registrationCode">
<el-input v-model="sizeForm.registrationCode" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="生产企业名称:" prop="entName">
<el-input v-model="sizeForm.entName" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="代理人名称:" prop="agentName">
<el-input v-model="sizeForm.agentName" placeholder="请输入"></el-input>
</el-form-item>
</div>
<!-- 第二行 -->
<div class="form form-b">
<el-form-item label="召回单位负责人:" prop="head">
<el-input v-model="sizeForm.head" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="联系方式:" prop="headContact">
<el-input v-model="sizeForm.headContact" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="召回经办人:" prop="jingbanren">
<el-input v-model="sizeForm.jingbanren" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="联系方式:" prop="jingbanrenContact">
<el-input v-model="sizeForm.jingbanrenContact" placeholder="请输入"></el-input>
</el-form-item>
</div>
<!-- 第三行 -->
<div class="form form-c">
<el-form-item label="产品的适用范围:" prop="scopeOfApplication">
<el-input type="textarea" resize="none" :rows="3" class="mytext" v-model="sizeForm.scopeOfApplication"
placeholder="请输入"></el-input>
</el-form-item>
</div>
<!-- 第四 -->
<div class="form form-d">
<el-form-item label="涉及地区和国家:" prop="region">
<el-input v-model="sizeForm.region" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="涉及产品型号、规格:" prop="productSpecifications">
<el-input v-model="sizeForm.productSpecifications" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="召回级别:" prop="recallLevel">
<el-input v-model="sizeForm.recallLevel" placeholder="请选择级别">
</el-input>
</el-form-item>
<el-form-item label="召回产品类型:" prop="recallProductsType">
<el-input v-model="sizeForm.recallProductsType" placeholder="请选择产品类型">
</el-input>
</el-form-item>
<div>
<el-dialog :visible.sync="dialogVisible" :show-close="false" :destroy-on-close="true" :close-on-click-modal="false"
append-to-body custom-class="dialog-boxed" width="90%" v-if="sizeFormTow.recallProductsType != 3">
<div class="dialog-slot">
<div class="closeClick">
<div>{{ titName }}</div>
<i class="el-icon-close" @click="Close"></i>
</div>
<!-- 新增单位行 -->
<div class="form form-d">
<el-form-item label="产品单位:" prop="unitOfMeasure">
<el-input placeholder="请输入" v-model="sizeForm.unitOfMeasure"></el-input>
</el-form-item>
</div>
<!-- 第五 -->
<div class="form form-e" v-for="(item, index) in sizeForm.recallPlanList" :key="index">
<el-form-item label="产品批号:" :prop="`recallPlanList[${index}].productLotNumber`" :rules="[
{ required: true, message: '产品批号不能为空', trigger: 'blur' },
]">
<el-input v-model="sizeForm.recallPlanList[index].productLotNumber" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="产品生产量:" :prop="`recallPlanList[${index}].throughput`" :rules="[
{
required: true,
message: '产品生产量不能为空',
trigger: 'blur',
},
{
type: 'number',
message: '产品生产量必须为数值',
},
]">
<el-input v-model.number="sizeForm.recallPlanList[index].throughput" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="销售总量:" :prop="`recallPlanList[${index}].totalSales`" :rules="[
{ required: true, message: '销售总量不能为空', trigger: 'blur' },
{
type: 'number',
message: '销售总量必须为数值',
},
]">
<el-input v-model.number="sizeForm.recallPlanList[index].totalSales" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="拟召回总量:" :prop="`recallPlanList[${index}].totalPlannedRecalls`" :rules="[
{
required: true,
message: '拟召回总量不能为空',
trigger: 'blur',
},
{
type: 'number',
message: '拟召回总量必须为数值',
},
]">
<el-input v-model.number="sizeForm.recallPlanList[index].totalPlannedRecalls
" placeholder="请输入"></el-input>
</el-form-item>
<div class="anjian" @click="renderDynamicForm(item, index)">
<img src="../../../assets/images/home/tianija.png" alt="" v-if="index == 0" />
<img src="../../../assets/images/home/xianshishan.png" alt="" v-else />
<el-form ref="sizeForm" :model="sizeForm" size="mini" :inline="true" :inline-message="true" :rules="rules">
<RecallModule title="召回基本信息"></RecallModule>
<!-- 第一行 -->
<div class="form form-a">
<el-form-item label="产品名称:" prop="recallProductName">
<el-input v-model="sizeForm.recallProductName" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="注册证或备案凭证编码:" prop="registrationCode">
<el-input v-model="sizeForm.registrationCode" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="生产企业名称:" prop="entName">
<el-input v-model="sizeForm.entName" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="代理人名称:" prop="agentName">
<el-input v-model="sizeForm.agentName" placeholder="请输入"></el-input>
</el-form-item>
</div>
<!-- 第二行 -->
<div class="form form-b">
<el-form-item label="召回单位负责人:" prop="head">
<el-input v-model="sizeForm.head" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="联系方式:" prop="headContact">
<el-input v-model="sizeForm.headContact" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="召回经办人:" prop="jingbanren">
<el-input v-model="sizeForm.jingbanren" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="联系方式:" prop="jingbanrenContact">
<el-input v-model="sizeForm.jingbanrenContact" placeholder="请输入"></el-input>
</el-form-item>
</div>
<!-- 第三行 -->
<div class="form form-c">
<el-form-item label="产品的适用范围:" prop="scopeOfApplication">
<el-input type="textarea" resize="none" :rows="3" class="mytext" v-model="sizeForm.scopeOfApplication"
placeholder="请输入"></el-input>
</el-form-item>
</div>
<!-- 第四 -->
<div class="form form-d">
<el-form-item label="涉及地区和国家:" prop="region">
<el-input v-model="sizeForm.region" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="涉及产品型号、规格:" prop="productSpecifications">
<el-input v-model="sizeForm.productSpecifications" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="召回级别:" prop="recallLevel">
<el-input v-model="sizeForm.recallLevel" placeholder="请选择级别">
</el-input>
</el-form-item>
<el-form-item label="召回产品类型:" prop="recallProductsType">
<el-input v-model="sizeForm.recallProductsType" placeholder="请选择产品类型">
</el-input>
</el-form-item>
</div>
<!-- 新增单位行 -->
<div class="form form-d">
<el-form-item label="产品单位:" prop="unitOfMeasure">
<el-input placeholder="请输入" v-model="sizeForm.unitOfMeasure"></el-input>
</el-form-item>
</div>
<!-- 第五 -->
<div class="form form-e" v-for="(item, index) in sizeForm.recallPlanList" :key="index">
<el-form-item label="产品批号:" :prop="`recallPlanList[${index}].productLotNumber`" :rules="[
{ required: true, message: '产品批号不能为空', trigger: 'blur' },
]">
<el-input v-model="sizeForm.recallPlanList[index].productLotNumber" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="产品生产量:" :prop="`recallPlanList[${index}].throughput`" :rules="[
{
required: true,
message: '产品生产量不能为空',
trigger: 'blur',
},
{
type: 'number',
message: '产品生产量必须为数值',
},
]">
<el-input v-model.number="sizeForm.recallPlanList[index].throughput" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="销售总量:" :prop="`recallPlanList[${index}].totalSales`" :rules="[
{ required: true, message: '销售总量不能为空', trigger: 'blur' },
{
type: 'number',
message: '销售总量必须为数值',
},
]">
<el-input v-model.number="sizeForm.recallPlanList[index].totalSales" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="拟召回总量:" :prop="`recallPlanList[${index}].totalPlannedRecalls`" :rules="[
{
required: true,
message: '拟召回总量不能为空',
trigger: 'blur',
},
{
type: 'number',
message: '拟召回总量必须为数值',
},
]">
<el-input v-model.number="sizeForm.recallPlanList[index].totalPlannedRecalls
" placeholder="请输入"></el-input>
</el-form-item>
<div class="anjian" @click="renderDynamicForm(item, index)">
<img src="../../../assets/images/home/tianija.png" alt="" v-if="index == 0" />
<img src="../../../assets/images/home/xianshishan.png" alt="" v-else />
</div>
</div>
</div>
<!-- 第六 -->
<div class="form form-f">
<el-form-item label="召回原因简述:" prop="cause">
<el-input type="textarea" resize="none" :rows="3" class="myjianshu" v-model="sizeForm.cause"
placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="纠正行动简述:" prop="rectify">
<el-input type="textarea" resize="none" :rows="3" class="myjianshu" v-model="sizeForm.rectify"
placeholder="请输入"></el-input>
</el-form-item>
</div>
<!-- 第六 -->
<div class="form form-f">
<el-form-item label="召回原因简述:" prop="cause">
<el-input type="textarea" resize="none" :rows="3" class="myjianshu" v-model="sizeForm.cause"
placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="纠正行动简述:" prop="rectify">
<el-input type="textarea" resize="none" :rows="3" class="myjianshu" v-model="sizeForm.rectify"
placeholder="请输入"></el-input>
</el-form-item>
</div>
<RecallModule title="召回文件附件">
<div class="file-content">
<div class="files filesOne">
<el-form-item prop="assessmentReport">
<div class="file-one">
<span>召回评估报告</span>
<fileDeliverAll ref="clear1" :isShowTip="false" v-model="sizeForm.assessmentReport" :deleatShan="false">
</fileDeliverAll>
</div>
</el-form-item>
</div>
<div class="files">
<el-form-item prop="voucher">
<div class="file-two">
<span class="span">公示凭证</span>
<fileDeliver ref="clear2" :isShowTip="false" :fileType="fileType" upText="选择图片" margintop="5"
:isImg="true" v-model="sizeForm.voucher" :deleatShan="false"></fileDeliver>
</div>
</el-form-item>
</div>
<div class="files filesOne">
<el-form-item prop="plan">
<div class="file-one">
<span>召回计划</span>
<fileDeliverAll ref="clear3" :isShowTip="false" v-model="sizeForm.plan" :deleatShan="false">
</fileDeliverAll>
</div>
</el-form-item>
</div>
<div class="files">
<el-form-item prop="evidence">
<div class="file-two">
<span class="span">备案凭证</span>
<fileDeliver ref="clear4" :isShowTip="false" :deleatShan="false" :fileType="fileType" upText="选择图片"
:isImg="true" margintop="5" v-model="sizeForm.evidence"></fileDeliver>
<div class="duoyu">
<!-- <el-button @click="resetForm(3)"></el-button> -->
<RecallModule title="召回文件附件">
<div class="file-content">
<div class="files filesOne">
<el-form-item prop="assessmentReport">
<div class="file-one">
<span>召回评估报告</span>
<fileDeliverAll ref="clear1" :isShowTip="false" v-model="sizeForm.assessmentReport"
:deleatShan="false">
</fileDeliverAll>
</div>
</div>
</el-form-item>
</div>
<div class="files filesOne">
<el-form-item prop="notice">
<div class="file-one">
<span>召回通知</span>
<fileDeliverAll ref="clear5" :isShowTip="false" v-model="sizeForm.notice" :deleatShan="false">
</fileDeliverAll>
</div>
</el-form-item>
</el-form-item>
</div>
<div class="files">
<el-form-item prop="voucher">
<div class="file-two">
<span class="span">公示凭证</span>
<fileDeliver ref="clear2" :isShowTip="false" :fileType="fileType" upText="选择图片" margintop="5"
:isImg="true" v-model="sizeForm.voucher" :deleatShan="false"></fileDeliver>
</div>
</el-form-item>
</div>
<div class="files filesOne">
<el-form-item prop="plan">
<div class="file-one">
<span>召回计划</span>
<fileDeliverAll ref="clear3" :isShowTip="false" v-model="sizeForm.plan" :deleatShan="false">
</fileDeliverAll>
</div>
</el-form-item>
</div>
<div class="files">
<el-form-item prop="evidence">
<div class="file-two">
<span class="span">备案凭证</span>
<fileDeliver ref="clear4" :isShowTip="false" :deleatShan="false" :fileType="fileType" upText="选择图片"
:isImg="true" margintop="5" v-model="sizeForm.evidence"></fileDeliver>
<div class="duoyu">
<!-- <el-button @click="resetForm(3)"></el-button> -->
</div>
</div>
</el-form-item>
</div>
<div class="files filesOne">
<el-form-item prop="notice">
<div class="file-one">
<span>召回通知</span>
<fileDeliverAll ref="clear5" :isShowTip="false" v-model="sizeForm.notice" :deleatShan="false">
</fileDeliverAll>
</div>
</el-form-item>
</div>
</div>
</RecallModule>
<!-- 确定重置 -->
<div class="bottom">
<el-form-item>
<el-button @click="submitForm('1', 2)" v-show="false"></el-button>
<el-button @click="submitForm('1', 2)">驳回</el-button>
<el-button type="primary" @click="submitForm('1', 3)">通过</el-button>
</el-form-item>
</div>
</RecallModule>
<!-- 确定重置 -->
<div class="bottom">
<el-form-item>
<el-button @click="submitForm('1', 2)" v-show="false"></el-button>
<el-button @click="submitForm('1', 2)">驳回</el-button>
<el-button type="primary" @click="submitForm('1', 3)">通过</el-button>
</el-form-item>
</el-form>
</div>
</el-dialog>
<el-dialog :visible.sync="dialogVisible" :show-close="false" :destroy-on-close="true" :close-on-click-modal="false"
append-to-body custom-class="dialog-boxed" width="90%" v-else>
<div class="dialog-slot">
<div class="closeClick">
<div>申请产品召回</div>
<i class="el-icon-close" @click="Close"></i>
</div>
</el-form>
<dialogTitle ref="dialogTitle" title="审批驳回" width="35%">
<div class="xiaoxi">
<div class="xiaoxi-box">
<span class="xiaoxi-box-span">驳回原因</span>
<el-input type="textarea" :rows="4" placeholder="请输入内容" v-model="textarea" class="xiaoxi-box-textarea"
resize="none"></el-input>
<el-form ref="sizeForm" :model="sizeForm" size="mini" :inline="true" :inline-message="true" :rules="rulesTow">
<RecallModule title="召回企业信息"></RecallModule>
<!-- 第一行 -->
<div class="form form-a">
<el-form-item label="企业名称:" prop="entName">
<el-input v-model="sizeForm.entName" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="地址:" prop="address">
<el-input v-model="sizeForm.address" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="统一信社会信用代码:" prop="entCode">
<el-input v-model="sizeForm.entCode" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="法定代表人:" prop="legal">
<el-input v-model="sizeForm.legal" placeholder="请输入"></el-input>
</el-form-item>
</div>
<!-- 第二行 -->
<div class="form form-b">
<el-form-item label="法人联系电话:" prop="legalPhone">
<el-input v-model="sizeForm.legalPhone" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="企业联系人:" prop="contact">
<el-input v-model="sizeForm.contact" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="企业联系人电话:" prop="phone">
<el-input v-model="sizeForm.phone" placeholder="请输入"></el-input>
</el-form-item>
</div>
<RecallModule title="召回产品信息"></RecallModule>
<!-- 第三行 -->
<!-- <div class="form form-c">
<el-form-item label="召回启动日期:" prop="scopeOfApplication">
<el-input type="textarea" resize="none" :rows="3" class="mytext" v-model="sizeForm.scopeOfApplication"
placeholder="请输入"></el-input>
</el-form-item>
</div> -->
<!-- 第四 -->
<div class="form form-d">
<el-form-item label="召回启动日期:" prop="recallTime">
<!-- <el-input v-model="sizeForm.recallTime" placeholder="请输入"></el-input> -->
<el-date-picker v-model="sizeForm.recallTime" type="date" placeholder="选择日期" format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
</el-form-item>
<el-form-item label="报告日期:" prop="reportTime">
<!-- <el-input v-model="sizeForm.reportTime" placeholder="请输入"></el-input> -->
<el-date-picker v-model="sizeForm.reportTime" type="date" placeholder="选择日期" format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
</el-form-item>
<el-form-item label="召回产品名称:" prop="recallProductName">
<el-input v-model="sizeForm.recallProductName" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="注册/备案号:" prop="recordNumber">
<el-input v-model="sizeForm.recordNumber" placeholder="请输入"></el-input>
</el-form-item>
<!-- <el-form-item label="召回产品类型:" prop="recallProductsType">
<el-select v-model="sizeForm.recallProductsType" placeholder="请选择产品类型">
<el-option label="药品" value="1"></el-option>
<el-option label="医疗器械" value="2"></el-option>
</el-select>
</el-form-item> -->
</div>
<!-- 新增单位行 -->
<div class="form form-d">
<el-form-item label="涉及批次数:" prop="numberInvolve">
<el-input placeholder="请输入" v-model="sizeForm.numberInvolve"></el-input>
</el-form-item>
<el-form-item label="涉及产品数量:" prop="productInvolve">
<el-input placeholder="请输入" v-model.number="sizeForm.productInvolve"></el-input>
</el-form-item>
<el-form-item label="销售数量:" prop="saleNumber">
<el-input placeholder="请输入" v-model.number="sizeForm.saleNumber"></el-input>
</el-form-item>
<el-form-item label="召回数量:" prop="remainRecall">
<el-input placeholder="请输入" v-model.number="sizeForm.remainRecall"></el-input>
</el-form-item>
</div>
<!-- 第五 -->
<div class="form form-e form-eTow" v-for="(item, index) in sizeForm.recallPlanList" :key="index">
<el-form-item label="产品批号/生产日期:" :prop="`recallPlanList[${index}].productLotNumber`" :rules="[
{ required: true, message: '产品批号不能为空', trigger: 'blur' },
]">
<el-input v-model="sizeForm.recallPlanList[index].productLotNumber" placeholder="请输入"></el-input>
</el-form-item>
<div class="xiaoxi-btn">
<el-button size="mini" @click="textarea = ''">重置</el-button>
<el-button type="primary" size="mini" @click="submitForm('queding', 2)"> </el-button>
<el-form-item label="净含量:" :prop="`recallPlanList[${index}].totalPlannedRecalls`" :rules="[
{
required: true,
message: '净含量不能为空',
trigger: 'blur',
},
{
type: 'number',
message: '净含量必须为数值',
},
]">
<el-input v-model.number="sizeForm.recallPlanList[index].totalPlannedRecalls"
placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="使用期限/有效期至:" :prop="`recallPlanList[${index}].expiraeDate`" :rules="[
{ required: true, message: '使用期限/有效期至不能为空', trigger: 'blur' },
]">
<!-- <el-input v-model.number="" placeholder="请输入"></el-input> -->
<el-date-picker v-model="sizeForm.recallPlanList[index].expiraeDate" type="date" placeholder="选择日期"
format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
</el-form-item>
<el-form-item label="生产数量:" :prop="`recallPlanList[${index}].throughput`" :rules="[
{
required: true,
message: '生产数量不能为空',
trigger: 'blur',
},
{
type: 'number',
message: '生产数量必须为数值',
},
]">
<el-input v-model.number="sizeForm.recallPlanList[index].throughput
" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="召回数量:" :prop="`recallPlanList[${index}].totalSales`" :rules="[
{
required: true,
message: '召回数量不能为空',
trigger: 'blur',
},
{
type: 'number',
message: '召回数量必须为数值',
},
]">
<el-input v-model.number="sizeForm.recallPlanList[index].totalSales
" placeholder="请输入"></el-input>
</el-form-item>
<div class="anjian" @click="renderDynamicForm(item, index)">
<img src="../../../assets/images/home/tianija.png" alt="" v-if="index == 0" />
<img src="../../../assets/images/home/xianshishan.png" alt="" v-else />
</div>
</div>
<!-- 第六 -->
<div class="form form-f">
<el-form-item label="召回原因简述:" prop="cause">
<el-input type="textarea" resize="none" :rows="3" class="myjianshu" v-model="sizeForm.cause"
placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="纠正行动简述:" prop="rectify">
<el-input type="textarea" resize="none" :rows="3" class="myjianshu" v-model="sizeForm.rectify"
placeholder="请输入"></el-input>
</el-form-item>
</div>
<RecallModule title="召回文件附件">
<div class="file-content">
<div class="files filesOne">
<el-form-item prop="notice">
<div class="file-one">
<span>召回通知</span>
<fileDeliverAll ref="clear5" :isShowTip="false" v-model="sizeForm.notice"></fileDeliverAll>
</div>
</el-form-item>
</div>
</div>
</RecallModule>
<!-- 确定重置 -->
<div class="bottom">
<el-form-item>
<el-button @click="submitForm('1', 2)" v-show="false"></el-button>
<el-button @click="submitForm('1', 2)">驳回</el-button>
<el-button type="primary" @click="submitForm('1', 3)">通过</el-button>
</el-form-item>
</div>
</el-form>
</div>
</el-dialog>
<dialogTitle ref="dialogTitle" title="审批驳回" width="35%">
<div class="xiaoxi">
<div class="xiaoxi-box">
<span class="xiaoxi-box-span">驳回原因</span>
<el-input type="textarea" :rows="4" placeholder="请输入内容" v-model="textarea" class="xiaoxi-box-textarea"
resize="none"></el-input>
</div>
<div class="xiaoxi-btn">
<el-button size="mini" @click="textarea = ''">重置</el-button>
<el-button type="primary" size="mini" @click="submitForm('queding', 2)"> </el-button>
</div>
</dialogTitle>
</div>
</el-dialog>
</div>
</dialogTitle>
</div>
</template>
<script>
@ -396,6 +590,95 @@ export default {
{ required: true, message: "请上传召回通知", trigger: "blur" },
],
},
rulesTow: {
entName: [
{ required: true, message: "请输入产品名称", trigger: "blur" },
],
address: [
{ required: true, message: "请输入地址", trigger: "blur" },
],
entCode: [
{ required: true, message: "请输入信用代码", trigger: "blur" },
],
legal: [
{ required: true, message: "请输入法定代表人", trigger: "blur" },
],
legalPhone: [
{ required: true, message: "请输入法定代表人联系方式", trigger: "blur" },
{
validator: (rule, value, callback) => {
const regExp =
/^(0|86|17951)?(13[0-9]|15[012356789]|166|17[3678]|18[0-9]|14[57])[0-9]{8}$/;
if (!regExp.test(value)) {
callback(new Error("请输入正确的手机号"));
} else {
callback();
}
},
trigger: "change",
},
],
contact: [
{ required: true, message: "请输入企业联系人", trigger: "blur" },
],
phone: [
{ required: true, message: "请输入企业联系人联系电话", trigger: "blur" },
{
validator: (rule, value, callback) => {
const regExp =
/^(0|86|17951)?(13[0-9]|15[012356789]|166|17[3678]|18[0-9]|14[57])[0-9]{8}$/;
if (!regExp.test(value)) {
callback(new Error("请输入正确的手机号"));
} else {
callback();
}
},
trigger: "change",
},
],
recallTime: [
{ required: true, message: "请输入召回启动日期", trigger: "blur" },
], reportTime: [
{ required: true, message: "请输入报告日期", trigger: "blur" },
],
recallProductName: [
{ required: true, message: "请输入召回产品名称", trigger: "blur" },
],
recordNumber: [
{ required: true, message: "请输入注册备案号", trigger: "blur" },
],
numberInvolve: [
{ required: true, message: "请输入涉及批次数", trigger: "blur" },
],
productInvolve: [
{ required: true, message: "请输入涉及产品数量", trigger: "blur" },
{
type: 'number',
message: '生产数量必须为数值',
},
],
saleNumber: [
{ required: true, message: "请输入销售数量", trigger: "blur" },
{
type: 'number',
message: '生产数量必须为数值',
},
],
remainRecall: [
{ required: true, message: "请输入召回", trigger: "blur" },
{
type: 'number',
message: '生产数量必须为数值',
},
],
cause: [
{ required: true, message: "请输入召回原因简述", trigger: "blur" },
],
notice: [
{ required: true, message: "请输入召回通知", trigger: "blur" },
],
},
fileType: ["jpg", "jpeg", "png"],
queryDada: {
assessmentReport: "",
@ -535,11 +818,16 @@ export default {
},
//
clera() {
this.$refs["clear1"].clear();
this.$refs["clear2"].clear();
this.$refs["clear3"].clear();
this.$refs["clear4"].clear();
this.$refs["clear5"].clear();
if (this.sizeFormTow.recallProductsType != 3) {
this.$refs["clear1"].clear();
this.$refs["clear2"].clear();
this.$refs["clear3"].clear();
this.$refs["clear4"].clear();
this.$refs["clear5"].clear();
} else {
this.$refs["clear5"].clear();
}
},
//
renderDynamicForm(item, index) {
@ -716,6 +1004,34 @@ export default {
}
}
::v-deep .form-eTow {
padding-left: vw(60);
.el-form-item__label {
width: vw(100);
}
.el-form-item__content {
width: vw(205);
.el-input {
width: vw(205);
.el-input__inner {
width: vw(205);
}
}
}
}
::v-deep .el-date-editor.el-input,
.el-date-editor.el-input__inner {
width: 100% !important;
}
.file-content {
pointer-events: auto;
display: grid;
@ -779,7 +1095,7 @@ export default {
.duoyu {
margin-top: 5px;
::v-deep .el-button {
::v-deep .el-button {
margin-left: vw(10);
display: inline-block;
border: vw(1) solid #1e80eb;

@ -0,0 +1,375 @@
<template>
<div class="filled">
<div class="tables">
<el-table v-loading="loading" ref="filterTable" :data="tableData" class="tableBox" :cell-style="columnStyle"
border style="width: 100%">
<el-table-column prop="index" :label="titList[0]" column-key="date" header-align="center" min-width="20"
class-name="column-text-one">
</el-table-column>
<el-table-column prop="entName" :label="titList[1]" header-align="center" class-name="column-text-two"
min-width="80">
</el-table-column>
<el-table-column prop="recallType" :label="titList[2]" header-align="center" class-name="column-text-three"
min-width="40">
<template slot-scope="scope">
<div>{{ scope.row.recallType == 1 ? "主动召回" : "责令召回" }}</div>
</template>
</el-table-column>
<el-table-column prop="recallProductName" :label="titList[3]" header-align="center"
class-name="column-text-four" min-width="70">
</el-table-column>
<el-table-column prop="createTime" :label="titList[5]" header-align="center" class-name="column-text-six"
min-width="60">
</el-table-column>
<el-table-column prop="recallStatus" :label="titList[6]" header-align="center" class-name="column-text-seven"
min-width="30">
<template slot-scope="scope">
<div>
{{
scope.row.recallStatus == 1
? "召回开始"
: scope.row.recallStatus == 2
? "进展汇报 "
: "召回完成"
}}
</div>
</template>
</el-table-column>
<el-table-column prop="examineStatus" :label="titList[7]" header-align="center" class-name="column-text-six"
min-width="30">
<template slot-scope="scope">
<div>
{{
scope.row.examineStatus == 1
? "待审批"
: scope.row.examineStatus == 2
? "审核驳回"
: scope.row.examineStatus == 3
? "审核通过"
: scope.row.examineStatus == 4
? "待上传"
: scope.row.examineStatus == 5
? "待发布"
: "-"
}}
</div>
</template>
</el-table-column>
<el-table-column :label="titList[8]" header-align="center" min-width="40" class-name="column-text-eight">
<template slot-scope="scope">
<div class="button">
<el-button type="success" class="informant-btn" @click="viewDetails(0, scope.row)"
v-hasPermi="['qixie:btn:chakan']" v-if="scope.row.examineStatus != 1 && scope.row.examineStatus != 5
">查看</el-button>
<el-button type="warning" class="informant-btn" @click="viewDetails(1, scope.row)"
v-hasPermi="['qixie:btn:shenpi']" v-if="scope.row.examineStatus != 2 && scope.row.examineStatus == 1
">审批</el-button>
<el-button v-if="scope.row.examineStatus == 5" type="primary" class="informant-btn"
@click="viewDetails(4, scope.row)">编辑</el-button>
</div>
<div class="button" v-if="scope.row.recallStatus == 3">
<el-button type="primary" class="informant-btn" @click="viewDetails(3, scope.row)"
v-hasPermi="['qixie:btn:pingjia']">评价</el-button>
</div>
</template>
</el-table-column>
</el-table>
</div>
<div class="pagination">
<span class="custom">{{ querydata.total }}显示{{
querydata.total == 0
? 0
: currentpge == 1
? currentpge
: currentpge * pagesyema - pagesyema + 1
}}-{{
querydata.pages == currentpge
? querydata.total
: currentpge * tableData.length
}}</span>
<el-pagination background @current-change="currentChange" @size-change="sizeChange"
:current-page.sync="querydata.current" :page-sizes="[10, 5]" layout=" prev, pager, next, sizes, jumper"
:total="querydata.total">
</el-pagination>
</div>
<!-- 评价 -->
<Dialog ref="Dialog" @addList="zaohuiTow" :typemy="typemy"></Dialog>
<dialogTowZhaohui ref="diologzhaohui" :titName="titName"></dialogTowZhaohui>
<!-- 审核 -->
<zhaohuiDialogTow ref="zhaohuiDialogTow" @addList="zaohuiTow"></zhaohuiDialogTow>
<!-- 召回完成 -->
<dialogTowZeling ref="dialogTowZeling" recallProductsType="3" @addList="zaohuiTow"></dialogTowZeling>
<!-- 编辑 -->
<dialogBianji ref="dialogBianji" recallProductsType="3" @addList="zaohuiTow"></dialogBianji>
</div>
<!-- </div> -->
</template>
<script>
import Dialog from "@/pages/components/dialog/index.vue";
import dialogTowZhaohui from "@/views/components/dialogTowZhaohui/dialogTow.vue";
//
import zhaohuiDialogTow from "@/pages/components/zhaohuiDialogTow/dialogTow.vue";
import dialogTowZeling from "@/pages/components/dialogTowZeling/index.vue";
//
import dialogBianji from "@/pages/components/dialogBianji/index.vue";
export default {
name: "zhaohuiList",
components: {
Dialog,
dialogTowZhaohui,
zhaohuiDialogTow,
dialogTowZeling,
dialogBianji,
},
props: {
titList: {
default: () => [],
},
tableData: {
default: () => [],
},
Mtype: {
default: "",
},
querydata: {
default: () => { },
},
typemy: {
default: 1,
}
},
data() {
return {
// 5 10
pagesyema: 10,
//
currentpge: 1,
// lodin
loading: false,
// title
titName: "",
};
},
watch: {},
methods: {
//
viewDetails(index, row) {
if (index == 3) {
console.log("评价");
console.log(row);
this.$refs["Dialog"].open(row.id, row.recallType,row);
}
if (index == 1) {
console.log("审批");
if (row.recallType == 2) {
this.$refs["dialogTowZeling"].open(1, row);
} else {
this.$refs["zhaohuiDialogTow"].open(1, row, 1);
}
}
if (index == 0) {
console.log("查看");
this.$refs.diologzhaohui.open(row);
this.titName = "产品召回详情";
}
if (index == 4) {
this.$refs["dialogBianji"].open(row);
}
},
columnStyle({ row, column, rowIndex, columnIndex }) {
if (columnIndex == 0 || columnIndex == 1 || columnIndex == 2) {
return "font-family: Source Han Regular CN;font-weight: 400;color: #292F38;";
} else if (columnIndex == 3 || columnIndex == 4 || columnIndex == 5) {
return "font-family: DIN;font-weight: 400;color: #292F38;";
} else if (columnIndex == 5) {
return "font-family: Source Han Regular CN;font-weight: normal;color: #292F38;";
}
},
currentChange(e) {
this.loading;
this.currentpge = e;
this.$emit("zaohui", e, this.pagesyema);
},
//
sizeChange(e) {
// this.querydata.current = 1;
this.pagesyema = e;
this.currentChange(this.currentpge);
},
filesUpload() { },
// lodin
lodinShow() {
this.loading = true;
},
lodinBlock() {
this.loading = false;
},
zaohuiTow() {
console.log(88888);
this.$emit("zaohui", null, null, null, 1);
},
getFlagData() { },
},
computed: {},
mounted() {
document.getElementsByClassName(
"el-pagination__jump"
)[0].childNodes[0].nodeValue = "跳至";
// this.$nextTick(() => {
// let tables = document.querySelector(".tables");
// let buttons = tables.querySelectorAll("button");
// buttons.forEach(function (button) {
// console.log(button.querySelector("span").innerHTML);
// });
// });
},
updated() { },
};
</script>
<style lang="scss" scoped>
@import "@/assets/styles/utils.scss";
.hieracy-left {
color: #ff4520;
}
.hieracy-leftTow {
color: #1bb238;
}
.hieracy-right {
color: #292f38;
}
.filled {
// padding: 0 vw(25) 0 vw(17);
.tables {
background: #fbfcfe;
// border: vw(2) solid #E9EFF7;
border-radius: vw(2);
min-height: vh(521);
// max-height: 100%;
.button {
margin: 0 vw(5);
display: flex;
align-items: center;
}
::v-deep .column-text-one {
text-align: center;
font-size: vb(14);
line-height: vh(39);
}
::v-deep .column-text-two {
text-align: center;
font-size: vb(14);
line-height: vh(39);
}
::v-deep .column-text-three {
text-align: center;
font-size: vb(14);
line-height: vh(39);
}
::v-deep .column-text-four {
text-align: center;
font-size: vb(14);
line-height: vh(39);
}
::v-deep .column-text-five {
text-align: center;
font-size: vb(14);
line-height: vh(39);
}
::v-deep .column-text-six {
text-align: center;
font-size: vb(14);
line-height: vh(39);
}
::v-deep .column-text-seven {
text-align: center;
font-size: vb(14);
line-height: vh(39);
}
::v-deep .column-text-eight {
text-align: center;
font-size: vb(14);
line-height: vh(39);
}
::v-deep .el-table td {
padding: 0 vw(5);
height: vh(45.5);
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
::v-deep .el-table th {
height: vh(50);
padding: 0;
font-size: vb(14);
font-family: Source Han Sans CN;
font-weight: bold;
color: #292f38;
line-height: vh(50);
}
::v-deep .cell {
padding: 0;
// text-align: center;
display: flex;
align-items: center;
justify-content: center;
}
::v-deep .el-table__column-filter-trigger i {
display: none;
}
}
.tablesTow {
min-height: vh(680);
}
.pagination {
margin-top: vh(20);
display: flex;
align-items: center;
justify-content: flex-end;
// padding-bottom: vh(20);
::v-deep .el-pagination__jump {
margin: 0;
}
.custom {
font-size: vb(14);
font-family: Source Han Regular CN;
font-weight: 400;
color: #292f38;
line-height: vh(28);
}
}
}
</style>

@ -134,6 +134,13 @@ export default {
pant: "/monitor/FilingMachinery",
qid: "1",
},
{
id: "1-3",
chName: "化妆品召回",
pant: "/monitor/FilingHzhuangpin",
qid: "1",
},
],
},
{
@ -302,6 +309,7 @@ export default {
});
//
this.routerListTow.sort((a, b) => a.id - b.id);
console.log(this.routerListTow);
}
}
},

@ -13,6 +13,37 @@
</el-form-item>
</div>
</div>
<div class="task-name">
<span class="task-name-text">药品经营许可证号</span>
<div class="task-input">
<el-form-item prop="ypNumber">
<el-input v-model="queryCondition.ypNumber" placeholder="请输入内容"></el-input>
</el-form-item>
</div>
</div>
<div class="task-name">
<span class="task-name-text">企业所在地</span>
<div class="task-input">
<el-form-item prop="address">
<el-input v-model="queryCondition.address" placeholder="请输入内容"></el-input>
</el-form-item>
</div>
</div>
<div class="task-name">
<span class="task-name-text">企业类型</span>
<div class="task-input">
<el-form-item prop="entType">
<el-select v-model="queryCondition.entType" placeholder="请选择">
<el-option label="药品批发" :value="1"></el-option>
<el-option label="零售连锁总部" :value="2"></el-option>
</el-select>
</el-form-item>
</div>
</div>
</div>
</div>
<div class="myfiling-top">
<div class="screen">
<div class="time-interval">
<div class="interval-text">年度</div>
<div class="interval-select">
@ -24,15 +55,15 @@
<!-- -->
</div>
</el-form-item>
</div>
</div>
<div class="btns">
<el-button class="reset" @click="resetForm('sizeForm')"></el-button>
<el-button class="inquire" @click="submitForm('sizeForm')"></el-button>
</div>
</div>
</div>
</el-form>
</MyCarVue>
@ -72,6 +103,10 @@ export default {
queryCondition: {
entName: "", //
yearReporting: "", //
entType:"",
current: 1,
size: 10,
status:1
},
isOne: false,
@ -130,7 +165,7 @@ export default {
methods: {
//
submitForm(sizeForm) {
this.$refs["policyList"].open(this.queryCondition)
},
// html Quill
@ -194,7 +229,7 @@ export default {
.task-name {
display: flex;
align-items: center;
margin-right: vw(158);
margin-right: vw(20);
.task-name-text {
// width: vw(150);
@ -207,11 +242,12 @@ export default {
// margin-right: vw(10);
}
.task-input {
width: vw(290);
width: vw(260);
::v-deep .el-input {
width: vw(500);
width: 100%;
height: vh(40);
}
@ -243,6 +279,7 @@ export default {
font-weight: 400;
color: #6a6c6f;
line-height: vh(50);
width: vw(95);
// margin-right: vw(10);
}
@ -251,6 +288,8 @@ export default {
align-items: center;
border: vw(1) solid #dbe0e8;
border-radius: vw(4);
margin-right: vw(15);
.star-time,
.end-time {
@ -272,7 +311,7 @@ export default {
::v-deep .el-input {
padding: 0 vw(10) 0 vw(20);
width: vw(500);
width: vw(250);
height: vh(40);
}
@ -312,6 +351,7 @@ export default {
.btns {
display: flex;
align-items: center;
margin-right: vw(20);
.inquire {
display: flex;

@ -92,22 +92,22 @@ export default {
},
],
options2: [{
value: '药品注册',
value: 1,
label: '药品注册'
}, {
value: '药品生产',
value: 2,
label: '药品生产'
}, {
value: '药品经营',
value: 3,
label: '药品经营'
}, {
value: '医疗器械',
value: 4,
label: '医疗器械'
}, {
value: '化妆品',
value: 5,
label: '化妆品'
}, {
value: '其他',
value: 6,
label: '其他'
},
],

@ -39,6 +39,11 @@
<el-table-column type="index" label="序号" header-align="center" class-name="column-text-one" width="80">
</el-table-column>
<el-table-column prop="problemArea" label="问题领域" header-align="center" class-name="column-text-two">
<template slot-scope="scope">
<div>{{ rutenWen(scope.row.problemArea) || "-" }}</div>
</template>
</el-table-column>
<el-table-column prop="creditName" label="提交企业" header-align="center" class-name="column-text-two">
</el-table-column>
<el-table-column prop="problemContent" label="问题描述" header-align="center" class-name="column-text-two">
</el-table-column>
@ -85,8 +90,10 @@
<i class="el-icon-close" @click="Close"></i>
</div>
<el-descriptions border>
<el-descriptions-item label="问题领域">{{ descriptions.problemArea }}</el-descriptions-item>
<el-descriptions-item label="问题领域">{{rutenWen(descriptions.problemArea) }}</el-descriptions-item>
<el-descriptions-item label="问题描述 ">{{ descriptions.problemContent }}</el-descriptions-item>
<el-descriptions-item label="提交企业 ">{{ descriptions.creditName }}</el-descriptions-item>
<el-descriptions-item label="提交人 ">{{ descriptions.createName }}</el-descriptions-item>
<el-descriptions-item label="状态">{{ descriptions.status == 1 ? '待反馈' : '已反馈' }}</el-descriptions-item>
<el-descriptions-item label="企业信用代码">
{{ descriptions.creditCode }}
@ -161,6 +168,10 @@ export default {
//
},
methods: {
rutenWen(type){
let arr = ["","药品注册","药品生产","药品经营","医疗器械","化妆品","其他"]
return arr[type]
},
open(item) {
console.log(item);
this.descriptions = item

@ -346,6 +346,23 @@ export const constantRoutes = [
],
},
},
{
// 化妆品
path: "FilingHzhuangpin",
name: "FilingHzhuangpin",
component: (resolve) =>
require(["@/pages/FilingHzhuangpin/index.vue"], resolve),
hidden: true,
meta: {
name: "化妆品召回管理",
routerIndex: "1-3",
titlefootChilder: [{
name: "业务指导",
children: list4
},
],
},
},
{
// 药品企业年报
path: "FilingLecture",

@ -17,52 +17,52 @@
<RecallModule title="召回基本信息">
<div class="loadingStatus" v-loading="loading">
<div class="recallbasic">
<div class="recallbasic" v-if="basicMsg.recallProductsType != 3">
<div class="recallbasic-item">
<div class="recallbasic-box" v-if="basicMsg.entName">
<div class="recallbasicname">企业名称:</div>
<span class="isspan">{{ basicMsg.entName || "--" }}</span>
<span>{{ basicMsg.entName || "--" }}</span>
</div>
<div class="recallbasic-box" v-if="basicMsg.registrationCode">
<div class="recallbasicname">
<div class="recallbasicname recallbasicnameTow">
注册证或备案凭证编码:
</div>
<span class="isspan">{{ basicMsg.registrationCode || "--" }}</span>
<span>{{ basicMsg.registrationCode || "--" }}</span>
</div>
<div class="recallbasic-box" v-if="basicMsg.recallProductName">
<div class="recallbasicname">召回产品:</div>
<span class="isspan">{{ basicMsg.recallProductName || "--" }}</span>
<span>{{ basicMsg.recallProductName || "--" }}</span>
</div>
<div class="recallbasic-box" v-if="basicMsg.unitOfMeasure">
<div class="recallbasicname">产品单位:</div>
<span class="isspan">{{ basicMsg.unitOfMeasure || "--" }}</span>
<span>{{ basicMsg.unitOfMeasure || "--" }}</span>
</div>
<div class="recallbasic-box" v-if="basicMsg.agentName">
<div class="recallbasicname">代理人名称:</div>
<span class="isspan">{{ basicMsg.agentName || "--" }}</span>
<span>{{ basicMsg.agentName || "--" }}</span>
</div>
<div class="recallbasic-box" v-if="basicMsg.productSpecifications">
<div class="recallbasicname">产品型号规格:</div>
<span class="isspan">{{ basicMsg.productSpecifications || "--" }}</span>
<span>{{ basicMsg.productSpecifications || "--" }}</span>
</div>
<div class="recallbasic-box" v-if="basicMsg.region">
<div class="recallbasicname">涉及地区和国家:</div>
<span class="isspan">{{ basicMsg.region || "--" }}</span>
<span>{{ basicMsg.region || "--" }}</span>
</div>
<div class="recallbasic-box" v-if="basicMsg.recallProductsType">
<div class="recallbasicname">召回类型:</div>
<span class="isspan">{{
<span>{{
basicMsg.recallProductsType == 1
? "药品"
: basicMsg.recallProductsType == 2
? "医疗器械"
: ""
: "化妆品"
}}</span>
</div>
<div class="recallbasic-box" v-if="basicMsg.rectify">
<div class="recallbasicname">纠正行动简述:</div>
<span class="isspan">{{ basicMsg.rectify || "--" }}</span>
<span>{{ basicMsg.rectify || "--" }}</span>
</div>
<div class="recallbasic-box">
<div class="recallbasicname">公示信息:</div>
@ -73,12 +73,10 @@
<span class="recalitem-color" @click="lookVoucher()"></span>
</div>
</div>
<div class="recallbasic-item">
<div class="recallbasic-box" v-if="basicMsg.recallLevel">
<div class="recallbasicname">召回等级:</div>
<span class="isspan">{{
<span>{{
basicMsg.recallLevel == 1
? "一级召回"
: basicMsg.recallLevel == 2
@ -90,24 +88,24 @@
</div>
<div class="recallbasic-box" v-if="basicMsg.head">
<div class="recallbasicname">召回单位负责人:</div>
<span class="isspan">{{ basicMsg.head || "--" }}</span>
<span>{{ basicMsg.head || "--" }}</span>
</div>
<div class="recallbasic-box" v-if="basicMsg.createTime">
<div class="recallbasicname">召回开始时间:</div>
<span class="isspan">{{ basicMsg.createTime || "--" }}</span>
<span>{{ basicMsg.createTime || "--" }}</span>
</div>
<div class="recallbasic-box" v-if="basicMsg.headContact">
<div class="recallbasicname">联系方式:</div>
<span class="isspan">{{ basicMsg.headContact || "--" }}</span>
<span>{{ basicMsg.headContact || "--" }}</span>
</div>
<div class="recallbasic-box" v-if="basicMsg.jingbanren">
<div class="recallbasicname">召回经办人:</div>
<span class="isspan">{{ basicMsg.jingbanren || "--" }}</span>
<span>{{ basicMsg.jingbanren || "--" }}</span>
</div>
<div class="recallbasic-box">
<div class="recallbasicname">召回状态:</div>
<span class="isspan">{{
<span>{{
basicMsg.recallStatus == 1
? "召回开始"
: basicMsg.recallStatus == 2
@ -127,14 +125,103 @@
</div>
<div class="recallbasic-box" v-if="basicMsg.scopeOfApplication">
<div class="recallbasicname">产品适用范围:</div>
<span class="isspan">{{ basicMsg.scopeOfApplication || "--" }}</span>
<span>{{ basicMsg.scopeOfApplication || "--" }}</span>
</div>
<div class="recallbasic-box" v-if="basicMsg.cause">
<div class="recallbasicname">召回原因简述:</div>
<span class="isspan">{{ basicMsg.cause || "--" }}</span>
<span>{{ basicMsg.cause || "--" }}</span>
</div>
</div>
</div>
<div class="recallbasic" v-else>
<div class="recallbasic-item">
<div class="recallbasic-box" v-if="basicMsg.entName">
<div class="recallbasicname">企业名称:</div>
<span>{{ basicMsg.entName || "--" }}</span>
</div>
<div class="recallbasic-box" v-if="basicMsg.address">
<div class="recallbasicname recallbasicnameTow">
地址:
</div>
<span>{{ basicMsg.address || "--" }}</span>
</div>
<div class="recallbasic-box" v-if="basicMsg.entCode">
<div class="recallbasicname">统一社会信用代码:</div>
<span>{{ basicMsg.entCode || "--" }}</span>
</div>
<div class="recallbasic-box" v-if="basicMsg.legal">
<div class="recallbasicname">法定代表人:</div>
<span>{{ basicMsg.legal || "--" }}</span>
</div>
<div class="recallbasic-box" v-if="basicMsg.legalPhone">
<div class="recallbasicname">法定代表人联系电话:</div>
<span>{{ basicMsg.legalPhone || "--" }}</span>
</div>
<div class="recallbasic-box" v-if="basicMsg.contact">
<div class="recallbasicname">企业联系人:</div>
<span>{{ basicMsg.contact || "--" }}</span>
</div>
<div class="recallbasic-box" v-if="basicMsg.phone">
<div class="recallbasicname">企业联系人电话:</div>
<span>{{ basicMsg.phone || "--" }}</span>
</div>
<div class="recallbasic-box" v-if="basicMsg.recallProductsType">
<div class="recallbasicname">召回类型:</div>
<span>{{
basicMsg.recallProductsType == 1
? "药品"
: basicMsg.recallProductsType == 2
? "医疗器械"
: "化妆品"
}}</span>
</div>
<div class="recallbasic-box" v-if="basicMsg.rectify">
<div class="recallbasicname">召回产品处理方式:</div>
<span>{{ basicMsg.rectify || "--" }}</span>
</div>
</div>
<div class="recallbasic-item">
<div class="recallbasic-box" v-if="basicMsg.recallTime">
<div class="recallbasicname">召回启动日期:</div>
<span>{{ basicMsg.recallTime || "--" }}</span>
</div>
<div class="recallbasic-box" v-if="basicMsg.reportTime">
<div class="recallbasicname">报告日期:</div>
<span>{{ basicMsg.reportTime || "--" }}</span>
</div>
<div class="recallbasic-box" v-if="basicMsg.recallProductName">
<div class="recallbasicname">召回产品名称:</div>
<span>{{ basicMsg.recallProductName || "--" }}</span>
</div>
<div class="recallbasic-box" v-if="basicMsg.recordNumber">
<div class="recallbasicname">注册/备案号:</div>
<span>{{ basicMsg.recordNumber || "--" }}</span>
</div>
<div class="recallbasic-box" v-if="basicMsg.numberInvolve">
<div class="recallbasicname">涉及批次数:</div>
<span>{{ basicMsg.numberInvolve || "--" }}</span>
</div>
<div class="recallbasic-box" v-if="basicMsg.productInvolve">
<div class="recallbasicname">涉及产品数量:</div>
<span>{{ basicMsg.productInvolve || "--" }}</span>
</div>
<div class="recallbasic-box" v-if="basicMsg.saleNumber">
<div class="recallbasicname">销售数量:</div>
<span>{{ basicMsg.saleNumber || "--" }}</span>
</div>
<div class="recallbasic-box" v-if="basicMsg.remainRecall">
<div class="recallbasicname">召回数量:</div>
<span>{{ basicMsg.remainRecall || "--" }}</span>
</div>
<div class="recallbasic-box" v-if="basicMsg.cause">
<div class="recallbasicname">召回原因:</div>
<span>{{ basicMsg.cause || "--" }}</span>
</div>
</div>
</div>
</div>
</RecallModule>
@ -166,10 +253,11 @@
<RecallModule title="召回事件附件" :tableData="fujianList" @myindex="myindex" @sizeChange="sizeChange"
:total="annexList.total" type="1">
<div class="zhaohuibaogao">
<div class="zhaohuibaogao-item" v-for="(item, index) in shijiantitle" :key="index" @click="shoWritten(index)"
:class="shijiantitleIndex == index ? 'active' : ''">
<div class="zhaohuibaogao-item"
v-for="(item, index) in basicMsg.recallProductsType != 3 ? shijiantitle : shijiantitleTow" :key="index"
@click="shoWritten(item.index)" :class="shijiantitleIndex == item.index ? 'active' : ''">
{{ item.name }}
</div>
</div>
</div>
<el-table :data="fujianList" border style="width: 100%" header-align="center" v-loading="load2">
<el-table-column type="index" label="序号" align="center" width="50">
@ -275,6 +363,20 @@ export default {
name: "召回总结报告",
},
],
shijiantitleTow: [
{
name: "召回通知",
index: 2
},
{
name: "召回进展报告",
index: 3
},
{
name: "召回总结报告",
index: 4
},
],
shijiantitleIndex: 0,
//
productData: {
@ -353,11 +455,15 @@ export default {
this.updateData = msg3.data;
},
async open(row) {
if (row.recallProductsType == 3) {
this.shijiantitleIndex = 2
}
this.rows = row.id;
this.dialogVisible = true;
this.productData.recallInfoId = row.id;
this.paramsData.recallInfoId = row.id;
this.changeQuery.recallInfoId = row.id;
this.recallmsg();
this.productMsg();
//

@ -37,8 +37,8 @@ module.exports = {
proxy: {
// detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_URL]: {
target: "https://dev-mssm-liaoning.lesdev.cn/ggfw-api",
// target: "http://192.168.0.108:9023/ggfw-api",
// target: "https://dev-mssm-liaoning.lesdev.cn/ggfw-api",
target: "http://192.168.0.119:9023/ggfw-api",
changeOrigin: true,
pathRewrite: {
["^" + process.env.VUE_APP_URL]: "",

Loading…
Cancel
Save