2025-06-10 | zhouwx | ![]() |
src/utils/request.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/build/conpanyFunctionConsult/companyInfo/overview/components/overviewDialog.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/build/conpanyFunctionConsult/companyInfo/overview/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | 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>