diff --git a/src/api/dataList/laboratory.js b/src/api/dataList/laboratory.js index eccb4b8..598be02 100644 --- a/src/api/dataList/laboratory.js +++ b/src/api/dataList/laboratory.js @@ -1,51 +1,52 @@ -import request from '@/utils/request' - -// 实验室筛选信息 -export function laboratorySelect(data) { - return request({ - url: '/admin/v1/laboratory/select', - method: 'post', - data, - }) -} +import request from "@/utils/request"; // 实验室列表 -export function laboratoryList(data) { - return request({ - url: '/admin/v1/manage/laboratory', - method: 'post', - data, - }) +export function casLaboratoryList(params) { + return request({ + url: "/business/casLaboratory/list", + method: "GET", + params, + }); } -// // 实验室信息添加 -// export function laboratoryAdd(data) { -// return request({ -// url: '/admin/v1/manage/laboratory/add', -// method: 'post', -// data, -// }) -// } -// 实验室详细信息 -export function laboratoryDetail(data) { - return request({ - url: '/admin/v1/manage/laboratory/detail', - method: 'post', - data, - }) +// 新增 +export function casLaboratoryAdd(data) { + return request({ + url: "/business/casLaboratory", + method: "POST", + data, + }); } -// 实验室信息修改 -export function laboratoryEdit(data) { - return request({ - url: '/admin/v1/manage/laboratory/edit', - method: 'post', - data, - }) +// 修改 +export function casLaboratoryUpdate(data) { + return request({ + url: "/business/casLaboratory", + method: "PUT", + data, + }); } -// 实验室审核操作 -export function laboratoryExamine(data) { - return request({ - url: '/admin/v1/manage/laboratory/examine', - method: 'post', - data, - }) +// id详情 +export function casLaboratoryDetail(id) { + return request({ + url: `/business/casLaboratory/${id}`, + method: "GET", + }); +} +// 删除 +export function casLaboratoryDelete(id) { + return request({ + url: `/business/casLaboratory`, + method: "DELETE", + data: { + ids: [id], + }, + }); +} + +// 导入 +export function casLaboratoryImportData(data) { + return request({ + url: `/business/casLaboratory/importData`, + method: "POST", + data, + }); } diff --git a/src/components/WangEditor/index.vue b/src/components/WangEditor/index.vue index 091ff79..95d22f5 100644 --- a/src/components/WangEditor/index.vue +++ b/src/components/WangEditor/index.vue @@ -18,6 +18,7 @@ :mode="mode" @onCreated="handleCreated" @onChange="handleChange" + @onBlur="emitBlur" /> @@ -142,13 +143,16 @@ export default { }; const handleChange = (editor) => { - if (editor.getHtml() === "


