yh-pub 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/README.MD +19 -0
  2. package/layout/admin/adminIndex.vue +104 -0
  3. package/layout/admin/api/loginApi.js +24 -0
  4. package/layout/admin/api/routers.js +93 -0
  5. package/layout/admin/api/tenantApi.js +123 -0
  6. package/layout/admin/home/homeIndex.vue +25 -0
  7. package/layout/admin/login/login.vue +161 -0
  8. package/layout/admin/menu/MenuIndex.vue +648 -0
  9. package/layout/admin/menu/icon.vue +108 -0
  10. package/layout/admin/menu/iconList.js +934 -0
  11. package/layout/admin/saTenant/saTenant.js +0 -0
  12. package/layout/admin/saTenant/saTenant.vue +173 -0
  13. package/layout/admin/saTenant/saTenantForm.js +80 -0
  14. package/layout/admin/saTenant/saTenantForm.vue +61 -0
  15. package/layout/admin/saTenant/saTenantRoleManage.js +417 -0
  16. package/layout/admin/saTenant/saTenantRoleManage.vue +99 -0
  17. package/layout/admin/user/saUser.less +6 -0
  18. package/layout/admin/user/saUser.vue +72 -0
  19. package/layout/main/components/console/console.vue +205 -0
  20. package/layout/main/components/error-store/error-store.vue +72 -0
  21. package/layout/main/components/error-store/index.js +2 -0
  22. package/layout/main/components/fullscreen/fullscreen.vue +57 -0
  23. package/layout/main/components/fullscreen/index.js +2 -0
  24. package/layout/main/components/language/language.vue +71 -0
  25. package/layout/main/components/side-menu/side-menu.less +74 -0
  26. package/layout/main/components/side-menu/side-menu.vue +75 -0
  27. package/layout/main/components/tags-nav/tags-nav.less +45 -0
  28. package/layout/main/components/tags-nav/tags-nav.vue +144 -0
  29. package/layout/main/components/user/user.less +12 -0
  30. package/layout/main/components/user/user.vue +185 -0
  31. package/layout/main/home/home.vue +480 -0
  32. package/layout/main/home/index.js +2 -0
  33. package/layout/main/home/toDoList.vue +32 -0
  34. package/layout/main/login/login.less +93 -0
  35. package/layout/main/login/login.vue +151 -0
  36. package/layout/main/main.less +81 -0
  37. package/layout/main/main.vue +202 -0
  38. package/layout/main/system/dict.vue +64 -0
  39. package/layout/main/system/orgManage.vue +473 -0
  40. package/layout/main/system/roleManage.js +755 -0
  41. package/layout/main/system/roleManage.vue +399 -0
  42. package/package.json +12 -0
  43. package/view/basic/error-logger.vue +74 -0
  44. package/view/basic/error-page/401.vue +22 -0
  45. package/view/basic/error-page/404.vue +22 -0
  46. package/view/basic/error-page/500.vue +22 -0
  47. package/view/basic/error-page/back-btn-group.vue +48 -0
  48. package/view/basic/error-page/error-content.vue +28 -0
  49. package/view/basic/error-page/error.less +46 -0
  50. package/view/config/component/confFormItem.vue +49 -0
  51. package/view/config/config.scss +45 -0
  52. package/view/config/configIndex.vue +150 -0
  53. package/view/config/subPage/router-config.vue +5 -0
  54. package/view/config/subPage/sys-config.vue +249 -0
  55. package/view/window/IframeFReportView.vue +28 -0
  56. package/view/window/windowIndex.vue +22 -0
