Merge remote-tracking branch 'origin/master'

This commit is contained in:
yxz 2024-11-29 18:26:47 +08:00
commit ec840a0781
11 changed files with 1111 additions and 1 deletions

View File

@ -0,0 +1,52 @@
/**
* @description 演出表
* Created on 2024-11-27
* @author yxz
*/
import request from '@/utils/request'
export function fetchList() {
return request({
url: '/admin/zshow/list',
method: 'get'
})
}
export function fetPage(page) {
return request({
url: '/admin/zshow/page',
method: 'get',
params: page
})
}
export function getObj (id) {
return request({
url: '/admin/zshow/' + id,
method: 'get'
})
}
export function addObj (obj) {
return request({
url: '/admin/zshow',
method: 'post',
data: obj
})
}
export function putObj (obj) {
return request({
url: '/admin/zshow',
method: 'put',
data: obj
})
}
export function delObj (id) {
return request({
url: '/admin/zshow/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,52 @@
/**
* @description 演出场次关联表
* Created on 2024-11-27
* @author yxz
*/
import request from '@/utils/request'
export function fetchList() {
return request({
url: '/admin/zshowschedule/list',
method: 'get'
})
}
export function fetPage(page) {
return request({
url: '/admin/zshowschedule/page',
method: 'get',
params: page
})
}
export function getObj (id) {
return request({
url: '/admin/zshowschedule/' + id,
method: 'get'
})
}
export function addObj (obj) {
return request({
url: '/admin/zshowschedule',
method: 'post',
data: obj
})
}
export function putObj (obj) {
return request({
url: '/admin/zshowschedule',
method: 'put',
data: obj
})
}
export function delObj (id) {
return request({
url: '/admin/zshowschedule/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,52 @@
/**
* @description 票档和场次关联表
* Created on 2024-11-27
* @author yxz
*/
import request from '@/utils/request'
export function fetchList() {
return request({
url: '/admin/ztickettier/list',
method: 'get'
})
}
export function fetPage(page) {
return request({
url: '/admin/ztickettier/page',
method: 'get',
params: page
})
}
export function getObj (id) {
return request({
url: '/admin/ztickettier/' + id,
method: 'get'
})
}
export function addObj (obj) {
return request({
url: '/admin/ztickettier',
method: 'post',
data: obj
})
}
export function putObj (obj) {
return request({
url: '/admin/ztickettier',
method: 'put',
data: obj
})
}
export function delTierObj (id) {
return request({
url: '/admin/ztickettier/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,33 @@
/**
* @description y演出核销权限设置
* Created on 2024-11-27
* @author yxz
*/
import request from '@/utils/request'
export function fetPage(page) {
return request({
url: '/admin/zticketverificationauth/page',
method: 'get',
params: page
})
}
export function addObj (obj) {
return request({
url: '/admin/zticketverificationauth',
method: 'post',
data: obj
})
}
export function delTierObj (id) {
return request({
url: '/admin/zticketverificationauth/' + id,
method: 'delete'
})
}

View File

@ -0,0 +1,113 @@
<template>
<el-dialog title="演出表" :visible.sync="show" width="600px">
<el-form ref="form" :model="form" label-width="90px" :rules="rules">
<el-form-item label="演出名称" prop="showName">
<el-input v-model="form.showName" placeholder="请输入演出名称"></el-input>
</el-form-item>
<el-form-item label="站点" prop="site">
<el-input v-model="form.site" placeholder="请输入站点"></el-input>
</el-form-item>
<el-form-item label="地点" prop="place">
<el-input v-model="form.place" placeholder="请输入地点"></el-input>
</el-form-item>
<el-form-item label="价格" prop="price">
<el-input v-model="form.price" placeholder="请输入价格"></el-input>
</el-form-item>
<el-form-item label="演出时间" prop="showTime">
<!-- <el-input v-model="form.showTime"></el-input> -->
<SelectDateTime v-model="form.showTime" placeholder="请选择演出时间"></SelectDateTime>
</el-form-item>
<el-form-item label="小图" prop="thumbnail">
<!-- <el-input v-model="form.thumbnail"></el-input> -->
<Upload v-model="form.thumbnail" :limit="1" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button v-loading="loading" type="primary" @click="saveHandler">{{btn_title}}</el-button>
<el-button @click="close">取消</el-button>
</div>
</el-dialog>
</template>
<script>
/**
* Created on 2024-11-27
* @description 演出表
* @author yxz
*/
import { addObj, putObj } from "@/api/zshow/zShow";
import customSelect from "@/components/CustomSelect";
import SelectDateTime from "@/components/SelectDateTime/SelectDateTime.vue";
import Upload from "@/components/Upload";
export default {
components: { customSelect,SelectDateTime ,Upload},
name: "zShowForm",
data() {
return {
form: {},
show: false,
loading: false,
rules: {
// example :
// field: [{ required: true, trigger: "blur" }],
}
};
},
computed: {
formState() {
return !this.form.showId;
},
btn_title() {
return this.formState ? "新建" : "保存";
}
},
methods: {
open(origin) {
if (origin) {
//
let form = Object.assign({}, origin);
this.form = form;
} else {
//
this.form = {};
}
this.show = true;
},
close() {
this.show = false;
},
saveHandler() {
this.$refs.form.validate(valid => {
if(!valid) return;
this.loading = true;
console.log(this.formState)
if (this.formState) this.createHandler();
else this.editHandler();
});
},
createHandler() {
addObj(this.form).then(res => {
if (res.code === 'success') {
this.finish();
}
}).finally(()=> {
this.loading = false;
});
},
editHandler() {
putObj(this.form).then(res => {
if (res.code === 'success') {
this.finish();
}
}).finally(()=> {
this.loading = false;
});
},
finish() {
this.close();
this.$emit("reloadTable");
}
}
};
</script>

View File

@ -0,0 +1,179 @@
<template>
<div class="app-container">
<div class="zshow">
<el-form :inline="true" :model="page" class="demo-form-inline">
<!-- <el-form-item>
<el-input v-model="page.keyword" clearable placeholder="" prefix-icon="el-icon-search"></el-input>
</el-form-item>
<el-form-item>
<el-button @click="find" type="primary">查找</el-button>
</el-form-item> -->
<el-form-item>
<el-button @click="createHandler" type="primary">新建</el-button>
</el-form-item>
</el-form>
</div>
<custom-table
ref="table"
index
:loading="loading"
:columns="columns"
:data="listData"
:page="page"
@loadHandler="fetPage"
>
<template #listFlag="{ row }">
<el-tag :type="row.listFlag === 1 ? 'success' :'danger'">
{{ row.listFlag === 1 ? '已上架' : '未上架'}}
</el-tag>
</template>
<template #thumbnail="{ row }">
<el-image class="img-evetNot" :src="row.thumbnail" />
</template>
<template #operation="{row, index}">
<el-button
type="text"
icon="el-icon-date"
size="small"
plain
@click="openDialog(row , index)"
>日程安排</el-button>
<el-button
type="text"
icon="el-icon-user"
size="small"
plain
@click="openWeiteOff(row , index)"
>核销权限</el-button>
<el-button
type="text"
icon="el-icon-edit-outline"
size="small"
plain
@click="editHandler(row , index)"
>编辑</el-button>
<el-button
type="text"
icon="el-icon-delete"
size="small"
plain
@click="deleteHandler(row, index)"
>删除</el-button>
</template>
</custom-table>
<zShowForm ref="form" @reloadTable="$refs.table.refreshTable()" />
<zshowSchedule ref="schedule"></zshowSchedule>
<write-off ref="writeOff" />
</div>
</template>
<script>
/**
* Created on 2024-11-27
* @description 演出表
* @author yxz
*/
import { fetPage, delObj } from "@/api/zshow/zShow";
import customTable from "@/components/CustomTable";
import zShowForm from "./form";
import zshowSchedule from "./zshowSchedule";
import writeOff from "./writeOff";
const columns = [
{
label: "演出名称",
prop: "showName"
},
{
label: "站点",
prop: "site"
},
{
label: "地点",
prop: "place"
},
{
label: "价格",
prop: "price"
},
{
label: "演出时间",
prop: "showTime"
},
{
label: "状态",
prop: "listFlag",
slot: true,
},
{
label: "小图",
prop: "thumbnail",
slot: true,
},
];
export default {
name: "zShowInfo",
components: { customTable, zShowForm , zshowSchedule, writeOff},
data() {
return {
loading: false,
columns,
listData: [],
page: {
current: 1,
size: 10
}
};
},
methods: {
fetPage() {
this.loading = true;
fetPage(this.page).then(res => {
const { records, total } = res.data;
this.listData = records;
this.page.total = total;
this.loading = false;
});
},
//
openDialog(row,index) {
this.$refs.schedule.open(row);
},
createHandler() {
this.$refs.form.open();
},
editHandler(row, index) {
this.$refs.form.open(row);
},
deleteHandler(row, index) {
this.$confirm(`是否删除?`, "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
delObj(row.showId + '').then(res => {
if (res.code === 'success') {
this.$message.success('删除成功!');
this.$refs.table.refreshTable();
}else{
this.$message.error('删除失败');
}
});
}).catch(() => {});
},
//
openWeiteOff(row,index){
this.$refs.writeOff.open(row);
}
}
};
</script>
<style land="scss" scope>
.img-evetNot{
width: 100px;
}
</style>

View File

@ -0,0 +1,116 @@
<template>
<el-dialog title="添加日程" :visible.sync="show" width="600px">
<el-form ref="form" :model="form" label-width="90px" :rules="rules">
<el-form-item label="场次名称" prop="scheduleName">
<el-input v-model="form.scheduleName" placeholder="请输入场次名称"></el-input>
</el-form-item>
<el-form-item label="场次时间" prop="scheduleTime">
<!-- <el-input v-model="form.scheduleTime"></el-input> -->
<SelectDateTime v-model="form.scheduleTime" placeholder="请选择场次时间"></SelectDateTime>
</el-form-item>
<el-form-item label="总座位数" prop="seatsTotal" min='0'>
<el-input-number v-model="form.seatsTotal" placeholder='请输入总座位数'></el-input-number>
</el-form-item>
<el-form-item label="可用座位数" prop="seatsAvailable" min='0'>
<el-input-number v-model="form.seatsAvailable" placeholder='请输入可用座位数'></el-input-number>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button v-loading="loading" type="primary" @click="saveHandler">{{
btn_title
}}</el-button>
<el-button @click="close">取消</el-button>
</div>
</el-dialog>
</template>
<script>
/**
* Created on 2024-11-27
* @description 演出场次关联表
* @author yxz
*/
import { addObj, putObj } from "@/api/zshow/zShowSchedule";
import customSelect from "@/components/CustomSelect";
import SelectDateTime from "@/components/SelectDateTime/SelectDateTime.vue";
export default {
components: { customSelect , SelectDateTime},
name: "zShowScheduleForm",
data() {
return {
form: {},
show: false,
loading: false,
rules: {
// example :
// field: [{ required: true, trigger: "blur" }],
},
};
},
computed: {
formState() {
return !this.form.scheduleId;
},
btn_title() {
return this.formState ? "新建" : "保存";
},
},
methods: {
open(origin) {
if (origin.edit) {
//
console.log("编辑");
console.log(origin);
let form = Object.assign({}, origin.row);
this.form = form;
} else {
//
this.form = {};
this.showId = origin.showId
}
this.show = true;
},
close() {
this.show = false;
},
saveHandler() {
this.$refs.form.validate((valid) => {
if (!valid) return;
this.loading = true;
if (this.formState) this.createHandler();
else this.editHandler();
});
},
createHandler() {
addObj(this.form)
.then((res) => {
if (res.code === "success") {
this.finish();
}
})
.finally(() => {
this.loading = false;
});
},
editHandler() {
putObj(this.form)
.then((res) => {
if (res.code === "success") {
this.finish();
}
})
.finally(() => {
this.loading = false;
});
},
finish() {
this.close();
this.$emit("reloadTable");
},
},
};
</script>

View File

@ -0,0 +1,120 @@
<template>
<el-dialog
:title="(formState ? '添加' : '编辑') + '票档'"
:visible.sync="show"
width="600px"
>
<el-form ref="form" :model="form" label-width="90px" :rules="rules">
<el-form-item label="票档名称" prop="tierName">
<el-input v-model="form.tierName"></el-input>
</el-form-item>
<el-form-item label="票档价格" prop="tierPrice">
<el-input type="number" :min="0.01" v-model="form.tierPrice" placeholder="请输入票档价格"></el-input>
</el-form-item>
<el-form-item label="座位数" prop="seatsInTier">
<el-input-number
v-model="form.seatsInTier"
placeholder="请输入可用座位数"
></el-input-number>
</el-form-item>
<el-form-item label="可用座位数" prop="seatsAvailableInTier">
<el-input-number
v-model="form.seatsAvailableInTier"
placeholder="请输入可用座位数"
></el-input-number>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button v-loading="loading" type="primary" @click="saveHandler">{{
btn_title
}}</el-button>
<el-button @click="close">取消</el-button>
</div>
</el-dialog>
</template>
<script>
/**
* Created on 2024-11-27
* @description 票档和场次关联表
* @author yxz
*/
import { addObj, putObj } from "@/api/zshow/zTicketTier";
import customSelect from "@/components/CustomSelect";
export default {
components: { customSelect },
name: "zTicketTierForm",
data() {
return {
form: {},
show: false,
loading: false,
rules: {
// example :
// field: [{ required: true, trigger: "blur" }],
},
};
},
computed: {
formState() {
return !this.form.tierId;
},
btn_title() {
return this.formState ? "新建" : "保存";
},
},
methods: {
open(origin) {
if (origin) {
//
let form = Object.assign({}, origin.row);
this.form = form;
} else {
//
this.form = {};
this.form.showId = origin.showId;
this.form.scheduleId = origin.scheduleId;
}
this.show = true;
},
close() {
this.show = false;
},
saveHandler() {
this.$refs.form.validate((valid) => {
if (!valid) return;
this.loading = true;
if (this.formState) this.createHandler();
else this.editHandler();
});
},
createHandler() {
addObj(this.form)
.then((res) => {
if (res.code === "success") {
this.finish();
}
})
.finally(() => {
this.loading = false;
});
},
editHandler() {
putObj(this.form)
.then((res) => {
if (res.code === "success") {
this.finish();
}
})
.finally(() => {
this.loading = false;
});
},
finish() {
this.close();
this.$emit("reloadTable");
},
},
};
</script>

View File

@ -0,0 +1,159 @@
<template>
<el-dialog title="核销授权" :visible.sync="show" v-if="show" width="800px">
<el-row :gutter="20">
<el-col :span="5">当前演出</el-col>
<el-col :span="15">{{ form.showName }}</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="5">添加用户</el-col>
<el-col :span="12"
><user-select @chooseItem="chooseUserHandler" v-if="show"
/></el-col>
</el-row>
<el-table :data="memberList">
<el-table-column prop="username" label="手机号" />
<el-table-column prop="nickname" label="用户名" />
<el-table-column label="操作">
<template v-slot="scope">
<el-button
@click="removeItemHandler(scope.$index)"
type="danger"
icon="el-icon-delete"
circle
/>
</template>
</el-table-column>
</el-table>
<div slot="footer" class="dialog-footer">
<el-button v-loading="loading" type="primary" @click="saveHandler"
>保存</el-button
>
<el-button @click="close">取消</el-button>
</div>
</el-dialog>
</template>
<script>
/**
* Created on 2022-10-11
* @description nft
* @author BboySpider
*/
import {
postZnftverificationauth,
getWhiteList,
} from "@/api/collection/couponCoupons";
import { fetPage, addObj, delTierObj } from "@/api/zshow/zwriteOff";
import userSelect from "@/components/UserSelect";
export default {
name: "nftWhiteList",
components: { userSelect },
data() {
return {
datas: [],
form: {},
show: false,
loading: false,
memberList: [
// {
// nickname: 1234566,
// username: "",
// },
],
};
},
methods: {
setPicker(e) {
console.log(e);
},
open(origin) {
//
let form = Object.assign({}, origin);
this.form = form;
console.log("form", form);
this. getList()
},
getList() {
fetPage(this.form.showId).then((res) => {
this.memberList = res.data.records;
console.log(res);
});
this.show = true;
},
close() {
this.memberList = [];
this.show = false;
},
saveHandler() {
if (this.memberList.length < 1) {
this.$message.warning("请添加用户");
return;
}
const data = this.memberList.map((m) => ({
categoryId: this.form.id,
userId: m.userId,
}));
console.log("postZnftverificationauth", postZnftverificationauth);
postZnftverificationauth(data).then((res) => {
if (res.code === "success") {
this.$message.success(res.msg);
this.finish();
}
});
},
finish() {
this.close();
this.$emit("reloadTable");
},
chooseUserHandler(user) {
console.log("user", user);
addObj({
memberId: user.id,
showId: this.form.showId,
}).then((res) => {
if (res.code === "success") {
this.$message.success("添加用户成功");
this.getList()
}
});
// this.memberList.push({
// userId: user.id,
// nickname: user.nickname,
// username: user.username
// });
},
removeItemHandler(index) {
this.memberList.splice(index, 1);
this.memberList = [...this.memberList];
},
tset() {
const obj = {};
},
},
};
</script>
<style lang="scss" scoped>
.el-table {
margin: 20px 0;
}
.el-row {
display: flex;
align-items: center;
margin-bottom: 20px;
font-size: 16px;
&:last-child {
margin-bottom: 0;
}
}
</style>

View File

@ -0,0 +1,234 @@
<template>
<div>
<el-dialog title="演出日程" :visible.sync="show" width="70%">
<template #title>
<h3>演出日程</h3>
<el-button @click="createHandler" type="primary">新建</el-button>
</template>
<el-table
:data="listData"
style="width: 100%;"
:header-cell-style="{ 'text-align': 'center' }"
:cell-style="{ 'text-align': 'center' }"
:loading="loading"
:border="true"
>
<el-table-column type="expand">
<template slot-scope="scope">
<div v-if="!scope.row.ticketTiers.length" class="center">
该日程暂无票档快去添加票档吧~
</div>
<el-table
:data="scope.row.ticketTiers"
style="width: 100%;"
:header-cell-style="{
'text-align': 'center',
'background-color': '#f5f7fa',
}"
:cell-style="{ 'text-align': 'center' }"
:loading="loading"
:border="true"
v-else
>
<el-table-column label="票档名称" prop="tierName">
</el-table-column>
<el-table-column label="票档价格" prop="tierPrice">
</el-table-column>
<el-table-column label="票档状态" prop="status">
<template slot-scope="scope">
<el-tag type="info" v-if="scope.row.status === 0">
待开售
</el-tag>
<el-tag type="success" v-if="scope.row.status === 1">
开售中
</el-tag>
<el-tag type="danger" v-if="scope.row.status === 2">
已售罄
</el-tag>
</template>
</el-table-column>
<el-table-column label="座位数" prop="seatsInTier">
</el-table-column>
<el-table-column label="可用座位数" prop="seatsAvailableInTier">
</el-table-column>
<el-table-column fixed="right" label="操作" width="180">
<template slot-scope="scopeChe">
<el-button
type="text"
icon="el-icon-edit-outline"
size="small"
plain
@click="editHandlerTier(scopeChe.row)"
>编辑</el-button
>
<el-button
type="text"
icon="el-icon-delete"
size="small"
plain
@click="deleteHandlerTier(scopeChe.row)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</template>
</el-table-column>
<el-table-column label="场次名称" prop="scheduleName">
</el-table-column>
<el-table-column label="日程时间" prop="scheduleTime">
</el-table-column>
<el-table-column label="总座位数" prop="seatsTotal"> </el-table-column>
<el-table-column label="可用座位数" prop="seatsAvailable">
</el-table-column>
<el-table-column label="场次状态" prop="status">
<template slot-scope="scope">
<el-tag type="info" v-if="scope.row.status === 0">
待开售
</el-tag>
<el-tag type="success" v-if="scope.row.status === 1">
开售中
</el-tag>
<el-tag type="danger" v-if="scope.row.status === 2">
已售罄
</el-tag>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作">
<template slot-scope="scope">
<el-button
type="text"
icon="el-icon-circle-plus-outline"
size="small"
plain
@click="addTierDialog(scope.row)"
>添加票档</el-button
>
<el-button
type="text"
icon="el-icon-edit-outline"
size="small"
plain
@click="editHandler(scope.row)"
>编辑</el-button
>
<el-button
type="text"
icon="el-icon-delete"
size="small"
plain
@click="deleteHandler(scope.row)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</el-dialog>
<showScheduleForm
ref="scheduleForm"
@reloadTable="fetPage()"
></showScheduleForm>
<tiketTierForm ref="tiketTierForm" @reloadTable="fetPage()"></tiketTierForm>
</div>
</template>
<script>
import { fetPage, delObj } from "@/api/zshow/zShowSchedule";
import { delTierObj } from "@/api/zshow/zTicketTier";
import showScheduleForm from "./showScheduleForm.vue";
import tiketTierForm from "./tiketTierForm.vue";
export default {
components: { showScheduleForm, tiketTierForm },
data() {
return {
show: false,
showId: undefined,
loading: false,
listData: [],
};
},
methods: {
open(row) {
console.log(row);
this.show = true;
this.showId = row.showId;
this.fetPage();
},
fetPage() {
this.loading = true;
fetPage(this.page).then((res) => {
const { records, total } = res.data;
this.listData = records;
// this.page.total = total;
this.loading = false;
});
},
//
createHandler() {
this.$refs.scheduleForm.open({ edit: false, showId: this.showId });
},
//
editHandler(row) {
this.$refs.scheduleForm.open({ edit: true, row: row });
},
//
deleteHandler(row) {
this.$confirm("此操作将永久删除该日程, 是否继续?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
delObj(row.scheduleId).then((res) => {
this.$message({
type: "success",
message: "删除成功!",
});
this.fetPage();
});
});
},
//
addTierDialog(row) {
this.$refs.tiketTierForm.open({
edit: false,
showId: this.showId,
scheduleId: row.scheduleId,
});
},
//
editHandlerTier(row) {
this.$refs.tiketTierForm.open({ edit: true, row: row });
},
//
deleteHandlerTier(row) {
this.$confirm(`是否删除${row.tierName}票档?`, "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
delTierObj(row.tierId).then((res) => {
if (res.code === "success") {
this.$message.success("删除成功!");
this.fetPage();
} else {
this.$message.error("删除失败");
}
});
})
.catch(() => {});
},
},
};
</script>
<style>
.center {
text-align: center;
}
</style>

View File

@ -4,7 +4,7 @@ const defaultSettings = require('./src/settings.js')
// 测试 https://192.168.3.130:8088 // 测试 https://192.168.3.130:8088
// 正式 http://139.159.250.24:8088 // 正式 http://139.159.250.24:8088
// const url ='http://43.139.12.226:8888/admin'; // const url ='http://43.139.12.226:8888/admin';
const url = 'http://localhost:8088'; const url = 'http://192.168.3.18:8088';
function resolve(dir) { function resolve(dir) {
return path.join(__dirname, dir) return path.join(__dirname, dir)