Browse Source

17

wangzeyan
于宏哲PHP 11 months ago
parent
commit
8399188805
  1. 7
      admin/components.d.ts
  2. 12
      admin/src/app/api/campus_person_role.ts
  3. 6
      admin/src/app/api/customer_resources.ts
  4. 6
      admin/src/app/api/departments.ts
  5. 56
      admin/src/app/api/market_performance.ts
  6. 10
      admin/src/app/api/six_speed_modification_log.ts
  7. 10
      admin/src/app/api/sys.ts
  8. 20
      admin/src/app/lang/zh-cn/campus_person_role.campus_person_role.json
  9. 4
      admin/src/app/lang/zh-cn/departments.departments.json
  10. 13
      admin/src/app/lang/zh-cn/market_performance.market_performance.json
  11. 8
      admin/src/app/lang/zh-cn/six_speed_modification_log.six_speed_modification_log.json
  12. 94
      admin/src/app/views/campus_person_role/campus_person_role.vue
  13. 94
      admin/src/app/views/campus_person_role/components/campus-person-role-edit.vue
  14. 40
      admin/src/app/views/customer_resources/components/customer-resources-edit.vue
  15. 7
      admin/src/app/views/customer_resources/customer_resources.vue
  16. 17
      admin/src/app/views/departments/components/departments-edit.vue
  17. 22
      admin/src/app/views/departments/departments.vue
  18. 189
      admin/src/app/views/market_performance/components/market-performance-edit.vue
  19. 186
      admin/src/app/views/market_performance/market_performance.vue
  20. 32
      admin/src/app/views/six_speed_modification_log/components/six-speed-modification-log-edit.vue
  21. 45
      admin/src/app/views/six_speed_modification_log/six_speed_modification_log.vue
  22. 107
      admin/src/app/views/yjpz_config/yjpz_config.vue
  23. 29
      niucloud/app/adminapi/controller/campus_person_role/CampusPersonRole.php
  24. 11
      niucloud/app/adminapi/controller/customer_resources/CustomerResources.php
  25. 4
      niucloud/app/adminapi/controller/departments/Departments.php
  26. 99
      niucloud/app/adminapi/controller/market_performance/MarketPerformance.php
  27. 14
      niucloud/app/adminapi/controller/six_speed_modification_log/SixSpeedModificationLog.php
  28. 18
      niucloud/app/adminapi/controller/sys/System.php
  29. 9
      niucloud/app/adminapi/route/campus_person_role.php
  30. 3
      niucloud/app/adminapi/route/customer_resources.php
  31. 3
      niucloud/app/adminapi/route/departments.php
  32. 41
      niucloud/app/adminapi/route/market_performance.php
  33. 6
      niucloud/app/adminapi/route/six_speed_modification_log.php
  34. 4
      niucloud/app/adminapi/route/sys.php
  35. 21
      niucloud/app/common.php
  36. 66
      niucloud/app/model/campus_person_role/CampusPersonRole.php
  37. 6
      niucloud/app/model/customer_resources/CustomerResources.php
  38. 22
      niucloud/app/model/departments/Departments.php
  39. 86
      niucloud/app/model/market_performance/MarketPerformance.php
  40. 60
      niucloud/app/model/six_speed_modification_log/SixSpeedModificationLog.php
  41. 28
      niucloud/app/service/admin/campus_person_role/CampusPersonRoleService.php
  42. 12
      niucloud/app/service/admin/customer_resources/CustomerResourcesService.php
  43. 16
      niucloud/app/service/admin/departments/DepartmentsService.php
  44. 111
      niucloud/app/service/admin/market_performance/MarketPerformanceService.php
  45. 16
      niucloud/app/service/admin/six_speed_modification_log/SixSpeedModificationLogService.php
  46. 19
      niucloud/app/service/admin/sys/SystemService.php
  47. 4
      niucloud/app/validate/campus_person_role/CampusPersonRole.php
  48. 35
      niucloud/app/validate/market_performance/MarketPerformance.php

7
admin/components.d.ts

