doctor-admin-components 1.0.14-beta.7 → 1.0.14-beta.70

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.
Files changed (29) hide show
  1. package/README.md +4 -1
  2. package/package.json +1 -1
  3. package/packages/index.js +14 -3
  4. package/packages/src/api/biz/bizContract.js +36 -9
  5. package/packages/src/api/biz/bizShipment.js +30 -1
  6. package/packages/src/i18n/zh-CN/message.json +1 -1
  7. package/packages/src/index.js +18 -2
  8. package/packages/src/utils/index.js +1 -1
  9. package/packages/src/utils/zip.js +29 -11
  10. package/packages/src/views/biz/bizFileInfo/contract.vue +504 -411
  11. package/packages/src/views/biz/bizFileInfo/contractFile/BillOfLadingNoTab.vue +9 -7
  12. package/packages/src/views/biz/bizFileInfo/contractFile/IMGPreviewCheckBox.vue +25 -10
  13. package/packages/src/views/biz/bizFileInfo/contractFile/SectionSlot.vue +11 -3
  14. package/packages/src/views/biz/bizFileInfo/fileShow.vue +11 -5
  15. package/packages/src/views/biz/bizShipment/add.vue +67 -38
  16. package/packages/src/views/biz/contractTracing/billInfo.vue +17 -9
  17. package/packages/src/views/biz/contractTracing/changrLogList.vue +67 -0
  18. package/packages/src/views/biz/contractTracing/companyBanks.vue +19 -8
  19. package/packages/src/views/biz/contractTracing/contractClause.vue +356 -0
  20. package/packages/src/views/biz/contractTracing/contractClauseComponenrts/TextContent.vue +53 -0
  21. package/packages/src/views/biz/contractTracing/contractPdf.vue +16 -175
  22. package/packages/src/views/biz/contractTracing/contractSummary.vue +101 -73
  23. package/packages/src/views/biz/contractTracing/contractTracingDetail.vue +5 -77
  24. package/packages/src/views/biz/contractTracing/editBill.vue +35 -27
  25. package/packages/src/views/biz/contractTracing/info.vue +363 -0
  26. package/packages/src/views/biz/contractTracing/purchaseInvoiceUpload.vue +5 -2
  27. package/packages/src/views/biz/contractTracing/queryDeductionRecords.vue +103 -0
  28. package/packages/src/views/biz/contractTracing/shipmentPurchaseAmount.vue +361 -79
  29. package/packages/src/views/biz/contractTracing/shipmentPurchaseAmountEditDialog.vue +176 -0
