From ce661f0664e03fb7b7d798cf97fdd1489f4190df Mon Sep 17 00:00:00 2001 From: zhouwenxuan <1175765986@qq.com> Date: 星期五, 01 十二月 2023 16:29:06 +0800 Subject: [PATCH] 机构 --- src/views/safetyReview/institution/components/viewInstitution.vue | 439 +++++++++++++++++++++++++ src/api/backManage/insitution.js | 24 + src/views/safetyReview/notice/components/noticeDialog.vue | 8 src/views/safetyReview/institution/institution.vue | 111 +++++- src/views/safetyReview/law/components/lawDialog.vue | 221 ++++++++---- src/api/backManage/law.js | 38 ++ src/views/components/details.vue | 37 ++ src/views/safetyReview/law/law.vue | 77 +++- src/api/backManage/evaluate.js | 38 ++ 9 files changed, 867 insertions(+), 126 deletions(-) diff --git a/src/api/backManage/evaluate.js b/src/api/backManage/evaluate.js new file mode 100644 index 0000000..d3140ed --- /dev/null +++ b/src/api/backManage/evaluate.js @@ -0,0 +1,38 @@ +import request from '@/utils/request' + +export function getEvaluateList() { + return request({ + url: '/system/dictData/dictDataList', + method: 'get' + }) +} +export function addEvaluate(data) { + return request({ + url: '/system/dictType/addDictType', + method: 'post', + data: data + }) +} + +export function editEvaluate(params) { + return request({ + url: `/system/dictType/editDictType`, + method: 'put', + data: params + }) +} + +export function getLawDetail(params) { + return request({ + url: '/system/law/getLawById', + method: 'get', + params: params + }) +} +export function delEvaluate(data) { + return request({ + url: `/system/dictType/remove/` + data.id, + method: 'delete' + }) +} + diff --git a/src/api/backManage/insitution.js b/src/api/backManage/insitution.js new file mode 100644 index 0000000..de05492 --- /dev/null +++ b/src/api/backManage/insitution.js @@ -0,0 +1,24 @@ +import request from '@/utils/request' + +export function getInsitutionList() { + return request({ + url: '/system/agency/agencyList', + method: 'get' + }) +} + +export function changeInsitutionPublic(data) { + return request({ + url: '/system/agency/changePublic', + method: 'post', + data: data + }) +} + +export function getInstitutionDetail(params) { + return request({ + url: '/system/agency/getAgencyById', + method: 'get', + params: params + }) +} diff --git a/src/api/backManage/law.js b/src/api/backManage/law.js new file mode 100644 index 0000000..0be7898 --- /dev/null +++ b/src/api/backManage/law.js @@ -0,0 +1,38 @@ +import request from '@/utils/request' + +export function getLawList() { + return request({ + url: '/system/law/lawList', + method: 'get' + }) +} + +export function addLaw(data) { + return request({ + url: '/system/law/addLaw', + method: 'post', + data: data + }) +} + +export function editLaw(params) { + return request({ + url: `/system/law/editLaw`, + method: 'put', + data: params + }) +} + +export function getLawDetail(params) { + return request({ + url: '/system/law/getLawById', + method: 'get', + params: params + }) +} +export function delLaw(data) { + return request({ + url: `/system/law/remove/` + data.id, + method: 'delete' + }) +} diff --git a/src/views/components/details.vue b/src/views/components/details.vue index 985fbe8..2daf2e7 100644 --- a/src/views/components/details.vue +++ b/src/views/components/details.vue @@ -19,7 +19,7 @@ <div class="title">{{state.content.title}}</div> <el-divider border-style="dashed"/> <div class="time">更新时间:{{state.content.updateTime?state.content.updateTime:state.content.createTime}}</div> - <div v-html="state.content.content"></div> + <div v-html="state.content.content" @click="showFile($event)"></div> </div> <div class="main" v-if="state.firstClass == '法律法规'"> <div class="title">{{state.content.title}}</div> @@ -83,6 +83,8 @@ import {ElMessage} from "element-plus"; import {getLawsDetails, getNoticeDetails, getPublishDetails} from "../../api/home/homePage"; import { getDict } from "@/api/login" +import axios from "axios"; +import {getToken} from "@/utils/auth"; const route = useRoute() const router = useRouter() @@ -143,6 +145,39 @@ } } +const showFile = (e) => { + if(e.target.nodeName === 'A'){ + console.log("e",e) + e.preventDefault(); + const file = { + fileUrl: e.target.href, + fileName: e.target.download + } + axios.get( file.fileUrl,{ + headers: + { + 'Content-Type': 'application/json', + 'Authorization':getToken(), + }, + responseType: 'blob' + } + ).then(res=>{ + if (res) { + const link = document.createElement('a') + let blob = new Blob([res.data],{type: res.data.type}) + link.style.display = "none"; + link.href = URL.createObjectURL(blob); // 创建URL + link.setAttribute("download", file.fileName); + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + } else { + this.$message.error('获取文件失败') + } + this.handleClose(); + }) + } +} const back = ()=>{ if(state.firstClass == '通知公告'){ diff --git a/src/views/safetyReview/institution/components/viewInstitution.vue b/src/views/safetyReview/institution/components/viewInstitution.vue new file mode 100644 index 0000000..fb7c32e --- /dev/null +++ b/src/views/safetyReview/institution/components/viewInstitution.vue @@ -0,0 +1,439 @@ +<template> + <el-dialog v-model="dialogVisible" width="75%" top="50vh" align-center @close="closeDialog"> + <el-form ref="registerRef" :model="registerForm" class="register-form" label-position="top"> + <el-row :gutter="30"> + <el-col :span="8"> + <el-form-item prop="agency.name" label="机构名称"> + <el-input + disabled + v-model="registerForm.agency.name" + size="large" + placeholder="请输入机构名称" + > + </el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item prop="agency.creditCode" label="社会信用代码"> + <el-input + disabled + v-model="registerForm.agency.creditCode" + size="large" + placeholder="请输入社会信用代码" + > + </el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item prop="agency.attribute" label="机构属性"> + <el-radio-group v-model="registerForm.agency.attribute" style="width: 50%" disabled> + <el-radio :label="0" size="large">疆内</el-radio> + <el-radio :label="1" size="large">疆外</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="30"> + <el-col :span="12"> + <el-form-item prop="agency.area" label="实际经营地址所属区域"> + <el-input v-model="registerForm.agency.area" disabled></el-input> +<!-- <el-cascader--> +<!-- v-model="registerForm.agency.area"--> +<!-- :options="state.areaList"--> +<!-- :props="props"--> +<!-- style="width: 100%"--> +<!-- size="large"--> +<!-- />--> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item prop="agency.address" label="实际经营地址"> + <el-input + disabled + v-model="registerForm.agency.address" + size="large" + placeholder="请输入实际经营地址" + /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="30"> + <el-col :span="12"> + <el-form-item prop="agency.legalPerson" label="法定代表人"> + <el-input + disabled + v-model="registerForm.agency.legalPerson" + size="large" + placeholder="请输入法定代表人" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item prop="agency.legalPhone" label="法人电话"> + <el-input + disabled + v-model="registerForm.agency.legalPhone" + size="large" + placeholder="请输入法人电话" + /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="30"> + <el-col :span="12"> + <el-form-item prop="agency.manager" label="机构负责人"> + <el-input + disabled + v-model="registerForm.agency.manager" + size="large" + placeholder="请输入机构负责人" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item prop="agency.managerPhone" label="负责人电话"> + <el-input + disabled + v-model="registerForm.agency.managerPhone" + size="large" + placeholder="请输入负责人电话" + /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="30"> + <el-col :span="8"> + <el-form-item prop="agency.certNumber" label="资质证书编号"> + <el-input + disabled + v-model="registerForm.agency.certNumber" + size="large" + placeholder="请输入机构负责人" + /> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item prop="agency.issueDate" label="发证日期"> + <el-date-picker + disabled + v-model="registerForm.agency.issueDate" + type="date" + placeholder="请选择发证日期" + value-format="YYYY-MM-DD 00:00:00" + size="large" + style="width: 100%" + /> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item prop="agency.validDate" label="有效日期"> + <el-date-picker + disabled + v-model="registerForm.agency.validDate" + type="date" + placeholder="请选择有效日期" + value-format="YYYY-MM-DD 00:00:00" + size="large" + style="width: 100%" + /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="30"> + <el-col :span="8"> + <el-form-item prop="agency.assetValue" label="固定资产总值"> + <el-input + disabled + v-model="registerForm.agency.assetValue" + type="number" + size="large" + placeholder="请输入固定资产总值" + /> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item prop="agency.workArea" label="工作场所建筑面积"> + <el-input + disabled + type="number" + v-model="registerForm.agency.workArea" + size="large" + placeholder="请输入工作场所建筑面积" + ><template #append>㎡</template></el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item prop="agency.archiveArea" label="档案室面积"> + <el-input + disabled + type="number" + v-model="registerForm.agency.archiveArea" + size="large" + placeholder="请输入档案室面积" + ><template #append>㎡</template></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="30"> + <el-col :span="8"> + <el-form-item prop="agency.regAddress" label="注册地址"> + <el-input + disabled + v-model="registerForm.agency.regAddress" + size="large" + placeholder="请输入注册地址" + /> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item prop="agency.business" label="申请的法定安全评价业务范围"> + <el-select disabled v-model="registerForm.agency.business" placeholder="请选择业务范围" multiple size="large" style="width: 100%"> + <el-option + v-for="item in state.busList" + :key="item.id" + :label="item.label" + :value="item.id" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="30"> + <el-col :span="8"> + <el-form-item prop="agency.reportPath" label="加盖公章的《机构信息上报表》"> + <el-upload disabled :limit='state.imgLimit' :show-file-list="false" list-type="picture-card" > + <el-image v-if="imageUrl" style="width: 150px;height: 150px" :src="imageUrl" :preview-src-list="srcList"/> +<!-- <template #tip>--> +<!-- <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传1张</div>--> +<!-- </template>--> + </el-upload> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="30"> + <el-col :span="12"> + <el-form-item prop="username" label="登录用户名(字母+数字,长度在5-16之间)"> + <el-input + disabled + v-model="registerForm.username" + size="large" + placeholder="请输入登录用户名" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item prop="phone" label="用户电话"> + <el-input + disabled + v-model="registerForm.phone" + size="large" + placeholder="请输入用户电话" + /> + </el-form-item> + </el-col> + </el-row> +<!-- <el-row :gutter="30">--> +<!-- <el-col :span="12">--> +<!-- <el-form-item prop="password" label="密码">--> +<!-- <el-input--> +<!-- v-model="registerForm.password"--> +<!-- type="password"--> +<!-- size="large"--> +<!-- placeholder="请输入密码"--> +<!-- show-password--> +<!-- />--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item prop="confirmPassword" label="确认密码">--> +<!-- <el-input--> +<!-- v-model="registerForm.confirmPassword"--> +<!-- type="password"--> +<!-- size="large"--> +<!-- auto-complete="off"--> +<!-- placeholder="确认密码"--> +<!-- show-password--> +<!-- >--> +<!-- </el-input>--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- </el-row>--> + </el-form> + <el-dialog v-model="state.dialogImg"> + <el-image style="width: 100%; height: 100%" :src="state.dialogImageUrl"/> + </el-dialog> + </el-dialog> +</template> + +<script setup> +import {ref, watch, defineExpose, onMounted, reactive} from "vue" +import { getToken } from "@/utils/auth"; +import {getInstitutionDetail} from "@/api/backManage/insitution"; +import {getNoticeDetail} from "@/api/backManage/notice"; +import {ElMessage} from "element-plus"; +import {getDict} from "@/api/login"; +import {getRegionTree} from "@/api/area"; +const imageUrl = ref(""); +const srcList = ref([]); +const registerForm = ref({ + agency:{ + name: "", + creditCode: "", + attribute: 0, + area: [], + province: '', + city: '', + district: '', + address: '', + legalPerson: '', + legalPhone: '', + manager: '', + managerPhone: '', + certNumber: '', + issueDate: '', + validDate: '', + assetValue: '', + workArea: '', + archiveArea: '', + regAddress: '', + business: '', + reportPath: '', + }, + username: '', + phone: '', + password: '', + confirmPassword: '' +}); + + +const props = { + expandTrigger: 'hover', + value: 'name', + label: 'name' +} +const state = reactive({ + areaList: [], + busList: [], + fileList: [], + imgLimit: 1, + uploadUrl: import.meta.env.VITE_APP_BASE_API + '/system/common/uploadFile', + header: { + Authorization: 'Bearer ' + getToken() + }, + dialogImageUrl: '', + dialogImg: false +}) + +const loading = ref(false) +const dialogVisible = ref(false) +const registerRef = ref(null) +onMounted(()=>{ + getBusiness() + getArea() +}) + +const getBusiness = async ()=>{ + const res = await getDict({dictType: 'sys_business_scope'}) + if(res.code == 200){ + state.busList = res.data + }else{ + ElMessage.warning(res.message) + } +} + +const getArea = async ()=>{ + const type = registerForm.value.agency.attribute + const res = await getRegionTree({name: '',parentId: null,regionType: type}) + if(res.code == 200){ + state.areaList = res.data + }else{ + ElMessage.warning(res.message) + } +} + +const openDialog = async (val) => { + const param = { + agencyId: val.id + } + const res = await getInstitutionDetail(param); + if(res.code === 200){ + registerForm.value.agency = res.data + registerForm.value.agency.area = res.data.province+ " " +res.data.city + " " + res.data.district + registerForm.value.agency.business = res.data.business.split(",").map(Number) + imageUrl.value = import.meta.env.VITE_APP_BASE_API + "/" + res.data.reportPath + srcList.value.push(imageUrl.value) + // state.fileList.push({ + // 'url': imgUrl + // }) + }else{ + ElMessage.warning(res.message) + } + dialogVisible.value = true; +} + + +const closeDialog = ()=>{ + dialogVisible.value = false; + state.fileList = [] +} + +defineExpose({ + openDialog, +}) + +</script> +<style lang='scss'> +::v-deep(.el-overlay-dialog){ + .el-dialog:not(.is-fullscreen){ + margin-top: 500px !important; + } +} +</style> +<style lang='scss' scoped> +.register-form { + .el-input { + height: 40px; + input { + height: 40px; + } + } + .input-icon { + height: 39px; + width: 14px; + margin-left: 0px; + } + .el-radio-group{ + width: 200px !important; + } +} +.register-tip { + font-size: 13px; + text-align: center; + color: #bfbfbf; +} +.register-code { + width: 33%; + height: 40px; + float: right; + img { + cursor: pointer; + vertical-align: middle; + } +} +.el-register-footer { + height: 40px; + line-height: 40px; + position: fixed; + bottom: 0; + width: 100%; + text-align: center; + color: #fff; + font-family: Arial; + font-size: 12px; + letter-spacing: 1px; +} +.register-code-img { + height: 40px; + padding-left: 12px; +} +</style> diff --git a/src/views/safetyReview/institution/institution.vue b/src/views/safetyReview/institution/institution.vue index 8c4bd61..2ae317f 100644 --- a/src/views/safetyReview/institution/institution.vue +++ b/src/views/safetyReview/institution/institution.vue @@ -4,38 +4,58 @@ <el-table v-loading="loading" :data="dataList" :border="true"> <el-table-column label="序号" type="index" align="center" width="80" /> <el-table-column label="机构名称" prop="name" align="center" /> - <el-table-column label="社会信用代码" prop="code" align="center" /> - <el-table-column label="机构属性" prop="lawSubTitle" align="center" /> - <el-table-column label="所属区域" prop="area" align="center" /> - <el-table-column label="资质证书编号" prop="institution" align="center" /> - <el-table-column label="发证日期" prop="date" align="center" /> - <el-table-column label="有效期" prop="date" align="center" /> - <el-table-column label="公示状态" prop="status" align="center" /> + <el-table-column label="社会信用代码" prop="creditCode" align="center" /> + <el-table-column label="机构属性" prop="attribute" align="center" > + <template #default="scope"> + <span v-if="scope.row.attribute == 0">疆内</span> + <span v-if="scope.row.attribute == 1">疆外</span> + </template> + </el-table-column> + <el-table-column label="所属区域" prop="province" align="center" > + <template #default="scope"> + <span >{{scope.row.province}}<span v-if="scope.row.province">/</span>{{scope.row.city}}<span v-if="scope.row.district">/</span>{{scope.row.district}}</span> + </template> + </el-table-column> + <el-table-column label="资质证书编号" prop="certNumber" align="center" /> + <el-table-column label="发证日期" prop="issueDate" align="center" /> + <el-table-column label="有效期" prop="validDate" align="center" /> + <el-table-column label="公示状态" prop="status" align="center" > + <template #default="scope"> + <span v-if="scope.row.publication ===0">公示</span> + <span v-if="scope.row.publication ===1">未公示</span> + </template> + </el-table-column> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" > <template #default="scope"> - <el-button link type="primary" @click="openDialog('review',scope.row)" >查看</el-button> - <el-button link type="primary" @click="publicity(scope.row)" >{{publicMsg}}</el-button> + <el-button link type="primary" @click="openDialog(scope.row)" >查看</el-button> + <el-button link type="primary" @click="publicity(scope.row)" >{{scope.row.publicMsg}}</el-button> </template> </el-table-column> </el-table> - <pagination - v-show="total > 0" - :total="total" - v-model:page="queryParams.pageNum" - v-model:limit="queryParams.pageSize" - @pagination="getList" - /> + <div class="pag-container"> + <el-pagination + v-model:current-page="data.queryParams.pageNum" + v-model:page-size="data.queryParams.pageSize" + :page-sizes="[10,15,20,25]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + <institution-dialog ref="inRef" @getList="getList"></institution-dialog> </div> </template> <script setup> -import {getCurrentInstance, reactive, ref, toRefs} from "vue"; -import {ElMessageBox} from "element-plus"; +import {getCurrentInstance, onMounted, reactive, ref, toRefs} from "vue"; +import {ElMessage, ElMessageBox} from "element-plus"; +import institutionDialog from "./components/viewInstitution.vue" +import {changeInsitutionPublic, getInsitutionList} from "@/api/backManage/insitution"; const { proxy } = getCurrentInstance(); const loading = ref(false); const inRef = ref(); -const publicMsg = ref("公示"); const data = reactive({ queryParams: { pageNum: 1, @@ -48,18 +68,53 @@ const { queryParams, total, dataList } = toRefs(data); -const getList = () => { +onMounted(() => { + getList(); +}); +const getList = async () => { loading.value = true; - console.log("获取数据") + const res = await getInsitutionList(data.queryParams); + if(res.code === 200){ + dataList.value = res.data.list.map(item => { + return { + ...item, + publicMsg: item.publication ===0 ? '取消公示' : "公示" + } + }) + total.value = res.data.total + }else{ + ElMessage.warning(res.message) + } loading.value = false; } - -const openDialog = (type, value) => { - inRef.value.openDialog(type, value); +const handleSizeChange = (val) => { + data.queryParams.pageSize = val + getList() +} +const handleCurrentChange = (val) => { + data.queryParams.pageNum = val + getList() } -const publicity = (val) => { +const openDialog = (value) => { + inRef.value.openDialog( value); +} +const publicity = async (val) => { + const param = { + id: val.id, + publication: val.publication ===0 ? 1: 0 + } + const res = await changeInsitutionPublic(param); + if(res.code === 200){ + ElMessage({ + type: 'success', + message: '成功' + }); + getList(); + }else{ + ElMessage.warning(res.message) + } } const handleDelete = (val) => { @@ -77,3 +132,9 @@ } </script> +<style lang="scss"> +.pag-container{ + float: right; + margin-top: 10px; +} +</style> diff --git a/src/views/safetyReview/law/components/lawDialog.vue b/src/views/safetyReview/law/components/lawDialog.vue index 9033c6c..45e3868 100644 --- a/src/views/safetyReview/law/components/lawDialog.vue +++ b/src/views/safetyReview/law/components/lawDialog.vue @@ -13,59 +13,39 @@ </el-form-item> <el-form-item label="副标题:" prop="subTitle"> <el-input v-model.trim="state.form.subTitle" v-if="!isReview" ></el-input> - <span v-else>{{state.form.title}}</span> + <span v-else>{{state.form.subTitle}}</span> </el-form-item> - <el-form-item label="类别:" prop="level"> - <el-radio-group v-model="state.form.level" v-if="!isReview"> + <el-form-item label="类别:" prop="law"> + <el-radio-group v-model="law" v-if="!isReview" @change="getLawTypeContent"> <el-radio :label="1">法律</el-radio> <el-radio :label="2">法规</el-radio> <el-radio :label="3">地方性规定</el-radio> <el-radio :label="4">其他</el-radio> </el-radio-group> - <span v-else>{{state.form.level === 1 ? '法律' : state.form.level === 2? '法规' :state.form.level === 3?'地方性规定': '其他'}}</span> + <span v-else>{{state.form.lawType}}</span> </el-form-item> - <el-form-item label="颁布机构:" prop="institution"> - <el-input v-model.trim="state.form.institution" v-if="!isReview" ></el-input> - <span v-else>{{state.form.institution}}</span> + <el-form-item label="颁布机构:" prop="pubAgency"> + <el-input v-model.trim="state.form.pubAgency" v-if="!isReview" ></el-input> + <span v-else>{{state.form.pubAgency}}</span> </el-form-item> - <el-form-item label="颁布日期:" prop="publishTime"> + <el-form-item label="颁布日期:" prop="pubDate"> <el-date-picker v-if="!isReview" - v-model="state.form.publishTime" - type="date" + v-model="state.form.pubDate" + type="datetime" + value-format="YYYY-MM-DD hh:mm:ss" placeholder="请选择日期" size="default" /> - <span v-else>{{state.form.publishTime}}</span> + <span v-else>{{state.form.pubDate}}</span> </el-form-item> - <div style="margin: 0 0 15px 30px" v-if="!isReview"> - <el-upload - v-model:file-list="fileList" - class="upload-demo" - action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15" - multiple - :on-preview="handlePreview" - :on-remove="handleRemove" - :before-remove="beforeRemove" - :limit="3" - > - <el-button type="primary">附件上传</el-button> - </el-upload> - </div> - <el-form-item v-else label="附件:" > - <div class="file"> - <el-link v-for="(item,index) in state.form.fileList" type="primary" :key="index" :underline="false"> - <i class="el-icon-paperclip" style="margin-right: 5px;color: #1e6abc"></i>{{item.fileName}} - </el-link> - </div> + <el-form-item label="内容:" v-if="showEditor" prop="content"> + <we-editor ref="myEditor" :propData="state.form.content" @childFn="getEditorData" /> </el-form-item> - <el-form-item v-if="!isReview" style="margin-left: -80px" prop="content"> - <editor ref="myQuillEditor" v-model="state.form.content" :height="300"></editor> - </el-form-item> - <el-form-item label="公告内容:" v-else> - <div class="ql-container ql-snow" style="height: 300px;width: 100%;margin-top: 10px;" > + <el-form-item label="内容:" v-else> + <div class="ql-container ql-snow" style="height: 500px;width: 100%;margin-top: 10px;" > <div class="ql-editor"> - <div v-html="state.form.content"></div> + <div v-html="state.form.content" @click="showFile($event)"></div> </div> </div> </el-form-item> @@ -81,88 +61,179 @@ </template> <script setup> import {reactive, ref, toRefs} from 'vue' -import Editor from "@/components/Editor/index.vue"; +import weEditor from "@/components/WeEditor/index.vue"; import {ElMessage} from "element-plus"; +import {addLaw, editLaw, getLawDetail} from "@/api/backManage/law"; +import axios from "axios"; +import {getToken} from "@/utils/auth"; +const emit = defineEmits(["getList"]); const dialogVisible = ref(false); const title = ref(""); const lawRef = ref(); -const fileList = ref([]); -const myQuillEditor = ref(); +const myEditor = ref(); const isReview = ref(false); +const showEditor = ref(true); +const law = ref(1) const state = reactive({ form: { + id: '', title: '', subTitle: '', content: '', - level: 1, - fileList: [] + lawType: "法律", + pubAgency: '', + pubDate: '' + }, formRules:{ title: [{ required: true, message: '请填写标题', trigger: 'blur' }], - institution: [{ required: true, message: '请填写颁布机构', trigger: 'blur' }], - content: [{ required: true, message: '请输入公告内容', trigger: 'change' }], + pubAgency: [{ required: true, message: '请填写颁布机构', trigger: 'blur' }], + content: [{ required: true, message: '请输入内容', trigger: 'change' }], + pubDate:[{ required: true, message: '请选择颁布日期', trigger: 'blur' }], }, }) -const openDialog = (type, value) => { +const openDialog = async (type, value) => { isReview.value = false; + showEditor.value = false; title.value = type === 'add' ? '新增' : type ==='edit' ? '编辑' : '查看' ; - if(type === 'edit') { - state.noticeForm = value; + if(type === 'edit' || type === 'review') { + const param = { + lawId: value.id + } + const res = await getLawDetail(param); + if(res.code === 200){ + state.form = res.data + if(type === 'edit') { + law.value = res.data.lawType === '法律' ? 1 : res.data.lawType === '法规' ? 2 :res.data.lawType === '地方性规定'? 3 : 4 + } + }else{ + ElMessage.warning(res.message) + } + + } + if(type === 'add'|| type ==='edit'){ + showEditor.value = true; + isReview.value = false; } if(type === 'review') { + showEditor.value = false; isReview.value = true; - state.noticeForm = value; + } + if(type === 'add'){ + reset() } dialogVisible.value = true; } - +const getEditorData = (val) =>{ + state.form.content = val; +} +const getLawTypeContent = (val) => { + state.form.lawType = val === 1 ? '法律' : val === 2? '法规' :val === 3?'地方性规定': '其他' +} +const showFile = (e) => { + if(e.target.nodeName === 'A'){ + console.log("e",e) + e.preventDefault(); + const file = { + fileUrl: e.target.href, + fileName: e.target.download + } + axios.get( file.fileUrl,{ + headers: + { + 'Content-Type': 'application/json', + 'Authorization':getToken(), + }, + responseType: 'blob' + } + ).then(res=>{ + if (res) { + const link = document.createElement('a') + let blob = new Blob([res.data],{type: res.data.type}) + link.style.display = "none"; + link.href = URL.createObjectURL(blob); // 创建URL + link.setAttribute("download", file.fileName); + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + } else { + this.$message.error('获取文件失败') + } + this.handleClose(); + }) + } +} const onSubmit = async () => { + myEditor.value.submit(); const valid = await lawRef.value.validate(); if(valid){ - if(state.noticeForm.content === "<p><br></p>"){ - ElMessage({ - type: 'warning', - message: '请输入公告内容' - }); - return; + if(title.value === '新增'){ + const param = { + content: state.form.content, + lawType: state.form.lawType, + pubAgency: state.form.pubAgency, + pubDate: state.form.pubDate, + subTitle: state.form.subTitle, + title: state.form.title + } + const res = await addLaw(param) + if(res.code === 200){ + ElMessage({ + type: 'success', + message: '新增成功' + }); + }else{ + ElMessage.warning(res.message) + } + emit("getList") + reset(); + myEditor.value.clear(); + lawRef.value.clearValidate(); + dialogVisible.value = false; + }else if(title.value === '编辑') { + const res = await editLaw(state.form) + if(res.code === 200){ + ElMessage({ + type: 'success', + message: '编辑成功' + }); + }else{ + ElMessage.warning(res.message) + } + emit("getList") + reset(); + myEditor.value.clear(); + lawRef.value.clearValidate(); + dialogVisible.value = false; } - console.log('file, fileList',state.noticeForm.content); - lawRef.value.clearValidate(); - reset(); - dialogVisible.value = false; } } const handleClose = () => { - lawRef.value.clearValidate(); - reset(); - dialogVisible.value = false; + if(title ==="新增"|| title ==='编辑'){ + myEditor.value.clear(); + showEditor.value=false + } + lawRef.value.clearValidate(); + dialogVisible.value = false; } const reset = () => { + law.value = 1; state.form = { + id: '', title: '', subTitle: '', content: '', - level: 1, - fileList: [] + lawType: "法律", + pubAgency: '', + pubDate: '' } } -const handleRemove = (file, fileList) => { - console.log(file, fileList); -} -const handlePreview = (uploadFile) => { - console.log(uploadFile) -} -const beforeRemove = (file, fileList) => { - return this.$confirm(`确定移除 ${ file.name }?`); -} - - defineExpose({ openDialog }); diff --git a/src/views/safetyReview/law/law.vue b/src/views/safetyReview/law/law.vue index 101f29b..646c922 100644 --- a/src/views/safetyReview/law/law.vue +++ b/src/views/safetyReview/law/law.vue @@ -11,35 +11,40 @@ <!-- 表格数据 --> <el-table v-loading="loading" :data="dataList" :border="true"> - <el-table-column label="颁布时间" prop="publishTime" align="center" /> - <el-table-column label="标题" prop="lawTitle" align="center" :show-overflow-tooltip="true" width="400" /> - <el-table-column label="副标题" prop="lawSubTitle" align="center" :show-overflow-tooltip="true" width="400" /> - <el-table-column label="类别" prop="level" align="center" /> - <el-table-column label="颁布机构" prop="institution" align="center" /> + <el-table-column label="颁布时间" prop="pubDate" align="center" width="180" /> + <el-table-column label="标题" prop="title" align="center" :show-overflow-tooltip="true" width="400" /> + <el-table-column label="副标题" prop="subTitle" align="center" :show-overflow-tooltip="true" width="400" /> + <el-table-column label="类别" prop="lawType" align="center" /> + <el-table-column label="颁布机构" prop="pubAgency" align="center" /> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" > <template #default="scope"> <el-button link type="primary" @click="openDialog('review',scope.row)" >查看</el-button> - <el-button link type="primary" @click="openDialog('edit',scope.row)" v-hasPermi="['system:role:edit']">编辑</el-button> - <el-button link type="danger" @click="handleDelete(scope.row)" v-hasPermi="['system:role:remove']">删除</el-button> + <el-button link type="primary" @click="openDialog('edit',scope.row)" >编辑</el-button> + <el-button link type="danger" @click="handleDelete(scope.row)" >删除</el-button> </template> </el-table-column> </el-table> - <pagination - v-show="total > 0" - :total="total" - v-model:page="queryParams.pageNum" - v-model:limit="queryParams.pageSize" - @pagination="getList" - /> + <div class="pag-container"> + <el-pagination + v-model:current-page="data.queryParams.pageNum" + v-model:page-size="data.queryParams.pageSize" + :page-sizes="[10,15,20,25]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> <law-dialog ref="lawRef" @getList="getList"></law-dialog> </div> </template> <script setup> -import {getCurrentInstance, reactive, ref, toRefs} from "vue"; +import {getCurrentInstance, onMounted, reactive, ref, toRefs} from "vue"; import lawDialog from './components/lawDialog.vue' -import {ElMessageBox} from "element-plus"; +import {ElMessage, ElMessageBox} from "element-plus"; +import {delLaw, getLawList} from "@/api/backManage/law"; const { proxy } = getCurrentInstance(); const loading = ref(false); const lawRef = ref(); @@ -50,16 +55,31 @@ }, total: 0, dataList: [] - - }); const { queryParams, total, dataList } = toRefs(data); -const getList = () => { +onMounted(() => { + getList(); +}); +const getList = async () => { loading.value = true; - console.log("获取数据") + const res = await getLawList(data.queryParams); + if(res.code === 200){ + dataList.value = res.data.list + total.value = res.data.total + }else{ + ElMessage.warning(res.message) + } loading.value = false; +} +const handleSizeChange = (val) => { + data.queryParams.pageSize = val + getList() +} +const handleCurrentChange = (val) => { + data.queryParams.pageNum = val + getList() } const openDialog = (type, value) => { @@ -80,8 +100,23 @@ type: 'warning', }) .then( async() => { - + const res = await delLaw(val); + if(res.code === 200){ + ElMessage({ + type: 'success', + message: '删除成功' + }); + getList(); + }else{ + ElMessage.warning(res.message) + } }) } </script> +<style lang="scss"> +.pag-container{ + float: right; + margin-top: 10px; +} +</style> diff --git a/src/views/safetyReview/notice/components/noticeDialog.vue b/src/views/safetyReview/notice/components/noticeDialog.vue index c020262..91814b2 100644 --- a/src/views/safetyReview/notice/components/noticeDialog.vue +++ b/src/views/safetyReview/notice/components/noticeDialog.vue @@ -92,8 +92,7 @@ isReview.value = false; } if(type === 'add'){ - state.noticeForm.noticeContent = " "; - state.noticeForm.noticeTitle = " "; + reset() } dialogVisible.value = true; } @@ -155,7 +154,7 @@ } emit("getList") reset(); - // myEditor.value.clear(); + myEditor.value.clear(); noticeRef.value.clearValidate(); dialogVisible.value = false; }else if(title.value === '编辑') { @@ -175,7 +174,7 @@ } emit("getList") reset(); - // myEditor.value.clear(); + myEditor.value.clear(); noticeRef.value.clearValidate(); dialogVisible.value = false; } @@ -186,6 +185,7 @@ if(title ==="新增"|| title ==='编辑'){ myEditor.value.clear(); showEditor.value=false + } noticeRef.value.clearValidate(); -- Gitblit v1.9.2