@ -10,6 +10,7 @@ declare module '@vue/runtime-core' {
Attachment: typeof import('./src/components/upload-attachment/attachment.vue')['default'] Attachment: typeof import('./src/components/upload-attachment/attachment.vue')['default']
DiyLink: typeof import('./src/components/diy-link/index.vue')['default'] DiyLink: typeof import('./src/components/diy-link/index.vue')['default']
Editor: typeof import('./src/components/editor/index.vue')['default'] Editor: typeof import('./src/components/editor/index.vue')['default']
ElAlert: typeof import('element-plus/es')['ElAlert']
ElAside: typeof import('element-plus/es')['ElAside'] ElAside: typeof import('element-plus/es')['ElAside']
ElAvatar: typeof import('element-plus/es')['ElAvatar'] ElAvatar: typeof import('element-plus/es')['ElAvatar']
ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb'] ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb']
@ -17,15 +18,18 @@ declare module '@vue/runtime-core' {
ElButton: typeof import('element-plus/es')['ElButton'] ElButton: typeof import('element-plus/es')['ElButton']
ElCard: typeof import('element-plus/es')['ElCard'] ElCard: typeof import('element-plus/es')['ElCard']
ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
ElCol: typeof import('element-plus/es')['ElCol'] ElCol: typeof import('element-plus/es')['ElCol']
ElColorPicker: typeof import('element-plus/es')['ElColorPicker'] ElColorPicker: typeof import('element-plus/es')['ElColorPicker']
ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider'] ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
ElContainer: typeof import('element-plus/es')['ElContainer'] ElContainer: typeof import('element-plus/es')['ElContainer']
ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
ElDialog: typeof import('element-plus/es')['ElDialog'] ElDialog: typeof import('element-plus/es')['ElDialog']
ElDrawer: typeof import('element-plus/es')['ElDrawer'] ElDrawer: typeof import('element-plus/es')['ElDrawer']
ElDropdown: typeof import('element-plus/es')['ElDropdown'] ElDropdown: typeof import('element-plus/es')['ElDropdown']
ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem'] ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu'] ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']
ElEmpty: typeof import('element-plus/es')['ElEmpty']
ElForm: typeof import('element-plus/es')['ElForm'] ElForm: typeof import('element-plus/es')['ElForm']
ElFormItem: typeof import('element-plus/es')['ElFormItem'] ElFormItem: typeof import('element-plus/es')['ElFormItem']
ElHeader: typeof import('element-plus/es')['ElHeader'] ElHeader: typeof import('element-plus/es')['ElHeader']
@ -34,15 +38,18 @@ declare module '@vue/runtime-core' {
ElImageViewer: typeof import('element-plus/es')['ElImageViewer'] ElImageViewer: typeof import('element-plus/es')['ElImageViewer']
ElInput: typeof import('element-plus/es')['ElInput'] ElInput: typeof import('element-plus/es')['ElInput']
ElInputNumber: typeof import('element-plus/es')['ElInputNumber'] ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
ElLink: typeof import('element-plus/es')['ElLink']
ElMain: typeof import('element-plus/es')['ElMain'] ElMain: typeof import('element-plus/es')['ElMain']
ElMenu: typeof import('element-plus/es')['ElMenu'] ElMenu: typeof import('element-plus/es')['ElMenu']
ElMenuItem: typeof import('element-plus/es')['ElMenuItem'] ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
ElOption: typeof import('element-plus/es')['ElOption'] ElOption: typeof import('element-plus/es')['ElOption']
ElOptionGroup: typeof import('element-plus/es')['ElOptionGroup']
ElPageHeader: typeof import('element-plus/es')['ElPageHeader'] ElPageHeader: typeof import('element-plus/es')['ElPageHeader']
ElPagination: typeof import('element-plus/es')['ElPagination'] ElPagination: typeof import('element-plus/es')['ElPagination']
ElPopover: typeof import('element-plus/es')['ElPopover'] ElPopover: typeof import('element-plus/es')['ElPopover']
ElRadio: typeof import('element-plus/es')['ElRadio'] ElRadio: typeof import('element-plus/es')['ElRadio']
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup'] ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
ElResult: typeof import('element-plus/es')['ElResult']
ElRow: typeof import('element-plus/es')['ElRow'] ElRow: typeof import('element-plus/es')['ElRow']
ElScrollbar: typeof import('element-plus/es')['ElScrollbar'] ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
ElSelect: typeof import('element-plus/es')['ElSelect'] ElSelect: typeof import('element-plus/es')['ElSelect']

12
admin/src/app/api/campus_person_role.ts

@ -2,6 +2,8 @@ import request from '@/utils/request'
// USER_CODE_BEGIN -- campus_person_role // USER_CODE_BEGIN -- campus_person_role
/** /**
* *
@ -49,6 +51,14 @@ export function deleteCampusPersonRole(id: number) {
return request.delete(`campus_person_role/campus_person_role/${id}`, { showErrorMessage: true, showSuccessMessage: true }) return request.delete(`campus_person_role/campus_person_role/${id}`, { showErrorMessage: true, showSuccessMessage: true })
} }
export function getWithCampusList(params: Record<string,any>){
return request.get('campus_person_role/campus_all', {params})
}export function getWithPersonnelList(params: Record<string,any>){
return request.get('campus_person_role/personnel_all', {params})
}export function getWithSysRoleList(params: Record<string,any>){
return request.get('campus_person_role/sys_role_all', {params})
}export function getWithDepartmentsList(params: Record<string,any>){
return request.get('campus_person_role/departments_all', {params})
}
// USER_CODE_END -- campus_person_role // USER_CODE_END -- campus_person_role

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

@ -6,6 +6,8 @@ import request from '@/utils/request'
// USER_CODE_BEGIN -- customer_resources // USER_CODE_BEGIN -- customer_resources
/** /**
* *
@ -53,6 +55,8 @@ export function deleteCustomerResources(id: number) {
return request.delete(`customer_resources/customer_resources/${id}`, { showErrorMessage: true, showSuccessMessage: true }) return request.delete(`customer_resources/customer_resources/${id}`, { showErrorMessage: true, showSuccessMessage: true })
} }
export function getWithCampusList(params: Record<string,any>){
return request.get('customer_resources/campus_all', {params})
}
// USER_CODE_END -- customer_resources // USER_CODE_END -- customer_resources

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

@ -1,5 +1,7 @@
import request from '@/utils/request' import request from '@/utils/request'
// USER_CODE_BEGIN -- departments // USER_CODE_BEGIN -- departments
/** /**
* *
@ -47,6 +49,8 @@ export function deleteDepartments(id: number) {
return request.delete(`departments/departments/${id}`, { showErrorMessage: true, showSuccessMessage: true }) return request.delete(`departments/departments/${id}`, { showErrorMessage: true, showSuccessMessage: true })
} }
export function getWithDepartmentsList(params: Record<string,any>){
return request.get('departments/departments_all', {params})
}
// USER_CODE_END -- departments // USER_CODE_END -- departments

56
admin/src/app/api/market_performance.ts

@ -0,0 +1,56 @@
import request from '@/utils/request'
// USER_CODE_BEGIN -- market_performance
/**
*
* @param params
* @returns
*/
export function getMarketPerformanceList(params: Record<string, any>) {
return request.get(`market_performance/market_performance`, {params})
}
/**
*
* @param id id
* @returns
*/
export function getMarketPerformanceInfo(id: number) {
return request.get(`market_performance/market_performance/${id}`);
}
/**
*
* @param params
* @returns
*/
export function addMarketPerformance(params: Record<string, any>) {
return request.post('market_performance/market_performance', params, { showErrorMessage: true, showSuccessMessage: true })
}
/**
*
* @param id
* @param params
* @returns
*/
export function editMarketPerformance(params: Record<string, any>) {
return request.put(`market_performance/market_performance/${params.id}`, params, { showErrorMessage: true, showSuccessMessage: true })
}
/**
*
* @param id
* @returns
*/
export function deleteMarketPerformance(id: number) {
return request.delete(`market_performance/market_performance/${id}`, { showErrorMessage: true, showSuccessMessage: true })
}
export function getWithPersonnelList(params: Record<string,any>){
return request.get('market_performance/personnel_all', {params})
}export function getWithCampusList(params: Record<string,any>){
return request.get('market_performance/campus_all', {params})
}
// USER_CODE_END -- market_performance

10
admin/src/app/api/six_speed_modification_log.ts

@ -1,5 +1,9 @@
import request from '@/utils/request' import request from '@/utils/request'
// USER_CODE_BEGIN -- six_speed_modification_log // USER_CODE_BEGIN -- six_speed_modification_log
/** /**
* *
@ -47,6 +51,10 @@ export function deleteSixSpeedModificationLog(id: number) {
return request.delete(`six_speed_modification_log/six_speed_modification_log/${id}`, { showErrorMessage: true, showSuccessMessage: true }) return request.delete(`six_speed_modification_log/six_speed_modification_log/${id}`, { showErrorMessage: true, showSuccessMessage: true })
} }
export function getWithCampusList(params: Record<string,any>){
return request.get('six_speed_modification_log/campus_all', {params})
}export function getWithPersonnelList(params: Record<string,any>){
return request.get('six_speed_modification_log/personnel_all', {params})
}
// USER_CODE_END -- six_speed_modification_log // USER_CODE_END -- six_speed_modification_log

10
admin/src/app/api/sys.ts

@ -754,3 +754,13 @@ export function deleteExport(id: number) {
export function getInstallConfig() { export function getInstallConfig() {
return request.get('sys/install/config') return request.get('sys/install/config')
} }
//业绩配置
export function getYjpzConfig() {
return request.get('sys/get_yjpz_config')
}
export function yjpzConfig(params: Record<string, any>) {
return request.post(`sys/yjpz_config`, params)
}

20
admin/src/app/lang/zh-cn/campus_person_role.campus_person_role.json

@ -1,20 +1,14 @@
{ {
"id":"关系编号", "id":"关系编号",
"idPlaceholder":"请输入关系编号", "idPlaceholder":"请输入关系编号",
"campusId":"校区ID", "campusId":"校区",
"campusIdPlaceholder":"请输入校区ID", "campusIdPlaceholder":"全部",
"personId":"人员ID", "personId":"人员",
"personIdPlaceholder":"请输入人员ID", "personIdPlaceholder":"全部",
"roleId":"角色ID", "roleId":"角色",
"roleIdPlaceholder":"请输入角色ID", "roleIdPlaceholder":"全部",
"deptId":"部门表", "deptId":"部门表",
"deptIdPlaceholder":"请输入部门表", "deptIdPlaceholder":"全部",
"createdAt":"创建时间",
"createdAtPlaceholder":"请输入创建时间",
"updatedAt":"更新时间",
"updatedAtPlaceholder":"请输入更新时间",
"deletedAt":"逻辑删除时间",
"deletedAtPlaceholder":"请输入逻辑删除时间",
"addCampusPersonRole":"添加角色关系", "addCampusPersonRole":"添加角色关系",
"updateCampusPersonRole":"编辑角色关系", "updateCampusPersonRole":"编辑角色关系",
"campusPersonRoleDeleteTips":"确定要删除该数据吗?", "campusPersonRoleDeleteTips":"确定要删除该数据吗?",

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

@ -3,8 +3,8 @@
"idPlaceholder":"请输入部门编号", "idPlaceholder":"请输入部门编号",
"departmentName":"部门名称", "departmentName":"部门名称",
"departmentNamePlaceholder":"请输入部门名称", "departmentNamePlaceholder":"请输入部门名称",
"parentDepartmentId":"上级部门", "parentDepartmentId":"上级部门ID",
"parentDepartmentIdPlaceholder":"请输入上级部门", "parentDepartmentIdPlaceholder":"全部",
"addDepartments":"添加部门", "addDepartments":"添加部门",
"updateDepartments":"编辑部门", "updateDepartments":"编辑部门",
"departmentsDeleteTips":"确定要删除该数据吗?", "departmentsDeleteTips":"确定要删除该数据吗?",

13
admin/src/app/lang/zh-cn/market_performance.market_performance.json

@ -0,0 +1,13 @@
{
"personnelId":"人员",
"personnelIdPlaceholder":"请输入人员",
"campusId":"校区",
"campusIdPlaceholder":"全部",
"performanceAmount":"绩效金额",
"performanceAmountPlaceholder":"请输入绩效金额",
"addMarketPerformance":"添加市场绩效",
"updateMarketPerformance":"编辑市场绩效",
"marketPerformanceDeleteTips":"确定要删除该数据吗?",
"startDate":"请选择开始时间",
"endDate":"请选择结束时间"
}

8
admin/src/app/lang/zh-cn/six_speed_modification_log.six_speed_modification_log.json

@ -1,10 +1,10 @@
{ {
"id":"编号", "id":"编号",
"idPlaceholder":"请输入编号", "idPlaceholder":"请输入编号",
"campusId":"校区ID", "campusId":"校区",
"campusIdPlaceholder":"请输入校区ID", "campusIdPlaceholder":"全部",
"staffId":"人员ID", "staffId":"人员",
"staffIdPlaceholder":"请输入人员ID", "staffIdPlaceholder":"请输入人员",
"modifiedField":"修改的字段", "modifiedField":"修改的字段",
"modifiedFieldPlaceholder":"请输入修改的字段", "modifiedFieldPlaceholder":"请输入修改的字段",
"oldValue":"修改前的值", "oldValue":"修改前的值",

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

@ -11,27 +11,54 @@
<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">
<el-form :inline="true" :model="campusPersonRoleTable.searchParam" ref="searchFormRef"> <el-form :inline="true" :model="campusPersonRoleTable.searchParam" ref="searchFormRef">
<el-form-item :label="t('campusId')" prop="campus_id"> <el-form-item :label="t('campusId')" prop="campus_id">
<el-input v-model="campusPersonRoleTable.searchParam.campus_id" :placeholder="t('campusIdPlaceholder')" /> <el-select class="w-[280px]" v-model="campusPersonRoleTable.searchParam.campus_id" clearable :placeholder="t('campusIdPlaceholder')">
<el-option
v-for="(item, index) in campusIdList"
:key="index"
:label="item['campus_name']"
:value="item['id']"
/>
</el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('personId')" prop="person_id"> <el-form-item :label="t('personId')" prop="person_id">
<el-input v-model="campusPersonRoleTable.searchParam.person_id" :placeholder="t('personIdPlaceholder')" /> <el-select class="w-[280px]" v-model="campusPersonRoleTable.searchParam.person_id" clearable :placeholder="t('personIdPlaceholder')">
<el-option
v-for="(item, index) in personIdList"
:key="index"
:label="item['name']"
:value="item['id']"
/>
</el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('roleId')" prop="role_id"> <el-form-item :label="t('roleId')" prop="role_id">
<el-input v-model="campusPersonRoleTable.searchParam.role_id" :placeholder="t('roleIdPlaceholder')" /> <el-select class="w-[280px]" v-model="campusPersonRoleTable.searchParam.role_id" clearable :placeholder="t('roleIdPlaceholder')">
<el-option
v-for="(item, index) in roleIdList"
:key="index"
:label="item['role_name']"
:value="item['role_id']"
/>
</el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('deptId')" prop="dept_id"> <el-form-item :label="t('deptId')" prop="dept_id">
<el-input v-model="campusPersonRoleTable.searchParam.dept_id" :placeholder="t('deptIdPlaceholder')" /> <el-select class="w-[280px]" v-model="campusPersonRoleTable.searchParam.dept_id" clearable :placeholder="t('deptIdPlaceholder')">
</el-form-item> <el-option
<el-form-item :label="t('createdAt')" prop="created_at"> v-for="(item, index) in deptIdList"
<el-input v-model="campusPersonRoleTable.searchParam.created_at" :placeholder="t('createdAtPlaceholder')" /> :key="index"
</el-form-item> :label="item['department_name']"
<el-form-item :label="t('updatedAt')" prop="updated_at"> :value="item['id']"
<el-input v-model="campusPersonRoleTable.searchParam.updated_at" :placeholder="t('updatedAtPlaceholder')" /> />
</el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('deletedAt')" prop="deleted_at">
<el-input v-model="campusPersonRoleTable.searchParam.deleted_at" :placeholder="t('deletedAtPlaceholder')" />
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="loadCampusPersonRoleList()">{{ t('search') }}</el-button> <el-button type="primary" @click="loadCampusPersonRoleList()">{{ t('search') }}</el-button>
<el-button @click="resetForm(searchFormRef)">{{ t('reset') }}</el-button> <el-button @click="resetForm(searchFormRef)">{{ t('reset') }}</el-button>
@ -44,19 +71,13 @@
<template #empty> <template #empty>
<span>{{ !campusPersonRoleTable.loading ? t('emptyData') : '' }}</span> <span>{{ !campusPersonRoleTable.loading ? t('emptyData') : '' }}</span>
</template> </template>
<el-table-column prop="campus_id" :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="person_id" :label="t('personId')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="role_id" :label="t('roleId')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="dept_id" :label="t('deptId')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="created_at" :label="t('createdAt')" min-width="120" :show-overflow-tooltip="true"/> <el-table-column prop="person_id_name" :label="t('personId')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="updated_at" :label="t('updatedAt')" min-width="120" :show-overflow-tooltip="true"/> <el-table-column prop="role_id_name" :label="t('roleId')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="deleted_at" :label="t('deletedAt')" min-width="120" :show-overflow-tooltip="true"/> <el-table-column prop="dept_id_name" :label="t('deptId')" min-width="120" :show-overflow-tooltip="true"/>
<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 }">
@ -82,7 +103,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 { getCampusPersonRoleList, deleteCampusPersonRole } from '@/app/api/campus_person_role' import { getCampusPersonRoleList, deleteCampusPersonRole, getWithCampusList, getWithPersonnelList, getWithSysRoleList, getWithDepartmentsList } from '@/app/api/campus_person_role'
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/campus_person_role/components/campus-person-role-edit.vue' import Edit from '@/app/views/campus_person_role/components/campus-person-role-edit.vue'
@ -100,10 +121,7 @@ let campusPersonRoleTable = reactive({
"campus_id":"", "campus_id":"",
"person_id":"", "person_id":"",
"role_id":"", "role_id":"",
"dept_id":"", "dept_id":""
"created_at":"",
"updated_at":"",
"deleted_at":""
} }
}) })
@ -174,6 +192,26 @@ const deleteEvent = (id: number) => {
} }
const campusIdList = ref([])
const setCampusIdList = async () => {
campusIdList.value = await (await getWithCampusList({})).data
}
setCampusIdList()
const personIdList = ref([])
const setPersonIdList = async () => {
personIdList.value = await (await getWithPersonnelList({})).data
}
setPersonIdList()
const roleIdList = ref([])
const setRoleIdList = async () => {
roleIdList.value = await (await getWithSysRoleList({})).data
}
setRoleIdList()
const deptIdList = ref([])
const setDeptIdList = async () => {
deptIdList.value = await (await getWithDepartmentsList({})).data
}
setDeptIdList()
const resetForm = (formEl: FormInstance | undefined) => { const resetForm = (formEl: FormInstance | undefined) => {
if (!formEl) return if (!formEl) return

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

@ -2,31 +2,51 @@
<el-dialog v-model="showDialog" :title="formData.id ? t('updateCampusPersonRole') : t('addCampusPersonRole')" width="50%" class="diy-dialog-wrap" :destroy-on-close="true"> <el-dialog v-model="showDialog" :title="formData.id ? t('updateCampusPersonRole') : t('addCampusPersonRole')" 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('campusId')" prop="campus_id"> <el-form-item :label="t('campusId')" prop="campus_id">
<el-input v-model="formData.campus_id" clearable :placeholder="t('campusIdPlaceholder')" class="input-width" /> <el-select class="input-width" v-model="formData.campus_id" clearable :placeholder="t('campusIdPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in campusIdList"
:key="index"
:label="item['campus_name']"
:value="item['id']"
/>
</el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('personId')" prop="person_id"> <el-form-item :label="t('personId')" prop="person_id">
<el-input v-model="formData.person_id" clearable :placeholder="t('personIdPlaceholder')" class="input-width" /> <el-select class="input-width" v-model="formData.person_id" clearable :placeholder="t('personIdPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in personIdList"
:key="index"
:label="item['name']"
:value="item['id']"
/>
</el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('roleId')" prop="role_id"> <el-form-item :label="t('roleId')" prop="role_id">
<el-input v-model="formData.role_id" clearable :placeholder="t('roleIdPlaceholder')" class="input-width" /> <el-select class="input-width" v-model="formData.role_id" clearable :placeholder="t('roleIdPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in roleIdList"
:key="index"
:label="item['role_name']"
:value="item['role_id']"
/>
</el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('deptId')" > <el-form-item :label="t('deptId')" >
<el-input v-model="formData.dept_id" clearable :placeholder="t('deptIdPlaceholder')" class="input-width" /> <el-select class="input-width" v-model="formData.dept_id" clearable :placeholder="t('deptIdPlaceholder')">
</el-form-item> <el-option label="请选择" value=""></el-option>
<el-option
<el-form-item :label="t('createdAt')" > v-for="(item, index) in deptIdList"
<el-input v-model="formData.created_at" clearable :placeholder="t('createdAtPlaceholder')" class="input-width" /> :key="index"
</el-form-item> :label="item['department_name']"
:value="item['id']"
<el-form-item :label="t('updatedAt')" > />
<el-input v-model="formData.updated_at" clearable :placeholder="t('updatedAtPlaceholder')" class="input-width" /> </el-select>
</el-form-item>
<el-form-item :label="t('deletedAt')" >
<el-input v-model="formData.deleted_at" clearable :placeholder="t('deletedAtPlaceholder')" class="input-width" />
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -47,7 +67,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 { addCampusPersonRole, editCampusPersonRole, getCampusPersonRoleInfo } from '@/app/api/campus_person_role' import { addCampusPersonRole, editCampusPersonRole, getCampusPersonRoleInfo, getWithCampusList, getWithPersonnelList, getWithSysRoleList, getWithDepartmentsList } from '@/app/api/campus_person_role'
let showDialog = ref(false) let showDialog = ref(false)
const loading = ref(false) const loading = ref(false)
@ -60,10 +80,7 @@ const initialFormData = {
campus_id: '', campus_id: '',
person_id: '', person_id: '',
role_id: '', role_id: '',
dept_id: '', dept_id: '',
created_at: '',
updated_at: '',
deleted_at: '',
} }
const formData: Record<string, any> = reactive({ ...initialFormData }) const formData: Record<string, any> = reactive({ ...initialFormData })
@ -90,21 +107,6 @@ const formRules = computed(() => {
dept_id: [ dept_id: [
{ required: true, message: t('deptIdPlaceholder'), trigger: 'blur' }, { required: true, message: t('deptIdPlaceholder'), trigger: 'blur' },
]
,
created_at: [
{ required: true, message: t('createdAtPlaceholder'), trigger: 'blur' },
]
,
updated_at: [
{ required: true, message: t('updatedAtPlaceholder'), trigger: 'blur' },
]
,
deleted_at: [
{ required: true, message: t('deletedAtPlaceholder'), trigger: 'blur' },
] ]
, ,
} }
@ -141,6 +143,26 @@ const confirm = async (formEl: FormInstance | undefined) => {
const campusIdList = ref([] as any[])
const setCampusIdList = async () => {
campusIdList.value = await (await getWithCampusList({})).data
}
setCampusIdList()
const personIdList = ref([] as any[])
const setPersonIdList = async () => {
personIdList.value = await (await getWithPersonnelList({})).data
}
setPersonIdList()
const roleIdList = ref([] as any[])
const setRoleIdList = async () => {
roleIdList.value = await (await getWithSysRoleList({})).data
}
setRoleIdList()
const deptIdList = ref([] as any[])
const setDeptIdList = async () => {
deptIdList.value = await (await getWithDepartmentsList({})).data
}
setDeptIdList()
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

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

@ -13,7 +13,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('sourceChannel')" > <el-form-item :label="t('sourceChannel')" v-if="formData.source == 1">
<el-select class="input-width" v-model="formData.source_channel" clearable :placeholder="t('sourceChannelPlaceholder')"> <el-select class="input-width" v-model="formData.source_channel" clearable :placeholder="t('sourceChannelPlaceholder')">
<el-option label="请选择" value=""></el-option> <el-option label="请选择" value=""></el-option>
<el-option <el-option
@ -30,7 +30,7 @@
</el-form-item> </el-form-item>
<el-form-item :label="t('age')" prop="age"> <el-form-item :label="t('age')" prop="age">
<el-input-number v-model="formData.age" clearable :placeholder="t('agePlaceholder')" class="input-width" :min = "3" max = "80" /> <el-input-number v-model="formData.age" clearable :placeholder="t('agePlaceholder')" class="input-width" :min = "3" :max = "80" />
</el-form-item> </el-form-item>
<el-form-item :label="t('gender')" prop="gender"> <el-form-item :label="t('gender')" prop="gender">
@ -107,7 +107,15 @@
</el-form-item> </el-form-item>
<el-form-item :label="t('campus')" prop="campus"> <el-form-item :label="t('campus')" prop="campus">
<el-input v-model="formData.campus" clearable :placeholder="t('campusPlaceholder')" class="input-width" /> <el-select class="input-width" v-model="formData.campus" clearable :placeholder="t('campusPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in campusList"
:key="index"
:label="item['campus_name']"
:value="item['campus_name']"
/>
</el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('status')" prop="status"> <el-form-item :label="t('status')" prop="status">
@ -140,7 +148,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 { addCustomerResources, editCustomerResources, getCustomerResourcesInfo } from '@/app/api/customer_resources' import { addCustomerResources, editCustomerResources, getCustomerResourcesInfo, getWithCampusList } from '@/app/api/customer_resources'
let showDialog = ref(false) let showDialog = ref(false)
const loading = ref(false) const loading = ref(false)
@ -188,10 +196,21 @@ const formRules = computed(() => {
] ]
, ,
age: [ age: [
{ required: true, message: t('agePlaceholder'), trigger: 'blur' }, { required: true, message: t('agePlaceholder'), trigger: 'blur' },
{ validator: (rule: any, value: string, callback: any) => { if (value && !/^\d{3,80}$/.test(value)) { callback(new Error(t('generateBetween')))} else { callback() }}}, {
] validator: (rule: any, value: number, callback: any) => {
if (value === undefined || value === null || value === '') {
callback();
} else if (value < 3 || value > 80) {
callback(new Error(t('generateBetween')));
} else {
callback();
}
},
trigger: 'blur'
}
]
, ,
gender: [ gender: [
{ required: true, message: t('genderPlaceholder'), trigger: 'blur' }, { required: true, message: t('genderPlaceholder'), trigger: 'blur' },
@ -323,6 +342,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 campusList = ref([] as any[])
const setCampusList = async () => {
campusList.value = await (await getWithCampusList({})).data
}
setCampusList()
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

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

@ -79,7 +79,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 { getCustomerResourcesList, deleteCustomerResources } from '@/app/api/customer_resources' import { getCustomerResourcesList, deleteCustomerResources, getWithCampusList } from '@/app/api/customer_resources'
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/customer_resources/components/customer-resources-edit.vue' import Edit from '@/app/views/customer_resources/components/customer-resources-edit.vue'
@ -200,6 +200,11 @@ const deleteEvent = (id: number) => {
} }
const campusList = ref([])
const setCampusList = async () => {
campusList.value = await (await getWithCampusList({})).data
}
setCampusList()
const resetForm = (formEl: FormInstance | undefined) => { const resetForm = (formEl: FormInstance | undefined) => {
if (!formEl) return if (!formEl) return

17
admin/src/app/views/departments/components/departments-edit.vue

@ -6,7 +6,15 @@
</el-form-item> </el-form-item>
<el-form-item :label="t('parentDepartmentId')" > <el-form-item :label="t('parentDepartmentId')" >
<el-input v-model="formData.parent_department_id" clearable :placeholder="t('parentDepartmentIdPlaceholder')" class="input-width" /> <el-select class="input-width" v-model="formData.parent_department_id" clearable :placeholder="t('parentDepartmentIdPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in parentDepartmentIdList"
:key="index"
:label="item['department_name']"
:value="item['id']"
/>
</el-select>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -27,7 +35,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 { addDepartments, editDepartments, getDepartmentsInfo } from '@/app/api/departments' import { addDepartments, editDepartments, getDepartmentsInfo, getWithDepartmentsList } from '@/app/api/departments'
let showDialog = ref(false) let showDialog = ref(false)
const loading = ref(false) const loading = ref(false)
@ -91,6 +99,11 @@ const confirm = async (formEl: FormInstance | undefined) => {
const parentDepartmentIdList = ref([] as any[])
const setParentDepartmentIdList = async () => {
parentDepartmentIdList.value = await (await getWithDepartmentsList({})).data
}
setParentDepartmentIdList()
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

22
admin/src/app/views/departments/departments.vue

@ -14,9 +14,18 @@
<el-form-item :label="t('departmentName')" prop="department_name"> <el-form-item :label="t('departmentName')" prop="department_name">
<el-input v-model="departmentsTable.searchParam.department_name" :placeholder="t('departmentNamePlaceholder')" /> <el-input v-model="departmentsTable.searchParam.department_name" :placeholder="t('departmentNamePlaceholder')" />
</el-form-item> </el-form-item>
<el-form-item :label="t('parentDepartmentId')" prop="parent_department_id"> <el-form-item :label="t('parentDepartmentId')" prop="parent_department_id">
<el-input v-model="departmentsTable.searchParam.parent_department_id" :placeholder="t('parentDepartmentIdPlaceholder')" /> <el-select class="w-[280px]" v-model="departmentsTable.searchParam.parent_department_id" clearable :placeholder="t('parentDepartmentIdPlaceholder')">
</el-form-item> <el-option
v-for="(item, index) in parentDepartmentIdList"
:key="index"
:label="item['department_name']"
:value="item['id']"
/>
</el-select>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="loadDepartmentsList()">{{ t('search') }}</el-button> <el-button type="primary" @click="loadDepartmentsList()">{{ t('search') }}</el-button>
<el-button @click="resetForm(searchFormRef)">{{ t('reset') }}</el-button> <el-button @click="resetForm(searchFormRef)">{{ t('reset') }}</el-button>
@ -31,7 +40,7 @@
</template> </template>
<el-table-column prop="department_name" :label="t('departmentName')" min-width="120" :show-overflow-tooltip="true"/> <el-table-column prop="department_name" :label="t('departmentName')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="parent_department_id" :label="t('parentDepartmentId')" min-width="120" :show-overflow-tooltip="true"/> <el-table-column prop="parent_department_id_name" :label="t('parentDepartmentId')" min-width="120" :show-overflow-tooltip="true"/>
<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 }">
@ -57,7 +66,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 { getDepartmentsList, deleteDepartments } from '@/app/api/departments' import { getDepartmentsList, deleteDepartments, getWithDepartmentsList } from '@/app/api/departments'
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/departments/components/departments-edit.vue' import Edit from '@/app/views/departments/components/departments-edit.vue'
@ -144,6 +153,11 @@ const deleteEvent = (id: number) => {
} }
const parentDepartmentIdList = ref([])
const setParentDepartmentIdList = async () => {
parentDepartmentIdList.value = await (await getWithDepartmentsList({})).data
}
setParentDepartmentIdList()
const resetForm = (formEl: FormInstance | undefined) => { const resetForm = (formEl: FormInstance | undefined) => {
if (!formEl) return if (!formEl) return

189
admin/src/app/views/market_performance/components/market-performance-edit.vue

@ -0,0 +1,189 @@
<template>
<el-dialog v-model="showDialog" :title="formData.id ? t('updateMarketPerformance') : t('addMarketPerformance')" 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-item :label="t('personnelId')" >
<el-select class="input-width" v-model="formData.personnel_id" clearable :placeholder="t('personnelIdPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in personnelIdList"
:key="index"
:label="item['name']"
:value="item['id']"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('campusId')" >
<el-select class="input-width" v-model="formData.campus_id" clearable :placeholder="t('campusIdPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in campusIdList"
:key="index"
:label="item['campus_name']"
:value="item['id']"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('performanceAmount')" >
<el-input v-model="formData.performance_amount" clearable :placeholder="t('performanceAmountPlaceholder')" class="input-width" />
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="showDialog = false">{{ t('cancel') }}</el-button>
<el-button type="primary" :loading="loading" @click="confirm(formRef)">{{
t('confirm')
}}</el-button>
</span>
</template>
</el-dialog>
</template>
<script lang="ts" setup>
import { ref, reactive, computed, watch } from 'vue'
import { useDictionary } from '@/app/api/dict'
import { t } from '@/lang'
import type { FormInstance } from 'element-plus'
import { addMarketPerformance, editMarketPerformance, getMarketPerformanceInfo, getWithPersonnelList, getWithCampusList } from '@/app/api/market_performance'
let showDialog = ref(false)
const loading = ref(false)
/**
* 表单数据
*/
const initialFormData = {
id: '',
personnel_id: '',
campus_id: '',
performance_amount: '',
}
const formData: Record<string, any> = reactive({ ...initialFormData })
const formRef = ref<FormInstance>()
//
const formRules = computed(() => {
return {
personnel_id: [
{ required: true, message: t('personnelIdPlaceholder'), trigger: 'blur' },
]
,
campus_id: [
{ required: true, message: t('campusIdPlaceholder'), trigger: 'blur' },
]
,
performance_amount: [
{ required: true, message: t('performanceAmountPlaceholder'), trigger: 'blur' },
]
,
}
})
const emit = defineEmits(['complete'])
/**
* 确认
* @param formEl
*/
const confirm = async (formEl: FormInstance | undefined) => {
if (loading.value || !formEl) return
let save = formData.id ? editMarketPerformance : addMarketPerformance
await formEl.validate(async (valid) => {
if (valid) {
loading.value = true
let data = formData
save(data).then(res => {
loading.value = false
showDialog.value = false
emit('complete')
}).catch(err => {
loading.value = false
})
}
})
}
//
const personnelIdList = ref([] as any[])
const setPersonnelIdList = async () => {
personnelIdList.value = await (await getWithPersonnelList({})).data
}
setPersonnelIdList()
const campusIdList = ref([] as any[])
const setCampusIdList = async () => {
campusIdList.value = await (await getWithCampusList({})).data
}
setCampusIdList()
const setFormData = async (row: any = null) => {
Object.assign(formData, initialFormData)
loading.value = true
if(row){
const data = await (await getMarketPerformanceInfo(row.id)).data
if (data) Object.keys(formData).forEach((key: string) => {
if (data[key] != undefined) formData[key] = data[key]
})
}
loading.value = false
}
//
const mobileVerify = (rule: any, value: any, callback: any) => {
if (value && !/^1[3-9]\d{9}$/.test(value)) {
callback(new Error(t('generateMobile')))
} else {
callback()
}
}
//
const idCardVerify = (rule: any, value: any, callback: any) => {
if (value && !/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/.test(value)) {
callback(new Error(t('generateIdCard')))
} else {
callback()
}
}
//
const emailVerify = (rule: any, value: any, callback: any) => {
if (value && !/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/.test(value)) {
callback(new Error(t('generateEmail')))
} else {
callback()
}
}
//
const numberVerify = (rule: any, value: any, callback: any) => {
if (!Number.isInteger(value)) {
callback(new Error(t('generateNumber')))
} else {
callback()
}
}
defineExpose({
showDialog,
setFormData
})
</script>
<style lang="scss" scoped></style>
<style lang="scss">
.diy-dialog-wrap .el-form-item__label{
height: auto !important;
}
</style>

186
admin/src/app/views/market_performance/market_performance.vue

@ -0,0 +1,186 @@
<template>
<div class="main-container">
<el-card class="box-card !border-none" shadow="never">
<div class="flex justify-between items-center">
<span class="text-lg">{{pageName}}</span>
<!-- <el-button type="primary" @click="addEvent">
{{ t('addMarketPerformance') }}
</el-button> -->
</div>
<el-card class="box-card !border-none my-[10px] table-search-wrap" shadow="never">
<el-form :inline="true" :model="marketPerformanceTable.searchParam" ref="searchFormRef">
<el-form-item :label="t('campusId')" prop="campus_id">
<el-select class="w-[280px]" v-model="marketPerformanceTable.searchParam.campus_id" clearable :placeholder="t('campusIdPlaceholder')">
<el-option
v-for="(item, index) in campusIdList"
:key="index"
:label="item['campus_name']"
:value="item['id']"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('performanceAmount')" prop="performance_amount">
<el-input v-model="marketPerformanceTable.searchParam.performance_amount" :placeholder="t('performanceAmountPlaceholder')" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="loadMarketPerformanceList()">{{ t('search') }}</el-button>
<el-button @click="resetForm(searchFormRef)">{{ t('reset') }}</el-button>
</el-form-item>
</el-form>
</el-card>
<div class="mt-[10px]">
<el-table :data="marketPerformanceTable.data" size="large" v-loading="marketPerformanceTable.loading">
<template #empty>
<span>{{ !marketPerformanceTable.loading ? t('emptyData') : '' }}</span>
</template>
<el-table-column prop="personnel_id_name" :label="t('personnelId')" 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="performance_amount" :label="t('performanceAmount')" 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') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id)">{{ t('delete') }}</el-button>
</template>
</el-table-column> -->
</el-table>
<div class="mt-[16px] flex justify-end">
<el-pagination v-model:current-page="marketPerformanceTable.page" v-model:page-size="marketPerformanceTable.limit"
layout="total, sizes, prev, pager, next, jumper" :total="marketPerformanceTable.total"
@size-change="loadMarketPerformanceList()" @current-change="loadMarketPerformanceList" />
</div>
</div>
<edit ref="editMarketPerformanceDialog" @complete="loadMarketPerformanceList" />
</el-card>
</div>
</template>
<script lang="ts" setup>
import { reactive, ref, watch } from 'vue'
import { t } from '@/lang'
import { useDictionary } from '@/app/api/dict'
import { getMarketPerformanceList, deleteMarketPerformance, getWithPersonnelList, getWithCampusList } from '@/app/api/market_performance'
import { img } from '@/utils/common'
import { ElMessageBox,FormInstance } from 'element-plus'
import Edit from '@/app/views/market_performance/components/market-performance-edit.vue'
import { useRoute } from 'vue-router'
const route = useRoute()
const pageName = route.meta.title;
let marketPerformanceTable = reactive({
page: 1,
limit: 10,
total: 0,
loading: true,
data: [],
searchParam:{
"campus_id":"",
"performance_amount":""
}
})
const searchFormRef = ref<FormInstance>()
//
const selectData = ref<any[]>([])
//
/**
* 获取市场绩效列表
*/
const loadMarketPerformanceList = (page: number = 1) => {
marketPerformanceTable.loading = true
marketPerformanceTable.page = page
getMarketPerformanceList({
page: marketPerformanceTable.page,
limit: marketPerformanceTable.limit,
...marketPerformanceTable.searchParam
}).then(res => {
marketPerformanceTable.loading = false
marketPerformanceTable.data = res.data.data
marketPerformanceTable.total = res.data.total
}).catch(() => {
marketPerformanceTable.loading = false
})
}
loadMarketPerformanceList()
const editMarketPerformanceDialog: Record<string, any> | null = ref(null)
/**
* 添加市场绩效
*/
const addEvent = () => {
editMarketPerformanceDialog.value.setFormData()
editMarketPerformanceDialog.value.showDialog = true
}
/**
* 编辑市场绩效
* @param data
*/
const editEvent = (data: any) => {
editMarketPerformanceDialog.value.setFormData(data)
editMarketPerformanceDialog.value.showDialog = true
}
/**
* 删除市场绩效
*/
const deleteEvent = (id: number) => {
ElMessageBox.confirm(t('marketPerformanceDeleteTips'), t('warning'),
{
confirmButtonText: t('confirm'),
cancelButtonText: t('cancel'),
type: 'warning',
}
).then(() => {
deleteMarketPerformance(id).then(() => {
loadMarketPerformanceList()
}).catch(() => {
})
})
}
const personnelIdList = ref([])
const setPersonnelIdList = async () => {
personnelIdList.value = await (await getWithPersonnelList({})).data
}
setPersonnelIdList()
const campusIdList = ref([])
const setCampusIdList = async () => {
campusIdList.value = await (await getWithCampusList({})).data
}
setCampusIdList()
const resetForm = (formEl: FormInstance | undefined) => {
if (!formEl) return
formEl.resetFields()
loadMarketPerformanceList()
}
</script>
<style lang="scss" scoped>
/* 多行超出隐藏 */
.multi-hidden {
word-break: break-all;
text-overflow: ellipsis;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
</style>

32
admin/src/app/views/six_speed_modification_log/components/six-speed-modification-log-edit.vue

@ -2,11 +2,27 @@
<el-dialog v-model="showDialog" :title="formData.id ? t('updateSixSpeedModificationLog') : t('addSixSpeedModificationLog')" width="50%" class="diy-dialog-wrap" :destroy-on-close="true"> <el-dialog v-model="showDialog" :title="formData.id ? t('updateSixSpeedModificationLog') : t('addSixSpeedModificationLog')" 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('campusId')" prop="campus_id"> <el-form-item :label="t('campusId')" prop="campus_id">
<el-input v-model="formData.campus_id" clearable :placeholder="t('campusIdPlaceholder')" class="input-width" /> <el-select class="input-width" v-model="formData.campus_id" clearable :placeholder="t('campusIdPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in campusIdList"
:key="index"
:label="item['campus_name']"
:value="item['id']"
/>
</el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('staffId')" prop="staff_id"> <el-form-item :label="t('staffId')" prop="staff_id">
<el-input v-model="formData.staff_id" clearable :placeholder="t('staffIdPlaceholder')" class="input-width" /> <el-select class="input-width" v-model="formData.staff_id" clearable :placeholder="t('staffIdPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in staffIdList"
:key="index"
:label="item['name']"
:value="item['id']"
/>
</el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('modifiedField')" prop="modified_field"> <el-form-item :label="t('modifiedField')" prop="modified_field">
@ -39,7 +55,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 { addSixSpeedModificationLog, editSixSpeedModificationLog, getSixSpeedModificationLogInfo } from '@/app/api/six_speed_modification_log' import { addSixSpeedModificationLog, editSixSpeedModificationLog, getSixSpeedModificationLogInfo, getWithCampusList, getWithPersonnelList } from '@/app/api/six_speed_modification_log'
let showDialog = ref(false) let showDialog = ref(false)
const loading = ref(false) const loading = ref(false)
@ -121,6 +137,16 @@ const confirm = async (formEl: FormInstance | undefined) => {
const campusIdList = ref([] as any[])
const setCampusIdList = async () => {
campusIdList.value = await (await getWithCampusList({})).data
}
setCampusIdList()
const staffIdList = ref([] as any[])
const setStaffIdList = async () => {
staffIdList.value = await (await getWithPersonnelList({})).data
}
setStaffIdList()
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

45
admin/src/app/views/six_speed_modification_log/six_speed_modification_log.vue

@ -11,21 +11,18 @@
<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">
<el-form :inline="true" :model="sixSpeedModificationLogTable.searchParam" ref="searchFormRef"> <el-form :inline="true" :model="sixSpeedModificationLogTable.searchParam" ref="searchFormRef">
<el-form-item :label="t('campusId')" prop="campus_id"> <el-form-item :label="t('campusId')" prop="campus_id">
<el-input v-model="sixSpeedModificationLogTable.searchParam.campus_id" :placeholder="t('campusIdPlaceholder')" /> <el-select class="w-[280px]" v-model="sixSpeedModificationLogTable.searchParam.campus_id" clearable :placeholder="t('campusIdPlaceholder')">
</el-form-item> <el-option
<el-form-item :label="t('staffId')" prop="staff_id"> v-for="(item, index) in campusIdList"
<el-input v-model="sixSpeedModificationLogTable.searchParam.staff_id" :placeholder="t('staffIdPlaceholder')" /> :key="index"
</el-form-item> :label="item['campus_name']"
<el-form-item :label="t('modifiedField')" prop="modified_field"> :value="item['id']"
<el-input v-model="sixSpeedModificationLogTable.searchParam.modified_field" :placeholder="t('modifiedFieldPlaceholder')" /> />
</el-form-item> </el-select>
<el-form-item :label="t('oldValue')" prop="old_value">
<el-input v-model="sixSpeedModificationLogTable.searchParam.old_value" :placeholder="t('oldValuePlaceholder')" />
</el-form-item> </el-form-item>
<el-form-item :label="t('newValue')" prop="new_value">
<el-input v-model="sixSpeedModificationLogTable.searchParam.new_value" :placeholder="t('newValuePlaceholder')" />
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="loadSixSpeedModificationLogList()">{{ t('search') }}</el-button> <el-button type="primary" @click="loadSixSpeedModificationLogList()">{{ t('search') }}</el-button>
<el-button @click="resetForm(searchFormRef)">{{ t('reset') }}</el-button> <el-button @click="resetForm(searchFormRef)">{{ t('reset') }}</el-button>
@ -38,9 +35,9 @@
<template #empty> <template #empty>
<span>{{ !sixSpeedModificationLogTable.loading ? t('emptyData') : '' }}</span> <span>{{ !sixSpeedModificationLogTable.loading ? t('emptyData') : '' }}</span>
</template> </template>
<el-table-column prop="campus_id" :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="staff_id" :label="t('staffId')" 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="modified_field" :label="t('modifiedField')" min-width="120" :show-overflow-tooltip="true"/> <el-table-column prop="modified_field" :label="t('modifiedField')" min-width="120" :show-overflow-tooltip="true"/>
@ -72,7 +69,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 { getSixSpeedModificationLogList, deleteSixSpeedModificationLog } from '@/app/api/six_speed_modification_log' import { getSixSpeedModificationLogList, deleteSixSpeedModificationLog, getWithCampusList, getWithPersonnelList } from '@/app/api/six_speed_modification_log'
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/six_speed_modification_log/components/six-speed-modification-log-edit.vue' import Edit from '@/app/views/six_speed_modification_log/components/six-speed-modification-log-edit.vue'
@ -87,11 +84,7 @@ let sixSpeedModificationLogTable = reactive({
loading: true, loading: true,
data: [], data: [],
searchParam:{ searchParam:{
"campus_id":"", "campus_id":""
"staff_id":"",
"modified_field":"",
"old_value":"",
"new_value":""
} }
}) })
@ -162,6 +155,16 @@ const deleteEvent = (id: number) => {
} }
const campusIdList = ref([])
const setCampusIdList = async () => {
campusIdList.value = await (await getWithCampusList({})).data
}
setCampusIdList()
const staffIdList = ref([])
const setStaffIdList = async () => {
staffIdList.value = await (await getWithPersonnelList({})).data
}
setStaffIdList()
const resetForm = (formEl: FormInstance | undefined) => { const resetForm = (formEl: FormInstance | undefined) => {
if (!formEl) return if (!formEl) return

107
admin/src/app/views/yjpz_config/yjpz_config.vue

@ -0,0 +1,107 @@
<template>
<div class="main-container">
<el-card class="box-card !border-none" shadow="never">
<el-form
class="page-form"
:model="formData"
label-width="150px"
ref="ruleFormRef"
:rules="formRules"
v-loading="loading"
>
<el-form-item
v-for="day in weekDays"
:key="day.key"
:label="day.label"
:prop="`priceRules.${day.key}`"
>
<span style="margin: 0 8px;">每个</span>
<el-input
v-model.number="formData.priceRules[day.key].basePrice"
placeholder="请输入"
class="input-width"
clearable
/>
<span style="margin: 0 8px;"> 超过</span>
<el-input
v-model.number="formData.priceRules[day.key].limitCount"
placeholder="请输入"
class="input-width"
clearable
/>
<span style="margin: 0 8px;"></span>
<el-input
v-model.number="formData.priceRules[day.key].extraPrice"
placeholder="请输入"
class="input-width"
clearable
/>
<span style="margin-left: 4px;"></span>
</el-form-item>
</el-form>
</el-card>
<div class="fixed-footer-wrap">
<div class="fixed-footer">
<el-button type="primary" @click="onSave()">提交</el-button>
</div>
</div>
</div>
</template>
<script lang="ts" setup>
import { reactive, ref } from 'vue'
import { t } from '@/lang'
import { FormInstance, FormRules } from 'element-plus'
import { yjpzConfig,getYjpzConfig} from '@/app/api/sys'
const loading = ref(true)
const formData = reactive({
priceRules: {
mon: { basePrice: 0, limitCount: 0, extraPrice: 0 },
tue: { basePrice: 0, limitCount: 0, extraPrice: 0 },
wed: { basePrice: 0, limitCount: 0, extraPrice: 0 },
thu: { basePrice: 0, limitCount: 0, extraPrice: 0 },
fri: { basePrice: 0, limitCount: 0, extraPrice: 0 },
sat: { basePrice: 0, limitCount: 0, extraPrice: 0 },
sun: { basePrice: 0, limitCount: 0, extraPrice: 0 },
}
})
const weekDays = [
{ key: 'mon', label: '周一' },
{ key: 'tue', label: '周二' },
{ key: 'wed', label: '周三' },
{ key: 'thu', label: '周四' },
{ key: 'fri', label: '周五' },
{ key: 'sat', label: '周六' },
{ key: 'sun', label: '周日' },
]
const formRules = reactive<FormRules>({})
const setFormData = async () => {
const data = await (await getYjpzConfig()).data
formData['priceRules'] = data;
loading.value = false
}
setFormData();
const onSave = async () => {
yjpzConfig(formData)
.then(() => {
loading.value = true
setFormData();
})
.catch(() => {
loading.value = false
})
}
</script>
<style lang="scss" scoped></style>

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

@ -31,10 +31,7 @@ class CampusPersonRole extends BaseAdminController
["campus_id",""], ["campus_id",""],
["person_id",""], ["person_id",""],
["role_id",""], ["role_id",""],
["dept_id",""], ["dept_id",""]
["created_at",""],
["updated_at",""],
["deleted_at",""]
]); ]);
return success((new CampusPersonRoleService())->getPage($data)); return success((new CampusPersonRoleService())->getPage($data));
} }
@ -58,9 +55,7 @@ class CampusPersonRole extends BaseAdminController
["person_id",0], ["person_id",0],
["role_id",0], ["role_id",0],
["dept_id",0], ["dept_id",0],
["created_at",1747386167],
["updated_at",1747386167],
["deleted_at",1747386167]
]); ]);
$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); $id = (new CampusPersonRoleService())->add($data);
@ -78,9 +73,7 @@ class CampusPersonRole extends BaseAdminController
["person_id",0], ["person_id",0],
["role_id",0], ["role_id",0],
["dept_id",0], ["dept_id",0],
["created_at",1747386167],
["updated_at",1747386167],
["deleted_at",1747386167]
]); ]);
$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); (new CampusPersonRoleService())->edit($id, $data);
@ -98,4 +91,20 @@ class CampusPersonRole extends BaseAdminController
} }
public function getCampusAll(){
return success(( new CampusPersonRoleService())->getCampusAll());
}
public function getPersonnelAll(){
return success(( new CampusPersonRoleService())->getPersonnelAll());
}
public function getSysRoleAll(){
return success(( new CampusPersonRoleService())->getSysRoleAll());
}
public function getDepartmentsAll(){
return success(( new CampusPersonRoleService())->getDepartmentsAll());
}
} }

