|
@@ -7,6 +7,12 @@
|
|
|
</el-col>
|
|
|
<el-col :span="24" class="two">
|
|
|
<cForm :span="24" :fields="fields" :form="form" :rules="rules" @save="toSave" label-width="auto">
|
|
|
+ <template #type>
|
|
|
+ <el-option v-for="i in typeList" :key="i.value" :label="i.label" :value="i.value"></el-option>
|
|
|
+ </template>
|
|
|
+ <template #person>
|
|
|
+ <el-option v-for="i in personList" :key="i.value" :label="i.label" :value="i.value"></el-option>
|
|
|
+ </template>
|
|
|
<template #file>
|
|
|
<cUpload
|
|
|
:model="`${'file'}`"
|
|
@@ -18,14 +24,17 @@
|
|
|
@change="onUpload"
|
|
|
></cUpload>
|
|
|
</template>
|
|
|
- <template #children>
|
|
|
- <cEditor v-model="form.children" url="/file/travel/ticket/upload"></cEditor>
|
|
|
+ <template #buy_explain>
|
|
|
+ <cEditor v-model="form.buy_explain" url="/file/travel/ticket/upload"></cEditor>
|
|
|
</template>
|
|
|
- <template #prompt>
|
|
|
- <cEditor v-model="form.prompt" url="/file/travel/ticket/upload"></cEditor>
|
|
|
+ <template #use_explain>
|
|
|
+ <cEditor v-model="form.use_explain" url="/file/travel/ticket/upload"></cEditor>
|
|
|
</template>
|
|
|
- <template #brief>
|
|
|
- <cEditor v-model="form.brief" url="/file/travel/ticket/upload"></cEditor>
|
|
|
+ <template #money_explain>
|
|
|
+ <cEditor v-model="form.money_explain" url="/file/travel/ticket/upload"></cEditor>
|
|
|
+ </template>
|
|
|
+ <template #other_explain>
|
|
|
+ <cEditor v-model="form.other_explain" url="/file/travel/ticket/upload"></cEditor>
|
|
|
</template>
|
|
|
<template #is_use>
|
|
|
<el-radio v-for="i in is_useList" :key="i._id" :label="i.value">{{ i.label }}</el-radio>
|
|
@@ -45,9 +54,11 @@ import type { FormRules } from 'element-plus';
|
|
|
import { useRoute } from 'vue-router';
|
|
|
// 接口
|
|
|
import { TicketStore } from '@/stores/info/ticket';
|
|
|
+import { ConfigStore } from '@/stores/basic/config';
|
|
|
import { DictDataStore } from '@/stores/basic/dictData'; // 字典表
|
|
|
import type { IQueryResult } from '@/util/types.util';
|
|
|
const ticketAxios = TicketStore();
|
|
|
+const configAxios = ConfigStore();
|
|
|
const dictAxios = DictDataStore();
|
|
|
// 路由
|
|
|
const route = useRoute();
|
|
@@ -58,14 +69,18 @@ let form: Ref<any> = ref({});
|
|
|
let fields: Ref<any[]> = ref([
|
|
|
{ label: '名称', model: 'name' },
|
|
|
{ label: '联系电话', model: 'phone' },
|
|
|
- { label: '客房数', model: 'num', type: 'number' },
|
|
|
+ { label: '原价', model: 'original_price', type: 'number' },
|
|
|
+ { label: '销售金额', model: 'money', type: 'number' },
|
|
|
+ { label: '出游人群', model: 'person', type: 'select' },
|
|
|
+ { label: '服务特色', model: 'type', type: 'select' },
|
|
|
{ label: '地点', model: 'address', type: 'textarea' },
|
|
|
- { label: '入住时间', model: 'start_time' },
|
|
|
- { label: '退房时间', model: 'end_time' },
|
|
|
+ { label: '日期', model: 'date', type: 'date' },
|
|
|
+ { label: '开放时间', model: 'open_time' },
|
|
|
{ label: '图片', model: 'file', custom: true },
|
|
|
- { label: '儿童及加床', model: 'children', custom: true },
|
|
|
- { label: '接待提示', model: 'prompt', custom: true },
|
|
|
- { label: '简介', model: 'brief', custom: true },
|
|
|
+ { label: '购买须知', model: 'buy_explain', custom: true },
|
|
|
+ { label: '使用说明', model: 'use_explain', custom: true },
|
|
|
+ { label: '费用说明', model: 'money_explain', custom: true },
|
|
|
+ { label: '其他说明', model: 'other_explain', custom: true },
|
|
|
{ label: '排序', model: 'sort', type: 'number' },
|
|
|
{ label: '是否启用', model: 'is_use', type: 'radio' }
|
|
|
]);
|
|
@@ -73,14 +88,16 @@ const rules = reactive<FormRules>({
|
|
|
name: [{ required: true, message: '名称', trigger: 'blur' }],
|
|
|
phone: [{ required: true, message: '联系电话', trigger: 'blur' }],
|
|
|
address: [{ required: true, message: '地点', trigger: 'blur' }],
|
|
|
- start_time: [{ required: true, message: '入住时间', trigger: 'blur' }],
|
|
|
- end_time: [{ required: true, message: '退房时间', trigger: 'blur' }],
|
|
|
- file: [{ required: true, message: '图片', trigger: 'blur' }],
|
|
|
- brief: [{ required: true, message: '简介', trigger: 'blur' }],
|
|
|
- sort: [{ required: true, message: '排序', trigger: 'blur' }]
|
|
|
+ original_price: [{ required: true, message: '原价', trigger: 'blur' }],
|
|
|
+ money: [{ required: true, message: '销售金额', trigger: 'blur' }],
|
|
|
+ date: [{ required: true, message: '日期', trigger: 'blur' }],
|
|
|
+ open_time: [{ required: true, message: '开放时间', trigger: 'blur' }],
|
|
|
});
|
|
|
+let config: Ref<any> = ref({});
|
|
|
// 字典表
|
|
|
let is_useList: Ref<any> = ref([]);
|
|
|
+let typeList: Ref<any> = ref([]);
|
|
|
+let personList: Ref<any> = ref([]);
|
|
|
// 请求
|
|
|
onMounted(async () => {
|
|
|
loading.value = true;
|
|
@@ -93,6 +110,8 @@ const search = async () => {
|
|
|
if (id) {
|
|
|
let res: IQueryResult = await ticketAxios.fetch(id);
|
|
|
if (res.errcode == '0') form.value = res.data as {};
|
|
|
+ } else {
|
|
|
+ form.value = { open_time: config.value.open_time, phone: config.value.phone, address: config.value.address };
|
|
|
}
|
|
|
};
|
|
|
const onUpload = (e: { model: string; value: Array<[]> }) => {
|
|
@@ -114,6 +133,16 @@ const searchOther = async () => {
|
|
|
let res: IQueryResult;
|
|
|
res = await dictAxios.query({ type: 'is_use', is_use: '0' });
|
|
|
if (res.errcode == 0) is_useList.value = res.data;
|
|
|
+ // 出游人群
|
|
|
+ res = await dictAxios.query({ type: 'ticket_person', is_use: '0' });
|
|
|
+ if (res.errcode == 0) personList.value = res.data;
|
|
|
+ // 服务特色
|
|
|
+ res = await dictAxios.query({ type: 'ticket_type', is_use: '0' });
|
|
|
+ if (res.errcode == 0) typeList.value = res.data;
|
|
|
+ res = await configAxios.query();
|
|
|
+ if (res.errcode == '0') {
|
|
|
+ config.value = res.data;
|
|
|
+ }
|
|
|
};
|
|
|
// 返回上一页
|
|
|
const toBack = () => {
|