zhouwenxuan
2023-12-07 e220a11760bb56f12da82a18e0b441dfdc588fac
bug修改
已修改18个文件
已添加1个文件
235 ■■■■ 文件已修改
src/api/backManage/law.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/backManage/notice.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/Register/index.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/permission.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/preReClick.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/request.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/details.vue 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/laws.vue 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/notice.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/components/publish.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/baseSet/area/components/areaDialog.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/baseSet/business/components/businessDialog.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/baseSet/evaluateType/components/typeDialog.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/law/components/lawDialog.vue 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/law/law.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/notice/components/noticeDialog.vue 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/userManage/expertUsers/components/expertDialog.vue 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safetyReview/userManage/superviseUsers/components/superviseDialog.vue 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/backManage/law.js
@@ -1,9 +1,10 @@
import request from '@/utils/request'
export function getLawList() {
export function getLawList(params) {
    return request({
        url: '/system/law/lawList',
        method: 'get'
        method: 'get',
        params: params
    })
}
src/api/backManage/notice.js
@@ -1,9 +1,11 @@
import request from '@/utils/request'
export function getNoticeList() {
export function getNoticeList(params) {
    return request({
        url: '/system/notice/noticeList',
        method: 'get'
        method: 'get',
        params: params
    })
}
src/layout/components/Register/index.vue
@@ -276,6 +276,7 @@
            type="primary"
            style="width:40%;margin: 0 auto"
            @click.prevent="handleRegister"
            v-preReClick
          >
            <div v-if="state.title == '新增/注册'">
              <span v-if="!loading">注 册</span>
@@ -472,10 +473,11 @@
    }
  getBusiness()
  watchEffect(() => {
    // 在副作用中调用 getArea()
    getArea();
  });
    getArea()
  // watchEffect(() => {
  //   // 在副作用中调用 getArea()
  //   getArea();
  // });
})
const isAbleEdit = ref(false);
const openDialog=(type, value)=>{
src/main.js
@@ -43,6 +43,8 @@
// 字典标签组件
import DictTag from '@/components/DictTag'
import preReClick from "@/utils/preReClick";
import { Boot } from '@wangeditor/editor'
import attachmentModule from '@wangeditor/plugin-upload-attachment'
import loadMore from '@/utils/selectLoadMoreDirective'
@@ -73,6 +75,7 @@
app.use(store)
app.use(plugins)
app.use(elementIcons)
app.use(preReClick)
app.component('svg-icon', SvgIcon)
app.directive('loadMore',loadMore)
directive(app)
src/permission.js
@@ -52,7 +52,8 @@
      // 在免登录白名单,直接进入
      next()
    } else {
      next(`/homePage?redirect=${to.fullPath}`) // 否则全部重定向到登录页
      // next(`/homePage?redirect=${to.fullPath}`) // 否则全部重定向到登录页
      next('/homePage')
      NProgress.done()
    }
  }
src/utils/preReClick.js
对比新文件
@@ -0,0 +1,14 @@
export default (app) => {
    app.directive('preReClick', {
        mounted(el, binding) {
            el.addEventListener('click', () => {
                if (!el.disabled) {
                    el.disabled = true;
                    setTimeout(() => {
                        el.disabled = false;
                    }, binding.value || 2000)
                }
            })
        }
    })
}
src/utils/request.js
@@ -1,6 +1,6 @@
import axios from 'axios'
import { ElNotification , ElMessageBox, ElMessage, ElLoading } from 'element-plus'
import { getToken } from '@/utils/auth'
import {getToken, removeToken} from '@/utils/auth'
import errorCode from '@/utils/errorCode'
import { tansParams, blobValidate } from '@/utils/ruoyi'
import cache from '@/plugins/cache'
@@ -87,11 +87,13 @@
          isRelogin.show = true;
          ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => {
            isRelogin.show = false;
            useUserStore().logOut().then(() => {
              // router.push('/homePage')
              location.href = '/homePage';
            })
            removeToken()
            location.href = '/homePage';
            // useUserStore().logOut().then(() => {
            //   // router.push('/homePage')
            //
            //   location.href = '/homePage';
            // })
          }).catch(() => {
            isRelogin.show = false
          });
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" @click="showFile($event)"></div>
      <div v-html="state.content.content" class="reviewTable" @click="showFile($event)"></div>
    </div>
    <div class="main" v-if="state.firstClass == '法律法规'">
      <div class="title">{{state.content.title}}</div>
