c8c99bf1f753e27c4d99a0ff6058ce16f973f9c4..21b86f6d81e2153d100587cadc16aaaf470cab33
2025-06-10 zhouwx
修改
21b86f 对比 | 目录
已修改2个文件
已添加1个文件
453 ■■■■■ 文件已修改
src/utils/request.js 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/build/conpanyFunctionConsult/companyInfo/overview/components/overviewDialog.vue 244 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/build/conpanyFunctionConsult/companyInfo/overview/index.vue 197 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/request.js
@@ -82,17 +82,19 @@
      return res.data
    }
    if (code === 401) {
        if (!isRelogin.show) {
        // if (!isRelogin.show) {
          isRelogin.show = true;
          ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => {
            isRelogin.show = false;
            useUserStore().logOut().then(() => {
              location.href = '/homePage';
            })
            removeToken()
            location.href = '/homePage';
            // useUserStore().logOut().then(() => {
            //   location.href = '/homePage';
            // })
          }).catch(() => {
            isRelogin.show = false
          });
        }
        // }
      return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
    } else if (code === 500) {
      if(msg === '文件不存在'){
src/views/build/conpanyFunctionConsult/companyInfo/overview/components/overviewDialog.vue
对比新文件
@@ -0,0 +1,244 @@
<template>
    <div class="notice">
        <el-dialog
            v-model="dialogVisible"
            :title="title"
            width="800px"
            :before-close="handleClose"
        >
            <el-form :model="state.noticeForm" size="default" ref="noticeRef" :rules="title === '新增' || title === '编辑' ? state.formRules : {}" label-width="110px" >
                <el-form-item label="企业概括:" v-if="showEditor"  required>
                    <t-editor style="width: 800px" ref="myEditor" :value="state.noticeForm.noticeContent" ></t-editor>
                </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 class="reviewTable" v-html="state.noticeForm.noticeContent"  @click="showFile($event)"></div>
                        </div>
                    </div>
                </el-form-item>
            </el-form>
            <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" v-preReClick>确认</el-button>
                    </span>
            </template>
        </el-dialog>
    </div>
</template>
<script setup>
import {nextTick, reactive, ref, toRefs, watch} from 'vue'
import WeEditor from "@/components/WeEditor/index.vue";
import TEditor from "@/components/Tinymce/Tinymce.vue"
import {ElMessage} from "element-plus";
import {addNotice, editNotice, getNoticeDetail} from "@/api/backManage/notice";
import axios from "axios";
import {getToken} from "@/utils/auth";
import {handleThemeStyle} from "@/utils/theme";
import useSettingsStore from "@/store/modules/settings";
const emit = defineEmits(["getList"]);
const dialogVisible = ref(false);
const title = ref("");
const noticeRef = ref();
const fileList = ref([]);
const myEditor = ref();
const isReview = ref(false);
const showEditor = ref(true);
const state = reactive({
    noticeForm: {
        id: '',
        noticeTitle: '',
        noticeContent: '',
    },
    formRules:{
        // noticeContent: [{ required: true, message: '请输入公告内容', trigger: 'blur' }],
    },
})
const openDialog = async (type, value) => {
    dialogVisible.value = true;
    // state.noticeForm.noticeContent = ""
    isReview.value = false;
    showEditor.value = false
    title.value = type === 'add' ? '新增' : type ==='edit' ? '编辑' : '查看' ;
    if(type === 'edit' || type === 'review') {
        // const param = {
        //     noticeId: value.id
        // }
        // const res = await getNoticeDetail(param);
        // if(res.code === 200){
        //     state.noticeForm.id = res.data.id
        //     state.noticeForm.noticeTitle = res.data.title
        //     state.noticeForm.noticeContent = res.data.content
        // }else{
        //     ElMessage.warning(res.message)
        // }
    }
    if(type === 'review') {
        showEditor.value = false
        isReview.value = true;
    }
    if(type === 'edit' || type === 'add') {
        showEditor.value = true;
        isReview.value = false;
    }
    if(type === 'add'){
        reset()
    }
}
const getEditorData = (val) =>{
    state.noticeForm.noticeContent = val;
}
const showFile = (e) => {
    if(e.target.nodeName === 'A'){
        console.log("e",e)
        e.preventDefault();
        const file = {
            fileUrl: e.target.href,
            fileName: e.target.innerHTML
        }
        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('获取文件失败')
            }
            // handleClose();
        })
    }
}
const onSubmit = async () => {
    state.noticeForm.noticeContent = tinyMCE.activeEditor.getContent();
    console.log("点击提交")
    console.log('data',state.noticeForm.noticeContent)
    // // 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,
            }
            const res = await addNotice(param)
            if(res.code === 200){
                ElMessage({
                    type: 'success',
                    message: '新增成功'
                });
            }else{
                ElMessage.warning(res.message)
            }
            emit("getList")
            reset();
            showEditor.value=false
            myEditor.value.clear();
            noticeRef.value.clearValidate();
            dialogVisible.value = false;
        }else if(title.value === '编辑') {
            const param = {
                id: state.noticeForm.id,
                content: state.noticeForm.noticeContent,
            }
            const res = await editNotice(param)
            if(res.code === 200){
                ElMessage({
                    type: 'success',
                    message: '编辑成功'
                });
            }else{
                ElMessage.warning(res.message)
            }
            emit("getList")
            reset();
            showEditor.value=false
            myEditor.value.clear();
            noticeRef.value.clearValidate();
            dialogVisible.value = false;
        }
    }
}
const handleClose = () => {
    if(title.value ==="新增"|| title.value ==='编辑'){
        myEditor.value.clear();
        showEditor.value=false
    }
    // reset()
    noticeRef.value.clearValidate();
    dialogVisible.value = false;
}
const reset = () => {
    state.noticeForm = {
        id: '',
        noticeTitle: '',
        noticeContent: ''
    }
}
defineExpose({
    openDialog
});
</script>
<style scoped lang="scss">
.notice{
    :deep(.el-form .el-form-item__label) {
        font-size: 15px;
    }
    .file {
        display: flex;
        flex-direction: column;
        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/build/conpanyFunctionConsult/companyInfo/overview/index.vue
@@ -1,11 +1,196 @@
<script setup>
</script>
<template>
  <div>公司概况</div>
  <div class="app-container">
    <div style="margin-bottom: 10px">
      <el-form style="display: flex;flex-wrap: wrap">
        <el-form-item>
          <el-button
              type="primary"
              plain
              icon="Plus"
              @click="openDialog('add',{})"
          >新增</el-button>
        </el-form-item>
        <el-form-item label="企业名称:" v-if="data.isAdmin" style="margin-left: 20px">
          <el-select
              v-model="data.queryParams.companyName"
              filterable
              remote
              @change="selectValue"
              reserve-keyword
              placeholder="请输入企业名称"
              remote-show-suffix
              :remote-method="getCompanyList"
              :loading="loadingCompany"
              style="width: 240px"
          >
            <el-option
                v-for="item in data.companyList"
                :key="item.id"
                :label="item.name"
                :value="item.name"
            />
          </el-select>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" style="margin-left: 30px" @click="searchClick">查询</el-button>
          <el-button plain @click="reset">重置</el-button>
        </el-form-item>
      </el-form>
    </div>
    <!-- 表格数据 -->
    <el-table v-loading="loading" :data="dataList" :border="true">
      <el-table-column type="index" label="序号" width="80" align="center"></el-table-column>
      <el-table-column label="企业名称" prop="conpanyName" 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)" >编辑</el-button>
          <el-button link type="danger"  @click="handleDelete(scope.row)" >删除</el-button>
        </template>
      </el-table-column>
    </el-table>
    <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>
    <overviewDialog ref="noticeRef" @getList = "getList"></overviewDialog>
  </div>
</template>
<style scoped lang="scss">
<script setup>
import {getCurrentInstance, onMounted, reactive, ref, toRefs} from "vue";
import overviewDialog from "./components/overviewDialog.vue"
import {ElMessage, ElMessageBox} from "element-plus";
import {getCompany} from "@/api/onlineEducation/company";
import Cookies from "js-cookie";
const { proxy } = getCurrentInstance();
const loading = ref(false);
const noticeRef = ref();
const loadingCompany = ref(false)
const data = reactive({
  queryParams: {
    pageNum: 1,
    pageSize: 10,
    companyId: null,
  },
  companyList: [],
  isAdmin: false
});
const dataList = ref([]);
const total = ref(0);
const { queryParams } = toRefs(data);
onMounted(() => {
  const userInfo = JSON.parse(Cookies.get('userInfo'))
  console.log("userInfo",userInfo)
  data.isAdmin = userInfo.userType === 0;
  getList();
});
const getList = async () => {
  loading.value = true;
  // const res = await getNoticeList(data.queryParams);
  // if(res.code === 200){
  //   dataList.value = res.data.list.map(item => {
  //     return {
  //       ...item,
  //       createTime: item.createTime.replace(/T/g," ")
  //     }
  //   })
  //   total.value = res.data.total
  // }else{
  //   ElMessage.warning(res.message)
  // }
  loading.value = false;
}
const searchClick = () => {
  getList();
}
const openDialog = (type, value) => {
  noticeRef.value.openDialog(type, value);
}
const selectValue = (val) => {
  data.companyList.forEach(item => {
    if(item.name === val){
      data.queryParams.companyId = item.id
    }
  })
}
const getCompanyList = async (val)=>{
  if(val != ""){
    loadingCompany.value = true;
    const queryParams = {
      name: val
    }
    const res = await getCompany(queryParams)
    if (res.code == 200) {
      loadingCompany.value = false;
      data.companyList = res.data.list
    } else {
      ElMessage.warning(res.message)
    }
  }
}
const handleSizeChange = (val) => {
  data.queryParams.pageSize = val
  getList()
}
const handleCurrentChange = (val) => {
  data.queryParams.pageNum = val
  getList()
}
/** 重置新增的表单以及其他数据  */
function reset() {
  data.queryParams = {
    companyId: '',
    pageNum: 1,
    pageSize: 10,
  }
  data.companyList = [];
  getList();
}
const handleDelete = (val) => {
  ElMessageBox.confirm(
      '确定删除此条数据?',
      '提示',
      {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
      })
      .then( async() => {
        // const res = await delNotice(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>