diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..3c3629e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+node_modules
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..5223b18
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,22 @@
+{
+ "sqltools.connections": [
+ {
+ "connectionTimeout": 15,
+ "mssqlOptions": {
+ "appName": "SQLTools",
+ "useUTC": true,
+ "encrypt": true,
+ "trustServerCertificate": false
+ },
+ "ssh": "Disabled",
+ "previewLimit": 50,
+ "server": "47.96.78.103",
+ "port": 1433,
+ "askForPassword": true,
+ "driver": "MSSQL",
+ "name": "QS aliyun",
+ "username": "sa",
+ "database": "QueuingSystem"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/tax-guidance/.hbuilderx/launch.json b/tax-guidance/.hbuilderx/launch.json
new file mode 100644
index 0000000..8ae452a
--- /dev/null
+++ b/tax-guidance/.hbuilderx/launch.json
@@ -0,0 +1,9 @@
+{
+ "version" : "1.0",
+ "configurations" : [
+ {
+ "playground" : "standard",
+ "type" : "uni-app:app-android"
+ }
+ ]
+}
diff --git a/tax-guidance/api/index.js b/tax-guidance/api/index.js
new file mode 100644
index 0000000..bec4ddb
--- /dev/null
+++ b/tax-guidance/api/index.js
@@ -0,0 +1,51 @@
+// api/index.js
+import request from '@/utils/request.js'
+
+// 登录接口
+export const userLogin = (loginData) => {
+ return request({
+ url: '/v1/auth/login',
+ method: 'POST',
+ data: loginData,
+ withToken: false // 登录请求本身通常不需要Token
+ })
+}
+
+// 今日进厅数据
+export const getdailyEntry = (params) => {
+ return request({
+ url: '/v1/daily-entry/list',
+ method: 'get',
+ data: params,
+ withToken: true // 登录请求本身通常不需要Token
+ })
+}
+
+// 获取今日预约
+export const getAppointmentToday = (params) => {
+ return request({
+ url: '/v1/appointment/today',
+ method: 'get',
+ data: params,
+ withToken: true // 登录请求本身通常不需要Token
+ })
+}
+
+// 票号管理
+export const getTicket = (params) => {
+ return request({
+ url: '/v1/ticket/today_unified_tickets',
+ method: 'get',
+ data: params,
+ withToken: true // 登录请求本身通常不需要Token
+ })
+}
+
+// 获取业务列表
+export const getBizList = () => {
+ return request({
+ url: '/v1/business',
+ method: 'get',
+ withToken: true // 登录请求本身通常不需要Token
+ })
+}
\ No newline at end of file
diff --git a/tax-guidance/components/IDCardInput.vue b/tax-guidance/components/IDCardInput.vue
new file mode 100644
index 0000000..45e96fa
--- /dev/null
+++ b/tax-guidance/components/IDCardInput.vue
@@ -0,0 +1,119 @@
+
+
+
+
+ ×
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tax-guidance/components/QueueTicketDetail/QueueTicketDetail.type.ts b/tax-guidance/components/QueueTicketDetail/QueueTicketDetail.type.ts
new file mode 100644
index 0000000..ec9eeef
--- /dev/null
+++ b/tax-guidance/components/QueueTicketDetail/QueueTicketDetail.type.ts
@@ -0,0 +1,62 @@
+// components/QueueTicketDetail/QueueTicketDetail.type.ts
+
+// 票号状态枚举
+export enum TicketStatus {
+ WAITING = 'waiting',
+ PROCESSING = 'processing',
+ COMPLETED = 'completed',
+ CANCELLED = 'cancelled'
+}
+
+// 评价结果枚举
+export enum RatingResult {
+ EXCELLENT = 'excellent',
+ GOOD = 'good',
+ AVERAGE = 'average',
+ POOR = 'poor'
+}
+
+// 票号详情数据类型
+export interface TicketDetail {
+ ticketNumber: string;
+ status: TicketStatus;
+ queueDate: string;
+ queueTime: string;
+ serviceWindow: string;
+ businessType: string;
+ staffName: string;
+ waitingDuration: string;
+ processingDuration: string;
+ rating?: RatingResult;
+ ratingPerson?: string;
+ ratingContact?: string;
+}
+
+// 组件Props类型定义
+export interface QueueTicketDetailProps {
+ show: boolean;
+ ticketData?: TicketDetail;
+ title?: string;
+}
+
+// 组件Emits类型定义
+export interface QueueTicketDetailEmits {
+ (e: 'update:show', value: boolean): void;
+ (e: 'close'): void;
+}
+
+// 默认票号数据导出
+export const defaultTicketData: TicketDetail = {
+ ticketNumber: 'A001',
+ status: TicketStatus.COMPLETED,
+ queueDate: '2024-01-15',
+ queueTime: '09:30:25',
+ serviceWindow: '3号窗口',
+ businessType: '税务登记',
+ staffName: '张税务师',
+ waitingDuration: '15分钟',
+ processingDuration: '8分钟',
+ rating: RatingResult.EXCELLENT,
+ ratingPerson: '李先生',
+ ratingContact: '138****8888'
+};
\ No newline at end of file
diff --git a/tax-guidance/components/QueueTicketDetail/QueueTicketDetail.vue b/tax-guidance/components/QueueTicketDetail/QueueTicketDetail.vue
new file mode 100644
index 0000000..deb0ff4
--- /dev/null
+++ b/tax-guidance/components/QueueTicketDetail/QueueTicketDetail.vue
@@ -0,0 +1,564 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 票号
+ {{ ticketData.ticketNumber }}
+
+
+ 状态
+
+ {{ getStatusText(ticketData.status) }}
+
+
+
+
+
+
+
+
+
+
+
+ 取号日期
+ {{ ticketData.queueDate }}
+
+
+ 取号时间
+ {{ ticketData.queueTime }}
+
+
+ 等候时长
+ {{ ticketData.waitingDuration }}
+
+
+ 办理时长
+ {{ ticketData.processingDuration }}
+
+
+
+
+
+
+
+
+
+
+ 办理窗口
+ {{ ticketData.serviceWindow }}
+
+
+ 办理业务
+ {{ ticketData.businessType }}
+
+
+ 工作人员
+ {{ ticketData.staffName }}
+
+
+
+
+
+
+
+
+
+
+
+ ★
+
+ {{ getRatingText(ticketData.rating) }}
+
+
+
+
+
+ 评价人
+ {{ ticketData.ratingPerson }}
+
+
+ 联系方式
+ {{ ticketData.ratingContact }}
+
+
+
+
+
+
+
+ 💬
+ 暂未收到评价
+ 服务完成后可进行评价
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tax-guidance/components/QueueTicketDetail/index.ts b/tax-guidance/components/QueueTicketDetail/index.ts
new file mode 100644
index 0000000..f3149a6
--- /dev/null
+++ b/tax-guidance/components/QueueTicketDetail/index.ts
@@ -0,0 +1,4 @@
+// components/QueueTicketDetail/index.ts
+export { default as QueueTicketDetail } from './QueueTicketDetail.vue';
+export type * from './QueueTicketDetail.type';
+export { TicketStatus, RatingResult, defaultTicketData } from './QueueTicketDetail.type';
\ No newline at end of file
diff --git a/tax-guidance/components/TaxHealthReport/TaxHealthReport.type.ts b/tax-guidance/components/TaxHealthReport/TaxHealthReport.type.ts
new file mode 100644
index 0000000..cbb1f85
--- /dev/null
+++ b/tax-guidance/components/TaxHealthReport/TaxHealthReport.type.ts
@@ -0,0 +1,123 @@
+// components/TaxHealthReport/TaxHealthReport.type.ts
+
+// 报告数据结构类型定义
+export interface TaxRegistrationData {
+ basicInfoConsistency: string;
+ taxTypeMatch: string;
+}
+
+export interface VatDeclarationData {
+ incomeConsistency: string;
+ taxBurdenRate: string;
+}
+
+export interface CorporateTaxData {
+ costRate: string;
+ lossContinuity: string;
+}
+
+export interface DeclarationData {
+ vat: VatDeclarationData;
+ corporateTax: CorporateTaxData;
+}
+
+export interface UpstreamInvoiceData {
+ supplierStatus: string;
+ businessConsistency: string;
+}
+
+export interface DownstreamInvoiceData {
+ issuingPattern: string;
+ inputOutputMatch: string;
+}
+
+export interface InvoiceData {
+ upstream: UpstreamInvoiceData;
+ downstream: DownstreamInvoiceData;
+}
+
+export interface SpecialRisksData {
+ relatedPartyPricing: string;
+ taxIncentives: string;
+ assetDisposal: string;
+}
+
+export interface ReportData {
+ registration: TaxRegistrationData;
+ declaration: DeclarationData;
+ invoice: InvoiceData;
+ specialRisks: SpecialRisksData;
+ materials: string[];
+}
+
+// 组件Props类型定义
+export interface TaxHealthReportProps {
+ show: boolean;
+ reportData?: ReportData;
+ title?: string;
+}
+
+// 组件Emits类型定义
+export interface TaxHealthReportEmits {
+ (e: 'update:show', value: boolean): void;
+ (e: 'close'): void;
+ (e: 'confirm'): void;
+}
+
+// 企业基本信息类型
+export interface CompanyInfo {
+ name: string;
+ legalRepresentative: string;
+ registeredCapital: string;
+ establishmentDate: string;
+ creditCode: string;
+ phone: string;
+ email: string;
+ address: string;
+}
+
+// 组件Props类型定义(更新)
+export interface TaxHealthReportProps {
+ show: boolean;
+ title?: string;
+ companyInfo?: CompanyInfo; // 新增企业信息参数
+}
+
+// 默认报告数据导出
+export const defaultReportData: ReportData = {
+ registration: {
+ basicInfoConsistency: '税务登记信息与营业执照一致',
+ taxTypeMatch: '税种认定与业务基本匹配,建议复核小规模纳税人认定'
+ },
+ declaration: {
+ vat: {
+ incomeConsistency: '增值税与企业所得税申报收入差异在合理范围内',
+ taxBurdenRate: '近3个月税负率3.2%,与行业均值基本持平'
+ },
+ corporateTax: {
+ costRate: '成本费用率68%,处于制造业合理区间',
+ lossContinuity: '近3年无连续亏损情况'
+ }
+ },
+ invoice: {
+ upstream: {
+ supplierStatus: '主要供应商状态正常,未发现异常户',
+ businessConsistency: '发票内容与实际业务基本一致'
+ },
+ downstream: {
+ issuingPattern: '未发现大额整数开票等异常模式',
+ inputOutputMatch: '进销项匹配度良好,个别月份需关注'
+ }
+ },
+ specialRisks: {
+ relatedPartyPricing: '关联交易价格符合独立交易原则',
+ taxIncentives: '高新技术企业资质维护良好,研发费用占比达标',
+ assetDisposal: '固定资产处置程序合规,相关备案完整'
+ },
+ materials: [
+ '近三年审计报告及财务报表',
+ '各税种纳税申报表及完税凭证',
+ '进项发票与销项发票明细数据',
+ '税收优惠资格认定文件'
+ ]
+};
\ No newline at end of file
diff --git a/tax-guidance/components/TaxHealthReport/TaxHealthReport.vue b/tax-guidance/components/TaxHealthReport/TaxHealthReport.vue
new file mode 100644
index 0000000..f5ecfce
--- /dev/null
+++ b/tax-guidance/components/TaxHealthReport/TaxHealthReport.vue
@@ -0,0 +1,814 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 企业名称
+ {{ companyInfo.name }}
+
+
+ 法定代表人
+ {{ companyInfo.legalRepresentative }}
+
+
+
+
+
+ 注册资本
+ {{ companyInfo.registeredCapital }}
+
+
+ 成立日期
+ {{ companyInfo.establishmentDate }}
+
+
+
+
+
+ 统一社会信用代码
+ {{ companyInfo.creditCode }}
+
+
+
+
+
+ 联系电话
+ {{ companyInfo.phone }}
+
+
+ 邮箱地址
+ {{ companyInfo.email }}
+
+
+
+
+
+ 注册地址
+ {{ companyInfo.address }}
+
+
+
+
+
+
+
+
+
+ 85
+ 健康度
+
+
+
+
+ 4
+ 检查项目
+
+
+ 3
+ 低风险
+
+
+ 1
+ 需关注
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 信息匹配度 90%
+
+
+
+
+
+
+ 企业名称、地址、法人等信息与营业执照一致
+
+
+
+
+ 增值税纳税人类型与业务规模匹配,建议复核小规模纳税人认定
+
+
+
+
+
+
+
+
+
+
+
+
+ 增值税申报
+
+
+
+
+ 收入一致性 85%
+
+
+ • 税负率: 3.2% (行业平均: 3.5%)
+ • 申报差异: 在合理范围内
+
+
+
+
+ 企业所得税申报
+
+
+
+
+ 成本合理性 78%
+
+
+ • 成本费用率: 68%
+ • 制造业合理区间: 60%-80%
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 📥
+ 上游发票合规性
+ 正常
+ 供应商状态正常,业务一致
+
+
+
+ 📤
+ 下游开票合规性
+ 正常
+ 开票模式合理,进销匹配
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 符合独立交易原则
+
+
+
+
+ 高新技术企业资质有效
+
+
+
+
+ 固定资产处置程序完整
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tax-guidance/components/TaxHealthReport/TaxReportItem.vue b/tax-guidance/components/TaxHealthReport/TaxReportItem.vue
new file mode 100644
index 0000000..61d703a
--- /dev/null
+++ b/tax-guidance/components/TaxHealthReport/TaxReportItem.vue
@@ -0,0 +1,35 @@
+
+
+
+ {{ label }}
+ {{ value }}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tax-guidance/components/TaxHealthReport/TaxReportSection.vue b/tax-guidance/components/TaxHealthReport/TaxReportSection.vue
new file mode 100644
index 0000000..4072551
--- /dev/null
+++ b/tax-guidance/components/TaxHealthReport/TaxReportSection.vue
@@ -0,0 +1,37 @@
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tax-guidance/components/TaxHealthReport/TaxReportSubsection.vue b/tax-guidance/components/TaxHealthReport/TaxReportSubsection.vue
new file mode 100644
index 0000000..b095fce
--- /dev/null
+++ b/tax-guidance/components/TaxHealthReport/TaxReportSubsection.vue
@@ -0,0 +1,37 @@
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tax-guidance/components/TaxHealthReport/index.ts b/tax-guidance/components/TaxHealthReport/index.ts
new file mode 100644
index 0000000..9e61b30
--- /dev/null
+++ b/tax-guidance/components/TaxHealthReport/index.ts
@@ -0,0 +1,4 @@
+// components/TaxHealthReport/index.ts
+export { default as TaxHealthReport } from './TaxHealthReport.vue';
+export type * from './TaxHealthReport.type';
+export { defaultReportData } from './TaxHealthReport.type';
\ No newline at end of file
diff --git a/tax-guidance/harmony-configs/AppScopes/resources/base/element/string.json b/tax-guidance/harmony-configs/AppScopes/resources/base/element/string.json
new file mode 100644
index 0000000..44954c0
--- /dev/null
+++ b/tax-guidance/harmony-configs/AppScopes/resources/base/element/string.json
@@ -0,0 +1,20 @@
+{
+ "string": [
+ {
+ "name": "app_name",
+ "value": "应用名称"
+ },
+ {
+ "name": "agcit_agc_common_uniapp",
+ "value": "1.0.0"
+ },
+ {
+ "name": "agcittype_agc_common_uniapp",
+ "value": "industryTemplate"
+ },
+ {
+ "name": "agcittype_agc_common_uniapp_plugin",
+ "value": "AI Plugin"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/tax-guidance/pages/index/index.vue b/tax-guidance/pages/index/index.vue
index 5185dd5..0e157e9 100644
--- a/tax-guidance/pages/index/index.vue
+++ b/tax-guidance/pages/index/index.vue
@@ -44,21 +44,21 @@
+
diff --git a/tax-guidance/pages/mod/guidance.vue b/tax-guidance/pages/mod/guidance.vue
new file mode 100644
index 0000000..e0cdff7
--- /dev/null
+++ b/tax-guidance/pages/mod/guidance.vue
@@ -0,0 +1,638 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查询
+
+
+ 返回
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+ 截止日期:{{ item.deadline }}
+
+
+
+ 引导办理
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 企业名称:
+ {{ enterpriseInfo.name }}
+
+
+ 纳税人识别号:
+ {{ enterpriseInfo.taxId }}
+
+
+ 企业类型:
+ {{ enterpriseInfo.type }}
+
+
+ 注册地址:
+ {{ enterpriseInfo.address }}
+
+
+ 法定代表人:
+ {{ enterpriseInfo.legalPerson }}
+
+
+
+
+
+
+
+
+
+
+
+
+ 综合健康评分
+
+ {{ taxHealth.score }}
+ 分
+
+
+ {{ taxHealth.level }}
+
+
+
+
+
+ 各项指标
+
+
+
+
+
+
+
+
+
+
+ 未找到相关企业信息
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tax-guidance/pages/mod/hallInfo.vue b/tax-guidance/pages/mod/hallInfo.vue
new file mode 100644
index 0000000..143f543
--- /dev/null
+++ b/tax-guidance/pages/mod/hallInfo.vue
@@ -0,0 +1,723 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 人工服务窗口
+
+
+
+
+
+ {{ window.type }}
+ 等候: {{ window.waitingCount }}人
+
+
+
+ 当前: {{ window.currentTask }}
+
+ 暂无业务
+
+
+
+
+
+
+
+
+
+ 自助办税设备
+
+
+
+
+
+
+
+ {{ device.name }}
+
+ {{ getDeviceStatusText(device.status) }}
+
+
+ 使用中
+
+
+ 空闲
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tax-guidance/pages/mod/hallManagment.vue b/tax-guidance/pages/mod/hallManagment.vue
new file mode 100644
index 0000000..250ee83
--- /dev/null
+++ b/tax-guidance/pages/mod/hallManagment.vue
@@ -0,0 +1,575 @@
+
+
+
+
+
+
+
+
+
+
+ 参数名称
+ 参数值
+ 操作
+
+
+
+ {{ param.name }}
+
+
+
+ {{ param.value }}
+ {{ param.unit }}
+
+
+
+
+
+
+
+
+ 编辑
+
+
+
+ 保存
+
+
+ 取消
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tax-guidance/pages/mod/manager.vue b/tax-guidance/pages/mod/manager.vue
new file mode 100644
index 0000000..ef6718c
--- /dev/null
+++ b/tax-guidance/pages/mod/manager.vue
@@ -0,0 +1,637 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+
+
+ 返回
+
+
+
+
+
+
+
+
+
+
+
+
+ 姓名
+ 工号
+ 负责区域
+ 联系方式
+ 在岗状态
+ 操作
+
+
+
+
+
+ {{ member.name }}
+
+
+ {{ member.workNumber }}
+
+ {{ member.area }}
+
+
+
+ {{ member.phone }}
+ {{ member.email }}
+
+
+
+
+ {{ getStatusText(member.status) }}
+
+
+
+
+ 查看详情
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tax-guidance/pages/mod/multiInOne.vue b/tax-guidance/pages/mod/multiInOne.vue
new file mode 100644
index 0000000..6388729
--- /dev/null
+++ b/tax-guidance/pages/mod/multiInOne.vue
@@ -0,0 +1,916 @@
+
+
+
+
+
+
+
+
+
+
+
+ 查询
+
+
+ 返回
+
+
+
+
+
+
+
+
+
+
+
+
+ 登记信息
+
+ 纳税人名称:
+ {{ taxPayerInfo.name }}
+
+
+ 纳税人识别号:
+ {{ taxPayerInfo.taxId }}
+
+
+ 登记注册类型:
+ {{ taxPayerInfo.registerType }}
+
+
+ 行业类型:
+ {{ taxPayerInfo.industry }}
+
+
+ 主管税务机关:
+ {{ taxPayerInfo.taxAuthority }}
+
+
+
+
+ 人员信息
+
+ 法定代表人:
+ {{ taxPayerInfo.legalPerson }}
+
+
+ 财务负责人:
+ {{ taxPayerInfo.financialManager }}
+
+
+ 办税人员:
+ {{ taxPayerInfo.taxAgent }}
+
+
+ 联系电话:
+ {{ taxPayerInfo.contactPhone }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ period.label }}
+
+
+
+
+
+ 税款所属期
+ 税种
+ 申报期限
+ 申报状态
+ 应纳税额
+ 已缴税额
+ 操作
+
+
+ {{ record.taxPeriod }}
+ {{ record.taxType }}
+ {{ record.deadline }}
+
+
+ {{ record.status }}
+
+
+ ¥{{ record.taxPayable }}
+ ¥{{ record.taxPaid }}
+
+
+ 查看
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 资产负债表
+
+
+ 资产项目
+ 期末余额
+ 负债和权益项目
+ 期末余额
+
+
+ {{ item.assetItem }}
+ {{ item.assetAmount }}
+ {{ item.liabilityItem }}
+ {{ item.liabilityAmount }}
+
+
+
+
+
+ 利润表
+
+
+ 项目
+ 本期金额
+ 上期金额
+
+
+ {{ item.item }}
+ {{ item.currentAmount }}
+ {{ item.previousAmount }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ invoiceStats.totalIssued }}
+ 累计开具
+
+
+ {{ invoiceStats.totalReceived }}
+ 累计取得
+
+
+ {{ invoiceStats.creditAmount }}万
+ 进项税额
+
+
+ {{ invoiceStats.taxAmount }}万
+ 销项税额
+
+
+
+
+
+ 查看开票记录
+
+
+ 查看收票记录
+
+
+ 发票查验
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ indicator.name }}
+
+
+
+ {{ indicator.value }}%
+
+
+
+
+ 评估说明
+ {{ taxAssessment.notes }}
+
+
+
+ 处理建议
+ {{ taxAssessment.suggestions }}
+
+
+
+
+
+
+
+
+ 未找到对应的纳税人信息
+ 请检查查询条件是否正确
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tax-guidance/pages/mod/pushMessage.vue b/tax-guidance/pages/mod/pushMessage.vue
new file mode 100644
index 0000000..4ab14ae
--- /dev/null
+++ b/tax-guidance/pages/mod/pushMessage.vue
@@ -0,0 +1,175 @@
+
+
+
+
+
+
+ 推送目标
+
+ 全部
+ 呼号端
+ 自助机
+ 综合屏
+
+
+
+
+
+
+
+
+
+
+ 推送内容
+
+
+
+
+
+
+
+ {{ loading ? '推送中...' : '立即推送' }}
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tax-guidance/pages/queue/business-select.vue b/tax-guidance/pages/queue/business-select.vue
new file mode 100644
index 0000000..62709ee
--- /dev/null
+++ b/tax-guidance/pages/queue/business-select.vue
@@ -0,0 +1,437 @@
+
+
+
+
+
+ 您好,{{ userName }}
+ 请选择需要办理的业务类型
+
+
+
+
+
+ {{ item.icon }}
+
+ {{ item.name }}
+ {{ item.description }}
+
+
+ ✓
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tax-guidance/pages/queue/index.vue b/tax-guidance/pages/queue/index.vue
new file mode 100644
index 0000000..f6f5c0f
--- /dev/null
+++ b/tax-guidance/pages/queue/index.vue
@@ -0,0 +1,433 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tax-guidance/pages/table/appointment.vue b/tax-guidance/pages/table/appointment.vue
new file mode 100644
index 0000000..cfa53d1
--- /dev/null
+++ b/tax-guidance/pages/table/appointment.vue
@@ -0,0 +1,285 @@
+
+
+
+
+
+
+
+ 返回
+
+
+
+
+
+
+ 时间
+ 预约票号
+ 姓名
+ 手机号码
+ 业务类型
+ 预约时段
+ 状态
+
+
+ {{ item.date }}
+ {{ item.ticketNumber }}
+ {{ item.customerName }}
+ {{ item.phone }}
+ {{ item.businessType }}
+ {{ item.timeRange }}
+ {{ item.status }}
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tax-guidance/pages/table/dailyEntry.vue b/tax-guidance/pages/table/dailyEntry.vue
new file mode 100644
index 0000000..8b59360
--- /dev/null
+++ b/tax-guidance/pages/table/dailyEntry.vue
@@ -0,0 +1,277 @@
+
+
+
+
+
+
+
+ 返回
+
+
+
+
+
+
+ 时间
+ 票号
+ 姓名
+ 身份证
+ 业务类型
+ 办理状态
+
+
+ {{ item.time }}
+ {{ item.ticketNumber }}
+ {{ item.customerName }}
+ {{ item.idCard }}
+ {{ item.businessType }}
+ {{ item.status }}
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tax-guidance/pages/table/ticket.vue b/tax-guidance/pages/table/ticket.vue
new file mode 100644
index 0000000..140b8c4
--- /dev/null
+++ b/tax-guidance/pages/table/ticket.vue
@@ -0,0 +1,472 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 返回
+
+
+
+
+
+
+ 公司名称
+ 姓名
+ 手机号码
+ 业务类型
+ 办理状态
+ 操作
+
+
+
+ {{ item.companyName }}
+
+
+ {{ item.customerName+'('+item.roleType+')' }}
+ {{ item.phoneNumber }}
+ {{ item.bizName }}
+
+ {{ item.tktId }}
+ {{ '('+item.status+')' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tax-guidance/utils/request.js b/tax-guidance/utils/request.js
new file mode 100644
index 0000000..477dcd4
--- /dev/null
+++ b/tax-guidance/utils/request.js
@@ -0,0 +1,82 @@
+// utils/request.js
+import {
+ ref
+} from 'vue'
+const baseURL = 'http://padapi.queuingsystem.cn/pad-api' // 替换为你的基础URL
+
+// 全局加载状态,可根据需要在使用页面绑定
+export const loading = ref(false)
+
+const request = (options) => {
+ // 解构参数,并设置默认值
+ const {
+ url,
+ method = 'GET',
+ data = {},
+ withToken = true, // 默认携带Token
+ loading: showLoading = true, // 默认显示loading
+ loadingText = '加载中...'
+ } = options
+
+ return new Promise((resolve, reject) => {
+ // 请求开始,显示loading
+ if (showLoading) {
+ loading.value = true
+ uni.showLoading({
+ title: loadingText,
+ mask: true
+ })
+ }
+
+ // 发起请求
+ uni.request({
+ url: baseURL + url,
+ method,
+ data,
+ header: {
+ 'Content-Type': 'application/json',
+ // 根据配置决定是否携带Token
+ ...(withToken && {
+ 'Authorization': `Bearer ${uni.getStorageSync('token')}`
+ })
+ },
+ success: (res) => {
+ console.log(res)
+ // 此处可根据后端返回结构调整
+ if (res.statusCode === 200) {
+ resolve(res.data)
+ } else if (res.statusCode === 400) {
+ // HTTP状态码错误处理
+ uni.showToast({
+ title: `请求参数错误: ${res.statusCode}`,
+ icon: 'none'
+ })
+ reject(res)
+ } else if (res.statusCode === 401) {
+ // HTTP状态码错误处理
+ uni.showToast({
+ title: `用户名或密码错误: ${res.statusCode}`,
+ icon: 'none'
+ })
+ reject(res)
+ }
+ },
+ fail: (err) => {
+ uni.showToast({
+ title: '网络请求失败',
+ icon: 'none'
+ })
+ reject(err)
+ },
+ complete: () => {
+ // 隐藏loading
+ if (showLoading) {
+ loading.value = false
+ uni.hideLoading()
+ }
+ }
+ })
+ })
+}
+
+export default request
\ No newline at end of file
diff --git a/tax-guidance/utils/validator.js b/tax-guidance/utils/validator.js
new file mode 100644
index 0000000..1633b39
--- /dev/null
+++ b/tax-guidance/utils/validator.js
@@ -0,0 +1,59 @@
+// utils/validator.js
+
+// 验证中文姓名(2-10个汉字)
+export const validateChineseName = (name) => {
+ if (!name) {
+ return { valid: false, message: '姓名不能为空' };
+ }
+
+ const reg = /^[\u4e00-\u9fa5]{2,10}$/;
+ if (!reg.test(name)) {
+ return { valid: false, message: '请输入2-10个汉字' };
+ }
+
+ return { valid: true, message: '' };
+};
+
+// 验证手机号码
+export const validatePhoneNumber = (phone) => {
+ if (!phone) {
+ return { valid: false, message: '手机号码不能为空' };
+ }
+
+ const reg = /^1[3-9]\d{9}$/;
+ if (!reg.test(phone)) {
+ return { valid: false, message: '请输入正确的手机号码' };
+ }
+
+ return { valid: true, message: '' };
+};
+
+// 验证身份证号码
+export const validateIDCard = (idCard) => {
+ if (!idCard) {
+ return { valid: false, message: '身份证号码不能为空' };
+ }
+
+ // 基本格式验证
+ const reg = /^[1-9]\d{5}(19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
+ if (!reg.test(idCard)) {
+ return { valid: false, message: '身份证格式不正确' };
+ }
+
+ // 校验码验证
+ const idCardArray = idCard.split('');
+ const factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
+ const parity = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
+
+ let sum = 0;
+ for (let i = 0; i < 17; i++) {
+ sum += parseInt(idCardArray[i]) * factor[i];
+ }
+
+ const mod = sum % 11;
+ if (parity[mod] !== idCardArray[17].toUpperCase()) {
+ return { valid: false, message: '身份证校验码错误' };
+ }
+
+ return { valid: true, message: '' };
+};
\ No newline at end of file
diff --git a/ticket-client/.gitignore b/ticket-client/.gitignore
new file mode 100644
index 0000000..a547bf3
--- /dev/null
+++ b/ticket-client/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/ticket-client/.npmrc b/ticket-client/.npmrc
new file mode 100644
index 0000000..120059a
--- /dev/null
+++ b/ticket-client/.npmrc
@@ -0,0 +1,3 @@
+electron_mirror=https://npmmirror.com/mirrors/electron/
+electron_builder_binaries_mirror=https://npmmirror.com/mirrors/electron-builder-binaries/
+shamefully-hoist=true
\ No newline at end of file
diff --git a/ticket-client/.vscode/extensions.json b/ticket-client/.vscode/extensions.json
new file mode 100644
index 0000000..a7cea0b
--- /dev/null
+++ b/ticket-client/.vscode/extensions.json
@@ -0,0 +1,3 @@
+{
+ "recommendations": ["Vue.volar"]
+}
diff --git a/ticket-client/README.md b/ticket-client/README.md
new file mode 100644
index 0000000..33895ab
--- /dev/null
+++ b/ticket-client/README.md
@@ -0,0 +1,5 @@
+# Vue 3 + TypeScript + Vite
+
+This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 `
+