") { + if (editor.isEmpty()) { context.emit("update:modelValue", ""); } else { context.emit("update:modelValue", editor.getHtml()); } }; - + const emitBlur = () => { + context.emit("blur", editorRef.value); + // editorRef.value.emit("blur"); + }; return { editorRef, valueHtml, @@ -158,6 +162,7 @@ export default { height, handleCreated, handleChange, + emitBlur, }; }, }; diff --git a/src/utils/parameter.js b/src/utils/parameter.js index 00eed25..7c98aeb 100644 --- a/src/utils/parameter.js +++ b/src/utils/parameter.js @@ -40,6 +40,28 @@ export const enterpriseOptions = [ { key: "104", value: "高新技术企业" }, { key: "105", value: "科技企业" }, ]; + +// 需求类型 +export const demandCategoryList = [ + { id: 1, name: "基金对接" }, + { id: 2, name: "贷款" }, + { id: 3, name: "对接专家院士" }, + { id: 4, name: "人才培养" }, + { id: 5, name: "一带一路国际合作" }, + { id: 6, name: "上市辅导" }, + { id: 7, name: "成果产业化" }, + { id: 8, name: "国家级科研平台合作" }, + { id: 9, name: "研发项目立项评估" }, + { id: 10, name: "科技查新" }, + { id: 11, name: "产业链上下游对接" }, + { id: 12, name: "委托研发" }, + { id: 13, name: "对接政府项目落地" }, + { id: 14, name: "技术咨询" }, + { id: 15, name: "高价值专利培育" }, + { id: 16, name: "知识产权布局" }, + { id: 17, name: "设立院士工作站" }, + { id: 18, name: "海外留学生培养" }, +]; // 成果成熟度 技术 export const maturityOptions = [ { key: "1", value: "正在研发" }, diff --git a/src/utils/request.js b/src/utils/request.js index dab3d7d..730c94f 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -1,183 +1,267 @@ -import axios from 'axios' -import { ElNotification , ElMessageBox, ElMessage, ElLoading } from 'element-plus' -import { getToken } from '@/utils/auth' -import errorCode from '@/utils/errorCode' -import { tansParams, blobValidate } from '@/utils/ruoyi' -import cache from '@/plugins/cache' -import { saveAs } from 'file-saver' -import useUserStore from '@/store/modules/user' +import axios from "axios"; +import { + ElNotification, + ElMessageBox, + ElMessage, + ElLoading, +} from "element-plus"; +import { getToken } from "@/utils/auth"; +import errorCode from "@/utils/errorCode"; +import { tansParams, blobValidate } from "@/utils/ruoyi"; +import cache from "@/plugins/cache"; +import { saveAs } from "file-saver"; +import useUserStore from "@/store/modules/user"; let downloadLoadingInstance; // 是否显示重新登录 export let isRelogin = { show: false }; -axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' +axios.defaults.headers["Content-Type"] = "application/json;charset=utf-8"; // 创建axios实例 const service = axios.create({ // axios中请求配置有baseURL选项,表示请求URL公共部分 baseURL: import.meta.env.VITE_APP_BASE_API, // 超时 - timeout: 10000 -}) + timeout: 10000, +}); // request拦截器 -service.interceptors.request.use(config => { - // 是否需要设置 token - const isToken = (config.headers || {}).isToken === false - // 是否需要防止数据重复提交 - const isRepeatSubmit = (config.headers || {}).repeatSubmit === false - if (getToken() && !isToken) { - config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 - } - // get请求映射params参数 - if (config.method === 'get' && config.params) { - let url = config.url + '?' + tansParams(config.params); - url = url.slice(0, -1); - config.params = {}; - config.url = url; - } - if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) { - const requestObj = { - url: config.url, - data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data, - time: new Date().getTime() +service.interceptors.request.use( + (config) => { + // 是否需要设置 token + const isToken = (config.headers || {}).isToken === false; + // 是否需要防止数据重复提交 + const isRepeatSubmit = (config.headers || {}).repeatSubmit === false; + if (getToken() && !isToken) { + config.headers["Authorization"] = "Bearer " + getToken(); // 让每个请求携带自定义token 请根据实际情况自行修改 } - const sessionObj = cache.session.getJSON('sessionObj') - if (sessionObj === undefined || sessionObj === null || sessionObj === '') { - cache.session.setJSON('sessionObj', requestObj) - } else { - const s_url = sessionObj.url; // 请求地址 - const s_data = sessionObj.data; // 请求数据 - const s_time = sessionObj.time; // 请求时间 - const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交 - if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) { - const message = '数据正在处理,请勿重复提交'; - console.warn(`[${s_url}]: ` + message) - return Promise.reject(new Error(message)) + // get请求映射params参数 + if (config.method === "get" && config.params) { + let url = config.url + "?" + tansParams(config.params); + url = url.slice(0, -1); + config.params = {}; + config.url = url; + } + if ( + !isRepeatSubmit && + (config.method === "post" || config.method === "put") + ) { + const requestObj = { + url: config.url, + data: + typeof config.data === "object" + ? JSON.stringify(config.data) + : config.data, + time: new Date().getTime(), + }; + const sessionObj = cache.session.getJSON("sessionObj"); + if ( + sessionObj === undefined || + sessionObj === null || + sessionObj === "" + ) { + cache.session.setJSON("sessionObj", requestObj); } else { - cache.session.setJSON('sessionObj', requestObj) + const s_url = sessionObj.url; // 请求地址 + const s_data = sessionObj.data; // 请求数据 + const s_time = sessionObj.time; // 请求时间 + const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交 + if ( + s_data === requestObj.data && + requestObj.time - s_time < interval && + s_url === requestObj.url + ) { + const message = "数据正在处理,请勿重复提交"; + console.warn(`[${s_url}]: ` + message); + return Promise.reject(new Error(message)); + } else { + cache.session.setJSON("sessionObj", requestObj); + } } } + return config; + }, + (error) => { + console.log(error); + Promise.reject(error); } - return config -}, error => { - console.log(error) - Promise.reject(error) -}) +); // 响应拦截器 -service.interceptors.response.use(res => { +service.interceptors.response.use( + (res) => { // 未设置状态码则默认成功状态 const code = res.data.code || 200; // 获取错误信息 - const msg = errorCode[code] || res.data.msg || errorCode['default'] + const msg = errorCode[code] || res.data.msg || errorCode["default"]; // 二进制数据则直接返回 - if(res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer'){ - return res.data + if ( + res.request.responseType === "blob" || + res.request.responseType === "arraybuffer" + ) { + return res.data; } if (code === 401) { if (!isRelogin.show) { isRelogin.show = true; - ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { - confirmButtonText: '重新登录', - cancelButtonText: '取消', - type: 'warning' - } - ).then(() => { - isRelogin.show = false; - useUserStore().logOut().then(() => { - location.href = '/index'; - }) - }).catch(() => { - isRelogin.show = false; - }); - } - return Promise.reject('无效的会话,或者会话已过期,请重新登录。') + ElMessageBox.confirm( + "登录状态已过期,您可以继续留在该页面,或者重新登录", + "系统提示", + { + confirmButtonText: "重新登录", + cancelButtonText: "取消", + type: "warning", + } + ) + .then(() => { + isRelogin.show = false; + useUserStore() + .logOut() + .then(() => { + location.href = "/index"; + }); + }) + .catch(() => { + isRelogin.show = false; + }); + } + return Promise.reject("无效的会话,或者会话已过期,请重新登录。"); } else if (code === 500) { ElMessage({ message: msg, - type: 'error' - }) - return Promise.reject(new Error(msg)) + type: "error", + }); + return Promise.reject(new Error(msg)); } else if (code !== 200) { ElNotification.error({ - title: msg - }) - return Promise.reject('error') + title: msg, + }); + return Promise.reject("error"); } else { - return Promise.resolve(res.data) + return Promise.resolve(res.data); } }, - error => { - console.log('err' + error) + (error) => { + console.log("err" + error); let { message } = error; if (message == "Network Error") { message = "后端接口连接异常"; - } - else if (message.includes("timeout")) { + } else if (message.includes("timeout")) { message = "系统接口请求超时"; - } - else if (message.includes("Request failed with status code")) { + } else if (message.includes("Request failed with status code")) { message = "系统接口" + message.substr(message.length - 3) + "异常"; } ElMessage({ message: message, - type: 'error', - duration: 5 * 1000 - }) - return Promise.reject(error) + type: "error", + duration: 5 * 1000, + }); + return Promise.reject(error); } -) +); // 通用下载方法 export function download(url, params, filename) { - downloadLoadingInstance = ElLoading.service({ text: "正在下载数据,请稍候", background: "rgba(0, 0, 0, 0.7)", }) - return service.post(url, params, { - transformRequest: [(params) => { return tansParams(params) }], - headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, - responseType: 'blob' - }).then(async (data) => { - const isLogin = await blobValidate(data); - if (isLogin) { - const blob = new Blob([data]) - saveAs(blob, filename) - } else { - const resText = await data.text(); - const rspObj = JSON.parse(resText); - const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] - ElMessage.error(errMsg); - } - downloadLoadingInstance.close(); - }).catch((r) => { - console.error(r) - ElMessage.error('下载文件出现错误,请联系管理员!') - downloadLoadingInstance.close(); - }) -} -export function customDownload(url, params, filename) { - downloadLoadingInstance = ElLoading.service({ text: "正在下载数据,请稍候", background: "rgba(0, 0, 0, 0.7)", }) - return service.get(url, params, { - baseURL:"", - transformRequest: [(params) => { return tansParams(params) }], - headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, - responseType: 'blob' - }).then(async (data) => { - const isLogin = await blobValidate(data); - if (isLogin) { - const blob = new Blob([data]) - saveAs(blob, filename) - } else { - const resText = await data.text(); - const rspObj = JSON.parse(resText); - const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] - ElMessage.error(errMsg); - } - downloadLoadingInstance.close(); - }).catch((r) => { - console.error(r) - ElMessage.error('下载文件出现错误,请联系管理员!') - downloadLoadingInstance.close(); - }) + downloadLoadingInstance = ElLoading.service({ + text: "正在下载数据,请稍候", + background: "rgba(0, 0, 0, 0.7)", + }); + return service + .post(url, params, { + transformRequest: [ + (params) => { + return tansParams(params); + }, + ], + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + responseType: "blob", + }) + .then(async (data) => { + const isLogin = await blobValidate(data); + if (isLogin) { + const blob = new Blob([data]); + console.log(blob); + saveAs(blob, filename); + } else { + const resText = await data.text(); + const rspObj = JSON.parse(resText); + const errMsg = + errorCode[rspObj.code] || rspObj.msg || errorCode["default"]; + ElMessage.error(errMsg); + } + downloadLoadingInstance.close(); + }) + .catch((r) => { + console.error(r); + ElMessage.error("下载文件出现错误,请联系管理员!"); + downloadLoadingInstance.close(); + }); } -export default service +export const downloadFile = async (url, filename) => { + downloadLoadingInstance = ElLoading.service({ + text: "正在下载数据,请稍候", + background: "rgba(0, 0, 0, 0.7)", + }); + try { + const { data } = await axios.get(url, { + responseType: "blob", + }); + const isBlob = await blobValidate(data); + if (isBlob) { + const blob = new Blob([data]); + saveAs(blob, filename); + } else { + const resText = await data.text(); + const rspObj = JSON.parse(resText); + const errMsg = + errorCode[rspObj.code] || rspObj.msg || errorCode["default"]; + ElMessage.error(errMsg); + } + downloadLoadingInstance.close(); + } catch (error) { + console.error(error); + ElMessage.error("下载文件出现错误,请联系管理员!"); + downloadLoadingInstance.close(); + } +}; + +export async function customDownload(url, params, filename) { + downloadLoadingInstance = ElLoading.service({ + text: "正在下载数据,请稍候", + background: "rgba(0, 0, 0, 0.7)", + }); + try { + const data = await service.get(url, params, { + baseURL: "", + transformRequest: [ + (params_1) => { + return tansParams(params_1); + }, + ], + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + responseType: "blob", + }); + console.log(data); + const isLogin = await blobValidate(data); + if (isLogin) { + const blob = new Blob([data]); + console.log(blob); + + saveAs(blob, filename); + } else { + const resText = await data.text(); + const rspObj = JSON.parse(resText); + const errMsg = + errorCode[rspObj.code] || rspObj.msg || errorCode["default"]; + ElMessage.error(errMsg); + } + downloadLoadingInstance.close(); + } catch (r) { + console.error(r); + ElMessage.error("下载文件出现错误,请联系管理员!"); + downloadLoadingInstance.close(); + } +} + +export default service; diff --git a/src/views/approval/dataList/index.vue b/src/views/approval/dataList/index.vue index 1ea8b22..d5afce6 100644 --- a/src/views/approval/dataList/index.vue +++ b/src/views/approval/dataList/index.vue @@ -32,13 +32,13 @@ - + {{ row.industrys[row.industrys.length - 1] }} - + diff --git a/src/views/components/Businessneeds/Approvaldetails.vue b/src/views/components/Businessneeds/Approvaldetails.vue index e80f799..07f8756 100644 --- a/src/views/components/Businessneeds/Approvaldetails.vue +++ b/src/views/components/Businessneeds/Approvaldetails.vue @@ -1,6 +1,6 @@ diff --git a/src/views/dataAuditList/serviceDemand/index.vue b/src/views/dataAuditList/serviceDemand/index.vue index 6c27211..caed58e 100644 --- a/src/views/dataAuditList/serviceDemand/index.vue +++ b/src/views/dataAuditList/serviceDemand/index.vue @@ -62,21 +62,21 @@ - + > --> - + > --> --> - + - + {{ row.industrys[row.industrys.length - 1] }} - +