From 786d36ab0dd17682e1b15584821c55f01bda42ac Mon Sep 17 00:00:00 2001 From: rd <1344903914@qq.com> Date: Sat, 23 Aug 2025 13:55:25 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=B4=A0=E6=9D=90=E4=B8=AD=E5=BF=83?= =?UTF-8?q?=E6=88=90=E5=93=81=E5=BA=93-=E5=AE=A2=E6=88=B7=E7=AB=AF?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/layouts/Basic.vue | 4 +- src/layouts/components/siderBar/menu-list.ts | 9 +- .../modules/creativeGenerationWorkshop.ts | 278 +++++----- src/router/routes/modules/materialCenter.ts | 214 ++++---- src/styles/lib/variable.scss | 76 +-- .../manuscript-writer/check/style.scss | 2 +- .../manuscript-writer/detail/style.scss | 3 +- .../manuscript-writer/edit/style.scss | 2 +- .../manuscript-writer/upload/style.scss | 2 +- src/views/home/index.vue | 1 + .../ai-suggest/delete-comment-modal.vue | 39 ++ .../detail/components/ai-suggest/index.vue | 320 ++++++++++++ .../detail/components/ai-suggest/style.scss | 121 +++++ .../explore/detail/constants.ts | 44 ++ .../explore/detail/index.vue | 275 ++++++++++ .../explore/detail/style.scss | 135 +++++ .../finished-products/explore/list/index.vue | 117 +++++ .../finished-products/explore/list/style.scss | 75 +++ .../components/finished-products/index.vue | 59 ++- .../components/filter-block/index.vue | 142 ++++++ .../delete-manuscript-modal.vue | 58 +++ .../manuscript-check-table/index.vue | 207 ++++++++ .../manuscript-check-table/style.scss | 19 + .../manuscript/check-list/constants.ts | 256 ++++++++++ .../manuscript/check-list/index.vue | 200 ++++++++ .../manuscript/check-list/style.scss | 35 ++ .../manuscript/check/cancel-check-modal.vue | 57 +++ .../manuscript/check/check-success-modal.vue | 61 +++ .../components/check-list-drawer/index.vue | 87 ++++ .../components/check-list-drawer/style.scss | 45 ++ .../components/content-card/constants.ts | 57 +++ .../content-card/highlight-textarea.vue | 234 +++++++++ .../check/components/content-card/index.vue | 476 ++++++++++++++++++ .../check/components/content-card/style.scss | 205 ++++++++ .../check/components/header-card/index.vue | 116 +++++ .../check/components/header-card/style.scss | 74 +++ .../manuscript/check/index.vue | 266 ++++++++++ .../manuscript/check/style.scss | 48 ++ .../components/edit-form/img-box.vue | 99 ++++ .../manuscript/components/edit-form/index.vue | 373 ++++++++++++++ .../components/edit-form/style.scss | 38 ++ .../share-manuscript-modal/constants.ts | 40 ++ .../share-manuscript-modal/index.vue | 296 +++++++++++ .../share-manuscript-modal/share-modal.vue | 152 ++++++ .../share-manuscript-modal/style.scss | 68 +++ .../upload-manuscript-modal/index.vue | 419 +++++++++++++++ .../upload-manuscript-modal/style.scss | 31 ++ .../manuscript/detail/index.vue | 208 ++++++++ .../manuscript/detail/style.scss | 70 +++ .../manuscript/edit/cancel-edit-modal.vue | 34 ++ .../manuscript/edit/index.vue | 142 ++++++ .../manuscript/edit/style.scss | 28 ++ .../list/components/filter-block/index.vue | 149 ++++++ .../components/manuscript-table/constants.ts | 73 +++ .../delete-manuscript-modal.vue | 58 +++ .../components/manuscript-table/index.vue | 167 ++++++ .../components/manuscript-table/style.scss | 16 + .../manuscript/list/constants.ts | 56 +++ .../manuscript/list/index.vue | 94 ++++ .../manuscript/list/style.scss | 11 + .../manuscript/upload/cancel-upload-modal.vue | 38 ++ .../manuscript/upload/index.vue | 325 ++++++++++++ .../manuscript/upload/style.scss | 32 ++ .../upload/upload-success-modal.vue | 64 +++ 64 files changed, 7187 insertions(+), 313 deletions(-) create mode 100644 src/views/material-center/components/finished-products/explore/detail/components/ai-suggest/delete-comment-modal.vue create mode 100644 src/views/material-center/components/finished-products/explore/detail/components/ai-suggest/index.vue create mode 100644 src/views/material-center/components/finished-products/explore/detail/components/ai-suggest/style.scss create mode 100644 src/views/material-center/components/finished-products/explore/detail/constants.ts create mode 100644 src/views/material-center/components/finished-products/explore/detail/index.vue create mode 100644 src/views/material-center/components/finished-products/explore/detail/style.scss create mode 100644 src/views/material-center/components/finished-products/explore/list/index.vue create mode 100644 src/views/material-center/components/finished-products/explore/list/style.scss create mode 100644 src/views/material-center/components/finished-products/manuscript/check-list/components/filter-block/index.vue create mode 100644 src/views/material-center/components/finished-products/manuscript/check-list/components/manuscript-check-table/delete-manuscript-modal.vue create mode 100644 src/views/material-center/components/finished-products/manuscript/check-list/components/manuscript-check-table/index.vue create mode 100644 src/views/material-center/components/finished-products/manuscript/check-list/components/manuscript-check-table/style.scss create mode 100644 src/views/material-center/components/finished-products/manuscript/check-list/constants.ts create mode 100644 src/views/material-center/components/finished-products/manuscript/check-list/index.vue create mode 100644 src/views/material-center/components/finished-products/manuscript/check-list/style.scss create mode 100644 src/views/material-center/components/finished-products/manuscript/check/cancel-check-modal.vue create mode 100644 src/views/material-center/components/finished-products/manuscript/check/check-success-modal.vue create mode 100644 src/views/material-center/components/finished-products/manuscript/check/components/check-list-drawer/index.vue create mode 100644 src/views/material-center/components/finished-products/manuscript/check/components/check-list-drawer/style.scss create mode 100644 src/views/material-center/components/finished-products/manuscript/check/components/content-card/constants.ts create mode 100644 src/views/material-center/components/finished-products/manuscript/check/components/content-card/highlight-textarea.vue create mode 100644 src/views/material-center/components/finished-products/manuscript/check/components/content-card/index.vue create mode 100644 src/views/material-center/components/finished-products/manuscript/check/components/content-card/style.scss create mode 100644 src/views/material-center/components/finished-products/manuscript/check/components/header-card/index.vue create mode 100644 src/views/material-center/components/finished-products/manuscript/check/components/header-card/style.scss create mode 100644 src/views/material-center/components/finished-products/manuscript/check/index.vue create mode 100644 src/views/material-center/components/finished-products/manuscript/check/style.scss create mode 100644 src/views/material-center/components/finished-products/manuscript/components/edit-form/img-box.vue create mode 100644 src/views/material-center/components/finished-products/manuscript/components/edit-form/index.vue create mode 100644 src/views/material-center/components/finished-products/manuscript/components/edit-form/style.scss create mode 100644 src/views/material-center/components/finished-products/manuscript/components/share-manuscript-modal/constants.ts create mode 100644 src/views/material-center/components/finished-products/manuscript/components/share-manuscript-modal/index.vue create mode 100644 src/views/material-center/components/finished-products/manuscript/components/share-manuscript-modal/share-modal.vue create mode 100644 src/views/material-center/components/finished-products/manuscript/components/share-manuscript-modal/style.scss create mode 100644 src/views/material-center/components/finished-products/manuscript/components/upload-manuscript-modal/index.vue create mode 100644 src/views/material-center/components/finished-products/manuscript/components/upload-manuscript-modal/style.scss create mode 100644 src/views/material-center/components/finished-products/manuscript/detail/index.vue create mode 100644 src/views/material-center/components/finished-products/manuscript/detail/style.scss create mode 100644 src/views/material-center/components/finished-products/manuscript/edit/cancel-edit-modal.vue create mode 100644 src/views/material-center/components/finished-products/manuscript/edit/index.vue create mode 100644 src/views/material-center/components/finished-products/manuscript/edit/style.scss create mode 100644 src/views/material-center/components/finished-products/manuscript/list/components/filter-block/index.vue create mode 100644 src/views/material-center/components/finished-products/manuscript/list/components/manuscript-table/constants.ts create mode 100644 src/views/material-center/components/finished-products/manuscript/list/components/manuscript-table/delete-manuscript-modal.vue create mode 100644 src/views/material-center/components/finished-products/manuscript/list/components/manuscript-table/index.vue create mode 100644 src/views/material-center/components/finished-products/manuscript/list/components/manuscript-table/style.scss create mode 100644 src/views/material-center/components/finished-products/manuscript/list/constants.ts create mode 100644 src/views/material-center/components/finished-products/manuscript/list/index.vue create mode 100644 src/views/material-center/components/finished-products/manuscript/list/style.scss create mode 100644 src/views/material-center/components/finished-products/manuscript/upload/cancel-upload-modal.vue create mode 100644 src/views/material-center/components/finished-products/manuscript/upload/index.vue create mode 100644 src/views/material-center/components/finished-products/manuscript/upload/style.scss create mode 100644 src/views/material-center/components/finished-products/manuscript/upload/upload-success-modal.vue diff --git a/src/layouts/Basic.vue b/src/layouts/Basic.vue index 4f31f77..0f2c0cb 100644 --- a/src/layouts/Basic.vue +++ b/src/layouts/Basic.vue @@ -36,9 +36,9 @@ const showInOnePage = computed(() => { const layoutPageClass = computed(() => { let result = showInOnePage.value ? 'overflow-hidden' : ''; if (isHomeRoute.value) { - result += ' pb-8px pr-8px'; + result += 'pb-8px pr-8px'; } else { - result += ' pb-24px pr-24px'; + result += 'pb-24px pr-24px'; } return result; }); diff --git a/src/layouts/components/siderBar/menu-list.ts b/src/layouts/components/siderBar/menu-list.ts index b56b876..3627793 100644 --- a/src/layouts/components/siderBar/menu-list.ts +++ b/src/layouts/components/siderBar/menu-list.ts @@ -77,7 +77,14 @@ export const MENU_LIST = >{ label: '成品库', routeName: 'MaterialCenterFinishedProducts', requireLogin: true, - activeMatch: ['MaterialCenterFinishedProducts'], + activeMatch: [ + 'MaterialCenterFinishedProducts', + 'ManuscriptUpload', + 'ManuscriptEdit', + 'ManuscriptDetail', + 'ManuscriptCheckListDetail', + 'ManuscriptCheck', + ], }, { key: 'ModMaterialCenterRawMaterialStorage', diff --git a/src/router/routes/modules/creativeGenerationWorkshop.ts b/src/router/routes/modules/creativeGenerationWorkshop.ts index 6c60759..8281dca 100644 --- a/src/router/routes/modules/creativeGenerationWorkshop.ts +++ b/src/router/routes/modules/creativeGenerationWorkshop.ts @@ -1,142 +1,142 @@ -import type { AppRouteRecordRaw } from '../types'; -import { MENU_GROUP_IDS } from '@/router/constants'; +// import type { AppRouteRecordRaw } from '../types'; +// import { MENU_GROUP_IDS } from '@/router/constants'; -import IconContentManuscript from '@/assets/svg/svg-contentManuscript.svg'; +// import IconContentManuscript from '@/assets/svg/svg-contentManuscript.svg'; -const COMPONENTS: AppRouteRecordRaw[] = [ - { - path: '/manuscript', - name: 'Manuscript', - redirect: 'manuscript/list', - meta: { - locale: '内容稿件', - icon: IconContentManuscript, - requiresAuth: true, - requireLogin: true, - roles: ['*'], - id: MENU_GROUP_IDS.CREATIVE_GENERATION_WORKSHOP_ID, - }, - children: [ - { - path: 'list', - name: 'ManuscriptList', - meta: { - locale: '内容稿件列表', - requiresAuth: true, - requireLogin: true, - roles: ['*'], - }, - component: () => import('@/views/creative-generation-workshop/manuscript/list/index.vue'), - }, - { - path: 'upload', - name: 'ManuscriptUpload', - meta: { - locale: '稿件上传', - requiresAuth: true, - requireLogin: true, - hideFooter: true, - roles: ['*'], - hideInMenu: true, - activeMenu: 'ManuscriptList', - }, - component: () => import('@/views/creative-generation-workshop/manuscript/upload/index.vue'), - }, - { - path: 'edit/:id', - name: 'ManuscriptEdit', - meta: { - locale: '账号详情', - requiresAuth: true, - requireLogin: true, - hideFooter: true, - roles: ['*'], - hideInMenu: true, - activeMenu: 'ManuscriptList', - }, - component: () => import('@/views/creative-generation-workshop/manuscript/edit/index.vue'), - }, - { - path: 'detail/:id', - name: 'ManuscriptDetail', - meta: { - locale: '稿件详情', - requiresAuth: true, - requireLogin: true, - hideFooter: true, - roles: ['*'], - hideInMenu: true, - activeMenu: 'ManuscriptList', - }, - component: () => import('@/views/creative-generation-workshop/manuscript/detail/index.vue'), - }, - { - path: 'check-list', - name: 'ManuscriptCheckList', - meta: { - locale: '内容稿件审核', - requiresAuth: true, - requireLogin: true, - roles: ['*'], - }, - component: () => import('@/views/creative-generation-workshop/manuscript/check-list/index.vue'), - }, - { - path: 'check-list/detail/:id', - name: 'ManuscriptCheckListDetail', - meta: { - locale: '内容稿件审核详情', - requiresAuth: true, - requireLogin: true, - hideFooter: true, - hideInMenu: true, - roles: ['*'], - activeMenu: 'ManuscriptCheckList', - }, - component: () => import('@/views/creative-generation-workshop/manuscript/detail/index.vue'), - }, - { - path: 'check', - name: 'ManuscriptCheck', - meta: { - locale: '稿件审核', - requiresAuth: true, - requireLogin: true, - hideFooter: true, - roles: ['*'], - hideInMenu: true, - activeMenu: 'ManuscriptCheckList', - }, - component: () => import('@/views/creative-generation-workshop/manuscript/check/index.vue'), - }, - ], - }, - { - path: '/explore/list/:shareCode', - name: 'ExploreList', - meta: { - locale: '分享链接列表', - requiresAuth: false, - requireLogin: false, - hideFooter: true, - hideSidebar: true, - roles: ['*'], - }, - component: () => import('@/views/creative-generation-workshop/explore/list/index.vue'), - }, - { - path: '/explore/detail/:shareCode/:id', - name: 'ExploreDetail', - meta: { - locale: '分享链接详情', - requiresAuth: false, - requireLogin: false, - hideFooter: true, - hideSidebar: true, - roles: ['*'], - }, - component: () => import('@/views/creative-generation-workshop/explore/detail/index.vue'), - }, -]; +// const COMPONENTS: AppRouteRecordRaw[] = [ +// { +// path: '/manuscript', +// name: 'Manuscript', +// redirect: 'manuscript/list', +// meta: { +// locale: '内容稿件', +// icon: IconContentManuscript, +// requiresAuth: true, +// requireLogin: true, +// roles: ['*'], +// id: MENU_GROUP_IDS.CREATIVE_GENERATION_WORKSHOP_ID, +// }, +// children: [ +// // { +// // path: 'list', +// // name: 'ManuscriptList', +// // meta: { +// // locale: '内容稿件列表', +// // requiresAuth: true, +// // requireLogin: true, +// // roles: ['*'], +// // }, +// // component: () => import('@/views/material-center/components/finished-products/manuscript/list/index.vue'), +// // }, +// { +// path: 'upload', +// name: 'ManuscriptUpload', +// meta: { +// locale: '稿件上传', +// requiresAuth: true, +// requireLogin: true, +// hideFooter: true, +// roles: ['*'], +// hideInMenu: true, +// activeMenu: 'ManuscriptList', +// }, +// component: () => import('@/views/material-center/components/finished-products/manuscript/upload/index.vue'), +// }, +// { +// path: 'edit/:id', +// name: 'ManuscriptEdit', +// meta: { +// locale: '账号详情', +// requiresAuth: true, +// requireLogin: true, +// hideFooter: true, +// roles: ['*'], +// hideInMenu: true, +// activeMenu: 'ManuscriptList', +// }, +// component: () => import('@/views/material-center/components/finished-products/manuscript/edit/index.vue'), +// }, +// { +// path: 'detail/:id', +// name: 'ManuscriptDetail', +// meta: { +// locale: '稿件详情', +// requiresAuth: true, +// requireLogin: true, +// hideFooter: true, +// roles: ['*'], +// hideInMenu: true, +// activeMenu: 'ManuscriptList', +// }, +// component: () => import('@/views/material-center/components/finished-products/manuscript/detail/index.vue'), +// }, +// // { +// // path: 'check-list', +// // name: 'ManuscriptCheckList', +// // meta: { +// // locale: '内容稿件审核', +// // requiresAuth: true, +// // requireLogin: true, +// // roles: ['*'], +// // }, +// // component: () => import('@/views/material-center/components/finished-products/manuscript/check-list/index.vue'), +// // }, +// { +// path: 'check-list/detail/:id', +// name: 'ManuscriptCheckListDetail', +// meta: { +// locale: '内容稿件审核详情', +// requiresAuth: true, +// requireLogin: true, +// hideFooter: true, +// hideInMenu: true, +// roles: ['*'], +// activeMenu: 'ManuscriptCheckList', +// }, +// component: () => import('@/views/material-center/components/finished-products/manuscript/detail/index.vue'), +// }, +// { +// path: 'check', +// name: 'ManuscriptCheck', +// meta: { +// locale: '稿件审核', +// requiresAuth: true, +// requireLogin: true, +// hideFooter: true, +// roles: ['*'], +// hideInMenu: true, +// activeMenu: 'ManuscriptCheckList', +// }, +// component: () => import('@/views/material-center/components/finished-products/manuscript/check/index.vue'), +// }, +// ], +// }, +// { +// path: '/explore/list/:shareCode', +// name: 'ExploreList', +// meta: { +// locale: '分享链接列表', +// requiresAuth: false, +// requireLogin: false, +// hideFooter: true, +// hideSidebar: true, +// roles: ['*'], +// }, +// component: () => import('@/views/creative-generation-workshop/explore/list/index.vue'), +// }, +// { +// path: '/explore/detail/:shareCode/:id', +// name: 'ExploreDetail', +// meta: { +// locale: '分享链接详情', +// requiresAuth: false, +// requireLogin: false, +// hideFooter: true, +// hideSidebar: true, +// roles: ['*'], +// }, +// component: () => import('@/views/creative-generation-workshop/explore/detail/index.vue'), +// }, +// ]; -export default COMPONENTS; +// export default COMPONENTS; diff --git a/src/router/routes/modules/materialCenter.ts b/src/router/routes/modules/materialCenter.ts index 326f178..e882bf9 100644 --- a/src/router/routes/modules/materialCenter.ts +++ b/src/router/routes/modules/materialCenter.ts @@ -39,126 +39,104 @@ const COMPONENTS: AppRouteRecordRaw[] = [ }, component: () => import('@/views/material-center/index.vue'), }, - // { - // path: 'list', - // name: 'ManuscriptList', - // meta: { - // locale: '内容稿件列表', - // requiresAuth: true, - // requireLogin: true, - // roles: ['*'], - // }, - // component: () => import('@/views/creative-generation-workshop/manuscript/list/index.vue'), - // }, - // { - // path: 'upload', - // name: 'ManuscriptUpload', - // meta: { - // locale: '稿件上传', - // requiresAuth: true, - // requireLogin: true, - // hideFooter: true, - // roles: ['*'], - // hideInMenu: true, - // activeMenu: 'ManuscriptList', - // }, - // component: () => import('@/views/creative-generation-workshop/manuscript/upload/index.vue'), - // }, - // { - // path: 'edit/:id', - // name: 'ManuscriptEdit', - // meta: { - // locale: '账号详情', - // requiresAuth: true, - // requireLogin: true, - // hideFooter: true, - // roles: ['*'], - // hideInMenu: true, - // activeMenu: 'ManuscriptList', - // }, - // component: () => import('@/views/creative-generation-workshop/manuscript/edit/index.vue'), - // }, - // { - // path: 'detail/:id', - // name: 'ManuscriptDetail', - // meta: { - // locale: '稿件详情', - // requiresAuth: true, - // requireLogin: true, - // hideFooter: true, - // roles: ['*'], - // hideInMenu: true, - // activeMenu: 'ManuscriptList', - // }, - // component: () => import('@/views/creative-generation-workshop/manuscript/detail/index.vue'), - // }, - // { - // path: 'check-list', - // name: 'ManuscriptCheckList', - // meta: { - // locale: '内容稿件审核', - // requiresAuth: true, - // requireLogin: true, - // roles: ['*'], - // }, - // component: () => import('@/views/creative-generation-workshop/manuscript/check-list/index.vue'), - // }, - // { - // path: 'check-list/detail/:id', - // name: 'ManuscriptCheckListDetail', - // meta: { - // locale: '内容稿件审核详情', - // requiresAuth: true, - // requireLogin: true, - // hideFooter: true, - // hideInMenu: true, - // roles: ['*'], - // activeMenu: 'ManuscriptCheckList', - // }, - // component: () => import('@/views/creative-generation-workshop/manuscript/detail/index.vue'), - // }, - // { - // path: 'check', - // name: 'ManuscriptCheck', - // meta: { - // locale: '稿件审核', - // requiresAuth: true, - // requireLogin: true, - // hideFooter: true, - // roles: ['*'], - // hideInMenu: true, - // activeMenu: 'ManuscriptCheckList', - // }, - // component: () => import('@/views/creative-generation-workshop/manuscript/check/index.vue'), - // }, + { + path: 'upload', + name: 'ManuscriptUpload', + meta: { + locale: '稿件上传', + requiresAuth: true, + requireLogin: true, + hideFooter: true, + roles: ['*'], + hideInMenu: true, + activeMenu: 'MaterialCenterFinishedProducts', + }, + component: () => import('@/views/material-center/components/finished-products/manuscript/upload/index.vue'), + }, + { + path: 'edit/:id', + name: 'ManuscriptEdit', + meta: { + locale: '账号详情', + requiresAuth: true, + requireLogin: true, + hideFooter: true, + roles: ['*'], + hideInMenu: true, + activeMenu: 'MaterialCenterFinishedProducts', + }, + component: () => import('@/views/material-center/components/finished-products/manuscript/edit/index.vue'), + }, + { + path: 'detail/:id', + name: 'ManuscriptDetail', + meta: { + locale: '稿件详情', + requiresAuth: true, + requireLogin: true, + hideFooter: true, + roles: ['*'], + hideInMenu: true, + activeMenu: 'MaterialCenterFinishedProducts', + }, + component: () => import('@/views/material-center/components/finished-products/manuscript/detail/index.vue'), + }, + { + path: 'check-list/detail/:id', + name: 'ManuscriptCheckListDetail', + meta: { + locale: '内容稿件审核详情', + requiresAuth: true, + requireLogin: true, + hideFooter: true, + hideInMenu: true, + roles: ['*'], + activeMenu: 'MaterialCenterFinishedProducts', + }, + component: () => import('@/views/material-center/components/finished-products/manuscript/detail/index.vue'), + }, + { + path: 'check', + name: 'ManuscriptCheck', + meta: { + locale: '稿件审核', + requiresAuth: true, + requireLogin: true, + hideFooter: true, + roles: ['*'], + hideInMenu: true, + activeMenu: 'MaterialCenterFinishedProducts', + }, + component: () => import('@/views/material-center/components/finished-products/manuscript/check/index.vue'), + }, ], }, - // { - // path: '/explore/list/:shareCode', - // name: 'ExploreList', - // meta: { - // locale: '分享链接列表', - // requiresAuth: false, - // requireLogin: false, - // hideFooter: true, - // hideSidebar: true, - // roles: ['*'], - // }, - // component: () => import('@/views/creative-generation-workshop/explore/list/index.vue'), - // }, - // { - // path: '/explore/detail/:shareCode/:id', - // name: 'ExploreDetail', - // meta: { - // locale: '分享链接详情', - // requiresAuth: false, - // requireLogin: false, - // hideFooter: true, - // hideSidebar: true, - // roles: ['*'], - // }, - // component: () => import('@/views/creative-generation-workshop/explore/detail/index.vue'), - // }, + { + path: '/explore/list/:shareCode', + name: 'ExploreList', + meta: { + locale: '分享链接列表', + requiresAuth: false, + requireLogin: false, + hideFooter: true, + hideSidebar: true, + roles: ['*'], + }, + component: () => import('@/views/material-center/components/finished-products/explore/list/index.vue'), + }, + { + path: '/explore/detail/:shareCode/:id', + name: 'ExploreDetail', + meta: { + locale: '分享链接详情', + requiresAuth: false, + requireLogin: false, + hideFooter: true, + hideSidebar: true, + roles: ['*'], + }, + component: () => import('@/views/material-center/components/finished-products/explore/detail/index.vue'), + }, ]; export default COMPONENTS; diff --git a/src/styles/lib/variable.scss b/src/styles/lib/variable.scss index d45dfdb..6cad4b9 100644 --- a/src/styles/lib/variable.scss +++ b/src/styles/lib/variable.scss @@ -1,7 +1,8 @@ - $navbar-height: 52px; // 头部高度 $sidebar-width: 138px; // 侧边栏菜单宽度 $sidebar-width-collapse: 74px; // 折叠侧边栏菜单宽度 +$layout-padding-bottom: 24px; +$layout-padding-right: 24px; // 汉字字体 $font-family-regular: 'PingFangSC-Regular', 'Microsoft Yahei', Arial, sans-serif; @@ -15,45 +16,44 @@ $font-family-manrope-medium: 'Manrope-Medium'; $font-family-manrope-bold: 'Manrope-Bold'; $font-family-manrope-semiBold: 'Manrope-SemiBold'; +$color-primary: #6d4cfe; // 常规 +$color-primary-5: #8a70fe; // hover +$color-primary-7: #573dcb; // click +$color-primary-3: #a794fe; // disabled +$color-primary-2: #c5b7ff; // text disabled +$color-primary-1: #f0edff; // 浅色 -$color-primary: #6d4cfe; // 常规 -$color-primary-5: #8A70FE; // hover -$color-primary-7: #573DCB; // click -$color-primary-3: #A794FE; // disabled -$color-primary-2: #C5B7FF; // text disabled -$color-primary-1: #F0EDFF; // 浅色 +$color-success: #25c883; +$color-success-5: #57cf9c; +$color-success-7: #1bae71; +$color-success-3: #81dbb5; +$color-success-2: #abe7ce; +$color-success-1: #ebf7f2; -$color-success: #25C883; -$color-success-5: #57CF9C; -$color-success-7: #1BAE71; -$color-success-3: #81DBB5; -$color-success-2: #ABE7CE; -$color-success-1: #EBF7F2; +$color-warning: #ffae00; +$color-warning-5: #ffbe33; +$color-warning-7: #cc8b00; +$color-warning-3: #ffcf66; +$color-warning-2: #ffdf99; +$color-warning-1: #fff7e5; -$color-warning: #FFAE00; -$color-warning-5: #FFBE33; -$color-warning-7: #CC8B00; -$color-warning-3: #FFCF66; -$color-warning-2: #FFDF99; -$color-warning-1: #FFF7E5; +$color-error: #f64b31; +$color-error-5: #f86f5a; +$color-error-7: #c53c27; +$color-error-3: #fa9383; +$color-error-2: #fbb7ad; +$color-error-1: #ffe9e7; -$color-error: #F64B31; -$color-error-5: #F86F5A; -$color-error-7: #C53C27; -$color-error-3: #FA9383; -$color-error-2: #FBB7AD; -$color-error-1: #FFE9E7; +$color-blue: #2a59f3; +$color-blue-5: #557af6; +$color-blue-7: #2247c2; +$color-blue-3: #7f9cf8; +$color-blue-2: #aabdfa; +$color-blue-1: #e5ecff; -$color-blue: #2A59F3; -$color-blue-5: #557AF6; -$color-blue-7: #2247C2; -$color-blue-3: #7F9CF8; -$color-blue-2: #AABDFA; -$color-blue-1: #E5ECFF; - -$color-teal: #39C6E9; -$color-teal-5: #60D2ED; -$color-teal-7: #2E9EBA; -$color-teal-3: #88DDF2; -$color-teal-2: #B0E8F6; -$color-teal-1: #E1F9FF; \ No newline at end of file +$color-teal: #39c6e9; +$color-teal-5: #60d2ed; +$color-teal-7: #2e9eba; +$color-teal-3: #88ddf2; +$color-teal-2: #b0e8f6; +$color-teal-1: #e1f9ff; diff --git a/src/views/creative-generation-workshop/manuscript-writer/check/style.scss b/src/views/creative-generation-workshop/manuscript-writer/check/style.scss index 680c950..9bd24ba 100644 --- a/src/views/creative-generation-workshop/manuscript-writer/check/style.scss +++ b/src/views/creative-generation-workshop/manuscript-writer/check/style.scss @@ -1,7 +1,7 @@ $footer-height: 68px; .manuscript-check-wrap { width: 100%; - height: calc(100% - 72px); + height: calc(100% - ($footer-height - $layout-padding-bottom)); .cts { color: #939499; font-family: $font-family-regular; diff --git a/src/views/creative-generation-workshop/manuscript-writer/detail/style.scss b/src/views/creative-generation-workshop/manuscript-writer/detail/style.scss index f9cbd55..436f9e0 100644 --- a/src/views/creative-generation-workshop/manuscript-writer/detail/style.scss +++ b/src/views/creative-generation-workshop/manuscript-writer/detail/style.scss @@ -1,8 +1,7 @@ $footer-height: 68px; .manuscript-detail-wrap { width: 100%; - height: calc(100% - 72px); - margin-bottom: 72px; + height: calc(100% - ($footer-height - $layout-padding-bottom)); .cts { color: #939499; font-family: $font-family-regular; diff --git a/src/views/creative-generation-workshop/manuscript-writer/edit/style.scss b/src/views/creative-generation-workshop/manuscript-writer/edit/style.scss index 2ba50dc..0509c0a 100644 --- a/src/views/creative-generation-workshop/manuscript-writer/edit/style.scss +++ b/src/views/creative-generation-workshop/manuscript-writer/edit/style.scss @@ -1,6 +1,6 @@ $footer-height: 68px; .manuscript-edit-wrap { - height: calc(100% - 72px); + height: calc(100% - ($footer-height - $layout-padding-bottom)); display: flex; flex-direction: column; .cts { diff --git a/src/views/creative-generation-workshop/manuscript-writer/upload/style.scss b/src/views/creative-generation-workshop/manuscript-writer/upload/style.scss index 3588836..d3c3f70 100644 --- a/src/views/creative-generation-workshop/manuscript-writer/upload/style.scss +++ b/src/views/creative-generation-workshop/manuscript-writer/upload/style.scss @@ -1,6 +1,6 @@ $footer-height: 68px; .manuscript-upload-wrap { - height: calc(100% - 72px); + height: calc(100% - ($footer-height - $layout-padding-bottom)); .cts, :deep(.overflow-text) { color: #939499; diff --git a/src/views/home/index.vue b/src/views/home/index.vue index 9b3b440..9443500 100644 --- a/src/views/home/index.vue +++ b/src/views/home/index.vue @@ -26,6 +26,7 @@ export default { }; onMounted(() => { + console.log('getAgentData') getAgentData(); }); diff --git a/src/views/material-center/components/finished-products/explore/detail/components/ai-suggest/delete-comment-modal.vue b/src/views/material-center/components/finished-products/explore/detail/components/ai-suggest/delete-comment-modal.vue new file mode 100644 index 0000000..a160c8a --- /dev/null +++ b/src/views/material-center/components/finished-products/explore/detail/components/ai-suggest/delete-comment-modal.vue @@ -0,0 +1,39 @@ + + + diff --git a/src/views/material-center/components/finished-products/explore/detail/components/ai-suggest/index.vue b/src/views/material-center/components/finished-products/explore/detail/components/ai-suggest/index.vue new file mode 100644 index 0000000..2a60bd5 --- /dev/null +++ b/src/views/material-center/components/finished-products/explore/detail/components/ai-suggest/index.vue @@ -0,0 +1,320 @@ + + + diff --git a/src/views/material-center/components/finished-products/explore/detail/components/ai-suggest/style.scss b/src/views/material-center/components/finished-products/explore/detail/components/ai-suggest/style.scss new file mode 100644 index 0000000..81a7616 --- /dev/null +++ b/src/views/material-center/components/finished-products/explore/detail/components/ai-suggest/style.scss @@ -0,0 +1,121 @@ +.ai-suggest-wrap { + top: $navbar-height; + height: calc(100% - ($navbar-height + 12px)); + .ai-suggest-box { + width: 440px; + height: fit-content; + max-height: 100%; + border-radius: 16px; + background: linear-gradient(126deg, #eef2fd 8.36%, #f5ebfe 49.44%, #fdebf3 90.52%); + box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.1); + .cts { + color: #939499; + font-family: $font-family-regular; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; + &.bold { + font-family: $font-family-medium; + } + } + .ai-text { + font-family: $font-family-medium; + font-size: 16px; + font-style: normal; + font-weight: 400; + line-height: 24px; + background: linear-gradient(85deg, #7d419d 4.56%, #31353d 94.75%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + } + :deep(.arco-textarea-wrapper) { + min-height: 38px; + display: flex; + border-color: transparent !important; + align-items: center; + border-radius: 8px !important; + background-color: #fff; + color: #211f24 !important; + transition: all 0.3s; + .arco-textarea-mirror, + .arco-textarea { + padding: 8px 16px !important; + } + &:hover { + border-color: #6d4cfe !important; + } + &.arco-textarea-focus { + border-color: #6d4cfe !important; + } + } + .result-box { + background: rgba(255, 255, 255, 0.8); + backdrop-filter: blur(4px); + .result-item { + .s1 { + color: var(--Brand-6, #6d4cfe); + font-family: $font-family-manrope-medium; + font-size: 24px; + font-style: normal; + font-weight: 700; + line-height: 32px; + } + &:first-child { + position: relative; + &::after { + content: ''; + position: absolute; + top: 50%; + transform: translateY(-50%); + right: 0; + width: 1px; + height: 32px; + background: var(--Border-1, #d7d7d9); + } + } + } + } + .collapse-box { + transition: all 0.3s; + } + .comment-box { + .cm { + background: linear-gradient(85deg, #7d419d 4.56%, #31353d 94.75%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + } + + .comment-list { + backdrop-filter: blur(4px); + .comment-item { + &:not(:last-child) { + margin-bottom: 8px; + } + &:hover { + border-radius: 8px; + background: rgba(255, 255, 255, 0.8); + } + } + } + } + .main-box { + scrollbar-width: none; + -ms-overflow-style: none; + &::-webkit-scrollbar { + width: 0; + height: 0; + background: transparent; + } + &::-webkit-scrollbar-thumb { + background-color: transparent; + border: none; + } + &::-webkit-scrollbar-track { + background: transparent; + } + } + } +} diff --git a/src/views/material-center/components/finished-products/explore/detail/constants.ts b/src/views/material-center/components/finished-products/explore/detail/constants.ts new file mode 100644 index 0000000..174f732 --- /dev/null +++ b/src/views/material-center/components/finished-products/explore/detail/constants.ts @@ -0,0 +1,44 @@ +export const ENUM_OPINION = { + wait: 0, // 待确认 + confirm: 1, // 已确认 +}; + +export const formatRelativeTime = (date: number): string => { + const target = dayjs(date * 1000); + + if (!target.isValid()) return ''; + + const now = dayjs(); + // 处理未来时间 + if (target.isAfter(now)) return '刚刚'; + + const diffInMinutes = now.diff(target, 'minute'); + const diffInHours = now.diff(target, 'hour'); + const diffInDays = now.diff(target, 'day'); + const diffInYears = now.diff(target, 'year'); + + // 1分钟内 + if (diffInMinutes < 1) { + return '刚刚'; + } + // 1分钟 ~ 1小时 + else if (diffInMinutes < 60) { + return `${diffInMinutes}分钟前`; + } + // 1小时 ~ 24小时 + else if (diffInHours < 24) { + return `${diffInHours}小时前`; + } + // 1天 ~ 30天 + else if (diffInDays < 30) { + return `${diffInDays}天前`; + } + // 超过30天但不到1年 + else if (diffInYears < 1) { + return target.format('MM-DD HH:mm'); + } + // 超过1年 + else { + return target.format('YYYY-MM-DD HH:mm'); + } +}; diff --git a/src/views/material-center/components/finished-products/explore/detail/index.vue b/src/views/material-center/components/finished-products/explore/detail/index.vue new file mode 100644 index 0000000..c398547 --- /dev/null +++ b/src/views/material-center/components/finished-products/explore/detail/index.vue @@ -0,0 +1,275 @@ + + + diff --git a/src/views/material-center/components/finished-products/explore/detail/style.scss b/src/views/material-center/components/finished-products/explore/detail/style.scss new file mode 100644 index 0000000..9e7e888 --- /dev/null +++ b/src/views/material-center/components/finished-products/explore/detail/style.scss @@ -0,0 +1,135 @@ +.explore-page { + position: relative; + min-width: 1200px; + min-height: 100vh; + // background: #fff; + display: flex; + flex-direction: column; + // &::before { + // content: ''; + // position: absolute; + // top: 0; + // left: 0; + // width: 100%; + // height: 100%; + // background: #fff; + // z-index: -1; + // } + .fold-box { + width: 40px; + height: 40px; + border-radius: 30px; + border: 1px solid var(--Border-1, #d7d7d9); + background: #fff; + box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.15); + position: fixed; + right: 16px; + top: calc($navbar-height + 32px); + display: flex; + justify-content: center; + align-items: center; + } + .page-header { + position: sticky; + left: 0; + right: 0; + top: 0; + z-index: 1000; + min-width: 1200px; + .content { + height: $navbar-height; + // border-bottom: 1px solid var(--Border-1, #d7d7d9); + } + &::before { + width: 100%; + height: 100%; + background: url('@/assets/img/icon-app-header-bg.png') center top no-repeat !important; + background-size: cover !important; + bottom: 0; + content: ''; + display: block; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: -998; + } + } + .cts { + color: #939499; + font-family: $font-family-regular; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; + &.bold { + font-family: $font-family-medium; + } + } + + .page-wrap { + width: 100%; + flex: 1; + display: flex; + justify-content: center; + // background: #fff; + &.expand { + width: calc(100% - 456px); + } + .explore-detail-wrap { + min-height: 500px; + width: 684px; + .title { + color: var(--Text-1, #211f24); + font-family: $font-family-medium; + font-size: 28px; + font-style: normal; + font-weight: 400; + line-height: 40px; /* 142.857% */ + } + } + + .main-video-box { + width: 320px; + height: 472px; + background: #333; + aspect-ratio: 3 / 4; + } + .main-img-box { + width: 320px; + height: auto; + max-height: 472px; + background: #fff; + } + .desc-img-wrap { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 24px; + .desc-img-box { + width: 212px; + height: 283px; + background: #fff; + object-fit: contain; + aspect-ratio: 3/4; + } + } + .play-icon { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + z-index: 222; + width: 64px; + height: 64px; + background-image: url('@/assets/img/creative-generation-workshop/icon-play.png'); + background-size: contain; + background-repeat: no-repeat; + background-position: center; + transition: background-image 0.3s ease; + } + + .play-icon:hover { + background-image: url('@/assets/img/creative-generation-workshop/icon-play-hover.png'); + } + } +} diff --git a/src/views/material-center/components/finished-products/explore/list/index.vue b/src/views/material-center/components/finished-products/explore/list/index.vue new file mode 100644 index 0000000..dc6713f --- /dev/null +++ b/src/views/material-center/components/finished-products/explore/list/index.vue @@ -0,0 +1,117 @@ + + + diff --git a/src/views/material-center/components/finished-products/explore/list/style.scss b/src/views/material-center/components/finished-products/explore/list/style.scss new file mode 100644 index 0000000..485b377 --- /dev/null +++ b/src/views/material-center/components/finished-products/explore/list/style.scss @@ -0,0 +1,75 @@ +.explore-page { + position: relative; + padding-top: $navbar-height; + min-width: 1200px; + .cts { + font-family: $font-family-regular; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; + &.bold { + font-family: $font-family-medium; + } + } + .page-header { + position: fixed; + left: 0; + right: 0; + top: 0; + z-index: 1000; + min-width: 1200px; + .content { + height: $navbar-height; + // border-bottom: 1px solid var(--Border-1, #d7d7d9); + } + &::before { + width: 100%; + height: 100%; + background: url('@/assets/img/icon-app-header-bg.png') center top no-repeat !important; + background-size: cover !important; + bottom: 0; + content: ''; + display: block; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: -998; + } + } + .page-wrapper { + min-height: calc(100vh - $navbar-height); + .explore-container { + width: 1200px; + .explore-list-wrap { + :deep(.overflow-text) { + color: var(--Text-1, #211f24); + font-family: $font-family-regular; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; + &.bold { + font-family: $font-family-medium; + } + } + .card-container { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 24px; + .card-item { + border: 1px solid var(--Border-1, #d7d7d9); + cursor: pointer; + transition: all 0.3s; + &:hover { + box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.15); + border: 1.01px solid var(--Border-1, #d7d7d9); + border-radius: 8.08px; + } + } + } + } + } + } +} diff --git a/src/views/material-center/components/finished-products/index.vue b/src/views/material-center/components/finished-products/index.vue index 2924f13..1ba262a 100644 --- a/src/views/material-center/components/finished-products/index.vue +++ b/src/views/material-center/components/finished-products/index.vue @@ -1,22 +1,57 @@ diff --git a/src/views/material-center/components/finished-products/manuscript/check-list/components/manuscript-check-table/delete-manuscript-modal.vue b/src/views/material-center/components/finished-products/manuscript/check-list/components/manuscript-check-table/delete-manuscript-modal.vue new file mode 100644 index 0000000..39f8fd3 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/check-list/components/manuscript-check-table/delete-manuscript-modal.vue @@ -0,0 +1,58 @@ + + + diff --git a/src/views/material-center/components/finished-products/manuscript/check-list/components/manuscript-check-table/index.vue b/src/views/material-center/components/finished-products/manuscript/check-list/components/manuscript-check-table/index.vue new file mode 100644 index 0000000..cccd53f --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/check-list/components/manuscript-check-table/index.vue @@ -0,0 +1,207 @@ + + + + + diff --git a/src/views/material-center/components/finished-products/manuscript/check-list/components/manuscript-check-table/style.scss b/src/views/material-center/components/finished-products/manuscript/check-list/components/manuscript-check-table/style.scss new file mode 100644 index 0000000..5a1711b --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/check-list/components/manuscript-check-table/style.scss @@ -0,0 +1,19 @@ +.manuscript-table { + .cts { + color: var(--Text-1, #211f24); + font-family: $font-family-medium; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; + &.num { + font-family: $font-family-manrope-regular; + } + } + :deep(.title) { + cursor: pointer; + &:hover { + color: #6d4cfe; + } + } +} diff --git a/src/views/material-center/components/finished-products/manuscript/check-list/constants.ts b/src/views/material-center/components/finished-products/manuscript/check-list/constants.ts new file mode 100644 index 0000000..28ab2b0 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/check-list/constants.ts @@ -0,0 +1,256 @@ +import { AuditStatus } from '@/views/material-center/components/finished-products/constants'; + +export const TABLE_COLUMNS1 = [ + { + title: '序号', + dataIndex: 'uid', + width: 120, + fixed: 'left', + sortable: { + sortDirections: ['ascend', 'descend'], + }, + }, + { + title: '图片/视频', + dataIndex: 'cover', + width: 120, + }, + { + title: '内容稿件标题', + dataIndex: 'title', + width: 300, + }, + { + title: '客户意见', + dataIndex: 'customer_opinion', + width: 120, + }, + { + title: '稿件类型', + dataIndex: 'type', + width: 120, + }, + { + title: '上传时间', + dataIndex: 'created_at', + width: 180, + sortable: { + sortDirections: ['ascend', 'descend'], + }, + }, + { + title: '上传人员', + dataIndex: 'uploader', + width: 180, + }, + { + title: '最后修改时间', + dataIndex: 'last_modified_at', + width: 180, + sortable: { + sortDirections: ['ascend', 'descend'], + }, + }, + { + title: '修改人员', + dataIndex: 'last_modifier', + width: 180, + }, + { + title: '操作', + dataIndex: 'operation', + width: 120, + fixed: 'right', + }, +]; +export const TABLE_COLUMNS2 = [ + { + title: '序号', + dataIndex: 'uid', + width: 120, + fixed: 'left', + sortable: { + sortDirections: ['ascend', 'descend'], + }, + }, + { + title: '图片/视频', + dataIndex: 'cover', + width: 120, + }, + { + title: '内容稿件标题', + dataIndex: 'title', + width: 300, + }, + { + title: '客户意见', + dataIndex: 'customer_opinion', + width: 120, + }, + { + title: '审核平台', + dataIndex: 'platform', + width: 120, + }, + { + title: '合规程度', + dataIndex: 'compliance_level', + suffix: '%', + width: 120, + }, + { + title: '稿件类型', + dataIndex: 'type', + width: 120, + }, + { + title: '审核时间', + dataIndex: 'audit_started_at', + width: 180, + sortable: { + sortDirections: ['ascend', 'descend'], + }, + }, + { + title: '最后修改时间', + dataIndex: 'last_modified_at', + width: 180, + sortable: { + sortDirections: ['ascend', 'descend'], + }, + }, + { + title: '修改人员', + dataIndex: 'last_modifier', + width: 180, + }, + { + title: '操作', + dataIndex: 'operation', + width: 120, + fixed: 'right', + }, +]; +export const TABLE_COLUMNS3 = [ + { + title: '序号', + dataIndex: 'uid', + width: 120, + fixed: 'left', + sortable: { + sortDirections: ['ascend', 'descend'], + }, + }, + { + title: '图片/视频', + dataIndex: 'cover', + width: 120, + }, + { + title: '内容稿件标题', + dataIndex: 'title', + width: 300, + }, + { + title: '客户意见', + dataIndex: 'customer_opinion', + width: 120, + }, + { + title: '审核平台', + dataIndex: 'platform', + width: 120, + }, + { + title: '稿件类型', + dataIndex: 'type', + width: 120, + }, + { + title: '通过时间', + dataIndex: 'audit_passed_at', + width: 180, + sortable: { + sortDirections: ['ascend', 'descend'], + }, + }, + { + title: '最后修改时间', + dataIndex: 'last_modified_at', + width: 180, + sortable: { + sortDirections: ['ascend', 'descend'], + }, + }, + { + title: '修改人员', + dataIndex: 'last_modifier', + width: 180, + }, + { + title: '操作', + dataIndex: 'operation', + width: 120, + fixed: 'right', + }, +]; + +export const AUDIT_STATUS_LIST = [ + { + label: '待审核', + value: AuditStatus.Pending, + tableColumns: TABLE_COLUMNS1, + }, + { + label: '审核中', + value: AuditStatus.Auditing, + tableColumns: TABLE_COLUMNS2, + }, + { + label: '已通过', + value: AuditStatus.Passed, + tableColumns: TABLE_COLUMNS3, + }, +]; + +export const INITIAL_QUERY = { + audit_status: AuditStatus.Pending, + title: '', + created_at: [], + audit_started_at: [], + audit_platform: '', + sort_column: undefined, + sort_order: undefined, +}; + +import icon1 from '@/assets/img/platform/icon-dy.png'; +import icon2 from '@/assets/img/platform/icon-xhs.png'; + +export const PLATFORMS = [ + { + label: '小红书', + value: 1, + icon: icon2, + }, + { + label: '抖音', + value: 2, + icon: icon1, + }, +]; + +export const CUSTOMER_OPINION = [ + { + label: '待确认', + value: 0, + bg: '#F2F3F5', + color: 'color-#3C4043', + }, + { + label: '已确认', + value: 1, + bg: '#F0EDFF', + color: '!color-#6D4CFE', + }, +]; diff --git a/src/views/material-center/components/finished-products/manuscript/check-list/index.vue b/src/views/material-center/components/finished-products/manuscript/check-list/index.vue new file mode 100644 index 0000000..7cee6e2 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/check-list/index.vue @@ -0,0 +1,200 @@ + + + + diff --git a/src/views/material-center/components/finished-products/manuscript/check-list/style.scss b/src/views/material-center/components/finished-products/manuscript/check-list/style.scss new file mode 100644 index 0000000..a3a41fc --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/check-list/style.scss @@ -0,0 +1,35 @@ +.manuscript-check-wrap { + // height: 100%; + display: flex; + flex-direction: column; + .filter-wrap { + :deep(.arco-tabs) { + .arco-tabs-tab { + height: 56px; + padding: 0 8px; + } + .arco-tabs-nav-extra { + padding-right: 24px; + } + .arco-tabs-content { + display: none; + } + } + .top { + .title { + font-family: $font-family-medium; + font-style: normal; + } + + :deep(.arco-btn) { + .arco-btn-icon { + line-height: 16px; + } + } + } + } + .table-wrap { + display: flex; + flex-direction: column; + } +} diff --git a/src/views/material-center/components/finished-products/manuscript/check/cancel-check-modal.vue b/src/views/material-center/components/finished-products/manuscript/check/cancel-check-modal.vue new file mode 100644 index 0000000..beedea2 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/check/cancel-check-modal.vue @@ -0,0 +1,57 @@ + + + diff --git a/src/views/material-center/components/finished-products/manuscript/check/check-success-modal.vue b/src/views/material-center/components/finished-products/manuscript/check/check-success-modal.vue new file mode 100644 index 0000000..9ca3ead --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/check/check-success-modal.vue @@ -0,0 +1,61 @@ + + + + diff --git a/src/views/material-center/components/finished-products/manuscript/check/components/check-list-drawer/index.vue b/src/views/material-center/components/finished-products/manuscript/check/components/check-list-drawer/index.vue new file mode 100644 index 0000000..23d48f9 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/check/components/check-list-drawer/index.vue @@ -0,0 +1,87 @@ + + + diff --git a/src/views/material-center/components/finished-products/manuscript/check/components/check-list-drawer/style.scss b/src/views/material-center/components/finished-products/manuscript/check/components/check-list-drawer/style.scss new file mode 100644 index 0000000..e32fa77 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/check/components/check-list-drawer/style.scss @@ -0,0 +1,45 @@ +.check-list-drawer-xt { + .arco-drawer-mask { + background-color: transparent; + } + .arco-drawer { + box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.15); + .arco-drawer-body { + overflow: hidden; + display: flex; + flex-direction: column; + padding: 0 0 24px; + .cts { + color: var(--Text-1, #939499); + + font-family: $font-family-regular; + font-size: 16px; + font-style: normal; + font-weight: 400; + line-height: 24px; + &.bold { + color: var(--Text-1, #211f24); + font-family: $font-family-medium; + } + } + .card-item { + cursor: pointer; + border: 1px solid transparent; + transition: all; + &:hover { + background-color: #e6e6e8; + } + &:not(:last-child) { + margin-bottom: 12px; + } + &.active { + border-color: #6d4cfe; + background-color: #f0edff; + :deep(.overflow-text) { + font-family: $font-family-medium !important; + } + } + } + } + } +} diff --git a/src/views/material-center/components/finished-products/manuscript/check/components/content-card/constants.ts b/src/views/material-center/components/finished-products/manuscript/check/components/content-card/constants.ts new file mode 100644 index 0000000..0dbe0da --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/check/components/content-card/constants.ts @@ -0,0 +1,57 @@ +export const escapeRegExp = (str: string) => { + return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); +}; + +export const FORM_RULES = { + title: [{ required: true, message: '请输入标题' }], +}; +export const enumTab = { + TEXT: 0, + IMAGE: 1, +}; +export const TAB_LIST = [ + { + label: '文本', + value: enumTab.TEXT, + }, + // { + // label: '图片', + // value: enumTab.IMAGE, + // }, +]; + +export enum Enum_Level { + LOW = 0, + MEDIUM = 1, + HIGH = 2, +} + +export const LEVEL_MAP = new Map([ + [Enum_Level.LOW, { label: '低风险', value: 'low_risk_number', color: '#6d4cfe' }], + [Enum_Level.MEDIUM, { label: '中风险', value: 'medium_risk_number', color: '#FFAE00' }], + [Enum_Level.HIGH, { label: '高风险', value: 'high_risk_number', color: '#F64B31' }], +]); + +export const RESULT_LIST = [ + { + label: '合规程度', + value: 'compliance_level', + color: LEVEL_MAP.get(Enum_Level.LOW)?.color, + suffix: '%', + }, + { + label: '检验项', + value: 'inspection_count', + color: '#211F24', + }, + { + label: '高风险', + value: 'high_risk_number', + color: LEVEL_MAP.get(Enum_Level.HIGH)?.color, + }, + { + label: '中风险', + value: 'medium_risk_number', + color: LEVEL_MAP.get(Enum_Level.MEDIUM)?.color, + }, +]; diff --git a/src/views/material-center/components/finished-products/manuscript/check/components/content-card/highlight-textarea.vue b/src/views/material-center/components/finished-products/manuscript/check/components/content-card/highlight-textarea.vue new file mode 100644 index 0000000..a0bf5bb --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/check/components/content-card/highlight-textarea.vue @@ -0,0 +1,234 @@ + + + + + diff --git a/src/views/material-center/components/finished-products/manuscript/check/components/content-card/index.vue b/src/views/material-center/components/finished-products/manuscript/check/components/content-card/index.vue new file mode 100644 index 0000000..863e004 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/check/components/content-card/index.vue @@ -0,0 +1,476 @@ + + + diff --git a/src/views/material-center/components/finished-products/manuscript/check/components/content-card/style.scss b/src/views/material-center/components/finished-products/manuscript/check/components/content-card/style.scss new file mode 100644 index 0000000..3ee72d6 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/check/components/content-card/style.scss @@ -0,0 +1,205 @@ +.content-wrap { + .cts { + color: #939499; + font-family: $font-family-regular; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; + &.bold { + font-family: $font-family-medium; + } + } + .check-btn { + .check-text { + background: linear-gradient(84deg, #266cff 4.57%, #a15af0 84.93%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + } + &:hover { + opacity: 0.8; + } + } + + .left-box { + :deep(.arco-tabs) { + .arco-tabs-nav { + .arco-tabs-tab { + height: 40px; + // padding: 0 8px; + margin: 0 16px; + } + &::before { + display: none; + } + } + .arco-tabs-content { + display: none; + } + } + :deep(.arco-form) { + height: 100%; + display: flex; + flex-direction: column; + .arco-form-item { + margin-bottom: 24px; + .arco-form-item-label-col { + .arco-form-item-label { + color: #939499; + } + } + } + .content-form-item { + margin-bottom: 0; + display: flex; + flex-direction: column; + .arco-form-item-wrapper-col { + flex: 1; + .arco-form-item-content-wrapper, + .arco-form-item-content, + .arco-textarea-wrapper { + height: 100%; + } + } + } + } + .upload-box { + display: flex; + width: 100px; + height: 100px; + cursor: pointer; + transition: all 0.3s ease; + flex-direction: column; + justify-content: center; + align-items: center; + border-radius: 8px; + border: 1px dashed var(--Border-1, #d7d7d9); + background: var(--BG-200, #f2f3f5); + &:hover { + background: var(--Primary-1, #e6e6e8); + } + } + .swiper-wrap { + :deep(.swiper) { + height: 100%; + .swiper-wrapper { + align-items: center; + .swiper-slide { + transition: all; + &.active { + width: 60px !important; + height: 60px !important; + .group { + border: 2px solid var(--Brand-6, #6d4cfe); + background: url() lightgray 50% / cover no-repeat; + } + } + &:hover { + .close-icon { + display: block; + } + } + } + } + } + + .swiper-box { + position: absolute; + margin-top: 0 !important; + width: 40px; + height: 40px; + border-radius: 50%; + background: rgba(0, 0, 0, 0.4); + transition: all; + display: flex; + justify-content: center; + align-items: center; + top: 50%; + transform: translateY(-50%); + &:hover { + background: rgba(0, 0, 0, 0.6); + } + &.swiper-button-prev { + left: 16px; + } + &.swiper-button-next { + right: 16px; + } + &::after { + display: none; + } + &.swiper-button-disabled { + display: none; + } + } + } + } + .right-box { + border: 1px solid #e6e6e8; + flex: 1; + border-radius: 8px; + padding: 16px; + display: flex; + flex-direction: column; + overflow-y: auto; + height: fit-content; + max-height: 100%; + .s1 { + font-family: $font-family-manrope-medium; + font-size: 24px; + font-style: normal; + font-weight: 700; + line-height: 32px; /* 133.333% */ + } + .result-item { + &:first-child { + position: relative; + &::after { + content: ''; + position: absolute; + top: 50%; + transform: translateY(-50%); + right: 0; + width: 1px; + height: 32px; + background: var(--Border-1, #d7d7d9); + } + } + } + .suggestion-box { + .ai-text { + background: linear-gradient(85deg, #7d419d 4.56%, #31353d 94.75%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + font-family: $font-family-medium; + font-size: 16px; + font-style: normal; + font-weight: 400; + line-height: 24px; + } + } + :deep(.overflow-text) { + color: #211f24; + font-family: $font-family-regular; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; + } + .forbid-word-box { + :deep(.overflow-text) { + &.level0 { + color: #6d4cfe; + } + &.level2 { + color: #f64b31; + } + &.level1 { + color: #ffae00; + } + } + } + } +} diff --git a/src/views/material-center/components/finished-products/manuscript/check/components/header-card/index.vue b/src/views/material-center/components/finished-products/manuscript/check/components/header-card/index.vue new file mode 100644 index 0000000..f9539a0 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/check/components/header-card/index.vue @@ -0,0 +1,116 @@ + + + diff --git a/src/views/material-center/components/finished-products/manuscript/check/components/header-card/style.scss b/src/views/material-center/components/finished-products/manuscript/check/components/header-card/style.scss new file mode 100644 index 0000000..9a4dcef --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/check/components/header-card/style.scss @@ -0,0 +1,74 @@ +.header-wrap { + .cts { + color: #939499; + font-family: $font-family-regular; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; + &.bold { + font-family: $font-family-medium; + } + } + .swiper-wrap { + .swiper-item { + transition: all; + &:hover { + background-color: #e6e6e8; + } + &.active { + background-color: #f0edff; + border-color: #6d4cfe; + :deep(.overflow-text) { + font-family: $font-family-medium !important; + } + } + } + .swiper-box { + width: 100px; + height: 64px; + position: absolute; + &.swiper-button-prev { + background: linear-gradient(270deg, rgba(255, 255, 255, 0) 0%, #fff 43.06%); + margin-top: 0 !important; + top: 0; + left: 0; + justify-content: flex-start; + padding-left: 8px; + } + &.swiper-button-next { + background: linear-gradient(90deg, rgba(255, 255, 255, 0) 0%, #fff 43.06%); + margin-top: 0 !important; + top: 0; + right: 0; + justify-content: flex-end; + padding-right: 8px; + } + &::after { + display: none; + } + .swiper-button { + width: 40px; + height: 40px; + background-color: #fff; + display: flex; + justify-content: center; + align-items: center; + border-radius: 8px; + border: 1px solid var(--Border-1, #d7d7d9); + &:hover { + background-color: #f7f8fa; + } + &.click { + background-color: #f2f3f5; + } + } + &.swiper-button-disabled { + display: none; + } + } + } + .platform-row { + border-bottom: 1px solid var(--Border-2, #e6e6e8); + } +} diff --git a/src/views/material-center/components/finished-products/manuscript/check/index.vue b/src/views/material-center/components/finished-products/manuscript/check/index.vue new file mode 100644 index 0000000..f733456 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/check/index.vue @@ -0,0 +1,266 @@ + + + diff --git a/src/views/material-center/components/finished-products/manuscript/check/style.scss b/src/views/material-center/components/finished-products/manuscript/check/style.scss new file mode 100644 index 0000000..9bd24ba --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/check/style.scss @@ -0,0 +1,48 @@ +$footer-height: 68px; +.manuscript-check-wrap { + width: 100%; + height: calc(100% - ($footer-height - $layout-padding-bottom)); + .cts { + color: #939499; + font-family: $font-family-regular; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; + &.bold { + font-family: $font-family-medium; + } + } + .check-list-icon { + // width: 92px; + cursor: pointer; + height: 36px; + display: flex; + padding: 8px 12px; + justify-content: center; + align-items: center; + border-radius: 30px 0 0 30px; + border: 1px solid var(--Border-1, #d7d7d9); + background: #fff; + position: absolute; + right: 0; + top: calc($navbar-height + 8px); + &:hover { + .icon, + .cts { + color: #6d4cfe !important; + } + } + } +} +.footer-row { + position: fixed; + bottom: 0; + left: $sidebar-width; + width: calc(100% - $sidebar-width); + height: $footer-height; + &.collapsed { + left: $sidebar-width-collapse; + width: calc(100% - $sidebar-width-collapse); + } +} diff --git a/src/views/material-center/components/finished-products/manuscript/components/edit-form/img-box.vue b/src/views/material-center/components/finished-products/manuscript/components/edit-form/img-box.vue new file mode 100644 index 0000000..0746114 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/components/edit-form/img-box.vue @@ -0,0 +1,99 @@ + + + + + diff --git a/src/views/material-center/components/finished-products/manuscript/components/edit-form/index.vue b/src/views/material-center/components/finished-products/manuscript/components/edit-form/index.vue new file mode 100644 index 0000000..273cda1 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/components/edit-form/index.vue @@ -0,0 +1,373 @@ + + + diff --git a/src/views/material-center/components/finished-products/manuscript/components/edit-form/style.scss b/src/views/material-center/components/finished-products/manuscript/components/edit-form/style.scss new file mode 100644 index 0000000..daff403 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/components/edit-form/style.scss @@ -0,0 +1,38 @@ +.cts { + font-family: $font-family-regular; + font-size: 12px; + font-style: normal; + font-weight: 400; + line-height: 20px; +} +.upload-box { + display: flex; + width: 100px; + height: 100px; + cursor: pointer; + transition: all 0.3s ease; + flex-direction: column; + justify-content: center; + align-items: center; + border-radius: 8px; + border: 1px dashed var(--Border-1, #d7d7d9); + background: var(--BG-200, #f2f3f5); + &:hover { + background: var(--Primary-1, #e6e6e8); + } +} +.group { + border-radius: 8px; + &:hover { + .group-container { + background: linear-gradient(0deg, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.2) 100%), + url() lightgray 0px -40.771px / 100% 149.766% no-repeat; + } + } +} +.textarea-box { + :deep(.arco-textarea) { + height: 140px; + max-height: 298px; + } +} diff --git a/src/views/material-center/components/finished-products/manuscript/components/share-manuscript-modal/constants.ts b/src/views/material-center/components/finished-products/manuscript/components/share-manuscript-modal/constants.ts new file mode 100644 index 0000000..19964f0 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/components/share-manuscript-modal/constants.ts @@ -0,0 +1,40 @@ +export const INITIAL_FORM = { + audit_status: '', + sort_column: undefined, + sort_order: undefined, +}; + +export const TABLE_COLUMNS = [ + { + title: '序号', + dataIndex: 'uid', + width: 120, + fixed: 'left', + sortable: { + sortDirections: ['ascend', 'descend'], + }, + }, + { + title: '内容稿件标题', + dataIndex: 'title', + width: 220, + }, + { + title: '审核状态', + dataIndex: 'audit_status', + width: 120, + }, + { + title: '稿件类型', + dataIndex: 'type', + width: 120, + }, + { + title: '最后修改时间', + dataIndex: 'last_modified_at', + width: 160, + sortable: { + sortDirections: ['ascend', 'descend'], + }, + }, +]; diff --git a/src/views/material-center/components/finished-products/manuscript/components/share-manuscript-modal/index.vue b/src/views/material-center/components/finished-products/manuscript/components/share-manuscript-modal/index.vue new file mode 100644 index 0000000..86ea333 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/components/share-manuscript-modal/index.vue @@ -0,0 +1,296 @@ + + + diff --git a/src/views/material-center/components/finished-products/manuscript/components/share-manuscript-modal/share-modal.vue b/src/views/material-center/components/finished-products/manuscript/components/share-manuscript-modal/share-modal.vue new file mode 100644 index 0000000..c849795 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/components/share-manuscript-modal/share-modal.vue @@ -0,0 +1,152 @@ + diff --git a/src/views/material-center/components/finished-products/manuscript/components/share-manuscript-modal/style.scss b/src/views/material-center/components/finished-products/manuscript/components/share-manuscript-modal/style.scss new file mode 100644 index 0000000..a3b9dd3 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/components/share-manuscript-modal/style.scss @@ -0,0 +1,68 @@ +.share-manuscript-modal { + .cts { + font-family: $font-family-regular; + font-size: 12px; + font-style: normal; + font-weight: 400; + line-height: 20px; + &.bold { + font-family: $font-family-medium; + } + &.num { + font-family: $font-family-manrope-regular; + } + } + .filter-row-item { + .label { + color: var(--Text-1, #211f24); + font-size: 14px; + } + } + .arco-modal-body { + height: 464px; + display: flex; + flex-direction: column; + overflow: hidden; + .arco-scrollbar-track { + display: none !important; + } + .arco-table { + .arco-table-container { + .arco-table-element { + thead { + .arco-table-tr { + .arco-table-th { + .arco-table-cell { + padding: 10px 16px !important; + } + } + } + } + tbody { + .arco-table-tr { + .arco-table-td { + .arco-table-cell { + padding: 6px 16px; + .arco-table-cell-content, + .arco-table-td-content { + font-size: 12px; + line-height: 20px; + } + } + } + } + } + } + } + } + .arco-pagination { + .arco-pagination-total, + .arco-pagination-jumper-prepend { + font-size: 14px; + } + .arco-pagination-jumper-prepend { + font-family: $font-family-regular; + } + } + } +} diff --git a/src/views/material-center/components/finished-products/manuscript/components/upload-manuscript-modal/index.vue b/src/views/material-center/components/finished-products/manuscript/components/upload-manuscript-modal/index.vue new file mode 100644 index 0000000..5df2b60 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/components/upload-manuscript-modal/index.vue @@ -0,0 +1,419 @@ + + + diff --git a/src/views/material-center/components/finished-products/manuscript/components/upload-manuscript-modal/style.scss b/src/views/material-center/components/finished-products/manuscript/components/upload-manuscript-modal/style.scss new file mode 100644 index 0000000..494dff7 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/components/upload-manuscript-modal/style.scss @@ -0,0 +1,31 @@ +.upload-manuscript-modal { + .text { + color: var(--Text-1, #211f24); + text-align: center; + font-family: $font-family-regular; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; + } + .tip { + color: var(--Text-3, #737478); + text-align: center; + font-family: $font-family-regular; + font-size: 12px; + font-style: normal; + font-weight: 400; + line-height: 20px; + } + .upload-box { + display: flex; + height: 120px; + padding: 0 16px; + flex-direction: column; + justify-content: center; + align-items: center; + border-radius: 2px; + border: 1px dashed var(--Border-1, #d7d7d9); + background: var(--BG-200, #f2f3f5); + } +} diff --git a/src/views/material-center/components/finished-products/manuscript/detail/index.vue b/src/views/material-center/components/finished-products/manuscript/detail/index.vue new file mode 100644 index 0000000..95f4f96 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/detail/index.vue @@ -0,0 +1,208 @@ + + + diff --git a/src/views/material-center/components/finished-products/manuscript/detail/style.scss b/src/views/material-center/components/finished-products/manuscript/detail/style.scss new file mode 100644 index 0000000..737345a --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/detail/style.scss @@ -0,0 +1,70 @@ +$footer-height: 68px; +.manuscript-detail-wrap { + width: 100%; + height: calc(100% - ($footer-height - $layout-padding-bottom)); + .cts { + color: #939499; + font-family: $font-family-regular; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; + &.bold { + font-family: $font-family-medium; + } + } + .main-video-box { + width: 320px; + height: 472px; + background: #333; + aspect-ratio: 3 / 4; + } + .main-img-box { + width: 320px; + height: auto; + max-height: 472px; + background: #fff; + // aspect-ratio: 3/4; + } + .desc-img-wrap { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 24px; + .desc-img-box { + width: 212px; + height: 283px; + background: #fff; + object-fit: contain; + aspect-ratio: 3/4; + } + } + .play-icon { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + z-index: 222; + width: 64px; + height: 64px; + background-image: url('@/assets/img/creative-generation-workshop/icon-play.png'); + background-size: contain; + background-repeat: no-repeat; + background-position: center; + transition: background-image 0.3s ease; + } + + .play-icon:hover { + background-image: url('@/assets/img/creative-generation-workshop/icon-play-hover.png'); + } +} +.footer-row { + position: fixed; + bottom: 0; + left: $sidebar-width; + width: calc(100% - $sidebar-width); + height: $footer-height; + &.collapsed { + left: $sidebar-width-collapse; + width: calc(100% - $sidebar-width-collapse); + } +} diff --git a/src/views/material-center/components/finished-products/manuscript/edit/cancel-edit-modal.vue b/src/views/material-center/components/finished-products/manuscript/edit/cancel-edit-modal.vue new file mode 100644 index 0000000..a68f732 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/edit/cancel-edit-modal.vue @@ -0,0 +1,34 @@ + + + diff --git a/src/views/material-center/components/finished-products/manuscript/edit/index.vue b/src/views/material-center/components/finished-products/manuscript/edit/index.vue new file mode 100644 index 0000000..96d6d68 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/edit/index.vue @@ -0,0 +1,142 @@ + + + diff --git a/src/views/material-center/components/finished-products/manuscript/edit/style.scss b/src/views/material-center/components/finished-products/manuscript/edit/style.scss new file mode 100644 index 0000000..0509c0a --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/edit/style.scss @@ -0,0 +1,28 @@ +$footer-height: 68px; +.manuscript-edit-wrap { + height: calc(100% - ($footer-height - $layout-padding-bottom)); + display: flex; + flex-direction: column; + .cts { + color: #939499; + font-family: $font-family-regular; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; + &.bold { + font-family: $font-family-medium; + } + } +} +.footer-row { + position: fixed; + bottom: 0; + left: $sidebar-width; + width: calc(100% - $sidebar-width); + height: $footer-height; + &.collapsed { + left: $sidebar-width-collapse; + width: calc(100% - $sidebar-width-collapse); + } +} diff --git a/src/views/material-center/components/finished-products/manuscript/list/components/filter-block/index.vue b/src/views/material-center/components/finished-products/manuscript/list/components/filter-block/index.vue new file mode 100644 index 0000000..f68d0b5 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/list/components/filter-block/index.vue @@ -0,0 +1,149 @@ + + + diff --git a/src/views/material-center/components/finished-products/manuscript/list/components/manuscript-table/constants.ts b/src/views/material-center/components/finished-products/manuscript/list/components/manuscript-table/constants.ts new file mode 100644 index 0000000..d6d437b --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/list/components/manuscript-table/constants.ts @@ -0,0 +1,73 @@ +export const TABLE_COLUMNS = [ + { + title: '序号', + dataIndex: 'uid', + width: 120, + fixed: 'left', + sortable: { + sortDirections: ['ascend', 'descend'], + }, + }, + { + title: '图片/视频', + dataIndex: 'cover', + width: 120, + }, + { + title: '内容稿件标题', + dataIndex: 'title', + width: 240, + }, + { + title: '客户意见', + dataIndex: 'customer_opinion', + width: 120, + }, + // { + // title: '所属项目', + // dataIndex: 'projects', + // width: 240, + // }, + { + title: '稿件类型', + dataIndex: 'type', + width: 120, + }, + { + title: '审核状态', + dataIndex: 'audit_status', + width: 120, + }, + { + title: '上传时间', + dataIndex: 'created_at', + width: 180, + sortable: { + sortDirections: ['ascend', 'descend'], + }, + }, + { + title: '上传人员', + dataIndex: 'uploader', + width: 180, + }, + { + title: '最后修改时间', + dataIndex: 'last_modified_at', + width: 180, + sortable: { + sortDirections: ['ascend', 'descend'], + }, + }, + { + title: '最后修改人员', + dataIndex: 'last_modifier', + width: 180, + }, + { + title: '操作', + dataIndex: 'operation', + width: 180, + fixed: 'right', + }, +]; diff --git a/src/views/material-center/components/finished-products/manuscript/list/components/manuscript-table/delete-manuscript-modal.vue b/src/views/material-center/components/finished-products/manuscript/list/components/manuscript-table/delete-manuscript-modal.vue new file mode 100644 index 0000000..ef68bd5 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/list/components/manuscript-table/delete-manuscript-modal.vue @@ -0,0 +1,58 @@ + + + diff --git a/src/views/material-center/components/finished-products/manuscript/list/components/manuscript-table/index.vue b/src/views/material-center/components/finished-products/manuscript/list/components/manuscript-table/index.vue new file mode 100644 index 0000000..834f749 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/list/components/manuscript-table/index.vue @@ -0,0 +1,167 @@ + + + + + diff --git a/src/views/material-center/components/finished-products/manuscript/list/components/manuscript-table/style.scss b/src/views/material-center/components/finished-products/manuscript/list/components/manuscript-table/style.scss new file mode 100644 index 0000000..8621a01 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/list/components/manuscript-table/style.scss @@ -0,0 +1,16 @@ +.manuscript-table { + .cts { + color: var(--Text-1, #211f24); + font-family: $font-family-medium; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; + } + :deep(.title) { + cursor: pointer; + &:hover { + color: #6d4cfe; + } + } +} diff --git a/src/views/material-center/components/finished-products/manuscript/list/constants.ts b/src/views/material-center/components/finished-products/manuscript/list/constants.ts new file mode 100644 index 0000000..b06f7cd --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/list/constants.ts @@ -0,0 +1,56 @@ +export const INITIAL_QUERY = { + title: '', + // project_ids: [], + uid: '', + audit_status: '', + created_at: [], + sort_column: undefined, + sort_order: undefined, +}; + +export enum EnumCheckStatus { + All = '', + Wait = 1, + Checking = 2, + Passed = 3, +} +export enum EnumManuscriptType { + All = '', + Image = 0, + Video = 1, +} + +export const CHECK_STATUS = [ + { + name: '待审核', + id: EnumCheckStatus.Wait, + backgroundColor: '#F2F3F5', + color: '#3C4043' + }, + { + name: '审核中', + id: EnumCheckStatus.Checking, + backgroundColor: '#FFF7E5', + color: '#FFAE00' + }, + { + name: '已通过', + id: EnumCheckStatus.Passed, + backgroundColor: '#EBF7F2', + color: '#25C883' + }, +]; +export const MANUSCRIPT_TYPE = [ + { + label: '全部', + value: EnumManuscriptType.All, + }, + { + label: '图片', + value: EnumManuscriptType.Image, + }, + { + label: '视频', + value: EnumManuscriptType.Video, + }, +] diff --git a/src/views/material-center/components/finished-products/manuscript/list/index.vue b/src/views/material-center/components/finished-products/manuscript/list/index.vue new file mode 100644 index 0000000..516883e --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/list/index.vue @@ -0,0 +1,94 @@ + + + + diff --git a/src/views/material-center/components/finished-products/manuscript/list/style.scss b/src/views/material-center/components/finished-products/manuscript/list/style.scss new file mode 100644 index 0000000..abbedf0 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/list/style.scss @@ -0,0 +1,11 @@ +.manuscript-list-wrap { + // height: 100%; + display: flex; + flex-direction: column; + .filter-wrap { + } + .table-wrap { + display: flex; + flex-direction: column; + } +} diff --git a/src/views/material-center/components/finished-products/manuscript/upload/cancel-upload-modal.vue b/src/views/material-center/components/finished-products/manuscript/upload/cancel-upload-modal.vue new file mode 100644 index 0000000..afbe71a --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/upload/cancel-upload-modal.vue @@ -0,0 +1,38 @@ + + + diff --git a/src/views/material-center/components/finished-products/manuscript/upload/index.vue b/src/views/material-center/components/finished-products/manuscript/upload/index.vue new file mode 100644 index 0000000..429ce2e --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/upload/index.vue @@ -0,0 +1,325 @@ + + + diff --git a/src/views/material-center/components/finished-products/manuscript/upload/style.scss b/src/views/material-center/components/finished-products/manuscript/upload/style.scss new file mode 100644 index 0000000..d3c3f70 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/upload/style.scss @@ -0,0 +1,32 @@ +$footer-height: 68px; +.manuscript-upload-wrap { + height: calc(100% - ($footer-height - $layout-padding-bottom)); + .cts, + :deep(.overflow-text) { + color: #939499; + font-family: $font-family-regular; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; + &.bold { + font-family: $font-family-medium; + } + } + .right { + border-left: 1px solid var(--Border-2, #e6e6e8); + width: 320px; + flex-shrink: 0; + } +} +.footer-row { + position: fixed; + bottom: 0; + left: $sidebar-width; + width: calc(100% - $sidebar-width); + height: $footer-height; + &.collapsed { + left: $sidebar-width-collapse; + width: calc(100% - $sidebar-width-collapse); + } +} diff --git a/src/views/material-center/components/finished-products/manuscript/upload/upload-success-modal.vue b/src/views/material-center/components/finished-products/manuscript/upload/upload-success-modal.vue new file mode 100644 index 0000000..d0a9706 --- /dev/null +++ b/src/views/material-center/components/finished-products/manuscript/upload/upload-success-modal.vue @@ -0,0 +1,64 @@ + + + +