Merge branch 'devlopment' of http://pms.dtyx.net:3000/wuxueyu/Industrial-image-management-system---web into devlopment
This commit is contained in:
commit
66f6cce01b
|
@ -26,53 +26,52 @@ export const systemRoutes: RouteRecordRaw[] = [
|
||||||
// }
|
// }
|
||||||
// ],
|
// ],
|
||||||
// },
|
// },
|
||||||
{
|
// {
|
||||||
path: '/regulation',
|
// path: '/regulation',
|
||||||
name: 'Regulation',
|
// name: 'Regulation',
|
||||||
component: Layout,
|
// component: Layout,
|
||||||
redirect: '/regulation/system-regulation',
|
// redirect: '/regulation/system-regulation',
|
||||||
meta: { title: '制度管理', icon: 'file-text', hidden: false, sort: 1.5 },
|
// meta: { title: '制度管理', icon: 'file-text', hidden: false, sort: 1.5 },
|
||||||
children: [
|
// children: [
|
||||||
{
|
// {
|
||||||
path: '/regulation/system-regulation',
|
// path: '/regulation/system-regulation',
|
||||||
name: 'SystemRegulation',
|
// name: 'SystemRegulation',
|
||||||
component: () => import('@/views/regulation/repository.vue'),
|
// component: () => import('@/views/regulation/repository.vue'),
|
||||||
meta: { title: '制度公告', icon: 'file-text', hidden: false },
|
// meta: { title: '制度公告', icon: 'file-text', hidden: false },
|
||||||
},
|
// },
|
||||||
{
|
// {
|
||||||
path: '/regulation/process-management',
|
// path: '/regulation/process-management',
|
||||||
name: 'ProcessManagement',
|
// name: 'ProcessManagement',
|
||||||
component: () => import('@/views/regulation/confirm.vue'),
|
// component: () => import('@/views/regulation/confirm.vue'),
|
||||||
meta: { title: '制度公示', icon: 'workflow', hidden: false },
|
// meta: { title: '制度公示', icon: 'workflow', hidden: false },
|
||||||
},
|
// },
|
||||||
{
|
// {
|
||||||
path: '/regulation/proposal',
|
// path: '/regulation/proposal',
|
||||||
name: 'RegulationProposal',
|
// name: 'RegulationProposal',
|
||||||
component: () => import('@/views/regulation/proposal/index.vue'),
|
// component: () => import('@/views/regulation/proposal/index.vue'),
|
||||||
meta: { title: '制度提案', icon: 'edit', hidden: false },
|
// meta: { title: '制度提案', icon: 'edit', hidden: false },
|
||||||
},
|
// },
|
||||||
{
|
// {
|
||||||
path: '/regulation/type',
|
// path: '/regulation/type',
|
||||||
name: 'RegulationType',
|
// name: 'RegulationType',
|
||||||
component: () => import('@/views/regulation/type/index.vue'),
|
// component: () => import('@/views/regulation/type/index.vue'),
|
||||||
meta: { title: '制度类型', icon: 'tag', hidden: false },
|
// meta: { title: '制度类型', icon: 'tag', hidden: false },
|
||||||
},
|
// },
|
||||||
|
// ],
|
||||||
],
|
// },
|
||||||
},
|
|
||||||
{
|
{
|
||||||
path: '/organization',
|
path: '/organization',
|
||||||
name: 'Organization',
|
name: 'Organization',
|
||||||
component: Layout,
|
component: Layout,
|
||||||
redirect: '/organization/dept',
|
redirect: '/organization/dept',
|
||||||
meta: { title: '组织架构', icon: 'user-group', hidden: false, sort: 2 },
|
meta: { title: '企业管理', icon: 'user-group', hidden: false, sort: 2 },
|
||||||
children: [
|
children: [
|
||||||
{
|
// {
|
||||||
path: '/organization/user',
|
// path: '/organization/user',
|
||||||
name: 'OrganizationUser',
|
// name: 'OrganizationUser',
|
||||||
component: () => import('@/views/system/user/index.vue'),
|
// component: () => import('@/views/system/user/index.vue'),
|
||||||
meta: { title: '用户管理', icon: 'user', hidden: false, sort: 2.25 },
|
// meta: { title: '用户管理', icon: 'user', hidden: false, sort: 2.25 },
|
||||||
},
|
// },
|
||||||
{
|
{
|
||||||
path: '/organization/dept',
|
path: '/organization/dept',
|
||||||
name: 'OrganizationDept',
|
name: 'OrganizationDept',
|
||||||
|
@ -85,6 +84,39 @@ export const systemRoutes: RouteRecordRaw[] = [
|
||||||
component: () => import('@/views/system/post/index.vue'),
|
component: () => import('@/views/system/post/index.vue'),
|
||||||
meta: { title: '岗位管理', icon: 'nav', hidden: false, sort: 2.75 },
|
meta: { title: '岗位管理', icon: 'nav', hidden: false, sort: 2.75 },
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: '/regulation',
|
||||||
|
name: 'Regulation',
|
||||||
|
// component: Layout,
|
||||||
|
redirect: '/regulation/system-regulation',
|
||||||
|
meta: { title: '制度管理', icon: 'file-text', hidden: false, sort: 1.5 },
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: '/regulation/system-regulation',
|
||||||
|
name: 'SystemRegulation',
|
||||||
|
component: () => import('@/views/regulation/repository.vue'),
|
||||||
|
meta: { title: '制度公告', icon: 'file-text', hidden: false },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/regulation/process-management',
|
||||||
|
name: 'ProcessManagement',
|
||||||
|
component: () => import('@/views/regulation/confirm.vue'),
|
||||||
|
meta: { title: '制度公示', icon: 'workflow', hidden: false },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/regulation/proposal',
|
||||||
|
name: 'RegulationProposal',
|
||||||
|
component: () => import('@/views/regulation/proposal/index.vue'),
|
||||||
|
meta: { title: '制度提案', icon: 'edit', hidden: false },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/regulation/type',
|
||||||
|
name: 'RegulationType',
|
||||||
|
component: () => import('@/views/regulation/type/index.vue'),
|
||||||
|
meta: { title: '制度类型', icon: 'tag', hidden: false },
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
// {
|
// {
|
||||||
// path: '/organization/hr/workload',
|
// path: '/organization/hr/workload',
|
||||||
// name: 'HRWorkload',
|
// name: 'HRWorkload',
|
||||||
|
@ -296,98 +328,64 @@ export const systemRoutes: RouteRecordRaw[] = [
|
||||||
path: '/asset-management',
|
path: '/asset-management',
|
||||||
name: 'AssetManagement',
|
name: 'AssetManagement',
|
||||||
component: Layout,
|
component: Layout,
|
||||||
redirect: '/asset-management/device-management/device-center',
|
redirect: '/asset-management/device/inventory',
|
||||||
meta: { title: '资产管理', icon: 'property-safety', hidden: true, sort: 3 },
|
meta: { title: '资产管理', icon: 'property-safety', hidden: false, sort: 3 },
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: '/asset-management/device-management',
|
path: '/asset-management/intellectual-property1',
|
||||||
name: 'DeviceManagement',
|
name: 'IntellectualProperty1',
|
||||||
component: () => import('@/components/ParentView/index.vue'),
|
component: () => import('@/views/system-resource/information-system/software-management/index.vue'),
|
||||||
redirect: '/asset-management/device-management/device-center',
|
meta: { title: '设备管理', icon: 'copyright', hidden: false },
|
||||||
meta: {
|
|
||||||
title: '设备管理',
|
|
||||||
icon: 'device',
|
|
||||||
hidden: false,
|
|
||||||
},
|
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: '/asset-management/device-management/device-center',
|
path: '/asset-management/intellectual-property1',
|
||||||
name: 'DeviceCenter',
|
name: 'IntellectualProperty11',
|
||||||
component: () => import('@/views/system-resource/device-management/index.vue'),
|
component: () => import('@/views/system-resource/information-system/software-management/index.vue'),
|
||||||
meta: {
|
meta: { title: '库存管理', hidden: false },
|
||||||
title: '设备中心',
|
|
||||||
icon: 'appstore',
|
|
||||||
hidden: false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/asset-management/device-management/device-detail/:id',
|
path: '/asset-management/intellectual-property1',
|
||||||
name: 'DeviceDetail',
|
name: 'IntellectualProperty12',
|
||||||
component: () => import('@/views/system-resource/device-management/detail.vue'),
|
component: () => import('@/views/system-resource/information-system/software-management/index.vue'),
|
||||||
meta: {
|
meta: { title: '设备采购', hidden: false },
|
||||||
title: '设备详情',
|
|
||||||
icon: 'info-circle',
|
|
||||||
hidden: true,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/asset-management/device-management/procurement',
|
path: '/asset-management/intellectual-property1',
|
||||||
name: 'DeviceProcurement',
|
name: 'IntellectualProperty13',
|
||||||
component: () => import('@/views/system-resource/device-management/procurement/index.vue'),
|
component: () => import('@/views/system-resource/information-system/software-management/index.vue'),
|
||||||
meta: {
|
meta: { title: '在线管理', hidden: false },
|
||||||
title: '设备采购',
|
|
||||||
icon: 'shopping-cart',
|
|
||||||
hidden: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/asset-management/device-management/online',
|
|
||||||
name: 'DeviceOnline',
|
|
||||||
component: () => import('@/components/ParentView/index.vue'),
|
|
||||||
redirect: '/asset-management/device-management/online/drone',
|
|
||||||
meta: {
|
|
||||||
title: '在线管理',
|
|
||||||
icon: 'cloud',
|
|
||||||
hidden: false,
|
|
||||||
},
|
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: '/asset-management/device-management/online/drone',
|
path: '/asset-management/intellectual-property11',
|
||||||
name: 'DeviceDrone',
|
name: 'IntellectualProperty14',
|
||||||
component: () => import('@/views/system-resource/device-management/index.vue'),
|
component: () => import('@/views/system-resource/information-system/software-management/index.vue'),
|
||||||
meta: {
|
meta: { title: '无人机', hidden: false },
|
||||||
title: '无人机',
|
|
||||||
icon: 'drone',
|
|
||||||
hidden: false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/asset-management/device-management/online/nest',
|
path: '/asset-management/intellectual-property12',
|
||||||
name: 'DeviceNest',
|
name: 'IntellectualProperty15',
|
||||||
component: () => import('@/views/system-resource/device-management/index.vue'),
|
component: () => import('@/views/system-resource/information-system/software-management/index.vue'),
|
||||||
meta: {
|
meta: { title: '机巢', hidden: false },
|
||||||
title: '机巢',
|
|
||||||
icon: 'nest',
|
|
||||||
hidden: false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/asset-management/device-management/online/smart-terminal',
|
path: '/asset-management/intellectual-property13',
|
||||||
name: 'DeviceSmartTerminal',
|
name: 'IntellectualProperty16',
|
||||||
component: () => import('@/views/system-resource/device-management/index.vue'),
|
component: () => import('@/views/system-resource/information-system/software-management/index.vue'),
|
||||||
meta: {
|
meta: { title: '其他智能终端', hidden: false },
|
||||||
title: '其他智能终端',
|
},
|
||||||
icon: 'terminal',
|
{
|
||||||
hidden: false,
|
path: '/asset-management/intellectual-property14',
|
||||||
},
|
name: 'IntellectualProperty17',
|
||||||
|
component: () => import('@/views/system-resource/information-system/software-management/index.vue'),
|
||||||
|
meta: { title: '车辆管理', hidden: false },
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/asset-management/other-assets',
|
path: '/asset-management/intellectual-property',
|
||||||
name: 'OtherAssets',
|
name: 'IntellectualProperty',
|
||||||
component: () => import('@/views/system-resource/information-system/software-management/index.vue'),
|
component: () => import('@/views/system-resource/information-system/software-management/index.vue'),
|
||||||
meta: { title: '其他资产', icon: 'copyright', hidden: false },
|
meta: { title: '其他资产', icon: 'copyright', hidden: false },
|
||||||
},
|
},
|
||||||
|
@ -535,99 +533,86 @@ export const systemRoutes: RouteRecordRaw[] = [
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/project-management',
|
path: '/project-marketing',
|
||||||
name: 'ProjectManagement',
|
name: 'Projectmarketing',
|
||||||
component: Layout,
|
component: Layout,
|
||||||
redirect: '/project-management/project-template/project-management',
|
redirect: '/project-marketing/project-marketing',
|
||||||
meta: { title: '项目管理', icon: 'apps', hidden: false, sort: 4 },
|
meta: { title: '营销管理', icon: 'file-text', hidden: false, sort: 3 },
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: '/project-management/contract/project-source',
|
path: '/project-marketing/contract/revenue-contract2',
|
||||||
name: 'ProjectSource',
|
name: 'RevenueContract2',
|
||||||
|
component: () => import('@/views/default/error/404.vue'),
|
||||||
|
meta: {
|
||||||
|
title: '市场营销(N)',
|
||||||
|
icon: 'dollar',
|
||||||
|
hidden: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/project-marketing/contract/procurement-business',
|
||||||
|
name: 'ProcurementBusiness',
|
||||||
component: () => import('@/components/ParentView/index.vue'),
|
component: () => import('@/components/ParentView/index.vue'),
|
||||||
meta: {
|
meta: {
|
||||||
title: '项目来源',
|
title: '招采业务',
|
||||||
icon: 'dollar',
|
icon: 'dollar',
|
||||||
hidden: false,
|
hidden: false,
|
||||||
},
|
},
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: '/project-management/contract/procurement-business',
|
path: '/project-marketing/project-template/tender-documents',
|
||||||
name: 'ProcurementBusiness',
|
name: 'TenderDocuments',
|
||||||
component: () => import('@/components/ParentView/index.vue'),
|
component: () => import('@/views/project-management/bidding/tender-documents/index.vue'),
|
||||||
meta: {
|
meta: {
|
||||||
title: '招采业务',
|
title: '招标文件',
|
||||||
icon: 'dollar',
|
icon: 'file-text',
|
||||||
hidden: false,
|
|
||||||
},
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
path: '/project-management/project-template/tender-documents',
|
|
||||||
name: 'TenderDocuments',
|
|
||||||
component: () => import('@/views/project-management/bidding/tender-documents/index.vue'),
|
|
||||||
meta: {
|
|
||||||
title: '招标文件',
|
|
||||||
icon: 'file-text',
|
|
||||||
hidden: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/project-management/project-template/bid-documents',
|
|
||||||
name: 'BidDocuments',
|
|
||||||
component: () => import('@/views/project-management/bidding/bid-documents/index.vue'),
|
|
||||||
meta: {
|
|
||||||
title: '投标文件',
|
|
||||||
icon: 'file-text',
|
|
||||||
hidden: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/project-management/project-template/award-notice',
|
|
||||||
name: 'AwardNotice',
|
|
||||||
component: () => import('@/views/project-management/bidding/award-notice/index.vue'),
|
|
||||||
meta: {
|
|
||||||
title: '中标通知书',
|
|
||||||
icon: 'trophy',
|
|
||||||
hidden: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/project-management/project-template/information-retrieval',
|
|
||||||
name: 'InformationRetrieval',
|
|
||||||
component: () => import ('@/views/project-management/bidding/information-retrieval/index.vue'),
|
|
||||||
meta: {
|
|
||||||
title: '信息检索(N)',
|
|
||||||
icon: 'trophy',
|
|
||||||
hidden: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/project-management/contract/revenue-contract2',
|
|
||||||
name: 'RevenueContract2',
|
|
||||||
component: () => import('@/views/default/error/404.vue'),
|
|
||||||
meta: {
|
|
||||||
title: '市场营销(N)',
|
|
||||||
icon: 'dollar',
|
|
||||||
hidden: false,
|
hidden: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/project-management/project-source/privateproject',
|
path: '/project-marketing/project-template/bid-documents',
|
||||||
name: 'PrivateProject',
|
name: 'BidDocuments',
|
||||||
component: () => import('@/views/default/error/404.vue'),
|
component: () => import('@/views/project-management/bidding/bid-documents/index.vue'),
|
||||||
meta: {
|
meta: {
|
||||||
title: '自建项目(N)',
|
title: '投标文件',
|
||||||
icon: 'dollar',
|
icon: 'file-text',
|
||||||
|
hidden: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/project-marketing/project-template/award-notice',
|
||||||
|
name: 'AwardNotice',
|
||||||
|
component: () => import('@/views/project-management/bidding/award-notice/index.vue'),
|
||||||
|
meta: {
|
||||||
|
title: '中标通知书',
|
||||||
|
icon: 'trophy',
|
||||||
|
hidden: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/project-marketing/project-template/information-retrieval',
|
||||||
|
name: 'InformationRetrieval',
|
||||||
|
component: () => import ('@/views/project-management/bidding/information-retrieval/index.vue'),
|
||||||
|
meta: {
|
||||||
|
title: '信息检索(N)',
|
||||||
|
icon: 'trophy',
|
||||||
hidden: false,
|
hidden: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: '/project-marketing/order-management/order-management',
|
||||||
|
name: 'OrderManagement',
|
||||||
|
component: () => import('@/views/project-management/order-management/index.vue'),
|
||||||
|
meta: {
|
||||||
|
title: '订单管理',
|
||||||
|
icon: 'file-text',
|
||||||
|
hidden: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
{ path: '/project-management/contract', name: 'ProjectContract', component: () => import('@/components/ParentView/index.vue'), redirect: '/project-management/contract/revenue-contract', meta: {
|
{ path: '/project-management/contract', name: 'ProjectContract', component: () => import('@/components/ParentView/index.vue'), redirect: '/project-management/contract/revenue-contract', meta: {
|
||||||
title: '项目合同',
|
title: '合同管理',
|
||||||
icon: 'file-text',
|
icon: 'file-text',
|
||||||
hidden: false,
|
hidden: false,
|
||||||
}, children: [
|
}, children: [
|
||||||
|
@ -662,6 +647,136 @@ export const systemRoutes: RouteRecordRaw[] = [
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
] },
|
] },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/project-management',
|
||||||
|
name: 'ProjectManagement',
|
||||||
|
component: Layout,
|
||||||
|
redirect: '/project-management/project-template/project-management',
|
||||||
|
meta: { title: '项目管理', icon: 'apps', hidden: false, sort: 4 },
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: '/project-management/contract/project-source',
|
||||||
|
name: 'ProjectSource',
|
||||||
|
component: () => import('@/components/ParentView/index.vue'),
|
||||||
|
meta: {
|
||||||
|
title: '项目来源',
|
||||||
|
icon: 'dollar',
|
||||||
|
hidden: false,
|
||||||
|
},
|
||||||
|
children: [
|
||||||
|
// {
|
||||||
|
// path: '/project-management/contract/procurement-business',
|
||||||
|
// name: 'ProcurementBusiness',
|
||||||
|
// component: () => import('@/components/ParentView/index.vue'),
|
||||||
|
// meta: {
|
||||||
|
// title: '招采业务',
|
||||||
|
// icon: 'dollar',
|
||||||
|
// hidden: false,
|
||||||
|
// },
|
||||||
|
// children: [
|
||||||
|
// {
|
||||||
|
// path: '/project-management/project-template/tender-documents',
|
||||||
|
// name: 'TenderDocuments',
|
||||||
|
// component: () => import('@/views/project-management/bidding/tender-documents/index.vue'),
|
||||||
|
// meta: {
|
||||||
|
// title: '招标文件',
|
||||||
|
// icon: 'file-text',
|
||||||
|
// hidden: false,
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// path: '/project-management/project-template/bid-documents',
|
||||||
|
// name: 'BidDocuments',
|
||||||
|
// component: () => import('@/views/project-management/bidding/bid-documents/index.vue'),
|
||||||
|
// meta: {
|
||||||
|
// title: '投标文件',
|
||||||
|
// icon: 'file-text',
|
||||||
|
// hidden: false,
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// path: '/project-management/project-template/award-notice',
|
||||||
|
// name: 'AwardNotice',
|
||||||
|
// component: () => import('@/views/project-management/bidding/award-notice/index.vue'),
|
||||||
|
// meta: {
|
||||||
|
// title: '中标通知书',
|
||||||
|
// icon: 'trophy',
|
||||||
|
// hidden: false,
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// path: '/project-management/project-template/information-retrieval',
|
||||||
|
// name: 'InformationRetrieval',
|
||||||
|
// component: () => import ('@/views/project-management/bidding/information-retrieval/index.vue'),
|
||||||
|
// meta: {
|
||||||
|
// title: '信息检索(N)',
|
||||||
|
// icon: 'trophy',
|
||||||
|
// hidden: false,
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
//
|
||||||
|
// ],
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// path: '/project-management/contract/revenue-contract2',
|
||||||
|
// name: 'RevenueContract2',
|
||||||
|
// component: () => import('@/views/default/error/404.vue'),
|
||||||
|
// meta: {
|
||||||
|
// title: '市场营销(N)',
|
||||||
|
// icon: 'dollar',
|
||||||
|
// hidden: false,
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
{
|
||||||
|
path: '/project-management/project-source/privateproject',
|
||||||
|
name: 'PrivateProject',
|
||||||
|
component: () => import('@/views/default/error/404.vue'),
|
||||||
|
meta: {
|
||||||
|
title: '自建项目(N)',
|
||||||
|
icon: 'dollar',
|
||||||
|
hidden: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
// { path: '/project-management/contract', name: 'ProjectContract', component: () => import('@/components/ParentView/index.vue'), redirect: '/project-management/contract/revenue-contract', meta: {
|
||||||
|
// title: '项目合同',
|
||||||
|
// icon: 'file-text',
|
||||||
|
// hidden: false,
|
||||||
|
// }, children: [
|
||||||
|
// {
|
||||||
|
// path: '/project-management/contract/revenue-contract',
|
||||||
|
// name: 'RevenueContract',
|
||||||
|
// component: () => import('@/views/project-management/contract/revenue-contract/index.vue'),
|
||||||
|
// meta: {
|
||||||
|
// title: '收入合同',
|
||||||
|
// icon: 'dollar',
|
||||||
|
// hidden: false,
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// path: '/project-management/contract/expense-contract',
|
||||||
|
// name: 'ExpenseContract',
|
||||||
|
// component: () => import('@/views/project-management/contract/expense-contract/index.vue'),
|
||||||
|
// meta: {
|
||||||
|
// title: '支出合同',
|
||||||
|
// icon: 'credit-card',
|
||||||
|
// hidden: false,
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// path: '/project-management/contract/cost-management',
|
||||||
|
// name: 'CostManagement',
|
||||||
|
// component: () => import('@/views/project-management/contract/cost-management/index.vue'),
|
||||||
|
// meta: {
|
||||||
|
// title: '成本费用',
|
||||||
|
// icon: 'bar-chart',
|
||||||
|
// hidden: false,
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// ] },
|
||||||
{
|
{
|
||||||
path: '/project-management/project-template/project-aproval',
|
path: '/project-management/project-template/project-aproval',
|
||||||
name: 'ProjectTemplate',
|
name: 'ProjectTemplate',
|
||||||
|
@ -737,7 +852,26 @@ export const systemRoutes: RouteRecordRaw[] = [
|
||||||
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
// 添加商务知识库
|
||||||
|
{
|
||||||
|
path: '/bussiness-knowledge',
|
||||||
|
name: 'bussinesskonwledge',
|
||||||
|
component: Layout,
|
||||||
|
redirect: '/bussiness-knowledge/data',
|
||||||
|
meta: { title: '商务资料知识库', icon: 'message', hidden: false, sort: 6 },
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: '/bussiness-konwledge/data',
|
||||||
|
name: 'bussiness-knowledge',
|
||||||
|
component: () => import('@/views/bussiness-data/bussiness.vue'),
|
||||||
|
meta: {
|
||||||
|
title: '商务数据库信息',
|
||||||
|
icon: 'info-circle',
|
||||||
|
hidden: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: 'project-management/project-implementation/',
|
path: 'project-management/project-implementation/',
|
||||||
name: 'Project-Implementation',
|
name: 'Project-Implementation',
|
||||||
|
@ -1032,26 +1166,6 @@ export const systemRoutes: RouteRecordRaw[] = [
|
||||||
},
|
},
|
||||||
// ],
|
// ],
|
||||||
// },
|
// },
|
||||||
// 商务数据库信息模块
|
|
||||||
{
|
|
||||||
path: '/business-knowledge',
|
|
||||||
name: 'BusinessKnowledge',
|
|
||||||
component: Layout,
|
|
||||||
redirect: '/business-knowledge/data',
|
|
||||||
meta: { title: '商务数据库信息', icon: 'database', hidden: false, sort: 5.5 },
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
path: '/business-knowledge/data',
|
|
||||||
name: 'BusinessKnowledgeData',
|
|
||||||
component: () => import('@/views/bussiness-data/bussiness.vue'),
|
|
||||||
meta: {
|
|
||||||
title: '商务数据库信息',
|
|
||||||
icon: 'info-circle',
|
|
||||||
hidden: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
path: '/chat-platform',
|
path: '/chat-platform',
|
||||||
name: 'ChatPlatform',
|
name: 'ChatPlatform',
|
||||||
|
@ -1071,30 +1185,30 @@ export const systemRoutes: RouteRecordRaw[] = [
|
||||||
// }
|
// }
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
// {
|
||||||
path: '/user/profile',
|
// path: '/user/profile',
|
||||||
name: 'UserProfile',
|
// name: 'UserProfile',
|
||||||
component: Layout,
|
// component: Layout,
|
||||||
redirect: '/user/profile',
|
// redirect: '/user/profile',
|
||||||
meta: {
|
// meta: {
|
||||||
title: '个人中心',
|
// title: '个人中心',
|
||||||
icon: 'user',
|
// icon: 'user',
|
||||||
hidden: false,
|
// hidden: false,
|
||||||
sort: 100,
|
// sort: 100,
|
||||||
},
|
// },
|
||||||
children: [
|
// children: [
|
||||||
{
|
// {
|
||||||
path: '/user/profile',
|
// path: '/user/profile',
|
||||||
name: 'UsersProfile',
|
// name: 'UsersProfile',
|
||||||
component: () => import('@/views/user/profile/index.vue'),
|
// component: () => import('@/views/user/profile/index.vue'),
|
||||||
meta: {
|
// meta: {
|
||||||
title: '个人中心',
|
// title: '个人中心',
|
||||||
icon: 'user',
|
// icon: 'user',
|
||||||
hidden: false,
|
// hidden: false,
|
||||||
},
|
// },
|
||||||
},
|
// },
|
||||||
],
|
// ],
|
||||||
},
|
// },
|
||||||
{
|
{
|
||||||
path: '/enterprise-settings',
|
path: '/enterprise-settings',
|
||||||
name: 'EnterpriseSettings',
|
name: 'EnterpriseSettings',
|
||||||
|
@ -1193,25 +1307,6 @@ export const systemRoutes: RouteRecordRaw[] = [
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
|
||||||
path: '/training',
|
|
||||||
name: 'Training',
|
|
||||||
component: Layout,
|
|
||||||
redirect: '/training/plan',
|
|
||||||
meta: { title: '培训管理', icon: 'book', hidden: false, sort: 9 },
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
path: '/training/plan',
|
|
||||||
name: 'TrainingPlan',
|
|
||||||
component: () => import('@/views/training/plan/index.vue'),
|
|
||||||
meta: {
|
|
||||||
title: '培训计划',
|
|
||||||
icon: 'calendar',
|
|
||||||
hidden: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
path: '/system-resource',
|
path: '/system-resource',
|
||||||
name: 'SystemResource',
|
name: 'SystemResource',
|
||||||
|
|
|
@ -149,6 +149,20 @@ const storeSetup = () => {
|
||||||
isHidden: false,
|
isHidden: false,
|
||||||
sort: 3,
|
sort: 3,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: 1070,
|
||||||
|
parentId: 1000,
|
||||||
|
title: '个人中心',
|
||||||
|
type: 2,
|
||||||
|
path: '/user/profile',
|
||||||
|
name: 'UserProfile',
|
||||||
|
component: 'user/profile/index',
|
||||||
|
icon: 'user',
|
||||||
|
isExternal: false,
|
||||||
|
isCache: false,
|
||||||
|
isHidden: false,
|
||||||
|
sort: 4,
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -70,6 +70,6 @@ declare global {
|
||||||
// for type re-export
|
// for type re-export
|
||||||
declare global {
|
declare global {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
export type { Component, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue'
|
export type { Component, ComponentPublicInstance, ComputedRef, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, VNode, WritableComputedRef } from 'vue'
|
||||||
import('vue')
|
import('vue')
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,66 +7,7 @@ export {}
|
||||||
|
|
||||||
declare module 'vue' {
|
declare module 'vue' {
|
||||||
export interface GlobalComponents {
|
export interface GlobalComponents {
|
||||||
Avatar: typeof import('./../components/Avatar/index.vue')['default']
|
|
||||||
Breadcrumb: typeof import('./../components/Breadcrumb/index.vue')['default']
|
|
||||||
CellCopy: typeof import('./../components/CellCopy/index.vue')['default']
|
|
||||||
Chart: typeof import('./../components/Chart/index.vue')['default']
|
|
||||||
ColumnSetting: typeof import('./../components/GiTable/src/components/ColumnSetting.vue')['default']
|
|
||||||
CronForm: typeof import('./../components/GenCron/CronForm/index.vue')['default']
|
|
||||||
CronModal: typeof import('./../components/GenCron/CronModal/index.vue')['default']
|
|
||||||
DateRangePicker: typeof import('./../components/DateRangePicker/index.vue')['default']
|
|
||||||
DayForm: typeof import('./../components/GenCron/CronForm/component/day-form.vue')['default']
|
|
||||||
FilePreview: typeof import('./../components/FilePreview/index.vue')['default']
|
|
||||||
GiCellAvatar: typeof import('./../components/GiCell/GiCellAvatar.vue')['default']
|
|
||||||
GiCellGender: typeof import('./../components/GiCell/GiCellGender.vue')['default']
|
|
||||||
GiCellStatus: typeof import('./../components/GiCell/GiCellStatus.vue')['default']
|
|
||||||
GiCellTag: typeof import('./../components/GiCell/GiCellTag.vue')['default']
|
|
||||||
GiCellTags: typeof import('./../components/GiCell/GiCellTags.vue')['default']
|
|
||||||
GiCodeView: typeof import('./../components/GiCodeView/index.vue')['default']
|
|
||||||
GiDot: typeof import('./../components/GiDot/index.tsx')['default']
|
|
||||||
GiEditTable: typeof import('./../components/GiEditTable/GiEditTable.vue')['default']
|
|
||||||
GiFooter: typeof import('./../components/GiFooter/index.vue')['default']
|
|
||||||
GiForm: typeof import('./../components/GiForm/src/GiForm.vue')['default']
|
|
||||||
GiIconBox: typeof import('./../components/GiIconBox/index.vue')['default']
|
|
||||||
GiIconSelector: typeof import('./../components/GiIconSelector/index.vue')['default']
|
|
||||||
GiIframe: typeof import('./../components/GiIframe/index.vue')['default']
|
|
||||||
GiOption: typeof import('./../components/GiOption/index.vue')['default']
|
|
||||||
GiOptionItem: typeof import('./../components/GiOptionItem/index.vue')['default']
|
|
||||||
GiPageLayout: typeof import('./../components/GiPageLayout/index.vue')['default']
|
|
||||||
GiSpace: typeof import('./../components/GiSpace/index.vue')['default']
|
|
||||||
GiSplitButton: typeof import('./../components/GiSplitButton/index.vue')['default']
|
|
||||||
GiSplitPane: typeof import('./../components/GiSplitPane/index.vue')['default']
|
|
||||||
GiSplitPaneFlexibleBox: typeof import('./../components/GiSplitPane/components/GiSplitPaneFlexibleBox.vue')['default']
|
|
||||||
GiSvgIcon: typeof import('./../components/GiSvgIcon/index.vue')['default']
|
|
||||||
GiTable: typeof import('./../components/GiTable/src/GiTable.vue')['default']
|
|
||||||
GiTag: typeof import('./../components/GiTag/index.tsx')['default']
|
|
||||||
GiThemeBtn: typeof import('./../components/GiThemeBtn/index.vue')['default']
|
|
||||||
HourForm: typeof import('./../components/GenCron/CronForm/component/hour-form.vue')['default']
|
|
||||||
Icon403: typeof import('./../components/icons/Icon403.vue')['default']
|
|
||||||
Icon404: typeof import('./../components/icons/Icon404.vue')['default']
|
|
||||||
Icon500: typeof import('./../components/icons/Icon500.vue')['default']
|
|
||||||
IconBorders: typeof import('./../components/icons/IconBorders.vue')['default']
|
|
||||||
IconTableSize: typeof import('./../components/icons/IconTableSize.vue')['default']
|
|
||||||
IconTreeAdd: typeof import('./../components/icons/IconTreeAdd.vue')['default']
|
|
||||||
IconTreeReduce: typeof import('./../components/icons/IconTreeReduce.vue')['default']
|
|
||||||
ImageImport: typeof import('./../components/ImageImport/index.vue')['default']
|
|
||||||
ImageImportWizard: typeof import('./../components/ImageImportWizard/index.vue')['default']
|
|
||||||
IndustrialImageList: typeof import('./../components/IndustrialImageList/index.vue')['default']
|
|
||||||
JsonPretty: typeof import('./../components/JsonPretty/index.vue')['default']
|
|
||||||
MinuteForm: typeof import('./../components/GenCron/CronForm/component/minute-form.vue')['default']
|
|
||||||
MonthForm: typeof import('./../components/GenCron/CronForm/component/month-form.vue')['default']
|
|
||||||
ParentView: typeof import('./../components/ParentView/index.vue')['default']
|
|
||||||
RouterLink: typeof import('vue-router')['RouterLink']
|
RouterLink: typeof import('vue-router')['RouterLink']
|
||||||
RouterView: typeof import('vue-router')['RouterView']
|
RouterView: typeof import('vue-router')['RouterView']
|
||||||
SecondForm: typeof import('./../components/GenCron/CronForm/component/second-form.vue')['default']
|
|
||||||
SplitPanel: typeof import('./../components/SplitPanel/index.vue')['default']
|
|
||||||
TextCopy: typeof import('./../components/TextCopy/index.vue')['default']
|
|
||||||
TurbineGrid: typeof import('./../components/TurbineGrid/index.vue')['default']
|
|
||||||
UserSelect: typeof import('./../components/UserSelect/index.vue')['default']
|
|
||||||
Verify: typeof import('./../components/Verify/index.vue')['default']
|
|
||||||
VerifyPoints: typeof import('./../components/Verify/Verify/VerifyPoints.vue')['default']
|
|
||||||
VerifySlide: typeof import('./../components/Verify/Verify/VerifySlide.vue')['default']
|
|
||||||
WeekForm: typeof import('./../components/GenCron/CronForm/component/week-form.vue')['default']
|
|
||||||
YearForm: typeof import('./../components/GenCron/CronForm/component/year-form.vue')['default']
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
|
||||||
|
</style>
|
|
@ -32,6 +32,21 @@
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
<!-- 基本信息 -->
|
<!-- 基本信息 -->
|
||||||
<div v-show="activeTab === 'basic'">
|
<div v-show="activeTab === 'basic'">
|
||||||
|
<!-- 测试数据按钮 -->
|
||||||
|
<div v-if="!isView" class="test-data-section">
|
||||||
|
<div class="test-data-header">
|
||||||
|
<span class="test-data-title">🧪 测试数据</span>
|
||||||
|
<span class="test-data-desc">点击按钮快速填入测试数据,方便功能测试</span>
|
||||||
|
</div>
|
||||||
|
<a-button
|
||||||
|
type="primary"
|
||||||
|
size="small"
|
||||||
|
@click="fillTestData"
|
||||||
|
>
|
||||||
|
📝 填入测试数据
|
||||||
|
</a-button>
|
||||||
|
</div>
|
||||||
|
|
||||||
<a-row :gutter="16">
|
<a-row :gutter="16">
|
||||||
<a-col :span="12">
|
<a-col :span="12">
|
||||||
<a-form-item label="设备名称" field="equipmentName">
|
<a-form-item label="设备名称" field="equipmentName">
|
||||||
|
@ -173,10 +188,10 @@
|
||||||
<a-form-item label="总价" field="totalPrice">
|
<a-form-item label="总价" field="totalPrice">
|
||||||
<a-input-number
|
<a-input-number
|
||||||
v-model="formData.totalPrice"
|
v-model="formData.totalPrice"
|
||||||
placeholder="请输入总价"
|
placeholder="自动计算"
|
||||||
:precision="2"
|
:precision="2"
|
||||||
:min="0"
|
:min="0"
|
||||||
:disabled="isView"
|
:disabled="true"
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
/>
|
/>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
|
@ -219,6 +234,8 @@
|
||||||
:disabled="isView"
|
:disabled="isView"
|
||||||
show-time
|
show-time
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
|
format="YYYY-MM-DD HH:mm:ss"
|
||||||
|
value-format="YYYY-MM-DD HH:mm:ss"
|
||||||
/>
|
/>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
|
@ -230,6 +247,8 @@
|
||||||
:disabled="isView"
|
:disabled="isView"
|
||||||
show-time
|
show-time
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
|
format="YYYY-MM-DD HH:mm:ss"
|
||||||
|
value-format="YYYY-MM-DD HH:mm:ss"
|
||||||
/>
|
/>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
|
@ -244,6 +263,8 @@
|
||||||
:disabled="isView"
|
:disabled="isView"
|
||||||
show-time
|
show-time
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
|
format="YYYY-MM-DD HH:mm:ss"
|
||||||
|
value-format="YYYY-MM-DD HH:mm:ss"
|
||||||
/>
|
/>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
|
@ -253,7 +274,10 @@
|
||||||
v-model="formData.expectedScrapTime"
|
v-model="formData.expectedScrapTime"
|
||||||
placeholder="请选择预计报废时间"
|
placeholder="请选择预计报废时间"
|
||||||
:disabled="isView"
|
:disabled="isView"
|
||||||
|
show-time
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
|
format="YYYY-MM-DD HH:mm:ss"
|
||||||
|
value-format="YYYY-MM-DD HH:mm:ss"
|
||||||
/>
|
/>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
|
@ -306,7 +330,10 @@
|
||||||
v-model="formData.warrantyExpireDate"
|
v-model="formData.warrantyExpireDate"
|
||||||
placeholder="请选择保修截止日期"
|
placeholder="请选择保修截止日期"
|
||||||
:disabled="isView"
|
:disabled="isView"
|
||||||
|
show-time
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
|
format="YYYY-MM-DD HH:mm:ss"
|
||||||
|
value-format="YYYY-MM-DD HH:mm:ss"
|
||||||
/>
|
/>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
|
@ -418,7 +445,10 @@
|
||||||
v-model="formData.lastMaintenanceDate"
|
v-model="formData.lastMaintenanceDate"
|
||||||
placeholder="请选择上次维护日期"
|
placeholder="请选择上次维护日期"
|
||||||
:disabled="isView"
|
:disabled="isView"
|
||||||
|
show-time
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
|
format="YYYY-MM-DD HH:mm:ss"
|
||||||
|
value-format="YYYY-MM-DD HH:mm:ss"
|
||||||
/>
|
/>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
|
@ -428,7 +458,10 @@
|
||||||
v-model="formData.nextMaintenanceDate"
|
v-model="formData.nextMaintenanceDate"
|
||||||
placeholder="请选择下次维护日期"
|
placeholder="请选择下次维护日期"
|
||||||
:disabled="isView"
|
:disabled="isView"
|
||||||
|
show-time
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
|
format="YYYY-MM-DD HH:mm:ss"
|
||||||
|
value-format="YYYY-MM-DD HH:mm:ss"
|
||||||
/>
|
/>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
|
@ -596,9 +629,8 @@ const equipmentTypeOptions = [
|
||||||
const equipmentStatusOptions = [
|
const equipmentStatusOptions = [
|
||||||
{ label: '正常', value: 'normal' },
|
{ label: '正常', value: 'normal' },
|
||||||
{ label: '维修中', value: 'repair' },
|
{ label: '维修中', value: 'repair' },
|
||||||
{ label: '已报废', value: 'scrap' },
|
{ label: '保养中', value: 'maintain' },
|
||||||
{ label: '闲置', value: 'idle' },
|
{ label: '报废', value: 'scrap' },
|
||||||
{ label: '丢失', value: 'lost' },
|
|
||||||
]
|
]
|
||||||
|
|
||||||
const useStatusOptions = [
|
const useStatusOptions = [
|
||||||
|
@ -607,13 +639,14 @@ const useStatusOptions = [
|
||||||
]
|
]
|
||||||
|
|
||||||
const locationStatusOptions = [
|
const locationStatusOptions = [
|
||||||
|
{ label: '未入库', value: 'not_in_stock' },
|
||||||
{ label: '库存中', value: 'in_stock' },
|
{ label: '库存中', value: 'in_stock' },
|
||||||
{ label: '使用中', value: 'in_use' },
|
{ label: '已分配', value: 'allocated' },
|
||||||
{ label: '维修中', value: 'repair' },
|
{ label: '维修中', value: 'repair' },
|
||||||
|
{ label: '待报废', value: 'scrap' },
|
||||||
{ label: '已报废', value: 'scrapped' },
|
{ label: '已报废', value: 'scrapped' },
|
||||||
{ label: '外借中', value: 'on_loan' },
|
{ label: '外借中', value: 'borrowed' },
|
||||||
{ label: '丢失', value: 'lost' },
|
{ label: '丢失', value: 'lost' },
|
||||||
{ label: '闲置', value: 'idle' },
|
|
||||||
]
|
]
|
||||||
|
|
||||||
const healthStatusOptions = [
|
const healthStatusOptions = [
|
||||||
|
@ -650,6 +683,15 @@ watch(() => props.visible, (newVal) => {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// 监听单价和数量变化,自动计算总价
|
||||||
|
watch([() => formData.unitPrice, () => formData.quantity], ([newUnitPrice, newQuantity]) => {
|
||||||
|
if (newUnitPrice && newQuantity) {
|
||||||
|
formData.totalPrice = Number((newUnitPrice * newQuantity).toFixed(2))
|
||||||
|
} else {
|
||||||
|
formData.totalPrice = undefined
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
// 初始化表单数据
|
// 初始化表单数据
|
||||||
const initFormData = () => {
|
const initFormData = () => {
|
||||||
if (props.procurementData) {
|
if (props.procurementData) {
|
||||||
|
@ -709,7 +751,7 @@ const resetForm = () => {
|
||||||
assetCode: '',
|
assetCode: '',
|
||||||
brand: '',
|
brand: '',
|
||||||
specification: '',
|
specification: '',
|
||||||
locationStatus: '',
|
locationStatus: 'not_in_stock', // 设置默认位置状态为"未入库"
|
||||||
physicalLocation: '',
|
physicalLocation: '',
|
||||||
responsiblePerson: '',
|
responsiblePerson: '',
|
||||||
healthStatus: '',
|
healthStatus: '',
|
||||||
|
@ -765,6 +807,107 @@ const handleSubmit = async () => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 填入测试数据
|
||||||
|
const fillTestData = () => {
|
||||||
|
// 生成当前时间
|
||||||
|
const now = new Date()
|
||||||
|
const currentTime = now.toISOString().slice(0, 19).replace('T', ' ')
|
||||||
|
|
||||||
|
// 生成未来时间(预计报废时间)
|
||||||
|
const futureDate = new Date(now.getTime() + 365 * 24 * 60 * 60 * 1000) // 一年后
|
||||||
|
const futureTime = futureDate.toISOString().slice(0, 19).replace('T', ' ')
|
||||||
|
|
||||||
|
// 生成过去时间(采购时间等)
|
||||||
|
const pastDate = new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000) // 30天前
|
||||||
|
const pastTime = pastDate.toISOString().slice(0, 19).replace('T', ' ')
|
||||||
|
|
||||||
|
// 生成入库时间(采购后7天)
|
||||||
|
const inStockDate = new Date(pastDate.getTime() + 7 * 24 * 60 * 60 * 1000)
|
||||||
|
const inStockTime = inStockDate.toISOString().slice(0, 19).replace('T', ' ')
|
||||||
|
|
||||||
|
// 生成启用时间(入库后3天)
|
||||||
|
const activationDate = new Date(inStockDate.getTime() + 3 * 24 * 60 * 60 * 1000)
|
||||||
|
const activationTime = activationDate.toISOString().slice(0, 19).replace('T', ' ')
|
||||||
|
|
||||||
|
// 生成保修截止时间(采购后2年)
|
||||||
|
const warrantyDate = new Date(pastDate.getTime() + 2 * 365 * 24 * 60 * 60 * 1000)
|
||||||
|
const warrantyTime = warrantyDate.toISOString().slice(0, 19).replace('T', ' ')
|
||||||
|
|
||||||
|
// 生成维护时间
|
||||||
|
const lastMaintenanceDate = new Date(now.getTime() - 15 * 24 * 60 * 60 * 1000) // 15天前
|
||||||
|
const lastMaintenanceTime = lastMaintenanceDate.toISOString().slice(0, 19).replace('T', ' ')
|
||||||
|
|
||||||
|
const nextMaintenanceDate = new Date(now.getTime() + 15 * 24 * 60 * 60 * 1000) // 15天后
|
||||||
|
const nextMaintenanceTime = nextMaintenanceDate.toISOString().slice(0, 19).replace('T', ' ')
|
||||||
|
|
||||||
|
// 生成随机序列号
|
||||||
|
const randomSn = 'SN' + Math.random().toString(36).substr(2, 8).toUpperCase()
|
||||||
|
|
||||||
|
// 生成随机资产编号
|
||||||
|
const randomAssetCode = 'ZC' + Math.random().toString(36).substr(2, 6).toUpperCase()
|
||||||
|
|
||||||
|
// 生成随机采购订单号
|
||||||
|
const randomPurchaseOrder = 'PO' + Math.random().toString(36).substr(2, 8).toUpperCase()
|
||||||
|
|
||||||
|
// 生成随机库存条码
|
||||||
|
const randomBarcode = 'BC' + Math.random().toString(36).substr(2, 10).toUpperCase()
|
||||||
|
|
||||||
|
// 生成随机次户号
|
||||||
|
const randomAccountNumber = 'AC' + Math.random().toString(36).substr(2, 6).toUpperCase()
|
||||||
|
|
||||||
|
// 先设置单价和数量,让监听器自动计算总价
|
||||||
|
formData.unitPrice = 8999.00
|
||||||
|
formData.quantity = 2
|
||||||
|
|
||||||
|
Object.assign(formData, {
|
||||||
|
// 基本信息
|
||||||
|
equipmentName: '高清工业相机系统',
|
||||||
|
equipmentModel: 'IC-2000Pro',
|
||||||
|
equipmentType: 'detection',
|
||||||
|
equipmentSn: randomSn,
|
||||||
|
brand: '海康威视',
|
||||||
|
assetCode: randomAssetCode,
|
||||||
|
specification: '分辨率:4K,帧率:60fps,接口:USB3.0,支持AI识别,防水等级IP67',
|
||||||
|
|
||||||
|
// 采购信息
|
||||||
|
purchaseOrder: randomPurchaseOrder,
|
||||||
|
supplierName: '海康威视官方旗舰店',
|
||||||
|
// quantity 和 unitPrice 已在上方设置,totalPrice 将由监听器自动计算
|
||||||
|
purchasePrice: 17998.00,
|
||||||
|
currentNetValue: 17998.00,
|
||||||
|
depreciationMethod: 'straight_line',
|
||||||
|
depreciationYears: 5,
|
||||||
|
salvageValue: 899.90,
|
||||||
|
|
||||||
|
// 时间信息
|
||||||
|
purchaseTime: pastTime,
|
||||||
|
inStockTime: inStockTime,
|
||||||
|
activationTime: activationTime,
|
||||||
|
expectedScrapTime: futureTime,
|
||||||
|
warrantyExpireDate: warrantyTime,
|
||||||
|
lastMaintenanceDate: lastMaintenanceTime,
|
||||||
|
nextMaintenanceDate: nextMaintenanceTime,
|
||||||
|
|
||||||
|
// 状态信息
|
||||||
|
equipmentStatus: 'normal',
|
||||||
|
useStatus: '1',
|
||||||
|
locationStatus: 'in_stock',
|
||||||
|
healthStatus: 'excellent',
|
||||||
|
responsiblePerson: '张工程师',
|
||||||
|
maintenancePerson: '李维护员',
|
||||||
|
physicalLocation: 'A区-3楼-设备间-01号柜',
|
||||||
|
inventoryBarcode: randomBarcode,
|
||||||
|
|
||||||
|
// 其他信息
|
||||||
|
accountNumber: randomAccountNumber,
|
||||||
|
inventoryBasis: '月度盘点',
|
||||||
|
dynamicRecord: '设备运行正常,定期维护保养,性能稳定,满足生产需求。',
|
||||||
|
assetRemark: '重要检测设备,需定期校准,专人负责维护。',
|
||||||
|
})
|
||||||
|
|
||||||
|
Message.success('测试数据已填入!')
|
||||||
|
}
|
||||||
|
|
||||||
// 取消
|
// 取消
|
||||||
const handleCancel = () => {
|
const handleCancel = () => {
|
||||||
emit('update:visible', false)
|
emit('update:visible', false)
|
||||||
|
@ -845,6 +988,52 @@ const handleCancel = () => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 测试数据区域样式
|
||||||
|
.test-data-section {
|
||||||
|
background: linear-gradient(135deg, #f0f9ff 0%, #e0f2fe 100%);
|
||||||
|
border: 1px solid #bae6fd;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 12px 16px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
|
||||||
|
.test-data-header {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
|
||||||
|
.test-data-title {
|
||||||
|
font-weight: 600;
|
||||||
|
color: #1e40af;
|
||||||
|
font-size: 14px;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.test-data-desc {
|
||||||
|
color: #64748b;
|
||||||
|
font-size: 12px;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.arco-btn {
|
||||||
|
background: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%);
|
||||||
|
border: none;
|
||||||
|
color: white;
|
||||||
|
font-weight: 500;
|
||||||
|
box-shadow: 0 2px 4px rgba(59, 130, 246, 0.3);
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
transform: translateY(-1px);
|
||||||
|
box-shadow: 0 4px 8px rgba(59, 130, 246, 0.4);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:active {
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 响应式设计
|
// 响应式设计
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
.tab-navigation {
|
.tab-navigation {
|
||||||
|
@ -861,5 +1050,10 @@ const handleCancel = () => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.test-data-section {
|
||||||
|
padding: 8px 12px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
|
@ -93,9 +93,8 @@
|
||||||
>
|
>
|
||||||
<a-option value="normal">正常</a-option>
|
<a-option value="normal">正常</a-option>
|
||||||
<a-option value="repair">维修中</a-option>
|
<a-option value="repair">维修中</a-option>
|
||||||
<a-option value="scrap">已报废</a-option>
|
<a-option value="maintain">保养中</a-option>
|
||||||
<a-option value="idle">闲置</a-option>
|
<a-option value="scrap">报废</a-option>
|
||||||
<a-option value="lost">丢失</a-option>
|
|
||||||
</a-select>
|
</a-select>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
|
@ -106,13 +105,14 @@
|
||||||
placeholder="请选择位置状态"
|
placeholder="请选择位置状态"
|
||||||
allow-clear
|
allow-clear
|
||||||
>
|
>
|
||||||
|
<a-option value="not_in_stock">未入库</a-option>
|
||||||
<a-option value="in_stock">库存中</a-option>
|
<a-option value="in_stock">库存中</a-option>
|
||||||
<a-option value="in_use">使用中</a-option>
|
<a-option value="allocated">已分配</a-option>
|
||||||
<a-option value="repair">维修中</a-option>
|
<a-option value="repair">维修中</a-option>
|
||||||
|
<a-option value="scrap">待报废</a-option>
|
||||||
<a-option value="scrapped">已报废</a-option>
|
<a-option value="scrapped">已报废</a-option>
|
||||||
<a-option value="on_loan">外借中</a-option>
|
<a-option value="borrowed">外借中</a-option>
|
||||||
<a-option value="lost">丢失</a-option>
|
<a-option value="lost">丢失</a-option>
|
||||||
<a-option value="idle">闲置</a-option>
|
|
||||||
</a-select>
|
</a-select>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
|
|
|
@ -360,9 +360,8 @@ const getEquipmentStatusColor = (status: string) => {
|
||||||
const colorMap: Record<string, string> = {
|
const colorMap: Record<string, string> = {
|
||||||
normal: 'green',
|
normal: 'green',
|
||||||
repair: 'orange',
|
repair: 'orange',
|
||||||
|
maintain: 'blue',
|
||||||
scrap: 'red',
|
scrap: 'red',
|
||||||
idle: 'blue',
|
|
||||||
lost: 'gray',
|
|
||||||
}
|
}
|
||||||
return colorMap[status] || 'blue'
|
return colorMap[status] || 'blue'
|
||||||
}
|
}
|
||||||
|
@ -372,9 +371,8 @@ const getEquipmentStatusText = (status: string) => {
|
||||||
const textMap: Record<string, string> = {
|
const textMap: Record<string, string> = {
|
||||||
normal: '正常',
|
normal: '正常',
|
||||||
repair: '维修中',
|
repair: '维修中',
|
||||||
scrap: '已报废',
|
maintain: '保养中',
|
||||||
idle: '闲置',
|
scrap: '报废',
|
||||||
lost: '丢失',
|
|
||||||
}
|
}
|
||||||
return textMap[status] || '未知'
|
return textMap[status] || '未知'
|
||||||
}
|
}
|
||||||
|
@ -382,13 +380,14 @@ const getEquipmentStatusText = (status: string) => {
|
||||||
// 获取位置状态颜色
|
// 获取位置状态颜色
|
||||||
const getLocationStatusColor = (status: string) => {
|
const getLocationStatusColor = (status: string) => {
|
||||||
const colorMap: Record<string, string> = {
|
const colorMap: Record<string, string> = {
|
||||||
|
not_in_stock: 'gray',
|
||||||
in_stock: 'blue',
|
in_stock: 'blue',
|
||||||
in_use: 'green',
|
allocated: 'green',
|
||||||
repair: 'orange',
|
repair: 'orange',
|
||||||
|
scrap: 'red',
|
||||||
scrapped: 'red',
|
scrapped: 'red',
|
||||||
on_loan: 'purple',
|
borrowed: 'purple',
|
||||||
lost: 'gray',
|
lost: 'gray',
|
||||||
idle: 'cyan',
|
|
||||||
}
|
}
|
||||||
return colorMap[status] || 'blue'
|
return colorMap[status] || 'blue'
|
||||||
}
|
}
|
||||||
|
@ -396,13 +395,14 @@ const getLocationStatusColor = (status: string) => {
|
||||||
// 获取位置状态文本
|
// 获取位置状态文本
|
||||||
const getLocationStatusText = (status: string) => {
|
const getLocationStatusText = (status: string) => {
|
||||||
const textMap: Record<string, string> = {
|
const textMap: Record<string, string> = {
|
||||||
|
not_in_stock: '未入库',
|
||||||
in_stock: '库存中',
|
in_stock: '库存中',
|
||||||
in_use: '使用中',
|
allocated: '已分配',
|
||||||
repair: '维修中',
|
repair: '维修中',
|
||||||
|
scrap: '待报废',
|
||||||
scrapped: '已报废',
|
scrapped: '已报废',
|
||||||
on_loan: '外借中',
|
borrowed: '外借中',
|
||||||
lost: '丢失',
|
lost: '丢失',
|
||||||
idle: '闲置',
|
|
||||||
}
|
}
|
||||||
return textMap[status] || '未知'
|
return textMap[status] || '未知'
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="info-item">
|
<div class="info-item">
|
||||||
<div class="info-label">所属部门</div>
|
<div class="info-label">所属部门</div>
|
||||||
<div class="info-value">{{ primaryInfo?.department || '技术部' }}</div>
|
<div class="info-value">{{ primaryInfo?.deptName || '技术部' }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="info-item">
|
<div class="info-item">
|
||||||
<div class="info-label">直接上级岗位</div>
|
<div class="info-label">直接上级岗位</div>
|
||||||
|
@ -52,7 +52,7 @@
|
||||||
<div class="info-value">{{ primaryInfo?.location || '上海/远程' }}</div>
|
<div class="info-value">{{ primaryInfo?.location || '上海/远程' }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 岗位目的 -->
|
<!-- 岗位目的 -->
|
||||||
<div class="section-title">岗位目的</div>
|
<div class="section-title">岗位目的</div>
|
||||||
<div class="content-container">
|
<div class="content-container">
|
||||||
|
@ -68,18 +68,18 @@
|
||||||
<div class="section-title">主要职责与工作任务</div>
|
<div class="section-title">主要职责与工作任务</div>
|
||||||
<div class="content-container">
|
<div class="content-container">
|
||||||
<ul>
|
<ul>
|
||||||
<li v-for="(task, idx) in (primaryInfo?.tasks || ['负责XXX产品的需求分析、架构设计、核心模块编码和单元测试。','制定并执行季度社交媒体营销计划,提升品牌曝光度和用户互动率。'])" :key="idx">{{ task }}</li>
|
<li v-for="(task, idx) in (primaryInfo?.tasks || ['负责XXX产品的需求分析、架构设计、核心模块编码和单元测试。', '制定并执行季度社交媒体营销计划,提升品牌曝光度和用户互动率。'])" :key="idx">{{ task }}</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 工作权限 -->
|
<!-- 工作权限 -->
|
||||||
<div class="section-title">工作权限</div>
|
<div class="section-title">工作权限</div>
|
||||||
<div class="content-container">
|
<div class="content-container">
|
||||||
<ul>
|
<ul>
|
||||||
<li v-for="(perm, idx) in (primaryInfo?.permissions || ['有权审批部门内5000元以下的采购申请。','有权对项目团队成员的工作任务进行分配和调整。'])" :key="idx">{{ perm }}</li>
|
<li v-for="(perm, idx) in (primaryInfo?.permissions || ['有权审批部门内5000元以下的采购申请。', '有权对项目团队成员的工作任务进行分配和调整。'])" :key="idx">{{ perm }}</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 汇报关系 -->
|
<!-- 汇报关系 -->
|
||||||
<div class="section-title">汇报关系</div>
|
<div class="section-title">汇报关系</div>
|
||||||
<div class="info-grid">
|
<div class="info-grid">
|
||||||
|
@ -167,7 +167,7 @@
|
||||||
<div class="content-container">
|
<div class="content-container">
|
||||||
<div class="content-text">{{ primaryInfo?.performance || '根据项目按时交付率、代码质量、产品性能指标提升情况进行评估。' }}</div>
|
<div class="content-text">{{ primaryInfo?.performance || '根据项目按时交付率、代码质量、产品性能指标提升情况进行评估。' }}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 薪酬范围 -->
|
<!-- 薪酬范围 -->
|
||||||
<div class="section-title">薪酬范围</div>
|
<div class="section-title">薪酬范围</div>
|
||||||
<div class="content-container">
|
<div class="content-container">
|
||||||
|
@ -184,7 +184,7 @@
|
||||||
<div class="content-container">
|
<div class="content-container">
|
||||||
<div class="content-text">{{ primaryInfo?.culture || '客户第一、创新、诚信、合作' }}</div>
|
<div class="content-text">{{ primaryInfo?.culture || '客户第一、创新、诚信、合作' }}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 职业发展路径 -->
|
<!-- 职业发展路径 -->
|
||||||
<div class="section-title">职业发展路径</div>
|
<div class="section-title">职业发展路径</div>
|
||||||
<div class="content-container">
|
<div class="content-container">
|
||||||
|
@ -244,7 +244,7 @@ const getDetail = async (id: string) => {
|
||||||
id: data.postId ?? data.id ?? '10001',
|
id: data.postId ?? data.id ?? '10001',
|
||||||
name: data.postName ?? data.name ?? '-',
|
name: data.postName ?? data.name ?? '-',
|
||||||
status: data.status,
|
status: data.status,
|
||||||
department: data.department ?? '技术部',
|
department: data.department ?? data.deptName ?? '技术部',
|
||||||
superior: data.superior ?? '技术总监',
|
superior: data.superior ?? '技术总监',
|
||||||
level: data.level ?? 'P5',
|
level: data.level ?? 'P5',
|
||||||
version: data.version ?? '2024-06-01 / V1.0',
|
version: data.version ?? '2024-06-01 / V1.0',
|
||||||
|
@ -252,11 +252,11 @@ const getDetail = async (id: string) => {
|
||||||
summary: data.summary ?? '负责公司核心产品开发,支撑业务增长。',
|
summary: data.summary ?? '负责公司核心产品开发,支撑业务增长。',
|
||||||
tasks: data.tasks ?? [
|
tasks: data.tasks ?? [
|
||||||
'负责XXX产品的需求分析、架构设计、核心模块编码和单元测试。',
|
'负责XXX产品的需求分析、架构设计、核心模块编码和单元测试。',
|
||||||
'制定并执行季度社交媒体营销计划,提升品牌曝光度和用户互动率。'
|
'制定并执行季度社交媒体营销计划,提升品牌曝光度和用户互动率。',
|
||||||
],
|
],
|
||||||
permissions: data.permissions ?? [
|
permissions: data.permissions ?? [
|
||||||
'有权审批部门内5000元以下的采购申请。',
|
'有权审批部门内5000元以下的采购申请。',
|
||||||
'有权对项目团队成员的工作任务进行分配和调整。'
|
'有权对项目团队成员的工作任务进行分配和调整。',
|
||||||
],
|
],
|
||||||
subordinates: data.subordinates ?? '无',
|
subordinates: data.subordinates ?? '无',
|
||||||
collaboration: data.collaboration ?? '与产品部、销售部、客服部紧密合作',
|
collaboration: data.collaboration ?? '与产品部、销售部、客服部紧密合作',
|
||||||
|
|
Loading…
Reference in New Issue