Browse Source

Merge remote-tracking branch 'origin/master'

master
liutong 10 months ago
parent
commit
40042029da
  1. 6
      admin/src/app/api/person_course_schedule.ts
  2. 32
      admin/src/app/views/campus_person_role/components/campus-person-role-edit.vue
  3. 94
      admin/src/app/views/customer_resources/customer_resources.vue
  4. 4
      admin/src/app/views/exam_answers/exam_answers.vue
  5. 2
      admin/src/app/views/person_course_schedule/person_course_schedule.vue
  6. 21
      admin/src/app/views/personnel/personnel.vue
  7. 6
      admin/src/app/views/service/components/service-edit.vue
  8. 56
      admin/src/app/views/user_feedback/user_feedback.vue
  9. 4
      admin/src/router/routers.ts
  10. 6776
      admin/yarn.lock
  11. 6
      niucloud/app/adminapi/controller/campus_person_role/CampusPersonRole.php
  12. 4
      niucloud/app/adminapi/controller/person_course_schedule/PersonCourseSchedule.php
  13. 35
      niucloud/app/adminapi/controller/school_approval/Config.php
  14. 23
      niucloud/app/adminapi/controller/school_approval/Process.php
  15. 23
      niucloud/app/common.php
  16. 2
      niucloud/app/model/school_approval/SchoolApprovalConfig.php
  17. 2
      niucloud/app/model/school_approval/SchoolApprovalConfigNode.php
  18. 2
      niucloud/app/model/school_approval/SchoolApprovalParticipants.php
  19. 2
      niucloud/app/model/school_approval/SchoolApprovalProcess.php
  20. 19
      niucloud/app/service/admin/campus_person_role/CampusPersonRoleService.php
  21. 2
      niucloud/app/service/admin/customer_resources/CustomerResourcesService.php
  22. 3
      niucloud/app/service/admin/market_performance/MarketPerformanceService.php
  23. 12
      niucloud/app/service/admin/person_course_schedule/PersonCourseScheduleService.php
  24. 26
      niucloud/app/service/admin/personnel/PersonnelService.php
  25. 16
      niucloud/core/base/BaseAdminService.php

6
admin/src/app/api/person_course_schedule.ts

@ -58,4 +58,10 @@ export function getWithCustomerResourcesList(params: Record<string,any>){
return request.get('person_course_schedule/customer_resources_all', {params}) return request.get('person_course_schedule/customer_resources_all', {params})
} }
/**获取试课人员列表 */
export function getTryCoursePerson(id: number) {
return request.get(`person_course_schedule/get_try_course_person/${id}`)
}
// USER_CODE_END -- person_course_schedule // USER_CODE_END -- person_course_schedule

32
admin/src/app/views/campus_person_role/components/campus-person-role-edit.vue

