bugfix and performance improvements

This commit is contained in:
2023-07-27 17:31:39 +08:00
parent 2ba5ff9439
commit 5c50715a33
109 changed files with 1516 additions and 1154 deletions

10
Caddyfile Normal file
View 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

View File

@ -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({});

View File

@ -166,7 +166,7 @@ function onSubmit() {
}
</script>
<style lang="scss" scoped>
::v-deep(.el-input__inner) {
::deep(.el-input__inner) {
padding-right: 55px;
}
._contact {

View File

@ -1,5 +1,4 @@
const broker = {
// 保存当前步骤
saveCurrentStep: "Сохранить текущий шаг",
};
export default broker;

View File

@ -1,5 +1,4 @@
const broker = {
// 保存当前步骤
saveCurrentStep: "保存当前步骤",
};
export default broker;

View File

@ -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: "Отправить на проверку",
};

View File

@ -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: "提交审核",
};

View File

@ -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;

View File

@ -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;

View File

@ -15,7 +15,6 @@ const entrance = {
enter: "Войти",
viewReasonsForRejection: "Просмотреть причины отказа",
back: "Вернуться",
// 一个账号只能申请一个身份
oneAccount: "Один аккаунт может подать только один идентификатор",
};

View File

@ -15,7 +15,6 @@ const entrance = {
enter: "进入",
viewReasonsForRejection: "查看拒绝原因",
back: "返回",
// 一个账号只能申请一个身份
oneAccount: "一个账号只能申请一个身份",
};
export default entrance;

View File

@ -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,
};

View File