11
niucloud/app/adminapi/controller/customer_resources/CustomerResources.php

@ -63,8 +63,11 @@ class CustomerResources extends BaseAdminController
["decision_maker",""], ["decision_maker",""],
["initial_intent",""], ["initial_intent",""],
["campus",""], ["campus",""],
["status",""] ["status",""],
["create_year_month",date("Y-m")],
["create_date",date("Y-m-d")]
]); ]);
$this->validate($data, 'app\validate\customer_resources\CustomerResources.add'); $this->validate($data, 'app\validate\customer_resources\CustomerResources.add');
$id = (new CustomerResourcesService())->add($data); $id = (new CustomerResourcesService())->add($data);
return success('ADD_SUCCESS', ['id' => $id]); return success('ADD_SUCCESS', ['id' => $id]);
@ -108,5 +111,9 @@ class CustomerResources extends BaseAdminController
return success('DELETE_SUCCESS'); return success('DELETE_SUCCESS');
} }
public function getCampusAll(){
return success(( new CustomerResourcesService())->getCampusAll());
}
} }

4
niucloud/app/adminapi/controller/departments/Departments.php

@ -85,4 +85,8 @@ class Departments extends BaseAdminController
} }
public function getDepartmentsAll(){
return success(( new DepartmentsService())->getDepartmentsAll());
}
} }

