bug fixed
This commit is contained in:
@ -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,
|
||||
});
|
||||
}
|
||||
|
@ -18,6 +18,7 @@
|
||||
:mode="mode"
|
||||
@onCreated="handleCreated"
|
||||
@onChange="handleChange"
|
||||
@onBlur="emitBlur"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
@ -142,13 +143,16 @@ export default {
|
||||
};
|
||||
|
||||
const handleChange = (editor) => {
|
||||
if (editor.getHtml() === "<p><br></p>") {
|
||||
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,
|
||||
};
|
||||
},
|
||||
};
|
||||
|
@ -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: "正在研发" },
|
||||
|
@ -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;
|
||||
|
@ -32,13 +32,13 @@
|
||||
<el-option :value="103" label="普通企业" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="站点">
|
||||
<!-- <el-form-item label="站点">
|
||||
<site-options
|
||||
v-model="queryData.tenantId"
|
||||
:site-list="siteList"
|
||||
style="width: 160px"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form-item> -->
|
||||
|
||||
<el-form-item style="float: right">
|
||||
<el-button
|
||||
@ -63,11 +63,11 @@
|
||||
<div>{{ row.industrys[row.industrys.length - 1] }}</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="" label="站点" align="center">
|
||||
<!-- <el-table-column prop="" label="站点" align="center">
|
||||
<template #default="{ row }">
|
||||
{{ siteList.find((el) => el.id === row.tenantId)?.name ?? "无" }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column> -->
|
||||
<el-table-column prop="address" label="所在地" align="center" />
|
||||
<el-table-column prop="examineStatus" label="审核状态" align="center">
|
||||
<template #default="{ row }">
|
||||
@ -150,7 +150,7 @@ const router = useRouter();
|
||||
const total = ref(0);
|
||||
const dataList = ref([]);
|
||||
const { queryData, setTypeRow } = toRefs(data);
|
||||
const siteList = ref([]);
|
||||
// const siteList = ref([]);
|
||||
const isShow = ref(false);
|
||||
const radioList = ref("");
|
||||
const examineStatusDict = {
|
||||
@ -166,11 +166,11 @@ const getList = async () => {
|
||||
dataList.value = res.rows;
|
||||
total.value = res.total;
|
||||
};
|
||||
// 获取站点列表
|
||||
const getSiteList = async () => {
|
||||
const resp = await tenantSelect();
|
||||
siteList.value = resp.rows;
|
||||
};
|
||||
// // 获取站点列表
|
||||
// const getSiteList = async () => {
|
||||
// const resp = await tenantSelect();
|
||||
// siteList.value = resp.rows;
|
||||
// };
|
||||
// 搜索查询
|
||||
const handleQuery = () => {
|
||||
getList(queryData.value);
|
||||
@ -217,6 +217,6 @@ const handleDetail = (id) => {
|
||||
});
|
||||
};
|
||||
getList();
|
||||
getSiteList();
|
||||
// getSiteList();
|
||||
</script>
|
||||
<style></style>
|
||||
|
@ -148,8 +148,8 @@
|
||||
import CityOptions from "@/views/components/CityOptions";
|
||||
import FieldOptions from "@/views/components/FieldOptions";
|
||||
import InputBoxAdd from "@/views/components/InputBoxAdd";
|
||||
import { researchSelect } from "@/api/dataList/research";
|
||||
import { laboratorySelect } from "@/api/dataList/laboratory";
|
||||
// import { researchSelect } from "@/api/dataList/research";
|
||||
// import { laboratorySelect } from "@/api/dataList/laboratory";
|
||||
export default {
|
||||
components: {
|
||||
CityOptions,
|
||||
|
@ -98,6 +98,7 @@
|
||||
</template>
|
||||
<script setup>
|
||||
import Editor from "@/components/WangEditor";
|
||||
import { demandCategoryList } from "@/utils/parameter";
|
||||
import { ref, toRefs } from "vue";
|
||||
const props = defineProps({
|
||||
isShow: {
|
||||
@ -110,23 +111,6 @@ const props = defineProps({
|
||||
},
|
||||
});
|
||||
const { isShow, modelValue } = toRefs(props);
|
||||
const checkList = reactive([
|
||||
{
|
||||
id: 1,
|
||||
name: "成果推广",
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: "关键成果解决",
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
name: "对接专家院士",
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
name: "上市辅导",
|
||||
},
|
||||
]);
|
||||
const checkList = reactive(demandCategoryList);
|
||||
</script>
|
||||
<style></style>
|
||||
|
@ -1,6 +1,6 @@
|
||||
<!-- 企业需求弹框 -->
|
||||
<template>
|
||||
<el-dialog title="基本信息" v-model="isShow">
|
||||
<el-dialog title="基本信息" :model-value="isShow" @close="close">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="modelValue"
|
||||
@ -10,13 +10,13 @@
|
||||
<p><b>基本信息</b></p>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="成果需求名称:" prop="title">
|
||||
<el-form-item label="技术需求名称:" prop="title">
|
||||
<el-input v-model="modelValue.title"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-row v-if="false">
|
||||
<el-col :span="24">
|
||||
<!-- <el-checkbox label="0" @change="handleCheck">其他</el-checkbox> -->
|
||||
<el-form-item label="需求类别:">
|
||||
@ -46,11 +46,6 @@
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- <CityOptions
|
||||
v-model="form"
|
||||
:labelWidth="labelWidth"
|
||||
ref="cityForm"
|
||||
/> -->
|
||||
<FieldOptions
|
||||
v-model="modelValue"
|
||||
:labelWidth="labelWidth"
|
||||
@ -58,10 +53,17 @@
|
||||
ref="fieldFormRef"
|
||||
/>
|
||||
|
||||
<CityOptions
|
||||
disabled
|
||||
v-model="modelValue"
|
||||
:labelWidth="labelWidth"
|
||||
ref="cityFormRef"
|
||||
/>
|
||||
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item
|
||||
label="成果需求预算:"
|
||||
label="技术需求预算:"
|
||||
:prop="modelValue.budgetMode == 1 ? 'budget' : ''"
|
||||
>
|
||||
<el-input
|
||||
@ -160,7 +162,9 @@
|
||||
</template>
|
||||
<script setup>
|
||||
import { updateTechnologyDemand } from "@/api/dataApproval/enterpriseTechnologyDemand";
|
||||
import { demandCategoryList } from "@/utils/parameter";
|
||||
import WangEditor from "@/components/WangEditor";
|
||||
import CityOptions from "@/views/components/CityOptions";
|
||||
import FieldOptions from "@/views/components/FieldOptions";
|
||||
import InputBoxAdd from "@/views/components/InputBoxAdd";
|
||||
import { ElMessage } from "element-plus";
|
||||
@ -178,30 +182,16 @@ const props = defineProps({
|
||||
});
|
||||
const { isShow, modelValue } = toRefs(props);
|
||||
const labelWidth = 160;
|
||||
const checkList = reactive([
|
||||
{
|
||||
id: 1,
|
||||
name: "成果推广",
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: "关键成果解决",
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
name: "对接专家院士",
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
name: "上市辅导",
|
||||
},
|
||||
]);
|
||||
const checkList = reactive(demandCategoryList);
|
||||
const approve = async (status) => {
|
||||
let title = status == 1 ? "通过" : "驳回";
|
||||
await updateTechnologyDemand({ id: modelValue.value.id, status });
|
||||
ElMessage.success(`已${title}需求`);
|
||||
emit("update:is-show", false);
|
||||
emit("update:isShow", false);
|
||||
emit("update-list");
|
||||
};
|
||||
const close = () => {
|
||||
emit("update:isShow", false);
|
||||
};
|
||||
</script>
|
||||
<style></style>
|
||||
|
@ -158,19 +158,41 @@ const validateForm = async () => {
|
||||
};
|
||||
|
||||
getProvinceList();
|
||||
|
||||
watch(
|
||||
modelValue,
|
||||
() => modelValue.value.province,
|
||||
(val) => {
|
||||
if (val.province) {
|
||||
getCityListByProvinceId(val.province);
|
||||
}
|
||||
if (val.city) {
|
||||
getAreaListByCityId(val.city);
|
||||
}
|
||||
console.log("changed province");
|
||||
val && getCityListByProvinceId(val);
|
||||
},
|
||||
{ deep: true }
|
||||
{
|
||||
immediate: true,
|
||||
}
|
||||
);
|
||||
|
||||
watch(
|
||||
() => modelValue.value.city,
|
||||
(val) => {
|
||||
console.log("changed city");
|
||||
val && getAreaListByCityId(val);
|
||||
},
|
||||
{
|
||||
immediate: true,
|
||||
}
|
||||
);
|
||||
// watch(
|
||||
// modelValue,
|
||||
// (val) => {
|
||||
// if (val.province) {
|
||||
// getCityListByProvinceId(val.province);
|
||||
// }
|
||||
// if (val.city) {
|
||||
// getAreaListByCityId(val.city);
|
||||
// }
|
||||
// },
|
||||
// { deep: true }
|
||||
// );
|
||||
|
||||
defineExpose({
|
||||
validateForm,
|
||||
});
|
||||
|
@ -153,6 +153,7 @@
|
||||
<script>
|
||||
import FieldOptions from "@/views/components/FieldOptions";
|
||||
import InputBoxAdd from "@/views/components/InputBoxAdd";
|
||||
import { demandCategoryList } from "@/utils/parameter";
|
||||
export default {
|
||||
components: {
|
||||
FieldOptions,
|
||||
@ -183,24 +184,7 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
checkList: [
|
||||
{
|
||||
id: 1,
|
||||
name: "成果推广",
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: "关键成果解决",
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
name: "对接专家院士",
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
name: "上市辅导",
|
||||
},
|
||||
],
|
||||
checkList: demandCategoryList,
|
||||
checkInput: "",
|
||||
rules: {
|
||||
title: [
|
||||
@ -250,4 +234,4 @@ export default {
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
</script>
|
||||
|
@ -124,13 +124,13 @@
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<!-- <el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="所属站点:" prop="tenantId">
|
||||
<SiteOptions v-model="modelValue.tenantId" :site-list="siteList" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-row> -->
|
||||
|
||||
<!-- <el-row v-if="formType == 1">
|
||||
<el-col :span="12">
|
||||
@ -318,15 +318,15 @@
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item :label="introduceName" prop="introduce">
|
||||
<el-input
|
||||
<!-- <el-input
|
||||
v-if="formType == 1"
|
||||
v-model="modelValue.introduce"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 2, maxRows: 6 }"
|
||||
/>
|
||||
/> -->
|
||||
<!-- v-else -->
|
||||
<WangEditor
|
||||
:readOnly="!isAdd"
|
||||
v-else
|
||||
v-model="modelValue.introduce"
|
||||
minHeight="150px"
|
||||
/>
|
||||
@ -346,13 +346,13 @@
|
||||
import CityOptions from "@/views/components/CityOptions";
|
||||
// import FieldOptions from "@/views/components/FieldOptions";
|
||||
import InputBoxAdd from "@/views/components/InputBoxAdd";
|
||||
import { researchSelect } from "@/api/dataList/research";
|
||||
import { laboratorySelect } from "@/api/dataList/laboratory";
|
||||
// import { researchSelect } from "@/api/dataList/research";
|
||||
// import { laboratorySelect } from "@/api/dataList/laboratory";
|
||||
import { tenantSelect } from "@/api/subPlatform/tenant";
|
||||
import { enterpriseOptions } from "@/utils/parameter";
|
||||
import { reactive, ref, toRefs } from "vue";
|
||||
import WangEditor from "../../../components/WangEditor/index.vue";
|
||||
import SiteOptions from "@/views/components/SiteOptions";
|
||||
import WangEditor from "@/components/WangEditor/index.vue";
|
||||
// import SiteOptions from "@/views/components/SiteOptions";
|
||||
import FieldOptions from "@/views/components/FieldOptions";
|
||||
|
||||
const props = defineProps({
|
||||
|
@ -292,8 +292,8 @@
|
||||
import CityOptions from "@/views/components/CityOptions";
|
||||
// import FieldOptions from "@/views/components/FieldOptions";
|
||||
import InputBoxAdd from "@/views/components/InputBoxAdd";
|
||||
import { researchSelect } from "@/api/dataList/research";
|
||||
import { laboratorySelect } from "@/api/dataList/laboratory";
|
||||
// import { researchSelect } from "@/api/dataList/research";
|
||||
// import { laboratorySelect } from "@/api/dataList/laboratory";
|
||||
import { tenantSelect } from "@/api/subPlatform/tenant";
|
||||
import { enterpriseOptions } from "@/utils/parameter";
|
||||
import { reactive, ref, toRefs } from "vue";
|
||||
|
@ -70,7 +70,7 @@
|
||||
<el-tag
|
||||
v-for="(tag, index) in industrysTags"
|
||||
:key="index"
|
||||
closable
|
||||
:closable="!disabled"
|
||||
@close="handleFieldClose(index)"
|
||||
>
|
||||
{{ getFieldNameById(tag) }}
|
||||
@ -216,7 +216,7 @@ watch(
|
||||
modelValue,
|
||||
(newVal) => {
|
||||
modelValue.value.industrys = [];
|
||||
console.log(modelValue.value.industry ? 1 : 0);
|
||||
// console.log(modelValue.value.industry ? 1 : 0);
|
||||
let industrysList = modelValue.value.industry
|
||||
? modelValue.value.industry.split(",")
|
||||
: [];
|
||||
|
@ -31,7 +31,7 @@
|
||||
<el-tag
|
||||
v-for="(tag, index) in modelValue[fieldKey]"
|
||||
:key="index"
|
||||
closable
|
||||
:closable="!disabled"
|
||||
@close="handleFieldClose(fieldKey, index)"
|
||||
>
|
||||
{{ tag }}
|
||||
@ -77,8 +77,8 @@ const dataVal = ref("");
|
||||
const formRef = ref(null);
|
||||
const keyWordAdd = () => {
|
||||
if (!dataVal.value.length) return ElMessage.error(`请输入${title.value}`);
|
||||
if(!modelValue.value[fieldKey.value]){
|
||||
modelValue.value[fieldKey.value]=[]
|
||||
if (!modelValue.value[fieldKey.value]) {
|
||||
modelValue.value[fieldKey.value] = [];
|
||||
}
|
||||
modelValue.value[fieldKey.value].push(dataVal.value);
|
||||
dataVal.value = "";
|
||||
|
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<el-form
|
||||
ref="form"
|
||||
:model="value"
|
||||
ref="formRef"
|
||||
:model="modelValue"
|
||||
:rules="rules"
|
||||
:label-width="labelWidth + 'px'"
|
||||
>
|
||||
@ -9,84 +9,65 @@
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="实验室名称" prop="name">
|
||||
<el-input v-model="value.name" :disabled="!isAdd"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="组织机构代码:" prop="code">
|
||||
<el-row type="flex" justify="space-between">
|
||||
<el-col :span="20">
|
||||
<el-input v-model="value.code" :disabled="!isAdd"></el-input>
|
||||
</el-col>
|
||||
<el-col :span="3">
|
||||
<el-button type="primary" @click="" :disabled="!isAdd"
|
||||
>查找</el-button
|
||||
>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="所属站点:" prop="tenant_id">
|
||||
<SiteOptions :size="''" :limitWidth="false" v-model="value" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="所属单位:" prop="research_id">
|
||||
<el-select
|
||||
v-model="value.research_id"
|
||||
filterable
|
||||
placeholder="请选择"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in researchOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<CityOptions v-model="value" :labelWidth="labelWidth" ref="cityForm" />
|
||||
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="详细地址:">
|
||||
<el-input
|
||||
v-model="value.address"
|
||||
placeholder="请输入详细地址"
|
||||
v-model="modelValue.name"
|
||||
placeholder="请输入实验室全称"
|
||||
:disabled="!isAdd"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="所属单院所或高校:" prop="school">
|
||||
<el-input
|
||||
v-model="modelValue.school"
|
||||
placeholder="请输入所属单院所或高校"
|
||||
></el-input>
|
||||
<!-- <el-option
|
||||
v-for="item in researchOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
>
|
||||
</el-option> -->
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- <CityOptions v-model="modelValue" :labelWidth="labelWidth" ref="cityForm" /> -->
|
||||
|
||||
<!-- <el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="详细地址:">
|
||||
<el-input
|
||||
v-model="modelValue.address"
|
||||
placeholder="请输入详细地址"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row> -->
|
||||
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="实验室网站:">
|
||||
<el-input
|
||||
v-model="value.url"
|
||||
v-model="modelValue.url"
|
||||
placeholder="请输入实验室网站"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<FieldOptions v-model="value" :labelWidth="labelWidth" ref="fieldForm" />
|
||||
<FieldOptions
|
||||
v-model="modelValue"
|
||||
:labelWidth="labelWidth"
|
||||
ref="fieldFormRef"
|
||||
/>
|
||||
|
||||
<!-- <FieldSingle
|
||||
v-model="value"
|
||||
v-model="modelValue"
|
||||
:isAdd="isAdd"
|
||||
:labelWidth="labelWidth"
|
||||
ref="fieldForm"
|
||||
@ -94,42 +75,231 @@
|
||||
|
||||
<InputBoxAdd
|
||||
:labelWidth="labelWidth"
|
||||
v-model="value"
|
||||
v-model="modelValue"
|
||||
title="关键词"
|
||||
placeholder="应用场景关键词+技术产品关键词"
|
||||
fieldKey="keywords"
|
||||
ref="keywordsForm"
|
||||
ref="keywordsFormRef"
|
||||
/>
|
||||
|
||||
<InputBoxAdd
|
||||
<!-- <InputBoxAdd
|
||||
:labelWidth="labelWidth"
|
||||
v-model="value"
|
||||
v-model="modelValue"
|
||||
title="研究方向"
|
||||
placeholder="请输入研究方向"
|
||||
fieldKey="researchs"
|
||||
ref="directionsForm"
|
||||
/>
|
||||
|
||||
|
||||
/> -->
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="实验室简介" prop="introduce">
|
||||
<Editor
|
||||
v-model="value.introduce"
|
||||
:minHeight="150"
|
||||
ref="introduceRef"
|
||||
@click.native="handleEditAble"
|
||||
<el-form-item label="研究方向" prop="researchDirection">
|
||||
<el-input
|
||||
v-model="modelValue.researchDirection"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 4 }"
|
||||
placeholder="请输入研究方向"
|
||||
></el-input> </el-form-item></el-col
|
||||
></el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="主要技术应用场景" prop="primaryTechnology">
|
||||
<el-input
|
||||
v-model="modelValue.primaryTechnology"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 4 }"
|
||||
placeholder="请输入主要技术应用场景"
|
||||
></el-input> </el-form-item></el-col
|
||||
></el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="承担科研项目情况" prop="researchProject">
|
||||
<el-input
|
||||
v-model="modelValue.researchProject"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 4 }"
|
||||
placeholder="请输入承担科研项目情况"
|
||||
></el-input> </el-form-item></el-col
|
||||
></el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="代表性科技成果" prop="achievement">
|
||||
<el-input
|
||||
v-model="modelValue.achievement"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 4 }"
|
||||
placeholder="请输入代表性科技成果"
|
||||
></el-input> </el-form-item></el-col
|
||||
></el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="联系电话" prop="phone">
|
||||
<el-input
|
||||
v-model="modelValue.phone"
|
||||
maxlength="11"
|
||||
oninput="value = value.replace(/[\D]+/, '')"
|
||||
placeholder="请输入联系电话"
|
||||
></el-input> </el-form-item></el-col
|
||||
></el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="网址" prop="url">
|
||||
<el-input
|
||||
placeholder="请输入网址"
|
||||
v-model="modelValue.url"
|
||||
></el-input> </el-form-item></el-col
|
||||
></el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="实验室简介" prop="introduction">
|
||||
<WangEditor
|
||||
v-model="modelValue.introduction"
|
||||
minHeight="320px"
|
||||
ref="introductionRef"
|
||||
@blur="formRef.validateField(`introduction`)"
|
||||
/>
|
||||
<!-- @click.native="handleEditAble" -->
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="核心成员及简介" prop="member">
|
||||
<WangEditor
|
||||
v-model="modelValue.member"
|
||||
minHeight="320px"
|
||||
ref="memberRef"
|
||||
@blur="formRef.validateField(`member`)"
|
||||
/>
|
||||
<!-- @click.native="handleEditAble" -->
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</template>
|
||||
<script>
|
||||
|
||||
<script setup>
|
||||
import CityOptions from "@/views/components/CityOptions";
|
||||
import FieldSingle from "@/views/components/FieldSingle";
|
||||
import FieldOptions from "@/views/components/FieldOptions";
|
||||
import InputBoxAdd from "@/views/components/InputBoxAdd";
|
||||
import { researchSelect } from "@/api/dataList/research";
|
||||
import { reactive, ref, toRefs, watch } from "vue";
|
||||
|
||||
const props = defineProps({
|
||||
modelValue: Object,
|
||||
isAdd: {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
showTitle: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
labelWidth: {
|
||||
type: Number,
|
||||
default: 120,
|
||||
},
|
||||
});
|
||||
const { modelValue, isAdd, showTitle, labelWidth } = toRefs(props);
|
||||
|
||||
const researchOptions = ref([]);
|
||||
const options = ref([]);
|
||||
const data = reactive({
|
||||
rules: {
|
||||
product: [{ required: true, message: "请输入", trigger: "blur" }],
|
||||
name: [{ required: true, message: "请输入", trigger: "blur" }],
|
||||
kind: [{ required: true, message: "请选择", trigger: "change" }],
|
||||
code: [{ required: true, message: "请输入", trigger: "blur" }],
|
||||
phone: [
|
||||
// { required: true, message: "请输入联系电话", trigger: "blur" },
|
||||
{
|
||||
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
|
||||
message: "请输入正确的手机号码",
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
researchId: [{ required: true, message: "请选择", trigger: "change" }],
|
||||
tenantId: [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择",
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
school: [{ required: true, message: "请输入", trigger: "blur" }],
|
||||
education: [{ required: true, message: "请选择", trigger: "change" }],
|
||||
major: [{ required: true, message: "请输入", trigger: "blur" }],
|
||||
job: [{ required: true, message: "请输入", trigger: "blur" }],
|
||||
title: [{ required: true, message: "请输入", trigger: "blur" }],
|
||||
workAt: [
|
||||
{
|
||||
required: true,
|
||||
message: "从业时间不能为空",
|
||||
trigger: ["change", "blur"],
|
||||
},
|
||||
],
|
||||
license: [
|
||||
{
|
||||
required: true,
|
||||
message: "请上传",
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
introduce: [
|
||||
{ required: true, message: "请输入实验室简介", trigger: "blur" },
|
||||
],
|
||||
},
|
||||
});
|
||||
|
||||
const { rules } = toRefs(data);
|
||||
|
||||
const formRef = ref();
|
||||
const fieldFormRef = ref();
|
||||
const keywordsFormRef = ref();
|
||||
// watch(modelValue.tenantId, (val) => {
|
||||
// console.log(val);
|
||||
// if (val) {
|
||||
// researchSelect({ tenantId: val }).then(({ data }) => {
|
||||
// researchOptions.value = data;
|
||||
// });
|
||||
// } else {
|
||||
// researchOptions.value = [];
|
||||
// if (modelValue.researchId) modelValue.researchId = undefined;
|
||||
// }
|
||||
// });
|
||||
const validateForm = async () => {
|
||||
let formValid;
|
||||
try {
|
||||
formValid = await formRef.value.validate();
|
||||
} catch (error) {
|
||||
formValid = false;
|
||||
}
|
||||
// const cityFormValid = await cityFormRef.value.validateForm();
|
||||
const fieldFormValid = await fieldFormRef.value.validateForm();
|
||||
const keywordsFormValid = await keywordsFormRef.value.validateForm();
|
||||
return formValid && fieldFormValid && keywordsFormValid;
|
||||
// if (formType.value == 1) {
|
||||
// //个人
|
||||
// // const researchsFormValid = await researchsFormRef.value.validateForm(); //研究方向验证
|
||||
// } else if (formType.value == 2) {
|
||||
// //企业
|
||||
// // const directionsFormValid = await directionsFormRef.value.validateForm(); //生产方向验证
|
||||
// return (
|
||||
// formValid && fieldFormValid && fieldFormValid
|
||||
// // keywordsFormValid &&
|
||||
// // directionsFormValid
|
||||
// );
|
||||
// } else {
|
||||
// throw "未知的formType";
|
||||
// }
|
||||
};
|
||||
defineExpose({
|
||||
validateForm,
|
||||
});
|
||||
</script>
|
||||
|
||||
<!-- <script>
|
||||
export default {
|
||||
components: {
|
||||
CityOptions,
|
||||
@ -137,82 +307,14 @@ export default {
|
||||
FieldOptions,
|
||||
InputBoxAdd,
|
||||
},
|
||||
props: {
|
||||
value: Object,
|
||||
isAdd: {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
showTitle: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
labelWidth: {
|
||||
type: Number,
|
||||
default: 120,
|
||||
},
|
||||
},
|
||||
|
||||
watch: {
|
||||
"value.tenant_id"(newOld) {
|
||||
console.log(newOld);
|
||||
if (newOld) {
|
||||
researchSelect({ tenant_id: newOld }).then(({ data }) => {
|
||||
this.researchOptions = data;
|
||||
});
|
||||
} else {
|
||||
this.researchOptions = [];
|
||||
if (this.value.research_id) this.value.research_id = undefined;
|
||||
}
|
||||
},
|
||||
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
researchOptions: [],
|
||||
options: [
|
||||
// { value: "", label: "" }
|
||||
],
|
||||
rules: {
|
||||
product: [{ required: true, message: "请输入", trigger: "blur" }],
|
||||
name: [{ required: true, message: "请输入", trigger: "blur" }],
|
||||
kind: [{ required: true, message: "请选择", trigger: "change" }],
|
||||
code: [{ required: true, message: "请输入", trigger: "blur" }],
|
||||
mobile: [
|
||||
{ required: true, message: "请输入", trigger: "blur" },
|
||||
{
|
||||
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
|
||||
message: "请输入正确的手机号码",
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
research_id: [{ required: true, message: "请选择", trigger: "change" }],
|
||||
tenant_id: [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择",
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
school: [{ required: true, message: "请输入", trigger: "blur" }],
|
||||
education: [{ required: true, message: "请选择", trigger: "change" }],
|
||||
major: [{ required: true, message: "请输入", trigger: "blur" }],
|
||||
job: [{ required: true, message: "请输入", trigger: "blur" }],
|
||||
title: [{ required: true, message: "请输入", trigger: "blur" }],
|
||||
work_at: [
|
||||
{
|
||||
required: true,
|
||||
message: "从业时间不能为空",
|
||||
trigger: ["change", "blur"],
|
||||
},
|
||||
],
|
||||
license: [
|
||||
{
|
||||
required: true,
|
||||
message: "请上传",
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
introduce: [{ required: true, message: "请输入", trigger: "blur" }],
|
||||
},
|
||||
|
||||
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
@ -239,7 +341,7 @@ export default {
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
</script> -->
|
||||
<style lang="scss" scoped>
|
||||
.form_title {
|
||||
font-weight: 700;
|
||||
@ -256,4 +358,4 @@ export default {
|
||||
display: block;
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
@ -39,7 +39,7 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<!-- <el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="邮箱:" prop="email">
|
||||
<el-input
|
||||
@ -48,7 +48,7 @@
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-row> -->
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="产品名称:" prop="title">
|
||||
@ -239,8 +239,9 @@ import {
|
||||
cooperationOptions,
|
||||
} from "@/utils/parameter";
|
||||
import { useRoute, useRouter } from "vue-router";
|
||||
import saveAs from "file-saver";
|
||||
import { ElMessage } from "element-plus";
|
||||
import { customDownload } from "@/utils/request";
|
||||
import { customDownload, downloadFile } from "@/utils/request";
|
||||
// import WangEditor from "@/components/WangEditor/index.vue";
|
||||
// const isAdd = ref(false);
|
||||
const route = useRoute();
|
||||
@ -270,6 +271,7 @@ const getDetail = async (id) => {
|
||||
form.value.cooperationModeArr = data.cooperationMode
|
||||
? data.cooperationMode.split(",")
|
||||
: [];
|
||||
// form.value.keywords = data.keyword ? data.keyword.split(",") : [];
|
||||
};
|
||||
if (route.query.id) {
|
||||
getDetail(route.query.id);
|
||||
@ -277,13 +279,15 @@ if (route.query.id) {
|
||||
const downloadProductImage = () => {
|
||||
const filename =
|
||||
form.value.image.split("/")[form.value.image.split("/").length - 1];
|
||||
customDownload(form.value.image, {}, filename);
|
||||
// saveAs(form.value.image, filename);
|
||||
downloadFile(form.value.image, filename);
|
||||
};
|
||||
const downloadProductMaterial = () => {
|
||||
const filename =
|
||||
form.value.material.split("/")[form.value.material.split("/").length - 1];
|
||||
const baseUrl = import.meta.env.VITE_APP_BASE_API;
|
||||
customDownload(`/file${form.value.material}`, {}, filename);
|
||||
// const baseUrl = import.meta.env.VITE_APP_BASE_API;
|
||||
// customDownload(`/file${form.value.material}`, {}, filename);
|
||||
downloadFile(form.value.material, filename);
|
||||
};
|
||||
|
||||
const submitForm = async (status) => {
|
||||
|
@ -13,10 +13,10 @@
|
||||
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="产品名称:" prop="title">
|
||||
<el-form-item label="成果名称:" prop="title">
|
||||
<el-input
|
||||
v-model="form.title"
|
||||
placeholder="请输入产品名称"
|
||||
placeholder="请输入成果名称"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@ -38,10 +38,15 @@
|
||||
fieldKey="customers"
|
||||
ref="customerFormRef"
|
||||
/>
|
||||
|
||||
<city-options
|
||||
v-model="form"
|
||||
disabled
|
||||
:labelWidth="labelWidth"
|
||||
ref="cityFormRef"
|
||||
></city-options>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="产品成熟度:" prop="maturity">
|
||||
<el-form-item label="成果成熟度:" prop="maturity">
|
||||
<el-select v-model="form.maturity" clearable placeholder="请选择">
|
||||
<el-option
|
||||
v-for="item in maturityOptions"
|
||||
@ -102,10 +107,15 @@
|
||||
fieldKey="keywords"
|
||||
ref="keywordsForm"
|
||||
/>
|
||||
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="产品简介:" prop="description">
|
||||
<el-form-item label="所属单位:" prop="unit">
|
||||
<el-input v-model="form.unit"></el-input>
|
||||
</el-form-item> </el-col
|
||||
></el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="成果简介:" prop="description">
|
||||
<wangEditor
|
||||
readOnly
|
||||
v-model="form.description"
|
||||
@ -118,7 +128,7 @@
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="产品图片:" prop="image">
|
||||
<el-form-item label="成果图片:" prop="image">
|
||||
<ImageUpload v-model="form.image" :limit="1" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@ -155,6 +165,7 @@
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import { demandCategoryList } from "@/utils/parameter";
|
||||
import CityOptions from "@/views/components/CityOptions";
|
||||
import FieldOptions from "@/views/components/FieldOptions";
|
||||
import InputBoxAdd from "@/views/components/InputBoxAdd";
|
||||
@ -171,6 +182,7 @@ import {
|
||||
leadOptions,
|
||||
cooperationOptions,
|
||||
} from "@/utils/parameter";
|
||||
import { downloadFile } from "../../../utils/request";
|
||||
const router = useRouter();
|
||||
const route = useRoute();
|
||||
const data = reactive({
|
||||
@ -180,34 +192,18 @@ const { form } = toRefs(data);
|
||||
|
||||
const labelWidth = ref(120);
|
||||
|
||||
const checkList = reactive([
|
||||
{
|
||||
id: 1,
|
||||
name: "成果推广",
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: "关键成果解决",
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
name: "对接专家院士",
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
name: "上市辅导",
|
||||
},
|
||||
]);
|
||||
const checkList = reactive(demandCategoryList);
|
||||
const getAchievementInfo = async () => {
|
||||
const resp = await expertAchievementInfo({ id: route.query.id });
|
||||
form.value = resp.data;
|
||||
form.value.keywords = form.value.keyword?.split(",") ?? [];
|
||||
form.value.customers = form.value.customer?.split(",") ?? [];
|
||||
};
|
||||
|
||||
const downloadImage = () => {
|
||||
const filename =
|
||||
form.value.image.split("/")[form.value.image.split("/").length - 1];
|
||||
customDownload(form.value.image, {}, filename);
|
||||
downloadFile(form.value.image, filename);
|
||||
};
|
||||
|
||||
const submitForm = async (status) => {
|
||||
|
@ -18,7 +18,7 @@
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<!-- <el-col :span="6">
|
||||
<el-form-item label="所属站点" prop="tenantId">
|
||||
<site-options v-model="queryParams.tenantId" :site-list="siteList" />
|
||||
</el-form-item>
|
||||
@ -34,7 +34,7 @@
|
||||
<el-button icon="refresh" size="default" @click="resetQuery"
|
||||
>重置</el-button
|
||||
>
|
||||
</el-col>
|
||||
</el-col> -->
|
||||
</el-row>
|
||||
</el-form>
|
||||
<el-row>
|
||||
@ -77,13 +77,13 @@
|
||||
align="center"
|
||||
prop=""
|
||||
></el-table-column> -->
|
||||
<el-table-column label="站点" align="center">
|
||||
<!-- <el-table-column label="站点" align="center">
|
||||
<template #default="{ row }">
|
||||
{{
|
||||
siteList.find((el) => el.id === row.tenantId)?.name ?? "无"
|
||||
}}</template
|
||||
>
|
||||
</el-table-column>
|
||||
</el-table-column> -->
|
||||
<el-table-column
|
||||
label="申请时间"
|
||||
align="center"
|
||||
@ -145,7 +145,7 @@ const getSiteList = async () => {
|
||||
const resp = await tenantSelect();
|
||||
siteList.value = resp.rows;
|
||||
};
|
||||
getSiteList();
|
||||
// getSiteList();
|
||||
|
||||
const getList = async () => {
|
||||
const resp = await expertAchievementList(queryParams.value);
|
||||
|
@ -57,11 +57,11 @@
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- <CityOptions
|
||||
v-model="form"
|
||||
<CityOptions
|
||||
v-model="modelValue"
|
||||
:labelWidth="labelWidth"
|
||||
ref="cityForm"
|
||||
/> -->
|
||||
ref="cityFormRef"
|
||||
/>
|
||||
<FieldOptions
|
||||
v-model="modelValue"
|
||||
:labelWidth="labelWidth"
|
||||
@ -155,6 +155,7 @@
|
||||
<script setup>
|
||||
import { updateExpertAchievement } from "@/api/dataApproval/achivement";
|
||||
import WangEditor from "@/components/WangEditor";
|
||||
import { demandCategoryList } from "@/utils/parameter";
|
||||
import FieldOptions from "@/views/components/FieldOptions";
|
||||
import InputBoxAdd from "@/views/components/InputBoxAdd";
|
||||
import { ElMessage } from "element-plus";
|
||||
|
@ -89,7 +89,7 @@
|
||||
align="center"
|
||||
prop=""
|
||||
></el-table-column> -->
|
||||
<el-table-column label="站点" align="center" prop=""></el-table-column>
|
||||
<!-- <el-table-column label="站点" align="center" prop=""></el-table-column> -->
|
||||
<el-table-column
|
||||
label="发布时间"
|
||||
align="center"
|
||||
@ -130,7 +130,7 @@
|
||||
|
||||
<!-- 审批详情 -->
|
||||
<Edialog
|
||||
v-model:is-show="isShow"
|
||||
v-model:isShow="isShow"
|
||||
v-model="demandForm"
|
||||
@update-list="handleQuery"
|
||||
></Edialog>
|
||||
|
@ -116,10 +116,11 @@ import {
|
||||
getCasDemandInfo,
|
||||
updateCasDemand,
|
||||
} from "@/api/dataApproval/enterpriseServiceDemand";
|
||||
import CityOptions from "@/views/components/CityOptions";
|
||||
import { uniqueId } from "lodash";
|
||||
// import CityOptions from "@/views/components/CityOptions";
|
||||
import { ElMessage } from "element-plus";
|
||||
import { useRoute, useRouter } from "vue-router";
|
||||
|
||||
import { demandCategoryList } from "@/utils/parameter";
|
||||
const router = useRouter();
|
||||
const route = useRoute();
|
||||
const data = reactive({
|
||||
@ -150,24 +151,7 @@ const data = reactive({
|
||||
const { form, rules } = toRefs(data);
|
||||
|
||||
const labelWidth = 140;
|
||||
const checkList = reactive([
|
||||
{
|
||||
id: 1,
|
||||
name: "成果推广",
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: "关键成果解决",
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
name: "对接专家院士",
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
name: "上市辅导",
|
||||
},
|
||||
]);
|
||||
const checkList = reactive(demandCategoryList);
|
||||
const checkInput = ref("");
|
||||
const cityFormRef = ref();
|
||||
const formRef = ref();
|
||||
@ -203,6 +187,12 @@ function addCheck() {
|
||||
if (route.query.id) {
|
||||
getCasDemandInfo(route.query.id).then((resp) => {
|
||||
form.value = resp.data;
|
||||
// checkList
|
||||
for (const item of resp.data.kinds) {
|
||||
if (!checkList.find((el) => el.name === item)) {
|
||||
checkList.push({ id: uniqueId("unq-"), name: item });
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
@ -62,21 +62,21 @@
|
||||
<el-table :data="dataList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="80"></el-table-column>
|
||||
<el-table-column label="编号" align="center" prop="id"></el-table-column>
|
||||
<el-table-column
|
||||
<!-- <el-table-column
|
||||
label="需求名称"
|
||||
align="center"
|
||||
prop="title"
|
||||
></el-table-column>
|
||||
></el-table-column> -->
|
||||
<el-table-column label="需求类型" align="center">
|
||||
<template #default="{ row }">
|
||||
{{ categoryMap[row.category] }}需求
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
<!-- <el-table-column
|
||||
label="所属领域"
|
||||
align="center"
|
||||
prop="industryStr"
|
||||
></el-table-column>
|
||||
></el-table-column> -->
|
||||
<el-table-column
|
||||
label="联系人"
|
||||
align="center"
|
||||
@ -97,13 +97,13 @@
|
||||
align="center"
|
||||
prop=""
|
||||
></el-table-column> -->
|
||||
<el-table-column label="站点" align="center">
|
||||
<!-- <el-table-column label="站点" align="center">
|
||||
<template #default="{ row }">
|
||||
{{
|
||||
siteList.find((el) => el.id === row.tenantId)?.name ?? "无"
|
||||
}}</template
|
||||
>
|
||||
</el-table-column>
|
||||
</el-table-column> -->
|
||||
<el-table-column
|
||||
label="发布时间"
|
||||
align="center"
|
||||
|
@ -17,9 +17,9 @@
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="所属站点" prop="tenantId">
|
||||
<!-- <el-form-item label="所属站点" prop="tenantId">
|
||||
<SiteOptions v-model="queryParams.tenantId" :site-list="siteList" />
|
||||
</el-form-item>
|
||||
</el-form-item> -->
|
||||
|
||||
<el-form-item>
|
||||
<el-button
|
||||
@ -81,11 +81,11 @@
|
||||
<div>{{ row.industrys[row.industrys.length - 1] }}</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="站点" align="center">
|
||||
<!-- <el-table-column label="站点" align="center">
|
||||
<template #default="{ row }">
|
||||
{{ siteList.find((el) => el.id === row.tenantId)?.name ?? "无" }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column> -->
|
||||
<el-table-column label="所在地" align="center" prop="address" />
|
||||
<el-table-column label="企业类型" align="center" prop="kind">
|
||||
<template #default="{ row }">
|
||||
@ -317,7 +317,7 @@ import {
|
||||
} from "@/api/dataList/enterprise";
|
||||
import md5 from "js-md5";
|
||||
import { getToken } from "@/utils/auth";
|
||||
import SiteOptions from "@/views/components/SiteOptions";
|
||||
// import SiteOptions from "@/views/components/SiteOptions";
|
||||
// import axios from "axios";
|
||||
// import { download } from "@/utils/request";
|
||||
// import dayjs from "dayjs";
|
||||
@ -360,7 +360,7 @@ const upload = reactive({
|
||||
|
||||
const { queryParams } = toRefs(data);
|
||||
const showSearch = ref(true);
|
||||
const siteList = ref([]);
|
||||
// const siteList = ref([]);
|
||||
const loading = ref(true);
|
||||
const total = ref(0);
|
||||
const dataList = ref([]);
|
||||
@ -374,10 +374,10 @@ const getList = async () => {
|
||||
loading.value = false;
|
||||
};
|
||||
// 获取站点列表
|
||||
const getSiteList = async () => {
|
||||
const resp = await tenantSelect();
|
||||
siteList.value = resp.rows;
|
||||
};
|
||||
// const getSiteList = async () => {
|
||||
// const resp = await tenantSelect();
|
||||
// siteList.value = resp.rows;
|
||||
// };
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.value.pageNum = 1;
|
||||
@ -624,5 +624,5 @@ const handleExport = () => {
|
||||
});
|
||||
};
|
||||
getList();
|
||||
getSiteList();
|
||||
// getSiteList();
|
||||
</script>
|
||||
|
@ -71,8 +71,12 @@ const submitForm = async () => {
|
||||
|
||||
const getDetailById = async () => {
|
||||
if (route.query.id) {
|
||||
const obj = Object.assign({}, route, { title: "修改专家" });
|
||||
tab.updatePage(obj);
|
||||
const { data } = await companyDetail(route.query.id);
|
||||
form.value = data;
|
||||
form.value.keywords = data.keyword ? data.keyword.split(",") : [];
|
||||
console.log(form.value);
|
||||
form.value.district = data.area;
|
||||
}
|
||||
};
|
||||
|
@ -11,9 +11,9 @@
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="所属站点" prop="tenantId">
|
||||
<!-- <el-form-item label="所属站点" prop="tenantId">
|
||||
<SiteOptions v-model="queryParams.tenantId" :site-list="siteList" />
|
||||
</el-form-item>
|
||||
</el-form-item> -->
|
||||
|
||||
<el-form-item>
|
||||
<el-button
|
||||
@ -77,11 +77,11 @@
|
||||
</el-table-column>
|
||||
<el-table-column label="学历" align="center" prop="education" />
|
||||
<!-- <el-table-column label="备注" align="center" prop="introduce" /> -->
|
||||
<el-table-column label="站点" align="center">
|
||||
<!-- <el-table-column label="站点" align="center">
|
||||
<template #default="{ row }">
|
||||
{{ siteList.find((el) => el.id === row.tenantId)?.name ?? "无" }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column> -->
|
||||
<el-table-column label="所在地" align="center" prop="address" />
|
||||
<el-table-column label="操作" align="center">
|
||||
<template #default="{ row }">
|
||||
@ -251,7 +251,7 @@ import {
|
||||
restPassword,
|
||||
} from "@/api/dataList/expert";
|
||||
import md5 from "js-md5";
|
||||
import SiteOptions from "@/views/components/SiteOptions";
|
||||
// import SiteOptions from "@/views/components/SiteOptions";
|
||||
import { tenantSelect } from "@/api/subPlatform/tenant";
|
||||
import { expertList } from "@/api/expert/expert";
|
||||
import { useRouter } from "vue-router";
|
||||
@ -262,7 +262,7 @@ import { ElLoading, ElMessageBox, ElMessage } from "element-plus";
|
||||
import dayjs from "dayjs";
|
||||
import request from "@/utils/request";
|
||||
const router = useRouter();
|
||||
const siteList = ref([]);
|
||||
// const siteList = ref([]);
|
||||
const dataList = ref([]);
|
||||
const total = ref(0);
|
||||
const showSearch = ref(true);
|
||||
@ -369,11 +369,11 @@ const submitResetPassword = async () => {
|
||||
showResetPassword.value = false;
|
||||
};
|
||||
|
||||
// 获取站点列表
|
||||
const getSiteList = async () => {
|
||||
const resp = await tenantSelect();
|
||||
siteList.value = resp.rows;
|
||||
};
|
||||
// // 获取站点列表
|
||||
// const getSiteList = async () => {
|
||||
// const resp = await tenantSelect();
|
||||
// siteList.value = resp.rows;
|
||||
// };
|
||||
/** 查询专家列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true;
|
||||
@ -505,6 +505,6 @@ const handleExport = () => {
|
||||
);
|
||||
});
|
||||
};
|
||||
getSiteList();
|
||||
// getSiteList();
|
||||
getList();
|
||||
</script>
|
||||
|
108
src/views/dataList/laboratory/add.vue
Normal file
108
src/views/dataList/laboratory/add.vue
Normal file
@ -0,0 +1,108 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<div style="width: 50%">
|
||||
<LaboratoryForm
|
||||
v-model="form"
|
||||
:showTitle="true"
|
||||
:formType="formType"
|
||||
:labelWidth="140"
|
||||
ref="laboratoryFormRef"
|
||||
/>
|
||||
</div>
|
||||
<el-button @click="cancel">取消</el-button>
|
||||
<el-button type="primary" @click="submitForm">提交</el-button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup name="LaboratoryAdd">
|
||||
import LaboratoryForm from "@/views/components/LaboratoryForm";
|
||||
import tab from "@/plugins/tab";
|
||||
import {
|
||||
casLaboratoryAdd,
|
||||
casLaboratoryDetail,
|
||||
casLaboratoryUpdate,
|
||||
} from "@/api/dataList/laboratory";
|
||||
import { reactive, toRefs } from "vue";
|
||||
import { useRoute, useRouter } from "vue-router";
|
||||
import { ElMessage } from "element-plus";
|
||||
const router = useRouter();
|
||||
const route = useRoute();
|
||||
const formType = ref(1);
|
||||
const laboratoryFormRef = ref(null);
|
||||
const data = reactive({
|
||||
form: {
|
||||
// image: undefined,
|
||||
// name: undefined,
|
||||
// tenantId: undefined,
|
||||
// province: undefined, // 省code
|
||||
// city: undefined, // 市code
|
||||
// district: undefined, // 区code
|
||||
// address: undefined, // 详细地址
|
||||
// product: undefined,
|
||||
// kind: undefined,
|
||||
// code: undefined,
|
||||
// inviterCode: undefined,
|
||||
// url: undefined,
|
||||
// industrys: [],
|
||||
// keywords: [],
|
||||
// directions: [],
|
||||
// introduce: undefined,
|
||||
// license: undefined,
|
||||
},
|
||||
});
|
||||
const { form } = toRefs(data);
|
||||
const cancel = () => {
|
||||
router.back();
|
||||
tab.closeOpenPage();
|
||||
};
|
||||
const submitForm = async () => {
|
||||
const valid = await laboratoryFormRef.value.validateForm();
|
||||
if (valid) {
|
||||
form.value.keyword = form.value.keywords.join(",");
|
||||
if (form.value.id != undefined) {
|
||||
await casLaboratoryUpdate(form.value);
|
||||
cancel();
|
||||
ElMessage.success("修改成功");
|
||||
} else {
|
||||
await casLaboratoryAdd(form.value);
|
||||
cancel();
|
||||
ElMessage.success("新增成功");
|
||||
}
|
||||
} else {
|
||||
console.log("校验未通过");
|
||||
}
|
||||
};
|
||||
|
||||
const getDetailById = async () => {
|
||||
if (route.query.id) {
|
||||
const { data } = await casLaboratoryDetail(route.query.id);
|
||||
form.value = data;
|
||||
form.value.keywords = data.keyword ? data.keyword.split(",") : [];
|
||||
// form.value.district = data.area;
|
||||
}
|
||||
};
|
||||
getDetailById();
|
||||
</script>
|
||||
|
||||
<!-- <script>
|
||||
export default {
|
||||
components: {
|
||||
ExpertForm,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
// formType: 2,
|
||||
// labelWidth: 140,
|
||||
};
|
||||
},
|
||||
methods: {},
|
||||
created() {
|
||||
const { id } = this.$route.query;
|
||||
if (id) {
|
||||
companyDetail({ id }).then((res) => {
|
||||
form.value = res.data;
|
||||
});
|
||||
}
|
||||
},
|
||||
};
|
||||
</script> -->
|
531
src/views/dataList/laboratory/index.vue
Normal file
531
src/views/dataList/laboratory/index.vue
Normal file
@ -0,0 +1,531 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" :inline="true">
|
||||
<el-form-item label="姓名" prop="name">
|
||||
<el-input
|
||||
v-model="queryParams.name"
|
||||
placeholder="请输入关键字"
|
||||
clearable
|
||||
size="default"
|
||||
style="width: 240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<!--
|
||||
<el-form-item label="所属站点" prop="tenantId">
|
||||
<SiteOptions v-model="queryParams.tenantId" :site-list="siteList" />
|
||||
</el-form-item> -->
|
||||
|
||||
<el-form-item>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="search"
|
||||
size="default"
|
||||
@click="handleQuery"
|
||||
>搜索</el-button
|
||||
>
|
||||
<el-button icon="refresh" size="default" @click="resetQuery"
|
||||
>重置</el-button
|
||||
>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="plus"
|
||||
size="default"
|
||||
@click="handleAdd"
|
||||
>新增</el-button
|
||||
>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="info"
|
||||
plain
|
||||
icon="upload"
|
||||
size="default"
|
||||
@click="handleImport"
|
||||
>导入</el-button
|
||||
>
|
||||
</el-col>
|
||||
<!-- <el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="download"
|
||||
size="default"
|
||||
@click="handleExport"
|
||||
>导出</el-button
|
||||
>
|
||||
</el-col> -->
|
||||
<right-toolbar
|
||||
:showSearch.sync="showSearch"
|
||||
@queryTable="getList"
|
||||
></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<!-- 表格区域 -->
|
||||
<el-table v-loading="loading" :data="dataList">
|
||||
<el-table-column label="数据编号" align="center" prop="id" />
|
||||
<el-table-column label="实验室全称" align="center" prop="name" />
|
||||
<el-table-column label="所属院所或高校" align="center" prop="school" />
|
||||
<el-table-column label="实验室简介" align="center" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
<div v-html="row.introduction"></div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="核心成员及简介"
|
||||
align="center"
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<div v-html="row.member"></div>
|
||||
<!-- {{ siteList.find((el) => el.id === row.tenantId)?.name ?? "无" }} -->
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="研究方向"
|
||||
align="center"
|
||||
prop="researchDirection"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column
|
||||
label="主要技术应用场景"
|
||||
align="center"
|
||||
prop="primaryTechnology"
|
||||
/>
|
||||
<el-table-column label="所属行业领域" align="center" prop="industryStr" />
|
||||
<el-table-column label="联系电话" align="center" prop="phone" />
|
||||
<el-table-column label="网址" align="center" prop="url" />
|
||||
<!-- <el-table-column label="关键词" align="center" prop="address" /> -->
|
||||
<el-table-column label="操作" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
size="small"
|
||||
type="text"
|
||||
icon="edit"
|
||||
@click="handleDetail(row.id)"
|
||||
>修改</el-button
|
||||
>
|
||||
<el-button
|
||||
size="small"
|
||||
type="text"
|
||||
icon="edit"
|
||||
@click="handleDelete(row.id)"
|
||||
>删除</el-button
|
||||
>
|
||||
<!-- <el-button
|
||||
size="small"
|
||||
type="text"
|
||||
icon="plus"
|
||||
@click="handleClaim(row.id)"
|
||||
>已认领专利</el-button
|
||||
>
|
||||
|
||||
<el-button
|
||||
size="small"
|
||||
type="text"
|
||||
icon="edit"
|
||||
@click="openAssignAccount(row.id)"
|
||||
>分配账号</el-button
|
||||
>
|
||||
<el-button
|
||||
size="small"
|
||||
type="text"
|
||||
icon="edit"
|
||||
@click="openResetPassword(row.id)"
|
||||
>重置密码</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"
|
||||
/>
|
||||
|
||||
<!-- 用户导入对话框 -->
|
||||
<el-dialog
|
||||
:title="upload.title"
|
||||
v-model="upload.open"
|
||||
width="400px"
|
||||
append-to-body
|
||||
>
|
||||
<el-upload
|
||||
ref="uploadRef"
|
||||
:limit="1"
|
||||
accept=".xlsx, .xls"
|
||||
:headers="upload.headers"
|
||||
:action="upload.url"
|
||||
:disabled="upload.isUploading"
|
||||
:on-progress="handleFileUploadProgress"
|
||||
:on-success="handleFileSuccess"
|
||||
:auto-upload="false"
|
||||
drag
|
||||
>
|
||||
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
|
||||
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
||||
<template #tip>
|
||||
<div class="el-upload__tip text-center">
|
||||
<!-- <div class="el-upload__tip">
|
||||
<el-checkbox
|
||||
v-model="upload.updateSupport"
|
||||
/>是否更新已经存在的用户数据
|
||||
</div> -->
|
||||
<span>仅允许导入xls、xlsx格式文件。</span>
|
||||
<!-- <el-link
|
||||
type="primary"
|
||||
:underline="false"
|
||||
style="font-size: 12px; vertical-align: baseline"
|
||||
@click="importTemplate"
|
||||
>下载模板</el-link
|
||||
> -->
|
||||
</div>
|
||||
</template>
|
||||
</el-upload>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button type="primary" @click="submitFileForm">确 定</el-button>
|
||||
<el-button @click="upload.open = false">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<!-- <el-dialog
|
||||
title="分配账号"
|
||||
v-model="showAssignAccount"
|
||||
width="400px"
|
||||
append-to-body
|
||||
>
|
||||
<el-form
|
||||
:model="assignAccountForm"
|
||||
:rules="assignAccoutRules"
|
||||
label-width="80px"
|
||||
ref="assignAccountFormRef"
|
||||
>
|
||||
<el-form-item label="用户名" prop="username">
|
||||
<el-input v-model="assignAccountForm.username"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="密码" prop="password">
|
||||
<el-input
|
||||
v-model="assignAccountForm.password"
|
||||
show-password
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button type="primary" @click="submitAssignAccount"
|
||||
>确 定</el-button
|
||||
>
|
||||
<el-button @click="closeAssignAccount">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog
|
||||
title="重置密码"
|
||||
v-model="showResetPassword"
|
||||
width="400px"
|
||||
append-to-body
|
||||
>
|
||||
<el-form
|
||||
:model="resetPasswordForm"
|
||||
:rules="assignAccoutRules"
|
||||
label-width="80px"
|
||||
ref="resetPasswordFormRef"
|
||||
>
|
||||
<el-form-item label="密码" prop="password">
|
||||
<el-input
|
||||
v-model="resetPasswordForm.password"
|
||||
show-password
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button type="primary" @click="submitResetPassword"
|
||||
>确 定</el-button
|
||||
>
|
||||
<el-button @click="closeResetPassword">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog> -->
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
// import {
|
||||
// expertDelete,
|
||||
// allocateAccount,
|
||||
// getAccount,
|
||||
// restPassword,
|
||||
// } from "@/api/dataList/expert";
|
||||
// import md5 from "js-md5";
|
||||
// import SiteOptions from "@/views/components/SiteOptions";
|
||||
import { tenantSelect } from "@/api/subPlatform/tenant";
|
||||
// import { expertList } from "@/api/expert/expert";
|
||||
import { useRouter } from "vue-router";
|
||||
import { getToken } from "@/utils/auth";
|
||||
import { tansParams, blobValidate } from "@/utils/ruoyi";
|
||||
import {
|
||||
casLaboratoryList,
|
||||
casLaboratoryDelete,
|
||||
} from "@/api/dataList/laboratory";
|
||||
import FieldOptions from "@/views/components/FieldOptions";
|
||||
import { ElLoading, ElMessageBox, ElMessage } from "element-plus";
|
||||
import dayjs from "dayjs";
|
||||
import request from "@/utils/request";
|
||||
const router = useRouter();
|
||||
const siteList = ref([]);
|
||||
const dataList = ref([]);
|
||||
const total = ref(0);
|
||||
const showSearch = ref(true);
|
||||
const data = reactive({
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
},
|
||||
});
|
||||
const loading = ref(true);
|
||||
/*** 用户导入参数 */
|
||||
const upload = reactive({
|
||||
// 是否显示弹出层(用户导入)
|
||||
open: false,
|
||||
// 弹出层标题(用户导入)
|
||||
title: "",
|
||||
// 是否禁用上传
|
||||
isUploading: false,
|
||||
// 是否更新已经存在的用户数据
|
||||
// updateSupport: 0,
|
||||
// 设置上传的请求头部
|
||||
headers: { Authorization: "Bearer " + getToken() },
|
||||
// 上传的地址
|
||||
url: import.meta.env.VITE_APP_BASE_API + "/business/casLaboratory/importData",
|
||||
});
|
||||
|
||||
const { queryParams } = toRefs(data);
|
||||
|
||||
// const assignAccoutRules = {
|
||||
// username: [{ required: true, message: "请输入用户名", trigger: "blur" }],
|
||||
// password: [{ required: true, message: "请输入密码", trigger: "blur" }],
|
||||
// vipType: [{ required: true, message: "请选择会员类型", trigger: "change" }],
|
||||
// expireTime: [
|
||||
// { required: true, message: "请选择到期时间", trigger: "change" },
|
||||
// ],
|
||||
// };
|
||||
// const showAssignAccount = ref(false);
|
||||
// const assignAccountForm = reactive({
|
||||
// username: undefined,
|
||||
// password: undefined,
|
||||
// });
|
||||
// const assignAccountFormRef = ref();
|
||||
// const resetPasswordForm = reactive({
|
||||
// password: undefined,
|
||||
// });
|
||||
// const resetPasswordFormRef = ref();
|
||||
// const showResetPassword = ref(false);
|
||||
|
||||
// const openAssignAccount = async (id) => {
|
||||
// resetForm();
|
||||
// const { have, data } = await getAccount(id);
|
||||
// if (have) {
|
||||
// ElMessageBox.alert(`已经存在账号:${data}`, "账号已经存在");
|
||||
// } else {
|
||||
// assignAccountForm.id = id;
|
||||
// showAssignAccount.value = true;
|
||||
// }
|
||||
// };
|
||||
|
||||
// const openResetPassword = async (id) => {
|
||||
// resetForm();
|
||||
// const { have } = await getAccount(id);
|
||||
// if (have) {
|
||||
// resetPasswordForm.id = id;
|
||||
// showResetPassword.value = true;
|
||||
// } else {
|
||||
// ElMessageBox.alert(`尚未分配账号,请先分配账号`, "尚未分配账号");
|
||||
// }
|
||||
// };
|
||||
// const resetForm = () => {
|
||||
// if (resetPasswordFormRef.value) {
|
||||
// resetPasswordFormRef.value.resetFields();
|
||||
// }
|
||||
// if (assignAccountFormRef.value) {
|
||||
// assignAccountFormRef.value.resetFields();
|
||||
// }
|
||||
// resetPasswordForm.password = undefined;
|
||||
// assignAccountForm.username = undefined;
|
||||
// assignAccountForm.password = undefined;
|
||||
// };
|
||||
// const closeResetPassword = () => {
|
||||
// resetForm();
|
||||
// showResetPassword.value = false;
|
||||
// };
|
||||
// const closeAssignAccount = () => {
|
||||
// resetForm();
|
||||
// showAssignAccount.value = false;
|
||||
// };
|
||||
|
||||
// const submitAssignAccount = async () => {
|
||||
// await assignAccountFormRef.value.validate();
|
||||
// await allocateAccount({
|
||||
// ...assignAccountForm,
|
||||
// password: md5(assignAccountForm.password),
|
||||
// });
|
||||
// ElMessage.success("账号分配成功");
|
||||
// showAssignAccount.value = false;
|
||||
// };
|
||||
|
||||
// const submitResetPassword = async () => {
|
||||
// await resetPasswordFormRef.value.validate();
|
||||
// await restPassword(resetPasswordForm.id, md5(resetPasswordForm.password));
|
||||
// ElMessage.success("密码重置成功");
|
||||
// showResetPassword.value = false;
|
||||
// };
|
||||
|
||||
// 获取站点列表
|
||||
const getSiteList = async () => {
|
||||
const resp = await tenantSelect();
|
||||
siteList.value = resp.rows;
|
||||
};
|
||||
/** 查询专家列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true;
|
||||
const resp = await casLaboratoryList(queryParams.value);
|
||||
dataList.value = resp.rows;
|
||||
total.value = resp.total;
|
||||
loading.value = false;
|
||||
};
|
||||
// 新增页面跳转
|
||||
const handleAdd = () => {
|
||||
router.push({
|
||||
path: "/dataList/laboratory/add",
|
||||
});
|
||||
};
|
||||
// 修改页面 获取详情
|
||||
const handleDetail = (id) => {
|
||||
router.push({
|
||||
path: "/dataList/laboratory/add",
|
||||
query: { id },
|
||||
});
|
||||
};
|
||||
// 认领专利
|
||||
// const handleClaim = (id) => {
|
||||
// router.push({
|
||||
// path: "/dataList/expert/claim",
|
||||
// query: { id },
|
||||
// });
|
||||
// };
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.value.pageNum = 1;
|
||||
getList();
|
||||
};
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryParams.value.name = "";
|
||||
queryParams.value.tenantId = "";
|
||||
handleQuery();
|
||||
};
|
||||
const uploadRef = ref(null);
|
||||
/** 导入按钮操作 */
|
||||
function handleImport() {
|
||||
upload.title = "用户导入";
|
||||
upload.open = true;
|
||||
}
|
||||
/** 下载模板操作 */
|
||||
function importTemplate() {
|
||||
proxy.download(
|
||||
"system/user/importTemplate",
|
||||
{},
|
||||
`user_template_${new Date().getTime()}.xlsx`
|
||||
);
|
||||
}
|
||||
/**文件上传中处理 */
|
||||
const handleFileUploadProgress = (event, file, fileList) => {
|
||||
upload.isUploading = true;
|
||||
};
|
||||
/** 文件上传成功处理 */
|
||||
const handleFileSuccess = (response, file, fileList) => {
|
||||
upload.open = false;
|
||||
upload.isUploading = false;
|
||||
uploadRef.value.handleRemove(file);
|
||||
ElMessageBox.alert(
|
||||
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
|
||||
response.msg +
|
||||
"</div>",
|
||||
"导入结果",
|
||||
{ dangerouslyUseHTMLString: true }
|
||||
);
|
||||
getList();
|
||||
};
|
||||
/** 提交上传文件 */
|
||||
function submitFileForm() {
|
||||
uploadRef.value.submit();
|
||||
}
|
||||
const handleDelete = async (id) => {
|
||||
ElMessageBox.confirm(`是否确认删除编号为${id}的数据项?`)
|
||||
.then(async () => {
|
||||
await casLaboratoryDelete(id);
|
||||
getList();
|
||||
ElMessage.success("删除成功");
|
||||
})
|
||||
.catch(() => {});
|
||||
};
|
||||
|
||||
let downloadLoadingInstance;
|
||||
const download = (url, filename) => {
|
||||
downloadLoadingInstance = ElLoading.service({
|
||||
text: "正在下载数据,请稍候",
|
||||
background: "rgba(0, 0, 0, 0.7)",
|
||||
});
|
||||
return request
|
||||
.get(url, {
|
||||
// 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();
|
||||
});
|
||||
};
|
||||
|
||||
// const handleExport = () => {
|
||||
// ElMessageBox.confirm(`是否确认企业列表?`).then(() => {
|
||||
// download(
|
||||
// `/business/enterprise/export`,
|
||||
// `企业信息(${dayjs().format("YYYYMMDDHHmmss")}).xlsx`
|
||||
// );
|
||||
// });
|
||||
// };
|
||||
getSiteList();
|
||||
getList();
|
||||
</script>
|
@ -32,9 +32,9 @@
|
||||
<el-table-column prop="title" label="论文题目" align="center" />
|
||||
<el-table-column prop="ext" label="期刊名称" align="center" />
|
||||
<el-table-column prop="author" label="作者" align="center" />
|
||||
<el-table-column prop="tags" label="关键词" align="center">
|
||||
<el-table-column label="关键词" align="center">
|
||||
<template #default="{ row }">
|
||||
{{ row.tags }}
|
||||
{{ row.keyword }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="publishTime" label="出版日期" align="center" />
|
||||
@ -95,7 +95,7 @@
|
||||
:labelWidth="100"
|
||||
v-model="formData"
|
||||
title="标签"
|
||||
fieldKey="tagsList"
|
||||
fieldKey="keywords"
|
||||
/>
|
||||
<!-- <el-form-item label="标签">
|
||||
<template #default="{ row }">
|
||||
@ -126,6 +126,13 @@
|
||||
placeholder="请输入摘要"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="上传论文:" prop="fileUrl">
|
||||
<FileUpload
|
||||
v-model="formData.fileUrl"
|
||||
:limit="1"
|
||||
:fileType="['docx', 'doc', 'pdf']"
|
||||
></FileUpload>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-row type="flex" justify="end">
|
||||
<el-button type="" @click="close">取消</el-button>
|
||||
@ -169,7 +176,7 @@ const dataList = ref([]);
|
||||
const total = ref(0);
|
||||
const isShow = ref(false);
|
||||
const { queryData } = toRefs(data);
|
||||
const tags = ref([]);
|
||||
// const tags = ref([]);
|
||||
// 获取论文列表
|
||||
const getList = async () => {
|
||||
const res = await expertList(queryData.value);
|
||||
@ -202,22 +209,22 @@ const delList = async (id) => {
|
||||
};
|
||||
// 新增功能
|
||||
const btnAdd = () => {
|
||||
formData.value.tagsList = [];
|
||||
formData.value.keywords = [];
|
||||
isShow.value = true;
|
||||
};
|
||||
// 确认添加标签
|
||||
const addTag = () => {
|
||||
if (!formData.value.tags) return;
|
||||
tags.value.push(formData.value.tags);
|
||||
formData.value.tags = "";
|
||||
};
|
||||
// const addTag = () => {
|
||||
// if (!formData.value.tags) return;
|
||||
// tags.value.push(formData.value.tags);
|
||||
// formData.value.tags = "";
|
||||
// };
|
||||
// 删除标签
|
||||
const handleClose = (val) => {
|
||||
tags.value.splice(tags.value.indexOf(val), 1);
|
||||
};
|
||||
// const handleClose = (val) => {
|
||||
// tags.value.splice(tags.value.indexOf(val), 1);
|
||||
// };
|
||||
// 添加/编辑
|
||||
const btnReadd = async () => {
|
||||
formData.value.tags = formData.value.tagsList.join(",");
|
||||
formData.value.tags = formData.value.keyword.join(",");
|
||||
await addItem(formData.value);
|
||||
ElMessage.success("添加成功");
|
||||
getList();
|
||||
@ -225,7 +232,7 @@ const btnReadd = async () => {
|
||||
};
|
||||
// 修改
|
||||
const btnPut = async () => {
|
||||
formData.value.tags = formData.value.tagsList.join(",");
|
||||
formData.value.keyword = formData.value.keywords.join(",");
|
||||
await rebtnItem(formData.value);
|
||||
ElMessage.success("修改成功");
|
||||
getList();
|
||||
@ -235,11 +242,11 @@ const btnPut = async () => {
|
||||
const editBtn = async (id) => {
|
||||
const resp = await editItem(id);
|
||||
formData.value = resp.data;
|
||||
formData.value.tagsList = formData.value.tags
|
||||
? formData.value.tags.split(",")
|
||||
formData.value.keywords = formData.value.keyword
|
||||
? formData.value.keyword.split(",")
|
||||
: [];
|
||||
tags.value = formData.value.tags && formData.value.tags.split(",");
|
||||
formData.value.tags = "";
|
||||
// tags.value = formData.value.tags && formData.value.tags.split(",");
|
||||
// formData.value.tags = "";
|
||||
isShow.value = true;
|
||||
};
|
||||
// 弹框关闭时间
|
||||
|
@ -79,6 +79,7 @@ const getDetailById = async () => {
|
||||
if (route.query.id) {
|
||||
const { data } = await companyDetail(route.query.id);
|
||||
form.value = data;
|
||||
form.value.keywords = data.keyword ? data.keyword.split(",") : [];
|
||||
form.value.district = data.area;
|
||||
}
|
||||
};
|
||||
|
@ -20,13 +20,13 @@
|
||||
<el-option label="已拒绝" :value="2" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="站点">
|
||||
<!-- <el-form-item label="站点">
|
||||
<SiteOptions
|
||||
v-model="queryData.tenantId"
|
||||
:site-list="siteList"
|
||||
style="width: 160px"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form-item> -->
|
||||
|
||||
<el-form-item style="float: right">
|
||||
<el-button
|
||||
@ -59,11 +59,11 @@
|
||||
/>
|
||||
<el-table-column prop="school" label="毕业院校" align="center" />
|
||||
<el-table-column prop="post" label="职务" align="center" />
|
||||
<el-table-column label="站点" align="center">
|
||||
<!-- <el-table-column label="站点" align="center">
|
||||
<template #default="{ row }">
|
||||
{{ siteList.find((el) => el.id === row.tenantId)?.name ?? "无" }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column> -->
|
||||
<el-table-column prop="address" label="所在地" align="center" />
|
||||
<el-table-column prop="examineStatus" label="审核状态" align="center">
|
||||
<template #default="{ row }">
|
||||
@ -106,7 +106,7 @@ const data = reactive({
|
||||
});
|
||||
const total = ref(0);
|
||||
const dataList = ref([]);
|
||||
const siteList = ref([]);
|
||||
// const siteList = ref([]);
|
||||
const { queryData } = toRefs(data);
|
||||
const examineStatusDict = {
|
||||
0: "审核中",
|
||||
@ -120,10 +120,10 @@ const getList = async () => {
|
||||
total.value = res.total;
|
||||
};
|
||||
// 获取站点列表
|
||||
const getSiteList = async () => {
|
||||
const resp = await tenantSelect();
|
||||
siteList.value = resp.rows;
|
||||
};
|
||||
// const getSiteList = async () => {
|
||||
// const resp = await tenantSelect();
|
||||
// siteList.value = resp.rows;
|
||||
// };
|
||||
// 搜索查询
|
||||
const handleQuery = () => {
|
||||
getList(queryData.value);
|
||||
@ -145,6 +145,6 @@ const btnAudit = (id) => {
|
||||
});
|
||||
};
|
||||
getList();
|
||||
getSiteList();
|
||||
// getSiteList();
|
||||
</script>
|
||||
<style></style>
|
||||
|
301
src/views/website/activity/active/FieldOptions/index.vue
Normal file
301
src/views/website/activity/active/FieldOptions/index.vue
Normal file
@ -0,0 +1,301 @@
|
||||
<template>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="modelValue"
|
||||
:rules="rules"
|
||||
:label-width="labelWidth + 'px'"
|
||||
:disabled="disabled"
|
||||
>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="所属领域:" prop="industrys" :show-message="false">
|
||||
<el-row type="flex" justify="space-between">
|
||||
<el-col :span="6">
|
||||
<el-form-item>
|
||||
<el-select
|
||||
v-model="fields[0]"
|
||||
value-key="id"
|
||||
placeholder="请选择"
|
||||
@change="levelIChange"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in levelI"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-select
|
||||
v-model="fields[1]"
|
||||
value-key="id"
|
||||
placeholder="请选择"
|
||||
:disabled="levelII.length === 0"
|
||||
@change="levelIIChange"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in levelII"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-select
|
||||
v-model="fields[2]"
|
||||
value-key="id"
|
||||
:disabled="levelIII.length === 0"
|
||||
placeholder="请选择"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in levelIII"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<el-col :span="3">
|
||||
<el-button type="primary" @click="fieldAdd">添加</el-button>
|
||||
<!-- <el-button type="primary" @click="check">验证</el-button> -->
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div class="e_tag">
|
||||
<el-tag
|
||||
v-for="(tag, index) in industrysTags"
|
||||
:key="index"
|
||||
closable
|
||||
@close="handleFieldClose(index)"
|
||||
>
|
||||
{{ tag }}
|
||||
<!-- <template v-if="Array.isArray(tag)">
|
||||
<span v-for="(item, i) in tag" :key="item">
|
||||
{{ item.name }}
|
||||
<span v-if="tag.length != i + 1">></span>
|
||||
</span>
|
||||
</template>
|
||||
<template v-else>
|
||||
<span>{{ tag }}</span>
|
||||
</template> -->
|
||||
</el-tag>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</template>
|
||||
<script setup name="FieldOptions">
|
||||
// import { industry } from "@/api/config";
|
||||
import { listSysIndustry } from "@/api/platform/industry";
|
||||
import { ElMessage } from "element-plus";
|
||||
import { toRefs, watch, reactive } from "vue";
|
||||
|
||||
const props = defineProps({
|
||||
modelValue: Object,
|
||||
labelWidth: {
|
||||
type: Number,
|
||||
default: 120,
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
});
|
||||
const { modelValue, labelWidth, disabled } = toRefs(props);
|
||||
const formRef = ref(null);
|
||||
const levelI = ref([]); // I级数据
|
||||
const levelII = ref([]); // II级数据
|
||||
const levelIII = ref([]); // III级数据
|
||||
const fields = ref([]); // 当前下拉框选中的集合
|
||||
const industrysTags = ref([]); // 点击添加按钮后临时存储的数据集合
|
||||
const data = reactive({
|
||||
rules: {
|
||||
industrys: [
|
||||
{
|
||||
type: "array",
|
||||
required: true,
|
||||
message: "请选择并添加",
|
||||
trigger: "change",
|
||||
},
|
||||
],
|
||||
},
|
||||
});
|
||||
const { rules } = toRefs(data);
|
||||
|
||||
// 获取领域树形列表
|
||||
const getIndustryTreeData = async () => {
|
||||
const { data } = await listSysIndustry();
|
||||
levelI.value = data;
|
||||
};
|
||||
|
||||
const levelIChange = async (item) => {
|
||||
delete fields.value[1];
|
||||
delete fields.value[2];
|
||||
levelII.value = levelI.value.find((el) => {
|
||||
return el.id === item;
|
||||
}).children;
|
||||
};
|
||||
|
||||
const levelIIChange = async (item) => {
|
||||
delete fields.value[2];
|
||||
levelIII.value = levelII.value.find((el) => el.id === item).children;
|
||||
};
|
||||
|
||||
// 根据id获取领域名称
|
||||
// TODO:如果领域已经被删除,则显示未知领域
|
||||
const getFieldNameById = (ids) => {
|
||||
if (levelI.value.length === 0) {
|
||||
return;
|
||||
}
|
||||
let fieldNameList = [];
|
||||
let subFieldList = [];
|
||||
for (let i = 0; i < ids.length; i++) {
|
||||
const id = ids[i];
|
||||
if (fieldNameList.length === 0) {
|
||||
subFieldList = levelI.value.find((el) => el.id == id)?.children;
|
||||
fieldNameList.push(levelI.value.find((el) => id === el.id)?.name);
|
||||
} else {
|
||||
fieldNameList.push(subFieldList.find((el) => id === el.id)?.name);
|
||||
subFieldList = subFieldList.find((el) => el.id == id)?.children;
|
||||
}
|
||||
}
|
||||
return fieldNameList.join(">");
|
||||
};
|
||||
|
||||
// 所属领域添加按钮
|
||||
const fieldAdd = () => {
|
||||
if (!fields.value.length) return ElMessage.error("请选择领域类型");
|
||||
// 移除校验
|
||||
formRef.value.clearValidate();
|
||||
industrysTags.value.push(fields.value);
|
||||
modelValue.value.industrys.push(fields.value.join("-"));
|
||||
fields.value = [];
|
||||
levelII.value = [];
|
||||
levelIII.value = [];
|
||||
// for (let i = 0; i < industrysTags.value.length; i++) {
|
||||
// modelValue.value.industrys.push("");
|
||||
// const item = industrysTags.value[i];
|
||||
// for (let j = 0; j < item.length; j++) {
|
||||
// const item2 = item[j];
|
||||
// if (modelValue.value.industrys[i] == "") {
|
||||
// modelValue.value.industrys[i] = item2.id;
|
||||
// } else {
|
||||
// modelValue.value.industrys[i] =
|
||||
// modelValue.value.industrys[i] + "-" + item2.id;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// fields.value = [];
|
||||
// levelII.value = [];
|
||||
// levelIII.value = [];
|
||||
};
|
||||
|
||||
const handleFieldClose = (index) => {
|
||||
industrysTags.value.splice(index, 1);
|
||||
modelValue.value.industrys.splice(index, 1);
|
||||
formRef.value.validate();
|
||||
};
|
||||
|
||||
const validateForm = async () => {
|
||||
try {
|
||||
return await formRef.value.validate();
|
||||
} catch (error) {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
getIndustryTreeData();
|
||||
|
||||
watch(
|
||||
modelValue,
|
||||
(newVal) => {
|
||||
modelValue.value.industrys = [];
|
||||
// console.log(modelValue.value.industry ? 1 : 0);
|
||||
let industrysList = modelValue.value.industryName
|
||||
? modelValue.value.industryName.split(",")
|
||||
: [];
|
||||
modelValue.value.industrys.push(...industrysList);
|
||||
for (const field of industrysList) {
|
||||
industrysTags.value.push(field);
|
||||
}
|
||||
// let _key = [];
|
||||
// let _value = [];
|
||||
// for (let i = 0; i < newVal.industrys.length; i++) {
|
||||
// const item = newVal.industrys[i];
|
||||
// _key.push(item.key);
|
||||
// _value.push(item.value);
|
||||
// }
|
||||
// newVal.industrys = _key;
|
||||
// let keyObj = [];
|
||||
// for (let i = 0; i < _key.length; i++) {
|
||||
// keyObj.push([]);
|
||||
// let array = _key[i].split("-");
|
||||
// for (let j = 0; j < array.length; j++) {
|
||||
// keyObj[i].push({
|
||||
// id: array[j],
|
||||
// });
|
||||
// }
|
||||
// }
|
||||
// for (let i = 0; i < _value.length; i++) {
|
||||
// let array = _value[i].split(">");
|
||||
// for (let j = 0; j < array.length; j++) {
|
||||
// keyObj[i][j]["name"] = array[j];
|
||||
// }
|
||||
// }
|
||||
// industrysTags.value = keyObj;
|
||||
},
|
||||
{ immediate: true }
|
||||
);
|
||||
|
||||
defineExpose({
|
||||
validateForm,
|
||||
});
|
||||
</script>
|
||||
|
||||
<!-- <script>
|
||||
export default {
|
||||
watch: {
|
||||
value(newVal, oldVal) {
|
||||
let _key = [];
|
||||
let _value = [];
|
||||
for (let i = 0; i < newVal.industrys.length; i++) {
|
||||
const item = newVal.industrys[i];
|
||||
_key.push(item.key);
|
||||
_value.push(item.value);
|
||||
}
|
||||
newVal.industrys = _key;
|
||||
|
||||
let keyObj = [];
|
||||
for (let i = 0; i < _key.length; i++) {
|
||||
keyObj.push([]);
|
||||
let array = _key[i].split("-");
|
||||
for (let j = 0; j < array.length; j++) {
|
||||
keyObj[i].push({
|
||||
id: array[j],
|
||||
});
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < _value.length; i++) {
|
||||
let array = _value[i].split(">");
|
||||
for (let j = 0; j < array.length; j++) {
|
||||
keyObj[i][j]["name"] = array[j];
|
||||
}
|
||||
}
|
||||
industrysTags.value = keyObj;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script> -->
|
||||
<style lang="scss" scoped>
|
||||
.e_tag {
|
||||
.el-tag {
|
||||
margin-right: 10px;
|
||||
}
|
||||
}
|
||||
</style>
|
@ -404,13 +404,14 @@ import {
|
||||
cityList,
|
||||
districtList,
|
||||
} from "@/api/config";
|
||||
import FieldOptions from "@/views/components/FieldOptions";
|
||||
import FieldOptions from "./FieldOptions";
|
||||
// import { cloneDeep } from "lodash";
|
||||
import { reactive, toRefs } from "vue";
|
||||
// import { constants } from "buffer";
|
||||
import { ElMessage, ElMessageBox } from "element-plus";
|
||||
import WangEditor from "@/components/WangEditor/index.vue";
|
||||
import SiteOptions from "@/views/components/SiteOptions";
|
||||
import { useRouter } from "vue-router";
|
||||
const router = useRouter();
|
||||
const dataList = ref([]);
|
||||
const loading = ref(true);
|
||||
@ -449,7 +450,7 @@ const data = reactive({
|
||||
pageSize: 10,
|
||||
},
|
||||
form: {
|
||||
industrys: [],
|
||||
// industrys: [],
|
||||
},
|
||||
rules: {
|
||||
title: [{ required: true, message: "活动名称不能为空", trigger: "blur" }],
|
||||
@ -546,7 +547,7 @@ const reset = () => {
|
||||
id: undefined,
|
||||
tenantId: undefined,
|
||||
title: undefined,
|
||||
industrys: [],
|
||||
// industrys: [],
|
||||
// notifyCrowd: [],
|
||||
maxNumber: 0,
|
||||
isHome: 1,
|
||||
@ -636,8 +637,12 @@ const handleUpdate = async (row) => {
|
||||
const resp = await activityDetail(row.id);
|
||||
const formData = resp.data;
|
||||
formData.notifyCrowds = formData.notifyCrowd?.split(",") ?? [];
|
||||
formData.industrys = formData.industryName?.split(",") ?? [];
|
||||
// formData.industrys = formData.industryName?.split(",") ?? [];
|
||||
// formData.industrys = ["eqwe", "eqwe"];
|
||||
// console.log(formData);
|
||||
form.value = formData;
|
||||
// form.value.industrys = ["rnm", "fdf"];
|
||||
// console.log(form.value);
|
||||
showEditDialog.value = true;
|
||||
title.value = "修改";
|
||||
};
|
||||
|
@ -31,7 +31,7 @@ export default defineConfig(({ mode, command }) => {
|
||||
proxy: {
|
||||
// https://cn.vitejs.dev/config/#server-proxy
|
||||
"/dev-api": {
|
||||
// target: 'http://192.168.110.10:1618',
|
||||
// target: "http://192.168.110.10:1618",
|
||||
target: "http://101.34.131.16:1618",
|
||||
changeOrigin: true,
|
||||
rewrite: (p) => p.replace(/^\/dev-api/, ""),
|
||||
|
Reference in New Issue
Block a user