salary
qsh 4 months ago
parent 1f9be6227c
commit c258155972
  1. 39
      src/api/school/place/index.js
  2. 34
      src/api/school/sch/index.js
  3. BIN
      src/assets/imgs/logo.png
  4. 3
      src/layout/components/Logo/src/Logo.vue
  5. 4
      src/views/Basic/User/UserAssignRoleForm.vue
  6. 4
      src/views/Login/Login.vue
  7. 9
      src/views/Login/components/QrCodeForm.vue
  8. 40
      src/views/SchoolManagement/Place/index.vue
  9. 28
      src/views/SchoolManagement/School/Comp/DialogSchool.vue
  10. 98
      src/views/SchoolManagement/School/index.vue

@ -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 })
}

@ -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 show = ref(true)
const title = computed(() => appStore.getAppInfo?.instanceName) const title = computed(() => appStore.getAppInfo?.instanceName)
const logoUrl = computed(() => appStore.getAppInfo?.instanceIcon)
const layout = computed(() => appStore.getLayout) const layout = computed(() => appStore.getLayout)
@ -67,7 +68,7 @@ watch(
> >
<img <img
class="w-[calc(var(--logo-height)-10px)] h-[calc(var(--logo-height)-10px)]" class="w-[calc(var(--logo-height)-10px)] h-[calc(var(--logo-height)-10px)]"
src="@/assets/imgs/logo.png" :src="logoUrl"
/> />
<div <div
v-if="show" v-if="show"

@ -36,7 +36,7 @@ const formData = ref({
roleIds: [] roleIds: []
}) })
const formRef = ref() // Ref const formRef = ref() // Ref
const roleList = ref([]) // const roleList = ref<any>([]) //
/** 打开弹窗 */ /** 打开弹窗 */
const open = async (row: UserApi.UserVO) => { const open = async (row: UserApi.UserVO) => {
@ -62,7 +62,7 @@ defineExpose({ open }) // 提供 open 方法,用于打开弹窗
const emit = defineEmits(['success']) // success const emit = defineEmits(['success']) // success
const submitForm = async () => { const submitForm = async () => {
// //
if (!formRef) return if (!formRef.value) return
const valid = await formRef.value.validate() const valid = await formRef.value.validate()
if (!valid) return if (!valid) return
// //

@ -9,7 +9,7 @@
> >
<!-- 左上角的 logo + 系统标题 --> <!-- 左上角的 logo + 系统标题 -->
<div class="flex items-center relative text-white"> <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> <span class="text-20px font-bold">{{ underlineToHump(appInfo.instanceName) }}</span>
</div> </div>
<!-- 左边的背景图 + 欢迎语 --> <!-- 左边的背景图 + 欢迎语 -->
@ -34,7 +34,7 @@
<!-- 右上角的主题语言选择 --> <!-- 右上角的主题语言选择 -->
<div class="flex justify-between items-center text-white @2xl:justify-end @xl:justify-end"> <div class="flex justify-between items-center text-white @2xl:justify-end @xl:justify-end">
<div class="flex items-center @2xl:hidden @xl:hidden"> <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> <span class="text-20px font-bold">{{ underlineToHump(appInfo.instanceName) }}</span>
</div> </div>
<div class="flex justify-end items-center space-x-10px"> <div class="flex justify-end items-center space-x-10px">

@ -5,7 +5,8 @@
</el-col> </el-col>
<el-col :span="24" style="padding-left: 10px; padding-right: 10px"> <el-col :span="24" style="padding-left: 10px; padding-right: 10px">
<el-card class="mb-10px text-center" shadow="hover"> <el-card class="mb-10px text-center" shadow="hover">
<Qrcode :logo="logoImg" /> <!-- <Qrcode :logo="logoUrl" /> -->
<Qrcode />
</el-card> </el-card>
</el-col> </el-col>
<el-divider class="enter-x">{{ t('login.qrcode') }}</el-divider> <el-divider class="enter-x">{{ t('login.qrcode') }}</el-divider>
@ -17,12 +18,14 @@
</el-row> </el-row>
</template> </template>
<script lang="ts" name="QrCodeForm" setup> <script lang="ts" name="QrCodeForm" setup>
import logoImg from '@/assets/imgs/logo.png'
import LoginFormTitle from './LoginFormTitle.vue' import LoginFormTitle from './LoginFormTitle.vue'
import { LoginStateEnum, useLoginState } from './useLogin' import { LoginStateEnum, useLoginState } from './useLogin'
// import { useAppStore } from '@/store/modules/app'
const { t } = useI18n() const { t } = useI18n()
const { handleBackLogin, getLoginState } = useLoginState() const { handleBackLogin, getLoginState } = useLoginState()
// const appStore = useAppStore()
const getShow = computed(() => unref(getLoginState) === LoginStateEnum.QR_CODE) const getShow = computed(() => unref(getLoginState) === LoginStateEnum.QR_CODE)
// const logoUrl = computed(() => appStore.getAppInfo?.instanceIcon)
</script> </script>

@ -221,6 +221,8 @@
</template> </template>
<script setup name="Place"> <script setup name="Place">
import * as PlaceApi from '@/api/school/place'
import FlagRed from '@/assets/imgs/flag/flag_red.png' import FlagRed from '@/assets/imgs/flag/flag_red.png'
import FlagYellow from '@/assets/imgs/flag/flag_yellow.png' import FlagYellow from '@/assets/imgs/flag/flag_yellow.png'
import FlagPurple from '@/assets/imgs/flag/flag_purple.png' import FlagPurple from '@/assets/imgs/flag/flag_purple.png'
@ -307,36 +309,14 @@ function regeoCode() {
}) })
} }
function getPageData() { async function getPageData() {
// getMapData().then((resp) => { const data = await PlaceApi.getPlaceList()
// if (resp.code == 200) { schoolList.value = data.schoolList || []
schoolList.value = [{ schoolName: '测试', showInMap: true, schoolId: '0001' }] tableData.value = data.placeList || []
tableData.value = [ if (schoolList.value.length) {
{ currentdeptId.value = schoolList.value[0].schoolId
schoolName: '测试', createMarkersInMap()
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()
// }
// });
} }
const searchValue = ref('') const searchValue = ref('')

@ -9,15 +9,15 @@
> >
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12" :offset="0"> <el-col :span="12" :offset="0">
<el-form-item label="驾校名称" prop="name"> <el-form-item label="驾校名称" prop="schoolName">
<el-input v-model="formData.name" placeholder="请输入驾校名称" /> <el-input v-model="formData.schoolName" placeholder="请输入驾校名称" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12" :offset="0"> <el-col :span="12" :offset="0">
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-radio-group v-model="formData.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-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -47,6 +47,8 @@
</Dialog> </Dialog>
</template> </template>
<script name="DialogSchool" setup> <script name="DialogSchool" setup>
import * as SchoolApi from '@/api/school/sch'
const { t } = useI18n() // const { t } = useI18n() //
const message = useMessage() // const message = useMessage() //
@ -55,14 +57,14 @@ const dialogTitle = ref('') // 弹窗的标题
const formLoading = ref(false) // 12 const formLoading = ref(false) // 12
const formType = ref('') // create - update - const formType = ref('') // create - update -
const formData = ref({ const formData = ref({
name: '', schoolName: '',
leader: '', leader: '',
phone: '', phone: '',
status: 1, status: 0,
remark: '' remark: ''
}) })
const formRules = reactive({ const formRules = reactive({
name: [{ required: true, message: '驾校名称不能为空', trigger: 'blur' }] schoolName: [{ required: true, message: '驾校名称不能为空', trigger: 'blur' }]
}) })
const formRef = ref() // Ref const formRef = ref() // Ref
@ -76,7 +78,7 @@ const open = async (type, id) => {
if (id) { if (id) {
formLoading.value = true formLoading.value = true
try { try {
// formData.value = await UserApi.getUser(id) formData.value = await SchoolApi.getSchool(id)
} finally { } finally {
formLoading.value = false formLoading.value = false
} }
@ -94,12 +96,12 @@ const submitForm = async () => {
// //
formLoading.value = true formLoading.value = true
try { try {
// const data = formData.value as unknown as UserApi.UserVO const data = formData.value
if (formType.value === 'create') { if (formType.value === 'create') {
// await UserApi.createUser(data) await SchoolApi.createSchool(data)
message.success(t('common.createSuccess')) message.success(t('common.createSuccess'))
} else { } else {
// await UserApi.updateUser(data) await SchoolApi.updateSchool(data)
message.success(t('common.updateSuccess')) message.success(t('common.updateSuccess'))
} }
dialogVisible.value = false dialogVisible.value = false
@ -113,10 +115,10 @@ const submitForm = async () => {
/** 重置表单 */ /** 重置表单 */
const resetForm = () => { const resetForm = () => {
formData.value = { formData.value = {
name: '', schoolName: '',
leader: '', leader: '',
phone: '', phone: '',
status: 1, status: 0,
remark: '' remark: ''
} }
formRef.value?.resetFields() formRef.value?.resetFields()

@ -1,31 +1,39 @@
<template> <template>
<div> <div>
<el-form :model="searchForm" ref="searchForm" label-width="0" inline> <el-form :model="searchForm" label-width="0" inline>
<el-form-item> <el-form-item>
<el-input <el-input
v-model="searchForm.name" v-model="searchForm.schoolName"
class="!w-240px" class="!w-240px"
placeholder="请输入驾校名称" placeholder="请输入驾校名称"
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button @click="handleQuery"> 搜索 </el-button> <el-button @click="handleQuery" v-hasPermi="['school:school:search']"> 搜索 </el-button>
<el-button @click="resetQuery"> 重置 </el-button> <el-button @click="resetQuery" v-hasPermi="['school:school:reset']"> 重置 </el-button>
<el-button plain type="primary" @click="openForm('create')"> 新增 </el-button> <el-button
plain
type="primary"
@click="openForm('create')"
v-hasPermi="['school:school:add']"
>
新增
</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<!-- 列表 --> <!-- 列表 -->
<el-table v-loading="loading" :data="tableList"> <el-table v-loading="loading" :data="tableList">
<el-table-column label="驾校名称" prop="name" /> <el-table-column label="驾校名称" prop="schoolName" />
<el-table-column label="负责人" prop="" /> <el-table-column label="负责人" prop="leader" />
<el-table-column label="联系方式" prop="" /> <el-table-column label="联系方式" prop="phone" />
<el-table-column label="状态"> <el-table-column label="状态">
<template #default="{ row }"> <template #default="{ row }">
<el-switch <el-switch
v-model="row.status" v-model="row.status"
:active-value="true" :active-value="0"
:inactive-value="false" :inactive-value="1"
:disabled="checkPermi(['school:school:update'])"
@change="changeStatus(row)" @change="changeStatus(row)"
/> />
</template> </template>
@ -33,15 +41,29 @@
<el-table-column label="创建时间" prop="" /> <el-table-column label="创建时间" prop="" />
<el-table-column fixed="right" label="操作" width="150"> <el-table-column fixed="right" label="操作" width="150">
<template #default="{ row }"> <template #default="{ row }">
<el-button link type="primary" @click="openForm(update, row)"> 修改 </el-button> <el-button
<el-button link type="danger" @click="handleDelete(row.id)"> 删除 </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> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- 分页 --> <!-- 分页 -->
<Pagination <Pagination
v-model:limit="searchForm.pageSize" v-model:limit="searchForm.pageSize"
v-model:page="searchForm.pageNum" v-model:page="searchForm.pageNo"
:total="total" :total="total"
@pagination="getList" @pagination="getList"
/> />
@ -49,13 +71,16 @@
</div> </div>
</template> </template>
<script setup name="School"> <script setup schoolName="School">
import DialogSchool from './Comp/DialogSchool.vue' import DialogSchool from './Comp/DialogSchool.vue'
import * as api from '@/api/school/sch'
import { checkPermi } from '@/utils/permission'
const message = useMessage() // const message = useMessage() //
const searchForm = ref({ const searchForm = ref({
name: '', schoolName: '',
pageNum: 1, pageNo: 1,
pageSize: 20 pageSize: 20
}) })
@ -67,20 +92,27 @@ const schoolDialog = ref()
function resetQuery() { function resetQuery() {
searchForm.value = { searchForm.value = {
name: '', schoolName: '',
pageSize: 20, pageSize: 20,
pageNum: 1 pageNo: 1
} }
getList() getList()
} }
function handleQuery() { function handleQuery() {
searchForm.value.pageNum = 1 searchForm.value.pageNo = 1
getList() getList()
} }
function getList() { async function getList() {
tableList.value = [{ name: '测试' }] 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) { function openForm(type, row = null) {
@ -89,20 +121,36 @@ function openForm(type, row = null) {
async function handleDelete(row) { async function handleDelete(row) {
try { try {
console.log(row)
// //
await message.delConfirm() await message.delConfirm()
// //
// await UserApi.deleteUser(row.id) await api.deleteSchool(row.id)
message.success(t('common.delSuccess')) message.success(t('common.delSuccess'))
// //
await getList() await getList()
} catch {} } catch {}
} }
function changeStatus(row) { async function changeStatus(row) {
console.log(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> </script>
<style lang="scss" scoped></style> <style lang="scss" scoped></style>

Loading…
Cancel
Save