|
@@ -133,7 +133,18 @@
|
|
|
v-if="isColumnVisible('ticketTypeName')"
|
|
v-if="isColumnVisible('ticketTypeName')"
|
|
|
width="100"
|
|
width="100"
|
|
|
prop="ticketTypeName"
|
|
prop="ticketTypeName"
|
|
|
- label="票种"> </el-table-column>
|
|
|
|
|
|
|
+ label="票种">
|
|
|
|
|
+ <template slot-scope="scope">
|
|
|
|
|
+ <el-link
|
|
|
|
|
+ v-if="scope.row.ticketTypeId"
|
|
|
|
|
+ type="primary"
|
|
|
|
|
+ :underline="false"
|
|
|
|
|
+ @click="showTicketTypeDetail(scope.row)">
|
|
|
|
|
+ {{ scope.row.ticketTypeName }}
|
|
|
|
|
+ </el-link>
|
|
|
|
|
+ <span v-else>{{ scope.row.ticketTypeName }}</span>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </el-table-column>
|
|
|
<el-table-column
|
|
<el-table-column
|
|
|
v-if="isColumnVisible('unitPrice')"
|
|
v-if="isColumnVisible('unitPrice')"
|
|
|
width="80"
|
|
width="80"
|
|
@@ -566,6 +577,126 @@
|
|
|
</el-table>
|
|
</el-table>
|
|
|
</div>
|
|
</div>
|
|
|
</el-dialog>
|
|
</el-dialog>
|
|
|
|
|
+
|
|
|
|
|
+ <el-dialog
|
|
|
|
|
+ title="票种信息"
|
|
|
|
|
+ :visible.sync="ticketTypeVisible"
|
|
|
|
|
+ width="75%"
|
|
|
|
|
+ append-to-body
|
|
|
|
|
+ >
|
|
|
|
|
+ <div v-loading="ticketTypeLoading">
|
|
|
|
|
+ <el-form
|
|
|
|
|
+ inline
|
|
|
|
|
+ label-width="120px"
|
|
|
|
|
+ class="dialog-info"
|
|
|
|
|
+ v-if="ticketTypeData"
|
|
|
|
|
+ >
|
|
|
|
|
+ <el-form-item label="票种分类">
|
|
|
|
|
+ {{ ticketTypeData.category | formatCategory }}
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item label="票种名称">
|
|
|
|
|
+ {{ ticketTypeData.name }}
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item label="在售状态">
|
|
|
|
|
+ {{ ticketTypeData.isSale === 1 ? '在售' : '禁售' }}
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item label="是否支持开票">
|
|
|
|
|
+ {{ ticketTypeData.isSupportInvoice === 1 ? '支持开票' : '不支持开票' }}
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item label="销售价格">
|
|
|
|
|
+ {{ ticketTypeData.price }} 元
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item label="团散">
|
|
|
|
|
+ {{ ttValue(ticketTypeData.teamIndividual, { 0: '不限', 1: '散客', 2: '团队' }) }}
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item label="多日票类型">
|
|
|
|
|
+ {{ ttValue(ticketTypeData.useDaysDelayType, { 1: '按照游玩时间延长', 2: '按照首次核销时间延长' }) }}
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item label="日期类型">
|
|
|
|
|
+ {{ ttValue(ticketTypeData.useDateType, { 1: '日历票', 2: '期票,时间期限内有效' }) }}
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item
|
|
|
|
|
+ v-if="ticketTypeData.category === 'member'"
|
|
|
|
|
+ label="会员时长类型"
|
|
|
|
|
+ >
|
|
|
|
|
+ {{ ttValue(ticketTypeData.memberUseDateType, { 1: '【按天】', 2: '【按照使用日期】' }) }}
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item
|
|
|
|
|
+ v-if="!(ticketTypeData.category === 'member' && ticketTypeData.memberUseDateType === 1)"
|
|
|
|
|
+ label="使用天数"
|
|
|
|
|
+ >
|
|
|
|
|
+ {{ ticketTypeData.useDays }}
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item
|
|
|
|
|
+ v-if="!(ticketTypeData.category === 'member' && ticketTypeData.memberUseDateType === 2)"
|
|
|
|
|
+ label="使用日期"
|
|
|
|
|
+ >
|
|
|
|
|
+ {{ ticketTypeData.useDateStart }} - {{ ticketTypeData.useDateEnd }}
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item
|
|
|
|
|
+ v-if="ticketTypeData.category === 'member'"
|
|
|
|
|
+ label="激活方式"
|
|
|
|
|
+ >
|
|
|
|
|
+ {{ ttValue(ticketTypeData.memberActiveType, { 1: '【购买即激活】', 2: '【首次使用激活】' }) }}
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item
|
|
|
|
|
+ v-if="ticketTypeData.isSaleDateLimit === 1"
|
|
|
|
|
+ label="售卖时间"
|
|
|
|
|
+ >
|
|
|
|
|
+ {{ ticketTypeData.saleDateStart }} - {{ ticketTypeData.saleDateEnd }}
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item label="核销凭证">
|
|
|
|
|
+ {{ ttLabels(ticketTypeData.checkType, checkTypeDic) }}
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item label="核销规则">
|
|
|
|
|
+ {{ ttLabels(ticketTypeData.checkRule, checkRuleDic) }}
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item label="批量核销">
|
|
|
|
|
+ {{ ticketTypeData.batchCheckRule === 'batch' ? '当票可以使用多次时,一次核销完成' : '单次核销' }}
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item label="核销语音">
|
|
|
|
|
+ {{ ticketTypeData.checkVoice || '(默认播报票种名称)' }}
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item label="星期检票规则">
|
|
|
|
|
+ {{ ttWeekday(ticketTypeData.useDayOfWeek) }}
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item label="销售渠道">
|
|
|
|
|
+ {{ ttLabels(ticketTypeData.source, [{ value: 'window', label: '窗口' }, { value: 'term', label: '自助机' }]) }}
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item label="是否可以退订">
|
|
|
|
|
+ {{ ticketTypeData.isAllowCancel === 1 ? '可以' : '不可以' }}
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item label="是否必须换票使用">
|
|
|
|
|
+ {{ ticketTypeData.isNeedPrint === 1 ? '需要' : '不限' }}
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item label="过期操作">
|
|
|
|
|
+ {{ ttValue(ticketTypeData.outOfDateDeal, { 1: '人工处理', 2: '自动核销' }) }}
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ </el-form>
|
|
|
|
|
+ <div class="block-title" style="margin:10px 0" v-if="ticketTypeData && ticketTypeData.ticketTypeScenicList && ticketTypeData.ticketTypeScenicList.length">
|
|
|
|
|
+ 适用景点及检票次数
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <el-table
|
|
|
|
|
+ border
|
|
|
|
|
+ stripe
|
|
|
|
|
+ v-if="ticketTypeData && ticketTypeData.ticketTypeScenicList && ticketTypeData.ticketTypeScenicList.length"
|
|
|
|
|
+ :data="ticketTypeData.ticketTypeScenicList"
|
|
|
|
|
+ :max-height="200"
|
|
|
|
|
+ >
|
|
|
|
|
+ <el-table-column prop="scenicName" label="景点"></el-table-column>
|
|
|
|
|
+ <el-table-column label="可检票次数">
|
|
|
|
|
+ <template slot-scope="scope">
|
|
|
|
|
+ {{ scope.row.checkLimitTimes === -1 ? '无限制' : scope.row.checkLimitTimes }}
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </el-table-column>
|
|
|
|
|
+ <el-table-column label="单日可检票次数">
|
|
|
|
|
+ <template slot-scope="scope">
|
|
|
|
|
+ {{ scope.row.singleDayLimitTimes === -1 ? '无限制' : scope.row.singleDayLimitTimes }}
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </el-table-column>
|
|
|
|
|
+ </el-table>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </el-dialog>
|
|
|
</el-form>
|
|
</el-form>
|
|
|
</el-dialog>
|
|
</el-dialog>
|
|
|
</template>
|
|
</template>
|
|
@@ -574,6 +705,8 @@
|
|
|
import { channelList, IDENTIFY_TYPES } from '@/assets/staticData'
|
|
import { channelList, IDENTIFY_TYPES } from '@/assets/staticData'
|
|
|
import { getPayStatus } from '@/utils/index'
|
|
import { getPayStatus } from '@/utils/index'
|
|
|
import { addUserConfig, getUserConfig } from '@/api/configSetting'
|
|
import { addUserConfig, getUserConfig } from '@/api/configSetting'
|
|
|
|
|
+import { getTicketTypeById } from '@/api/ticketType'
|
|
|
|
|
+import { checkTypeDic, checkRuleDic } from '@/const'
|
|
|
import QRCode from 'qrcode'
|
|
import QRCode from 'qrcode'
|
|
|
|
|
|
|
|
const fixedColumns = [
|
|
const fixedColumns = [
|
|
@@ -631,11 +764,16 @@ export default {
|
|
|
return {
|
|
return {
|
|
|
channelList,
|
|
channelList,
|
|
|
papersType: IDENTIFY_TYPES,
|
|
papersType: IDENTIFY_TYPES,
|
|
|
|
|
+ checkTypeDic,
|
|
|
|
|
+ checkRuleDic,
|
|
|
posType: '',
|
|
posType: '',
|
|
|
orderData: null,
|
|
orderData: null,
|
|
|
visible: false,
|
|
visible: false,
|
|
|
detailVisible: false,
|
|
detailVisible: false,
|
|
|
record: {},
|
|
record: {},
|
|
|
|
|
+ ticketTypeVisible: false,
|
|
|
|
|
+ ticketTypeLoading: false,
|
|
|
|
|
+ ticketTypeData: null,
|
|
|
activeTab: 'ticketCheckInfo',
|
|
activeTab: 'ticketCheckInfo',
|
|
|
dialogVisible: false,
|
|
dialogVisible: false,
|
|
|
fixedColumns,
|
|
fixedColumns,
|
|
@@ -849,6 +987,37 @@ export default {
|
|
|
this.record = record
|
|
this.record = record
|
|
|
this.detailVisible = true
|
|
this.detailVisible = true
|
|
|
},
|
|
},
|
|
|
|
|
+ async showTicketTypeDetail (ticket) {
|
|
|
|
|
+ if (!ticket.ticketTypeId) return
|
|
|
|
|
+ this.ticketTypeVisible = true
|
|
|
|
|
+ this.ticketTypeLoading = true
|
|
|
|
|
+ this.ticketTypeData = null
|
|
|
|
|
+ try {
|
|
|
|
|
+ const res = await getTicketTypeById({ id: ticket.ticketTypeId })
|
|
|
|
|
+ this.ticketTypeData = res.data || null
|
|
|
|
|
+ } finally {
|
|
|
|
|
+ this.ticketTypeLoading = false
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ ttValue (val, map) {
|
|
|
|
|
+ if (val === undefined || val === null || val === '') return ''
|
|
|
|
|
+ return map[val] || val
|
|
|
|
|
+ },
|
|
|
|
|
+ ttLabels (val, dic) {
|
|
|
|
|
+ if (!val) return ''
|
|
|
|
|
+ const arr = Array.isArray(val) ? val : String(val).split(',')
|
|
|
|
|
+ return arr.map(item => {
|
|
|
|
|
+ const found = dic.find(i => `${i.value}` === `${item}`)
|
|
|
|
|
+ return found ? found.label : item
|
|
|
|
|
+ }).join('、')
|
|
|
|
|
+ },
|
|
|
|
|
+ ttWeekday (val) {
|
|
|
|
|
+ if (!val) return ''
|
|
|
|
|
+ const arr = String(val).split(',')
|
|
|
|
|
+ const weekdayMap = { 1: '星期日', 2: '星期一', 3: '星期二', 4: '星期三', 5: '星期四', 6: '星期五', 7: '星期六' }
|
|
|
|
|
+ if (arr.length === 7) return '每天'
|
|
|
|
|
+ return arr.map(i => weekdayMap[i]).filter(Boolean).join('、')
|
|
|
|
|
+ },
|
|
|
isValidUrl (url) {
|
|
isValidUrl (url) {
|
|
|
try {
|
|
try {
|
|
|
const raw = String(url || '').trim()
|
|
const raw = String(url || '').trim()
|