doctor-admin-components 1.0.4 → 1.0.6-beta.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 (218) hide show
  1. package/lib/index.common.js +399 -321
  2. package/lib/index.css +1 -1
  3. package/lib/index.umd.js +399 -321
  4. package/lib/index.umd.min.js +43 -43
  5. package/package.json +4 -3
  6. package/packages/Button/index.js +16 -0
  7. package/packages/Button/src/index.vue +33 -0
  8. package/packages/index.js +122 -0
  9. package/packages/src/api/biz/bizCompanyBillGoods.js +61 -0
  10. package/packages/src/api/biz/bizContainer.js +86 -0
  11. package/packages/src/api/biz/bizContainerDetail.js +61 -0
  12. package/packages/src/api/biz/bizContract.js +112 -0
  13. package/packages/src/api/biz/bizContractCompany.js +53 -0
  14. package/packages/src/api/biz/bizContractDetail.js +62 -0
  15. package/packages/src/api/biz/bizContractDispute.js +53 -0
  16. package/packages/src/api/biz/bizDealRecord.js +87 -0
  17. package/packages/src/api/biz/bizFileInfo.js +53 -0
  18. package/packages/src/api/biz/bizInvoice.js +161 -0
  19. package/packages/src/api/biz/bizInvoiceExtraCosts.js +53 -0
  20. package/packages/src/api/biz/bizShipment.js +113 -0
  21. package/packages/src/api/biz/companyInfo.js +61 -0
  22. package/packages/src/api/biz/dictData.js +77 -0
  23. package/packages/src/api/biz/track.js +21 -0
  24. package/packages/src/api/system/dict/data.js +60 -0
  25. package/packages/src/api/system/dict/type.js +68 -0
  26. package/packages/src/assets/icons/index.js +17 -0
  27. package/packages/src/assets/icons/svg/404.svg +1 -0
  28. package/packages/src/assets/icons/svg/bug.svg +1 -0
  29. package/packages/src/assets/icons/svg/build.svg +1 -0
  30. package/packages/src/assets/icons/svg/button.svg +1 -0
  31. package/packages/src/assets/icons/svg/cascader.svg +1 -0
  32. package/packages/src/assets/icons/svg/chart.svg +1 -0
  33. package/packages/src/assets/icons/svg/checkbox.svg +1 -0
  34. package/packages/src/assets/icons/svg/clipboard.svg +1 -0
  35. package/packages/src/assets/icons/svg/code.svg +1 -0
  36. package/packages/src/assets/icons/svg/color.svg +1 -0
  37. package/packages/src/assets/icons/svg/component.svg +1 -0
  38. package/packages/src/assets/icons/svg/dashboard.svg +1 -0
  39. package/packages/src/assets/icons/svg/date-range.svg +1 -0
  40. package/packages/src/assets/icons/svg/date.svg +1 -0
  41. package/packages/src/assets/icons/svg/dict.svg +1 -0
  42. package/packages/src/assets/icons/svg/documentation.svg +1 -0
  43. package/packages/src/assets/icons/svg/download.svg +1 -0
  44. package/packages/src/assets/icons/svg/drag.svg +1 -0
  45. package/packages/src/assets/icons/svg/druid.svg +1 -0
  46. package/packages/src/assets/icons/svg/edit.svg +1 -0
  47. package/packages/src/assets/icons/svg/education.svg +1 -0
  48. package/packages/src/assets/icons/svg/email.svg +1 -0
  49. package/packages/src/assets/icons/svg/example.svg +1 -0
  50. package/packages/src/assets/icons/svg/excel.svg +1 -0
  51. package/packages/src/assets/icons/svg/exit-fullscreen.svg +1 -0
  52. package/packages/src/assets/icons/svg/eye-open.svg +1 -0
  53. package/packages/src/assets/icons/svg/eye.svg +1 -0
  54. package/packages/src/assets/icons/svg/form.svg +1 -0
  55. package/packages/src/assets/icons/svg/fullscreen.svg +1 -0
  56. package/packages/src/assets/icons/svg/github.svg +1 -0
  57. package/packages/src/assets/icons/svg/guide.svg +1 -0
  58. package/packages/src/assets/icons/svg/icon.svg +1 -0
  59. package/packages/src/assets/icons/svg/input.svg +1 -0
  60. package/packages/src/assets/icons/svg/international.svg +1 -0
  61. package/packages/src/assets/icons/svg/job.svg +1 -0
  62. package/packages/src/assets/icons/svg/language.svg +1 -0
  63. package/packages/src/assets/icons/svg/link.svg +1 -0
  64. package/packages/src/assets/icons/svg/list.svg +1 -0
  65. package/packages/src/assets/icons/svg/lock.svg +1 -0
  66. package/packages/src/assets/icons/svg/log.svg +1 -0
  67. package/packages/src/assets/icons/svg/logininfor.svg +1 -0
  68. package/packages/src/assets/icons/svg/message.svg +1 -0
  69. package/packages/src/assets/icons/svg/money.svg +1 -0
  70. package/packages/src/assets/icons/svg/monitor.svg +2 -0
  71. package/packages/src/assets/icons/svg/nested.svg +1 -0
  72. package/packages/src/assets/icons/svg/number.svg +1 -0
  73. package/packages/src/assets/icons/svg/online.svg +1 -0
  74. package/packages/src/assets/icons/svg/password.svg +1 -0
  75. package/packages/src/assets/icons/svg/pdf.svg +1 -0
  76. package/packages/src/assets/icons/svg/people.svg +1 -0
  77. package/packages/src/assets/icons/svg/peoples.svg +1 -0
  78. package/packages/src/assets/icons/svg/phone.svg +1 -0
  79. package/packages/src/assets/icons/svg/post.svg +1 -0
  80. package/packages/src/assets/icons/svg/qq.svg +1 -0
  81. package/packages/src/assets/icons/svg/question.svg +1 -0
  82. package/packages/src/assets/icons/svg/radio.svg +1 -0
  83. package/packages/src/assets/icons/svg/rate.svg +1 -0
  84. package/packages/src/assets/icons/svg/redis.svg +1 -0
  85. package/packages/src/assets/icons/svg/row.svg +1 -0
  86. package/packages/src/assets/icons/svg/search.svg +1 -0
  87. package/packages/src/assets/icons/svg/select.svg +1 -0
  88. package/packages/src/assets/icons/svg/server.svg +1 -0
  89. package/packages/src/assets/icons/svg/shopping.svg +1 -0
  90. package/packages/src/assets/icons/svg/size.svg +1 -0
  91. package/packages/src/assets/icons/svg/skill.svg +1 -0
  92. package/packages/src/assets/icons/svg/slider.svg +1 -0
  93. package/packages/src/assets/icons/svg/star.svg +1 -0
  94. package/packages/src/assets/icons/svg/swagger.svg +1 -0
  95. package/packages/src/assets/icons/svg/switch.svg +1 -0
  96. package/packages/src/assets/icons/svg/system.svg +2 -0
  97. package/packages/src/assets/icons/svg/tab.svg +1 -0
  98. package/packages/src/assets/icons/svg/table.svg +1 -0
  99. package/packages/src/assets/icons/svg/textarea.svg +1 -0
  100. package/packages/src/assets/icons/svg/theme.svg +1 -0
  101. package/packages/src/assets/icons/svg/time-range.svg +1 -0
  102. package/packages/src/assets/icons/svg/time.svg +1 -0
  103. package/packages/src/assets/icons/svg/tool.svg +1 -0
  104. package/packages/src/assets/icons/svg/tree-table.svg +1 -0
  105. package/packages/src/assets/icons/svg/tree.svg +1 -0
  106. package/packages/src/assets/icons/svg/upload.svg +1 -0
  107. package/packages/src/assets/icons/svg/user.svg +1 -0
  108. package/packages/src/assets/icons/svg/validCode.svg +1 -0
  109. package/packages/src/assets/icons/svg/warn.svg +1 -0
  110. package/packages/src/assets/icons/svg/wechat.svg +1 -0
  111. package/packages/src/assets/icons/svg/zip.svg +1 -0
  112. package/packages/src/assets/icons/svgo.yml +22 -0
  113. package/packages/src/assets/images/file.png +0 -0
  114. package/packages/src/assets/images/pdf.png +0 -0
  115. package/packages/src/assets/styles/btn.scss +99 -0
  116. package/packages/src/assets/styles/element-ui.scss +92 -0
  117. package/packages/src/assets/styles/element-variables.scss +31 -0
  118. package/packages/src/assets/styles/index.scss +191 -0
  119. package/packages/src/assets/styles/mixin.scss +66 -0
  120. package/packages/src/assets/styles/ruoyi.scss +273 -0
  121. package/packages/src/assets/styles/sidebar.scss +223 -0
  122. package/packages/src/assets/styles/transition.scss +48 -0
  123. package/packages/src/assets/styles/variables.scss +54 -0
  124. package/packages/src/components/DictData/index.js +29 -0
  125. package/packages/src/components/DictTag/index.vue +65 -0
  126. package/packages/src/components/FileUpload/aliyun.vue +350 -0
  127. package/packages/src/components/FileUpload/apk.vue +360 -0
  128. package/packages/src/components/FileUpload/contract-drag.vue +268 -0
  129. package/packages/src/components/FileUpload/contract.vue +239 -0
  130. package/packages/src/components/FileUpload/index.vue +229 -0
  131. package/packages/src/components/FileUpload/s3.vue +244 -0
  132. package/packages/src/components/FileUpload/uploadInvoice.vue +270 -0
  133. package/packages/src/components/ImagePreview/index.vue +92 -0
  134. package/packages/src/components/ImageUpload/aliyun.vue +257 -0
  135. package/packages/src/components/ImageUpload/index.vue +192 -0
  136. package/packages/src/components/ImageUpload/s3.vue +243 -0
  137. package/packages/src/components/ImageUpload/shrinkS3.vue +253 -0
  138. package/packages/src/components/SvgIcon/index.vue +69 -0
  139. package/packages/src/index.js +24 -0
  140. package/packages/src/lang/en.json +225 -0
  141. package/packages/src/lang/zh.json +224 -0
  142. package/packages/src/lib-components/zpw-button.vue +53 -0
  143. package/packages/src/lib-components/zpw-com-test-sample.vue +78 -0
  144. package/packages/src/plugins/auth.js +68 -0
  145. package/packages/src/plugins/cache.js +77 -0
  146. package/packages/src/plugins/download.js +80 -0
  147. package/packages/src/plugins/index.js +28 -0
  148. package/packages/src/plugins/modal.js +83 -0
  149. package/packages/src/plugins/tab.js +75 -0
  150. package/packages/src/router/index.js +339 -0
  151. package/packages/src/store/getters.js +18 -0
  152. package/packages/src/store/index.js +31 -0
  153. package/packages/src/store/modules/app.js +56 -0
  154. package/packages/src/store/modules/i18n.js +28 -0
  155. package/packages/src/store/modules/permission.js +138 -0
  156. package/packages/src/store/modules/settings.js +50 -0
  157. package/packages/src/store/modules/tagsView.js +207 -0
  158. package/packages/src/store/modules/user.js +104 -0
  159. package/packages/src/utils/auth.js +25 -0
  160. package/packages/src/utils/dict/Dict.js +90 -0
  161. package/packages/src/utils/dict/DictConverter.js +17 -0
  162. package/packages/src/utils/dict/DictData.js +13 -0
  163. package/packages/src/utils/dict/DictMeta.js +46 -0
  164. package/packages/src/utils/dict/DictOptions.js +59 -0
  165. package/packages/src/utils/dict/index.js +33 -0
  166. package/packages/src/utils/errorCode.js +6 -0
  167. package/packages/src/utils/generator/config.js +438 -0
  168. package/packages/src/utils/generator/css.js +18 -0
  169. package/packages/src/utils/generator/drawingDefault.js +29 -0
  170. package/packages/src/utils/generator/html.js +359 -0
  171. package/packages/src/utils/generator/icon.json +1 -0
  172. package/packages/src/utils/generator/js.js +236 -0
  173. package/packages/src/utils/generator/render.js +126 -0
  174. package/packages/src/utils/index.js +390 -0
  175. package/packages/src/utils/pdf.js +62 -0
  176. package/packages/src/utils/request.js +227 -0
  177. package/packages/src/utils/ruoyi.js +261 -0
  178. package/packages/src/utils/validate.js +83 -0
  179. package/packages/src/utils/zip.js +62 -0
  180. package/packages/src/views/biz/bizContract/companyList.vue +217 -0
  181. package/packages/src/views/biz/bizContract/contractCompanyList.vue +433 -0
  182. package/packages/src/views/biz/bizContract/depositInvoice.vue +688 -0
  183. package/packages/src/views/biz/bizContract/detail.vue +1168 -0
  184. package/packages/src/views/biz/bizContract/index.vue +940 -0
  185. package/packages/src/views/biz/bizFileInfo/contract copy.vue +359 -0
  186. package/packages/src/views/biz/bizFileInfo/contract-history.vue +150 -0
  187. package/packages/src/views/biz/bizFileInfo/contract.vue +1115 -0
  188. package/packages/src/views/biz/bizFileInfo/detail.vue +82 -0
  189. package/packages/src/views/biz/bizFileInfo/fileShow.vue +316 -0
  190. package/packages/src/views/biz/bizFileInfo/index.vue +405 -0
  191. package/packages/src/views/biz/bizShipment/detail.vue +202 -0
  192. package/packages/src/views/biz/bizShipment/gen.vue +1147 -0
  193. package/packages/src/views/biz/bizShipment/index.vue +696 -0
  194. package/packages/src/views/biz/contractTracing/addBillGood.vue +184 -0
  195. package/packages/src/views/biz/contractTracing/addSubCompany.vue +337 -0
  196. package/packages/src/views/biz/contractTracing/association.vue +189 -0
  197. package/packages/src/views/biz/contractTracing/billGoods.vue +180 -0
  198. package/packages/src/views/biz/contractTracing/billInfo.vue +559 -0
  199. package/packages/src/views/biz/contractTracing/billPdf.vue +275 -0
  200. package/packages/src/views/biz/contractTracing/chargingDialog.vue +84 -0
  201. package/packages/src/views/biz/contractTracing/contract.vue +1256 -0
  202. package/packages/src/views/biz/contractTracing/contractInfo.vue +209 -0
  203. package/packages/src/views/biz/contractTracing/contractPdf.vue +562 -0
  204. package/packages/src/views/biz/contractTracing/contractSummary.vue +1012 -0
  205. package/packages/src/views/biz/contractTracing/contractTracingDetail.vue +88 -0
  206. package/packages/src/views/biz/contractTracing/disputeRecord.vue +311 -0
  207. package/packages/src/views/biz/contractTracing/edit.vue +205 -0
  208. package/packages/src/views/biz/contractTracing/editBill.vue +722 -0
  209. package/packages/src/views/biz/contractTracing/index.vue +1503 -0
  210. package/packages/src/views/biz/contractTracing/purchaseInvoiceUpload.vue +330 -0
  211. package/packages/src/views/biz/contractTracing/sendDrafEmail.vue +120 -0
  212. package/packages/src/views/biz/contractTracing/shipment.vue +601 -0
  213. package/packages/src/views/biz/contractTracing/subCompanyDialog.vue +318 -0
  214. package/packages/src/views/biz/track/index.vue +171 -0
  215. package/packages/src/views/components/icons/element-icons.js +3 -0
  216. package/packages/src/views/components/icons/index.vue +87 -0
  217. package/packages/src/views/components/icons/svg-icons.js +10 -0
  218. package/packages/src/views/test.vue +44 -0
