@ajaxjs/ui 1.1.2 → 1.1.3

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 (84) hide show
  1. package/README.md +4 -24
  2. package/dist/css/app.11ca79dd.css +1 -0
  3. package/dist/index.d.ts +31 -0
  4. package/dist/index.html +1 -0
  5. package/dist/index.js +56 -3
  6. package/dist/index.js.map +1 -1
  7. package/dist/js/app.44da9bce.js +2 -0
  8. package/dist/js/app.44da9bce.js.map +1 -0
  9. package/dist/js/chunk-vendors.0d9e9c3a.js +8 -0
  10. package/dist/js/chunk-vendors.0d9e9c3a.js.map +1 -0
  11. package/dist/main.d.ts +1 -0
  12. package/dist/main.js +14 -9
  13. package/dist/main.js.map +1 -1
  14. package/dist/router/index.d.ts +3 -0
  15. package/dist/router/index.js +36 -28
  16. package/dist/router/index.js.map +1 -1
  17. package/dist/shims-vue.d.ts +4 -0
  18. package/dist/util/cookies.d.ts +18 -0
  19. package/dist/util/cookies.js +46 -0
  20. package/dist/util/cookies.js.map +1 -0
  21. package/dist/util/dom.d.ts +17 -0
  22. package/dist/util/dom.js +44 -0
  23. package/dist/util/dom.js.map +1 -0
  24. package/dist/util/system/config.d.ts +13 -0
  25. package/dist/util/system/config.js +84 -0
  26. package/dist/util/system/config.js.map +1 -0
  27. package/dist/util/utils.d.ts +44 -0
  28. package/dist/util/utils.js +140 -0
  29. package/dist/util/utils.js.map +1 -0
  30. package/dist/util/xhr-config.d.ts +22 -0
  31. package/dist/util/xhr-config.js +3 -0
  32. package/dist/util/xhr-config.js.map +1 -0
  33. package/dist/util/xhr.d.ts +71 -0
  34. package/dist/util/xhr.js +262 -0
  35. package/dist/util/xhr.js.map +1 -0
  36. package/dist/{components/widgets → widget}/AccordionMenu.vue +139 -137
  37. package/dist/{components/widgets → widget}/AdjustFontSize.vue +65 -65
  38. package/dist/{components/widgets → widget}/Article.vue +58 -48
  39. package/dist/{components/widgets → widget}/BaiduSearch.vue +49 -49
  40. package/dist/widget/EmptyContent.d.ts +5 -0
  41. package/dist/widget/EmptyContent.js +7 -0
  42. package/dist/widget/EmptyContent.js.map +1 -0
  43. package/dist/{components/widgets → widget}/Expander.vue +64 -64
  44. package/dist/widget/FileUploader/FileUploader.d.ts +70 -0
  45. package/dist/{components/form → widget}/FileUploader/FileUploader.js +40 -5
  46. package/dist/widget/FileUploader/FileUploader.js.map +1 -0
  47. package/dist/{components/form → widget}/FileUploader/FileUploader.less +67 -54
  48. package/dist/{components/form → widget}/FileUploader/FileUploader.ts +155 -120
  49. package/dist/widget/FileUploader/FileUploader.vue +43 -0
  50. package/dist/widget/HtmlEditor/HtmlEditor.d.ts +70 -0
  51. package/dist/{components/form → widget}/HtmlEditor/HtmlEditor.js +10 -7
  52. package/dist/widget/HtmlEditor/HtmlEditor.js.map +1 -0
  53. package/dist/{components/form → widget}/HtmlEditor/HtmlEditor.less +344 -344
  54. package/dist/{components/form → widget}/HtmlEditor/HtmlEditor.ts +338 -336
  55. package/dist/{components/form → widget}/HtmlEditor/HtmlEditor.vue +69 -69
  56. package/dist/{components/form → widget}/HtmlEditor/html-editor-HtmlSanitizer.js +102 -102
  57. package/dist/{components/widgets → widget}/ImageEnlarger.vue +104 -98
  58. package/dist/{components/widgets → widget}/OpacityBanner.vue +124 -123
  59. package/dist/{components/widgets → widget}/ProcessLine.vue +132 -132
  60. package/dist/widget/Resize.d.ts +51 -0
  61. package/dist/widget/Resize.js +133 -0
  62. package/dist/widget/Resize.js.map +1 -0
  63. package/dist/widget/Resize.ts +152 -0
  64. package/dist/widget/Resize.vue +104 -0
  65. package/dist/widget/TreeSelector.vue +4 -0
  66. package/dist/widget/calendar/BetweenDate.vue +63 -0
  67. package/dist/widget/calendar/Calendar.d.ts +55 -0
  68. package/dist/widget/calendar/Calendar.js +145 -0
  69. package/dist/widget/calendar/Calendar.js.map +1 -0
  70. package/dist/widget/calendar/Calendar.less +208 -0
  71. package/dist/widget/calendar/Calendar.ts +167 -0
  72. package/dist/widget/calendar/Calendar.vue +52 -0
  73. package/dist/widget/calendar/CalendarInput.vue +71 -0
  74. package/dist/widget/form/validator.d.ts +72 -0
  75. package/dist/widget/form/validator.js +222 -0
  76. package/dist/widget/form/validator.js.map +1 -0
  77. package/dist/widget/form/validator.ts +290 -0
  78. package/dist/widget/play-ground/sku.vue +93 -0
  79. package/package.json +36 -33
  80. package/dist/components/form/AjSelect.vue +0 -33
  81. package/dist/components/form/FileUploader/FileUploader.js.map +0 -1
  82. package/dist/components/form/FileUploader/FileUploader.vue +0 -26
  83. package/dist/components/form/HtmlEditor/HtmlEditor.js.map +0 -1
  84. package/dist/components/form/TreeLikeSelect.vue +0 -125
