diff --git a/package.json b/package.json index 6ca4f93..e108efa 100755 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ }, "dependencies": { "@element-plus/icons-vue": "^2.1.0", + "@fancyapps/ui": "^5.0.22", "@icon-park/vue-next": "^1.4.2", "@lottiefiles/lottie-player": "^2.0.2", "@vueuse/core": "^10.1.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 382e913..36473e2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ dependencies: '@element-plus/icons-vue': specifier: ^2.1.0 version: 2.1.0(vue@3.3.4) + '@fancyapps/ui': + specifier: ^5.0.22 + version: 5.0.22 '@icon-park/vue-next': specifier: ^1.4.2 version: 1.4.2(vue@3.3.4) @@ -1033,6 +1036,10 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@fancyapps/ui@5.0.22: + resolution: {integrity: sha512-44A5/Hm59mn53FqZRyM4HO/R7UWE79UxgNyHmaudSe+HuU5Kl1g6lxR4Ol1QFaqNS97Pbdytlu4SxYsOX1BTxw==} + dev: false + /@floating-ui/core@1.3.1: resolution: {integrity: sha512-Bu+AMaXNjrpjh41znzHqaz3r2Nr8hHuHZT6V2LBKMhyMl0FgKA62PNYbqnfgmzOhoWZj70Zecisbo4H1rotP5g==} dev: false @@ -3988,7 +3995,7 @@ packages: lodash-es: 4.17.21 vanilla-jsoneditor: 0.17.8 vue: 3.3.4 - vue-demi: 0.14.5(vue@3.3.4) + vue-demi: 0.14.6(vue@3.3.4) vue-global-config: 0.4.0(vue@3.3.4) dev: true @@ -5750,6 +5757,21 @@ packages: dependencies: vue: 3.3.4 + /vue-demi@0.14.6(vue@3.3.4): + resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + dependencies: + vue: 3.3.4 + dev: true + /vue-eslint-parser@9.3.1(eslint@8.40.0): resolution: {integrity: sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g==} engines: {node: ^14.17.0 || >=16.0.0} @@ -5772,7 +5794,7 @@ packages: resolution: {integrity: sha512-283vpYOhVHJCpMkjNVEwZdgaAb+Y93zFaXGAWTI378MLoNuwQydjD/BAy1e81QYEmyA+JbxqcmMZVWcM9rbriw==} dependencies: eslint-config-vue-global-api: 0.4.1 - vue-demi: 0.14.5(vue@3.3.4) + vue-demi: 0.14.6(vue@3.3.4) transitivePeerDependencies: - '@vue/composition-api' - vue diff --git a/src/api/command.ts b/src/api/command.ts new file mode 100644 index 0000000..c5c340f --- /dev/null +++ b/src/api/command.ts @@ -0,0 +1,36 @@ +import request from '@/utils/axios'; + +// 获取口令列表 +export function commandGet(params?: any) { + return request({ + url: '/manager/web3/laboratory', + method: 'get', + params + }); +} + +// 新增口令 +export function commandPost(data: any) { + return request({ + url: '/manager/web3/laboratory', + method: 'post', + data + }); +} + +// 编辑口令 +export function commandPut(data: any, id: string) { + return request({ + url: `/manager/web3/laboratory/${id}`, + method: 'put', + data + }); +} + +// 删除口令 +export function commandDelete(id: string) { + return request({ + url: `/manager/web3/laboratory/${id}`, + method: 'delete' + }); +} diff --git a/src/api/workplace/app.ts b/src/api/workplace/app.ts new file mode 100644 index 0000000..e32856c --- /dev/null +++ b/src/api/workplace/app.ts @@ -0,0 +1,36 @@ +import request from '@/utils/axios'; + +// 获取应用 +export function appGet(params?: any) { + return request({ + url: '/manager/workplace/app', + method: 'get', + params + }); +} + +// 新增应用 +export function appPost(data: any) { + return request({ + url: '/manager/workplace/app', + method: 'post', + data + }); +} + +// 编辑应用 +export function appPut(data: any, app_id: string) { + return request({ + url: `/manager/workplace/apps/${app_id}`, + method: 'put', + data + }); +} + +// 删除应用 +export function appDelete(app_id: string) { + return request({ + url: `/manager/workplace/apps/${app_id}`, + method: 'delete' + }); +} diff --git a/src/api/workplace/banner.ts b/src/api/workplace/banner.ts new file mode 100644 index 0000000..364c348 --- /dev/null +++ b/src/api/workplace/banner.ts @@ -0,0 +1,45 @@ +import request from '@/utils/axios'; + +// 获取轮播 +export function bannerGet(params?: any) { + return request({ + url: '/manager/workplace/banner', + method: 'get', + params + }); +} + +// 新增轮播 +export function bannerPost(data: any) { + return request({ + url: '/manager/workplace/banner', + method: 'post', + data + }); +} + +// 编辑轮播 +export function bannerPut(data: any, banner_no: string) { + return request({ + url: `/manager/workplace/banners/${banner_no}`, + method: 'put', + data + }); +} + +// 删除轮播 +export function bannerDelete(banner_no: string) { + return request({ + url: `/manager/workplace/banners/${banner_no}`, + method: 'delete' + }); +} + +// 轮播排序 +export function bannerReorderPut(data: any) { + return request({ + url: `/manager/workplace/banner/reorder`, + method: 'put', + data + }); +} diff --git a/src/api/workplace/category.ts b/src/api/workplace/category.ts new file mode 100644 index 0000000..d1067fe --- /dev/null +++ b/src/api/workplace/category.ts @@ -0,0 +1,79 @@ +import request from '@/utils/axios'; + +// 获取分类 +export function categoryGet(params?: any) { + return request({ + url: '/manager/workplace/category', + method: 'get', + params + }); +} + +// 新增分类 +export function categoryPost(data: any) { + return request({ + url: '/manager/workplace/category', + method: 'post', + data + }); +} + +// 分类编辑 +export function categoryPut(data: any, category_no: string) { + return request({ + url: `/manager/workplace/categorys/${category_no}`, + method: 'put', + data + }); +} + +// 删除分类 +export function categoryDelete(category_no: string) { + return request({ + url: `/manager/workplace/categorys/${category_no}`, + method: 'delete' + }); +} + +// 分类排序 +export function categoryReorderPut(data: any) { + return request({ + url: '/manager/workplace/category/reorder', + method: 'put', + data + }); +} + +// 分类获取应用 +export function categoryAppGet(category_no: string) { + return request({ + url: `/manager/workplace/categorys/${category_no}/app`, + method: 'get' + }); +} + +// 分类新增应用 +export function categoryAppPost(data: any, category_no: string) { + return request({ + url: `/manager/workplace/categorys/${category_no}/app`, + method: 'post', + data + }); +} + +// 分类删除应用 +export function categoryAppDelete(category_no: string, app_id: string) { + return request({ + url: `/manager/workplace/categorys/${category_no}/apps/${app_id}`, + method: 'delete' + }); +} + +// 分类应用排序 +export function categorysAppsReorderPut(data: any, category_no: string) { + return request({ + url: `/manager/workplace/categorys/${category_no}/app/reorder`, + method: 'put', + data + }); +} diff --git a/src/components/BdMsg/index.vue b/src/components/BdMsg/index.vue index 462cdfa..87b8e87 100644 --- a/src/components/BdMsg/index.vue +++ b/src/components/BdMsg/index.vue @@ -5,13 +5,31 @@ {{ msg['content'] }} - + - + - +
位置标题:{{ msg['title'] }}
@@ -73,6 +91,7 @@ + + diff --git a/src/layouts/components/Tabs.vue b/src/layouts/components/Tabs.vue index 7810bcc..322a617 100755 --- a/src/layouts/components/Tabs.vue +++ b/src/layouts/components/Tabs.vue @@ -10,25 +10,6 @@ :class="tabsMenuValue === item.path ? 'chrome-tab_active' : ''" @click.stop="tabClick(item)" > -
diff --git a/src/main.ts b/src/main.ts index b160f98..3fcd5d0 100755 --- a/src/main.ts +++ b/src/main.ts @@ -19,6 +19,7 @@ import 'vue-global-api'; import 'element-plus/dist/index.css'; import 'element-plus/theme-chalk/dark/css-vars.css'; import '@icon-park/vue-next/styles/index.css'; +import '@fancyapps/ui/dist/fancybox/fancybox.css'; import '@/styles/index.scss'; import 'uno.css'; diff --git a/src/menu/modules/setting.ts b/src/menu/modules/setting.ts index 2dfb78a..9faa330 100644 --- a/src/menu/modules/setting.ts +++ b/src/menu/modules/setting.ts @@ -9,7 +9,7 @@ const home: Menu.MenuOptions = { isHide: false, isKeepAlive: true, isLink: '', - index: 8, + index: 9, title: '设置' }, children: [ diff --git a/src/menu/modules/tool.ts b/src/menu/modules/tool.ts index 45c6385..414d1c4 100644 --- a/src/menu/modules/tool.ts +++ b/src/menu/modules/tool.ts @@ -9,7 +9,7 @@ const home: Menu.MenuOptions = { isHide: false, isKeepAlive: true, isLink: '', - index: 7, + index: 8, title: '工具' }, children: [ @@ -27,6 +27,20 @@ const home: Menu.MenuOptions = { title: 'APP升级' } }, + { + component: '/tool/command', + name: 'toolCommand', + path: '/tool/command', + meta: { + icon: 'i-bd-command', + isAffix: false, + isFull: false, + isHide: false, + isKeepAlive: true, + isLink: '', + title: '口令管理' + } + }, { component: '/tool/systemrobotmenu', name: 'toolSystemrobotmenu', diff --git a/src/menu/modules/workplace.ts b/src/menu/modules/workplace.ts new file mode 100644 index 0000000..4e73eca --- /dev/null +++ b/src/menu/modules/workplace.ts @@ -0,0 +1,43 @@ +const home: Menu.MenuOptions = { + name: 'tool', + path: '/workplace', + meta: { + icon: 'i-bd-all-application', + isAffix: false, + isFull: false, + isHide: false, + isKeepAlive: true, + isLink: '', + index: 7, + title: '工作台' + }, + children: [ + { + name: 'workplaceManage', + path: '/workplace/manage', + meta: { + icon: 'i-bd-application', + isAffix: false, + isFull: false, + isHide: false, + isKeepAlive: true, + isLink: '', + title: '应用管理' + } + }, + { + name: 'workplaceConfiguration', + path: '/workplace/configuration', + meta: { + icon: 'i-bd-setting-config', + isAffix: false, + isFull: false, + isHide: false, + isKeepAlive: true, + isLink: '', + title: '工作台设置' + } + } + ] +}; +export default home; diff --git a/src/pages/group/groupblacklist.vue b/src/pages/group/groupblacklist.vue index 3cadfc8..4688ff3 100644 --- a/src/pages/group/groupblacklist.vue +++ b/src/pages/group/groupblacklist.vue @@ -35,8 +35,8 @@ - diff --git a/src/pages/group/groupdisablelist.vue b/src/pages/group/groupdisablelist.vue index 8ec2c08..9c383df 100644 --- a/src/pages/group/groupdisablelist.vue +++ b/src/pages/group/groupdisablelist.vue @@ -32,8 +32,8 @@ - diff --git a/src/pages/group/grouplist.vue b/src/pages/group/grouplist.vue index 25a5658..5f426d8 100644 --- a/src/pages/group/grouplist.vue +++ b/src/pages/group/grouplist.vue @@ -33,7 +33,7 @@ {{ item.formatter(scope.row) }} diff --git a/src/pages/group/groupmembers.vue b/src/pages/group/groupmembers.vue index 7fdd648..5f42ec2 100644 --- a/src/pages/group/groupmembers.vue +++ b/src/pages/group/groupmembers.vue @@ -35,8 +35,8 @@ - diff --git a/src/pages/message/prohibitwords.vue b/src/pages/message/prohibitwords.vue index fbba49c..18bda50 100644 --- a/src/pages/message/prohibitwords.vue +++ b/src/pages/message/prohibitwords.vue @@ -34,7 +34,7 @@ {{ item.formatter(scope.row) }} diff --git a/src/pages/message/record.vue b/src/pages/message/record.vue index d113bc3..5a61aea 100644 --- a/src/pages/message/record.vue +++ b/src/pages/message/record.vue @@ -36,7 +36,7 @@ {{ item.formatter(scope.row) }} diff --git a/src/pages/message/recordpersonal.vue b/src/pages/message/recordpersonal.vue index 082d0c0..e427016 100644 --- a/src/pages/message/recordpersonal.vue +++ b/src/pages/message/recordpersonal.vue @@ -39,7 +39,7 @@ {{ item.formatter(scope.row) }} @@ -198,8 +198,8 @@ const getUserList = () => { loadTable.value = true; messageRecordpersonalGet(queryFrom).then((res: any) => { loadTable.value = false; - tableData.value = res.list; - total.value = res.count; + tableData.value = res?.list ? res?.list : []; + total.value = res?.count ? res?.count : 0; }); }; @@ -225,6 +225,7 @@ const msgDel = (data: any) => { const formData = { channel_id: route.query.uid, channel_type: 1, + from_uid: route.query.touid, list }; messageDelete(formData).then((res: any) => { diff --git a/src/pages/message/sendmsglist.vue b/src/pages/message/sendmsglist.vue index 3f5363f..00cdf6d 100644 --- a/src/pages/message/sendmsglist.vue +++ b/src/pages/message/sendmsglist.vue @@ -30,7 +30,7 @@ {{ item.formatter(scope.row) }} diff --git a/src/pages/redpacket/list.vue b/src/pages/redpacket/list.vue index efcee25..84ce01d 100644 --- a/src/pages/redpacket/list.vue +++ b/src/pages/redpacket/list.vue @@ -32,8 +32,8 @@ - diff --git a/src/pages/report/group.vue b/src/pages/report/group.vue index 62819a5..5f3d057 100644 --- a/src/pages/report/group.vue +++ b/src/pages/report/group.vue @@ -23,8 +23,8 @@ - diff --git a/src/pages/report/user.vue b/src/pages/report/user.vue index 08492a0..1cf8ff9 100644 --- a/src/pages/report/user.vue +++ b/src/pages/report/user.vue @@ -23,8 +23,8 @@ - diff --git a/src/pages/tool/appupdate.vue b/src/pages/tool/appupdate.vue index 209544d..b2a6132 100644 --- a/src/pages/tool/appupdate.vue +++ b/src/pages/tool/appupdate.vue @@ -29,8 +29,8 @@ - diff --git a/src/pages/tool/command/components/CommandDialog.vue b/src/pages/tool/command/components/CommandDialog.vue new file mode 100644 index 0000000..c544171 --- /dev/null +++ b/src/pages/tool/command/components/CommandDialog.vue @@ -0,0 +1,146 @@ + + + + + diff --git a/src/pages/tool/command/index.vue b/src/pages/tool/command/index.vue new file mode 100644 index 0000000..7726f8e --- /dev/null +++ b/src/pages/tool/command/index.vue @@ -0,0 +1,220 @@ + + + +meta: + title: 口令管理 + isAffix: false + + + + + diff --git a/src/pages/tool/systemrobotmenu.vue b/src/pages/tool/systemrobotmenu.vue index 7cde68f..eea19d6 100644 --- a/src/pages/tool/systemrobotmenu.vue +++ b/src/pages/tool/systemrobotmenu.vue @@ -23,8 +23,8 @@ - diff --git a/src/pages/user/disablelist.vue b/src/pages/user/disablelist.vue index 9185acd..2104c6d 100644 --- a/src/pages/user/disablelist.vue +++ b/src/pages/user/disablelist.vue @@ -32,8 +32,8 @@ - diff --git a/src/pages/user/friends.vue b/src/pages/user/friends.vue index a833386..4148a25 100644 --- a/src/pages/user/friends.vue +++ b/src/pages/user/friends.vue @@ -36,8 +36,8 @@ - diff --git a/src/pages/user/userblacklist.vue b/src/pages/user/userblacklist.vue index 53eaa06..11b2191 100644 --- a/src/pages/user/userblacklist.vue +++ b/src/pages/user/userblacklist.vue @@ -35,8 +35,8 @@ - diff --git a/src/pages/user/userlist.vue b/src/pages/user/userlist.vue index 621fd49..41e27bf 100644 --- a/src/pages/user/userlist.vue +++ b/src/pages/user/userlist.vue @@ -33,8 +33,8 @@ - @@ -81,7 +81,7 @@ const userStore = useUserStore(); const column = reactive([ { prop: 'name', - label: '用户名', + label: '昵称', fixed: 'left', width: 140 }, @@ -91,6 +91,11 @@ const column = reactive([ fixed: 'left', width: 120 }, + { + prop: 'username', + label: '用户', + width: 120 + }, { prop: 'avatar', label: '头像', diff --git a/src/pages/workplace/configuration/components/AppDialog.vue b/src/pages/workplace/configuration/components/AppDialog.vue new file mode 100644 index 0000000..d419403 --- /dev/null +++ b/src/pages/workplace/configuration/components/AppDialog.vue @@ -0,0 +1,192 @@ + + + diff --git a/src/pages/workplace/configuration/components/Banner.vue b/src/pages/workplace/configuration/components/Banner.vue new file mode 100644 index 0000000..0c11773 --- /dev/null +++ b/src/pages/workplace/configuration/components/Banner.vue @@ -0,0 +1,265 @@ + + + + + diff --git a/src/pages/workplace/configuration/components/BannerDialog.vue b/src/pages/workplace/configuration/components/BannerDialog.vue new file mode 100644 index 0000000..9147692 --- /dev/null +++ b/src/pages/workplace/configuration/components/BannerDialog.vue @@ -0,0 +1,212 @@ + + + + + diff --git a/src/pages/workplace/configuration/components/CategoryDialog.vue b/src/pages/workplace/configuration/components/CategoryDialog.vue new file mode 100644 index 0000000..fa025d1 --- /dev/null +++ b/src/pages/workplace/configuration/components/CategoryDialog.vue @@ -0,0 +1,133 @@ + + + diff --git a/src/pages/workplace/configuration/components/CustomGroup.vue b/src/pages/workplace/configuration/components/CustomGroup.vue new file mode 100644 index 0000000..8539a6b --- /dev/null +++ b/src/pages/workplace/configuration/components/CustomGroup.vue @@ -0,0 +1,447 @@ + + + + + diff --git a/src/pages/workplace/configuration/components/Recommend.vue b/src/pages/workplace/configuration/components/Recommend.vue new file mode 100644 index 0000000..61dcb71 --- /dev/null +++ b/src/pages/workplace/configuration/components/Recommend.vue @@ -0,0 +1,161 @@ + + + + + diff --git a/src/pages/workplace/configuration/index.vue b/src/pages/workplace/configuration/index.vue new file mode 100644 index 0000000..8a6696e --- /dev/null +++ b/src/pages/workplace/configuration/index.vue @@ -0,0 +1,41 @@ + + + +meta: + title: 工作台设置 + isAffix: false + + + diff --git a/src/pages/workplace/manage/components/Apply.vue b/src/pages/workplace/manage/components/Apply.vue new file mode 100644 index 0000000..31756c5 --- /dev/null +++ b/src/pages/workplace/manage/components/Apply.vue @@ -0,0 +1,230 @@ + + + + + diff --git a/src/pages/workplace/manage/index.vue b/src/pages/workplace/manage/index.vue new file mode 100644 index 0000000..000a22d --- /dev/null +++ b/src/pages/workplace/manage/index.vue @@ -0,0 +1,256 @@ + + + +meta: + title: 应用管理 + isAffix: false + + + + + diff --git a/src/styles/element.scss b/src/styles/element.scss index f9173e0..ced6fdb 100755 --- a/src/styles/element.scss +++ b/src/styles/element.scss @@ -11,6 +11,7 @@ /* 当前页面最大化 css */ .main-maximize { + .aside-split, .el-aside, .el-header, @@ -40,6 +41,7 @@ border-radius: 0; box-shadow: none; } + .table-search { padding: 18px 0 0 !important; margin-bottom: 0 !important; @@ -52,18 +54,22 @@ flex-direction: column; align-items: center; height: 100%; + .text { margin: 20px 0 30px; font-size: 23px; font-weight: bold; color: var(--el-text-color-regular); } + .el-descriptions { width: 100%; padding: 40px 0 0; + .el-descriptions__title { font-size: 18px; } + .el-descriptions__label { width: 200px; } @@ -75,6 +81,7 @@ display: flex; width: 100%; height: 100%; + .table-box { // 这里减去的是 treeFilter 组件宽度 width: calc(100% - 230px); @@ -94,8 +101,9 @@ .table-search { padding: 18px 18px 0; margin-bottom: 10px; + .el-form { - .el-form-item__content > * { + .el-form-item__content>* { width: 100%; } @@ -104,6 +112,7 @@ padding: 0 10px; } } + .operation { display: flex; align-items: center; @@ -117,9 +126,11 @@ .header-button-lf { float: left; } + .header-button-ri { float: right; } + .el-button { margin-bottom: 15px; } @@ -133,6 +144,7 @@ table { width: 100%; } + .el-table__header th { height: 45px; font-size: 15px; @@ -140,16 +152,18 @@ color: var(--el-text-color-primary); background: var(--el-fill-color-light); } + .el-table__row { height: 45px; font-size: 14px; + .el-table__placeholder { display: inline; } } // 设置 el-table 中 header 文字不换行,并省略 - .el-table__header .el-table__cell > .cell { + .el-table__header .el-table__cell>.cell { white-space: nowrap; } @@ -159,6 +173,7 @@ top: 50%; left: 50%; transform: translate(-50%, -50%); + .table-empty { line-height: 30px; } @@ -186,16 +201,19 @@ height: 40px !important; font-size: 14px !important; } + .el-table__row { height: 40px !important; font-size: 13px !important; } } + .el-table--large { .el-table__header th { height: 50px !important; font-size: 16px !important; } + .el-table__row { height: 50px !important; font-size: 15px !important; @@ -208,12 +226,14 @@ padding: 16px 20px; margin-bottom: 0; border-bottom: 1px solid var(--el-border-color-lighter); + span { font-size: 17px; line-height: 17px; color: var(--el-text-color-primary) !important; } } + .el-drawer__footer { border-top: 1px solid var(--el-border-color-lighter); } @@ -227,8 +247,10 @@ .drawer-multiColumn-form { display: flex; flex-wrap: wrap; + .el-form-item { width: 47%; + &:nth-child(2n-1) { margin-right: 5%; } @@ -242,6 +264,7 @@ padding: 15px 20px; margin: 0; border-bottom: 1px solid var(--el-border-color-lighter); + .el-dialog__title { font-size: 17px; } @@ -258,12 +281,47 @@ background: var(--el-fill-color-light); } } + /* el-menu-item */ .el-menu-item { height: 48px !important; line-height: 48px !important; } + /* bu-button*/ .bu-button:focus-visible { outline: 0; } + +/* bd-tabs */ +.bd-tabs { + display: flex; + flex-direction: column; + height: 100%; + + .el-tabs__header { + margin: 0; + } + + .el-tabs__nav-wrap { + padding: 0 24px; + + &::after { + height: 1px; + } + } + + .el-tabs__item { + padding: 0 12px; + } + + .el-tabs__content { + flex: 1; + height: 100% !important; + } + + .el-tab-pane { + flex: 1; + height: 100% !important; + } +} diff --git a/src/types/global.d.ts b/src/types/global.d.ts index 5b5e842..80cd52a 100755 --- a/src/types/global.d.ts +++ b/src/types/global.d.ts @@ -80,8 +80,8 @@ type ObjToKeyValArray = { }[keyof T]; declare namespace Column { interface ColumnOptions { - prop: string; - label: string; + prop?: string; + label?: string; type?: 'selection' | 'index' | 'expand'; fixed?: true | 'left' | 'right'; width?: string | number;