@@ -0,0 +1,473 @@
1
+ <template>
2
+ <div class="search">
3
+ <el-row class="operation">
4
+ <div>
5
+ <el-button @click="addNew">
6
+ <i class="iconfont icon-plus"></i>
7
+ 新增
8
+ </el-button>
9
+ <el-popconfirm
10
+ title="您确认要删除所选的数据吗?"
11
+ ok-text="删除"
12
+ cancel-text="再考虑下"
13
+ @confirm="delAll"
14
+ style="margin-left: 12px">
15
+ <template #reference>
16
+ <el-button>
17
+ <i class="iconfont icon-delete"></i>
18
+ 删除
19
+ </el-button>
20
+ </template>
21
+ </el-popconfirm>
22
+ <el-button @click="getAllList">
23
+ <i class="iconfont icon-refresh"></i>
24
+ 刷新
25
+ </el-button>
26
+ </div>
27
+ </el-row>
28
+ <el-row
29
+ type="flex"
30
+ justify="start"
31
+ :gutter="16"
32
+ v-show="showType === 'tree'">
33
+ <el-col
34
+ :sm="8"
35
+ :md="8"
36
+ :lg="8"
37
+ :xl="6">
38
+ <el-alert
39
+ show-icon
40
+ :title="`当前选择编辑: ${editTitle} `"
41
+ :closable="false"
42
+ style="margin-bottom: 10px"></el-alert>
43
+ <el-input
44
+ v-model="searchKey"
45
+ @search="search"
46
+ placeholder="输入机构名搜索"
47
+ clearable
48
+ enter-button>
49
+ <template #prepend>
50
+ <i class="iconfont icon-search"></i>
51
+ </template>
52
+ </el-input>
53
+ <div v-loading="loading">
54
+ <div
55
+ class="tree-bar"
56
+ :style="{ maxHeight: maxHeight }">
57
+ <el-tree
58
+ ref="tree"
59
+ show-checkbox
60
+ :data="data"
61
+ :props="treeProp"
62
+ node-key="key"
63
+ default-expand-all
64
+ :current-node-key="treeSelectedKeys"
65
+ @current-change="selectTree"
66
+ @check-change="changeSelect"></el-tree>
67
+ </div>
68
+ </div>
69
+ </el-col>
70
+ <el-col
71
+ :sm="16"
72
+ :md="16"
73
+ :lg="16"
74
+ :xl="9">
75
+ <el-form
76
+ ref="form"
77
+ :model="form"
78
+ :rules="formValidate"
79
+ label-width="90px">
80
+ <el-form-item
81
+ label="机构编码"
82
+ prop="value">
83
+ <el-input
84
+ v-model="form.value"
85
+ ref="orgCodeRef" />
86
+ </el-form-item>
87
+ <el-form-item
88
+ label="机构名称"
89
+ prop="name">
90
+ <el-input v-model="form.name" />
91
+ </el-form-item>
92
+ <el-form-item
93
+ label="机构类型"
94
+ prop="adOrgtypeId">
95
+ <dict
96
+ dict="adOrgtypeId"
97
+ url="/orgController/getOrgType"
98
+ v-model="form.adOrgtypeId"
99
+ placeholder="请选择或输入搜索"
100
+ filterable
101
+ clearable />
102
+ </el-form-item>
103
+ <el-form-item
104
+ label="上级机构"
105
+ prop="parentId"
106
+ v-if="pOrgRefreshFlag">
107
+ <dict
108
+ dict="parentId"
109
+ url="/orgController/getGroupOrgs"
110
+ v-model="form.parentId"
111
+ placeholder="请选择或输入搜索"
112
+ filterable
113
+ clearable />
114
+ </el-form-item>
115
+ <el-form-item
116
+ label="备注"
117
+ prop="description">
118
+ <el-input
119
+ v-model="form.description"
120
+ type="textarea" />
121
+ </el-form-item>
122
+ <el-form-item label="是否有效">
123
+ <el-switch
124
+ v-model="form.isactive"
125
+ checked-children="Y"
126
+ un-checked-children="N"
127
+ default-checked />
128
+ </el-form-item>
129
+ <el-form-item>
130
+ <el-button
131
+ style="margin-right: 5px"
132
+ @click="submitEdit"
133
+ :loading="submitLoading"
134
+ :disabled="form.adOrgId != ''"
135
+ type="primary">
136
+ <i class="iconfont icon-plus"></i>
137
+ 保存新增
138
+ </el-button>
139
+ <el-button
140
+ style="margin-right: 5px"
141
+ @click="submitEdit"
142
+ :loading="submitLoading"
143
+ :disabled="form.adOrgId === ''"
144
+ type="primary">
145
+ <i class="iconfont icon-save"></i>
146
+ 保存修改
147
+ </el-button>
148
+ <el-button @click="handleReset">重置</el-button>
149
+ </el-form-item>
150
+ </el-form>
151
+ </el-col>
152
+ </el-row>
153
+ </div>
154
+ </template>
155
+
156
+ <script>
157
+ import dict from "yh-pub/layout/main/system/dict.vue";
158
+ export default {
159
+ name: "menu-manage",
160
+ components: {
161
+ dict,
162
+ },
163
+ data() {
164
+ return {
165
+ showType: "tree",
166
+ loading: true,
167
+ strict: false,
168
+ maxHeight: "500px",
169
+ expandLevel: 4,
170
+ pOrgRefreshFlag: true,
171
+ menuModalVisible: false,
172
+ iconModalVisible: false,
173
+ selectList: [],
174
+ showParent: false,
175
+ searchKey: "",
176
+ parentTitle: "",
177
+ editTitle: "",
178
+ modalTitle: "",
179
+ treeProp: {
180
+ label: "title",
181
+ },
182
+ form: {
183
+ value: "",
184
+ name: "",
185
+ adOrgtypeId: "",
186
+ parentId: "",
187
+ description: "",
188
+ isactive: "",
189
+ adOrgId: "",
190
+ },
191
+ region_id: "DCA5A753114B4D0997F9EAB5BE1F767D",
192
+ button_id: "3093BCBB01784DCC907639C0FC5FB6B8",
193
+ formAdd: {},
194
+ formValidate: {
195
+ value: [{ required: true, message: "编码不能为空", trigger: "change" }],
196
+ name: [{ required: true, message: "名称不能为空", trigger: "change" }],
197
+ MENU_TYPE: [{ required: true, message: "菜单类型不能为空", trigger: "change" }],
198
+ SYS_MODULE_ID: [{ required: true, message: "所属模块不能为空", trigger: "change" }],
199
+ parentId: [{ required: false, message: "上级菜单不能为空", trigger: "change" }],
200
+ seq: [
201
+ {
202
+ type: "number",
203
+ message: "排序值不能为空",
204
+ trigger: "change",
205
+ },
206
+ ],
207
+ },
208
+ submitLoading: false,
209
+ data: [],
210
+ tableData: [],
211
+ dictPermissions: [],
212
+ treeSelectedKeys: [],
213
+ };
214
+ },
215
+ methods: {
216
+ init() {
217
+ this.getAllList();
218
+ },
219
+ loadData(item, callback) {},
220
+ pOrgReload() {
221
+ this.pOrgRefreshFlag = false;
222
+ this.$nextTick(() => (this.pOrgRefreshFlag = true));
223
+ },
224
+ parseTreeData(curLevelData, curLevel) {
225
+ let newLevelData = curLevelData;
226
+ newLevelData["key"] = curLevelData.adOrgId;
227
+ newLevelData["title"] = curLevelData.name;
228
+ newLevelData["level"] = curLevel;
229
+ if (curLevelData["_childs"] && curLevelData["_childs"].length > 0) {
230
+ curLevelData["_childs"].forEach((sonTreeData) => {
231
+ if (!newLevelData.children) {
232
+ newLevelData.children = [];
233
+ }
234
+ newLevelData.children.push(this.parseTreeData(sonTreeData, curLevel + 1));
235
+ });
236
+ }
237
+ return newLevelData;
238
+ },
239
+ getAllList() {
240
+ this.loading = true;
241
+ // 重载父机构数据
242
+ this.pOrgReload();
243
+ // 请求系统数据
244
+ this.axios.post("/orgController/getOrgData", this.$qs.stringify({})).then((response) => {
245
+ if (response.data.result) {
246
+ let newTreeData = [];
247
+ // 仅展开指定级数 默认后端已展开所有
248
+ let expandLevel = this.expandLevel;
249
+ response.data.orgList.forEach((e) => {
250
+ newTreeData.push(this.parseTreeData(e, 0, expandLevel));
251
+ });
252
+ this.data = newTreeData;
253
+ }
254
+ this.loading = false;
255
+ });
256
+ },
257
+ search() {
258
+ if (this.searchKey) {
259
+ this.loading = true;
260
+ this.axios
261
+ .post("/orgController/getOrgData", this.$qs.stringify({ orgName: this.searchKey }))
262
+ .then((response) => {
263
+ if (response.data.result) {
264
+ this.loading = false;
265
+ let newTreeData = [];
266
+ response.data.orgList.forEach(function (e) {
267
+ newTreeData.push(this.parseTreeData(e, 0));
268
+ });
269
+ this.data = newTreeData;
270
+ this.tableData = newTreeData;
271
+ }
272
+ });
273
+ } else {
274
+ this.getAllList();
275
+ }
276
+ },
277
+ selectTree(data, node) {
278
+ if (data) {
279
+ this.form = data;
280
+ this.editTitle = this.form.title;
281
+ this.selectedNodes = data;
282
+ this.treeSelectedKeys = data.adMenuId;
283
+ } else {
284
+ this.cancelEdit();
285
+ }
286
+ },
287
+ selectTreeEdit(v) {
288
+ if (v.length > 0) {
289
+ // 转换null为""
290
+ for (let attr in v[0]) {
291
+ if (v[0][attr] === null) {
292
+ v[0][attr] = "";
293
+ }
294
+ }
295
+ let str = JSON.stringify(v[0]);
296
+ let data = JSON.parse(str);
297
+ if (this.form.id === data.id) {
298
+ this.$message.warning("请勿选择自己作为父菜单");
299
+ v[0].selected = false;
300
+ return;
301
+ }
302
+ this.form.parentId = data.id;
303
+ this.form._parentId_name = data.title;
304
+ }
305
+ },
306
+ addNew() {
307
+ this.cancelEdit();
308
+ this.treeSelectedKeys = [];
309
+ // 然后调用focus方法
310
+ this.$nextTick(() => {
311
+ this.$refs.orgCodeRef.focus();
312
+ });
313
+ },
314
+ cancelEdit() {
315
+ this.handleReset();
316
+ },
317
+ handleReset() {
318
+ this.treeSelectedKeys = [];
319
+ this.form.adOrgId = "";
320
+ this.editTitle = "";
321
+ this.$refs.form.resetFields();
322
+ },
323
+ submitEdit() {
324
+ this.$refs.form.validate((valid) => {
325
+ if (valid) {
326
+ this.submitLoading = true;
327
+ let curForm = {
328
+ value: this.form.value,
329
+ name: this.form.name,
330
+ adOrgtypeId: this.form.adOrgtypeId,
331
+ parentId: this.form.parentId,
332
+ description: this.form.description,
333
+ isactive: this.form.isactive,
334
+ adOrgId: this.form.adOrgId,
335
+ };
336
+ this.axios
337
+ .post("/orgController/submitOrg", this.$qs.stringify(curForm))
338
+ .then((response) => {
339
+ if (response.data.result) {
340
+ this.$message.success((this.form.adOrgId !== "" ? "修改" : "新增") + "成功");
341
+ this.getAllList();
342
+ this.handleReset();
343
+ } else {
344
+ this.$message.error(response.data.msg);
345
+ }
346
+ this.submitLoading = false;
347
+ })
348
+ .catch((response) => {
349
+ this.submitLoading = false;
350
+ });
351
+ }
352
+ });
353
+ },
354
+ add() {
355
+ if (!this.form.id) {
356
+ this.$message.warning("请先点击选择一个菜单权限节点");
357
+ return;
358
+ }
359
+ this.parentTitle = this.form.title;
360
+ this.modalTitle = "添加子节点(可拖动)";
361
+ this.showParent = true;
362
+ let type = 0;
363
+ if (this.form.level === 1) {
364
+ type = 0;
365
+ } else if (this.form.level === 2) {
366
+ type = 1;
367
+ } else if (this.form.level === 3) {
368
+ this.$modal.warning({
369
+ title: "抱歉,不能添加啦",
370
+ content: "左侧仅支持2级菜单目录",
371
+ });
372
+ return;
373
+ } else {
374
+ type = 0;
375
+ }
376
+ if (!this.form.children) {
377
+ this.form.children = [];
378
+ }
379
+ this.formAdd = {
380
+ icon: "",
381
+ type: type,
382
+ parentId: this.form.id,
383
+ level: Number(this.form.level) + 1,
384
+ sortOrder: this.form.children.length + 1,
385
+ buttonType: "",
386
+ status: 0,
387
+ showAlways: true,
388
+ };
389
+ if (this.form.level === 0) {
390
+ this.formAdd.path = "/";
391
+ this.formAdd.component = "Main";
392
+ }
393
+ this.menuModalVisible = true;
394
+ },
395
+ changeSelect() {
396
+ this.selectList = this.$refs.tree.getCheckedKeys();
397
+ },
398
+ showSelect(e) {
399
+ this.selectList = e;
400
+ },
401
+ clearSelectAll() {
402
+ this.$refs.table.selectAll(false);
403
+ },
404
+ remove(v) {
405
+ this.selectList = [];
406
+ this.selectList.push(v);
407
+ this.delAll();
408
+ },
409
+ delAll() {
410
+ if (this.selectList.length <= 0) {
411
+ this.$message.warning("您还未勾选要删除的数据");
412
+ return;
413
+ }
414
+ let ids = this.selectList.join(",");
415
+ this.axios.post("/orgController/delOrgByIds", this.$qs.stringify({ ids: ids })).then((response) => {
416
+ if (response.data.result) {
417
+ this.$message.success(response.data.msg);
418
+ this.selectList = [];
419
+ this.getAllList();
420
+ this.handleReset();
421
+ } else {
422
+ this.$message.error(response.data.msg);
423
+ }
424
+ this.submitLoading = false;
425
+ });
426
+ },
427
+ },
428
+ mounted() {
429
+ // 计算高度
430
+ let height = document.documentElement.clientHeight;
431
+ this.maxHeight = Number(height - 106) + "px";
432
+ this.init();
433
+ },
434
+ };
435
+ </script>
436
+ <style lang="scss">
437
+ .search {
438
+ padding: 10px 0;
439
+ .operation {
440
+ margin-bottom: 2vh;
441
+ }
442
+
443
+ .select-title {
444
+ font-weight: 600;
445
+ color: #40a9ff;
446
+ }
447
+
448
+ .select-clear {
449
+ margin-left: 10px;
450
+ }
451
+ .el-form-item__content {
452
+ .el-select {
453
+ flex: 1;
454
+ }
455
+ }
456
+
457
+ .tree-bar {
458
+ overflow: auto;
459
+ margin-top: 5px;
460
+ position: relative;
461
+ min-height: 80px;
462
+ &::-webkit-scrollbar {
463
+ width: 6px;
464
+ height: 6px;
465
+ }
466
+ &::-webkit-scrollbar-thumb {
467
+ border-radius: 4px;
468
+ box-shadow: inset 0 0 2px #d1d1d1;
469
+ background: #e4e4e4;
470
+ }
471
+ }
472
+ }
473
+ </style>