@@ -1,55 +1,68 @@
1
- .aj-file-uploader {
2
- width: 300px;
3
-
4
- &>* {
5
- display: inline-block;
6
- vertical-align: middle;
7
- }
8
-
9
- label {
10
- margin-right: 2%;
11
-
12
- &>div {
13
- border: 1px solid lightgray;
14
- border-radius: 5px;
15
- text-align: center;
16
- color: gray;
17
- cursor: pointer;
18
- font-size: 0.8rem;
19
- padding: 10px;
20
- padding-bottom: 25px;
21
- width: 100px;
22
- height: 70px;
23
- transition: border-color linear 300ms, color linear 300ms;
24
-
25
- &:hover {
26
- border-color: gray;
27
- color: black;
28
- }
29
-
30
- &>div {
31
- font-size: 2rem;
32
- }
33
- }
34
- }
35
-
36
- button {
37
- min-width: 110px;
38
- }
39
-
40
- input[type="file"] {
41
- display: none;
42
- }
43
-
44
- .msg {
45
- font-size: 0.8rem;
46
- color: gray;
47
- max-width: 50%;
48
- word-break: break-word;
49
- text-overflow: ellipsis;
50
-
51
- &>div {
52
- font-size: 0.75rem;
53
- }
54
- }
1
+ .aj-file-uploader {
2
+ width: 360px;
3
+
4
+ &>* {
5
+ display: inline-block;
6
+ vertical-align: middle;
7
+ }
8
+
9
+ label {
10
+ margin-right: 2%;
11
+
12
+ &>div {
13
+ border: 1px solid lightgray;
14
+ border-radius: 5px;
15
+ text-align: center;
16
+ color: gray;
17
+ cursor: pointer;
18
+ font-size: 0.8rem;
19
+ padding: 10px;
20
+ padding-bottom: 25px;
21
+ width: 100px;
22
+ height: 70px;
23
+ transition: border-color linear 300ms, color linear 300ms;
24
+
25
+ &:hover {
26
+ border-color: gray;
27
+ color: black;
28
+ }
29
+
30
+ &>div {
31
+ font-size: 2rem;
32
+ }
33
+ }
34
+ }
35
+
36
+ button {
37
+ min-width: 110px;
38
+ }
39
+
40
+ input[type="file"] {
41
+ display: none;
42
+ }
43
+
44
+ .msg {
45
+ font-size: 0.8rem;
46
+ color: gray;
47
+ max-width: 50%;
48
+ word-break: break-word;
49
+ text-overflow: ellipsis;
50
+
51
+ &>div {
52
+ font-size: 0.75rem;
53
+ }
54
+ }
55
+
56
+ .perviewImg {
57
+ max-width: 260px;
58
+ }
59
+
60
+ .fileName {
61
+ // display: inline-block;
62
+ text-overflow: ellipsis; //溢出用省略号显示
63
+ white-space: nowrap; //溢出不换行
64
+ max-width: 120px;
65
+ max-height: 20px;
66
+ overflow: hidden;
67
+ }
55
68
  }
@@ -1,121 +1,156 @@
1
- export default {
2
- props: {
3
- action: { type: String, required: true }, // 上传路径
4
- limitSize: { type: Number, default: 20000 }, // 文件大小限制
5
- limitFileType: String,
6
- accpectFileType: String, // 可以上传类型
7
- buttonBottom: Boolean, // 上传按钮是否位于下方
8
- radomId: {
9
- type: Number, default() { // 不重复的 id,用关于关联 label 与 input[type=file]
10
- return Math.round(Math.random() * 1000);
11
- },
12
- },
13
- },
14
-
15
- data() {
16
- return {
17
- model: { children: [] },
18
- open: false,
19
- allowAddNode: false,
20
- // isFolder : false
21
- fileName: '', // 获取文件名称,只能是名称,不能获取完整的文件目录
22
- fileSize: 0, // 文件大小
23
- progress: 0, // 上传进度百分比
24
- errMsg: '', // 错误信息。约定:只有为空字符串,才表示允许上传。
25
- newlyId: '' // 成功上传之后的文件 id
26
- }
27
- },
28
-
29
- methods: {
30
- /**
31
- * 选择文件后触发的事件
32
- *
33
- * @param ev
34
- */
35
- onUploadInputChange(ev: Event): void {
36
- let fileInput: HTMLInputElement = <HTMLInputElement>ev.target;
37
- if (!fileInput.files || !fileInput.files[0]) return;
38
-
39
- // this.errStatus = [false, false, false];
40
- this.onFileGet(fileInput.files);
41
- },
42
-
43
- onDrop(ev: DragEvent): void {
44
- ev.preventDefault(); // 阻止进行拖拽时浏览器的默认行为,即自动打开图片
45
-
46
- if (ev.dataTransfer?.files) this.onFileGet(ev.dataTransfer.files);
47
- },
48
-
49
- onFileGet(files: FileList): void {
50
- let file: File = files[0],
51
- fileType: string = file.type;
52
-
53
- this.$fileObj = file;
54
- this.fileName = file.name;
55
- this.fileSize = file.size;
56
- },
57
- /**
58
- * 执行上传
59
- *
60
- * @param this
61
- */
62
- doUpload(): void {
63
- // this.$uploadOk_callback({ isOk: true, msg: "ok!", imgUrl: "fdfdf" });
64
- // return;
65
-
66
- let fd: FormData = new FormData();
67
-
68
- if (this.$blob) fd.append("file", this.$blob, this.fileName);
69
- else if (this.$fileObj) fd.append("file", this.$fileObj);
70
-
71
- let xhr: XMLHttpRequest = new XMLHttpRequest();
72
- //@ts-ignore
73
- xhr.onreadystatechange = aj.xhr.requestHandler.delegate(
74
- null,
75
- this.$uploadOk_callback,
76
- "json"
77
- );
78
- xhr.open("POST", this.action, true);
79
- xhr.onprogress = (ev: ProgressEvent) => {
80
- let progress: number = 0,
81
- p: number = ~~((ev.loaded * 1000) / ev.total);
82
- p = p / 10;
83
-
84
- if (progress !== p) progress = p;
85
-
86
- this.progress = progress;
87
- };
88
-
89
- xhr.send(fd);
90
- },
91
- }
92
- }
93
-
94
- /**
95
- * 字节 Byte 转化成 KB,MB,GB
96
- *
97
- * @param limit
98
- */
99
- function changeByte(limit: number): string {
100
- let size: string = "";
101
-
102
- if (limit < 0.1 * 1024)
103
- // 小于 0.1KB,则转化成 B
104
- size = limit.toFixed(2) + "B";
105
- else if (limit < 0.1 * 1024 * 1024)
106
- // 小于 0.1MB,则转化成 KB
107
- size = (limit / 1024).toFixed(2) + "KB";
108
- else if (limit < 0.1 * 1024 * 1024 * 1024)
109
- // 小于 0.1GB,则转化成 MB
110
- size = (limit / (1024 * 1024)).toFixed(2) + "MB";
111
- // 其他转化成 GB
112
- else size = (limit / (1024 * 1024 * 1024)).toFixed(2) + "GB";
113
-
114
- let index = size.indexOf("."); // 获取小数点处的索引
115
-
116
- if (size.substr(index + 1, 2) == "00")
117
- // 获取小数点后两位的值,判断后两位是否为 00,如果是则删除 00
118
- return size.substring(0, index) + size.substr(index + 3, 2);
119
-
120
- return size;
1
+ import Empty from '../EmptyContent';
2
+
3
+ export default {
4
+ props: {
5
+ action: { type: String, required: false }, // 上传路径
6
+ limitSize: { type: Number, default: 20000 }, // 文件大小限制
7
+ limitFileType: String,
8
+ isImgUpload: Boolean,
9
+ isShowBtn: { type: Boolean, default: true },
10
+ accpectFileType: {
11
+ type: String, default() {
12
+ if (this.isImgUpload)
13
+ return 'image/*';
14
+ }
15
+ }, // 可以上传类型 如 image/*
16
+ buttonBottom: Boolean, // 上传按钮是否位于下方
17
+ radomId: {
18
+ type: Number, default() { // 不重复的 id,用关于关联 label 与 input[type=file]
19
+ return Math.round(Math.random() * 1000);
20
+ },
21
+ },
22
+ },
23
+
24
+ data() {
25
+ return {
26
+ model: { children: [] },
27
+ imgSrc: Empty.empty,
28
+ open: false,
29
+ allowAddNode: false,
30
+ // isFolder : false
31
+ fileName: '', // 获取文件名称,只能是名称,不能获取完整的文件目录
32
+ fileSize: 0, // 文件大小
33
+ progress: 0, // 上传进度百分比
34
+ errMsg: '', // 错误信息。约定:只有为空字符串,才表示允许上传。
35
+ newlyId: '', // 成功上传之后的文件 id
36
+ fileObj: null
37
+ }
38
+ },
39
+
40
+ methods: {
41
+ /**
42
+ * 选择文件后触发的事件
43
+ *
44
+ * @param ev
45
+ */
46
+ onUploadInputChange(ev: Event): void {
47
+ let fileInput: HTMLInputElement = <HTMLInputElement>ev.target;
48
+ if (!fileInput.files || !fileInput.files[0]) return;
49
+
50
+ // this.errStatus = [false, false, false];
51
+ this.onFileGet(fileInput.files);
52
+
53
+ let file: File = fileInput.files[0];
54
+ this.fileObj = file;
55
+
56
+ if (this.isImgUpload) {
57
+ let reader: FileReader = new FileReader();
58
+ reader.onload = (e) => {
59
+ let imgBase64: string = <string>e.target.result; // 得到了图片的 base64 编码
60
+ // alert(imgBase64Str);
61
+ this.imgSrc = imgBase64;
62
+ }
63
+
64
+ reader.readAsDataURL(file);
65
+ }
66
+ },
67
+
68
+ /**
69
+ * 返回 File 对象,在表单混合上传时候有用
70
+ * @returns
71
+ */
72
+ getFileObj(): File {
73
+ return this.fileObj;
74
+ },
75
+
76
+ onDrop(ev: DragEvent): void {
77
+ ev.preventDefault(); // 阻止进行拖拽时浏览器的默认行为,即自动打开图片
78
+
79
+ if (ev.dataTransfer?.files) this.onFileGet(ev.dataTransfer.files);
80
+ },
81
+
82
+ onFileGet(files: FileList): void {
83
+ let file: File = files[0],
84
+ fileType: string = file.type;
85
+
86
+ this.$fileObj = file;
87
+ this.fileName = file.name;
88
+ this.fileSize = file.size;
89
+ },
90
+ /**
91
+ * 执行上传
92
+ *
93
+ * @param this
94
+ */
95
+ doUpload(): void {
96
+ // this.$uploadOk_callback({ isOk: true, msg: "ok!", imgUrl: "fdfdf" });
97
+ // return;
98
+
99
+ let fd: FormData = new FormData();
100
+
101
+ if (this.$blob) fd.append("file", this.$blob, this.fileName);
102
+ else if (this.$fileObj) fd.append("file", this.$fileObj);
103
+
104
+ let xhr: XMLHttpRequest = new XMLHttpRequest();
105
+ //@ts-ignore
106
+ xhr.onreadystatechange = aj.xhr.requestHandler.delegate(
107
+ null,
108
+ this.$uploadOk_callback,
109
+ "json"
110
+ );
111
+ xhr.open("POST", this.action, true);
112
+ xhr.onprogress = (ev: ProgressEvent) => {
113
+ let progress: number = 0,
114
+ p: number = ~~((ev.loaded * 1000) / ev.total);
115
+ p = p / 10;
116
+
117
+ if (progress !== p) progress = p;
118
+
119
+ this.progress = progress;
120
+ };
121
+
122
+ xhr.send(fd);
123
+ },
124
+
125
+ changeByte: changeByte
126
+ }
127
+ }
128
+
129
+ /**
130
+ * 字节 Byte 转化成 KB,MB,GB
131
+ *
132
+ * @param limit
133
+ */
134
+ function changeByte(limit: number): string {
135
+ let size: string = "";
136
+
137
+ if (limit < 0.1 * 1024)
138
+ // 小于 0.1KB,则转化成 B
139
+ size = limit.toFixed(2) + "B";
140
+ else if (limit < 0.1 * 1024 * 1024)
141
+ // 小于 0.1MB,则转化成 KB
142
+ size = (limit / 1024).toFixed(2) + "KB";
143
+ else if (limit < 0.1 * 1024 * 1024 * 1024)
144
+ // 小于 0.1GB,则转化成 MB
145
+ size = (limit / (1024 * 1024)).toFixed(2) + "MB";
146
+ // 其他转化成 GB
147
+ else size = (limit / (1024 * 1024 * 1024)).toFixed(2) + "GB";
148
+
149
+ let index = size.indexOf("."); // 获取小数点处的索引
150
+
151
+ if (size.substr(index + 1, 2) == "00")
152
+ // 获取小数点后两位的值,判断后两位是否为 00,如果是则删除 00
153
+ return size.substring(0, index) + size.substr(index + 3, 2);
154
+
155
+ return size;
121
156
  }
@@ -0,0 +1,43 @@
1
+ <template>
2
+ <div class="aj-file-uploader">
3
+ <div v-if="isImgUpload">
4
+ <img class="perviewImg" :src='imgSrc' />
5
+ <br />
6
+ </div>
7
+
8
+ <table>
9
+ <tr>
10
+ <td>
11
+ <input type="file" :id="'uploadInput_' + radomId" @change="onUploadInputChange" :accept="accpectFileType" />
12
+
13
+ <label class="pseudoFilePicker" :for="'uploadInput_' + radomId">
14
+ <div @drop="onDrop" ondragover="event.preventDefault();">
15
+ <div>+</div>点击选择文件<br />或拖放到此
16
+ </div>
17
+ </label>
18
+
19
+ </td>
20
+ <td>
21
+ <div class="msg" v-if="errMsg != ''">
22
+ 允许类型:{{limitFileType || '无限制'}}
23
+ <br />
24
+ 允许大小:{{limitSize ? changeByte(limitSize * 1024) : '无限制'}}
25
+ <span class="slot"></span>
26
+ </div>
27
+
28
+ <div class="msg" v-if="errMsg == ''">
29
+ <div class="fileName" :title="'本地文件名: ' + fileName">{{fileName}}</div>
30
+ <div v-if="fileSize">{{changeByte(fileSize)}}</div>
31
+ <button @click.prevent="doUpload" v-if="isShowBtn">{{progress && progress !== 100 ? '上传中 ' + progress + '%': '上传'}}</button>
32
+ </div>
33
+ </td>
34
+ </tr>
35
+
36
+ </table>
37
+
38
+ </div>
39
+ </template>
40
+
41
+ <script lang="ts" src="./FileUploader.ts"></script>
42
+
43
+ <style lang="less" src="./FileUploader.less"></style>
@@ -0,0 +1,70 @@
1
+ declare const _default: {
2
+ props: {
3
+ vModel: StringConstructor;
4
+ uploadImageActionUrl: StringConstructor;
5
+ isIonicons: BooleanConstructor;
6
+ };
7
+ data(): any;
8
+ mounted(): void;
9
+ methods: {
10
+ /**
11
+ * 输入 HTML 内容
12
+ *
13
+ * @param html
14
+ */
15
+ setIframeBody(html: string): void;
16
+ /**
17
+ * 获取内容的 HTML
18
+ *
19
+ * @param cleanWord 是否清理冗余标签
20
+ * @param encode 是否 URL 编码
21
+ */
22
+ getValue(cleanWord: boolean, encode: boolean): string;
23
+ createLink(): void;
24
+ insertImage(): void;
25
+ /**
26
+ * 清理冗余 HTML
27
+ */
28
+ cleanHTML(): void;
29
+ saveRemoteImage2Local(): void;
30
+ /**
31
+ * 当工具条点击的时候触发
32
+ *
33
+ * @param ev
34
+ */
35
+ onCmdClk(ev: Event): void;
36
+ /**
37
+ * 通过 document.execCommand() 来操纵可编辑内容区域的元素
38
+ *
39
+ * @param type 命令的名称
40
+ * @param para 一些命令(例如 insertImage)需要额外的参数(insertImage 需要提供插入 image 的 url),默认为 null
41
+ */
42
+ format(type: string, para?: string): void;
43
+ /**
44
+ * 选择字号大小
45
+ *
46
+ * @param ev
47
+ */
48
+ onFontsizeChoserClk(ev: Event): void;
49
+ /**
50
+ * 选择字体
51
+ *
52
+ * @param ev
53
+ */
54
+ onFontfamilyChoserClk(ev: Event): void;
55
+ /**
56
+ * 创建颜色选择器
57
+ */
58
+ createColorPickerHTML(): string;
59
+ };
60
+ watch: {
61
+ vModel(newHtml: string, oldHtml: string): void;
62
+ /**
63
+ * 切換 HTML 編輯 or 可視化編輯
64
+ *
65
+ * @param n
66
+ */
67
+ isShowCode(n: boolean): void;
68
+ };
69
+ };
70
+ export default _default;
@@ -1,8 +1,10 @@
1
- export default {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = {
2
4
  props: {
3
5
  vModel: String,
4
6
  uploadImageActionUrl: String,
5
- isIonicons: Boolean //是否使用 ionicons 图标
7
+ isIonicons: Boolean // 是否使用 ionicons 图标
6
8
  },
7
9
  data() {
8
10
  return {
@@ -105,7 +107,7 @@ export default {
105
107
  this.iframeDoc.execCommand(type, false, para);
106
108
  else
107
109
  this.iframeDoc.execCommand(type, false);
108
- this.iframeEl.contentWindow.focus();
110
+ // (<Window>this.iframeEl.contentWindow).focus();
109
111
  },
110
112
  /**
111
113
  * 选择字号大小
@@ -162,10 +164,11 @@ export default {
162
164
  }
163
165
  },
164
166
  watch: {
165
- vModel(html) {
166
- if (!html)
167
- html = '';
168
- this.setIframeBody(html);
167
+ vModel(newHtml, oldHtml) {
168
+ // if (!html)
169
+ // html = '';
170
+ if (!oldHtml) // 当没有值的时候输入,就是在初始化的时候(第一次)
171
+ this.setIframeBody(newHtml);
169
172
  },
170
173
  /**
171
174
  * 切換 HTML 編輯 or 可視化編輯
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HtmlEditor.js","sourceRoot":"","sources":["../../../src/widget/HtmlEditor/HtmlEditor.ts"],"names":[],"mappings":"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"}