centaline-data-driven 1.6.11 → 1.6.13

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.
@@ -1,76 +1,108 @@
1
1
  <template>
2
- <div style="width: 100%" ref="refupload" v-if="model !== null" class="block ct-file" :class="[model.attrs.size ? 'ct-checkbox-' + model.attrs.size : '']">
2
+ <div style="width: 100%" ref="refupload" v-if="model !== null" class="block ct-file"
3
+ :class="[model.attrs.size ? 'ct-checkbox-' + model.attrs.size : '']">
3
4
  <!--分片上传-->
4
- <template v-if="model.type==51">
5
- <el-upload :class="disableUpload ? 'ct-upload-display-none' : ''"
6
- :http-request="SliceUpload"
7
- ref="upload"
8
- :disabled="model.lock"
9
- :accept="model.fileAccept"
10
- :on-change="handleChange"
11
- list-type="picture-card"
12
- :file-list="model.fileList"
13
- :multiple="true"
14
- :auto-upload="true"
15
- :action="model.action"
16
- :data="model.uploadData"
17
- :headers="headers"
18
- :before-upload="beforeUploadProcess"
19
- :on-success="handleAvatarSuccess"
20
- :on-error="handleAvatarError"
21
- :on-progress="uploadProcess"
22
- :limit="parseInt(model.max || 999)"
23
- :on-exceed="handleExceed">
24
- <i slot="default" class="el-icon-plus"></i>
25
- <div slot="tip" class="el-upload__tip errorMessage" style="white-space:pre-wrap;" v-show="!valid" v-html="validMessage">
26
-
5
+ <template v-if="model.type == 51">
6
+ <el-upload :class="disableUpload ? 'ct-upload-display-none' : ''" :http-request="SliceUpload" ref="upload"
7
+ :disabled="model.lock" :accept="model.fileAccept" :on-change="handleChange" list-type="picture-card"
8
+ :file-list="model.fileList" :multiple="true" :auto-upload="true" :action="model.action" :data="model.uploadData"
9
+ :headers="headers" :before-upload="beforeUploadProcess" :on-success="handleAvatarSuccess"
10
+ :on-error="handleAvatarError" :on-progress="uploadProcess" :limit="parseInt(model.max || 999)"
11
+ :on-exceed="handleExceed">
12
+ <template slot="default">
13
+ <i class="el-icon-plus"></i>
14
+ </template>
15
+ <div slot="tip" class="el-upload__tip errorMessage" style="white-space:pre-wrap;" v-show="!valid"
16
+ v-html="validMessage">
17
+
27
18
  </div>
28
19
  <div slot="tip" v-show="model.description" v-html="model.description">
29
20
  </div>
30
- <img class="qrcode-target" @click.stop="qrcodeFn" ref="QRCodeRef" v-if="model.QRCodeAction" :src="require('../../../assets/serw1.png')" style="width: 35px;height: 35px;" alt="扫码上传" title="扫码上传">
31
- <div class="ScanUploadPhoto" v-if="qrcodeVisible" @click.stop="qrcodeVisible=true" :style="{ top: QRCodeRefTop + 'px', left: QRCodeRefLeft + 'px' }">
32
- <div style="border-bottom:none">
33
- <div style="text-align: center;margin-bottom:10px;margin-top:5px;color:#666666;font-size: 14px;">扫码上传</div>
34
- <i class="jiao" :style="{ top: QRCodeRefJiaoTop + 'px'}"></i>
35
- <div style="width:200px; height:200px;">
36
- <img v-if="qrCodeImg" :src="qrCodeImg" width="200" height="200" :style="isQrCode?'opacity: 0.1':''" />
37
- <div class="div-fail" v-if="isQrCode">
38
- <span class="ScanText" style="color:#666666;">{{scanStatusDesc}}</span>
39
- <div style="text-align: center;" v-if="FlagbtnScan">
40
- <el-button type="success" class=" max-btn-add" size="mini" @click.stop="ShowQRcode">扫码上传</el-button>
41
- </div>
42
- </div>
21
+ <img class="qrcode-target" @click.stop="qrcodeFn" ref="QRCodeRef" v-if="model.QRCodeAction"
22
+ :src="require('../../../assets/serw1.png')" style="width: 35px;height: 35px;" alt="扫码上传" title="扫码上传">
23
+ <div class="ScanUploadPhoto" v-if="qrcodeVisible" @click.stop="qrcodeVisible = true"
24
+ :style="{ top: QRCodeRefTop + 'px', left: QRCodeRefLeft + 'px' }">
25
+ <div style="border-bottom:none">
26
+ <div style="text-align: center;margin-bottom:10px;margin-top:5px;color:#666666;font-size: 14px;">扫码上传</div>
27
+ <i class="jiao" :style="{ top: QRCodeRefJiaoTop + 'px' }"></i>
28
+ <div style="width:200px; height:200px;">
29
+ <img v-if="qrCodeImg" :src="qrCodeImg" width="200" height="200" :style="isQrCode ? 'opacity: 0.1' : ''" />
30
+ <div class="div-fail" v-if="isQrCode">
31
+ <span class="ScanText" style="color:#666666;">{{ scanStatusDesc }}</span>
32
+ <div style="text-align: center;" v-if="FlagbtnScan">
33
+ <el-button type="success" class=" max-btn-add" size="mini" @click.stop="ShowQRcode">扫码上传</el-button>
43
34
  </div>
44
35
  </div>
36
+ </div>
45
37
  </div>
38
+ </div>
39
+
40
+ <span class="Public-classification" v-if="(model.lock) || model.paramName">
41
+ <!--锁定-->
42
+ <span v-if="model.lock" class="el-dropdown-link">
43
+ <span style="width: 80px; height: 26px; display: inline-flex">&nbsp;{{ model.mediaLabe.mediaLabelName
44
+ }}</span>
45
+ </span>
46
+ <!--复杂分类-->
47
+ <span v-else-if="model.isComplexClassify" class="el-dropdown-link"
48
+ @click.stop="classifyFormClickHandle(model.mediaLabe)">
49
+ <span style="width: 80px; height: 26px; display: inline-flex">&nbsp;{{ model.mediaLabe.mediaLabelName
50
+ }}</span>
51
+ <i class="el-icon-arrow-down el-icon--right"></i>
52
+ </span>
53
+ <!--简单分类-->
54
+ <el-dropdown v-else class="el-upload-list__item-preview" trigger="click" placement="top"
55
+ @command="PublicClassifySelectedClickHandle">
56
+
57
+
58
+ <span class="el-dropdown-link" @click.stop="classifyClickHandle">
59
+ <span style="width: 80px; height: 26px; display: inline-flex">&nbsp;{{ model.mediaLabe.mediaLabelName
60
+ }}</span>
61
+ <i class="el-icon-arrow-down el-icon--right"></i>
62
+ </span>
63
+ <el-dropdown-menu slot="dropdown" class="el-upload-list__item-preview">
64
+ <el-dropdown-item v-for="(option, index) in model.optionModel.options" :key="index"
65
+ :command="{ option: option, mediaLabe: model.mediaLabe }">
66
+ {{ option[model.optionModel.optionAttrs.label] }}
67
+ </el-dropdown-item>
68
+ </el-dropdown-menu>
69
+ </el-dropdown>
70
+ </span>
71
+
72
+
46
73
  <div slot="file" slot-scope="{ file }" :title="file.fileName">
47
74
  <div class="cover-list-item">
48
- <div @click="viewerfile(file)">
49
- <el-image fit="fill" :src="file.url?file.url:file.mediaUrl?file.mediaUrl+'/100/100':require('../../../assets/blank.png')" style="width: 100px; height: 100px" :z-index="previewZIndex">
50
- </el-image>
75
+ <div @click="viewerfile(file)">
76
+ <el-image fit="fill"
77
+ :src="file.url ? file.url : file.mediaUrl ? file.mediaUrl + '/100/100' : require('../../../assets/blank.png')"
78
+ style="width: 100px; height: 100px" :z-index="previewZIndex">
79
+ </el-image>
51
80
  </div>
52
- <span class="cover-list-item-span-Default" v-if="(model.lock&&file.flagDefault)||(model.rightDefault&&model.rightDefault==1&&file.mediaTypeID==2)">
81
+ <span class="cover-list-item-span-Default"
82
+ v-if="(model.lock && file.flagDefault) || (model.rightDefault && model.rightDefault == 1 && file.mediaTypeID == 2)">
53
83
  <i>
54
- <el-radio v-model="file.flagDefault" :label="true" :class="{'browseDefault':model.lock}" @change="handleDefault($event,file)" :disabled="model.lock" title="设为封面">&nbsp;</el-radio>
84
+ <el-radio v-model="file.flagDefault" :label="true" :class="{ 'browseDefault': model.lock }"
85
+ @change="handleDefault($event, file)" :disabled="model.lock" title="设为封面">&nbsp;</el-radio>
55
86
  </i>
56
87
  </span>
57
- <span class="cover-list-item-span-edit" v-if="!model.lock&& file.rightCrop && file.mediaTypeID==2">
88
+ <span class="cover-list-item-span-edit" v-if="!model.lock && file.rightCrop && file.mediaTypeID == 2">
58
89
  <i class="el-icon-edit-outline" @click="handleEdit(file)"></i>
59
90
  </span>
60
91
  <span class="cover-list-item-span-delete" v-if="!model.lock && file.rightDel">
61
92
  <i class="el-icon-delete" @click="handleRemove(file)"></i>
62
93
  </span>
