于宏哲PHP 10 months ago
parent
commit
fefd6a9a17
  1. 14
      admin/src/app/api/pay.ts
  2. 8
      admin/src/app/api/student.ts
  3. 4
      admin/src/app/lang/zh-cn/student.student.json
  4. 32
      admin/src/app/views/customer_resources/components/customer-resources-edit.vue
  5. 9
      admin/src/app/views/customer_resources/customer_resources.vue
  6. 656
      admin/src/app/views/order_table/order_table.vue
  7. 48
      admin/src/app/views/student/components/student-edit.vue
  8. 16
      admin/src/app/views/student/student.vue

14
admin/src/app/api/pay.ts

@ -71,6 +71,7 @@ export function getRefundTransfer(params: Record<string, any>) {
}) })
} }
/** /**
* *
*/ */
@ -107,3 +108,16 @@ export function getFriendsPay(
showErrorMessage: false, showErrorMessage: false,
}) })
} }
export function orderPay(params: Record<string, any>) {
return request.post(`pay/order_pay`, params, {
showSuccessMessage: true,
})
}
export function checkPaymentStatus(params: Record<string, any>) {
return request.post(`pay/check_payment_status`, params)
}

8
admin/src/app/api/student.ts

@ -2,6 +2,8 @@ import request from '@/utils/request'
// USER_CODE_BEGIN -- student // USER_CODE_BEGIN -- student
/** /**
* *
@ -49,12 +51,12 @@ export function deleteStudent(id: number) {
return request.delete(`student/student/${id}`, { showErrorMessage: true, showSuccessMessage: true }) return request.delete(`student/student/${id}`, { showErrorMessage: true, showSuccessMessage: true })
} }
export function getWithCampusList(params: Record<string,any>){ export function getWithCustomerResourcesList(params: Record<string,any>){
return request.get('student/customer_resources_all', {params})
}export function getWithCampusList(params: Record<string,any>){
return request.get('student/campus_all', {params}) return request.get('student/campus_all', {params})
}export function getWithClassGradeList(params: Record<string,any>){ }export function getWithClassGradeList(params: Record<string,any>){
return request.get('student/class_grade_all', {params}) return request.get('student/class_grade_all', {params})
}export function getWithMemberList(params: Record<string,any>){
return request.get('student/member_all', {params})
} }
// USER_CODE_END -- student // USER_CODE_END -- student

4
admin/src/app/lang/zh-cn/student.student.json

@ -1,10 +1,10 @@
{ {
"userId":"资源",
"userIdPlaceholder":"请输入资源",
"campusId":"校区", "campusId":"校区",
"campusIdPlaceholder":"全部", "campusIdPlaceholder":"全部",
"classId":"班级", "classId":"班级",
"classIdPlaceholder":"请输入班级", "classIdPlaceholder":"请输入班级",
"userId":"用户",
"userIdPlaceholder":"请输入用户",
"name":"学员姓名", "name":"学员姓名",
"namePlaceholder":"请输入学员姓名", "namePlaceholder":"请输入学员姓名",
"gender":"性别", "gender":"性别",

32
admin/src/app/views/customer_resources/components/customer-resources-edit.vue

@ -547,37 +547,7 @@ const formRules = computed(() => {
message: t('cognitiveIdeaPlaceholder'), message: t('cognitiveIdeaPlaceholder'),
trigger: 'blur', trigger: 'blur',
}, },
], ]
optional_class_time: [
{
required: true,
message: t('optionalClassTimePlaceholder'),
trigger: 'blur',
},
],
distance: [
{ required: true, message: t('distancePlaceholder'), trigger: 'blur' },
],
decision_maker: [
{
required: true,
message: t('decisionMakerPlaceholder'),
trigger: 'blur',
},
],
initial_intent: [
{
required: true,
message: t('initialIntentPlaceholder'),
trigger: 'blur',
},
],
campus: [
{ required: true, message: t('campusPlaceholder'), trigger: 'blur' },
],
status: [
{ required: true, message: t('statusPlaceholder'), trigger: 'blur' },
],
} }
}) })

9
admin/src/app/views/customer_resources/customer_resources.vue

@ -138,11 +138,13 @@
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="200" <el-table-column :label="t('operation')" fixed="right" min-width="300"
v-if="customerResourcesTable.searchParam.type == 'zylb'"> v-if="customerResourcesTable.searchParam.type == 'zylb'">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editEvent(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editEvent(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="orderList(row.id)">订单列表</el-button>
<el-button type="primary" link @click="addOrder({'resource_id':row.id})">添加订单</el-button> <el-button type="primary" link @click="addOrder({'resource_id':row.id})">添加订单</el-button>
<el-button type="primary" link @click="tcEvent({'resource_id':row.id})">体测</el-button> <el-button type="primary" link @click="tcEvent({'resource_id':row.id})">体测</el-button>
@ -252,6 +254,11 @@
TcCustomerResourcesDialog.value.showDialog = true TcCustomerResourcesDialog.value.showDialog = true
} }
const orderList = (resource_id : number) => {
router.push({ path: '/order_table/order_table', query: { resource_id: resource_id } })
}

656
admin/src/app/views/order_table/order_table.vue

@ -1,323 +1,363 @@
<template> <template>
<div class="main-container"> <div class="main-container">
<el-card class="box-card !border-none" shadow="never"> <el-card class="box-card !border-none" shadow="never">
<div class="flex justify-between items-center"> <div class="flex justify-between items-center">
<span class="text-lg">{{ pageName }}</span> <span class="text-lg">{{ pageName }}</span>
<el-button type="primary" @click="addEvent"> <el-button type="primary" @click="addEvent">
{{ t('addOrderTable') }} {{ t('addOrderTable') }}
</el-button> </el-button>
</div> </div>
<el-card <el-card class="box-card !border-none my-[10px] table-search-wrap" shadow="never">
class="box-card !border-none my-[10px] table-search-wrap" <el-form :inline="true" :model="orderTableTable.searchParam" ref="searchFormRef">
shadow="never" <el-form-item :label="t('orderStatus')" prop="order_status">
> <el-select class="w-[280px]" v-model="orderTableTable.searchParam.order_status" clearable
<el-form :placeholder="t('orderStatusPlaceholder')">
:inline="true" <el-option label="全部" value=""></el-option>
:model="orderTableTable.searchParam" <el-option v-for="(item, index) in order_statusList" :key="index" :label="item.name"
ref="searchFormRef" :value="item.value" />
> </el-select>
<el-form-item :label="t('orderStatus')" prop="order_status"> </el-form-item>
<el-select
class="w-[280px]" <el-form-item :label="t('paymentType')" prop="payment_type">
v-model="orderTableTable.searchParam.order_status" <el-select class="w-[280px]" v-model="orderTableTable.searchParam.payment_type" clearable
clearable :placeholder="t('paymentTypePlaceholder')">
:placeholder="t('orderStatusPlaceholder')" <el-option label="全部" value=""></el-option>
> <el-option v-for="(item, index) in payment_typeList" :key="index" :label="item.name"
<el-option label="全部" value=""></el-option> :value="item.value" />
<el-option </el-select>
v-for="(item, index) in order_statusList" </el-form-item>
:key="index"
:label="item.name" <el-form-item>
:value="item.value" <el-button type="primary" @click="loadOrderTableList()">{{
/>
</el-select>
</el-form-item>
<el-form-item :label="t('paymentType')" prop="payment_type">
<el-select
class="w-[280px]"
v-model="orderTableTable.searchParam.payment_type"
clearable
:placeholder="t('paymentTypePlaceholder')"
>
<el-option label="全部" value=""></el-option>
<el-option
v-for="(item, index) in payment_typeList"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="loadOrderTableList()">{{
t('search') t('search')
}}</el-button> }}</el-button>
<el-button @click="resetForm(searchFormRef)">{{ <el-button @click="resetForm(searchFormRef)">{{
t('reset') t('reset')
}}</el-button> }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
<div class="mt-[10px]"> <div class="mt-[10px]">
<el-table <el-table :data="orderTableTable.data" size="large" v-loading="orderTableTable.loading">
:data="orderTableTable.data" <template #empty>
size="large" <span>{{ !orderTableTable.loading ? t('emptyData') : '' }}</span>
v-loading="orderTableTable.loading" </template>
> <el-table-column prop="resource_id_name" :label="t('resourceId')" min-width="120"
<template #empty> :show-overflow-tooltip="true" />
<span>{{ !orderTableTable.loading ? t('emptyData') : '' }}</span>
</template> <el-table-column :label="t('orderStatus')" min-width="180" align="center"
<el-table-column :show-overflow-tooltip="true">
prop="resource_id_name" <template #default="{ row }">
:label="t('resourceId')" <div v-for="(item, index) in order_statusList">
min-width="120" <div v-if="item.value == row.order_status">{{ item.name }}</div>
:show-overflow-tooltip="true" </div>
/> </template>
</el-table-column>
<el-table-column
:label="t('orderStatus')" <el-table-column :label="t('paymentType')" min-width="180" align="center"
min-width="180" :show-overflow-tooltip="true">
align="center" <template #default="{ row }">
:show-overflow-tooltip="true" <div v-for="(item, index) in payment_typeList">
> <div v-if="item.value == row.payment_type">{{ item.name }}</div>
<template #default="{ row }"> </div>
<div v-for="(item, index) in order_statusList"> </template>
<div v-if="item.value == row.order_status">{{ item.name }}</div> </el-table-column>
</div>
</template> <el-table-column prop="order_amount" :label="t('orderAmount')" min-width="120"
</el-table-column> :show-overflow-tooltip="true" />
<el-table-column <el-table-column prop="course_id_name" :label="t('courseId')" min-width="120"
:label="t('paymentType')" :show-overflow-tooltip="true" />
min-width="180"
align="center" <el-table-column prop="class_id_name" :label="t('classId')" min-width="120"
:show-overflow-tooltip="true" :show-overflow-tooltip="true" />
>
<template #default="{ row }"> <el-table-column prop="staff_id_name" :label="t('staffId')" min-width="120"
<div v-for="(item, index) in payment_typeList"> :show-overflow-tooltip="true" />
<div v-if="item.value == row.payment_type">{{ item.name }}</div>
</div> <el-table-column prop="payment_time" :label="t('paymentTime')" min-width="120"
</template> :show-overflow-tooltip="true" />
</el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120">
<el-table-column <template #default="{ row }">
prop="order_amount"
:label="t('orderAmount')" <el-button type="primary" link @click="startPayment(row.id)" v-if="row.order_status == 'pending'">支付</el-button>
min-width="120"
:show-overflow-tooltip="true" <el-button type="primary" link @click="editEvent(row)">{{
/>
<el-table-column
prop="course_id_name"
:label="t('courseId')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column
prop="class_id_name"
:label="t('classId')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column
prop="staff_id_name"
:label="t('staffId')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column
prop="payment_time"
:label="t('paymentTime')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column
:label="t('operation')"
fixed="right"
min-width="120"
>
<template #default="{ row }">
<el-button type="primary" link @click="editEvent(row)">{{
t('edit') t('edit')
}}</el-button> }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id)">{{ <el-button type="primary" link @click="deleteEvent(row.id)">{{
t('delete') t('delete')
}}</el-button> }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class="mt-[16px] flex justify-end"> <div class="mt-[16px] flex justify-end">
<el-pagination <el-pagination v-model:current-page="orderTableTable.page" v-model:page-size="orderTableTable.limit"
v-model:current-page="orderTableTable.page" layout="total, sizes, prev, pager, next, jumper" :total="orderTableTable.total"
v-model:page-size="orderTableTable.limit" @size-change="loadOrderTableList()" @current-change="loadOrderTableList" />
layout="total, sizes, prev, pager, next, jumper" </div>
:total="orderTableTable.total" </div>
@size-change="loadOrderTableList()"
@current-change="loadOrderTableList" <edit ref="editOrderTableDialog" @complete="loadOrderTableList" />
/> </el-card>
</div>
</div>
<el-dialog v-model="showDialog" title="请扫码支付" width="320px" center @close="handleClose">
<edit ref="editOrderTableDialog" @complete="loadOrderTableList" /> <div v-if="qrCodeUrl" class="qr-box">
</el-card> <img :src="qrCodeUrl" alt="二维码" class="qr-img" />
</div> <p class="pay-id">支付编号{{ payId }}</p>
</div>
</el-dialog>
</div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { reactive, ref, watch } from 'vue' import QrcodeVue from '@/app/views/order_table/components/qrcode.vue'
import { t } from '@/lang' import { reactive, ref, watch, onBeforeUnmount } from 'vue'
import { useDictionary } from '@/app/api/dict' import { t } from '@/lang'
import { import { useDictionary } from '@/app/api/dict'
getOrderTableList, import {
deleteOrderTable, getOrderTableList,
getWithCustomerResourcesList, deleteOrderTable,
getWithCourseList, getWithCustomerResourcesList,
getWithClassGradeList, getWithCourseList,
getWithPersonnelList, getWithClassGradeList,
} from '@/app/api/order_table' getWithPersonnelList,
import { img } from '@/utils/common' } from '@/app/api/order_table'
import { ElMessageBox, FormInstance } from 'element-plus' import {
import Edit from '@/app/views/order_table/components/order-table-edit.vue' orderPay,
import { useRoute } from 'vue-router' checkPaymentStatus
const route = useRoute() } from '@/app/api/pay'
const pageName = route.meta.title
let orderTableTable = reactive({ import { img } from '@/utils/common'
page: 1, import { ElMessageBox, FormInstance } from 'element-plus'
limit: 10, import Edit from '@/app/views/order_table/components/order-table-edit.vue'
total: 0, import { useRoute } from 'vue-router'
loading: true, const route = useRoute()
data: [], const pageName = route.meta.title
searchParam: {
order_status: '',
payment_type: '', let orderTableTable = reactive({
}, page: 1,
}) limit: 10,
total: 0,
const searchFormRef = ref<FormInstance>() loading: true,
data: [],
// searchParam: {
const selectData = ref<any[]>([]) order_status: '',
payment_type: '',
// resource_id: route.query.resource_id ?? ''
const order_statusList = ref([] as any[]) },
const order_statusDictList = async () => { })
order_statusList.value = await (
await useDictionary('order_status')
).data.dictionary const showDialog = ref(false)
} const qrCodeUrl = ref('')
order_statusDictList() const payId = ref('')
const payment_typeList = ref([] as any[]) let checkTimer: ReturnType<typeof setInterval> | null = null
const payment_typeDictList = async () => {
payment_typeList.value = await ( const startPayment = async (order_id : number) => {
await useDictionary('payment_type')
).data.dictionary orderPay({
} order_id: order_id
payment_typeDictList() })
.then((res) => {
/** qrCodeUrl.value = res.data.qrcode_url
* 获取订单列表 payId.value = res.data.out_trade_no
*/ showDialog.value = true
const loadOrderTableList = (page: number = 1) => {
orderTableTable.loading = true //
orderTableTable.page = page startCheckingStatus()
})
getOrderTableList({ .catch(() => {
page: orderTableTable.page,
limit: orderTableTable.limit, })
...orderTableTable.searchParam, }
})
.then((res) => { const startCheckingStatus = () => {
orderTableTable.loading = false if (checkTimer) clearInterval(checkTimer)
orderTableTable.data = res.data.data checkTimer = setInterval(async () => {
orderTableTable.total = res.data.total checkPaymentStatus({
}) out_trade_no: payId.value
.catch(() => { })
orderTableTable.loading = false .then((res) => {
}) if (res.data.order_status === 'paid') {
} clearInterval(checkTimer!)
loadOrderTableList() showDialog.value = false
handlePaymentSuccess()
const editOrderTableDialog: Record<string, any> | null = ref(null) }
})
/** .catch(() => {
* 添加订单
*/ })
const addEvent = () => { }, 3000)
editOrderTableDialog.value.setFormData()
editOrderTableDialog.value.showDialog = true }
}
/** const handleClose = () => {
* 编辑订单 if (checkTimer) clearInterval(checkTimer)
* @param data }
*/
const editEvent = (data: any) => { const handlePaymentSuccess = () => {
editOrderTableDialog.value.setFormData(data) //
editOrderTableDialog.value.showDialog = true loadOrderTableList();
} }
/** onBeforeUnmount(() => {
* 删除订单 if (checkTimer) clearInterval(checkTimer)
*/ })
const deleteEvent = (id: number) => {
ElMessageBox.confirm(t('orderTableDeleteTips'), t('warning'), {
confirmButtonText: t('confirm'), const searchFormRef = ref<FormInstance>()
cancelButtonText: t('cancel'),
type: 'warning', //
}).then(() => { const selectData = ref<any[]>([])
deleteOrderTable(id)
.then(() => { //
loadOrderTableList() const order_statusList = ref([] as any[])
}) const order_statusDictList = async () => {
.catch(() => {}) order_statusList.value = await (
}) await useDictionary('order_status')
} ).data.dictionary
}
const resourceIdList = ref([]) order_statusDictList()
const setResourceIdList = async () => { const payment_typeList = ref([] as any[])
resourceIdList.value = await (await getWithCustomerResourcesList({})).data const payment_typeDictList = async () => {
} payment_typeList.value = await (
setResourceIdList() await useDictionary('payment_type')
const courseIdList = ref([]) ).data.dictionary
const setCourseIdList = async () => { }
courseIdList.value = await (await getWithCourseList({})).data payment_typeDictList()
}
setCourseIdList() /**
const classIdList = ref([]) * 获取订单列表
const setClassIdList = async () => { */
classIdList.value = await (await getWithClassGradeList({})).data const loadOrderTableList = (page : number = 1) => {
} orderTableTable.loading = true
setClassIdList() orderTableTable.page = page
const staffIdList = ref([])
const setStaffIdList = async () => { getOrderTableList({
staffIdList.value = await (await getWithPersonnelList({})).data page: orderTableTable.page,
} limit: orderTableTable.limit,
setStaffIdList() ...orderTableTable.searchParam,
})
const resetForm = (formEl: FormInstance | undefined) => { .then((res) => {
if (!formEl) return orderTableTable.loading = false
formEl.resetFields() orderTableTable.data = res.data.data
loadOrderTableList() orderTableTable.total = res.data.total
} })
.catch(() => {
orderTableTable.loading = false
})
}
loadOrderTableList()
const editOrderTableDialog : Record<string, any> | null = ref(null)
/**
* 添加订单
*/
const addEvent = () => {
editOrderTableDialog.value.setFormData()
editOrderTableDialog.value.showDialog = true
}
/**
* 编辑订单
* @param data
*/
const editEvent = (data : any) => {
editOrderTableDialog.value.setFormData(data)
editOrderTableDialog.value.showDialog = true
}
/**
* 删除订单
*/
const deleteEvent = (id : number) => {
ElMessageBox.confirm(t('orderTableDeleteTips'), t('warning'), {
confirmButtonText: t('confirm'),
cancelButtonText: t('cancel'),
type: 'warning',
}).then(() => {
deleteOrderTable(id)
.then(() => {
loadOrderTableList()
})
.catch(() => { })
})
}
const resourceIdList = ref([])
const setResourceIdList = async () => {
resourceIdList.value = await (await getWithCustomerResourcesList({})).data
}
setResourceIdList()
const courseIdList = ref([])
const setCourseIdList = async () => {
courseIdList.value = await (await getWithCourseList({})).data
}
setCourseIdList()
const classIdList = ref([])
const setClassIdList = async () => {
classIdList.value = await (await getWithClassGradeList({})).data
}
setClassIdList()
const staffIdList = ref([])
const setStaffIdList = async () => {
staffIdList.value = await (await getWithPersonnelList({})).data
}
setStaffIdList()
const resetForm = (formEl : FormInstance | undefined) => {
if (!formEl) return
formEl.resetFields()
loadOrderTableList()
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
/* 多行超出隐藏 */ /* 多行超出隐藏 */
.multi-hidden { .multi-hidden {
word-break: break-all; word-break: break-all;
text-overflow: ellipsis; text-overflow: ellipsis;
overflow: hidden; overflow: hidden;
display: -webkit-box; display: -webkit-box;
-webkit-line-clamp: 2; -webkit-line-clamp: 2;
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
} }
</style>
.qr-box {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 16px;
background-color: #fdfdfd;
border-radius: 12px;
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.08);
transition: all 0.3s ease-in-out;
}
.qr-img {
width: 200px;
height: 200px;
border-radius: 8px;
object-fit: contain;
border: 1px solid #e5e5e5;
}
.pay-id {
margin-top: 14px;
font-size: 13px;
color: #666;
word-break: break-all;
}
</style>