@@ -27,7 +27,7 @@
      <div class="info"><span>法律法规类别:{{state.content.lawType}}</span><span>颁布机构:{{state.content.pubAgency}}</span><span>颁布日期:{{state.content.pubDate}}</span></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" class="reviewTable" @click="showFile($event)"></div>
    </div>
    <div class="main" v-if="state.firstClass == '机构公示'">
      <div class="title">{{state.content.name}}</div>
@@ -96,7 +96,7 @@
})
const emit = defineEmits(['backJump'])
onMounted(()=>{
  getBusiness()
  // getBusiness()
})
onUnmounted(()=>{
@@ -301,5 +301,19 @@
      }
    }
  }
    .reviewTable {
        :deep(table){
            border: 1px solid #ccc;
            text-align: center;
        }
        :deep(table td){
            border: 1px solid #ccc;
            text-align: center;
            padding: 0 5px;
        }
        :deep(table th){
            border: 1px solid #ccc;
        }
    }
}
</style>
src/views/components/laws.vue
@@ -7,8 +7,8 @@
            <el-input v-model="state.querys.title" />
          </el-form-item>
        </el-form>
        <el-button type="primary" :icon="Search" class="searchBtn">搜索</el-button>
        <el-button type="primary" :icon="Refresh" class="resetBtn">重置</el-button>
        <el-button type="primary" :icon="Search" class="searchBtn" v-model="state.querys.title" @click="search">搜索</el-button>
        <el-button type="primary" :icon="Refresh" class="resetBtn" @click="reset">重置</el-button>
      </div>
      <div class="list">
        <div v-for="item in state.dataList" @click="openDetails('法律法规',item.id)">
@@ -23,8 +23,6 @@
      </div>
      <div class="pag-container" v-if="state.total&&state.total>0">
        <el-pagination
            v-model:current-page="state.querys.pageNum"
            v-model:page-size="state.querys.pageSize"
            :page-sizes="[10,15,20,25]"
            layout="total, sizes, prev, pager, next, jumper"
            :total="state.total"
@@ -89,7 +87,18 @@
  state.querys.pageNum = val
  getData()
}
const search = () => {
    getData()
}
const reset = () => {
    state.querys = {
        title: '',
        content: '',
        pageNum: 1,
        pageSize: 10
    }
    getData()
}
const openDetails = (type,id)=>{
  emit('openDetails',type,id)
}
src/views/components/notice.vue
@@ -14,8 +14,6 @@
      </div>
      <div class="pag-container" v-if="state.total&&state.total>0">
        <el-pagination
            v-model:current-page="state.querys.pageNum"
            v-model:page-size="state.querys.pageSize"
            :page-sizes="[10,15,20,25]"
            layout="total, sizes, prev, pager, next, jumper"
            :total="state.total"
src/views/components/publish.vue
@@ -35,8 +35,6 @@
      </div>
      <div class="pag-container" v-if="state.total&&state.total>0">
        <el-pagination
            v-model:current-page="state.querys.pageNum"
            v-model:page-size="state.querys.pageSize"
            :page-sizes="[10,15,20,25]"
            layout="total, sizes, prev, pager, next, jumper"
            :total="state.total"
src/views/safetyReview/baseSet/area/components/areaDialog.vue
@@ -36,7 +36,7 @@
            <template #footer>
                    <span class="dialog-footer">
                        <el-button @click="handleClose" size="default">取 消</el-button>
                        <el-button type="primary"  @click="onSubmit" size="default">确认</el-button>
                        <el-button type="primary"  @click="onSubmit" size="default" v-preReClick>确认</el-button>
                    </span>
            </template>
        </el-dialog>
