diff --git a/src/api/fee/addOwnerInvoiceApi.js b/src/api/fee/addOwnerInvoiceApi.js new file mode 100644 index 0000000..adbc608 --- /dev/null +++ b/src/api/fee/addOwnerInvoiceApi.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 保存业主发票信息 +export function saveOwnerInvoice(data) { + return new Promise((resolve, reject) => { + request({ + url: '/invoice.saveOwnerInvoice', + method: 'post', + data + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || '保存发票信息失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 查询业主列表 +export function queryOwners(params) { + return new Promise((resolve, reject) => { + request({ + url: '/owner.queryOwners', + method: 'get', + params + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve({ + data: res.data, + total: res.records + }) + } else { + reject(new Error(res.msg || '查询业主失败')) + } + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/fee/invoiceApplyApi.js b/src/api/fee/invoiceApplyApi.js new file mode 100644 index 0000000..e8c999b --- /dev/null +++ b/src/api/fee/invoiceApplyApi.js @@ -0,0 +1,148 @@ +import request from '@/utils/request' +import { getCommunityId } from '@/api/community/communityApi' + +// 获取发票申请列表 +export function listInvoiceApply(params) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/invoice.listInvoiceApply', + method: 'get', + params: { + ...params, + communityId + } + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || '获取发票申请列表失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 审核发票申请 +export function auditInvoiceApply(data) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/invoice.auditInvoiceApply', + method: 'post', + data: { + ...data, + communityId + } + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || '审核发票申请失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 删除发票申请 +export function deleteInvoiceApply(data) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/invoice.deleteInvoiceApply', + method: 'post', + data: { + ...data, + communityId + } + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || '删除发票申请失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 上传发票照片 +export function uploadInvoicePhoto(data) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/invoice.uploadInvoicePhoto', + method: 'post', + data: { + ...data, + communityId + } + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || '上传发票照片失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 写入发票事件 +export function writeInvoiceEvent(data) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/invoice.writeInvoiceApply', + method: 'post', + data: { + ...data, + communityId + } + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || '写入发票事件失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 上传图片 +export function uploadImage(formData) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + formData.append('communityId', communityId) + + request({ + url: 'uploadFile/uploadImage', + method: 'post', + data: formData, + headers: { + 'Content-Type': 'multipart/form-data' + } + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res.data) + } else { + reject(new Error(res.msg || '上传图片失败')) + } + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/fee/invoiceApplyDetailApi.js b/src/api/fee/invoiceApplyDetailApi.js new file mode 100644 index 0000000..070e3c3 --- /dev/null +++ b/src/api/fee/invoiceApplyDetailApi.js @@ -0,0 +1,77 @@ +import request from '@/utils/request' +import { getCommunityId } from '@/api/community/communityApi' + +/** + * 获取发票申请详情 + * @param {Object} params + * @returns + */ +export function getInvoiceApplyDetail(params) { + return new Promise((resolve, reject) => { + params.communityId = getCommunityId() + request({ + url: '/invoice.listInvoiceApply', + method: 'get', + params + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || '获取发票申请详情失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +/** + * 获取发票申请费用明细 + * @param {Object} params + * @returns + */ +export function getInvoiceApplyItemList(params) { + return new Promise((resolve, reject) => { + params.communityId = getCommunityId() + request({ + url: '/invoice.listInvoiceApplyItem', + method: 'get', + params + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || '获取发票申请费用明细失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +/** + * 获取发票申请审核记录 + * @param {Object} params + * @returns + */ +export function getInvoiceEventList(params) { + return new Promise((resolve, reject) => { + params.communityId = getCommunityId() + request({ + url: '/invoice.listInvoiceEvent', + method: 'get', + params + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || '获取发票申请审核记录失败')) + } + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/fee/ownerApplyInvoiceApi.js b/src/api/fee/ownerApplyInvoiceApi.js new file mode 100644 index 0000000..597f272 --- /dev/null +++ b/src/api/fee/ownerApplyInvoiceApi.js @@ -0,0 +1,89 @@ +import request from '@/utils/request' +import { getCommunityId } from '@/api/community/communityApi' + +// 获取业主发票信息列表 +export function listOwnerInvoice(params) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/invoice.listOwnerInvoice', + method: 'get', + params: { + ...params, + communityId + } + }).then(response => { + const res = response.data + + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 查询费用明细 +export function queryFeeDetail(params) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/fee.queryFeeDetail', + method: 'get', + params: { + ...params, + communityId + } + }).then(response => { + const res = response.data + + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 查询账户预存明细 +export function listAccountReceipt(params) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/receipt.listAccountReceipt', + method: 'get', + params: { + ...params, + communityId + } + }).then(response => { + const res = response.data + + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 保存发票申请 +export function saveInvoiceApply(data) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/invoice.saveInvoiceApply', + method: 'post', + data: { + ...data, + communityId + } + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || '保存发票申请失败')) + } + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/fee/ownerInvoiceApi.js b/src/api/fee/ownerInvoiceApi.js new file mode 100644 index 0000000..a8184d8 --- /dev/null +++ b/src/api/fee/ownerInvoiceApi.js @@ -0,0 +1,65 @@ +import request from '@/utils/request' +import { getCommunityId } from '@/api/community/communityApi' + +// 查询业主发票列表 +export function listOwnerInvoice(params) { + return new Promise((resolve, reject) => { + params.communityId = getCommunityId() + request({ + url: '/invoice.listOwnerInvoice', + method: 'get', + params + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || '获取发票列表失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 更新业主发票 +export function updateOwnerInvoice(data) { + return new Promise((resolve, reject) => { + data.communityId = getCommunityId() + request({ + url: '/invoice.updateOwnerInvoice', + method: 'post', + data + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || '更新发票失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 删除业主发票 +export function deleteOwnerInvoice(data) { + return new Promise((resolve, reject) => { + data.communityId = getCommunityId() + request({ + url: '/invoice.deleteOwnerInvoice', + method: 'post', + data + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || '删除发票失败')) + } + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/components/fee/audit.vue b/src/components/fee/audit.vue new file mode 100644 index 0000000..4bfc303 --- /dev/null +++ b/src/components/fee/audit.vue @@ -0,0 +1,90 @@ + + + \ No newline at end of file diff --git a/src/components/fee/deleteInvoiceApply.vue b/src/components/fee/deleteInvoiceApply.vue new file mode 100644 index 0000000..7b5974f --- /dev/null +++ b/src/components/fee/deleteInvoiceApply.vue @@ -0,0 +1,57 @@ + + + \ No newline at end of file diff --git a/src/components/fee/deleteOwnerInvoice.vue b/src/components/fee/deleteOwnerInvoice.vue new file mode 100644 index 0000000..3ab5775 --- /dev/null +++ b/src/components/fee/deleteOwnerInvoice.vue @@ -0,0 +1,43 @@ + + + \ No newline at end of file diff --git a/src/components/fee/editOwnerInvoice.vue b/src/components/fee/editOwnerInvoice.vue new file mode 100644 index 0000000..cc32180 --- /dev/null +++ b/src/components/fee/editOwnerInvoice.vue @@ -0,0 +1,116 @@ + + + \ No newline at end of file diff --git a/src/components/fee/invoiceApplyDetailEvent.vue b/src/components/fee/invoiceApplyDetailEvent.vue new file mode 100644 index 0000000..d8160a6 --- /dev/null +++ b/src/components/fee/invoiceApplyDetailEvent.vue @@ -0,0 +1,86 @@ + + + + + \ No newline at end of file diff --git a/src/components/fee/invoiceApplyDetailFee.vue b/src/components/fee/invoiceApplyDetailFee.vue new file mode 100644 index 0000000..36a3fbb --- /dev/null +++ b/src/components/fee/invoiceApplyDetailFee.vue @@ -0,0 +1,107 @@ + + + + + \ No newline at end of file diff --git a/src/components/fee/searchOwnerInvoice.vue b/src/components/fee/searchOwnerInvoice.vue new file mode 100644 index 0000000..93e34ff --- /dev/null +++ b/src/components/fee/searchOwnerInvoice.vue @@ -0,0 +1,124 @@ + + + + + \ No newline at end of file diff --git a/src/components/fee/uploadInvoicePhoto.vue b/src/components/fee/uploadInvoicePhoto.vue new file mode 100644 index 0000000..f8597af --- /dev/null +++ b/src/components/fee/uploadInvoicePhoto.vue @@ -0,0 +1,93 @@ + + + \ No newline at end of file diff --git a/src/components/fee/wirteInvoiceEvent.vue b/src/components/fee/wirteInvoiceEvent.vue new file mode 100644 index 0000000..674a6b2 --- /dev/null +++ b/src/components/fee/wirteInvoiceEvent.vue @@ -0,0 +1,97 @@ + + + \ No newline at end of file diff --git a/src/i18n/index.js b/src/i18n/index.js index 058bad5..19a1472 100644 --- a/src/i18n/index.js +++ b/src/i18n/index.js @@ -139,6 +139,10 @@ import { messages as ownerCommitteeManageMessages } from '../views/owner/ownerCo import { messages as addOwnerCommitteeMessages } from '../views/owner/addOwnerCommitteeLang' import { messages as editOwnerCommitteeMessages } from '../views/owner/editOwnerCommitteeLang' import { messages as ownerCommitteeDetailMessages } from '../views/owner/ownerCommitteeDetailLang' +import { messages as ownerInvoiceMessages } from '../views/fee/ownerInvoiceLang' +import { messages as invoiceApplyMessages } from '../views/fee/invoiceApplyLang' +import { messages as ownerApplyInvoiceMessages } from '../views/fee/ownerApplyInvoiceLang' +import { messages as invoiceApplyDetailMessages } from '../views/fee/invoiceApplyDetailLang' Vue.use(VueI18n) @@ -282,6 +286,10 @@ const messages = { ...addOwnerCommitteeMessages.en, ...editOwnerCommitteeMessages.en, ...ownerCommitteeDetailMessages.en, + ...ownerInvoiceMessages.en, + ...invoiceApplyMessages.en, + ...ownerApplyInvoiceMessages.en, + ...invoiceApplyDetailMessages.en, }, zh: { ...loginMessages.zh, @@ -421,6 +429,10 @@ const messages = { ...addOwnerCommitteeMessages.zh, ...editOwnerCommitteeMessages.zh, ...ownerCommitteeDetailMessages.zh, + ...ownerInvoiceMessages.zh, + ...invoiceApplyMessages.zh, + ...ownerApplyInvoiceMessages.zh, + ...invoiceApplyDetailMessages.zh, } } diff --git a/src/router/index.js b/src/router/index.js index 7a31965..44f5d6a 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -682,10 +682,35 @@ const routes = [ component: () => import('@/views/owner/editOwnerCommitteeList.vue') }, { - path:'/views/owner/ownerCommitteeDetail', - name:'/views/owner/ownerCommitteeDetail', + path: '/views/owner/ownerCommitteeDetail', + name: '/views/owner/ownerCommitteeDetail', component: () => import('@/views/owner/ownerCommitteeDetailList.vue') + }, + { + path: '/pages/fee/ownerInvoice', + name: '/pages/fee/ownerInvoice', + component: () => import('@/views/fee/ownerInvoiceList.vue') + }, + { + path: '/views/fee/addOwnerInvoice', + name: '/views/fee/addOwnerInvoice', + component: () => import('@/views/fee/addOwnerInvoiceList.vue') + }, + { + path:'/pages/fee/invoiceApply', + name:'/pages/fee/invoiceApply', + component: () => import('@/views/fee/invoiceApplyList.vue') }, + { + path:'/views/fee/ownerApplyInvoice', + name:'/views/fee/ownerApplyInvoice', + component: () => import('@/views/fee/ownerApplyInvoiceList.vue') + }, + { + path:'/views/fee/invoiceApplyDetail', + name:'/views/fee/invoiceApplyDetail', + component: () => import('@/views/fee/invoiceApplyDetailList.vue') + }, // 其他子路由可以在这里添加 ] }, diff --git a/src/views/fee/addOwnerInvoiceList.vue b/src/views/fee/addOwnerInvoiceList.vue new file mode 100644 index 0000000..7da7eec --- /dev/null +++ b/src/views/fee/addOwnerInvoiceList.vue @@ -0,0 +1,169 @@ + + + + + \ No newline at end of file diff --git a/src/views/fee/invoiceApplyDetailLang.js b/src/views/fee/invoiceApplyDetailLang.js new file mode 100644 index 0000000..29ca341 --- /dev/null +++ b/src/views/fee/invoiceApplyDetailLang.js @@ -0,0 +1,90 @@ +export const messages = { + en: { + invoiceApplyDetail: { + title: 'Invoice Details', + back: 'Back', + applyId: 'Apply ID:', + invoiceType: 'Invoice Type:', + personal: 'Personal', + company: 'Company', + ownerName: 'Owner Name:', + createUserName: 'Applicant:', + invoiceName: 'Invoice Title:', + invoiceNum: 'Taxpayer ID:', + invoiceAddress: 'Address/Phone:', + invoiceAmount: 'Apply Amount:', + stateName: 'Status:', + createTime: 'Apply Time:', + invoiceCode: 'Invoice Code:', + feeTab: 'Fee Details', + eventTab: 'Audit Records', + imageTab: 'View Invoice', + notUploaded: 'Not uploaded', + noInvoice: 'No Invoice', + downloadInvoice: 'Download Invoice', + fetchError: 'Failed to fetch invoice details' + }, + invoiceApplyDetailFee: { + type: 'Type', + name: 'Name', + amount: 'Amount', + payTime: 'Pay Time', + remark: 'Remark', + paymentId: 'Payment ID', + feeType: 'Fee', + accountType: 'Account', + fetchError: 'Failed to fetch fee details' + }, + invoiceApplyDetailEvent: { + type: 'Type', + operator: 'Operator', + remark: 'Remark', + time: 'Time', + fetchError: 'Failed to fetch audit records' + }, + }, + zh: { + invoiceApplyDetail: { + title: '发票详情', + back: '返回', + applyId: '编号:', + invoiceType: '发票类型:', + personal: '个人', + company: '企业', + ownerName: '业主名称:', + createUserName: '申请人:', + invoiceName: '发票名头:', + invoiceNum: '纳税人识别号:', + invoiceAddress: '地址、电话:', + invoiceAmount: '申请金额:', + stateName: '审核状态:', + createTime: '申请时间:', + invoiceCode: '发票编号:', + feeTab: '开票明细', + eventTab: '审核记录', + imageTab: '查看发票', + notUploaded: '未上传', + noInvoice: '没有发票', + downloadInvoice: '下载发票', + fetchError: '获取发票详情失败' + }, + invoiceApplyDetailFee: { + type: '类型', + name: '名称', + amount: '金额', + payTime: '缴费时间', + remark: '备注', + paymentId: '缴费ID', + feeType: '费用', + accountType: '账户', + fetchError: '获取费用明细失败' + }, + invoiceApplyDetailEvent: { + type: '类型', + operator: '操作人', + remark: '说明', + time: '时间', + fetchError: '获取审核记录失败' + }, + } +} \ No newline at end of file diff --git a/src/views/fee/invoiceApplyDetailList.vue b/src/views/fee/invoiceApplyDetailList.vue new file mode 100644 index 0000000..1b7298f --- /dev/null +++ b/src/views/fee/invoiceApplyDetailList.vue @@ -0,0 +1,212 @@ + + + + + \ No newline at end of file diff --git a/src/views/fee/invoiceApplyLang.js b/src/views/fee/invoiceApplyLang.js new file mode 100644 index 0000000..5ba83c0 --- /dev/null +++ b/src/views/fee/invoiceApplyLang.js @@ -0,0 +1,150 @@ +export const messages = { + en: { + invoiceApply: { + searchTitle: 'Search Conditions', + title: 'Invoice Application', + apply: 'Apply', + table: { + id: 'ID', + invoiceType: 'Invoice Type', + ownerName: 'Owner Name', + applicant: 'Applicant', + invoiceName: 'Invoice Title', + taxNumber: 'Taxpayer ID', + addressPhone: 'Address & Phone', + amount: 'Amount', + invoiceCode: 'Invoice Code', + status: 'Status', + applyTime: 'Apply Time' + }, + states: { + all: 'All', + pendingReview: 'Pending Review', + pendingUpload: 'Pending Upload', + reviewFailed: 'Review Failed', + pendingReceive: 'Pending Receive', + received: 'Received' + }, + personal: 'Personal', + company: 'Company', + notUploaded: 'Not Uploaded', + openInvoice: 'Open Invoice', + uploadInvoice: 'Upload Invoice', + reUpload: 'Re-upload', + verify: 'Verify', + register: 'Register', + auditSuccess: 'Audit successful', + invoiceCodePlaceholder: 'Please enter invoice number', + invoiceTypePlaceholder: 'Please select invoice type', + ownerNamePlaceholder: 'Please enter owner name', + applicantPlaceholder: 'Please enter applicant', + phonePlaceholder: 'Please enter applicant phone' + }, + deleteInvoiceApply: { + title: 'Confirm Operation', + confirmMessage: 'Confirm to delete this invoice application?' + }, + uploadInvoicePhoto: { + title: 'Upload Invoice', + invoiceCode: 'Invoice Code', + invoice: 'Invoice', + codeRequired: 'Required, please enter invoice code', + photoRequired: 'Please select invoice photo' + }, + wirteInvoiceEvent: { + title: 'Register/Verify', + type: 'Type', + remark: 'Remark', + typeRequired: 'Required, please select type', + remarkRequired: 'Required, please enter remark', + receive: 'Receive', + register: 'Register' + }, + audit: { + title: 'Audit Information', + status: 'Audit Status', + reason: 'Reason', + statusRequired: 'Please select audit status', + reasonRequired: 'Required, please enter reason', + approve: 'Approve', + reject: 'Reject' + }, + uploadImage: { + sizeLimit: 'Image size cannot exceed 2MB' + } + }, + zh: { + invoiceApply: { + searchTitle: '查询条件', + title: '申请发票', + apply: '申请', + table: { + id: '编号', + invoiceType: '发票类型', + ownerName: '业主名称', + applicant: '申请人', + invoiceName: '发票名头', + taxNumber: '纳税人识别号', + addressPhone: '地址、电话', + amount: '申请金额', + invoiceCode: '发票号', + status: '审核状态', + applyTime: '申请时间' + }, + states: { + all: '全部', + pendingReview: '待审核', + pendingUpload: '待上传', + reviewFailed: '审核失败', + pendingReceive: '带领用', + received: '已领用' + }, + personal: '个人', + company: '企业', + notUploaded: '未上传', + openInvoice: '开票', + uploadInvoice: '上传发票', + reUpload: '重新上传', + verify: '核销', + register: '登记', + auditSuccess: '审核成功', + invoiceCodePlaceholder: '请填写发票号', + invoiceTypePlaceholder: '请选择发票类型', + ownerNamePlaceholder: '请填写业主名称', + applicantPlaceholder: '请填写申请人', + phonePlaceholder: '请填写申请人电话' + }, + deleteInvoiceApply: { + title: '请确认您的操作', + confirmMessage: '确定删除申请发票' + }, + uploadInvoicePhoto: { + title: '上传发票', + invoiceCode: '发票编号', + invoice: '发票', + codeRequired: '必填,请填写发票编号', + photoRequired: '请选择发票' + }, + wirteInvoiceEvent: { + title: '登记核销', + type: '类型', + remark: '说明', + typeRequired: '必填,请选择类型', + remarkRequired: '必填,请填写说明', + receive: '领用', + register: '登记' + }, + audit: { + title: '审核信息', + status: '审核状态', + reason: '原因', + statusRequired: '请审核', + reasonRequired: '必填,请填写原因', + approve: '同意', + reject: '拒绝' + }, + uploadImage: { + sizeLimit: '图片大小不能超过 2MB' + } + } +} \ No newline at end of file diff --git a/src/views/fee/invoiceApplyList.vue b/src/views/fee/invoiceApplyList.vue new file mode 100644 index 0000000..18bd169 --- /dev/null +++ b/src/views/fee/invoiceApplyList.vue @@ -0,0 +1,295 @@ + + + + + \ No newline at end of file diff --git a/src/views/fee/ownerApplyInvoiceLang.js b/src/views/fee/ownerApplyInvoiceLang.js new file mode 100644 index 0000000..44568ae --- /dev/null +++ b/src/views/fee/ownerApplyInvoiceLang.js @@ -0,0 +1,114 @@ +export const messages = { + en: { + ownerApplyInvoice: { + title: 'Invoice Application', + invoiceTitle: 'Invoice Title', + taxpayerId: 'Taxpayer ID', + invoiceType: 'Invoice Type', + addressPhone: 'Address & Phone', + owner: 'Owner', + content: 'Content', + personal: 'Personal', + enterprise: 'Enterprise', + paidFees: 'Paid Fees', + accountDeposit: 'Account Deposit', + feeName: 'Fee Item', + payer: 'Payer', + receivablePaid: 'Receivable/Paid', + paymentMethod: 'Payment Method', + paymentPeriod: 'Payment Period', + paymentTime: 'Payment Time', + cashier: 'Cashier', + status: 'Status', + remark: 'Remark', + accountName: 'Account Name', + accountType: 'Account Type', + depositAmount: 'Deposit Amount', + depositMethod: 'Deposit Method', + totalAmount: 'Total Amount', + depositTime: 'Deposit Time', + back: 'Back', + select: 'Select', + submit: 'Submit', + required: 'Required', + chooseInvoiceTitle: 'Please select invoice title', + chooseTaxId: 'Please select taxpayer ID', + chooseInvoiceType: 'Please select invoice type', + chooseAddressPhone: 'Please enter address and phone', + chooseContent: 'Please select content', + noFeeSelected: 'No paid fees selected', + noDepositSelected: 'No account deposit selected' + }, + searchOwnerInvoice: { + title: 'Select Owner', + ownerName: 'Owner Name', + invoiceType: 'Invoice Type', + invoiceTitle: 'Invoice Title', + taxpayerId: 'Taxpayer ID', + addressPhone: 'Address & Phone', + operation: 'Operation', + search: 'Search', + placeholderRoom: 'Enter room number (building-unit-room)', + placeholderOwner: 'Enter owner name', + select: 'Select', + personal: 'Personal', + company: 'Company' + } + }, + zh: { + ownerApplyInvoice: { + title: '发票申请', + invoiceTitle: '发票抬头', + taxpayerId: '纳税人识别号', + invoiceType: '发票类型', + addressPhone: '地址、电话', + owner: '业主', + content: '开票内容', + personal: '个人', + enterprise: '企业', + paidFees: '已缴费费用', + accountDeposit: '账户预存', + feeName: '费用项', + payer: '收费对象', + receivablePaid: '应收/实收', + paymentMethod: '缴费方式', + paymentPeriod: '缴费起始段', + paymentTime: '缴费时间', + cashier: '收银员', + status: '状态', + remark: '备注', + accountName: '账户名称', + accountType: '账户类型', + depositAmount: '预存金额', + depositMethod: '预存方式', + totalAmount: '总金额', + depositTime: '预存时间', + back: '返回', + select: '选择', + submit: '提交', + required: '必填', + chooseInvoiceTitle: '请选择发票抬头', + chooseTaxId: '请选择纳税人识别号', + chooseInvoiceType: '请选择发票类型', + chooseAddressPhone: '请输入地址、电话', + chooseContent: '请选择开票内容', + noFeeSelected: '未选择已缴费费用', + noDepositSelected: '未选择账户预存' + }, + searchOwnerInvoice: { + title: '选择业主', + ownerName: '业主名称', + invoiceType: '发票类型', + invoiceTitle: '发票名头', + taxpayerId: '纳税人识别号', + addressPhone: '地址、电话', + operation: '操作', + search: '查询', + placeholderRoom: '输入房屋编号楼栋-单元-房屋', + placeholderOwner: '输入业主名称', + select: '选择', + personal: '个人', + company: '公司' + } + } +} \ No newline at end of file diff --git a/src/views/fee/ownerApplyInvoiceList.vue b/src/views/fee/ownerApplyInvoiceList.vue new file mode 100644 index 0000000..c6190b1 --- /dev/null +++ b/src/views/fee/ownerApplyInvoiceList.vue @@ -0,0 +1,296 @@ + + + + + \ No newline at end of file diff --git a/src/views/fee/ownerInvoiceLang.js b/src/views/fee/ownerInvoiceLang.js new file mode 100644 index 0000000..4dbba76 --- /dev/null +++ b/src/views/fee/ownerInvoiceLang.js @@ -0,0 +1,144 @@ +export const messages = { + en: { + searchCondition: 'Search Conditions', + ownerNamePlaceholder: 'Enter owner name', + invoiceTypePlaceholder: 'Select invoice type', + personal: 'Personal', + enterprise: 'Enterprise', + invoiceHeaderPlaceholder: 'Enter invoice header', + search: 'Search', + invoiceHeader: 'Invoice Header', + add: 'Add', + serialNumber: 'Serial Number', + ownerName: 'Owner Name', + invoiceType: 'Invoice Type', + taxpayerId: 'Taxpayer ID', + address: 'Address', + phone: 'Phone', + bankAccount: 'Bank Account', + remark: 'Remark', + operation: 'Operation', + modify: 'Modify', + delete: 'Delete', + confirmDeleteTitle: 'Confirm Deletion', + confirmDeleteContent: 'Are you sure to delete this invoice header?', + cancel: 'Cancel', + confirmDelete: 'Confirm Delete', + editTitle: 'Edit', + requiredInvoiceType: 'Invoice type is required', + requiredInvoiceHeader: 'Invoice header is required', + requiredTaxpayerId: 'Taxpayer ID is required', + requiredAddress: 'Address is required', + requiredPhone: 'Phone is required', + requiredBankAccount: 'Bank account is required', + optionalRemark: 'Remark (optional)', + save: 'Save', + addOwnerInvoice: { + title: 'Add Invoice', + back: 'Back', + owner: 'Owner', + selectOwner: 'Select Owner', + invoiceType: 'Invoice Type', + invoiceTitle: 'Invoice Title', + taxNumber: 'Taxpayer ID', + address: 'Address', + phone: 'Phone', + bankAccount: 'Bank Account', + remarks: 'Remarks', + save: 'Save', + required: 'Required', + personal: 'Personal', + enterprise: 'Enterprise', + placeholder: { + owner: 'Please select owner', + invoiceType: 'Please select invoice type', + invoiceTitle: 'Please enter invoice title', + taxNumber: 'Please enter taxpayer ID', + address: 'Please enter address', + phone: 'Please enter phone number', + bankAccount: 'Please enter bank account', + remarks: 'Optional remarks' + }, + validation: { + ownerRequired: 'Owner is required', + typeRequired: 'Invoice type is required', + titleRequired: 'Invoice title is required', + taxNumberRequired: 'Taxpayer ID is required', + addressRequired: 'Address is required', + phoneRequired: 'Phone is required', + bankAccountRequired: 'Bank account is required' + } + }, + }, + zh: { + searchCondition: '查询条件', + ownerNamePlaceholder: '请输入业主名称', + invoiceTypePlaceholder: '请选择发票类型', + personal: '个人', + enterprise: '企业', + invoiceHeaderPlaceholder: '请输入发票名头', + search: '查询', + invoiceHeader: '发票抬头', + add: '添加', + serialNumber: '编号', + ownerName: '业主名称', + invoiceType: '发票类型', + taxpayerId: '纳税人识别号', + address: '地址', + phone: '电话', + bankAccount: '开户行及账号', + remark: '备注', + operation: '操作', + modify: '修改', + delete: '删除', + confirmDeleteTitle: '请确认您的操作', + confirmDeleteContent: '确定删除发票抬头', + cancel: '点错了', + confirmDelete: '确认删除', + editTitle: '修改', + requiredInvoiceType: '必填,请选择发票类型', + requiredInvoiceHeader: '必填,请填写发票名头', + requiredTaxpayerId: '必填,请填写纳税人识别号', + requiredAddress: '必填,请填写地址', + requiredPhone: '必填,请填写电话', + requiredBankAccount: '必填,请填写开户行及账号', + optionalRemark: '选填,请填写备注', + save: '保存', + addOwnerInvoice: { + title: '添加发票抬头', + back: '返回', + owner: '业主', + selectOwner: '选择业主', + invoiceType: '发票类型', + invoiceTitle: '发票名头', + taxNumber: '纳税人识别号', + address: '地址', + phone: '电话', + bankAccount: '开户行及账号', + remarks: '备注', + save: '保存', + required: '必填', + personal: '个人', + enterprise: '企业', + placeholder: { + owner: '请选择业主', + invoiceType: '请选择发票类型', + invoiceTitle: '请填写发票名头', + taxNumber: '请填写纳税人识别号', + address: '请填写地址', + phone: '请填写电话', + bankAccount: '请填写开户行及账号', + remarks: '选填备注' + }, + validation: { + ownerRequired: '业主不能为空', + typeRequired: '发票类型不能为空', + titleRequired: '发票名头不能为空', + taxNumberRequired: '纳税人识别号不能为空', + addressRequired: '地址不能为空', + phoneRequired: '电话不能为空', + bankAccountRequired: '开户行及账号不能为空' + } + }, + } +} \ No newline at end of file diff --git a/src/views/fee/ownerInvoiceList.vue b/src/views/fee/ownerInvoiceList.vue new file mode 100644 index 0000000..7e27e3e --- /dev/null +++ b/src/views/fee/ownerInvoiceList.vue @@ -0,0 +1,180 @@ + + + + + \ No newline at end of file