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