src/views/safetyReview/baseSet/business/components/businessDialog.vue
@@ -14,7 +14,7 @@
            <template #footer>
                    <span class="dialog-footer">
                        <el-button @click="handleClose" size="default">取 消</el-button>
                        <el-button type="primary"  @click="onSubmit" size="default">确认</el-button>
                        <el-button type="primary"  @click="onSubmit" size="default" v-preReClick>确认</el-button>
                    </span>
            </template>
        </el-dialog>
src/views/safetyReview/baseSet/evaluateType/components/typeDialog.vue
@@ -14,7 +14,7 @@
            <template #footer>
                    <span class="dialog-footer">
                        <el-button @click="handleClose" size="default">取 消</el-button>
                        <el-button type="primary"  @click="onSubmit" size="default">确认</el-button>
                        <el-button type="primary"  @click="onSubmit" size="default" v-preReClick>确认</el-button>
                    </span>
            </template>
        </el-dialog>
src/views/safetyReview/law/components/lawDialog.vue
@@ -32,20 +32,20 @@
                    <el-date-picker
                        v-if="!isReview"
                        v-model="state.form.pubDate"
                        type="datetime"
                        value-format="YYYY-MM-DD hh:mm:ss"
                        type="date"
                        value-format="YYYY-MM-DD"
                        placeholder="请选择日期"
                        size="default"
                    />
                    <span v-else>{{state.form.pubDate}}</span>
                </el-form-item>
                <el-form-item label="内容:" v-if="showEditor"  prop="content">
                <el-form-item label="内容:" v-if="showEditor"  required>
                    <we-editor ref="myEditor"  :propData="state.form.content" @childFn="getEditorData" />
                </el-form-item>
                <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"  @click="showFile($event)"></div>
                            <div v-html="state.form.content" class="reviewTable"  @click="showFile($event)"></div>
                        </div>
                    </div>
                </el-form-item>
@@ -53,7 +53,7 @@
            <template #footer v-if="!isReview">
                    <span class="dialog-footer">
                        <el-button @click="handleClose" size="default">取 消</el-button>
                        <el-button type="primary"  @click="onSubmit" size="default">确认发布</el-button>
                        <el-button type="primary"  @click="onSubmit" size="default" v-preReClick>确认发布</el-button>
                    </span>
            </template>
        </el-dialog>
@@ -89,7 +89,7 @@
    formRules:{
        title: [{ required: true, message: '请填写标题', trigger: 'blur' }],
        pubAgency: [{ required: true, message: '请填写颁布机构', trigger: 'blur' }],
        content: [{ required: true, message: '请输入内容', trigger: 'change' }],
        // content: [{ required: true, message: '11', trigger: 'blur' }],
        pubDate:[{ required: true, message: '请选择颁布日期', trigger: 'blur' }],
    },
@@ -109,6 +109,7 @@
            if(type === 'edit') {
                law.value = res.data.lawType === '法律' ? 1 : res.data.lawType === '法规' ? 2 :res.data.lawType === '地方性规定'? 3 : 4
            }
            state.form.pubDate = res.data.pubDate.substring(0,10)
        }else{
            ElMessage.warning(res.message)
        }
