| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365 |
- <template>
- <div class="form-wrap">
- <el-form
- class="searchBox"
- ref="form"
- :model="form"
- :inline="true"
- label-width="140px"
- >
- <div class="block-title">
- 查询条件
- </div>
- <el-form-item
- label="名称"
- prop="ticketTypeName"
- >
- <el-input v-model="form.ticketTypeName"></el-input>
- </el-form-item>
- <el-form-item
- label="类型"
- prop="category"
- >
- <el-select v-model="form.category">
- <el-option
- value=""
- label="全部"
- ></el-option>
- <el-option
- v-for="item in ticketCategory"
- :key="item.id"
- :value="item.id"
- :label="item.name">
- </el-option>
- </el-select>
- </el-form-item>
- <el-form-item
- label="是否可售"
- prop="isSale"
- >
- <el-select v-model="form.isSale">
- <el-option
- label="全部"
- value=""
- ></el-option>
- <el-option
- label="是"
- :value="1"
- ></el-option>
- <el-option
- label="否"
- :value="0"
- ></el-option>
- </el-select>
- </el-form-item>
- <div class="btn-wrap">
- <el-button
- @click="reset"
- >
- 重置
- </el-button>
- <el-button
- type="primary"
- @click="getTicketTypeList"
- >
- 搜索
- </el-button>
- <el-button
- type="primary"
- @click="showDialog('add')"
- >
- 新增票种
- </el-button>
- </div>
- </el-form>
- <div class="tableBox">
- <div class="block-title">
- 现有票种
- </div>
- <el-table
- border
- stripe
- v-loading="loading"
- :data="tableData"
- >
- <el-table-column
- prop="name"
- label="票种名称"
- >
- </el-table-column>
- <!-- <el-table-column
- prop="id"
- label="票种ID"
- width="80"
- >
- </el-table-column> -->
- <el-table-column
- label="票种分类"
- >
- <template slot-scope="scope">
- {{ getTicketCate(scope.row.category) }}
- </template>
- </el-table-column>
- <el-table-column
- prop="price"
- label="窗口价格"
- >
- </el-table-column>
- <el-table-column
- label="在售状态"
- >
- <template slot-scope="scope">
- <el-tag :type="scope.row.isSale | runStopColor">
- {{ scope.row.isSale ? '在售' : '禁售' }}
- </el-tag>
- </template>
- </el-table-column>
- <el-table-column
- label="操作"
- >
- <template slot-scope="scope">
- <el-link
- type="primary"
- size="small"
- @click="showDialog('edit', scope.row)"
- >
- 编辑
- </el-link>
- <el-link
- type="primary"
- size="small"
- @click="showDialog('priceCalendar', scope.row)"
- >
- 价格日历
- </el-link>
- <br>
- <el-link
- type="primary"
- size="small"
- @click="showDialog('add', itemWithoutCategoryAndShorthand(scope.row))"
- >
- 复制
- </el-link>
- <el-link
- type="primary"
- size="small"
- @click="deleteTicket(scope.row.id)"
- >
- 删除
- </el-link>
- </template>
- </el-table-column>
- </el-table>
- <el-pagination
- background
- :current-page.sync="form.pageNum"
- :page-size="10"
- layout="total, prev, pager, next"
- @current-change="getTicketTypeList"
- :total="total">
- </el-pagination>
- </div>
- <!-- 票种弹框 -->
- <ElDialog
- :title="dialogType === 'add' ? '新增票种' : '编辑票种'"
- width="1100px"
- v-model="dialogVisible">
- <!-- 新增与编辑 共用一个弹出 -->
- <TicketDialog
- :dialog-type="dialogType"
- :ticket-item="curItem"
- :scenic-list="scenicList"
- :ticket-tag-list="ticketTagList"
- :member-type-list="memberTypeList"
- :invoice-seller="InvoiceSeller"
- @updateList="getTicketTypeList"
- ></TicketDialog>
- </ElDialog>
- <PriceCalendar ref="priceCalendar"></PriceCalendar>
- </div>
- </template>
- <script>
- import moment from 'moment'
- import { getTicketTypeList, deleteTicket, getScenic, updateTicket, listInvoiceSales } from '@/api/ticketType'
- import { getTicketTypeTagList } from '@/api/ticketTypeTag'
- import { getMemberType } from '@/api/member'
- import ElDialog from '@/components/Dialog'
- import TicketDialog from './ticket/Dialog'
- import PriceCalendar from './ticket/PriceCalendar'
- import { TicketCategory } from './ticket/constant'
- import { cloneDeep } from '@/utils'
- export default {
- computed: {
- ticketCategory () {
- return this.$store.state.app.ticketCategory
- }
- },
- data () {
- return {
- form: {
- ticketTypeName: '',
- category: '',
- keyWords3: '',
- isSale: '',
- pageNum: 1,
- pageSize: 10,
- keyWords6: '',
- keyWords7: '',
- keyWords8: '',
- ticketTypeName0: '1',
- // ticketTypeName1: 1, // 只查看自己绑定景点的票种
- ticketTypeName2: ''
- },
- loading: false,
- total: 0,
- tableData: [],
- memberTypeList: [],
- dialogVisible: false,
- // 弹框类型 'add' 或 'edit'
- dialogType: '',
- curItem: {},
- scenicList: [],
- ticketTagList: [],
- ticketPricePlanList: [],
- InvoiceSeller: []
- }
- },
- created () {
- this.getScenicList()
- this.getTicketTypeList()
- // this.getMemberList()
- // this.getTicketTagList()
- // this.getTicketPricePlanList()
- // this.getInvoiceSeller()
- },
- components: {
- ElDialog,
- TicketDialog,
- PriceCalendar
- },
- methods: {
- getTicketCate (cate) {
- return TicketCategory[cate]
- },
- getInvoiceSeller () {
- listInvoiceSales({}).then(res => {
- this.InvoiceSeller = res?.data
- })
- },
- getTicketTagList () {
- getTicketTypeTagList({}).then(res => {
- this.ticketTagList = res.children
- })
- },
- // 获取景点列表
- getScenicList () {
- getScenic().then(res => {
- this.scenicList = res?.data.records || []
- })
- },
- showDialog (type, item) {
- if (type === 'priceCalendar') {
- this.$refs.priceCalendar.show(item)
- return
- }
- this.dialogType = type
- this.curItem = item
- this.dialogVisible = true
- },
- // '创建票种失败,名称或助记符重复' 复制时去掉名称和助记符,待复制时用户填入
- itemWithoutCategoryAndShorthand (item) {
- const copyItem = cloneDeep(item)
- copyItem.name = '' // 名称
- return copyItem
- },
- getMemberList () {
- getMemberType({
- pageNum: 0,
- pageSize: 0
- }).then(res => {
- this.memberTypeList = res.list
- })
- },
- // 获取票种列表
- getTicketTypeList () {
- this.loading = true
- getTicketTypeList(this.form).then(res => {
- this.tableData = res.data.records.map(item => {
- item.scenics = item.ticketTypeScenicList.map(s => s.scenicName).join('、')
- return item
- })
- console.log('this.tableData', this.tableData)
- this.total = res.data.total || 0
- }).finally(() => {
- this.loading = false
- })
- // 更新全局票种列表
- // this.$store.dispatch('getTicketTypeList')
- },
- // 删除票种
- deleteTicket (id) {
- this.$confirm('确定删除?', '提示', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning'
- }).then(() => {
- deleteTicket(id).then(res => {
- this.$message.success('删除成功')
- this.getTicketTypeList()
- })
- })
- },
- reset () {
- this.$refs.form.resetFields()
- },
- offSale (data) {
- let form = Object.assign({}, data)
- form.isSale = 0
- updateTicket(form).then(res => {
- if (res.code !== '200') {
- this.$message.success(res.msg || '操作失败')
- return
- }
- this.$message.success('操作成功')
- this.getTicketTypeList()
- })
- },
- onSale (data) {
- let saleEnd = moment(data.saleDateEnd).hours(23).minutes(59).seconds(59)
- if (moment().isAfter(saleEnd)) {
- this.$alert('请修改票种可售日期', '票种已过期', {
- confirmButtonText: '知道了'
- })
- } else {
- let form = Object.assign({}, data)
- form.isSale = 1
- updateTicket(form).then(res => {
- if (res.code !== '200') {
- this.$message.success(res.msg || '操作失败')
- return
- }
- this.$message.success('操作成功')
- this.getTicketTypeList()
- })
- }
- }
- }
- }
- </script>
- <style lang="scss" scoped>
- .offSale-btn{
- color: #F56C6C
- }
- .onSale-btn{
- color: #67C23A
- }
- </style>
|