| | |
| | | <template> |
| | | SKIP/CHECK (0): TYPE_LABELS upper <template> |
| | | <el-container direction="vertical"> |
| | | <app-header title="交通统计报表审核系统 - 数据导入"></app-header> |
| | | <el-container> |
| | |
| | | <div class="card-head">选择数据类型</div> |
| | | <div class="module-tabs-head"> |
| | | <el-radio-group v-model="activeModule" size="small" @change="onModuleSwitch"> |
| | | <el-radio-button v-for="g in groups" :key="g.key" :label="g.key">{{ g.name }}</el-radio-button> |
| | | <el-radio-button v-for="g in visibleGroups" :key="g.key" :label="g.key">{{ g.name }}</el-radio-button> |
| | | </el-radio-group> |
| | | </div> |
| | | <div v-for="g in groups" :key="g.key" v-show="activeModule === g.key" class="module-tab-pane"> |
| | | <div v-for="g in visibleGroups" :key="g.key" v-show="activeModule === g.key" class="module-tab-pane"> |
| | | <div class="module-sel"> |
| | | <div class="module-sel-row"> |
| | | <el-select v-model="moduleSel[g.key]" placeholder="选择数据类型" style="width:260px" |
| | |
| | | </div> |
| | | <div v-if="!period" class="tip">请先在上方选择报表期</div> |
| | | <div v-else class="overview-grid"> |
| | | <div class="ov-row" v-for="g in groups" :key="g.key"> |
| | | <div class="ov-row" v-for="g in visibleGroups" :key="g.key"> |
| | | <div class="ov-group">{{ g.name }}</div> |
| | | <div class="ov-item" v-for="t in g.types" :key="t.value" :class="overviewState(t.value).cls"> |
| | | <div class="ov-name">{{ t.label }}</div> |
| | |
| | | investCityPassenger: '市州单表(客运站场)', investCityLogistics: '市州单表(物流园区)', |
| | | 'INVEST_客运站场_CITY': '市州单表(客运站场)', 'INVEST_物流园区_CITY': '市州单表(物流园区)', |
| | | cityBus: '城市公交月报', cityTaxi: '巡游出租月报', cityTaxiAuth: '出租车运政车辆', |
| | | wycTotal: '网约车总数', wycOrder: '网约车订单及全省总量', |
| | | H2032: 'H203-2月报', H2031: 'H203-1旅客月报', H204: 'H204能耗季报', PASSENGER_AUTH: '旅客运政车辆数', |
| | | PASSENGER_INDIVIDUAL: '个体客运量/周转量', ENERGY_AUTH: '能耗车辆运政信息', TRANSPORT_AUTH: '运政车辆', |
| | | TRACK_MILEAGE: '轨迹里程', SCALE_SPLIT: '规上规下拆分', FREIGHT_TURNOVER: '货运量周转量', |
| | | INVEST_SYSTEM: '投资系统导出', CITY_BUS: '城市公交月报', CITY_TAXI: '巡游出租月报', CITY_TAXI_AUTH: '出租车运政车辆' |
| | | INVEST_SYSTEM: '投资系统导出', CITY_BUS: '城市公交月报', CITY_TAXI: '巡游出租月报', CITY_TAXI_AUTH: '出租车运政车辆', WYC_TOTAL: '网约车总数', WYC_ORDER: '网约车订单及全省总量' |
| | | } |
| | | const BATCH_TYPE_MAP = { |
| | | H2032: 'h2032', TRANSPORT_AUTH: 'transportAuth', TRACK_MILEAGE: 'trackMileage', |
| | |
| | | H2031: 'passengerMonthly', PASSENGER_AUTH: 'passengerAuth', PASSENGER_INDIVIDUAL: 'passengerIndividual', |
| | | H204: 'energyMonthly', ENERGY_AUTH: 'energyAuth', |
| | | CITY_BUS: 'cityBus', CITY_TAXI: 'cityTaxi', CITY_TAXI_AUTH: 'cityTaxiAuth', |
| | | WYC_TOTAL: 'wycTotal', WYC_ORDER: 'wycOrder', |
| | | INVEST_SYSTEM: 'investmentSystem' |
| | | } |
| | | export default { |
| | |
| | | key: 'city', name: '城市客运', types: [ |
| | | { value: 'cityBus', label: '城市公共交通月度运营情况' }, |
| | | { value: 'cityTaxi', label: '巡游出租汽车运营服务情况月报' }, |
| | | { value: 'cityTaxiAuth', label: '出租车运政车辆' } |
| | | { value: 'cityTaxiAuth', label: '出租车运政车辆' }, |
| | | { value: 'wycTotal', label: '网约车总数' }, |
| | | { value: 'wycOrder', label: '网约车订单及全省总量' } |
| | | ] |
| | | }, |
| | | { |
| | |
| | | ] |
| | | }, |
| | | { |
| | | key: 'annual', name: '年报', types: [ |
| | | key: 'annual', hidden: true, name: '年报', types: [ |
| | | { value: 'annualCompanyBasic', label: '单位基本情况' }, |
| | | { value: 'annualEnterpriseFinance', label: '法人企业财务状况' }, |
| | | { value: 'annualPassengerEnergy', label: '公路旅客运输能源消耗情况' }, |
| | |
| | | } |
| | | }, |
| | | computed: { |
| | | // 年报暂不开放:隐藏入口(数据保留,后端实现后可移除 hidden) |
| | | visibleGroups() { return this.groups.filter(g => !g.hidden) }, |
| | | failBatches() { return this.batches.filter(b => b.failRows > 0) }, |
| | | failRowsFlat() { |
| | | const out = [] |
| | |
| | | scaleSplit: '模板_规上规下拆分运输量.xlsx', |
| | | freightTurnover: '模板_货运量周转量.xlsx', |
| | | passengerMonthly: '公路旅客运输月度生产情况.xlsx(含运政车辆数sheet)', |
| | | passengerAuth: '模板_公路旅客运政车辆数.xlsx(列:企业代码/企业名称/车辆数/载客位数)', |
| | | passengerAuth: '模板_公路旅客运政车辆数.xls(支持 企业代码/企业名称/车辆数/载客位数 与 运政库导出 OWNERNAME/总车辆数/客位数)', |
| | | passengerIndividual: '个体客运量汇总.xlsx(列:所属地区/企业代码/企业名称/个体客运量/个体旅客周转量)', |
| | | energyMonthly: '道路货运车辆能源消耗情况(2026年).xlsx(能耗明细+运政车辆信息两sheet)', |
| | | energyAuth: '模板_能耗车辆运政信息.xlsx(列:车牌号/车辆类型/燃料类型/标记吨位/准牵引质量)', |
| | |
| | | investCityLogistics: '—(批量扫描目录,无需模板)', |
| | | cityBus: '导入_城市公共交通月度运营情况(YYYY年M月).xls/.xlsx(企业级明细,取公共汽电车字段)', |
| | | cityTaxi: '导入_巡游出租汽车运营服务情况月报(YYYY年M月).xls(市州级17行)', |
| | | cityTaxiAuth: '导入模板_出租车信息(运政车辆信息).xlsx(车辆级明细,用于运营车数对比)' |
| | | cityTaxiAuth: '导入模板_出租车信息(运政车辆信息).xlsx(车辆级明细,用于运营车数对比)', |
| | | wycTotal: '模板_网约车总数.xlsx(A列=月份,B-E=全省客运量/城市内/周转量/城市内周转量)', |
| | | wycOrder: '模板_网约车订单及全省总量.xlsx(A列=月份,B-E=全省pin,F=订单合计,G-W=17市州订单)' |
| | | } |
| | | return map[this.importType] || '' |
| | | }, |
| | |
| | | scaleSplit: '货运/模板_规上规下拆分运输量.xlsx', |
| | | freightTurnover: '货运/模板_货运量周转量.xlsx', |
| | | passengerMonthly: '公路旅客/模板_交企统H203-1表_公路旅客运输月度生产情况.xlsx', |
| | | passengerAuth: '公路旅客/模板_公路旅客运政车辆数.xlsx', |
| | | passengerAuth: '公路旅客/模板_公路旅客运政车辆数.xls', |
| | | passengerIndividual: '公路旅客/个体客运量汇总.xlsx', |
| | | energyMonthly: '能耗/模板_道路货运车辆能源消耗情况(2026).xlsx', |
| | | energyAuth: '能耗/模板_能耗车辆运政信息.xlsx', |
| | | cityBus: '城市客运/导入模板_城市公交.xlsx', |
| | | cityTaxi: '城市客运/导入模板_巡游出租.xlsx', |
| | | cityBus: '城市客运/生成_城市公交客运量分市州明细.xlsx', |
| | | cityTaxi: '城市客运/生成_巡游出租客运量分市州明细.xlsx', |
| | | cityTaxiAuth: '城市客运/导入模板_出租车信息(运政车辆信息).xlsx', |
| | | wycTotal: '城市客运/模板_网约车总数.xlsx', |
| | | wycOrder: '城市客运/模板_网约车订单及全省总量.xlsx', |
| | | investment: '投资/输入/客运(客运站)/更新_7月客运站投资明细表(市州汇总大表,给领导).xlsx', |
| | | investmentLogistics: '投资/输入/物流(物流园区)/更新_7月物流站场投资明细.xls', |
| | | investmentSystem: '投资/模板_查询结果(投资系统-客运+物流 2026.7).xls' |
| | |
| | | investmentSystem: '/import/investmentSystem', |
| | | cityBus: '/import/cityBus', |
| | | cityTaxi: '/import/cityTaxi', |
| | | cityTaxiAuth: '/import/cityTaxiAuth' |
| | | cityTaxiAuth: '/import/cityTaxiAuth', |
| | | wycTotal: '/import/wycTotal', |
| | | wycOrder: '/import/wycOrder' |
| | | } |
| | | return map[t] || '' |
| | | }, |
| | |
| | | message: '' |
| | | } |
| | | this.importOne(row).then(() => { |
| | | this.showImportResult(row) |
| | | if ((row.type === 'investment' || row.type === 'investmentLogistics') && row.status === 'success') { |
| | | this.checkInvest(this.period) |
| | | } |
| | |
| | | }) |
| | | .finally(() => { this.cityDirLoading = false }) |
| | | }, |
| | | showImportResult(row) { |
| | | if (!row || !row.status) return |
| | | const msg = (row.message || '').toString() |
| | | if (row.status === 'success') { |
| | | const text = (msg && msg.indexOf('导入') !== -1) ? msg : '数据导入成功' |
| | | this.$message({ message: text, type: 'success', duration: 5000 }) |
| | | } else { |
| | | this.$alert((msg || '数据导入失败,详见下方失败记录').replace(/\n/g, '<br>'), '数据导入失败', { |
| | | dangerouslyUseHTMLString: true, |
| | | type: 'error', |
| | | confirmButtonText: '知道了' |
| | | }) |
| | | } |
| | | }, |
| | | importOne(row) { |
| | | if (!this.period) { this.$message.warning('请先选择报表期'); return Promise.resolve() } |
| | | row.status = 'uploading' |