From 908c35d8da70899b6f89525172d3d72e73edca25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E4=B8=91=E8=B7=AF=E4=BA=BA?= <2278757482@qq.com> Date: Thu, 17 Dec 2020 23:16:47 +0800 Subject: [PATCH] =?UTF-8?q?vue-admin=EF=BC=9A=E7=99=BB=E5=BD=95=E3=80=81?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E4=B8=AA=E4=BA=BA=E8=B5=84=E6=96=99=E3=80=81?= =?UTF-8?q?=E5=A4=B4=E9=83=A8token=E3=80=81=E8=8E=B7=E5=8F=96=E6=9D=83?= =?UTF-8?q?=E9=99=90=EF=BC=8C=E8=BF=9B=E5=85=A5=E9=A6=96=E9=A1=B5=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Resources/vue-element-admin/api/login.js | 30 + .../Resources/vue-element-admin/api/roles.js | 48 + .../Resources/vue-element-admin/api/user.js | 23 - .../components/Uploads/image/index.vue | 1646 +++++++++++++++++ .../Uploads/image/utils/data2blob.js | 19 + .../Uploads/image/utils/effectRipple.js | 39 + .../Uploads/image/utils/language.js | 232 +++ .../components/Uploads/image/utils/mimes.js | 7 + .../Admin/Resources/vue-element-admin/main.js | 6 +- .../Resources/vue-element-admin/permission.js | 2 +- .../vue-element-admin/store/getters.js | 1 + .../store/modules/permission.js | 82 +- .../vue-element-admin/store/modules/user.js | 92 +- .../Resources/vue-element-admin/utils/auth.js | 3 + .../vue-element-admin/utils/index.js | 15 + .../vue-element-admin/utils/request.js | 12 +- .../vue-element-admin/utils/validate.js | 215 +++ .../default/rabc/admins/components/detail.vue | 211 +++ .../views/default/rabc/admins/index.vue | 314 ++++ .../default/rabc/components/AdminDetail.vue | 321 ++++ .../rabc/components/Dropdown/Comment.vue | 41 + .../rabc/components/Dropdown/Platform.vue | 46 + .../rabc/components/Dropdown/SourceUrl.vue | 38 + .../default/rabc/components/Dropdown/index.js | 3 + .../views/default/rabc/components/Warning.vue | 13 + .../menus/components/MenuManagementEdit.vue | 110 ++ .../views/default/rabc/menus/index.vue | 158 ++ .../views/default/rabc/roles/index.vue | 433 +++++ 28 files changed, 4086 insertions(+), 74 deletions(-) create mode 100644 app/Modules/Admin/Resources/vue-element-admin/api/login.js create mode 100644 app/Modules/Admin/Resources/vue-element-admin/api/roles.js create mode 100644 app/Modules/Admin/Resources/vue-element-admin/components/Uploads/image/index.vue create mode 100644 app/Modules/Admin/Resources/vue-element-admin/components/Uploads/image/utils/data2blob.js create mode 100644 app/Modules/Admin/Resources/vue-element-admin/components/Uploads/image/utils/effectRipple.js create mode 100644 app/Modules/Admin/Resources/vue-element-admin/components/Uploads/image/utils/language.js create mode 100644 app/Modules/Admin/Resources/vue-element-admin/components/Uploads/image/utils/mimes.js create mode 100644 app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/admins/components/detail.vue create mode 100644 app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/admins/index.vue create mode 100644 app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/components/AdminDetail.vue create mode 100644 app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/components/Dropdown/Comment.vue create mode 100644 app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/components/Dropdown/Platform.vue create mode 100644 app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/components/Dropdown/SourceUrl.vue create mode 100644 app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/components/Dropdown/index.js create mode 100644 app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/components/Warning.vue create mode 100644 app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/menus/components/MenuManagementEdit.vue create mode 100644 app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/menus/index.vue create mode 100644 app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/roles/index.vue diff --git a/app/Modules/Admin/Resources/vue-element-admin/api/login.js b/app/Modules/Admin/Resources/vue-element-admin/api/login.js new file mode 100644 index 0000000..1e694b1 --- /dev/null +++ b/app/Modules/Admin/Resources/vue-element-admin/api/login.js @@ -0,0 +1,30 @@ +import request from '@/utils/request' + +export function login(data) { + return request({ + url: '/auth/login', + method: 'post', + data + }) +} + +export function getInfo() { + return request({ + url: '/auth/me', + method: 'post' + }) +} + +export function getMenus() { + return request({ + url: '/auth/getRabcList', + method: 'post' + }) +} + +export function logout() { + return request({ + url: '/auth/logout', + method: 'post' + }) +} diff --git a/app/Modules/Admin/Resources/vue-element-admin/api/roles.js b/app/Modules/Admin/Resources/vue-element-admin/api/roles.js new file mode 100644 index 0000000..0f038d8 --- /dev/null +++ b/app/Modules/Admin/Resources/vue-element-admin/api/roles.js @@ -0,0 +1,48 @@ +import request from '@/utils/request' + +export function getMenusSelect() { + return request({ + url: '/admin_menus/getSelectLists', + method: 'get' + }) +} + +export function getList(params) { + return request({ + url: 'admin_roles', + method: 'get', + params + }) +} + +export function detail(data) { + return request({ + url: '/admin_roles/detail', + method: 'post', + data + }) +} + +export function create(data) { + return request({ + url: '/admin_roles', + method: 'post', + data + }) +} + +export function update(data) { + return request({ + url: `/admin_roles`, + method: 'put', + data + }) +} + +export function setDel(data) { + return request({ + url: `/admin_roles`, + method: 'delete', + data + }) +} diff --git a/app/Modules/Admin/Resources/vue-element-admin/api/user.js b/app/Modules/Admin/Resources/vue-element-admin/api/user.js index 17adb6a..543ea86 100644 --- a/app/Modules/Admin/Resources/vue-element-admin/api/user.js +++ b/app/Modules/Admin/Resources/vue-element-admin/api/user.js @@ -1,24 +1 @@ import request from '@/utils/request' - -export function login(data) { - return request({ - url: '/auth/login', - method: 'post', - data - }); -} - -export function getInfo(token) { - return request({ - url: '/auth/me', - method: 'post', - params: { token } - }); -} - -export function logout() { - return request({ - url: '/auth/logout', - method: 'post' - }); -} diff --git a/app/Modules/Admin/Resources/vue-element-admin/components/Uploads/image/index.vue b/app/Modules/Admin/Resources/vue-element-admin/components/Uploads/image/index.vue new file mode 100644 index 0000000..3f09c90 --- /dev/null +++ b/app/Modules/Admin/Resources/vue-element-admin/components/Uploads/image/index.vue @@ -0,0 +1,1646 @@ + + + + + + + diff --git a/app/Modules/Admin/Resources/vue-element-admin/components/Uploads/image/utils/data2blob.js b/app/Modules/Admin/Resources/vue-element-admin/components/Uploads/image/utils/data2blob.js new file mode 100644 index 0000000..9c47f8a --- /dev/null +++ b/app/Modules/Admin/Resources/vue-element-admin/components/Uploads/image/utils/data2blob.js @@ -0,0 +1,19 @@ +/** + * database64文件格式转换为2进制 + * + * @param {[String]} data dataURL 的格式为 “data:image/png;base64,****”,逗号之前都是一些说明性的文字,我们只需要逗号之后的就行了 + * @param {[String]} mime [description] + * @return {[blob]} [description] + */ +export default function(data, mime) { + data = data.split(',')[1] + data = window.atob(data) + var ia = new Uint8Array(data.length) + for (var i = 0; i < data.length; i++) { + ia[i] = data.charCodeAt(i) + } + // canvas.toDataURL 返回的默认格式就是 image/png + return new Blob([ia], { + type: mime + }) +} diff --git a/app/Modules/Admin/Resources/vue-element-admin/components/Uploads/image/utils/effectRipple.js b/app/Modules/Admin/Resources/vue-element-admin/components/Uploads/image/utils/effectRipple.js new file mode 100644 index 0000000..46a0164 --- /dev/null +++ b/app/Modules/Admin/Resources/vue-element-admin/components/Uploads/image/utils/effectRipple.js @@ -0,0 +1,39 @@ +/** + * 点击波纹效果 + * + * @param {[event]} e [description] + * @param {[Object]} arg_opts [description] + * @return {[bollean]} [description] + */ +export default function(e, arg_opts) { + var opts = Object.assign({ + ele: e.target, // 波纹作用元素 + type: 'hit', // hit点击位置扩散center中心点扩展 + bgc: 'rgba(0, 0, 0, 0.15)' // 波纹颜色 + }, arg_opts) + var target = opts.ele + if (target) { + var rect = target.getBoundingClientRect() + var ripple = target.querySelector('.e-ripple') + if (!ripple) { + ripple = document.createElement('span') + ripple.className = 'e-ripple' + ripple.style.height = ripple.style.width = Math.max(rect.width, rect.height) + 'px' + target.appendChild(ripple) + } else { + ripple.className = 'e-ripple' + } + switch (opts.type) { + case 'center': + ripple.style.top = (rect.height / 2 - ripple.offsetHeight / 2) + 'px' + ripple.style.left = (rect.width / 2 - ripple.offsetWidth / 2) + 'px' + break + default: + ripple.style.top = (e.pageY - rect.top - ripple.offsetHeight / 2 - document.body.scrollTop) + 'px' + ripple.style.left = (e.pageX - rect.left - ripple.offsetWidth / 2 - document.body.scrollLeft) + 'px' + } + ripple.style.backgroundColor = opts.bgc + ripple.className = 'e-ripple z-active' + return false + } +} diff --git a/app/Modules/Admin/Resources/vue-element-admin/components/Uploads/image/utils/language.js b/app/Modules/Admin/Resources/vue-element-admin/components/Uploads/image/utils/language.js new file mode 100644 index 0000000..727872d --- /dev/null +++ b/app/Modules/Admin/Resources/vue-element-admin/components/Uploads/image/utils/language.js @@ -0,0 +1,232 @@ +export default { + zh: { + hint: '点击,或拖动图片至此处', + loading: '正在上传……', + noSupported: '浏览器不支持该功能,请使用IE10以上或其他现在浏览器!', + success: '上传成功', + fail: '图片上传失败', + preview: '头像预览', + btn: { + off: '取消', + close: '关闭', + back: '上一步', + save: '保存' + }, + error: { + onlyImg: '仅限图片格式', + outOfSize: '单文件大小不能超过 ', + lowestPx: '图片最低像素为(宽*高):' + } + }, + 'zh-tw': { + hint: '點擊,或拖動圖片至此處', + loading: '正在上傳……', + noSupported: '瀏覽器不支持該功能,請使用IE10以上或其他現代瀏覽器!', + success: '上傳成功', + fail: '圖片上傳失敗', + preview: '頭像預覽', + btn: { + off: '取消', + close: '關閉', + back: '上一步', + save: '保存' + }, + error: { + onlyImg: '僅限圖片格式', + outOfSize: '單文件大小不能超過 ', + lowestPx: '圖片最低像素為(寬*高):' + } + }, + en: { + hint: 'Click or drag the file here to upload', + loading: 'Uploading…', + noSupported: 'Browser is not supported, please use IE10+ or other browsers', + success: 'Upload success', + fail: 'Upload failed', + preview: 'Preview', + btn: { + off: 'Cancel', + close: 'Close', + back: 'Back', + save: 'Save' + }, + error: { + onlyImg: 'Image only', + outOfSize: 'Image exceeds size limit: ', + lowestPx: 'Image\'s size is too low. Expected at least: ' + } + }, + ro: { + hint: 'Atinge sau trage fișierul aici', + loading: 'Se încarcă', + noSupported: 'Browser-ul tău nu suportă acest feature. Te rugăm încearcă cu alt browser.', + success: 'S-a încărcat cu succes', + fail: 'A apărut o problemă la încărcare', + preview: 'Previzualizează', + + btn: { + off: 'Anulează', + close: 'Închide', + back: 'Înapoi', + save: 'Salvează' + }, + + error: { + onlyImg: 'Doar imagini', + outOfSize: 'Imaginea depășește limita de: ', + loewstPx: 'Imaginea este prea mică; Minim: ' + } + }, + ru: { + hint: 'Нажмите, или перетащите файл в это окно', + loading: 'Загружаю……', + noSupported: 'Ваш браузер не поддерживается, пожалуйста, используйте IE10 + или другие браузеры', + success: 'Загрузка выполнена успешно', + fail: 'Ошибка загрузки', + preview: 'Предпросмотр', + btn: { + off: 'Отменить', + close: 'Закрыть', + back: 'Назад', + save: 'Сохранить' + }, + error: { + onlyImg: 'Только изображения', + outOfSize: 'Изображение превышает предельный размер: ', + lowestPx: 'Минимальный размер изображения: ' + } + }, + 'pt-br': { + hint: 'Clique ou arraste o arquivo aqui para carregar', + loading: 'Carregando…', + noSupported: 'Browser não suportado, use o IE10+ ou outro browser', + success: 'Sucesso ao carregar imagem', + fail: 'Falha ao carregar imagem', + preview: 'Pré-visualizar', + btn: { + off: 'Cancelar', + close: 'Fechar', + back: 'Voltar', + save: 'Salvar' + }, + error: { + onlyImg: 'Apenas imagens', + outOfSize: 'A imagem excede o limite de tamanho: ', + lowestPx: 'O tamanho da imagem é muito pequeno. Tamanho mínimo: ' + } + }, + fr: { + hint: 'Cliquez ou glissez le fichier ici.', + loading: 'Téléchargement…', + noSupported: 'Votre navigateur n\'est pas supporté. Utilisez IE10 + ou un autre navigateur s\'il vous plaît.', + success: 'Téléchargement réussit', + fail: 'Téléchargement echoué', + preview: 'Aperçu', + btn: { + off: 'Annuler', + close: 'Fermer', + back: 'Retour', + save: 'Enregistrer' + }, + error: { + onlyImg: 'Image uniquement', + outOfSize: 'L\'image sélectionnée dépasse la taille maximum: ', + lowestPx: 'L\'image sélectionnée est trop petite. Dimensions attendues: ' + } + }, + nl: { + hint: 'Klik hier of sleep een afbeelding in dit vlak', + loading: 'Uploaden…', + noSupported: 'Je browser wordt helaas niet ondersteund. Gebruik IE10+ of een andere browser.', + success: 'Upload succesvol', + fail: 'Upload mislukt', + preview: 'Voorbeeld', + btn: { + off: 'Annuleren', + close: 'Sluiten', + back: 'Terug', + save: 'Opslaan' + }, + error: { + onlyImg: 'Alleen afbeeldingen', + outOfSize: 'De afbeelding is groter dan: ', + lowestPx: 'De afbeelding is te klein! Minimale afmetingen: ' + } + }, + tr: { + hint: 'Tıkla veya yüklemek istediğini buraya sürükle', + loading: 'Yükleniyor…', + noSupported: 'Tarayıcı desteklenmiyor, lütfen IE10+ veya farklı tarayıcı kullanın', + success: 'Yükleme başarılı', + fail: 'Yüklemede hata oluştu', + preview: 'Önizle', + btn: { + off: 'İptal', + close: 'Kapat', + back: 'Geri', + save: 'Kaydet' + }, + error: { + onlyImg: 'Sadece resim', + outOfSize: 'Resim yükleme limitini aşıyor: ', + lowestPx: 'Resmin boyutu çok küçük. En az olması gereken: ' + } + }, + 'es-MX': { + hint: 'Selecciona o arrastra una imagen', + loading: 'Subiendo...', + noSupported: 'Tu navegador no es soportado, porfavor usa IE10+ u otros navegadores mas recientes', + success: 'Subido exitosamente', + fail: 'Sucedió un error', + preview: 'Vista previa', + btn: { + off: 'Cancelar', + close: 'Cerrar', + back: 'Atras', + save: 'Guardar' + }, + error: { + onlyImg: 'Unicamente imagenes', + outOfSize: 'La imagen excede el tamaño maximo:', + lowestPx: 'La imagen es demasiado pequeño. Se espera por lo menos:' + } + }, + de: { + hint: 'Klick hier oder zieh eine Datei hier rein zum Hochladen', + loading: 'Hochladen…', + noSupported: 'Browser wird nicht unterstützt, bitte verwende IE10+ oder andere Browser', + success: 'Upload erfolgreich', + fail: 'Upload fehlgeschlagen', + preview: 'Vorschau', + btn: { + off: 'Abbrechen', + close: 'Schließen', + back: 'Zurück', + save: 'Speichern' + }, + error: { + onlyImg: 'Nur Bilder', + outOfSize: 'Das Bild ist zu groß: ', + lowestPx: 'Das Bild ist zu klein. Mindestens: ' + } + }, + ja: { + hint: 'クリック・ドラッグしてファイルをアップロード', + loading: 'アップロード中...', + noSupported: 'このブラウザは対応されていません。IE10+かその他の主要ブラウザをお使いください。', + success: 'アップロード成功', + fail: 'アップロード失敗', + preview: 'プレビュー', + btn: { + off: 'キャンセル', + close: '閉じる', + back: '戻る', + save: '保存' + }, + error: { + onlyImg: '画像のみ', + outOfSize: '画像サイズが上限を超えています。上限: ', + lowestPx: '画像が小さすぎます。最小サイズ: ' + } + } +} diff --git a/app/Modules/Admin/Resources/vue-element-admin/components/Uploads/image/utils/mimes.js b/app/Modules/Admin/Resources/vue-element-admin/components/Uploads/image/utils/mimes.js new file mode 100644 index 0000000..e20c085 --- /dev/null +++ b/app/Modules/Admin/Resources/vue-element-admin/components/Uploads/image/utils/mimes.js @@ -0,0 +1,7 @@ +export default { + 'jpg': 'image/jpeg', + 'png': 'image/png', + 'gif': 'image/gif', + 'svg': 'image/svg+xml', + 'psd': 'image/photoshop' +} diff --git a/app/Modules/Admin/Resources/vue-element-admin/main.js b/app/Modules/Admin/Resources/vue-element-admin/main.js index a63bcae..ddf47a2 100644 --- a/app/Modules/Admin/Resources/vue-element-admin/main.js +++ b/app/Modules/Admin/Resources/vue-element-admin/main.js @@ -10,8 +10,10 @@ import './styles/element-variables.scss' import '@/styles/index.scss' // global css import App from './App' -import store from './store' -import router from './router' + +import store from '@/store'; + +import router from '@/router'; import i18n from './lang' // internationalization import './icons' // icon diff --git a/app/Modules/Admin/Resources/vue-element-admin/permission.js b/app/Modules/Admin/Resources/vue-element-admin/permission.js index ff5eaad..29cd3dd 100644 --- a/app/Modules/Admin/Resources/vue-element-admin/permission.js +++ b/app/Modules/Admin/Resources/vue-element-admin/permission.js @@ -1,5 +1,5 @@ import router from './router' -import store from './store' +import store from '@/store' import { Message } from 'element-ui' import NProgress from 'nprogress' // progress bar import 'nprogress/nprogress.css' // progress bar style diff --git a/app/Modules/Admin/Resources/vue-element-admin/store/getters.js b/app/Modules/Admin/Resources/vue-element-admin/store/getters.js index 313210a..cfbd959 100644 --- a/app/Modules/Admin/Resources/vue-element-admin/store/getters.js +++ b/app/Modules/Admin/Resources/vue-element-admin/store/getters.js @@ -10,6 +10,7 @@ const getters = { name: state => state.user.name, introduction: state => state.user.introduction, roles: state => state.user.roles, + menus: state => state.user.menus, permission_routes: state => state.permission.routes, errorLogs: state => state.errorLog.logs } diff --git a/app/Modules/Admin/Resources/vue-element-admin/store/modules/permission.js b/app/Modules/Admin/Resources/vue-element-admin/store/modules/permission.js index aeb5ee5..0704d9f 100644 --- a/app/Modules/Admin/Resources/vue-element-admin/store/modules/permission.js +++ b/app/Modules/Admin/Resources/vue-element-admin/store/modules/permission.js @@ -1,4 +1,13 @@ -import { asyncRoutes, constantRoutes } from '@/router' +import { + asyncRoutes, + constantRoutes +} from '@/router'; + +import { + getMenus +} from '@/api/login'; + +import Layout from '@/layout'; /** * Use meta.role to determine if the current user has permission @@ -31,7 +40,46 @@ export function filterAsyncRoutes(routes, roles) { } }) - return res + return res +} + +/** + * 后台查询的菜单数据拼装成路由格式的数据 + * @param routes + */ +export function generaMenu(routes, data) { + + console.log('generaMenu'); + data.forEach(item => { + // 隐藏的菜单栏目,不在路由中展示 + if(item.is_hidden == 1) return; + + const menu = { + path: item.vue_path, + // () => loadView(item.vue_component) + component: item.vue_component === 'Layout' ? Layout : (resolve) => require([`@/views${item.vue_component}`], resolve), + // component: item.vue_component === 'Layout' ? Layout : (resolve) => require([`@/views/${item.vue_component}`], resolve), + // hidden: true, + children: [], + // name: 'menu_' + item.menu_id, + }; + if(item.vue_path != '/') menu.meta = { + icon: item.vue_icon, + title: item.menu_name, + id: item.menu_id + }; + // 是否跳转 + if(item.vue_redirect) menu.redirect = item.vue_redirect; + // 子菜单 + if (item._child) { + generaMenu(menu.children, item._child) + } + + console.log(menu); + + routes.push(menu); + }); + // console.log(import('@/views/default/articles/index')); } const state = { @@ -48,16 +96,26 @@ const mutations = { const actions = { generateRoutes({ commit }, roles) { - return new Promise(resolve => { - let accessedRoutes - if (roles.includes('admin')) { - accessedRoutes = asyncRoutes || [] - } else { - accessedRoutes = filterAsyncRoutes(asyncRoutes, roles) - } - commit('SET_ROUTES', accessedRoutes) - resolve(accessedRoutes) - }) + return new Promise(resolve => { + getMenus(state.token).then((response) => { + const { + data + } = response; + + console.log(data); + + var pushRouter = []; + generaMenu(pushRouter, data); + // console.log('---pushRouter---'); + // console.log(pushRouter); + // console.log('---pushRouter---'); + commit('SET_ROUTES', pushRouter); + resolve(pushRouter); + }).catch(error => { + console.log(error); + resolve([]); + }); + }); } } diff --git a/app/Modules/Admin/Resources/vue-element-admin/store/modules/user.js b/app/Modules/Admin/Resources/vue-element-admin/store/modules/user.js index 81bc20e..53b1a3e 100644 --- a/app/Modules/Admin/Resources/vue-element-admin/store/modules/user.js +++ b/app/Modules/Admin/Resources/vue-element-admin/store/modules/user.js @@ -1,31 +1,52 @@ -import { login, logout, getInfo } from '@/api/user' -import { getToken, setToken, removeToken } from '@/utils/auth' -import router, { resetRouter } from '@/router' +import { + login, + logout, + getInfo, + getMenus +} from '@/api/login'; + +import { + getToken, + setToken, + removeToken +} from '@/utils/auth'; + +import router, { + resetRouter +} from '@/router'; + +import { + Message +} from 'element-ui'; const state = { - token: getToken(), - name: '', - avatar: '', - introduction: '', - roles: [] + token: getToken(), + name: '', + avatar: '', + introduction: '', + roles: [], + menus: [] } const mutations = { - SET_TOKEN: (state, token) => { - state.token = token - }, - SET_INTRODUCTION: (state, introduction) => { - state.introduction = introduction - }, - SET_NAME: (state, name) => { - state.name = name - }, - SET_AVATAR: (state, avatar) => { - state.avatar = avatar - }, - SET_ROLES: (state, roles) => { - state.roles = roles - } + SET_TOKEN: (state, token) => { + state.token = token + }, + SET_INTRODUCTION: (state, introduction) => { + state.introduction = introduction + }, + SET_NAME: (state, name) => { + state.name = name + }, + SET_AVATAR: (state, avatar) => { + state.avatar = avatar + }, + SET_ROLES: (state, roles) => { + state.roles = roles + }, + SET_MENUS: (state, menus) => { + state.menus = menus + } } const actions = { @@ -35,11 +56,16 @@ const actions = { return new Promise((resolve, reject) => { login({ admin_name: username.trim(), password: password }).then(response => { const { data } = response; - - console.log(data); + Message({ + message: response.msg, + type: 'success', + duration: 1500 + }); commit('SET_TOKEN', data.access_token); setToken(data.access_token); + + console.log('登录完成 - login - end'); resolve(); }).catch(error => { reject(error) @@ -49,16 +75,22 @@ const actions = { // get user info getInfo({ commit, state }) { + + console.log('获取基本信息 - getInfo'); return new Promise((resolve, reject) => { - console.log(state); getInfo(state.token).then(response => { const { data } = response if (!data) { reject('Verification failed, please Login again.') } + + const { roles, admin_name, admin_head } = data + - const { roles, name, avatar, introduction } = data + // 强行定义:路由权限后端做了处理,前端如何没有权限就不会展示菜单栏目 === vue的路由 + roles.push('admin'); + roles.push('editor'); // roles must be a non-empty array if (!roles || roles.length <= 0) { @@ -66,9 +98,9 @@ const actions = { } commit('SET_ROLES', roles) - commit('SET_NAME', name) - commit('SET_AVATAR', avatar) - commit('SET_INTRODUCTION', introduction) + commit('SET_NAME', admin_name) + commit('SET_AVATAR', admin_head) + commit('SET_INTRODUCTION', admin_name) resolve(data) }).catch(error => { reject(error) diff --git a/app/Modules/Admin/Resources/vue-element-admin/utils/auth.js b/app/Modules/Admin/Resources/vue-element-admin/utils/auth.js index 71469e7..60d3357 100644 --- a/app/Modules/Admin/Resources/vue-element-admin/utils/auth.js +++ b/app/Modules/Admin/Resources/vue-element-admin/utils/auth.js @@ -3,13 +3,16 @@ import Cookies from 'js-cookie' const TokenKey = 'Authorization' export function getToken() { + return localStorage.getItem(TokenKey); return Cookies.get(TokenKey) } export function setToken(token) { + return localStorage.setItem(TokenKey, token); return Cookies.set(TokenKey, token) } export function removeToken() { + return localStorage.removeItem(TokenKey); return Cookies.remove(TokenKey) } diff --git a/app/Modules/Admin/Resources/vue-element-admin/utils/index.js b/app/Modules/Admin/Resources/vue-element-admin/utils/index.js index 3225d3c..9089b75 100644 --- a/app/Modules/Admin/Resources/vue-element-admin/utils/index.js +++ b/app/Modules/Admin/Resources/vue-element-admin/utils/index.js @@ -245,6 +245,21 @@ export function getTime(type) { } } +// 获取当前时间 +export function getFormatDate() { + var date = new Date(); + var month = date.getMonth() + 1; + var strDate = date.getDate(); + if (month >= 1 && month <= 9) { + month = "0" + month; + } + if (strDate >= 0 && strDate <= 9) { + strDate = "0" + strDate; + } + return date.getFullYear() + "-" + month + "-" + strDate + + " " + date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds(); +} + /** * @param {Function} func * @param {number} wait diff --git a/app/Modules/Admin/Resources/vue-element-admin/utils/request.js b/app/Modules/Admin/Resources/vue-element-admin/utils/request.js index da9df0d..92fab1e 100644 --- a/app/Modules/Admin/Resources/vue-element-admin/utils/request.js +++ b/app/Modules/Admin/Resources/vue-element-admin/utils/request.js @@ -8,13 +8,13 @@ import { getToken } from '@/utils/auth'; -console.log(process.env); -console.log(process.env.NODE); -console.log(process.env.NODE_ENV); -console.log(process.env.NODE_VUE_APP_BASE_API); + + process.env.VUE_APP_BASE_API = 'http://laravel-admin.cnpscy.com/admin'; -console.log(process.env.NODE_VUE_APP_BASE_API); + + + // create an axios instance const service = axios.create({ @@ -36,7 +36,7 @@ service.interceptors.request.use( // let each request carry token // ['X-Token'] is a custom headers key // please modify it according to the actual situation - config.headers['Authorization'] = getToken(); + config.headers['Authorization'] = 'Bearer ' + getToken(); } if (config.headers['Content-Type'] === 'application/x-www-form-urlencoded;charset=UTF-8') { diff --git a/app/Modules/Admin/Resources/vue-element-admin/utils/validate.js b/app/Modules/Admin/Resources/vue-element-admin/utils/validate.js index 6b3ac41..d7d9b04 100644 --- a/app/Modules/Admin/Resources/vue-element-admin/utils/validate.js +++ b/app/Modules/Admin/Resources/vue-element-admin/utils/validate.js @@ -10,6 +10,93 @@ export function isExternal(path) { return /^(https?:|mailto:|tel:)/.test(path) } +/** + * @copyright chuzhixin 1204505056@qq.com + * @description 校验密码是否小于6位 + * @param str + * @returns {boolean} + */ +export function isPassword(str) { + return str.length >= 6 +} + +/** + * @copyright chuzhixin 1204505056@qq.com + * @description 判断是否为数字 + * @param value + * @returns {boolean} + */ +export function isNumber(value) { + const reg = /^[0-9]*$/ + return reg.test(value) +} + +/** + * @copyright chuzhixin 1204505056@qq.com + * @description 判断是否是名称 + * @param value + * @returns {boolean} + */ +export function isName(value) { + const reg = /^[\u4e00-\u9fa5a-zA-Z0-9]+$/ + return reg.test(value) +} + +/** + * @copyright chuzhixin 1204505056@qq.com + * @description 判断是否为IP + * @param ip + * @returns {boolean} + */ +export function isIP(ip) { + const reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/ + return reg.test(ip) +} + +/** + * @copyright chuzhixin 1204505056@qq.com + * @description 判断是否是传统网站 + * @param url + * @returns {boolean} + */ +export function isUrl(url) { + const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/ + return reg.test(url) +} + +/** + * @copyright chuzhixin 1204505056@qq.com + * @description 判断是否是小写字母 + * @param str + * @returns {boolean} + */ +export function isLowerCase(str) { + const reg = /^[a-z]+$/ + return reg.test(str) +} + +/** + * @copyright chuzhixin 1204505056@qq.com + * @description 判断是否是大写字母 + * @param str + * @returns {boolean} + */ +export function isUpperCase(str) { + const reg = /^[A-Z]+$/ + return reg.test(str) +} + +/** + * @copyright chuzhixin 1204505056@qq.com + * @description 判断是否是大写字母开头 + * @param str + * @returns {boolean} + */ +export function isAlphabets(str) { + const reg = /^[A-Za-z]+$/ + return reg.test(str) +} + /** * @param {string} str * @returns {Boolean} @@ -85,3 +172,131 @@ export function isArray(arg) { } return Array.isArray(arg) } + +/** + * @copyright chuzhixin 1204505056@qq.com + * @description 判断是否是端口号 + * @param str + * @returns {boolean} + */ +export function isPort(str) { + const reg = /^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/ + return reg.test(str) +} + +/** + * @copyright chuzhixin 1204505056@qq.com + * @description 判断是否是手机号 + * @param str + * @returns {boolean} + */ +export function isPhone(str) { + const reg = /^1\d{10}$/ + return reg.test(str) +} + +/** + * @copyright chuzhixin 1204505056@qq.com + * @description 判断是否是身份证号(第二代) + * @param str + * @returns {boolean} + */ +export function isIdCard(str) { + const reg = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/ + return reg.test(str) +} + +/** + * @copyright chuzhixin 1204505056@qq.com + * @description 判断是否是邮箱 + * @param str + * @returns {boolean} + */ +export function isEmail(str) { + const reg = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/ + return reg.test(str) +} + +/** + * @copyright chuzhixin 1204505056@qq.com + * @description 判断是否中文 + * @param str + * @returns {boolean} + */ +export function isChina(str) { + const reg = /^[\u4E00-\u9FA5]{2,4}$/ + return reg.test(str) +} + +/** + * @copyright chuzhixin 1204505056@qq.com + * @description 判断是否为空 + * @param str + * @returns {boolean} + */ +export function isBlank(str) { + return ( + str == null || + false || + str === '' || + str.trim() === '' || + str.toLocaleLowerCase().trim() === 'null' + ) +} + +/** + * @copyright chuzhixin 1204505056@qq.com + * @description 判断是否为固话 + * @param str + * @returns {boolean} + */ +export function isTel(str) { + const reg = /^(400|800)([0-9\\-]{7,10})|(([0-9]{4}|[0-9]{3})(-| )?)?([0-9]{7,8})((-| |转)*([0-9]{1,4}))?$/ + return reg.test(str) +} + +/** + * @copyright chuzhixin 1204505056@qq.com + * @description 判断是否为数字且最多两位小数 + * @param str + * @returns {boolean} + */ +export function isNum(str) { + const reg = /^\d+(\.\d{1,2})?$/ + return reg.test(str) +} + +/** + * @copyright chuzhixin 1204505056@qq.com + * @description 判断经度 -180.0~+180.0(整数部分为0~180,必须输入1到5位小数) + * @param str + * @returns {boolean} + */ +export function isLongitude(str) { + const reg = /^[-|+]?(0?\d{1,2}\.\d{1,5}|1[0-7]?\d{1}\.\d{1,5}|180\.0{1,5})$/ + return reg.test(str) +} + +/** + * @copyright chuzhixin 1204505056@qq.com + * @description 判断纬度 -90.0~+90.0(整数部分为0~90,必须输入1到5位小数) + * @param str + * @returns {boolean} + */ +export function isLatitude(str) { + const reg = /^[-|+]?([0-8]?\d{1}\.\d{1,5}|90\.0{1,5})$/ + return reg.test(str) +} + +/** + * @copyright chuzhixin 1204505056@qq.com + * @description rtsp校验,只要有rtsp:// + * @param str + * @returns {boolean} + */ +export function isRTSP(str) { + const reg = /^rtsp:\/\/([a-z]{0,10}:.{0,10}@)?(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/ + const reg1 = /^rtsp:\/\/([a-z]{0,10}:.{0,10}@)?(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5]):[0-9]{1,5}/ + const reg2 = /^rtsp:\/\/([a-z]{0,10}:.{0,10}@)?(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\// + return reg.test(str) || reg1.test(str) || reg2.test(str) +} diff --git a/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/admins/components/detail.vue b/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/admins/components/detail.vue new file mode 100644 index 0000000..9e271b8 --- /dev/null +++ b/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/admins/components/detail.vue @@ -0,0 +1,211 @@ + + + diff --git a/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/admins/index.vue b/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/admins/index.vue new file mode 100644 index 0000000..9015aa5 --- /dev/null +++ b/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/admins/index.vue @@ -0,0 +1,314 @@ + + + diff --git a/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/components/AdminDetail.vue b/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/components/AdminDetail.vue new file mode 100644 index 0000000..17c4e0b --- /dev/null +++ b/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/components/AdminDetail.vue @@ -0,0 +1,321 @@ + + + + + diff --git a/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/components/Dropdown/Comment.vue b/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/components/Dropdown/Comment.vue new file mode 100644 index 0000000..d34b2b9 --- /dev/null +++ b/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/components/Dropdown/Comment.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/components/Dropdown/Platform.vue b/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/components/Dropdown/Platform.vue new file mode 100644 index 0000000..0a52726 --- /dev/null +++ b/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/components/Dropdown/Platform.vue @@ -0,0 +1,46 @@ + + + diff --git a/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/components/Dropdown/SourceUrl.vue b/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/components/Dropdown/SourceUrl.vue new file mode 100644 index 0000000..8f47485 --- /dev/null +++ b/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/components/Dropdown/SourceUrl.vue @@ -0,0 +1,38 @@ + + + diff --git a/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/components/Dropdown/index.js b/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/components/Dropdown/index.js new file mode 100644 index 0000000..bc0c171 --- /dev/null +++ b/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/components/Dropdown/index.js @@ -0,0 +1,3 @@ +export { default as CommentDropdown } from './Comment' +export { default as PlatformDropdown } from './Platform' +export { default as SourceUrlDropdown } from './SourceUrl' diff --git a/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/components/Warning.vue b/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/components/Warning.vue new file mode 100644 index 0000000..8d2a7e5 --- /dev/null +++ b/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/components/Warning.vue @@ -0,0 +1,13 @@ + + diff --git a/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/menus/components/MenuManagementEdit.vue b/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/menus/components/MenuManagementEdit.vue new file mode 100644 index 0000000..f81b43a --- /dev/null +++ b/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/menus/components/MenuManagementEdit.vue @@ -0,0 +1,110 @@ + + + diff --git a/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/menus/index.vue b/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/menus/index.vue new file mode 100644 index 0000000..901ef6a --- /dev/null +++ b/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/menus/index.vue @@ -0,0 +1,158 @@ + + + diff --git a/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/roles/index.vue b/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/roles/index.vue new file mode 100644 index 0000000..4c7d949 --- /dev/null +++ b/app/Modules/Admin/Resources/vue-element-admin/views/default/rabc/roles/index.vue @@ -0,0 +1,433 @@ + + + -- Gitee