@titaui/pc 1.8.0 → 1.8.4
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 +182 -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 +152 -57
- 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,16 @@ 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
|
+
|
|
103
|
+
var _useState13 = (0, _react.useState)(''),
|
|
104
|
+
_useState14 = _slicedToArray(_useState13, 2),
|
|
105
|
+
fileName = _useState14[0],
|
|
106
|
+
setFileName = _useState14[1];
|
|
107
|
+
|
|
87
108
|
var cropperRef = (0, _react.useRef)(null);
|
|
88
109
|
|
|
89
110
|
var onChange = function onChange(e) {
|
|
@@ -96,6 +117,7 @@ var ChangePhoto = function ChangePhoto(props) {
|
|
|
96
117
|
files = e.target.files;
|
|
97
118
|
}
|
|
98
119
|
|
|
120
|
+
setFileName(files[0].name);
|
|
99
121
|
var reader = new FileReader();
|
|
100
122
|
|
|
101
123
|
reader.onload = function () {
|
|
@@ -105,95 +127,178 @@ var ChangePhoto = function ChangePhoto(props) {
|
|
|
105
127
|
reader.readAsDataURL(files[0]);
|
|
106
128
|
};
|
|
107
129
|
|
|
130
|
+
var dataURLtoFile = function dataURLtoFile(dataurl, filename) {
|
|
131
|
+
var arr = dataurl.split(','),
|
|
132
|
+
mime = arr[0].match(/:(.*?);/)[1],
|
|
133
|
+
bstr = atob(arr[1]),
|
|
134
|
+
n = bstr.length,
|
|
135
|
+
u8arr = new Uint8Array(n);
|
|
136
|
+
|
|
137
|
+
while (n--) {
|
|
138
|
+
u8arr[n] = bstr.charCodeAt(n);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return new File([u8arr], filename, {
|
|
142
|
+
type: mime
|
|
143
|
+
});
|
|
144
|
+
};
|
|
145
|
+
|
|
108
146
|
var onCrop = function onCrop() {
|
|
109
147
|
var imageElement = cropperRef.current;
|
|
110
148
|
var cropper = imageElement.cropper;
|
|
111
149
|
setCropData(cropper.getCroppedCanvas().toDataURL());
|
|
112
150
|
setUserInfo(cropper.getCroppedCanvas().toDataURL());
|
|
113
|
-
var base64Url = cropper.getCroppedCanvas().toDataURL();
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
151
|
+
var base64Url = cropper.getCroppedCanvas().toDataURL();
|
|
152
|
+
var newFile = dataURLtoFile(base64Url, fileName);
|
|
153
|
+
console.log(newFile);
|
|
117
154
|
var formData = new FormData();
|
|
118
|
-
formData.append('file',
|
|
155
|
+
formData.append('file', newFile);
|
|
156
|
+
console.log(formData);
|
|
119
157
|
setCropper(formData);
|
|
120
158
|
};
|
|
121
159
|
|
|
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
|
-
};
|
|
160
|
+
var handleSaveInfo = function handleSaveInfo() {
|
|
161
|
+
var timestamp = new Date().getTime(); // 给每个文件加一个时间戳
|
|
135
162
|
|
|
136
|
-
var handleSaveUserInfo = function handleSaveUserInfo() {
|
|
137
163
|
if (!image) {
|
|
138
164
|
return;
|
|
139
165
|
} else {
|
|
140
|
-
(
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
})
|
|
166
|
+
if (type === "person") {
|
|
167
|
+
(0, _requestApi.saveUserPhoto)(cropper).then(function (resp) {
|
|
168
|
+
if (resp.Code === 1) {
|
|
169
|
+
_toast["default"].Success('保存成功', {
|
|
170
|
+
canClose: false
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
onCancel();
|
|
174
|
+
} else {
|
|
175
|
+
_toast["default"].Error(resp.Message, {
|
|
176
|
+
canClose: false
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
} else if (type === "enterprise") {
|
|
181
|
+
// console.log(cropper);
|
|
182
|
+
(0, _requestApi.saveTenantLogo)(cropper).then(function (resp) {
|
|
183
|
+
if (resp.Code === 1) {
|
|
184
|
+
_toast["default"].Success('保存成功', {
|
|
185
|
+
canClose: false
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
onCancel();
|
|
189
|
+
} else {
|
|
190
|
+
_toast["default"].Error(resp.Message, {
|
|
191
|
+
canClose: false
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
}); // axios({headers: {
|
|
195
|
+
// 'Content-Type': 'multipart/form-data',
|
|
196
|
+
// },
|
|
197
|
+
// method: 'post',
|
|
198
|
+
// data: cropper,
|
|
199
|
+
// url: `${apiServer}/api/v1/${tenantId}/${userid}/tenant/update/logo?format=json×tamp=${timestamp}`})
|
|
200
|
+
// dealSelectFiles(image)
|
|
201
|
+
} else {
|
|
202
|
+
(0, _requestApi.saveBrowserIcon)(cropper).then(function (resp) {
|
|
203
|
+
if (resp.Code === 1) {
|
|
204
|
+
_toast["default"].Success('保存成功', {
|
|
205
|
+
canClose: false
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
onCancel();
|
|
209
|
+
} else {
|
|
210
|
+
_toast["default"].Error(resp.Message, {
|
|
211
|
+
canClose: false
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
}
|
|
155
216
|
}
|
|
156
217
|
};
|
|
157
218
|
|
|
158
|
-
var
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
219
|
+
var _useState15 = (0, _react.useState)(),
|
|
220
|
+
_useState16 = _slicedToArray(_useState15, 2),
|
|
221
|
+
uploadSuccessFile = _useState16[0],
|
|
222
|
+
setUploadSuccessFile = _useState16[1];
|
|
223
|
+
|
|
224
|
+
var dealSelectFiles = function dealSelectFiles(uploadSelectFile) {
|
|
225
|
+
var uploadStartFiles = []; // 开始上传的文件
|
|
226
|
+
|
|
227
|
+
var formData = new FormData(); // FormData 对象
|
|
228
|
+
|
|
229
|
+
var uploadStartFile;
|
|
230
|
+
var timestamp = new Date().getTime(); // 给每个文件加一个时间戳
|
|
231
|
+
// let uploadFileType = uploadSelectFile.name.substring(uploadSelectFile.name.lastIndexOf('.') + 1);
|
|
232
|
+
|
|
233
|
+
uploadStartFile = {
|
|
234
|
+
FileName: uploadSelectFile.name,
|
|
235
|
+
// FileType: _dealAttachmentType(uploadFileType).FileType,
|
|
236
|
+
FileSize: uploadSelectFile.size,
|
|
237
|
+
FileLastModified: uploadSelectFile.lastModified,
|
|
238
|
+
// IsImage: _dealAttachmentType(uploadFileType).IsImage,
|
|
239
|
+
percentComplete: 0,
|
|
240
|
+
uploadStatus: 1,
|
|
241
|
+
// 开始上传
|
|
242
|
+
IsSuccess: false,
|
|
243
|
+
uid: (0, _uuid["default"])(),
|
|
244
|
+
_smallImageUrl: '',
|
|
245
|
+
_bigImageUrl: '',
|
|
246
|
+
MediaType: '',
|
|
247
|
+
UserId: 0,
|
|
248
|
+
MaxDocCount: 0,
|
|
249
|
+
DfsPath: '',
|
|
250
|
+
ClientUrl: '',
|
|
251
|
+
SmallImageUrl: '',
|
|
252
|
+
BigImageUrl: '',
|
|
253
|
+
DownloadUrl: '',
|
|
254
|
+
Msg: '',
|
|
255
|
+
AllowUploadAttachmentSize: 50,
|
|
256
|
+
Deleteable: true,
|
|
257
|
+
requestXHR: new XMLHttpRequest() //在这创建是为了取消用
|
|
258
|
+
|
|
259
|
+
}; // uploadStartFiles.push(uploadStartFile);
|
|
260
|
+
// _dealUploadStart(uploadStartFiles); // 处理开始上传的文件
|
|
261
|
+
|
|
262
|
+
formData.append('file', uploadSelectFile);
|
|
263
|
+
var url = "".concat(apiServer, "/api/v1/").concat(tenantId, "/").concat(userid, "/tenant/update/logo");
|
|
264
|
+
|
|
265
|
+
_dealUploadXHRRequest(formData, url, uploadStartFile);
|
|
176
266
|
};
|
|
267
|
+
/**
|
|
268
|
+
* 处理文件上传请求
|
|
269
|
+
*
|
|
270
|
+
* @formData
|
|
271
|
+
* @url 上传文件请求地址
|
|
272
|
+
* @uploadStartFile 上传的文件
|
|
273
|
+
*
|
|
274
|
+
* @memberof Upload
|
|
275
|
+
*/
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
var _dealUploadXHRRequest = function _dealUploadXHRRequest(formData, url, uploadStartFile) {
|
|
279
|
+
var xhr = uploadStartFile.requestXHR;
|
|
280
|
+
|
|
281
|
+
xhr.onreadystatechange = function () {
|
|
282
|
+
if (xhr.readyState == 4 && xhr.status == 200) {
|
|
283
|
+
var result = Object.assign({}, _objectSpread({}, JSON.parse(xhr.responseText).Result[0])); // 上传成功接口返回数据
|
|
284
|
+
|
|
285
|
+
result.percentComplete = 100;
|
|
286
|
+
result.IsSuccess = !!result.IsSuccess;
|
|
287
|
+
result.uploadStatus = result.IsSuccess ? 3 : 4; // 3上传成功;4上传失败
|
|
288
|
+
// _dealUploadSuccess({ ...uploadStartFile, ...result });
|
|
289
|
+
}
|
|
290
|
+
};
|
|
177
291
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
onCancel();
|
|
190
|
-
} else {
|
|
191
|
-
_toast["default"].Error(resp.Message, {
|
|
192
|
-
canClose: false
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
});
|
|
196
|
-
}
|
|
292
|
+
xhr.open('POST', url, true);
|
|
293
|
+
xhr.send(formData); //开始上传,发送form数据
|
|
294
|
+
};
|
|
295
|
+
|
|
296
|
+
var handleEnterAgain = function handleEnterAgain() {
|
|
297
|
+
setIsEnter(true);
|
|
298
|
+
};
|
|
299
|
+
|
|
300
|
+
var handleLeaveAgain = function handleLeaveAgain() {
|
|
301
|
+
setIsEnter(false);
|
|
197
302
|
};
|
|
198
303
|
|
|
199
304
|
return /*#__PURE__*/_react["default"].createElement(_dialog["default"], {
|
|
@@ -209,7 +314,7 @@ var ChangePhoto = function ChangePhoto(props) {
|
|
|
209
314
|
onCancel: onCancel,
|
|
210
315
|
okText: "\u4FDD\u5B58",
|
|
211
316
|
noFooterLine: true,
|
|
212
|
-
onOk:
|
|
317
|
+
onOk: handleSaveInfo
|
|
213
318
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
214
319
|
className: preCls
|
|
215
320
|
}, !image ? /*#__PURE__*/_react["default"].createElement("div", {
|
|
@@ -318,9 +423,11 @@ var ChangePhoto = function ChangePhoto(props) {
|
|
|
318
423
|
accept: item === null || item === void 0 ? void 0 : item.accept,
|
|
319
424
|
type: "file",
|
|
320
425
|
onChange: onChange,
|
|
321
|
-
className: (0, _classnames["default"])("".concat(preCls, "__title-input"), _defineProperty({}, "".concat(preCls, "__title-input--show"), image))
|
|
426
|
+
className: (0, _classnames["default"])("".concat(preCls, "__title-input"), _defineProperty({}, "".concat(preCls, "__title-input--show"), image)),
|
|
427
|
+
onMouseEnter: handleEnterAgain,
|
|
428
|
+
onMouseLeave: handleLeaveAgain
|
|
322
429
|
}), /*#__PURE__*/_react["default"].createElement("span", {
|
|
323
|
-
className: (0, _classnames["default"])("".concat(preCls, "__title-again"), _defineProperty({}, "".concat(preCls, "__title-again--show"), image))
|
|
430
|
+
className: (0, _classnames["default"])("".concat(preCls, "__title-again"), _defineProperty({}, "".concat(preCls, "__title-again--show"), image), _defineProperty({}, "".concat(preCls, "__title-again--hover"), isEnter))
|
|
324
431
|
}, "\u91CD\u65B0\u4E0A\u4F20"), /*#__PURE__*/_react["default"].createElement(_conditionRender["default"], {
|
|
325
432
|
condition: type === 'person'
|
|
326
433
|
}, /*#__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,13 @@ 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);
|
|
39
|
+
const [fileName, setFileName] = useState('')
|
|
30
40
|
|
|
31
41
|
const cropperRef = useRef<HTMLImageElement>(null);
|
|
32
42
|
|
|
@@ -38,84 +48,167 @@ const ChangePhoto = (props: Props) => {
|
|
|
38
48
|
} else if (e.target) {
|
|
39
49
|
files = e.target.files;
|
|
40
50
|
}
|
|
41
|
-
|
|
51
|
+
setFileName(files[0].name)
|
|
52
|
+
const reader = new FileReader();
|
|
42
53
|
reader.onload = () => {
|
|
43
54
|
setImage(reader.result as any);
|
|
44
55
|
};
|
|
45
56
|
reader.readAsDataURL(files[0]);
|
|
46
57
|
};
|
|
47
58
|
|
|
59
|
+
|
|
60
|
+
const dataURLtoFile = (dataurl, filename) => {
|
|
61
|
+
var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
|
|
62
|
+
bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
|
|
63
|
+
while(n--){
|
|
64
|
+
u8arr[n] = bstr.charCodeAt(n);
|
|
65
|
+
}
|
|
66
|
+
return new File([u8arr], filename, {type:mime});
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
|
|
48
70
|
const onCrop = () => {
|
|
71
|
+
|
|
49
72
|
const imageElement: any = cropperRef.current;
|
|
50
73
|
const cropper: any = imageElement.cropper;
|
|
74
|
+
|
|
51
75
|
setCropData(cropper.getCroppedCanvas().toDataURL());
|
|
52
76
|
setUserInfo(cropper.getCroppedCanvas().toDataURL());
|
|
53
77
|
|
|
54
78
|
let base64Url = cropper.getCroppedCanvas().toDataURL();
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
79
|
+
|
|
80
|
+
const newFile = dataURLtoFile(base64Url, fileName);
|
|
81
|
+
console.log(newFile);
|
|
82
|
+
|
|
83
|
+
|
|
58
84
|
let formData = new FormData();
|
|
59
|
-
formData.append('file', FileOrBlob, "file_" + Date.parse(new Date()) + ".png");
|
|
60
|
-
setCropper(formData)
|
|
61
|
-
};
|
|
62
85
|
|
|
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
|
-
}
|
|
86
|
+
formData.append('file', newFile);
|
|
72
87
|
|
|
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
|
-
}
|
|
88
|
+
console.log(formData);
|
|
89
|
+
setCropper(formData);
|
|
86
90
|
};
|
|
91
|
+
|
|
87
92
|
const handleSaveInfo = () => {
|
|
93
|
+
let timestamp = new Date().getTime(); // 给每个文件加一个时间戳
|
|
88
94
|
if (!image) {
|
|
89
95
|
return;
|
|
90
|
-
} else {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
96
|
+
} else {
|
|
97
|
+
if(type === "person") {
|
|
98
|
+
saveUserPhoto(cropper).then((resp) => {
|
|
99
|
+
if (resp.Code === 1) {
|
|
100
|
+
Toast.Success('保存成功', { canClose: false });
|
|
101
|
+
onCancel();
|
|
102
|
+
} else {
|
|
103
|
+
Toast.Error(resp.Message, { canClose: false });
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
} else if(type === "enterprise") {
|
|
107
|
+
// console.log(cropper);
|
|
108
|
+
saveTenantLogo( cropper ).then((resp) => {
|
|
109
|
+
if (resp.Code === 1) {
|
|
110
|
+
Toast.Success('保存成功', { canClose: false });
|
|
111
|
+
onCancel();
|
|
112
|
+
} else {
|
|
113
|
+
Toast.Error(resp.Message, { canClose: false });
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
// axios({headers: {
|
|
117
|
+
// 'Content-Type': 'multipart/form-data',
|
|
118
|
+
// },
|
|
119
|
+
// method: 'post',
|
|
120
|
+
// data: cropper,
|
|
121
|
+
// url: `${apiServer}/api/v1/${tenantId}/${userid}/tenant/update/logo?format=json×tamp=${timestamp}`})
|
|
122
|
+
// dealSelectFiles(image)
|
|
123
|
+
} else {
|
|
124
|
+
saveBrowserIcon( cropper ).then((resp) => {
|
|
125
|
+
if (resp.Code === 1) {
|
|
126
|
+
Toast.Success('保存成功', { canClose: false });
|
|
127
|
+
onCancel();
|
|
128
|
+
} else {
|
|
129
|
+
Toast.Error(resp.Message, { canClose: false });
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
99
133
|
}
|
|
100
134
|
};
|
|
101
135
|
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
136
|
+
const [uploadSuccessFile, setUploadSuccessFile] = useState();
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
const dealSelectFiles = (uploadSelectFile) => {
|
|
140
|
+
|
|
141
|
+
let uploadStartFiles = []; // 开始上传的文件
|
|
142
|
+
let formData = new FormData(); // FormData 对象
|
|
143
|
+
let uploadStartFile;
|
|
144
|
+
let timestamp = new Date().getTime(); // 给每个文件加一个时间戳
|
|
145
|
+
// let uploadFileType = uploadSelectFile.name.substring(uploadSelectFile.name.lastIndexOf('.') + 1);
|
|
146
|
+
|
|
147
|
+
uploadStartFile = {
|
|
148
|
+
FileName: uploadSelectFile.name,
|
|
149
|
+
// FileType: _dealAttachmentType(uploadFileType).FileType,
|
|
150
|
+
FileSize: uploadSelectFile.size,
|
|
151
|
+
FileLastModified: uploadSelectFile.lastModified,
|
|
152
|
+
// IsImage: _dealAttachmentType(uploadFileType).IsImage,
|
|
153
|
+
percentComplete: 0,
|
|
154
|
+
uploadStatus: 1, // 开始上传
|
|
155
|
+
IsSuccess: false,
|
|
156
|
+
uid: uuid(),
|
|
157
|
+
_smallImageUrl: '',
|
|
158
|
+
_bigImageUrl: '',
|
|
159
|
+
MediaType: '',
|
|
160
|
+
UserId: 0,
|
|
161
|
+
MaxDocCount: 0,
|
|
162
|
+
DfsPath: '',
|
|
163
|
+
ClientUrl: '',
|
|
164
|
+
SmallImageUrl: '',
|
|
165
|
+
BigImageUrl: '',
|
|
166
|
+
DownloadUrl: '',
|
|
167
|
+
Msg: '',
|
|
168
|
+
AllowUploadAttachmentSize: 50,
|
|
169
|
+
Deleteable: true,
|
|
170
|
+
requestXHR: new XMLHttpRequest(), //在这创建是为了取消用
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
// uploadStartFiles.push(uploadStartFile);
|
|
174
|
+
// _dealUploadStart(uploadStartFiles); // 处理开始上传的文件
|
|
175
|
+
formData.append('file', uploadSelectFile);
|
|
176
|
+
let url = `${apiServer}/api/v1/${tenantId}/${userid}/tenant/update/logo`;
|
|
177
|
+
_dealUploadXHRRequest(formData, url, uploadStartFile);
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* 处理文件上传请求
|
|
182
|
+
*
|
|
183
|
+
* @formData
|
|
184
|
+
* @url 上传文件请求地址
|
|
185
|
+
* @uploadStartFile 上传的文件
|
|
186
|
+
*
|
|
187
|
+
* @memberof Upload
|
|
188
|
+
*/
|
|
189
|
+
const _dealUploadXHRRequest = (formData: any, url: string, uploadStartFile) => {
|
|
190
|
+
let xhr = uploadStartFile.requestXHR;
|
|
191
|
+
xhr.onreadystatechange = () => {
|
|
192
|
+
if (xhr.readyState == 4 && xhr.status == 200) {
|
|
193
|
+
let result = Object.assign({}, { ...JSON.parse(xhr.responseText).Result[0] }); // 上传成功接口返回数据
|
|
194
|
+
result.percentComplete = 100;
|
|
195
|
+
result.IsSuccess = !!result.IsSuccess;
|
|
196
|
+
result.uploadStatus = result.IsSuccess ? 3 : 4; // 3上传成功;4上传失败
|
|
197
|
+
// _dealUploadSuccess({ ...uploadStartFile, ...result });
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
xhr.open('POST', url, true);
|
|
201
|
+
xhr.send(formData); //开始上传,发送form数据
|
|
117
202
|
};
|
|
118
203
|
|
|
204
|
+
const handleEnterAgain = () => {
|
|
205
|
+
setIsEnter(true);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
const handleLeaveAgain = () => {
|
|
209
|
+
setIsEnter(false);
|
|
210
|
+
}
|
|
211
|
+
|
|
119
212
|
return (
|
|
120
213
|
<Dialog
|
|
121
214
|
visible={visible}
|
|
@@ -130,7 +223,7 @@ const ChangePhoto = (props: Props) => {
|
|
|
130
223
|
onCancel={onCancel}
|
|
131
224
|
okText="保存"
|
|
132
225
|
noFooterLine
|
|
133
|
-
onOk={
|
|
226
|
+
onOk={handleSaveInfo}
|
|
134
227
|
>
|
|
135
228
|
<div className={preCls}>
|
|
136
229
|
{!image ?
|
|
@@ -220,8 +313,10 @@ const ChangePhoto = (props: Props) => {
|
|
|
220
313
|
type="file"
|
|
221
314
|
onChange={onChange}
|
|
222
315
|
className={classNames(`${preCls}__title-input`, { [`${preCls}__title-input--show`]: image })}
|
|
316
|
+
onMouseEnter={handleEnterAgain}
|
|
317
|
+
onMouseLeave={handleLeaveAgain}
|
|
223
318
|
/>
|
|
224
|
-
<span className={classNames(`${preCls}__title-again`, { [`${preCls}__title-again--show`]: image })}>
|
|
319
|
+
<span className={classNames(`${preCls}__title-again`, { [`${preCls}__title-again--show`]: image },{ [`${preCls}__title-again--hover`]: isEnter })}>
|
|
225
320
|
重新上传
|
|
226
321
|
</span>
|
|
227
322
|
<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
|
};
|