|
@@ -1,126 +1,17 @@
|
1
|
1
|
<template>
|
2
|
2
|
<van-form @failed="onFailed" @submit="onSubmit" :readonly="isFinished">
|
3
|
|
- <h2 :style="{ textAlign: 'center' }">{{ formData.invoiceName }}</h2>
|
4
|
|
- <van-cell-group title="报销人信息">
|
5
|
|
- <van-field
|
6
|
|
- label="所属公司"
|
7
|
|
- v-model="formData.invoiceOrgName"
|
8
|
|
- name="invoiceOrgName"
|
9
|
|
- readonly
|
10
|
|
- @click="changeOrg"
|
11
|
|
- placeholder="请输入所属公司"
|
12
|
|
- :rules="[{ required: true, message: '请输入所属公司' }]"
|
13
|
|
- />
|
14
|
|
- <van-popup
|
15
|
|
- v-model:show="showOrgPicker"
|
16
|
|
- position="left"
|
17
|
|
- :style="{ height: '100%', width: '80%' }"
|
18
|
|
- >
|
19
|
|
- <org-picker
|
20
|
|
- v-model="formData.invoiceOrgId"
|
21
|
|
- :invoiceId="fillData.invoiceId"
|
22
|
|
- @change="onOrgConfirm"
|
23
|
|
- />
|
24
|
|
- </van-popup>
|
25
|
|
- <van-field
|
26
|
|
- label="报销人"
|
27
|
|
- v-model="formData.personName"
|
28
|
|
- name="personName"
|
29
|
|
- readonly
|
30
|
|
- @click="showOrgPopup"
|
31
|
|
- placeholder="请输入报销人"
|
32
|
|
- :rules="[{ required: true, message: '请输入报销人' }]"
|
33
|
|
- />
|
34
|
|
- <van-popup
|
35
|
|
- v-model:show="showPersonPicker"
|
36
|
|
- position="left"
|
37
|
|
- :style="{ height: '100%', width: '80%' }"
|
38
|
|
- >
|
39
|
|
- <person-picker
|
40
|
|
- v-model="formData.personId"
|
41
|
|
- :invoiceId="fillData.invoiceId"
|
42
|
|
- :orgId="formData.invoiceOrgId"
|
43
|
|
- @change="onPersonConfirm"
|
44
|
|
- />
|
45
|
|
- </van-popup>
|
46
|
|
- </van-cell-group>
|
|
3
|
+ <h2 :style="{ textAlign: 'center' }">{{ fillData.name }}</h2>
|
|
4
|
+ <person-info
|
|
5
|
+ :isFinished="isFinished"
|
|
6
|
+ :invoiceId="route.query.invoiceId"
|
|
7
|
+ :pdata="personData"
|
|
8
|
+ @changeOrgValue="changeOrg"
|
|
9
|
+ @changePersonValue="changePerson"
|
|
10
|
+ />
|
|
11
|
+ <invoice-info :isFinished="isFinished" :pdata="formData" />
|
47
|
12
|
|
48
|
|
- <van-cell-group title="开票单位">
|
49
|
|
- <van-field
|
50
|
|
- label="开票单位"
|
51
|
|
- v-model="formData.orgName"
|
52
|
|
- name="orgName"
|
53
|
|
- placeholder="请输入开票单位"
|
54
|
|
- :rules="[{ required: true, message: '请输入开票单位' }]"
|
55
|
|
- />
|
56
|
|
- <van-field
|
57
|
|
- label="纳 税 号"
|
58
|
|
- v-model="formData.taxNo"
|
59
|
|
- name="taxNo"
|
60
|
|
- placeholder="请输入纳税识别号"
|
61
|
|
- :rules="[{ required: true, message: '请输入纳税识别号' }]"
|
62
|
|
- />
|
63
|
|
- <van-field
|
64
|
|
- label="单位地址"
|
65
|
|
- v-model="formData.address"
|
66
|
|
- name="address"
|
67
|
|
- placeholder="请输入单位地址"
|
68
|
|
- :rules="[{ required: true, message: '请输入单位地址' }]"
|
69
|
|
- />
|
70
|
|
- <van-field
|
71
|
|
- label="单位电话"
|
72
|
|
- v-model="formData.phone"
|
73
|
|
- name="phone"
|
74
|
|
- placeholder="请输入单位电话"
|
75
|
|
- :rules="[{ required: true, message: '请输入单位电话' }]"
|
76
|
|
- />
|
77
|
|
- <van-field
|
78
|
|
- label="开户银行"
|
79
|
|
- v-model="formData.bankName"
|
80
|
|
- name="bankName"
|
81
|
|
- placeholder="请输入开户银行"
|
82
|
|
- :rules="[{ required: true, message: '请输入开户银行' }]"
|
83
|
|
- />
|
84
|
|
- <van-field
|
85
|
|
- label="开户账户"
|
86
|
|
- v-model="formData.cardNo"
|
87
|
|
- name="cardNo"
|
88
|
|
- placeholder="请输入开户行账号"
|
89
|
|
- :rules="[{ required: true, message: '请输入开户行账号' }]"
|
90
|
|
- />
|
91
|
|
- <van-field
|
92
|
|
- name="radio"
|
93
|
|
- label="是否合开"
|
94
|
|
- error-message="如果合开请和报销专员联系"
|
95
|
|
- >
|
96
|
|
- <template #input>
|
97
|
|
- <van-radio-group
|
98
|
|
- v-model="formData.mergeRemark"
|
99
|
|
- direction="horizontal"
|
100
|
|
- :disabled="isFinished"
|
101
|
|
- >
|
102
|
|
- <van-radio name="是">是</van-radio>
|
103
|
|
- <van-radio name="否">否</van-radio>
|
104
|
|
- </van-radio-group>
|
105
|
|
- </template>
|
106
|
|
- </van-field>
|
107
|
|
- </van-cell-group>
|
|
13
|
+ <item-tpl :itemList="itemList" />
|
108
|
14
|
|
109
|
|
- <van-cell-group v-if="itemList.length != 0" title="报销信息">
|
110
|
|
- <div class="itembox" v-for="item in itemList" :key="item.invoiceItemId">
|
111
|
|
- <van-cell title="报销项目">
|
112
|
|
- <template #value>
|
113
|
|
- <span style="color: #000">{{ item.name }}</span>
|
114
|
|
- </template>
|
115
|
|
- </van-cell>
|
116
|
|
- <van-cell title="开票金额">
|
117
|
|
- <template #value>
|
118
|
|
- <span style="color: #000">{{ item.charge }}</span>
|
119
|
|
- </template>
|
120
|
|
- </van-cell>
|
121
|
|
- <div class="lastLine" />
|
122
|
|
- </div>
|
123
|
|
- </van-cell-group>
|
124
|
15
|
<div style="margin: 16px">
|
125
|
16
|
<van-button
|
126
|
17
|
v-show="!isFinished"
|
|
@@ -142,36 +33,32 @@ import { Dialog, Toast } from 'vant'
|
142
|
33
|
import dayjs from 'dayjs'
|
143
|
34
|
import { getInvoiceModel, setInvoiceDetail, getInvoiceFill } from '@/services/invoice'
|
144
|
35
|
import { useModel } from '@zjxpcyc/vue-tiny-store'
|
|
36
|
+import PersonInfo from './components/PersonInfo.vue'
|
|
37
|
+import InvoiceInfo from './components/InvoiceInfo.vue'
|
|
38
|
+import ItemTpl from './components/ItemTpl.vue'
|
145
|
39
|
|
146
|
|
-const formData = reactive({
|
147
|
|
- //班级名称
|
148
|
|
- invoiceName: '',
|
149
|
|
- invoiceId: undefined,
|
150
|
|
- invoicePersonId: undefined,
|
151
|
|
- personName: undefined,
|
152
|
|
- invoiceOrgId: undefined,
|
153
|
|
- invoiceOrgName: undefined,
|
154
|
|
- orgName: undefined,
|
155
|
|
- taxNo: undefined,
|
156
|
|
- address: undefined,
|
157
|
|
- phone: undefined,
|
158
|
|
- bankName: undefined,
|
159
|
|
- cardNo: undefined,
|
160
|
|
- mergeRemark: '否',
|
161
|
|
- status: undefined
|
162
|
|
-})
|
|
40
|
+const formData = reactive({})
|
|
41
|
+//person组件数据
|
|
42
|
+const personData = ref({})
|
163
|
43
|
const itemList = ref([])
|
164
|
44
|
const fillData = ref([])
|
165
|
45
|
//是否结束
|
166
|
46
|
const isFinished = ref(false)
|
167
|
|
-const showOrgPicker = ref(false)
|
168
|
|
-const showPersonPicker = ref(false)
|
169
|
47
|
const router = useRouter();
|
170
|
48
|
const route = useRoute();
|
171
|
49
|
const { user } = useModel('user')
|
172
|
50
|
|
173
|
51
|
const personId = computed(() => route.query.personId || user.personId)
|
174
|
52
|
|
|
53
|
+const changeOrg = (val) => {
|
|
54
|
+ personData.value = val
|
|
55
|
+}
|
|
56
|
+const changePerson = (val) => {
|
|
57
|
+ personData.value = val
|
|
58
|
+ formData.invoicePersonId = val.invoicePersonId
|
|
59
|
+ getDetail()
|
|
60
|
+}
|
|
61
|
+
|
175
|
62
|
onMounted(() => {
|
176
|
63
|
//不是扫码进入
|
177
|
64
|
if (!route.query.invoiceId) {
|
|
@@ -194,7 +81,6 @@ onMounted(() => {
|
194
|
81
|
})
|
195
|
82
|
}
|
196
|
83
|
getDetail()
|
197
|
|
- formData.invoiceName = res.name
|
198
|
84
|
}).catch(err => {
|
199
|
85
|
console.log(err)
|
200
|
86
|
})
|
|
@@ -204,66 +90,20 @@ const onFailed = (errorInfo) => {
|
204
|
90
|
console.log('failed', formData);
|
205
|
91
|
};
|
206
|
92
|
|
207
|
|
-//选择企业
|
208
|
|
-const changeOrg = () => {
|
209
|
|
- if (!isFinished.value) {
|
210
|
|
- showOrgPicker.value = true
|
211
|
|
- }
|
212
|
|
-}
|
213
|
|
-//确认企业
|
214
|
|
-const onOrgConfirm = (value) => {
|
215
|
|
- if (value) {
|
216
|
|
- formData.invoiceOrgId = value.invoiceOrgId
|
217
|
|
- formData.invoiceOrgName = value.name
|
218
|
|
- formData.personName = ''
|
219
|
|
- formData.invoicePersonId = ''
|
220
|
|
- }
|
221
|
|
- showOrgPicker.value = false;
|
222
|
|
-};
|
223
|
|
-//选择报销人
|
224
|
|
-const showOrgPopup = () => {
|
225
|
|
- if (!isFinished.value) {
|
226
|
|
- if (formData.invoiceOrgId) {
|
227
|
|
- showPersonPicker.value = true
|
228
|
|
- } else {
|
229
|
|
- Dialog.alert({
|
230
|
|
- message: '请先选择所属公司'
|
231
|
|
- }).then(() => { })
|
232
|
|
- }
|
233
|
|
- }
|
234
|
|
-}
|
235
|
|
-//确认报销人
|
236
|
|
-const onPersonConfirm = (value) => {
|
237
|
|
- if (value) {
|
238
|
|
- let data = {
|
239
|
|
- invoiceOrgId: formData.invoiceOrgId,
|
240
|
|
- invoiceOrgName: formData.invoiceOrgName
|
241
|
|
- }
|
242
|
|
- //为了把当前选中报销人员放在请求里
|
243
|
|
- formData.invoicePersonId = value.invoicePersonId
|
244
|
|
- getDetail()
|
245
|
|
- setTimeout(() => {
|
246
|
|
- //因为如果客户填错报销人和所属单位 接口返回会默认上次选中的报销人所以需要把当前报销人重新赋值给formData
|
247
|
|
- formData.invoicePersonId = value.invoicePersonId
|
248
|
|
- formData.personName = value.name
|
249
|
|
- formData.invoiceOrgId = data.invoiceOrgId
|
250
|
|
- formData.invoiceOrgName = data.invoiceOrgName
|
251
|
|
- }, 100)
|
252
|
|
- }
|
253
|
|
- showPersonPicker.value = false;
|
254
|
|
- console.log(formData);
|
255
|
|
-};
|
|
93
|
+
|
256
|
94
|
//获取模板详情
|
257
|
95
|
const getDetail = () => {
|
258
|
96
|
getInvoiceModel(route.query.invoiceId, { invoicePersonId: formData.invoicePersonId, personId: personId.value }).then(res => {
|
259
|
|
- let info = {
|
260
|
|
- ...(res.detail || res.tpl),
|
261
|
|
- invoiceName: fillData.value.name,
|
262
|
|
- }
|
|
97
|
+ let info = res.detail || res.tpl
|
263
|
98
|
info.mergeRemark = info.mergeRemark || formData.mergeRemark
|
264
|
99
|
Object.assign(formData, info)
|
|
100
|
+ if (!personData.value.invoicePersonId) {
|
|
101
|
+ personData.value.invoiceOrgId = info.invoiceOrgId
|
|
102
|
+ personData.value.invoiceOrgName = info.invoiceOrgName
|
|
103
|
+ personData.value.personName = info.personName
|
|
104
|
+ personData.value.invoicePersonId = info.invoicePersonId
|
|
105
|
+ }
|
265
|
106
|
itemList.value = info.itemList
|
266
|
|
- console.log(info);
|
267
|
107
|
}).catch(err => {
|
268
|
108
|
console.log(err);
|
269
|
109
|
})
|
|
@@ -276,7 +116,9 @@ const onSubmit = (val) => {
|
276
|
116
|
}).then(() => { })
|
277
|
117
|
return;
|
278
|
118
|
}
|
279
|
|
- setInvoiceDetail(fillData.value.invoiceId, formData).then(() => {
|
|
119
|
+ //需要调用中间列表的提交事件获取数据
|
|
120
|
+ let value = { ...formData, ...val, ...personData.value }
|
|
121
|
+ setInvoiceDetail(fillData.value.invoiceId, value).then(() => {
|
280
|
122
|
Toast.success('提交成功');
|
281
|
123
|
setTimeout(() => {
|
282
|
124
|
router.back()
|
|
@@ -285,24 +127,4 @@ const onSubmit = (val) => {
|
285
|
127
|
console.log(err);
|
286
|
128
|
})
|
287
|
129
|
}
|
288
|
|
-
|
289
|
|
-</script>
|
290
|
|
-<style lang="less" scoped>
|
291
|
|
-.lastLine::after {
|
292
|
|
- position: absolute;
|
293
|
|
- box-sizing: border-box;
|
294
|
|
- content: " ";
|
295
|
|
- pointer-events: none;
|
296
|
|
- right: var(--van-padding-md);
|
297
|
|
- bottom: 0;
|
298
|
|
- left: var(--van-padding-md);
|
299
|
|
- border-bottom: 1px solid var(--van-cell-border-color);
|
300
|
|
- transform: scaleY(0.5);
|
301
|
|
-}
|
302
|
|
-.cellClassName {
|
303
|
|
- .van-cell__value {
|
304
|
|
- min-width: 80% !important; //可根据自己需求设定值
|
305
|
|
- text-align: left !important;
|
306
|
|
- }
|
307
|
|
-}
|
308
|
|
-</style>
|
|
130
|
+</script>
|