vue2-client 1.3.2 → 1.3.5
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.
- package/CHANGELOG.md +4 -0
- package/index.js +30 -28
- package/package.json +1 -1
- package/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox.vue +225 -225
- package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +777 -777
- package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +553 -553
- package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +165 -163
- package/src/base-client/components/common/ScrollList/ScrollList.vue +113 -0
- package/src/base-client/components/common/ScrollList/index.js +3 -0
- package/src/base-client/components/common/Upload/Upload.vue +161 -158
- package/src/base-client/components/common/XAddForm/XAddForm.vue +349 -349
- package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +321 -322
- package/src/base-client/components/common/XForm/XForm.vue +273 -268
- package/src/base-client/components/common/XForm/XFormItem.vue +387 -371
- package/src/base-client/components/common/XFormTable/XFormTable.vue +6 -5
- package/src/base-client/components/common/XTable/XTable.vue +278 -274
- package/src/base-client/components/{iot → system}/LogDetailsView/LogDetailsView.vue +0 -0
- package/src/base-client/components/{iot → system}/LogDetailsView/index.js +0 -0
- package/src/base-client/components/{iot → system}/LogDetailsView/index.md +0 -0
- package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -280
- package/src/base-client/components/ticket/TicketDetailsView/TicketDetailsView.vue +806 -804
- package/src/base-client/components/ticket/TicketSubmitSuccessView/TicketSubmitSuccessView.vue +24 -24
- package/src/base-client/plugins/PagedList.js +177 -176
- package/src/components/STable/index.js +318 -316
- package/src/components/index.js +36 -36
- package/src/components/table/StandardTable.vue +141 -142
- package/src/components/tool/TagSelect.vue +83 -83
- package/src/layouts/header/AdminHeader.vue +104 -109
- package/src/layouts/header/HeaderNotice.vue +167 -199
- package/src/layouts/header/InstitutionDetail.vue +181 -182
- package/src/pages/CreateQueryPage.vue +65 -59
- package/src/pages/system/dictionary/index.vue +43 -41
- package/src/pages/system/file/Info.vue +56 -0
- package/src/pages/system/file/index.vue +317 -0
- package/src/pages/system/queryParams/index.vue +43 -41
- package/src/pages/system/ticket/index.vue +458 -452
- package/src/pages/system/ticket/submitTicketSuccess.vue +206 -203
- package/src/router/async/router.map.js +56 -60
- package/src/services/api/DictionaryDetailsViewApi.js +6 -6
- package/src/services/api/LogDetailsViewApi.js +10 -10
- package/src/services/api/QueryParamsDetailsViewApi.js +6 -6
- package/src/services/api/TicketDetailsViewApi.js +42 -40
- package/src/services/api/commonTempTable.js +10 -0
- package/src/services/api/index.js +2 -24
- package/src/services/api/manage.js +8 -16
- package/src/utils/excel/Blob.js +181 -181
- package/src/utils/excel/Export2Excel.js +141 -142
- package/src/utils/i18n.js +80 -80
- package/src/utils/request.js +4 -4
- package/src/utils/theme-color-replacer-extend.js +91 -92
- package/vue.config.js +109 -163
- package/src/base-client/all.js +0 -62
- package/src/base-client/components/iot/CustomerDetailsView/CustomerDetailsView.vue +0 -225
- package/src/base-client/components/iot/CustomerDetailsView/index.js +0 -3
- package/src/base-client/components/iot/CustomerDetailsView/index.md +0 -40
- package/src/base-client/components/iot/DataAnalysisUser/DataAnalysisUser.vue +0 -127
- package/src/base-client/components/iot/DataAnalysisUser/index.js +0 -3
- package/src/base-client/components/iot/DeviceBrandDetailsView/DeviceBrandDetailsView.vue +0 -452
- package/src/base-client/components/iot/DeviceBrandDetailsView/index.js +0 -3
- package/src/base-client/components/iot/DeviceDetailsView/DeviceDetailsView.vue +0 -232
- package/src/base-client/components/iot/DeviceDetailsView/index.js +0 -3
- package/src/base-client/components/iot/DeviceDetailsView/index.md +0 -41
- package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsCount.vue +0 -678
- package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsException.vue +0 -57
- package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsInstruct.vue +0 -122
- package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsInstructOperate.vue +0 -121
- package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsMain.vue +0 -269
- package/src/base-client/components/iot/DeviceDetailsView/part/DeviceDetailsRead.vue +0 -131
- package/src/base-client/components/iot/DeviceDetailsView/part/index.js +0 -8
- package/src/base-client/components/iot/DeviceTypeDetailsView/DeviceTypeDetailsView.vue +0 -300
- package/src/base-client/components/iot/DeviceTypeDetailsView/index.js +0 -3
- package/src/base-client/components/iot/InstructDetailsView/InstructDetailsView.vue +0 -464
- package/src/base-client/components/iot/InstructDetailsView/index.js +0 -3
- package/src/base-client/components/iot/InstructDetailsView/index.md +0 -43
- package/src/base-client/components/iot/MeterDetailsView/MeterDetailsView.vue +0 -352
- package/src/base-client/components/iot/MeterDetailsView/index.js +0 -3
- package/src/base-client/components/iot/MeterDetailsView/index.md +0 -41
- package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsCount.vue +0 -330
- package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsException.vue +0 -179
- package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsHandPlan.vue +0 -285
- package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsInstruct.vue +0 -230
- package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsMain.vue +0 -251
- package/src/base-client/components/iot/MeterDetailsView/part/MeterDetailsSellGas.vue +0 -184
- package/src/base-client/components/iot/MeterDetailsView/part/index.js +0 -9
- package/src/base-client/components/iot/WebmeterAnalysisView/WebmeterAnalysisView.vue +0 -960
- package/src/base-client/components/iot/WebmeterAnalysisView/index.js +0 -3
- package/src/base-client/components/iot/WebmeterAnalysisView/index.md +0 -42
- package/src/base-client/components/ticket/EmployeeDetailsView/EmployeeDetailsView.vue +0 -370
- package/src/base-client/components/ticket/EmployeeDetailsView/index.js +0 -3
- package/src/base-client/components/ticket/EmployeeDetailsView/index.md +0 -28
- package/src/components/Charts/DataUserOrderSituation.vue +0 -77
- package/src/components/Charts/DataUserReporting.vue +0 -74
- package/src/components/Charts/DataUserSituation.vue +0 -107
- package/src/services/api/CustomerDetailsViewApi.js +0 -6
- package/src/services/api/DeviceBrandDetailsViewApi.js +0 -14
- package/src/services/api/DeviceDetailsViewApi.js +0 -10
- package/src/services/api/DeviceTypeDetailsViewApi.js +0 -6
- package/src/services/api/EmployeeDetailsViewApi.js +0 -12
- package/src/services/api/FormGroupEditApi.js +0 -6
- package/src/services/api/InstructDetailsViewApi.js +0 -12
- package/src/services/api/MeterDetailsViewApi.js +0 -24
- package/src/services/api/WebmeterAnalysisViewApi.js +0 -24
- package/src/services/api/applyInstallApi.js +0 -14
- package/src/services/api/iot/DeviceDetailsView/DeviceDetailsCountApi.js +0 -18
- package/src/services/api/iot.js +0 -7
- package/src/services/api/service.js +0 -12
|
@@ -1,142 +1,141 @@
|
|
|
1
|
-
/* eslint-disable */
|
|
2
|
-
require('script-loader!file-saver');
|
|
3
|
-
require('./Blob.js');
|
|
4
|
-
require('script-loader!xlsx/dist/xlsx.core.min');
|
|
5
|
-
|
|
6
|
-
function generateArray(table) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
for (
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
for (
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue;
|
|
20
|
-
|
|
21
|
-
//Skip ranges
|
|
22
|
-
ranges.forEach(function (range) {
|
|
23
|
-
if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) {
|
|
24
|
-
for (
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
//Handle Row Span
|
|
29
|
-
if (rowspan || colspan) {
|
|
30
|
-
rowspan = rowspan || 1;
|
|
31
|
-
colspan = colspan || 1;
|
|
32
|
-
ranges.push({s: {r: R, c: outRow.length}, e: {r: R + rowspan - 1, c: outRow.length + colspan - 1}});
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
if (range.s.
|
|
59
|
-
if (range.
|
|
60
|
-
if (range.e.
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
if (typeof cell.v === '
|
|
67
|
-
else if (
|
|
68
|
-
|
|
69
|
-
cell.
|
|
70
|
-
cell.
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
this.
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
wb.
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
wb.
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
}
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
require('script-loader!file-saver');
|
|
3
|
+
require('./Blob.js');
|
|
4
|
+
require('script-loader!xlsx/dist/xlsx.core.min');
|
|
5
|
+
|
|
6
|
+
function generateArray(table) {
|
|
7
|
+
const out = [];
|
|
8
|
+
const rows = table.querySelectorAll('tr');
|
|
9
|
+
const ranges = [];
|
|
10
|
+
for (let R = 0; R < rows.length; ++R) {
|
|
11
|
+
const outRow = [];
|
|
12
|
+
const row = rows[R];
|
|
13
|
+
const columns = row.querySelectorAll('td');
|
|
14
|
+
for (let C = 0; C < columns.length; ++C) {
|
|
15
|
+
const cell = columns[C];
|
|
16
|
+
let colspan = cell.getAttribute('colspan');
|
|
17
|
+
let rowspan = cell.getAttribute('rowspan');
|
|
18
|
+
let cellValue = cell.innerText;
|
|
19
|
+
if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue;
|
|
20
|
+
|
|
21
|
+
//Skip ranges
|
|
22
|
+
ranges.forEach(function (range) {
|
|
23
|
+
if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) {
|
|
24
|
+
for (let i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
//Handle Row Span
|
|
29
|
+
if (rowspan || colspan) {
|
|
30
|
+
rowspan = rowspan || 1;
|
|
31
|
+
colspan = colspan || 1;
|
|
32
|
+
ranges.push({s: {r: R, c: outRow.length}, e: {r: R + rowspan - 1, c: outRow.length + colspan - 1}});
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
//Handle Value
|
|
36
|
+
outRow.push(cellValue !== "" ? cellValue : null);
|
|
37
|
+
|
|
38
|
+
//Handle Colspan
|
|
39
|
+
if (colspan) for (let k = 0; k < colspan - 1; ++k) outRow.push(null);
|
|
40
|
+
}
|
|
41
|
+
out.push(outRow);
|
|
42
|
+
}
|
|
43
|
+
return [out, ranges];
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function datenum(v, date1904) {
|
|
47
|
+
if (date1904) v += 1462;
|
|
48
|
+
const epoch = Date.parse(v);
|
|
49
|
+
return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function sheet_from_array_of_arrays(data, opts) {
|
|
53
|
+
const ws = {};
|
|
54
|
+
const range = {s: {c: 10000000, r: 10000000}, e: {c: 0, r: 0}};
|
|
55
|
+
for (let R = 0; R != data.length; ++R) {
|
|
56
|
+
for (let C = 0; C != data[R].length; ++C) {
|
|
57
|
+
if (range.s.r > R) range.s.r = R;
|
|
58
|
+
if (range.s.c > C) range.s.c = C;
|
|
59
|
+
if (range.e.r < R) range.e.r = R;
|
|
60
|
+
if (range.e.c < C) range.e.c = C;
|
|
61
|
+
const cell = {v: data[R][C]};
|
|
62
|
+
if (cell.v == null) continue;
|
|
63
|
+
const cell_ref = XLSX.utils.encode_cell({c: C, r: R});
|
|
64
|
+
|
|
65
|
+
if (typeof cell.v === 'number') cell.t = 'n';
|
|
66
|
+
else if (typeof cell.v === 'boolean') cell.t = 'b';
|
|
67
|
+
else if (cell.v instanceof Date) {
|
|
68
|
+
cell.t = 'n';
|
|
69
|
+
cell.z = XLSX.SSF._table[14];
|
|
70
|
+
cell.v = datenum(cell.v);
|
|
71
|
+
} else cell.t = 's';
|
|
72
|
+
|
|
73
|
+
ws[cell_ref] = cell;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);
|
|
77
|
+
return ws;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function Workbook() {
|
|
81
|
+
if (!(this instanceof Workbook)) return new Workbook();
|
|
82
|
+
this.SheetNames = [];
|
|
83
|
+
this.Sheets = {};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function s2ab(s) {
|
|
87
|
+
const buf = new ArrayBuffer(s.length);
|
|
88
|
+
const view = new Uint8Array(buf);
|
|
89
|
+
for (let i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
|
|
90
|
+
return buf;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export function exportTable(id) {
|
|
94
|
+
const theTable = document.getElementById(id);
|
|
95
|
+
console.log('a')
|
|
96
|
+
const oo = generateArray(theTable);
|
|
97
|
+
const ranges = oo[1];
|
|
98
|
+
|
|
99
|
+
/* original data */
|
|
100
|
+
const data = oo[0];
|
|
101
|
+
const ws_name = "SheetJS";
|
|
102
|
+
console.log(data);
|
|
103
|
+
|
|
104
|
+
const wb = new Workbook(), ws = sheet_from_array_of_arrays(data);
|
|
105
|
+
|
|
106
|
+
/* add ranges to worksheet */
|
|
107
|
+
// ws['!cols'] = ['apple', 'banan'];
|
|
108
|
+
ws['!merges'] = ranges;
|
|
109
|
+
|
|
110
|
+
/* add worksheet to workbook */
|
|
111
|
+
wb.SheetNames.push(ws_name);
|
|
112
|
+
wb.Sheets[ws_name] = ws;
|
|
113
|
+
|
|
114
|
+
const wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'});
|
|
115
|
+
|
|
116
|
+
saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), "test.xlsx")
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function formatJson(jsonData) {
|
|
120
|
+
console.log(jsonData)
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export function exportJson(th, jsonData, defaultTitle) {
|
|
124
|
+
|
|
125
|
+
/* original data */
|
|
126
|
+
|
|
127
|
+
const data = jsonData;
|
|
128
|
+
data.unshift(th);
|
|
129
|
+
const ws_name = "SheetJS";
|
|
130
|
+
|
|
131
|
+
const wb = new Workbook(), ws = sheet_from_array_of_arrays(data);
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
/* add worksheet to workbook */
|
|
135
|
+
wb.SheetNames.push(ws_name);
|
|
136
|
+
wb.Sheets[ws_name] = ws;
|
|
137
|
+
|
|
138
|
+
const wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'});
|
|
139
|
+
const title = defaultTitle || '列表';
|
|
140
|
+
saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), title + ".xlsx")
|
|
141
|
+
}
|
package/src/utils/i18n.js
CHANGED
|
@@ -1,80 +1,80 @@
|
|
|
1
|
-
import Vue from 'vue'
|
|
2
|
-
import VueI18n from 'vue-i18n'
|
|
3
|
-
import routesI18n from '@vue2-client/router/i18n'
|
|
4
|
-
import './Objects'
|
|
5
|
-
import { getI18nKey } from '@vue2-client/utils/routerUtil'
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* 创建 i18n 配置
|
|
9
|
-
* @param locale 本地化语言
|
|
10
|
-
* @param fallback 回退语言
|
|
11
|
-
* @returns {VueI18n}
|
|
12
|
-
*/
|
|
13
|
-
function initI18n (locale, fallback) {
|
|
14
|
-
Vue.use(VueI18n)
|
|
15
|
-
const i18nOptions = {
|
|
16
|
-
locale,
|
|
17
|
-
fallbackLocale: fallback,
|
|
18
|
-
silentFallbackWarn: true
|
|
19
|
-
}
|
|
20
|
-
return new VueI18n(i18nOptions)
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* 根据 router options 配置生成 国际化语言
|
|
25
|
-
* @param lang
|
|
26
|
-
* @param routes
|
|
27
|
-
* @param valueKey
|
|
28
|
-
* @returns {*}
|
|
29
|
-
*/
|
|
30
|
-
function generateI18n (lang, routes, valueKey) {
|
|
31
|
-
routes.forEach(route => {
|
|
32
|
-
const keys = getI18nKey(route.fullPath).split('.')
|
|
33
|
-
const value = valueKey === 'path' ? route[valueKey].split('/').filter(item => !item.startsWith(':') && item != '').join('.') : route[valueKey]
|
|
34
|
-
lang.assignProps(keys, value)
|
|
35
|
-
if (route.children) {
|
|
36
|
-
generateI18n(lang, route.children, valueKey)
|
|
37
|
-
}
|
|
38
|
-
})
|
|
39
|
-
return lang
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* 格式化 router.options.routes,生成 fullPath
|
|
44
|
-
* @param routes
|
|
45
|
-
* @param parentPath
|
|
46
|
-
*/
|
|
47
|
-
function formatFullPath (routes, parentPath = '') {
|
|
48
|
-
routes.forEach(route => {
|
|
49
|
-
const isFullPath = route.path.substring(0, 1) === '/'
|
|
50
|
-
route.fullPath = isFullPath ? route.path : (parentPath === '/' ? parentPath + route.path : parentPath + '/' + route.path)
|
|
51
|
-
if (route.children) {
|
|
52
|
-
formatFullPath(route.children, route.fullPath)
|
|
53
|
-
}
|
|
54
|
-
})
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* 从路由提取国际化数据
|
|
59
|
-
* @param i18n
|
|
60
|
-
* @param routes
|
|
61
|
-
*/
|
|
62
|
-
function mergeI18nFromRoutes (i18n, routes) {
|
|
63
|
-
formatFullPath(routes)
|
|
64
|
-
// eslint-disable-next-line no-new-object
|
|
65
|
-
const CN = generateI18n(
|
|
66
|
-
// eslint-disable-next-line no-new-object
|
|
67
|
-
const US = generateI18n(
|
|
68
|
-
i18n.mergeLocaleMessage('CN', CN)
|
|
69
|
-
i18n.mergeLocaleMessage('US', US)
|
|
70
|
-
const messages = routesI18n.messages
|
|
71
|
-
Object.keys(messages).forEach(lang => {
|
|
72
|
-
i18n.mergeLocaleMessage(lang, messages[lang])
|
|
73
|
-
})
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
export {
|
|
77
|
-
initI18n,
|
|
78
|
-
mergeI18nFromRoutes,
|
|
79
|
-
formatFullPath
|
|
80
|
-
}
|
|
1
|
+
import Vue from 'vue'
|
|
2
|
+
import VueI18n from 'vue-i18n'
|
|
3
|
+
import routesI18n from '@vue2-client/router/i18n'
|
|
4
|
+
import './Objects'
|
|
5
|
+
import { getI18nKey } from '@vue2-client/utils/routerUtil'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* 创建 i18n 配置
|
|
9
|
+
* @param locale 本地化语言
|
|
10
|
+
* @param fallback 回退语言
|
|
11
|
+
* @returns {VueI18n}
|
|
12
|
+
*/
|
|
13
|
+
function initI18n (locale, fallback) {
|
|
14
|
+
Vue.use(VueI18n)
|
|
15
|
+
const i18nOptions = {
|
|
16
|
+
locale,
|
|
17
|
+
fallbackLocale: fallback,
|
|
18
|
+
silentFallbackWarn: true
|
|
19
|
+
}
|
|
20
|
+
return new VueI18n(i18nOptions)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* 根据 router options 配置生成 国际化语言
|
|
25
|
+
* @param lang
|
|
26
|
+
* @param routes
|
|
27
|
+
* @param valueKey
|
|
28
|
+
* @returns {*}
|
|
29
|
+
*/
|
|
30
|
+
function generateI18n (lang, routes, valueKey) {
|
|
31
|
+
routes.forEach(route => {
|
|
32
|
+
const keys = getI18nKey(route.fullPath).split('.')
|
|
33
|
+
const value = valueKey === 'path' ? route[valueKey].split('/').filter(item => !item.startsWith(':') && item != '').join('.') : route[valueKey]
|
|
34
|
+
lang.assignProps(keys, value)
|
|
35
|
+
if (route.children) {
|
|
36
|
+
generateI18n(lang, route.children, valueKey)
|
|
37
|
+
}
|
|
38
|
+
})
|
|
39
|
+
return lang
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* 格式化 router.options.routes,生成 fullPath
|
|
44
|
+
* @param routes
|
|
45
|
+
* @param parentPath
|
|
46
|
+
*/
|
|
47
|
+
function formatFullPath (routes, parentPath = '') {
|
|
48
|
+
routes.forEach(route => {
|
|
49
|
+
const isFullPath = route.path.substring(0, 1) === '/'
|
|
50
|
+
route.fullPath = isFullPath ? route.path : (parentPath === '/' ? parentPath + route.path : parentPath + '/' + route.path)
|
|
51
|
+
if (route.children) {
|
|
52
|
+
formatFullPath(route.children, route.fullPath)
|
|
53
|
+
}
|
|
54
|
+
})
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* 从路由提取国际化数据
|
|
59
|
+
* @param i18n
|
|
60
|
+
* @param routes
|
|
61
|
+
*/
|
|
62
|
+
function mergeI18nFromRoutes (i18n, routes) {
|
|
63
|
+
formatFullPath(routes)
|
|
64
|
+
// eslint-disable-next-line no-new-object
|
|
65
|
+
const CN = generateI18n({}, routes, 'name')
|
|
66
|
+
// eslint-disable-next-line no-new-object
|
|
67
|
+
const US = generateI18n({}, routes, 'path')
|
|
68
|
+
i18n.mergeLocaleMessage('CN', CN)
|
|
69
|
+
i18n.mergeLocaleMessage('US', US)
|
|
70
|
+
const messages = routesI18n.messages
|
|
71
|
+
Object.keys(messages).forEach(lang => {
|
|
72
|
+
i18n.mergeLocaleMessage(lang, messages[lang])
|
|
73
|
+
})
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export {
|
|
77
|
+
initI18n,
|
|
78
|
+
mergeI18nFromRoutes,
|
|
79
|
+
formatFullPath
|
|
80
|
+
}
|
package/src/utils/request.js
CHANGED
|
@@ -159,12 +159,12 @@ const errorHandler = (error) => {
|
|
|
159
159
|
const data = error.response.data
|
|
160
160
|
// 从 localstorage 获取 token
|
|
161
161
|
const token = localStorage.getItem(ACCESS_TOKEN)
|
|
162
|
-
if (error.response.status === 403 || data.code === 403) {
|
|
162
|
+
if (error.response.status === 403 || (data && data.code === 403)) {
|
|
163
163
|
notification.error({
|
|
164
164
|
message: '禁止访问',
|
|
165
165
|
description: data
|
|
166
166
|
})
|
|
167
|
-
} else if (
|
|
167
|
+
} else if (error.response.status === 401 || (data && data.code === 401)) {
|
|
168
168
|
notification.error({
|
|
169
169
|
message: '鉴权失败',
|
|
170
170
|
description: data
|
|
@@ -176,14 +176,14 @@ const errorHandler = (error) => {
|
|
|
176
176
|
}, 1500)
|
|
177
177
|
})
|
|
178
178
|
}
|
|
179
|
-
} else if (error.response.status === 500 || data.code === 500) {
|
|
179
|
+
} else if (error.response.status === 500 || (data && data.code === 500)) {
|
|
180
180
|
notification.error({
|
|
181
181
|
message: '系统异常',
|
|
182
182
|
description: data
|
|
183
183
|
})
|
|
184
184
|
} else {
|
|
185
185
|
notification.error({
|
|
186
|
-
message: '
|
|
186
|
+
message: '网络异常',
|
|
187
187
|
description: data
|
|
188
188
|
})
|
|
189
189
|
}
|
|
@@ -1,92 +1,91 @@
|
|
|
1
|
-
const { cssResolve } = require('../config/replacer')
|
|
2
|
-
// 修正 webpack-theme-color-replacer 插件提取的 css 结果
|
|
3
|
-
function resolveCss (output, srcArr) {
|
|
4
|
-
const regExps = []
|
|
5
|
-
// 提取 resolve 配置中所有的正则配置
|
|
6
|
-
Object.keys(cssResolve).forEach(key => {
|
|
7
|
-
let isRegExp = false
|
|
8
|
-
let reg = {}
|
|
9
|
-
try {
|
|
10
|
-
reg = eval(key)
|
|
11
|
-
isRegExp = reg instanceof RegExp
|
|
12
|
-
} catch (e) {
|
|
13
|
-
isRegExp = false
|
|
14
|
-
}
|
|
15
|
-
if (isRegExp) {
|
|
16
|
-
regExps.push([reg, cssResolve[key]])
|
|
17
|
-
}
|
|
18
|
-
})
|
|
19
|
-
|
|
20
|
-
// 去重
|
|
21
|
-
srcArr = dropDuplicate(srcArr)
|
|
22
|
-
|
|
23
|
-
// 处理 css
|
|
24
|
-
const outArr = []
|
|
25
|
-
srcArr.forEach(text => {
|
|
26
|
-
// 转换为 css 对象
|
|
27
|
-
const cssObj = parseCssObj(text)
|
|
28
|
-
// 根据selector匹配配置,匹配成功,则按配置处理 css
|
|
29
|
-
if (cssResolve[cssObj.selector] != undefined) {
|
|
30
|
-
const cfg = cssResolve[cssObj.selector]
|
|
31
|
-
if (cfg) {
|
|
32
|
-
outArr.push(cfg.resolve(text, cssObj))
|
|
33
|
-
}
|
|
34
|
-
} else {
|
|
35
|
-
let cssText = ''
|
|
36
|
-
// 匹配不成功,则测试是否有匹配的正则配置,有则按正则对应的配置处理
|
|
37
|
-
for (const regExp of regExps) {
|
|
38
|
-
if (regExp[0].test(cssObj.selector)) {
|
|
39
|
-
const cssCfg = regExp[1]
|
|
40
|
-
cssText = cssCfg ? cssCfg.resolve(text, cssObj) : ''
|
|
41
|
-
break
|
|
42
|
-
}
|
|
43
|
-
// 未匹配到正则,则设置 cssText 为默认的 css(即不处理)
|
|
44
|
-
cssText = text
|
|
45
|
-
}
|
|
46
|
-
if (cssText != '') {
|
|
47
|
-
outArr.push(cssText)
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
})
|
|
51
|
-
output = outArr.join('\n')
|
|
52
|
-
return output
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// 数组去重
|
|
56
|
-
function dropDuplicate (arr) {
|
|
57
|
-
const map = {}
|
|
58
|
-
const r = []
|
|
59
|
-
for (const s of arr) {
|
|
60
|
-
if (!map[s]) {
|
|
61
|
-
r.push(s)
|
|
62
|
-
map[s] = 1
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
return r
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* 从字符串解析 css 对象
|
|
70
|
-
* @param cssText
|
|
71
|
-
* @returns {{
|
|
72
|
-
* name: String,
|
|
73
|
-
* rules: Array[String],
|
|
74
|
-
* toText: function
|
|
75
|
-
* }}
|
|
76
|
-
*/
|
|
77
|
-
function parseCssObj (cssText) {
|
|
78
|
-
const css = {}
|
|
79
|
-
const ruleIndex = cssText.indexOf('{')
|
|
80
|
-
css.selector = cssText.substring(0, ruleIndex)
|
|
81
|
-
const ruleBody = cssText.substring(ruleIndex + 1, cssText.length - 1)
|
|
82
|
-
|
|
83
|
-
css.
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
this.
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
module.exports = { resolveCss }
|
|
1
|
+
const { cssResolve } = require('../config/replacer')
|
|
2
|
+
// 修正 webpack-theme-color-replacer 插件提取的 css 结果
|
|
3
|
+
function resolveCss (output, srcArr) {
|
|
4
|
+
const regExps = []
|
|
5
|
+
// 提取 resolve 配置中所有的正则配置
|
|
6
|
+
Object.keys(cssResolve).forEach(key => {
|
|
7
|
+
let isRegExp = false
|
|
8
|
+
let reg = {}
|
|
9
|
+
try {
|
|
10
|
+
reg = eval(key)
|
|
11
|
+
isRegExp = reg instanceof RegExp
|
|
12
|
+
} catch (e) {
|
|
13
|
+
isRegExp = false
|
|
14
|
+
}
|
|
15
|
+
if (isRegExp) {
|
|
16
|
+
regExps.push([reg, cssResolve[key]])
|
|
17
|
+
}
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
// 去重
|
|
21
|
+
srcArr = dropDuplicate(srcArr)
|
|
22
|
+
|
|
23
|
+
// 处理 css
|
|
24
|
+
const outArr = []
|
|
25
|
+
srcArr.forEach(text => {
|
|
26
|
+
// 转换为 css 对象
|
|
27
|
+
const cssObj = parseCssObj(text)
|
|
28
|
+
// 根据selector匹配配置,匹配成功,则按配置处理 css
|
|
29
|
+
if (cssResolve[cssObj.selector] != undefined) {
|
|
30
|
+
const cfg = cssResolve[cssObj.selector]
|
|
31
|
+
if (cfg) {
|
|
32
|
+
outArr.push(cfg.resolve(text, cssObj))
|
|
33
|
+
}
|
|
34
|
+
} else {
|
|
35
|
+
let cssText = ''
|
|
36
|
+
// 匹配不成功,则测试是否有匹配的正则配置,有则按正则对应的配置处理
|
|
37
|
+
for (const regExp of regExps) {
|
|
38
|
+
if (regExp[0].test(cssObj.selector)) {
|
|
39
|
+
const cssCfg = regExp[1]
|
|
40
|
+
cssText = cssCfg ? cssCfg.resolve(text, cssObj) : ''
|
|
41
|
+
break
|
|
42
|
+
}
|
|
43
|
+
// 未匹配到正则,则设置 cssText 为默认的 css(即不处理)
|
|
44
|
+
cssText = text
|
|
45
|
+
}
|
|
46
|
+
if (cssText != '') {
|
|
47
|
+
outArr.push(cssText)
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
})
|
|
51
|
+
output = outArr.join('\n')
|
|
52
|
+
return output
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// 数组去重
|
|
56
|
+
function dropDuplicate (arr) {
|
|
57
|
+
const map = {}
|
|
58
|
+
const r = []
|
|
59
|
+
for (const s of arr) {
|
|
60
|
+
if (!map[s]) {
|
|
61
|
+
r.push(s)
|
|
62
|
+
map[s] = 1
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return r
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* 从字符串解析 css 对象
|
|
70
|
+
* @param cssText
|
|
71
|
+
* @returns {{
|
|
72
|
+
* name: String,
|
|
73
|
+
* rules: Array[String],
|
|
74
|
+
* toText: function
|
|
75
|
+
* }}
|
|
76
|
+
*/
|
|
77
|
+
function parseCssObj (cssText) {
|
|
78
|
+
const css = {}
|
|
79
|
+
const ruleIndex = cssText.indexOf('{')
|
|
80
|
+
css.selector = cssText.substring(0, ruleIndex)
|
|
81
|
+
const ruleBody = cssText.substring(ruleIndex + 1, cssText.length - 1)
|
|
82
|
+
css.rules = ruleBody.split(';')
|
|
83
|
+
css.toText = function () {
|
|
84
|
+
let body = ''
|
|
85
|
+
this.rules.forEach(item => { body += item + ';' })
|
|
86
|
+
return `${this.selector}{${body}}`
|
|
87
|
+
}
|
|
88
|
+
return css
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
module.exports = { resolveCss }
|