mg-ocr-invoice 0.2.1 → 0.2.3-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.es.js +10229 -9899
- package/dist/index.umd.js +39 -45
- package/dist/style.css +1 -1
- package/dist/types/api/invoice.d.ts +1 -0
- package/dist/types/components/Invoice/const.d.ts +4 -0
- package/dist/types/components/Invoice/index.vue.d.ts +11 -20
- package/dist/types/components/Invoice copy/index.vue.d.ts +23 -0
- package/dist/types/components/InvoiceList/const.d.ts +3 -1
- package/dist/types/components/InvoiceList/index.vue.d.ts +5 -7
- package/dist/types/components/OCRInvoice/const.d.ts +66 -0
- package/dist/types/utils/number.d.ts +1 -0
- package/package.json +2 -1
- package/src/components/Invoice/const.ts +4 -0
- package/src/components/Invoice/index.vue +422 -224
- package/src/components/Invoice copy/index.vue +343 -0
- package/src/components/InvoiceList/const.ts +9 -1
- package/src/components/InvoiceList/index.vue +80 -47
- package/src/components/OCRInvoice/const.ts +70 -0
- package/src/components/OCRInvoice/index.vue +11 -4
- package/src/components/PaymentMode/index.vue +0 -1
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="Invoice">
|
|
3
|
+
<div class="top" @click="openPreViewImg">
|
|
4
|
+
<img :src="invoiceData.attachmentLink" alt="" />
|
|
5
|
+
</div>
|
|
6
|
+
<div class="company">
|
|
7
|
+
<div class="title"><i></i> <span>公司</span></div>
|
|
8
|
+
<div class="cardText">
|
|
9
|
+
<p style="font-size: 13px; color: #888888">销售方</p>
|
|
10
|
+
<div class="card">
|
|
11
|
+
<div class="companyName">{{ invoiceData.sellerName }}</div>
|
|
12
|
+
<div class="sellerInformation">
|
|
13
|
+
<ul>
|
|
14
|
+
<li>
|
|
15
|
+
<i></i>
|
|
16
|
+
<span class="label"> 纳税人识别号:</span>
|
|
17
|
+
<span class="value">{{ invoiceData.sellerId }}</span>
|
|
18
|
+
</li>
|
|
19
|
+
<li>
|
|
20
|
+
<i></i>
|
|
21
|
+
<span class="label">地址、电话:</span>
|
|
22
|
+
<span class="value">{{ invoiceData.sellerContact }}</span>
|
|
23
|
+
</li>
|
|
24
|
+
<li>
|
|
25
|
+
<i></i>
|
|
26
|
+
<span class="label">开户银行及账户:</span>
|
|
27
|
+
<span class="value">{{ invoiceData.sellerAccount }}</span>
|
|
28
|
+
</li>
|
|
29
|
+
</ul>
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
|
|
34
|
+
<div class="purchaser">
|
|
35
|
+
<ul>
|
|
36
|
+
<li>
|
|
37
|
+
<div class="label">购买方:</div>
|
|
38
|
+
<div class="input">{{ invoiceData.payerName }}</div>
|
|
39
|
+
</li>
|
|
40
|
+
<li>
|
|
41
|
+
<div class="label">发票类型:</div>
|
|
42
|
+
<div class="input">{{ invoiceData.description }}</div>
|
|
43
|
+
</li>
|
|
44
|
+
<li>
|
|
45
|
+
<div class="label">费用类型:</div>
|
|
46
|
+
<div class="input">其他费</div>
|
|
47
|
+
</li>
|
|
48
|
+
<li>
|
|
49
|
+
<div class="label">票面金额:</div>
|
|
50
|
+
<div class="input">
|
|
51
|
+
{{
|
|
52
|
+
invoiceData.priceTaxTotalFigure || invoiceData.noTaxAmountTotal
|
|
53
|
+
}}
|
|
54
|
+
</div>
|
|
55
|
+
</li>
|
|
56
|
+
<li>
|
|
57
|
+
<div class="label">发票代码:</div>
|
|
58
|
+
<div class="input">
|
|
59
|
+
<ElInputNumber
|
|
60
|
+
:min="0"
|
|
61
|
+
:controls="false"
|
|
62
|
+
@input="editFlag = true"
|
|
63
|
+
v-model.trim="invoiceData.invoiceCode"></ElInputNumber>
|
|
64
|
+
</div>
|
|
65
|
+
</li>
|
|
66
|
+
<li>
|
|
67
|
+
<div class="label">
|
|
68
|
+
<span class="van-field__label--required"></span>发票号码:
|
|
69
|
+
</div>
|
|
70
|
+
<div class="input">
|
|
71
|
+
<ElInputNumber
|
|
72
|
+
:min="0"
|
|
73
|
+
:controls="false"
|
|
74
|
+
@input="editFlag = true"
|
|
75
|
+
v-model.trim="invoiceData.invoiceNum"></ElInputNumber>
|
|
76
|
+
<!-- <input type="text" v-model.trim="invoiceData.invoiceNum" /> -->
|
|
77
|
+
<div v-if="showRequiredMsg" class="errColor">
|
|
78
|
+
发票号码不能为空!
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
</li>
|
|
82
|
+
<li>
|
|
83
|
+
<div class="label">校验码:</div>
|
|
84
|
+
<div class="input">{{ invoiceData.checkCode }}</div>
|
|
85
|
+
</li>
|
|
86
|
+
<li>
|
|
87
|
+
<div class="label">开票日期:</div>
|
|
88
|
+
<div class="input">{{ invoiceData.invoiceDate }}</div>
|
|
89
|
+
</li>
|
|
90
|
+
</ul>
|
|
91
|
+
</div>
|
|
92
|
+
</div>
|
|
93
|
+
<div class="submit">
|
|
94
|
+
<span
|
|
95
|
+
style="width: 30%; background-color: #07c160; color: #fff"
|
|
96
|
+
@click="close"
|
|
97
|
+
>返回</span
|
|
98
|
+
>
|
|
99
|
+
<span @click="submit">保存</span>
|
|
100
|
+
</div>
|
|
101
|
+
</div>
|
|
102
|
+
<Overlay
|
|
103
|
+
style="
|
|
104
|
+
display: flex;
|
|
105
|
+
justify-content: center;
|
|
106
|
+
align-items: center;
|
|
107
|
+
z-index: 999;
|
|
108
|
+
"
|
|
109
|
+
:show="showLoading">
|
|
110
|
+
<Loading class="loading" color="#0094ff">保存中...</Loading>
|
|
111
|
+
</Overlay>
|
|
112
|
+
</template>
|
|
113
|
+
<script setup lang="ts">
|
|
114
|
+
import { ref } from 'vue'
|
|
115
|
+
import '@/utils/disableZoom'
|
|
116
|
+
import { __updateInvoice } from '@/api/invoice'
|
|
117
|
+
import {
|
|
118
|
+
showToast,
|
|
119
|
+
Overlay,
|
|
120
|
+
Loading,
|
|
121
|
+
showFailToast,
|
|
122
|
+
showImagePreview,
|
|
123
|
+
} from 'vant'
|
|
124
|
+
import { ElInputNumber } from 'element-plus'
|
|
125
|
+
const { ids, invoiceData } = defineProps({
|
|
126
|
+
ids: {
|
|
127
|
+
type: Object,
|
|
128
|
+
required: true,
|
|
129
|
+
},
|
|
130
|
+
invoiceData: {
|
|
131
|
+
type: Object,
|
|
132
|
+
required: true,
|
|
133
|
+
},
|
|
134
|
+
})
|
|
135
|
+
const emit = defineEmits(['saveSuccess'])
|
|
136
|
+
document.title = '发票信息'
|
|
137
|
+
const showRequiredMsg = ref(false)
|
|
138
|
+
// const modules = ref([Pagination])
|
|
139
|
+
const showLoading = ref(false)
|
|
140
|
+
const close = () => {
|
|
141
|
+
emit('saveSuccess')
|
|
142
|
+
}
|
|
143
|
+
const openPreViewImg = () => {
|
|
144
|
+
showImagePreview([invoiceData.attachmentLink])
|
|
145
|
+
}
|
|
146
|
+
const editFlag = ref(false)
|
|
147
|
+
const submit = async () => {
|
|
148
|
+
if (!editFlag.value) {
|
|
149
|
+
emit('saveSuccess')
|
|
150
|
+
return
|
|
151
|
+
}
|
|
152
|
+
if (!invoiceData.invoiceNum) {
|
|
153
|
+
showRequiredMsg.value = true
|
|
154
|
+
return
|
|
155
|
+
} else {
|
|
156
|
+
showRequiredMsg.value = false
|
|
157
|
+
}
|
|
158
|
+
showLoading.value = true
|
|
159
|
+
try {
|
|
160
|
+
const res: any = await __updateInvoice({
|
|
161
|
+
...ids,
|
|
162
|
+
invoiceNum: invoiceData.invoiceNum,
|
|
163
|
+
invoiceCode: invoiceData.invoiceCode,
|
|
164
|
+
})
|
|
165
|
+
if (res.code === 200) {
|
|
166
|
+
showToast({
|
|
167
|
+
type: 'success',
|
|
168
|
+
message: '保存成功',
|
|
169
|
+
})
|
|
170
|
+
emit('saveSuccess')
|
|
171
|
+
}
|
|
172
|
+
} catch (err: any) {
|
|
173
|
+
showFailToast(err.msg)
|
|
174
|
+
emit('saveSuccess')
|
|
175
|
+
}
|
|
176
|
+
showLoading.value = false
|
|
177
|
+
}
|
|
178
|
+
</script>
|
|
179
|
+
|
|
180
|
+
<style lang="scss" scoped>
|
|
181
|
+
::v-deep {
|
|
182
|
+
.el-input-number {
|
|
183
|
+
width: 100%;
|
|
184
|
+
}
|
|
185
|
+
.el-input {
|
|
186
|
+
.el-input__wrapper {
|
|
187
|
+
width: 100%;
|
|
188
|
+
padding: 0 !important;
|
|
189
|
+
box-shadow: none;
|
|
190
|
+
}
|
|
191
|
+
.el-input__inner {
|
|
192
|
+
width: 100%;
|
|
193
|
+
text-align: left;
|
|
194
|
+
box-shadow: none;
|
|
195
|
+
padding: 0 !important;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
* {
|
|
200
|
+
padding: 0;
|
|
201
|
+
margin: 0;
|
|
202
|
+
box-sizing: border-box;
|
|
203
|
+
}
|
|
204
|
+
.Invoice {
|
|
205
|
+
padding-bottom: 100px;
|
|
206
|
+
width: 100%;
|
|
207
|
+
min-height: 100%;
|
|
208
|
+
background-color: #f3f4f6;
|
|
209
|
+
.top {
|
|
210
|
+
width: 100%;
|
|
211
|
+
padding: 12px 4px;
|
|
212
|
+
img {
|
|
213
|
+
width: 100%;
|
|
214
|
+
height: 179px;
|
|
215
|
+
display: block;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
.company {
|
|
220
|
+
height: inherit;
|
|
221
|
+
padding: 0 12px;
|
|
222
|
+
background-color: #fff;
|
|
223
|
+
.title {
|
|
224
|
+
padding: 18px 0;
|
|
225
|
+
font-size: 16px;
|
|
226
|
+
font-weight: 500;
|
|
227
|
+
display: flex;
|
|
228
|
+
align-items: center;
|
|
229
|
+
border-bottom: 1px dashed #e8e8e8;
|
|
230
|
+
margin-bottom: 18px;
|
|
231
|
+
i {
|
|
232
|
+
display: inline-block;
|
|
233
|
+
width: 4px;
|
|
234
|
+
height: 14px;
|
|
235
|
+
background: #266fe8;
|
|
236
|
+
border-radius: 2px;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
span {
|
|
240
|
+
font-size: 16px;
|
|
241
|
+
padding-left: 8px;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
.cardText {
|
|
245
|
+
.card {
|
|
246
|
+
margin-top: 8px;
|
|
247
|
+
border-radius: 4px;
|
|
248
|
+
background-color: #f6f6f6;
|
|
249
|
+
font-size: 14px;
|
|
250
|
+
.companyName {
|
|
251
|
+
padding: 15px;
|
|
252
|
+
}
|
|
253
|
+
.sellerInformation {
|
|
254
|
+
padding-left: 12px;
|
|
255
|
+
padding-bottom: 20px;
|
|
256
|
+
li {
|
|
257
|
+
list-style: none;
|
|
258
|
+
margin-bottom: 12px;
|
|
259
|
+
display: flex;
|
|
260
|
+
align-items: center;
|
|
261
|
+
i {
|
|
262
|
+
width: 4px;
|
|
263
|
+
height: 4px;
|
|
264
|
+
border-radius: 50%;
|
|
265
|
+
background-color: #266fe8;
|
|
266
|
+
}
|
|
267
|
+
.label {
|
|
268
|
+
width: 120px;
|
|
269
|
+
margin-left: 12px;
|
|
270
|
+
white-space: nowrap;
|
|
271
|
+
}
|
|
272
|
+
.value {
|
|
273
|
+
flex: 1;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
.purchaser {
|
|
280
|
+
ul {
|
|
281
|
+
li {
|
|
282
|
+
display: flex;
|
|
283
|
+
font-size: 16px;
|
|
284
|
+
height: 50px;
|
|
285
|
+
align-items: center;
|
|
286
|
+
gap: 45px;
|
|
287
|
+
.label {
|
|
288
|
+
width: 80px;
|
|
289
|
+
white-space: nowrap;
|
|
290
|
+
position: relative;
|
|
291
|
+
.van-field__label--required {
|
|
292
|
+
position: absolute;
|
|
293
|
+
top: 0;
|
|
294
|
+
left: -8px;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
.input {
|
|
298
|
+
flex-grow: 1;
|
|
299
|
+
color: #999999;
|
|
300
|
+
|
|
301
|
+
input {
|
|
302
|
+
width: 100%;
|
|
303
|
+
color: #999999;
|
|
304
|
+
outline: none;
|
|
305
|
+
font-size: 16px;
|
|
306
|
+
border: none;
|
|
307
|
+
}
|
|
308
|
+
.errColor {
|
|
309
|
+
color: red;
|
|
310
|
+
font-size: 12px;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
.submit {
|
|
318
|
+
position: fixed;
|
|
319
|
+
bottom: 0;
|
|
320
|
+
left: 0;
|
|
321
|
+
width: 100%;
|
|
322
|
+
box-shadow: 0px -1px 12px 0px rgba(173, 173, 173, 0.1);
|
|
323
|
+
height: 90px;
|
|
324
|
+
display: flex;
|
|
325
|
+
justify-content: space-between;
|
|
326
|
+
align-items: center;
|
|
327
|
+
padding: 0 12px;
|
|
328
|
+
z-index: 2;
|
|
329
|
+
background-color: #fff;
|
|
330
|
+
span {
|
|
331
|
+
background-color: #266fe8;
|
|
332
|
+
width: 68%;
|
|
333
|
+
font-size: 15px;
|
|
334
|
+
color: #fff;
|
|
335
|
+
height: 44px;
|
|
336
|
+
text-align: center;
|
|
337
|
+
display: flex;
|
|
338
|
+
justify-content: center;
|
|
339
|
+
align-items: center;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
</style>
|
|
@@ -7,9 +7,17 @@ export const const_invoiceStatus: any = {
|
|
|
7
7
|
export const const_realStatus: any = {
|
|
8
8
|
noNeed: '无需验真',
|
|
9
9
|
notCheck: '未验真',
|
|
10
|
-
checked: '
|
|
10
|
+
checked: '验真通过',
|
|
11
11
|
checkFail: '验真异常',
|
|
12
12
|
}
|
|
13
|
+
export const const_invoiceExceptionInfo: any = {
|
|
14
|
+
abnormal: '异常发票',
|
|
15
|
+
invalid: '无效发票',
|
|
16
|
+
}
|
|
17
|
+
export const const_manualModify: any = {
|
|
18
|
+
'手动录入': true,
|
|
19
|
+
'非手动录入': false,
|
|
20
|
+
}
|
|
13
21
|
export const const_taskStatus: any = {
|
|
14
22
|
init: '初始状态',
|
|
15
23
|
upload_fail_cos: 'COS 上传失败',
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="InvoiceList">
|
|
3
3
|
<div class="selectAll">
|
|
4
|
-
<div class="left"
|
|
4
|
+
<div class="left">
|
|
5
|
+
已选 {{ selectedLength }}/{{ selectedLengthCount }}
|
|
6
|
+
</div>
|
|
5
7
|
<div class="right">
|
|
6
8
|
<span>全选</span>
|
|
7
9
|
<input
|
|
@@ -20,10 +22,7 @@
|
|
|
20
22
|
|
|
21
23
|
<div class="card">
|
|
22
24
|
<ul>
|
|
23
|
-
<li
|
|
24
|
-
v-for="(item, index) in list"
|
|
25
|
-
:key="index"
|
|
26
|
-
@click="clickItem(item)">
|
|
25
|
+
<li v-for="(item, index) in list" :key="index" @click="clickItem(item)">
|
|
27
26
|
<div class="li">
|
|
28
27
|
<div
|
|
29
28
|
class="item-card"
|
|
@@ -46,7 +45,10 @@
|
|
|
46
45
|
</div>
|
|
47
46
|
</div>
|
|
48
47
|
<div class="tags">
|
|
49
|
-
<span
|
|
48
|
+
<span v-if="item.manualModify" class="manual">
|
|
49
|
+
手工录入
|
|
50
|
+
</span>
|
|
51
|
+
<span v-else :class="setClass(item.realStatus)">{{
|
|
50
52
|
const_realStatus[item.realStatus]
|
|
51
53
|
}}</span>
|
|
52
54
|
<span :class="setClass(item.invoiceStatus)">{{
|
|
@@ -186,42 +188,52 @@ import {
|
|
|
186
188
|
setClass,
|
|
187
189
|
} from './const'
|
|
188
190
|
import { showImagePreview } from 'vant'
|
|
189
|
-
// console.log(addNumber('495.28', '29.72'))
|
|
190
191
|
const emit = defineEmits(['edit', 'ok'])
|
|
191
|
-
const { listId, multiple } = defineProps({
|
|
192
|
+
const { listId, multiple, catchList } = defineProps({
|
|
192
193
|
listId: {
|
|
193
|
-
required:
|
|
194
|
+
required: false,
|
|
194
195
|
type: String,
|
|
195
|
-
default: '1690918419274137620',
|
|
196
196
|
},
|
|
197
197
|
multiple: {
|
|
198
198
|
required: true,
|
|
199
199
|
type: Boolean,
|
|
200
200
|
},
|
|
201
|
+
catchList: {},
|
|
201
202
|
})
|
|
202
203
|
const token: any = ref(sessionStorage.getItem('token'))
|
|
203
204
|
const showLoading = ref(false)
|
|
204
205
|
const showPopup = ref(false)
|
|
205
|
-
const list = ref<Array<any>>([])
|
|
206
|
+
const list: any = ref<Array<any>>([])
|
|
207
|
+
if (catchList) {
|
|
208
|
+
list.value = catchList
|
|
209
|
+
}
|
|
206
210
|
const batchId = ref('')
|
|
207
211
|
const selectId = computed(() => {
|
|
208
|
-
return list.value
|
|
212
|
+
return list.value
|
|
213
|
+
.filter((item: any) => item.selected)
|
|
214
|
+
.map((item: any) => item.taskId)
|
|
209
215
|
})
|
|
216
|
+
|
|
210
217
|
const getList = async () => {
|
|
211
218
|
return new Promise(async (resolve, reject) => {
|
|
212
219
|
const data: any = {}
|
|
213
|
-
data.batchId = listId
|
|
220
|
+
data.batchId = listId
|
|
214
221
|
if (!data.batchId) return
|
|
215
222
|
try {
|
|
216
223
|
const res: any = await __getUploadInvoiceList(data, token.value)
|
|
217
224
|
if (res.code === 200) {
|
|
218
225
|
list.value = res.data.invoiceList.map((item: any) => {
|
|
226
|
+
let data = list.value.find((v: any) => v.taskId === item.taskId) || {}
|
|
219
227
|
return {
|
|
220
|
-
...item,
|
|
221
|
-
selected: false,
|
|
228
|
+
...Object.assign(data, item),
|
|
222
229
|
}
|
|
223
230
|
})
|
|
224
231
|
batchId.value = res.data.batchId
|
|
232
|
+
if (list.value.length <= 0) {
|
|
233
|
+
selectedAll.value = false
|
|
234
|
+
} else {
|
|
235
|
+
changeItemCheckbox()
|
|
236
|
+
}
|
|
225
237
|
resolve(list.value)
|
|
226
238
|
}
|
|
227
239
|
} catch (error) {
|
|
@@ -243,34 +255,33 @@ const openDetails = (row: any) => {
|
|
|
243
255
|
taskId: row.taskId,
|
|
244
256
|
batchId: batchId.value,
|
|
245
257
|
},
|
|
246
|
-
row
|
|
258
|
+
row,
|
|
259
|
+
list.value
|
|
247
260
|
)
|
|
248
261
|
}
|
|
249
262
|
const everyStatus = (item: any) => {
|
|
250
263
|
return (
|
|
251
|
-
item.invoiceStatus === 'unused'
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
item.realStatus === 'checked' ||
|
|
261
|
-
item.realStatus === 'checkFail')
|
|
264
|
+
item.invoiceStatus === 'unused' ||
|
|
265
|
+
item.invoiceStatus === 'invalid' ||
|
|
266
|
+
item.taskStatus === 'ocr_success' ||
|
|
267
|
+
item.taskStatus === 'repeat' ||
|
|
268
|
+
item.taskStatus === 'finish' ||
|
|
269
|
+
item.realStatus === 'noNeed' ||
|
|
270
|
+
item.realStatus === 'notCheck' ||
|
|
271
|
+
item.realStatus === 'checked' ||
|
|
272
|
+
item.realStatus === 'checkFail'
|
|
262
273
|
)
|
|
263
274
|
}
|
|
264
275
|
const selectedAll: any = ref(false)
|
|
265
276
|
const changeSelectAll = (v: any) => {
|
|
266
|
-
list.value.forEach((item) => {
|
|
277
|
+
list.value.forEach((item: any) => {
|
|
267
278
|
item.selected = everyStatus(item) && selectedAll.value
|
|
268
279
|
})
|
|
269
280
|
}
|
|
270
281
|
const changeItemCheckbox = () => {
|
|
271
282
|
const status = list.value
|
|
272
|
-
.filter((item) => everyStatus(item))
|
|
273
|
-
.every((item) => item.selected)
|
|
283
|
+
.filter((item: any) => everyStatus(item))
|
|
284
|
+
.every((item: any) => item.selected)
|
|
274
285
|
selectedAll.value = status
|
|
275
286
|
}
|
|
276
287
|
const deleteSelectItem = () => {
|
|
@@ -328,28 +339,18 @@ const selectImg = async (type: number) => {
|
|
|
328
339
|
}
|
|
329
340
|
const submitBtn = computed(() => {
|
|
330
341
|
const flag = list.value
|
|
331
|
-
.filter((item) => item.selected)
|
|
332
|
-
.every((item) => {
|
|
342
|
+
.filter((item: any) => item.selected)
|
|
343
|
+
.every((item: any) => {
|
|
333
344
|
return everyStatus(item)
|
|
334
|
-
// item.invoiceStatus === 'unused' &&
|
|
335
|
-
// (item.taskStatus === 'ocr_success' ||
|
|
336
|
-
// item.taskStatus === 'repeat' ||
|
|
337
|
-
// item.taskStatus === 'finish' ||
|
|
338
|
-
// item.invoiceStatus === 'invalid' ||
|
|
339
|
-
// item.invoiceStatus === 'invalid' ||
|
|
340
|
-
// item.invoiceStatus === 'used' ||
|
|
341
|
-
// item.realStatus === 'noNeed' ||
|
|
342
|
-
// item.realStatus === 'notCheck' ||
|
|
343
|
-
// item.realStatus === 'checked' ||
|
|
344
|
-
// item.realStatus === 'checkFail')
|
|
345
345
|
})
|
|
346
|
-
return flag && list.value.filter((item) => item.selected).length > 0
|
|
346
|
+
return flag && list.value.filter((item: any) => item.selected).length > 0
|
|
347
347
|
})
|
|
348
348
|
const selectedLength = computed(() => {
|
|
349
|
-
return list.value.filter((item) => item.selected && everyStatus(item))
|
|
349
|
+
return list.value.filter((item: any) => item.selected && everyStatus(item))
|
|
350
|
+
.length
|
|
350
351
|
})
|
|
351
352
|
const selectedLengthCount = computed(() => {
|
|
352
|
-
return list.value.filter((item) => everyStatus(item)).length
|
|
353
|
+
return list.value.filter((item: any) => everyStatus(item)).length
|
|
353
354
|
})
|
|
354
355
|
const openErrImg = (url: any) => {
|
|
355
356
|
showImagePreview([url])
|
|
@@ -364,7 +365,35 @@ const ok = () => {
|
|
|
364
365
|
return
|
|
365
366
|
}
|
|
366
367
|
// showDeleteBtn.value = false
|
|
367
|
-
const selectData = list.value
|
|
368
|
+
const selectData = list.value
|
|
369
|
+
.filter((item: any) => item.selected)
|
|
370
|
+
.map((item: any) => {
|
|
371
|
+
let obj: any = { ...item }
|
|
372
|
+
// 验真状态 1,绿色 2,黄色, 3,红色
|
|
373
|
+
// 绿色: 验真成功或(无需验真且金额校验成功)或无需验证
|
|
374
|
+
// 黄色: (未验真或验真异常)且金额校验失败
|
|
375
|
+
// 剩下的场景都为红色
|
|
376
|
+
if (
|
|
377
|
+
item.realStatus === 'checked' ||
|
|
378
|
+
(item.realStatus === 'noNeed' && !item.manualModify)
|
|
379
|
+
) {
|
|
380
|
+
obj.verifyTruth = 1
|
|
381
|
+
} else if (item.manualModify) {
|
|
382
|
+
obj.verifyTruth = 2
|
|
383
|
+
} else {
|
|
384
|
+
obj.verifyTruth = 3
|
|
385
|
+
}
|
|
386
|
+
// 验重状态 1,绿色 2,黄色, 3,红色
|
|
387
|
+
if (item.invoiceStatus === 'unused') {
|
|
388
|
+
obj.checkWeight = 1
|
|
389
|
+
} else if (item.invoiceStatus === 'invalid') {
|
|
390
|
+
obj.checkWeight = 2
|
|
391
|
+
} else {
|
|
392
|
+
obj.checkWeight = 3
|
|
393
|
+
}
|
|
394
|
+
return obj
|
|
395
|
+
})
|
|
396
|
+
console.log(selectData, 'selectData')
|
|
368
397
|
emit('ok', selectData, batchId.value)
|
|
369
398
|
}
|
|
370
399
|
const timeID: any = ref(null)
|
|
@@ -484,6 +513,10 @@ onMounted(() => {
|
|
|
484
513
|
gap: 7px;
|
|
485
514
|
margin-top: 8px;
|
|
486
515
|
margin-bottom: 15px;
|
|
516
|
+
.manual {
|
|
517
|
+
background-color: #facd91;
|
|
518
|
+
color: #c77458;
|
|
519
|
+
}
|
|
487
520
|
span {
|
|
488
521
|
padding: 2px 4px;
|
|
489
522
|
font-size: 12px;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
export const data = {
|
|
2
|
+
angle: '0',
|
|
3
|
+
attachmentLink:
|
|
4
|
+
'https://filegw.nuonuo.com/U1ylUBa5YlUHWOpta7hoLSC6QX9pEcu8Kcy-JnCnHTGn6PYXKNdZosH32iDDaLWGzhkY0N88rGOaS4w2krdeCw.png',
|
|
5
|
+
description: '增值税专用发票',
|
|
6
|
+
invoiceType: 'vat_special_invoice',
|
|
7
|
+
invoiceRootType: '专票',
|
|
8
|
+
position: '[0,0,2048,0,0,928,2048,928]',
|
|
9
|
+
checkCode: '',
|
|
10
|
+
clerk: '江海珍',
|
|
11
|
+
electronicMark: '0',
|
|
12
|
+
electronicNumber: '',
|
|
13
|
+
invoiceCode: '3300231130',
|
|
14
|
+
invoiceDate: '2023年07月17日',
|
|
15
|
+
invoiceNum: '08148218',
|
|
16
|
+
itemNames: '*住宿服务*住宿费',
|
|
17
|
+
noTaxAmountTotal: '212.87',
|
|
18
|
+
note: '',
|
|
19
|
+
payee: '王宝存',
|
|
20
|
+
payerAccount: '中信银行上海虹桥商务区支行8110201012601374925',
|
|
21
|
+
payerContact: '上海市闵行区沪青平公路277号5楼13301773703',
|
|
22
|
+
payerId: '91310112MA7BGUJL15',
|
|
23
|
+
payerName: '上海半小妖科技有限公司',
|
|
24
|
+
priceTaxTotalFigure: '215.00',
|
|
25
|
+
printCode: '0814821',
|
|
26
|
+
printNum: '0814821',
|
|
27
|
+
producerStamp: '浙江',
|
|
28
|
+
recheck: '金芬兰',
|
|
29
|
+
seal: '1',
|
|
30
|
+
sellerAccount: '温州银行股份有限公司营业部 745000120190095098',
|
|
31
|
+
sellerContact: '温州市瓯海娄桥古岸头村(不作拆迁凭证)0577-88812123',
|
|
32
|
+
sellerId: '913303046845118206',
|
|
33
|
+
sellerName: '温州蔬农招待所有限公司',
|
|
34
|
+
serviceName: '住宿服务',
|
|
35
|
+
taxAmountTotal: '2.13',
|
|
36
|
+
title: '浙江增值税专用发票',
|
|
37
|
+
totalCn: '贰佰壹拾伍圆整',
|
|
38
|
+
vatInvoicePage: '发票联',
|
|
39
|
+
nuonuoFileId: '3232300437-7d12c82340b84855a04e1f6d9d059c2f',
|
|
40
|
+
deatis: [
|
|
41
|
+
{
|
|
42
|
+
itemExTaxAmount: '212.87',
|
|
43
|
+
itemExTaxPrice: '',
|
|
44
|
+
itemName: '*住宿服务*住宿费',
|
|
45
|
+
itemQuantity: '',
|
|
46
|
+
itemSpec: '',
|
|
47
|
+
itemTaxAmount: '2.13',
|
|
48
|
+
itemTaxRate: '1%',
|
|
49
|
+
itemUtil: '',
|
|
50
|
+
id: 1345,
|
|
51
|
+
code: '1691272134678020096',
|
|
52
|
+
tenantCode: 'af9390a20cccc90fd174e5706f302769',
|
|
53
|
+
brandCode: '1645512743732000029',
|
|
54
|
+
createdAt: 1692065673000,
|
|
55
|
+
updatedAt: 1692065673000,
|
|
56
|
+
invoiceTableCode: '1691272117275852800',
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
status: 'entered',
|
|
60
|
+
invoiceStatus: 'unused',
|
|
61
|
+
realStatus: 'checked',
|
|
62
|
+
fileUrlKey:
|
|
63
|
+
'https://invoice-sit-1251881907.cos.ap-nanjing.myqcloud.com/f8c6ff4af53241269c39dbd70f59cf6a.png?sign=q-sign-algorithm%3Dsha1%26q-ak%3DAKIDwtmcPMRRMAe9d4Sju00wq7KQPKAvZ6Yt%26q-sign-time%3D1693876509%3B1693876689%26q-key-time%3D1693876509%3B1693876689%26q-header-list%3Dhost%26q-url-param-list%3D%26q-signature%3Dd49201f59ae86085771f52b2df0b13f40556e848',
|
|
64
|
+
invoiceCompanyType: '公司',
|
|
65
|
+
taxRate: '1%',
|
|
66
|
+
taskStatus: 'repeat',
|
|
67
|
+
taskId: '1698867126367944704',
|
|
68
|
+
invoiceConsumptionType: 'accommodation',
|
|
69
|
+
invoiceConsumptionTypeInfo: '住宿费',
|
|
70
|
+
}
|