@@ -0,0 +1,363 @@
1
+ <template>
2
+ <div v-if="form" style="margin-bottom:40px">
3
+ <el-row :gutter="20">
4
+ <el-col :span="12">
5
+ <div class="company">
6
+ <div class="company-type">Party A (Seller):</div>
7
+ <div class="company-text">{{ form.supplierContractCompany.companyEnglishName }}</div>
8
+ <div class="company-text">{{ form.supplierContractCompany.address }}</div>
9
+ </div>
10
+ </el-col>
11
+ <el-col :span="12">
12
+ <div class="company">
13
+ <div class="company-type">Party B (Buyer):</div>
14
+ <div class="company-text">{{ form.buyContractCompany.companyEnglishName }}</div>
15
+ <div class="company-text">{{ form.buyContractCompany.address }}</div>
16
+ </div>
17
+ </el-col>
18
+ </el-row>
19
+ <el-divider></el-divider>
20
+ <div class="item">
21
+ <el-table
22
+ :data="form.contractDetailList"
23
+ :header-cell-style="{ backgroundColor: '#ffffff' }"
24
+ :row-style="{ border: 'none' }"
25
+ :summary-method="getSummaries"
26
+ show-summary
27
+ >
28
+ <el-table-column label="Description" align="center" prop="askName"></el-table-column>
29
+ <el-table-column label="Commodity Name" align="center" prop="askAliasName"></el-table-column>
30
+ <el-table-column label="Quantity" align="center" prop="weight">
31
+ <template slot-scope="scope">{{ scope.row.weight }}</template>
32
+ </el-table-column>
33
+ <el-table-column label="Unit Price/MT" align="center" width="200">
34
+ <template slot-scope="{ row }">
35
+ <div v-if="form.quoteType == 'FIXED'">
36
+ <span v-if="form.contractType == 'sale'">${{ row.quotePrice }}</span> <span v-else>${{ row.sllerPrice }}</span>
37
+ </div>
38
+ <div v-if="isCmx(form.quoteType)">
39
+ <span v-if="form.contractType == 'sale'">{{ `$(${form.quoteType}-${row.quotePrice})*2204.62` }}</span>
40
+ <span v-else>{{ `$(${form.quoteType}-${row.sllerPrice})*2204.62` }}</span>
41
+ </div>
42
+ <div v-if="isLme(form.quoteType)">
43
+ <div v-if="checkElementItem(row.elementContent)">
44
+ {{ form.contractType == 'sale' ? row.quotePriceFormula : row.sellerPriceFormula }}
45
+ </div>
46
+ <div v-else>
47
+ <span v-if="form.contractType == 'sale'">{{ ` $(${form.quoteType} *${row.quotePrice}%) ` }}</span>
48
+ <span v-else>{{ `$(${form.quoteType} *${row.sllerPrice}%)` }}</span>
49
+ </div>
50
+ </div>
51
+ </template>
52
+ </el-table-column>
53
+
54
+ <el-table-column label="Service fee" align="center">
55
+ <template slot-scope="scope">{{ scope.row.serviceFee ? `$${scope.row.serviceFee}/MT` : '' }}</template>
56
+ </el-table-column>
57
+
58
+ <!-- 总价 -->
59
+ <el-table-column label="Net Unit Price/MT" align="center">
60
+ <template slot-scope="scope">
61
+ <span v-if="form.quoteType == 'FIXED' && form.contractType == 'purchase'">{{ '$' + (scope.row.sllerPrice - Number(scope.row.serviceFee)) }}</span>
62
+ <span v-else-if="form.quoteType == 'FIXED' && form.contractType == 'sale'">
63
+ {{ '$' + (Number(scope.row.quotePrice) + Number(scope.row.serviceFee)) }}
64
+ </span>
65
+ <span v-else-if="isLme(form.quoteType) && form.contractType == 'purchase'">
66
+ <div v-if="checkElementItem(scope.row.elementContent)">
67
+ {{ scope.row.sellerPriceFormula + '- $' + Number(scope.row.serviceFee) }}
68
+ </div>
69
+ <div v-else>
70
+ {{ '$(' + form.quoteType + ' * ' + scope.row.sllerPrice + '%) - $' + Number(scope.row.serviceFee) }}
71
+ </div>
72
+ </span>
73
+ <span v-else-if="isLme(form.quoteType) && form.contractType == 'sale'">
74
+ <div v-if="checkElementItem(scope.row.elementContent)">
75
+ {{ scope.row.quotePriceFormula + '+ $' + Number(scope.row.serviceFee) }}
76
+ </div>
77
+ <div v-else>
78
+ {{ '$(' + form.quoteType + ' * ' + scope.row.quotePrice + '%) + $' + Number(scope.row.serviceFee) }}
79
+ </div>
80
+ </span>
81
+ <span v-else-if="isCmx(form.quoteType) && form.contractType == 'purchase'">
82
+ {{ '${(' + form.quoteType + '-' + scope.row.sllerPrice + ')*2204.62} - $' + Number(scope.row.serviceFee) }}
83
+ </span>
84
+ <span v-else>
85
+ {{ '${(' + form.quoteType + '-' + scope.row.quotePrice + ')*2204.62} + $' + Number(scope.row.serviceFee) }}
86
+ </span>
87
+ </template>
88
+ </el-table-column>
89
+ </el-table>
90
+ </div>
91
+ <el-divider></el-divider>
92
+
93
+ <el-descriptions :column="1" :labelStyle="{ fontWeight: 'bold' }">
94
+ <el-descriptions-item label="Freight Terms">{{ form.freightTerms ? `Incoterms2020 ${form.freightTerms}` : '' }}</el-descriptions-item>
95
+ <el-descriptions-item label="Payment Terms">
96
+ <div>{{ form.paymentTermFullText }}</div>
97
+ </el-descriptions-item>
98
+ <el-descriptions-item label="Price Fixing Option" v-if="form.livePriceSwitch">
99
+ From the loading date to {{form.livePriceDays}} days {{form.livePriceForm}} cargo arrives at POD in {{form.livePriceUsertype}} option.
100
+ <span v-if="form.contractType == 'sale'">Time based on China Standard Time (UTC+8).</span>
101
+ </el-descriptions-item>
102
+
103
+ <el-descriptions-item label="Origin Country/Region">{{ form.originCountry }}</el-descriptions-item>
104
+ <el-descriptions-item label="Loading Country/Region">{{ form.loadingCountry }}</el-descriptions-item>
105
+ <el-descriptions-item v-if="form.freightTerms != 'EXW'" label="Destination">{{ form.destination }}</el-descriptions-item>
106
+ <el-descriptions-item v-else label="EXW Address">{{ form.exw }}</el-descriptions-item>
107
+ <el-descriptions-item label="Containers">
108
+ {{ form.numberOfContainersForTwenty }}x 20' Container
109
+ <br />
110
+ {{ form.numberOfContainersForForty }}x 40' Container
111
+ <br />
112
+ {{ form.numberOfContainersForTwentyOrForty }}x 20'/40' Container
113
+ <br />
114
+ </el-descriptions-item>
115
+ <el-descriptions-item label="Latest shipment"
116
+ >The goods shall be fully loaded within {{ form.latestShipment }} days as of the date when the contract is signed</el-descriptions-item
117
+ >
118
+ <el-descriptions-item label="Required documents" v-if="isMobile">
119
+ <div style="display: flex; flex-direction: column">
120
+ <el-tag :key="tag" v-for="tag in dynamicTags" class="mr5" style="margin-top: 5px">{{ tag }}</el-tag>
121
+ </div>
122
+ </el-descriptions-item>
123
+ <el-descriptions-item label="Required documents" v-else>
124
+ <div style="display: flex; flex-wrap: wrap">
125
+ <el-tag :key="tag" v-for="tag in dynamicTags" class="mr5" style="margin-top: 5px">{{ tag }}</el-tag>
126
+ </div>
127
+ </el-descriptions-item>
128
+ <el-descriptions-item label="Shipment Quantity Tolerance"> ± {{ form.toleranceFloat * 100 }}%</el-descriptions-item>
129
+ <el-descriptions-item label="Shortage Tolerance"> &lt;{{ form.weightTolerance }}%{{ form.weightToleranceWeight > 0 ? ` / ${form.weightToleranceWeight}kg` : '' }}</el-descriptions-item>
130
+ <el-descriptions-item label="Packing Type"> {{ form.packingMethod ? form.packingMethod.replace(/,/g, '/') : '' }}</el-descriptions-item>
131
+ <el-descriptions-item label="Partial Shipment"> {{ form.partialShipment }}</el-descriptions-item>
132
+ <el-descriptions-item label="Transshipment"> {{ form.transshipment }}</el-descriptions-item>
133
+ <el-descriptions-item label="Quality" v-if="form.qualityCertificateSwitch">{{ form.qualityCertificate }}</el-descriptions-item>
134
+ <el-descriptions-item label="Claim" v-if="form.claimSwitch">
135
+ <div v-html="form.claim" style="white-space: pre-wrap; word-break: break-word;"></div>
136
+ </el-descriptions-item>
137
+ <el-descriptions-item label="Timeline of document submission" v-if="form.arbitrationSwitch">
138
+ <div v-html="form.arbitration" style="white-space: pre-wrap; word-break: break-word;"></div>
139
+ </el-descriptions-item>
140
+ <el-descriptions-item label="Specification" v-if="form.memoSwitch">{{ form.memo }}</el-descriptions-item>
141
+ <el-descriptions-item v-for="(item, index) in this.customClause" :label="item.title" :key="index">{{ item.content }}</el-descriptions-item>
142
+ </el-descriptions>
143
+ <!-- <div class="sign">Please sign below and return.</div> -->
144
+ <el-row :gutter="20">
145
+ <el-col :span="12">
146
+ <div class="company-sign">
147
+ <el-row>
148
+ <el-col :span="isMobile ? 12 : 6">
149
+ <div class="company-sign-title">Party A ({{form.contractType == 'sale' ? 'TTYY' : 'Seller'}})</div>
150
+ </el-col>
151
+ <slot name="seller" />
152
+ </el-row>
153
+ <div class="company-sign-title">Company Name:</div>
154
+ <div class="company-sign-text">{{ form.supplierContractCompany.companyEnglishName }}</div>
155
+ <div class="company-sign-title">Signature:</div>
156
+ <div class="company-sign-title">Print Name:
157
+ {{ form.contractType == 'sale' ? form.printName : ''}}
158
+ </div>
159
+ <div class="company-sign-title">Title:
160
+ {{ form.contractType == 'sale' ? form.printTitle : ''}}
161
+ </div>
162
+ <div class="company-sign-title">Date:</div>
163
+ <div class="company-sign-text">{{ parseTime(form.createTime, '{m}/{d}/{y}') }}</div>
164
+ </div>
165
+ </el-col>
166
+ <el-col :span="12">
167
+ <div class="company-sign">
168
+ <el-row>
169
+ <el-col :span="isMobile ? 12 : 6">
170
+ <div class="company-sign-title">Party B ({{form.contractType == 'sale' ? 'Buyer' : 'TTYY'}})</div>
171
+ </el-col>
172
+ <slot name="buyer" />
173
+ </el-row>
174
+ <div class="company-sign-title">Company Name:</div>
175
+ <div class="company-sign-text">{{ form.buyContractCompany.companyEnglishName }}</div>
176
+ <div class="company-sign-title">Signature:</div>
177
+ <div class="company-sign-title">Print Name:
178
+ {{ form.contractType != 'sale' ? form.printName : ''}}
179
+ </div>
180
+ <div class="company-sign-title">Title:
181
+ {{ form.contractType != 'sale' ? form.printTitle : ''}}
182
+ </div>
183
+ <div class="company-sign-title">Date:</div>
184
+ <div class="company-sign-text">{{ parseTime(form.createTime, '{m}/{d}/{y}') }}</div>
185
+ </div>
186
+ </el-col>
187
+ </el-row>
188
+ <slot name="select-contract-company"></slot>
189
+ </div>
190
+ </template>
191
+
192
+ <script>
193
+
194
+ export default {
195
+ name: 'ContractInfo',
196
+ props: {
197
+ form: {
198
+ type: Object,
199
+ default: null
200
+ },
201
+ dynamicTags: {
202
+ type: Array,
203
+ default: () => []
204
+ },
205
+ customClause: {
206
+ type: Array,
207
+ default: () => []
208
+ },
209
+ printModel: {
210
+ type: Boolean,
211
+ default: false
212
+ },
213
+ isMobile: {
214
+ type: Boolean,
215
+ default: false
216
+ }
217
+ },
218
+ components: { },
219
+ data() {
220
+ return {}
221
+ },
222
+ methods: {
223
+ //确认公司
224
+ confirmCompany(company, type) {
225
+ company.email = company.email && company.email.length > 0 ? company.email[0] : ''
226
+ company.phoneNumber = company.phoneNumber && company.phoneNumber.length > 0 ? company.phoneNumber[0] : ''
227
+ if (type == 'seller') {
228
+ this.$set(this.form, 'supplierContractCompany', company)
229
+ this.form.supplierContractCompanyId = company.contractCompanyId
230
+ this.form.supplierCompanyId = company.companyId
231
+ } else if (type == 'buyer') {
232
+ this.$set(this.form, 'buyContractCompany', company)
233
+ this.form.buyContractCompanyId = company.contractCompanyId
234
+ this.form.buyCompanyId = company.companyId
235
+ }
236
+ },
237
+ //选择合同公司
238
+ selectContractCompany(companyId, type) {
239
+ this.$refs.selectContractCompany.handleShow(companyId, type)
240
+ },
241
+ getSummaries(param) {
242
+ const { columns, data } = param
243
+ const sums = []
244
+ columns.forEach((column, index) => {
245
+ if (index === 0) {
246
+ sums[index] = 'Total'
247
+ return
248
+ }
249
+ const values = data.map((item) => Number(item[column.property]))
250
+ if (!values.every((value) => isNaN(value))) {
251
+ sums[index] = values.reduce((prev, curr) => {
252
+ const value = Number(curr)
253
+ if (!isNaN(value)) {
254
+ return prev + curr
255
+ } else {
256
+ return prev
257
+ }
258
+ }, 0)
259
+ if (index === 2) {
260
+ sums[index] += ''
261
+ } else if (index === 1) {
262
+ sums[index] = ''
263
+ } else {
264
+ sums[index] += ''
265
+ }
266
+ } else {
267
+ sums[index] = ''
268
+ }
269
+ })
270
+
271
+ return sums
272
+ }
273
+ }
274
+ }
275
+ </script>
276
+ <style lang="scss" scoped>
277
+ .info {
278
+ border: 1px solid #606676;
279
+ padding: 20px;
280
+
281
+ .type {
282
+ font-size: 13px;
283
+ font-weight: bold;
284
+ }
285
+
286
+ .title {
287
+ text-align: center;
288
+ font-size: 26px;
289
+ font-weight: bold;
290
+ }
291
+
292
+ .sub-title {
293
+ margin-top: 20px;
294
+ text-align: center;
295
+ font-size: 16px;
296
+ }
297
+
298
+ .company {
299
+ margin-top: 20px;
300
+ padding: 10px 20px;
301
+ border: 1px solid #000;
302
+ font-size: 10px;
303
+ height: 130px;
304
+
305
+ &-type {
306
+ font-size: 13px;
307
+ font-weight: bold;
308
+ margin-bottom: 10px;
309
+ }
310
+
311
+ &-text {
312
+ margin-bottom: 10px;
313
+ }
314
+ }
315
+
316
+ .item {
317
+ display: flex;
318
+ justify-content: space-between;
319
+ align-items: center;
320
+
321
+ // 去掉所有的横线
322
+ ::v-deep.el-table__cell {
323
+ border-bottom: none;
324
+ }
325
+
326
+ // 只去除表格的最最底部的横线
327
+ ::v-deep .el-table--border::after,
328
+ ::v-deep .el-table--group::after,
329
+ ::v-deep .el-table::before {
330
+ background-color: transparent;
331
+ }
332
+ }
333
+
334
+ .sign {
335
+ height: 230px;
336
+ display: flex;
337
+ align-items: center;
338
+ }
339
+
340
+ .company-sign {
341
+ margin-top: 20px;
342
+ padding: 10px 20px;
343
+ font-size: 10px;
344
+ height: 130px;
345
+ margin-bottom: 20px;
346
+
347
+ &-title {
348
+ font-size: 13px;
349
+ font-weight: bold;
350
+ margin-bottom: 10px;
351
+ }
352
+
353
+ &-text {
354
+ margin-bottom: 10px;
355
+ }
356
+ }
357
+ }
358
+
359
+ .company-sign-text {
360
+ color: #606266;
361
+ font-size: 14px;
362
+ }
363
+ </style>
@@ -246,13 +246,14 @@
246
246
  </el-form>