99
niucloud/app/adminapi/controller/market_performance/MarketPerformance.php

@ -0,0 +1,99 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的多应用管理平台
// +----------------------------------------------------------------------
// | 官方网址:https://www.niucloud.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\adminapi\controller\market_performance;
use core\base\BaseAdminController;
use app\service\admin\market_performance\MarketPerformanceService;
/**
* 市场绩效控制器
* Class MarketPerformance
* @package app\adminapi\controller\market_performance
*/
class MarketPerformance extends BaseAdminController
{
/**
* 获取市场绩效列表
* @return \think\Response
*/
public function lists(){
$data = $this->request->params([
["campus_id",""],
["performance_amount",""]
]);
return success((new MarketPerformanceService())->getPage($data));
}
/**
* 市场绩效详情
* @param int $id
* @return \think\Response
*/
public function info(int $id){
return success((new MarketPerformanceService())->getInfo($id));
}
/**
* 添加市场绩效
* @return \think\Response
*/
public function add(){
$data = $this->request->params([
["personnel_id",0],
["campus_id",0],
["performance_amount",0.00],
]);
$this->validate($data, 'app\validate\market_performance\MarketPerformance.add');
$id = (new MarketPerformanceService())->add($data);
return success('ADD_SUCCESS', ['id' => $id]);
}
/**
* 市场绩效编辑
* @param $id 市场绩效id
* @return \think\Response
*/
public function edit(int $id){
$data = $this->request->params([
["personnel_id",0],
["campus_id",0],
["performance_amount",0.00],
]);
$this->validate($data, 'app\validate\market_performance\MarketPerformance.edit');
(new MarketPerformanceService())->edit($id, $data);
return success('EDIT_SUCCESS');
}
/**
* 市场绩效删除
* @param $id 市场绩效id
* @return \think\Response
*/
public function del(int $id){
(new MarketPerformanceService())->del($id);
return success('DELETE_SUCCESS');
}
public function getPersonnelAll(){
return success(( new MarketPerformanceService())->getPersonnelAll());
}
public function getCampusAll(){
return success(( new MarketPerformanceService())->getCampusAll());
}
}