@ -1,9 +1,7 @@
<template> <template>
<el-dialog <el-dialog
v-model="showDialog" v-model="showDialog"
:title=" title="人员设置"
formData.id ? t('updateCampusPersonRole') : t('addCampusPersonRole')
"
width="50%" width="50%"
class="diy-dialog-wrap" class="diy-dialog-wrap"
:destroy-on-close="true" :destroy-on-close="true"
@ -16,12 +14,12 @@
class="page-form" class="page-form"
v-loading="loading" v-loading="loading"
> >
<el-form-item :label="t('campusId')" prop="campus_id"> <el-form-item label="校区" prop="campus_id">
<el-select <el-select
class="input-width" class="input-width"
v-model="formData.campus_id" v-model="formData.campus_id"
clearable clearable
:placeholder="t('campusIdPlaceholder')" placeholder="请选择校区"
> >
<el-option label="请选择" value=""></el-option> <el-option label="请选择" value=""></el-option>
<el-option <el-option
@ -33,12 +31,12 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('personId')" prop="person_id"> <el-form-item label="人员" prop="person_id" v-if="!formData.person_id">
<el-select <el-select
class="input-width" class="input-width"
v-model="formData.person_id" v-model="formData.person_id"
clearable clearable
:placeholder="t('personIdPlaceholder')" placeholder="请选择人员"
> >
<el-option label="请选择" value=""></el-option> <el-option label="请选择" value=""></el-option>
<el-option <el-option
@ -62,12 +60,12 @@
</el-form-item> --> </el-form-item> -->
<el-form-item :label="t('roleId')" prop="role_id"> <el-form-item label="角色" prop="role_id">
<el-select <el-select
class="input-width" class="input-width"
v-model="formData.role_id" v-model="formData.role_id"
clearable clearable
:placeholder="t('roleIdPlaceholder')" placeholder="请选择角色"
> >
<el-option label="请选择" value=""></el-option> <el-option label="请选择" value=""></el-option>
<el-option <el-option
@ -151,6 +149,8 @@ if(pageName == '市场人员列表'){
// campusPersonRoleTable.searchParam.role_id = 2; // campusPersonRoleTable.searchParam.role_id = 2;
}else if(pageName == '教练管理'){ }else if(pageName == '教练管理'){
initialFormData.dept_id = 3; initialFormData.dept_id = 3;
}else{
initialFormData.dept_id = 0;
} }
const formData: Record<string, any> = reactive({ ...initialFormData }) const formData: Record<string, any> = reactive({ ...initialFormData })
@ -161,17 +161,14 @@ const formRef = ref<FormInstance>()
const formRules = computed(() => { const formRules = computed(() => {
return { return {
campus_id: [ campus_id: [
{ required: true, message: t('campusIdPlaceholder'), trigger: 'blur' }, { required: true, message: "请选择校区", trigger: 'blur' },
], ],
person_id: [ person_id: [
{ required: true, message: t('personIdPlaceholder'), trigger: 'blur' }, { required: true, message: "请选择人员", trigger: 'blur' },
], ],
role_id: [ role_id: [
{ required: true, message: t('roleIdPlaceholder'), trigger: 'blur' }, { required: true, message: "请选择角色", trigger: 'blur' },
], ]
dept_id: [
{ required: true, message: t('deptIdPlaceholder'), trigger: 'blur' },
],
} }
}) })
@ -231,6 +228,9 @@ const setFormData = async (row: any = null) => {
if (row.dept_id) { if (row.dept_id) {
formData.dept_id = parseInt(row.dept_id) formData.dept_id = parseInt(row.dept_id)
} }
if (row.person_id) {
formData.person_id = parseInt(row.person_id)
}
loading.value = true loading.value = true
if (row.id) { if (row.id) {
const data = await (await getCampusPersonRoleInfo(row.id)).data const data = await (await getCampusPersonRoleInfo(row.id)).data

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

@ -38,15 +38,15 @@
<el-form-item label="创建时间"> <el-form-item label="创建时间">
<el-date-picker v-model="customerResourcesTable.searchParam.created_at" type="daterange" range-separator="" <el-date-picker v-model="customerResourcesTable.searchParam.created_at" type="daterange"
start-placeholder="开始日期" end-placeholder="结束日期" format="YYYY-MM-DD" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" format="YYYY-MM-DD"
value-format="YYYY-MM-DD" /> value-format="YYYY-MM-DD" />
</el-form-item> </el-form-item>
<!-- 更新时间 --> <!-- 更新时间 -->
<el-form-item label="更新时间"> <el-form-item label="更新时间">
<el-date-picker v-model="customerResourcesTable.searchParam.updated_at" type="daterange" range-separator="" <el-date-picker v-model="customerResourcesTable.searchParam.updated_at" type="daterange"
start-placeholder="开始日期" end-placeholder="结束日期" format="YYYY-MM-DD" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" format="YYYY-MM-DD"
value-format="YYYY-MM-DD" /> value-format="YYYY-MM-DD" />
</el-form-item> </el-form-item>
@ -93,24 +93,15 @@
:show-overflow-tooltip="true" /> :show-overflow-tooltip="true" />
<el-table-column <el-table-column prop="member_label" label="会员标签" min-width="120" align="center">
prop="member_label" <template #default="{ row }">
label="会员标签" <div class="flex flex-col items-center">
min-width="120" <div v-for="(item, key) in row.member_label_array" class="my-[3px]" :key="key">
align="center" <el-tag type="info">{{ item.label_name }}</el-tag>
> </div>
<template #default="{ row }"> </div>
<div class="flex flex-col items-center"> </template>
<div </el-table-column>
v-for="(item, key) in row.member_label_array"
class="my-[3px]"
:key="key"
>
<el-tag type="info">{{ item.label_name }}</el-tag>
</div>
</div>
</template>
</el-table-column>
<el-table-column prop="created_at" label="添加时间" min-width="120" :show-overflow-tooltip="true" /> <el-table-column prop="created_at" label="添加时间" min-width="120" :show-overflow-tooltip="true" />
@ -118,18 +109,39 @@
<el-table-column prop="updated_at" label="修改时间" min-width="120" :show-overflow-tooltip="true" /> <el-table-column prop="updated_at" label="修改时间" min-width="120" :show-overflow-tooltip="true" />
<el-table-column :label="t('operation')" fixed="right" min-width="200" v-if="customerResourcesTable.searchParam.type == 'khzy'"> <el-table-column :label="t('operation')" fixed="right" min-width="100"
v-if="customerResourcesTable.searchParam.type == 'khzy'">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="modificationLog(row.id)">六要素修改记录</el-button> <el-dropdown @command="handleCommand($event, row)">
<el-button type="primary" link @click="resourceChanges(row.id)">客户信息修改记录</el-button> <el-button type="primary" link>
<el-button type="primary" link @click="editEvent(row)">{{ t('edit') }}</el-button> {{ t('operation') }}
<el-button type="primary" link @click="deleteEvent(row.id)">{{ t('delete') }}</el-button> <el-icon>
<ArrowDown />
</el-icon>
</el-button>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item command="modificationLog">
六要素修改记录
</el-dropdown-item>
<el-dropdown-item command="resourceChanges">
客户信息修改记录
</el-dropdown-item>
<el-dropdown-item command="editEvent">
{{ t('edit') }}
</el-dropdown-item>
<el-dropdown-item command="deleteEvent">
{{ t('delete') }}
</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</template> </template>
</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="200"
v-if="customerResourcesTable.searchParam.type == 'yjfp'"> v-if="customerResourcesTable.searchParam.type == 'yjfp'">
<template #default="{ row }"> <template #default="{ row }">
@ -183,6 +195,7 @@
import Fp from '@/app/views/customer_resources/components/fp.vue' import Fp from '@/app/views/customer_resources/components/fp.vue'
import Order from '@/app/views/order_table/components/order-table-edit.vue' import Order from '@/app/views/order_table/components/order-table-edit.vue'
import Tc from '@/app/views/tc_dialog/tc_dialog.vue' import Tc from '@/app/views/tc_dialog/tc_dialog.vue'
import { ArrowDown } from '@element-plus/icons-vue'
import { getMemberLabelAll } from '@/app/api/member' import { getMemberLabelAll } from '@/app/api/member'
@ -202,10 +215,10 @@
"age": "", "age": "",
"gender": "", "gender": "",
"phone_number": "", "phone_number": "",
"member_label" : "", "member_label": "",
'type': '', 'type': '',
"created_at" : "", "created_at": "",
"updated_at" : "" "updated_at": ""
} }
}) })
@ -217,12 +230,29 @@
customerResourcesTable.searchParam.type = 'zylb'; customerResourcesTable.searchParam.type = 'zylb';
} }
const handleCommand = (command : string, row : any) => {
switch (command) {
case 'modificationLog':
modificationLog(row.id)
break
case 'resourceChanges':
resourceChanges(row.id)
break
case 'editEvent':
editEvent(row)
break
case 'deleteEvent':
deleteEvent(row.id)
break
}
}
// const type = pageName == '' ? 'yjfp' : 'khzy'; // const type = pageName == '' ? 'yjfp' : 'khzy';
// //
const labelSelectData = ref([]) const labelSelectData = ref([])
const getMemberLabelAllFn = async () => { const getMemberLabelAllFn = async () => {
labelSelectData.value = await (await getMemberLabelAll()).data labelSelectData.value = await (await getMemberLabelAll()).data
} }
getMemberLabelAllFn() getMemberLabelAllFn()

