@dypnb/dev-tools 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.
@@ -0,0 +1,717 @@
1
+ import require$$0$1 from 'path';
2
+ import require$$0 from 'fs';
3
+ import { k as strCase, j as getDirname, e as getGlobalConfig, i as errorLog, l as log, s as successLog } from '../chunk-cb5f11a8.js';
4
+ import 'os';
5
+ import 'util';
6
+ import 'tty';
7
+ import 'child_process';
8
+ import 'assert';
9
+ import 'events';
10
+ import 'buffer';
11
+ import 'stream';
12
+ import 'node:url';
13
+ import 'node:path';
14
+
15
+ // template.js
16
+ var templateData = {
17
+ tablePageTemplate: (config = {}) => {
18
+ const {
19
+ name
20
+ } = config;
21
+ const titlCease = strCase(name);
22
+ return `<template>
23
+ <div class="app-container">
24
+ <CoustomTable
25
+ :queryFormJson="queryFormJson"
26
+ :pageButtonsJson="pageButtonsJson"
27
+ :tableJson="tableJson"
28
+ :tableData="tableData"
29
+ @onPageButton="handlerPageButton"
30
+ @onButton="handlerButton"
31
+ @onSearch="handlerSearch"
32
+ @onTableRowClick="handlerTableRowClick"
33
+ >
34
+ </CoustomTable>
35
+
36
+ <CoustomFormDialog
37
+ ref="formDialog"
38
+ :visible.sync="dialogVisible"
39
+ :dialogJson="dialogJson"
40
+ :initData="initFormData"
41
+ @onSubmit="handlerSubmit"
42
+ ></CoustomFormDialog>
43
+ </div>
44
+ </template>
45
+ <script>
46
+ import CoustomTable from "@/components/CoustomTable";
47
+ import CoustomFormDialog from "@/components/CoustomFormDialog";
48
+ import { TableJson, QueryFormJson, PageButtonsJson, DialogJson } from "./constants";
49
+ import {
50
+ getDevApiIotClassesList,
51
+ postDevApiIotClasses,
52
+ getDevApiIotClassesClassId,
53
+ deleteDevApiIotClassesClassId,
54
+ putDevApiIotClasses
55
+ } from "@/api/iot/classes-controller.js";
56
+ import {
57
+ getDevApiIotPackagesList,
58
+ } from "@/api/iot/packages-controller.js";
59
+ export default {
60
+ name: '${titlCease}',
61
+ components: {
62
+ CoustomTable,
63
+ CoustomFormDialog
64
+ },
65
+ data() {
66
+ return {
67
+ queryFormJson: QueryFormJson,
68
+ pageButtonsJson: PageButtonsJson,
69
+ tableJson: TableJson,
70
+ dialogJson: DialogJson,
71
+ tableData: [],
72
+ // 总条数
73
+ total: 0,
74
+ // 查询参数
75
+ queryParams: {
76
+ pageNum: 1,
77
+ pageSize: 10,
78
+ },
79
+ dialogVisible: false,
80
+ initFormData: {},
81
+ }
82
+ },
83
+ created() {
84
+ },
85
+ mounted() {
86
+ this.getList();
87
+ },
88
+ computed: {
89
+ packageName() {
90
+ const { query } = this.$route;
91
+ return query.packageName
92
+ }
93
+ },
94
+ methods: {
95
+ async getPackageData() {
96
+ try {
97
+ const { rows = [] } = await getDevApiIotPackagesList();
98
+ return rows.map(item => {
99
+ return {
100
+ value: item.packageCode,
101
+ label: item.packageDispname,
102
+ }
103
+ })
104
+ } catch (error) {
105
+ return []
106
+ }
107
+ },
108
+
109
+ async handlerSubmit(formData) {
110
+ let params = {
111
+ ...formData,
112
+ packageName: this.packageName
113
+ };
114
+ let msgText = '新增';
115
+ let func = postDevApiIotClasses;
116
+ if (this.dialogJson.type === 'Edit') {
117
+ params.classId = this.initFormData.classId;
118
+ msgText = '编辑';
119
+ func = putDevApiIotClasses;
120
+ }
121
+ try {
122
+ const { code } = await func(params);
123
+ if (code === 200) {
124
+ this.dialogVisible = false;
125
+ this.getList();
126
+ this.$modal.msgSuccess(msgText + "成功");
127
+ }
128
+ this.$refs.formDialog.resetLoading();
129
+ } catch (error) {
130
+ // 接口调用失败重置 loading
131
+ this.$refs.formDialog.resetLoading();
132
+ }
133
+ },
134
+
135
+ /** 查询表集合 */
136
+ getList(queryParams = {}) {
137
+ this.loading = true;
138
+ let queryData = {
139
+ ...queryParams,
140
+ ...this.queryParams,
141
+ packageName: this.packageName
142
+ }
143
+ getDevApiIotClassesList(queryData).then(response => {
144
+ this.tableData = response.rows;
145
+ this.total = response.total;
146
+ this.loading = false;
147
+ });
148
+ },
149
+
150
+ handlerTableRowClick(item) {
151
+ console.log('object :>>item ', item);
152
+ this.$router.push({
153
+ path: '/iot/packages/classes/detail',
154
+ query: {
155
+ classId: item.classId
156
+ }
157
+ })
158
+ },
159
+
160
+ // 搜索事件
161
+ handlerSearch(searchParams) {
162
+ this.queryParams = {
163
+ pageNum: 1,
164
+ pageSize: 10,
165
+ },
166
+ this.getList(searchParams);
167
+ },
168
+
169
+ //新增按钮事件
170
+ async handlerPageButton(item) {
171
+ const { type } = item;
172
+ if (type === 'Add') {
173
+ this.initFormData = {};
174
+ this.dialogJson.type = 'Add';
175
+ const packageData = await this.getPackageData()
176
+ this.$set(this.dialogJson.formJson.formItemJson[0], 'option',packageData )
177
+ console.log('object :>> ', this.dialogJson);
178
+ this.dialogVisible = true;
179
+ }
180
+
181
+ if (type === 'Delete') {
182
+ const tableIds = row.tableId || this.ids;
183
+ this.$modal.confirm('是否确认删除表编号为"' + tableIds + '"的数据项?').then(function () {
184
+ return delTable(tableIds);
185
+ }).then(() => {
186
+ this.getList();
187
+ this.$modal.msgSuccess("删除成功");
188
+ }).catch(() => { });
189
+ }
190
+ },
191
+
192
+ async getInfo(id) {
193
+ const { code, data } = await getDevApiIotClassesClassId(id);
194
+ if (code === 200) {
195
+
196
+ this.initFormData = data;
197
+ this.dialogJson.type = 'Edit';
198
+ this.dialogVisible = true;
199
+ }
200
+ },
201
+
202
+ deleteItem(id) {
203
+ this.$modal.confirm('是否确认删除该数据项?').then(function () {
204
+ return deleteDevApiIotClassesClassId(id);
205
+ }).then(() => {
206
+ this.getList();
207
+ this.$modal.msgSuccess("删除成功");
208
+ }).catch(() => { });
209
+ },
210
+
211
+ handlerButton(btnItem) {
212
+ const { row, item } = btnItem;
213
+ const { type } = item;
214
+ if (type === 'Edit') {
215
+ this.getInfo(row.classId);
216
+ }
217
+
218
+ if (type === 'Delete') {
219
+ this.deleteItem(row.classId);
220
+ }
221
+ },
222
+ },
223
+ }
224
+ </script>
225
+ <style scoped lang='scss'></style>`;
226
+ },
227
+ constantsTemplate: () => {
228
+ return `export const QueryFormJson = {
229
+ formOption: {
230
+ inline: true,
231
+ labelWidth: "100px",
232
+ size: 'small',
233
+ },
234
+ formItemJson: [
235
+ {
236
+ label: "类中文名称",
237
+ prop: "classDispname",
238
+ type: "Input",
239
+ isEnter: true,
240
+ options: {
241
+ clearable: true,
242
+ placeholder: '请输入类名称',
243
+ }
244
+ }
245
+ ],
246
+ buttonJson: {
247
+ type: 'Search',
248
+ list: [
249
+ {
250
+ label: "搜索",
251
+ type: 'Query',
252
+ options: {
253
+ icon: "el-icon-search",
254
+ size: "mini",
255
+ type: "primary"
256
+ }
257
+ },
258
+ {
259
+ label: "重置",
260
+ type: 'Reset',
261
+ options: {
262
+ icon: "el-icon-refresh",
263
+ size: "mini",
264
+ }
265
+ },
266
+ ]
267
+
268
+ }
269
+ }
270
+
271
+ export const PageButtonsJson = {
272
+ rowJson: {
273
+ gutter: 10,
274
+ },
275
+ buttonList: [
276
+ {
277
+ span: 1.5,
278
+ label: '新增',
279
+ permi: '',
280
+ type: 'Add',
281
+ options: [
282
+ {
283
+ icon: "el-icon-plus",
284
+ plain: true,
285
+ size: "mini",
286
+ type: "primary",
287
+ },
288
+
289
+ ]
290
+ }
291
+ ]
292
+ }
293
+
294
+ export const TableJson = {
295
+ columnJson: {
296
+ showSelect: false,
297
+ showIndex: true,
298
+ data: [
299
+ {
300
+ type: "index",
301
+ width: "55",
302
+ align: "left",
303
+ headerAlign: "left",
304
+ label: "序号"
305
+ },
306
+ {
307
+ align: "left",
308
+ headerAlign: "left",
309
+ label: "类中文名称",
310
+ prop: "classDispname",
311
+ showOverflowTooltip: true,
312
+ isLink: true,
313
+ },
314
+ {
315
+ align: "left",
316
+ headerAlign: "left",
317
+ label: "类英文名称",
318
+ prop: "classCode",
319
+ showOverflowTooltip: true,
320
+ },
321
+ {
322
+ align: "left",
323
+ headerAlign: "left",
324
+ label: "类类型",
325
+ prop: "classesType",
326
+ showOverflowTooltip: true,
327
+ },
328
+ {
329
+ align: "left",
330
+ headerAlign: "left",
331
+ label: "访问类型",
332
+ prop: "accessType",
333
+ showOverflowTooltip: true,
334
+ },
335
+ {
336
+ align: "left",
337
+ headerAlign: "left",
338
+ label: "实例存储表名称",
339
+ prop: "delFlag",
340
+ showOverflowTooltip: true,
341
+ },
342
+ {
343
+ align: "left",
344
+ headerAlign: "left",
345
+ label: "备注",
346
+ prop: "remark",
347
+ showOverflowTooltip: true,
348
+ },
349
+ {
350
+ align: "left",
351
+ headerAlign: "left",
352
+ label: "创建时间",
353
+ prop: "createTime",
354
+ showOverflowTooltip: true,
355
+ },
356
+ {
357
+ align: "center",
358
+ headerAlign: "center",
359
+ label: "操作",
360
+ type: "func",
361
+ buttonList: [
362
+ {
363
+ label: "编辑",
364
+ type: 'Edit',
365
+ permi: '',
366
+ options: {
367
+ icon: "el-icon-edit",
368
+ size: "mini",
369
+ type: "text",
370
+ }
371
+ },
372
+ {
373
+ label: "删除",
374
+ type: 'Delete',
375
+ permi: '',
376
+ options: {
377
+ icon: "el-icon-delete",
378
+ size: "mini",
379
+ type: "text",
380
+ }
381
+ },
382
+ ],
383
+ },
384
+ ],
385
+ },
386
+ };
387
+
388
+ export const DialogJson = {
389
+ type: 'Add',
390
+ title: "类",
391
+ options: {
392
+ width: "600px",
393
+ appendToBody: true,
394
+ destroyOnClose: true,
395
+ closeOnClickModal: false,
396
+ },
397
+ buttonList: [
398
+ {
399
+ label: "确定",
400
+ type: 'Ok',
401
+ permi: '',
402
+ options: {
403
+ type: "primary",
404
+ }
405
+ },
406
+ {
407
+ label: "取消",
408
+ type: 'Cancel',
409
+ permi: '',
410
+ options: {
411
+ type: "",
412
+ }
413
+ },
414
+ ],
415
+ formJson: {
416
+ // 表单设置
417
+ formOption: {
418
+ inline: false,
419
+ labelWidth: "120px",
420
+ size: 'small',
421
+ },
422
+ // 表单项
423
+ formItemJson: [
424
+ // {
425
+ // label: "包编码",
426
+ // prop: "packageCode",
427
+ // type: "Select",
428
+ // rules: [{ required: true, message: "请选择包编码", trigger: "change" }],
429
+ // options: {
430
+ // clearable: true,
431
+ // placeholder: "请选择包编码",
432
+ // },
433
+ // option: [],
434
+ // },
435
+ {
436
+ label: "类中文名称",
437
+ prop: "classDispname",
438
+ type: "Input",
439
+ rules: [
440
+ { required: true, message: '请输入类中文名称', trigger: 'blur' },
441
+ ],
442
+ options: {
443
+ clearable: true,
444
+ placeholder: '请输入类中文名称',
445
+ }
446
+ },
447
+ {
448
+ label: "类英文名称",
449
+ prop: "className",
450
+ type: "Input",
451
+ rules: [
452
+ { required: true, message: '请输入类英文名称', trigger: 'blur' },
453
+ {
454
+ required: true,
455
+ validator: (rule, value, callback) => {
456
+ const reg = /^[a-zA-Z]{1}\w*$/;
457
+ if (!reg.test(value)) {
458
+ callback(
459
+ new Error(
460
+ "请输入以字母(不区分大小写)、数字、下划线(_)随意组合的字符串"
461
+ )
462
+ );
463
+ }
464
+ callback();
465
+ },
466
+ trigger: ["blur"],
467
+ },
468
+ ],
469
+ options: {
470
+ clearable: true,
471
+ placeholder: '请输入类英文名称',
472
+ }
473
+ },
474
+ {
475
+ label: "类类型",
476
+ prop: "classesType",
477
+ type: "Select",
478
+ rules: [{ required: true, message: "请选择类类型", trigger: "change" }],
479
+ options: {
480
+ clearable: true,
481
+ placeholder: "请选择类型",
482
+ },
483
+ option: [
484
+ {
485
+ value: '继承',
486
+ label: '继承',
487
+ },
488
+ {
489
+ value: '虚类',
490
+ label: '虚类',
491
+ },
492
+ {
493
+ value: '实体类',
494
+ label: '实体类',
495
+ },
496
+ ],
497
+ },
498
+ {
499
+ label: "继承父类code",
500
+ prop: "classesExtends",
501
+ type: "Input",
502
+ rules: [
503
+ { required: true, message: '请输入继承父类code', trigger: 'blur' },
504
+ ],
505
+ options: {
506
+ clearable: true,
507
+ placeholder: '请输入继承父类code',
508
+ }
509
+ },
510
+ {
511
+ label: "访问类型",
512
+ prop: "accessType",
513
+ type: "Select",
514
+ rules: [{ required: true, message: "请选择访问类型", trigger: "change" }],
515
+ options: {
516
+ clearable: true,
517
+ placeholder: "请选择访问类型",
518
+ },
519
+ option: [
520
+ {
521
+ value: 'default',
522
+ label: 'default',
523
+ },
524
+ {
525
+ value: 'public',
526
+ label: 'public',
527
+ },
528
+ {
529
+ value: 'protected',
530
+ label: 'protected',
531
+ },
532
+ {
533
+ value: 'private',
534
+ label: 'private',
535
+ },
536
+ ],
537
+ },
538
+ {
539
+ label: "实例存储表名称",
540
+ prop: "objTableName",
541
+ type: "Input",
542
+ rules: [
543
+ { required: true, message: '请输入实例存储表名称', trigger: 'blur' },
544
+ ],
545
+ options: {
546
+ clearable: true,
547
+ placeholder: '请输入实例存储表名称',
548
+ }
549
+ },
550
+ {
551
+ label: "视图样式",
552
+ prop: "viewStyle",
553
+ type: "Input",
554
+ rules: [
555
+ { required: false, message: '请输入视图样式', trigger: 'blur' },
556
+ ],
557
+ options: {
558
+ clearable: true,
559
+ placeholder: '请输入视图样式',
560
+ }
561
+ },
562
+ {
563
+ label: "备注",
564
+ prop: "remark",
565
+ type: "Input",
566
+ rules: [],
567
+ options: {
568
+ clearable: true,
569
+ placeholder: '请输入备注',
570
+ type: 'textarea',
571
+ row: 4
572
+ }
573
+ },
574
+ ],
575
+ }
576
+
577
+ }`;
578
+ }
579
+ };
580
+
581
+ // 导入模板
582
+ var defaultConfig = {
583
+ // 是否命令行创建
584
+ isEnter: true,
585
+ // 文件名
586
+ name: 'genPageTable',
587
+ // 默认 view 目录下生成,如果需要指定父目录则写入 fatherFileName
588
+ path: 'dome',
589
+ // 子文件配置
590
+ child: [{
591
+ name: 'index.vue',
592
+ template: (params = {}) => {
593
+ return templateData.tablePageTemplate({
594
+ // 文件标题,替换模板
595
+ title: 'pageTable',
596
+ ...params
597
+ });
598
+ },
599
+ templateConfig: {}
600
+ }, {
601
+ name: 'constants.js',
602
+ template: (params = {}) => {
603
+ return templateData.constantsTemplate({
604
+ // 文件标题,替换模板
605
+ title: 'pageTable',
606
+ ...params
607
+ });
608
+ },
609
+ templateConfig: {
610
+ // 文件标题,替换模板
611
+ title: ''
612
+ }
613
+ }]
614
+ };
615
+
616
+ const __dirname = getDirname();
617
+ const resolve = (...file) => require$$0$1.resolve(__dirname, ...file);
618
+
619
+ // 模板配置
620
+ const globalConfig = await getGlobalConfig('genPageConfig');
621
+ if (globalConfig) {
622
+ errorLog('全局模板未配置,使用默认配置');
623
+ }
624
+ const config = globalConfig || defaultConfig;
625
+
626
+ // 生成文件
627
+ const generateFile = (path, data) => {
628
+ if (require$$0.existsSync(path)) {
629
+ errorLog(`${path}文件已存在`);
630
+ return;
631
+ }
632
+ require$$0.writeFileSync(path, data, 'utf8', err => {
633
+ if (err) {
634
+ errorLog(err.message);
635
+ reject(err);
636
+ } else {
637
+ resolve(true);
638
+ }
639
+ });
640
+ };
641
+ function dotExistDirectoryCreate(directory) {
642
+ return new Promise(resolve => {
643
+ mkdirs(directory, function () {
644
+ resolve(true);
645
+ });
646
+ });
647
+ }
648
+ // 递归创建目录
649
+ function mkdirs(directory, callback) {
650
+ var exists = require$$0.existsSync(directory);
651
+ if (exists) {
652
+ callback();
653
+ } else {
654
+ mkdirs(require$$0$1.dirname(directory), function () {
655
+ require$$0.mkdirSync(directory);
656
+ callback();
657
+ });
658
+ }
659
+ }
660
+ async function genPageProcess(enterName) {
661
+ // 组件名称
662
+ const pageName = !enterName ? config.name : enterName;
663
+ // Vue页面组件路径
664
+ const pathStr = !config.path ? `${process.env.PWD}/src/views` : `${process.env.PWD}/src/views/${config.path}`;
665
+ const pagePath = resolve(pathStr, pageName);
666
+
667
+ // 判断组件文件夹是否存在
668
+ const hasComponentExists = require$$0.existsSync(pagePath);
669
+ if (hasComponentExists) {
670
+ errorLog(`${pageName}页面已存在`);
671
+ if (pageName) {
672
+ process.stdin.emit('end');
673
+ }
674
+ return;
675
+ } else {
676
+ log(`正在生成${pageName}目录 ${pagePath}`);
677
+ await dotExistDirectoryCreate(pagePath);
678
+ }
679
+ try {
680
+ // // 获取组件名
681
+ // if (enterName.includes('/')) {
682
+ // const inputArr = enterName.split('/')
683
+ // pageName = inputArr[inputArr.length - 1]
684
+ // } else {
685
+ // pageName = enterName
686
+ // }
687
+
688
+ config.child.forEach(item => {
689
+ const filePath = resolve(pagePath, item.name);
690
+ log(`正在生成子文件${item.name} ${filePath}`);
691
+ generateFile(filePath, item.template({
692
+ name: pageName
693
+ }));
694
+ });
695
+ successLog('生成成功');
696
+ } catch (e) {
697
+ errorLog(e.message);
698
+ }
699
+ }
700
+ function genPage() {
701
+ if (!config.isEnter) {
702
+ genPageProcess();
703
+ } else {
704
+ log('请输入要生成的页面组件名称、会生成在 views/目录下');
705
+ process.stdin.on('data', async chunk => {
706
+ // 组件名称
707
+ const enterName = String(chunk).trim().toString();
708
+ genPageProcess(enterName);
709
+ process.stdin.emit('end');
710
+ });
711
+ process.stdin.on('end', () => {
712
+ log('exit');
713
+ process.exit();
714
+ });
715
+ }
716
+ }
717
+ genPage();