@ -1,15 +1,12 @@
const statistics = {
// 企业数量, 正在服务需求数, 订单总数, 需求总数
enterpriseCount: "Количество предприятий",
serviceDemandCount: "Количество обслуживаемых потребностей",
orderCount: "Количество заказов",
demandCount: "Количество потребностей",
// 专利数量 成果数量 专家数量 实验室数量
patentCount: "Количество патентов",
achievementCount: "Количество достижений",
expertCount: "Количество экспертов",
laboratoryCount: "Количество лабораторий",
// 论文数量
paperCount: "Количество статей",
unit: {
enterprise: "шт",

View File

@ -1,15 +1,12 @@
const statistics = {
// 企业数量, 正在服务需求数, 订单总数, 需求总数
enterpriseCount: "企业数量",
serviceDemandCount: "正在服务需求数",
orderCount: "订单总数",
demandCount: "需求总数",
// 专利数量 成果数量 专家数量 实验室数量
patentCount: "专利数量",
achievementCount: "成果数量",
expertCount: "专家数量",
laboratoryCount: "实验室数量",
// 论文数量
paperCount: "论文数量",
unit: {
enterprise: "家",

View File

@ -43,6 +43,17 @@ const table = {
publishDate: "Дата публикации",
relatedPaper: "Связанные статьи",
relatedPatent: "Связанные патенты",
applyInvoice: "Заявка на выставление счета",
withdrawAmount: "Сумма снятия",
withdrawType: "Тип снятия",
withdrawStatus: "Статус снятия",
withdrawTime: "Время снятия",
// 取消**
cancel: "Отменить {action}",
// 上传论文
uploadPaper: "Загрузить статью",
// 万元
tenThousandYuan: "Десять тысяч юаней",
};
export default table;

View File

@ -43,5 +43,16 @@ const table = {
publishDate: "发布日期",
relatedPaper: "关联论文",
relatedPatent: "关联专利",
applyInvoice: "申请开票",
withdrawAmount: "提现金额",
withdrawType: "提现类型",
withdrawStatus: "提现状态",
withdrawTime: "提现时间",
// 取消**
cancel: "取消{action}",
// 上传论文
uploadPaper: "上传论文",
// 万元
tenThousandYuan: "万元",
};
export default table;

View File

@ -17,10 +17,8 @@ const validation = {
fileFormatIsIncorrectPleaseUploadFormatFile:
"Неверный формат файла, пожалуйста, загрузите файл формата {format}!",
uploadFileFailed: "Ошибка загрузки файла",
// 请输入研究方向、核心技术及产品、代表专利和论文、承担科研项目名称及项目摘要
pleaseEnterResearchDirectionCoreTechnologyAndProductRepresentativePatentsAndPapersUndertakeTheNameAndAbstractOfScientificResearchProjects:
"Пожалуйста, введите направление исследований, основные технологии и продукты, представительские патенты и статьи, название и аннотацию научно-исследовательских проектов",
// 手持身份证人像面
portraitOfTheIdCard: "Портрет удостоверения личности",
};
export default validation;

View File

@ -14,10 +14,8 @@ const validation = {
fileFormatIsIncorrectPleaseUploadFormatFile:
"文件格式不正确, 请上传{format}格式文件!",
uploadFileFailed: "上传文件失败",
// 请输入研究方向、核心技术及产品、代表专利和论文、承担科研项目名称及项目摘要
pleaseEnterResearchDirectionCoreTechnologyAndProductRepresentativePatentsAndPapersUndertakeTheNameAndAbstractOfScientificResearchProjects:
"请输入研究方向、核心技术及产品、代表专利和论文、承担科研项目名称及项目摘要",
// 手持身份证人像面
portraitOfTheIdCard: "手持身份证人像面",
};

View File

@ -3,7 +3,6 @@ const dict = {
accepted: "Принято",
rejected: "Отклонено",
finished: "Завершено",
// 专利 成果 服务需求 专家 科研项目 论文
patent: "Патент",
achievement: "Достижение",
serviceDemand: "Сервисный спрос",

View File

@ -3,7 +3,6 @@ const dict = {
accepted: "已受理",
rejected: "已驳回",
finished: "已结束",
// 专利 成果 服务需求 专家 科研项目 论文
patent: "专利",
achievement: "成果",
serviceDemand: "服务需求",

View File

@ -1,6 +1,4 @@
const broker = {
// 首页 服务管理 我服务的企业 技术需求列表 匹配结果 发布需求 更新状态 企业需求匹配 企业需求匹配详情 账号管理 基本资料 账单管理 账单列表
// 俄语
home: "Главная",
serviceManagement: "Управление услугами",
myServiceEnterprise: "Компании, которым я оказываю услуги",

View File

@ -1,5 +1,4 @@
const broker = {
// 首页 服务管理 我服务的企业 技术需求列表 匹配结果 发布需求 更新状态 企业需求匹配 企业需求匹配详情 账号管理 基本资料 账单管理 账单列表
home: "首页",
serviceManagement: "服务管理",
myServiceEnterprise: "我服务的企业",

View File

@ -1,39 +1,21 @@
const expert = {
// 首页
home: "Главная",
// 账号管理
accountManagement: "Управление аккаунтом",
// 基本资料
basicInformation: "Основная информация",
// 技术管理
technicalManagement: "Управление технологиями",
// 成果列表
achievementList: "Список результатов",
// 发布成果
publishAchievement: "Опубликовать результат",
// 匹配结果
matchingResults: "Результаты сопоставления",
// 专利列表
patentList: "Список патентов",
// 认领专利
claimPatent: "Заявить патент",
// 论文列表
paperList: "Список статей",
// 科研项目列表
researchProjectList: "Список научно-исследовательских проектов",
// 需求管理
demandManagement: "Управление спросом",
// 服务需求
serviceDemand: "Спрос на услуги",
// 发布需求
publishDemand: "Опубликовать спрос",
// 已合作企业
cooperatedCompany: "Сотрудничающие компании",
// 想合作企业
wantCooperateCompany: "Желающие сотрудничать компании",
// 活动管理
activityManagement: "Управление мероприятиями",
// 活动列表
activityList: "Список мероприятий",
};

View File

@ -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;

View File

@ -1,33 +1,18 @@
const lab = {
// 首页
home: "Главная",
// 账号管理
accountManagement: "Управление аккаунтом",
// 基本资料
basicInformation: "Основная информация",
// 科研管理
researchManagement: "Управление научными исследованиями",
// 专利列表
patentList: "Список патентов",
// 成果列表
achievementList: "Список результатов",
// 专家成果
expertAchievement: "Результаты экспертов",
// 实验室成果
labAchievement: "Результаты лаборатории",
// 服务需求列表
serviceDemandList: "Список спроса на услуги",
// 查看需求
viewDemand: "Просмотреть спрос",
// 专家列表
expertList: "Список экспертов",
// 科研项目列表
researchProjectList: "Список научно-исследовательских проектов",
// 论文列表
paperList: "Список статей",
// 浏览单位信息
browseInformation: "Информация о просмотре",
// 实验设备
experimentalEquipment: "Экспериментальное оборудование",
viewUnitInformation: "Информация о просмотре",
};

View File

@ -1,33 +1,18 @@
const lab = {
// 首页
home: "首页",
// 账号管理
accountManagement: "账号管理",
// 基本资料
basicInformation: "基本资料",
// 科研管理
researchManagement: "科研管理",
// 专利列表
patentList: "专利列表",
// 成果列表
achievementList: "成果列表",
// 专家成果
expertAchievement: "专家成果",
// 实验室成果
labAchievement: "实验室成果",
// 服务需求列表
serviceDemandList: "服务需求列表",
// 查看需求
viewDemand: "查看需求",
// 专家列表
expertList: "专家列表",
// 科研项目列表
researchProjectList: "科研项目列表",
// 论文列表
paperList: "论文列表",
// 浏览单位信息
browseInformation: "浏览单位信息",
// 实验设备
experimentalEquipment: "实验设备",
viewUnitInformation: "浏览单位信息",
};

View File

@ -1,35 +1,19 @@
const research = {
// 首页
home: "Главная",
// 账号管理
accountManagement: "Управление аккаунтом",
// 基本资料
basicInformation: "Основная информация",
// 科研管理
researchManagement: "Управление научными исследованиями",
// 专利列表
patentList: "Список патентов",
// 成果列表
achievementList: "Список результатов",
// 服务需求列表
serviceDemandList: "Список спроса на услуги",
// 查看需求
viewDemand: "Просмотреть спрос",
// 专家列表
expertList: "Список экспертов",
// 科研项目列表
researchProjectList: "Список научно-исследовательских проектов",
// 实验室列表
labList: "Список лабораторий",
// 修改实验室
modifyLab: "Изменить лабораторию",
// 客户足迹
customerFootprint: "Следы клиентов",
// 浏览数据
browsingData: "Данные о просмотре",
// 专家成果列表
expertAchievementList: "Список результатов экспертов",
// 科研机构成果列表
researchInstitutionAchievementList:
"Список результатов научно-исследовательских учреждений",
};

View File

@ -1,35 +1,19 @@
const research = {
// 首页
home: "首页",
// 账号管理
accountManagement: "账号管理",
// 基本资料
basicInformation: "基本资料",
// 科研管理
researchManagement: "科研管理",
// 专利列表
patentList: "专利列表",
// 成果列表
achievementList: "成果列表",
// 服务需求列表
serviceDemandList: "服务需求列表",
// 查看需求
viewDemand: "查看需求",
// 专家列表
expertList: "专家列表",
// 科研项目列表
researchProjectList: "科研项目列表",
// 实验室列表
labList: "实验室列表",
// 修改实验室
modifyLab: "修改实验室",
// 客户足迹
customerFootprint: "客户足迹",
// 浏览数据
browsingData: "浏览数据",
// 专家成果列表
expertAchievementList: "专家成果列表",
// 科研机构成果列表
researchInstitutionAchievementList: "科研机构成果列表",
};

View File

@ -1,5 +1,4 @@
const tags = {
// 刷新页面 关闭当前 关闭其他 关闭左侧 关闭右侧 全部关闭
refresh: "Обновить страницу",
closeCurrent: "Закрыть текущую",
closeOthers: "Закрыть другие",

View File

@ -1,5 +1,4 @@
const tags = {
// 刷新页面 关闭当前 关闭其他 关闭左侧 关闭右侧 全部关闭
refresh: "刷新页面",
closeCurrent: "关闭当前",
closeOthers: "关闭其他",

View File

@ -18,6 +18,10 @@ const webContact = {
unit: "единица",
unitEmpty: "Организация не может быть пустой",
unitPlaceholder: "Пожалуйста, введите название организации",
// 需求提交人不能为空 至少选择一个需求类别 需求预算不能为空
demandSubmit: "Представитель спроса не может быть пустым",
demandType: "Пожалуйста, выберите хотя бы один тип спроса",
demandBudget: "Бюджет спроса не может быть пустым",
};
export default webContact;

View File

@ -18,6 +18,10 @@ const webContact = {
unit: "单位",
unitEmpty: "所在单位不能为空",
unitPlaceholder: "请输入所在单位",
// 需求提交人不能为空 至少选择一个需求类别 需求预算不能为空
demandSubmit: "需求提交人不能为空",
demandType: "至少选择一个需求类别",
demandBudget: "需求预算不能为空",
};
export default webContact;

View File

@ -103,6 +103,9 @@ const webSearch = {
website: "Веб-сайт компании",
wechat: "WeChat",
pleaseSelectSearchKeyword: "Пожалуйста, выберите ключевое слово для поиска",
// 请输入技术需求内容和详细的技术指标
pleaseEnterTheContentOfTheTechnicalRequirementsAndTheDetailedTechnicalIndicators:
"Пожалуйста, введите содержание технических требований и подробные технические показатели",
};
export default webSearch;

View File

@ -103,5 +103,8 @@ const webSearch = {
webSite: "企业网址",
wechat: "微信同号",
pleaseSelectSearchKeyword: "请选择搜索关键词",
// 请输入技术需求内容和详细的技术指标
pleaseEnterTheContentOfTheTechnicalRequirementsAndTheDetailedTechnicalIndicators:
"请输入技术需求内容和详细的技术指标",
};
export default webSearch;

View File

@ -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;

View File

@ -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"

View File

@ -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,

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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="银行卡号">

View 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>
);
},
});

View File

@ -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>

View File

@ -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);
})

View File

@ -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();

View File

@ -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();

View File

@ -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>

View File

@ -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([]);

View File

@ -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" }],
},

View File

@ -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);
// // });
// }

View File

@ -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"

View File

@ -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);