4
admin/src/app/views/exam_answers/exam_answers.vue

@ -4,9 +4,9 @@
<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('addExamAnswers') }} {{ t('addExamAnswers') }}
</el-button> </el-button> -->
</div> </div>
<el-card class="box-card !border-none my-[10px] table-search-wrap" shadow="never"> <el-card class="box-card !border-none my-[10px] table-search-wrap" shadow="never">

2
admin/src/app/views/person_course_schedule/person_course_schedule.vue

@ -58,7 +58,7 @@
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="120">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="deleteEvent(row.id)">请假</el-button> <el-button type="primary" link @click="deleteEvent(row.id)">请假</el-button>
<el-button type="primary" link @click="xkEvent(row.id)">消课</el-button> <el-button type="primary" link @click="xkEvent(row.id)" v-if="!row.is_xk">消课</el-button>
</template> </template>
</el-table-column> </el-table-column>

21
admin/src/app/views/personnel/personnel.vue

@ -212,9 +212,12 @@
<el-table-column <el-table-column
:label="t('operation')" :label="t('operation')"
fixed="right" fixed="right"
min-width="120" min-width="200"
> >
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editRole(row.role_data)" v-if="row.is_role == 1">角色设置</el-button>
<el-button type="primary" link @click="editEvent(row)">{{ <el-button type="primary" link @click="editEvent(row)">{{
t('edit') t('edit')
}}</el-button> }}</el-button>
@ -237,6 +240,13 @@
</div> </div>
<edit ref="editPersonnelDialog" @complete="loadPersonnelList" /> <edit ref="editPersonnelDialog" @complete="loadPersonnelList" />
<role
ref="editCampusPersonRoleDialog"
@complete="loadPersonnelList"
/>
</el-card> </el-card>
</div> </div>
</template> </template>
@ -249,6 +259,7 @@ import { getPersonnelList, deletePersonnel } from '@/app/api/personnel'
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/personnel/components/personnel-edit.vue' import Edit from '@/app/views/personnel/components/personnel-edit.vue'
import Role from '@/app/views/campus_person_role/components/campus-person-role-edit.vue'
import { useRoute } from 'vue-router' import { useRoute } from 'vue-router'
const route = useRoute() const route = useRoute()
const pageName = route.meta.title const pageName = route.meta.title
@ -271,6 +282,14 @@ let personnelTable = reactive({
}, },
}) })
const editCampusPersonRoleDialog: Record<string, any> | null = ref(null)
const editRole = (data) => {
editCampusPersonRoleDialog.value.setFormData(data)
editCampusPersonRoleDialog.value.showDialog = true
}
const searchFormRef = ref<FormInstance>() const searchFormRef = ref<FormInstance>()
// //