14
niucloud/app/adminapi/controller/six_speed_modification_log/SixSpeedModificationLog.php

@ -28,11 +28,7 @@ class SixSpeedModificationLog extends BaseAdminController
*/ */
public function lists(){ public function lists(){
$data = $this->request->params([ $data = $this->request->params([
["campus_id",""], ["campus_id",""]
["staff_id",""],
["modified_field",""],
["old_value",""],
["new_value",""]
]); ]);
return success((new SixSpeedModificationLogService())->getPage($data)); return success((new SixSpeedModificationLogService())->getPage($data));
} }
@ -94,4 +90,12 @@ class SixSpeedModificationLog extends BaseAdminController
} }
public function getCampusAll(){
return success(( new SixSpeedModificationLogService())->getCampusAll());
}
public function getPersonnelAll(){
return success(( new SixSpeedModificationLogService())->getPersonnelAll());
}
} }

18
niucloud/app/adminapi/controller/sys/System.php

@ -106,4 +106,22 @@ class System extends BaseAdminController
{ {
return success(['app_debug' => env('app_debug', false)]); return success(['app_debug' => env('app_debug', false)]);
} }
public function get_yjpz_config(){
return success(data: (new SystemService())->get_yjpz_config());
}
public function yjpz_config(){
$data = $this->request->params([
['priceRules', []],
]);
return success(data: (new SystemService())->yjpz_config($data));
}
} }

