@titaui/pc 1.8.0 → 1.8.1
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/lib/components/dialog/index.css +3 -1
- package/lib/components/form/form-fields/input/index.css +3 -2
- package/lib/components/upload/index.js +2 -2
- package/lib/components/upload-photo-modal/constant.js +3 -73
- package/lib/components/upload-photo-modal/index.css +13 -1
- package/lib/components/upload-photo-modal/index.js +176 -75
- package/lib/components/upload-photo-modal/request-api.js +22 -4
- package/lib/pages/personal-info/components/edit-info/index.css +19 -0
- package/lib/pages/personal-info/components/edit-info/index.js +24 -7
- package/package.json +1 -1
- package/src/components/dialog/index.scss +3 -1
- package/src/components/form/form-fields/input/index.scss +3 -2
- package/src/components/upload/index.tsx +4 -4
- package/src/components/upload-photo-modal/constant.ts +0 -44
- package/src/components/upload-photo-modal/index.scss +11 -1
- package/src/components/upload-photo-modal/index.tsx +150 -56
- package/src/components/upload-photo-modal/request-api.ts +13 -3
- package/src/pages/personal-info/components/edit-info/index.scss +20 -0
- package/src/pages/personal-info/components/edit-info/index.tsx +19 -5
|
@@ -51,6 +51,7 @@
|
|
|
51
51
|
|
|
52
52
|
.titaui-dialog .rc-dialog-header {
|
|
53
53
|
padding: 18px 32px;
|
|
54
|
+
margin-bottom: 10px;
|
|
54
55
|
}
|
|
55
56
|
|
|
56
57
|
.titaui-dialog .rc-dialog-body {
|
|
@@ -59,6 +60,7 @@
|
|
|
59
60
|
|
|
60
61
|
.titaui-dialog .rc-dialog-footer {
|
|
61
62
|
padding: 20px 32px;
|
|
63
|
+
margin-top: 8px;
|
|
62
64
|
display: flex;
|
|
63
65
|
justify-content: flex-end;
|
|
64
66
|
}
|
|
@@ -105,7 +107,7 @@
|
|
|
105
107
|
}
|
|
106
108
|
|
|
107
109
|
.titaui-dialog__btn-cancel {
|
|
108
|
-
border: 1px solid #
|
|
110
|
+
border: 1px solid #DFE3EA;
|
|
109
111
|
color: #6f7886;
|
|
110
112
|
transition: 0.2s all;
|
|
111
113
|
}
|
|
@@ -26,14 +26,15 @@
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
.form-field-input__label-require {
|
|
29
|
-
color:
|
|
29
|
+
color: #F05E5E;
|
|
30
|
+
margin-left: 2px;
|
|
30
31
|
}
|
|
31
32
|
|
|
32
33
|
.form-field-input__border {
|
|
33
34
|
padding: 6px 12px;
|
|
34
35
|
border-radius: 8px;
|
|
35
36
|
transition: all 0.2s;
|
|
36
|
-
border: 1px solid #
|
|
37
|
+
border: 1px solid #DFE3EA;
|
|
37
38
|
box-sizing: border-box;
|
|
38
39
|
}
|
|
39
40
|
|
|
@@ -198,7 +198,7 @@ var Upload = /*#__PURE__*/function (_PureComponent) {
|
|
|
198
198
|
;
|
|
199
199
|
uploadStartFiles.push(uploadStartFile);
|
|
200
200
|
|
|
201
|
-
_this._dealUploadStart(uploadStartFiles); // 处理开始上传的文件
|
|
201
|
+
_this._dealUploadStart(uploadStartFiles); // 处理开始上传的文件
|
|
202
202
|
|
|
203
203
|
|
|
204
204
|
formData.append('file', element);
|
|
@@ -224,7 +224,7 @@ var Upload = /*#__PURE__*/function (_PureComponent) {
|
|
|
224
224
|
|
|
225
225
|
xhr.onreadystatechange = function () {
|
|
226
226
|
if (xhr.readyState == 4 && xhr.status == 200) {
|
|
227
|
-
var result = Object.assign({}, _objectSpread({}, JSON.parse(xhr.responseText).Result[0])); // 上传成功接口返回数据
|
|
227
|
+
var result = Object.assign({}, _objectSpread({}, JSON.parse(xhr.responseText).Result[0])); // 上传成功接口返回数据
|
|
228
228
|
|
|
229
229
|
result.percentComplete = 100;
|
|
230
230
|
result.IsSuccess = !!result.IsSuccess;
|
|
@@ -4,96 +4,26 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.List = void 0;
|
|
7
|
-
|
|
8
|
-
var _requestApi = require("./request-api");
|
|
9
|
-
|
|
10
|
-
var _toast = _interopRequireDefault(require("../../components/toast"));
|
|
11
|
-
|
|
12
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
13
|
-
|
|
14
7
|
var List = [{
|
|
15
8
|
id: 'person',
|
|
16
9
|
accept: '.jpg,.jpeg,.gif,.png',
|
|
17
10
|
autoCropArea: 0.5,
|
|
18
11
|
initialAspectRatio: 1,
|
|
19
12
|
tips: '仅支持 jpg、jpeg、gif、png 格式 建议图片最小尺寸 150*150px',
|
|
20
|
-
previewTitle: '预览'
|
|
21
|
-
handleSaveInfo: function handleSaveInfo(data, onCancel, image) {
|
|
22
|
-
if (!image) {
|
|
23
|
-
return;
|
|
24
|
-
} else {
|
|
25
|
-
(0, _requestApi.saveUserInfo)({
|
|
26
|
-
data: data
|
|
27
|
-
}).then(function (resp) {
|
|
28
|
-
if (resp.Code === 1) {
|
|
29
|
-
_toast["default"].Success('保存成功', {
|
|
30
|
-
canClose: false
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
onCancel();
|
|
34
|
-
} else {
|
|
35
|
-
_toast["default"].Error(resp.Message, {
|
|
36
|
-
canClose: false
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
}
|
|
13
|
+
previewTitle: '预览'
|
|
42
14
|
}, {
|
|
43
15
|
id: 'enterprise',
|
|
44
16
|
accept: '.jpg,.jpeg,.gif,.png',
|
|
45
17
|
autoCropArea: 1,
|
|
46
18
|
initialAspectRatio: 5,
|
|
47
19
|
tips: '建议 logo 尺寸 400*80 logo 最佳适配颜色为白色 仅支持 jpg、jpeg、gif、png 格式',
|
|
48
|
-
previewTitle: 'logo 预览'
|
|
49
|
-
handleSaveInfo: function handleSaveInfo(data, onCancel, image) {
|
|
50
|
-
if (!image) {
|
|
51
|
-
return;
|
|
52
|
-
} else {
|
|
53
|
-
(0, _requestApi.saveTenantLogo)({
|
|
54
|
-
data: data
|
|
55
|
-
}).then(function (resp) {
|
|
56
|
-
if (resp.Code === 1) {
|
|
57
|
-
_toast["default"].Success('保存成功', {
|
|
58
|
-
canClose: false
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
onCancel();
|
|
62
|
-
} else {
|
|
63
|
-
_toast["default"].Error(resp.Message, {
|
|
64
|
-
canClose: false
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
}
|
|
20
|
+
previewTitle: 'logo 预览'
|
|
70
21
|
}, {
|
|
71
22
|
id: 'browser',
|
|
72
23
|
accept: '',
|
|
73
24
|
autoCropArea: 0.5,
|
|
74
25
|
initialAspectRatio: 1,
|
|
75
26
|
tips: '图标尺寸 18*18,超过将被浏览器压缩',
|
|
76
|
-
previewTitle: '浏览器图标预览'
|
|
77
|
-
handleSaveInfo: function handleSaveInfo(data, onCancel, image) {
|
|
78
|
-
if (!image) {
|
|
79
|
-
return;
|
|
80
|
-
} else {
|
|
81
|
-
(0, _requestApi.saveTenantLogo)({
|
|
82
|
-
data: data
|
|
83
|
-
}).then(function (resp) {
|
|
84
|
-
if (resp.Code === 1) {
|
|
85
|
-
_toast["default"].Success('保存成功', {
|
|
86
|
-
canClose: false
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
onCancel();
|
|
90
|
-
} else {
|
|
91
|
-
_toast["default"].Error(resp.Message, {
|
|
92
|
-
canClose: false
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
}
|
|
27
|
+
previewTitle: '浏览器图标预览'
|
|
98
28
|
}];
|
|
99
29
|
exports.List = List;
|
|
@@ -182,7 +182,7 @@
|
|
|
182
182
|
|
|
183
183
|
.tita-ui-change-person-photo__preview-enterprise-img {
|
|
184
184
|
position: absolute;
|
|
185
|
-
top:
|
|
185
|
+
top: 1px;
|
|
186
186
|
right: 45px;
|
|
187
187
|
width: 70px;
|
|
188
188
|
height: 28px;
|
|
@@ -250,6 +250,10 @@
|
|
|
250
250
|
display: block;
|
|
251
251
|
opacity: 0;
|
|
252
252
|
cursor: pointer;
|
|
253
|
+
width: 56px;
|
|
254
|
+
height: 22px;
|
|
255
|
+
position: absolute;
|
|
256
|
+
left: 124px;
|
|
253
257
|
}
|
|
254
258
|
|
|
255
259
|
.tita-ui-change-person-photo__title-again {
|
|
@@ -266,6 +270,14 @@
|
|
|
266
270
|
color: #2879ff;
|
|
267
271
|
}
|
|
268
272
|
|
|
273
|
+
.tita-ui-change-person-photo__title-again--show:hover {
|
|
274
|
+
color: #DFE3EA;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
.tita-ui-change-person-photo__title-again--hover {
|
|
278
|
+
color: #DFE3EA;
|
|
279
|
+
}
|
|
280
|
+
|
|
269
281
|
.tita-ui-change-person-photo__title-preview {
|
|
270
282
|
margin-right: 54px;
|
|
271
283
|
margin-top: 8px;
|
|
@@ -27,12 +27,20 @@ var _constant = require("./constant");
|
|
|
27
27
|
|
|
28
28
|
require("./index.css");
|
|
29
29
|
|
|
30
|
+
var _uuid = _interopRequireDefault(require("uuid"));
|
|
31
|
+
|
|
32
|
+
var _bsGlobal = require("../../utils/bs-global");
|
|
33
|
+
|
|
30
34
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
31
35
|
|
|
32
36
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
33
37
|
|
|
34
38
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
35
39
|
|
|
40
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
41
|
+
|
|
42
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
43
|
+
|
|
36
44
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
37
45
|
|
|
38
46
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
@@ -47,6 +55,9 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
|
|
|
47
55
|
|
|
48
56
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
49
57
|
|
|
58
|
+
var apiServer = (0, _bsGlobal.getBSGlobal)("apiPath");
|
|
59
|
+
var userid = (0, _bsGlobal.getUserInfo)().Id;
|
|
60
|
+
var tenantId = (0, _bsGlobal.getTenantInfo)().Id;
|
|
50
61
|
var preCls = 'tita-ui-change-person-photo';
|
|
51
62
|
|
|
52
63
|
var ChangePhoto = function ChangePhoto(props) {
|
|
@@ -56,7 +67,7 @@ var ChangePhoto = function ChangePhoto(props) {
|
|
|
56
67
|
type = _props$type === void 0 ? 'browser' : _props$type;
|
|
57
68
|
var modalRef = (0, _react.useRef)();
|
|
58
69
|
|
|
59
|
-
var _useState = (0, _react.useState)(),
|
|
70
|
+
var _useState = (0, _react.useState)(''),
|
|
60
71
|
_useState2 = _slicedToArray(_useState, 2),
|
|
61
72
|
image = _useState2[0],
|
|
62
73
|
setImage = _useState2[1];
|
|
@@ -84,6 +95,11 @@ var ChangePhoto = function ChangePhoto(props) {
|
|
|
84
95
|
_useState10 = _slicedToArray(_useState9, 1),
|
|
85
96
|
item = _useState10[0];
|
|
86
97
|
|
|
98
|
+
var _useState11 = (0, _react.useState)(false),
|
|
99
|
+
_useState12 = _slicedToArray(_useState11, 2),
|
|
100
|
+
isEnter = _useState12[0],
|
|
101
|
+
setIsEnter = _useState12[1];
|
|
102
|
+
|
|
87
103
|
var cropperRef = (0, _react.useRef)(null);
|
|
88
104
|
|
|
89
105
|
var onChange = function onChange(e) {
|
|
@@ -105,95 +121,178 @@ var ChangePhoto = function ChangePhoto(props) {
|
|
|
105
121
|
reader.readAsDataURL(files[0]);
|
|
106
122
|
};
|
|
107
123
|
|
|
124
|
+
var dataURLtoFile = function dataURLtoFile(dataurl, filename) {
|
|
125
|
+
var arr = dataurl.split(','),
|
|
126
|
+
mime = arr[0].match(/:(.*?);/)[1],
|
|
127
|
+
bstr = atob(arr[1]),
|
|
128
|
+
n = bstr.length,
|
|
129
|
+
u8arr = new Uint8Array(n);
|
|
130
|
+
|
|
131
|
+
while (n--) {
|
|
132
|
+
u8arr[n] = bstr.charCodeAt(n);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return new File([u8arr], filename, {
|
|
136
|
+
type: mime
|
|
137
|
+
});
|
|
138
|
+
};
|
|
139
|
+
|
|
108
140
|
var onCrop = function onCrop() {
|
|
109
141
|
var imageElement = cropperRef.current;
|
|
110
142
|
var cropper = imageElement.cropper;
|
|
111
143
|
setCropData(cropper.getCroppedCanvas().toDataURL());
|
|
112
144
|
setUserInfo(cropper.getCroppedCanvas().toDataURL());
|
|
113
|
-
var base64Url = cropper.getCroppedCanvas().toDataURL();
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
145
|
+
var base64Url = cropper.getCroppedCanvas().toDataURL();
|
|
146
|
+
var newFile = dataURLtoFile(base64Url, 'test1234');
|
|
147
|
+
console.log(newFile);
|
|
117
148
|
var formData = new FormData();
|
|
118
|
-
formData.append('file',
|
|
149
|
+
formData.append('file', newFile);
|
|
150
|
+
console.log(formData);
|
|
119
151
|
setCropper(formData);
|
|
120
152
|
};
|
|
121
153
|
|
|
122
|
-
var
|
|
123
|
-
var
|
|
124
|
-
var ab = new ArrayBuffer(bytes.length);
|
|
125
|
-
var ia = new Uint8Array(ab);
|
|
126
|
-
|
|
127
|
-
for (var i = 0; i < bytes.length; i++) {
|
|
128
|
-
ia[i] = bytes.charCodeAt(i);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
return new Blob([ab], {
|
|
132
|
-
type: 'image/png'
|
|
133
|
-
});
|
|
134
|
-
};
|
|
154
|
+
var handleSaveInfo = function handleSaveInfo() {
|
|
155
|
+
var timestamp = new Date().getTime(); // 给每个文件加一个时间戳
|
|
135
156
|
|
|
136
|
-
var handleSaveUserInfo = function handleSaveUserInfo() {
|
|
137
157
|
if (!image) {
|
|
138
158
|
return;
|
|
139
159
|
} else {
|
|
140
|
-
(
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
})
|
|
160
|
+
if (type === "person") {
|
|
161
|
+
(0, _requestApi.saveUserPhoto)(cropper).then(function (resp) {
|
|
162
|
+
if (resp.Code === 1) {
|
|
163
|
+
_toast["default"].Success('保存成功', {
|
|
164
|
+
canClose: false
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
onCancel();
|
|
168
|
+
} else {
|
|
169
|
+
_toast["default"].Error(resp.Message, {
|
|
170
|
+
canClose: false
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
} else if (type === "enterprise") {
|
|
175
|
+
// console.log(cropper);
|
|
176
|
+
(0, _requestApi.saveTenantLogo)(cropper).then(function (resp) {
|
|
177
|
+
if (resp.Code === 1) {
|
|
178
|
+
_toast["default"].Success('保存成功', {
|
|
179
|
+
canClose: false
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
onCancel();
|
|
183
|
+
} else {
|
|
184
|
+
_toast["default"].Error(resp.Message, {
|
|
185
|
+
canClose: false
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
}); // axios({headers: {
|
|
189
|
+
// 'Content-Type': 'multipart/form-data',
|
|
190
|
+
// },
|
|
191
|
+
// method: 'post',
|
|
192
|
+
// data: cropper,
|
|
193
|
+
// url: `${apiServer}/api/v1/${tenantId}/${userid}/tenant/update/logo?format=json×tamp=${timestamp}`})
|
|
194
|
+
// dealSelectFiles(image)
|
|
195
|
+
} else {
|
|
196
|
+
(0, _requestApi.saveBrowserIcon)(cropper).then(function (resp) {
|
|
197
|
+
if (resp.Code === 1) {
|
|
198
|
+
_toast["default"].Success('保存成功', {
|
|
199
|
+
canClose: false
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
onCancel();
|
|
203
|
+
} else {
|
|
204
|
+
_toast["default"].Error(resp.Message, {
|
|
205
|
+
canClose: false
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
}
|
|
155
210
|
}
|
|
156
211
|
};
|
|
157
212
|
|
|
158
|
-
var
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
213
|
+
var _useState13 = (0, _react.useState)(),
|
|
214
|
+
_useState14 = _slicedToArray(_useState13, 2),
|
|
215
|
+
uploadSuccessFile = _useState14[0],
|
|
216
|
+
setUploadSuccessFile = _useState14[1];
|
|
217
|
+
|
|
218
|
+
var dealSelectFiles = function dealSelectFiles(uploadSelectFile) {
|
|
219
|
+
var uploadStartFiles = []; // 开始上传的文件
|
|
220
|
+
|
|
221
|
+
var formData = new FormData(); // FormData 对象
|
|
222
|
+
|
|
223
|
+
var uploadStartFile;
|
|
224
|
+
var timestamp = new Date().getTime(); // 给每个文件加一个时间戳
|
|
225
|
+
// let uploadFileType = uploadSelectFile.name.substring(uploadSelectFile.name.lastIndexOf('.') + 1);
|
|
226
|
+
|
|
227
|
+
uploadStartFile = {
|
|
228
|
+
FileName: uploadSelectFile.name,
|
|
229
|
+
// FileType: _dealAttachmentType(uploadFileType).FileType,
|
|
230
|
+
FileSize: uploadSelectFile.size,
|
|
231
|
+
FileLastModified: uploadSelectFile.lastModified,
|
|
232
|
+
// IsImage: _dealAttachmentType(uploadFileType).IsImage,
|
|
233
|
+
percentComplete: 0,
|
|
234
|
+
uploadStatus: 1,
|
|
235
|
+
// 开始上传
|
|
236
|
+
IsSuccess: false,
|
|
237
|
+
uid: (0, _uuid["default"])(),
|
|
238
|
+
_smallImageUrl: '',
|
|
239
|
+
_bigImageUrl: '',
|
|
240
|
+
MediaType: '',
|
|
241
|
+
UserId: 0,
|
|
242
|
+
MaxDocCount: 0,
|
|
243
|
+
DfsPath: '',
|
|
244
|
+
ClientUrl: '',
|
|
245
|
+
SmallImageUrl: '',
|
|
246
|
+
BigImageUrl: '',
|
|
247
|
+
DownloadUrl: '',
|
|
248
|
+
Msg: '',
|
|
249
|
+
AllowUploadAttachmentSize: 50,
|
|
250
|
+
Deleteable: true,
|
|
251
|
+
requestXHR: new XMLHttpRequest() //在这创建是为了取消用
|
|
252
|
+
|
|
253
|
+
}; // uploadStartFiles.push(uploadStartFile);
|
|
254
|
+
// _dealUploadStart(uploadStartFiles); // 处理开始上传的文件
|
|
255
|
+
|
|
256
|
+
formData.append('file', uploadSelectFile);
|
|
257
|
+
var url = "".concat(apiServer, "/api/v1/").concat(tenantId, "/").concat(userid, "/tenant/update/logo");
|
|
258
|
+
|
|
259
|
+
_dealUploadXHRRequest(formData, url, uploadStartFile);
|
|
260
|
+
};
|
|
261
|
+
/**
|
|
262
|
+
* 处理文件上传请求
|
|
263
|
+
*
|
|
264
|
+
* @formData
|
|
265
|
+
* @url 上传文件请求地址
|
|
266
|
+
* @uploadStartFile 上传的文件
|
|
267
|
+
*
|
|
268
|
+
* @memberof Upload
|
|
269
|
+
*/
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
var _dealUploadXHRRequest = function _dealUploadXHRRequest(formData, url, uploadStartFile) {
|
|
273
|
+
var xhr = uploadStartFile.requestXHR;
|
|
274
|
+
|
|
275
|
+
xhr.onreadystatechange = function () {
|
|
276
|
+
if (xhr.readyState == 4 && xhr.status == 200) {
|
|
277
|
+
var result = Object.assign({}, _objectSpread({}, JSON.parse(xhr.responseText).Result[0])); // 上传成功接口返回数据
|
|
278
|
+
|
|
279
|
+
result.percentComplete = 100;
|
|
280
|
+
result.IsSuccess = !!result.IsSuccess;
|
|
281
|
+
result.uploadStatus = result.IsSuccess ? 3 : 4; // 3上传成功;4上传失败
|
|
282
|
+
// _dealUploadSuccess({ ...uploadStartFile, ...result });
|
|
283
|
+
}
|
|
284
|
+
};
|
|
285
|
+
|
|
286
|
+
xhr.open('POST', url, true);
|
|
287
|
+
xhr.send(formData); //开始上传,发送form数据
|
|
176
288
|
};
|
|
177
289
|
|
|
178
|
-
var
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
if (resp.Code === 1) {
|
|
185
|
-
_toast["default"].Success('保存成功', {
|
|
186
|
-
canClose: false
|
|
187
|
-
});
|
|
188
|
-
|
|
189
|
-
onCancel();
|
|
190
|
-
} else {
|
|
191
|
-
_toast["default"].Error(resp.Message, {
|
|
192
|
-
canClose: false
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
});
|
|
196
|
-
}
|
|
290
|
+
var handleEnterAgain = function handleEnterAgain() {
|
|
291
|
+
setIsEnter(true);
|
|
292
|
+
};
|
|
293
|
+
|
|
294
|
+
var handleLeaveAgain = function handleLeaveAgain() {
|
|
295
|
+
setIsEnter(false);
|
|
197
296
|
};
|
|
198
297
|
|
|
199
298
|
return /*#__PURE__*/_react["default"].createElement(_dialog["default"], {
|
|
@@ -209,7 +308,7 @@ var ChangePhoto = function ChangePhoto(props) {
|
|
|
209
308
|
onCancel: onCancel,
|
|
210
309
|
okText: "\u4FDD\u5B58",
|
|
211
310
|
noFooterLine: true,
|
|
212
|
-
onOk:
|
|
311
|
+
onOk: handleSaveInfo
|
|
213
312
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
214
313
|
className: preCls
|
|
215
314
|
}, !image ? /*#__PURE__*/_react["default"].createElement("div", {
|
|
@@ -318,9 +417,11 @@ var ChangePhoto = function ChangePhoto(props) {
|
|
|
318
417
|
accept: item === null || item === void 0 ? void 0 : item.accept,
|
|
319
418
|
type: "file",
|
|
320
419
|
onChange: onChange,
|
|
321
|
-
className: (0, _classnames["default"])("".concat(preCls, "__title-input"), _defineProperty({}, "".concat(preCls, "__title-input--show"), image))
|
|
420
|
+
className: (0, _classnames["default"])("".concat(preCls, "__title-input"), _defineProperty({}, "".concat(preCls, "__title-input--show"), image)),
|
|
421
|
+
onMouseEnter: handleEnterAgain,
|
|
422
|
+
onMouseLeave: handleLeaveAgain
|
|
322
423
|
}), /*#__PURE__*/_react["default"].createElement("span", {
|
|
323
|
-
className: (0, _classnames["default"])("".concat(preCls, "__title-again"), _defineProperty({}, "".concat(preCls, "__title-again--show"), image))
|
|
424
|
+
className: (0, _classnames["default"])("".concat(preCls, "__title-again"), _defineProperty({}, "".concat(preCls, "__title-again--show"), image), _defineProperty({}, "".concat(preCls, "__title-again--hover"), isEnter))
|
|
324
425
|
}, "\u91CD\u65B0\u4E0A\u4F20"), /*#__PURE__*/_react["default"].createElement(_conditionRender["default"], {
|
|
325
426
|
condition: type === 'person'
|
|
326
427
|
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.saveUserInfo = exports.saveTenantLogo = exports.saveBrowserIcon = exports.getUserInfoFun = void 0;
|
|
6
|
+
exports.saveUserPhoto = exports.saveUserInfo = exports.saveTenantLogo = exports.saveBrowserIcon = exports.getUserInfoFun = void 0;
|
|
7
7
|
|
|
8
8
|
var _qs = _interopRequireDefault(require("qs"));
|
|
9
9
|
|
|
@@ -23,7 +23,7 @@ var saveUserInfo = function saveUserInfo(_ref) {
|
|
|
23
23
|
var data = _ref.data;
|
|
24
24
|
return (0, _request.rput)("v1")("manage/user/update", data, {
|
|
25
25
|
"headers": {
|
|
26
|
-
"Content-Type": "
|
|
26
|
+
"Content-Type": "multipart/form-data"
|
|
27
27
|
},
|
|
28
28
|
"transformRequest": _qs["default"].stringify
|
|
29
29
|
});
|
|
@@ -31,14 +31,32 @@ var saveUserInfo = function saveUserInfo(_ref) {
|
|
|
31
31
|
|
|
32
32
|
exports.saveUserInfo = saveUserInfo;
|
|
33
33
|
|
|
34
|
+
var saveUserPhoto = function saveUserPhoto(params) {
|
|
35
|
+
return (0, _request.rpost)("v1")("manage/user/avatar", params, {
|
|
36
|
+
"headers": {
|
|
37
|
+
"Content-Type": "multipart/form-data"
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
exports.saveUserPhoto = saveUserPhoto;
|
|
43
|
+
|
|
34
44
|
var saveTenantLogo = function saveTenantLogo(params) {
|
|
35
|
-
return (0, _request.rpost)("v1")("tenant/update/logo", params
|
|
45
|
+
return (0, _request.rpost)("v1")("tenant/update/logo", params, {
|
|
46
|
+
"headers": {
|
|
47
|
+
"Content-Type": "multipart/form-data"
|
|
48
|
+
}
|
|
49
|
+
});
|
|
36
50
|
};
|
|
37
51
|
|
|
38
52
|
exports.saveTenantLogo = saveTenantLogo;
|
|
39
53
|
|
|
40
54
|
var saveBrowserIcon = function saveBrowserIcon(params) {
|
|
41
|
-
return (0, _request.rpost)("v1")("tenant/update/browerIcon", params
|
|
55
|
+
return (0, _request.rpost)("v1")("tenant/update/browerIcon", params, {
|
|
56
|
+
"headers": {
|
|
57
|
+
"Content-Type": "multipart/form-data"
|
|
58
|
+
}
|
|
59
|
+
});
|
|
42
60
|
};
|
|
43
61
|
|
|
44
62
|
exports.saveBrowserIcon = saveBrowserIcon;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
.titaui-edit-personal-info__form .titaui-form {
|
|
2
|
+
box-sizing: border-box;
|
|
3
|
+
padding: 0 32px;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.titaui-edit-personal-info__form .form-field-input__label {
|
|
7
|
+
width: 62px;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.titaui-edit-personal-info__form .form-field-input__label-text {
|
|
11
|
+
font-size: 14px;
|
|
12
|
+
font-weight: 400;
|
|
13
|
+
color: #89919F;
|
|
14
|
+
line-height: 22px;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.titaui-edit-personal-info__form .rc-tooltip {
|
|
18
|
+
left: 110.5px !important;
|
|
19
|
+
}
|
|
@@ -9,14 +9,16 @@ exports["default"] = void 0;
|
|
|
9
9
|
|
|
10
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
11
11
|
|
|
12
|
+
var _form = _interopRequireDefault(require("../../../../components/form"));
|
|
13
|
+
|
|
12
14
|
var _requestApi = require("../../request-api");
|
|
13
15
|
|
|
14
16
|
var _toast = _interopRequireDefault(require("../../../../components/toast"));
|
|
15
17
|
|
|
16
|
-
var _input = _interopRequireDefault(require("./input"));
|
|
17
|
-
|
|
18
18
|
var _dialog = _interopRequireDefault(require("../../../../components/dialog"));
|
|
19
19
|
|
|
20
|
+
require("./index.css");
|
|
21
|
+
|
|
20
22
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
21
23
|
|
|
22
24
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
@@ -41,10 +43,15 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
|
|
|
41
43
|
|
|
42
44
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
43
45
|
|
|
46
|
+
var Fields = _form["default"].Fields;
|
|
47
|
+
var prefix = "titaui-edit-personal-info";
|
|
48
|
+
|
|
44
49
|
var EditBaseInfo = function EditBaseInfo(props) {
|
|
45
50
|
var visible = props.visible,
|
|
46
51
|
onCancel = props.onCancel;
|
|
47
52
|
var modalRef = (0, _react.useRef)();
|
|
53
|
+
var formContainerRef = (0, _react.useRef)();
|
|
54
|
+
var formRef = (0, _react.useRef)();
|
|
48
55
|
|
|
49
56
|
var _useState = (0, _react.useState)(false),
|
|
50
57
|
_useState2 = _slicedToArray(_useState, 2),
|
|
@@ -143,12 +150,21 @@ var EditBaseInfo = function EditBaseInfo(props) {
|
|
|
143
150
|
noFooterLine: true,
|
|
144
151
|
onOk: handleSaveUserInfo,
|
|
145
152
|
disabled: isDisable
|
|
146
|
-
}, /*#__PURE__*/_react["default"].createElement(
|
|
153
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
154
|
+
className: "".concat(prefix, "__form"),
|
|
155
|
+
ref: formContainerRef
|
|
156
|
+
}, /*#__PURE__*/_react["default"].createElement(_form["default"], {
|
|
157
|
+
ref: formRef,
|
|
158
|
+
getFormContainer: function getFormContainer() {
|
|
159
|
+
return formContainerRef.current;
|
|
160
|
+
}
|
|
161
|
+
}, /*#__PURE__*/_react["default"].createElement(Fields.Input, {
|
|
147
162
|
name: "name",
|
|
148
163
|
label: '姓名',
|
|
149
164
|
placeholder: '请输入姓名',
|
|
150
165
|
type: "text",
|
|
151
166
|
require: true,
|
|
167
|
+
layout: "row",
|
|
152
168
|
verifies: [{
|
|
153
169
|
tip: '姓名不能为空',
|
|
154
170
|
test: /\S/
|
|
@@ -158,12 +174,13 @@ var EditBaseInfo = function EditBaseInfo(props) {
|
|
|
158
174
|
}],
|
|
159
175
|
value: userInfo.name,
|
|
160
176
|
onChange: handleNameChange
|
|
161
|
-
}), /*#__PURE__*/_react["default"].createElement(
|
|
177
|
+
}), /*#__PURE__*/_react["default"].createElement(Fields.Input, {
|
|
162
178
|
name: "phone",
|
|
163
179
|
type: "text",
|
|
164
180
|
label: '手机号码',
|
|
165
181
|
placeholder: '请输入手机号',
|
|
166
182
|
require: true,
|
|
183
|
+
layout: "row",
|
|
167
184
|
value: userInfo.mobile,
|
|
168
185
|
verifies: [{
|
|
169
186
|
tip: '手机号不能为空',
|
|
@@ -173,19 +190,19 @@ var EditBaseInfo = function EditBaseInfo(props) {
|
|
|
173
190
|
test: /^1[3456789]\d{9}$/
|
|
174
191
|
}],
|
|
175
192
|
onChange: handlePhoneChange
|
|
176
|
-
}), /*#__PURE__*/_react["default"].createElement(
|
|
193
|
+
}), /*#__PURE__*/_react["default"].createElement(Fields.Input, {
|
|
177
194
|
name: "email",
|
|
178
195
|
type: "text",
|
|
179
196
|
label: '邮箱',
|
|
180
197
|
value: userInfo.email,
|
|
181
|
-
|
|
198
|
+
layout: "row",
|
|
182
199
|
placeholder: '请输入邮箱',
|
|
183
200
|
verifies: [{
|
|
184
201
|
tip: '邮箱格式错误',
|
|
185
202
|
test: /^([a-zA-Z0-9_-]|\.)+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/
|
|
186
203
|
}],
|
|
187
204
|
onChange: handleEmailChange
|
|
188
|
-
}));
|
|
205
|
+
}))));
|
|
189
206
|
};
|
|
190
207
|
|
|
191
208
|
var _default = EditBaseInfo;
|
package/package.json
CHANGED
|
@@ -48,6 +48,7 @@ $font-family: -apple-system, Arial, Verdana, Helvetica Neue, Helvetica, sans-ser
|
|
|
48
48
|
|
|
49
49
|
.rc-dialog-header {
|
|
50
50
|
padding: 18px 32px;
|
|
51
|
+
margin-bottom: 10px;
|
|
51
52
|
}
|
|
52
53
|
.rc-dialog-body {
|
|
53
54
|
// padding: 0 32px 0 32px;
|
|
@@ -55,6 +56,7 @@ $font-family: -apple-system, Arial, Verdana, Helvetica Neue, Helvetica, sans-ser
|
|
|
55
56
|
}
|
|
56
57
|
.rc-dialog-footer {
|
|
57
58
|
padding: 20px 32px;
|
|
59
|
+
margin-top: 8px;
|
|
58
60
|
display: flex;
|
|
59
61
|
justify-content: flex-end;
|
|
60
62
|
}
|
|
@@ -98,7 +100,7 @@ $font-family: -apple-system, Arial, Verdana, Helvetica Neue, Helvetica, sans-ser
|
|
|
98
100
|
}
|
|
99
101
|
|
|
100
102
|
&__btn-cancel {
|
|
101
|
-
border: 1px solid #
|
|
103
|
+
border: 1px solid #DFE3EA;
|
|
102
104
|
color: #6f7886;
|
|
103
105
|
transition: 0.2s all;
|
|
104
106
|
&:hover {
|
|
@@ -23,7 +23,8 @@
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
&-require {
|
|
26
|
-
color:
|
|
26
|
+
color: #F05E5E;
|
|
27
|
+
margin-left: 2px;
|
|
27
28
|
}
|
|
28
29
|
}
|
|
29
30
|
|
|
@@ -31,7 +32,7 @@
|
|
|
31
32
|
padding: 6px 12px;
|
|
32
33
|
border-radius: 8px;
|
|
33
34
|
transition: all 0.2s;
|
|
34
|
-
border: 1px solid #
|
|
35
|
+
border: 1px solid #DFE3EA;
|
|
35
36
|
box-sizing: border-box;
|
|
36
37
|
|
|
37
38
|
&--disabled {
|
|
@@ -171,8 +171,8 @@ export default class Upload extends PureComponent<Props, State> {
|
|
|
171
171
|
return;
|
|
172
172
|
};
|
|
173
173
|
uploadStartFiles.push(uploadStartFile);
|
|
174
|
-
this._dealUploadStart(uploadStartFiles); // 处理开始上传的文件
|
|
175
|
-
formData.append('file', element);
|
|
174
|
+
this._dealUploadStart(uploadStartFiles); // 处理开始上传的文件
|
|
175
|
+
formData.append('file', element);
|
|
176
176
|
let url = action || getApiUrl(`Upload/PostFiles?format=json×tamp=${timestamp}`);
|
|
177
177
|
this._dealUploadXHRRequest(formData, url, uploadStartFile);
|
|
178
178
|
});
|
|
@@ -197,7 +197,7 @@ export default class Upload extends PureComponent<Props, State> {
|
|
|
197
197
|
let xhr = uploadStartFile.requestXHR;
|
|
198
198
|
xhr.onreadystatechange = () => {
|
|
199
199
|
if (xhr.readyState == 4 && xhr.status == 200) {
|
|
200
|
-
let result = Object.assign({}, { ...JSON.parse(xhr.responseText).Result[0] }); // 上传成功接口返回数据
|
|
200
|
+
let result = Object.assign({}, { ...JSON.parse(xhr.responseText).Result[0] }); // 上传成功接口返回数据
|
|
201
201
|
result.percentComplete = 100;
|
|
202
202
|
result.IsSuccess = !!result.IsSuccess;
|
|
203
203
|
result.uploadStatus = result.IsSuccess ? 3 : 4; // 3上传成功;4上传失败
|
|
@@ -227,7 +227,7 @@ export default class Upload extends PureComponent<Props, State> {
|
|
|
227
227
|
}
|
|
228
228
|
});
|
|
229
229
|
this.setState({ uploadSuccessFiles });
|
|
230
|
-
};
|
|
230
|
+
};
|
|
231
231
|
xhr.open('POST', url, true);
|
|
232
232
|
xhr.send(formData); //开始上传,发送form数据
|
|
233
233
|
};
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { saveUserInfo, saveTenantLogo } from "./request-api";
|
|
2
|
-
import Toast from '../../components/toast';
|
|
3
1
|
|
|
4
2
|
export const List = [
|
|
5
3
|
{
|
|
@@ -9,20 +7,6 @@ export const List = [
|
|
|
9
7
|
initialAspectRatio: 1,
|
|
10
8
|
tips: '仅支持 jpg、jpeg、gif、png 格式 建议图片最小尺寸 150*150px',
|
|
11
9
|
previewTitle: '预览',
|
|
12
|
-
handleSaveInfo: (data, onCancel, image) => {
|
|
13
|
-
if (!image) {
|
|
14
|
-
return;
|
|
15
|
-
} else {
|
|
16
|
-
saveUserInfo({ data: data }).then((resp) => {
|
|
17
|
-
if (resp.Code === 1) {
|
|
18
|
-
Toast.Success('保存成功', { canClose: false });
|
|
19
|
-
onCancel();
|
|
20
|
-
} else {
|
|
21
|
-
Toast.Error(resp.Message, { canClose: false });
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
10
|
},
|
|
27
11
|
{
|
|
28
12
|
id: 'enterprise',
|
|
@@ -31,20 +15,6 @@ export const List = [
|
|
|
31
15
|
initialAspectRatio: 5,
|
|
32
16
|
tips: '建议 logo 尺寸 400*80 logo 最佳适配颜色为白色 仅支持 jpg、jpeg、gif、png 格式',
|
|
33
17
|
previewTitle: 'logo 预览',
|
|
34
|
-
handleSaveInfo: (data, onCancel, image) => {
|
|
35
|
-
if (!image) {
|
|
36
|
-
return;
|
|
37
|
-
} else {
|
|
38
|
-
saveTenantLogo({ data: data }).then((resp) => {
|
|
39
|
-
if (resp.Code === 1) {
|
|
40
|
-
Toast.Success('保存成功', { canClose: false });
|
|
41
|
-
onCancel();
|
|
42
|
-
} else {
|
|
43
|
-
Toast.Error(resp.Message, { canClose: false });
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
},
|
|
48
18
|
},
|
|
49
19
|
{
|
|
50
20
|
id: 'browser',
|
|
@@ -53,19 +23,5 @@ export const List = [
|
|
|
53
23
|
initialAspectRatio: 1,
|
|
54
24
|
tips: '图标尺寸 18*18,超过将被浏览器压缩',
|
|
55
25
|
previewTitle: '浏览器图标预览',
|
|
56
|
-
handleSaveInfo: (data, onCancel, image) => {
|
|
57
|
-
if (!image) {
|
|
58
|
-
return;
|
|
59
|
-
} else {
|
|
60
|
-
saveTenantLogo({ data: data }).then((resp) => {
|
|
61
|
-
if (resp.Code === 1) {
|
|
62
|
-
Toast.Success('保存成功', { canClose: false });
|
|
63
|
-
onCancel();
|
|
64
|
-
} else {
|
|
65
|
-
Toast.Error(resp.Message, { canClose: false });
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
},
|
|
70
26
|
}
|
|
71
27
|
];
|
|
@@ -160,7 +160,7 @@
|
|
|
160
160
|
&-enterprise {
|
|
161
161
|
&-img {
|
|
162
162
|
position: absolute;
|
|
163
|
-
top:
|
|
163
|
+
top: 1px;
|
|
164
164
|
right: 45px;
|
|
165
165
|
width: 70px;
|
|
166
166
|
height: 28px;
|
|
@@ -222,6 +222,10 @@
|
|
|
222
222
|
display: block;
|
|
223
223
|
opacity: 0;
|
|
224
224
|
cursor: pointer;
|
|
225
|
+
width: 56px;
|
|
226
|
+
height: 22px;
|
|
227
|
+
position: absolute;
|
|
228
|
+
left: 124px;
|
|
225
229
|
}
|
|
226
230
|
}
|
|
227
231
|
&-again {
|
|
@@ -234,6 +238,12 @@
|
|
|
234
238
|
&--show {
|
|
235
239
|
cursor: pointer;
|
|
236
240
|
color: #2879ff;
|
|
241
|
+
&:hover {
|
|
242
|
+
color: #DFE3EA;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
&--hover {
|
|
246
|
+
color: #DFE3EA;
|
|
237
247
|
}
|
|
238
248
|
}
|
|
239
249
|
&-preview {
|
|
@@ -4,10 +4,18 @@ import Cropper from 'react-cropper';
|
|
|
4
4
|
import 'cropperjs/dist/cropper.css';
|
|
5
5
|
import Toast from '../../components/toast';
|
|
6
6
|
import ConditionRender from '../condition-render';
|
|
7
|
-
import { saveUserInfo, saveTenantLogo, saveBrowserIcon } from './request-api';
|
|
7
|
+
import { saveUserInfo, saveTenantLogo, saveBrowserIcon, saveUserPhoto } from './request-api';
|
|
8
8
|
import Dialog from '../../components/dialog';
|
|
9
9
|
import { List } from './constant'
|
|
10
10
|
import './index.scss';
|
|
11
|
+
import uuid from 'uuid';
|
|
12
|
+
import { rput, rpost } from "../../utils/request";
|
|
13
|
+
import axios from 'axios';
|
|
14
|
+
import { getBSGlobal, getUserInfo, getTenantInfo } from '../../utils/bs-global';
|
|
15
|
+
const apiServer = getBSGlobal("apiPath")
|
|
16
|
+
const userid = getUserInfo().Id;
|
|
17
|
+
const tenantId = getTenantInfo().Id
|
|
18
|
+
|
|
11
19
|
|
|
12
20
|
const preCls = 'tita-ui-change-person-photo';
|
|
13
21
|
|
|
@@ -22,11 +30,12 @@ const ChangePhoto = (props: Props) => {
|
|
|
22
30
|
|
|
23
31
|
const modalRef = useRef<any>();
|
|
24
32
|
|
|
25
|
-
const [ image, setImage ] = useState();
|
|
33
|
+
const [ image, setImage ] = useState('');
|
|
26
34
|
const [ cropper, setCropper ] = useState<any>();
|
|
27
35
|
const [ cropData, setCropData ] = useState('#');
|
|
28
36
|
const [ userInfo, setUserInfo ] = useState({ Avatar: '' });
|
|
29
37
|
const [item] = useState(List.find(item => item.id === type));
|
|
38
|
+
const [isEnter, setIsEnter] = useState(false);
|
|
30
39
|
|
|
31
40
|
const cropperRef = useRef<HTMLImageElement>(null);
|
|
32
41
|
|
|
@@ -45,77 +54,160 @@ const ChangePhoto = (props: Props) => {
|
|
|
45
54
|
reader.readAsDataURL(files[0]);
|
|
46
55
|
};
|
|
47
56
|
|
|
57
|
+
|
|
58
|
+
const dataURLtoFile = (dataurl, filename) => {
|
|
59
|
+
var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
|
|
60
|
+
bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
|
|
61
|
+
while(n--){
|
|
62
|
+
u8arr[n] = bstr.charCodeAt(n);
|
|
63
|
+
}
|
|
64
|
+
return new File([u8arr], filename, {type:mime});
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
|
|
48
68
|
const onCrop = () => {
|
|
69
|
+
|
|
49
70
|
const imageElement: any = cropperRef.current;
|
|
50
71
|
const cropper: any = imageElement.cropper;
|
|
72
|
+
|
|
51
73
|
setCropData(cropper.getCroppedCanvas().toDataURL());
|
|
52
74
|
setUserInfo(cropper.getCroppedCanvas().toDataURL());
|
|
53
75
|
|
|
54
76
|
let base64Url = cropper.getCroppedCanvas().toDataURL();
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
77
|
+
|
|
78
|
+
const newFile = dataURLtoFile(base64Url, 'test1234');
|
|
79
|
+
console.log(newFile);
|
|
80
|
+
|
|
81
|
+
|
|
58
82
|
let formData = new FormData();
|
|
59
|
-
formData.append('file', FileOrBlob, "file_" + Date.parse(new Date()) + ".png");
|
|
60
|
-
setCropper(formData)
|
|
61
|
-
};
|
|
62
83
|
|
|
63
|
-
|
|
64
|
-
var bytes = window.atob(urlData.split(',')[1]);
|
|
65
|
-
var ab = new ArrayBuffer(bytes.length);
|
|
66
|
-
var ia = new Uint8Array(ab);
|
|
67
|
-
for (var i = 0; i < bytes.length; i++) {
|
|
68
|
-
ia[i] = bytes.charCodeAt(i);
|
|
69
|
-
}
|
|
70
|
-
return new Blob([ab], { type: 'image/png' });
|
|
71
|
-
}
|
|
84
|
+
formData.append('file', newFile);
|
|
72
85
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
return;
|
|
76
|
-
} else {
|
|
77
|
-
saveUserInfo({ data: userInfo }).then((resp) => {
|
|
78
|
-
if (resp.Code === 1) {
|
|
79
|
-
Toast.Success('保存成功', { canClose: false });
|
|
80
|
-
onCancel();
|
|
81
|
-
} else {
|
|
82
|
-
Toast.Error(resp.Message, { canClose: false });
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
+
console.log(formData);
|
|
87
|
+
setCropper(formData);
|
|
86
88
|
};
|
|
89
|
+
|
|
87
90
|
const handleSaveInfo = () => {
|
|
91
|
+
let timestamp = new Date().getTime(); // 给每个文件加一个时间戳
|
|
88
92
|
if (!image) {
|
|
89
93
|
return;
|
|
90
|
-
} else {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
94
|
+
} else {
|
|
95
|
+
if(type === "person") {
|
|
96
|
+
saveUserPhoto(cropper).then((resp) => {
|
|
97
|
+
if (resp.Code === 1) {
|
|
98
|
+
Toast.Success('保存成功', { canClose: false });
|
|
99
|
+
onCancel();
|
|
100
|
+
} else {
|
|
101
|
+
Toast.Error(resp.Message, { canClose: false });
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
} else if(type === "enterprise") {
|
|
105
|
+
// console.log(cropper);
|
|
106
|
+
|
|
107
|
+
saveTenantLogo( cropper ).then((resp) => {
|
|
108
|
+
if (resp.Code === 1) {
|
|
109
|
+
Toast.Success('保存成功', { canClose: false });
|
|
110
|
+
onCancel();
|
|
111
|
+
} else {
|
|
112
|
+
Toast.Error(resp.Message, { canClose: false });
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
// axios({headers: {
|
|
116
|
+
// 'Content-Type': 'multipart/form-data',
|
|
117
|
+
// },
|
|
118
|
+
// method: 'post',
|
|
119
|
+
// data: cropper,
|
|
120
|
+
// url: `${apiServer}/api/v1/${tenantId}/${userid}/tenant/update/logo?format=json×tamp=${timestamp}`})
|
|
121
|
+
// dealSelectFiles(image)
|
|
122
|
+
} else {
|
|
123
|
+
saveBrowserIcon( cropper ).then((resp) => {
|
|
124
|
+
if (resp.Code === 1) {
|
|
125
|
+
Toast.Success('保存成功', { canClose: false });
|
|
126
|
+
onCancel();
|
|
127
|
+
} else {
|
|
128
|
+
Toast.Error(resp.Message, { canClose: false });
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
}
|
|
99
132
|
}
|
|
100
133
|
};
|
|
101
134
|
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
135
|
+
const [uploadSuccessFile, setUploadSuccessFile] = useState();
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
const dealSelectFiles = (uploadSelectFile) => {
|
|
139
|
+
|
|
140
|
+
let uploadStartFiles = []; // 开始上传的文件
|
|
141
|
+
let formData = new FormData(); // FormData 对象
|
|
142
|
+
let uploadStartFile;
|
|
143
|
+
let timestamp = new Date().getTime(); // 给每个文件加一个时间戳
|
|
144
|
+
// let uploadFileType = uploadSelectFile.name.substring(uploadSelectFile.name.lastIndexOf('.') + 1);
|
|
145
|
+
|
|
146
|
+
uploadStartFile = {
|
|
147
|
+
FileName: uploadSelectFile.name,
|
|
148
|
+
// FileType: _dealAttachmentType(uploadFileType).FileType,
|
|
149
|
+
FileSize: uploadSelectFile.size,
|
|
150
|
+
FileLastModified: uploadSelectFile.lastModified,
|
|
151
|
+
// IsImage: _dealAttachmentType(uploadFileType).IsImage,
|
|
152
|
+
percentComplete: 0,
|
|
153
|
+
uploadStatus: 1, // 开始上传
|
|
154
|
+
IsSuccess: false,
|
|
155
|
+
uid: uuid(),
|
|
156
|
+
_smallImageUrl: '',
|
|
157
|
+
_bigImageUrl: '',
|
|
158
|
+
MediaType: '',
|
|
159
|
+
UserId: 0,
|
|
160
|
+
MaxDocCount: 0,
|
|
161
|
+
DfsPath: '',
|
|
162
|
+
ClientUrl: '',
|
|
163
|
+
SmallImageUrl: '',
|
|
164
|
+
BigImageUrl: '',
|
|
165
|
+
DownloadUrl: '',
|
|
166
|
+
Msg: '',
|
|
167
|
+
AllowUploadAttachmentSize: 50,
|
|
168
|
+
Deleteable: true,
|
|
169
|
+
requestXHR: new XMLHttpRequest(), //在这创建是为了取消用
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
// uploadStartFiles.push(uploadStartFile);
|
|
173
|
+
// _dealUploadStart(uploadStartFiles); // 处理开始上传的文件
|
|
174
|
+
formData.append('file', uploadSelectFile);
|
|
175
|
+
let url = `${apiServer}/api/v1/${tenantId}/${userid}/tenant/update/logo`;
|
|
176
|
+
_dealUploadXHRRequest(formData, url, uploadStartFile);
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* 处理文件上传请求
|
|
181
|
+
*
|
|
182
|
+
* @formData
|
|
183
|
+
* @url 上传文件请求地址
|
|
184
|
+
* @uploadStartFile 上传的文件
|
|
185
|
+
*
|
|
186
|
+
* @memberof Upload
|
|
187
|
+
*/
|
|
188
|
+
const _dealUploadXHRRequest = (formData: any, url: string, uploadStartFile) => {
|
|
189
|
+
let xhr = uploadStartFile.requestXHR;
|
|
190
|
+
xhr.onreadystatechange = () => {
|
|
191
|
+
if (xhr.readyState == 4 && xhr.status == 200) {
|
|
192
|
+
let result = Object.assign({}, { ...JSON.parse(xhr.responseText).Result[0] }); // 上传成功接口返回数据
|
|
193
|
+
result.percentComplete = 100;
|
|
194
|
+
result.IsSuccess = !!result.IsSuccess;
|
|
195
|
+
result.uploadStatus = result.IsSuccess ? 3 : 4; // 3上传成功;4上传失败
|
|
196
|
+
// _dealUploadSuccess({ ...uploadStartFile, ...result });
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
xhr.open('POST', url, true);
|
|
200
|
+
xhr.send(formData); //开始上传,发送form数据
|
|
117
201
|
};
|
|
118
202
|
|
|
203
|
+
const handleEnterAgain = () => {
|
|
204
|
+
setIsEnter(true);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
const handleLeaveAgain = () => {
|
|
208
|
+
setIsEnter(false);
|
|
209
|
+
}
|
|
210
|
+
|
|
119
211
|
return (
|
|
120
212
|
<Dialog
|
|
121
213
|
visible={visible}
|
|
@@ -130,7 +222,7 @@ const ChangePhoto = (props: Props) => {
|
|
|
130
222
|
onCancel={onCancel}
|
|
131
223
|
okText="保存"
|
|
132
224
|
noFooterLine
|
|
133
|
-
onOk={
|
|
225
|
+
onOk={handleSaveInfo}
|
|
134
226
|
>
|
|
135
227
|
<div className={preCls}>
|
|
136
228
|
{!image ?
|
|
@@ -220,8 +312,10 @@ const ChangePhoto = (props: Props) => {
|
|
|
220
312
|
type="file"
|
|
221
313
|
onChange={onChange}
|
|
222
314
|
className={classNames(`${preCls}__title-input`, { [`${preCls}__title-input--show`]: image })}
|
|
315
|
+
onMouseEnter={handleEnterAgain}
|
|
316
|
+
onMouseLeave={handleLeaveAgain}
|
|
223
317
|
/>
|
|
224
|
-
<span className={classNames(`${preCls}__title-again`, { [`${preCls}__title-again--show`]: image })}>
|
|
318
|
+
<span className={classNames(`${preCls}__title-again`, { [`${preCls}__title-again--show`]: image },{ [`${preCls}__title-again--hover`]: isEnter })}>
|
|
225
319
|
重新上传
|
|
226
320
|
</span>
|
|
227
321
|
<ConditionRender condition={type === 'person'}>
|
|
@@ -8,16 +8,26 @@ export const getUserInfoFun = () => {
|
|
|
8
8
|
|
|
9
9
|
export const saveUserInfo = ({ data }) => {
|
|
10
10
|
return rput("v1")("manage/user/update", data, {
|
|
11
|
-
"headers": { "Content-Type": "
|
|
11
|
+
"headers": { "Content-Type": "multipart/form-data"},
|
|
12
12
|
"transformRequest": qs.stringify,
|
|
13
13
|
});
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
+
export const saveUserPhoto = (params) => {
|
|
17
|
+
return rpost("v1")("manage/user/avatar", params, {
|
|
18
|
+
"headers": { "Content-Type": "multipart/form-data"},
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
|
|
16
22
|
export const saveTenantLogo = (params) => {
|
|
17
|
-
return rpost("v1")("tenant/update/logo", params
|
|
23
|
+
return rpost("v1")("tenant/update/logo", params, {
|
|
24
|
+
"headers": { "Content-Type": "multipart/form-data"},
|
|
25
|
+
});
|
|
18
26
|
}
|
|
19
27
|
|
|
20
28
|
export const saveBrowserIcon = (params) => {
|
|
21
|
-
return rpost("v1")("tenant/update/browerIcon", params
|
|
29
|
+
return rpost("v1")("tenant/update/browerIcon", params, {
|
|
30
|
+
"headers": { "Content-Type": "multipart/form-data"},
|
|
31
|
+
});
|
|
22
32
|
}
|
|
23
33
|
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
.titaui-edit-personal-info {
|
|
2
|
+
&__form {
|
|
3
|
+
.titaui-form {
|
|
4
|
+
box-sizing: border-box;
|
|
5
|
+
padding: 0 32px;
|
|
6
|
+
}
|
|
7
|
+
.form-field-input__label {
|
|
8
|
+
width: 62px;
|
|
9
|
+
}
|
|
10
|
+
.form-field-input__label-text {
|
|
11
|
+
font-size: 14px;
|
|
12
|
+
font-weight: 400;
|
|
13
|
+
color: #89919F;
|
|
14
|
+
line-height: 22px;
|
|
15
|
+
}
|
|
16
|
+
.rc-tooltip {
|
|
17
|
+
left:110.5px !important;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
import React, { useState, useRef, useEffect } from 'react';
|
|
2
|
+
import Form from '../../../../components/form';
|
|
2
3
|
import { getUserInfoFun, saveUserInfo } from '../../request-api';
|
|
3
4
|
import Toast from '../../../../components/toast';
|
|
4
|
-
import Input from './input';
|
|
5
|
+
// import Input from './input';
|
|
5
6
|
import Dialog from '../../../../components/dialog';
|
|
7
|
+
import './index.scss';
|
|
8
|
+
|
|
9
|
+
const { Fields } = Form;
|
|
10
|
+
|
|
11
|
+
const prefix = "titaui-edit-personal-info"
|
|
6
12
|
|
|
7
13
|
const EditBaseInfo = (props) => {
|
|
8
14
|
const { visible, onCancel } = props;
|
|
9
15
|
|
|
10
16
|
const modalRef = useRef<any>();
|
|
17
|
+
const formContainerRef = useRef<any>();
|
|
18
|
+
const formRef = useRef<any>();
|
|
11
19
|
|
|
12
20
|
const [ isDisable, setIsDisable ] = useState(false);
|
|
13
21
|
const [ isEdit, setIsEdit ] = useState(false);
|
|
@@ -92,12 +100,15 @@ const EditBaseInfo = (props) => {
|
|
|
92
100
|
onOk={handleSaveUserInfo}
|
|
93
101
|
disabled={isDisable}
|
|
94
102
|
>
|
|
95
|
-
|
|
103
|
+
<div className={`${prefix}__form`} ref={formContainerRef}>
|
|
104
|
+
<Form ref={formRef} getFormContainer={() => formContainerRef.current}>
|
|
105
|
+
<Fields.Input
|
|
96
106
|
name="name"
|
|
97
107
|
label={'姓名'}
|
|
98
108
|
placeholder={'请输入姓名'}
|
|
99
109
|
type="text"
|
|
100
110
|
require
|
|
111
|
+
layout="row"
|
|
101
112
|
verifies={[
|
|
102
113
|
{
|
|
103
114
|
tip: '姓名不能为空',
|
|
@@ -111,12 +122,13 @@ const EditBaseInfo = (props) => {
|
|
|
111
122
|
value={userInfo.name}
|
|
112
123
|
onChange={handleNameChange}
|
|
113
124
|
/>
|
|
114
|
-
<Input
|
|
125
|
+
<Fields.Input
|
|
115
126
|
name="phone"
|
|
116
127
|
type="text"
|
|
117
128
|
label={'手机号码'}
|
|
118
129
|
placeholder={'请输入手机号'}
|
|
119
130
|
require
|
|
131
|
+
layout="row"
|
|
120
132
|
value={userInfo.mobile}
|
|
121
133
|
verifies={[
|
|
122
134
|
{
|
|
@@ -130,12 +142,12 @@ const EditBaseInfo = (props) => {
|
|
|
130
142
|
]}
|
|
131
143
|
onChange={handlePhoneChange}
|
|
132
144
|
/>
|
|
133
|
-
<Input
|
|
145
|
+
<Fields.Input
|
|
134
146
|
name="email"
|
|
135
147
|
type="text"
|
|
136
148
|
label={'邮箱'}
|
|
137
149
|
value={userInfo.email}
|
|
138
|
-
|
|
150
|
+
layout="row"
|
|
139
151
|
placeholder={'请输入邮箱'}
|
|
140
152
|
verifies={[
|
|
141
153
|
{
|
|
@@ -145,6 +157,8 @@ const EditBaseInfo = (props) => {
|
|
|
145
157
|
]}
|
|
146
158
|
onChange={handleEmailChange}
|
|
147
159
|
/>
|
|
160
|
+
</Form>
|
|
161
|
+
</div>
|
|
148
162
|
</Dialog>
|
|
149
163
|
);
|
|
150
164
|
};
|