From 0b13270376a81031531952da665a5ebe8c6c6d7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=86=8A=E4=B8=BD=E5=90=9B?= <664953382@qq.com> Date: Tue, 11 Jan 2022 15:24:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=8A=E4=BC=A0x-token?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/subPlatform/tenant.js | 14 + src/api/website/solution.js | 81 +++++ src/components/Editor/index.vue | 37 +- src/components/FileUpload/index.vue | 56 ++- src/components/ImageUpload/index.vue | 61 ++-- src/plugins/download.js | 123 ++++--- src/store/getters.js | 31 +- src/store/modules/permission.js | 3 +- src/store/modules/user.js | 8 +- src/views/subPlatform/tenant/index.vue | 16 +- src/views/system/user/index.vue | 2 +- src/views/website/message/index.vue | 191 +++++++++- src/views/website/solution/service/index.vue | 329 +++++++++++++++++- .../website/solution/serviceCase/index.vue | 312 ++++++++++++++++- vue.config.js | 2 +- 15 files changed, 1114 insertions(+), 152 deletions(-) create mode 100644 src/api/website/solution.js diff --git a/src/api/subPlatform/tenant.js b/src/api/subPlatform/tenant.js index a316714..3c6d159 100644 --- a/src/api/subPlatform/tenant.js +++ b/src/api/subPlatform/tenant.js @@ -32,6 +32,20 @@ export function tenantDelete(data) { data, }) } +// 租户筛选 +export function tenantSelect() { + return request({ + url: '/admin/v1/tenant/select', + }) +} +// 租户人员 +export function tenantMember(data) { + return request({ + url: '/admin/v1/tenant/member', + method: 'post', + data, + }) +} // 租户人员绑定 - 账号绑定 export function tenantMemberBind(data) { return request({ diff --git a/src/api/website/solution.js b/src/api/website/solution.js new file mode 100644 index 0000000..550332e --- /dev/null +++ b/src/api/website/solution.js @@ -0,0 +1,81 @@ +import request from '@/utils/request' + +// 服务列表 +export function serviceList(data) { + return request({ + url: '/admin/v1/service/solution_case/kind', + method: 'post', + data, + }) +} +// 服务列表-添加 +export function serviceAdd(data) { + return request({ + url: '/admin/v1/service/solution_case/kind/add', + method: 'post', + data, + }) +} +// 服务列表-修改 +export function serviceEdit(data) { + return request({ + url: '/admin/v1/service/solution_case/kind/edit', + method: 'post', + data, + }) +} +// 服务列表-删除 +export function serviceDelete(data) { + return request({ + url: '/admin/v1/service/solution_case/kind/delete', + method: 'post', + data, + }) +} +// 服务类型-select +export function serviceCaseKindSelect() { + return request({ + url: '/admin/v1/service/solution_case/kind/select', + }) +} + +// 服务案例列表 +export function serviceCaseList(data) { + return request({ + url: '/admin/v1/service/solution_case', + method: 'post', + data, + }) +} +// 服务案例-添加 +export function serviceCaseAdd(data) { + return request({ + url: '/admin/v1/service/solution_case/add', + method: 'post', + data, + }) +} +// 服务案例-详情 +export function serviceCaseDetail(data) { + return request({ + url: '/admin/v1/service/solution_case/detail', + method: 'post', + data, + }) +} +// 服务案例-修改 +export function serviceCaseEdit(data) { + return request({ + url: '/admin/v1/service/solution_case/edit', + method: 'post', + data, + }) +} +// 服务案例-删除 +export function serviceCaseDelete(data) { + return request({ + url: '/admin/v1/service/solution_case/delete', + method: 'post', + data, + }) +} diff --git a/src/components/Editor/index.vue b/src/components/Editor/index.vue index 6bb5a18..38e2b6f 100644 --- a/src/components/Editor/index.vue +++ b/src/components/Editor/index.vue @@ -56,13 +56,13 @@ export default { type: { type: String, default: "url", - } + }, }, data() { return { - uploadUrl: process.env.VUE_APP_BASE_API + "/common/upload", // 上传的图片服务器地址 + uploadUrl: process.env.VUE_APP_BASE_API + "/admin/v1/upload", // 上传的图片服务器地址 headers: { - Authorization: "Bearer " + getToken() + "x-token": getToken(), }, Quill: null, currentValue: "", @@ -73,16 +73,16 @@ export default { modules: { // 工具栏配置 toolbar: [ - ["bold", "italic", "underline", "strike"], // 加粗 斜体 下划线 删除线 - ["blockquote", "code-block"], // 引用 代码块 - [{ list: "ordered" }, { list: "bullet" }], // 有序、无序列表 - [{ indent: "-1" }, { indent: "+1" }], // 缩进 - [{ size: ["small", false, "large", "huge"] }], // 字体大小 - [{ header: [1, 2, 3, 4, 5, 6, false] }], // 标题 - [{ color: [] }, { background: [] }], // 字体颜色、字体背景颜色 - [{ align: [] }], // 对齐方式 - ["clean"], // 清除文本格式 - ["link", "image", "video"] // 链接、图片、视频 + ["bold", "italic", "underline", "strike"], // 加粗 斜体 下划线 删除线 + ["blockquote", "code-block"], // 引用 代码块 + [{ list: "ordered" }, { list: "bullet" }], // 有序、无序列表 + [{ indent: "-1" }, { indent: "+1" }], // 缩进 + [{ size: ["small", false, "large", "huge"] }], // 字体大小 + [{ header: [1, 2, 3, 4, 5, 6, false] }], // 标题 + [{ color: [] }, { background: [] }], // 字体颜色、字体背景颜色 + [{ align: [] }], // 对齐方式 + ["clean"], // 清除文本格式 + ["link", "image", "video"], // 链接、图片、视频 ], }, placeholder: "请输入内容", @@ -126,7 +126,7 @@ export default { const editor = this.$refs.editor; this.Quill = new Quill(editor, this.options); // 如果设置了上传地址则自定义图片上传事件 - if (this.type == 'url') { + if (this.type == "url") { let toolbar = this.Quill.getModule("toolbar"); toolbar.addHandler("image", (value) => { this.uploadType = "image"; @@ -176,7 +176,11 @@ export default { // 获取光标所在位置 let length = quill.getSelection().index; // 插入图片 res.url为服务器返回的图片地址 - quill.insertEmbed(length, "image", process.env.VUE_APP_BASE_API + res.fileName); + quill.insertEmbed( + length, + "image", + process.env.VUE_APP_BASE_API + res.fileName + ); // 调整光标到最后 quill.setSelection(length + 1); } else { @@ -191,7 +195,8 @@ export default { diff --git a/src/plugins/download.js b/src/plugins/download.js index 86e2031..999cc38 100644 --- a/src/plugins/download.js +++ b/src/plugins/download.js @@ -3,70 +3,69 @@ import { Message } from 'element-ui' import { saveAs } from 'file-saver' import { getToken } from '@/utils/auth' import errorCode from '@/utils/errorCode' -import { blobValidate } from "@/utils/ruoyi"; +import { blobValidate } from '@/utils/ruoyi' const baseURL = process.env.VUE_APP_BASE_API export default { - name(name, isDelete = true) { - var url = baseURL + "/common/download?fileName=" + encodeURI(name) + "&delete=" + isDelete - axios({ - method: 'get', - url: url, - responseType: 'blob', - headers: { 'Authorization': 'Bearer ' + getToken() } - }).then(async (res) => { - const isLogin = await blobValidate(res.data); - if (isLogin) { - const blob = new Blob([res.data]) - this.saveAs(blob, decodeURI(res.headers['download-filename'])) - } else { - this.printErrMsg(res.data); - } - }) - }, - resource(resource) { - var url = baseURL + "/common/download/resource?resource=" + encodeURI(resource); - axios({ - method: 'get', - url: url, - responseType: 'blob', - headers: { 'Authorization': 'Bearer ' + getToken() } - }).then(async (res) => { - const isLogin = await blobValidate(res.data); - if (isLogin) { - const blob = new Blob([res.data]) - this.saveAs(blob, decodeURI(res.headers['download-filename'])) - } else { - this.printErrMsg(res.data); - } - }) - }, - zip(url, name) { - var url = baseURL + url - axios({ - method: 'get', - url: url, - responseType: 'blob', - headers: { 'Authorization': 'Bearer ' + getToken() } - }).then(async (res) => { - const isLogin = await blobValidate(res.data); - if (isLogin) { - const blob = new Blob([res.data], { type: 'application/zip' }) - this.saveAs(blob, name) - } else { - this.printErrMsg(res.data); - } - }) - }, - saveAs(text, name, opts) { - saveAs(text, name, opts); - }, - async printErrMsg(data) { - const resText = await data.text(); - const rspObj = JSON.parse(resText); - const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] - Message.error(errMsg); - } + name(name, isDelete = true) { + var url = baseURL + '/common/download?fileName=' + encodeURI(name) + '&delete=' + isDelete + axios({ + method: 'get', + url: url, + responseType: 'blob', + headers: { 'x-token': getToken() }, + }).then(async res => { + const isLogin = await blobValidate(res.data) + if (isLogin) { + const blob = new Blob([res.data]) + this.saveAs(blob, decodeURI(res.headers['download-filename'])) + } else { + this.printErrMsg(res.data) + } + }) + }, + resource(resource) { + var url = baseURL + '/common/download/resource?resource=' + encodeURI(resource) + axios({ + method: 'get', + url: url, + responseType: 'blob', + headers: { 'x-token': getToken() }, + }).then(async res => { + const isLogin = await blobValidate(res.data) + if (isLogin) { + const blob = new Blob([res.data]) + this.saveAs(blob, decodeURI(res.headers['download-filename'])) + } else { + this.printErrMsg(res.data) + } + }) + }, + zip(url, name) { + var url = baseURL + url + axios({ + method: 'get', + url: url, + responseType: 'blob', + headers: { 'x-token': getToken() }, + }).then(async res => { + const isLogin = await blobValidate(res.data) + if (isLogin) { + const blob = new Blob([res.data], { type: 'application/zip' }) + this.saveAs(blob, name) + } else { + this.printErrMsg(res.data) + } + }) + }, + saveAs(text, name, opts) { + saveAs(text, name, opts) + }, + async printErrMsg(data) { + const resText = await data.text() + const rspObj = JSON.parse(resText) + const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] + Message.error(errMsg) + }, } - diff --git a/src/store/getters.js b/src/store/getters.js index da6ab39..d8ff323 100644 --- a/src/store/getters.js +++ b/src/store/getters.js @@ -1,18 +1,19 @@ const getters = { - sidebar: state => state.app.sidebar, - size: state => state.app.size, - device: state => state.app.device, - visitedViews: state => state.tagsView.visitedViews, - cachedViews: state => state.tagsView.cachedViews, - token: state => state.user.token, - avatar: state => state.user.avatar, - name: state => state.user.name, - introduction: state => state.user.introduction, - roles: state => state.user.roles, - permissions: state => state.user.permissions, - permission_routes: state => state.permission.routes, - topbarRouters:state => state.permission.topbarRouters, - defaultRoutes:state => state.permission.defaultRoutes, - sidebarRouters:state => state.permission.sidebarRouters, + sidebar: state => state.app.sidebar, + size: state => state.app.size, + device: state => state.app.device, + visitedViews: state => state.tagsView.visitedViews, + cachedViews: state => state.tagsView.cachedViews, + token: state => state.user.token, + avatar: state => state.user.avatar, + name: state => state.user.name, + is_super: state => state.user.is_super, + introduction: state => state.user.introduction, + roles: state => state.user.roles, + permissions: state => state.user.permissions, + permission_routes: state => state.permission.routes, + topbarRouters: state => state.permission.topbarRouters, + defaultRoutes: state => state.permission.defaultRoutes, + sidebarRouters: state => state.permission.sidebarRouters, } export default getters diff --git a/src/store/modules/permission.js b/src/store/modules/permission.js index 544fcab..bc575b9 100644 --- a/src/store/modules/permission.js +++ b/src/store/modules/permission.js @@ -91,7 +91,8 @@ function handleStr(str, flag) { function handleComponent(src, flag) { if (flag && src.kind == 1 && src.children.length > 0) { - return src.children[0].component + // return src.children[0].component + return 'ParentView' } return src.component } diff --git a/src/store/modules/user.js b/src/store/modules/user.js index 15fc6e5..6db9a5b 100644 --- a/src/store/modules/user.js +++ b/src/store/modules/user.js @@ -6,6 +6,7 @@ const user = { token: getToken(), name: '', avatar: '', + is_super: false, roles: [], permissions: [], }, @@ -20,6 +21,9 @@ const user = { SET_AVATAR: (state, avatar) => { state.avatar = avatar }, + SET_SUPER: (state, is_super) => { + state.is_super = is_super + }, SET_ROLES: (state, roles) => { state.roles = roles }, @@ -56,8 +60,7 @@ const user = { .then(res => { const user = res.data // 头像 - // const avatar = user.avatar == '' ? require('@/assets/images/profile.jpg') : user.avatar - const avatar = require('@/assets/images/profile.jpg') + const avatar = user.avatar == '' ? require('@/assets/images/profile.jpg') : user.avatar if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组 commit('SET_ROLES', res.roles) @@ -67,6 +70,7 @@ const user = { } commit('SET_NAME', user.name) commit('SET_AVATAR', avatar) + commit('SET_SUPER', user.is_super) resolve(res) }) .catch(error => { diff --git a/src/views/subPlatform/tenant/index.vue b/src/views/subPlatform/tenant/index.vue index 64f5ef5..cccc601 100644 --- a/src/views/subPlatform/tenant/index.vue +++ b/src/views/subPlatform/tenant/index.vue @@ -94,6 +94,11 @@ 账号设置 + 权限设置 重置密码 @@ -199,6 +204,7 @@ import { tenantAdd, tenantEdit, tenantDelete, + tenantMember, tenantMemberBind, } from "@/api/subPlatform/tenant"; import { areaList } from "@/api/config"; @@ -356,8 +362,14 @@ export default { } }, handleAccountSet(row) { - this.memberOpen = true; - this.memberForm["tenant_id"] = row.id; + tenantMember({ tenant_id: row.id }).then((res) => { + if (res.data.id) { + this.$modal.msgError("您已添加过账号信息,请勿重复添加"); + } else { + this.memberOpen = true; + this.memberForm["tenant_id"] = row.id; + } + }); }, // 重置密码按钮操作 handleResetPwd(row) { diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue index b08384f..5fb2574 100644 --- a/src/views/system/user/index.vue +++ b/src/views/system/user/index.vue @@ -454,7 +454,7 @@ export default { // 是否更新已经存在的用户数据 updateSupport: 0, // 设置上传的请求头部 - headers: { Authorization: "Bearer " + getToken() }, + headers: { "x-token": getToken() }, // 上传的地址 url: process.env.VUE_APP_BASE_API + "/system/user/importData", }, diff --git a/src/views/website/message/index.vue b/src/views/website/message/index.vue index 9513707..d48703d 100644 --- a/src/views/website/message/index.vue +++ b/src/views/website/message/index.vue @@ -1,3 +1,190 @@ \ No newline at end of file +
+ + + + + + + + + + + + + + + 搜索 + 重置 + + + + + + 新增 + + + + + + + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/src/views/website/solution/service/index.vue b/src/views/website/solution/service/index.vue index 831a9ef..78d6a7c 100644 --- a/src/views/website/solution/service/index.vue +++ b/src/views/website/solution/service/index.vue @@ -1,3 +1,328 @@ \ No newline at end of file +
+ + + + + + + + + 搜索 + 重置 + + + + + + 新增 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/src/views/website/solution/serviceCase/index.vue b/src/views/website/solution/serviceCase/index.vue index 7da2a70..6369e95 100644 --- a/src/views/website/solution/serviceCase/index.vue +++ b/src/views/website/solution/serviceCase/index.vue @@ -1,3 +1,311 @@ \ No newline at end of file +
+ + + + + + 搜索 + 重置 + + + + + + 新增 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/vue.config.js b/vue.config.js index 05e6b7e..4d6e30f 100644 --- a/vue.config.js +++ b/vue.config.js @@ -35,7 +35,7 @@ module.exports = { proxy: { // detail: https://cli.vuejs.org/config/#devserver-proxy [process.env.VUE_APP_BASE_API]: { - target: `http://192.168.0.148:8000`, + target: `http://192.168.0.137:8000`, changeOrigin: true, pathRewrite: { ['^' + process.env.VUE_APP_BASE_API]: '',