驾校
This commit is contained in:
39
src/api/school/place/index.js
Normal file
39
src/api/school/place/index.js
Normal file
@@ -0,0 +1,39 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 查询列表-分页
|
||||
export const getPlacePage = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/sch-place/page', params })
|
||||
}
|
||||
|
||||
// 查询列表-不分页
|
||||
export const getPlaceList = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/sch-place/list', params })
|
||||
}
|
||||
|
||||
// 查询详情
|
||||
export const getPlace = async (id) => {
|
||||
return await request.get({ url: '/admin-api/crm/sch-place/get?id=' + id })
|
||||
}
|
||||
|
||||
// 新增
|
||||
export const createPlace = async (data) => {
|
||||
return await request.post({ url: '/admin-api/crm/sch-place/create', data: data })
|
||||
}
|
||||
|
||||
// 修改
|
||||
export const updatePlace = async (params) => {
|
||||
return await request.put({ url: '/admin-api/crm/sch-place/update', data: params })
|
||||
}
|
||||
|
||||
// 删除
|
||||
export const deletePlace = async (id) => {
|
||||
return await request.delete({ url: '/admin-api/crm/sch-place/delete?id=' + id })
|
||||
}
|
||||
|
||||
export const updatePlaceStatus = async (id, status) => {
|
||||
const data = {
|
||||
id,
|
||||
status
|
||||
}
|
||||
return request.put({ url: '/admin-api/crm/sch-place/update-status', data: data })
|
||||
}
|
||||
34
src/api/school/sch/index.js
Normal file
34
src/api/school/sch/index.js
Normal file
@@ -0,0 +1,34 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 查询列表
|
||||
export const getSchoolPage = async (params) => {
|
||||
return await request.get({ url: '/admin-api/crm/sch-school/page', params })
|
||||
}
|
||||
|
||||
// 查询详情
|
||||
export const getSchool = async (id) => {
|
||||
return await request.get({ url: '/admin-api/crm/sch-school/get?id=' + id })
|
||||
}
|
||||
|
||||
// 新增
|
||||
export const createSchool = async (data) => {
|
||||
return await request.post({ url: '/admin-api/crm/sch-school/create', data: data })
|
||||
}
|
||||
|
||||
// 修改
|
||||
export const updateSchool = async (params) => {
|
||||
return await request.put({ url: '/admin-api/crm/sch-school/update', data: params })
|
||||
}
|
||||
|
||||
// 删除
|
||||
export const deleteSchool = async (id) => {
|
||||
return await request.delete({ url: '/admin-api/crm/sch-school/delete?id=' + id })
|
||||
}
|
||||
|
||||
export const updateSchoolStatus = async (id, status) => {
|
||||
const data = {
|
||||
id,
|
||||
status
|
||||
}
|
||||
return request.put({ url: '/admin-api/crm/sch-school/update-status', data: data })
|
||||
}
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 2.7 KiB |
@@ -12,6 +12,7 @@ const appStore = useAppStore()
|
||||
const show = ref(true)
|
||||
|
||||
const title = computed(() => appStore.getAppInfo?.instanceName)
|
||||
const logoUrl = computed(() => appStore.getAppInfo?.instanceIcon)
|
||||
|
||||
const layout = computed(() => appStore.getLayout)
|
||||
|
||||
@@ -67,7 +68,7 @@ watch(
|
||||
>
|
||||
<img
|
||||
class="w-[calc(var(--logo-height)-10px)] h-[calc(var(--logo-height)-10px)]"
|
||||
src="@/assets/imgs/logo.png"
|
||||
:src="logoUrl"
|
||||
/>
|
||||
<div
|
||||
v-if="show"
|
||||
|
||||
@@ -36,7 +36,7 @@ const formData = ref({
|
||||
roleIds: []
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
const roleList = ref([]) // 角色的列表
|
||||
const roleList = ref<any>([]) // 角色的列表
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (row: UserApi.UserVO) => {
|
||||
@@ -62,7 +62,7 @@ defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
if (!formRef) return
|
||||
if (!formRef.value) return
|
||||
const valid = await formRef.value.validate()
|
||||
if (!valid) return
|
||||
// 提交请求
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
>
|
||||
<!-- 左上角的 logo + 系统标题 -->
|
||||
<div class="flex items-center relative text-white">
|
||||
<img alt="" class="w-48px h-48px mr-10px" src="@/assets/imgs/logo.png" />
|
||||
<img alt="" class="w-48px h-48px mr-10px" :src="appInfo.instanceIcon" />
|
||||
<span class="text-20px font-bold">{{ underlineToHump(appInfo.instanceName) }}</span>
|
||||
</div>
|
||||
<!-- 左边的背景图 + 欢迎语 -->
|
||||
@@ -34,7 +34,7 @@
|
||||
<!-- 右上角的主题、语言选择 -->
|
||||
<div class="flex justify-between items-center text-white @2xl:justify-end @xl:justify-end">
|
||||
<div class="flex items-center @2xl:hidden @xl:hidden">
|
||||
<img alt="" class="w-48px h-48px mr-10px" src="@/assets/imgs/logo.png" />
|
||||
<img alt="" class="w-48px h-48px mr-10px" :src="appInfo.instanceIcon" />
|
||||
<span class="text-20px font-bold">{{ underlineToHump(appInfo.instanceName) }}</span>
|
||||
</div>
|
||||
<div class="flex justify-end items-center space-x-10px">
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
</el-col>
|
||||
<el-col :span="24" style="padding-left: 10px; padding-right: 10px">
|
||||
<el-card class="mb-10px text-center" shadow="hover">
|
||||
<Qrcode :logo="logoImg" />
|
||||
<!-- <Qrcode :logo="logoUrl" /> -->
|
||||
<Qrcode />
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-divider class="enter-x">{{ t('login.qrcode') }}</el-divider>
|
||||
@@ -17,12 +18,14 @@
|
||||
</el-row>
|
||||
</template>
|
||||
<script lang="ts" name="QrCodeForm" setup>
|
||||
import logoImg from '@/assets/imgs/logo.png'
|
||||
|
||||
import LoginFormTitle from './LoginFormTitle.vue'
|
||||
import { LoginStateEnum, useLoginState } from './useLogin'
|
||||
// import { useAppStore } from '@/store/modules/app'
|
||||
|
||||
const { t } = useI18n()
|
||||
const { handleBackLogin, getLoginState } = useLoginState()
|
||||
// const appStore = useAppStore()
|
||||
|
||||
const getShow = computed(() => unref(getLoginState) === LoginStateEnum.QR_CODE)
|
||||
// const logoUrl = computed(() => appStore.getAppInfo?.instanceIcon)
|
||||
</script>
|
||||
|
||||
@@ -221,6 +221,8 @@
|
||||
</template>
|
||||
|
||||
<script setup name="Place">
|
||||
import * as PlaceApi from '@/api/school/place'
|
||||
|
||||
import FlagRed from '@/assets/imgs/flag/flag_red.png'
|
||||
import FlagYellow from '@/assets/imgs/flag/flag_yellow.png'
|
||||
import FlagPurple from '@/assets/imgs/flag/flag_purple.png'
|
||||
@@ -307,36 +309,14 @@ function regeoCode() {
|
||||
})
|
||||
}
|
||||
|
||||
function getPageData() {
|
||||
// getMapData().then((resp) => {
|
||||
// if (resp.code == 200) {
|
||||
schoolList.value = [{ schoolName: '测试', showInMap: true, schoolId: '0001' }]
|
||||
tableData.value = [
|
||||
{
|
||||
schoolName: '测试',
|
||||
showInMap: true,
|
||||
schoolId: '0001',
|
||||
name: '训练场1',
|
||||
lat: 31.86119,
|
||||
lng: 117.283042,
|
||||
schoolShow: true,
|
||||
placeId: 'p0001'
|
||||
},
|
||||
{
|
||||
schoolName: '测试',
|
||||
showInMap: false,
|
||||
schoolId: '0001',
|
||||
name: '训练场2',
|
||||
lat: 31.86219,
|
||||
lng: 117.281042,
|
||||
schoolShow: true,
|
||||
placeId: 'p0002'
|
||||
}
|
||||
]
|
||||
currentdeptId.value = schoolList.value[0].schoolId
|
||||
createMarkersInMap()
|
||||
// }
|
||||
// });
|
||||
async function getPageData() {
|
||||
const data = await PlaceApi.getPlaceList()
|
||||
schoolList.value = data.schoolList || []
|
||||
tableData.value = data.placeList || []
|
||||
if (schoolList.value.length) {
|
||||
currentdeptId.value = schoolList.value[0].schoolId
|
||||
createMarkersInMap()
|
||||
}
|
||||
}
|
||||
|
||||
const searchValue = ref('')
|
||||
|
||||
@@ -9,15 +9,15 @@
|
||||
>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12" :offset="0">
|
||||
<el-form-item label="驾校名称" prop="name">
|
||||
<el-input v-model="formData.name" placeholder="请输入驾校名称" />
|
||||
<el-form-item label="驾校名称" prop="schoolName">
|
||||
<el-input v-model="formData.schoolName" placeholder="请输入驾校名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" :offset="0">
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="formData.status">
|
||||
<el-radio :label="1"> 正常 </el-radio>
|
||||
<el-radio :label="0"> 停用 </el-radio>
|
||||
<el-radio :label="0"> 正常 </el-radio>
|
||||
<el-radio :label="1"> 停用 </el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@@ -47,6 +47,8 @@
|
||||
</Dialog>
|
||||
</template>
|
||||
<script name="DialogSchool" setup>
|
||||
import * as SchoolApi from '@/api/school/sch'
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
@@ -55,14 +57,14 @@ const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
name: '',
|
||||
schoolName: '',
|
||||
leader: '',
|
||||
phone: '',
|
||||
status: 1,
|
||||
status: 0,
|
||||
remark: ''
|
||||
})
|
||||
const formRules = reactive({
|
||||
name: [{ required: true, message: '驾校名称不能为空', trigger: 'blur' }]
|
||||
schoolName: [{ required: true, message: '驾校名称不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
@@ -76,7 +78,7 @@ const open = async (type, id) => {
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
// formData.value = await UserApi.getUser(id)
|
||||
formData.value = await SchoolApi.getSchool(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
@@ -94,12 +96,12 @@ const submitForm = async () => {
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
// const data = formData.value as unknown as UserApi.UserVO
|
||||
const data = formData.value
|
||||
if (formType.value === 'create') {
|
||||
// await UserApi.createUser(data)
|
||||
await SchoolApi.createSchool(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
// await UserApi.updateUser(data)
|
||||
await SchoolApi.updateSchool(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
@@ -113,10 +115,10 @@ const submitForm = async () => {
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
name: '',
|
||||
schoolName: '',
|
||||
leader: '',
|
||||
phone: '',
|
||||
status: 1,
|
||||
status: 0,
|
||||
remark: ''
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
|
||||
@@ -1,31 +1,39 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-form :model="searchForm" ref="searchForm" label-width="0" inline>
|
||||
<el-form :model="searchForm" label-width="0" inline>
|
||||
<el-form-item>
|
||||
<el-input
|
||||
v-model="searchForm.name"
|
||||
v-model="searchForm.schoolName"
|
||||
class="!w-240px"
|
||||
placeholder="请输入驾校名称"
|
||||
@keyup.enter="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"> 搜索 </el-button>
|
||||
<el-button @click="resetQuery"> 重置 </el-button>
|
||||
<el-button plain type="primary" @click="openForm('create')"> 新增 </el-button>
|
||||
<el-button @click="handleQuery" v-hasPermi="['school:school:search']"> 搜索 </el-button>
|
||||
<el-button @click="resetQuery" v-hasPermi="['school:school:reset']"> 重置 </el-button>
|
||||
<el-button
|
||||
plain
|
||||
type="primary"
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['school:school:add']"
|
||||
>
|
||||
新增
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<!-- 列表 -->
|
||||
<el-table v-loading="loading" :data="tableList">
|
||||
<el-table-column label="驾校名称" prop="name" />
|
||||
<el-table-column label="负责人" prop="" />
|
||||
<el-table-column label="联系方式" prop="" />
|
||||
<el-table-column label="驾校名称" prop="schoolName" />
|
||||
<el-table-column label="负责人" prop="leader" />
|
||||
<el-table-column label="联系方式" prop="phone" />
|
||||
<el-table-column label="状态">
|
||||
<template #default="{ row }">
|
||||
<el-switch
|
||||
v-model="row.status"
|
||||
:active-value="true"
|
||||
:inactive-value="false"
|
||||
:active-value="0"
|
||||
:inactive-value="1"
|
||||
:disabled="checkPermi(['school:school:update'])"
|
||||
@change="changeStatus(row)"
|
||||
/>
|
||||
</template>
|
||||
@@ -33,15 +41,29 @@
|
||||
<el-table-column label="创建时间" prop="" />
|
||||
<el-table-column fixed="right" label="操作" width="150">
|
||||
<template #default="{ row }">
|
||||
<el-button link type="primary" @click="openForm(update, row)"> 修改 </el-button>
|
||||
<el-button link type="danger" @click="handleDelete(row.id)"> 删除 </el-button>
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm(update, row)"
|
||||
v-hasPermi="['school:school:update']"
|
||||
>
|
||||
修改
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(row.id)"
|
||||
v-hasPermi="['school:school:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
v-model:limit="searchForm.pageSize"
|
||||
v-model:page="searchForm.pageNum"
|
||||
v-model:page="searchForm.pageNo"
|
||||
:total="total"
|
||||
@pagination="getList"
|
||||
/>
|
||||
@@ -49,13 +71,16 @@
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup name="School">
|
||||
<script setup schoolName="School">
|
||||
import DialogSchool from './Comp/DialogSchool.vue'
|
||||
import * as api from '@/api/school/sch'
|
||||
import { checkPermi } from '@/utils/permission'
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const searchForm = ref({
|
||||
name: '',
|
||||
pageNum: 1,
|
||||
schoolName: '',
|
||||
pageNo: 1,
|
||||
pageSize: 20
|
||||
})
|
||||
|
||||
@@ -67,20 +92,27 @@ const schoolDialog = ref()
|
||||
|
||||
function resetQuery() {
|
||||
searchForm.value = {
|
||||
name: '',
|
||||
schoolName: '',
|
||||
pageSize: 20,
|
||||
pageNum: 1
|
||||
pageNo: 1
|
||||
}
|
||||
getList()
|
||||
}
|
||||
|
||||
function handleQuery() {
|
||||
searchForm.value.pageNum = 1
|
||||
searchForm.value.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
function getList() {
|
||||
tableList.value = [{ name: '测试' }]
|
||||
async function getList() {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await api.getSchoolPage(searchForm.value)
|
||||
tableList.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
function openForm(type, row = null) {
|
||||
@@ -89,20 +121,36 @@ function openForm(type, row = null) {
|
||||
|
||||
async function handleDelete(row) {
|
||||
try {
|
||||
console.log(row)
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
// await UserApi.deleteUser(row.id)
|
||||
await api.deleteSchool(row.id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
function changeStatus(row) {
|
||||
console.log(row)
|
||||
async function changeStatus(row) {
|
||||
try {
|
||||
// 修改状态的二次确认
|
||||
const text = row.status === CommonStatusEnum.ENABLE ? '启用' : '停用'
|
||||
await message.confirm('确认要"' + text + '""' + row.schoolName + '"驾校吗?')
|
||||
// 发起修改状态
|
||||
await api.updateSchoolStatus(row.id, row.status)
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {
|
||||
// 取消后,进行恢复按钮
|
||||
row.status =
|
||||
row.status === CommonStatusEnum.ENABLE ? CommonStatusEnum.DISABLE : CommonStatusEnum.ENABLE
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(async () => {
|
||||
await getList()
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
||||
|
||||
Reference in New Issue
Block a user