zhanbo.xu

feat: 开发监管场所管理

1 -import request from '@/utils/request' 1 +import request from "@/utils/request";
2 2
3 // 获取路由所有路由 3 // 获取路由所有路由
4 export const getRouters = () => { 4 export const getRouters = () => {
5 return request({ 5 return request({
6 - url: '/bus-customer/menu/selectMenu', 6 + url: "/bus-customer/menu/selectMenu",
7 - method: 'get' 7 + method: "get",
8 - }) 8 + });
9 -} 9 +};
10 10
11 //获取用户可访问的路由 11 //获取用户可访问的路由
12 export const getUserRouters = () => { 12 export const getUserRouters = () => {
13 return request({ 13 return request({
14 - url: '/bus-customer/obtainUserRights', 14 + url: "/bus-customer/obtainUserRights",
15 - method: 'post' 15 + method: "post",
16 - }) 16 + });
17 -} 17 +};
18 +
19 +// /menu/addMenu 添加菜单
20 +export const addMenu = (data) => {
21 + return request({
22 + url: "/bus-customer/menu/addMenu",
23 + method: "post",
24 + data: data,
25 + });
26 +};
27 +
28 +// PUT /menu​/deleteMenu 删除菜单
29 +export const deleteMenu = (data) => {
30 + return request({
31 + url: `/bus-customer/menu/deleteMenu?menuId=${data.menuId}`,
32 + method: "put",
33 + });
34 +};
35 +
36 +// POST /menu​/updateMenu 更新菜单
37 +export const updateMenu = (data) => {
38 + return request({
39 + url: "/bus-customer/menu/updateMenu",
40 + method: "post",
41 + data: data,
42 + });
43 +};
......
1 +import request from "@/utils/request";
2 +
3 +// POST
4 +// ​/operatorPlace​/addOperatorPlace
5 +// 新增监管场所
6 +export function addOperatorPlace(data) {
7 + return request({
8 + url: "/bus-customer/operatorPlace​/addOperatorPlace",
9 + method: "post",
10 + data: data,
11 + });
12 +}
13 +
14 +// POST
15 +// ​/operatorPlace​/getOperatorPlaceList
16 +// 查询监管场所列表
17 +export function getOperatorPlaceList(data) {
18 + return request({
19 + url: "/bus-customer/operatorPlace​/getOperatorPlaceList",
20 + method: "post",
21 + data: data,
22 + });
23 +}
24 +
25 +// POST
26 +// ​/operatorPlace​/updateOperatorPlace
27 +// 修改监管场所
28 +export function updateOperatorPlace(data) {
29 + return request({
30 + url: "/bus-customer/operatorPlace​/updateOperatorPlace",
31 + method: "post",
32 + data: data,
33 + });
34 +}
This diff is collapsed. Click to expand it.
...@@ -31,7 +31,14 @@ ...@@ -31,7 +31,14 @@
31 :pageSizes="[20, 30, 50, 100]" 31 :pageSizes="[20, 30, 50, 100]"
32 :totalCount="0" 32 :totalCount="0"
33 :loading="tableLoading" 33 :loading="tableLoading"
34 - :emptyText="(loadingDatas && !rowData.popoverData.length) ? '数据加载中' : $t('portEntry.emptyText')" 34 + :emptyText="
35 + loadingDatas &&
36 + rowData &&
37 + rowData.popoverData &&
38 + !rowData.popoverData.length
39 + ? '数据加载中'
40 + : $t('portEntry.emptyText')
41 + "
35 height="350px" 42 height="350px"
36 maxHeight="500px" 43 maxHeight="500px"
37 rowKey="id" 44 rowKey="id"
...@@ -82,20 +89,20 @@ export default { ...@@ -82,20 +89,20 @@ export default {
82 }, 89 },
83 data() { 90 data() {
84 return { 91 return {
85 - tableLoading: false 92 + tableLoading: false,
86 }; 93 };
87 }, 94 },
88 - computed:{ 95 + computed: {
89 - loadingDatas(){ 96 + loadingDatas() {
90 - return this.$store.state.viewOption.loadingDatas 97 + return this.$store.state.viewOption.loadingDatas;
91 - } 98 + },
92 }, 99 },
93 methods: { 100 methods: {
94 //弹框关闭 101 //弹框关闭
95 popoverClose() { 102 popoverClose() {
96 this.$emit("popoverClose"); 103 this.$emit("popoverClose");
97 this.parentDom.$refs.tables.$refs.bodyWrapper.style.overflowY = "auto"; 104 this.parentDom.$refs.tables.$refs.bodyWrapper.style.overflowY = "auto";
98 - this.$store.dispatch('setLoadingState', true) 105 + this.$store.dispatch("setLoadingState", true);
99 }, 106 },
100 //弹框状态改版 107 //弹框状态改版
101 popoverChange(data, type) { 108 popoverChange(data, type) {
......
1 -import Vue from 'vue' 1 +import Vue from "vue";
2 -import Router from 'vue-router' 2 +import Router from "vue-router";
3 3
4 -Vue.use(Router) 4 +Vue.use(Router);
5 5
6 /* Layout */ 6 /* Layout */
7 -import Layout from '@/layout' 7 +import Layout from "@/layout";
8 -import ParentView from '@/components/ParentView'; 8 +import ParentView from "@/components/ParentView";
9 9
10 /** 10 /**
11 * Note: 路由配置项 11 * Note: 路由配置项
...@@ -28,37 +28,37 @@ import ParentView from '@/components/ParentView'; ...@@ -28,37 +28,37 @@ import ParentView from '@/components/ParentView';
28 // 公共路由 28 // 公共路由
29 export const constantRoutes = [ 29 export const constantRoutes = [
30 { 30 {
31 - path: '/redirect', 31 + path: "/redirect",
32 component: Layout, 32 component: Layout,
33 hidden: true, 33 hidden: true,
34 children: [ 34 children: [
35 { 35 {
36 - path: '/redirect/:path(.*)', 36 + path: "/redirect/:path(.*)",
37 - component: (resolve) => require(['@/views/redirect'], resolve) 37 + component: (resolve) => require(["@/views/redirect"], resolve),
38 - } 38 + },
39 - ] 39 + ],
40 }, 40 },
41 { 41 {
42 - path: '/404', 42 + path: "/404",
43 - component: (resolve) => require(['@/views/error/404'], resolve), 43 + component: (resolve) => require(["@/views/error/404"], resolve),
44 - hidden: true 44 + hidden: true,
45 }, 45 },
46 { 46 {
47 - path: '/401', 47 + path: "/401",
48 - component: (resolve) => require(['@/views/error/401'], resolve), 48 + component: (resolve) => require(["@/views/error/401"], resolve),
49 - hidden: true 49 + hidden: true,
50 }, 50 },
51 { 51 {
52 - path: '/login', 52 + path: "/login",
53 - component: (resolve) => require(['@/views/login'], resolve), 53 + component: (resolve) => require(["@/views/login"], resolve),
54 hidden: true, 54 hidden: true,
55 - meta: { noCache: true } 55 + meta: { noCache: true },
56 }, 56 },
57 { 57 {
58 - path: '/relogin', 58 + path: "/relogin",
59 - component: (resolve) => require(['@/views/redjrectLogin'], resolve), 59 + component: (resolve) => require(["@/views/redjrectLogin"], resolve),
60 hidden: true, 60 hidden: true,
61 - meta: { noCache: true, breadcrumb: false } 61 + meta: { noCache: true, breadcrumb: false },
62 }, 62 },
63 // { 63 // {
64 // path: '', 64 // path: '',
...@@ -82,10 +82,10 @@ export const constantRoutes = [ ...@@ -82,10 +82,10 @@ export const constantRoutes = [
82 // ] 82 // ]
83 // }, 83 // },
84 { 84 {
85 - path: '/reporting', 85 + path: "/reporting",
86 component: Layout, 86 component: Layout,
87 hidden: false, 87 hidden: false,
88 - meta: { title: '申报数据管理', icon: 'upload' }, 88 + meta: { title: "申报数据管理", icon: "upload" },
89 children: [ 89 children: [
90 // { 90 // {
91 // path: '/reportingData', 91 // path: '/reportingData',
...@@ -95,19 +95,20 @@ export const constantRoutes = [ ...@@ -95,19 +95,20 @@ export const constantRoutes = [
95 // meta: { title: '申报数据管理', icon: 'upload' } 95 // meta: { title: '申报数据管理', icon: 'upload' }
96 // }, 96 // },
97 { 97 {
98 - path: '/editReportingData', 98 + path: "/editReportingData",
99 - component: (resolve) => require(['@/views/editReportingData/index'], resolve), 99 + component: (resolve) =>
100 + require(["@/views/editReportingData/index"], resolve),
100 hidden: true, 101 hidden: true,
101 - name: 'EditReportingData', 102 + name: "EditReportingData",
102 - meta: { title: '申报数据编辑', icon: 'edit' } 103 + meta: { title: "申报数据编辑", icon: "edit" },
103 }, 104 },
104 - ] 105 + ],
105 }, 106 },
106 { 107 {
107 - path: '/export', 108 + path: "/export",
108 component: Layout, 109 component: Layout,
109 hidden: false, 110 hidden: false,
110 - meta: { title: '查询管理', icon: 'fedexExportIcon' }, 111 + meta: { title: "查询管理", icon: "fedexExportIcon" },
111 children: [ 112 children: [
112 // { 113 // {
113 // path: '/exportBillQuery', 114 // path: '/exportBillQuery',
...@@ -117,25 +118,28 @@ export const constantRoutes = [ ...@@ -117,25 +118,28 @@ export const constantRoutes = [
117 // meta: { title: '出口订单查询', icon: '' }, 118 // meta: { title: '出口订单查询', icon: '' },
118 // }, 119 // },
119 { 120 {
120 - path: '/exportBillDetail', 121 + path: "/exportBillDetail",
121 - component: (resolve) => require(['@/views/exportBillDetail/index'], resolve), 122 + component: (resolve) =>
123 + require(["@/views/exportBillDetail/index"], resolve),
122 hidden: true, 124 hidden: true,
123 - name: 'ExportBillDetail', 125 + name: "ExportBillDetail",
124 - meta: { title: '出口订单详情', icon: '' }, 126 + meta: { title: "出口订单详情", icon: "" },
125 }, 127 },
126 { 128 {
127 - path: '/exportTransportDetail', 129 + path: "/exportTransportDetail",
128 - component: (resolve) => require(['@/views/exportTransportDetail/index'], resolve), 130 + component: (resolve) =>
131 + require(["@/views/exportTransportDetail/index"], resolve),
129 hidden: true, 132 hidden: true,
130 - name: 'ExportTransportDetail', 133 + name: "ExportTransportDetail",
131 - meta: { title: '出口运单详情', icon: '' }, 134 + meta: { title: "出口运单详情", icon: "" },
132 }, 135 },
133 { 136 {
134 - path: '/exportListDetail', 137 + path: "/exportListDetail",
135 - component: (resolve) => require(['@/views/exportListDetail/index'], resolve), 138 + component: (resolve) =>
139 + require(["@/views/exportListDetail/index"], resolve),
136 hidden: true, 140 hidden: true,
137 - name: 'ExportListDetail', 141 + name: "ExportListDetail",
138 - meta: { title: '出口清单详情', icon: '' }, 142 + meta: { title: "出口清单详情", icon: "" },
139 }, 143 },
140 // { 144 // {
141 // path: '/exportTransportBillQuery', 145 // path: '/exportTransportBillQuery',
...@@ -159,18 +163,20 @@ export const constantRoutes = [ ...@@ -159,18 +163,20 @@ export const constantRoutes = [
159 // meta: { title: '清单总分单查询', icon: '' } 163 // meta: { title: '清单总分单查询', icon: '' }
160 // }, 164 // },
161 { 165 {
162 - path: '/listBranchDetail', 166 + path: "/listBranchDetail",
163 - component: (resolve) => require(['@/views/listBranchDetail/index'], resolve), 167 + component: (resolve) =>
164 - name: 'ListBranchDetail', 168 + require(["@/views/listBranchDetail/index"], resolve),
169 + name: "ListBranchDetail",
165 hidden: true, 170 hidden: true,
166 - meta: { title: '清单总分单详情', icon: '' } 171 + meta: { title: "清单总分单详情", icon: "" },
167 }, 172 },
168 { 173 {
169 - path: '/logisticsExitDetail', 174 + path: "/logisticsExitDetail",
170 - component: (resolve) => require(['@/views/logisticsExitDetail/index'], resolve), 175 + component: (resolve) =>
171 - name: 'LogisticsExitDetail', 176 + require(["@/views/logisticsExitDetail/index"], resolve),
177 + name: "LogisticsExitDetail",
172 hidden: true, 178 hidden: true,
173 - meta: { title: '物流离境单详情', icon: '' } 179 + meta: { title: "物流离境单详情", icon: "" },
174 }, 180 },
175 // { 181 // {
176 // path: '/logisticsExitQuery', 182 // path: '/logisticsExitQuery',
...@@ -184,20 +190,20 @@ export const constantRoutes = [ ...@@ -184,20 +190,20 @@ export const constantRoutes = [
184 // name: 'ExportRevokeBillQuery', 190 // name: 'ExportRevokeBillQuery',
185 // meta: { title: '出口撤销单查询', icon: '' } 191 // meta: { title: '出口撤销单查询', icon: '' }
186 // } 192 // }
187 - ] 193 + ],
188 }, 194 },
189 { 195 {
190 - path: '/summary', 196 + path: "/summary",
191 component: Layout, 197 component: Layout,
192 hidden: false, 198 hidden: false,
193 - meta: { title: '汇总申报', icon: 'fedexSummary' }, 199 + meta: { title: "汇总申报", icon: "fedexSummary" },
194 children: [ 200 children: [
195 { 201 {
196 - path: '/summary', 202 + path: "/summary",
197 - component: (resolve) => require(['@/views/summaryEdit/index'], resolve), 203 + component: (resolve) => require(["@/views/summaryEdit/index"], resolve),
198 hidden: false, 204 hidden: false,
199 - name: 'Summary', 205 + name: "Summary",
200 - meta: { title: '汇总申报', icon: '' } 206 + meta: { title: "汇总申报", icon: "" },
201 }, 207 },
202 // { 208 // {
203 // path: '/summaryDataSearch', 209 // path: '/summaryDataSearch',
...@@ -207,13 +213,14 @@ export const constantRoutes = [ ...@@ -207,13 +213,14 @@ export const constantRoutes = [
207 // meta: { title: '汇总申请单查询', icon: '' } 213 // meta: { title: '汇总申请单查询', icon: '' }
208 // } 214 // }
209 { 215 {
210 - path: '/summaryDetail', 216 + path: "/summaryDetail",
211 - component: (resolve) => require(['@/views/summaryDetail/index'], resolve), 217 + component: (resolve) =>
212 - name: 'SummaryDetail', 218 + require(["@/views/summaryDetail/index"], resolve),
219 + name: "SummaryDetail",
213 hidden: true, 220 hidden: true,
214 - meta: { title: '汇总申请单详情', icon: '' } 221 + meta: { title: "汇总申请单详情", icon: "" },
215 - } 222 + },
216 - ] 223 + ],
217 }, 224 },
218 // { 225 // {
219 // path: '/system', 226 // path: '/system',
...@@ -256,13 +263,13 @@ export const constantRoutes = [ ...@@ -256,13 +263,13 @@ export const constantRoutes = [
256 // name: 'RoleConfig', 263 // name: 'RoleConfig',
257 // meta: { title: '角色管理权限', icon: '' } 264 // meta: { title: '角色管理权限', icon: '' }
258 // }, 265 // },
266 + // 监管场所管理 supervise-place-manage
259 // ] 267 // ]
260 // }, 268 // },
261 -] 269 +];
262 270
263 export default new Router({ 271 export default new Router({
264 - mode: 'hash', // 去掉url中的# 272 + mode: "hash", // 去掉url中的#
265 scrollBehavior: () => ({ y: 0 }), 273 scrollBehavior: () => ({ y: 0 }),
266 - routes: constantRoutes 274 + routes: constantRoutes,
267 -}) 275 +});
268 -
......
1 +<template>
2 + <el-dialog
3 + class="entryDialog classCUploadDialog"
4 + :title="title"
5 + :visible.sync="outerVisible"
6 + :show-close="false"
7 + width="25%"
8 + :close-on-click-modal="false"
9 + :destroy-on-close="true"
10 + v-loading="loadings.dialogLoading"
11 + @close="close"
12 + >
13 + <div class="modelItem">
14 + <el-form
15 + v-if="type != 'menuChange'"
16 + class="fedexFormStyle"
17 + ref="formData"
18 + :model="formData"
19 + :rules="rules"
20 + label-position="top"
21 + size="small"
22 + >
23 + <Formitem label="上级名称" prop="parentMenuId" type="edit">
24 + <el-input
25 + type="text"
26 + class="inputShadow"
27 + id="inputInner-edit-roleName"
28 + resize="none"
29 + v-model="formData.parentMenuId"
30 + clearable
31 + placeholder=""
32 + ></el-input>
33 + </Formitem>
34 + <Formitem label="菜单名称" prop="menuName" type="edit">
35 + <el-input
36 + type="text"
37 + class="inputShadow"
38 + id="inputInner-edit-roleName"
39 + resize="none"
40 + v-model="formData.menuName"
41 + clearable
42 + placeholder=""
43 + ></el-input>
44 + </Formitem>
45 +
46 + <Formitem label="菜单名称" prop="menuName" type="edit">
47 + <el-input
48 + type="text"
49 + class="inputShadow"
50 + id="inputInner-edit-roleName"
51 + resize="none"
52 + v-model="formData.menuName"
53 + clearable
54 + placeholder=""
55 + ></el-input>
56 + </Formitem>
57 + <Formitem label="菜单名称" prop="menuName" type="edit">
58 + <el-input
59 + type="text"
60 + class="inputShadow"
61 + id="inputInner-edit-roleName"
62 + resize="none"
63 + v-model="formData.menuName"
64 + clearable
65 + placeholder=""
66 + ></el-input>
67 + </Formitem>
68 + </el-form>
69 + <el-tree
70 + ref="tree"
71 + class="menuTree"
72 + v-else
73 + :data="treeData"
74 + show-checkbox
75 + default-expand-all
76 + node-key="id"
77 + :default-expanded-keys="expandedKeys"
78 + :default-checked-keys="checkedKeys"
79 + :props="defaultProps"
80 + @check="treeCheckChange"
81 + >
82 + </el-tree>
83 + </div>
84 + <div class="dialogOption entrySave">
85 + <el-button
86 + class="entrySaveButton"
87 + :disabled="loadings.submitLoading"
88 + @click="submit"
89 + >确 定</el-button
90 + >
91 + <el-button
92 + class="entrySaveButton"
93 + :disabled="loadings.uploadLoading"
94 + @click="close"
95 + >关 闭</el-button
96 + >
97 + </div>
98 + </el-dialog>
99 +</template>
100 +
101 +<script>
102 +import {
103 + addRoleData,
104 + updateRoleData,
105 + updateRoleMenuData,
106 + getMenuByRoleId,
107 +} from "@/api/system/user.js";
108 +import { getRouters } from "@/api/menu";
109 +export default {
110 + props: {
111 + outerVisible: {
112 + type: Boolean,
113 + default: false,
114 + },
115 + title: {
116 + type: String,
117 + default: "新增角色",
118 + },
119 + type: {
120 + type: String,
121 + default: "",
122 + },
123 + active: {
124 + type: Object,
125 + default: null,
126 + },
127 + },
128 + watch: {
129 + outerVisible(val) {
130 + if (val) {
131 + this.loadings.dialogLoading = false;
132 + if (this.type == "update") {
133 + this.formData = this.active;
134 + } else if (this.type == "menuChange") {
135 + this.formData = this.active;
136 + this.searchTreeData();
137 + this.loadCheckedKeys(); //加载已绑定的菜单
138 + }
139 + }
140 + },
141 + },
142 + data() {
143 + return {
144 + formData: {
145 + menuName: "",
146 + icon: "",
147 + order: 0,
148 + parentMenuId: 0, //父级菜单id
149 + physicalUrl: "", //前端地址
150 + url: "", //后端地址
151 + },
152 + treeData: [],
153 + treeCheckData: [],
154 + expandedKeys: [],
155 + checkedKeys: [],
156 + rules: {
157 + menuName: [
158 + {
159 + required: true,
160 + trigger: "blur",
161 + message: "菜单名称不能为空!",
162 + },
163 + ],
164 + },
165 + defaultProps: {
166 + children: "children",
167 + label: "label",
168 + },
169 + searchForm: {},
170 + loadings: {
171 + dialogLoading: false,
172 + uploadLoading: false,
173 + submitLoading: false,
174 + },
175 + loadingText: "",
176 + };
177 + },
178 + methods: {
179 + //查询菜单数据
180 + searchTreeData() {
181 + this.loadings.dialogLoading = true;
182 + getRouters()
183 + .then((res) => {
184 + if (res.code === "200") {
185 + let arr = [];
186 + res.data.forEach((item) => {
187 + let status = true;
188 + if (item.parentMenuId == 0) {
189 + let obj = {
190 + id: item.menuId,
191 + label: item.menuName,
192 + children: [],
193 + };
194 + arr.forEach((menuItem) => {
195 + if (menuItem.id == item.menuId) {
196 + status = false;
197 + menuItem.label = item.menuName;
198 + }
199 + });
200 + if (status) {
201 + arr.push(obj);
202 + }
203 + } else {
204 + let obj = {
205 + id: item.menuId,
206 + label: item.menuName,
207 + };
208 + arr.forEach((menuItem) => {
209 + if (menuItem.id == item.parentMenuId) {
210 + status = false;
211 + menuItem.children.push(obj);
212 + }
213 + });
214 + if (status) {
215 + arr.push({
216 + id: item.parentMenuId,
217 + label: "",
218 + children: [obj],
219 + });
220 + }
221 + }
222 + });
223 + this.treeData = arr;
224 + } else {
225 + this.alertWarningMsg(res.message);
226 + }
227 + this.loadings.dialogLoading = false;
228 + })
229 + .catch((err) => {
230 + console.log(err);
231 + this.loadings.dialogLoading = false;
232 + });
233 + },
234 + //数据保存
235 + submit() {
236 + this.loadings.dialogLoading = true;
237 + let obj = {};
238 + if (this.type == "add") {
239 + this.$refs.formData.validate((valid) => {
240 + if (valid) {
241 + obj.menuName = this.formData.menuName;
242 + this.addapi(obj);
243 + } else {
244 + this.loadings.dialogLoading = false;
245 + }
246 + });
247 + } else if (this.type == "update") {
248 + this.$refs.formData.validate((valid) => {
249 + if (valid) {
250 + obj.roleId = this.formData.roleId;
251 + obj.menuName = this.formData.menuName;
252 + this.updateapi(obj);
253 + } else {
254 + this.loadings.dialogLoading = false;
255 + }
256 + });
257 + } else if (this.type == "menuChange") {
258 + obj.menuId = this.treeCheckData; // 使用合并后的选中节点
259 + obj.roleId = this.formData.roleId;
260 + this.menuChangeapi(obj);
261 + }
262 + },
263 + //新增
264 + addapi(val) {
265 + addRoleData(val)
266 + .then((res) => {
267 + if (res.code === "200") {
268 + this.msgSuccess(res.message);
269 + this.close();
270 + } else {
271 + this.alertWarningMsg(res.message);
272 + this.loadings.dialogLoading = false;
273 + }
274 + })
275 + .catch((err) => {
276 + console.log(err);
277 + this.loadings.dialogLoading = false;
278 + });
279 + },
280 + //修改
281 + updateapi(val) {
282 + updateRoleData(val)
283 + .then((res) => {
284 + if (res.code === "200") {
285 + this.msgSuccess(res.message);
286 + this.close();
287 + } else {
288 + this.alertWarningMsg(res.message);
289 + this.loadings.dialogLoading = false;
290 + }
291 + })
292 + .catch((err) => {
293 + console.log(err);
294 + this.loadings.dialogLoading = false;
295 + });
296 + },
297 + //菜单权限修改
298 + menuChangeapi(val) {
299 + updateRoleMenuData(val)
300 + .then((res) => {
301 + if (res.code === "200") {
302 + this.msgSuccess(res.message);
303 + this.close();
304 + this.$store.dispatch("GenerateRoutes");
305 + } else {
306 + this.alertWarningMsg(res.message);
307 + this.loadings.dialogLoading = false;
308 + }
309 + })
310 + .catch((err) => {
311 + console.log(err);
312 + this.loadings.dialogLoading = false;
313 + });
314 + },
315 + treeCheckChange(data, checked) {
316 + console.log(data, checked);
317 + let arr = [];
318 + arr = checked.checkedKeys.concat(checked.halfCheckedKeys);
319 + this.treeCheckData = arr;
320 + },
321 + close() {
322 + this.formData = {
323 + menuName: "",
324 + };
325 + this.checkedKeys = [];
326 + this.$emit("close");
327 + },
328 + // 加载已绑定的菜单
329 + loadCheckedKeys() {
330 + if (this.formData.roleId) {
331 + getMenuByRoleId(this.formData.roleId)
332 + .then((res) => {
333 + if (res.code === "200") {
334 + this.checkedKeys = res.data
335 + .filter((item) => item.isBinding && item.parentMenuId != 0)
336 + .map((item) => item.menuId);
337 + //console.log('初始 checkedKeys:', this.checkedKeys);
338 + this.$nextTick(() => {
339 + this.$refs.tree.setCheckedKeys(this.checkedKeys);
340 + this.updateTreeCheckData();
341 + });
342 + } else {
343 + this.alertWarningMsg(res.message);
344 + }
345 + })
346 + .catch((err) => {
347 + console.log(err);
348 + });
349 + }
350 + },
351 + //加载选中的节点及半选中的父节点
352 + updateTreeCheckData() {
353 + const checkedKeys = this.$refs.tree.getCheckedKeys();
354 + const halfCheckedKeys = this.$refs.tree.getHalfCheckedKeys();
355 + this.treeCheckData = checkedKeys.concat(halfCheckedKeys);
356 + //console.log('合并后的 treeCheckData:', this.treeCheckData);
357 + },
358 + },
359 +};
360 +</script>
361 +
362 +<style lang="scss" scoped>
363 +@import "@/assets/styles/variables.scss";
364 +
365 +.menuTree {
366 + max-width: 350px;
367 + max-height: 300px;
368 + overflow: auto;
369 + margin: 0 auto;
370 + border: 1px solid #999;
371 + padding: 10px;
372 +}
373 +</style>
1 +<template>
2 + <div class="entrySreach">
3 + <el-form
4 + class="fedexFormStyle fedexformSreach fedexformSreachBottomBorder"
5 + ref="sreachForm"
6 + :model="sreachFormData"
7 + label-position="top"
8 + size="small"
9 + >
10 + <el-row class="row-border">
11 + <!-- 角色名称 -->
12 + <el-col :span="5">
13 + <Formitem label="菜单名称" prop="menuName">
14 + <el-input
15 + type="text"
16 + class="inputShadow"
17 + id="inputInner--roleName"
18 + resize="none"
19 + v-model="sreachFormData.menuName"
20 + clearable
21 + placeholder=""
22 + ></el-input>
23 + </Formitem>
24 + </el-col>
25 + <el-col :span="2">
26 + <el-form-item class="textCenter">
27 + <el-button
28 + class="entrySreachButton"
29 + type="text"
30 + icon="el-icon-search"
31 + :loading="loadings.searchLoading"
32 + @click="search(0)"
33 + ></el-button>
34 + </el-form-item>
35 + </el-col>
36 + </el-row>
37 + </el-form>
38 + <div class="optionButton">
39 + <el-button
40 + class="entrySaveButton"
41 + icon="el-icon-plus"
42 + size="small"
43 + @click="addHandle"
44 + >
45 + 新增菜单
46 + </el-button>
47 + </div>
48 + <Table
49 + class="fedexDetialTable fedexSreachTable"
50 + ref="entryTable"
51 + :data="tableData"
52 + :headerData="headerData"
53 + :maxHeight="tableMaxheight"
54 + :border="true"
55 + :pagination="true"
56 + :order="false"
57 + :loading="loadings.searchLoading"
58 + :page="page.pageIndex"
59 + :pageSizes="[20, 30, 50, 100]"
60 + :totalCount="page.total"
61 + @sizeChange="sizeChange"
62 + @currentChange="currentChange"
63 + :selection="false"
64 + :selectFixed="false"
65 + :rowSelectDataType="false"
66 + >
67 + <template slot="optionColumn">
68 + <el-table-column align="left" label="操作">
69 + <template slot-scope="scope">
70 + <el-button type="text" @click="update(scope.row)">
71 + 角色修改
72 + </el-button>
73 + <el-button type="text" @click="muenChange(scope.row)">
74 + 权限绑定
75 + </el-button>
76 + </template>
77 + </el-table-column>
78 + </template>
79 + </Table>
80 + <DialogVue
81 + :outerVisible="outerVisible"
82 + :title="dialogTitle"
83 + :type="editType"
84 + :active="activeData"
85 + @close="dialogClose"
86 + />
87 + </div>
88 +</template>
89 +
90 +<script>
91 +import { getRoleList } from "@/api/system/user.js";
92 +import DialogVue from "./dialog.vue";
93 +import { addMenu, deleteMenu } from "@/api/menu";
94 +
95 +export default {
96 + name: "SupervisePlaceManage",
97 + components: {
98 + DialogVue,
99 + },
100 + data() {
101 + return {
102 + sreachFormData: {
103 + menuName: "",
104 + },
105 + page: {
106 + pageIndex: 1,
107 + pageSize: 20,
108 + total: 0,
109 + },
110 + activeData: null,
111 + tableData: [],
112 + headerData: [
113 + {
114 + name: "角色名",
115 + value: "roleName",
116 + width: "",
117 + align: "left",
118 + },
119 + ],
120 + loadings: {
121 + searchLoading: false,
122 + },
123 + tableMaxheight: null,
124 + outerVisible: false,
125 + dialogTitle: "",
126 + editType: "",
127 + };
128 + },
129 + created() {
130 + this.search(0);
131 + },
132 + mounted() {
133 + this.tableMaxheight = window.innerHeight - 300;
134 + },
135 + methods: {
136 + //查询
137 + search(val) {
138 + this.loadings.searchLoading = true;
139 + if (val == 0) {
140 + this.page.pageIndex = 1;
141 + }
142 + let obj = this.sreachFormData;
143 + obj.pageIndex = this.page.pageIndex;
144 + obj.pageSize = this.page.pageSize;
145 + getRoleList(obj)
146 + .then((res) => {
147 + if (res.code === "200") {
148 + this.tableData = res.data.value;
149 + this.page.total = res.data.totalItems;
150 + this.tableData.forEach((item, idx) => {
151 + item.index = idx;
152 + });
153 + } else {
154 + this.alertWarningMsg(res.message);
155 + }
156 + this.loadings.searchLoading = false;
157 + })
158 + .catch((err) => {
159 + console.log(err);
160 + this.loadings.searchLoading = false;
161 + });
162 + },
163 + addHandle() {
164 + // this.dialogTitle = "新增菜单";
165 + // this.editType = "add";
166 + // this.outerVisible = true;
167 +
168 + // let params = {
169 + // icon: "",
170 + // menuName: "监管场所管理",
171 + // order: 4.4,
172 + // parentMenuId: 90,
173 + // physicalUrl: "/supervise-place-manage",
174 + // url: "",
175 + // };
176 + deleteMenu({
177 + menuId: 1,
178 + }).then((res) => {
179 + console.log(res);
180 + });
181 + // addMenu(params).then((res) => {
182 + // console.log(res);
183 + // });
184 + },
185 + update(val) {
186 + this.dialogTitle = "修改角色";
187 + this.editType = "update";
188 + this.outerVisible = true;
189 + this.activeData = val;
190 + },
191 + muenChange(val) {
192 + this.dialogTitle = "绑定权限";
193 + this.editType = "menuChange";
194 + this.outerVisible = true;
195 + this.activeData = val;
196 + },
197 + dialogClose() {
198 + this.outerVisible = false;
199 + this.activeData = null;
200 + this.search(1);
201 + },
202 + //分页
203 + currentChange(val) {
204 + this.page.pageIndex = val.page;
205 + this.search(1);
206 + },
207 + sizeChange(val) {
208 + this.page.pageSize = val;
209 + this.search(1);
210 + },
211 + input() {
212 + this.$forceUpdate();
213 + },
214 + },
215 +};
216 +</script>
217 +
218 +<style scoped lang="scss">
219 +@import "@/assets/styles/variables.scss";
220 +.entrySreach {
221 + height: 100%;
222 + background-color: $menuLightBg;
223 +
224 + .entrySreachButton {
225 + display: inline-block;
226 + font-size: 20px;
227 + color: $fedexButton !important;
228 + }
229 +
230 + .optionButton {
231 + padding: 10px;
232 + text-align: left;
233 +
234 + .el-button {
235 + color: $fedexButton;
236 + border-color: $fedexButton !important;
237 +
238 + svg {
239 + display: inline-block;
240 + margin-right: 5px;
241 + fill: $fedexButton;
242 + }
243 + }
244 +
245 + .entrySaveButton:hover,
246 + .entrySaveButton:focus {
247 + color: $menuLightBg !important;
248 + background-color: $fedexButton !important;
249 + }
250 + }
251 +}
252 +
253 +.texttareaTip {
254 + position: absolute;
255 + top: 52%;
256 + right: 20px;
257 + transform: translate(0, -50%);
258 + z-index: 10;
259 +}
260 +</style>
This diff is collapsed. Click to expand it.
1 +<template>
2 + <el-dialog
3 + class="entryDialog classCUploadDialog"
4 + :title="title"
5 + :visible.sync="outerVisible"
6 + :show-close="false"
7 + width="25%"
8 + :close-on-click-modal="false"
9 + :destroy-on-close="true"
10 + v-loading="loadings.dialogLoading"
11 + @close="close"
12 + >
13 + <div class="modelItem">
14 + <el-form
15 + v-if="type != 'menuChange'"
16 + class="fedexFormStyle"
17 + ref="formData"
18 + :model="formData"
19 + :rules="rules"
20 + label-position="top"
21 + size="small"
22 + >
23 + <Formitem label="角色名称" prop="roleName" type="edit">
24 + <el-input
25 + type="text"
26 + class="inputShadow"
27 + id="inputInner-edit-roleName"
28 + resize="none"
29 + v-model="formData.roleName"
30 + clearable
31 + placeholder=""
32 + ></el-input>
33 + </Formitem>
34 + </el-form>
35 + <el-tree
36 + ref="tree"
37 + class="menuTree"
38 + v-else
39 + :data="treeData"
40 + show-checkbox
41 + default-expand-all
42 + node-key="id"
43 + :default-expanded-keys="expandedKeys"
44 + :default-checked-keys="checkedKeys"
45 + :props="defaultProps"
46 + @check="treeCheckChange"
47 + >
48 + </el-tree>
49 + </div>
50 + <div class="dialogOption entrySave">
51 + <el-button
52 + class="entrySaveButton"
53 + :disabled="loadings.submitLoading"
54 + @click="submit"
55 + >确 定</el-button
56 + >
57 + <el-button
58 + class="entrySaveButton"
59 + :disabled="loadings.uploadLoading"
60 + @click="close"
61 + >关 闭</el-button
62 + >
63 + </div>
64 + </el-dialog>
65 +</template>
66 +
67 +<script>
68 +import {
69 + addRoleData,
70 + updateRoleData,
71 + updateRoleMenuData,
72 + getMenuByRoleId,
73 +} from "@/api/system/user.js";
74 +import { getRouters } from "@/api/menu";
75 +export default {
76 + props: {
77 + outerVisible: {
78 + type: Boolean,
79 + default: false,
80 + },
81 + title: {
82 + type: String,
83 + default: "新增角色",
84 + },
85 + type: {
86 + type: String,
87 + default: "",
88 + },
89 + active: {
90 + type: Object,
91 + default: null,
92 + },
93 + },
94 + watch: {
95 + outerVisible(val) {
96 + if (val) {
97 + this.loadings.dialogLoading = false;
98 + if (this.type == "update") {
99 + this.formData = this.active;
100 + } else if (this.type == "menuChange") {
101 + this.formData = this.active;
102 + this.searchTreeData();
103 + this.loadCheckedKeys();//加载已绑定的菜单
104 + }
105 + }
106 + },
107 + },
108 + data() {
109 + return {
110 + formData: {
111 + roleName: "",
112 + },
113 + treeData: [],
114 + treeCheckData: [],
115 + expandedKeys: [],
116 + checkedKeys: [],
117 + rules: {
118 + roleName: [
119 + {
120 + required: true,
121 + trigger: "blur",
122 + message: "角色名称不能为空!",
123 + },
124 + ],
125 + },
126 + defaultProps: {
127 + children: "children",
128 + label: "label",
129 + },
130 + searchForm: {},
131 + loadings: {
132 + dialogLoading: false,
133 + uploadLoading: false,
134 + submitLoading: false,
135 + },
136 + loadingText: "",
137 + };
138 + },
139 + methods: {
140 + //查询菜单数据
141 + searchTreeData() {
142 + this.loadings.dialogLoading = true;
143 + getRouters()
144 + .then((res) => {
145 + if (res.code === "200") {
146 + let arr = [];
147 + res.data.forEach((item) => {
148 + let status = true;
149 + if (item.parentMenuId == 0) {
150 + let obj = {
151 + id: item.menuId,
152 + label: item.menuName,
153 + children: [],
154 + };
155 + arr.forEach((menuItem) => {
156 + if (menuItem.id == item.menuId) {
157 + status = false;
158 + menuItem.label = item.menuName;
159 + }
160 + });
161 + if (status) {
162 + arr.push(obj);
163 + }
164 + } else {
165 + let obj = {
166 + id: item.menuId,
167 + label: item.menuName,
168 + };
169 + arr.forEach((menuItem) => {
170 + if (menuItem.id == item.parentMenuId) {
171 + status = false;
172 + menuItem.children.push(obj);
173 + }
174 + });
175 + if (status) {
176 + arr.push({
177 + id: item.parentMenuId,
178 + label: "",
179 + children: [obj],
180 + });
181 + }
182 + }
183 + });
184 + this.treeData = arr;
185 + } else {
186 + this.alertWarningMsg(res.message);
187 + }
188 + this.loadings.dialogLoading = false;
189 + })
190 + .catch((err) => {
191 + console.log(err);
192 + this.loadings.dialogLoading = false;
193 + });
194 + },
195 + //数据保存
196 + submit() {
197 + this.loadings.dialogLoading = true;
198 + let obj = {};
199 + if (this.type == "add") {
200 + this.$refs.formData.validate((valid) => {
201 + if (valid) {
202 + obj.roleName = this.formData.roleName;
203 + this.addapi(obj);
204 + } else {
205 + this.loadings.dialogLoading = false;
206 + }
207 + });
208 + } else if (this.type == "update") {
209 + this.$refs.formData.validate((valid) => {
210 + if (valid) {
211 + obj.roleId = this.formData.roleId;
212 + obj.roleName = this.formData.roleName;
213 + this.updateapi(obj);
214 + } else {
215 + this.loadings.dialogLoading = false;
216 + }
217 + });
218 + } else if (this.type == "menuChange") {
219 + obj.menuId = this.treeCheckData; // 使用合并后的选中节点
220 + obj.roleId = this.formData.roleId;
221 + this.menuChangeapi(obj);
222 + }
223 + },
224 + //新增
225 + addapi(val) {
226 + addRoleData(val)
227 + .then((res) => {
228 + if (res.code === "200") {
229 + this.msgSuccess(res.message);
230 + this.close();
231 + } else {
232 + this.alertWarningMsg(res.message);
233 + this.loadings.dialogLoading = false;
234 + }
235 + })
236 + .catch((err) => {
237 + console.log(err);
238 + this.loadings.dialogLoading = false;
239 + });
240 + },
241 + //修改
242 + updateapi(val) {
243 + updateRoleData(val)
244 + .then((res) => {
245 + if (res.code === "200") {
246 + this.msgSuccess(res.message);
247 + this.close();
248 + } else {
249 + this.alertWarningMsg(res.message);
250 + this.loadings.dialogLoading = false;
251 + }
252 + })
253 + .catch((err) => {
254 + console.log(err);
255 + this.loadings.dialogLoading = false;
256 + });
257 + },
258 + //菜单权限修改
259 + menuChangeapi(val) {
260 + updateRoleMenuData(val)
261 + .then((res) => {
262 + if (res.code === "200") {
263 + this.msgSuccess(res.message);
264 + this.close();
265 + this.$store.dispatch('GenerateRoutes')
266 + } else {
267 + this.alertWarningMsg(res.message);
268 + this.loadings.dialogLoading = false;
269 + }
270 + })
271 + .catch((err) => {
272 + console.log(err);
273 + this.loadings.dialogLoading = false;
274 + });
275 + },
276 + treeCheckChange(data, checked) {
277 + console.log(data, checked);
278 + let arr = [];
279 + arr = checked.checkedKeys.concat(checked.halfCheckedKeys);
280 + this.treeCheckData = arr;
281 + },
282 + close() {
283 + this.formData = {
284 + roleName: "",
285 + };
286 + this.checkedKeys = []
287 + this.$emit("close");
288 + },
289 + // 加载已绑定的菜单
290 + loadCheckedKeys() {
291 + if (this.formData.roleId) {
292 + getMenuByRoleId(this.formData.roleId)
293 + .then((res) => {
294 + if (res.code === "200") {
295 + this.checkedKeys = res.data.filter(item => item.isBinding && (item.parentMenuId!=0 ) ).map(item => item.menuId);
296 + //console.log('初始 checkedKeys:', this.checkedKeys);
297 + this.$nextTick(() => {
298 + this.$refs.tree.setCheckedKeys(this.checkedKeys);
299 + this.updateTreeCheckData();
300 + });
301 + } else {
302 + this.alertWarningMsg(res.message);
303 + }
304 + })
305 + .catch((err) => {
306 + console.log(err);
307 + });
308 + }
309 + },
310 + //加载选中的节点及半选中的父节点
311 + updateTreeCheckData() {
312 + const checkedKeys = this.$refs.tree.getCheckedKeys();
313 + const halfCheckedKeys = this.$refs.tree.getHalfCheckedKeys();
314 + this.treeCheckData = checkedKeys.concat(halfCheckedKeys);
315 + //console.log('合并后的 treeCheckData:', this.treeCheckData);
316 + },
317 +
318 + },
319 +};
320 +</script>
321 +
322 +<style lang="scss" scoped>
323 +@import "@/assets/styles/variables.scss";
324 +
325 +.menuTree {
326 + max-width: 350px;
327 + max-height: 300px;
328 + overflow: auto;
329 + margin: 0 auto;
330 + border: 1px solid #999;
331 + padding: 10px;
332 +}
333 +</style>
1 +<template>
2 + <div class="entrySreach">
3 + <el-form
4 + class="fedexFormStyle fedexformSreach fedexformSreachBottomBorder"
5 + ref="sreachForm"
6 + :model="sreachFormData"
7 + label-position="top"
8 + size="small"
9 + >
10 + <el-row class="row-border">
11 + <!-- 角色名称 -->
12 + <el-col :span="5">
13 + <Formitem label="角色名称" prop="roleName">
14 + <el-input
15 + type="text"
16 + class="inputShadow"
17 + id="inputInner--roleName"
18 + resize="none"
19 + v-model="sreachFormData.roleName"
20 + clearable
21 + placeholder=""
22 + ></el-input>
23 + </Formitem>
24 + </el-col>
25 + <el-col :span="5">
26 + <Formitem label="角色名称" prop="roleName">
27 + <el-input
28 + type="text"
29 + class="inputShadow"
30 + id="inputInner--roleName"
31 + resize="none"
32 + v-model="sreachFormData.roleName"
33 + clearable
34 + placeholder=""
35 + ></el-input>
36 + </Formitem>
37 + </el-col>
38 + <el-col :span="5">
39 + <Formitem label="角色名称" prop="roleName">
40 + <el-input
41 + type="text"
42 + class="inputShadow"
43 + id="inputInner--roleName"
44 + resize="none"
45 + v-model="sreachFormData.roleName"
46 + clearable
47 + placeholder=""
48 + ></el-input>
49 + </Formitem>
50 + </el-col>
51 + <el-col :span="2">
52 + <el-form-item class="textCenter">
53 + <el-button
54 + class="entrySreachButton"
55 + type="text"
56 + icon="el-icon-search"
57 + :loading="loadings.searchLoading"
58 + @click="search(0)"
59 + ></el-button>
60 + </el-form-item>
61 + </el-col>
62 + <el-col :span="2">
63 + <!-- 清空查询条件-->
64 + <el-form-item class="textLeft textCenter">
65 + <el-button
66 + type="text"
67 + size="small"
68 + icon="el-icon-refresh"
69 + @click="clear"
70 + >
71 + 重置
72 + </el-button>
73 + </el-form-item>
74 + </el-col>
75 + </el-row>
76 + </el-form>
77 + <div class="optionButton">
78 + <el-button
79 + class="entrySaveButton"
80 + icon="el-icon-plus"
81 + size="small"
82 + @click="addRole"
83 + >
84 + 新增
85 + </el-button>
86 + </div>
87 + <Table
88 + class="fedexDetialTable fedexSreachTable"
89 + ref="entryTable"
90 + :data="tableData"
91 + :headerData="headerData"
92 + :maxHeight="tableMaxheight"
93 + :border="true"
94 + :pagination="true"
95 + :order="false"
96 + :loading="loadings.searchLoading"
97 + :page="page.pageIndex"
98 + :pageSizes="[20, 30, 50, 100]"
99 + :totalCount="page.total"
100 + @sizeChange="sizeChange"
101 + @currentChange="currentChange"
102 + :selection="false"
103 + :selectFixed="false"
104 + :rowSelectDataType="false"
105 + >
106 + <template slot="optionColumn">
107 + <el-table-column align="left" label="操作">
108 + <template slot-scope="scope">
109 + <el-button type="text" @click="update(scope.row)">
110 + 角色修改
111 + </el-button>
112 + <el-button type="text" @click="muenChange(scope.row)">
113 + 权限绑定
114 + </el-button>
115 + </template>
116 + </el-table-column>
117 + </template>
118 + </Table>
119 + <DialogVue
120 + :outerVisible="outerVisible"
121 + :title="dialogTitle"
122 + :type="editType"
123 + :active="activeData"
124 + @close="dialogClose"
125 + />
126 + </div>
127 +</template>
128 +
129 +<script>
130 +import { getRoleList } from "@/api/system/user.js";
131 +import DialogVue from "./dialog.vue";
132 +export default {
133 + name: "SupervisePlaceManage",
134 + components: {
135 + DialogVue,
136 + },
137 + data() {
138 + return {
139 + sreachFormData: {
140 + roleName: "",
141 + },
142 + page: {
143 + pageIndex: 1,
144 + pageSize: 20,
145 + total: 0,
146 + },
147 + activeData: null,
148 + tableData: [],
149 + headerData: [
150 + {
151 + name: "角色名",
152 + value: "roleName",
153 + width: "",
154 + align: "left",
155 + },
156 + ],
157 + loadings: {
158 + searchLoading: false,
159 + },
160 + tableMaxheight: null,
161 + outerVisible: false,
162 + dialogTitle: "",
163 + editType: "",
164 + };
165 + },
166 + created() {
167 + this.search(0);
168 + },
169 + mounted() {
170 + this.tableMaxheight = window.innerHeight - 300;
171 + },
172 + methods: {
173 + clear() {
174 + this.$refs.sreachForm.resetFields();
175 + },
176 + //查询
177 + search(val) {
178 + this.loadings.searchLoading = true;
179 + if (val == 0) {
180 + this.page.pageIndex = 1;
181 + }
182 + let obj = this.sreachFormData;
183 + obj.pageIndex = this.page.pageIndex;
184 + obj.pageSize = this.page.pageSize;
185 + getRoleList(obj)
186 + .then((res) => {
187 + if (res.code === "200") {
188 + this.tableData = res.data.value;
189 + this.page.total = res.data.totalItems;
190 + this.tableData.forEach((item, idx) => {
191 + item.index = idx;
192 + });
193 + } else {
194 + this.alertWarningMsg(res.message);
195 + }
196 + this.loadings.searchLoading = false;
197 + })
198 + .catch((err) => {
199 + console.log(err);
200 + this.loadings.searchLoading = false;
201 + });
202 + },
203 + addRole() {
204 + this.dialogTitle = "新增角色";
205 + this.editType = "add";
206 + this.outerVisible = true;
207 + },
208 + update(val) {
209 + this.dialogTitle = "修改角色";
210 + this.editType = "update";
211 + this.outerVisible = true;
212 + this.activeData = val;
213 + },
214 + muenChange(val) {
215 + this.dialogTitle = "绑定权限";
216 + this.editType = "menuChange";
217 + this.outerVisible = true;
218 + this.activeData = val;
219 + },
220 + dialogClose() {
221 + this.outerVisible = false;
222 + this.activeData = null;
223 + this.search(1);
224 + },
225 + //分页
226 + currentChange(val) {
227 + this.page.pageIndex = val.page;
228 + this.search(1);
229 + },
230 + sizeChange(val) {
231 + this.page.pageSize = val;
232 + this.search(1);
233 + },
234 + input() {
235 + this.$forceUpdate();
236 + },
237 + },
238 +};
239 +</script>
240 +
241 +<style scoped lang="scss">
242 +@import "@/assets/styles/variables.scss";
243 +.entrySreach {
244 + height: 100%;
245 + background-color: $menuLightBg;
246 +
247 + .entrySreachButton {
248 + display: inline-block;
249 + font-size: 20px;
250 + color: $fedexButton !important;
251 + }
252 +
253 + .optionButton {
254 + padding: 10px;
255 + text-align: left;
256 +
257 + .el-button {
258 + color: $fedexButton;
259 + border-color: $fedexButton !important;
260 +
261 + svg {
262 + display: inline-block;
263 + margin-right: 5px;
264 + fill: $fedexButton;
265 + }
266 + }
267 +
268 + .entrySaveButton:hover,
269 + .entrySaveButton:focus {
270 + color: $menuLightBg !important;
271 + background-color: $fedexButton !important;
272 + }
273 + }
274 +}
275 +
276 +.texttareaTip {
277 + position: absolute;
278 + top: 52%;
279 + right: 20px;
280 + transform: translate(0, -50%);
281 + z-index: 10;
282 +}
283 +</style>