View File

@ -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" });
};

View File

@ -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
>

View File

@ -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();

View File

@ -424,7 +424,7 @@ function submitForm() {
});
} else {
insertExpertCooperateEnterprise(form.value).then((response) => {
ElMessage.success("新增成功");
ElMessage.success(t("admin.common.addSuccess"));
open.value = false;
getList();
});

View File

@ -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");

View File

@ -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"

View File

@ -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;
}

View File

@ -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();

View File

@ -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();
}

View File

@ -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();
}

View File

@ -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>

View File

@ -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();
}

View File

@ -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;
});
});
};

View File

@ -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);

View File

@ -440,7 +440,7 @@ function submitForm() {
});
} else {
paperAdd(form.value).then((response) => {
ElMessage.success("新增成功");
ElMessage.success(t("admin.common.addSuccess"));
open.value = false;
getList();
});

View File

@ -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();
});

View File

@ -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();
// }

View File

@ -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" }],
},

View File

@ -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);
})

View File

@ -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: "请输入正确的手机号",
},*/
],
},
});

View File

@ -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;
});
});
};

View File

@ -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"));
});
}

View File

@ -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();
});

View File

@ -311,7 +311,7 @@ function submitForm() {
});
} else {
insertEquipment(form.value).then((response) => {
ElMessage.success("新增成功");
ElMessage.success(t("admin.common.addSuccess"));
open.value = false;
getList();
});

View File

@ -319,7 +319,7 @@ function submitForm() {
});
} else {
insertEquipment(form.value).then((response) => {
ElMessage.success("新增成功");
ElMessage.success(t("admin.common.addSuccess"));
open.value = false;
getList();
});

View File

@ -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();
});

View File

@ -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);
})

View File

@ -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);
})

View File

@ -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" }],
},

View File

@ -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);
})

View File

@ -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;

View File

@ -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("-"));

View File

@ -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
);
};

View File

@ -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>

View File

@ -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",
});

View File

@ -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 {

View File

@ -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();
});

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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();
});

View File

@ -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();
});

View File

@ -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();
});

View File

@ -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();
});

View File

@ -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();
});

View File

@ -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();
});

View File

@ -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