9
niucloud/app/adminapi/route/campus_person_role.php

@ -15,6 +15,7 @@ use app\adminapi\middleware\AdminCheckRole;
use app\adminapi\middleware\AdminCheckToken; use app\adminapi\middleware\AdminCheckToken;
use app\adminapi\middleware\AdminLog; use app\adminapi\middleware\AdminLog;
// USER_CODE_BEGIN -- campus_person_role // USER_CODE_BEGIN -- campus_person_role
Route::group('campus_person_role', function () { Route::group('campus_person_role', function () {
@ -30,6 +31,14 @@ Route::group('campus_person_role', function () {
//删除角色关系 //删除角色关系
Route::delete('campus_person_role/:id', 'campus_person_role.CampusPersonRole/del'); Route::delete('campus_person_role/:id', 'campus_person_role.CampusPersonRole/del');
Route::get('campus_all','campus_person_role.CampusPersonRole/getCampusAll');
Route::get('personnel_all','campus_person_role.CampusPersonRole/getPersonnelAll');
Route::get('sys_role_all','campus_person_role.CampusPersonRole/getSysRoleAll');
Route::get('departments_all','campus_person_role.CampusPersonRole/getDepartmentsAll');
})->middleware([ })->middleware([
AdminCheckToken::class, AdminCheckToken::class,
AdminCheckRole::class, AdminCheckRole::class,

3
niucloud/app/adminapi/route/customer_resources.php

@ -17,6 +17,7 @@ use app\adminapi\middleware\AdminLog;
// USER_CODE_BEGIN -- customer_resources // USER_CODE_BEGIN -- customer_resources
Route::group('customer_resources', function () { Route::group('customer_resources', function () {
@ -32,6 +33,8 @@ Route::group('customer_resources', function () {
//删除客户资源 //删除客户资源
Route::delete('customer_resources/:id', 'customer_resources.CustomerResources/del'); Route::delete('customer_resources/:id', 'customer_resources.CustomerResources/del');
Route::get('campus_all','customer_resources.CustomerResources/getCampusAll');
})->middleware([ })->middleware([
AdminCheckToken::class, AdminCheckToken::class,
AdminCheckRole::class, AdminCheckRole::class,

3
niucloud/app/adminapi/route/departments.php

@ -14,6 +14,7 @@ use think\facade\Route;
use app\adminapi\middleware\AdminCheckRole; use app\adminapi\middleware\AdminCheckRole;
use app\adminapi\middleware\AdminCheckToken; use app\adminapi\middleware\AdminCheckToken;
use app\adminapi\middleware\AdminLog; use app\adminapi\middleware\AdminLog;
// USER_CODE_BEGIN -- departments // USER_CODE_BEGIN -- departments
Route::group('departments', function () { Route::group('departments', function () {
@ -29,6 +30,8 @@ Route::group('departments', function () {
//删除部门 //删除部门
Route::delete('departments/:id', 'departments.Departments/del'); Route::delete('departments/:id', 'departments.Departments/del');
Route::get('departments_all','departments.Departments/getDepartmentsAll');
})->middleware([ })->middleware([
AdminCheckToken::class, AdminCheckToken::class,
AdminCheckRole::class, AdminCheckRole::class,

41
niucloud/app/adminapi/route/market_performance.php

@ -0,0 +1,41 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的多应用管理平台
// +----------------------------------------------------------------------
// | 官方网址:https://www.niucloud.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
use think\facade\Route;
use app\adminapi\middleware\AdminCheckRole;
use app\adminapi\middleware\AdminCheckToken;
use app\adminapi\middleware\AdminLog;
// USER_CODE_BEGIN -- market_performance
Route::group('market_performance', function () {
//市场绩效列表
Route::get('market_performance', 'market_performance.MarketPerformance/lists');
//市场绩效详情
Route::get('market_performance/:id', 'market_performance.MarketPerformance/info');
//添加市场绩效
Route::post('market_performance', 'market_performance.MarketPerformance/add');
//编辑市场绩效
Route::put('market_performance/:id', 'market_performance.MarketPerformance/edit');
//删除市场绩效
Route::delete('market_performance/:id', 'market_performance.MarketPerformance/del');
Route::get('personnel_all','market_performance.MarketPerformance/getPersonnelAll');
Route::get('campus_all','market_performance.MarketPerformance/getCampusAll');
})->middleware([
AdminCheckToken::class,
AdminCheckRole::class,
AdminLog::class
]);
// USER_CODE_END -- market_performance

6
niucloud/app/adminapi/route/six_speed_modification_log.php

@ -14,6 +14,8 @@ use think\facade\Route;
use app\adminapi\middleware\AdminCheckRole; use app\adminapi\middleware\AdminCheckRole;
use app\adminapi\middleware\AdminCheckToken; use app\adminapi\middleware\AdminCheckToken;
use app\adminapi\middleware\AdminLog; use app\adminapi\middleware\AdminLog;
// USER_CODE_BEGIN -- six_speed_modification_log // USER_CODE_BEGIN -- six_speed_modification_log
Route::group('six_speed_modification_log', function () { Route::group('six_speed_modification_log', function () {
@ -29,6 +31,10 @@ Route::group('six_speed_modification_log', function () {
//删除六一速修改记录 //删除六一速修改记录
Route::delete('six_speed_modification_log/:id', 'six_speed_modification_log.SixSpeedModificationLog/del'); Route::delete('six_speed_modification_log/:id', 'six_speed_modification_log.SixSpeedModificationLog/del');
Route::get('campus_all','six_speed_modification_log.SixSpeedModificationLog/getCampusAll');
Route::get('personnel_all','six_speed_modification_log.SixSpeedModificationLog/getPersonnelAll');
})->middleware([ })->middleware([
AdminCheckToken::class, AdminCheckToken::class,
AdminCheckRole::class, AdminCheckRole::class,

4
niucloud/app/adminapi/route/sys.php

@ -326,6 +326,10 @@ Route::group('sys', function() {
// 打印小票内容 // 打印小票内容
Route::post('printer/printticket', 'sys.Printer/printTicket'); Route::post('printer/printticket', 'sys.Printer/printTicket');
//业绩配置
Route::get('get_yjpz_config', 'sys.System/get_yjpz_config');
Route::post('yjpz_config', 'sys.System/yjpz_config');
})->middleware([ })->middleware([
AdminCheckToken::class, AdminCheckToken::class,
AdminCheckRole::class, AdminCheckRole::class,

21
niucloud/app/common.php

@ -1,5 +1,7 @@
<?php <?php
use app\model\campus_person_role\CampusPersonRole;
use app\model\personnel\Personnel;
use think\Container; use think\Container;
use think\Response; use think\Response;
use think\facade\Lang; use think\facade\Lang;
@ -1025,3 +1027,22 @@ function get_last_time($time = null)
} }
return $text; return $text;
} }
function get_campus_where($user_id){
$where = [];
if($user_id == 1){
return $where;
}
$personnel = new Personnel();
$role = new CampusPersonRole();
$personnel_id = $personnel->where(['sys_user_id' => $user_id])->value('id');
if(!$personnel_id){
$where[] = ['campus_id','in',[]];
}
$campus_ids = $role->where(['person_id' => $personnel_id])->column('campus_id');
$where[] = ['campus_id','in',$campus_ids];
return $where;
}

66
niucloud/app/model/campus_person_role/CampusPersonRole.php

@ -16,6 +16,14 @@ use think\model\concern\SoftDelete;
use think\model\relation\HasMany; use think\model\relation\HasMany;
use think\model\relation\HasOne; use think\model\relation\HasOne;
use app\model\campus\Campus;
use app\model\personnel\Personnel;
use app\model\sys\SysRole;
use app\model\departments\Departments;
/** /**
* 角色关系模型 * 角色关系模型
* Class CampusPersonRole * Class CampusPersonRole
@ -63,7 +71,7 @@ class CampusPersonRole extends BaseModel
} }
/** /**
* 搜索器:角色关系校区ID * 搜索器:角色关系校区
* @param $value * @param $value
* @param $data * @param $data
*/ */
@ -75,7 +83,7 @@ class CampusPersonRole extends BaseModel
} }
/** /**
* 搜索器:角色关系人员ID * 搜索器:角色关系人员
* @param $value * @param $value
* @param $data * @param $data
*/ */
@ -87,7 +95,7 @@ class CampusPersonRole extends BaseModel
} }
/** /**
* 搜索器:角色关系角色ID * 搜索器:角色关系角色
* @param $value * @param $value
* @param $data * @param $data
*/ */
@ -110,45 +118,25 @@ class CampusPersonRole extends BaseModel
} }
} }
/**
* 搜索器:角色关系创建时间
* @param $value
* @param $data
*/
public function searchCreatedAtAttr($query, $value, $data)
{
if ($value) {
$query->where("created_at", $value);
}
}
/**
* 搜索器:角色关系更新时间
* @param $value
* @param $data
*/
public function searchUpdatedAtAttr($query, $value, $data)
{
if ($value) {
$query->where("updated_at", $value);
}
}
/**
* 搜索器:角色关系逻辑删除时间
* @param $value
* @param $data
*/
public function searchDeletedAtAttr($query, $value, $data)
{
if ($value) {
$query->where("deleted_at", $value);
}
}
public function campus(){
return $this->hasOne(Campus::class, 'id', 'campus_id')->joinType('left')->withField('campus_name,id')->bind(['campus_id_name'=>'campus_name']);
}
public function personnel(){
return $this->hasOne(Personnel::class, 'id', 'person_id')->joinType('left')->withField('name,id')->bind(['person_id_name'=>'name']);
}
public function sysRole(){
return $this->hasOne(SysRole::class, 'role_id', 'role_id')->joinType('left')->withField('role_name,role_id')->bind(['role_id_name'=>'role_name']);
}
public function departments(){
return $this->hasOne(Departments::class, 'id', 'dept_id')->joinType('left')->withField('department_name,id')->bind(['dept_id_name'=>'department_name']);
}
} }

6
niucloud/app/model/customer_resources/CustomerResources.php

@ -16,6 +16,8 @@ use think\model\concern\SoftDelete;
use think\model\relation\HasMany; use think\model\relation\HasMany;
use think\model\relation\HasOne; use think\model\relation\HasOne;
use app\model\campus\Campus;
/** /**
* 客户资源模型 * 客户资源模型
* Class CustomerResources * Class CustomerResources
@ -79,4 +81,8 @@ class CustomerResources extends BaseModel
public function campus(){
return $this->hasOne(Campus::class, 'id', 'campus')->joinType('left')->withField('campus_name,id')->bind(['campus_name'=>'campus_name']);
}
} }

22
niucloud/app/model/departments/Departments.php

@ -16,6 +16,8 @@ use think\model\concern\SoftDelete;
use think\model\relation\HasMany; use think\model\relation\HasMany;
use think\model\relation\HasOne; use think\model\relation\HasOne;
use app\model\departments\Departments;
/** /**
* 部门模型 * 部门模型
* Class Departments * Class Departments
@ -24,7 +26,7 @@ use think\model\relation\HasOne;
class Departments extends BaseModel class Departments extends BaseModel
{ {
use SoftDelete;
/** /**
* 数据表主键 * 数据表主键
@ -38,9 +40,17 @@ class Departments extends BaseModel
*/ */
protected $name = 'departments'; protected $name = 'departments';
/**
* 定义软删除标记字段.
* @var string
*/
protected $deleteTime = 'deleted_at';
/**
* 定义软删除字段的默认值.
* @var int
*/
protected $defaultSoftDelete = 0;
/** /**
* 搜索器:部门部门编号 * 搜索器:部门部门编号
@ -67,7 +77,7 @@ class Departments extends BaseModel
} }
/** /**
* 搜索器:部门上级部门 * 搜索器:部门上级部门ID
* @param $value * @param $value
* @param $data * @param $data
*/ */
@ -83,4 +93,8 @@ class Departments extends BaseModel
public function departments(){
return $this->hasOne(Departments::class, 'id', 'parent_department_id')->joinType('left')->withField('department_name,id')->bind(['parent_department_id_name'=>'department_name']);
}
} }

86
niucloud/app/model/market_performance/MarketPerformance.php

@ -0,0 +1,86 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的多应用管理平台
// +----------------------------------------------------------------------
// | 官方网址:https://www.niucloud.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\model\market_performance;
use core\base\BaseModel;
use think\model\concern\SoftDelete;
use think\model\relation\HasMany;
use think\model\relation\HasOne;
use app\model\personnel\Personnel;
use app\model\campus\Campus;
/**
* 市场绩效模型
* Class MarketPerformance
* @package app\model\market_performance
*/
class MarketPerformance extends BaseModel
{
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'market_performance';
/**
* 搜索器:市场绩效校区
* @param $value
* @param $data
*/
public function searchCampusIdAttr($query, $value, $data)
{
if ($value) {
$query->where("campus_id", $value);
}
}
/**
* 搜索器:市场绩效绩效金额
* @param $value
* @param $data
*/
public function searchPerformanceAmountAttr($query, $value, $data)
{
if ($value) {
$query->where("performance_amount", $value);
}
}
public function personnel(){
return $this->hasOne(Personnel::class, 'id', 'personnel_id')->joinType('left')->withField('name,id')->bind(['personnel_id_name'=>'name']);
}
public function campus(){
return $this->hasOne(Campus::class, 'id', 'campus_id')->joinType('left')->withField('campus_name,id')->bind(['campus_id_name'=>'campus_name']);
}
}

60
niucloud/app/model/six_speed_modification_log/SixSpeedModificationLog.php

@ -16,6 +16,10 @@ use think\model\concern\SoftDelete;
use think\model\relation\HasMany; use think\model\relation\HasMany;
use think\model\relation\HasOne; use think\model\relation\HasOne;
use app\model\campus\Campus;
use app\model\personnel\Personnel;
/** /**
* 六一速修改记录模型 * 六一速修改记录模型
* Class SixSpeedModificationLog * Class SixSpeedModificationLog
@ -55,7 +59,7 @@ class SixSpeedModificationLog extends BaseModel
} }
/** /**
* 搜索器:六一速修改记录校区ID * 搜索器:六一速修改记录校区
* @param $value * @param $value
* @param $data * @param $data
*/ */
@ -66,57 +70,17 @@ class SixSpeedModificationLog extends BaseModel
} }
} }
/**
* 搜索器:六一速修改记录人员ID
* @param $value
* @param $data
*/
public function searchStaffIdAttr($query, $value, $data)
{
if ($value) {
$query->where("staff_id", $value);
}
}
/**
* 搜索器:六一速修改记录修改的字段
* @param $value
* @param $data
*/
public function searchModifiedFieldAttr($query, $value, $data)
{
if ($value) {
$query->where("modified_field", $value);
}
}
/**
* 搜索器:六一速修改记录修改前的值
* @param $value
* @param $data
*/
public function searchOldValueAttr($query, $value, $data)
{
if ($value) {
$query->where("old_value", $value);
}
}
/** public function campus(){
* 搜索器:六一速修改记录修改后的值 return $this->hasOne(Campus::class, 'id', 'campus_id')->joinType('left')->withField('campus_name,id')->bind(['campus_id_name'=>'campus_name']);
* @param $value
* @param $data
*/
public function searchNewValueAttr($query, $value, $data)
{
if ($value) {
$query->where("new_value", $value);
}
} }
public function personnel(){
return $this->hasOne(Personnel::class, 'id', 'staff_id')->joinType('left')->withField('name,id')->bind(['staff_id_name'=>'name']);
}
} }

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

@ -12,6 +12,10 @@
namespace app\service\admin\campus_person_role; namespace app\service\admin\campus_person_role;
use app\model\campus_person_role\CampusPersonRole; use app\model\campus_person_role\CampusPersonRole;
use app\model\campus\Campus;
use app\model\personnel\Personnel;
use app\model\sys\SysRole;
use app\model\departments\Departments;
use core\base\BaseAdminService; use core\base\BaseAdminService;
@ -39,7 +43,7 @@ class CampusPersonRoleService extends BaseAdminService
$field = 'id,campus_id,person_id,role_id,dept_id,created_at,updated_at,deleted_at'; $field = 'id,campus_id,person_id,role_id,dept_id,created_at,updated_at,deleted_at';
$order = 'id desc'; $order = 'id desc';
$search_model = $this->model->withSearch(["id","campus_id","person_id","role_id","dept_id","created_at","updated_at","deleted_at"], $where)->field($field)->order($order); $search_model = $this->model->withSearch(["id","campus_id","person_id","role_id","dept_id"], $where)->with(['campus','personnel','sysRole','departments'])->field($field)->order($order);
$list = $this->pageQuery($search_model); $list = $this->pageQuery($search_model);
return $list; return $list;
} }
@ -53,7 +57,7 @@ class CampusPersonRoleService extends BaseAdminService
{ {
$field = 'id,campus_id,person_id,role_id,dept_id,created_at,updated_at,deleted_at'; $field = 'id,campus_id,person_id,role_id,dept_id,created_at,updated_at,deleted_at';
$info = $this->model->field($field)->where([['id', "=", $id]])->findOrEmpty()->toArray(); $info = $this->model->field($field)->where([['id', "=", $id]])->with(['campus','personnel','sysRole','departments'])->findOrEmpty()->toArray();
return $info; return $info;
} }
@ -95,5 +99,25 @@ class CampusPersonRoleService extends BaseAdminService
} }
public function getCampusAll(){
$campusModel = new Campus();
return $campusModel->select()->toArray();
}
public function getPersonnelAll(){
$personnelModel = new Personnel();
return $personnelModel->select()->toArray();
}
public function getSysRoleAll(){
$sysRoleModel = new SysRole();
return $sysRoleModel->select()->toArray();
}
public function getDepartmentsAll(){
$departmentsModel = new Departments();
return $departmentsModel->select()->toArray();
}
} }

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

