@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.
@@ -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 #e9ecf0;
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: red;
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 #e9ecf0;
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: 2px;
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(); //将base64转换成blob
114
-
115
- var FileOrBlob = dataURLtoBlob(base64Url); //添加到formdata
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', FileOrBlob, "file_" + Date.parse(new Date()) + ".png");
155
+ formData.append('file', newFile);
156
+ console.log(formData);
119
157
  setCropper(formData);
120
158
  };
121
159
 
122
- var dataURLtoBlob = function dataURLtoBlob(urlData) {
123
- var bytes = window.atob(urlData.split(',')[1]);
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
- (0, _requestApi.saveUserInfo)({
141
- data: userInfo
142
- }).then(function (resp) {
143
- if (resp.Code === 1) {
144
- _toast["default"].Success('保存成功', {
145
- canClose: false
146
- });
147
-
148
- onCancel();
149
- } else {
150
- _toast["default"].Error(resp.Message, {
151
- canClose: false
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&timestamp=${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 handleSaveInfo = function handleSaveInfo() {
159
- if (!image) {
160
- return;
161
- } else {
162
- (0, _requestApi.saveTenantLogo)(cropData).then(function (resp) {
163
- if (resp.Code === 1) {
164
- _toast["default"].Success('保存成功', {
165
- canClose: false
166
- });
167
-
168
- onCancel();
169
- } else {
170
- _toast["default"].Error(resp.Message, {
171
- canClose: false
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
- var handleBrowserIconSaveInfo = function handleBrowserIconSaveInfo() {
179
- if (!image) {
180
- return;
181
- } else {
182
- console.log(cropper);
183
- (0, _requestApi.saveBrowserIcon)(cropper).then(function (resp) {
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
- }
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: handleBrowserIconSaveInfo
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": "application/x-www-form-urlencoded"
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(_input["default"], {
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(_input["default"], {
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(_input["default"], {
193
+ }), /*#__PURE__*/_react["default"].createElement(Fields.Input, {
177
194
  name: "email",
178
195
  type: "text",
179
196
  label: '邮箱',
180
197
  value: userInfo.email,
181
- require: true,
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@titaui/pc",
3
- "version": "1.8.00",
3
+ "version": "1.8.4",
4
4
  "nameCN": "",
5
5
  "description": "",
6
6
  "main": "src/index.js",
@@ -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 #e9ecf0;
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: red;
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 #e9ecf0;
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&timestamp=${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: 2px;
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
- const reader = new FileReader();
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
- //将base64转换成blob
56
- let FileOrBlob = dataURLtoBlob(base64Url);
57
- //添加到formdata
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
- const dataURLtoBlob = (urlData) => {
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
- const handleSaveUserInfo = () => {
74
- if (!image) {
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
- saveTenantLogo( cropData ).then((resp) => {
92
- if (resp.Code === 1) {
93
- Toast.Success('保存成功', { canClose: false });
94
- onCancel();
95
- } else {
96
- Toast.Error(resp.Message, { canClose: false });
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&timestamp=${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 handleBrowserIconSaveInfo = () => {
103
- if (!image) {
104
- return;
105
- } else {
106
- console.log(cropper);
107
-
108
- saveBrowserIcon( 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
- }
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={handleBrowserIconSaveInfo}
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": "application/x-www-form-urlencoded" },
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
- <Input
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
- require
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
  };