于宏哲PHP 9 months ago
parent
commit
0b14c60d99
  1. 21
      admin/src/app/views/classroom/components/classroom-edit.vue
  2. 400
      admin/src/views/personnel/personnel_approval_demo.vue
  3. 2
      niucloud/app/adminapi/controller/classroom/Classroom.php
  4. 4
      niucloud/app/service/admin/classroom/ClassroomService.php
  5. 2
      niucloud/app/service/admin/customer_resources/CustomerResourcesService.php

21
admin/src/app/views/classroom/components/classroom-edit.vue

@ -52,7 +52,7 @@
v-for="(item, index) in headCoachList" v-for="(item, index) in headCoachList"
:key="index" :key="index"
:label="item['name']" :label="item['name']"
:value="item['id']" :value="String(item['id'])"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -96,6 +96,24 @@
v-for="(item, index) in assistantCoachList" v-for="(item, index) in assistantCoachList"
:key="index" :key="index"
:label="item['name']" :label="item['name']"
:value="String(item['id'])"
/>
</el-select>
</el-form-item>
<el-form-item label="教务" prop="educational_id">
<el-select
class="input-width"
v-model="formData.educational_id"
clearable
placeholder="请选择教务"
>
<el-option label="请选择教务" value=""></el-option>
<el-option
v-for="(item, index) in headCoachList"
:key="index"
:label="item['name']"
:value="item['id']" :value="item['id']"
/> />
</el-select> </el-select>
@ -176,6 +194,7 @@ const initialFormData = {
age_group: '', age_group: '',
class_type: '', class_type: '',
assistant_coach: '', assistant_coach: '',
educational_id:'',
status: '', status: '',
sort_order: '', sort_order: '',
remarks: '', remarks: '',

400
admin/src/views/personnel/personnel_approval_demo.vue

@ -1,400 +0,0 @@
<template>
<div class="personnel-approval-demo">
<el-card class="demo-card" shadow="hover">
<template #header>
<div class="card-header">
<h3>人员添加审批功能演示</h3>
<p class="desc">该功能展示如何将人员添加接入审批流程</p>
</div>
</template>
<!-- 审批配置选择 -->
<div class="section">
<h4>第一步选择审批配置</h4>
<el-form :model="form" label-width="120px" size="default">
<el-form-item label="是否使用审批:">
<el-switch
v-model="form.useApproval"
active-text="启用审批流程"
inactive-text="直接添加"
@change="onApprovalToggle">
</el-switch>
</el-form-item>
<el-form-item
v-if="form.useApproval"
label="审批配置:"
required>
<el-select
v-model="form.approvalConfigId"
placeholder="请选择审批配置"
:loading="configLoading"
clearable>
<el-option
v-for="config in approvalConfigs"
:key="config.id"
:label="config.config_name"
:value="config.id">
<span>{{ config.config_name }}</span>
<span style="float: right; color: #8492a6;">{{ config.description }}</span>
</el-option>
</el-select>
</el-form-item>
</el-form>
</div>
<!-- 人员信息填写 -->
<div class="section">
<h4>第二步填写人员信息</h4>
<el-form :model="personnelForm" :rules="rules" ref="personnelFormRef" label-width="120px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="姓名:" prop="name">
<el-input v-model="personnelForm.name" placeholder="请输入姓名"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="性别:" prop="gender">
<el-radio-group v-model="personnelForm.gender">
<el-radio :label="0"></el-radio>
<el-radio :label="1"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="手机号:" prop="phone">
<el-input v-model="personnelForm.phone" placeholder="请输入手机号"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="状态:" prop="status">
<el-select v-model="personnelForm.status" placeholder="请选择状态">
<el-option label="正常" :value="1"></el-option>
<el-option label="禁用" :value="0"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="家庭住址:">
<el-input v-model="personnelForm.address" placeholder="请输入家庭住址"></el-input>
</el-form-item>
<el-form-item label="学历:">
<el-select v-model="personnelForm.education" placeholder="请选择学历">
<el-option label="高中及以下" value="高中及以下"></el-option>
<el-option label="大专" value="大专"></el-option>
<el-option label="本科" value="本科"></el-option>
<el-option label="硕士" value="硕士"></el-option>
<el-option label="博士" value="博士"></el-option>
</el-select>
</el-form-item>
<el-form-item label="个人简介:">
<el-input
v-model="personnelForm.profile"
type="textarea"
:rows="3"
placeholder="请输入个人简介">
</el-input>
</el-form-item>
<el-form-item label="是否系统用户:">
<el-switch
v-model="personnelForm.isSysUser"
active-text="是"
inactive-text="否">
</el-switch>
</el-form-item>
</el-form>
</div>
<!-- 提交按钮 -->
<div class="section">
<h4>第三步提交申请</h4>
<el-button
type="primary"
size="large"
:loading="submitLoading"
@click="handleSubmit">
{{ form.useApproval ? '提交审批申请' : '直接添加人员' }}
</el-button>
<el-button
size="large"
@click="handleReset">
重置表单
</el-button>
</div>
<!-- 结果展示 -->
<div v-if="result" class="section result-section">
<h4>处理结果</h4>
<el-alert
:title="result.title"
:description="result.description"
:type="result.type"
show-icon
:closable="false">
</el-alert>
</div>
</el-card>
<!-- 审批流程状态展示 -->
<el-card v-if="showApprovalStatus" class="approval-status-card" shadow="hover">
<template #header>
<h3>审批流程状态</h3>
</template>
<div class="approval-flow">
<el-steps :active="currentStep" finish-status="success" align-center>
<el-step
v-for="(step, index) in approvalSteps"
:key="index"
:title="step.title"
:description="step.description">
</el-step>
</el-steps>
</div>
</el-card>
</div>
</template>
<script setup>
import { ref, reactive, onMounted } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { apiRequest } from '@/utils/request'
//
const form = reactive({
useApproval: false,
approvalConfigId: null
})
const personnelForm = reactive({
name: '',
gender: 0,
phone: '',
address: '',
education: '',
profile: '',
status: 1,
isSysUser: false,
info: {}
})
const approvalConfigs = ref([])
const configLoading = ref(false)
const submitLoading = ref(false)
const result = ref(null)
const showApprovalStatus = ref(false)
const currentStep = ref(0)
const approvalSteps = ref([])
//
const rules = {
name: [
{ required: true, message: '请输入姓名', trigger: 'blur' }
],
phone: [
{ required: true, message: '请输入手机号', trigger: 'blur' },
{ pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号', trigger: 'blur' }
],
gender: [
{ required: true, message: '请选择性别', trigger: 'change' }
],
status: [
{ required: true, message: '请选择状态', trigger: 'change' }
]
}
const personnelFormRef = ref()
//
const loadApprovalConfigs = async () => {
configLoading.value = true
try {
const response = await apiRequest({
url: '/adminapi/personnel/approval-configs',
method: 'GET'
})
if (response.data.code === 1) {
approvalConfigs.value = response.data.data.list || []
}
} catch (error) {
ElMessage.error('获取审批配置失败')
} finally {
configLoading.value = false
}
}
//
const onApprovalToggle = (value) => {
if (value && approvalConfigs.value.length === 0) {
loadApprovalConfigs()
}
if (!value) {
form.approvalConfigId = null
}
}
//
const handleSubmit = async () => {
//
const valid = await personnelFormRef.value.validate()
if (!valid) {
return
}
// 使
if (form.useApproval && !form.approvalConfigId) {
ElMessage.warning('请选择审批配置')
return
}
submitLoading.value = true
try {
const submitData = {
...personnelForm,
use_approval: form.useApproval ? 1 : 0,
approval_config_id: form.approvalConfigId || 0
}
const response = await apiRequest({
url: '/adminapi/personnel/personnel',
method: 'POST',
data: submitData
})
if (response.data.code === 1) {
if (form.useApproval) {
result.value = {
title: '审批申请提交成功',
description: `已成功提交人员添加审批申请,流程ID: ${response.data.data.process_id},请等待审批人处理。`,
type: 'success'
}
showApprovalDemo()
} else {
result.value = {
title: '人员添加成功',
description: `人员 ${personnelForm.name} 添加成功,ID: ${response.data.data.id}`,
type: 'success'
}
}
} else {
result.value = {
title: '提交失败',
description: response.data.msg || '操作失败,请重试',
type: 'error'
}
}
} catch (error) {
result.value = {
title: '提交失败',
description: '网络错误,请稍后重试',
type: 'error'
}
} finally {
submitLoading.value = false
}
}
//
const showApprovalDemo = () => {
showApprovalStatus.value = true
approvalSteps.value = [
{ title: '提交申请', description: '用户提交人员添加申请' },
{ title: '部门审批', description: '部门负责人审批' },
{ title: 'HR审批', description: 'HR部门审批' },
{ title: '完成', description: '审批完成,创建人员记录' }
]
currentStep.value = 1 //
}
//
const handleReset = () => {
personnelFormRef.value.resetFields()
form.useApproval = false
form.approvalConfigId = null
result.value = null
showApprovalStatus.value = false
}
//
onMounted(() => {
//
personnelForm.name = '张三'
personnelForm.phone = '13800138000'
personnelForm.address = '北京市朝阳区'
personnelForm.education = '本科'
personnelForm.profile = '具有丰富的教学经验,专业技能扎实。'
})
</script>
<style scoped>
.personnel-approval-demo {
padding: 20px;
}
.demo-card {
margin-bottom: 20px;
}
.card-header {
text-align: center;
}
.card-header h3 {
margin: 0 0 10px 0;
color: #303133;
}
.card-header .desc {
margin: 0;
color: #909399;
font-size: 14px;
}
.section {
margin-bottom: 30px;
padding-bottom: 20px;
border-bottom: 1px solid #ebeef5;
}
.section:last-child {
border-bottom: none;
margin-bottom: 0;
}
.section h4 {
margin: 0 0 20px 0;
color: #606266;
font-size: 16px;
font-weight: 600;
}
.result-section {
background: #f8f9fa;
padding: 20px;
border-radius: 8px;
}
.approval-status-card {
margin-top: 20px;
}
.approval-flow {
padding: 20px 0;
}
:deep(.el-step__description) {
color: #909399;
font-size: 12px;
}
:deep(.el-alert__description) {
font-size: 14px;
line-height: 1.6;
}
</style>

2
niucloud/app/adminapi/controller/classroom/Classroom.php

@ -63,6 +63,7 @@ class Classroom extends BaseAdminController
["age_group", ""], ["age_group", ""],
["class_type", ""], ["class_type", ""],
["assistant_coach", ""], ["assistant_coach", ""],
["educational_id",""],
["status", ""], ["status", ""],
["sort_order", 0], ["sort_order", 0],
["remarks", ""] ["remarks", ""]
@ -86,6 +87,7 @@ class Classroom extends BaseAdminController
["age_group", ""], ["age_group", ""],
["class_type", ""], ["class_type", ""],
["assistant_coach", ""], ["assistant_coach", ""],
["educational_id",""],
["status", ""], ["status", ""],
["sort_order", 0], ["sort_order", 0],
["remarks", ""] ["remarks", ""]

4
niucloud/app/service/admin/classroom/ClassroomService.php

@ -41,7 +41,7 @@ class ClassroomService extends BaseAdminService
*/ */
public function getPage(array $where = []) public function getPage(array $where = [])
{ {
$field = 'id,campus_id,campus_name,class_name,head_coach,age_group,class_type,assistant_coach,created_at,updated_at,deleted_at,status,sort_order,remarks'; $field = 'id,campus_id,campus_name,class_name,educational_id,head_coach,age_group,class_type,assistant_coach,created_at,updated_at,deleted_at,status,sort_order,remarks';
$order = 'id desc'; $order = 'id desc';
$search_model = $this->model->withSearch(["campus_id", "class_name", "head_coach", "class_type", "assistant_coach", "created_at", "status"], $where)->with(['campus', 'personnel', 'personnel'])->field($field)->order($order); $search_model = $this->model->withSearch(["campus_id", "class_name", "head_coach", "class_type", "assistant_coach", "created_at", "status"], $where)->with(['campus', 'personnel', 'personnel'])->field($field)->order($order);
@ -56,7 +56,7 @@ class ClassroomService extends BaseAdminService
*/ */
public function getInfo(int $id) public function getInfo(int $id)
{ {
$field = 'id,campus_id,campus_name,class_name,head_coach,age_group,class_type,assistant_coach,created_at,updated_at,deleted_at,status,sort_order,remarks'; $field = 'id,campus_id,campus_name,class_name,educational_id,head_coach,age_group,class_type,assistant_coach,created_at,updated_at,deleted_at,status,sort_order,remarks';
$info = $this->model->field($field)->where([['id', "=", $id]])->with(['campus', 'personnel', 'personnel'])->findOrEmpty()->toArray(); $info = $this->model->field($field)->where([['id', "=", $id]])->with(['campus', 'personnel', 'personnel'])->findOrEmpty()->toArray();
$info['status'] = strval($info['status']); $info['status'] = strval($info['status']);

2
niucloud/app/service/admin/customer_resources/CustomerResourcesService.php

@ -420,7 +420,7 @@ class CustomerResourcesService extends BaseAdminService
->field("a.*,b.name,b.phone") ->field("a.*,b.name,b.phone")
->where([ ->where([
['a.campus_id', '=', $campus_id], ['a.campus_id', '=', $campus_id],
['a.role_id', '=', 5] // ['a.role_id', '=', 5]
])->select()->toArray(); ])->select()->toArray();
} }

Loading…
Cancel
Save