63
94
  <span class="cover-list-item-play" v-if="file.videoPlayIconUrl">
64
- <div class="swiper-i" @click="viewerfile(file)" >
65
- <img :src="file.videoPlayIconUrl" class="hous-icon"/>
95
+ <div class="swiper-i" @click="viewerfile(file)">
96
+ <img :src="file.videoPlayIconUrl" class="hous-icon" />
66
97
  </div>
67
98
  </span>
68
- <span class="cover-list-item-play" v-else-if="file.mediaTypeID==4 && (file.videoPlayIconUrl||model.videoPlayIconUrl)">
99
+ <span class="cover-list-item-play"
100
+ v-else-if="file.mediaTypeID == 4 && (file.videoPlayIconUrl || model.videoPlayIconUrl)">
69
101
  <div class="swiper-i" @click="viewerfile(file)">
70
- <img :src="(file.videoPlayIconUrl||model.videoPlayIconUrl)" class="hous-icon" />
102
+ <img :src="(file.videoPlayIconUrl || model.videoPlayIconUrl)" class="hous-icon" />
71
103
  </div>
72
104
  </span>
73
- <span class="cover-list-item-span" v-if="(model.lock&& file.mediaLabelName )|| model.paramName">
105
+ <span class="cover-list-item-span" v-if="(model.lock && file.mediaLabelName) || model.paramName">
74
106
  <!--锁定-->
75
107
  <span v-if="model.lock || !file.rightEdit" class="el-dropdown-link">
76
108
  <span style="width: 80px; height: 26px; display: inline-flex">&nbsp;{{ file.mediaLabelName }}</span>
@@ -81,13 +113,15 @@
81
113
  <i class="el-icon-arrow-down el-icon--right"></i>
82
114
  </span>
83
115
  <!--简单分类-->
84
- <el-dropdown v-else class="el-upload-list__item-preview" trigger="click" placement="top" @command="classifySelectedClickHandle">
116
+ <el-dropdown v-else class="el-upload-list__item-preview" trigger="click" placement="top"
117
+ @command="classifySelectedClickHandle">
85
118
  <span class="el-dropdown-link" @click="classifyClickHandle">
86
119
  <span style="width: 80px; height: 26px; display: inline-flex">&nbsp;{{ file.mediaLabelName }}</span>
87
120
  <i class="el-icon-arrow-down el-icon--right"></i>
88
121
  </span>
89
122
  <el-dropdown-menu slot="dropdown" class="el-upload-list__item-preview">
90
- <el-dropdown-item v-for="(option, index) in model.optionModel.options" :key="index" :command="{ option: option, file: file }">
123
+ <el-dropdown-item v-for="(option, index) in model.optionModel.options" :key="index"
124
+ :command="{ option: option, file: file }">
91
125
  {{ option[model.optionModel.optionAttrs.label] }}
92
126
  </el-dropdown-item>
93
127
  </el-dropdown-menu>
@@ -96,8 +130,8 @@
96
130
  </div>
97
131
  <div>
98
132
  <el-progress type="circle" v-if="file.progressFlag" :show-text="false"
99
- :percentage="typeof file.loadProgress !== 'undefined' && file.loadProgress !== null ? file.loadProgress : 0.00"
100
- :width="96" :height="96" class="file-cirle file-cirle-mrLeft"></el-progress>
133
+ :percentage="typeof file.loadProgress !== 'undefined' && file.loadProgress !== null ? file.loadProgress : 0.00"
134
+ :width="96" :height="96" class="file-cirle file-cirle-mrLeft"></el-progress>
101
135
  <div class="circleCenter" v-if="file.progressFlag">
102
136
  <div style="font-size: 12px;color: #666;"> {{ file.loadProgress.toFixed(2) }}%</div>
103
137
  </div>
@@ -108,57 +142,83 @@
108
142
 
109
143
  <!-- 官方上传 -->
110
144
  <template v-else>
111
- <el-upload :class="disableUpload ? 'ct-upload-display-none' : ''"
112
- ref="upload"
113
- :disabled="model.lock"
114
- :accept="model.fileAccept"
115
- :on-change="handleChange"
116
- list-type="picture-card"
117
- :file-list="model.fileList"
118
- :multiple="true"
119
- :auto-upload="true"
120
- :action="model.action"
121
- :data="model.uploadData"
122
- :headers="headers"
123
- :before-upload="beforeUploadProcess"
124
- :on-success="handleAvatarSuccess"
125
- :on-error="handleAvatarError"
126
- :on-progress="uploadProcess"
127
- :limit="parseInt(model.max || 999)"
128
- :on-exceed="handleExceed">
145
+ <el-upload :class="disableUpload ? 'ct-upload-display-none' : ''" ref="upload" :disabled="model.lock"
146
+ :accept="model.fileAccept" :on-change="handleChange" list-type="picture-card" :file-list="model.fileList"
147
+ :multiple="true" :auto-upload="true" :action="model.action" :data="model.uploadData" :headers="headers"
148
+ :before-upload="beforeUploadProcess" :on-success="handleAvatarSuccess" :on-error="handleAvatarError"
149
+ :on-progress="uploadProcess" :limit="parseInt(model.max || 999)" :on-exceed="handleExceed">
129
150
  <i slot="default" class="el-icon-plus"></i>
130
- <div slot="tip" class="el-upload__tip errorMessage" style="white-space:pre-wrap;" v-show="!valid" v-html="validMessage">
131
-
151
+ <div slot="tip" class="el-upload__tip errorMessage" style="white-space:pre-wrap;" v-show="!valid"
152
+ v-html="validMessage">
153
+
132
154
  </div>
133
155
  <div slot="tip" v-show="model.description" v-html="model.description">
134
156
  </div>
135
- <img class="qrcode-target" @click.stop="qrcodeFn" ref="QRCodeRef" v-if="model.QRCodeAction" :src="require('../../../assets/serw1.png')" style="width: 35px;height: 35px;" alt="扫码上传" title="扫码上传">
136
- <div class="ScanUploadPhoto" v-if="qrcodeVisible" @click.stop="qrcodeVisible=true" :style="{ top: QRCodeRefTop + 'px', left: QRCodeRefLeft + 'px' }">
137
- <div style="border-bottom:none">
138
- <div style="text-align: center;margin-bottom:10px;margin-top:5px;color:#666666;font-size: 14px;">扫码上传</div>
139
- <i class="jiao" :style="{ top: QRCodeRefJiaoTop + 'px'}"></i>
140
- <div style="width:200px; height:200px;">
141
- <img v-if="qrCodeImg" :src="qrCodeImg" width="200" height="200" :style="isQrCode?'opacity: 0.1':''" />
142
- <div class="div-fail" v-if="isQrCode">
143
- <span class="ScanText" style="color:#666666;">{{scanStatusDesc}}</span>
144
- <div style="text-align: center;" v-if="FlagbtnScan">
145
- <el-button type="success" class=" max-btn-add" size="mini" @click.stop="ShowQRcode">扫码上传</el-button>
146
- </div>
147
- </div>
157
+ <img class="qrcode-target" @click.stop="qrcodeFn" ref="QRCodeRef" v-if="model.QRCodeAction"
158
+ :src="require('../../../assets/serw1.png')" style="width: 35px;height: 35px;" alt="扫码上传" title="扫码上传">
159
+ <div class="ScanUploadPhoto" v-if="qrcodeVisible" @click.stop="qrcodeVisible = true"
160
+ :style="{ top: QRCodeRefTop + 'px', left: QRCodeRefLeft + 'px' }">
161
+ <div style="border-bottom:none">
162
+ <div style="text-align: center;margin-bottom:10px;margin-top:5px;color:#666666;font-size: 14px;">扫码上传</div>
163
+ <i class="jiao" :style="{ top: QRCodeRefJiaoTop + 'px' }"></i>
164
+ <div style="width:200px; height:200px;">
165
+ <img v-if="qrCodeImg" :src="qrCodeImg" width="200" height="200" :style="isQrCode ? 'opacity: 0.1' : ''" />
166
+ <div class="div-fail" v-if="isQrCode">
167
+ <span class="ScanText" style="color:#666666;">{{ scanStatusDesc }}</span>
168
+ <div style="text-align: center;" v-if="FlagbtnScan">
169
+ <el-button type="success" class=" max-btn-add" size="mini" @click.stop="ShowQRcode">扫码上传</el-button>
148
170
  </div>
149
171
  </div>
172
+ </div>
150
173
  </div>
174
+ </div>
175
+ <span class="Public-classification" v-if="(model.lock) || model.paramName">
176
+ <!--锁定-->
177
+ <span v-if="model.lock" class="el-dropdown-link">
178
+ <span style="width: 80px; height: 26px; display: inline-flex">&nbsp;{{ model.mediaLabe.mediaLabelName
179
+ }}</span>
180
+ </span>
181
+ <!--复杂分类-->
182
+ <span v-else-if="model.isComplexClassify" class="el-dropdown-link"
183
+ @click.stop="classifyFormClickHandle(model.mediaLabe)">
184
+ <span style="width: 80px; height: 26px; display: inline-flex">&nbsp;{{ model.mediaLabe.mediaLabelName
185
+ }}</span>
186
+ <i class="el-icon-arrow-down el-icon--right"></i>
187
+ </span>
188
+ <!--简单分类-->
189
+ <el-dropdown v-else class="el-upload-list__item-preview" trigger="click" placement="top"
190
+ @command="PublicClassifySelectedClickHandle">
191
+
192
+
193
+ <span class="el-dropdown-link" @click.stop="classifyClickHandle">
194
+ <span style="width: 80px; height: 26px; display: inline-flex">&nbsp;{{ model.mediaLabe.mediaLabelName
195
+ }}</span>
196
+ <i class="el-icon-arrow-down el-icon--right"></i>
197
+ </span>
198
+ <el-dropdown-menu slot="dropdown" class="el-upload-list__item-preview">
199
+ <el-dropdown-item v-for="(option, index) in model.optionModel.options" :key="index"
200
+ :command="{ option: option, mediaLabe: model.mediaLabe }">
201
+ {{ option[model.optionModel.optionAttrs.label] }}
202
+ </el-dropdown-item>
203
+ </el-dropdown-menu>
204
+ </el-dropdown>
205
+ </span>
151
206
  <div slot="file" slot-scope="{ file }" :title="file.fileName">
