bugfix and performance improvements
This commit is contained in:
10
Caddyfile
Normal file
10
Caddyfile
Normal file
@ -0,0 +1,10 @@
|
||||
:8007 {
|
||||
handle_path /api/* {
|
||||
reverse_proxy http://192.168.0.201:1618
|
||||
}
|
||||
handle {
|
||||
root * "/Volumes/iMac Doc/WebstormProjects/cas_cloud_web_i18n/dist"
|
||||
file_server
|
||||
try_files {path} /
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -100,7 +100,7 @@
|
||||
</li>
|
||||
<li class="menu-item1 profile-menu-group" style="display: flex">
|
||||
<div
|
||||
v-if="!userStore.avatar"
|
||||
v-if="!userStore.token"
|
||||
class="menu-item-tit"
|
||||
:class="pagePath == '/login' ? 'active' : ''"
|
||||
@click="handlePath('/login')"
|
||||
@ -118,7 +118,11 @@
|
||||
<!-- <template #reference> -->
|
||||
<div v-else class="avatar-wrapper">
|
||||
<img
|
||||
:src="`${baseUrl}/file${userStore.avatar}`"
|
||||
:src="
|
||||
userStore.avatar
|
||||
? `${baseUrl}/file${userStore.avatar}`
|
||||
: defaultAvatar
|
||||
"
|
||||
class="user-avatar"
|
||||
/>
|
||||
<i class="el-icon-caret-bottom" />
|
||||
@ -126,7 +130,7 @@
|
||||
<!-- </template> -->
|
||||
<!-- </el-popover> -->
|
||||
<div
|
||||
v-if="userStore.avatar"
|
||||
v-if="userStore.token"
|
||||
class="menu-item-tit"
|
||||
:class="pagePath == '/login' ? 'active' : ''"
|
||||
@click="handlePage"
|
||||
@ -187,6 +191,7 @@ import i18n from "@/i18n";
|
||||
import { useI18n } from "vue-i18n";
|
||||
import { localeDict } from "@/constant/dict";
|
||||
import useSettingsStore from "@/store/modules/settings";
|
||||
import defaultAvatar from "@/assets/logo/avatar.png";
|
||||
|
||||
const userStore = useUserStore();
|
||||
let state = reactive({});
|
||||
|
@ -166,7 +166,7 @@ function onSubmit() {
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
::v-deep(.el-input__inner) {
|
||||
::deep(.el-input__inner) {
|
||||
padding-right: 55px;
|
||||
}
|
||||
._contact {
|
||||
|
@ -1,5 +1,4 @@
|
||||
const broker = {
|
||||
// 保存当前步骤
|
||||
saveCurrentStep: "Сохранить текущий шаг",
|
||||
};
|
||||
export default broker;
|
||||
|
@ -1,5 +1,4 @@
|
||||
const broker = {
|
||||
// 保存当前步骤
|
||||
saveCurrentStep: "保存当前步骤",
|
||||
};
|
||||
export default broker;
|
||||
|
@ -6,7 +6,7 @@ const common = {
|
||||
search: "Поиск",
|
||||
reset: "Сброс",
|
||||
confirm: "Подтвердить",
|
||||
cancel: "Отмена",
|
||||
cancel: "Отменить {action}",
|
||||
submit: "Представить",
|
||||
import: "Импорт",
|
||||
export: "Экспорт",
|
||||
@ -30,11 +30,10 @@ const common = {
|
||||
editSuccess: "Изменено успешно",
|
||||
deleteSuccess: "Удалено успешно",
|
||||
operationSuccess: "Операция выполнена успешно",
|
||||
confirmAction: "Вы уверены, что хотите {action} {type} номер {number}?",
|
||||
// 是否确认 ** 编号为 ** 的 ** ?
|
||||
confirmAction: "Вы уверены, что хотите {action} {type} с номером {number}?",
|
||||
updatePersonalInformationSuccess: "Персональная информация успешно обновлена",
|
||||
// 需求状态
|
||||
demandStatus: "Статус спроса",
|
||||
// 提交审核
|
||||
submitAudit: "Отправить на проверку",
|
||||
};
|
||||
|
||||
|
@ -6,7 +6,7 @@ const common = {
|
||||
search: "搜索",
|
||||
reset: "重置",
|
||||
confirm: "确定",
|
||||
cancel: "取消",
|
||||
cancel: "取消{action}",
|
||||
submit: "提交",
|
||||
import: "导入",
|
||||
export: "导出",
|
||||
@ -32,9 +32,7 @@ const common = {
|
||||
operationSuccess: "操作成功",
|
||||
confirmAction: "是否确认{action}编号为{number}的{type}?",
|
||||
updatePersonalInformationSuccess: "更新个人信息成功",
|
||||
// 需求状态
|
||||
demandStatus: "需求状态",
|
||||
// 提交审核
|
||||
submitAudit: "提交审核",
|
||||
};
|
||||
|
||||
|
@ -28,8 +28,10 @@ const form = {
|
||||
email: "Эл. адрес",
|
||||
expertName: "Имя эксперта",
|
||||
fullName: "Полное имя",
|
||||
idCard: "Номер удостоверения личности",
|
||||
idCardEmblem: "Герб удостоверения личности",
|
||||
idCard: "Удостоверение личности",
|
||||
idCardNumber: "Номер удостоверения личности",
|
||||
|
||||
idCardEmblem: "Одна сторона государственного герба удостоверения личности",
|
||||
idCardPortrait: "Лицо удостоверения личности",
|
||||
industry: "Отрасль",
|
||||
inputKeywords:
|
||||
@ -66,27 +68,25 @@ const form = {
|
||||
country: "Страна",
|
||||
labWebsite: "Веб-сайт лаборатории",
|
||||
achievementMaturity: "Зрелость достижений",
|
||||
// 成熟度
|
||||
maturity: "Зрелость",
|
||||
// 作者
|
||||
author: "Автор",
|
||||
// 专家头像
|
||||
expertAvatar: "Аватар эксперта",
|
||||
// 项目类型
|
||||
projectType: "Тип проекта",
|
||||
// 项目简介
|
||||
projectIntroduction: "Краткое описание проекта",
|
||||
// 资助经费
|
||||
funding: "Финансирование",
|
||||
// 资助来源
|
||||
fundingSource: "Источник финансирования",
|
||||
// 承担单位
|
||||
undertakeUnit: "Подразделение, ответственное за выполнение",
|
||||
// 参与单位
|
||||
participatingUnit: "Участвующее подразделение",
|
||||
// 摘要
|
||||
summary: "Резюме",
|
||||
// 订单
|
||||
order: "Заказ",
|
||||
companyTaxNumber: "Налоговый номер компании",
|
||||
fieldTypes: "Тип области",
|
||||
// 导入成果
|
||||
importAchievement: "Импорт достижений",
|
||||
paperAuthorPlaceholder: "Множественные люди, пожалуйста, используйте запятую",
|
||||
// 合作内容
|
||||
cooperationContent: "Содержание сотрудничества",
|
||||
// 保存草稿
|
||||
saveDraft: "Сохранить черновик",
|
||||
};
|
||||
export default form;
|
||||
|
@ -28,7 +28,8 @@ const form = {
|
||||
email: "邮箱",
|
||||
expertName: "专家姓名",
|
||||
fullName: "姓名",
|
||||
idCard: "身份证号",
|
||||
idCard: "身份证",
|
||||
idCardNumber: "身份证号",
|
||||
idCardEmblem: "身份证国徽面",
|
||||
idCardPortrait: "身份证人像面",
|
||||
industry: "所属领域",
|
||||
@ -65,28 +66,26 @@ const form = {
|
||||
country: "国家",
|
||||
labWebsite: "实验室网站",
|
||||
achievementMaturity: "成果成熟度",
|
||||
// 成熟度
|
||||
maturity: "成熟度",
|
||||
// 作者
|
||||
author: "作者",
|
||||
// 专家头像
|
||||
expertAvatar: "专家头像",
|
||||
// 项目类型
|
||||
projectType: "项目类型",
|
||||
// 项目简介
|
||||
projectIntroduction: "项目简介",
|
||||
// 资助经费
|
||||
funding: "资助经费",
|
||||
// 资助来源
|
||||
fundingSource: "资助来源",
|
||||
// 承担单位
|
||||
undertakeUnit: "承担单位",
|
||||
// 参与单位
|
||||
participateUnit: "参与单位",
|
||||
// 摘要
|
||||
participatingUnit: "参与单位",
|
||||
summary: "摘要",
|
||||
// 订单
|
||||
order: "订单",
|
||||
companyTaxNumber: "公司税号",
|
||||
fieldTypes: "领域类型",
|
||||
// 导入成果
|
||||
importAchievement: "导入成果",
|
||||
paperAuthorPlaceholder: "多人员请用 , 隔开",
|
||||
// 合作内容
|
||||
cooperationContent: "合作内容",
|
||||
// 保存草稿
|
||||
saveDraft: "保存草稿",
|
||||
};
|
||||
|
||||
export default form;
|
||||
|
@ -15,7 +15,6 @@ const entrance = {
|
||||
enter: "Войти",
|
||||
viewReasonsForRejection: "Просмотреть причины отказа",
|
||||
back: "Вернуться",
|
||||
// 一个账号只能申请一个身份
|
||||
oneAccount: "Один аккаунт может подать только один идентификатор",
|
||||
};
|
||||
|
||||
|
@ -15,7 +15,6 @@ const entrance = {
|
||||
enter: "进入",
|
||||
viewReasonsForRejection: "查看拒绝原因",
|
||||
back: "返回",
|
||||
// 一个账号只能申请一个身份
|
||||
oneAccount: "一个账号只能申请一个身份",
|
||||
};
|
||||
export default entrance;
|
||||
|
@ -12,8 +12,6 @@ import validation_zh from "./validation/zh";
|
||||
import validation_ru from "./validation/ru";
|
||||
import statistics_zh from "./statistics/zh";
|
||||
import statistics_ru from "./statistics/ru";
|
||||
// import dict_zh from './dict/zh'
|
||||
// import dict_ru from './dict/ru'
|
||||
|
||||
export const admin_zh = {
|
||||
identity: {
|
||||
@ -25,7 +23,6 @@ export const admin_zh = {
|
||||
table: table_zh,
|
||||
validation: validation_zh,
|
||||
statistics: statistics_zh,
|
||||
// dict: dict_zh,
|
||||
};
|
||||
|
||||
export const admin_ru = {
|
||||
@ -38,5 +35,4 @@ export const admin_ru = {
|
||||
table: table_ru,
|
||||
validation: validation_ru,
|
||||
statistics: statistics_ru,
|
||||
// dict: dict_ru,
|
||||
};
|
||||
|
@ -1,15 +1,12 @@
|
||||
const statistics = {
|
||||
// 企业数量, 正在服务需求数, 订单总数, 需求总数
|
||||
enterpriseCount: "Количество предприятий",
|
||||
serviceDemandCount: "Количество обслуживаемых потребностей",
|
||||
orderCount: "Количество заказов",
|
||||
demandCount: "Количество потребностей",
|
||||
// 专利数量 成果数量 专家数量 实验室数量
|
||||
patentCount: "Количество патентов",
|
||||
achievementCount: "Количество достижений",
|
||||
expertCount: "Количество экспертов",
|
||||
laboratoryCount: "Количество лабораторий",
|
||||
// 论文数量
|
||||
paperCount: "Количество статей",
|
||||
unit: {
|
||||
enterprise: "шт",
|
||||
|
@ -1,15 +1,12 @@
|
||||
const statistics = {
|
||||
// 企业数量, 正在服务需求数, 订单总数, 需求总数
|
||||
enterpriseCount: "企业数量",
|
||||
serviceDemandCount: "正在服务需求数",
|
||||
orderCount: "订单总数",
|
||||
demandCount: "需求总数",
|
||||
// 专利数量 成果数量 专家数量 实验室数量
|
||||
patentCount: "专利数量",
|
||||
achievementCount: "成果数量",
|
||||
expertCount: "专家数量",
|
||||
laboratoryCount: "实验室数量",
|
||||
// 论文数量
|
||||
paperCount: "论文数量",
|
||||
unit: {
|
||||
enterprise: "家",
|
||||
|
@ -43,6 +43,17 @@ const table = {
|
||||
publishDate: "Дата публикации",
|
||||
relatedPaper: "Связанные статьи",
|
||||
relatedPatent: "Связанные патенты",
|
||||
applyInvoice: "Заявка на выставление счета",
|
||||
withdrawAmount: "Сумма снятия",
|
||||
withdrawType: "Тип снятия",
|
||||
withdrawStatus: "Статус снятия",
|
||||
withdrawTime: "Время снятия",
|
||||
// 取消**
|
||||
cancel: "Отменить {action}",
|
||||
// 上传论文
|
||||
uploadPaper: "Загрузить статью",
|
||||
// 万元
|
||||
tenThousandYuan: "Десять тысяч юаней",
|
||||
};
|
||||
|
||||
export default table;
|
||||
|
@ -43,5 +43,16 @@ const table = {
|
||||
publishDate: "发布日期",
|
||||
relatedPaper: "关联论文",
|
||||
relatedPatent: "关联专利",
|
||||
applyInvoice: "申请开票",
|
||||
withdrawAmount: "提现金额",
|
||||
withdrawType: "提现类型",
|
||||
withdrawStatus: "提现状态",
|
||||
withdrawTime: "提现时间",
|
||||
// 取消**
|
||||
cancel: "取消{action}",
|
||||
// 上传论文
|
||||
uploadPaper: "上传论文",
|
||||
// 万元
|
||||
tenThousandYuan: "万元",
|
||||
};
|
||||
export default table;
|
||||
|
@ -17,10 +17,8 @@ const validation = {
|
||||
fileFormatIsIncorrectPleaseUploadFormatFile:
|
||||
"Неверный формат файла, пожалуйста, загрузите файл формата {format}!",
|
||||
uploadFileFailed: "Ошибка загрузки файла",
|
||||
// 请输入研究方向、核心技术及产品、代表专利和论文、承担科研项目名称及项目摘要
|
||||
pleaseEnterResearchDirectionCoreTechnologyAndProductRepresentativePatentsAndPapersUndertakeTheNameAndAbstractOfScientificResearchProjects:
|
||||
"Пожалуйста, введите направление исследований, основные технологии и продукты, представительские патенты и статьи, название и аннотацию научно-исследовательских проектов",
|
||||
// 手持身份证人像面
|
||||
portraitOfTheIdCard: "Портрет удостоверения личности",
|
||||
};
|
||||
export default validation;
|
||||
|
@ -14,10 +14,8 @@ const validation = {
|
||||
fileFormatIsIncorrectPleaseUploadFormatFile:
|
||||
"文件格式不正确, 请上传{format}格式文件!",
|
||||
uploadFileFailed: "上传文件失败",
|
||||
// 请输入研究方向、核心技术及产品、代表专利和论文、承担科研项目名称及项目摘要
|
||||
pleaseEnterResearchDirectionCoreTechnologyAndProductRepresentativePatentsAndPapersUndertakeTheNameAndAbstractOfScientificResearchProjects:
|
||||
"请输入研究方向、核心技术及产品、代表专利和论文、承担科研项目名称及项目摘要",
|
||||
// 手持身份证人像面
|
||||
portraitOfTheIdCard: "手持身份证人像面",
|
||||
};
|
||||
|
||||
|
@ -3,7 +3,6 @@ const dict = {
|
||||
accepted: "Принято",
|
||||
rejected: "Отклонено",
|
||||
finished: "Завершено",
|
||||
// 专利 成果 服务需求 专家 科研项目 论文
|
||||
patent: "Патент",
|
||||
achievement: "Достижение",
|
||||
serviceDemand: "Сервисный спрос",
|
||||
|
@ -3,7 +3,6 @@ const dict = {
|
||||
accepted: "已受理",
|
||||
rejected: "已驳回",
|
||||
finished: "已结束",
|
||||
// 专利 成果 服务需求 专家 科研项目 论文
|
||||
patent: "专利",
|
||||
achievement: "成果",
|
||||
serviceDemand: "服务需求",
|
||||
|
@ -1,6 +1,4 @@
|
||||
const broker = {
|
||||
// 首页 服务管理 我服务的企业 技术需求列表 匹配结果 发布需求 更新状态 企业需求匹配 企业需求匹配详情 账号管理 基本资料 账单管理 账单列表
|
||||
// 俄语
|
||||
home: "Главная",
|
||||
serviceManagement: "Управление услугами",
|
||||
myServiceEnterprise: "Компании, которым я оказываю услуги",
|
||||
|
@ -1,5 +1,4 @@
|
||||
const broker = {
|
||||
// 首页 服务管理 我服务的企业 技术需求列表 匹配结果 发布需求 更新状态 企业需求匹配 企业需求匹配详情 账号管理 基本资料 账单管理 账单列表
|
||||
home: "首页",
|
||||
serviceManagement: "服务管理",
|
||||
myServiceEnterprise: "我服务的企业",
|
||||
|
@ -1,39 +1,21 @@
|
||||
const expert = {
|
||||
// 首页
|
||||
home: "Главная",
|
||||
// 账号管理
|
||||
accountManagement: "Управление аккаунтом",
|
||||
// 基本资料
|
||||
basicInformation: "Основная информация",
|
||||
// 技术管理
|
||||
technicalManagement: "Управление технологиями",
|
||||
// 成果列表
|
||||
achievementList: "Список результатов",
|
||||
// 发布成果
|
||||
publishAchievement: "Опубликовать результат",
|
||||
// 匹配结果
|
||||
matchingResults: "Результаты сопоставления",
|
||||
// 专利列表
|
||||
patentList: "Список патентов",
|
||||
// 认领专利
|
||||
claimPatent: "Заявить патент",
|
||||
// 论文列表
|
||||
paperList: "Список статей",
|
||||
// 科研项目列表
|
||||
researchProjectList: "Список научно-исследовательских проектов",
|
||||
// 需求管理
|
||||
demandManagement: "Управление спросом",
|
||||
// 服务需求
|
||||
serviceDemand: "Спрос на услуги",
|
||||
// 发布需求
|
||||
publishDemand: "Опубликовать спрос",
|
||||
// 已合作企业
|
||||
cooperatedCompany: "Сотрудничающие компании",
|
||||
// 想合作企业
|
||||
wantCooperateCompany: "Желающие сотрудничать компании",
|
||||
// 活动管理
|
||||
activityManagement: "Управление мероприятиями",
|
||||
// 活动列表
|
||||
activityList: "Список мероприятий",
|
||||
};
|
||||
|
||||
|
@ -1,39 +1,21 @@
|
||||
const expert = {
|
||||
// 首页
|
||||
home: "首页",
|
||||
// 账号管理
|
||||
accountManagement: "账号管理",
|
||||
// 基本资料
|
||||
basicInformation: "基本资料",
|
||||
// 技术管理
|
||||
technicalManagement: "技术管理",
|
||||
// 成果列表
|
||||
achievementList: "成果列表",
|
||||
// 发布成果
|
||||
publishAchievement: "发布成果",
|
||||
// 匹配结果
|
||||
matchingResults: "匹配结果",
|
||||
// 专利列表
|
||||
patentList: "专利列表",
|
||||
// 认领专利
|
||||
claimPatent: "认领专利",
|
||||
// 论文列表
|
||||
paperList: "论文列表",
|
||||
// 科研项目列表
|
||||
researchProjectList: "科研项目列表",
|
||||
// 需求管理
|
||||
demandManagement: "需求管理",
|
||||
// 服务需求
|
||||
serviceDemand: "服务需求",
|
||||
// 发布需求
|
||||
publishDemand: "发布需求",
|
||||
// 已合作企业
|
||||
cooperatedCompany: "已合作企业",
|
||||
// 想合作企业
|
||||
wantCooperateCompany: "想合作企业",
|
||||
// 活动管理
|
||||
activityManagement: "活动管理",
|
||||
// 活动列表
|
||||
activityList: "活动列表",
|
||||
};
|
||||
export default expert;
|
||||
|
@ -1,33 +1,18 @@
|
||||
const lab = {
|
||||
// 首页
|
||||
home: "Главная",
|
||||
// 账号管理
|
||||
accountManagement: "Управление аккаунтом",
|
||||
// 基本资料
|
||||
basicInformation: "Основная информация",
|
||||
// 科研管理
|
||||
researchManagement: "Управление научными исследованиями",
|
||||
// 专利列表
|
||||
patentList: "Список патентов",
|
||||
// 成果列表
|
||||
achievementList: "Список результатов",
|
||||
// 专家成果
|
||||
expertAchievement: "Результаты экспертов",
|
||||
// 实验室成果
|
||||
labAchievement: "Результаты лаборатории",
|
||||
// 服务需求列表
|
||||
serviceDemandList: "Список спроса на услуги",
|
||||
// 查看需求
|
||||
viewDemand: "Просмотреть спрос",
|
||||
// 专家列表
|
||||
expertList: "Список экспертов",
|
||||
// 科研项目列表
|
||||
researchProjectList: "Список научно-исследовательских проектов",
|
||||
// 论文列表
|
||||
paperList: "Список статей",
|
||||
// 浏览单位信息
|
||||
browseInformation: "Информация о просмотре",
|
||||
// 实验设备
|
||||
experimentalEquipment: "Экспериментальное оборудование",
|
||||
viewUnitInformation: "Информация о просмотре",
|
||||
};
|
||||
|
@ -1,33 +1,18 @@
|
||||
const lab = {
|
||||
// 首页
|
||||
home: "首页",
|
||||
// 账号管理
|
||||
accountManagement: "账号管理",
|
||||
// 基本资料
|
||||
basicInformation: "基本资料",
|
||||
// 科研管理
|
||||
researchManagement: "科研管理",
|
||||
// 专利列表
|
||||
patentList: "专利列表",
|
||||
// 成果列表
|
||||
achievementList: "成果列表",
|
||||
// 专家成果
|
||||
expertAchievement: "专家成果",
|
||||
// 实验室成果
|
||||
labAchievement: "实验室成果",
|
||||
// 服务需求列表
|
||||
serviceDemandList: "服务需求列表",
|
||||
// 查看需求
|
||||
viewDemand: "查看需求",
|
||||
// 专家列表
|
||||
expertList: "专家列表",
|
||||
// 科研项目列表
|
||||
researchProjectList: "科研项目列表",
|
||||
// 论文列表
|
||||
paperList: "论文列表",
|
||||
// 浏览单位信息
|
||||
browseInformation: "浏览单位信息",
|
||||
// 实验设备
|
||||
experimentalEquipment: "实验设备",
|
||||
viewUnitInformation: "浏览单位信息",
|
||||
};
|
||||
|
@ -1,35 +1,19 @@
|
||||
const research = {
|
||||
// 首页
|
||||
home: "Главная",
|
||||
// 账号管理
|
||||
accountManagement: "Управление аккаунтом",
|
||||
// 基本资料
|
||||
basicInformation: "Основная информация",
|
||||
// 科研管理
|
||||
researchManagement: "Управление научными исследованиями",
|
||||
// 专利列表
|
||||
patentList: "Список патентов",
|
||||
// 成果列表
|
||||
achievementList: "Список результатов",
|
||||
// 服务需求列表
|
||||
serviceDemandList: "Список спроса на услуги",
|
||||
// 查看需求
|
||||
viewDemand: "Просмотреть спрос",
|
||||
// 专家列表
|
||||
expertList: "Список экспертов",
|
||||
// 科研项目列表
|
||||
researchProjectList: "Список научно-исследовательских проектов",
|
||||
// 实验室列表
|
||||
labList: "Список лабораторий",
|
||||
// 修改实验室
|
||||
modifyLab: "Изменить лабораторию",
|
||||
// 客户足迹
|
||||
customerFootprint: "Следы клиентов",
|
||||
// 浏览数据
|
||||
browsingData: "Данные о просмотре",
|
||||
// 专家成果列表
|
||||
expertAchievementList: "Список результатов экспертов",
|
||||
// 科研机构成果列表
|
||||
researchInstitutionAchievementList:
|
||||
"Список результатов научно-исследовательских учреждений",
|
||||
};
|
||||
|
@ -1,35 +1,19 @@
|
||||
const research = {
|
||||
// 首页
|
||||
home: "首页",
|
||||
// 账号管理
|
||||
accountManagement: "账号管理",
|
||||
// 基本资料
|
||||
basicInformation: "基本资料",
|
||||
// 科研管理
|
||||
researchManagement: "科研管理",
|
||||
// 专利列表
|
||||
patentList: "专利列表",
|
||||
// 成果列表
|
||||
achievementList: "成果列表",
|
||||
// 服务需求列表
|
||||
serviceDemandList: "服务需求列表",
|
||||
// 查看需求
|
||||
viewDemand: "查看需求",
|
||||
// 专家列表
|
||||
expertList: "专家列表",
|
||||
// 科研项目列表
|
||||
researchProjectList: "科研项目列表",
|
||||
// 实验室列表
|
||||
labList: "实验室列表",
|
||||
// 修改实验室
|
||||
modifyLab: "修改实验室",
|
||||
// 客户足迹
|
||||
customerFootprint: "客户足迹",
|
||||
// 浏览数据
|
||||
browsingData: "浏览数据",
|
||||
// 专家成果列表
|
||||
expertAchievementList: "专家成果列表",
|
||||
// 科研机构成果列表
|
||||
researchInstitutionAchievementList: "科研机构成果列表",
|
||||
};
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
const tags = {
|
||||
// 刷新页面 关闭当前 关闭其他 关闭左侧 关闭右侧 全部关闭
|
||||
refresh: "Обновить страницу",
|
||||
closeCurrent: "Закрыть текущую",
|
||||
closeOthers: "Закрыть другие",
|
||||
|
@ -1,5 +1,4 @@
|
||||
const tags = {
|
||||
// 刷新页面 关闭当前 关闭其他 关闭左侧 关闭右侧 全部关闭
|
||||
refresh: "刷新页面",
|
||||
closeCurrent: "关闭当前",
|
||||
closeOthers: "关闭其他",
|
||||
|
@ -18,6 +18,10 @@ const webContact = {
|
||||
unit: "единица",
|
||||
unitEmpty: "Организация не может быть пустой",
|
||||
unitPlaceholder: "Пожалуйста, введите название организации",
|
||||
// 需求提交人不能为空 至少选择一个需求类别 需求预算不能为空
|
||||
demandSubmit: "Представитель спроса не может быть пустым",
|
||||
demandType: "Пожалуйста, выберите хотя бы один тип спроса",
|
||||
demandBudget: "Бюджет спроса не может быть пустым",
|
||||
};
|
||||
|
||||
export default webContact;
|
||||
|
@ -18,6 +18,10 @@ const webContact = {
|
||||
unit: "单位",
|
||||
unitEmpty: "所在单位不能为空",
|
||||
unitPlaceholder: "请输入所在单位",
|
||||
// 需求提交人不能为空 至少选择一个需求类别 需求预算不能为空
|
||||
demandSubmit: "需求提交人不能为空",
|
||||
demandType: "至少选择一个需求类别",
|
||||
demandBudget: "需求预算不能为空",
|
||||
};
|
||||
|
||||
export default webContact;
|
||||
|
@ -103,6 +103,9 @@ const webSearch = {
|
||||
website: "Веб-сайт компании",
|
||||
wechat: "WeChat",
|
||||
pleaseSelectSearchKeyword: "Пожалуйста, выберите ключевое слово для поиска",
|
||||
// 请输入技术需求内容和详细的技术指标
|
||||
pleaseEnterTheContentOfTheTechnicalRequirementsAndTheDetailedTechnicalIndicators:
|
||||
"Пожалуйста, введите содержание технических требований и подробные технические показатели",
|
||||
};
|
||||
|
||||
export default webSearch;
|
||||
|
@ -103,5 +103,8 @@ const webSearch = {
|
||||
webSite: "企业网址",
|
||||
wechat: "微信同号",
|
||||
pleaseSelectSearchKeyword: "请选择搜索关键词",
|
||||
// 请输入技术需求内容和详细的技术指标
|
||||
pleaseEnterTheContentOfTheTechnicalRequirementsAndTheDetailedTechnicalIndicators:
|
||||
"请输入技术需求内容和详细的技术指标",
|
||||
};
|
||||
export default webSearch;
|
||||
|
@ -118,8 +118,8 @@
|
||||
<el-divider />
|
||||
|
||||
<el-button type="primary" plain icon="DocumentAdd" @click="saveSetting"
|
||||
>保存配置</el-button
|
||||
>
|
||||
>保存配置
|
||||
</el-button>
|
||||
<el-button plain icon="Refresh" @click="resetSetting">重置配置</el-button>
|
||||
</el-drawer>
|
||||
</template>
|
||||
@ -201,10 +201,12 @@ function themeChange(val) {
|
||||
theme.value = val;
|
||||
handleThemeStyle(val);
|
||||
}
|
||||
|
||||
function handleTheme(val) {
|
||||
settingsStore.changeSetting({ key: "sideTheme", value: val });
|
||||
sideTheme.value = val;
|
||||
}
|
||||
|
||||
function saveSetting() {
|
||||
proxy.$modal.loading("正在保存到本地,请稍候...");
|
||||
let layoutSetting = {
|
||||
@ -219,11 +221,13 @@ function saveSetting() {
|
||||
localStorage.setItem("layout-setting", JSON.stringify(layoutSetting));
|
||||
setTimeout(proxy.$modal.closeLoading(), 1000);
|
||||
}
|
||||
|
||||
function resetSetting() {
|
||||
proxy.$modal.loading("正在清除设置缓存并刷新,请稍候...");
|
||||
localStorage.removeItem("layout-setting");
|
||||
setTimeout("window.location.reload()", 1000);
|
||||
}
|
||||
|
||||
function openSetting() {
|
||||
showSettings.value = true;
|
||||
}
|
||||
@ -239,10 +243,12 @@ defineExpose({
|
||||
color: rgba(0, 0, 0, 0.85);
|
||||
line-height: 22px;
|
||||
font-weight: bold;
|
||||
|
||||
.drawer-title {
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
|
||||
.setting-drawer-block-checbox {
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
|
@ -16,7 +16,6 @@
|
||||
:class="{ 'submenu-title-noDropdown': !isNest }"
|
||||
>
|
||||
<svg-icon
|
||||
style="flex: 1"
|
||||
:icon-class="
|
||||
onlyOneChild.meta.icon || (item.meta && item.meta.icon)
|
||||
"
|
||||
@ -50,7 +49,7 @@
|
||||
popper-append-to-body
|
||||
>
|
||||
<template v-if="item.meta" #title>
|
||||
<svg-icon style="flex: 1" :icon-class="item.meta && item.meta.icon" />
|
||||
<svg-icon :icon-class="item.meta && item.meta.icon" />
|
||||
<span
|
||||
class="menu-title"
|
||||
style="flex: 8"
|
||||
|
@ -1162,7 +1162,7 @@ export const agentRoutes = [
|
||||
children: [
|
||||
{
|
||||
path: "index",
|
||||
component: () => import("@/views/admin/agent/index"),
|
||||
component: () => import("@/views/admin/agent/index.vue"),
|
||||
name: "Index",
|
||||
meta: {
|
||||
title: "首页",
|
||||
@ -1322,79 +1322,6 @@ export const agentRoutes = [
|
||||
];
|
||||
|
||||
// 动态路由,基于用户权限动态去加载
|
||||
export const dynamicRoutes = [
|
||||
{
|
||||
path: "/system/user-auth",
|
||||
component: Layout,
|
||||
hidden: true,
|
||||
permissions: ["system:user:edit"],
|
||||
children: [
|
||||
{
|
||||
path: "role/:userId(\\d+)",
|
||||
component: () => import("@/views/system/user/authRole"),
|
||||
name: "AuthRole",
|
||||
meta: { title: "分配角色", activeMenu: "/system/user" },
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
path: "/system/role-auth",
|
||||
component: Layout,
|
||||
hidden: true,
|
||||
permissions: ["system:role:edit"],
|
||||
children: [
|
||||
{
|
||||
path: "user/:roleId(\\d+)",
|
||||
component: () => import("@/views/system/role/authUser"),
|
||||
name: "AuthUser",
|
||||
meta: { title: "分配用户", activeMenu: "/system/role" },
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
path: "/system/dict-data",
|
||||
component: Layout,
|
||||
hidden: true,
|
||||
permissions: ["system:dict:list"],
|
||||
children: [
|
||||
{
|
||||
path: "index/:dictId(\\d+)",
|
||||
component: () => import("@/views/system/dict/data"),
|
||||
name: "Data",
|
||||
meta: { title: "字典数据", activeMenu: "/system/dict" },
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
path: "/monitor/job-log",
|
||||
component: Layout,
|
||||
hidden: true,
|
||||
permissions: ["monitor:job:list"],
|
||||
children: [
|
||||
{
|
||||
path: "index",
|
||||
component: () => import("@/views/monitor/job/log"),
|
||||
name: "JobLog",
|
||||
meta: { title: "调度日志", activeMenu: "/monitor/job" },
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
path: "/tool/gen-edit",
|
||||
component: Layout,
|
||||
hidden: true,
|
||||
permissions: ["tool:gen:edit"],
|
||||
children: [
|
||||
{
|
||||
path: "index/:tableId(\\d+)",
|
||||
component: () => import("@/views/tool/gen/editTable"),
|
||||
name: "GenEdit",
|
||||
meta: { title: "修改生成配置", activeMenu: "/tool/gen" },
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
const router = createRouter({
|
||||
history: createWebHistory(),
|
||||
routes: constantRoutes,
|
||||
|
@ -57,17 +57,41 @@ const data = reactive({
|
||||
},
|
||||
],
|
||||
// 税号
|
||||
taxNumber: [{ required: true, message: "请输入公司税号", trigger: "blur" }],
|
||||
email: [
|
||||
{ required: true, message: "请输入电子邮箱", trigger: "blur" },
|
||||
// email 正则验证
|
||||
taxNumber: [
|
||||
{
|
||||
pattern: /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/,
|
||||
message: "请输入正确的邮箱",
|
||||
required: true,
|
||||
message: computed(() =>
|
||||
t("admin.form.placeholder", {
|
||||
type: t("admin.form.companyTaxNumber"),
|
||||
})
|
||||
),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
email: [
|
||||
{
|
||||
required: true,
|
||||
message: computed(() =>
|
||||
t("admin.form.placeholder", {
|
||||
type: t("admin.form.email"),
|
||||
})
|
||||
),
|
||||
trigger: "blur",
|
||||
},
|
||||
// email 正则验证
|
||||
{
|
||||
pattern: /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/,
|
||||
message: computed(() => t("webContact.emailFormat")),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
phone: [
|
||||
{
|
||||
required: true,
|
||||
message: computed(() => t("webContact.phone")),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
phone: [{ required: true, message: "请输入电话", trigger: "blur" }],
|
||||
},
|
||||
});
|
||||
const { form, queryParams, rules } = toRefs(data); // 解构响应式对象
|
||||
@ -106,7 +130,7 @@ const handleApplyInvoice = (row) => {
|
||||
reset();
|
||||
form.value.id = row.id;
|
||||
console.log(row.value);
|
||||
dialogTitle.value = "申请开票";
|
||||
dialogTitle.value = t("admin.table.applyInvoice");
|
||||
dialogVisible.value = true;
|
||||
};
|
||||
|
||||
@ -235,7 +259,7 @@ getList();
|
||||
:disabled="row.status !== '0'"
|
||||
type="text"
|
||||
@click="handleApplyInvoice(row)"
|
||||
>发票申请
|
||||
>{{ t("admin.table.applyInvoice") }}
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@ -268,16 +292,25 @@ getList();
|
||||
>
|
||||
<el-input v-model="form.companyName"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="公司税号" prop="taxNumber">
|
||||
<el-form-item
|
||||
:label="t('admin.form.companyTaxNumber')"
|
||||
prop="taxNumber"
|
||||
>
|
||||
<el-input v-model="form.taxNumber"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="电子邮箱" prop="email">
|
||||
<el-form-item
|
||||
:label="t('admin.form.placeholder', { type: t('admin.form.email') })"
|
||||
prop="email"
|
||||
>
|
||||
<el-input v-model="form.email"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="电话" prop="phone">
|
||||
<el-form-item
|
||||
:label="t('admin.form.placeholder', { type: t('webContact.phone') })"
|
||||
prop="phone"
|
||||
>
|
||||
<el-input v-model="form.phone" maxlength="11"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="地址" prop="address">
|
||||
<el-form-item :label="t('admin.form.address')" prop="address">
|
||||
<el-input v-model="form.address"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
@ -83,7 +83,7 @@ const getById = (id) => {};
|
||||
<el-form-item label="时间段">
|
||||
<el-date-picker
|
||||
v-model="queryParams.timeRange"
|
||||
end-placeholder="结束日期"
|
||||
:end-placeholder="t('admin.table.endDate')"
|
||||
range-separator="至"
|
||||
:start-placeholder="t('admin.table.startDate')"
|
||||
type="datetimerange"
|
||||
@ -136,7 +136,10 @@ const getById = (id) => {};
|
||||
<el-table-column :label="t('admin.common.operation')" width="180">
|
||||
<template #default="{ row }">
|
||||
<el-button type="primary" @click="goBack(row.id)"
|
||||
>查看详情
|
||||
>{{
|
||||
/*查看详情*/
|
||||
t("common.viewDetails")
|
||||
}}
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
@ -36,7 +36,7 @@ const handleQuery = () => {
|
||||
<el-form-item label="时间段">
|
||||
<el-date-picker
|
||||
v-model="queryParams.timeRange"
|
||||
end-placeholder="结束日期"
|
||||
:end-placeholder="t('admin.table.endDate')"
|
||||
range-separator="至"
|
||||
:start-placeholder="t('admin.table.startDate')"
|
||||
type="datetimerange"
|
||||
@ -44,9 +44,9 @@ const handleQuery = () => {
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="handleQuery">{{
|
||||
t("admin.common.search")
|
||||
}}</el-button>
|
||||
<el-button type="primary" @click="handleQuery"
|
||||
>{{ t("admin.common.search") }}
|
||||
</el-button>
|
||||
<el-button @click="resetQuery"> {{ t("admin.common.reset") }}</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
@ -28,7 +28,7 @@ const handleSave = () => {};
|
||||
<el-input v-model="form.name" placeholder="请输入" />
|
||||
</el-form-item>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('admin.form.idCard')">
|
||||
<el-form-item :label="t('admin.form.idCardNumber')">
|
||||
<el-input v-model="form.number" placeholder="请输入" />
|
||||
</el-form-item>
|
||||
<el-form-item label="银行卡号">
|
||||
|
54
src/views/admin/agent/index.jsx
Normal file
54
src/views/admin/agent/index.jsx
Normal file
@ -0,0 +1,54 @@
|
||||
import { defineComponent } from "vue";
|
||||
import StatisticsPanel from "@/views/components/StatisticsPanel.vue";
|
||||
import { getBrokerStatistic } from "@/api/admin/agent/home";
|
||||
import { ref } from "vue";
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
export default defineComponent({
|
||||
components: {
|
||||
StatisticsPanel,
|
||||
},
|
||||
setup() {
|
||||
const { t } = useI18n();
|
||||
const statisticsList = ref([
|
||||
{
|
||||
key: "enterpriseCount",
|
||||
label: computed(() => t("admin.statistics.enterpriseCount")),
|
||||
value: 0,
|
||||
unit: "家",
|
||||
},
|
||||
{
|
||||
key: "runDemandCount",
|
||||
label: computed(() => t("admin.statistics.serviceDemandCount")),
|
||||
value: 0,
|
||||
unit: "个",
|
||||
},
|
||||
{
|
||||
key: "orderTotal",
|
||||
label: computed(() => t("admin.statistics.orderCount")),
|
||||
value: 0,
|
||||
unit: "元",
|
||||
},
|
||||
{
|
||||
key: "demandCount",
|
||||
label: computed(() => t("admin.statistics.demandCount")),
|
||||
value: 0,
|
||||
unit: "个",
|
||||
},
|
||||
]);
|
||||
|
||||
const loadStatistics = async () => {
|
||||
const { data } = await getBrokerStatistic();
|
||||
statisticsList.value.forEach((item) => {
|
||||
item.value = data[item.key] ?? 0;
|
||||
});
|
||||
};
|
||||
loadStatistics();
|
||||
|
||||
return () => (
|
||||
<div class={"app-container"}>
|
||||
<StatisticsPanel list={statisticsList.value} />
|
||||
</div>
|
||||
);
|
||||
},
|
||||
});
|
@ -2,26 +2,31 @@
|
||||
import StatisticsPanel from "@/views/components/StatisticsPanel.vue";
|
||||
import { getBrokerStatistic } from "@/api/admin/agent/home";
|
||||
import { ref } from "vue";
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
const { t } = useI18n();
|
||||
const statisticsList = ref([
|
||||
{
|
||||
label: "企业数量",
|
||||
key: "enterpriseCount",
|
||||
label: computed(() => t("admin.statistics.enterpriseCount")),
|
||||
value: 0,
|
||||
unit: "家",
|
||||
},
|
||||
{
|
||||
label: "正在服务需求数",
|
||||
key: "runDemandCount",
|
||||
label: computed(() => t("admin.statistics.serviceDemandCount")),
|
||||
value: 0,
|
||||
unit: "个",
|
||||
},
|
||||
{
|
||||
label: "订单总数",
|
||||
key: "orderTotal",
|
||||
label: computed(() => t("admin.statistics.orderCount")),
|
||||
value: 0,
|
||||
unit: "元",
|
||||
},
|
||||
{
|
||||
// demandCount
|
||||
label: "需求总数",
|
||||
key: "demandCount",
|
||||
label: computed(() => t("admin.statistics.demandCount")),
|
||||
value: 0,
|
||||
unit: "个",
|
||||
},
|
||||
@ -29,30 +34,9 @@ const statisticsList = ref([
|
||||
|
||||
const loadStatistics = async () => {
|
||||
const { data } = await getBrokerStatistic();
|
||||
|
||||
statisticsList.value = [
|
||||
{
|
||||
label: "企业数量",
|
||||
value: data?.enterpriseCount ?? 0,
|
||||
unit: "家",
|
||||
},
|
||||
{
|
||||
label: "正在服务需求数",
|
||||
value: data?.runDemandCount ?? 0,
|
||||
unit: "个",
|
||||
},
|
||||
{
|
||||
label: "订单总数",
|
||||
value: data?.orderTotal ?? 0,
|
||||
unit: "元",
|
||||
},
|
||||
{
|
||||
// demandCount
|
||||
label: "需求总数",
|
||||
value: data?.demandCount ?? 0,
|
||||
unit: "个",
|
||||
},
|
||||
];
|
||||
statisticsList.value.forEach((item) => {
|
||||
item.value = data[item.key] ?? 0;
|
||||
});
|
||||
};
|
||||
loadStatistics();
|
||||
</script>
|
||||
|
@ -100,7 +100,14 @@ const cancel = () => {
|
||||
|
||||
function handleDelete(id) {
|
||||
modal
|
||||
.confirm('是否确认删除数据编号为"' + id + '"的项目?')
|
||||
// .confirm('是否确认删除数据编号为"' + id + '"的项目?')
|
||||
.confirm(
|
||||
t("admin.common.confirmAction", {
|
||||
action: t("admin.common.delete"),
|
||||
number: id,
|
||||
type: t("admin.common.company"),
|
||||
})
|
||||
)
|
||||
.then(() => {
|
||||
return deleteBrokerEnterprise(id);
|
||||
})
|
||||
|
@ -57,13 +57,24 @@
|
||||
:label="t('webSearch.demandDescription')"
|
||||
prop="introduce"
|
||||
>
|
||||
<wangEditor
|
||||
<!-- <wangEditor
|
||||
v-model="form.introduce"
|
||||
min-height="150px"
|
||||
:placeholder="t('webSearch.pleaseEnterTheContentOfTheTechnicalRequirementsAndTheDetailedTechnicalIndicators')"
|
||||
width="100%"
|
||||
@blur="formRef.validateField(`introduce`)"
|
||||
></wangEditor>-->
|
||||
<!-- textarea -->
|
||||
<el-input
|
||||
v-model="form.introduce"
|
||||
min-height="150px"
|
||||
placeholder="请输入技术需求内容和详细的技术指标"
|
||||
width="100%"
|
||||
@blur="formRef.validateField(`introduce`)"
|
||||
></wangEditor>
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 6, maxRows: 6 }"
|
||||
:placeholder="
|
||||
t(
|
||||
'webSearch.pleaseEnterTheContentOfTheTechnicalRequirementsAndTheDetailedTechnicalIndicators'
|
||||
)
|
||||
"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@ -126,7 +137,11 @@
|
||||
<el-form-item :label="t('admin.form.demandContact')" prop="name">
|
||||
<el-input
|
||||
v-model="form.name"
|
||||
placeholder="请输入需求联系人"
|
||||
:placeholder="
|
||||
t('admin.form.placeholder', {
|
||||
type: t('admin.form.demandContact'),
|
||||
})
|
||||
"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@ -179,10 +194,12 @@
|
||||
<el-button type="primary" @click="submitForm">{{ t('admin.common.submit') }}</el-button>
|
||||
</div> -->
|
||||
<div :style="{ marginLeft: labelWidth + 'px' }">
|
||||
<el-button type="primary" @click="submitForm(3)">保存草稿</el-button>
|
||||
<el-button type="primary" @click="submitForm(3)"
|
||||
>{{ t("admin.form.saveDraft") }}
|
||||
</el-button>
|
||||
<el-button type="primary" @click="submitForm(1)"
|
||||
>{{ t("admin.common.submit") }}审核</el-button
|
||||
>
|
||||
>{{ t("admin.common.submitAudit") }}
|
||||
</el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
</div>
|
||||
@ -197,10 +214,19 @@ import InputBoxAdd from "@/views/components/InputBoxAdd";
|
||||
import { ElMessage } from "element-plus";
|
||||
import { useRoute, useRouter } from "vue-router";
|
||||
import { getTechnologyDemand } from "@/api/admin/enterprise/demand";
|
||||
import { onMounted, reactive, ref, toRefs } from "vue";
|
||||
import {
|
||||
computed,
|
||||
getCurrentInstance,
|
||||
onMounted,
|
||||
reactive,
|
||||
ref,
|
||||
toRefs,
|
||||
} from "vue";
|
||||
import { updateCount } from "@/api/admin/count";
|
||||
import { insertDemand } from "@/api/admin/agent/service/technology-demand";
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
const { t } = useI18n();
|
||||
const router = useRouter();
|
||||
const route = useRoute();
|
||||
const data = reactive({
|
||||
@ -213,35 +239,101 @@ const data = reactive({
|
||||
postCode: undefined,
|
||||
},
|
||||
rules: {
|
||||
title: [{ required: true, message: "需求名称不能为空", trigger: "blur" }],
|
||||
introduce: [
|
||||
{ required: true, message: "需求描述不能为空", trigger: "change" },
|
||||
],
|
||||
name: [{ required: true, message: "需求联系人不能为空", trigger: "blur" }],
|
||||
mobile: [
|
||||
{ required: true, message: "联系人手机号不能为空", trigger: "blur" },
|
||||
title: [
|
||||
{
|
||||
pattern: /^1[3456789]\d{9}$/,
|
||||
message: "手机号格式不正确",
|
||||
required: true,
|
||||
/*"需求名称不能为空"*/
|
||||
message: computed(() =>
|
||||
t("admin.validation.required", {
|
||||
type: t("admin.form.name", { type: t("admin.common.demand") }),
|
||||
})
|
||||
),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
introduce: [
|
||||
{
|
||||
required: true,
|
||||
/*"需求描述不能为空"*/
|
||||
message: computed(() =>
|
||||
t("admin.validation.required", {
|
||||
type: t("webSearch.demandDescription"),
|
||||
})
|
||||
),
|
||||
trigger: "change",
|
||||
},
|
||||
],
|
||||
name: [
|
||||
{
|
||||
required: true,
|
||||
/*"需求联系人不能为空"*/
|
||||
message: computed(() =>
|
||||
t("admin.validation.required", {
|
||||
type: t("admin.form.demandContact"),
|
||||
})
|
||||
),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
mobile: [
|
||||
{
|
||||
required: true,
|
||||
/*"联系人手机号不能为空"*/
|
||||
message: computed(() =>
|
||||
t("admin.validation.required", {
|
||||
type: t("admin.form.contactPhone"),
|
||||
})
|
||||
),
|
||||
trigger: "blur",
|
||||
},
|
||||
/* {
|
||||
pattern: /^1[3456789]\d{9}$/,
|
||||
message: "手机号格式不正确",
|
||||
trigger: "blur",
|
||||
},*/
|
||||
],
|
||||
commitUserName: [
|
||||
{ required: true, message: "需求提交人不能为空", trigger: "blur" },
|
||||
{
|
||||
required: true,
|
||||
message: computed(() => t("webContact.demandSubmit")),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
kinds: [
|
||||
{ required: true, message: "至少选择一个需求类别", trigger: "change" },
|
||||
{
|
||||
required: true,
|
||||
message: computed(() => t("webContact.demandType")),
|
||||
trigger: "change",
|
||||
},
|
||||
],
|
||||
budget: [
|
||||
{
|
||||
required: true,
|
||||
message: computed(() => t("webContact.demandBudget")),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
budget: [{ required: true, message: "需求预算不能为空", trigger: "blur" }],
|
||||
deadline: [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择截止时间",
|
||||
/*"请选择截止时间"*/
|
||||
message: computed(() =>
|
||||
t("admin.form.pleaseSelect", { type: t("admin.table.deadline") })
|
||||
),
|
||||
trigger: ["change", "blur"],
|
||||
},
|
||||
],
|
||||
commitUserPhone: [
|
||||
{ required: true, message: "需求提交人手机号不能为空", trigger: "blur" },
|
||||
{
|
||||
required: true,
|
||||
/*"需求提交人手机号不能为空"*/
|
||||
message: computed(() =>
|
||||
t("admin.validation.required", {
|
||||
type: t("admin.form.contactPhone"),
|
||||
})
|
||||
),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
},
|
||||
});
|
||||
@ -293,7 +385,7 @@ const submitForm = async (status) => {
|
||||
ElMessage.success("修改需求成功");*/
|
||||
} else {
|
||||
await insertDemand(form.value);
|
||||
ElMessage.success("新增需求成功");
|
||||
ElMessage.success(t("admin.common.addSuccess"));
|
||||
}
|
||||
updateCount("technology");
|
||||
backToList();
|
||||
|
@ -25,13 +25,23 @@
|
||||
:label="t('webSearch.demandDescription')"
|
||||
prop="introduce"
|
||||
>
|
||||
<wangEditor
|
||||
<!-- <wangEditor
|
||||
v-model="form.introduce"
|
||||
min-height="150px"
|
||||
:placeholder="t('webSearch.pleaseEnterTheContentOfTheTechnicalRequirementsAndTheDetailedTechnicalIndicators')"
|
||||
width="100%"
|
||||
@blur="formRef.validateField(`introduce`)"
|
||||
></wangEditor>-->
|
||||
<el-input
|
||||
type="textarea"
|
||||
v-model="form.introduce"
|
||||
min-height="150px"
|
||||
placeholder="请输入技术需求内容和详细的技术指标"
|
||||
width="100%"
|
||||
@blur="formRef.validateField(`introduce`)"
|
||||
></wangEditor>
|
||||
:autosize="{ minRows: 6, maxRows: 8 }"
|
||||
:placeholder="
|
||||
t(
|
||||
'webSearch.pleaseEnterTheContentOfTheTechnicalRequirementsAndTheDetailedTechnicalIndicators'
|
||||
)
|
||||
"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@ -114,6 +124,7 @@ import {
|
||||
import { onMounted, reactive, ref, toRefs } from "vue";
|
||||
import { updateCount } from "@/api/admin/count";
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
const { t } = useI18n();
|
||||
const router = useRouter();
|
||||
const route = useRoute();
|
||||
|
@ -27,7 +27,7 @@
|
||||
type="daterange"
|
||||
range-separator="-"
|
||||
:start-placeholder="t('admin.table.startDate')"
|
||||
end-placeholder="结束日期"
|
||||
:end-placeholder="t('admin.table.endDate')"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
|
@ -47,26 +47,26 @@
|
||||
:show-overflow-tooltip="true"
|
||||
/>
|
||||
<el-table-column
|
||||
label="活动报名截止时间"
|
||||
:label="t('activity.signUpDeadline')"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<span>{{ parseTime(row.createTime) }}</span>
|
||||
<span>{{ parseTime(row.joinDeadline) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="活动开始时间" align="center" prop="createTime">
|
||||
<el-table-column :label="t('activity.activityStartTime')" align="center">
|
||||
<template #default="{ row }">
|
||||
<span>{{ parseTime(row.createTime) }}</span>
|
||||
<span>{{ parseTime(row.beginTime) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="活动结束时间" align="center" prop="createTime">
|
||||
<el-table-column :label="t('activity.activityEndTime')" align="center">
|
||||
<template #default="{ row }">
|
||||
<span>{{ parseTime(row.createTime) }}</span>
|
||||
<span>{{ parseTime(row.finishTime) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="活动报名时间" align="center" prop="createTime">
|
||||
<el-table-column :label="t('activity.activitySignUpTime')" align="center">
|
||||
<template #default="{ row }">
|
||||
<span>{{ parseTime(row.createTime) }}</span>
|
||||
</template>
|
||||
@ -97,6 +97,7 @@
|
||||
<script setup>
|
||||
import { activitysList } from "@/api/admin/enterprise";
|
||||
import { useI18n } from "vue-i18n";
|
||||
import { parseTime } from "@/utils/ruoyi";
|
||||
|
||||
const { t } = useI18n();
|
||||
const dataList = ref([]);
|
||||
|
@ -57,12 +57,22 @@
|
||||
prop="description"
|
||||
>
|
||||
<!-- <Editor v-model="form.description" :minHeight="150" /> -->
|
||||
<wangEditor
|
||||
<!-- <wangEditor
|
||||
v-model="form.description"
|
||||
width="100%"
|
||||
min-height="150px"
|
||||
@blur="formRef.validateField(`description`)"
|
||||
></wangEditor>-->
|
||||
<el-input
|
||||
type="textarea"
|
||||
v-model="form.description"
|
||||
width="100%"
|
||||
min-height="150px"
|
||||
@blur="formRef.validateField(`description`)"
|
||||
></wangEditor>
|
||||
:autosize="{ minRows: 6, maxRows: 8 }"
|
||||
:placeholder="
|
||||
t('admin.form.placeholder', {
|
||||
type: t('webSearch.demandDescription'),
|
||||
})
|
||||
"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@ -162,7 +172,11 @@ const data = reactive({
|
||||
{ required: true, message: "联系人手机号不能为空", trigger: "blur" },
|
||||
],
|
||||
username: [
|
||||
{ required: true, message: "需求提交人不能为空", trigger: "blur" },
|
||||
{
|
||||
required: true,
|
||||
message: computed(() => t("webContact.demandSubmit")),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
userPhone: [{ required: true, message: "手机号不能为空", trigger: "blur" }],
|
||||
},
|
||||
|
@ -52,13 +52,23 @@
|
||||
:label="t('webSearch.demandDescription')"
|
||||
prop="introduce"
|
||||
>
|
||||
<wangEditor
|
||||
<!-- <wangEditor
|
||||
v-model="form.introduce"
|
||||
:placeholder="t('webSearch.pleaseEnterTheContentOfTheTechnicalRequirementsAndTheDetailedTechnicalIndicators')"
|
||||
width="100%"
|
||||
min-height="150px"
|
||||
@blur="formRef.validateField(`introduce`)"
|
||||
></wangEditor>-->
|
||||
<el-input
|
||||
type="textarea"
|
||||
v-model="form.introduce"
|
||||
placeholder="请输入技术需求内容和详细的技术指标"
|
||||
width="100%"
|
||||
min-height="150px"
|
||||
@blur="formRef.validateField(`introduce`)"
|
||||
></wangEditor>
|
||||
:autosize="{ minRows: 6, maxRows: 8 }"
|
||||
:placeholder="
|
||||
t(
|
||||
'webSearch.pleaseEnterTheContentOfTheTechnicalRequirementsAndTheDetailedTechnicalIndicators'
|
||||
)
|
||||
"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@ -95,8 +105,8 @@
|
||||
false-label="1"
|
||||
true-label="2"
|
||||
v-model="form.budgetMode"
|
||||
>面议</el-checkbox
|
||||
>
|
||||
>面议
|
||||
</el-checkbox>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@ -174,10 +184,12 @@
|
||||
<el-button type="primary" @click="submitForm">{{ t('admin.common.submit') }}</el-button>
|
||||
</div> -->
|
||||
<div :style="{ marginLeft: labelWidth + 'px' }">
|
||||
<el-button type="primary" @click="submitForm(3)">保存草稿</el-button>
|
||||
<el-button type="primary" @click="submitForm(3)">{{
|
||||
t("admin.form.saveDraft")
|
||||
}}</el-button>
|
||||
<el-button type="primary" @click="submitForm(1)"
|
||||
>{{ t("admin.common.submit") }}审核</el-button
|
||||
>
|
||||
>{{ t("admin.common.submit") }}审核
|
||||
</el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
</div>
|
||||
@ -198,6 +210,7 @@ import {
|
||||
updateTechnologyDemand,
|
||||
} from "@/api/admin/enterprise/demand";
|
||||
import tab from "@/plugins/tab";
|
||||
|
||||
const { t } = useI18n();
|
||||
const router = useRouter();
|
||||
const route = useRoute();
|
||||
@ -225,12 +238,26 @@ const data = reactive({
|
||||
},
|
||||
],
|
||||
commitUserName: [
|
||||
{ required: true, message: "需求提交人不能为空", trigger: "blur" },
|
||||
{
|
||||
required: true,
|
||||
message: computed(() => t("webContact.demandSubmit")),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
kinds: [
|
||||
{ required: true, message: "至少选择一个需求类别", trigger: "change" },
|
||||
{
|
||||
required: true,
|
||||
message: computed(() => t("webContact.demandType")),
|
||||
trigger: "change",
|
||||
},
|
||||
],
|
||||
budget: [
|
||||
{
|
||||
required: true,
|
||||
message: computed(() => t("webContact.demandBudget")),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
budget: [{ required: true, message: "需求预算不能为空", trigger: "blur" }],
|
||||
deadline: [
|
||||
{
|
||||
required: true,
|
||||
@ -313,7 +340,7 @@ const submitForm = async (status) => {
|
||||
// // });
|
||||
// } else {
|
||||
// // addPost(form.value).then((response) => {
|
||||
// // proxy.$modal.msgSuccess("新增成功");
|
||||
// // proxy.$modal.msgSuccess(t('admin.common.addSuccess'));
|
||||
// // proxy.$router.go(-1);
|
||||
// // });
|
||||
// }
|
||||
|
@ -72,7 +72,7 @@
|
||||
type="text"
|
||||
icon="Close"
|
||||
@click="handleDelete(row.id)"
|
||||
>{{ t("admin.common.cancel") }}发布
|
||||
>{{ t("admin.table.cancelPublish") }}
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="queryParams.type != 2"
|
||||
|
@ -109,7 +109,7 @@
|
||||
type="text"
|
||||
icon="Close"
|
||||
@click="cancelPub(row.id)"
|
||||
>{{ t("admin.common.cancel") }}发布
|
||||
>{{ t("admin.table.cancelPublish") }}
|
||||
</el-button>
|
||||
<el-button
|
||||
size="small"
|
||||
@ -180,7 +180,14 @@ function handleQuery() {
|
||||
/** 删除按钮操作 */
|
||||
function handleDelete(id) {
|
||||
modal
|
||||
.confirm('是否确认删除数据编号为"' + id + '"的需求项?')
|
||||
// .confirm('是否确认删除数据编号为"' + id + '"的需求项?')
|
||||
.confirm(
|
||||
t("admin.common.confirmAction", {
|
||||
action: t("admin.common.delete"),
|
||||
number: id,
|
||||
type: t("admin.common.demand"),
|
||||
})
|
||||
)
|
||||
.then(function () {
|
||||
console.log("delete");
|
||||
return deleteTechnologyDemand(id);
|
||||
|
@ -13,18 +13,18 @@
|
||||
size="small"
|
||||
@change="handleQuery"
|
||||
>
|
||||
<el-radio-button :label="0">{{
|
||||
t("admin.table.pendingReview")
|
||||
}}</el-radio-button>
|
||||
<el-radio-button :label="1">{{
|
||||
t("admin.table.published")
|
||||
}}</el-radio-button>
|
||||
<el-radio-button :label="2">{{
|
||||
t("admin.table.rejected")
|
||||
}}</el-radio-button>
|
||||
<el-radio-button :label="3">{{
|
||||
t("admin.table.draftBox")
|
||||
}}</el-radio-button>
|
||||
<el-radio-button :label="0"
|
||||
>{{ t("admin.table.pendingReview") }}
|
||||
</el-radio-button>
|
||||
<el-radio-button :label="1"
|
||||
>{{ t("admin.table.published") }}
|
||||
</el-radio-button>
|
||||
<el-radio-button :label="2"
|
||||
>{{ t("admin.table.rejected") }}
|
||||
</el-radio-button>
|
||||
<el-radio-button :label="3"
|
||||
>{{ t("admin.table.draftBox") }}
|
||||
</el-radio-button>
|
||||
</el-radio-group>
|
||||
|
||||
<el-table v-loading="loading" :data="dataList" style="margin-top: 20px">
|
||||
@ -62,8 +62,8 @@
|
||||
type="text"
|
||||
:icon="row.shelfStatus == 2 ? 'Upload' : 'Download'"
|
||||
@click="handleShelf(row)"
|
||||
>{{ row.shelfStatus == 2 ? "上架" : "下架" }}</el-button
|
||||
>
|
||||
>{{ row.shelfStatus == 2 ? "上架" : "下架" }}
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="queryParams.status != 1"
|
||||
size="small"
|
||||
@ -71,16 +71,16 @@
|
||||
icon="Delete"
|
||||
@click="handleDelete(row.id)"
|
||||
>
|
||||
{{ t("admin.common.delete") }}</el-button
|
||||
>
|
||||
{{ t("admin.common.delete") }}
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="queryParams.status == 1"
|
||||
size="small"
|
||||
type="text"
|
||||
icon="View"
|
||||
@click="handleResults(row)"
|
||||
>查看匹配结果</el-button
|
||||
>
|
||||
>查看匹配结果
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="queryParams.status == 1"
|
||||
disabled
|
||||
@ -88,16 +88,16 @@
|
||||
type="text"
|
||||
icon="View"
|
||||
@click="checkEnterpriseInfo(row.id)"
|
||||
>浏览企业信息</el-button
|
||||
>
|
||||
>浏览企业信息
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="queryParams.status == 0"
|
||||
size="small"
|
||||
type="text"
|
||||
icon="Close"
|
||||
@click="releaseCancel(row.id)"
|
||||
>移到草稿箱</el-button
|
||||
>
|
||||
>移到草稿箱
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@ -125,6 +125,7 @@ import { useRouter } from "vue-router";
|
||||
import useUserStore from "@/store/modules/user";
|
||||
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
const { t } = useI18n();
|
||||
const router = useRouter();
|
||||
const userStore = useUserStore();
|
||||
@ -156,7 +157,14 @@ const getList = async () => {
|
||||
// 处理删除
|
||||
const handleDelete = (id) => {
|
||||
modal
|
||||
.confirm('是否确认删除数据编号为"' + id + '"的产品项?')
|
||||
// .confirm('是否确认删除数据编号为"' + id + '"的产品项?')
|
||||
.confirm(
|
||||
t("admin.common.confirmAction", {
|
||||
action: t("admin.common.delete"),
|
||||
number: id,
|
||||
type: t("admin.form.product"),
|
||||
})
|
||||
)
|
||||
.then(async () => {
|
||||
await deleteEnterpriseProduct(id);
|
||||
ElMessage.success(t("admin.common.deleteSuccess"));
|
||||
@ -172,6 +180,7 @@ function handleQuery() {
|
||||
queryParams.value.pageNum = 1;
|
||||
getList();
|
||||
}
|
||||
|
||||
// 取消发布
|
||||
const releaseCancel = (id) => {
|
||||
modal
|
||||
@ -203,6 +212,7 @@ const handleShelf = (row) => {
|
||||
const handleResults = (row) => {
|
||||
router.push({ path: "./results", query: { keyword: row.title } });
|
||||
};
|
||||
|
||||
const checkEnterpriseInfo = (id) => {
|
||||
router.push({ path: "./business" });
|
||||
};
|
||||
|
@ -8,7 +8,9 @@
|
||||
ref="releaseFormRef"
|
||||
/>
|
||||
<div :style="{ marginLeft: labelWidth + 'px' }">
|
||||
<el-button type="primary" @click="submitForm(3)">保存草稿</el-button>
|
||||
<el-button type="primary" @click="submitForm(3)">{{
|
||||
t("admin.form.saveDraft")
|
||||
}}</el-button>
|
||||
<el-button type="primary" @click="submitForm(1)"
|
||||
>{{ t("admin.common.submit") }}审核</el-button
|
||||
>
|
||||
|
@ -1,42 +1,6 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-card shadow="always" style="width: 55%; margin: 0 auto">
|
||||
<!-- <p><b> {{ t('admin.form.basicData') }}</b></p>
|
||||
<el-form
|
||||
ref="personalInfoFormRef"
|
||||
:model="PersonalInfoForm"
|
||||
:rules="rules"
|
||||
label-width="100px"
|
||||
>
|
||||
<el-form-item :label="t('admin.form.fullName')" prop="nickName">
|
||||
<el-input
|
||||
v-model="PersonalInfoForm.nickName"
|
||||
:placeholder="t('admin.form.placeholder', {type: t('admin.form.fullName') })"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('admin.form.mobile')" prop="mobile">
|
||||
<el-input
|
||||
v-model="PersonalInfoForm.mobile"
|
||||
maxlength="11"
|
||||
:placeholder="t('admin.form.placeholder', {type: t('admin.form.mobile') })"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('admin.form.email')" prop="email">
|
||||
<el-input v-model="PersonalInfoForm.email" :placeholder="t('admin.form.placeholder', {type: t('admin.form.email') })" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('admin.form.position')" prop="post">
|
||||
<el-input v-model="PersonalInfoForm.post" :placeholder="t('admin.form.placeholder', {type: t('admin.form.position') })" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('admin.form.phone')" prop="phone">
|
||||
<el-input
|
||||
v-model="PersonalInfoForm.phone"
|
||||
:placeholder="t('admin.form.placeholder', {type: t('admin.form.phone') })"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="submitPersonalInfo">{{ t('admin.common.submit') }}</el-button>
|
||||
</el-form-item>
|
||||
</el-form> -->
|
||||
<p>
|
||||
<b>{{ t("admin.form.data", { type: t("admin.common.expert") }) }}</b>
|
||||
</p>
|
||||
@ -47,59 +11,29 @@
|
||||
:labelWidth="labelWidth"
|
||||
/>
|
||||
<div :style="{ marginLeft: labelWidth + 'px' }">
|
||||
<el-button type="primary" @click="submitExpertForm">{{
|
||||
t("admin.common.submit")
|
||||
}}</el-button>
|
||||
<el-button type="primary" @click="submitExpertForm"
|
||||
>{{ t("admin.common.submit") }}
|
||||
</el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
// import { expert } from "@/api/identity/index";
|
||||
import { getInfo, updateExpert } from "@/api/admin/expert/account";
|
||||
import { insertClientUser } from "@/api/admin/enterprise";
|
||||
import ExpertForm from "@/views/components/ExpertForm";
|
||||
import { ElMessage } from "element-plus";
|
||||
import { useRouter } from "vue-router";
|
||||
import { reactive } from "vue";
|
||||
import { useI18n } from "vue-i18n";
|
||||
import ExpertForm from "@/views/components/ExpertForm";
|
||||
|
||||
const { t } = useI18n();
|
||||
const data = reactive({
|
||||
PersonalInfoForm: {},
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
postCode: undefined,
|
||||
},
|
||||
expertForm: {
|
||||
gender: 1,
|
||||
},
|
||||
rules: {
|
||||
name: [{ required: true, message: "公司名称不能为空", trigger: "blur" }],
|
||||
dutyParagraph: [
|
||||
{ required: true, message: "公司税号不能为空", trigger: "blur" },
|
||||
],
|
||||
bank: [{ required: true, message: "开户行不能为空", trigger: "blur" }],
|
||||
bankAccount: [
|
||||
{ required: true, message: "开户行账号不能为空", trigger: "blur" },
|
||||
],
|
||||
bankPhone: [
|
||||
{ required: true, message: "开户行电话不能为空", trigger: "blur" },
|
||||
],
|
||||
email: [{ required: true, message: "电子邮箱不能为空", trigger: "blur" }],
|
||||
phone: [{ required: true, message: "联系电话不能为空", trigger: "blur" }],
|
||||
address: [{ required: true, message: "地址不能为空", trigger: "blur" }],
|
||||
username: [{ required: true, message: "联系人不能为空", trigger: "blur" }],
|
||||
userPhone: [
|
||||
{ required: true, message: "联系人电话不能为空", trigger: "blur" },
|
||||
],
|
||||
userAddress: [
|
||||
{ required: true, message: "邮寄地址不能为空", trigger: "blur" },
|
||||
],
|
||||
},
|
||||
});
|
||||
|
||||
const { expertForm, PersonalInfoForm, rules } = toRefs(data);
|
||||
const { expertForm } = toRefs(data);
|
||||
|
||||
const router = useRouter();
|
||||
const expertFormRef = ref();
|
||||
@ -113,7 +47,6 @@ const getBasicInfo = async () => {
|
||||
data.casExpert.researchs = data.casExpert.research?.split(",") ?? [];
|
||||
if (data.casExpert.area) data.casExpert.district = data.casExpert.area;
|
||||
}
|
||||
PersonalInfoForm.value = data.user ?? {};
|
||||
expertForm.value = data.casExpert ?? {};
|
||||
};
|
||||
getBasicInfo();
|
||||
@ -122,21 +55,7 @@ const form = reactive({
|
||||
// laboratory_id: undefined, // 所属实验室
|
||||
gender: 1,
|
||||
});
|
||||
const personalInfoFormRef = ref();
|
||||
|
||||
// 更新个人信息
|
||||
const submitPersonalInfo = async () => {
|
||||
try {
|
||||
await personalInfoFormRef.value.validate();
|
||||
await insertClientUser(PersonalInfoForm.value);
|
||||
ElMessage.success(t("admin.common.updatePersonalInformationSuccess"));
|
||||
const { data } = await getInfo();
|
||||
|
||||
PersonalInfoForm.value = data.user ?? {};
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
}
|
||||
};
|
||||
ref();
|
||||
|
||||
async function submitExpertForm(status) {
|
||||
const valid = await expertFormRef.value.validateForm();
|
||||
|
@ -424,7 +424,7 @@ function submitForm() {
|
||||
});
|
||||
} else {
|
||||
insertExpertCooperateEnterprise(form.value).then((response) => {
|
||||
ElMessage.success("新增成功");
|
||||
ElMessage.success(t("admin.common.addSuccess"));
|
||||
open.value = false;
|
||||
getList();
|
||||
});
|
||||
|
@ -60,14 +60,23 @@
|
||||
:label="t('webSearch.demandDescription')"
|
||||
prop="description"
|
||||
>
|
||||
<!-- <Editor v-model="formData.description" :minHeight="150" /> -->
|
||||
<wangEditor
|
||||
ref="wangEditorRef"
|
||||
<!-- <wangEditor-->
|
||||
<!-- ref="wangEditorRef"-->
|
||||
<!-- v-model="formData.description"-->
|
||||
<!-- min-height="150px"-->
|
||||
<!-- width="100%"-->
|
||||
<!-- @blur="formRef.validateField(`description`)"-->
|
||||
<!-- ></wangEditor>-->
|
||||
<el-input
|
||||
type="textarea"
|
||||
v-model="formData.description"
|
||||
min-height="150px"
|
||||
width="100%"
|
||||
@blur="formRef.validateField(`description`)"
|
||||
></wangEditor>
|
||||
:autosize="{ minRows: 6, maxRows: 8 }"
|
||||
:placeholder="
|
||||
t('admin.form.placeholder', {
|
||||
type: t('webSearch.demandDescription'),
|
||||
})
|
||||
"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@ -174,14 +183,18 @@ const data = reactive({
|
||||
{ required: true, message: "联系人手机号不能为空", trigger: "blur" },
|
||||
],
|
||||
username: [
|
||||
{ required: true, message: "需求提交人不能为空", trigger: "blur" },
|
||||
{
|
||||
required: true,
|
||||
message: computed(() => t("webContact.demandSubmit")),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
name: [{ required: true, message: "需求联系人不能为空", trigger: "blur" }],
|
||||
mobile: [
|
||||
{ required: true, message: "需求联系人手机号不能为空", trigger: "blur" },
|
||||
],
|
||||
// commitUserName: [
|
||||
// { required: true, message: "需求提交人不能为空", trigger: "blur" },
|
||||
// { required: true, message: computed(()=>t('webContact.demandSubmit')), trigger: "blur" },
|
||||
// ],
|
||||
// commitPhone: [
|
||||
// { required: true, message: "需求提交人手机号不能为空", trigger: "blur" },
|
||||
@ -200,11 +213,9 @@ const back = () => {
|
||||
const labelWidth = 140;
|
||||
// const isContainOther = ref(false);
|
||||
const checkList = reactive([...demandCategoryList]);
|
||||
const wangEditorRef = ref();
|
||||
const checkInput = ref("");
|
||||
|
||||
async function submitForm() {
|
||||
console.log(wangEditorRef.value.isEmpty());
|
||||
await formRef.value.validate();
|
||||
if (formData.value.id) {
|
||||
// TODO: 修改专家需求
|
||||
@ -212,7 +223,7 @@ async function submitForm() {
|
||||
ElMessage.success(t("admin.common.editSuccess"));
|
||||
} else {
|
||||
await insertDemand(formData.value);
|
||||
ElMessage.success("新增成功");
|
||||
ElMessage.success(t("admin.common.addSuccess"));
|
||||
}
|
||||
updateCount("service");
|
||||
|
||||
|
@ -84,7 +84,7 @@
|
||||
size="small"
|
||||
type="text"
|
||||
@click="handleDelete(row.id)"
|
||||
>{{ t("admin.common.cancel") }}发布
|
||||
>{{ t("admin.table.cancelPublish") }}
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="queryParams.type != 3"
|
||||
|
@ -147,7 +147,10 @@
|
||||
<FieldSingle v-model="form" :labelWidth="100" />
|
||||
</div>
|
||||
|
||||
<el-form-item label="合作内容:" prop="content">
|
||||
<el-form-item
|
||||
:label="t('admin.form.cooperationContent')"
|
||||
prop="content"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.content"
|
||||
type="textarea"
|
||||
@ -186,7 +189,7 @@ import { useRouter } from "vue-router";
|
||||
import { ElMessage, ElMessageBox } from "element-plus";
|
||||
import modal from "@/plugins/modal";
|
||||
import { cloneDeep } from "lodash-es";
|
||||
import {reactive, ref, toRefs} from "vue";
|
||||
import { computed, reactive, ref, toRefs } from "vue";
|
||||
|
||||
const dataList = ref([]);
|
||||
const showEditDialog = ref(false);
|
||||
@ -211,9 +214,31 @@ const data = reactive({
|
||||
},
|
||||
rules: {
|
||||
enterpriseName: [
|
||||
{ required: true, message: "企业名称不能为空", trigger: "blur" },
|
||||
{
|
||||
required: true,
|
||||
/*"企业名称不能为空"*/
|
||||
message: computed(() =>
|
||||
t("admin.validation.required", {
|
||||
type: t("admin.form.name", {
|
||||
type: t("admin.common.company"),
|
||||
}),
|
||||
})
|
||||
),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
content: [
|
||||
{
|
||||
required: true,
|
||||
/*"合作内容不能为空"*/
|
||||
message: computed(() =>
|
||||
t("admin.validation.required", {
|
||||
type: t("admin.form.cooperationContent"),
|
||||
})
|
||||
),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
content: [{ required: true, message: "合作内容不能为空", trigger: "blur" }],
|
||||
},
|
||||
});
|
||||
|
||||
@ -314,7 +339,7 @@ getList();
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.hide_required {
|
||||
::v-deep .el-form-item__label {
|
||||
:deep(.el-form-item__label) {
|
||||
&::before {
|
||||
display: none;
|
||||
}
|
||||
|
@ -92,7 +92,7 @@
|
||||
size="small"
|
||||
type="text"
|
||||
@click="handleCancelPublish(row.id)"
|
||||
>{{ t("admin.common.cancel") }}发布
|
||||
>{{ t("admin.table.cancelPublish") }}
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@ -160,7 +160,14 @@ const handleQuery = () => {
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = (id) => {
|
||||
modal
|
||||
.confirm('是否确认删除数据编号为"' + id + '"的成果项?')
|
||||
// .confirm('是否确认删除数据编号为"' + id + '"的成果项?')
|
||||
.confirm(
|
||||
t("admin.common.confirmAction", {
|
||||
number: id,
|
||||
action: t("admin.common.delete"),
|
||||
type: t("admin.common.achievement"),
|
||||
})
|
||||
)
|
||||
.then(async () => {
|
||||
await deleteAchievementByIds({ ids: [id] });
|
||||
getList();
|
||||
|
@ -140,7 +140,10 @@
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('admin.form.author')" prop="author">
|
||||
<el-input v-model="form.author" placeholder="多人员请用 , 隔开" />
|
||||
<el-input
|
||||
v-model="form.author"
|
||||
:placeholder="t('admin.form.paperAuthorPlaceholder')"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('admin.form.publishDate')" prop="publishTime">
|
||||
<el-date-picker
|
||||
@ -170,7 +173,7 @@
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<!-- //TODO:上传论文添加字段 -->
|
||||
<el-form-item label="上传论文:" prop="fileUrl">
|
||||
<el-form-item :label="t('admin.table.uploadPaper')" prop="fileUrl">
|
||||
<FileUpload
|
||||
v-model="form.fileUrl"
|
||||
:limit="1"
|
||||
@ -366,7 +369,7 @@ function submitForm() {
|
||||
getList();
|
||||
} else {
|
||||
await insertCasPaper(form.value);
|
||||
ElMessage.success("新增成功");
|
||||
ElMessage.success(t("admin.common.addSuccess"));
|
||||
showEditDialog.value = false;
|
||||
getList();
|
||||
}
|
||||
|
@ -425,7 +425,13 @@ function resetQuery() {
|
||||
/** 删除按钮操作 */
|
||||
function handleDelete(id) {
|
||||
modal
|
||||
.confirm('是否确认删除数据编号为"' + id + '"的专利项?')
|
||||
.confirm(
|
||||
t("admin.common.confirmAction", {
|
||||
type: t("admin.common.patent"),
|
||||
action: t("admin.common.delete"),
|
||||
number: id,
|
||||
})
|
||||
)
|
||||
.then(function () {
|
||||
return deleteCasPatentByIds(id);
|
||||
})
|
||||
@ -485,7 +491,7 @@ const submitForm = async () => {
|
||||
getList();
|
||||
} else {
|
||||
await insertCasPatent({ ...form.value, expertId: expertId.value });
|
||||
ElMessage.success("新增成功");
|
||||
ElMessage.success(t("admin.common.addSuccess"));
|
||||
open.value = false;
|
||||
getList();
|
||||
}
|
||||
|
@ -8,7 +8,9 @@
|
||||
:labelWidth="labelWidth"
|
||||
/>
|
||||
<div :style="{ marginLeft: labelWidth + 'px' }">
|
||||
<el-button type="primary" @click="submitForm(`3`)">保存草稿</el-button>
|
||||
<el-button type="primary" @click="submitForm(`3`)">{{
|
||||
t("admin.form.saveDraft")
|
||||
}}</el-button>
|
||||
<el-button type="primary" @click="submitForm(`1`)"
|
||||
>{{ t("admin.common.submitAudit") }}
|
||||
</el-button>
|
||||
|
@ -105,17 +105,17 @@
|
||||
class-name="small-padding fixed-width"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
size="small"
|
||||
type="text"
|
||||
icon="Download"
|
||||
@click="handleShelf(row)"
|
||||
>{{
|
||||
row.shelfStatus == 1
|
||||
? t("admin.table.putOff")
|
||||
: t("admin.table.putOn")
|
||||
}}
|
||||
</el-button>
|
||||
<!-- <el-button-->
|
||||
<!-- size="small"-->
|
||||
<!-- type="text"-->
|
||||
<!-- icon="Download"-->
|
||||
<!-- @click="handleShelf(row)"-->
|
||||
<!-- >{{-->
|
||||
<!-- row.shelfStatus == 1-->
|
||||
<!-- ? t("admin.table.putOff")-->
|
||||
<!-- : t("admin.table.putOn")-->
|
||||
<!-- }}-->
|
||||
<!-- </el-button>-->
|
||||
<el-button
|
||||
size="small"
|
||||
type="text"
|
||||
@ -197,7 +197,9 @@
|
||||
})
|
||||
"
|
||||
>
|
||||
<template #append>万元</template>
|
||||
<template #append
|
||||
>{{ t("admin.table.tenThousandYuan") }}
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@ -277,18 +279,22 @@
|
||||
:label="t('admin.form.projectIntroduction')"
|
||||
prop="introduce"
|
||||
>
|
||||
<WangEditor
|
||||
v-model="form.introduce"
|
||||
width="100%"
|
||||
min-height="150px"
|
||||
@blur="researchRef.validateField(`introduce`)"
|
||||
></WangEditor>
|
||||
<!-- <el-input
|
||||
<!-- <WangEditor-->
|
||||
<!-- v-model="form.introduce"-->
|
||||
<!-- width="100%"-->
|
||||
<!-- min-height="150px"-->
|
||||
<!-- @blur="researchRef.validateField(`introduce`)"-->
|
||||
<!-- ></WangEditor>-->
|
||||
<el-input
|
||||
type="textarea"
|
||||
v-model="form.kind"
|
||||
placeholder="请输入项目简介"
|
||||
v-model="form.introduce"
|
||||
:placeholder="
|
||||
t('admin.form.placeholder', {
|
||||
type: t('admin.form.projectIntroduction'),
|
||||
})
|
||||
"
|
||||
:autosize="{ minRows: 8, maxRows: 16 }"
|
||||
/> -->
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@ -478,11 +484,20 @@ function handleShelf(row) {
|
||||
|
||||
/** 删除按钮操作 */
|
||||
function handleDelete(id) {
|
||||
modal.confirm(`是否确认删除数据编号为"${id}"的数据项?`).then(async () => {
|
||||
await deleteTechnologyProjectByIds({ ids: [id] });
|
||||
getList();
|
||||
ElMessage.success(t("admin.common.deleteSuccess"));
|
||||
});
|
||||
modal
|
||||
.confirm(
|
||||
/*`是否确认删除数据编号为"${id}"的数据项?`*/
|
||||
t("admin.common.confirmAction", {
|
||||
type: t("admin.common.researchProject"),
|
||||
action: t("admin.common.delete"),
|
||||
number: id,
|
||||
})
|
||||
)
|
||||
.then(async () => {
|
||||
await deleteTechnologyProjectByIds({ ids: [id] });
|
||||
getList();
|
||||
ElMessage.success(t("admin.common.deleteSuccess"));
|
||||
});
|
||||
}
|
||||
|
||||
/** 重置新增的表单以及其他数据 */
|
||||
@ -530,7 +545,7 @@ function submitForm() {
|
||||
getList();
|
||||
} else {
|
||||
await insertTechnologyProject(form.value);
|
||||
ElMessage.success("新增成功");
|
||||
ElMessage.success(t("admin.common.addSuccess"));
|
||||
showEditDialog.value = false;
|
||||
getList();
|
||||
}
|
||||
|
@ -7,21 +7,25 @@ import { useI18n } from "vue-i18n";
|
||||
const { t } = useI18n();
|
||||
const statisticsList = ref([
|
||||
{
|
||||
key: "patentCount",
|
||||
label: computed(() => t("admin.statistics.patentCount")),
|
||||
value: 0,
|
||||
unit: "项",
|
||||
},
|
||||
{
|
||||
key: "achievementCount",
|
||||
label: computed(() => t("admin.statistics.achievementCount")),
|
||||
value: 0,
|
||||
unit: "个",
|
||||
},
|
||||
{
|
||||
key: "demandCount",
|
||||
label: computed(() => t("admin.statistics.demandCount")),
|
||||
value: 0,
|
||||
unit: "个",
|
||||
},
|
||||
{
|
||||
key: "paperCount",
|
||||
label: computed(() => t("admin.statistics.paperCount")),
|
||||
value: 0,
|
||||
unit: "篇",
|
||||
@ -31,28 +35,9 @@ const statisticsList = ref([
|
||||
const loadLabStatisticsData = () => {
|
||||
getLaboratoryStatistic().then((resp) => {
|
||||
const { data } = resp;
|
||||
statisticsList.value = [
|
||||
{
|
||||
label: computed(() => t("admin.statistics.patentCount")),
|
||||
value: data?.patentCount ?? 0,
|
||||
unit: "项",
|
||||
},
|
||||
{
|
||||
label: computed(() => t("admin.statistics.achievementCount")),
|
||||
value: data?.achievementCount ?? 0,
|
||||
unit: "个",
|
||||
},
|
||||
{
|
||||
label: computed(() => t("admin.statistics.demandCount")),
|
||||
value: data?.demandCount ?? 0,
|
||||
unit: "个",
|
||||
},
|
||||
{
|
||||
label: computed(() => t("admin.statistics.paperCount")),
|
||||
value: data?.paperCount ?? 0,
|
||||
unit: "篇",
|
||||
},
|
||||
];
|
||||
statisticsList.value.forEach((item) => {
|
||||
item.value = data[item.key] ?? 0;
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -40,8 +40,8 @@
|
||||
size="small"
|
||||
type="primary"
|
||||
@click="handleImport"
|
||||
>导入成果</el-button
|
||||
>
|
||||
>{{ t("admin.form.importAchievement") }}
|
||||
</el-button>
|
||||
</el-col>
|
||||
<right-toolbar
|
||||
v-model:showSearch="showSearch"
|
||||
@ -68,7 +68,11 @@
|
||||
prop="expertName"
|
||||
/>
|
||||
<!-- <el-table-column label="浏览量" prop="visitCount"/>-->
|
||||
<el-table-column align="center" :label="t('admin.table.publishTime')" prop="createTime">
|
||||
<el-table-column
|
||||
align="center"
|
||||
:label="t('admin.table.publishTime')"
|
||||
prop="createTime"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<span>{{ dayjs(row.createTime).format("YYYY-MM-DD") }}</span>
|
||||
</template>
|
||||
@ -110,7 +114,7 @@
|
||||
<el-dialog
|
||||
v-model="upload.dialogVisible"
|
||||
append-to-body
|
||||
title="导入成果"
|
||||
:title="t('admin.form.importAchievement')"
|
||||
width="400px"
|
||||
>
|
||||
<el-upload
|
||||
@ -154,12 +158,12 @@
|
||||
</el-upload>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button type="primary" @click="submitFileForm">{{
|
||||
t("common.confirm")
|
||||
}}</el-button>
|
||||
<el-button @click="upload.dialogVisible = false">{{
|
||||
t("common.cancel")
|
||||
}}</el-button>
|
||||
<el-button type="primary" @click="submitFileForm"
|
||||
>{{ t("common.confirm") }}
|
||||
</el-button>
|
||||
<el-button @click="upload.dialogVisible = false"
|
||||
>{{ t("common.cancel") }}
|
||||
</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
@ -241,13 +245,19 @@ function resetQuery() {
|
||||
* @param id
|
||||
*/
|
||||
function handleDelete(id) {
|
||||
ElMessageBox.confirm('是否确认删除数据编号为"' + id + '"的成果项?')
|
||||
ElMessageBox.confirm(
|
||||
t("admin.common.confirmAction", {
|
||||
action: t("admin.common.delete"),
|
||||
type: t("admin.common.achievement"),
|
||||
number: id,
|
||||
})
|
||||
)
|
||||
.then(function () {
|
||||
return deleteAchievements(id);
|
||||
})
|
||||
.then(() => {
|
||||
getList();
|
||||
ElMessage.success("删除成功");
|
||||
ElMessage.success(t("admin.common.deleteSuccess"));
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
|
@ -440,7 +440,7 @@ function submitForm() {
|
||||
});
|
||||
} else {
|
||||
paperAdd(form.value).then((response) => {
|
||||
ElMessage.success("新增成功");
|
||||
ElMessage.success(t("admin.common.addSuccess"));
|
||||
open.value = false;
|
||||
getList();
|
||||
});
|
||||
|
@ -120,7 +120,10 @@
|
||||
<el-input v-model="form.ext" placeholder="请输入刊物" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('admin.form.author')" prop="author">
|
||||
<el-input v-model="form.author" placeholder="多人员请用 , 隔开" />
|
||||
<el-input
|
||||
v-model="form.author"
|
||||
:placeholder="t('admin.form.paperAuthorPlaceholder')"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('admin.form.publishDate')" prop="publish_at">
|
||||
<el-date-picker
|
||||
@ -310,7 +313,7 @@ function submitForm() {
|
||||
/*
|
||||
else {
|
||||
paperAdd(form.value).then((response) => {
|
||||
proxy.$modal.msgSuccess("新增成功");
|
||||
proxy.$modal.msgSuccess(t('admin.common.addSuccess'));
|
||||
open.value = false;
|
||||
getList();
|
||||
});
|
||||
|
@ -394,7 +394,7 @@ function handleDelete(id) {
|
||||
// getList();
|
||||
// } else {
|
||||
// await insertLabPatent(form.value);
|
||||
// ElMessage.success("新增成功");
|
||||
// ElMessage.success(t('admin.common.addSuccess'));
|
||||
// open.value = false;
|
||||
// getList();
|
||||
// }
|
||||
|
@ -54,7 +54,12 @@
|
||||
:label="t('webSearch.demandDescription')"
|
||||
prop="description"
|
||||
>
|
||||
<editor v-model="formData.description" :minHeight="150" />
|
||||
<!-- <editor v-model="formData.description" :minHeight="150" />-->
|
||||
<el-input
|
||||
type="textarea"
|
||||
v-model="formData.description"
|
||||
:autosize="{ minRows: 6, maxRows: 8 }"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@ -143,7 +148,11 @@ const data = reactive({
|
||||
{ required: true, message: "联系人手机号不能为空", trigger: "blur" },
|
||||
],
|
||||
username: [
|
||||
{ required: true, message: "需求提交人不能为空", trigger: "blur" },
|
||||
{
|
||||
required: true,
|
||||
message: computed(() => t("webContact.demandSubmit")),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
userPhone: [{ required: true, message: "手机号不能为空", trigger: "blur" }],
|
||||
},
|
||||
|
@ -175,7 +175,13 @@ function resetQuery() {
|
||||
/** 删除按钮操作 */
|
||||
function handleDelete(id) {
|
||||
modal
|
||||
.confirm('是否确认删除数据编号为"' + id + '"的专利项?')
|
||||
.confirm(
|
||||
t("admin.common.confirmAction", {
|
||||
type: t("admin.common.patent"),
|
||||
action: t("admin.common.delete"),
|
||||
number: id,
|
||||
})
|
||||
)
|
||||
.then(function () {
|
||||
return deleteLabPatentByIds(id);
|
||||
})
|
||||
|
@ -21,12 +21,11 @@
|
||||
<el-form-item :label="t('admin.form.mobile')" prop="mobile">
|
||||
<el-input
|
||||
v-model="personForm.mobile"
|
||||
:maxlength="11"
|
||||
oninput="value=value.replace(/\D/,'')"
|
||||
:placeholder="
|
||||
t('admin.form.placeholder', { type: t('admin.form.mobile') })
|
||||
"
|
||||
/>
|
||||
<!-- oninput="value=value.replace(/\D/,'')"-->
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('admin.form.email')" prop="email">
|
||||
<el-input
|
||||
@ -53,9 +52,9 @@
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="submitPersonalInfo">{{
|
||||
t("admin.common.submit")
|
||||
}}</el-button>
|
||||
<el-button type="primary" @click="submitPersonalInfo"
|
||||
>{{ t("admin.common.submit") }}
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<p>
|
||||
@ -63,9 +62,9 @@
|
||||
</p>
|
||||
<research-form ref="researchFormRef" v-model="form" :is-add="false" />
|
||||
<div :style="{ marginLeft: labelWidth + 'px' }">
|
||||
<el-button type="primary" @click="submitExpertForm">{{
|
||||
t("admin.common.submit")
|
||||
}}</el-button>
|
||||
<el-button type="primary" @click="submitExpertForm"
|
||||
>{{ t("admin.common.submit") }}
|
||||
</el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
</div>
|
||||
@ -81,6 +80,7 @@ import {
|
||||
} from "@/api/admin/research/account";
|
||||
import { ElMessage } from "element-plus";
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
const { t } = useI18n();
|
||||
const data = reactive({
|
||||
form: {
|
||||
@ -90,27 +90,27 @@ const data = reactive({
|
||||
personForm: {},
|
||||
rules: {
|
||||
mobile: [
|
||||
{
|
||||
/* {
|
||||
pattern: /^1[3-9]\d{9}$/,
|
||||
trigger: "blur",
|
||||
message: "请输入正确的手机号",
|
||||
},
|
||||
},*/
|
||||
],
|
||||
email: [
|
||||
{
|
||||
pattern: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/,
|
||||
message: "请输入正确的邮箱地址",
|
||||
message: computed(() => t("webContact.emailFormat")),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
},
|
||||
personRules: {
|
||||
mobile: [
|
||||
{
|
||||
pattern: /^1[3-9]\d{9}$/,
|
||||
trigger: "blur",
|
||||
message: "请输入正确的手机号",
|
||||
},
|
||||
/* {
|
||||
pattern: /^1[3-9]\d{9}$/,
|
||||
trigger: "blur",
|
||||
message: "请输入正确的手机号",
|
||||
},*/
|
||||
],
|
||||
},
|
||||
});
|
||||
|
@ -1,26 +1,32 @@
|
||||
<script setup>
|
||||
import StatisticsPanel from "@/views/components/StatisticsPanel.vue";
|
||||
import { ref } from "vue";
|
||||
import { computed, ref } from "vue";
|
||||
import { getResearchStatistic } from "@/api/admin/research/home";
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
const { t } = useI18n();
|
||||
const statisticsList = ref([
|
||||
{
|
||||
label: "专利数量",
|
||||
key: "patentCount",
|
||||
label: computed(() => t("admin.statistics.patentCount")),
|
||||
value: 0,
|
||||
unit: "项",
|
||||
},
|
||||
{
|
||||
label: "成果数量",
|
||||
key: "achievementCount",
|
||||
label: computed(() => t("admin.statistics.achievementCount")),
|
||||
value: 0,
|
||||
unit: "个",
|
||||
},
|
||||
{
|
||||
label: "专家数量",
|
||||
key: "expertCount",
|
||||
label: computed(() => t("admin.statistics.expertCount")),
|
||||
value: 0,
|
||||
unit: "位",
|
||||
},
|
||||
{
|
||||
label: "实验室数量",
|
||||
key: "laboratoryCount",
|
||||
label: computed(() => t("admin.statistics.laboratoryCount")),
|
||||
value: 0,
|
||||
unit: "家",
|
||||
},
|
||||
@ -29,28 +35,9 @@ const statisticsList = ref([
|
||||
const loadResearchStatisticsData = () => {
|
||||
getResearchStatistic().then((resp) => {
|
||||
const { data } = resp;
|
||||
statisticsList.value = [
|
||||
{
|
||||
label: "专利数量",
|
||||
value: data?.patentCount ?? 0,
|
||||
unit: "项",
|
||||
},
|
||||
{
|
||||
label: "成果数量",
|
||||
value: data?.achievementCount ?? 0,
|
||||
unit: "个",
|
||||
},
|
||||
{
|
||||
label: "专家数量",
|
||||
value: data?.expertCount ?? 0,
|
||||
unit: "位",
|
||||
},
|
||||
{
|
||||
label: "实验室数量",
|
||||
value: data?.laboratoryCount ?? 0,
|
||||
unit: "家",
|
||||
},
|
||||
];
|
||||
statisticsList.value.forEach((item) => {
|
||||
item.value = data[item.key] ?? 0;
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -47,7 +47,7 @@
|
||||
size="small"
|
||||
type="primary"
|
||||
@click="handleImport"
|
||||
>导入成果
|
||||
>{{ t("admin.form.importAchievement") }}
|
||||
</el-button>
|
||||
</el-col>
|
||||
<right-toolbar
|
||||
@ -121,7 +121,7 @@
|
||||
<el-dialog
|
||||
v-model="upload.dialogVisible"
|
||||
append-to-body
|
||||
title="导入成果"
|
||||
:title="t('admin.form.importAchievement')"
|
||||
width="400px"
|
||||
>
|
||||
<el-upload
|
||||
@ -262,7 +262,7 @@ function handleDelete(id) {
|
||||
})
|
||||
.then(() => {
|
||||
getList();
|
||||
ElMessage.success("删除成功");
|
||||
ElMessage.success(t("admin.common.deleteSuccess"));
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -39,8 +39,8 @@
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button icon="plus" size="small" type="primary">
|
||||
{{ t("admin.common.add") }}</el-button
|
||||
>
|
||||
{{ t("admin.common.add") }}
|
||||
</el-button>
|
||||
</el-col>
|
||||
<right-toolbar
|
||||
v-model:showSearch="showSearch"
|
||||
@ -90,7 +90,7 @@
|
||||
size="small"
|
||||
type="text"
|
||||
@click="handleDeleteBind(row.id)"
|
||||
>{{ t("admin.common.cancel") }}关联
|
||||
>{{ t("admin.table.cancelRelation") }}
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@ -128,9 +128,9 @@
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">{{
|
||||
t("admin.common.confirm")
|
||||
}}</el-button>
|
||||
<el-button type="primary" @click="submitForm"
|
||||
>{{ t("admin.common.confirm") }}
|
||||
</el-button>
|
||||
<el-button @click="cancel">{{ t("admin.common.cancel") }}</el-button>
|
||||
</div>
|
||||
</template>
|
||||
@ -147,6 +147,7 @@ import { reactive, ref, toRefs } from "vue";
|
||||
import InputBoxAdd from "@/views/components/InputBoxAdd/index.vue";
|
||||
import { deleteBindExpert, expertList } from "@/api/admin/research/expert";
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
const { t } = useI18n();
|
||||
const router = useRouter();
|
||||
|
||||
@ -201,7 +202,13 @@ function resetQuery() {
|
||||
/** 删除按钮操作 */
|
||||
function handleDeleteBind(id) {
|
||||
modal
|
||||
.confirm(`是否确认取消关联数据编号为"${id}"的专家?`)
|
||||
.confirm(
|
||||
t("admin.common.confirmAction", {
|
||||
type: t("admin.common.expert"),
|
||||
number: id,
|
||||
action: t("admin.table.cancelRelation"),
|
||||
})
|
||||
)
|
||||
.then(function () {
|
||||
return deleteBindExpert(id);
|
||||
})
|
||||
@ -236,12 +243,16 @@ function cancel() {
|
||||
|
||||
const handleAdd = () => {
|
||||
reset();
|
||||
title.value = "添加专家";
|
||||
title.value = t("admin.form.add", {
|
||||
type: t("admin.common.expert"),
|
||||
});
|
||||
open.value = true;
|
||||
};
|
||||
const handleUpdate = () => {
|
||||
reset();
|
||||
title.value = "编辑专家";
|
||||
title.value = t("admin.form.edit", {
|
||||
type: t("admin.common.expert"),
|
||||
});
|
||||
open.value = true;
|
||||
};
|
||||
|
||||
@ -259,7 +270,7 @@ function submitForm() {
|
||||
});
|
||||
} else {
|
||||
paperAdd(form.value).then((response) => {
|
||||
ElMessage.success("新增成功");
|
||||
ElMessage.success(t("admin.common.addSuccess"));
|
||||
open.value = false;
|
||||
getList();
|
||||
});
|
||||
|
@ -311,7 +311,7 @@ function submitForm() {
|
||||
});
|
||||
} else {
|
||||
insertEquipment(form.value).then((response) => {
|
||||
ElMessage.success("新增成功");
|
||||
ElMessage.success(t("admin.common.addSuccess"));
|
||||
open.value = false;
|
||||
getList();
|
||||
});
|
||||
|
@ -319,7 +319,7 @@ function submitForm() {
|
||||
});
|
||||
} else {
|
||||
insertEquipment(form.value).then((response) => {
|
||||
ElMessage.success("新增成功");
|
||||
ElMessage.success(t("admin.common.addSuccess"));
|
||||
open.value = false;
|
||||
getList();
|
||||
});
|
||||
|
@ -121,7 +121,10 @@
|
||||
<el-input v-model="form.ext" placeholder="请输入刊物" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('admin.form.author')" prop="author">
|
||||
<el-input v-model="form.author" placeholder="多人员请用 , 隔开" />
|
||||
<el-input
|
||||
v-model="form.author"
|
||||
:placeholder="t('admin.form.paperAuthorPlaceholder')"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('admin.form.publishDate')" prop="publish_at">
|
||||
<el-date-picker
|
||||
@ -153,9 +156,9 @@
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">{{
|
||||
t("admin.common.confirm")
|
||||
}}</el-button>
|
||||
<el-button type="primary" @click="submitForm"
|
||||
>{{ t("admin.common.confirm") }}
|
||||
</el-button>
|
||||
<el-button @click="cancel">{{ t("admin.common.cancel") }}</el-button>
|
||||
</div>
|
||||
</template>
|
||||
@ -173,6 +176,7 @@ import { computed, getCurrentInstance, reactive, ref, toRefs } from "vue";
|
||||
import { cloneDeep } from "lodash";
|
||||
import { deletePaper, paperList } from "@/api/admin/laboratory/paper";
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
const { t } = useI18n();
|
||||
const router = useRouter();
|
||||
|
||||
@ -249,7 +253,13 @@ function resetQuery() {
|
||||
/** 删除按钮操作 */
|
||||
function handleDelete(id) {
|
||||
modal
|
||||
.confirm('是否确认删除数据编号为"' + id + '"的论文项?')
|
||||
.confirm(
|
||||
t("admin.common.confirmAction", {
|
||||
type: t("admin.common.paper"),
|
||||
number: id,
|
||||
action: t("admin.common.delete"),
|
||||
})
|
||||
)
|
||||
.then(function () {
|
||||
return deletePaper(id);
|
||||
})
|
||||
@ -304,7 +314,7 @@ function submitForm() {
|
||||
/*
|
||||
else {
|
||||
paperAdd(form.value).then((response) => {
|
||||
proxy.$modal.msgSuccess("新增成功");
|
||||
proxy.$modal.msgSuccess(t('admin.common.addSuccess'));
|
||||
open.value = false;
|
||||
getList();
|
||||
});
|
||||
|
@ -106,6 +106,7 @@ import {
|
||||
researchPatentList,
|
||||
} from "@/api/admin/research/patent";
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
const { t } = useI18n();
|
||||
const router = useRouter();
|
||||
|
||||
@ -157,7 +158,13 @@ function resetQuery() {
|
||||
/** 删除按钮操作 */
|
||||
function handleDelete(id) {
|
||||
modal
|
||||
.confirm('是否确认删除数据编号为"' + id + '"的专利项?')
|
||||
.confirm(
|
||||
t("admin.common.confirmAction", {
|
||||
type: t("admin.common.patent"),
|
||||
action: t("admin.common.delete"),
|
||||
number: id,
|
||||
})
|
||||
)
|
||||
.then(function () {
|
||||
return deleteResearchPatentByIds(id);
|
||||
})
|
||||
|
@ -135,6 +135,7 @@ import {
|
||||
} from "@/api/admin/research/research-project";
|
||||
import { subjectRoleDict } from "@/constant/dict";
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
const { t } = useI18n();
|
||||
const router = useRouter();
|
||||
|
||||
@ -188,7 +189,14 @@ function resetQuery() {
|
||||
/** 删除按钮操作 */
|
||||
function handleDelete(id) {
|
||||
modal
|
||||
.confirm('是否确认删除数据编号为"' + id + '"的科研项目?')
|
||||
// .confirm('是否确认删除数据编号为"' + id + '"的科研项目?')
|
||||
.confirm(
|
||||
t("admin.common.confirmAction", {
|
||||
action: t("admin.common.delete"),
|
||||
id: id,
|
||||
type: t("admin.common.researchProject"),
|
||||
})
|
||||
)
|
||||
.then(function () {
|
||||
return deleteTechnologyProject(id);
|
||||
})
|
||||
|
@ -2,7 +2,6 @@
|
||||
<div class="app-container">
|
||||
<el-card shadow="always" style="width: 55%; margin: 0 auto">
|
||||
<el-form ref="formRef" :label-width="labelWidth + 'px'" :model="formData">
|
||||
<!-- :rules="rules"-->
|
||||
<p>
|
||||
<b> {{ t("admin.form.basicInfo") }}</b>
|
||||
</p>
|
||||
@ -51,7 +50,17 @@
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item :label="t('webSearch.demandDescription')" prop="add">
|
||||
<editor v-model="formData.add" :minHeight="150" />
|
||||
<!-- <editor v-model="formData.add" :minHeight="150" />-->
|
||||
<el-input
|
||||
type="textarea"
|
||||
v-model="formData.add"
|
||||
:autosize="{ minRows: 6, maxRows: 8 }"
|
||||
:placeholder="
|
||||
t('admin.form.placeholder', {
|
||||
type: t('webSearch.demandDescription'),
|
||||
})
|
||||
"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@ -67,7 +76,11 @@
|
||||
<el-form-item :label="t('admin.form.demandContact')" prop="name">
|
||||
<el-input
|
||||
v-model="formData.name"
|
||||
placeholder="请输入需求联系人"
|
||||
:placeholder="
|
||||
t('admin.form.placeholder', {
|
||||
type: t('admin.form.demandContact'),
|
||||
})
|
||||
"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@ -75,7 +88,11 @@
|
||||
<el-form-item :label="t('admin.form.contactPhone')" prop="mobile">
|
||||
<el-input
|
||||
v-model="formData.mobile"
|
||||
placeholder="请输入联系人手机号"
|
||||
:placeholder="
|
||||
t('admin.form.placeholder', {
|
||||
type: t('admin.form.mobile'),
|
||||
})
|
||||
"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@ -102,9 +119,9 @@
|
||||
</el-form>
|
||||
<el-row justify="center">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" @click="cancel">{{
|
||||
t("admin.identity.entrance.back")
|
||||
}}</el-button>
|
||||
<el-button type="primary" @click="cancel"
|
||||
>{{ t("admin.identity.entrance.back") }}
|
||||
</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
@ -112,13 +129,14 @@
|
||||
</template>
|
||||
<script setup>
|
||||
import CityOptions from "@/views/components/CityOptions/index.vue";
|
||||
import { reactive, ref, toRefs } from "vue";
|
||||
import { computed, reactive, ref, toRefs } from "vue";
|
||||
import editor from "@/components/WangEditor/index.vue";
|
||||
import { ElMessage } from "element-plus";
|
||||
import { useRoute } from "vue-router";
|
||||
import tab from "@/plugins/tab";
|
||||
import { serviceDemandInfo } from "@/api/admin/research/service-demand";
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
const { t } = useI18n();
|
||||
const data = reactive({
|
||||
formData: {
|
||||
@ -130,16 +148,60 @@ const data = reactive({
|
||||
postCode: undefined,
|
||||
},
|
||||
rules: {
|
||||
name: [{ required: true, message: "需求名称不能为空", trigger: "blur" }],
|
||||
add: [{ required: true, message: "需求描述不能为空", trigger: "blur" }],
|
||||
name: [
|
||||
{
|
||||
required: true,
|
||||
/*"需求名称不能为空"*/
|
||||
message: computed(() =>
|
||||
t("admin.validation.required", {
|
||||
type: t("admin.form.name", { type: t("admin.common.demand") }),
|
||||
})
|
||||
),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
add: [
|
||||
{
|
||||
required: true,
|
||||
/* "需求描述不能为空"*/
|
||||
message: computed(() =>
|
||||
t("admin.validation.required", {
|
||||
type: t("webSearch.demandDescription"),
|
||||
})
|
||||
),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
bankAccount: [
|
||||
{ required: true, message: "需求联系人不能为空", trigger: "blur" },
|
||||
{
|
||||
required: true,
|
||||
/*"需求联系人不能为空"*/
|
||||
message: computed(() =>
|
||||
t("admin.validation.required", {
|
||||
type: t("admin.form.demandContact"),
|
||||
})
|
||||
),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
bankPhone: [
|
||||
{ required: true, message: "联系人手机号不能为空", trigger: "blur" },
|
||||
{
|
||||
required: true,
|
||||
/*"联系人手机号不能为空"*/
|
||||
message: computed(() =>
|
||||
t("admin.validation.required", {
|
||||
type: t("admin.form.mobile"),
|
||||
})
|
||||
),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
username: [
|
||||
{ required: true, message: "需求提交人不能为空", trigger: "blur" },
|
||||
{
|
||||
required: true,
|
||||
message: computed(() => t("webContact.demandSubmit")),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
userPhone: [{ required: true, message: "手机号不能为空", trigger: "blur" }],
|
||||
},
|
||||
|
@ -87,14 +87,14 @@
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-button icon="FolderRemove" size="small" type="text" @click=""
|
||||
>{{ t("admin.common.cancel") }}发布
|
||||
>{{ t("admin.table.cancelPublish") }}
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="view"
|
||||
size="small"
|
||||
type="text"
|
||||
@click="handleDetail(row.id)"
|
||||
>查看
|
||||
>{{ t("admin.common.view") }}
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@ -175,7 +175,13 @@ function resetQuery() {
|
||||
/** 删除按钮操作 */
|
||||
function handleDelete(id) {
|
||||
modal
|
||||
.confirm('是否确认删除数据编号为"' + id + '"的专利项?')
|
||||
.confirm(
|
||||
t("admin.common.confirmAction", {
|
||||
type: t("admin.common.patent"),
|
||||
action: t("admin.common.delete"),
|
||||
number: id,
|
||||
})
|
||||
)
|
||||
.then(function () {
|
||||
return deleteLabPatentByIds(id);
|
||||
})
|
||||
|
@ -5,11 +5,16 @@
|
||||
:model="modelValue"
|
||||
:rules="rules"
|
||||
>
|
||||
<div v-if="showTitle" class="form_title">基本信息</div>
|
||||
<div v-if="showTitle" class="form_title">
|
||||
{{
|
||||
/*基本信息*/
|
||||
t("admin.form.basicInfo")
|
||||
}}
|
||||
</div>
|
||||
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="姓名:" prop="name">
|
||||
<el-form-item :label="t('admin.form.fullName')" prop="name">
|
||||
<el-input v-model="modelValue.name"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@ -17,7 +22,7 @@
|
||||
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="手机号:" prop="phone">
|
||||
<el-form-item :label="t('admin.form.mobile')" prop="phone">
|
||||
<el-input v-model="modelValue.phone"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@ -25,7 +30,10 @@
|
||||
|
||||
<el-row v-if="isAdd">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="身份证号:" prop="idCard">
|
||||
<el-form-item
|
||||
:label="/*身份证号:*/ t('admin.form.idCardNumber')"
|
||||
prop="idCard"
|
||||
>
|
||||
<el-input v-model="modelValue.idCard"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@ -33,7 +41,7 @@
|
||||
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="工作所在地:" prop="wordAddress">
|
||||
<el-form-item :label="t('admin.form.workLocation')" prop="wordAddress">
|
||||
<el-input v-model="modelValue.wordAddress" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@ -41,7 +49,7 @@
|
||||
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="工作经历:" prop="experience">
|
||||
<el-form-item :label="t('admin.form.workExperience')" prop="experience">
|
||||
<el-input
|
||||
v-model="modelValue.experience"
|
||||
:autosize="{ minRows: 2, maxRows: 10 }"
|
||||
@ -58,13 +66,13 @@
|
||||
v-model="modelValue"
|
||||
:labelWidth="labelWidth"
|
||||
fieldKey="keywords"
|
||||
placeholder="应用场景关键词+技术产品关键词"
|
||||
:placeholder="t('admin.form.inputKeywords')"
|
||||
:title="t('admin.form.keywords')"
|
||||
/>
|
||||
|
||||
<el-row v-if="isAdd">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="身份证:" required>
|
||||
<el-form-item :label="t('admin.form.idCard')" required>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="idImage.0">
|
||||
@ -74,7 +82,10 @@
|
||||
:limit="1"
|
||||
/>
|
||||
</el-form-item>
|
||||
<div style="text-align: center">身份证人像面</div>
|
||||
<div style="text-align: center">
|
||||
<!--身份证人像面-->
|
||||
{{ t("admin.form.idCardPortrait") }}
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="idImage.1">
|
||||
@ -84,7 +95,10 @@
|
||||
:limit="1"
|
||||
/>
|
||||
</el-form-item>
|
||||
<div style="text-align: center">身份证国徽面</div>
|
||||
<div style="text-align: center">
|
||||
<!--身份证国徽面-->
|
||||
{{ t("admin.form.idCardEmblem") }}
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="idImage.2">
|
||||
@ -94,7 +108,10 @@
|
||||
:limit="1"
|
||||
/>
|
||||
</el-form-item>
|
||||
<div style="text-align: center">手持身份证人像面</div>
|
||||
<div style="text-align: center">
|
||||
<!--手持身份证人像面-->
|
||||
{{ t("admin.validation.portraitOfTheIdCard") }}
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form-item>
|
||||
@ -103,7 +120,10 @@
|
||||
|
||||
<el-row v-if="isAdd">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="成果经纪资格证书:" prop="certificatePics">
|
||||
<el-form-item
|
||||
:label="t('admin.form.achievementBroker')"
|
||||
prop="certificatePics"
|
||||
>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<image-upload
|
||||
@ -120,8 +140,10 @@
|
||||
<script setup>
|
||||
import InputBoxAdd from "../InputBoxAdd";
|
||||
import FieldOptions from "../FieldOptions";
|
||||
import { ref } from "vue";
|
||||
import { computed, reactive, ref } from "vue";
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
const { t } = useI18n();
|
||||
const formRef = ref();
|
||||
const researchsFormRef = ref();
|
||||
const keywordsFormRef = ref();
|
||||
@ -140,51 +162,99 @@ const props = defineProps({
|
||||
default: 120,
|
||||
},
|
||||
});
|
||||
const 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" },
|
||||
const rules = reactive({
|
||||
product: [
|
||||
{
|
||||
pattern: /^1[3-9]\d{9}$/,
|
||||
message: "请输入正确的手机号码",
|
||||
required: true,
|
||||
message: computed(() => t("admin.form.placeholder")),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
name: [
|
||||
{
|
||||
required: true,
|
||||
message: computed(() => t("admin.form.placeholder")),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
kind: [
|
||||
{
|
||||
required: true,
|
||||
message: computed(() => t("admin.form.pleaseSelect")),
|
||||
trigger: "change",
|
||||
},
|
||||
],
|
||||
code: [
|
||||
{
|
||||
required: true,
|
||||
message: computed(() => t("admin.form.placeholder")),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
mobile: [
|
||||
{
|
||||
required: true,
|
||||
message: computed(() =>
|
||||
t("admin.form.placeholder", { type: t("admin.form.mobile") })
|
||||
),
|
||||
trigger: "blur",
|
||||
},
|
||||
// {
|
||||
// pattern: /^1[3-9]\d{9}$/,
|
||||
// message: "请输入正确的手机号码",
|
||||
// trigger: "blur",
|
||||
// },
|
||||
],
|
||||
idCard: [
|
||||
{
|
||||
required: true,
|
||||
message: computed(() => t("admin.form.placeholder")),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
wordAddress: [
|
||||
{
|
||||
required: true,
|
||||
message: computed(() => t("admin.form.placeholder")),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
experience: [
|
||||
{
|
||||
required: true,
|
||||
message: computed(() => t("admin.form.placeholder")),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
idCard: [{ required: true, message: "请输入", trigger: "blur" }],
|
||||
wordAddress: [{ required: true, message: "请输入", trigger: "blur" }],
|
||||
experience: [{ required: true, message: "请输入", trigger: "blur" }],
|
||||
"idImage.0": [
|
||||
{
|
||||
required: true,
|
||||
message: "请上传",
|
||||
message: computed(() => t("admin.validation.pleaseUpload")),
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
"idImage.1": [
|
||||
{
|
||||
required: true,
|
||||
message: "请上传",
|
||||
message: computed(() => t("admin.validation.pleaseUpload")),
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
"idImage.2": [
|
||||
{
|
||||
required: true,
|
||||
message: "请上传",
|
||||
message: computed(() => t("admin.validation.pleaseUpload")),
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
certificatePics: [
|
||||
{
|
||||
required: true,
|
||||
message: "请上传",
|
||||
message: computed(() => t("admin.validation.pleaseUpload")),
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
};
|
||||
});
|
||||
|
||||
const validateForm = async () => {
|
||||
let formValid;
|
||||
|
@ -198,7 +198,12 @@ const getFieldNameById = (ids) => {
|
||||
|
||||
// 所属领域添加按钮
|
||||
const fieldAdd = () => {
|
||||
if (!fields.value.length) return ElMessage.error("请选择领域类型");
|
||||
if (!fields.value.length)
|
||||
return ElMessage.error(
|
||||
t("admin.form.placeholder", {
|
||||
type: t("admin.form.fieldTypes"),
|
||||
})
|
||||
);
|
||||
industrysTags.value.push(fields.value);
|
||||
if (!modelValue.value.industrys) modelValue.value.industrys = [];
|
||||
modelValue.value.industrys.push(fields.value.join("-"));
|
||||
|
@ -6,11 +6,17 @@
|
||||
:model="modelValue"
|
||||
:rules="rules"
|
||||
>
|
||||
<div v-if="showTitle" class="form_title">基本信息</div>
|
||||
<div v-if="showTitle" class="form_title">
|
||||
<!--基本信息-->
|
||||
{{ t("admin.form.basicInfo") }}
|
||||
</div>
|
||||
|
||||
<el-row v-if="isAdd">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="实验室名称" prop="name">
|
||||
<el-form-item
|
||||
:label="t('admin.form.name', { type: t('admin.common.lab') })"
|
||||
prop="name"
|
||||
>
|
||||
<el-input v-model="modelValue.name"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@ -18,27 +24,29 @@
|
||||
|
||||
<el-row v-if="isAdd">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="所属院所或单位" prop="school">
|
||||
<el-form-item :label="t('admin.form.institute')" prop="school">
|
||||
<el-input
|
||||
v-model="modelValue.school"
|
||||
placeholder="请输入所属院所或单位"
|
||||
:placeholder="
|
||||
t('admin.form.placeholder', { type: t('admin.form.institute') })
|
||||
"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!--FIXME:-->
|
||||
<el-row v-if="isAdd && false">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="组织机构代码:" prop="code">
|
||||
<el-row justify="space-between" type="flex">
|
||||
<el-col :span="20">
|
||||
<el-input v-model="modelValue.code"></el-input>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<!--<el-row v-if="isAdd && false">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="组织机构代码:" prop="code">
|
||||
<el-row justify="space-between" type="flex">
|
||||
<el-col :span="20">
|
||||
<el-input v-model="modelValue.code"></el-input>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>-->
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item :label="t('admin.form.labWebsite')">
|
||||
@ -198,7 +206,7 @@
|
||||
import Editor from "@/components/WangEditor";
|
||||
import FieldOptions from "@/views/components/FieldOptions";
|
||||
import InputBoxAdd from "@/views/components/InputBoxAdd";
|
||||
import { reactive, ref, toRefs } from "vue";
|
||||
import { computed, reactive, ref, toRefs } from "vue";
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
const { t } = useI18n();
|
||||
@ -219,7 +227,6 @@ const props = defineProps({
|
||||
});
|
||||
|
||||
const formRef = ref();
|
||||
// const cityFormRef = ref();
|
||||
const fieldFormRef = ref();
|
||||
const keywordsFormRef = ref();
|
||||
const directionsFormRef = ref();
|
||||
@ -227,52 +234,128 @@ const introduceRef = ref();
|
||||
|
||||
const data = reactive({
|
||||
rules: {
|
||||
name: [{ required: true, message: "请输入实验室名称", trigger: "blur" }],
|
||||
code: [{ required: true, message: "请输入组织机构代码", trigger: "blur" }],
|
||||
name: [
|
||||
{
|
||||
required: true,
|
||||
/*"请输入实验室名称"*/
|
||||
message: computed(() =>
|
||||
t("admin.form.placeholder", {
|
||||
type: t("admin.form.name", {
|
||||
type: t("admin.common.lab"),
|
||||
}),
|
||||
})
|
||||
),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
// code: [{ required: true, message: "请输入组织机构代码", trigger: "blur" }],
|
||||
school: [
|
||||
{ required: true, message: "请输入所属院所或单位", trigger: "blur" },
|
||||
{
|
||||
required: true,
|
||||
/*"请输入所属院所或单位"*/
|
||||
message: computed(() =>
|
||||
t("admin.form.placeholder", {
|
||||
type: t("admin.form.institute"),
|
||||
})
|
||||
),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
introduction: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入实验室简介",
|
||||
message: computed(() =>
|
||||
t("admin.form.placeholder", {
|
||||
type: t("admin.form.introduction", {
|
||||
type: t("admin.common.lab"),
|
||||
}),
|
||||
})
|
||||
),
|
||||
trigger: ["change", "blur"],
|
||||
},
|
||||
],
|
||||
/*-----*/
|
||||
kind: [{ required: true, message: "请选择", trigger: "change" }],
|
||||
product: [{ required: true, message: "请输入", trigger: "blur" }],
|
||||
mobile: [
|
||||
{ required: true, message: "请输入", trigger: "blur" },
|
||||
kind: [
|
||||
{
|
||||
pattern: /^1[3-9]\d{9}$/,
|
||||
message: "请输入正确的手机号码",
|
||||
required: true,
|
||||
message: computed(() => t("admin.form.pleaseSelect")),
|
||||
trigger: "change",
|
||||
},
|
||||
],
|
||||
product: [
|
||||
{
|
||||
required: true,
|
||||
message: computed(() => t("admin.form.placeholder")),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
researchId: [{ required: true, message: "请选择", trigger: "change" }],
|
||||
mobile: [
|
||||
{
|
||||
required: true,
|
||||
message: computed(() => t("admin.form.placeholder")),
|
||||
trigger: "blur",
|
||||
},
|
||||
// {
|
||||
// pattern: /^1[3-9]\d{9}$/,
|
||||
// message: "请输入正确的手机号码",
|
||||
// trigger: "blur",
|
||||
// },
|
||||
],
|
||||
researchId: [
|
||||
{
|
||||
required: true,
|
||||
message: computed(() => t("admin.form.pleaseSelect")),
|
||||
trigger: "change",
|
||||
},
|
||||
],
|
||||
tenantId: [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择",
|
||||
message: computed(() => t("admin.form.pleaseSelect")),
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
education: [{ required: true, message: "请选择", trigger: "change" }],
|
||||
major: [{ required: true, message: "请输入", trigger: "blur" }],
|
||||
job: [{ required: true, message: "请输入", trigger: "blur" }],
|
||||
title: [{ required: true, message: "请输入", trigger: "blur" }],
|
||||
education: [
|
||||
{
|
||||
required: true,
|
||||
message: computed(() => t("admin.form.pleaseSelect")),
|
||||
trigger: "change",
|
||||
},
|
||||
],
|
||||
major: [
|
||||
{
|
||||
required: true,
|
||||
message: computed(() => t("admin.form.placeholder")),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
job: [
|
||||
{
|
||||
required: true,
|
||||
message: computed(() => t("admin.form.placeholder")),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
title: [
|
||||
{
|
||||
required: true,
|
||||
message: computed(() => t("admin.form.placeholder")),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
work_at: [
|
||||
{
|
||||
required: true,
|
||||
message: "从业时间不能为空",
|
||||
message: computed(() =>
|
||||
t("admin.validation.required", { type: t("admin.form.workingTime") })
|
||||
),
|
||||
trigger: ["change", "blur"],
|
||||
},
|
||||
],
|
||||
license: [
|
||||
{
|
||||
required: true,
|
||||
message: "请上传",
|
||||
message: computed(() => t("admin.validation.pleaseUpload")),
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
@ -287,16 +370,11 @@ const validateForm = async () => {
|
||||
} catch (error) {
|
||||
formValid = false;
|
||||
}
|
||||
// const cityFormValid = await cityFormRef.value.validateForm(); // 城市选择表单验证
|
||||
const fieldFormValid = await fieldFormRef.value.validateForm(); // 领域选择表单验证
|
||||
const keywordsFormValid = await keywordsFormRef.value.validateForm(); // 关键词表单验证
|
||||
const directionsFormValid = await directionsFormRef.value.validateForm(); // 研究方向表单验证
|
||||
return (
|
||||
formValid &&
|
||||
// cityFormValid &&
|
||||
fieldFormValid &&
|
||||
keywordsFormValid &&
|
||||
directionsFormValid
|
||||
formValid && fieldFormValid && keywordsFormValid && directionsFormValid
|
||||
);
|
||||
};
|
||||
|
||||
|
@ -1,7 +1,9 @@
|
||||
<script setup>
|
||||
const colors = ["#31b48d", "#38a1f2", "#7538c7", "#3b67a4"];
|
||||
import useSettingsStore from "@/store/modules/settings";
|
||||
|
||||
const prop = defineProps({
|
||||
const colors = ["#31b48d", "#38a1f2", "#7538c7", "#3b67a4"];
|
||||
const { locale } = useSettingsStore();
|
||||
const props = defineProps({
|
||||
// 统计数据列表
|
||||
list: {
|
||||
type: Array,
|
||||
@ -26,7 +28,7 @@ const prop = defineProps({
|
||||
<div class="value">
|
||||
{{ item.value }}
|
||||
</div>
|
||||
<div class="unit">
|
||||
<div v-if="locale === 'zh'" class="unit">
|
||||
{{ item.unit }}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -44,7 +44,7 @@ const submitForm = async () => {
|
||||
form.value.idCardPics = form.value.idImage.join(",");
|
||||
form.value.keyword = form.value.keywords.join(",");
|
||||
insertCasBroker(form.value).then(() => {
|
||||
ElMessage.success("新增成功");
|
||||
ElMessage.success(t("admin.common.addSuccess"));
|
||||
router.push({
|
||||
path: "/identity/index",
|
||||
});
|
||||
|
@ -37,7 +37,7 @@ const submitForm = async (status) => {
|
||||
const valid = await enterpriseFormRef.value.validateForm();
|
||||
if (valid) {
|
||||
insertEnterprise(form.value).then(() => {
|
||||
ElMessage.success("新增成功");
|
||||
ElMessage.success(t("admin.common.addSuccess"));
|
||||
router.go(-1);
|
||||
});
|
||||
} else {
|
||||
|
@ -572,7 +572,7 @@ function submitForm() {
|
||||
});
|
||||
} else {
|
||||
addJob(form.value).then((response) => {
|
||||
proxy.$modal.msgSuccess("新增成功");
|
||||
proxy.$modal.msgSuccess(t("admin.common.addSuccess"));
|
||||
open.value = false;
|
||||
getList();
|
||||
});
|
||||
|
@ -53,7 +53,7 @@
|
||||
type="daterange"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:end-placeholder="t('admin.table.endDate')"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
|
@ -47,7 +47,7 @@
|
||||
type="daterange"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:end-placeholder="t('admin.table.endDate')"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
|
@ -62,7 +62,7 @@
|
||||
type="daterange"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:end-placeholder="t('admin.table.endDate')"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
|
@ -46,7 +46,7 @@
|
||||
type="daterange"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:end-placeholder="t('admin.table.endDate')"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
@ -353,7 +353,7 @@ function submitForm() {
|
||||
});
|
||||
} else {
|
||||
addConfig(form.value).then((response) => {
|
||||
proxy.$modal.msgSuccess("新增成功");
|
||||
proxy.$modal.msgSuccess(t("admin.common.addSuccess"));
|
||||
open.value = false;
|
||||
getList();
|
||||
});
|
||||
|
@ -251,7 +251,7 @@ const data = reactive({
|
||||
email: [
|
||||
{
|
||||
type: "email",
|
||||
message: "请输入正确的邮箱地址",
|
||||
message: computed(() => t("webContact.emailFormat")),
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
@ -349,7 +349,7 @@ function submitForm() {
|
||||
});
|
||||
} else {
|
||||
addDept(form.value).then((response) => {
|
||||
proxy.$modal.msgSuccess("新增成功");
|
||||
proxy.$modal.msgSuccess(t("admin.common.addSuccess"));
|
||||
open.value = false;
|
||||
getList();
|
||||
});
|
||||
|
@ -398,7 +398,7 @@ function submitForm() {
|
||||
} else {
|
||||
addData(form.value).then((response) => {
|
||||
useDictStore().removeDict(queryParams.value.dictType);
|
||||
proxy.$modal.msgSuccess("新增成功");
|
||||
proxy.$modal.msgSuccess(t("admin.common.addSuccess"));
|
||||
open.value = false;
|
||||
getList();
|
||||
});
|
||||
|
@ -47,7 +47,7 @@
|
||||
type="daterange"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:end-placeholder="t('admin.table.endDate')"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
@ -354,7 +354,7 @@ function submitForm() {
|
||||
});
|
||||
} else {
|
||||
addType(form.value).then((response) => {
|
||||
proxy.$modal.msgSuccess("新增成功");
|
||||
proxy.$modal.msgSuccess(t("admin.common.addSuccess"));
|
||||
open.value = false;
|
||||
getList();
|
||||
});
|
||||
|
@ -539,7 +539,7 @@ function submitForm() {
|
||||
});
|
||||
} else {
|
||||
addMenu(form.value).then((response) => {
|
||||
proxy.$modal.msgSuccess("新增成功");
|
||||
proxy.$modal.msgSuccess(t("admin.common.addSuccess"));
|
||||
open.value = false;
|
||||
getList();
|
||||
});
|
||||
|
@ -343,7 +343,7 @@ function submitForm() {
|
||||
});
|
||||
} else {
|
||||
addNotice(form.value).then((response) => {
|
||||
proxy.$modal.msgSuccess("新增成功");
|
||||
proxy.$modal.msgSuccess(t("admin.common.addSuccess"));
|
||||
open.value = false;
|
||||
getList();
|
||||
});
|
||||
|
@ -313,7 +313,7 @@ function submitForm() {
|
||||
});
|
||||
} else {
|
||||
addPost(form.value).then((response) => {
|
||||
proxy.$modal.msgSuccess("新增成功");
|
||||
proxy.$modal.msgSuccess(t("admin.common.addSuccess"));
|
||||
open.value = false;
|
||||
getList();
|
||||
});
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user