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..cc01d23 --- /dev/null +++ b/src/api/all/propertyMarketing.ts @@ -0,0 +1,97 @@ +/* + * @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); +}; + +// 媒体账号-分页 +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 deleteMediaAccount = (id: string) => { + return Http.delete(`/v1/media-accounts/${id}`); +}; + +// 媒体账号-获取模板地址 +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 putGroup = (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}`); +}; + +// 媒体账号标签-列表 +export const getTagsList = (params = {}) => { + return Http.get('/v1/media-account-tags/list', params); +}; + +// 媒体账号标签-添加 +export const postAccountTags = (params = {}) => { + return Http.post('/v1/media-account-tags', params); +}; + +// 媒体账号标签-修改 +export const putTag = (params = {}) => { + const { id, ...rest } = params as { id: string; [key: string]: any }; + return Http.put(`/v1/media-account-tags/${id}`, rest); +}; + +// 媒体账号标签-删除 +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/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 0000000..d386607 Binary files /dev/null and b/src/assets/img/media-account/icon-add.png differ 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 0000000..1fa3c1d Binary files /dev/null and b/src/assets/img/media-account/icon-close.png differ diff --git a/src/assets/img/media-account/icon-delete-1.png b/src/assets/img/media-account/icon-delete-1.png new file mode 100644 index 0000000..c7ded62 Binary files /dev/null and b/src/assets/img/media-account/icon-delete-1.png differ diff --git a/src/assets/img/media-account/icon-delete.png b/src/assets/img/media-account/icon-delete.png new file mode 100644 index 0000000..1952959 Binary files /dev/null and b/src/assets/img/media-account/icon-delete.png differ 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 0000000..7a0db1b Binary files /dev/null and b/src/assets/img/media-account/icon-download.png differ diff --git a/src/assets/img/media-account/icon-dy.png b/src/assets/img/media-account/icon-dy.png new file mode 100644 index 0000000..0323b26 Binary files /dev/null and b/src/assets/img/media-account/icon-dy.png differ 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 0000000..798fefe Binary files /dev/null and b/src/assets/img/media-account/icon-empty.png differ diff --git a/src/assets/img/media-account/icon-group.png b/src/assets/img/media-account/icon-group.png new file mode 100644 index 0000000..b371572 Binary files /dev/null and b/src/assets/img/media-account/icon-group.png differ 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 0000000..5a92a81 Binary files /dev/null and b/src/assets/img/media-account/icon-success.png differ diff --git a/src/assets/img/media-account/icon-tag.png b/src/assets/img/media-account/icon-tag.png new file mode 100644 index 0000000..509f29a Binary files /dev/null and b/src/assets/img/media-account/icon-tag.png differ 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 0000000..40402eb Binary files /dev/null and b/src/assets/img/media-account/icon-warn-1.png differ diff --git a/src/assets/img/media-account/icon-warn.png b/src/assets/img/media-account/icon-warn.png new file mode 100644 index 0000000..6ad12a0 Binary files /dev/null and b/src/assets/img/media-account/icon-warn.png differ diff --git a/src/assets/img/media-account/icon-xhs.png b/src/assets/img/media-account/icon-xhs.png new file mode 100644 index 0000000..7429e58 Binary files /dev/null and b/src/assets/img/media-account/icon-xhs.png differ diff --git a/src/layouts/Basic.vue b/src/layouts/Basic.vue index 3ef29d9..8ec85e9 100644 --- a/src/layouts/Basic.vue +++ b/src/layouts/Basic.vue @@ -91,7 +91,7 @@ provide('toggleDrawerMenu', () => { - + 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 e1c14e6..33e6b63 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/component.scss b/src/views/property-marketing/component.scss new file mode 100644 index 0000000..6fcacb8 --- /dev/null +++ b/src/views/property-marketing/component.scss @@ -0,0 +1,48 @@ +.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); + } +} +.arco-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: 24px 24px 20px; + .arco-form-item { + margin-bottom: 16px; + .arco-form-item-label { + color: var(--Text-1, #211f24); + font-family: 'Alibaba PuHuiTi'; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; /* 157.143% */ + } + } + .cancel-btn { + border-radius: 4px; + border: 1px solid var(--BG-500, #b1b2b5); + background: var(--BG-white, #fff); + } + } + + .arco-modal-footer { + border-top: none; + padding: 0; + } +} 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/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 new file mode 100644 index 0000000..f929af4 --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/account-table/index.vue @@ -0,0 +1,109 @@ + + + + + + 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..2a9edef --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/add-account-modal/index.vue @@ -0,0 +1,282 @@ + + + + + + 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..9e4735c --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/add-account-modal/style.scss @@ -0,0 +1,63 @@ +@import "@/views/property-marketing/component.scss"; +.add-account-modal { + border-radius: 8px; + .w-240px { + width: 240px !important; + } + .arco-modal-body { + .upload-block { + width: 100%; + .dt { + color: var(--Brand-Brand-6, #6d4cfe); + font-family: 'Alibaba PuHuiTi'; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; /* 157.143% */ + } + .import-row { + border-radius: 4px; + border: 1px solid var(--BG-400, #d7d7d9); + background: var(--BG-200, #f2f3f5); + .name { + color: var(--Text-1, #211f24); + font-family: 'Alibaba PuHuiTi'; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; /* 157.143% */ + } + &.error { + background: #ffe7e4; + color: #f64b31; + border: none; + .name { + color: #f64b31; + } + } + } + .arco-upload-drag { + height: 120px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + .arco-icon { + margin-bottom: 16px; + } + } + } + .upload-dragger { + border: 1px dashed #d9d9d9; + padding: 24px 0; + text-align: center; + background: #fafafa; + cursor: pointer; + } + .upload-error { + color: #f53f3f; + margin-left: 8px; + cursor: pointer; + } + } +} 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..87d4a77 --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/filter-block/index.vue @@ -0,0 +1,141 @@ + + + + + + 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/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..9781d48 --- /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..30a3270 --- /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 new file mode 100644 index 0000000..31af8ae --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/index.vue @@ -0,0 +1,185 @@ + + + + + + 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..4a25e4e --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/group-manage-modal/style.scss @@ -0,0 +1,62 @@ +@import '@/views/property-marketing/component.scss'; + +.account-manage-modal { + border-radius: 8px; + .arco-modal-body { + .arco-btn { + .arco-btn-icon { + line-height: 16px; + } + } + .s1 { + color: var(--Text-3, #737478); + font-family: 'Alibaba PuHuiTi'; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; /* 157.143% */ + } + .pagination-box { + display: flex; + width: 100%; + padding: 16px 24px; + justify-content: flex-end; + align-items: center; + .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-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, + .arco-pagination-jumper-input { + border-radius: 4px; + border: 1px solid var(--BG-300, #e6e6e8); + background-color: #fff; + } + } + } + } + .danger-btn { + border: none !important; + background-color: #f64b31 !important; + } +} diff --git a/src/views/property-marketing/media-account/account-manage/components/group-select/index.vue b/src/views/property-marketing/media-account/account-manage/components/group-select/index.vue new file mode 100644 index 0000000..a736c92 --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/group-select/index.vue @@ -0,0 +1,64 @@ + + + + diff --git a/src/views/property-marketing/media-account/account-manage/components/import-prompt-modal/index.vue b/src/views/property-marketing/media-account/account-manage/components/import-prompt-modal/index.vue new file mode 100644 index 0000000..7b67178 --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/import-prompt-modal/index.vue @@ -0,0 +1,51 @@ + + + + + + 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..e299151 --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/import-prompt-modal/style.scss @@ -0,0 +1,14 @@ +@import "@/views/property-marketing/component.scss"; +.import-prompt-modal { + border-radius: 8px; + .arco-modal-body { + .tip { + color: var(--Text-1, #211f24); + font-family: 'Alibaba PuHuiTi'; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; /* 157.143% */ + } + } +} 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/add-tag.vue b/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/add-tag.vue new file mode 100644 index 0000000..ac8bc3d --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/add-tag.vue @@ -0,0 +1,80 @@ + + + + diff --git a/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/delete-tag.vue b/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/delete-tag.vue new file mode 100644 index 0000000..bafc9eb --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/delete-tag.vue @@ -0,0 +1,63 @@ + + + + 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..2f8d10a --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/index.vue @@ -0,0 +1,137 @@ + + + + + + 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..0dbc882 --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/components/tags-manage-modal/style.scss @@ -0,0 +1,42 @@ +@import '@/views/property-marketing/component.scss'; + +.tags-manage-modal { + border-radius: 8px; + + .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% */ + } + } + } + } +} 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..dc376ca --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/index.vue @@ -0,0 +1,273 @@ + + + + + + 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..1d9c9cb --- /dev/null +++ b/src/views/property-marketing/media-account/account-manage/style.scss @@ -0,0 +1,122 @@ +.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% */ + } + .operation-btn { + padding: 0; + cursor: pointer; + color: var(--Brand-Brand-6, #6d4cfe); + font-family: 'Alibaba PuHuiTi'; + font-size: 14px; + font-style: normal; + font-weight: 400; + line-height: 22px; /* 157.143% */ + &:not(:last-child) { + margin-right: 16px; + } + &.red { + color: #F64B31; + } + } + } + .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); + } + } + } + } +}