@ -12,6 +12,7 @@
namespace app\service\admin\customer_resources; namespace app\service\admin\customer_resources;
use app\model\customer_resources\CustomerResources; use app\model\customer_resources\CustomerResources;
use app\model\campus\Campus;
use core\base\BaseAdminService; use core\base\BaseAdminService;
@ -39,7 +40,7 @@ class CustomerResourcesService extends BaseAdminService
$field = 'id,create_year_month,create_date,source,source_channel,consultant,name,age,gender,phone_number,demand,purchasing_power,cognitive_idea,optional_class_time,distance,decision_maker,initial_intent,campus,created_at,updated_at,deleted_at,status'; $field = 'id,create_year_month,create_date,source,source_channel,consultant,name,age,gender,phone_number,demand,purchasing_power,cognitive_idea,optional_class_time,distance,decision_maker,initial_intent,campus,created_at,updated_at,deleted_at,status';
$order = 'id desc'; $order = 'id desc';
$search_model = $this->model->withSearch(["name","phone_number"], $where)->field($field)->order($order); $search_model = $this->model->where(get_campus_where($this->uid))->withSearch(["name","phone_number"], $where)->with(['campus'])->field($field)->order($order);
$list = $this->pageQuery($search_model); $list = $this->pageQuery($search_model);
return $list; return $list;
} }
@ -64,6 +65,7 @@ class CustomerResourcesService extends BaseAdminService
*/ */
public function add(array $data) public function add(array $data)
{ {
$data['consultant'] = $this->username;
$res = $this->model->create($data); $res = $this->model->create($data);
return $res->id; return $res->id;
@ -78,6 +80,7 @@ class CustomerResourcesService extends BaseAdminService
public function edit(int $id, array $data) public function edit(int $id, array $data)
{ {
$data['consultant'] = $this->username;
$this->model->where([['id', '=', $id]])->update($data); $this->model->where([['id', '=', $id]])->update($data);
return true; return true;
} }
@ -94,6 +97,11 @@ class CustomerResourcesService extends BaseAdminService
return $res; return $res;
} }
public function getCampusAll(){
$campusModel = new Campus();
return $campusModel->select()->toArray();
}
} }