247
247
  <div slot="footer" class="dialog-footer">
248
248
  <el-button @click="cancel">取 消</el-button>
249
- <el-button type="primary" @click="submitForm">确认上传</el-button>
249
+ <!-- <el-button type="primary" @click="submitForm">确认上传</el-button>
250
250
  <el-button
251
251
  v-if="type == 'deposit'"
252
252
  type="primary"
253
253
  @click="uploadAndGenerate"
254
254
  >上传并生成收付款</el-button
255
- >
255
+ > -->
256
+ <el-button type="primary" @click="submitForm">上传并发起审核</el-button>
256
257
  </div>
257
258
  <el-dialog
258
259
  title="系统计算金额和发票金额不一致"
@@ -385,6 +386,7 @@ export default {
385
386
  this.$refs["form"].validate((valid) => {
386
387
  if (valid) {
387
388
  console.log('type', this.type);
389
+ // deposit 定金; finally尾款
388
390
  if (this.type == "finally") {
389
391
  if(comfirmClickFlag) {
390
392
  if(this.form.fixedInvoiceList[0].amount && this.purchaseBalanceMoney && this.form.fixedInvoiceList[0].amount != this.purchaseBalanceMoney) {
@@ -421,6 +423,7 @@ export default {
421
423
  },
422
424
  /** 展示按钮操作 */
423
425
  handleUpload(row, type, shipmentId) {
426
+ // deposit 定金; finally尾款
424
427
  console.log('row:', row)
425
428
  this.reset();
426
429
  this.type = type;
@@ -0,0 +1,103 @@
1
+ <!--
2
+ * @Author: zhangpengwei@1338418459736990.onaliyun.com zhangpengwei@1338418459736990.onaliyun.com
3
+ * @Date: 2024-08-20 10:37:30
4
+ * @LastEditors: zhangpengwei@1338418459736990.onaliyun.com zhangpengwei@1338418459736990.onaliyun.com
5
+ * @LastEditTime: 2024-08-23 13:49:18
6
+ * @FilePath: /doctor-admin-components 公共组件/packages/src/views/biz/contractTracing/queryDeductionRecords.vue
7
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
8
+ -->
9
+ <template>
10
+ <el-dialog
11
+ title="定金扣减记录"
12
+ :visible.sync="dialogVisible"
13
+ width="1200px"
14
+ :modal="false"
15
+ >
16
+ <el-table
17
+ :data="tableList"
18
+ :cell-style="{'text-align': 'center'}"
19
+ :header-cell-style="{'text-align': 'center'}"
20
+ >
21
+ <el-table-column
22
+ prop="billOfLadingNo"
23
+ label="提单号"
24
+ width="180">
25
+ </el-table-column>
26
+ <el-table-column
27
+ prop="containerNumber"
28
+ label="柜数"
29
+ width="180">
30
+ </el-table-column>
31
+ <el-table-column
32
+ prop="purchaseDepositTotalAmount"
33
+ label="定金总额">
34
+ <template slot-scope="{ row }">
35
+ {{ row.purchaseDepositTotalAmount ? "$" + $formatNumber(row.purchaseDepositTotalAmount, 2) : '0' }}
36
+ </template>
37
+ </el-table-column>
38
+ <el-table-column
39
+ prop="purchaseDepositBalance"
40
+ label="上次剩余定金">
41
+ <template slot-scope="{ row }">
42
+ {{ row.purchaseDepositBalance ? "$" + $formatNumber(row.purchaseDepositBalance,2) : '0' }}
43
+ </template>
44
+ </el-table-column>
45
+ <el-table-column
46
+ prop="purchaseDepositAmount"
47
+ label="扣减定金">
48
+ <template slot-scope="{ row }">
49
+ <span class="edit-style" v-if="row.purchaseDepositAmount" @click.stop="jumpFileManage(row)">{{ row.purchaseDepositAmount ? "$" + $formatNumber(row.purchaseDepositAmount, 2) : '0' }}</span>
50
+ <span v-else>0</span>
51
+ </template>
52
+ </el-table-column>
53
+ <el-table-column
54
+ prop="purchaseDepositRemainAmount"
55
+ label="定金余额">
56
+ <template slot-scope="{ row }">
57
+ {{ row.purchaseDepositRemainAmount ? "$" + $formatNumber(row.purchaseDepositRemainAmount, 2) : '0' }}
58
+ </template>
59
+ </el-table-column>
60
+ </el-table>
61
+ </el-dialog>
62
+ </template>
63
+
64
+ <script>
65
+ import { deductionRecords } from '../../../api/biz/bizShipment'
66
+
67
+ export default {
68
+ name: 'DoctorAdminComponentsQueryDeductionRecords',
69
+
70
+ data() {
71
+ return {
72
+ tableList:[],
73
+ dialogVisible: false
74
+ };
75
+ },
76
+
77
+ mounted() {
78
+
79
+ },
80
+
81
+ methods: {
82
+ handlerOpen(shipmentId) {
83
+ this.dialogVisible = true
84
+ deductionRecords({shipmentId}).then((res) => {
85
+ this.tableList = res.rows
86
+ })
87
+ },
88
+ jumpFileManage(row) {
89
+ window.open(`/contract/tracing/detail/${row.purchaseContractId}?activeName=fourth&deductionRecordsShipmentId=${row.shipmentId}`)
90
+ }
91
+
92
+
93
+ },
94
+ };
95
+ </script>
96
+
97
+ <style lang="scss" scoped>
98
+ .edit-style {
99
+ cursor: pointer;
100
+ color: #409eff;
101
+ }
102
+
103
+ </style>