fmui-base 2.1.83 → 2.1.85

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.
@@ -0,0 +1,274 @@
1
+ import React from 'react';
2
+ import './sign.less';
3
+
4
+ import Popup from 'saltui/lib/Popup';
5
+ import TextButton from 'saltui/lib/Button/TextButton';
6
+ import Button from 'saltui/lib/Button';
7
+ import Dialog from 'saltui/lib/Dialog';
8
+
9
+ import Draw from './draw.js';
10
+ import 'whatwg-fetch';
11
+
12
+ export default class Page extends React.Component {
13
+
14
+ constructor(props) {
15
+ super(props);
16
+
17
+ var baseContext = document.getElementById('context').value;
18
+ var token = document.getElementById('token').value;
19
+ var fileId = this.props.fileId==null||this.props.fileId==''||this.props.fileId==undefined?"":this.props.fileId;
20
+ this.state = {
21
+ token: token,
22
+ draw: null,
23
+ degree: 0,
24
+ baseContext:baseContext,
25
+ fileId:fileId,
26
+ disabled:true,
27
+ imageUrl:'/static/fmui/images/signArea.png',
28
+ }
29
+ }
30
+
31
+ componentDidMount() {
32
+ // dd.ui.webViewBounce.disable();
33
+ // this.getHorizontalStyle();
34
+ // this.initCanvas(90);
35
+
36
+ }
37
+
38
+ //初始化画布
39
+ initCanvas(degree) {
40
+ const canvas = document.querySelector('canvas');
41
+ this.setState({
42
+ draw: new Draw(canvas, -degree)
43
+ })
44
+ }
45
+
46
+ //画布 清空
47
+ clear() {
48
+
49
+ let t = this;
50
+ var disabled = document.getElementById('clear_i').getAttribute("disabled");
51
+ if (!disabled) {
52
+ document.getElementById('clear_i').removeAttribute("class");
53
+ document.getElementById('clear_i').setAttribute("class",'iconfont icon-dele2 t-FS18 t-FCddfontblue-30');
54
+ document.getElementsByClassName('download_btn')[0].setAttribute("disabled",true);
55
+ document.getElementsByClassName('can-div')[0].removeAttribute("style");
56
+ document.getElementsByClassName('can-div')[0].setAttribute("style","background:url(" + t.state.baseContext + t.state.imageUrl + ");background-size: 100% 100%;");
57
+ this.state.draw.clear();
58
+ }
59
+ }
60
+
61
+ download() {
62
+ let t = this;
63
+ var formData = new FormData();
64
+
65
+ var disabled = document.getElementsByClassName('download_btn')[0].getAttribute("disabled");
66
+ if (disabled) {
67
+ return;
68
+ }
69
+ formData.append("dir", "draw");
70
+ var date = new Date();
71
+ var time = date.getTime();
72
+ formData.append("file", t.state.draw.dataURLtoBlob(t.state.draw.getPNGImage()),time+".png");
73
+ var url = t.state.baseContext + "/api/cmp/attachment/upload?token="+t.state.token;
74
+ fetch(url, {
75
+ method: "POST",
76
+ body: formData,
77
+ }).then((res) => {
78
+ if (res.ok) {
79
+ res.json().then(function (obj) {
80
+ t.setState({
81
+ fileId:obj.data[0].id,
82
+ });
83
+ t.props.upload(obj.data[0].id);
84
+ Popup.hide();
85
+ })
86
+ } else if (res.status == 401) {
87
+ alert("手写签名图片上传报错了");
88
+ }
89
+ })
90
+
91
+ }
92
+
93
+ //旋转
94
+ degree(val) {
95
+ let t = this;
96
+ t.setState({
97
+ degree: val
98
+ }, () => {
99
+ t.getHorizontalStyle();
100
+ })
101
+ }
102
+
103
+ //现实区域的范围 样式
104
+ getHorizontalStyle() {
105
+ let t = this;
106
+ let degree = t.state.degree;
107
+ let canvasBox = document.getElementById('canvasBox');
108
+ let canvasBoxDiv = document.getElementById('canvasBoxDiv');
109
+ const d = document;
110
+ const w = window.innerWidth || d.documentElement.clientWidth || d.body.clientWidth;
111
+ const h = window.innerHeight || d.documentElement.clientHeight || d.body.clientHeight;
112
+ let length = (h - w) / 2;
113
+ let width = w;
114
+ let height = h;
115
+
116
+ switch (degree) {
117
+ case -90:
118
+ length = -length;
119
+ case 90:
120
+ width = h;
121
+ height = w;
122
+ break;
123
+ default:
124
+ length = 0;
125
+ }
126
+ let can = document.getElementsByTagName('canvas')[0];
127
+ if (canvasBoxDiv) {
128
+ canvasBoxDiv.removeChild(can);
129
+ var ca = document.createElement('canvas');
130
+ // canvasBox.prepend(ca);
131
+ canvasBoxDiv.appendChild(ca);
132
+ setTimeout(() => {
133
+ t.initCanvas(degree);
134
+ }, 200);
135
+ }
136
+ let transform = `rotate(${degree}deg) translate(${length}px,${-length}px)`;
137
+ canvasBox.style.transform = transform;
138
+ canvasBox.style.width = width + "px";
139
+ canvasBox.style.height = height + "px";
140
+ canvasBox.style.transformOrigin = 'center center';
141
+
142
+ let can1 = document.getElementsByTagName('canvas')[0];
143
+ let divDom = document.getElementById("canvasBoxDiv");
144
+ let divWidth = divDom.clientWidth||divDom.offsetWidth;
145
+ let divHeigth = divDom.clientHeight||divDom.offsetHeight;
146
+ can1.style.width = (divWidth-32) + "px";
147
+ can1.style.height = (divHeigth-5) + "px";
148
+
149
+ setTimeout(() => {
150
+ // document.getElementsByTagName('canvas')[0].style.border = '0.5px solid #ccc';
151
+ document.getElementsByTagName('canvas')[0].style.background = 'rgb(255, 255, 255,.4)';
152
+ document.getElementsByClassName('download_btn')[0].setAttribute("disabled",true);
153
+ t.listenCanvas(document.getElementsByTagName('canvas')[0]);
154
+ //t-BCf
155
+ // document.getElementsByTagName('canvas')[0].class = 't-BCf t-ML16 t-MR16';
156
+ }, 220);
157
+
158
+ // $(can).addClass("aa");
159
+ }
160
+
161
+ listenCanvas(cav){
162
+ let t = this;
163
+ cav.addEventListener('touchstart', function(e){
164
+ document.getElementById('clear_i').removeAttribute("class");
165
+ document.getElementById('clear_i').setAttribute("class",'iconfont icon-dele2 t-FS18 t-FCddfontblue-60');
166
+ document.getElementsByClassName('download_btn')[0].removeAttribute("disabled");
167
+
168
+ document.getElementsByClassName('can-div')[0].removeAttribute("style");
169
+ document.getElementsByClassName('can-div')[0].setAttribute("style","background:#fff");
170
+ }, false);
171
+ }
172
+
173
+
174
+ checkAfter(){
175
+ let t = this;
176
+ let imageUrl = t.state.baseContext + t.state.imageUrl;
177
+ let divStyle = {backgroundImage: 'url(' + imageUrl + ')',backgroundSize:'100% 100%'};
178
+ Popup.show(
179
+ <div id="canvasBox" className="t-BCf7">
180
+ <div className="greet t-P16 t-FAR t-PB12">
181
+ <TextButton display="inline" className="dd-write-sign-del" onClick={t.clear.bind(t)}>
182
+ <i id="clear_i" className="clear_i iconfont icon-dele2 t-FS18 t-FCddfontblue-30"></i>
183
+ </TextButton>
184
+ <Button type="secondary" size="small" display="inline" onClick={()=>{Popup.hide()}} className="t-MR10">取消</Button>
185
+ <Button className="download_btn" type="secondary" size="small" display="inline" id="download_btn" onClick={t.download.bind(t)}>完成</Button>
186
+ </div>
187
+ <div className="can-div dd-write-sign t-ML16 t-MR16" style={divStyle} id="canvasBoxDiv">
188
+ <canvas></canvas>
189
+ </div>
190
+ </div>, {
191
+ animationType: 'slide-left',
192
+ });
193
+ setTimeout(() => {
194
+ t.getHorizontalStyle();
195
+ t.initCanvas(0);
196
+ t.degree(90);
197
+ }, 200);
198
+ }
199
+
200
+
201
+ //弹出签名页面
202
+ popDraw() {
203
+
204
+ let t = this;
205
+ var url = t.state.baseContext + "/client/system/freeLimit/featureCheck?token=" + t.state.token + "&feature=signaturePicture";
206
+ fetch(url,{
207
+ method: "GET",
208
+ mode: "cors",
209
+ headers: {
210
+ 'Accept': 'application/json, text/plain, */*',
211
+ 'Content-Type': 'application/x-www-form-urlencoded'
212
+ }
213
+ }).then((response) => response.json()).then((result) => {
214
+ if (result.success) {
215
+ let content = result.content;
216
+ if (content.featureCheck) {
217
+ t.checkAfter();
218
+ }else{
219
+ if (content.isAdmin) {
220
+ Dialog.confirm({
221
+ title: '提示',
222
+ content: '您当前版本为免费版,该功能为医管云标准版功能,建议您升级为标准版',
223
+ confirmText:'立即升级',
224
+ cancelText:'关闭',
225
+ onConfirm() {
226
+ let path = 'static/officeding/mobileportal/dist/index.html';
227
+ pageSkip(path, '#/hospitalmanage/version');
228
+ },
229
+ onCancel() {
230
+ console.log('confirm cancel');
231
+ },
232
+ });
233
+ }else{
234
+ Dialog.alert({
235
+ title: '提示',
236
+ content: '您当前版本为免费版,该功能为医管云标准版功能,请联系管理员升级',
237
+ confirmText:'关闭',
238
+ onConfirm() {
239
+ console.log('confirm confirm');
240
+ },
241
+ onCancel() {
242
+ console.log('confirm cancel');
243
+ },
244
+ });
245
+ }
246
+ }
247
+ }
248
+ }).catch((error) => {
249
+ alert("错误:"+error);
250
+ });
251
+
252
+
253
+
254
+
255
+
256
+ }
257
+
258
+
259
+ render() {
260
+ const t = this;
261
+
262
+ return (
263
+ <div>
264
+ <div style={{background: '#f2f3f5', height: '35px', padding: '10px 5px'}}>
265
+ <span className="t-FCblue"><i className="iconfont icon-back t-rotate-180 t-FS14"></i>{t.props.title}</span>
266
+ <span onClick={t.popDraw.bind(t)} className="t-FCblue t-FR">{t.state.fileId==""?"去手写签名":"重写签名"}</span>
267
+ </div>
268
+ <div className="img-border" style={{backgroundColor: '#fff'}}>
269
+ <img src={t.state.fileId==""?t.state.baseContext+'/static/fmui/images/no_signpic.png':t.state.baseContext+'/dingisv/api/common/viewImage?fid='+t.state.fileId + "&token=" + t.state.token} className="t-W100"/>
270
+ </div>
271
+ </div>
272
+ );
273
+ }
274
+ }