@@ -0,0 +1,227 @@
1
+ import axios from "axios";
2
+ import { Notification, MessageBox, Message, Loading } from "element-ui";
3
+ import store from "../store";
4
+ import { getToken } from "./auth";
5
+ import errorCode from "./errorCode";
6
+ import { tansParams, blobValidate } from "./ruoyi";
7
+ import cache from "../plugins/cache";
8
+ import { saveAs } from "file-saver";
9
+
10
+ let downloadLoadingInstance;
11
+ // 是否显示重新登录
12
+ export let isRelogin = { show: false };
13
+
14
+ axios.defaults.headers["Content-Type"] = "application/json;charset=utf-8";
15
+ // 创建axios实例
16
+ const service = axios.create({
17
+ // axios中请求配置有baseURL选项,表示请求URL公共部分
18
+ baseURL: '/prod-admin',
19
+ // 超时
20
+ timeout: 60000,
21
+ });
22
+
23
+ // request拦截器
24
+ service.interceptors.request.use(
25
+ (config) => {
26
+ // 是否需要设置 token
27
+ const isToken = (config.headers || {}).isToken === false;
28
+ // 是否需要防止数据重复提交
29
+ const isRepeatSubmit = (config.headers || {}).repeatSubmit === false;
30
+ if (
31
+ !config.url.includes("/api/transaction/list") &&
32
+ getToken() &&
33
+ !isToken
34
+ ) {
35
+ config.headers["Authorization"] = "Bearer " + getToken(); // 让每个请求携带自定义token 请根据实际情况自行修改
36
+ }
37
+ // get请求映射params参数
38
+ if (config.method === "get" && config.params) {
39
+ let url = config.url + "?" + tansParams(config.params);
40
+ url = url.slice(0, -1);
41
+ config.params = {};
42
+ config.url = url;
43
+ }
44
+ if (
45
+ !isRepeatSubmit &&
46
+ (config.method === "post" || config.method === "put")
47
+ ) {
48
+ const requestObj = {
49
+ url: config.url,
50
+ data:
51
+ typeof config.data === "object"
52
+ ? JSON.stringify(config.data)
53
+ : config.data,
54
+ time: new Date().getTime(),
55
+ };
56
+ const sessionObj = cache.session.getJSON("sessionObj");
57
+ if (
58
+ sessionObj === undefined ||
59
+ sessionObj === null ||
60
+ sessionObj === ""
61
+ ) {
62
+ cache.session.setJSON("sessionObj", requestObj);
63
+ } else {
64
+ const s_url = sessionObj.url; // 请求地址
65
+ const s_data = sessionObj.data; // 请求数据
66
+ const s_time = sessionObj.time; // 请求时间
67
+ const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交
68
+ if (
69
+ s_data === requestObj.data &&
70
+ requestObj.time - s_time < interval &&
71
+ s_url === requestObj.url
72
+ ) {
73
+ const message = "数据正在处理,请勿重复提交";
74
+ console.warn(`[${s_url}]: ` + message);
75
+ return Promise.reject(new Error(message));
76
+ } else {
77
+ cache.session.setJSON("sessionObj", requestObj);
78
+ }
79
+ }
80
+ }
81
+ // config.url = '/prod-api' + config.url
82
+ // console.log('==config.url==', config.url);
83
+ // if (config.url.includes('/prod-api')) {
84
+ // config.url = str.replace('/prod-api', '');
85
+ // } else {
86
+ // }
87
+ // if (config.url.includes('/system/dict/data/type/')) {
88
+ // config.url = '/prod-api' + config.url
89
+ // }
90
+ console.log('==config.url==', config.url);
91
+ return config;
92
+ },
93
+ (error) => {
94
+ console.log(error);
95
+ Promise.reject(error);
96
+ }
97
+ );
98
+
99
+ // 响应拦截器
100
+ service.interceptors.response.use(
101
+ (res) => {
102
+ // 未设置状态码则默认成功状态
103
+ const code = res.data.code || 200;
104
+ // 获取错误信息
105
+ const msg = errorCode[code] || res.data.msg || errorCode["default"];
106
+ // 二进制数据则直接返回
107
+ if (
108
+ res.request.responseType === "blob" ||
109
+ res.request.responseType === "arraybuffer"
110
+ ) {
111
+ return res.data;
112
+ }
113
+ if (code === 401) {
114
+ if (!isRelogin.show) {
115
+ isRelogin.show = true;
116
+ MessageBox.confirm(
117
+ "登录状态已过期,您可以继续留在该页面,或者重新登录",
118
+ "系统提示",
119
+ {
120
+ confirmButtonText: "重新登录",
121
+ cancelButtonText: "取消",
122
+ type: "warning",
123
+ }
124
+ )
125
+ .then(() => {
126
+ isRelogin.show = false;
127
+ store.dispatch("LogOut").then(() => {
128
+ location.href = "/index";
129
+ });
130
+ })
131
+ .catch(() => {
132
+ isRelogin.show = false;
133
+ });
134
+ }
135
+ return Promise.reject("无效的会话,或者会话已过期,请重新登录。");
136
+ } else if (code === 500) {
137
+ Message({
138
+ message: msg,
139
+ type: "error",
140
+ });
141
+
142
+ return Promise.reject(new Error(msg));
143
+ } else if (code !== 200) {
144
+ Notification.error({
145
+ title: msg,
146
+ });
147
+ return Promise.reject("error");
148
+ } else {
149
+ return res.data;
150
+ }
151
+ },
152
+ (error) => {
153
+ console.log("err" + error);
154
+ let { message } = error;
155
+ if (message == "Network Error") {
156
+ message = "后端接口连接异常";
157
+ } else if (message.includes("timeout")) {
158
+ message = "系统接口请求超时";
159
+ } else if (message.includes("Request failed with status code")) {
160
+ message = "系统接口" + message.substr(message.length - 3) + "异常";
161
+ }
162
+ Message({
163
+ message: message,
164
+ type: "error",
165
+ duration: 5 * 1000,
166
+ });
167
+ return Promise.reject(error);
168
+ }
169
+ );
170
+
171
+ // 通用下载方法
172
+ export function download(url, params, filename) {
173
+ downloadLoadingInstance = Loading.service({
174
+ text: "正在下载数据,请稍候",
175
+ spinner: "el-icon-loading",
176
+ background: "rgba(0, 0, 0, 0.7)",
177
+ });
178
+ return service
179
+ .post(url, params, {
180
+ transformRequest: [
181
+ (params) => {
182
+ return tansParams(params);
183
+ },
184
+ ],
185
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
186
+ responseType: "blob",
187
+ })
188
+ .then(async (data) => {
189
+ const isLogin = await blobValidate(data);
190
+ if (isLogin) {
191
+ const blob = new Blob([data]);
192
+ saveAs(blob, filename);
193
+ } else {
194
+ const resText = await data.text();
195
+ const rspObj = JSON.parse(resText);
196
+ const errMsg =
197
+ errorCode[rspObj.code] || rspObj.msg || errorCode["default"];
198
+ Message.error(errMsg);
199
+ }
200
+ downloadLoadingInstance.close();
201
+ })
202
+ .catch((r) => {
203
+ console.error(r);
204
+ Message.error("下载文件出现错误,请联系管理员!");
205
+ downloadLoadingInstance.close();
206
+ });
207
+ }
208
+
209
+ export function downloadFile(url, filename) {
210
+ let xmlhttp = new XMLHttpRequest();
211
+ xmlhttp.open("GET", url, true);
212
+ xmlhttp.responseType = "blob";
213
+ xmlhttp.onload = function () {
214
+ if (this.status == 200) {
215
+ const blob = this.response;
216
+ const link = document.createElement("a");
217
+ link.href = window.URL.createObjectURL(blob);
218
+ link.download = filename;
219
+ document.body.appendChild(link);
220
+ link.click();
221
+ document.body.removeChild(link);
222
+ }
223
+ };
224
+ xmlhttp.send();
225
+ }
226
+
227
+ export default service;
@@ -0,0 +1,261 @@
1
+ import moment from 'moment';
2
+ /**
3
+ * 通用js方法封装处理
4
+ * Copyright (c) 2019 ruoyi
5
+ */
6
+
7
+ // 日期格式化
8
+ export function parseTime(time, pattern) {
9
+ if (arguments.length === 0 || !time) {
10
+ return null
11
+ }
12
+ const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
13
+ let date
14
+ if (typeof time === 'object') {
15
+ date = time
16
+ } else {
17
+ if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
18
+ time = parseInt(time)
19
+ } else if (typeof time === 'string') {
20
+ time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm), '');
21
+ }
22
+ if ((typeof time === 'number') && (time.toString().length === 10)) {
23
+ time = time * 1000
24
+ }
25
+ date = new Date(time)
26
+ }
27
+ const formatObj = {
28
+ y: date.getFullYear(),
29
+ m: date.getMonth() + 1,
30
+ d: date.getDate(),
31
+ h: date.getHours(),
32
+ i: date.getMinutes(),
33
+ s: date.getSeconds(),
34
+ a: date.getDay()
35
+ }
36
+ const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
37
+ let value = formatObj[key]
38
+ // Note: getDay() returns 0 on Sunday
39
+ if (key === 'a') {
40
+ return ['日', '一', '二', '三', '四', '五', '六'][value]
41
+ }
42
+ if (result.length > 0 && value < 10) {
43
+ value = '0' + value
44
+ }
45
+ return value || 0
46
+ })
47
+ return time_str
48
+ }
49
+
50
+ // 表单重置
51
+ export function resetForm(refName) {
52
+ if (this.$refs[refName]) {
53
+ this.$refs[refName].resetFields();
54
+ }
55
+ }
56
+
57
+ // 添加日期范围
58
+ export function addDateRange(params, dateRange, propName) {
59
+ let search = params;
60
+ search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {};
61
+ dateRange = Array.isArray(dateRange) ? dateRange : [];
62
+ if (typeof (propName) === 'undefined') {
63
+ search.params['beginTime'] = dateRange[0];
64
+ search.params['endTime'] = dateRange[1];
65
+ } else {
66
+ search.params['begin' + propName] = dateRange[0];
67
+ search.params['end' + propName] = dateRange[1];
68
+ }
69
+ return search;
70
+ }
71
+
72
+ // 回显数据字典
73
+ export function selectDictLabel(datas, value) {
74
+ if (value === undefined) {
75
+ return "";
76
+ }
77
+ var actions = [];
78
+ Object.keys(datas).some((key) => {
79
+ if (datas[key].value == ('' + value)) {
80
+ actions.push(datas[key].label);
81
+ return true;
82
+ }
83
+ })
84
+ if (actions.length === 0) {
85
+ actions.push(value);
86
+ }
87
+ return actions.join('');
88
+ }
89
+
90
+ // 回显数据字典(字符串数组)
91
+ export function selectDictLabels(datas, value, separator) {
92
+ if (value === undefined) {
93
+ return "";
94
+ }
95
+ var actions = [];
96
+ var currentSeparator = undefined === separator ? "," : separator;
97
+ var temp = value.split(currentSeparator);
98
+ Object.keys(value.split(currentSeparator)).some((val) => {
99
+ var match = false;
100
+ Object.keys(datas).some((key) => {
101
+ if (datas[key].value == ('' + temp[val])) {
102
+ actions.push(datas[key].label + currentSeparator);
103
+ match = true;
104
+ }
105
+ })
106
+ if (!match) {
107
+ actions.push(temp[val] + currentSeparator);
108
+ }
109
+ })
110
+ return actions.join('').substring(0, actions.join('').length - 1);
111
+ }
112
+
113
+ // 字符串格式化(%s )
114
+ export function sprintf(str) {
115
+ var args = arguments,
116
+ flag = true,
117
+ i = 1;
118
+ str = str.replace(/%s/g, function () {
119
+ var arg = args[i++];
120
+ if (typeof arg === 'undefined') {
121
+ flag = false;
122
+ return '';
123
+ }
124
+ return arg;
125
+ });
126
+ return flag ? str : '';
127
+ }
128
+
129
+ // 转换字符串,undefined,null等转化为""
130
+ export function parseStrEmpty(str) {
131
+ if (!str || str == "undefined" || str == "null") {
132
+ return "";
133
+ }
134
+ return str;
135
+ }
136
+
137
+ // 数据合并
138
+ export function mergeRecursive(source, target) {
139
+ for (var p in target) {
140
+ try {
141
+ if (target[p].constructor == Object) {
142
+ source[p] = mergeRecursive(source[p], target[p]);
143
+ } else {
144
+ source[p] = target[p];
145
+ }
146
+ } catch (e) {
147
+ source[p] = target[p];
148
+ }
149
+ }
150
+ return source;
151
+ };
152
+
153
+ /**
154
+ * 构造树型结构数据
155
+ * @param {*} data 数据源
156
+ * @param {*} id id字段 默认 'id'
157
+ * @param {*} parentId 父节点字段 默认 'parentId'
158
+ * @param {*} children 孩子节点字段 默认 'children'
159
+ */
160
+ export function handleTree(data, id, parentId, children) {
161
+ let config = {
162
+ id: id || 'id',
163
+ parentId: parentId || 'parentId',
164
+ childrenList: children || 'children'
165
+ };
166
+
167
+ var childrenListMap = {};
168
+ var nodeIds = {};
169
+ var tree = [];
170
+
171
+ for (let d of data) {
172
+ let parentId = d[config.parentId];
173
+ if (childrenListMap[parentId] == null) {
174
+ childrenListMap[parentId] = [];
175
+ }
176
+ nodeIds[d[config.id]] = d;
177
+ childrenListMap[parentId].push(d);
178
+ }
179
+
180
+ for (let d of data) {
181
+ let parentId = d[config.parentId];
182
+ if (nodeIds[parentId] == null) {
183
+ tree.push(d);
184
+ }
185
+ }
186
+
187
+ for (let t of tree) {
188
+ adaptToChildrenList(t);
189
+ }
190
+
191
+ function adaptToChildrenList(o) {
192
+ if (childrenListMap[o[config.id]] !== null) {
193
+ o[config.childrenList] = childrenListMap[o[config.id]];
194
+ }
195
+ if (o[config.childrenList]) {
196
+ for (let c of o[config.childrenList]) {
197
+ adaptToChildrenList(c);
198
+ }
199
+ }
200
+ }
201
+ return tree;
202
+ }
203
+
204
+ /**
205
+ * 参数处理
206
+ * @param {*} params 参数
207
+ */
208
+ export function tansParams(params) {
209
+ let result = ''
210
+ for (const propName of Object.keys(params)) {
211
+ const value = params[propName];
212
+ var part = encodeURIComponent(propName) + "=";
213
+ if (value !== null && typeof (value) !== "undefined") {
214
+ if (typeof value === 'object') {
215
+ for (const key of Object.keys(value)) {
216
+ if (value[key] !== null && typeof (value[key]) !== 'undefined') {
217
+ let params = propName + '[' + key + ']';
218
+ var subPart = encodeURIComponent(params) + "=";
219
+ result += subPart + encodeURIComponent(value[key]) + "&";
220
+ }
221
+ }
222
+ } else {
223
+ result += part + encodeURIComponent(value) + "&";
224
+ }
225
+ }
226
+ }
227
+ return result
228
+ }
229
+
230
+ // 验证是否为blob格式
231
+ export async function blobValidate(data) {
232
+ try {
233
+ const text = await data.text();
234
+ JSON.parse(text);
235
+ return false;
236
+ } catch (error) {
237
+ return true;
238
+ }
239
+ }
240
+
241
+ // UTC时间转当地时间
242
+ export function utc2local(utcTime, pattern = 'YYYY-MM-DD HH:mm:ss Z') {
243
+ if (null == utcTime || '' == utcTime) {
244
+ return '';
245
+ }
246
+ return utcTime && moment.utc(utcTime).local().format(pattern);
247
+ }
248
+ /**
249
+ * 过滤html内容的标记内容
250
+ * 比如邮件中的点图片标记
251
+ * @param {*} html 需要过滤的html内容
252
+ * @returns 过滤后的html内容
253
+ */
254
+ export function removeMarketContent(html) {
255
+ if (!html) return "";
256
+ //删除 <img src="*/msg/queue/point/*"/>
257
+ // let imgReg = /<img.*?(?:>|\/>)/gi;
258
+ let pointReg = /<img.*?\/msg\/queue\/point\/.*?(?:>|\/>)/gi;
259
+ html = html.replace(pointReg, "");
260
+ return html;
261
+ }
@@ -0,0 +1,83 @@
1
+ /**
2
+ * @param {string} path
3
+ * @returns {Boolean}
4
+ */
5
+ export function isExternal(path) {
6
+ return /^(https?:|mailto:|tel:)/.test(path)
7
+ }
8
+
9
+ /**
10
+ * @param {string} str
11
+ * @returns {Boolean}
12
+ */
13
+ export function validUsername(str) {
14
+ const valid_map = ['admin', 'editor']
15
+ return valid_map.indexOf(str.trim()) >= 0
16
+ }
17
+
18
+ /**
19
+ * @param {string} url
20
+ * @returns {Boolean}
21
+ */
22
+ export function validURL(url) {
23
+ const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
24
+ return reg.test(url)
25
+ }
26
+
27
+ /**
28
+ * @param {string} str
29
+ * @returns {Boolean}
30
+ */
31
+ export function validLowerCase(str) {
32
+ const reg = /^[a-z]+$/
33
+ return reg.test(str)
34
+ }
35
+
36
+ /**
37
+ * @param {string} str
38
+ * @returns {Boolean}
39
+ */
40
+ export function validUpperCase(str) {
41
+ const reg = /^[A-Z]+$/
42
+ return reg.test(str)
43
+ }
44
+
45
+ /**
46
+ * @param {string} str
47
+ * @returns {Boolean}
48
+ */
49
+ export function validAlphabets(str) {
50
+ const reg = /^[A-Za-z]+$/
51
+ return reg.test(str)
52
+ }
53
+
54
+ /**
55
+ * @param {string} email
56
+ * @returns {Boolean}
57
+ */
58
+ export function validEmail(email) {
59
+ const reg = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
60
+ return reg.test(email)
61
+ }
62
+
63
+ /**
64
+ * @param {string} str
65
+ * @returns {Boolean}
66
+ */
67
+ export function isString(str) {
68
+ if (typeof str === 'string' || str instanceof String) {
69
+ return true
70
+ }
71
+ return false
72
+ }
73
+
74
+ /**
75
+ * @param {Array} arg
76
+ * @returns {Boolean}
77
+ */
78
+ export function isArray(arg) {
79
+ if (typeof Array.isArray === 'undefined') {
80
+ return Object.prototype.toString.call(arg) === '[object Array]'
81
+ }
82
+ return Array.isArray(arg)
83
+ }
@@ -0,0 +1,62 @@
1
+ import axios from "axios";
2
+ import { Message, Loading } from "element-ui";
3
+ import FileSaver from "file-saver";
4
+ import JSZip from "jszip";
5
+ let downloadLoadingInstance;
6
+ // methods
7
+ export function getFile(url) {
8
+ return new Promise((resolve, reject) => {
9
+ axios({
10
+ method: "get",
11
+ url,
12
+ responseType: "blob",
13
+ })
14
+ .then((response) => {
15
+ resolve(response.data);
16
+ })
17
+ .catch((error) => {
18
+ reject(error.toString());
19
+ });
20
+ });
21
+ }
22
+ export function batchAsZip(fileList, zipName) {
23
+ if (!fileList || fileList.length === 0) {
24
+ Message.warning({
25
+ message: "请先选择下载数据!",
26
+ });
27
+ return;
28
+ }
29
+ downloadLoadingInstance = Loading.service({
30
+ text: "正在下载数据,请稍候",
31
+ spinner: "el-icon-loading",
32
+ background: "rgba(0, 0, 0, 0.7)",
33
+ });
34
+ const zip = new JSZip();
35
+ const promises = [];
36
+ const cache = {};
37
+ console.log(fileList);
38
+ fileList.forEach((item) => {
39
+ const promise = getFile(item.url).then((data) => {
40
+ // 下载文件, 并存成ArrayBuffer对象
41
+ // const file_name = item.realName // 获取文件名
42
+ zip.file(item.fileName, data, { binary: true });
43
+ cache[item.fileName] = data;
44
+ });
45
+ promises.push(promise);
46
+ });
47
+ Promise.all(promises)
48
+ .then(() => {
49
+ zip.generateAsync({ type: "blob" }).then((f) => {
50
+ // 生成二进制流
51
+ FileSaver.saveAs(f, zipName); // 利用file-saver保存文件 自定义文件名
52
+ Message.success({
53
+ message: "下载完成!",
54
+ });
55
+ });
56
+ downloadLoadingInstance.close();
57
+ })
58
+ .catch((res) => {
59
+ Message.error("下载文件出现错误,请联系管理员!");
60
+ downloadLoadingInstance.close();
61
+ });
62
+ }