48
admin/src/app/views/student/components/student-edit.vue

@ -1,6 +1,18 @@
<template> <template>
<el-dialog v-model="showDialog" :title="formData.id ? t('updateStudent') : t('addStudent')" width="50%" class="diy-dialog-wrap" :destroy-on-close="true"> <el-dialog v-model="showDialog" :title="formData.id ? t('updateStudent') : t('addStudent')" width="50%" class="diy-dialog-wrap" :destroy-on-close="true">
<el-form :model="formData" label-width="120px" ref="formRef" :rules="formRules" class="page-form" v-loading="loading"> <el-form :model="formData" label-width="120px" ref="formRef" :rules="formRules" class="page-form" v-loading="loading">
<el-form-item :label="t('userId')" prop="user_id">
<el-select class="input-width" v-model="formData.user_id" clearable :placeholder="t('userIdPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in userIdList"
:key="index"
:label="item['name']"
:value="item['id']"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('campusId')" > <el-form-item :label="t('campusId')" >
<el-select class="input-width" v-model="formData.campus_id" clearable :placeholder="t('campusIdPlaceholder')"> <el-select class="input-width" v-model="formData.campus_id" clearable :placeholder="t('campusIdPlaceholder')">
<el-option label="请选择" value=""></el-option> <el-option label="请选择" value=""></el-option>
@ -25,18 +37,6 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('userId')" prop="user_id">
<el-select class="input-width" v-model="formData.user_id" clearable :placeholder="t('userIdPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in userIdList"
:key="index"
:label="item['nickname']"
:value="item['member_id']"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('name')" prop="name"> <el-form-item :label="t('name')" prop="name">
<el-input v-model="formData.name" clearable :placeholder="t('namePlaceholder')" class="input-width" /> <el-input v-model="formData.name" clearable :placeholder="t('namePlaceholder')" class="input-width" />
</el-form-item> </el-form-item>
@ -109,7 +109,7 @@ import { ref, reactive, computed, watch } from 'vue'
import { useDictionary } from '@/app/api/dict' import { useDictionary } from '@/app/api/dict'
import { t } from '@/lang' import { t } from '@/lang'
import type { FormInstance } from 'element-plus' import type { FormInstance } from 'element-plus'
import { addStudent, editStudent, getStudentInfo, getWithCampusList, getWithClassGradeList, getWithMemberList } from '@/app/api/student' import { addStudent, editStudent, getStudentInfo, getWithCustomerResourcesList, getWithCampusList, getWithClassGradeList } from '@/app/api/student'
let showDialog = ref(false) let showDialog = ref(false)
const loading = ref(false) const loading = ref(false)
@ -119,9 +119,9 @@ const loading = ref(false)
*/ */
const initialFormData = { const initialFormData = {
id: '', id: '',
user_id: '',
campus_id: '', campus_id: '',
class_id: '', class_id: '',
user_id: '',
name: '', name: '',
gender: '', gender: '',
age: '', age: '',
@ -138,6 +138,11 @@ const formRef = ref<FormInstance>()
// //
const formRules = computed(() => { const formRules = computed(() => {
return { return {
user_id: [
{ required: true, message: t('userIdPlaceholder'), trigger: 'blur' },
]
,
campus_id: [ campus_id: [
{ required: true, message: t('campusIdPlaceholder'), trigger: 'blur' }, { required: true, message: t('campusIdPlaceholder'), trigger: 'blur' },
@ -146,11 +151,6 @@ const formRules = computed(() => {
class_id: [ class_id: [
{ required: true, message: t('classIdPlaceholder'), trigger: 'blur' }, { required: true, message: t('classIdPlaceholder'), trigger: 'blur' },
]
,
user_id: [
{ required: true, message: t('userIdPlaceholder'), trigger: 'blur' },
] ]
, ,
name: [ name: [
@ -238,6 +238,11 @@ const confirm = async (formEl: FormInstance | undefined) => {
watch(() => statusList.value, () => { formData.status = statusList.value[0].value }) watch(() => statusList.value, () => { formData.status = statusList.value[0].value })
const userIdList = ref([] as any[])
const setUserIdList = async () => {
userIdList.value = await (await getWithCustomerResourcesList({})).data
}
setUserIdList()
const campusIdList = ref([] as any[]) const campusIdList = ref([] as any[])
const setCampusIdList = async () => { const setCampusIdList = async () => {
campusIdList.value = await (await getWithCampusList({})).data campusIdList.value = await (await getWithCampusList({})).data
@ -248,11 +253,6 @@ const confirm = async (formEl: FormInstance | undefined) => {
classIdList.value = await (await getWithClassGradeList({})).data classIdList.value = await (await getWithClassGradeList({})).data
} }
setClassIdList() setClassIdList()
const userIdList = ref([] as any[])
const setUserIdList = async () => {
userIdList.value = await (await getWithMemberList({})).data
}
setUserIdList()
const setFormData = async (row: any = null) => { const setFormData = async (row: any = null) => {
Object.assign(formData, initialFormData) Object.assign(formData, initialFormData)
loading.value = true loading.value = true

16
admin/src/app/views/student/student.vue

@ -49,12 +49,12 @@
<template #empty> <template #empty>
<span>{{ !studentTable.loading ? t('emptyData') : '' }}</span> <span>{{ !studentTable.loading ? t('emptyData') : '' }}</span>
</template> </template>
<el-table-column prop="user_id_name" :label="t('userId')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="campus_id_name" :label="t('campusId')" min-width="120" :show-overflow-tooltip="true"/> <el-table-column prop="campus_id_name" :label="t('campusId')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="class_id_name" :label="t('classId')" min-width="120" :show-overflow-tooltip="true"/> <el-table-column prop="class_id_name" :label="t('classId')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="user_id_name" :label="t('userId')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="name" :label="t('name')" min-width="120" :show-overflow-tooltip="true"/> <el-table-column prop="name" :label="t('name')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column :label="t('gender')" min-width="180" align="center" :show-overflow-tooltip="true"> <el-table-column :label="t('gender')" min-width="180" align="center" :show-overflow-tooltip="true">
@ -105,7 +105,7 @@
import { reactive, ref, watch } from 'vue' import { reactive, ref, watch } from 'vue'
import { t } from '@/lang' import { t } from '@/lang'
import { useDictionary } from '@/app/api/dict' import { useDictionary } from '@/app/api/dict'
import { getStudentList, deleteStudent, getWithCampusList, getWithClassGradeList, getWithMemberList } from '@/app/api/student' import { getStudentList, deleteStudent, getWithCustomerResourcesList, getWithCampusList, getWithClassGradeList } from '@/app/api/student'
import { img } from '@/utils/common' import { img } from '@/utils/common'
import { ElMessageBox,FormInstance } from 'element-plus' import { ElMessageBox,FormInstance } from 'element-plus'
import Edit from '@/app/views/student/components/student-edit.vue' import Edit from '@/app/views/student/components/student-edit.vue'
@ -204,6 +204,11 @@ const deleteEvent = (id: number) => {
} }
const userIdList = ref([])
const setUserIdList = async () => {
userIdList.value = await (await getWithCustomerResourcesList({})).data
}
setUserIdList()
const campusIdList = ref([]) const campusIdList = ref([])
const setCampusIdList = async () => { const setCampusIdList = async () => {
campusIdList.value = await (await getWithCampusList({})).data campusIdList.value = await (await getWithCampusList({})).data
@ -214,11 +219,6 @@ const deleteEvent = (id: number) => {
classIdList.value = await (await getWithClassGradeList({})).data classIdList.value = await (await getWithClassGradeList({})).data
} }
setClassIdList() setClassIdList()
const userIdList = ref([])
const setUserIdList = async () => {
userIdList.value = await (await getWithMemberList({})).data
}
setUserIdList()
const resetForm = (formEl: FormInstance | undefined) => { const resetForm = (formEl: FormInstance | undefined) => {
if (!formEl) return if (!formEl) return

Loading…
Cancel
Save