From 62190c346cf044bdd109e6ea19295dc1b681c89a Mon Sep 17 00:00:00 2001 From: rd <> Date: Tue, 24 Jun 2025 18:19:34 +0800 Subject: [PATCH 01/78] =?UTF-8?q?feat:=20=E8=B5=84=E4=BA=A7=E8=90=A5?= =?UTF-8?q?=E9=94=80=E5=B9=B3=E5=8F=B0=E8=B7=AF=E7=94=B1=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/router/constants.ts | 7 +- src/router/index.ts | 11 +- src/router/routes/modules/dataEngine.ts | 150 +++++++-------- src/router/routes/modules/management.ts | 90 ++++----- .../routes/modules/propertyMarketing.ts | 172 ++++++++++++++++++ src/views/property-marketing/README.md | 1 + .../repository/test/index.vue | 11 ++ 7 files changed, 313 insertions(+), 129 deletions(-) create mode 100644 src/router/routes/modules/propertyMarketing.ts create mode 100644 src/views/property-marketing/README.md create mode 100644 src/views/property-marketing/repository/test/index.vue diff --git a/src/router/constants.ts b/src/router/constants.ts index 1110fe7..cf67bb6 100644 --- a/src/router/constants.ts +++ b/src/router/constants.ts @@ -18,7 +18,8 @@ export const DEFAULT_ROUTE = { }; export const MENU_GROUP_IDS = { - DATA_ENGINE_ID: 1, - MANAGEMENT_ID: -1, - WORK_BENCH_ID: -99, + DATA_ENGINE_ID: 1, // 全域数据分析 + MANAGEMENT_ID: -1, // 管理中心 + PROPERTY_ID: 2, // 资产营销平台 + WORK_BENCH_ID: -99, // 工作台 }; diff --git a/src/router/index.ts b/src/router/index.ts index 600ddfb..ea87ab5 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -48,14 +48,9 @@ const router = createRouter({ requiresAuth: false, }, }, - { - path: '/', - name: '', - children: [...appRoutes, REDIRECT_MAIN, NOT_FOUND_ROUTE], - meta: { - requiresAuth: true, - }, - }, + ...appRoutes, + REDIRECT_MAIN, + NOT_FOUND_ROUTE, ], scrollBehavior() { return { top: 0 }; diff --git a/src/router/routes/modules/dataEngine.ts b/src/router/routes/modules/dataEngine.ts index d190af5..3c3859d 100644 --- a/src/router/routes/modules/dataEngine.ts +++ b/src/router/routes/modules/dataEngine.ts @@ -6,80 +6,82 @@ import { IconBookmark } from '@arco-design/web-vue/es/icon'; import type { AppRouteRecordRaw } from '../types'; import { MENU_GROUP_IDS } from '@/router/constants'; -const COMPONENTS: AppRouteRecordRaw = { - path: 'dataEngine', - name: 'dataEngine', - redirect: 'dataEngine/hotTranslation', - meta: { - locale: '全域数据引擎', - icon: IconBookmark, - requiresAuth: true, - roles: ['*'], - requiresSidebar: true, - id: MENU_GROUP_IDS.DATA_ENGINE_ID, +const COMPONENTS: AppRouteRecordRaw[] = [ + { + path: '/dataEngine', + name: 'DataEngine', + redirect: 'dataEngine/hotTranslation', + meta: { + locale: '全域数据引擎', + icon: IconBookmark, + requiresAuth: true, + roles: ['*'], + requiresSidebar: true, + id: MENU_GROUP_IDS.DATA_ENGINE_ID, + }, + children: [ + { + path: 'hotTranslation', + name: 'DataEngineHotTranslation', + meta: { + locale: '行业热门话题洞察', + requiresAuth: true, + roles: ['*'], + }, + component: () => import('@/views/components/dataEngine/hotTranslation.vue'), + }, + { + path: 'hotCloud', + name: 'DataEngineHotCloud', + meta: { + locale: '行业词云', + requiresAuth: true, + roles: ['*'], + }, + component: () => import('@/views/components/dataEngine/hotCloud.vue'), + }, + { + path: 'keyWord', + name: 'DataEngineKeyWord', + meta: { + locale: '行业关键词动向', + requiresAuth: true, + roles: ['*'], + }, + component: () => import('@/views/components/dataEngine/keyWord.vue'), + }, + { + path: 'userPainPoints', + name: 'DataEngineUserPainPoints', + meta: { + locale: '用户痛点观察', + requiresAuth: true, + roles: ['*'], + }, + component: () => import('@/views/components/dataEngine/userPainPoints.vue'), + }, + { + path: 'keyBrandMovement', + name: 'DataEngineKeyBrandMovement', + meta: { + locale: '重点品牌动向', + requiresAuth: true, + roles: ['*'], + }, + component: () => import('@/views/components/dataEngine/keyBrandMovement.vue'), + }, + { + path: 'userPersona', + name: 'DataEngineUserPersona', + meta: { + locale: '用户画像', + requiresAuth: true, + roles: ['*'], + }, + component: () => import('@/views/components/dataEngine/userPersona.vue'), + }, + ], }, - children: [ - { - path: 'hotTranslation', - name: '行业热门话题洞察', - meta: { - locale: '行业热门话题洞察', - requiresAuth: true, - roles: ['*'], - }, - component: () => import('@/views/components/dataEngine/hotTranslation.vue'), - }, - { - path: 'hotCloud', - name: '行业词云', - meta: { - locale: '行业词云', - requiresAuth: true, - roles: ['*'], - }, - component: () => import('@/views/components/dataEngine/hotCloud.vue'), - }, - { - path: 'keyWord', - name: '行业关键词动向', - meta: { - locale: '行业关键词动向', - requiresAuth: true, - roles: ['*'], - }, - component: () => import('@/views/components/dataEngine/keyWord.vue'), - }, - { - path: 'userPainPoints', - name: '用户痛点观察', - meta: { - locale: '用户痛点观察', - requiresAuth: true, - roles: ['*'], - }, - component: () => import('@/views/components/dataEngine/userPainPoints.vue'), - }, - { - path: 'keyBrandMovement', - name: '重点品牌动向', - meta: { - locale: '重点品牌动向', - requiresAuth: true, - roles: ['*'], - }, - component: () => import('@/views/components/dataEngine/keyBrandMovement.vue'), - }, - { - path: 'userPersona', - name: '用户画像', - meta: { - locale: '用户画像', - requiresAuth: true, - roles: ['*'], - }, - component: () => import('@/views/components/dataEngine/userPersona.vue'), - }, - ], -}; +]; export default COMPONENTS; diff --git a/src/router/routes/modules/management.ts b/src/router/routes/modules/management.ts index cd1c644..eafde1a 100644 --- a/src/router/routes/modules/management.ts +++ b/src/router/routes/modules/management.ts @@ -6,50 +6,52 @@ import { IconBookmark } from '@arco-design/web-vue/es/icon'; import type { AppRouteRecordRaw } from '../types'; import { MENU_GROUP_IDS } from '@/router/constants'; -const COMPONENTS: AppRouteRecordRaw = { - path: 'management', - name: 'management', - redirect: 'management/person', - meta: { - locale: '管理中心', - icon: IconBookmark, - requiresAuth: true, - roles: ['*'], - requiresSidebar: true, - id: MENU_GROUP_IDS.MANAGEMENT_ID, +const COMPONENTS: AppRouteRecordRaw[] = [ + { + path: '/management', + name: 'Management', + redirect: 'management/person', + meta: { + locale: '管理中心', + icon: IconBookmark, + requiresAuth: true, + roles: ['*'], + requiresSidebar: true, + id: MENU_GROUP_IDS.MANAGEMENT_ID, + }, + children: [ + { + path: 'person', + name: 'ManagementPerson', + component: () => import('@/views/components/management/person'), + meta: { + locale: '个人信息', + requiresAuth: true, + roles: ['*'], + }, + }, + { + path: 'enterprise', + name: 'ManagementEnterprise', + component: () => import('@/views/components/management/enterprise'), + meta: { + locale: '企业信息', + requiresAuth: true, + roles: ['*'], + }, + }, + { + path: 'account', + name: 'ManagementAccount', + component: () => import('@/views/components/management/account'), + meta: { + locale: '账号管理', + requiresAuth: true, + roles: ['*'], + }, + }, + ], }, - children: [ - { - path: 'person', - name: '个人信息', - component: () => import('@/views/components/management/person'), - meta: { - locale: '个人信息', - requiresAuth: true, - roles: ['*'], - }, - }, - { - path: 'enterprise', - name: '企业信息', - component: () => import('@/views/components/management/enterprise'), - meta: { - locale: '企业信息', - requiresAuth: true, - roles: ['*'], - }, - }, - { - path: 'account', - name: '账号管理', - component: () => import('@/views/components/management/account'), - meta: { - locale: '账号管理', - requiresAuth: true, - roles: ['*'], - }, - }, - ], -}; +]; export default COMPONENTS; diff --git a/src/router/routes/modules/propertyMarketing.ts b/src/router/routes/modules/propertyMarketing.ts new file mode 100644 index 0000000..5f9ba46 --- /dev/null +++ b/src/router/routes/modules/propertyMarketing.ts @@ -0,0 +1,172 @@ +/** + * 资产营销平台 + */ + +import { IconBookmark } from '@arco-design/web-vue/es/icon'; +import type { AppRouteRecordRaw } from '../types'; +import { MENU_GROUP_IDS } from '@/router/constants'; + +const COMPONENTS: AppRouteRecordRaw[] = [ + { + path: '/repository', + name: 'Repository', + redirect: 'repository/brandMaterials', + meta: { + locale: '企业知识库', + icon: IconBookmark, + requiresAuth: true, + roles: ['*'], + requiresSidebar: true, + id: MENU_GROUP_IDS.PROPERTY_ID, + }, + children: [ + { + path: 'brandMaterials', + name: 'RepositoryBrandMaterials', + meta: { + locale: '品牌物料', + requiresAuth: true, + roles: ['*'], + }, + component: () => import('@/views/property-marketing/repository/test'), + }, + ], + }, + { + path: '/media-account', + name: 'MediaAccount', + redirect: 'media-account/accountManagement', + meta: { + locale: '新媒体账号管理', + icon: IconBookmark, + requiresAuth: true, + roles: ['*'], + requiresSidebar: true, + id: MENU_GROUP_IDS.PROPERTY_ID, + }, + children: [ + { + path: 'accountManagement', + name: 'MediaAccountAccountManagement', + meta: { + locale: '账号管理', + requiresAuth: true, + roles: ['*'], + }, + component: () => import('@/views/property-marketing/repository/test'), + }, + { + path: 'accountDashboard', + name: 'MediaAccountAccountDashboard', + meta: { + locale: '账号看板', + requiresAuth: true, + roles: ['*'], + }, + component: () => import('@/views/property-marketing/repository/test'), + }, + { + path: 'accountDetails', + name: 'MediaAccountAccountDetails', + meta: { + locale: '账号详情', + requiresAuth: true, + roles: ['*'], + }, + component: () => import('@/views/property-marketing/repository/test'), + }, + ], + }, + { + path: '/put-account', + name: 'PutAccount', + redirect: 'put-account/accountManagement', + meta: { + locale: '投放账户管理', + icon: IconBookmark, + requiresAuth: true, + roles: ['*'], + requiresSidebar: true, + id: MENU_GROUP_IDS.PROPERTY_ID, + }, + children: [ + { + path: 'accountManagement', + name: 'PutAccountAccountManagement', + meta: { + locale: '账号管理', + requiresAuth: true, + roles: ['*'], + }, + component: () => import('@/views/property-marketing/repository/test'), + }, + { + path: 'accountData', + name: 'PutAccountAccountData', + meta: { + locale: '账号数据', + requiresAuth: true, + roles: ['*'], + }, + component: () => import('@/views/property-marketing/repository/test'), + }, + { + path: 'accountDashboard', + name: 'PutAccountAccountDashboard', + meta: { + locale: '账号看板', + requiresAuth: true, + roles: ['*'], + }, + component: () => import('@/views/property-marketing/repository/test'), + }, + { + path: 'investmentGuidelines', + name: 'PutAccountInvestmentGuidelines', + meta: { + locale: '投放指南', + requiresAuth: true, + roles: ['*'], + }, + component: () => import('@/views/property-marketing/repository/test'), + }, + ], + }, + { + path: '/intelligent-solution', + name: 'IntelligentSolution', + redirect: 'intelligent-solution/businessAnalysisReport', + meta: { + locale: '智能方案管理', + icon: IconBookmark, + requiresAuth: true, + roles: ['*'], + requiresSidebar: true, + id: MENU_GROUP_IDS.PROPERTY_ID, + }, + children: [ + { + path: 'businessAnalysisReport', + name: 'IntelligentSolutionBusinessAnalysisReport', + meta: { + locale: '业务分析报告', + requiresAuth: true, + roles: ['*'], + }, + component: () => import('@/views/property-marketing/repository/test'), + }, + { + path: 'competitiveProductAnalysisReport', + name: 'IntelligentSolutionCompetitiveProductAnalysisReport', + meta: { + locale: '竟品分析报告', + requiresAuth: true, + roles: ['*'], + }, + component: () => import('@/views/property-marketing/repository/test'), + }, + ], + }, +]; + +export default COMPONENTS; diff --git a/src/views/property-marketing/README.md b/src/views/property-marketing/README.md new file mode 100644 index 0000000..e3dcbcd --- /dev/null +++ b/src/views/property-marketing/README.md @@ -0,0 +1 @@ +## 资产营销平台 diff --git a/src/views/property-marketing/repository/test/index.vue b/src/views/property-marketing/repository/test/index.vue new file mode 100644 index 0000000..a1edfd8 --- /dev/null +++ b/src/views/property-marketing/repository/test/index.vue @@ -0,0 +1,11 @@ + + + + + From eed617d9abf87f8c27f10fae0ee7356f6aed20ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E5=BF=97=E5=86=9B?= <543024265@qq.com> Date: Wed, 25 Jun 2025 15:25:19 +0800 Subject: [PATCH 02/78] =?UTF-8?q?=E6=8A=95=E6=94=BE=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../account-placement/placementGuide.vue | 374 ++++++++++++++++++ 1 file changed, 374 insertions(+) create mode 100644 src/views/property-marketing/account-placement/placementGuide.vue diff --git a/src/views/property-marketing/account-placement/placementGuide.vue b/src/views/property-marketing/account-placement/placementGuide.vue new file mode 100644 index 0000000..8100fa8 --- /dev/null +++ b/src/views/property-marketing/account-placement/placementGuide.vue @@ -0,0 +1,374 @@ + + + + + From f645c3e1c0954ccff7e9117089be954a0367b890 Mon Sep 17 00:00:00 2001 From: rd <> Date: Wed, 25 Jun 2025 18:26:03 +0800 Subject: [PATCH 03/78] =?UTF-8?q?feat:=20=E6=96=B0=E5=AA=92=E4=BD=93?= =?UTF-8?q?=E8=B4=A6=E5=8F=B7=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.cjs | 6 + config/plugins/unocss.ts | 4 +- src/api/all/propertyMarketing.ts | 20 ++ src/api/index.ts | 33 ++-- src/assets/img/media-account/icon-add.png | Bin 0 -> 249 bytes src/assets/img/media-account/icon-delete.png | Bin 0 -> 354 bytes src/assets/img/media-account/icon-dy.png | Bin 0 -> 1842 bytes src/assets/img/media-account/icon-group.png | Bin 0 -> 513 bytes src/assets/img/media-account/icon-success.png | Bin 0 -> 760 bytes src/assets/img/media-account/icon-tag.png | Bin 0 -> 632 bytes src/assets/img/media-account/icon-warn.png | Bin 0 -> 791 bytes src/assets/img/media-account/icon-xhs.png | Bin 0 -> 1201 bytes src/layouts/Basic.vue | 2 +- src/main.ts | 8 +- src/router/constants.ts | 6 +- src/router/routes/modules/dataEngine.ts | 6 + .../routes/modules/propertyMarketing.ts | 4 +- src/styles/components/index.scss | 1 + src/styles/components/input.scss | 5 + src/styles/index.ts | 3 +- src/styles/vars.css | 4 + .../media-account/account-dashboard/index.vue | 12 ++ .../account-dashboard/style.scss | 0 .../components/account-table/index.vue | 80 ++++++++ .../components/account-table/style.scss | 103 ++++++++++ .../components/add-account-modal/index.vue | 31 +++ .../components/add-account-modal/style.scss | 18 ++ .../components/filter-block/index.vue | 160 ++++++++++++++++ .../components/filter-block/style.scss | 36 ++++ .../components/group-manage-modal/index.vue | 32 ++++ .../components/group-manage-modal/style.scss | 17 ++ .../components/tags-manage-modal/index.vue | 31 +++ .../components/tags-manage-modal/style.scss | 18 ++ .../media-account/account-manage/constants.ts | 38 ++++ .../media-account/account-manage/index.vue | 178 ++++++++++++++++++ .../media-account/account-manage/style.scss | 106 +++++++++++ .../components/account-table/index.vue | 80 ++++++++ .../components/account-table/style.scss | 103 ++++++++++ .../components/filter-block/index.vue | 94 +++++++++ .../components/filter-block/style.scss | 36 ++++ .../put-account/account-manage/constants.ts | 36 ++++ .../put-account/account-manage/index.vue | 143 ++++++++++++++ .../put-account/account-manage/style.scss | 106 +++++++++++ 43 files changed, 1537 insertions(+), 23 deletions(-) create mode 100644 src/api/all/propertyMarketing.ts create mode 100644 src/assets/img/media-account/icon-add.png create mode 100644 src/assets/img/media-account/icon-delete.png create mode 100644 src/assets/img/media-account/icon-dy.png create mode 100644 src/assets/img/media-account/icon-group.png create mode 100644 src/assets/img/media-account/icon-success.png create mode 100644 src/assets/img/media-account/icon-tag.png create mode 100644 src/assets/img/media-account/icon-warn.png create mode 100644 src/assets/img/media-account/icon-xhs.png create mode 100644 src/styles/components/index.scss create mode 100644 src/styles/components/input.scss create mode 100644 src/views/property-marketing/media-account/account-dashboard/index.vue create mode 100644 src/views/property-marketing/media-account/account-dashboard/style.scss create mode 100644 src/views/property-marketing/media-account/account-manage/components/account-table/index.vue create mode 100644 src/views/property-marketing/media-account/account-manage/components/account-table/style.scss create mode 100644 src/views/property-marketing/media-account/account-manage/components/add-account-modal/index.vue create mode 100644 src/views/property-marketing/media-account/account-manage/components/add-account-modal/style.scss create mode 100644 src/views/property-marketing/media-account/account-manage/components/filter-block/index.vue create mode 100644 src/views/property-marketing/media-account/account-manage/components/filter-block/style.scss create mode 100644 src/views/property-marketing/media-account/account-manage/components/group-manage-modal/index.vue create mode 100644 src/views/property-marketing/media-account/account-manage/components/group-manage-modal/style.scss create mode 100644 src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/index.vue create mode 100644 src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/style.scss create mode 100644 src/views/property-marketing/media-account/account-manage/constants.ts create mode 100644 src/views/property-marketing/media-account/account-manage/index.vue create mode 100644 src/views/property-marketing/media-account/account-manage/style.scss create mode 100644 src/views/property-marketing/put-account/account-manage/components/account-table/index.vue create mode 100644 src/views/property-marketing/put-account/account-manage/components/account-table/style.scss create mode 100644 src/views/property-marketing/put-account/account-manage/components/filter-block/index.vue create mode 100644 src/views/property-marketing/put-account/account-manage/components/filter-block/style.scss create mode 100644 src/views/property-marketing/put-account/account-manage/constants.ts create mode 100644 src/views/property-marketing/put-account/account-manage/index.vue create mode 100644 src/views/property-marketing/put-account/account-manage/style.scss diff --git a/.eslintrc.cjs b/.eslintrc.cjs index c09b865..a98f933 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -1,3 +1,7 @@ +/* + * @Author: RenXiaoDong + * @Date: 2025-06-24 16:29:10 + */ /* eslint-env node */ // eslint-disable-next-line @typescript-eslint/no-require-imports require('@rushstack/eslint-patch/modern-module-resolution'); @@ -29,6 +33,8 @@ module.exports = { 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 'prettier/prettier': ['error', { endOfLine: 'auto' }], + 'vue/no-duplicate-attributes': 'off', + 'vue/v-on-event-hyphenation': 'off', }, globals: { defineOptions: 'readonly', diff --git a/config/plugins/unocss.ts b/config/plugins/unocss.ts index 8327a11..c5b1970 100644 --- a/config/plugins/unocss.ts +++ b/config/plugins/unocss.ts @@ -1,8 +1,8 @@ /* * @Author: 田鑫 * @Date: 2023-03-05 18:14:16 - * @LastEditors: 田鑫 - * @LastEditTime: 2023-03-05 19:23:48 + * @LastEditors: Please set LastEditors + * @LastEditTime: 2025-06-25 10:54:24 * @Description: */ import Unocss from 'unocss/vite'; diff --git a/src/api/all/propertyMarketing.ts b/src/api/all/propertyMarketing.ts new file mode 100644 index 0000000..0e68177 --- /dev/null +++ b/src/api/all/propertyMarketing.ts @@ -0,0 +1,20 @@ +/* + * @Author: RenXiaoDong + * @Date: 2025-06-25 17:34:56 + */ +import Http from '@/api'; + +// 媒体账号标签-列表 +export const fetchAccountTags = (params = {}) => { + return Http.get('/v1/media-account-tags/list', params); +}; + +// 媒体账号分组-列表 +export const fetchAccountGroups = (params = {}) => { + return Http.get('/v1/media-account-groups/list', params); +}; + +// 媒体运营人员分组-列表 +export const fetchAccountOperators = (params = {}) => { + return Http.get('/v1/media-account-operators/list', params); +}; diff --git a/src/api/index.ts b/src/api/index.ts index 88fd159..30efc74 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -8,21 +8,20 @@ import axios from 'axios'; import type { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'; -import { handleUserLogout } from '@/utils/user'; +import { handleUserLogout, goUserLogin } from '@/utils/user'; +import { useEnterpriseStore } from '@/stores/modules/enterprise'; +import pinia from '@/stores'; const contentType = 'application/json'; const requestTimeout = 30000; -const HttpStatusCode = { - OK: 200, - BadRequest: 400, // 请求参数错误 - Unauthorized: 401, // token 无效或过期 - NotFound: 404, - InternalServerError: 500, -}; - -import { useEnterpriseStore } from '@/stores/modules/enterprise'; -import pinia from '@/stores'; +enum HttpStatusCode { + OK = 200, + BadRequest = 400, // 请求参数错误 + Unauthorized = 401, // token 无效或过期 + NotFound = 404, + InternalServerError = 500, +} //* 导出Request类,可以用来自定义传递配置来创建实例 export class Request { @@ -70,9 +69,15 @@ export class Request { } }, (err: any) => { - const message = err.response?.data?.message ?? err.message; - AMessage.error(message); - // 这里用来处理http常见错误,进行全局提示 + const { message, code } = err.response?.data ?? {}; + AMessage.error(message ?? err.message); + + switch (code) { + case HttpStatusCode.Unauthorized: + goUserLogin(); + break; + } + return Promise.reject(err.response); }, ); diff --git a/src/assets/img/media-account/icon-add.png b/src/assets/img/media-account/icon-add.png new file mode 100644 index 0000000000000000000000000000000000000000..d38660732d460afbcce7a5f0565affc2fd5ebdf6 GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?2=RS;(M3{v?36l5$8 za(7}_cTVOdki(Mh=aoyIY88DX@@bXlwwI+jE>HX zo>f<(&RVM)uE_K&FI0hIN}!c-bjps!z?XL;P|_S%bdoKq6wGDek3|0#c#xau1c!Iw% zIz4)Wwv_et_4SmB?iP7k(UAi5@jM3`!z%9dW+_}P$aSl+GU&n{yMUwtbfL3E&VBAx zW7qZf_upco(yHPnc}hUHvVs#MiK@A?%t_wcgFkKhGaTtIf`dRvAHVEgW^9(+I*+kM znm@;u2BnJASUdCz*0}*JR*MtX$^@o~#Dzwx2xA$^7LPzvmYh?%7V(XjhwSe}r8I%6 zI}2`!rkdz1l}cu62(ZAiB!1P>GU7U4D@9Bm9L9qqN3i0f_b^!;qkYkoUQ%hP;Z8}a zPFGk?Bit|~6uCtKS<2&)?hJ;vY{6*q-x&92uz*8q3BwjBZDxmjrF<7vXA0HwBz%IE zu~TV_B?mm+rPVO!6qy&&bqD=NjGF2mMV{7uZVYfL!GTMf$0PqJF63u;VoFgOsPO4yY6br}j#~nK{ zbmPEDWa@w8@?Tz#ig6q;gQr@Z2#Q_ShjvOQax04 z$M?WL^&bw?7h)vE zPIci)IgLm6??A^sf%ce%Ts+fEx;ZUs-cjbcR?;PS|FClhjxO)TFd-rRDj_7vzf`)p zAb3+yEsB;lB2Li9d7HtuNM7c&rg8C26KoAjsv_===vviL2NwaQ?{&~ z_YhkW5;9VNnFJtpY~){h0efvqAt?<$VQC7x%41l6?;R*#bT0aydlsD|-{IP+X>8C{ zj%tGEDWpE$hj+XQ#Fy4oYSaU{vp%U*gY$JdD1tkC+jji;%;SW#WBjav7V!jztvC(@ zMO;8>xy*7A`kX3YJC0uR07}E(W7Fg(=n#oTNoHoG@!m2HOD8k`3j?`cUvq*pzk3kj z#!a|r;|3^#Sx=6N5b5zNG=@o}b=HtOtV}0H9(xt5-rkQ5vx7+6t&7xr6>QrYGzui+ z$u>gr3KnHnBGHBq-+TkXPt*A4mH*c<0^L@0&M?acOQhk294EHjhkC0vR36*ohZ33HFDPU#Uy04W~0Gg>IiGh z)`Fsf7SFm{O(N3;^( z14MRg|ChV-9dO~y5Ii#Oah!p-r{0^dgZ;TzXaYh?IZ}O?2`zoB83EwsY!eRj(NULQ znYaa?0@P>!e$FUwD>GfFE#ScC>>g49{E&k9S^g6^;zxi4-Fy`eLeL`|IdH-7HhV%z z!Z3K4E-5w7Qf%6b!IAvf1&9ytQ66QjSpchaE4P;^2vY{#*%k!gi5Stg?DoPt>cD|x z0picaiW1v`VJ}Z@b6+k=;DE0zs7&R1Ab;oWsGI9C<;>Z?KxF~JHFaj2;087Mn=w!< zFgoJ($maKPUoM)RB}EHN*FRZyEI=-iGEIdMIlSarOGENmP)b7SFWbL~C5d68F9t@% zkpls$puh{9nD&x}B$kH6E};5(h*a^(48`UYzFM-#v5@%_AcbpRe2AqbBbqoYuPPJjfZ^rsOn{0BY&_924}gG45s00000NkvXXu0mjf D4%*m2 literal 0 HcmV?d00001 diff --git a/src/assets/img/media-account/icon-success.png b/src/assets/img/media-account/icon-success.png new file mode 100644 index 0000000000000000000000000000000000000000..5a92a816ea11117b4a339067d99a3514b02e4774 GIT binary patch literal 760 zcmVo= z(?Ascf9!@Va|9zq6^Tu=p^CboIRWJaNl#E%A}DnUh-Hs}djjAD%?3qTH5;UgP~jtZ zSrU(j|6L5WGj{ArSixH)Gxm7io9{n=o&o-KAQ+%Me&+y$js)ePz(7P0+%)CX@3;Zf zL}dXFKEK_WZ>c^;aG;2|U^<_EMwYTpue#6uD)X)s;9R<`tsnLofEqw8pjSmmsetx) zxGxbtP_qR_KtDqD?0Wb3W8sLR8{3mNeWjEK8vr5>zV5y}*WS}zyf+yh2ov{C>o^u837cIeOQy663ylJylBWC-WH}D@Ud0^ z7n~LEKBz*T^c!>QNI#!)ZcBMiK=a1hfiiL_dc<;Ag?xK5JfUlD(PSZ=BT3s%8Vdm} z+WT5W2#42uapFwxk6&|Td2dS2KoCyS{v81kslswA6rLqvn{{7#NhD0jV*x4(mIPSZ zgh`-id&-N92q`)yI6Of^(<_1CxSY-XSfW zhKr_r3M;Cf8PLzKUMqkTghKlSHVn3AI)5m1gJb7XP7ZS>MmnlWd}=E~W@w_K|9BPHbBt$*4uyXu`SA7{LJ6+!UCBsM8oQ zlh~XXKV6`L0JfRmW0HZ9DV1C`VOr#=HFKsph_9GTTRN{8)NX>6eQ?JV=8trT!2p}g zmEuErs(F<%s`HA1I?SeHp(NB5iWH0Xikz3g!F;REduCQb5apky$@ArF2|38e+~(Tf za*PSTs;0fx_5$!Rzj%vdt?^qI_#j3^_p}2;`I~_7k(l4tVRb;) zb(^IaodAN?9F$A7x0#b?l7GA1%6qE56ynRB0HFm}wD?r2I%R_{z^4tkdKsDr*Tb0a z(nU{?h^LWCi^fy>%$&McST7mUjukdbEPq}C!y`j4*4+p z#*-C*!JDGLFZ1zK4VQBkGl07(vB@_#lv1Qz%x?k4Q@#f9wTh)G!R+icoL;pt=2k1) zaB!r*F!OQM&9&jf&p$Y$M>1anh=uSq-v|&25n{d-z!xIa{9XW8h#2#o0J|V!&7Aq;a*U3XU SB9Tb|0000C9tC>0NnuJ0B<0?#MYoO zF(`H{J0Yy-x3Z;?=9e@Yj{*L75O#q3LGMTG1&P)^GDg(EsO`lHrz(OisV!jM4}4hA zfPv4QQH^La0Hd09oz#CA~#)yah(cxQ-B~fcf)B#~PALWaz|X1gnm}Cv-<}@zk@O|(5kx-e+^E|^d%i(}jhFb*Jo>O- zqE3?!@;8O@R(eSn|G>GB26Mh~Z3kAX|KgYg7$GVPN>^Wo$9&kDDV4pi?Z9gFE<%d= zkda44=RA@=v2jhX06MeZ*94fme(V?GY!vX- zBph&`eGiBR*-IuObN**W8dMyEpJvq+UiQ#7xt$>a7slCee)D*LFw)27jVbSE*6=%3BAtbsGpalUBOn?yZOV~3FQ<~*hzfpi7l?yVT z!=6Cm^Lr(AA(aj4%+#1E-H8x(Bn?U_#je%3%!XVObg$Jk{k&EL<|ZWI?t3QUH`Iaa zb~Twl34Gnap&9TP%0JtoS@xA@s%g9G*^2<1U%zG$n9om-6X-R_IQAf{`!{rl%}=0idfoGzOroM8QQU(euzJlgLJ)*iye)cE@L*V2ogDU(J$P6a7IMil=S2?&PhpW9 z#5KDh0Rw_82>z@$*-cyoF)`CK)6>)4ueR!S&rDAyfgCb%4;J+Fn|k$LRekmI`XNN5 zH4D)Kx z^L}LIdLNYwsRlbdY}?W!JPMw1E%nU#_3lxT+`Jwm$%ZlDdk3#z9%@!YHS(2nz z3ALouUlq%ujz=k~PfwFj<=C+{-?phN=7k}J&!5vKkNw3((jPyP-q;{=U8;Xlg+zJ5)OQi&WM%YMFP{jQSGB3q9`Ljb81fakT*7#J{oVwu$C%f^G+ z>C<4bm-^kiXgSO1^>x4?FmI|>qvflspiZ8I+}*nXjRxo!FQPDZA;4a{*RC0_-Lq$@ zJ~d^=&d?C~_wSprcuYYMJxqFa)$r=YVl*G4Bs};0dBa=hvEJOI@W~U};IR|SbR!_K zJ#@&t^_w@XI3d6F)2GpVe?NFvuR^f6X#Q6P1wk!dr#Q}#%R%AoTgcqG1JdLM*<&me zK#h;Xfb1jtCJ<2VydzL2PDBPUgvroQ0%mW19_(}HK(DL-v7)X{YTJNEju@pfhsTct zmCKwgzA+-dv}DFz21u+$z)+>qu_p;4BFwQ&U%CX4&x4wnfb_+S(E*+$URzG5p?>9x zF{U~)0@VWtz~MC@)xo?Ddy}5(XU_nJhe5N2^x;E`A3S~>A;SqpJg$w78Z<(Y7uXXC zOB@nQ68G@o7HU+hMe|aIxaH7oC1EN>l|q4PXU>o}I~$diB;mjSIf$k#O%lfBFD+3$ zPTGj!M{mb5CFk9^(N5y|dD3fZk=TO=9c9=?Kw??1L%6&Q;iE?;A%lDOIMb?t44Ypn zL27amf`tYC!0Q9|!Uf1Zd zJ17WL5x?w!g)@~)E$R)Dwaqvu+AH#A#C5$L83nvvWHHWq(*fnb { - + diff --git a/src/main.ts b/src/main.ts index f17132d..6fbbb30 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,14 +1,18 @@ +/* + * @Author: RenXiaoDong + * @Date: 2025-06-24 16:29:10 + */ import App from './App.vue'; import router from './router'; import store from './stores'; import '@/api/index'; +import '@arco-design/web-vue/dist/arco.css'; // Arco 默认样式 import './styles'; import './core'; import 'uno.css'; import './mock'; -import '@/styles/vars.css'; // 优先加载 -import '@arco-design/web-vue/dist/arco.css'; // Arco 默认样式 +// import '@/styles/vars.css'; // 优先加载 const app = createApp(App); app.use(store); diff --git a/src/router/constants.ts b/src/router/constants.ts index cf67bb6..6fc8bef 100644 --- a/src/router/constants.ts +++ b/src/router/constants.ts @@ -1,3 +1,7 @@ +/* + * @Author: RenXiaoDong + * @Date: 2025-06-24 16:50:35 + */ export const WHITE_LIST = [ { name: 'notFound', children: [] }, { name: 'login', children: [] }, @@ -20,6 +24,6 @@ export const DEFAULT_ROUTE = { export const MENU_GROUP_IDS = { DATA_ENGINE_ID: 1, // 全域数据分析 MANAGEMENT_ID: -1, // 管理中心 - PROPERTY_ID: 2, // 资产营销平台 + PROPERTY_ID: 10, // 资产营销平台 WORK_BENCH_ID: -99, // 工作台 }; diff --git a/src/router/routes/modules/dataEngine.ts b/src/router/routes/modules/dataEngine.ts index 3c3859d..3c77f74 100644 --- a/src/router/routes/modules/dataEngine.ts +++ b/src/router/routes/modules/dataEngine.ts @@ -27,6 +27,7 @@ const COMPONENTS: AppRouteRecordRaw[] = [ locale: '行业热门话题洞察', requiresAuth: true, roles: ['*'], + id: 2, }, component: () => import('@/views/components/dataEngine/hotTranslation.vue'), }, @@ -37,6 +38,7 @@ const COMPONENTS: AppRouteRecordRaw[] = [ locale: '行业词云', requiresAuth: true, roles: ['*'], + id: 3, }, component: () => import('@/views/components/dataEngine/hotCloud.vue'), }, @@ -47,6 +49,7 @@ const COMPONENTS: AppRouteRecordRaw[] = [ locale: '行业关键词动向', requiresAuth: true, roles: ['*'], + id: 4, }, component: () => import('@/views/components/dataEngine/keyWord.vue'), }, @@ -57,6 +60,7 @@ const COMPONENTS: AppRouteRecordRaw[] = [ locale: '用户痛点观察', requiresAuth: true, roles: ['*'], + id: 5, }, component: () => import('@/views/components/dataEngine/userPainPoints.vue'), }, @@ -67,6 +71,7 @@ const COMPONENTS: AppRouteRecordRaw[] = [ locale: '重点品牌动向', requiresAuth: true, roles: ['*'], + id: 6, }, component: () => import('@/views/components/dataEngine/keyBrandMovement.vue'), }, @@ -77,6 +82,7 @@ const COMPONENTS: AppRouteRecordRaw[] = [ locale: '用户画像', requiresAuth: true, roles: ['*'], + id: 7, }, component: () => import('@/views/components/dataEngine/userPersona.vue'), }, diff --git a/src/router/routes/modules/propertyMarketing.ts b/src/router/routes/modules/propertyMarketing.ts index 5f9ba46..89610b6 100644 --- a/src/router/routes/modules/propertyMarketing.ts +++ b/src/router/routes/modules/propertyMarketing.ts @@ -53,7 +53,7 @@ const COMPONENTS: AppRouteRecordRaw[] = [ requiresAuth: true, roles: ['*'], }, - component: () => import('@/views/property-marketing/repository/test'), + component: () => import('@/views/property-marketing/media-account/account-manage'), }, { path: 'accountDashboard', @@ -98,7 +98,7 @@ const COMPONENTS: AppRouteRecordRaw[] = [ requiresAuth: true, roles: ['*'], }, - component: () => import('@/views/property-marketing/repository/test'), + component: () => import('@/views/property-marketing/put-account/account-manage'), }, { path: 'accountData', diff --git a/src/styles/components/index.scss b/src/styles/components/index.scss new file mode 100644 index 0000000..85aca0b --- /dev/null +++ b/src/styles/components/index.scss @@ -0,0 +1 @@ +@import "./input.scss"; \ No newline at end of file diff --git a/src/styles/components/input.scss b/src/styles/components/input.scss new file mode 100644 index 0000000..a352fa3 --- /dev/null +++ b/src/styles/components/input.scss @@ -0,0 +1,5 @@ +.arco-input-wrapper { + border-radius: 4px; + border-color: #d7d7d9; + background-color: #fff; +} diff --git a/src/styles/index.ts b/src/styles/index.ts index 32f4eac..c40f6c5 100644 --- a/src/styles/index.ts +++ b/src/styles/index.ts @@ -1,3 +1,4 @@ +import './vars.css'; +import './components/index.scss'; import 'normalize.css'; import 'uno.css'; -import './vars.css'; diff --git a/src/styles/vars.css b/src/styles/vars.css index c192269..7a00c4c 100644 --- a/src/styles/vars.css +++ b/src/styles/vars.css @@ -17,6 +17,10 @@ * { box-sizing: border-box; } +p { + margin: 0; + padding: 0; +} .flex { display: flex; diff --git a/src/views/property-marketing/media-account/account-dashboard/index.vue b/src/views/property-marketing/media-account/account-dashboard/index.vue new file mode 100644 index 0000000..d7d4473 --- /dev/null +++ b/src/views/property-marketing/media-account/account-dashboard/index.vue @@ -0,0 +1,12 @@ + + + + + + + diff --git a/src/views/property-marketing/media-account/account-dashboard/style.scss b/src/views/property-marketing/media-account/account-dashboard/style.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/views/property-marketing/media-account/account-manage/components/account-table/index.vue b/src/views/property-marketing/media-account/account-manage/components/account-table/index.vue new file mode 100644 index 0000000..7b89186 --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/account-table/index.vue @@ -0,0 +1,80 @@ + + + + + + diff --git a/src/views/property-marketing/media-account/account-manage/components/account-table/style.scss b/src/views/property-marketing/media-account/account-manage/components/account-table/style.scss new file mode 100644 index 0000000..0a75fe9 --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/account-table/style.scss @@ -0,0 +1,103 @@ +.card-container { + flex: 1; + display: grid; + grid-template-rows: repeat(2, 1fr); /* 2行 */ + grid-template-columns: repeat(4, 1fr); /* 4列 */ + gap: 20px; + .card-item { + border-radius: 8px; + border: 1px solid var(--BG-300, #e6e6e8); + background: var(--BG-white, #fff); + padding: 12px 16px 16px; + display: flex; + align-items: flex-start; + .name { + color: var(--Text-1, #211f24); + font-family: 'Alibaba PuHuiTi'; + font-size: 14px; + font-style: normal; + font-weight: 400; + margin-bottom: 11px; + // line-height: 22px; /* 157.143% */ + } + .label { + color: var(--Text-3, #737478); + font-family: 'Alibaba PuHuiTi'; + font-size: 12px; + font-style: normal; + font-weight: 400; + line-height: 20px; /* 166.667% */ + } + .field-row { + width: 100%; + margin-bottom: 4px; + display: flex; + justify-content: space-between; + .cts { + color: var(--Text-2, #3c4043); + font-family: 'Alibaba PuHuiTi'; + font-size: 12px; + font-style: normal; + font-weight: 400; + line-height: 20px; /* 166.667% */ + } + .status-box { + display: flex; + padding: 0px 8px; + align-items: center; + border-radius: 2px; + background: #f2f3f5; + .text { + color: var(--BG-700, #737478); + font-family: 'Alibaba PuHuiTi'; + font-size: 12px; + font-style: normal; + font-weight: 400; + line-height: 20px; /* 166.667% */ + } + + &-1 { + background: #ebf7f2; + .text { + color: #25c883; + } + } + &-2 { + background: #ffe7e4; + .text { + color: #f64b31; + } + } + } + .tag-box { + display: flex; + height: 16px; + padding: 0px 4px; + align-items: center; + border-radius: 2px; + background: var(--BG-200, #f2f3f5); + .text { + color: var(--Text-2, #3c4043); + font-family: 'Alibaba PuHuiTi'; + font-size: 10px; + font-style: normal; + font-weight: 400; + line-height: normal; + } + &:not(:last-child) { + margin-right: 4px; + } + } + &:last-child { + margin-bottom: 8px; + } + } + + .operate-row { + display: flex; + align-items: center; + justify-content: flex-end; + padding-top: 8px; + } + } +} diff --git a/src/views/property-marketing/media-account/account-manage/components/add-account-modal/index.vue b/src/views/property-marketing/media-account/account-manage/components/add-account-modal/index.vue new file mode 100644 index 0000000..5dbfd99 --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/add-account-modal/index.vue @@ -0,0 +1,31 @@ + + + + + + diff --git a/src/views/property-marketing/media-account/account-manage/components/add-account-modal/style.scss b/src/views/property-marketing/media-account/account-manage/components/add-account-modal/style.scss new file mode 100644 index 0000000..06dee88 --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/add-account-modal/style.scss @@ -0,0 +1,18 @@ +.add-account-modal { + .arco-modal-header { + border-bottom: none; + height: 56px; + padding: 22px 24px 16px 24px; + .arco-modal-title { + justify-content: flex-start; + } + } + .arco-modal-body { + padding: 16px 24px 20px; + } + .arco-modal-footer { + border-top: none; + padding: 0; + } + } + \ No newline at end of file diff --git a/src/views/property-marketing/media-account/account-manage/components/filter-block/index.vue b/src/views/property-marketing/media-account/account-manage/components/filter-block/index.vue new file mode 100644 index 0000000..888191e --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/filter-block/index.vue @@ -0,0 +1,160 @@ + + + + + + diff --git a/src/views/property-marketing/media-account/account-manage/components/filter-block/style.scss b/src/views/property-marketing/media-account/account-manage/components/filter-block/style.scss new file mode 100644 index 0000000..3a33894 --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/filter-block/style.scss @@ -0,0 +1,36 @@ +.container { + :deep(.arco-input-wrapper), + :deep(.arco-select-view-single), + :deep(.arco-select-view-multiple) { + border-radius: 4px; + border-color: #d7d7d9; + background-color: #fff; + &:focus-within, + &.arco-input-focus { + background-color: var(--color-bg-2); + border-color: rgb(var(--primary-6)); + box-shadow: 0 0 0 0 var(--color-primary-light-2); + } + } + .filter-row { + .filter-row-item { + &:not(:last-child) { + margin-right: 24px; + } + .label { + margin-right: 8px; + color: #211f24; + font-family: 'Alibaba PuHuiTi'; + font-size: 14px; + font-style: normal; + font-weight: 400; + flex-shrink: 0; + line-height: 22px; /* 157.143% */ + } + :deep(.arco-space-item) { + width: 100%; + } + } + } + +} diff --git a/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/index.vue b/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/index.vue new file mode 100644 index 0000000..605f2ca --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/index.vue @@ -0,0 +1,32 @@ + + + + + + diff --git a/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/style.scss b/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/style.scss new file mode 100644 index 0000000..131322b --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/style.scss @@ -0,0 +1,17 @@ +.account-manage-modal { + .arco-modal-header { + border-bottom: none; + height: 56px; + padding: 22px 24px 16px 24px; + .arco-modal-title { + justify-content: flex-start; + } + } + .arco-modal-body { + padding: 16px 24px 20px; + } + .arco-modal-footer { + border-top: none; + padding: 0; + } +} diff --git a/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/index.vue b/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/index.vue new file mode 100644 index 0000000..471dfb2 --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/index.vue @@ -0,0 +1,31 @@ + + + + + + diff --git a/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/style.scss b/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/style.scss new file mode 100644 index 0000000..6c21865 --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/style.scss @@ -0,0 +1,18 @@ +.tags-manage-modal { + .arco-modal-header { + border-bottom: none; + height: 56px; + padding: 22px 24px 16px 24px; + .arco-modal-title { + justify-content: flex-start; + } + } + .arco-modal-body { + padding: 16px 24px 20px; + } + .arco-modal-footer { + border-top: none; + padding: 0; + } + } + \ No newline at end of file diff --git a/src/views/property-marketing/media-account/account-manage/constants.ts b/src/views/property-marketing/media-account/account-manage/constants.ts new file mode 100644 index 0000000..39ae6fd --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/constants.ts @@ -0,0 +1,38 @@ +/* + * @Author: RenXiaoDong + * @Date: 2025-06-25 15:24:59 + */ +export const INITIAL_QUERY = { + search: '', + status: '', + platform: '', + operator_id: '', + group_ids: [], + tag_ids: [], +}; + +export const PLATFORM_LIST = [ + { + label: '抖音', + value: 0, + }, + { + label: '小红书', + value: 1, + }, +]; + +export const STATUS_LIST = [ + { + label: '未授权', + value: 0, + }, + { + label: '正常', + value: 1, + }, + { + label: '异常', + value: 2, + }, +]; diff --git a/src/views/property-marketing/media-account/account-manage/index.vue b/src/views/property-marketing/media-account/account-manage/index.vue new file mode 100644 index 0000000..6c59e6b --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/index.vue @@ -0,0 +1,178 @@ + + + + + + diff --git a/src/views/property-marketing/media-account/account-manage/style.scss b/src/views/property-marketing/media-account/account-manage/style.scss new file mode 100644 index 0000000..97d0462 --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/style.scss @@ -0,0 +1,106 @@ +.account-manage-wrap { + height: 100%; + display: flex; + flex-direction: column; + :deep(.search-btn) { + border-radius: 4px; + border: 1px solid var(--Brand-Brand-6, #6d4cfe); + color: #6d4cfe; + } + :deep(.reset-btn) { + border-radius: 4px; + border: 1px solid var(--BG-500, #b1b2b5); + background: var(--BG-white, #fff); + } + .filter-wrap { + border-radius: 8px; + border: 1px solid #e6e6e8; + .top { + .title { + font-family: 'Alibaba PuHuiTi'; + font-style: normal; + } + :deep(.arco-btn) { + .arco-btn-icon { + line-height: 16px; + } + } + } + } + .tip-row { + border-radius: 2px; + background: #f0edff; + .label { + font-family: 'Alibaba PuHuiTi'; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; + } + &.normal { + background: #ebf7f2; + .label { + color: #211f24; + } + } + &.abnormal { + background: #ffe7e4; + .label { + color: #211f24; + } + } + .err-btn { + background-color: #f64b31 !important; + color: var(--BG-white, #fff); + font-family: 'PingFang SC'; + font-size: 12px; + font-style: normal; + font-weight: 400; + line-height: 20px; /* 166.667% */ + } + } + .card-wrap { + display: flex; + flex-direction: column; + .pagination-box { + display: flex; + width: 100%; + padding: 16px 24px; + justify-content: flex-end; + align-items: center; + :deep(.arco-pagination) { + .arco-pagination-list { + .arco-pagination-item { + border-radius: 4px; + border: 1px solid var(--BG-300, #e6e6e8); + &.arco-pagination-item-ellipsis { + border: none; + } + + &.arco-pagination-item-active { + background-color: transparent; + border: 1px solid var(--Brand-Brand-6, #6d4cfe); + } + } + } + .arco-pagination-jumper-input { + border-radius: 4px; + border: 1px solid var(--BG-300, #e6e6e8); + } + .arco-pagination-jumper-prepend { + color: var(--Text-2, #3c4043); + text-align: right; + font-family: 'Alibaba PuHuiTi'; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; /* 157.143% */ + } + .arco-select-view-single { + border-radius: 4px; + border: 1px solid var(--BG-300, #e6e6e8); + } + } + } + } +} diff --git a/src/views/property-marketing/put-account/account-manage/components/account-table/index.vue b/src/views/property-marketing/put-account/account-manage/components/account-table/index.vue new file mode 100644 index 0000000..8828433 --- /dev/null +++ b/src/views/property-marketing/put-account/account-manage/components/account-table/index.vue @@ -0,0 +1,80 @@ + + + + + + diff --git a/src/views/property-marketing/put-account/account-manage/components/account-table/style.scss b/src/views/property-marketing/put-account/account-manage/components/account-table/style.scss new file mode 100644 index 0000000..0a75fe9 --- /dev/null +++ b/src/views/property-marketing/put-account/account-manage/components/account-table/style.scss @@ -0,0 +1,103 @@ +.card-container { + flex: 1; + display: grid; + grid-template-rows: repeat(2, 1fr); /* 2行 */ + grid-template-columns: repeat(4, 1fr); /* 4列 */ + gap: 20px; + .card-item { + border-radius: 8px; + border: 1px solid var(--BG-300, #e6e6e8); + background: var(--BG-white, #fff); + padding: 12px 16px 16px; + display: flex; + align-items: flex-start; + .name { + color: var(--Text-1, #211f24); + font-family: 'Alibaba PuHuiTi'; + font-size: 14px; + font-style: normal; + font-weight: 400; + margin-bottom: 11px; + // line-height: 22px; /* 157.143% */ + } + .label { + color: var(--Text-3, #737478); + font-family: 'Alibaba PuHuiTi'; + font-size: 12px; + font-style: normal; + font-weight: 400; + line-height: 20px; /* 166.667% */ + } + .field-row { + width: 100%; + margin-bottom: 4px; + display: flex; + justify-content: space-between; + .cts { + color: var(--Text-2, #3c4043); + font-family: 'Alibaba PuHuiTi'; + font-size: 12px; + font-style: normal; + font-weight: 400; + line-height: 20px; /* 166.667% */ + } + .status-box { + display: flex; + padding: 0px 8px; + align-items: center; + border-radius: 2px; + background: #f2f3f5; + .text { + color: var(--BG-700, #737478); + font-family: 'Alibaba PuHuiTi'; + font-size: 12px; + font-style: normal; + font-weight: 400; + line-height: 20px; /* 166.667% */ + } + + &-1 { + background: #ebf7f2; + .text { + color: #25c883; + } + } + &-2 { + background: #ffe7e4; + .text { + color: #f64b31; + } + } + } + .tag-box { + display: flex; + height: 16px; + padding: 0px 4px; + align-items: center; + border-radius: 2px; + background: var(--BG-200, #f2f3f5); + .text { + color: var(--Text-2, #3c4043); + font-family: 'Alibaba PuHuiTi'; + font-size: 10px; + font-style: normal; + font-weight: 400; + line-height: normal; + } + &:not(:last-child) { + margin-right: 4px; + } + } + &:last-child { + margin-bottom: 8px; + } + } + + .operate-row { + display: flex; + align-items: center; + justify-content: flex-end; + padding-top: 8px; + } + } +} diff --git a/src/views/property-marketing/put-account/account-manage/components/filter-block/index.vue b/src/views/property-marketing/put-account/account-manage/components/filter-block/index.vue new file mode 100644 index 0000000..39dc8f2 --- /dev/null +++ b/src/views/property-marketing/put-account/account-manage/components/filter-block/index.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/src/views/property-marketing/put-account/account-manage/components/filter-block/style.scss b/src/views/property-marketing/put-account/account-manage/components/filter-block/style.scss new file mode 100644 index 0000000..3a33894 --- /dev/null +++ b/src/views/property-marketing/put-account/account-manage/components/filter-block/style.scss @@ -0,0 +1,36 @@ +.container { + :deep(.arco-input-wrapper), + :deep(.arco-select-view-single), + :deep(.arco-select-view-multiple) { + border-radius: 4px; + border-color: #d7d7d9; + background-color: #fff; + &:focus-within, + &.arco-input-focus { + background-color: var(--color-bg-2); + border-color: rgb(var(--primary-6)); + box-shadow: 0 0 0 0 var(--color-primary-light-2); + } + } + .filter-row { + .filter-row-item { + &:not(:last-child) { + margin-right: 24px; + } + .label { + margin-right: 8px; + color: #211f24; + font-family: 'Alibaba PuHuiTi'; + font-size: 14px; + font-style: normal; + font-weight: 400; + flex-shrink: 0; + line-height: 22px; /* 157.143% */ + } + :deep(.arco-space-item) { + width: 100%; + } + } + } + +} diff --git a/src/views/property-marketing/put-account/account-manage/constants.ts b/src/views/property-marketing/put-account/account-manage/constants.ts new file mode 100644 index 0000000..18c8201 --- /dev/null +++ b/src/views/property-marketing/put-account/account-manage/constants.ts @@ -0,0 +1,36 @@ +/* + * @Author: RenXiaoDong + * @Date: 2025-06-25 15:24:59 + */ +export const INITIAL_QUERY = { + search: '', + status: '', + platform: '', + operator_id: '', +}; + +export const PLATFORM_LIST = [ + { + label: '抖音', + value: 0, + }, + { + label: '小红书', + value: 1, + }, +]; + +export const STATUS_LIST = [ + { + label: '未授权', + value: 0, + }, + { + label: '正常', + value: 1, + }, + { + label: '异常', + value: 2, + }, +]; diff --git a/src/views/property-marketing/put-account/account-manage/index.vue b/src/views/property-marketing/put-account/account-manage/index.vue new file mode 100644 index 0000000..44f7ff1 --- /dev/null +++ b/src/views/property-marketing/put-account/account-manage/index.vue @@ -0,0 +1,143 @@ + + + + + + diff --git a/src/views/property-marketing/put-account/account-manage/style.scss b/src/views/property-marketing/put-account/account-manage/style.scss new file mode 100644 index 0000000..97d0462 --- /dev/null +++ b/src/views/property-marketing/put-account/account-manage/style.scss @@ -0,0 +1,106 @@ +.account-manage-wrap { + height: 100%; + display: flex; + flex-direction: column; + :deep(.search-btn) { + border-radius: 4px; + border: 1px solid var(--Brand-Brand-6, #6d4cfe); + color: #6d4cfe; + } + :deep(.reset-btn) { + border-radius: 4px; + border: 1px solid var(--BG-500, #b1b2b5); + background: var(--BG-white, #fff); + } + .filter-wrap { + border-radius: 8px; + border: 1px solid #e6e6e8; + .top { + .title { + font-family: 'Alibaba PuHuiTi'; + font-style: normal; + } + :deep(.arco-btn) { + .arco-btn-icon { + line-height: 16px; + } + } + } + } + .tip-row { + border-radius: 2px; + background: #f0edff; + .label { + font-family: 'Alibaba PuHuiTi'; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; + } + &.normal { + background: #ebf7f2; + .label { + color: #211f24; + } + } + &.abnormal { + background: #ffe7e4; + .label { + color: #211f24; + } + } + .err-btn { + background-color: #f64b31 !important; + color: var(--BG-white, #fff); + font-family: 'PingFang SC'; + font-size: 12px; + font-style: normal; + font-weight: 400; + line-height: 20px; /* 166.667% */ + } + } + .card-wrap { + display: flex; + flex-direction: column; + .pagination-box { + display: flex; + width: 100%; + padding: 16px 24px; + justify-content: flex-end; + align-items: center; + :deep(.arco-pagination) { + .arco-pagination-list { + .arco-pagination-item { + border-radius: 4px; + border: 1px solid var(--BG-300, #e6e6e8); + &.arco-pagination-item-ellipsis { + border: none; + } + + &.arco-pagination-item-active { + background-color: transparent; + border: 1px solid var(--Brand-Brand-6, #6d4cfe); + } + } + } + .arco-pagination-jumper-input { + border-radius: 4px; + border: 1px solid var(--BG-300, #e6e6e8); + } + .arco-pagination-jumper-prepend { + color: var(--Text-2, #3c4043); + text-align: right; + font-family: 'Alibaba PuHuiTi'; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; /* 157.143% */ + } + .arco-select-view-single { + border-radius: 4px; + border: 1px solid var(--BG-300, #e6e6e8); + } + } + } + } +} From 573af348894b4b6ddcf89b11081952d6f4628bba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E5=BF=97=E5=86=9B?= <543024265@qq.com> Date: Wed, 25 Jun 2025 19:33:02 +0800 Subject: [PATCH 04/78] =?UTF-8?q?=E6=8A=95=E6=94=BE=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../routes/modules/propertyMarketing.ts | 2 +- .../account-placement/placementGuide.less | 181 +++++++ .../account-placement/placementGuide.vue | 509 ++++++------------ 3 files changed, 350 insertions(+), 342 deletions(-) create mode 100644 src/views/property-marketing/account-placement/placementGuide.less diff --git a/src/router/routes/modules/propertyMarketing.ts b/src/router/routes/modules/propertyMarketing.ts index 5f9ba46..a15af43 100644 --- a/src/router/routes/modules/propertyMarketing.ts +++ b/src/router/routes/modules/propertyMarketing.ts @@ -128,7 +128,7 @@ const COMPONENTS: AppRouteRecordRaw[] = [ requiresAuth: true, roles: ['*'], }, - component: () => import('@/views/property-marketing/repository/test'), + component: () => import('@/views/property-marketing/account-placement/placementGuide'), }, ], }, diff --git a/src/views/property-marketing/account-placement/placementGuide.less b/src/views/property-marketing/account-placement/placementGuide.less new file mode 100644 index 0000000..58e2f49 --- /dev/null +++ b/src/views/property-marketing/account-placement/placementGuide.less @@ -0,0 +1,181 @@ +.placement-guide-style { + //每块div布局 + .part-div { + width: 100%; + background: var(--BG-white, white); + overflow: hidden; + border-radius: 8px; + outline: 1px var(--BG-300, #E6E6E8) solid; + outline-offset: -1px; + flex-direction: column; + justify-content: flex-start; + display: inline-flex; + margin: 10px; + } + + //每块div 头部 + .part-div-header { + align-self: stretch; + height: 64px; + padding-left: 24px; + padding-right: 24px; + padding-top: 10px; + padding-bottom: 10px; + justify-content: flex-start; + align-items: center; + display: inline-flex + } + + //每块div 标题 + .part-div-header-title { + justify-content: center; + display: flex; + flex-direction: column; + color: var(--Text-1, #211F24); + font-size: 18px; + font-family: Alibaba PuHuiTi; + font-weight: 400; + line-height: 26px; + word-wrap: break-word; + } + + + //账户列表-表格 + .account-table { + padding: 1px 24px 20px 24px; + width: 100%; + } + + //账户列表-分页 + .account-page { + margin-left: 300px; + + } + + .month-data-body { + width: 100%; + padding-bottom: 20px; + padding-left: 24px; + padding-right: 24px; + background: var(--BG-white, white); + overflow: hidden; + border-radius: 8px; + outline: 1px var(--BG-300, #E6E6E8) solid; + outline-offset: -1px; + flex-direction: column; + justify-content: flex-start; + align-items: center; + display: inline-flex; + margin: 10px; + } + + //本周摘要div + .month-body-div { + align-self: stretch; + height: 64px; + padding-top: 10px; + padding-bottom: 10px; + justify-content: space-between; + align-items: center; + display: inline-flex + } + + //本月摘要标题 + .month-data-title { + justify-content: center; + display: flex; + flex-direction: column; + color: var(--Text-1, #211F24); + font-size: 18px; + font-family: Alibaba PuHuiTi; + font-weight: 400; + line-height: 26px; + word-wrap: break-word + } + + //本月摘要-蓝色字体 + .month-text-blue { + color: var(--Brand-Brand-6, #6D4CFE); + font-size: 16px; + font-family: Alibaba PuHuiTi; + font-weight: 400; + line-height: 24px; + word-wrap: break-word + } + + //红色字体 + .month-text-red { + color: var(--Functional-Danger-6, #F64B31); + font-size: 16px; + font-family: Alibaba PuHuiTi; + font-weight: 400; + line-height: 24px; + word-wrap: break-word + } + + //黑色字体 + .month-text-black { + color: var(--Text-1, #211F24); + font-size: 16px; + font-family: Alibaba PuHuiTi; + font-weight: 400; + line-height: 24px; + word-wrap: break-word + } + + //本月摘要数据-div + .month-data-div { + align-self: stretch; + padding: 16px 30px 16px 16px; + margin-left: 20px; + margin-right: 20px; + margin-bottom: 20px; + background: var(--Brand-Brand-1, #F0EDFF); + overflow: hidden; + border-radius: 8px; + flex-direction: column; + justify-content: flex-start; + align-items: flex-start; + gap: 12px; + display: flex; + } + + //投放建议-总体策略 + .overall-strategy { + width: 100%; + height: 40%; + padding: 20px 24px 20px 16px; + background: var(--BG-100, #F7F8FA); + overflow: hidden; + border-radius: 8px; + flex-direction: column; + justify-content: flex-start; + align-items: flex-start; + gap: 12px; + display: inline-flex; + margin: 10px 0px 15px 20px; + + } + + //投放优化每块div小标题 + .placement-optimization-title { + // 总体策略 + color: var(--Text-1, #211F24); + font-size: 16px; + font-family: Alibaba PuHuiTi; + font-weight: 400; + line-height: 22px; + word-wrap: break-word + } + + .placement-optimization-str { + align-self: stretch; + color: var(--Text-2, #3C4043); + font-size: 14px; + font-family: Alibaba PuHuiTi; + font-weight: 400; + line-height: 22px; + word-wrap: break-word + } + +} diff --git a/src/views/property-marketing/account-placement/placementGuide.vue b/src/views/property-marketing/account-placement/placementGuide.vue index 8100fa8..1629a6e 100644 --- a/src/views/property-marketing/account-placement/placementGuide.vue +++ b/src/views/property-marketing/account-placement/placementGuide.vue @@ -1,374 +1,201 @@ From ccfa7baff1a6ad64364c578d171f67da35c15b67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E5=BF=97=E5=86=9B?= <543024265@qq.com> Date: Thu, 26 Jun 2025 11:35:23 +0800 Subject: [PATCH 05/78] =?UTF-8?q?=E6=99=BA=E8=83=BD=E6=96=B9=E6=A1=88?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../routes/modules/propertyMarketing.ts | 6 +- .../enterpriseKnowledge/userPainPoints.vue | 325 ++++++++++++++++++ .../enterpriseKnowledge/brandMaterials.vue | 3 + .../businessAnalysisReport.vue | 137 ++++++++ .../competitiveProductAnalysisReport.vue | 114 ++++++ 5 files changed, 582 insertions(+), 3 deletions(-) create mode 100644 src/views/components/enterpriseKnowledge/userPainPoints.vue create mode 100644 src/views/property-marketing/enterpriseKnowledge/brandMaterials.vue create mode 100644 src/views/property-marketing/intelligent-solution/businessAnalysisReport.vue create mode 100644 src/views/property-marketing/intelligent-solution/competitiveProductAnalysisReport.vue diff --git a/src/router/routes/modules/propertyMarketing.ts b/src/router/routes/modules/propertyMarketing.ts index a15af43..daaaa52 100644 --- a/src/router/routes/modules/propertyMarketing.ts +++ b/src/router/routes/modules/propertyMarketing.ts @@ -28,7 +28,7 @@ const COMPONENTS: AppRouteRecordRaw[] = [ requiresAuth: true, roles: ['*'], }, - component: () => import('@/views/property-marketing/repository/test'), + component: () => import('@/views/property-marketing/enterpriseKnowledge/brandMaterials.vue'), }, ], }, @@ -153,7 +153,7 @@ const COMPONENTS: AppRouteRecordRaw[] = [ requiresAuth: true, roles: ['*'], }, - component: () => import('@/views/property-marketing/repository/test'), + component: () => import('@/views/property-marketing/intelligent-solution/businessAnalysisReport'), }, { path: 'competitiveProductAnalysisReport', @@ -163,7 +163,7 @@ const COMPONENTS: AppRouteRecordRaw[] = [ requiresAuth: true, roles: ['*'], }, - component: () => import('@/views/property-marketing/repository/test'), + component: () => import('@/views/property-marketing/intelligent-solution/competitiveProductAnalysisReport'), }, ], }, diff --git a/src/views/components/enterpriseKnowledge/userPainPoints.vue b/src/views/components/enterpriseKnowledge/userPainPoints.vue new file mode 100644 index 0000000..57d77f9 --- /dev/null +++ b/src/views/components/enterpriseKnowledge/userPainPoints.vue @@ -0,0 +1,325 @@ + + + + + diff --git a/src/views/property-marketing/enterpriseKnowledge/brandMaterials.vue b/src/views/property-marketing/enterpriseKnowledge/brandMaterials.vue new file mode 100644 index 0000000..c85230c --- /dev/null +++ b/src/views/property-marketing/enterpriseKnowledge/brandMaterials.vue @@ -0,0 +1,3 @@ + diff --git a/src/views/property-marketing/intelligent-solution/businessAnalysisReport.vue b/src/views/property-marketing/intelligent-solution/businessAnalysisReport.vue new file mode 100644 index 0000000..56011c2 --- /dev/null +++ b/src/views/property-marketing/intelligent-solution/businessAnalysisReport.vue @@ -0,0 +1,137 @@ + + + + + diff --git a/src/views/property-marketing/intelligent-solution/competitiveProductAnalysisReport.vue b/src/views/property-marketing/intelligent-solution/competitiveProductAnalysisReport.vue new file mode 100644 index 0000000..d71f0ab --- /dev/null +++ b/src/views/property-marketing/intelligent-solution/competitiveProductAnalysisReport.vue @@ -0,0 +1,114 @@ + + + + + From ace3d9b574d3bf43d56f3cb1e4bfdbbc862cda1f Mon Sep 17 00:00:00 2001 From: rd <> Date: Thu, 26 Jun 2025 11:36:46 +0800 Subject: [PATCH 06/78] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E8=B4=A6?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/all/propertyMarketing.ts | 30 ++ .../img/media-account/icon-download.png | Bin 0 -> 421 bytes src/assets/img/media-account/icon-warn-1.png | Bin 0 -> 639 bytes .../components/add-account-modal/index.vue | 273 +++++++++++++++++- .../components/add-account-modal/style.scss | 108 ++++++- .../components/filter-block/index.vue | 31 +- .../components/group-manage-modal/index.vue | 9 +- .../components/group-manage-modal/style.scss | 1 + .../components/group-select/index.vue | 64 ++++ .../components/import-prompt-modal/index.vue | 51 ++++ .../components/import-prompt-modal/style.scss | 32 ++ .../components/qrCode-modal/index.vue | 46 +++ .../components/qrCode-modal/style.scss | 19 ++ .../components/tag-select/index.vue | 64 ++++ .../components/tags-manage-modal/index.vue | 9 +- .../components/tags-manage-modal/style.scss | 31 +- .../media-account/account-manage/index.vue | 14 +- 17 files changed, 712 insertions(+), 70 deletions(-) create mode 100644 src/assets/img/media-account/icon-download.png create mode 100644 src/assets/img/media-account/icon-warn-1.png create mode 100644 src/views/property-marketing/media-account/account-manage/components/group-select/index.vue create mode 100644 src/views/property-marketing/media-account/account-manage/components/import-prompt-modal/index.vue create mode 100644 src/views/property-marketing/media-account/account-manage/components/import-prompt-modal/style.scss create mode 100644 src/views/property-marketing/media-account/account-manage/components/qrCode-modal/index.vue create mode 100644 src/views/property-marketing/media-account/account-manage/components/qrCode-modal/style.scss create mode 100644 src/views/property-marketing/media-account/account-manage/components/tag-select/index.vue diff --git a/src/api/all/propertyMarketing.ts b/src/api/all/propertyMarketing.ts index 0e68177..0e86efa 100644 --- a/src/api/all/propertyMarketing.ts +++ b/src/api/all/propertyMarketing.ts @@ -18,3 +18,33 @@ export const fetchAccountGroups = (params = {}) => { export const fetchAccountOperators = (params = {}) => { return Http.get('/v1/media-account-operators/list', params); }; + +// 媒体账号-分页 +export const getMediaAccounts = (params = {}) => { + return Http.get('/v1/media-accounts', params); +}; + +// 媒体账号-添加 +export const postMediaAccounts = (params = {}) => { + return Http.post('/v1/media-accounts', params); +}; + +// 媒体账号-详情 +export const getMediaAccountsDetail = (id: string) => { + return Http.get(`/v1/media-accounts/${id}`); +}; + +// 媒体账号-修改 +export const putMediaAccounts = (id: string) => { + return Http.put(`/v1/media-accounts/${id}`); +}; + +// 媒体账号-删除 +export const deleteMediaAccounts = (id: string) => { + return Http.delete(`/v1/media-accounts/${id}`); +}; + +// 媒体账号-获取模板地址 +export const getTemplateUrl = (params = {}) => { + return Http.get('/v1/media-accounts/template', params); +}; diff --git a/src/assets/img/media-account/icon-download.png b/src/assets/img/media-account/icon-download.png new file mode 100644 index 0000000000000000000000000000000000000000..7a0db1bc50025de9592d500ac35f747e9fe1bf3f GIT binary patch literal 421 zcmV;W0b2fvP)GL+4;I{It2nXL-6D_`EC)ZuEZRvm&csm;Xw>f$ix>=+*`z2PvD6{%>;oU5Cl#~ zVA$aXj)0SZ6gM*-4-&rLwN};)67%6I>?ELP{K`O+!4KOcWKPz|+Idb62b_9=j_EGa zJO-mtN`MVMHx*wD2wys)q08RR-SDQv&0mQ!aVmGZ9+$|3cFuS;y$ty1wK zr6T`IcoZ+vJg_7@ix;V${7KC5ExtD*As6<*I)Q#$KNk^C(ovk@0QB4P>t-$`PDj!8 z@|^u0VCpTYWjFu?(_*G>Ib0E_y&2h$ATf+1lD?^xnzf&R{SFXk2%Hl?lG~7mq9TDG P00000NkvXXu0mjfBi5+B literal 0 HcmV?d00001 diff --git a/src/assets/img/media-account/icon-warn-1.png b/src/assets/img/media-account/icon-warn-1.png new file mode 100644 index 0000000000000000000000000000000000000000..40402eba487815a406941dbf66496801eadeb21e GIT binary patch literal 639 zcmV-_0)YLAP)KuGS6A2z7(FfeWO@ zk3tClJi_BWfIT}7Lj-(=BP@{7Q&J>2Q5u){rn-Vkb2h>c0tpgG!Y;w_K*g+MmxAtp zVb_?#6EA`Mm4qdDqGF0LN)np;2<;?LP9?_--7V%CbxOZEO?~OU)d7i1N!%yGt!AU7 z(Jx#gTLo@W+zO{itH2(_tq>y5Y%4u!>G+84i-R1a`o4`AEy&++M=j6rqo6)z^#J)| z8GKk`#BT7RSDP)!r1ks|er|+&afvc~soa;LS|3MPub-*aNu{6F*t8(SErueIyOUPc zKsw~Va>ij~wT3mi1y3;P-{q=e^r5Okj0^*g>4D`IeUSz=-=QRLnBg! z28T-Hg7(r-o05YkA9gOwJYum`dCVGB;DO8?LdhcfHc@6#u~!|F6$pV-pl}5yE>T7p zg&r50_TmYKf^9}Y8v^MKL`+tqe@YsAs#hKwZ)F&_MY)zfaf^f@H&)55BAYfw3dtJmIV2V6OqzVa+wdOBW3#^Daz}&O* Z`~v?$k_a=)qKN diff --git a/src/views/property-marketing/media-account/account-manage/components/import-prompt-modal/style.scss b/src/views/property-marketing/media-account/account-manage/components/import-prompt-modal/style.scss new file mode 100644 index 0000000..5ac2afe --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/import-prompt-modal/style.scss @@ -0,0 +1,32 @@ +.import-prompt-modal { + border-radius: 8px; + + .arco-modal-header { + border-bottom: none; + height: 56px; + padding: 22px 24px 16px 24px; + .arco-modal-title { + justify-content: flex-start; + } + } + .arco-modal-body { + padding: 20px 24px 20px; + .cancel-btn { + border-radius: 4px; + border: 1px solid var(--BG-500, #b1b2b5); + background: var(--BG-white, #fff); + } + .tip { + color: var(--Text-1, #211f24); + font-family: 'Alibaba PuHuiTi'; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; /* 157.143% */ + } + } + .arco-modal-footer { + border-top: none; + padding: 0; + } +} diff --git a/src/views/property-marketing/media-account/account-manage/components/qrCode-modal/index.vue b/src/views/property-marketing/media-account/account-manage/components/qrCode-modal/index.vue new file mode 100644 index 0000000..c5b12c9 --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/qrCode-modal/index.vue @@ -0,0 +1,46 @@ + + + + + + diff --git a/src/views/property-marketing/media-account/account-manage/components/qrCode-modal/style.scss b/src/views/property-marketing/media-account/account-manage/components/qrCode-modal/style.scss new file mode 100644 index 0000000..8c1aba1 --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/qrCode-modal/style.scss @@ -0,0 +1,19 @@ +.qrCode-modal { + border-radius: 8px; + + .arco-modal-header { + border-bottom: none; + height: 56px; + padding: 22px 24px 16px 24px; + .arco-modal-title { + justify-content: flex-start; + } + } + .arco-modal-body { + padding: 20px 24px 20px; + } + .arco-modal-footer { + border-top: none; + padding: 0; + } +} diff --git a/src/views/property-marketing/media-account/account-manage/components/tag-select/index.vue b/src/views/property-marketing/media-account/account-manage/components/tag-select/index.vue new file mode 100644 index 0000000..189e336 --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/tag-select/index.vue @@ -0,0 +1,64 @@ + + + + diff --git a/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/index.vue b/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/index.vue index 471dfb2..25aa433 100644 --- a/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/index.vue +++ b/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/index.vue @@ -3,7 +3,14 @@ * @Date: 2025-06-25 17:51:46 --> diff --git a/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/style.scss b/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/style.scss index 6c21865..318e122 100644 --- a/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/style.scss +++ b/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/style.scss @@ -1,18 +1,19 @@ .tags-manage-modal { - .arco-modal-header { - border-bottom: none; - height: 56px; - padding: 22px 24px 16px 24px; - .arco-modal-title { - justify-content: flex-start; - } - } - .arco-modal-body { - padding: 16px 24px 20px; - } - .arco-modal-footer { - border-top: none; - padding: 0; + border-radius: 8px; + + .arco-modal-header { + border-bottom: none; + height: 56px; + padding: 22px 24px 16px 24px; + .arco-modal-title { + justify-content: flex-start; } } - \ No newline at end of file + .arco-modal-body { + padding: 16px 24px 20px; + } + .arco-modal-footer { + border-top: none; + padding: 0; + } +} diff --git a/src/views/property-marketing/media-account/account-manage/index.vue b/src/views/property-marketing/media-account/account-manage/index.vue index 6c59e6b..14cfc0e 100644 --- a/src/views/property-marketing/media-account/account-manage/index.vue +++ b/src/views/property-marketing/media-account/account-manage/index.vue @@ -91,6 +91,7 @@ import TagsManageModal from './components/tags-manage-modal'; import AddAccountModal from './components/add-account-modal'; import { INITIAL_QUERY } from './constants'; +import { getMediaAccounts } from '@/api/all/propertyMarketing'; import icon1 from '@/assets/img/media-account/icon-add.png'; import icon2 from '@/assets/img/media-account/icon-group.png'; @@ -118,8 +119,17 @@ onMounted(() => { getData(); }); -const getData = () => { - console.log('getData', query.value, pageInfo); +const getData = async () => { + // const { page, pageSize } = pageInfo; + // const { code, data, total } = await getMediaAccounts({ + // page, + // page_size: pageSize, + // ...query.value, + // }); + // if (code === 200) { + // dataSource.value = data.data; + // pageInfo.total = total; + // } dataSource.value = new Array(8).fill({ id: 1, name: '全球', From 6db350596ec224929b85f57840640c9bcb358698 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E5=BF=97=E5=86=9B?= <543024265@qq.com> Date: Thu, 26 Jun 2025 11:39:50 +0800 Subject: [PATCH 07/78] =?UTF-8?q?=E6=99=BA=E8=83=BD=E6=96=B9=E6=A1=88?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/all/enterpriseKnowledge.ts | 26 ++ .../enterpriseKnowledge/materials.vue | 340 ++++++++++++++++++ .../enterpriseKnowledge/userPainPoints.vue | 325 ----------------- .../enterpriseKnowledge/brandMaterials.vue | 338 ++++++++++++++++- 4 files changed, 703 insertions(+), 326 deletions(-) create mode 100644 src/api/all/enterpriseKnowledge.ts create mode 100644 src/views/components/enterpriseKnowledge/materials.vue delete mode 100644 src/views/components/enterpriseKnowledge/userPainPoints.vue diff --git a/src/api/all/enterpriseKnowledge.ts b/src/api/all/enterpriseKnowledge.ts new file mode 100644 index 0000000..39e52a3 --- /dev/null +++ b/src/api/all/enterpriseKnowledge.ts @@ -0,0 +1,26 @@ +import Http from '@/api'; + +// 获取物料列表 +export const getMaterialsList = (params = {}) => { + // 发送GET请求,获取行业树 + return Http.get('v1/materials', params); +}; + +//删除物料 +export const deleteMaterials = (id: number) => { + return Http.delete('v1/materials/' + id); +}; + +//添加物料 +export const addMaterials = (data: any) => { + return Http.post('v1/materials', data); +}; +//修改物料 +export const updateMaterials = (id: number, data: any) => { + return Http.put('v1/materials/' + id, data); +}; + +//获取详情 +export const getMaterialsDetail = (id: number) => { + return Http.get('v1/materials/' + id); +}; diff --git a/src/views/components/enterpriseKnowledge/materials.vue b/src/views/components/enterpriseKnowledge/materials.vue new file mode 100644 index 0000000..b8b6843 --- /dev/null +++ b/src/views/components/enterpriseKnowledge/materials.vue @@ -0,0 +1,340 @@ + + + + + diff --git a/src/views/components/enterpriseKnowledge/userPainPoints.vue b/src/views/components/enterpriseKnowledge/userPainPoints.vue deleted file mode 100644 index 57d77f9..0000000 --- a/src/views/components/enterpriseKnowledge/userPainPoints.vue +++ /dev/null @@ -1,325 +0,0 @@ - - - - - diff --git a/src/views/property-marketing/enterpriseKnowledge/brandMaterials.vue b/src/views/property-marketing/enterpriseKnowledge/brandMaterials.vue index c85230c..3479576 100644 --- a/src/views/property-marketing/enterpriseKnowledge/brandMaterials.vue +++ b/src/views/property-marketing/enterpriseKnowledge/brandMaterials.vue @@ -1,3 +1,339 @@ + + + + From 5c8cd47fc6fa61f1b915f65debd75c236859dc09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E5=BF=97=E5=86=9B?= <543024265@qq.com> Date: Thu, 26 Jun 2025 16:28:22 +0800 Subject: [PATCH 08/78] =?UTF-8?q?=E6=99=BA=E8=83=BD=E6=96=B9=E6=A1=88?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../account-placement/placementGuide.vue | 201 ----------- .../investmentGuidelines.less} | 15 +- .../put-account/investmentGuidelines.vue | 341 ++++++++++++++++++ 3 files changed, 351 insertions(+), 206 deletions(-) delete mode 100644 src/views/property-marketing/account-placement/placementGuide.vue rename src/views/property-marketing/{account-placement/placementGuide.less => put-account/investmentGuidelines.less} (94%) create mode 100644 src/views/property-marketing/put-account/investmentGuidelines.vue diff --git a/src/views/property-marketing/account-placement/placementGuide.vue b/src/views/property-marketing/account-placement/placementGuide.vue deleted file mode 100644 index 1629a6e..0000000 --- a/src/views/property-marketing/account-placement/placementGuide.vue +++ /dev/null @@ -1,201 +0,0 @@ - - - - - diff --git a/src/views/property-marketing/account-placement/placementGuide.less b/src/views/property-marketing/put-account/investmentGuidelines.less similarity index 94% rename from src/views/property-marketing/account-placement/placementGuide.less rename to src/views/property-marketing/put-account/investmentGuidelines.less index 58e2f49..bb64596 100644 --- a/src/views/property-marketing/account-placement/placementGuide.less +++ b/src/views/property-marketing/put-account/investmentGuidelines.less @@ -17,10 +17,7 @@ .part-div-header { align-self: stretch; height: 64px; - padding-left: 24px; - padding-right: 24px; - padding-top: 10px; - padding-bottom: 10px; + padding: 10px 24px 10px 24px; justify-content: flex-start; align-items: center; display: inline-flex @@ -39,6 +36,11 @@ word-wrap: break-word; } + //账户指南-搜索div + .search-form { + padding: 10px 24px 20px 24px; + + } //账户列表-表格 .account-table { @@ -48,7 +50,10 @@ //账户列表-分页 .account-page { - margin-left: 300px; + padding: 10px 24px 20px 24px; + border: 1px; + border-color: red; + float: right; } diff --git a/src/views/property-marketing/put-account/investmentGuidelines.vue b/src/views/property-marketing/put-account/investmentGuidelines.vue new file mode 100644 index 0000000..73750e2 --- /dev/null +++ b/src/views/property-marketing/put-account/investmentGuidelines.vue @@ -0,0 +1,341 @@ + + + + + From b81f61901f37415d29499221a7400ce93091c1a0 Mon Sep 17 00:00:00 2001 From: rd <> Date: Thu, 26 Jun 2025 17:10:53 +0800 Subject: [PATCH 09/78] =?UTF-8?q?feat:=20=E5=88=86=E7=BB=84=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/all/propertyMarketing.ts | 21 +++ src/assets/img/media-account/icon-empty.png | Bin 0 -> 23247 bytes src/views/property-marketing/component.scss | 48 +++++ .../components/add-account-modal/index.vue | 2 +- .../components/add-account-modal/style.scss | 35 +--- .../group-manage-modal/add-group.vue | 80 ++++++++ .../group-manage-modal/delete-group.vue | 63 +++++++ .../components/group-manage-modal/index.vue | 176 ++++++++++++++++-- .../components/group-manage-modal/style.scss | 68 +++++-- .../components/import-prompt-modal/style.scss | 20 +- 10 files changed, 432 insertions(+), 81 deletions(-) create mode 100644 src/assets/img/media-account/icon-empty.png create mode 100644 src/views/property-marketing/component.scss create mode 100644 src/views/property-marketing/media-account/account-manage/components/group-manage-modal/add-group.vue create mode 100644 src/views/property-marketing/media-account/account-manage/components/group-manage-modal/delete-group.vue diff --git a/src/api/all/propertyMarketing.ts b/src/api/all/propertyMarketing.ts index 0e86efa..5263e94 100644 --- a/src/api/all/propertyMarketing.ts +++ b/src/api/all/propertyMarketing.ts @@ -48,3 +48,24 @@ export const deleteMediaAccounts = (id: string) => { export const getTemplateUrl = (params = {}) => { return Http.get('/v1/media-accounts/template', params); }; + +// 媒体账号分组-分页 +export const getGroupList = (params = {}) => { + return Http.get('/v1/media-account-groups/list', params); +}; + +// 媒体账号分组 -添加 +export const postAccountGroups = (params = {}) => { + return Http.post('/v1/media-account-groups', params); +}; + +// 媒体账号分组-编辑 +export const putGroupList = (params = {}) => { + const { id, ...rest } = params as { id: string; [key: string]: any }; + return Http.put(`/v1/media-account-groups/${id}`, rest); +}; + +// 媒体账号分组-删除 +export const deleteGroup = (id: string) => { + return Http.delete(`/v1/media-account-groups/${id}`); +}; diff --git a/src/assets/img/media-account/icon-empty.png b/src/assets/img/media-account/icon-empty.png new file mode 100644 index 0000000000000000000000000000000000000000..798fefec4eb0b8b28a51336f2cac55f630b63146 GIT binary patch literal 23247 zcmV)gK%~EkP)BO3>Xe%3oar;0vJ-nPSh=Ry3-=Ni&e#%=QrJZmiJ!M zUi+MLU%e_eS(oJ7Ky_FJAoL--bC1 z2f#WAA4s@x;p<7l+*vQ+!PgUL)}I7C`v`YhXukS?Ui>F-!JLHyU>$^~4j&SD9vAM6 zVc`q&Cb`CN5Dvl~VK4AZ;Qj`{h~p*O2T0Qpe5hf40=vJKe!mKH6b>ZTL6{fG^S;6u zrY~Q-c=2tRlW-uhJ|W>FAbC7w#{>c1Ni}&Z)%BYVjP4}oMtau1k?QxWLuqzl{Ppzn z*I-V<0kA$sA%kZJ9&RLvB=Ahv1w5FDk=8#7;F-eiTZhu~Bzf-4NOtkd7k)Z12>M3% zMFaFY%uzT1)<-Nn4m=GASPFRPqXwSGmt;yTG2oH@Z)gt-1ko5Y{xIdeS^XCr0^T`ggR$pWW3v&`a62SV(g@5%|Q%C-l zXStB&06g;)+Cc|R3vdkPB+NaqzH;Gfzm^F4=ioyK2jKZ=gef#>Y}(%QB*_jW)_y`# z|Gtq`Kll-b1MqzG!y(wcGrX*6ew-I`yYk|~g@0{h3cLU8X%<%=fal{MX05*X?Tf!P z7c@P$5^D-O7n1j9W7hiv@OT~hz)GO{v%_!jtuai#`bk(}a1dsP zyy|3V;q4AA%!NAGz}yC$)j_{_0IGu^b6Nc`f_4MuAj~nahQmA=s0ZQMg+vGM48Lg( zB-UPG-aGCfJljAsR8G1f19d{6(b!ca8(cgeM2y^VbnD34|2+ua;WlclR=jBkDxdqm| zcicgEwjnQT8hSo2hsw+?u;#tv4#Kkyd#tWF0M=e%-aGCfJo|t%&bP?Rn&26Sxt<`N z=Z-rF&pyx$m-{>{Ynp3d&2z^cgn0Od+yBhbF)+Q zqZ~4Lb{@bBhYrE#QfHrUNr017g(I{J=NCuGJ8K(t(~N!7$UzfC@Lc{)@xONcD*Xr8 z!e2l69R4rxA%|Iq%FrAvBA82H-Tot5-&%t8U;2;#J^J4FzuSBNm9Kp5SO3<3^LPI1 zG{A4A!F@Av(7%4}-0)2NCq2CTF1?VYP6E!6)K{-T3r8||k`#I&foE-DF@cAei7|z? za+o~vrP6G8NBIWxAIaYM6z5!e_AA$}&~vBH;opQ0F{CQo!GXQH^KhulGXs`^XMx}i z9K%b~Y5GN2PXqSG6yc?D8pNOa%1`4Eu&!Rant!G#{*RB+UosT`^o^_ZH%^|#zX6}H z&{f$+DtXeY*HT}ePt;E)bqpX1qQ)JBWx@Hj}Fl^brNz9@rO4k z&kv`OT3tSz$FO&}!J~)wB@PLFq?;Gg)qipQ3jO;DkbmmfbNCK?j6w!a^4OeDJ&`5O z`AKRoX5b*Kwdwg{BgEZMktzuk)EaOEEv_>)3WmI*S%D!RJmJA`!0@eCLO@q?k@);C zKSwV6FMs#D^bbDuDZB?CLYTdt^w}RO^S*% zUxzseLteHdsb5F{`5cPsW)efdlL@!hv2nj>pX9^PL@Ip9#pVsz|s#^eIwB*Fyvk9i7Kf9 z#!$co6hFrR2Ftt)o|qqXq*3)-mtBgoF_ZF4XkIyW4*w1KkiwTQeC;+2tj77EzLoWR z|12M4o&-xOGd1?kzw}kSI25lZv94U9jr8#ECnfzS^3WI)&F`G>gLLtM3EZp=Qit=P zic1!-*&`Hn1XV3DPJMW74OUiG>CvNyJqGaL;r;gT>RQ)wZ7Fb84hVm0A^j!$>%U9` z{$IiS3>iFQWc%jGC`p@XmO2SUsn`snBd{n07d>rCfYWI}JgS8fXkVBMx#nDg+D(2J zqAPRhF{-SAH$~z}){!yd0C=zfJC?(eDcWMKr$^OFSfDDHPs4{8W*sW?e!i8J!86VC zrwzQ6rV=*NAZ?_UWo>O^TC_55^zU5c+rK>`_~kErwRom0VBNk=FHN@LpQOQkF?Cm4 zalpVST{K~Nu9QH@Hb4bc;kr6tJU)@*8W|L6$3(;x*TGwz0j!4)9|*7t7lm+TWky2z z50mZnGb!7@n%u&_0W*Tl?KBHXUCSz4lOztoTFU10NqRr;5mCHtsOna$#0Ac8YT)D- z>@;ZEJ_1vVO@eVgV)sNrWBud#nQErCl%uMNk|R1Iw7=2*Db`YjUFZW2AgGPdx3X9z zjrF(p*RRvLQ>X9>d+-AK8-k^1qaY|nB(D-CL&yXvcE2Zi6COH%CX zzxO8nl`s5B{5v^L1+3{7{AT(&Pr)|w`h(j|PW;iMgavG^r62{KjcinJkbJ<4-33fs zB5;(mFE1ZX`CaQRy?XDxD|qJ2xvAH$R&QGUjo{7yK9_#}YMOKT#dQ6xByoP92cb#Sp`K$w}2PEt3C?&fru0x^L&Q{9hGR=FN+sr6d2F4Q6Mt&DwO}`%suu}2gq#57J z+5*!{r|zu!|?uU@;1uftDHsRoqP ziNc(V&9fi`8czUg;A~ROzSf{}qE;nOzCs2Ewn0)O1kMlKOBE=rf6SQ>sac;>uXg~V z$1V0VKX+$EPy=16Qvov9*qBFA(>zUNXaH4zph-dnkJT${9!4~|UxdFPRPJ~i-;Cv) zeuOTv2kqhyBAh$(%Fz?Y&cgBaGjQza891JTCG^=7Ga z1Ut@!F7ZRjLyc6jX9oB>vhk249@VqQEacS5GZPpH?_ImXj51%h9d*ZwaApu8tDv$t2$g;3|6*O! z5*@uS9Q;w=hMNtS^HuOJcC zdAe%Vkp!ntp4owc@bJ-tCKWiXCNZHd(}~eKnu@ArQllf0$nuI#g78wLMP?{L@L{B%10e@bWAOs;@=|9T@ybdnaf;N`#*BMyj5$n`$BWo_gePbgUcdZr%hGn3=KIB|M)WNnSXv`g7 zYDHkq5AfhK|EsI3Qy2)zE69A`d$ujaSTX^3U&l&wy@CiWLR#{2l?l~V9UTQ&dHtZX zRIMU<0|bY*2D<~Ya94M@U`XG}pqYoZ*hQdyr;;)(tsq^_6j`&E7phB508V6zsNPE_ z^Z-_DhaFJd#1_WMQ@XJI06w3L_+Lox89b>!zc5koKxhC0RL&f13UON1wJ?l!rX>X@ zX5(@}f|U5tw2@J3;((`O)nsUj#EIz)@EFG?h6q|z0mHze3H%^+-W2POb^;=sr;w3t zqc>3F2cE`>TFeSgmiFM=Vja+xJJQT_imQ}leS;uu>HqIPjUv31Im;~8APqS z7G}h465m|-6tn}R;Ci<@hR$LK2-?@&lo57-XY+HTb_xs0#68kZV0mXd{Z3)LyTiZB zHnu75PX%Ub?RQ(pY&{AD8zn1sT-*gj)pNAYjs%Z2^%tHQ7;l5%Oa~%x(brO%Wb*ex zB^;7;#h^*o46GB+;}5T2raP&F*C0;jmcc7(6nW!qsf^NLS!!doZ)-k5Hp$cRF4dkv zVs2@k7g$?c+l7JfD5-*&rz--hHSTA1Q~CsR7hCNq5?JHy0O&){@3aT|(x?j_D5_js zWic|Qf<-!*XU)LkhIgqyX-&-GBd;5vsGgbRH%93C2?!js#7UBd?W;zgxt>*QVOMFB z)ETGw%;oJ(SW7@!NY_VpcG6s4mPk`rsd}apTt#XsyR-PJ(A8^(StV8FpURHGGQMaI z1frobvAPdhVU0QLBu%x*TW6M&AM?;6;Gw1TdkAn@{hAN%0bacXu(PGyph#S-Bw?ot z?iEalZl%hsNE1C`YvR}jO(z9e4-Fcgfsx{k5eNi=uZT(V_VtBWb(GwnJ9B)dgM$bIDRrivN7XCAPgn1z@QO>%QB%XWioiSwph|E>>7B| zbpp?__lXr+e!3E&A238C=&Df8{oNiEFQ;iKgZVX82Czq|Npm=`Ed{GzNj~YVJPS=2UZ%C-%ph|$2Y}Tq-h`~1sIRD&GBF$ z(jaEZR6wS{ph^V7atTfyq6>t}kC&HMrkk6OddrwEU%oUx_x$4X{<3$D}=}LWMu}h?j<>Wjvz`j zTXSdta`9#MLqxUK)9Kz-#vs{bS$P3_N0LNmLM0Rt!m1N0^}&({=ZsN8Dy%5fS7X}T z66IYITwj?qqREt1HCEeFoN-cFj_!)uCXy!v3>T)>41vpjy)8{?sB_jD93Gl*KcJF1 zEj5jU$!)5xZ57hWBP=!6El2{ZXtfrrM(fTWm}uO_w!%E0<1K=e*g_H5wc2GGx;XATZ*mGciJO)X_YA3)tbeS(kWS4@Y(DhVtR6&0=qRx2JfgKAz2Aoq9jHvK(;!e z#RU;jVeW;!ah^syhC$ZCD5+}82A;_TmZrOKB>k=sDR>Zu14cFuGlS2;bU@Mt&0rB7 z;-2~5?zPc4qfWSwat6#fW725g%AqOkK$T2L_6uNMMC?dZoGC?vbbEL|nL9h|N`K;z zLG|7xXE?_6WlpUCOcVu#i}|-QY-jS0QN-u(c`DDNDHw$fN>F_GM9bk*1B;T{D3<^H1#~!K4ln?*PR_ zeeSjm?@LpZ+e63u=K2u0Gl4@BmhAZaq*E&Bng=Ih8$1T>nbT(^8fk??Hr9|suA z#}h$G)8YJe+#tmwczZyPAhG1lK$cM&#%Ea9Z&rJ-lqY>mJ)o84L`~&*)WIxLsj7Yl zkf>vqJAP>X%5q3x!SDS)0P81{PeC0S$)ie}n}8Wa?X;->R3@*v?zS2uIKXTPQ`O%~ zEbf#%80yjk>o5u}Z!4|}7^ECV2AHm|Uxqg}AHs{VE)_9% z26bqVBj?`}XiXhA4D3)=#r6qcn<Q))Lj|bY?4Q4~}b=f&xdC?-X!O{$) zGw`l0HXBAY5CoXu+pmY}0iuEBxOZ=f1Pq?a;`1>ecj^aWY=^o=RoAy({(^jOpaRwi z;oWJJQ|JU=&GE!JE3Q_G3g~D64YS; z#a?NkwrRX_9q{O#tTCJhB58CXs^z7yvzd|0tyI1u|M;domx&v0k9&5(Z3aGYI5KA;uHSOAJ8v4hl zn6)Z3L`%UqL(Mj3anbUqfQ38oU0PD-1bISc+Du$^M~m7g*LM7tsB=_tHDUT?X4<`Y ztbMg28GPZ~NS7L^1T^|Nwtj5$_MO|k4Rm+zCSV;|FY4<^Y&&Z(16T70>&G}rD+4G% z);c%J96-lj84TUKoj}!5&9FltJqG~B-VZ&81K@&A+RkOPPkeLGkd*8aeRxix?v`0$ z%}`NQH&lcV0|0F5d}Cd)NQ?-M2g44(ou=W)yS)4WN1kN3}FWbBZ)PZNOzWRzK2%QK)Ap8Z(hP zsnpAoYj+n;dEI7#CYB#Mu?M&rA-*E0`eJ6hS>?k(xj2wP#h&-5n@dQ$9sp(K1knaW zym3@xaukyLCM1X;t7tbkEi?mmTxec-VH4J61RW&+s@p~f6hJK%o3LiKV;9zaDYd-w z={L|-!5+U$M0OcO9nAZ)_&5AzLX_t%UuSh|nryQPd*{-1E6=BFk+l4t|ML5m_^U7( z1d^BjrB2}VK;aqkii)Y$r9F1+1~Sa^zpBXKGt+dji#R@*1t0eP9E`26^DD#?89%$|yo5QS7g2LK^*xc~tpe zowf&t&V8_H>U7OOJ-hAe#O2@6=3e|xJNbVs6Y*w00l3qG*9~%-Mwlz=t}B#-URW}P zexjJaUSs2%zUuyE+pE-_LL2>QdEgmXAwj~$d+HkaXyFqODqy_i^#6jlb%8<(^;1Ehe=?L^UE3=@s-& zo52ljL!Cy6_^;atpzd_kq+p9mJ30ZvQT)Q?~w8ek2&E@)y}gbs(UiMrRW z!TTX5VKz}&N#TIU;3SFw@;Y~HSs<5UfgB6G%LJJLsZ=cVL7Zagj|&um!8s`v$E9BS zJH%2hhG%_Xr5IOL6|zS6&JDLtVRA03CgSc;P>)=3-8Z~KytQh?nOn8be9H(w!}@C$ zD@&_`66^Yn_f|kuQ<12e!Gwz100HQBXY~w+Q3{ZupN6+8@4|7Y*NM#z7~-IpS0sZr z3ggH|umy@K-qg6=F#e7RKY}$S4U;7VBtE}h`PSi1sloP39{>h z6jQc3!-!e4Fd|mTSJoveN3&%R`Fdq#bsGl4=H}KIvu)JWs!M~KS6l6L2H!3c)+bv0 z)^$X0xyZT{e>#D)7&8guh0qy3FR1^*M$TX33_8a;-;Q)I+%s^~$AxB}(srmW-CKg; zdN*NEol1imM^FnBrA+yxP)SpoRO0p>2!ZIK|JZ*qNT817u2j(=MP(@|TC`FJRM3%0 zP$}ZAmtU?wL_cI>eILXb5Hq8y+IniNNuDMEra@nnDq>ZMm`Z=Uv_LF#W%}JGpL3dM ziI)D{ndk2h)D>>sxv^@K#5qe|EE_fnwxa4WID8YMxkwtVgQ}p;I84qq9EUa^!gIaB z>$sL{rV17H4H97hW#E{-&{f-p-uadcfX7Qa>X)~ty%r^k-UmTkW9K4F)McPU?1@1~Y9H z7yy7K>ZXYV)dLiEh`&?LtoQ((I(9SIqs~&P0if0dSxFvmYLOUHY{#hqed&aevDo`w znL%)wCIq(5Fvdddf})MsLWrWWQaKvUvPLQYB6LCzSZB}T!y8xVYNG4YP>ek$SSGR% zS44zJ0wR?>7&bmCa72#0FTW;%9seQ>?t-FtTq6V}`FeU&dk zC<=-s!fKH@84eq$=8i2L?d(UE>wNDdHv{#t;NN~o$c-I-lG58w{MM)9Xq}gj5l)0qf$p#>!THAK-SJO zn-Jq+F$U`7B|RBOH-;WqI?wlG|HL!{I2cY~e?xVGB5}O@85vjg#`=ZPXov7hlujFI zM*kR{7miw`FDf5;JxFok3t)BC2fyx|``5{j0#ieK?jSJf2xav;M2YBkSjy4#z8?%Q z6o+togsX&)948z{KQ70s>Bb!p+ewhq!w&YHTX zjpie5Y|BZU^H^G3+8zYfotq2C*N<=7uHb5~2)Nx;OC+D*sMaO&DZQiUU7WyL%HRlU zgy=$t*cUJynogR*xb{M?T{6zd7~@4J(|C)8P#+7h!QceidsIim;a`gH(O0olgl=To z4B->2c2eXeu|KPNxdA2*Rr2}{WzWBM`nUmL45_EG8kmB^OY6~-RyhmQ>8>Y`w00hJmO3q! zJx*9=r>xV+b{y+2yJ7@0Is1 zt?IHR&}})y-)ho{Fn5sXYW2?A#?lJwurgZh?hb#5yF|iTVmO;?{82^ZJ+?|vseD7B zN((T+mIFa!MU2jIdwF(&TZx7}LKln(l>nq}-c-da^=}H8C^RvC=u7KVt?RQ4ny5E+ z`zExhGXf@kI40J;T1g=)Uco+N0>HX9B~EJAn=lXtfi>EN8%ARa zEFcn4$%hlH(59S+=c)}jHzK=fqZ(xAqytpn>B`TRmR5$(zPNw?kbf^q)46?=8)=&| zTW@q_?*X_QxGImm@>4inTh01gk6%sn^=(;+uGbyA0camm06S%P9iX4qK}-F5#fzA} z3-Z{!SpUv9$8gZ5>ZLcoIFxSIt8mOFr)a|LasjQrrJ(}rMpimxn5U|$gre>nAy?UU zm83? z!iK0`FxCM`1l ztM`mFgtGU&pGm1-fv9Z%F!%*uy!TJ1VWj@Rfm*tTh$S10yfe7u?HNK$;W2v?!xjdC z_1ts#=-Oqvo`~%@K=}5OsduI4eE*ei%V=COlv8arZlitDk}jA9CA1dGXJ_;P8SPaF z4hK4Q>hxeEHn$!g$}8-10XE5;m(lx<=dzf%&Nc`8@kOdsv98mRLUXs(j`q5 z9|!7O1F6<`LtN!Z!li4O=MpCwSw4XbP<$E$2w{s#Wv`)+fi2IApHHRGLw4}&MVJw0 z9=Mwb?taSRXwGF?6Cs2ZfPT)tt8E1SaWex1HNhiiL}XG9e8q-%4UJVPA{B7#lw4h1 z8&m~v-@SbV^0tww%zXhWAk|sXbnLpuY^_$kkfC1M`BJY5&*k~+J|*@;lsa~AVMt0? z=7=4;rOLEZ2fOc<(@O|NqT%d#@lmA`S-m3>)?^%>*R#HLo>=ujZIczQVY9XZnn3M9 zAye{+uU=KVD=3Cq_h(DO8W_cZK?g;}EMk5^%G8y_3L!-$Epe%|okAuQ ztB0kHa^MU?aXe7yJNcKq{vlH=@*jS+3h`P64`4b^pLcV`K70Y^;6RYl*V$`2yH%FPPc5h+gaR6VW$R;g%VITV>nSGu&sx1ll3OVI05Pv1F|nhq!f z54gBjduD&sWCEAlBwbW(<6!eYdO#xRT$6t%m)qB}i<*OOsdi#k;`J5pAd|?&F{07~ zicZ)C3auVqyYukD{q=5j|M0utI`WxUKYv@xaf#PLwMf&00V&#sU=kM?SmywsB9bmR zf>*G-?J5!A&YNPZKn)lQ0K`rim1L^A0-!5}x<|-XP6hyX8ekXAROe-JD#{GhE`Wis z$WOZ=9-HD|rcSEs2_DDzd0$=uC*I*1T#_64;(6J0e=|87Q{wLATU%*14ia=xuc2 z*S`WZ8m{lH+c)!4r|RpECPjhNt*_q5spe(G13{=*JCl9&vJ+S7=o%EIsIq;b=?e~* zY#~7e%-;K?Xb>>q+1Ca_A#Lbf!OU|H%cM8f38IeMA@3kPG~WU;6P8^@6xA&4tB|6K zW7pjSXNqPPJ@#1jr+Ypc9B6Fk-dl*?ltOQ%tIK#cZp+P719O-OtQTIu&FfbvZz18s zcqyn$CIJFLPyi3Fu3%|4^#;f!b3wkRwY^gYC_f%fC0YZOs)lQa*KR$0*q2zBF1>RE zz66)lrSB8kieo=SgtVGqs_0bv(Ar{>6lFzw8Py<7DpJsAftC>=*bNr921t*K&p<2$ z+U^F7(gxM6qCOBU9}~?D)?#2tDxwz95sLkGLoIc!pJ;ZSs||;Nxmoh6w5FIMOy*6k zbsBHsD5%fKW(10QSn(h&w@5hvhnCjI_)T5+Ah|XtPYEn-$*kHCeDi6O&XqiLBZQc9luBz0*R_L=o)DO zZP8@A3=o2ksHv*atu}=;Gbe^E?ET@$2Hs5scA9fF&JJE#g9j77NffP_*ju)6cdEx@ zgw+l4e2PrycIF_ziwsqzjtQVci;IJv!E4vAt~YX28FW0El+QJ@UBhHcS!|=@v|ED=d$cYK`U=J#EBnwzvH)|a#sQ~9UxT>@Y6T+dRL=UUc7N5OiXTcX z+`ngEUE0}FUHsB&u70WN0gD}V{teY68z{;jZcQ{s| zt2kI6xMtPUvL#%E$AmqBmArnpCwbd@belJ2D|>W_o9#5DE>-|SS&;#{y+m8%E9arJ z4-243oBVU~*vT71b-j7}*0E_T^JZQrO>b%{ge6n9Wd)j|v1Y7Yx$^GvXtesu>hijC z^_~wlE*ypa=qOi{@-dEe0f@XuBLJvVY?L`)^CCGf1=xP5);oB!|seg5jTD<>{rxpaPe zXM5%Lt()f`Z9Y8li$DLL!k2#XUny+2;6Z=Gh-u}9q)LaT%C!<_G_GAAf&K(dMbu;~ zN4o5{$BrGV0Sr9^R7@e@-vLl^EAdNl^(oLY$Jw36>N<2V5Wd&biU>sQZ4TE)SN=4f z$=)+zJAjXX3T-ZuG|Z9*#?aI5+wts)VGDZ#YZu_XQP$$Z1S)`wVyR*aCYT*;aw=K{ zn5f$I)WK$8{)#k@Dfn_IF70!l{$oG*$G`axyH$lNSKs~Ao4@^A&;7|Sf9;0`p6`7B z503r8cfR$)qlfpGE?;@~g&Vi7zp%TryPUxTdxV!?`Z3VtwRK{HuTKSAOZg|GWR~rTu_sRycL?EdNDd^;zUaG8a8x_9+usXI*e6gN^7sQ&B)l$LRPqUW`R&7V@ zID)k9>cldSoKkyoz2A2I$wl+ggs|a zQVX_|M0rGVZl9cM4s6HBIqUX|eEir1^o(>OjoV1; z9<>H*35Z7IA-xlk-OIIc&%wH2rw*uPHVwEHQPolP*v`5^9BOa%48YGmui}NKx^t@Z z1y=PgaWK@$rb3Xy>IrUlqs+VL-smr?Q4DCyAqA9`bJfPNG9 z5t_$F7{hHQ_$fDt!64_($_EjWn6VEEw0s6equ`rrJYwgEe<-1eA1Dyu*cPgM;7nfc zH)%2er;>l8Kx7c7zj6Be3;)(%`iEI+!3Pjt`|RtYrgaEX{s^iMoH<(^CgMnh+?P!O zqa-X`Q3uVraRdw~LE3%O0aB<#G`0&qV%@;s57n1f%EYoF=%FTHtylnCtiKU|GlM`w zo*JKG{p?&p+b7r9f&=i?5k=}WP%{AijUXoLZEdHO;pL+DBgDQ5^_7JTBY3PD$n||( zgp}8Nq+j8f%4#K+JeVcalqJFf~p2QVFRf%U_Jl;IrSxe)X#!U?3DA zab9FV(>lEI<6pRzY^h&|4Z~a7YyghW^0hL2sPG^;IBpTd(G6 zn$A5q(bPLwyM!OW;?>3~u9z^`BXo~z?a*JE1qi+|Vx|H%+&k}z0okjj+z;miKK)WN zp*}-!uxguqT)K?H@*)gE%-%JHv4mjh3C8;a*7$J|l0>@e2V%zkQ(5&4D=(y%fWJDD zzwnstBtCMitZZPVk!_`N`}*IE#Hn1dCRlys zdU$sct`V~7@H*GS={iK`W?C`&<$j<%DBQQa2vKWV=*Nlm>P0KW&&3h+*h{Iip|~t0 z7E5x#nPO!}RnDb{rfbyZiK`;CN<&R`z`%@j16A%hEsW7%xVPp3RKTL}_swI+_MRBF z@OWU2;Vw>?mUT`Qc$cmbJlV(IbR`2LUbkHUDInxCsChL!Xg-{NR3>KGp`p8wIWz-K z54PesDqzm?FZ}FZ{+*wA?F(=JkN@+3_vfx%yZX7!t<6)h?h!m^Pn~<`^y$;r-uQ_x zy>sg1>4zIHY&^(c9?BKUTUmJh-~?Wqwq=04<9(R~)PxE}J&KdU?vW~hi$*;Jfbo=A zw5s*DM<9U!ydD^;)s0sQu0358iLwxQ$2ADHyob8kv9kj@P7O_u0ca7Jwx2&oMyB!pWC@%aA{Mj#@ zpq%CI#rk78!Dfh^R25%V5L9SFgdP&H_Pmu92%&ynE(PgZ8bd>KL!COi8`|3239}@K zr-eG5Nu$csIM^lwfHWxbW;9 z;ju%WN_8i`6bGVoZ2O$9&`aehtV zbEuYAjIVX`I#l3^ajpCS-03d-Qo8vP)DwcGvoQ8cji`QPmuS!-4tw9*;sl-iFqBoL zg&rZ#B;Zb#{aBrpSmz%%3743Al;(iJnlTKjpoLOg^$PkKDL@caqG)}HiaXvJy#ko{?_y<&A1!+KQ1; zQ--9GwTvzu)4wl6F~-X}wyHm%+U8!t6?^m+)gD)^NXQg>Drc04mYO<}K+CAqDsbYT zRi}y%#5z^!>PJ#73`r`al*^DOx#|Y4PDaL12;GPRSu5@Rt~A7?xq?X*DV=&Q7dKwZKlO$ z;ufgnVaJ3zBvis66yUMiW=2~>x-YV<7^o$ST~IcGQj!G~%?6Z_I7~8lM&<+=@zKx% zF3r~_tr>s`Ncv8?R7N2$Ha^|;9Cd669`2^BwD#o_JvB|K-4%b$0s}DePe)bsh3>Ae zHG#)=_&vt@Rd1lHmd(~i2Uco?_V=WXF&rq}Qa&~a9cf`wK|x4`-L_F;7y)~l;=%M& zz(5!O7znIfjb{e}nO)ziU*7iw0y&rjK%}eYN_iFFbDm~f>BigNh9?O70@g0V%_Iho znk319qU=Z*6$xg&93@Ot+aRc9iRLpfne)V*iM&owR5Ub+qmqWf2tjQdskEcIOdiu* z#;AasC82UV%;3ui&x~O*E%i$8Ug|9V<=`~bC{}`3D@ux>;z0$j0wgXgNDizdoTUMG z&ztn}@Am=~449*&S6_?+65?tIPL`nu z5(x!Bt*4^`N^QGKA^x6#)S1(m7NC7AMag1s-(jKcv#(M~zKtKpC-s!^vNRk&Z0gNz z|L5=oVPC*X#J$avyk_qN?@ib4fm#J5Qvq{uVwM-=HqO+uvdFE1f^D(fVJwv<;LZw& zq)5&&SwiVY>+-Pz`MLmI%N?b>b|;c1mP~nQuGRdTXndtM8cHT(Rh-AsXlLE}RaF;uJ6i7PQ zM%lwRNz!L*>Y;!Xt!`$^kxI54Cj-dqr>lF%I)^rr57WJ3W%C$eg(p`7T{@AgZBEX46+o;H>H!5 zX?dHJwOZN7+)E!B2vN#TDo}g$1bi2sAnXfRi$~#hyA=eA5_AskZ8OPJh}_)U0*atM zYCM;KBh54aOrXp^rU&h~15hYnYIjxAO?D-%gGcSFT}?Drl`-307H1UZM)E(YBVXq` zMN|0fiv^cRL7f^DP?gOTwoDN9fk6ZFI=T1C4r7R_WdTR2w-9U#MY@19xN?obF2N$P zIELCJ`L4mBx#Jq9P}JV7OZd;NVosal6vS?y-umY9^KJii!eOYyWlQT>;~&n-QQH zIMHcf;BxQ)6ooi|2RkliDiYYzwt8crWTPL86mb_g=iRDmrK%!EJ4?Agh&0Smb}E%j z;&9zs2>CVc^#he~E@42^Kmd#~7zd!uv!Vir+fnv#b-j?%Csb@hw*U6Ij46hF0Soh4 z?pJ6lHF|-d9N8QQPAWJG)dZDh3ZCq+7^@Q@yUbnU$un_k>;{RVo;?Ln%XSbIkQhKl zs?J5}W3^a3BvLECQ(HoBsKrt&cX3shR^fT28h+sw@jmB`%BBWV)_@HKiwAFHiRZ8t_05{j2mswLlF z<8*C(;+Q$*q_$J|eR#sKFJR@+EWlPmM-vP7+dAl*)R>ZlS-8~6Zu#=#_a-j zqpQ6WB?{*sKr<>k?6|S|P8t!_z5*cHm3sy!$+i>B@43g)-|j9LXMH28Z@KrwK`H@s z8jIy+8I7)uFv6|WDkC~jpoKw=1L%ZqZ9$+Q$=t|?qC&YB3_`jHmP%>_H!;^G8u3sY z@&@i!B?X9qWITlr<}r1z3AR=wPJ*CP1+|Z4D-nC>sMtMjccpr5Yu}Xew0xfZpfVT5 z;MYE)@?3r!?T=u~>Dt2rC@3d^**gQ1F$H57x^uv$0J!X=SzUuC4EqKa?ZDks(&G4# zs)891=nexRV&zDzvVnWs3?$t72>^U{J3x^jKn|FyNK4B%1Mdw)DwSBZGiL_Qn$kBQo=N$@ zp{6${i83u4i$^C;;3as%uy0_cavnCq^+~0N0S8pu;`^+&sf*k+!wMY1Y2XrRG%D{y zk<|I^#nH5^LV8326HBh$q-=~AR61qgsT9dB^Hv9WaRJVzMx02!xgG5nw_}>HKodKi zjui;woQtjdjq&~>?Fj5U%|*>AOu%gtE#JL+%>7$%!yQ8z>gA*; zCD4eF{M2Fx4)zzS3K&b@v^v)(c2Db`HDAxyDkA{VOtLE2Y8$;DKtJik9!3QRhH+QP zX?wTYwy+a3QAGWw0#4RIOkHk*^n)OgL2X0eeC*?g`PCo5Q-u9XtOdA-JF<&6Ni4RP z3=jb7Oc<9AQ1yq7a9Ql#6Ovlx{7!r;7=P#Lk)#K4H!!Zf*Fc5I(AeE~BSNk49$ z%*}3L-@r-)zPm8u&5A6s0{7xz_7SOPFUK+O-0rStBLowGWA7C(;43D8rHp%@MzSD~ zuUYLR-fYQ|XF|}n?z~|GWoj954HjoaKa=6x? zp%afVIUCdlDm%lBf0tllxcDHG<*nrq6^|+s)b3ya_u@fEZB=iY9c-mSsDPNleMkDX zCUwk>+iZXh3bQm~sO6z7FADni#LM8Xyio-hJN znmSTQ+li&$95~Vkj356-fZDh`US+IGy<$EiWf(Tr6Sx9T5%vwNtu44ePLssJ8PJnP zxh~mmNx8Z?O;CuQKI`7c?L(8JPW0Y8AR;@XzG-1C&gWm z`tY;e1-Z{a2X!x->JsY{q?Xmy=Un{sT+`*nz5r8cl*_Z~*i>DH}RnW+RL2Y3SLAqvl{X~^5XE3gkAERk;mfa!932bRI+-i`wF*wz(u5bSxavh(Z8}MV-?D z%>Y23moj3sGN=H^K`0WTtb#C(t)4F?Fax?u4^weWda38rC08y&PbDThT-9tpd!`;f zk>FH3q%4U@*Vlm`jOwd#LkeL`9LLjim-2B<*>aCyGi^vnb0R~y-X-LAh^<5 zC>cP;vSdi`l_gLv)zq{6jgTD$LVC8mP{5K^!G%$gd|6uV@&(v;f{UEnkunl0F`ZNV9m};I3TG&SV{HS(dP?JB6odk!E1S5I@|6m(Es|zKEo3MD|OIjV(&-PSpehw9mQSouRlGw2#04GLg}j;| z0EqRzv4DOtb>g;a^;|{<>KI;0UA%3?f{h!$;sBsPfChGQ+W>+G&xll5yH?_xj z-mML7&e8^zkaKIzjm>FQ0_z6}Mg5ecj9b?LpfDQl3zL2$wyijwuP+@z?d_x*d`(f~ zxNO}mA<{{APmnk~+DX|hZYx<@TSQIP2gR$IO@#LF3OspKG#H#()kU6nk!y!^GUEs5W5>h9si^n5Ew zqXhxtQu^I0(uq~T#kLGk>hQDaXOjsstcs9v4+E-e)><1-1&eV*jVr@bCR|N5^L;Rp*8gc1zkWU*XWoJY}%0rrJ-w z(jgOjV}j8@BTR(}c`S|wQdQd)-Nt%5^8qL-;#54zzHBLf-f0AWz!1+@Dqy(0R=yHr z^#%8+s+Y1wRcl*GYyGX~u(T6Z-A7ihXjVx2&17HQgQpBn1gs<>ws#-FGy%j_wuP}0 zvl%htQpIS4Wrs!5<7i>m)ia8D=Qx~2mNYv-@@%Q3vV09d+vPWxzogEJoX?i#nZKT} zq|zyKW(6w)v6;e&lx{5nVcQ%Higjvi7GBj6XncWd8&tC5nc@bhq$tL^dli*?yKQ2& znh|V{X0}^!i`$%(mj|i>A-HOn)uOUu1Iv6;L)8SYOG>Q;sgc4UGQ*v1C36}G_vSi{ ziVKZvTUM+woHgMz@fNt=jbaDc|$hV1yJ@gY_dS#`?`X&ER9B}_E_o$!h(bxvJfW)NL0=28E!p) zk`+3M{HRpB6A5PfR zXRUpZVAS}smr6C${ELdFQjKgMRFMiy^ggG8g`goUD-vx8$mduZje}~#khrmfvw&%YvBNU;KDedmJH!QRDM61 zhWDfL98`*oV;xLNjKOUeQhP{GH3pS3l{6k(n%%k`I@c)+2lP3oQvii$(jVLGu%gV@ zO*2{yZOzzP588|sX3l)$uYLaxK`|0^=D&sy#p*dbA^t%@C zbLy$8j-&>)N+SxMHINC-wsBu|GTzBIW}Dqn5po+`%WBJ!ZIM7!iAs_mf5c+shx|C0 zSar)lh>i`AMvQbqI0I!@i8()OvOOc90jo=%>R8Y`_$Y-1?c3D$g#`ukRMk0U#3Pw1 zA&9p6pfW$ zWXhw}q#r(dkhH56XjhlS=+60O@H|Mpk%5%-VBvsSI^9ViY5>=AzDHBUyGju20JrV{ z98K4^Zv!Nb1cwuMOOA_Ui7#!M`h~irC=vG5+`DXFiPsHO{UVbxt-6)P2OiWqAyR(t zTOq_jk-52i#R5cnWU!1__mnQfsjOTWjdZOXI6=F2&7=-R7e3T0yYoe(OOVV~$3r_7*RP$rzbRm_ufwGv%1&>skmO%HFu z&aD*p_;LM$%`!|r2=MF`o>&!3tYZ1ryU9K=RGGtINw|n!w>{z^WUG3YWuLXB}d@R?5oYSzp)px6-@yqKe|JRK{^p^_CC8pGgmYOjWXK zv8R6CgjWcdRIqs-o3RITFsSo_BboFN00@EGe2gxb)%;{`DcCR&RW}37sAKT!J5%4t zKvNFoVM(UynDj|@1Z=s40WT*{n(uc#umN_j1dq_NmB_IyFqGRboXD%CGL zq;_8#nmWSXnfXxx3mmRlElZD1FY-#`CD-X6bY9Ui~}+;D~}Ke>dgmQ5dx4+Ux21 zM0wt}bsqWmTqg9qc=gqP7ZrgwiUvM(?2GWH zYyV_ks|Jg_xAQ&h{KjYpsoKhChk(|LYP*KZ)@?fwKxBZiXSx!NZ1X1=nDeTcUGb)c z`pfi5u5$oPXqVeGS#wE@)ijvwgc7qr$16*dWCLfdr=(Lifr7^wVH&$>8uQ6}??HQJ zGxfv=m9^70e>_+BIUXVNxjDH4odG;N5OgdnezltOnDRKn;I86M=xq_A-0B7L>T{XafULw$F59 zXxma)4y7vx8mSOZXlCzOLYD(2qa?ed6)Y{QWQ_yJw^cMU_s77=?QIr(WrNglTczYk zy|&vTeX>-^>iOcLNXD#^8L-&!PufYE*1!Z7md*^!U71(R&$5cLkW~7thD=gD^D?yD zUn+Sh%~kH6IRowYz6b5AuZjfvsDNj$@Wc`;hf9~}#F1pvn9BAbUFTnO5^%UD;K`R6 zKzH6rrOR7!ij5qEk1%Tnix9N-D2Y6TktHuCkW2|V8e zcr~A3@omWe!)vbr{qFBdoG*Sc)#EChPXqmB06)XMrQ%%^&J22IoLp^_QGBPwH5wI9 znHlwd;#-k$t$$G^deFu?*=Z7HTuXv+kdPE5OxV21Dp}bnAglbXetMrAHSKngkmeoR zG6w(@ui28dIjCfhR3%#hR?GO=Lv&=Zu=xvddCiEaYiHV8 z>g3<9QBMxY18@S0?UTZ}^mi%S zJ0K2&91@6HNWgg;iW>K7@+w7@?Th(g0?@^alIFsNK4=E6VZQ_X;0}F_k31xZ6P3Ig z-cm@aVgAmaV|1t1qL=+Yrz^$pGLnWeIQ5Ft+$Jh}_7XDL#S#sG4_ zL={aI4-*~gsAxHKmdY&Jyq2yi;drKssZ`-P8Iv?7VIJu9;o>E;GS;*4pB*_j(oK>w zCSh{A#L&Q0XNUm02&^7M08{=)jtw{f&W9P^7qD_5IffD;fhDQkS?}h@`JZ1-9Pt|} zf#!uHZf((Lb{|0FfRR=942)_$Szd*|T|mGdvj`Xxu&63l0Vb(qvb+ikSh9ps#}3;u zX>v157|PyHo;5flbx5`hgGL=RtR80ubzu-N2Vj}k@VG-?bZR_-RbIBJ z9~6T3)TC&Md&>_sRHg-+NDNne5r@s$_dfm>doOa}YkZ zf!90UqN6u&(vft%cI{fy-jXcJ^K+Lk(@K7y{+8&E(qFQszV)r-gGf^h`ZxNG-$+hH zqDKFa>{RxHa1b { if (!errors) { const _fn = id.value ? putMediaAccounts : postMediaAccounts; - const _params = id.value ? { id: id.value } : form; + const _params = id.value ? { id: id.value, ...form.value } : form; const { code } = await _fn(_params); if (code === 200) { AMessage.success(isEdit.value ? '修改成功' : '生成授权码成功'); diff --git a/src/views/property-marketing/media-account/account-manage/components/add-account-modal/style.scss b/src/views/property-marketing/media-account/account-manage/components/add-account-modal/style.scss index 61e48a4..9e4735c 100644 --- a/src/views/property-marketing/media-account/account-manage/components/add-account-modal/style.scss +++ b/src/views/property-marketing/media-account/account-manage/components/add-account-modal/style.scss @@ -1,39 +1,10 @@ +@import "@/views/property-marketing/component.scss"; .add-account-modal { border-radius: 8px; - .arco-input-wrapper, - .arco-select-view-single, - .arco-select-view-multiple { - border-radius: 4px; - border-color: #d7d7d9; - background-color: #fff; - &:focus-within, - &.arco-input-focus { - background-color: var(--color-bg-2); - border-color: rgb(var(--primary-6)); - box-shadow: 0 0 0 0 var(--color-primary-light-2); - } - } .w-240px { width: 240px !important; } - .arco-modal-header { - border-bottom: none; - height: 56px; - padding: 22px 24px 16px 24px; - .arco-modal-title { - justify-content: flex-start; - } - } .arco-modal-body { - padding: 24px 24px 20px; - .arco-form-item { - margin-bottom: 16px; - } - .cancel-btn { - border-radius: 4px; - border: 1px solid var(--BG-500, #b1b2b5); - background: var(--BG-white, #fff); - } .upload-block { width: 100%; .dt { @@ -89,8 +60,4 @@ cursor: pointer; } } - .arco-modal-footer { - border-top: none; - padding: 0; - } } diff --git a/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/add-group.vue b/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/add-group.vue new file mode 100644 index 0000000..4766830 --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/add-group.vue @@ -0,0 +1,80 @@ + + + + diff --git a/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/delete-group.vue b/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/delete-group.vue new file mode 100644 index 0000000..5dc0a77 --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/delete-group.vue @@ -0,0 +1,63 @@ + + + + diff --git a/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/index.vue b/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/index.vue index 2355602..31af8ae 100644 --- a/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/index.vue +++ b/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/index.vue @@ -5,33 +5,179 @@ diff --git a/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/style.scss b/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/style.scss index 318e122..0dbc882 100644 --- a/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/style.scss +++ b/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/style.scss @@ -1,19 +1,42 @@ +@import '@/views/property-marketing/component.scss'; + .tags-manage-modal { border-radius: 8px; - .arco-modal-header { - border-bottom: none; - height: 56px; - padding: 22px 24px 16px 24px; - .arco-modal-title { - justify-content: flex-start; + .arco-modal-body { + padding: 24px 24px 44px !important; + max-height: 304px; + overflow: hidden; + display: flex; + flex-direction: column; + .arco-btn { + width: fit-content; + .arco-btn-icon { + line-height: 16px; + } + } + .tag-list { + flex: 1; + overflow-y: auto; + display: flex; + flex-wrap: wrap; + .tag-item { + display: flex; + height: 32px; + padding: 0px 8px; + align-items: center; + border-radius: 2px; + background: var(--BG-200, #f2f3f5); + gap: 12px; + .text { + color: var(--Text-2, #3c4043); + font-family: 'Alibaba PuHuiTi'; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; /* 157.143% */ + } + } } } - .arco-modal-body { - padding: 16px 24px 20px; - } - .arco-modal-footer { - border-top: none; - padding: 0; - } } From 7769c3b8bd9d03b73128f2ee3f7fd752115aa10d Mon Sep 17 00:00:00 2001 From: rd <> Date: Thu, 26 Jun 2025 18:31:52 +0800 Subject: [PATCH 11/78] =?UTF-8?q?feat:=20=E6=89=B9=E9=87=8F=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E8=B4=A6=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/all/propertyMarketing.ts | 7 +- src/assets/img/media-account/icon-close.png | Bin 0 -> 403 bytes .../account-table/delete-account.vue | 70 ++++++++ .../components/account-table/index.vue | 37 ++++- .../components/add-account-modal/index.vue | 2 +- .../components/tags-manage-modal/index.vue | 11 +- .../media-account/account-manage/index.vue | 157 ++++++++++++++---- .../media-account/account-manage/style.scss | 16 ++ 8 files changed, 252 insertions(+), 48 deletions(-) create mode 100644 src/assets/img/media-account/icon-close.png create mode 100644 src/views/property-marketing/media-account/account-manage/components/account-table/delete-account.vue diff --git a/src/api/all/propertyMarketing.ts b/src/api/all/propertyMarketing.ts index 63c8d43..cc01d23 100644 --- a/src/api/all/propertyMarketing.ts +++ b/src/api/all/propertyMarketing.ts @@ -40,7 +40,7 @@ export const putMediaAccounts = (id: string) => { }; // 媒体账号-删除 -export const deleteMediaAccounts = (id: string) => { +export const deleteMediaAccount = (id: string) => { return Http.delete(`/v1/media-accounts/${id}`); }; @@ -90,3 +90,8 @@ export const putTag = (params = {}) => { export const deleteTag = (id: string) => { return Http.delete(`/v1/media-account-tags/${id}`); }; + +// 媒体账号-批量删除 +export const batchDeleteMediaAccounts = (params = {}) => { + return Http.delete(`/v1/media-accounts/batch`, params); +}; diff --git a/src/assets/img/media-account/icon-close.png b/src/assets/img/media-account/icon-close.png new file mode 100644 index 0000000000000000000000000000000000000000..1fa3c1dec509d8d44d4c1e2b46493477b15b327e GIT binary patch literal 403 zcmV;E0c`$>P)ya5iOBU0(h6=q{P0XxN=CT@_4G5vV+0ANLtxyg67AZAttcy_ZPq+o9xdEeJ&)FS^ zyE9(hI`0YON4(n2l_3dnPQo=OEuT4oF`?zS(Dv&$b#e1a_{p$6~sJTQ<%X&NYhrP0&#RUXE!|0H51m$?7{002ovPDHLkV1l7OpqKyv literal 0 HcmV?d00001 diff --git a/src/views/property-marketing/media-account/account-manage/components/account-table/delete-account.vue b/src/views/property-marketing/media-account/account-manage/components/account-table/delete-account.vue new file mode 100644 index 0000000..ccc91bf --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/account-table/delete-account.vue @@ -0,0 +1,70 @@ + + + + + diff --git a/src/views/property-marketing/media-account/account-manage/components/account-table/index.vue b/src/views/property-marketing/media-account/account-manage/components/account-table/index.vue index 7b89186..f929af4 100644 --- a/src/views/property-marketing/media-account/account-manage/components/account-table/index.vue +++ b/src/views/property-marketing/media-account/account-manage/components/account-table/index.vue @@ -5,7 +5,7 @@ diff --git a/src/router/routes/modules/propertyMarketing.ts b/src/router/routes/modules/propertyMarketing.ts index daaaa52..e1c14e6 100644 --- a/src/router/routes/modules/propertyMarketing.ts +++ b/src/router/routes/modules/propertyMarketing.ts @@ -128,7 +128,7 @@ const COMPONENTS: AppRouteRecordRaw[] = [ requiresAuth: true, roles: ['*'], }, - component: () => import('@/views/property-marketing/account-placement/placementGuide'), + component: () => import('@/views/property-marketing/put-account/investmentGuidelines'), }, ], }, diff --git a/src/views/property-marketing/enterpriseKnowledge/brandMaterials.less b/src/views/property-marketing/enterpriseKnowledge/brandMaterials.less new file mode 100644 index 0000000..23e6a7c --- /dev/null +++ b/src/views/property-marketing/enterpriseKnowledge/brandMaterials.less @@ -0,0 +1,182 @@ +.placement-guide-style { + //每块div布局 + .part-div { + width: 100%; + height: 100%; + background: var(--BG-white, white); + overflow: hidden; + border-radius: 8px; + outline: 1px var(--BG-300, #E6E6E8) solid; + outline-offset: -1px; + flex-direction: column; + justify-content: flex-start; + display: inline-flex; + margin: 10px; + } + + //每块div 头部 + .part-div-header { + align-self: stretch; + height: 64px; + padding: 10px 24px 10px 24px; + justify-content: flex-start; + align-items: center; + display: inline-flex + } + + //每块div 标题 + .part-div-header-title { + justify-content: center; + display: flex; + flex-direction: column; + color: var(--Text-1, #211F24); + font-size: 18px; + font-family: Alibaba PuHuiTi; + font-weight: 400; + line-height: 26px; + word-wrap: break-word; + } + + //无数据样式 + .non-data { + display: flex; + align-items: center; /* 垂直居中 */ + justify-content: center; /* 水平居中,如果需要的话 */ + height: 50%; /* 示例:父容器高度为视口高度 */ + } + + .non-data-str { + // 暂无品牌 + color: var(--Text-3, #737478); + font-size: 14px; + font-family: Alibaba PuHuiTi; + font-weight: 400; + line-height: 22px; + word-wrap: break-word; + margin: 20px 20px; + } + + .add-btn { + font-size: 16px; + padding: 0 24px; + border-radius: 4px; + } + + .materials-page { + background: #fff; + border-radius: 8px; + padding: 32px 24px 24px 24px; + min-height: 600px; + } + + .header-row { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 24px; + } + + .page-title { + font-size: 20px; + font-weight: 600; + margin: 0; + } + + .search-row { + display: flex; + align-items: center; + gap: 12px; + margin-bottom: 20px; + } + + .search-input { + width: 240px; + } + + .search-btn, + .reset-btn { + min-width: 72px; + } + + .brand-table { + margin-bottom: 16px; + } + + .logo-cell { + display: flex; + align-items: center; + gap: 6px; + font-weight: 500; + } + + .logo-emoji { + font-size: 20px; + } + + .logo-text { + font-size: 16px; + } + + .pagination-row { + display: flex; + align-items: center; + gap: 16px; + margin-top: 8px; + } + + .page-size-select { + width: 80px; + } + + .upload-card { + width: 80px; + height: 80px; + border: 1px dashed #d9d9d9; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + color: #999; + font-size: 24px; + background: #fafafa; + border-radius: 6px; + } + + .upload-tip { + font-size: 12px; + color: #999; + margin-top: 4px; + } + + .form-tip { + font-size: 12px; + color: #999; + margin-top: 4px; + } + + .form-item-logo .logo-upload-row { + display: flex; + align-items: center; + gap: 16px; + } + + .logo-upload-card { + display: flex; + gap: 12px; + } + + .form-tip { + color: #999; + font-size: 13px; + margin-left: 8px; + line-height: 1.5; + } + + .a-form .a-form-item { + margin-bottom: 24px; + } + + .a-modal .a-modal-footer { + justify-content: flex-end; + } +} diff --git a/src/views/property-marketing/enterpriseKnowledge/brandMaterials.vue b/src/views/property-marketing/enterpriseKnowledge/brandMaterials.vue index 3479576..3beb3aa 100644 --- a/src/views/property-marketing/enterpriseKnowledge/brandMaterials.vue +++ b/src/views/property-marketing/enterpriseKnowledge/brandMaterials.vue @@ -1,106 +1,133 @@ -