fl-web-component 0.1.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 (52) hide show
  1. package/README.md +24 -0
  2. package/dist/demo.html +10 -0
  3. package/dist/fl-web-component.common.js +316 -0
  4. package/dist/fl-web-component.common.js.map +1 -0
  5. package/dist/fl-web-component.css +1 -0
  6. package/dist/fl-web-component.umd.js +326 -0
  7. package/dist/fl-web-component.umd.js.map +1 -0
  8. package/dist/fl-web-component.umd.min.js +2 -0
  9. package/dist/fl-web-component.umd.min.js.map +1 -0
  10. package/package.json +47 -0
  11. package/packages/components/button/index.vue +22 -0
  12. package/packages/components/model/api/index.js +429 -0
  13. package/packages/components/model/api/mock/detecttree.js +58 -0
  14. package/packages/components/model/api/mock/getmodel-line.js +79336 -0
  15. package/packages/components/model/api/mock/init.js +1 -0
  16. package/packages/components/model/api/mock/pbstree.js +835 -0
  17. package/packages/components/model/api/mock/topology.json +3238 -0
  18. package/packages/components/model/components/TextOverTooltip/index.vue +84 -0
  19. package/packages/components/model/components/annotation-toolbar.vue +425 -0
  20. package/packages/components/model/components/check-proofing-model.vue +42 -0
  21. package/packages/components/model/components/clipping-type.vue +51 -0
  22. package/packages/components/model/components/com-dialogWrapper/Readme.md +53 -0
  23. package/packages/components/model/components/com-dialogWrapper/index.vue +117 -0
  24. package/packages/components/model/components/detect-panel.vue +327 -0
  25. package/packages/components/model/components/detect-tree.vue +460 -0
  26. package/packages/components/model/components/firstPer-panel.vue +111 -0
  27. package/packages/components/model/components/header-button.vue +546 -0
  28. package/packages/components/model/components/imageViewer/index.vue +127 -0
  29. package/packages/components/model/components/import-model.vue +127 -0
  30. package/packages/components/model/components/location-panel.vue +95 -0
  31. package/packages/components/model/components/measure-type.vue +59 -0
  32. package/packages/components/model/components/pbs-tree.vue +502 -0
  33. package/packages/components/model/components/proof-config.vue +80 -0
  34. package/packages/components/model/components/proof-for-pc.vue +123 -0
  35. package/packages/components/model/components/proof-history.vue +318 -0
  36. package/packages/components/model/components/proof-panel-detail.vue +567 -0
  37. package/packages/components/model/components/proof-panel.vue +770 -0
  38. package/packages/components/model/components/proof-project-user.vue +482 -0
  39. package/packages/components/model/components/proof-publish.vue +130 -0
  40. package/packages/components/model/components/proof-role.vue +535 -0
  41. package/packages/components/model/components/props-panel.vue +249 -0
  42. package/packages/components/model/index.vue +3413 -0
  43. package/packages/components/model/readme.md +31 -0
  44. package/packages/components/model/utils/annotation-tool.js +340 -0
  45. package/packages/components/model/utils/cursor.js +18 -0
  46. package/packages/components/model/utils/detect-v1.js +341 -0
  47. package/packages/components/model/utils/index.js +48 -0
  48. package/packages/components/model/utils/threejs/measure-angle.js +258 -0
  49. package/packages/components/model/utils/threejs/measure-area.js +269 -0
  50. package/packages/components/model/utils/threejs/measure-distance.js +207 -0
  51. package/packages/components/model/utils/threejs/measure-volume.js +94 -0
  52. package/packages/index.js +24 -0