@@ -170,12 +171,19 @@
    myEditor.value.submit();
    const valid = await lawRef.value.validate();
    if(valid){
        if(state.form.content == "") {
            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,
                pubDate: state.form.pubDate.concat(" 00:00:00"),
                subTitle: state.form.subTitle,
                title: state.form.title
            }
@@ -194,6 +202,7 @@
            lawRef.value.clearValidate();
            dialogVisible.value = false;
        }else if(title.value === '编辑') {
            state.form.pubDate = state.form.pubDate.concat(" 00:00:00")
            const res = await editLaw(state.form)
            if(res.code === 200){
                ElMessage({
@@ -251,4 +260,18 @@
        align-items: flex-start;
    }
}
.reviewTable {
    :deep(table){
        border: 1px solid #ccc;
        text-align: center;
    }
    :deep(table td){
        border: 1px solid #ccc;
        text-align: center;
        padding: 0 5px;
    }
    :deep(table th){
        border: 1px solid #ccc;
    }
}
</style>
src/views/safetyReview/law/law.vue
@@ -66,7 +66,12 @@
    loading.value = true;
    const res = await getLawList(data.queryParams);
    if(res.code === 200){
        dataList.value = res.data.list
        dataList.value = res.data.list.map(item => {
            return {
                ...item,
                pubDate: item.pubDate.substring(0,10)
            }
        })
        total.value = res.data.total
    }else{
        ElMessage.warning(res.message)
src/views/safetyReview/notice/components/noticeDialog.vue
@@ -11,13 +11,13 @@
                    <el-input v-model.trim="state.noticeForm.noticeTitle" v-if="!isReview" ></el-input>
                    <span v-else>{{state.noticeForm.noticeTitle}}</span>
                </el-form-item>
                <el-form-item label="公告内容:" v-if="showEditor"  prop="noticeContent">
                <el-form-item label="公告内容:" v-if="showEditor"  required>
                    <we-editor ref="myEditor"  :propData="state.noticeForm.noticeContent" @childFn="getEditorData" />
                </el-form-item>
                <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.noticeForm.noticeContent"  @click="showFile($event)"></div>
                            <div class="reviewTable" v-html="state.noticeForm.noticeContent"  @click="showFile($event)"></div>
                        </div>
                    </div>
                </el-form-item>
@@ -25,7 +25,7 @@
            <template #footer v-if="!isReview">
                    <span class="dialog-footer">
                        <el-button @click="handleClose" size="default">取 消</el-button>
                        <el-button type="primary"  @click="onSubmit" size="default">确认发布</el-button>
                        <el-button type="primary"  @click="onSubmit" size="default" v-preReClick>确认发布</el-button>
                    </span>
            </template>
        </el-dialog>
@@ -60,7 +60,7 @@
    },
    formRules:{
        noticeTitle: [{ required: true, message: '请填写公告标题', trigger: 'blur' }],
        noticeContent: [{ required: true, message: '请输入公告内容', trigger: 'blur' }],
        // noticeContent: [{ required: true, message: '请输入公告内容', trigger: 'blur' }],
    },
})
@@ -135,9 +135,17 @@
    }
}
const onSubmit = async () => {
    console.log("点击提交")
    myEditor.value.submit();
    const valid = await noticeRef.value.validate();
    if(valid){
        if(state.noticeForm.noticeContent == "") {
            ElMessage({
                type: 'warning',
                message: '请输入公告内容'
            });
            return;
        }
        if(title.value === '新增'){
            const param = {
                content: state.noticeForm.noticeContent,
@@ -216,4 +224,20 @@
        align-items: flex-start;
    }
}
.reviewTable {
    :deep(table){
        border: 1px solid #ccc;
        text-align: center;
    }
    :deep(table td){
        border: 1px solid #ccc;
        text-align: center;
        padding: 0 5px;
    }
    :deep(table th){
        border: 1px solid #ccc;
    }
}
</style>
src/views/safetyReview/userManage/expertUsers/components/expertDialog.vue
@@ -24,7 +24,7 @@
                <el-row :gutter="22">
                    <el-col :span="11">
                        <el-form-item label="用户名:"  prop="username" v-if="state.title !== '修改密码'">
                            <el-input v-model.trim="state.form.username" ></el-input>
                            <el-input v-model.trim="state.form.username" :disabled="state.title === '编辑'"></el-input>
                        </el-form-item>
                    </el-col>
                    <el-col :span="11">
@@ -149,7 +149,7 @@
            <template #footer >
                    <span class="dialog-footer">
                        <el-button @click="handleClose" size="default">取 消</el-button>
                        <el-button type="primary"  @click="onSubmit" size="default">确认</el-button>
                        <el-button type="primary"  @click="onSubmit" size="default" v-preReClick>确认</el-button>
                    </span>
            </template>
            <el-dialog v-model="state.dialogImg">
@@ -159,7 +159,7 @@
    </div>
</template>
<script setup>
import {reactive, ref, toRefs, defineEmits, onMounted} from 'vue'
import {reactive, ref, toRefs, defineEmits, onMounted, nextTick} from 'vue'
import { View } from "@element-plus/icons-vue";
import {ElMessage} from "element-plus";
import {verifyPhone, verifyPwd, verifyUsername} from "../../../../../utils/validate";
@@ -368,7 +368,7 @@
                ElMessage.success(res.message)
                emit('getList')
                superRef.value.clearValidate();
                superRef.value.resetFields();
                reset()
                dialogVisible.value = false;
            }else{
                ElMessage.warning(res.message)
@@ -382,7 +382,7 @@
                ElMessage.success(res.message)
                emit('getList')
                superRef.value.clearValidate();
                superRef.value.resetFields();
                reset()
                dialogVisible.value = false;
            }else{
                ElMessage.warning(res.message)
@@ -393,12 +393,32 @@
const handleClose = () => {
    superRef.value.clearValidate();
    superRef.value.resetFields()
    reset()
    dialogVisible.value = false;
}
const reset = () => {
   state.form = {
       id: null,
       name: '',
       username: '',
       sex: 0,
       phone: '',
       agencyId: '',
       socialAttach: [],
       medicalAttach: [],
       salaryAttach: [],
       post: '',
       jobTitle: '',
       major: '',
       expertType: 1,
       password: '',
       confirmPassword: '',
   }
    state.salaryList = [];
    state.medicalList = [];
    state.socialList = [];
}
const picSize = async (rawFile) => {
    if(rawFile.size / 1024 / 1024 > 5){
src/views/safetyReview/userManage/superviseUsers/components/superviseDialog.vue
@@ -3,7 +3,7 @@
        <el-dialog
            v-model="dialogVisible"
            :title="state.title"
            width="500px"
            width="550px"
            :before-close="handleClose"
        >
            <el-form :model="state.form" size="default" ref="superRef" :rules="state.formRules" label-width="110px" >
@@ -11,7 +11,7 @@
                    <el-input v-model.trim="state.form.name" ></el-input>
                </el-form-item>
                <el-form-item label="用户名:"  prop="username" v-if="state.title !== '修改密码'">
                    <el-input v-model.trim="state.form.username" ></el-input>
                    <el-input v-model.trim="state.form.username" :disabled="state.title =='编辑'" ></el-input>
                </el-form-item>
                <el-form-item label="密码:" prop="password" v-if="state.title == '新增' || state.title == '修改密码'">
                    <el-input v-model.trim="state.form.password" type="password" show-password placeholder="请输入密码"></el-input>
@@ -42,14 +42,14 @@
            <template #footer >
                    <span class="dialog-footer">
                        <el-button @click="handleClose" size="default">取 消</el-button>
                        <el-button type="primary"  @click="onSubmit" size="default">确认</el-button>
                        <el-button type="primary"  @click="onSubmit" size="default" v-preReClick>确认</el-button>
                    </span>
            </template>
        </el-dialog>
    </div>
</template>
<script setup>
import {reactive, ref, toRefs, defineEmits} from 'vue'
import {reactive, ref, toRefs, defineEmits, nextTick} from 'vue'
import { View } from "@element-plus/icons-vue";
import {ElMessage} from "element-plus";
import {verifyPhone, verifyPwd, verifyUsername} from "../../../../../utils/validate";
@@ -147,11 +147,14 @@
    getArea()
    state.title = type === 'add' ? '新增' : type ==='edit' ? '编辑' : type ==='pwd' ? '修改密码' : '查看' ;
    if(type === 'edit') {
        for(let i in state.form){
          if(validKey(i,value)){
              state.form[i] = value[i]
          }
        }
        nextTick(() => {
            for(let i in state.form){
                if(validKey(i,value)){
                    state.form[i] = value[i]
                }
            }
        })
    }
    if(type == 'pwd'){
      state.form.id = value.id