Lufaneng 11 months ago
parent fd710ae834
commit 308432acb7

@ -22,8 +22,8 @@ declare module 'vue' {
ElForm: typeof import('element-plus/es')['ElForm']
ElFormItem: typeof import('element-plus/es')['ElFormItem']
ElHeader: typeof import('element-plus/es')['ElHeader']
ElIcon: typeof import('element-plus/es')['ElIcon']
ElInput: typeof import('element-plus/es')['ElInput']
ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
ElMain: typeof import('element-plus/es')['ElMain']
ElMenu: typeof import('element-plus/es')['ElMenu']
ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
@ -36,7 +36,6 @@ declare module 'vue' {
ElTable: typeof import('element-plus/es')['ElTable']
ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
ElTree: typeof import('element-plus/es')['ElTree']
ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']
MapSelector: typeof import('./components/MapSelector.vue')['default']
Pagination: typeof import('./components/Pagination/index.vue')['default']
RouterLink: typeof import('vue-router')['RouterLink']

@ -50,6 +50,12 @@ export const asyncRoutes = [
component: () => import('@/views/ModelManage/index.vue'),
meta: { title: '模版管理', permissions: ['template'] },
},
{
path: 'ComboManage',
name: 'ComboManage',
component: () => import('@/views/ComboManage/index.vue'),
meta: { title: '套餐管理', permissions: ['membership_plan'] },
},
{
path: 'NoPermission',
name: 'NoPermission',

@ -24,7 +24,7 @@ onMounted(() => {
})
const formRef = ref(null)
const formField = ref({})
const formField = ref({ is_show: 1 })
const formRules = reactive({
name: [{ required: true, message: '不可为空', trigger: 'change' }],
code: [{ required: true, message: '不可为空', trigger: 'change' }],
@ -108,6 +108,15 @@ if (!isAdd.value) {
<el-form-item prop="description" label="描述">
<el-input placeholder="请输入" v-model="formField.description" />
</el-form-item>
<el-form-item prop="is_show" label="是否启用">
<el-switch
v-model="formField.is_show"
:active-value="1"
:inactive-value="0"
active-text="启用"
inactive-text="禁用"
/>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">

@ -45,6 +45,12 @@
<span v-if="row.type == 3"></span>
</template>
</el-table-column>
<el-table-column align="center" label="是否启用" prop="is_show" width="100">
<template #default="{ row }">
<span v-if="row.is_show == 1"></span>
<span v-if="row.is_show == 0"></span>
</template>
</el-table-column>
<el-table-column align="center" label="操作" width="180">
<template #default="{ row }">
<el-button v-if="row.status != 1" link type="primary" @click="addChildren(row)">

@ -0,0 +1,109 @@
<script setup>
import RPC from '@/utils/rpc'
const props = defineProps({
type: {
type: String,
required: true,
},
row: [Object],
})
const emit = defineEmits(['closed', 'onSuccess'])
const dialogVisible = ref(false)
const isAdd = computed(() => props.type === 'add')
onMounted(() => {
dialogVisible.value = true
})
const formRef = ref(null)
const formField = ref({ enabled: true, params: [] })
const formRules = reactive({
name: [{ required: true, message: '不可为空', trigger: 'change' }],
code: [{ required: true, message: '不可为空', trigger: 'change' }],
})
const loading = ref(false)
function closed() {
emit('closed')
}
const submitForm = async () => {
await formRef.value.validate()
const api = isAdd.value ? '/membership_plan/create' : '/membership_plan/update'
const params = {
...formField.value,
id: isAdd.value ? null : props.row.id,
}
loading.value = true
RPC.post(api, params)
.then((res) => {
ElMessage.success('操作成功')
emit('onSuccess')
emit('closed')
})
.finally(() => {
loading.value = false
})
}
if (!isAdd.value) {
formField.value = {
...props.row,
}
}
</script>
<template>
<el-dialog
align-center
:title="isAdd ? '新增' : '修改'"
width="80%"
v-model="dialogVisible"
@closed="closed"
:close-on-click-modal="false"
>
<el-form
ref="formRef"
label-position="right"
label-suffix=":"
:model="formField"
:rules="formRules"
v-loading="loading"
label-width="150"
>
<el-form-item prop="name" label="名称">
<el-input placeholder="请输入" v-model="formField.name" />
</el-form-item>
<el-form-item prop="code" label="字段">
<el-input placeholder="请输入" v-model="formField.code" />
</el-form-item>
<el-form-item prop="duration_days" label="持续时间(天)">
<el-input-number placeholder="请输入" v-model="formField.duration_days" />
</el-form-item>
<el-form-item prop="price_cents" label="价格">
<el-input-number placeholder="请输入" v-model="formField.price" />
</el-form-item>
<el-form-item prop="tags" label="标签">
<el-input placeholder="请输入" v-model="formField.tags" />
</el-form-item>
<el-form-item prop="sort" label="排序">
<el-input-number placeholder="请输入" v-model="formField.sort" />
</el-form-item>
<el-form-item prop="enabled" label="是否启用">
<el-switch v-model="formField.enabled" active-text="" inactive-text="" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="closed"> </el-button>
<el-button type="primary" :loading="loading" @click="submitForm"> </el-button>
</div>
</template>
</el-dialog>
</template>
<style lang="scss" scoped></style>

@ -0,0 +1,136 @@
<template>
<div>
<div class="title">套餐管理</div>
<el-form
ref="searchFormRef"
class="form"
:inline="true"
label-width="98px"
:model="queryParams"
>
<el-form-item label="名称" prop="name">
<el-input
clearable
placeholder="请输入"
style="width: 220px"
v-model="queryParams.name"
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label-width="100px">
<el-button icon="Search" type="primary" @click="handleQuery"> </el-button>
<el-button icon="RefreshRight" @click="resetQuery"> </el-button>
</el-form-item>
</el-form>
<div style="margin-bottom: 20px">
<el-button icon="Plus" type="primary" @click="add"> </el-button>
</div>
<div ref="tableContainerEl" class="table_border table">
<el-table
ref="tableRef"
:data="tableData"
v-loading="loading"
header-row-class-name="table-header"
>
<el-table-column align="center" label="名称" prop="name" show-overflow-tooltip />
<el-table-column align="center" label="字段" prop="code" show-overflow-tooltip />
<el-table-column
align="center"
label="持续时间(天)"
prop="duration_days"
width="150"
show-overflow-tooltip
/>
<el-table-column align="center" label="价格" prop="price" show-overflow-tooltip />
<el-table-column align="center" label="标签" prop="tags" show-overflow-tooltip />
<el-table-column align="center" label="排序" prop="sort" show-overflow-tooltip />
<el-table-column align="center" label="是否启用" prop="enabled">
<template #default="{ row }">
{{ row.enabled ? '启用' : '禁用' }}
</template>
</el-table-column>
<el-table-column align="center" label="操作" width="120">
<template #default="{ row }">
<el-button link type="primary" @click="edit(row)"> </el-button>
<el-button link type="danger" @click="handleDelete(row)"> </el-button>
</template>
</el-table-column>
</el-table>
</div>
<pagination
v-show="total > 0"
:total="total"
v-model:limit="queryParams.limit"
v-model:page="queryParams.page"
@pagination="getList"
/>
<HandleDialog
v-if="isShowDialog"
:type="rowType"
:row="currentRow"
@closed="isShowDialog = false"
@on-success="getList"
/>
</div>
</template>
<script setup>
import { useTableRPC } from '@/utils/hook'
import HandleDialog from './HandleDialog.vue'
const rowType = ref('')
const currentRow = ref(null)
const add = () => {
isShowDialog.value = true
currentRow.value = null
rowType.value = 'add'
}
const edit = (row) => {
isShowDialog.value = true
rowType.value = 'edit'
currentRow.value = row
}
const {
loading,
tableData,
tableRef,
searchFormRef,
total,
queryParams,
getList,
handleQuery,
resetQuery,
handleDelete,
isShowDialog,
maxHeight,
tableContainerEl,
} = useTableRPC({
queryParams: {
orderby: [{ sort: 'asc' }],
},
remoteDataFn: '/membership_plan/list',
deleteConfig: {
remote: '/membership_plan/delete',
key: 'id',
message(row) {
return `确认删除 “${row.name}`
},
},
})
getList()
</script>
<style lang="scss" scoped>
.title {
font-size: 20px;
font-weight: 700;
margin-bottom: 20px;
}
</style>

@ -128,24 +128,24 @@ const delRow = (index) => {
<el-input placeholder="请输入" v-model="row.name" />
</template>
</el-table-column>
<el-table-column align="center" label="字段键">
<!-- <el-table-column align="center" label="字段键">
<template #default="{ row }">
<el-input placeholder="请输入" v-model="row.key" />
</template>
</el-table-column>
<el-table-column align="center" label="字段值">
</el-table-column> -->
<el-table-column align="center" label="默认值">
<template #default="{ row }">
<el-input placeholder="请输入" v-model="row.value" />
</template>
</el-table-column>
<el-table-column align="center" label="字段类型">
<!-- <el-table-column align="center" label="字段类型">
<template #default="{ row }">
<el-select placeholder="请输入" v-model="row.type">
<el-option value="string" label="字符串"></el-option>
<el-option value="number" label="数字"></el-option>
</el-select>
</template>
</el-table-column>
</el-table-column> -->
<el-table-column align="center" label="字段位置">
<template #default="{ row }">
<el-input placeholder="请输入" v-model="row.excel_loc" />

Loading…
Cancel
Save