@@ -0,0 +1,535 @@
1
+ <template>
2
+ <div>
3
+ <div class="trigger-button">
4
+ <el-button type="text" @click="triggerDialog"
5
+ ><i class="pre-img"></i>角色管理</el-button
6
+ >
7
+ </div>
8
+
9
+ <!-- @handleClose="handleClose"
10
+ @submitDialogData="submitDialogData" -->
11
+
12
+ <com-dialog
13
+ v-if="dialogVisible"
14
+ dialog-title="角色管理"
15
+ :visible="dialogVisible"
16
+ :popup-width="'50%'"
17
+ :footerDisabled="true"
18
+ @handleClose="handleClose"
19
+ >
20
+ <el-row :gutter="10" class="mb8">
21
+ <el-col :span="1.5">
22
+ <el-button
23
+ type="primary"
24
+ icon="el-icon-plus "
25
+ size="small"
26
+ @click="handleAdd"
27
+ v-hasPermi="[
28
+ `project:role:add:proj:${defaultParams.projectId}`,
29
+ ]"
30
+ >新增</el-button
31
+ >
32
+ </el-col>
33
+ </el-row>
34
+
35
+ <el-table
36
+ v-loading="loading"
37
+ :data="roleList"
38
+ max-height="65vh"
39
+ @selection-change="handleSelectionChange"
40
+ >
41
+ <el-table-column label="序号" type="index" width="80" />
42
+ <el-table-column
43
+ label="角色名称"
44
+ width="250"
45
+ prop="roleName"
46
+ :show-overflow-tooltip="true"
47
+ />
48
+ <el-table-column
49
+ label="权限字符"
50
+ prop="roleKey"
51
+ :show-overflow-tooltip="true"
52
+ width="200"
53
+ />
54
+ <el-table-column label="创建时间" prop="createTime">
55
+ <template slot-scope="scope">
56
+ <span>{{ parseTime(scope.row.createTime) }}</span>
57
+ </template>
58
+ </el-table-column>
59
+ <el-table-column
60
+ label="操作"
61
+ class-name="small-padding fixed-width"
62
+ >
63
+ <template slot-scope="{ row }">
64
+ <el-button
65
+ v-show="row.projectId"
66
+ v-hasPermi="[
67
+ `project:role:edit:proj:${projectId}`,
68
+ ]"
69
+ size="mini"
70
+ type="text"
71
+ @click="handleUpdate(row)"
72
+ >编辑</el-button
73
+ >
74
+ <!-- builtIn:'0' 内置,'2' 非内置 -->
75
+ <template v-if="row.builtIn === '2'">
76
+ <el-button
77
+ v-show="row.projectId"
78
+ v-hasPermi="[
79
+ `project:role:remove:proj:${projectId}`,
80
+ ]"
81
+ size="mini"
82
+ type="text"
83
+ @click="handleDelete(row)"
84
+ >删除</el-button
85
+ >
86
+ </template>
87
+ </template>
88
+ </el-table-column>
89
+ </el-table>
90
+
91
+ <!-- <pagination
92
+ v-show="total > 0"
93
+ :total="total"
94
+ :page.sync="queryParams.pageNum"
95
+ :limit.sync="queryParams.pageSize"
96
+ @pagination="getList"
97
+ /> -->
98
+ </com-dialog>
99
+ <!-- 新增或编辑角色配置对话框 -->
100
+ <!-- append-to-body -->
101
+ <!-- :close-on-click-modal="false" -->
102
+ <com-dialog
103
+ v-if="dialogOperate.visible"
104
+ :dialog-title="title"
105
+ :visible="dialogOperate.visible"
106
+ width="500px"
107
+ @handleClose="handleOperateClose"
108
+ @submitDialogData="submitForm"
109
+ >
110
+ <el-form ref="form" :model="form" :rules="rules" label-width="100px">
111
+ <el-form-item label="角色名称" prop="roleName">
112
+ <el-input
113
+ v-trim
114
+ v-model="form.roleName"
115
+ placeholder="请输入角色名称"
116
+ />
117
+ </el-form-item>
118
+ <el-form-item prop="roleKey">
119
+ <span slot="label">
120
+ <el-tooltip
121
+ content="控制器中定义的权限字符,如:@PreAuthorize(`@ss.hasRole('admin')`)"
122
+ placement="top"
123
+ >
124
+ <i class="el-icon-question"></i>
125
+ </el-tooltip>
126
+ 权限字符
127
+ </span>
128
+ <el-input
129
+ v-trim
130
+ v-model="form.roleKey"
131
+ placeholder="请输入权限字符"
132
+ />
133
+ </el-form-item>
134
+ <!-- <el-form-item label="角色顺序" prop="roleSort">
135
+ <el-input-number
136
+ ref="refRoleSort"
137
+ v-trim
138
+ v-model="form.roleSort"
139
+ controls-position="right"
140
+ @input.native="roleSortCheck"
141
+ />
142
+ </el-form-item> -->
143
+ <el-form-item label="菜单权限">
144
+ <el-checkbox
145
+ v-model="menuExpand"
146
+ @change="handleCheckedTreeExpand($event)"
147
+ >展开/折叠</el-checkbox
148
+ >
149
+ <el-checkbox
150
+ v-model="menuNodeAll"
151
+ @change="handleCheckedTreeNodeAll($event)"
152
+ >全选/全不选</el-checkbox
153
+ >
154
+ <el-checkbox
155
+ v-model="form.menuCheckStrictly"
156
+ @change="handleCheckedTreeConnect($event)"
157
+ >父子联动</el-checkbox
158
+ >
159
+ <el-tree
160
+ class="tree-border"
161
+ :data="menuOptions"
162
+ show-checkbox
163
+ ref="menu"
164
+ node-key="id"
165
+ :check-strictly="!form.menuCheckStrictly"
166
+ empty-text="加载中,请稍候"
167
+ :props="defaultProps"
168
+ ></el-tree>
169
+ </el-form-item>
170
+ <el-form-item label="备注">
171
+ <el-input
172
+ v-trim
173
+ v-model="form.remark"
174
+ type="textarea"
175
+ maxlength="255"
176
+ placeholder="请输入内容"
177
+ ></el-input>
178
+ </el-form-item>
179
+ </el-form>
180
+ </com-dialog>
181
+ </div>
182
+ </template>
183
+
184
+ <script>
185
+ import * as modelApi from '../api/index';
186
+ import proRole from '@/api/pro-role/pro-role';
187
+
188
+ export default {
189
+ name: 'ProRole',
190
+ computed: {
191
+ projectId() {
192
+ return this.defaultParams.projectId;
193
+ },
194
+ },
195
+ components: {
196
+ ComDialog: () => import('./com-dialogWrapper'),
197
+ },
198
+ watch: {
199
+ // projectId(val) {
200
+ // if (!val) return;
201
+ // this.getList();
202
+ // },
203
+ },
204
+ props: {
205
+ defaultParams: {
206
+ type: Object,
207
+ default() {
208
+ return {};
209
+ },
210
+ },
211
+ },
212
+ data() {
213
+ return {
214
+ dialogVisible: false,
215
+ dialogOperate: {
216
+ visible: false,
217
+ },
218
+ // 遮罩层
219
+ loading: true,
220
+ // 选中数组
221
+ ids: [],
222
+ // 非单个禁用
223
+ single: true,
224
+ // 非多个禁用
225
+ multiple: true,
226
+ // 显示搜索条件
227
+ showSearch: true,
228
+ // 总条数
229
+ total: 0,
230
+ // 角色表格数据
231
+ roleList: [],
232
+ // 弹出层标题
233
+ title: '',
234
+ // 是否显示弹出层
235
+ open: false,
236
+ menuExpand: false,
237
+ menuNodeAll: false,
238
+ deptExpand: true,
239
+ deptNodeAll: false,
240
+ // 日期范围
241
+ dateRange: [],
242
+ // 菜单列表
243
+ menuOptions: [],
244
+ // 查询参数
245
+ queryParams: {
246
+ pageNum: 1,
247
+ pageSize: 10,
248
+ roleName: undefined,
249
+ roleKey: undefined,
250
+ status: undefined,
251
+ },
252
+ // 表单参数
253
+ form: {},
254
+ defaultProps: {
255
+ children: 'children',
256
+ label: 'label',
257
+ },
258
+ // 表单校验
259
+ rules: {
260
+ roleName: [
261
+ { required: true, message: '角色名称不能为空', trigger: 'change' },
262
+ { max: 16, message: '角色名称不能大于16个字符', trigger: 'change' },
263
+ ],
264
+ roleKey: [
265
+ { required: true, message: '权限字符不能为空', trigger: 'change' },
266
+ ],
267
+ // roleSort: [
268
+ // { required: true, message: "角色顺序不能为空", trigger: "change" },
269
+ // {
270
+ // pattern: /^([0-9][0-9]{0,2}|1000)$/,
271
+ // message: "请输入0-1000间的整数",
272
+ // trigger: "change",
273
+ // },
274
+ // ],
275
+ },
276
+ roleNames: [],
277
+ };
278
+ },
279
+ created() {
280
+ this.getList();
281
+ },
282
+ methods: {
283
+ triggerDialog() {
284
+ this.dialogVisible = !this.dialogVisible;
285
+ console.log(this.dialogVisible);
286
+ },
287
+ checkSelectable({ projectId }) {
288
+ return Boolean(projectId);
289
+ },
290
+ // 查询角色列表
291
+ getList() {
292
+ // this.queryParams.projectId;
293
+ const projectId = this.defaultParams.projectId;
294
+ // console.log(this.defaultParams);
295
+ this.loading = true;
296
+ modelApi
297
+ .getRoleList({projectId})
298
+ .then((response) => {
299
+ this.roleList = response.rows;
300
+ this.total = response.total;
301
+ this.loading = false;
302
+ });
303
+ },
304
+ // 查询菜单树结构
305
+ getMenuTreeselect() {
306
+ proRole.menuTreeselect().then((response) => {
307
+ this.menuOptions = response;
308
+ });
309
+ },
310
+ /* 弹窗 关闭 操作 */
311
+ handleClose() {
312
+ this.dialogVisible = false;
313
+ },
314
+ // 所有菜单节点数据
315
+ getMenuAllCheckedKeys() {
316
+ // 目前被选中的菜单节点
317
+ let checkedKeys = this.$refs.menu.getCheckedKeys();
318
+ // 半选中的菜单节点
319
+ let halfCheckedKeys = this.$refs.menu.getHalfCheckedKeys();
320
+ checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys);
321
+ return checkedKeys;
322
+ },
323
+ // 根据角色ID查询菜单树结构
324
+ getRoleMenuTreeselect(roleId) {
325
+ return proRole
326
+ .roleMenuTreeselect(this.projectId, roleId)
327
+ .then((response) => {
328
+ this.menuOptions = response.menus;
329
+ return response;
330
+ });
331
+ },
332
+ // 取消按钮
333
+ cancel() {
334
+ this.open = false;
335
+ this.reset();
336
+ },
337
+ // 表单重置
338
+ reset() {
339
+ if (this.$refs.menu != undefined) {
340
+ this.$refs.menu.setCheckedKeys([]);
341
+ }
342
+ (this.menuExpand = false),
343
+ (this.menuNodeAll = false),
344
+ (this.deptExpand = true),
345
+ (this.deptNodeAll = false),
346
+ (this.form = {
347
+ roleId: undefined,
348
+ roleName: undefined,
349
+ roleKey: undefined,
350
+ // roleSort: 0,
351
+ status: '0',
352
+ menuIds: [],
353
+ deptIds: [],
354
+ menuCheckStrictly: true,
355
+ deptCheckStrictly: true,
356
+ remark: undefined,
357
+ });
358
+ this.resetForm('form');
359
+ },
360
+ // 搜索按钮操作
361
+ handleQuery() {
362
+ this.queryParams.pageNum = 1;
363
+ this.queryParams.pageSize = 10;
364
+ this.getList();
365
+ },
366
+ // 重置按钮操作
367
+ resetQuery() {
368
+ this.dateRange = [];
369
+ this.resetForm('queryForm');
370
+ this.handleQuery();
371
+ },
372
+ // 多选框选中数据
373
+ handleSelectionChange(selection) {
374
+ this.ids = selection.map((item) => item.roleId);
375
+ this.roleNames = selection.map((item) => item.roleName);
376
+ const flag = Boolean(selection.find((item) => item.builtIn === '0'));
377
+ // this.single = selection.length != 1 || flag;
378
+ this.single = selection.length != 1;
379
+ this.multiple = !selection.length || flag;
380
+ },
381
+ // 树权限(展开/折叠)
382
+ handleCheckedTreeExpand(value) {
383
+ let treeList = this.menuOptions;
384
+ for (let i = 0; i < treeList.length; i++) {
385
+ this.$refs.menu.store.nodesMap[treeList[i].id].expanded = value;
386
+ }
387
+ },
388
+ // 树权限(全选/全不选)
389
+ handleCheckedTreeNodeAll(value) {
390
+ this.$refs.menu.setCheckedNodes(value ? this.menuOptions : []);
391
+ },
392
+ // 树权限(父子联动)
393
+ handleCheckedTreeConnect(value) {
394
+ this.form.menuCheckStrictly = value ? true : false;
395
+ },
396
+ // 新增按钮操作
397
+ handleAdd() {
398
+ this.reset();
399
+ this.getMenuTreeselect();
400
+ this.dialogOperate.visible = true;
401
+ this.title = '新增角色';
402
+ },
403
+ /* 弹窗 关闭 操作 */
404
+ handleOperateClose() {
405
+ this.resetForm();
406
+ this.dialogOperate.visible = false;
407
+ },
408
+ resetForm() {
409
+ // this.reset();
410
+ // this.$refs.form.resetFields();
411
+ // this.dialogForm.userId = '';
412
+ // this.dialogForm.roleId = '';
413
+ // this.dialogForm.operateType = '';
414
+ },
415
+ // 编辑按钮操作
416
+ handleUpdate(row) {
417
+ this.dialogOperate.visible = true;
418
+ this.reset();
419
+ const roleId = row.roleId || this.ids;
420
+ const roleMenu = this.getRoleMenuTreeselect(roleId);
421
+ proRole.getRole(roleId).then((response) => {
422
+ this.form = response;
423
+ this.open = true;
424
+ this.$nextTick(() => {
425
+ roleMenu.then((res) => {
426
+ let checkedKeys = res.checkedKeys;
427
+ checkedKeys.forEach((v) => {
428
+ this.$nextTick(() => {
429
+ this.$refs.menu.setChecked(v, true, false);
430
+ });
431
+ });
432
+ });
433
+ });
434
+ this.title = '编辑角色';
435
+ });
436
+ },
437
+ // 分配用户操作
438
+ // handleAuthUser: function (row) {
439
+ // const roleId = row.roleId;
440
+ // this.$router.push({
441
+ // path: "/project/pro-config/pro-user/" + roleId,
442
+ // query: {
443
+ // projectId: this.projectId,
444
+ // },
445
+ // });
446
+ // },
447
+ // 提交按钮
448
+ submitForm: function () {
449
+ this.$refs['form'].validate((valid) => {
450
+ if (valid) {
451
+ this.form.projectId = Number(this.projectId);
452
+ if (this.form.roleId != undefined) {
453
+ this.form.menuIds = this.getMenuAllCheckedKeys();
454
+ proRole.updateRole(this.form).then((response) => {
455
+ this.$modal.msgSuccess('编辑成功');
456
+ this.dialogOperate.visible = false;
457
+ this.getList();
458
+ });
459
+ } else {
460
+ this.form.menuIds = this.getMenuAllCheckedKeys();
461
+ proRole.addRole(this.form).then((response) => {
462
+ this.$modal.msgSuccess('新增成功');
463
+ this.dialogOperate.visible = false;
464
+ this.getList();
465
+ });
466
+ }
467
+ }
468
+ });
469
+ },
470
+ // 删除按钮操作
471
+ handleDelete(row) {
472
+ const roleIds = row.roleId || this.ids.join(',');
473
+ const roleNames = row.roleName || this.roleNames;
474
+ this.$confirm('确认删除角色 "' + roleNames + '"?', '移除', {
475
+ type: 'error',
476
+ })
477
+ .then(() => {
478
+ this.$modal.loading('正在删除,请稍候...');
479
+ proRole
480
+ .delRole({
481
+ roleIds,
482
+ projectId: this.defaultParams.projectId,
483
+ })
484
+ .then(() => {
485
+ this.getList();
486
+ this.$modal.msgSuccess('删除成功');
487
+ })
488
+ .finally(() => {
489
+ this.$modal.closeLoading();
490
+ });
491
+ })
492
+ .catch(() => {});
493
+ },
494
+ // 导出按钮操作
495
+ handleExport() {
496
+ this.download(
497
+ 'system/role/export',
498
+ {
499
+ ...this.queryParams,
500
+ },
501
+ `role_${new Date().getTime()}.xlsx`
502
+ );
503
+ },
504
+ // 校验排序
505
+ // roleSortCheck(val) {
506
+ // const key = this.$refs.refRoleSort.displayValue;
507
+ // if (val.data === null && key === "") {
508
+ // this.$set(this.form, "roleSort", undefined);
509
+ // } else {
510
+ // this.$set(this.form, "roleSort", key);
511
+ // }
512
+ // if (this.form.roleSort) {
513
+ // this.form.roleSort = this.form.roleSort.replace(/\D/g, "");
514
+ // }
515
+ // },
516
+ },
517
+ };
518
+ </script>
519
+
520
+ <style lang="scss" scoped>
521
+ ::v-deep .trigger-button {
522
+ span {
523
+ display: flex;
524
+ align-items: center;
525
+ color: #2e3136;
526
+ }
527
+ .pre-img {
528
+ background-image: url('../../../assets/proof/role@2x.png');
529
+ width: 30px;
530
+ height: 30px;
531
+ display: inline-block;
532
+ background-size: cover;
533
+ }
534
+ }
535
+ </style>