152
207
  <div class="cover-list-item">
153
208
  <div @click="viewerfile(file)">
154
- <el-image fit="fill" :src="file.url?file.url:file.mediaUrl?file.url:require('../../../assets/blank.png')" style="width: 100px; height: 100px" :z-index="previewZIndex" >
155
- </el-image></div>
156
- <span class="cover-list-item-span-Default" v-if="(model.lock&&file.flagDefault)||(model.rightDefault&&model.rightDefault==1&&file.mediaTypeID==2)">
209
+ <el-image fit="fill"
210
+ :src="file.url ? file.url : file.mediaUrl ? file.url : require('../../../assets/blank.png')"
211
+ style="width: 100px; height: 100px" :z-index="previewZIndex">
212
+ </el-image>
213
+ </div>
214
+ <span class="cover-list-item-span-Default"
215
+ v-if="(model.lock && file.flagDefault) || (model.rightDefault && model.rightDefault == 1 && file.mediaTypeID == 2)">
157
216
  <i>
158
- <el-radio v-model="file.flagDefault" :label="true" :class="{'browseDefault':model.lock}" @change="handleDefault($event,file)" :disabled="model.lock" title="设为封面">&nbsp;</el-radio>
217
+ <el-radio v-model="file.flagDefault" :label="true" :class="{ 'browseDefault': model.lock }"
218
+ @change="handleDefault($event, file)" :disabled="model.lock" title="设为封面">&nbsp;</el-radio>
159
219
  </i>
160
220
  </span>
161
- <span class="cover-list-item-span-edit" v-if="!model.lock&& file.rightCrop &&file.mediaTypeID==2">
221
+ <span class="cover-list-item-span-edit" v-if="!model.lock && file.rightCrop && file.mediaTypeID == 2">
162
222
  <i class="el-icon-edit-outline" @click="handleEdit(file)"></i>
163
223
  </span>
164
224
  <span class="cover-list-item-span-delete" v-if="!model.lock && file.rightDel">
@@ -166,16 +226,17 @@
166
226
  </span>
167
227
  <span class="cover-list-item-play" v-if="file.videoPlayIconUrl">
168
228
  <div class="swiper-i" @click="viewerfile(file)">
169
- <img :src="file.videoPlayIconUrl" class="hous-icon" />
229
+ <img :src="file.videoPlayIconUrl" class="hous-icon" />
170
230
  </div>
171
231
  </span>
172
- <span class="cover-list-item-play" v-else-if="file.mediaTypeID==4 && (file.videoPlayIconUrl||model.videoPlayIconUrl)">
232
+ <span class="cover-list-item-play"
233
+ v-else-if="file.mediaTypeID == 4 && (file.videoPlayIconUrl || model.videoPlayIconUrl)">
173
234
  <div class="swiper-i" @click="viewerfile(file)">
174
- <img :src="(file.videoPlayIconUrl||model.videoPlayIconUrl)" class="hous-icon" />
235
+ <img :src="(file.videoPlayIconUrl || model.videoPlayIconUrl)" class="hous-icon" />
175
236
  </div>
176
237
  </span>
177
238
 
178
- <span class="cover-list-item-span" v-if="(model.lock&& file.mediaLabelName )|| model.paramName">
239
+ <span class="cover-list-item-span" v-if="(model.lock && file.mediaLabelName) || model.paramName">
179
240
  <!--锁定-->
180
241
  <span v-if="model.lock || !file.rightEdit" class="el-dropdown-link">
181
242
  <span style="width: 80px; height: 26px; display: inline-flex">&nbsp;{{ file.mediaLabelName }}</span>
@@ -186,13 +247,15 @@
186
247
  <i class="el-icon-arrow-down el-icon--right"></i>
187
248
  </span>
188
249
  <!--简单分类-->
189
- <el-dropdown v-else class="el-upload-list__item-preview" trigger="click" placement="top" @command="classifySelectedClickHandle">
250
+ <el-dropdown v-else class="el-upload-list__item-preview" trigger="click" placement="top"
251
+ @command="classifySelectedClickHandle">
190
252
  <span class="el-dropdown-link" @click="classifyClickHandle">
191
253
  <span style="width: 80px; height: 26px; display: inline-flex">&nbsp;{{ file.mediaLabelName }}</span>
192
254
  <i class="el-icon-arrow-down el-icon--right"></i>
193
255
  </span>
194
256
  <el-dropdown-menu slot="dropdown" class="el-upload-list__item-preview">
195
- <el-dropdown-item v-for="(option, index) in model.optionModel.options" :key="index" :command="{ option: option, file: file }">
257
+ <el-dropdown-item v-for="(option, index) in model.optionModel.options" :key="index"
258
+ :command="{ option: option, file: file }">
196
259
  {{ option[model.optionModel.optionAttrs.label] }}
197
260
  </el-dropdown-item>
198
261
  </el-dropdown-menu>
@@ -201,8 +264,8 @@
201
264
  </div>
202
265
  <div>
203
266
  <el-progress type="circle" v-if="file.progressFlag" :show-text="false"
204
- :percentage="typeof file.loadProgress !== 'undefined' && file.loadProgress !== null ? file.loadProgress : 0.00"
205
- :width="96" :height="96" class="file-cirle file-cirle-mrLeft"></el-progress>
267
+ :percentage="typeof file.loadProgress !== 'undefined' && file.loadProgress !== null ? file.loadProgress : 0.00"
268
+ :width="96" :height="96" class="file-cirle file-cirle-mrLeft"></el-progress>
206
269
  <div class="circleCenter" v-if="file.progressFlag">
207
270
  <div style="font-size: 12px;color: #666;"> {{ file.loadProgress.toFixed(2) }}%</div>
208
271
  </div>
@@ -214,752 +277,778 @@
214
277
  </div>
215
278
  </template>
216
279
  <script>