16
niucloud/app/service/admin/departments/DepartmentsService.php

@ -12,6 +12,7 @@
namespace app\service\admin\departments; namespace app\service\admin\departments;
use app\model\departments\Departments; use app\model\departments\Departments;
use app\model\departments\Departments as Departments_copy;
use core\base\BaseAdminService; use core\base\BaseAdminService;
@ -36,10 +37,10 @@ class DepartmentsService extends BaseAdminService
*/ */
public function getPage(array $where = []) public function getPage(array $where = [])
{ {
$field = 'id,department_name,parent_department_id,created_at,updated_at'; $field = 'id,department_name,parent_department_id,created_at,updated_at,deleted_at';
$order = 'id desc'; $order = 'id desc';
$search_model = $this->model->withSearch(["id","department_name","parent_department_id"], $where)->field($field)->order($order); $search_model = $this->model->withSearch(["id","department_name","parent_department_id"], $where)->with(['departments'])->field($field)->order($order);
$list = $this->pageQuery($search_model); $list = $this->pageQuery($search_model);
return $list; return $list;
} }
@ -51,9 +52,9 @@ class DepartmentsService extends BaseAdminService
*/ */
public function getInfo(int $id) public function getInfo(int $id)
{ {
$field = 'id,department_name,parent_department_id,created_at,updated_at'; $field = 'id,department_name,parent_department_id,created_at,updated_at,deleted_at';
$info = $this->model->field($field)->where([['id', "=", $id]])->findOrEmpty()->toArray(); $info = $this->model->field($field)->where([['id', "=", $id]])->with(['departments'])->findOrEmpty()->toArray();
return $info; return $info;
} }
@ -94,6 +95,11 @@ class DepartmentsService extends BaseAdminService
return $res; return $res;
} }
public function getDepartmentsAll(){
$departmentsModel = new Departments_copy();
return $departmentsModel->select()->toArray();
}
} }

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

@ -0,0 +1,111 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的多应用管理平台
// +----------------------------------------------------------------------
// | 官方网址:https://www.niucloud.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\service\admin\market_performance;
use app\model\market_performance\MarketPerformance;
use app\model\personnel\Personnel;
use app\model\campus\Campus;
use core\base\BaseAdminService;
/**
* 市场绩效服务层
* Class MarketPerformanceService
* @package app\service\admin\market_performance
*/
class MarketPerformanceService extends BaseAdminService
{
public function __construct()
{
parent::__construct();
$this->model = new MarketPerformance();
}
/**
* 获取市场绩效列表
* @param array $where
* @return array
*/
public function getPage(array $where = [])
{
$field = 'id,personnel_id,campus_id,performance_amount,resource_count,performance_date,performance_config,performance_algorithm,status,created_at,updated_at';
$order = 'id desc';
$search_model = $this->model->where(get_campus_where($this->uid))->withSearch(["campus_id","performance_amount"], $where)->with(['personnel','campus'])->field($field)->order($order);
$list = $this->pageQuery($search_model);
return $list;
}
/**
* 获取市场绩效信息
* @param int $id
* @return array
*/
public function getInfo(int $id)
{
$field = 'id,personnel_id,campus_id,performance_amount,resource_count,performance_date,performance_config,performance_algorithm,status,created_at,updated_at';
$info = $this->model->field($field)->where([['id', "=", $id]])->with(['personnel','campus'])->findOrEmpty()->toArray();
return $info;
}
/**
* 添加市场绩效
* @param array $data
* @return mixed
*/
public function add(array $data)
{
$res = $this->model->create($data);
return $res->id;
}
/**
* 市场绩效编辑
* @param int $id
* @param array $data
* @return bool
*/
public function edit(int $id, array $data)
{
$this->model->where([['id', '=', $id]])->update($data);
return true;
}
/**
* 删除市场绩效
* @param int $id
* @return bool
*/
public function del(int $id)
{
$model = $this->model->where([['id', '=', $id]])->find();
$res = $model->delete();
return $res;
}
public function getPersonnelAll(){
$personnelModel = new Personnel();
return $personnelModel->select()->toArray();
}
public function getCampusAll(){
$campusModel = new Campus();
return $campusModel->select()->toArray();
}
}

16
niucloud/app/service/admin/six_speed_modification_log/SixSpeedModificationLogService.php

@ -12,6 +12,8 @@
namespace app\service\admin\six_speed_modification_log; namespace app\service\admin\six_speed_modification_log;
use app\model\six_speed_modification_log\SixSpeedModificationLog; use app\model\six_speed_modification_log\SixSpeedModificationLog;
use app\model\campus\Campus;
use app\model\personnel\Personnel;
use core\base\BaseAdminService; use core\base\BaseAdminService;
@ -39,7 +41,7 @@ class SixSpeedModificationLogService extends BaseAdminService
$field = 'id,campus_id,staff_id,modified_field,old_value,new_value,is_rollback,rollback_time,created_at,updated_at'; $field = 'id,campus_id,staff_id,modified_field,old_value,new_value,is_rollback,rollback_time,created_at,updated_at';
$order = 'id desc'; $order = 'id desc';
$search_model = $this->model->withSearch(["id","campus_id","staff_id","modified_field","old_value","new_value"], $where)->field($field)->order($order); $search_model = $this->model->withSearch(["id","campus_id"], $where)->with(['campus','personnel'])->field($field)->order($order);
$list = $this->pageQuery($search_model); $list = $this->pageQuery($search_model);
return $list; return $list;
} }
@ -53,7 +55,7 @@ class SixSpeedModificationLogService extends BaseAdminService
{ {
$field = 'id,campus_id,staff_id,modified_field,old_value,new_value,is_rollback,rollback_time,created_at,updated_at'; $field = 'id,campus_id,staff_id,modified_field,old_value,new_value,is_rollback,rollback_time,created_at,updated_at';
$info = $this->model->field($field)->where([['id', "=", $id]])->findOrEmpty()->toArray(); $info = $this->model->field($field)->where([['id', "=", $id]])->with(['campus','personnel'])->findOrEmpty()->toArray();
return $info; return $info;
} }
@ -95,5 +97,15 @@ class SixSpeedModificationLogService extends BaseAdminService
} }
public function getCampusAll(){
$campusModel = new Campus();
return $campusModel->select()->toArray();
}
public function getPersonnelAll(){
$personnelModel = new Personnel();
return $personnelModel->select()->toArray();
}
} }

19
niucloud/app/service/admin/sys/SystemService.php

@ -12,6 +12,7 @@
namespace app\service\admin\sys; namespace app\service\admin\sys;
use app\job\sys\CheckJob; use app\job\sys\CheckJob;
use app\model\sys\SysConfig;
use app\service\core\sys\CoreSysConfigService; use app\service\core\sys\CoreSysConfigService;
use core\base\BaseAdminService; use core\base\BaseAdminService;
use think\facade\Db; use think\facade\Db;
@ -169,4 +170,22 @@ class SystemService extends BaseAdminService
} }
return false; return false;
} }
public function get_yjpz_config(){
$config = new SysConfig();
$data = $config->where(['config_key' => 'priceRules'])->value("value");
return $data;
}
public function yjpz_config(array $data){
$config = new SysConfig();
$config->where(['config_key' => 'priceRules'])->update([
'value' => json_encode($data['priceRules'])
]);
return true;
}
} }

4
niucloud/app/validate/campus_person_role/CampusPersonRole.php

@ -32,8 +32,8 @@ class CampusPersonRole extends BaseValidate
]; ];
protected $scene = [ protected $scene = [
"add" => ['campus_id', 'person_id', 'role_id', 'dept_id', 'created_at', 'updated_at', 'deleted_at'], "add" => ['campus_id', 'person_id', 'role_id', 'dept_id'],
"edit" => ['campus_id', 'person_id', 'role_id', 'dept_id', 'created_at', 'updated_at', 'deleted_at'] "edit" => ['campus_id', 'person_id', 'role_id', 'dept_id']
]; ];
} }

35
niucloud/app/validate/market_performance/MarketPerformance.php

@ -0,0 +1,35 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的多应用管理平台
// +----------------------------------------------------------------------
// | 官方网址:https://www.niucloud.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\validate\market_performance;
use core\base\BaseValidate;
/**
* 市场绩效验证器
* Class MarketPerformance
* @package addon\app\validate\market_performance
*/
class MarketPerformance extends BaseValidate
{
protected $rule = [
];
protected $message = [
];
protected $scene = [
"add" => ['personnel_id', 'campus_id', 'performance_amount'],
"edit" => ['personnel_id', 'campus_id', 'performance_amount']
];
}
Loading…
Cancel
Save