6
admin/src/app/views/service/components/service-edit.vue

@ -36,7 +36,7 @@
v-for="(item, index) in staff_reminderList" v-for="(item, index) in staff_reminderList"
:key="index" :key="index"
:label="item.name" :label="item.name"
:value="item.value" :value="Number(item.value)"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -48,7 +48,7 @@
v-for="(item, index) in customer_reminderList" v-for="(item, index) in customer_reminderList"
:key="index" :key="index"
:label="item.name" :label="item.name"
:value="item.value" :value="Number(item.value)"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -60,7 +60,7 @@
v-for="(item, index) in customer_confirmationList" v-for="(item, index) in customer_confirmationList"
:key="index" :key="index"
:label="item.name" :label="item.name"
:value="item.value" :value="Number(item.value)"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>

56
admin/src/app/views/user_feedback/user_feedback.vue

@ -39,8 +39,29 @@
<el-table-column prop="feedback_text" :label="t('feedbackText')" min-width="120" :show-overflow-tooltip="true"/> <el-table-column prop="feedback_text" :label="t('feedbackText')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="attachment_url" :label="t('attachmentUrl')" min-width="120" :show-overflow-tooltip="true"/> <el-table-column
prop="attachment_url"
:label="t('attachmentUrl')"
min-width="120"
:show-overflow-tooltip="false"
>
<template #default="{ row }">
<el-icon
v-if="isImage(row.attachment_url)"
class="clickable"
@click="handlePreview(row.attachment_url)"
>
<Picture />
</el-icon>
<el-icon
v-else
class="clickable"
@click="openFile(row.attachment_url)"
>
<Document />
</el-icon>
</template>
</el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="120">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editEvent(row)">查看</el-button> <el-button type="primary" link @click="editEvent(row)">查看</el-button>
@ -57,7 +78,12 @@
</div> </div>
<edit ref="editUserFeedbackDialog" @complete="loadUserFeedbackList" /> <edit ref="editUserFeedbackDialog" @complete="loadUserFeedbackList" />
</el-card> </el-card>
<el-dialog v-model="dialogVisible" width="60%">
<img :src="previewImageUrl" style="width: 100%" />
</el-dialog>
</div> </div>
</template> </template>
@ -70,6 +96,7 @@ import { img } from '@/utils/common'
import { ElMessageBox,FormInstance } from 'element-plus' import { ElMessageBox,FormInstance } from 'element-plus'
import Edit from '@/app/views/user_feedback/components/user-feedback-edit.vue' import Edit from '@/app/views/user_feedback/components/user-feedback-edit.vue'
import { useRoute } from 'vue-router' import { useRoute } from 'vue-router'
import { Picture, Document } from '@element-plus/icons-vue'
const route = useRoute() const route = useRoute()
const pageName = route.meta.title; const pageName = route.meta.title;
@ -90,7 +117,30 @@ const searchFormRef = ref<FormInstance>()
const selectData = ref<any[]>([]) const selectData = ref<any[]>([])
// //
const dialogVisible = ref(false)
const previewImageUrl = ref('')
/**
* 判断是否是图片
*/
const isImage = (url: string): boolean => {
return /\.(jpg|jpeg|png|gif|bmp|webp|svg)$/i.test(url)
}
/**
* 弹出图片预览
*/
const handlePreview = (url: string) => {
previewImageUrl.value = `${import.meta.env.VITE_IMG_DOMAIN}/${url}`
dialogVisible.value = true
}
/**
* 跳转打开文件
*/
const openFile = (url: string) => {
window.open(`${import.meta.env.VITE_IMG_DOMAIN}/${url}`, '_blank')
}
/** /**
* 获取用户反馈信息列表 * 获取用户反馈信息列表

4
admin/src/router/routers.ts

@ -3,7 +3,7 @@ import Default from '@/layout/index.vue'
import Decorate from '@/layout/decorate/index.vue' import Decorate from '@/layout/decorate/index.vue'
// 导入模块路由 // 导入模块路由
import approvalRoutes from './modules/approval' // import approvalRoutes from './modules/approval'
// 静态路由 // 静态路由
export const STATIC_ROUTES: Array<RouteRecordRaw> = [ export const STATIC_ROUTES: Array<RouteRecordRaw> = [
@ -11,7 +11,7 @@ export const STATIC_ROUTES: Array<RouteRecordRaw> = [
path: '/:pathMatch(.*)*', path: '/:pathMatch(.*)*',
component: () => import('@/app/views/error/404.vue'), component: () => import('@/app/views/error/404.vue'),
}, },
...approvalRoutes // ...approvalRoutes
] ]
// 免登录路由 // 免登录路由

6776
admin/yarn.lock

File diff suppressed because it is too large

6
niucloud/app/adminapi/controller/campus_person_role/CampusPersonRole.php

@ -58,8 +58,7 @@ class CampusPersonRole extends BaseAdminController
]); ]);
$this->validate($data, 'app\validate\campus_person_role\CampusPersonRole.add'); $this->validate($data, 'app\validate\campus_person_role\CampusPersonRole.add');
$id = (new CampusPersonRoleService())->add($data); return (new CampusPersonRoleService())->add($data);
return success('ADD_SUCCESS', ['id' => $id]);
} }
/** /**
@ -76,8 +75,7 @@ class CampusPersonRole extends BaseAdminController
]); ]);
$this->validate($data, 'app\validate\campus_person_role\CampusPersonRole.edit'); $this->validate($data, 'app\validate\campus_person_role\CampusPersonRole.edit');
(new CampusPersonRoleService())->edit($id, $data); return (new CampusPersonRoleService())->edit($id, $data);
return success('EDIT_SUCCESS');
} }
/** /**

4
niucloud/app/adminapi/controller/person_course_schedule/PersonCourseSchedule.php

@ -102,4 +102,8 @@ class PersonCourseSchedule extends BaseAdminController
return success(( new PersonCourseScheduleService())->getCustomerResourcesAll()); return success(( new PersonCourseScheduleService())->getCustomerResourcesAll());
} }
public function getTryCoursePerson($schedule_id){
return success((new PersonCourseScheduleService())->getTryCoursePerson($schedule_id));
}
} }

35
niucloud/app/adminapi/controller/school_approval/Config.php

@ -5,6 +5,7 @@ namespace app\adminapi\controller\school_approval;
use app\adminapi\controller\BaseAdminApi; use app\adminapi\controller\BaseAdminApi;
use app\service\school_approval\SchoolApprovalConfigService; use app\service\school_approval\SchoolApprovalConfigService;
use core\base\BaseAdminController;
use think\facade\Request; use think\facade\Request;
/** /**
@ -12,7 +13,7 @@ use think\facade\Request;
* Class Config * Class Config
* @package app\adminapi\controller\school_approval * @package app\adminapi\controller\school_approval
*/ */
class Config extends BaseAdminApi class Config extends BaseAdminController
{ {
/** /**
* @var SchoolApprovalConfigService * @var SchoolApprovalConfigService
@ -44,7 +45,7 @@ class Config extends BaseAdminApi
$where[] = ['config_name', 'like', "%{$config_name}%"]; $where[] = ['config_name', 'like', "%{$config_name}%"];
} }
$data = $this->service->getList($where, $page, $limit); $data = $this->service->getList($where, (int)$page, (int)$limit);
return success($data); return success($data);
} }
@ -59,7 +60,7 @@ class Config extends BaseAdminApi
return error('参数错误'); return error('参数错误');
} }
$info = $this->service->getInfo($id); $info = $this->service->getInfo((int)$id);
if (empty($info)) { if (empty($info)) {
return error('审批流配置不存在'); return error('审批流配置不存在');
} }
@ -99,13 +100,13 @@ class Config extends BaseAdminApi
} }
// 设置创建人ID // 设置创建人ID
$data['creator_id'] = $this->user_info['uid']; $data['creator_id'] = $this->request->uid();
try { try {
$config_id = $this->service->add($data); $config_id = $this->service->add($data);
return success(['id' => $config_id]); return success(['id' => $config_id]);
} catch (\Exception $e) { } catch (\Exception $e) {
return error($e->getMessage()); return fail($e->getMessage());
} }
} }
@ -118,29 +119,29 @@ class Config extends BaseAdminApi
// 验证参数 // 验证参数
if (empty($data['id'])) { if (empty($data['id'])) {
return error('参数错误'); return fail('参数错误');
} }
if (empty($data['config_name'])) { if (empty($data['config_name'])) {
return error('配置名称不能为空'); return fail('配置名称不能为空');
} }
if (empty($data['nodes']) || !is_array($data['nodes'])) { if (empty($data['nodes']) || !is_array($data['nodes'])) {
return error('至少需要添加一个审批节点'); return fail('至少需要添加一个审批节点');
} }
// 验证节点数据 // 验证节点数据
foreach ($data['nodes'] as $node) { foreach ($data['nodes'] as $node) {
if (empty($node['node_name'])) { if (empty($node['node_name'])) {
return error('节点名称不能为空'); return fail('节点名称不能为空');
} }
if (empty($node['approver_type'])) { if (empty($node['approver_type'])) {
return error('审批人类型不能为空'); return fail('审批人类型不能为空');
} }
if (empty($node['approver_ids'])) { if (empty($node['approver_ids'])) {
return error('审批人不能为空'); return fail('审批人不能为空');
} }
} }
@ -148,7 +149,7 @@ class Config extends BaseAdminApi
$result = $this->service->edit($data); $result = $this->service->edit($data);
return success($result); return success($result);
} catch (\Exception $e) { } catch (\Exception $e) {
return error($e->getMessage()); return fail($e->getMessage());
} }
} }
@ -159,14 +160,14 @@ class Config extends BaseAdminApi
{ {
$id = input('id', 0); $id = input('id', 0);
if (empty($id)) { if (empty($id)) {
return error('参数错误'); return fail('参数错误');
} }
try { try {
$result = $this->service->delete($id); $result = $this->service->delete((int)$id);
return success($result); return success($result);
} catch (\Exception $e) { } catch (\Exception $e) {
return error($e->getMessage()); return fail($e->getMessage());
} }
} }
@ -179,14 +180,14 @@ class Config extends BaseAdminApi
$status = input('status', 0); $status = input('status', 0);
if (empty($id)) { if (empty($id)) {
return error('参数错误'); return fail('参数错误');
} }
try { try {
$result = $this->service->changeStatus($id, $status); $result = $this->service->changeStatus($id, $status);
return success($result); return success($result);
} catch (\Exception $e) { } catch (\Exception $e) {
return error($e->getMessage()); return fail($e->getMessage());
} }
} }
} }

23
niucloud/app/adminapi/controller/school_approval/Process.php

@ -5,6 +5,7 @@ namespace app\adminapi\controller\school_approval;
use app\adminapi\controller\BaseAdminApi; use app\adminapi\controller\BaseAdminApi;
use app\service\school_approval\SchoolApprovalProcessService; use app\service\school_approval\SchoolApprovalProcessService;
use core\base\BaseAdminController;
use think\facade\Request; use think\facade\Request;
/** /**
@ -12,7 +13,7 @@ use think\facade\Request;
* Class Process * Class Process
* @package app\adminapi\controller\school_approval * @package app\adminapi\controller\school_approval
*/ */
class Process extends BaseAdminApi class Process extends BaseAdminController
{ {
/** /**
* @var SchoolApprovalProcessService * @var SchoolApprovalProcessService
@ -69,12 +70,12 @@ class Process extends BaseAdminApi
{ {
$id = input('id', 0); $id = input('id', 0);
if (empty($id)) { if (empty($id)) {
return error('参数错误'); return fail('参数错误');
} }
$info = $this->service->getInfo($id); $info = $this->service->getInfo($id);
if (empty($info)) { if (empty($info)) {
return error('审批流程不存在'); return fail('审批流程不存在');
} }
return success($info); return success($info);
@ -90,11 +91,11 @@ class Process extends BaseAdminApi
// 验证参数 // 验证参数
if (empty($data['process_name'])) { if (empty($data['process_name'])) {
return error('流程名称不能为空'); return fail('流程名称不能为空');
} }
if (empty($config_id)) { if (empty($config_id)) {
return error('请选择审批流配置'); return fail('请选择审批流配置');
} }
// 设置申请人ID // 设置申请人ID
@ -104,7 +105,7 @@ class Process extends BaseAdminApi
$process_id = $this->service->create($data, $config_id); $process_id = $this->service->create($data, $config_id);
return success(['id' => $process_id]); return success(['id' => $process_id]);
} catch (\Exception $e) { } catch (\Exception $e) {
return error($e->getMessage()); return fail($e->getMessage());
} }
} }
@ -118,18 +119,18 @@ class Process extends BaseAdminApi
$remarks = input('remarks', ''); $remarks = input('remarks', '');
if (empty($process_id)) { if (empty($process_id)) {
return error('参数错误'); return fail('参数错误');
} }
if (empty($status) || !in_array($status, ['approved', 'rejected'])) { if (empty($status) || !in_array($status, ['approved', 'rejected'])) {
return error('请选择审批结果'); return fail('请选择审批结果');
} }
try { try {
$result = $this->service->approve($process_id, $this->user_info['uid'], $status, $remarks); $result = $this->service->approve($process_id, $this->user_info['uid'], $status, $remarks);
return success($result); return success($result);
} catch (\Exception $e) { } catch (\Exception $e) {
return error($e->getMessage()); return fail($e->getMessage());
} }
} }
@ -141,14 +142,14 @@ class Process extends BaseAdminApi
$process_id = input('process_id', 0); $process_id = input('process_id', 0);
if (empty($process_id)) { if (empty($process_id)) {
return error('参数错误'); return fail('参数错误');
} }
try { try {
$result = $this->service->cancel($process_id, $this->user_info['uid']); $result = $this->service->cancel($process_id, $this->user_info['uid']);
return success($result); return success($result);
} catch (\Exception $e) { } catch (\Exception $e) {
return error($e->getMessage()); return fail($e->getMessage());
} }
} }
} }

23
niucloud/app/common.php

@ -1029,23 +1029,18 @@ function get_last_time($time = null)
return $text; return $text;
} }
function get_campus_where($user_id) function get_campus_where($user_id,$field="campus_id")
{ {
$where = []; $where = [];
if ($user_id == 1) { $person = new Personnel();
return $where; $campusPersonRole = new CampusPersonRole();
} if($user_id > 1){
$personnel = new Personnel(); $person_id = $person->where(['sys_user_id' => $user_id])->value("id");
$role = new CampusPersonRole(); $role_info = $campusPersonRole->where(['person_id' => $person_id])->find();
$personnel_id = $personnel->where(['sys_user_id' => $user_id])->value('id'); if (!in_array($role_info['role_id'], [1, 7])) {
if (!$personnel_id) { $where[] = [$field,'=',$role_info['campus_id']];
$where[] = ['campus_id', 'in', []]; }
} }
$campus_ids = $role->where(['person_id' => $personnel_id])->column('campus_id');
$where[] = ['campus_id', 'in', $campus_ids];
return $where; return $where;
} }

2
niucloud/app/model/school_approval/SchoolApprovalConfig.php

@ -22,7 +22,7 @@ class SchoolApprovalConfig extends Model
* 模型名称 * 模型名称
* @var string * @var string
*/ */
protected $name = 'school_approval_config'; protected $name = 'approval_config';
/** /**
* 自动写入时间戳 * 自动写入时间戳

2
niucloud/app/model/school_approval/SchoolApprovalConfigNode.php

@ -22,7 +22,7 @@ class SchoolApprovalConfigNode extends Model
* 模型名称 * 模型名称
* @var string * @var string
*/ */
protected $name = 'school_approval_config_node'; protected $name = 'approval_config_node';
/** /**
* 自动写入时间戳 * 自动写入时间戳

2
niucloud/app/model/school_approval/SchoolApprovalParticipants.php

@ -22,7 +22,7 @@ class SchoolApprovalParticipants extends Model
* 模型名称 * 模型名称
* @var string * @var string
*/ */
protected $name = 'school_approval_participants'; protected $name = 'approval_participants';
/** /**
* 自动写入时间戳 * 自动写入时间戳

2
niucloud/app/model/school_approval/SchoolApprovalProcess.php

@ -22,7 +22,7 @@ class SchoolApprovalProcess extends Model
* 模型名称 * 模型名称
* @var string * @var string
*/ */
protected $name = 'school_approval_process'; protected $name = 'approval_process';
/** /**
* 自动写入时间戳 * 自动写入时间戳

19
niucloud/app/service/admin/campus_person_role/CampusPersonRoleService.php

@ -66,7 +66,7 @@ class CampusPersonRoleService extends BaseAdminService
->field($field)->order($order); ->field($field)->order($order);
$search_model->where(get_campus_where($this->uid,'campus_id'));
$list = $this->pageQuery($search_model); $list = $this->pageQuery($search_model);
return $list; return $list;
@ -92,10 +92,12 @@ class CampusPersonRoleService extends BaseAdminService
*/ */
public function add(array $data) public function add(array $data)
{ {
if($this->model->where(['person_id' => $data['person_id']])->find()){
return fail("重复操作");
}
$res = $this->model->create($data); $res = $this->model->create($data);
return success("操作成功");
return $res->id;
} }
@ -103,13 +105,16 @@ class CampusPersonRoleService extends BaseAdminService
* 角色关系编辑 * 角色关系编辑
* @param int $id * @param int $id
* @param array $data * @param array $data
* @return bool
*/ */
public function edit(int $id, array $data) public function edit(int $id, array $data)
{ {
if($this->model->where([['id', '<>', $id]])->where(['person_id' => $data['person_id']])->find()){
return fail("重复操作");
}
$this->model->where([['id', '=', $id]])->update($data); $this->model->where([['id', '=', $id]])->update($data);
return true; return success("操作成功");
} }
/** /**
@ -131,8 +136,10 @@ class CampusPersonRoleService extends BaseAdminService
} }
public function getPersonnelAll(){ public function getPersonnelAll(){
$person_ids = $this->model->column("person_id");
$personnelModel = new Personnel(); $personnelModel = new Personnel();
return $personnelModel->select()->toArray(); return $personnelModel->where([['id','not in',$person_ids]])->select()->toArray();
} }
public function getSysRoleAll($data){ public function getSysRoleAll($data){

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

@ -91,6 +91,8 @@ class CustomerResourcesService extends BaseAdminService
} }
$search_model->where(get_campus_where($this->uid,'campus'));
return $this->pageQuery($search_model, function ($item, $key) { return $this->pageQuery($search_model, function ($item, $key) {
$item = $this->makeUp($item); $item = $this->makeUp($item);
}); });

3
niucloud/app/service/admin/market_performance/MarketPerformanceService.php

@ -42,6 +42,9 @@ class MarketPerformanceService extends BaseAdminService
$order = 'id desc'; $order = 'id desc';
$search_model = $this->model->withSearch(["campus_id","performance_amount","created_at"], $where)->with(['personnel','campus'])->field($field)->order($order); $search_model = $this->model->withSearch(["campus_id","performance_amount","created_at"], $where)->with(['personnel','campus'])->field($field)->order($order);
$search_model->where(get_campus_where($this->uid,'campus_id'));
$list = $this->pageQuery($search_model); $list = $this->pageQuery($search_model);
return $list; return $list;
} }

12
niucloud/app/service/admin/person_course_schedule/PersonCourseScheduleService.php

@ -17,6 +17,7 @@ use app\model\customer_resources\CustomerResources;
use app\model\person_course_schedule\PersonCourseSchedule; use app\model\person_course_schedule\PersonCourseSchedule;
use app\model\student\Student; use app\model\student\Student;
use app\model\student_courses\StudentCourses;
use app\model\venue\Venue; use app\model\venue\Venue;
use core\base\BaseAdminService; use core\base\BaseAdminService;
@ -63,12 +64,23 @@ class PersonCourseScheduleService extends BaseAdminService
->order($order); ->order($order);
return $this->pageQuery($search_model, function ($item, $key) { return $this->pageQuery($search_model, function ($item, $key) {
// $course = new Course(); // $course = new Course();
$studentCourses = new StudentCourses();
$course_schedule = new CourseSchedule(); $course_schedule = new CourseSchedule();
$course_type = $course_schedule $course_type = $course_schedule
->alias("a") ->alias("a")
->join(['school_course' => 'b'],'a.course_id = b.id','left') ->join(['school_course' => 'b'],'a.course_id = b.id','left')
->value("b.course_type"); ->value("b.course_type");
$item['course_type'] = $course_type; $item['course_type'] = $course_type;
$schedule_info = $course_schedule->where(['id' => $item['schedule_id']])->find();
$studentCourses_info = $studentCourses->where(['student_id' => $item['student_id'],'course_id' => $schedule_info['course_id']])->find();
if($studentCourses_info){
$item['is_xk'] = true;
}else{
$item['is_xk'] = false;
}
}); });
} }

26
niucloud/app/service/admin/personnel/PersonnelService.php

@ -12,6 +12,7 @@
namespace app\service\admin\personnel; namespace app\service\admin\personnel;
use app\dict\sys\UserDict; use app\dict\sys\UserDict;
use app\model\campus_person_role\CampusPersonRole;
use app\model\personnel\Personnel; use app\model\personnel\Personnel;
use app\model\sys\SysUser; use app\model\sys\SysUser;
@ -44,7 +45,30 @@ class PersonnelService extends BaseAdminService
$order = 'create_time desc'; $order = 'create_time desc';
$search_model = $this->model->withSearch(["name", "gender", "phone", "address", "education", "employee_number", "status", "create_time"], $where)->field($field)->order($order); $search_model = $this->model->withSearch(["name", "gender", "phone", "address", "education", "employee_number", "status", "create_time"], $where)->field($field)->order($order);
$list = $this->pageQuery($search_model); $list = $this->pageQuery($search_model, function ($item) {
$CampusPersonRole = new CampusPersonRole();
$item['is_role'] = 1;
$role = $CampusPersonRole->where(['person_id' => $item['id']])->find();
if($role){
$item['role_data'] = [
'id' => $role['id'],
'campus_id' => $role['campus_id'],
'person_id' => $item['id'],
'role_id' => $role['role_id'],
'dept_id' => 0
];
$item['is_role'] = $role['dept_id'] == 0 ? 1 : 0;
}else{
$item['role_data'] = [
'id' => '',
'campus_id' => '',
'person_id' => $item['id'],
'role_id' => '',
'dept_id' => ''
];
}
});
return $list; return $list;
} }

16
niucloud/core/base/BaseAdminService.php

@ -11,6 +11,9 @@
namespace core\base; namespace core\base;
use app\model\campus_person_role\CampusPersonRole;
use app\model\personnel\Personnel;
/** /**
* 后台基础服务层 * 后台基础服务层
* Class BaseAdminService * Class BaseAdminService
@ -27,5 +30,18 @@ class BaseAdminService extends BaseService
parent::__construct(); parent::__construct();
$this->username = $this->request->username(); $this->username = $this->request->username();
$this->uid = $this->request->uid(); $this->uid = $this->request->uid();
$this->campus_id = '';
$person = new Personnel();
$campusPersonRole = new CampusPersonRole();
if($this->uid > 1){
$person_id = $person->where(['sys_user_id' => $this->uid])->value("id");
$role_info = $campusPersonRole->where(['person_id' => $person_id])->find();
if (in_array($role_info['role_id'], [1, 7])) {
$this->campus_id = '';
}else{
$this->campus_id = $role_info['campus_id'];
}
}
} }
} }

Loading…
Cancel
Save