217
- import dynamicElement from "../../mixins/dynamicElement";
218
- import { upload, uploadByPieces } from "../../loader/src/ctl/SliceUpload";
219
- export default {
220
- name: "ct-file",
221
- mixins: [dynamicElement],
222
- props: {
223
- vmodel: Object,
224
- api: String,
225
- },
226
- data() {
227
- return {
228
- disableUpload: false,
229
- qrcodeVisible:false,
230
- isQrCode:false,
231
- SSID:'',
232
- qrtimer:null,
233
- qrCodeImg:'',
234
- scanStatusDesc:"",
235
- FlagbtnScan:false,
236
- QRCodeRefTop:'',
237
- QRCodeRefLeft:'',
238
- QRCodeRefJiaoTop:16,
239
- QRFileList:[],
240
- };
280
+ import dynamicElement from "../../mixins/dynamicElement";
281
+ import { upload, uploadByPieces } from "../../loader/src/ctl/SliceUpload";
282
+ export default {
283
+ name: "ct-file",
284
+ mixins: [dynamicElement],
285
+ props: {
286
+ vmodel: Object,
287
+ api: String,
288
+ },
289
+ data() {
290
+ return {
291
+ disableUpload: false,
292
+ qrcodeVisible: false,
293
+ isQrCode: false,
294
+ SSID: '',
295
+ qrtimer: null,
296
+ qrCodeImg: '',
297
+ scanStatusDesc: "",
298
+ FlagbtnScan: false,
299
+ QRCodeRefTop: '',
300
+ QRCodeRefLeft: '',
301
+ QRCodeRefJiaoTop: 16,
302
+ QRFileList: [],
303
+ };
304
+ },
305
+ computed: {
306
+ headers: function () {
307
+ return this.$common.getDataDrivenOpts().handler.getRequestHeaders();
241
308
  },
242
- computed: {
243
- headers: function () {
244
- return this.$common.getDataDrivenOpts().handler.getRequestHeaders();
245
- },
246
- previewZIndex: function () {
247
- return this.$common.getDataDrivenOpts().zindex + 100;
248
- },
309
+ previewZIndex: function () {
310
+ return this.$common.getDataDrivenOpts().zindex + 100;
249
311
  },
250
- created() {
251
- var self = this;
252
- this.$nextTick(function () {
253
- if (self.vmodel) {
254
- self.load(self.vmodel);
255
- self.$emit("loaded");
256
- }
257
- else if (typeof self.source !== "undefined") {
258
- self.loaderObj.File(self.source, (data) => {
259
- self.load(data);
260
- });
261
- }
262
- this.disableUpload = this.model.lock;
263
- });
264
- },
265
- methods: {
266
- load(data) {
267
- this.model = data;
268
- this.classifyClickHandle();
269
- if (this.model.action === '' && !this.model.lock) {
270
- this.validMessage = "必须配置上传的URL";
271
- this.valid = false;
272
- this.$message({
273
- message: this.validMessage,
274
- type: 'error',
275
- showClose:true,
276
- });
277
- }
278
- },
279
- handleExceed() {
280
- this.validMessage = "附件数量最多" + this.model.max + "张";
312
+ },
313
+ created() {
314
+ var self = this;
315
+ this.$nextTick(function () {
316
+ if (self.vmodel) {
317
+ self.load(self.vmodel);
318
+ self.$emit("loaded");
319
+ }
320
+ else if (typeof self.source !== "undefined") {
321
+ self.loaderObj.File(self.source, (data) => {
322
+ self.load(data);
323
+ });
324
+ }
325
+ this.disableUpload = this.model.lock;
326
+ });
327
+ },
328
+ methods: {
329
+ load(data) {
330
+ this.model = data;
331
+ this.classifyClickHandle();
332
+ if (this.model.action === '' && !this.model.lock) {
333
+ this.validMessage = "必须配置上传的URL";
281
334
  this.valid = false;
282
335
  this.$message({
283
336
  message: this.validMessage,
284
337
  type: 'error',
285
- showClose:true,
338
+ showClose: true,
286
339
  });
287
- },
288
- //删除
289
- handleRemove(file) {
290
- this.$common.confirm("确定删除该附件?", "提示", {
291
- confirmButtonText: "确定",
292
- cancelButtonText: "取消",
293
- //type: 'warning'
294
- }).then(() => {
295
- this.model.deleteFile(file, false);
296
- this.selfValidExcute("remove");
297
- setTimeout(() => {
298
- this.QRCodeLocate();
299
- }, 1080);
300
-
301
- }).catch(() => { });
302
- },
303
- handlePictureCardPreview(file) {
304
- if (this.$common.isAssetTypeAnImage(this.getSuffix(file))) {
305
- // this.$openPreview([file.mediaUrl]);
306
- } else {
307
- if (file.rightDownload) {
308
- window.open(file.mediaUrl, "_blank");
309
- }
310
- return [];
340
+ }
341
+ },
342
+ handleExceed() {
343
+ this.validMessage = "附件数量最多" + this.model.max + "";
344
+ this.valid = false;
345
+ this.$message({
346
+ message: this.validMessage,
347
+ type: 'error',
348
+ showClose: true,
349
+ });
350
+ },
351
+ //删除
352
+ handleRemove(file) {
353
+ this.$common.confirm("确定删除该附件?", "提示", {
354
+ confirmButtonText: "确定",
355
+ cancelButtonText: "取消",
356
+ //type: 'warning'
357
+ }).then(() => {
358
+ this.model.deleteFile(file, false);
359
+ this.selfValidExcute("remove");
360
+ setTimeout(() => {
361
+ this.QRCodeLocate();
362
+ }, 1080);
363
+
364
+ }).catch(() => { });
365
+ },
366
+ handlePictureCardPreview(file) {
367
+ if (this.$common.isAssetTypeAnImage(this.getSuffix(file))) {
368
+ // this.$openPreview([file.mediaUrl]);
369
+ } else {
370
+ if (file.rightDownload) {
371
+ window.open(file.mediaUrl, "_blank");
311
372
  }
312
- },
313
- viewerfile(file) {
314
- var self = this;
315
- var MediaAlbum = [{ albumName: this.model.label || "媒体", medias: [] }];
373
+ return [];
374
+ }
375
+ },
376
+ viewerfile(file) {
377
+ var self = this;
378
+ var MediaAlbum = [{ albumName: this.model.label || "媒体", medias: [] }];
316
379
 
317
- let fileList = this.model.sourceList.filter((item) => {
318
- return item.flagDeleted !== true;
319
- });
320
- fileList.forEach((v) => {
321
- MediaAlbum[0].medias.push(v);
322
- });
323
- var index = MediaAlbum[0].medias.findIndex(
324
- (v) => (v === file.source)
325
- );
326
- self.$common.viewerfile(( this.model.label || "预览媒体"), MediaAlbum,0, index,self.model.mediaViewPageType);
327
- },
328
- handleEdit(file) {
329
- var self = this;
330
- var api = self.model.action;
331
- var width = parseInt(window.document.body.clientWidth * 0.8);
332
- width = width > 1160 ? 1160 : width;
333
- var dialogOption = {
334
- title: "编辑图片",
335
- content: [
336
- {
337
- component: "ct-editpictures",
338
- attrs: {
339
- file: file,
340
- showTitle: false,
341
- api: api,
342
- minWidth: self.model.min2,
343
- minHeight: self.model.max2,
344
- width: width + "px",
345
- height: parseInt(window.document.body.clientHeight * 0.8).toString() +
346
- "px",
347
- },
348
- on: {
349
- handleEditPhoto(file) {
350
- self.$nextTick(function () {
351
- this.model.updateFile(file);
352
- self.$common.closeDialog(dialogOption.dialog);
353
- });
354
- },
380
+ let fileList = this.model.sourceList.filter((item) => {
381
+ return item.flagDeleted !== true;
382
+ });
383
+ fileList.forEach((v) => {
384
+ MediaAlbum[0].medias.push(v);
385
+ });
386
+ var index = MediaAlbum[0].medias.findIndex(
387
+ (v) => (v === file.source)
388
+ );
389
+ self.$common.viewerfile((this.model.label || "预览媒体"), MediaAlbum, 0, index, self.model.mediaViewPageType);
390
+ },
391
+ handleEdit(file) {
392
+ var self = this;
393
+ var api = self.model.action;
394
+ var width = parseInt(window.document.body.clientWidth * 0.8);
395
+ width = width > 1160 ? 1160 : width;
396
+ var dialogOption = {
397
+ title: "编辑图片",
398
+ content: [
399
+ {
400
+ component: "ct-editpictures",
401
+ attrs: {
402
+ file: file,
403
+ showTitle: false,
404
+ api: api,
405
+ minWidth: self.model.min2,
406
+ minHeight: self.model.max2,
407
+ width: width + "px",
408
+ height: parseInt(window.document.body.clientHeight * 0.8).toString() +
409
+ "px",
410
+ },
411
+ on: {
412
+ handleEditPhoto(file) {
413
+ self.$nextTick(function () {
414
+ this.model.updateFile(file);
415
+ self.$common.closeDialog(dialogOption.dialog);
416
+ });
355
417
  },
356
418
  },
357
- ],
358
- };
359
- self.$common.openDialog(dialogOption);
360
- },
361
- getPreviewSrcList(file) {
362
- if (this.$common.isAssetTypeAnImage(this.getSuffix(file))) {
363
- let arr = this.model.fileList
364
- .filter((at) => this.$common.isAssetTypeAnImage(this.getSuffix(at)))
365
- .map((attach) => {
366
- return attach.mediaUrl;
367
- });
419
+ },
420
+ ],
421
+ };
422
+ self.$common.openDialog(dialogOption);
423
+ },
424
+ getPreviewSrcList(file) {
425
+ if (this.$common.isAssetTypeAnImage(this.getSuffix(file))) {
426
+ let arr = this.model.fileList
427
+ .filter((at) => this.$common.isAssetTypeAnImage(this.getSuffix(at)))
428
+ .map((attach) => {
429
+ return attach.mediaUrl;
430
+ });
368
431
 
369
- //让看起来有序
370
- let nowIndex = arr.findIndex((photo) => photo === file.mediaUrl);
371
- if (nowIndex > -1) {
372
- let start = arr.slice(0, nowIndex);
373
- let end = arr.slice(nowIndex);
374
- arr = [...end, ...start];
375
- }
376
- return arr;
377
- } else {
378
- return [];
432
+ //让看起来有序
433
+ let nowIndex = arr.findIndex((photo) => photo === file.mediaUrl);
434
+ if (nowIndex > -1) {
435
+ let start = arr.slice(0, nowIndex);
436
+ let end = arr.slice(nowIndex);
437
+ arr = [...end, ...start];
379
438
  }
380
- },
381
- getSuffix(file) {
382
- if (file.fileExtension) {
383
- return file.fileExtension;
439
+ return arr;
440
+ } else {
441
+ return [];
442
+ }
443
+ },
444
+ getSuffix(file) {
445
+ if (file.fileExtension) {
446
+ return file.fileExtension;
447
+ }
448
+ if (file.name) {
449
+ let nameArr = file.name.split(".");
450
+ return nameArr[nameArr.length - 1];
451
+ }
452
+ return "";
453
+ },
454
+ handleDownload(file) {
455
+ },
456
+ handleChange(file, fileList) {
457
+ this.changeHandler(this.model.value);
458
+ },
459
+ //上传之前的钩子
460
+ beforeUploadProcess(file) {
461
+ debugger
462
+ return true;
463
+ },
464
+
465
+ //文件上传时的钩子
466
+ uploadProcess(event, file, fileList) {
467
+ debugger
468
+ file.progressFlag = true; // 显示进度条
469
+ file.loadProgress = parseInt(event.percent); // 动态获取文件上传进度
470
+ if (file.loadProgress >= 100) {
471
+ file.loadProgress = 100;
472
+ setTimeout(() => {
473
+ file.progressFlag = false;
474
+ }, 1000); // 一秒后关闭进度条
475
+ }
476
+ },
477
+ //上传完成钩子
478
+ handleAvatarSuccess(res, file, fileList) {
479
+ this.model.handleAvatarSuccess(res, file, fileList);
480
+ this.QRFileList = fileList;
481
+ this.QRCodeLocate();
482
+ },
483
+ handleAvatarError(res, file, fileList) {
484
+ if (res.status === 404) {
485
+ let m = JSON.parse(res.message);
486
+ if (m.error) {
487
+ this.$message({
488
+ message: "path(" + m.path + ") " + m.error,
489
+ type: 'warning',
490
+ showClose: true,
491
+ });
384
492
  }
385
- if (file.name) {
386
- let nameArr = file.name.split(".");
387
- return nameArr[nameArr.length - 1];
493
+ }
494
+ },
495
+ //不能共用的数据校验
496
+ selfValidExcute: function (eventName) {
497
+ if (this.model.max && this.model.max > 0) {
498
+ if (this.model.getfileListLength() >= this.model.max) {
499
+ this.disableUpload = true;
388
500
  }
389
- return "";
390
- },
391
- handleDownload(file) {
392
- },
393
- handleChange(file, fileList) {
394
- this.changeHandler(this.model.value);
395
- },
396
- //上传之前的钩子
397
- beforeUploadProcess(file) {
398
- return true;
399
- },
400
-
401
- //文件上传时的钩子
402
- uploadProcess(event, file, fileList) {
403
- file.progressFlag = true; // 显示进度条
404
- file.loadProgress = parseInt(event.percent); // 动态获取文件上传进度
405
- if (file.loadProgress >= 100) {
406
- file.loadProgress = 100;
407
- setTimeout(() => {
408
- file.progressFlag = false;
409
- }, 1000); // 一秒后关闭进度条
501
+ else {
502
+ this.disableUpload = false;
410
503
  }
411
- },
412
- //上传完成钩子
413
- handleAvatarSuccess(res, file, fileList) {
414
- this.model.handleAvatarSuccess(res, file, fileList);
415
- this.QRFileList=fileList;
416
- this.QRCodeLocate();
417
- },
418
- handleAvatarError(res, file, fileList) {
419
- if (res.status === 404) {
420
- let m = JSON.parse(res.message);
421
- if (m.error) {
422
- this.$message({
423
- message: "path(" + m.path + ") " + m.error,
424
- type: 'warning',
425
- showClose:true,
426
- });
427
- }
504
+ }
505
+ if (this.model.required) {
506
+ if (this.model.getfileListLength() === 0) {
507
+ this.validMessage = "必须上传附件";
508
+ this.valid = false;
509
+ return false;
428
510
  }
429
- },
430
- //不能共用的数据校验
431
- selfValidExcute: function (eventName) {
432
- if (this.model.max && this.model.max > 0) {
433
- if (this.model.getfileListLength() >= this.model.max) {
434
- this.disableUpload = true;
435
- }
436
- else {
437
- this.disableUpload = false;
511
+ }
512
+ if (this.model.min) {
513
+ if (this.model.getfileListLength() < this.model.min) {
514
+ //change时需要判断有没有上传图片如果没有图片则不提示
515
+ if (eventName == "change" && this.model.getfileListLength() > 0) {
516
+ this.validMessage = "附件数量还差" + (parseInt(this.model.min) - this.model.getfileListLength()) + "张";
517
+ this.valid = false;
438
518
  }
439
- }
440
- if (this.model.required) {
441
- if (this.model.getfileListLength() === 0) {
442
- this.validMessage = "必须上传附件";
519
+ else if (eventName == "valid") {
520
+ this.validMessage = "附件数量还差" + (parseInt(this.model.min) - this.model.getfileListLength()) + "张";
443
521
  this.valid = false;
444
- return false;
445
522
  }
446
- }
447
- if (this.model.min) {
448
- if (this.model.getfileListLength() < this.model.min) {
449
- //change时需要判断有没有上传图片如果没有图片则不提示
450
- if (eventName == "change" && this.model.getfileListLength() > 0) {
451
- this.validMessage = "附件数量还差" + (parseInt(this.model.min) - this.model.getfileListLength()) + "张";
452
- this.valid = false;
453
- }
454
- else if (eventName == "valid") {
455
- this.validMessage = "附件数量还差" + (parseInt(this.model.min) - this.model.getfileListLength()) + "张";
456
- this.valid = false;
457
- }
458
- else if (eventName == "remove") {
459
- this.valid = true;
460
- }
461
- return false;
523
+ else if (eventName == "remove") {
524
+ this.valid = true;
462
525
  }
526
+ return false;
463
527
  }
528
+ }
464
529
 
465
-
466
- if (this.model.rightDefault && this.model.rightDefault == 1 && eventName == "valid") {
467
- if (this.model.getfileDefault() <= 0) {
468
- this.validMessage = "请设置默认封面";
469
- this.valid = false;
470
- return false;
471
- }
472
- }
473
- if (eventName == "valid" && !this.validFileClass()) {
474
- this.validMessage = "请选择附件分类";
530
+
531
+ if (this.model.rightDefault && this.model.rightDefault == 1 && eventName == "valid") {
532
+ if (this.model.getfileDefault() <= 0) {
533
+ this.validMessage = "请设置默认封面";
475
534
  this.valid = false;
476
535
  return false;
477
536
  }
478
- if (typeof this.model.min2 !== 'undefined' || typeof this.model.max2 !== 'undefined') {
479
- var flagSize = true;
480
- this.validMessage = "";
481
- this.model.fileList.forEach((v, index) => {
482
- var flagw = true;
483
- var flagh = true;
484
- if (typeof this.model.min2 !== 'undefined' && typeof v.width!== 'undefined') {
485
- if (v.width < parseInt(this.model.min2)) {
486
- flagSize = false;
487
- flagw = false;
488
- }
489
- }
490
- if (typeof this.model.max2 !== 'undefined' && typeof v.height !== 'undefined') {
491
- if (v.height < parseInt(this.model.max2)) {
492
- flagSize = false;
493
- flagh = false;
494
- }
537
+ }
538
+ if (eventName == "valid" && !this.validFileClass()) {
539
+ this.validMessage = "请选择附件分类";
540
+ this.valid = false;
541
+ return false;
542
+ }
543
+ if (typeof this.model.min2 !== 'undefined' || typeof this.model.max2 !== 'undefined') {
544
+ var flagSize = true;
545
+ this.validMessage = "";
546
+ this.model.fileList.forEach((v, index) => {
547
+ var flagw = true;
548
+ var flagh = true;
549
+ if (typeof this.model.min2 !== 'undefined' && typeof v.width !== 'undefined') {
550
+ if (v.width < parseInt(this.model.min2)) {
551
+ flagSize = false;
552
+ flagw = false;
495
553
  }
496
- if (!flagw || !flagh) {
497
- this.validMessage = this.validMessage+"第" + (index + 1) + "张图片";
498
- if (!flagw && !flagh) {
499
- this.validMessage = this.validMessage + "宽高不符合标准";
500
- }
501
- else if (!flagw) {
502
- this.validMessage = this.validMessage + "宽度不符合标准";
503
- }
504
- else if (!flagh) {
505
- this.validMessage = this.validMessage + "高度不符合标准";
506
- }
507
- this.validMessage = this.validMessage + ",上传图片";
508
- if (typeof this.model.min2 !== 'undefined') {
509
- this.validMessage = this.validMessage + "宽度不小于" + this.model.min2 + "px ";
510
- }
511
- if (typeof this.model.max2 !== 'undefined') {
512
- this.validMessage = this.validMessage + "高度不小于" + this.model.max2 + "px ";
513
- }
514
- this.validMessage = this.validMessage + "\r\n";
515
- if (this.$refs.upload) {
516
- this.$refs.upload.$el.children[0].children[index].style.border = "1px solid #ff0000";
517
- }
554
+ }
555
+ if (typeof this.model.max2 !== 'undefined' && typeof v.height !== 'undefined') {
556
+ if (v.height < parseInt(this.model.max2)) {
557
+ flagSize = false;
558
+ flagh = false;
518
559
  }
519
- })
520
- if (!flagSize) {
521
- this.valid = false;
522
- return false;
523
560
  }
524
- }
525
-
526
- this.valid = true;
527
- return this.valid;
528
- },
529
- //验证附件分类是否必填
530
- validFileClass() {
531
- if (this.model.paramName) {
532
- if (this.model.sourceList && this.model.sourceList.length > 0) {
533
- let notClass = this.model.sourceList.filter((item) => {
534
- return (
535
- (item.mediaLabelID == undefined || item.mediaLabelID == "") &&
536
- item.flagDeleted !== true
537
- );
538
- });
539
- if (notClass.length > 0) {
540
- return false;
561
+ if (!flagw || !flagh) {
562
+ this.validMessage = this.validMessage + "第" + (index + 1) + "张图片";
563
+ if (!flagw && !flagh) {
564
+ this.validMessage = this.validMessage + "宽高不符合标准";
565
+ }
566
+ else if (!flagw) {
567
+ this.validMessage = this.validMessage + "宽度不符合标准";
568
+ }
569
+ else if (!flagh) {
570
+ this.validMessage = this.validMessage + "高度不符合标准";
571
+ }
572
+ this.validMessage = this.validMessage + ",上传图片";
573
+ if (typeof this.model.min2 !== 'undefined') {
574
+ this.validMessage = this.validMessage + "宽度不小于" + this.model.min2 + "px ";
575
+ }
576
+ if (typeof this.model.max2 !== 'undefined') {
577
+ this.validMessage = this.validMessage + "高度不小于" + this.model.max2 + "px ";
578
+ }
579
+ this.validMessage = this.validMessage + "\r\n";
580
+ if (this.$refs.upload) {
581
+ this.$refs.upload.$el.children[0].children[index].style.border = "1px solid #ff0000";
541
582
  }
542
583
  }
543
- }
544
- return true;
545
- },
546
- classifyClickHandle: function () {
547
- var self = this;
548
- this.model.getOptions(() => {
549
- self.$forceUpdate();
550
- });
551
- },
552
- classifySelectedClickHandle: function (classify) {
553
- classify.file.mediaLabelName = classify.option[this.model.optionModel.optionAttrs.label];
554
- classify.file.mediaLabelID = classify.option[this.model.optionModel.optionAttrs.value];
555
- this.model.setClassify(classify);
556
- if (!this.validFileClass()) {
557
- this.validMessage = "请选择附件分类";
584
+ })
585
+ if (!flagSize) {
558
586
  this.valid = false;
587
+ return false;
559
588
  }
560
- else {
561
- this.valid = true;
589
+ }
590
+
591
+ this.valid = true;
592
+ return this.valid;
593
+ },
594
+ //验证附件分类是否必填
595
+ validFileClass() {
596
+ if (this.model.paramName) {
597
+ if (this.model.sourceList && this.model.sourceList.length > 0) {
598
+ let notClass = this.model.sourceList.filter((item) => {
599
+ return (
600
+ (item.mediaLabelID == undefined || item.mediaLabelID == "") &&
601
+ item.flagDeleted !== true
602
+ );
603
+ });
604
+ if (notClass.length > 0) {
605
+ return false;
606
+ }
562
607
  }
563
- },
564
- classifyFormClickHandle: function (file) {
565
- var self = this;
566
- this.model.updateClassify(file, () => {
567
- //self.$forceUpdate();
608
+ }
609
+ return true;
610
+ },
611
+ classifyClickHandle: function () {
612
+ var self = this;
613
+ this.model.getOptions(() => {
614
+ self.$forceUpdate();
615
+ });
616
+ },
617
+
618
+ PublicClassifySelectedClickHandle: function (classify) {
619
+ this.model.setPublicClassify(classify);
620
+ this.$forceUpdate();
621
+
622
+ },
623
+ classifySelectedClickHandle: function (classify) {
624
+ classify.file.mediaLabelName = classify.option[this.model.optionModel.optionAttrs.label];
625
+ classify.file.mediaLabelID = classify.option[this.model.optionModel.optionAttrs.value];
626
+ this.model.setClassify(classify);
627
+ if (!this.validFileClass()) {
628
+ this.validMessage = "请选择附件分类";
629
+ this.valid = false;
630
+ }
631
+ else {
632
+ this.valid = true;
633
+ }
634
+ },
635
+ classifyFormClickHandle: function (file) {
636
+ var self = this;
637
+ this.model.updateClassify(file, () => {
638
+ //self.$forceUpdate();
639
+ });
640
+ if (!this.validFileClass()) {
641
+ this.validMessage = "请选择附件分类";
642
+ this.valid = false;
643
+ }
644
+ else {
645
+ this.valid = true;
646
+ }
647
+ },
648
+ handleDefault: function (event, file) {
649
+ this.model.setDefault(file);
650
+ // this.selfValidExcute("remove");
651
+ },
652
+ async SliceUpload(options) {
653
+ const { file, onProgress, onSuccess, onError } = options;
654
+ if (this.model.action === '' && !this.model.lock) {
655
+ this.validMessage = "必须配置上传的URL";
656
+ this.valid = false;
657
+ this.$message({
658
+ message: this.validMessage,
659
+ type: 'error',
660
+ showClose: true,
568
661
  });
569
- if (!this.validFileClass()) {
570
- this.validMessage = "请选择附件分类";
571
- this.valid = false;
572
- }
573
- else {
574
- this.valid = true;
575
- }
576
- },
577
- handleDefault: function (event, file) {
578
- this.model.setDefault(file);
579
- // this.selfValidExcute("remove");
580
- },
581
- async SliceUpload(options) {
582
- const { file, onProgress, onSuccess, onError } = options;
583
- if (this.model.action === '' && !this.model.lock) {
584
- this.validMessage = "必须配置上传的URL";
585
- this.valid = false;
662
+ }
663
+ // data是上传时附带的额外参数,file是文件
664
+ let url = this.model.action; //上传文件接口
665
+ let uid = this.uploadguid();
666
+ try {
667
+ file.uid = uid;
668
+ this.model.addfileItem(file);
669
+ const res = await uploadByPieces(this.model.action, file, this.uploadpro, options);
670
+ return res;
671
+
672
+ } catch (e) {
673
+ return e;
674
+ }
675
+ },
676
+ S4() {
677
+ return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
678
+ },
679
+ uploadguid() {
680
+ return (this.S4() + this.S4() + '-' + this.S4() + '-' + this.S4() + '-' + this.S4() + '-' + this.S4() + this.S4() + this.S4());
681
+ },
682
+ uploadpro(uploadOptions, res, xhr, flagError) {
683
+ const { file, onProgress, onSuccess, onError } = uploadOptions;
684
+
685
+ var refupload = this.$refs.refupload;
686
+ if (refupload) {
687
+ if (flagError) {
586
688
  this.$message({
587
- message: this.validMessage,
689
+ message: res,
588
690
  type: 'error',
589
- showClose:true,
691
+ showClose: true,
590
692
  });
693
+ file.source = { "actionType": 2 };
694
+ this.model.deleteFile(file, false);
695
+ this.selfValidExcute("remove");
696
+ return false;
591
697
  }
592
- // data是上传时附带的额外参数,file是文件
593
- let url = this.model.action; //上传文件接口
594
- let uid = this.uploadguid();
595
- try {
596
- file.uid = uid;
597
- this.model.addfileItem(file);
598
- const res = await uploadByPieces(this.model.action, file , this.uploadpro, options);
599
- return res;
600
-
601
- } catch (e) {
602
- return e;
603
- }
604
- },
605
- S4() {
606
- return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
607
- },
608
- uploadguid() {
609
- return (this.S4() + this.S4() + '-' + this.S4() + '-' + this.S4() + '-' + this.S4() + '-' + this.S4() + this.S4() + this.S4());
610
- },
611
- uploadpro(uploadOptions, res, xhr, flagError) {
612
- const { file, onProgress, onSuccess, onError } = uploadOptions;
613
-
614
- var refupload = this.$refs.refupload;
615
- if (refupload) {
616
- if (flagError) {
698
+ else if (xhr.status == 200) {
699
+ if (res.rtnCode != 200 && res.rtnMsg != "") {
617
700
  this.$message({
618
- message: res,
701
+ message: res.rtnMsg,
619
702
  type: 'error',
620
- showClose:true,
703
+ showClose: true,
621
704
  });
622
- file.source = { "actionType": 2 };
623
- this.model.deleteFile(file, false);
624
- this.selfValidExcute("remove");
625
705
  return false;
626
706
  }
627
- else if (xhr.status == 200) {
628
- if (res.rtnCode != 200 && res.rtnMsg != "") {
629
- this.$message({
630
- message: res.rtnMsg,
631
- type: 'error',
632
- showClose:true,
633
- });
634
- return false;
635
- }
636
- const Progress = Math.min(100, Math.floor(1E4 * parseInt(res.content.nextOffSet) / parseInt(file.size)) / 100);
637
- this.model.setByPieces(res, Progress, file);
707
+ const Progress = Math.min(100, Math.floor(1E4 * parseInt(res.content.nextOffSet) / parseInt(file.size)) / 100);
708
+ this.model.setByPieces(res, Progress, file);
638
709
 
639
- if (res.content.finished == 1) {
640
- this.handleChange();
641
- this.QRCodeLocate();
642
- }
643
- return true;
710
+ if (res.content.finished == 1) {
711
+ this.handleChange();
712
+ this.QRCodeLocate();
644
713
  }
714
+ return true;
645
715
  }
646
- else {
647
- xhr = null;
648
- return false;
649
- }
650
- },
651
-
652
- ShowQRcode(){
653
- this.isQrCode=false;
654
- this.FlagbtnScan=false;
655
- this.GetQRCodeUploadPhoto();
656
- window.addEventListener('scroll', this.QRCodeLocate,true)
657
- },
658
- HideQRcode(){
659
- this.isQrCode=false;
660
- clearTimeout(this.qrtimer);
661
- window.removeEventListener('scroll', this.QRCodeLocate,true)
662
- },
663
- CheckQRCodeStatus(){
664
- var self=this;
665
- if(self.SSID){
666
- self.model.getQRCodeStatus(self.SSID,function(data){
667
- if(data.enumScanStatus=="已扫码"||data.enumScanStatus=="已完成"){
668
- self.scanStatusDesc=data.scanStatusDesc;
669
- self.isQrCode=true;
670
- }
671
- if(data.enumScanStatus=="已完成"){
672
- clearTimeout(self.qrtimer);
673
- self.FlagbtnScan=true;
674
- data.photos.forEach((v) => {
675
- if(self.model.fileList.length<parseInt(self.model.max || 999)){
676
- v.videoCoverFileName=v.videoCoverFileName||null;
677
- v.thumbnailUrl=v.thumbnailUrl||'';
678
- v.mediaSourceTypeID=v.mediaSourceTypeID||null;
679
- v.mediaSourceID=v.mediaSourceID||null;
680
- v.mediaPrintDesc=v.mediaPrintDesc||null;
681
- v.mediaID=v.mediaID||null;
682
- v.mediaFormData=v.mediaFormData||null;
683
- v.mediaDescEN=v.mediaDescEN||null;
684
- v.mediaDescCN=v.mediaDescCN||null;
685
- v.mediaDataBase64=v.mediaDataBase64||null;
686
- v.mediaCode=v.mediaCode||null;
687
- v.groupID=v.groupID||null;
688
- self.model.AddSourceList(v);
689
- var FileData = self.model.getFileData(v);
690
- FileData.uid=self.uploadguid();
691
- FileData.width=v.width;
692
- FileData.height=v.height;
693
- if(self.model.type==51||(self.QRFileList&&self.QRFileList.length==0)){
694
- self.model.fileList.push(FileData);
695
- }
696
- else{
697
- self.QRFileList.push(FileData);
698
- }
699
- self.handleChange();
700
- self.$nextTick(() => {
701
- self.QRCodeLocate();
702
- });
703
- }
704
- });
705
- }
706
- else {
707
- self.qrtimer = setTimeout(self.CheckQRCodeStatus, 1000);
708
- }
709
- });
710
- }
711
- },
712
- GetQRCodeUploadPhoto(){
713
- var self=this;
714
- clearInterval(self.qrtimer);
715
- self.model.getQRCode(function(data){
716
- self.qrCodeImg=data.qrCode;
717
- self.SSID=data.ssid;
718
- self.qrtimer = setTimeout(self.CheckQRCodeStatus, 1000);
719
- });
720
- },
721
- qrcodeFn() {
722
- let self = this;
723
- self.qrcodeVisible = !self.qrcodeVisible;
724
- if(self.qrcodeVisible){
725
- self.QRCodeLocate();
726
- self.ShowQRcode();
727
- }
728
- else{
729
- self.HideQRcode();
716
+ }
717
+ else {
718
+ xhr = null;
719
+ return false;
720
+ }
721
+ },
722
+
723
+ ShowQRcode() {
724
+ this.isQrCode = false;
725
+ this.FlagbtnScan = false;
726
+ this.GetQRCodeUploadPhoto();
727
+ window.addEventListener('scroll', this.QRCodeLocate, true)
728
+ },
729
+ HideQRcode() {
730
+ this.isQrCode = false;
731
+ clearTimeout(this.qrtimer);
732
+ window.removeEventListener('scroll', this.QRCodeLocate, true)
733
+ },
734
+ CheckQRCodeStatus() {
735
+ var self = this;
736
+ if (self.SSID) {
737
+ self.model.getQRCodeStatus(self.SSID, function (data) {
738
+ if (data.enumScanStatus == "已扫码" || data.enumScanStatus == "已完成") {
739
+ self.scanStatusDesc = data.scanStatusDesc;
740
+ self.isQrCode = true;
730
741
  }
731
- },
732
- QRCodeLocate(){
733
- let self = this;
734
- let QRCodeRef = self.$refs.QRCodeRef;
735
- if (QRCodeRef) {
736
- var QRCodeRefWith = QRCodeRef.width;
737
- var QRCodeRefBottom=QRCodeRef.getBoundingClientRect().bottom;
738
- var h=window.innerHeight;
739
- if(h-QRCodeRefBottom<270&&h-QRCodeRefBottom>0){
740
- self.QRCodeRefTop =h-280;
741
- self.QRCodeRefJiaoTop=270-(h-QRCodeRefBottom)>220?220:270-(h-QRCodeRefBottom);
742
+ if (data.enumScanStatus == "已完成") {
743
+ clearTimeout(self.qrtimer);
744
+ self.FlagbtnScan = true;
745
+ data.photos.forEach((v) => {
746
+ if (self.model.fileList.length < parseInt(self.model.max || 999)) {
747
+ v.videoCoverFileName = v.videoCoverFileName || null;
748
+ v.thumbnailUrl = v.thumbnailUrl || '';
749
+ v.mediaSourceTypeID = v.mediaSourceTypeID || null;
750
+ v.mediaSourceID = v.mediaSourceID || null;
751
+ v.mediaPrintDesc = v.mediaPrintDesc || null;
752
+ v.mediaID = v.mediaID || null;
753
+ v.mediaFormData = v.mediaFormData || null;
754
+ v.mediaDescEN = v.mediaDescEN || null;
755
+ v.mediaDescCN = v.mediaDescCN || null;
756
+ v.mediaDataBase64 = v.mediaDataBase64 || null;
757
+ v.mediaLabelID = v.mediaLabelID || model.mediaLabe.mediaLabelID || "",
758
+ v.mediaLabelName = v.mediaLabelName || model.mediaLabe.mediaLabelName || "",
759
+ v.mediaCode = v.mediaCode || null;
760
+ v.groupID = v.groupID || null;
761
+ self.model.AddSourceList(v);
762
+ var FileData = self.model.getFileData(v);
763
+ FileData.uid = self.uploadguid();
764
+ FileData.width = v.width;
765
+ FileData.height = v.height;
766
+ if (self.model.type == 51 || (self.QRFileList && self.QRFileList.length == 0)) {
767
+ self.model.fileList.push(FileData);
768
+ }
769
+ else {
770
+ self.QRFileList.push(FileData);
771
+ }
772
+ self.handleChange();
773
+ self.$nextTick(() => {
774
+ self.QRCodeLocate();
775
+ });
776
+ }
777
+ });
742
778
  }
743
- else {
744
- self.QRCodeRefJiaoTop=16;
745
- self.QRCodeRefTop = QRCodeRef.getBoundingClientRect().top;
779
+ else {
780
+ self.qrtimer = setTimeout(self.CheckQRCodeStatus, 1000);
746
781
  }
747
- self.QRCodeRefLeft = QRCodeRef.getBoundingClientRect().left + QRCodeRefWith + 20;
748
- }
749
- },
782
+ });
783
+ }
750
784
  },
751
- beforeDestroy() {
752
- clearTimeout(this.qrtimer);
753
- window.removeEventListener('scroll', this.QRCodeLocate,true)
785
+ GetQRCodeUploadPhoto() {
786
+ var self = this;
787
+ clearInterval(self.qrtimer);
788
+ self.model.getQRCode(function (data) {
789
+ self.qrCodeImg = data.qrCode;
790
+ self.SSID = data.ssid;
791
+ self.qrtimer = setTimeout(self.CheckQRCodeStatus, 1000);
792
+ });
793
+ },
794
+ qrcodeFn() {
795
+ let self = this;
796
+ self.qrcodeVisible = !self.qrcodeVisible;
797
+ if (self.qrcodeVisible) {
798
+ self.QRCodeLocate();
799
+ self.ShowQRcode();
800
+ }
801
+ else {
802
+ self.HideQRcode();
803
+ }
754
804
  },
805
+ QRCodeLocate() {
806
+ let self = this;
807
+ let QRCodeRef = self.$refs.QRCodeRef;
808
+ if (QRCodeRef) {
809
+ var QRCodeRefWith = QRCodeRef.width;
810
+ var QRCodeRefBottom = QRCodeRef.getBoundingClientRect().bottom;
811
+ var h = window.innerHeight;
812
+ if (h - QRCodeRefBottom < 270 && h - QRCodeRefBottom > 0) {
813
+ self.QRCodeRefTop = h - 280;
814
+ self.QRCodeRefJiaoTop = 270 - (h - QRCodeRefBottom) > 220 ? 220 : 270 - (h - QRCodeRefBottom);
815
+ }
816
+ else {
817
+ self.QRCodeRefJiaoTop = 16;
818
+ self.QRCodeRefTop = QRCodeRef.getBoundingClientRect().top;
819
+ }
820
+ self.QRCodeRefLeft = QRCodeRef.getBoundingClientRect().left + QRCodeRefWith + 20;
821
+ }
822
+ },
823
+ },
824
+ beforeDestroy() {
825
+ clearTimeout(this.qrtimer);
826
+ window.removeEventListener('scroll', this.QRCodeLocate, true)
827
+ },
755
828
 
756
- };
829
+ };
757
830
  </script>
758
831
  <style>
759
- .ct-upload-display-none .el-upload--picture-card {
760
- display: none;
761
- }
762
-
763
- .el-upload-list__item .is-ready {
764
- width: 100px;
765
- height: 100px;
766
- }
767
-
768
- .ct-file .cover-list-item {
769
- position: sticky;
770
- }
771
-
772
- .ct-file .cover-list-item-span {
773
- position: inherit;
774
- bottom: 0px;
775
- left: 0px;
776
- display: block;
777
- background-color: #544f48;
778
- opacity: 0.8;
779
- }
780
-
781
- .ct-file .el-dropdown-link {
782
- cursor: pointer;
783
- color: #fff;
784
- position: relative;
785
- width: 100px;
786
- height: 26px;
787
- display: inline-block;
788
- }
789
-
790
- .el-icon--right {
791
- position: absolute;
792
- right: 5px;
793
- top: 6px;
794
- }
795
-
796
- .ct-file .cover-list-item-span-Default {
797
- position: inherit;
798
- bottom: 160px;
799
- left: 0px;
800
- text-align: center;
801
- }
802
-
803
- .ct-file .cover-list-item-span-edit {
804
- position: inherit;
805
- bottom: 160px;
806
- left: 65px;
807
- color: var(--chinaRed);
808
- text-align: center;
809
- }
810
-
811
- .cover-list-item-span-edit i {
812
- cursor: pointer;
813
- }
814
-
815
- .ct-file .cover-list-item-span-delete {
816
- position: inherit;
817
- bottom: 160px;
818
- left: 130px;
819
- color: var(--chinaRed);
820
- text-align: center;
821
- }
822
-
823
- .cover-list-item-span-delete i {
824
- cursor: pointer;
825
- }
826
-
827
- .ct-file .el-dropdown-link {
828
- cursor: pointer;
829
- color: #fff;
830
- }
831
-
832
- .ct-file .el-icon-arrow-down {
833
- font-size: 12px;
834
- }
835
-
836
- .el-collapse-item__content {
837
- padding-bottom: 18px;
838
- }
839
-
840
- .el-upload--picture-card {
841
- width: 100px;
842
- height: 100px;
843
- line-height: initial;
844
- padding: 34px;
845
- position: relative;
846
- }
847
-
848
- .el-upload--picture-card i {
849
- font-size: 30px;
850
- }
851
-
852
- .el-upload-list--picture-card .el-upload-list__item {
853
- width: 100px;
854
- height: 100px;
855
- }
856
-
857
- .el-upload .max-ewmsc {
858
- background: url("../../../assets/ewm.png") no-repeat;
859
- content: "";
860
- display: block;
861
- width: 30px;
862
- height: 30px;
863
- font-size: 30px;
864
- background-size: 30px;
865
- position: absolute;
866
- top: -35px;
867
- left: 35px;
868
- }
869
-
870
- .file-cirle-mrLeft .el-progress-circle {
871
- margin-left: 15px;
872
- }
873
-
874
- .circleCenter {
875
- position: absolute;
876
- top: 50%;
877
- left: 50%;
878
- transform: translate(-50%,-50%);
879
- }
880
-
832
+ .ct-upload-display-none .el-upload--picture-card {
833
+ display: none;
834
+ }
835
+
836
+ .el-upload-list__item .is-ready {
837
+ width: 100px;
838
+ height: 100px;
839
+ }
840
+
841
+ .ct-file .cover-list-item {
842
+ position: sticky;
843
+ }
844
+
845
+ .ct-file .cover-list-item-span {
846
+ position: inherit;
847
+ bottom: 0px;
848
+ left: 0px;
849
+ display: block;
850
+ background-color: #544f48;
851
+ opacity: 0.8;
852
+ }
853
+
854
+ .ct-file .el-dropdown-link {
855
+ cursor: pointer;
856
+ color: #fff;
857
+ position: relative;
858
+ width: 100px;
859
+ height: 26px;
860
+ display: inline-block;
861
+ }
862
+
863
+ .el-icon--right {
864
+ position: absolute;
865
+ right: 5px;
866
+ top: 6px;
867
+ }
868
+
869
+ .ct-file .cover-list-item-span-Default {
870
+ position: inherit;
871
+ bottom: 160px;
872
+ left: 0px;
873
+ text-align: center;
874
+ }
875
+
876
+ .ct-file .cover-list-item-span-edit {
877
+ position: inherit;
878
+ bottom: 160px;
879
+ left: 65px;
880
+ color: var(--chinaRed);
881
+ text-align: center;
882
+ }
883
+
884
+ .cover-list-item-span-edit i {
885
+ cursor: pointer;
886
+ }
887
+
888
+ .ct-file .cover-list-item-span-delete {
889
+ position: inherit;
890
+ bottom: 160px;
891
+ left: 130px;
892
+ color: var(--chinaRed);
893
+ text-align: center;
894
+ }
895
+
896
+ .cover-list-item-span-delete i {
897
+ cursor: pointer;
898
+ }
899
+
900
+ .ct-file .el-dropdown-link {
901
+ cursor: pointer;
902
+ color: #fff;
903
+ }
904
+
905
+ .ct-file .el-icon-arrow-down {
906
+ font-size: 12px;
907
+ }
908
+
909
+ .el-collapse-item__content {
910
+ padding-bottom: 18px;
911
+ }
912
+
913
+ .el-upload--picture-card {
914
+ width: 100px;
915
+ height: 100px;
916
+ line-height: initial;
917
+ padding: 34px;
918
+ position: relative;
919
+ }
920
+
921
+ .el-upload--picture-card i {
922
+ font-size: 30px;
923
+ }
924
+
925
+ .el-upload-list--picture-card .el-upload-list__item {
926
+ width: 100px;
927
+ height: 100px;
928
+ }
929
+
930
+ .el-upload .max-ewmsc {
931
+ background: url("../../../assets/ewm.png") no-repeat;
932
+ content: "";
933
+ display: block;
934
+ width: 30px;
935
+ height: 30px;
936
+ font-size: 30px;
937
+ background-size: 30px;
938
+ position: absolute;
939
+ top: -35px;
940
+ left: 35px;
941
+ }
942
+
943
+ .file-cirle-mrLeft .el-progress-circle {
944
+ margin-left: 15px;
945
+ }
946
+
947
+ .circleCenter {
948
+ position: absolute;
949
+ top: 50%;
950
+ left: 50%;
951
+ transform: translate(-50%, -50%);
952
+ }
953
+
881
954
  .browseDefault .el-radio__input.is-checked .el-radio__inner {
882
- border-color: var(--centalineBlue) ;
883
- background: var(--centalineBlue) ;
955
+ border-color: var(--centalineBlue);
956
+ background: var(--centalineBlue);
884
957
 
885
958
  }
886
-
887
- .ct-file .cover-list-item-play{
959
+
960
+ .ct-file .cover-list-item-play {
888
961
  position: inherit;
889
- bottom: 50%;
890
- display: block;
891
- opacity: 0.8;
892
- left: 50%;
962
+ bottom: 50%;
963
+ display: block;
964
+ opacity: 0.8;
965
+ left: 50%;
893
966
  }
967
+
894
968
  .swiper-i {
895
- position: relative;
896
- width: 100%;
897
- height: 100%;
898
- }
899
- .swiper-i img {
900
- width: 100%;
901
- height: 100%;
902
- }
903
- .swiper-i .hous-icon {
904
- width: 48px;
905
- height: 48px;
906
- position: absolute;
907
- top: 50%;
908
- left: 50%;
909
- transform: translate(-50%, -50%);
910
- }
911
-
912
- .qrcode-target {
913
- position: absolute;
914
- top: 3px;
915
- right: 3px;
916
- width: 35px;
917
- height: 35px;
969
+ position: relative;
970
+ width: 100%;
971
+ height: 100%;
918
972
  }
973
+
974
+ .swiper-i img {
975
+ width: 100%;
976
+ height: 100%;
977
+ }
978
+
979
+ .swiper-i .hous-icon {
980
+ width: 48px;
981
+ height: 48px;
982
+ position: absolute;
983
+ top: 50%;
984
+ left: 50%;
985
+ transform: translate(-50%, -50%);
986
+ }
987
+
988
+ .qrcode-target {
989
+ position: absolute;
990
+ top: 3px;
991
+ right: 3px;
992
+ width: 35px;
993
+ height: 35px;
994
+ }
995
+
996
+ .Public-classification {
997
+ position: absolute;
998
+ bottom: 0px;
999
+ left: 0px;
1000
+ display: block;
1001
+ background-color: #544f48;
1002
+ opacity: 0.8;
1003
+ }
1004
+
919
1005
  .ScanUploadPhoto {
920
- width: 220px;
921
- height: 250px;
922
- border: solid 1px #ccc;
923
- position: fixed;
924
- left: 120px;
925
- background-color: #fff;
926
- text-align: center;
927
- padding: 5px 10px;
928
- top: 5px;
929
- box-shadow: 0 0 8px #bfbfbf;
930
- z-index:1899;
931
- }
932
- .ScanUploadPhoto:hover{
933
- cursor:default;
1006
+ width: 220px;
1007
+ height: 250px;
1008
+ border: solid 1px #ccc;
1009
+ position: fixed;
1010
+ left: 120px;
1011
+ background-color: #fff;
1012
+ text-align: center;
1013
+ padding: 5px 10px;
1014
+ top: 5px;
1015
+ box-shadow: 0 0 8px #bfbfbf;
1016
+ z-index: 1899;
1017
+ }
1018
+
1019
+ .ScanUploadPhoto:hover {
1020
+ cursor: default;
934
1021
  }
1022
+
935
1023
  .jiao {
936
- position: absolute;
937
- display: inline-block;
938
- top: 16px;
939
- left: -6px;
940
- width: 0;
941
- height: 0px;
942
- content: '';
943
- border-style: solid;
944
- border-width: 6px;
945
- border-color: transparent transparent #fff #fff;
946
- transform: rotate( 45deg );
947
- box-shadow: -1px 1px 0px #ccc;
1024
+ position: absolute;
1025
+ display: inline-block;
1026
+ top: 16px;
1027
+ left: -6px;
1028
+ width: 0;
1029
+ height: 0px;
1030
+ content: '';
1031
+ border-style: solid;
1032
+ border-width: 6px;
1033
+ border-color: transparent transparent #fff #fff;
1034
+ transform: rotate(45deg);
1035
+ box-shadow: -1px 1px 0px #ccc;
948
1036
  }
1037
+
949
1038
  .div-fail {
950
- width: 200px;
951
- height: 200px;
952
- position: absolute;
953
- top: 60px;
1039
+ width: 200px;
1040
+ height: 200px;
1041
+ position: absolute;
1042
+ top: 60px;
954
1043
 
955
1044
  }
1045
+
956
1046
  .ScanText {
957
- width:200px;
958
- float:left;
959
- margin-top:40px;
960
- line-height:40px;
961
- font-size:14px;
962
- text-align: center;
1047
+ width: 200px;
1048
+ float: left;
1049
+ margin-top: 40px;
1050
+ line-height: 40px;
1051
+ font-size: 14px;
1052
+ text-align: center;
963
1053
  }
964
1054
  </style>
965
-