Browse Source

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	admin/src/app/views/school_approval/config/index.vue
master
于宏哲PHP 10 months ago
parent
commit
cf0f98b5e5
  1. 10
      admin/src/app/api/school_approval/process.ts
  2. 11
      admin/src/app/views/school_approval/config/index.vue
  3. 178
      admin/src/app/views/school_approval/process/index.vue
  4. 37
      admin/src/utils/request.ts
  5. 16
      niucloud/app/adminapi/controller/person_course_schedule/PersonCourseSchedule.php
  6. 10
      niucloud/app/adminapi/controller/school_approval/Process.php
  7. 32
      niucloud/app/api/controller/apiController/Common.php
  8. 4
      niucloud/app/api/route/route.php
  9. 78
      niucloud/app/model/person_course_schedule/PersonCourseSchedule.php
  10. 76
      niucloud/app/service/api/apiService/CommonService.php
  11. 2
      niucloud/app/service/school_approval/SchoolApprovalProcessService.php
  12. BIN
      niucloud/public/uniapp_src/static/images/common/black_arrow_right.png
  13. BIN
      niucloud/public/uniapp_src/static/images/common/closex.png
  14. BIN
      niucloud/public/uniapp_src/static/images/common/clousex-big.png
  15. BIN
      niucloud/public/uniapp_src/static/images/common/common_icon_jump_gold.png
  16. BIN
      niucloud/public/uniapp_src/static/images/common/delete.png
  17. BIN
      niucloud/public/uniapp_src/static/images/common/edit.png
  18. BIN
      niucloud/public/uniapp_src/static/images/common/fa_song.png
  19. BIN
      niucloud/public/uniapp_src/static/images/common/gift_icon_close_new.png
  20. BIN
      niucloud/public/uniapp_src/static/images/common/gouxuankuang.png
  21. BIN
      niucloud/public/uniapp_src/static/images/common/gray_arrow_down.png
  22. BIN
      niucloud/public/uniapp_src/static/images/common/icon-close.png
  23. BIN
      niucloud/public/uniapp_src/static/images/common/icon-drop-down.png
  24. BIN
      niucloud/public/uniapp_src/static/images/common/icon_about.png
  25. BIN
      niucloud/public/uniapp_src/static/images/common/icon_black_back.png
  26. BIN
      niucloud/public/uniapp_src/static/images/common/icon_jump_black3.png
  27. BIN
      niucloud/public/uniapp_src/static/images/common/image-delete.png
  28. BIN
      niucloud/public/uniapp_src/static/images/common/jia_hao.png
  29. BIN
      niucloud/public/uniapp_src/static/images/common/jump-r-arrow.png
  30. BIN
      niucloud/public/uniapp_src/static/images/common/menu_icon_empty.png
  31. BIN
      niucloud/public/uniapp_src/static/images/common/more-arrow-right.png
  32. BIN
      niucloud/public/uniapp_src/static/images/common/round-black-selected.png
  33. BIN
      niucloud/public/uniapp_src/static/images/common/round_add_disabled.png
  34. BIN
      niucloud/public/uniapp_src/static/images/common/round_add_normal.png
  35. BIN
      niucloud/public/uniapp_src/static/images/common/round_minus.png
  36. BIN
      niucloud/public/uniapp_src/static/images/common/search-icon.png
  37. BIN
      niucloud/public/uniapp_src/static/images/common/star_normal.png
  38. BIN
      niucloud/public/uniapp_src/static/images/common/xi_tong_xiao_xi.png
  39. BIN
      niucloud/public/uniapp_src/static/images/common/yong_hu.png
  40. BIN
      niucloud/public/uniapp_src/static/images/home/chaungjian.png
  41. BIN
      niucloud/public/uniapp_src/static/images/home/tixing.png
  42. BIN
      niucloud/public/uniapp_src/static/images/home/wang.png
  43. BIN
      niucloud/public/uniapp_src/static/images/home/yong.png
  44. BIN
      niucloud/public/uniapp_src/static/images/index/addto.png
  45. BIN
      niucloud/public/uniapp_src/static/images/index/check_mark.png
  46. BIN
      niucloud/public/uniapp_src/static/images/index/danlan.png
  47. BIN
      niucloud/public/uniapp_src/static/images/index/danlv.png
  48. BIN
      niucloud/public/uniapp_src/static/images/index/dian.png
  49. BIN
      niucloud/public/uniapp_src/static/images/index/hong.png
  50. BIN
      niucloud/public/uniapp_src/static/images/index/huang.png
  51. BIN
      niucloud/public/uniapp_src/static/images/index/icon_shopping_bag.png
  52. BIN
      niucloud/public/uniapp_src/static/images/index/img.jpg
  53. BIN
      niucloud/public/uniapp_src/static/images/index/intention1.png
  54. BIN
      niucloud/public/uniapp_src/static/images/index/intention2.png
  55. BIN
      niucloud/public/uniapp_src/static/images/index/intention3.png
  56. BIN
      niucloud/public/uniapp_src/static/images/index/lan.png
  57. BIN
      niucloud/public/uniapp_src/static/images/index/lv.png
  58. BIN
      niucloud/public/uniapp_src/static/images/index/lvs.png
  59. BIN
      niucloud/public/uniapp_src/static/images/index/manjian.png
  60. BIN
      niucloud/public/uniapp_src/static/images/index/me_icon_notification.png
  61. BIN
      niucloud/public/uniapp_src/static/images/index/menu_btn_close.png
  62. BIN
      niucloud/public/uniapp_src/static/images/index/menu_icon_popup_triangle_normal.png
  63. BIN
      niucloud/public/uniapp_src/static/images/index/menupopup_btn_share_normal.png
  64. BIN
      niucloud/public/uniapp_src/static/images/index/menupopup_btn_share_quanzi.png
  65. BIN
      niucloud/public/uniapp_src/static/images/index/menupopup_btn_share_wechat.png
  66. BIN
      niucloud/public/uniapp_src/static/images/index/message.png
  67. BIN
      niucloud/public/uniapp_src/static/images/index/myk.png
  68. BIN
      niucloud/public/uniapp_src/static/images/index/phone.png
  69. BIN
      niucloud/public/uniapp_src/static/images/index/rexiao.png
  70. BIN
      niucloud/public/uniapp_src/static/images/index/round-cancel.png
  71. BIN
      niucloud/public/uniapp_src/static/images/index/round.png
  72. BIN
      niucloud/public/uniapp_src/static/images/index/round_close_btn.png
  73. BIN
      niucloud/public/uniapp_src/static/images/index/score.png
  74. BIN
      niucloud/public/uniapp_src/static/images/index/score1.png
  75. BIN
      niucloud/public/uniapp_src/static/images/index/setup.png
  76. BIN
      niucloud/public/uniapp_src/static/images/index/shadow_yellow_star.png
  77. BIN
      niucloud/public/uniapp_src/static/images/index/shenlan.png
  78. BIN
      niucloud/public/uniapp_src/static/images/index/star.png
  79. BIN
      niucloud/public/uniapp_src/static/images/index/task.png
  80. BIN
      niucloud/public/uniapp_src/static/images/index/tuijian.png
  81. BIN
      niucloud/public/uniapp_src/static/images/index/work_details.png
  82. BIN
      niucloud/public/uniapp_src/static/images/index/writing.png
  83. BIN
      niucloud/public/uniapp_src/static/images/index/xinpin.png
  84. BIN
      niucloud/public/uniapp_src/static/images/index/yellow_star.png
  85. BIN
      niucloud/public/uniapp_src/static/images/index/zan_wu.png
  86. BIN
      niucloud/public/uniapp_src/static/images/login/login1.png
  87. BIN
      niucloud/public/uniapp_src/static/images/login/login2.png
  88. BIN
      niucloud/public/uniapp_src/static/images/login/wechat1.png
  89. BIN
      niucloud/public/uniapp_src/static/images/mall/b3d3a98e3c7f450aaa32fbec6aecdfaf.png
  90. BIN
      niucloud/public/uniapp_src/static/images/mall/img_pointmall_star.png
  91. BIN
      niucloud/public/uniapp_src/static/images/mall/me_img_banner_mall.png
  92. BIN
      niucloud/public/uniapp_src/static/images/mall/me_pointmall_img_nogift.png
  93. BIN
      niucloud/public/uniapp_src/static/images/mall/store_brh_home_page_normal.png
  94. BIN
      niucloud/public/uniapp_src/static/images/mall/store_brh_service_normal.png
  95. BIN
      niucloud/public/uniapp_src/static/images/member/me_club_task_img_done.png
  96. BIN
      niucloud/public/uniapp_src/static/images/my/b3d3a98e3c7f450aaa32fbec6aecdfaf.png
  97. BIN
      niucloud/public/uniapp_src/static/images/my/coupons-empty.png
  98. BIN
      niucloud/public/uniapp_src/static/images/my/icon_arrow.png
  99. BIN
      niucloud/public/uniapp_src/static/images/my/icon_attention.png
  100. BIN
      niucloud/public/uniapp_src/static/images/my/icon_giftcard.png

10
admin/src/app/api/school_approval/process.ts

@ -5,7 +5,7 @@ import request from '@/utils/request'
* @param params
*/
export function getProcessList(params?: Record<string, any>) {
return request.get({ url: '/school_approval/process/lists', params })
return request.get('/school_approval/process/lists', { params })
}
/**
@ -13,7 +13,7 @@ export function getProcessList(params?: Record<string, any>) {
* @param params
*/
export function getProcessInfo(params: { id: number }) {
return request.get({ url: '/school_approval/process/info', params })
return request.get('/school_approval/process/info', { params })
}
/**
@ -21,7 +21,7 @@ export function getProcessInfo(params: { id: number }) {
* @param params
*/
export function createProcess(params: any) {
return request.post({ url: '/school_approval/process/create', data: params })
return request.post('/school_approval/process/create', params)
}
/**
@ -29,7 +29,7 @@ export function createProcess(params: any) {
* @param params
*/
export function approveProcess(params: { process_id: number; status: string; remarks?: string }) {
return request.post({ url: '/school_approval/process/approve', data: params })
return request.post('/school_approval/process/approve', params)
}
/**
@ -37,5 +37,5 @@ export function approveProcess(params: { process_id: number; status: string; rem
* @param params
*/
export function cancelProcess(params: { process_id: number }) {
return request.post({ url: '/school_approval/process/cancel', data: params })
return request.post('/school_approval/process/cancel', params)
}

11
admin/src/app/views/school_approval/config/index.vue

@ -590,6 +590,15 @@
</script>
<style lang="scss" scoped>
.node-list {
margin-left: 10px;
}
.node-item {
background-color: #f9f9f9;
transition: all 0.3s;
padding: 10px;
margin-top: 10px;
.node-item {
background-color: #f9f9f9;
transition: all 0.3s;
@ -612,4 +621,4 @@
color: #409eff;
}
}
</style>
</style>

178
admin/src/app/views/school_approval/process/index.vue

@ -5,14 +5,14 @@
<div>
<el-button type="primary" @click="handleCreate">
<icon name="add" class="mr-5px" />
{{ $t('approval.process.create') }}
{{ '创建(测试暂留)' }}
</el-button>
</div>
<div class="flex items-center">
<el-input
v-model="state.searchParams.process_name"
class="w-200px mr-15px"
:placeholder="$t('approval.process.searchPlaceholder')"
class="w-200 mr-15"
:placeholder="'搜索'"
clearable
@keyup.enter="handleSearch"
@clear="handleSearch"
@ -20,29 +20,29 @@
<el-select
v-model="state.searchParams.approval_status"
class="w-150px mr-15px"
:placeholder="$t('approval.process.statusPlaceholder')"
:placeholder="'状态'"
clearable
@change="handleSearch"
>
<el-option :label="$t('approval.process.pending')" value="pending" />
<el-option :label="$t('approval.process.approved')" value="approved" />
<el-option :label="$t('approval.process.rejected')" value="rejected" />
<el-option :label="'待审批'" value="pending" />
<el-option :label="'已审批'" value="approved" />
<el-option :label="'已拒绝'" value="rejected" />
</el-select>
<el-button type="primary" @click="handleSearch">
<icon name="search" class="mr-5px" />
{{ $t('common.search') }}
{{ '搜索' }}
</el-button>
<el-button @click="handleReset">
<icon name="refresh-right" class="mr-5px" />
{{ $t('common.reset') }}
{{ '重置' }}
</el-button>
</div>
</div>
<el-tabs v-model="state.activeTab" class="mt-15px" @tab-click="handleTabChange">
<el-tab-pane :label="$t('approval.process.all')" name="all" />
<el-tab-pane :label="$t('approval.process.myCreate')" name="myCreate" />
<el-tab-pane :label="$t('approval.process.myApproval')" name="myApproval" />
<el-tab-pane :label="'全部'" name="all" />
<el-tab-pane :label="'我创建的'" name="myCreate" />
<el-tab-pane :label="'我审批的'" name="myApproval" />
</el-tabs>
<el-table
@ -50,22 +50,22 @@
:data="state.processList"
:header-cell-style="{ background: '#fafafa', color: '#606266' }"
>
<el-table-column :label="$t('approval.process.id')" prop="id" width="80" />
<el-table-column :label="$t('approval.process.processName')" prop="process_name" min-width="180" />
<el-table-column :label="$t('approval.process.applicantId')" prop="applicant_id" width="100" />
<el-table-column :label="$t('approval.process.applicationTime')" prop="application_time" width="180" />
<el-table-column :label="$t('approval.process.currentApproverId')" prop="current_approver_id" width="100" />
<el-table-column :label="$t('approval.process.approvalStatus')" prop="approval_status" width="100">
<el-table-column :label="'ID'" prop="id" width="80" />
<el-table-column :label="'流程名称'" prop="process_name" min-width="180" />
<el-table-column :label="'申请人ID'" prop="applicant_id" width="100" />
<el-table-column :label="'申请时间'" prop="application_time" width="180" />
<el-table-column :label="'当前审批人ID'" prop="current_approver_id" width="100" />
<el-table-column :label="'审批状态'" prop="approval_status" width="100">
<template #default="{ row }">
<el-tag :type="getStatusType(row.approval_status)">
{{ getStatusText(row.approval_status) }}
</el-tag>
</template>
</el-table-column>
<el-table-column :label="$t('common.action')" width="180" fixed="right">
<el-table-column :label="'操作'" width="180" fixed="right">
<template #default="{ row }">
<el-button type="primary" link @click="handleDetail(row)">
{{ $t('common.detail') }}
{{ '详情' }}
</el-button>
<el-button
v-if="row.approval_status === 'pending' && row.applicant_id === state.userInfo.uid"
@ -73,7 +73,7 @@
link
@click="handleCancel(row)"
>
{{ $t('approval.process.cancel') }}
{{ '取消' }}
</el-button>
<el-button
v-if="row.approval_status === 'pending' && row.current_approver_id === state.userInfo.uid"
@ -81,7 +81,7 @@
link
@click="handleApprove(row)"
>
{{ $t('approval.process.approve') }}
{{ '审批' }}
</el-button>
</template>
</el-table-column>
@ -103,7 +103,7 @@
<!-- 创建审批弹窗 -->
<el-dialog
v-model="state.createDialog.visible"
:title="$t('approval.process.create')"
:title="'创建审批'"
width="600px"
:close-on-click-modal="false"
:destroy-on-close="true"
@ -114,17 +114,17 @@
:rules="state.createDialog.rules"
label-width="120px"
>
<el-form-item :label="$t('approval.process.processName')" prop="process_name">
<el-form-item :label="'流程名称'" prop="process_name">
<el-input
v-model="state.createDialog.form.process_name"
:placeholder="$t('approval.process.processNamePlaceholder')"
:placeholder="'请输入流程名称'"
/>
</el-form-item>
<el-form-item :label="$t('approval.process.configId')" prop="config_id">
<el-form-item :label="'审批流配置'" prop="config_id">
<el-select
v-model="state.createDialog.form.config_id"
class="w-full"
:placeholder="$t('approval.process.configIdPlaceholder')"
:placeholder="'请选择审批流配置'"
>
<el-option
v-for="item in state.configOptions"
@ -134,19 +134,19 @@
/>
</el-select>
</el-form-item>
<el-form-item :label="$t('approval.process.remarks')" prop="remarks">
<el-form-item :label="'备注'" prop="remarks">
<el-input
v-model="state.createDialog.form.remarks"
type="textarea"
:rows="3"
:placeholder="$t('approval.process.remarksPlaceholder')"
:placeholder="'请输入备注'"
/>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="state.createDialog.visible = false">{{ $t('common.cancel') }}</el-button>
<el-button @click="state.createDialog.visible = false">{{ '取消' }}</el-button>
<el-button type="primary" :loading="state.createDialog.loading" @click="handleCreateSubmit">
{{ $t('common.confirm') }}
{{ '确认' }}
</el-button>
</template>
</el-dialog>
@ -154,7 +154,7 @@
<!-- 审批弹窗 -->
<el-dialog
v-model="state.approveDialog.visible"
:title="$t('approval.process.approve')"
:title="'审批'"
width="500px"
:close-on-click-modal="false"
:destroy-on-close="true"
@ -165,25 +165,25 @@
:rules="state.approveDialog.rules"
label-width="80px"
>
<el-form-item :label="$t('approval.process.status')" prop="status">
<el-form-item :label="'审批状态'" prop="status">
<el-radio-group v-model="state.approveDialog.form.status">
<el-radio label="approved">{{ $t('approval.process.approved') }}</el-radio>
<el-radio label="rejected">{{ $t('approval.process.rejected') }}</el-radio>
<el-radio label="approved">{{ '已审批' }}</el-radio>
<el-radio label="rejected">{{ '已拒绝' }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item :label="$t('approval.process.remarks')" prop="remarks">
<el-form-item :label="'备注'" prop="remarks">
<el-input
v-model="state.approveDialog.form.remarks"
type="textarea"
:rows="3"
:placeholder="$t('approval.process.remarksPlaceholder')"
:placeholder="'请输入备注'"
/>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="state.approveDialog.visible = false">{{ $t('common.cancel') }}</el-button>
<el-button @click="state.approveDialog.visible = false">{{ '取消' }}</el-button>
<el-button type="primary" :loading="state.approveDialog.loading" @click="handleApproveSubmit">
{{ $t('common.confirm') }}
{{ '确认' }}
</el-button>
</template>
</el-dialog>
@ -191,41 +191,41 @@
<!-- 详情弹窗 -->
<el-dialog
v-model="state.detailDialog.visible"
:title="$t('approval.process.detail')"
:title="'审批详情'"
width="800px"
:destroy-on-close="true"
>
<el-descriptions :column="1" border>
<el-descriptions-item :label="$t('approval.process.id')">
<el-descriptions-item :label="'ID'">
{{ state.detailDialog.info.id }}
</el-descriptions-item>
<el-descriptions-item :label="$t('approval.process.processName')">
<el-descriptions-item :label="'流程名称'">
{{ state.detailDialog.info.process_name }}
</el-descriptions-item>
<el-descriptions-item :label="$t('approval.process.applicantId')">
<el-descriptions-item :label="'申请人ID'">
{{ state.detailDialog.info.applicant_id }}
</el-descriptions-item>
<el-descriptions-item :label="$t('approval.process.applicationTime')">
<el-descriptions-item :label="'申请时间'">
{{ state.detailDialog.info.application_time }}
</el-descriptions-item>
<el-descriptions-item :label="$t('approval.process.currentApproverId')">
<el-descriptions-item :label="'当前审批人ID'">
{{ state.detailDialog.info.current_approver_id }}
</el-descriptions-item>
<el-descriptions-item :label="$t('approval.process.approvalStatus')">
<el-descriptions-item :label="'审批状态'">
<el-tag :type="getStatusType(state.detailDialog.info.approval_status)">
{{ getStatusText(state.detailDialog.info.approval_status) }}
</el-tag>
</el-descriptions-item>
<el-descriptions-item :label="$t('approval.process.approvalTime')">
<el-descriptions-item :label="'审批时间'">
{{ state.detailDialog.info.approval_time || '-' }}
</el-descriptions-item>
<el-descriptions-item :label="$t('approval.process.remarks')">
<el-descriptions-item :label="'备注'">
{{ state.detailDialog.info.remarks || '-' }}
</el-descriptions-item>
</el-descriptions>
<div class="mt-20px">
<div class="font-bold text-16px mb-10px">{{ $t('approval.process.participants') }}</div>
<div class="font-bold text-16px mb-10px">{{ '参与者' }}</div>
<el-timeline>
<el-timeline-item
v-for="(node, index) in state.detailDialog.info.participants"
@ -234,22 +234,22 @@
:color="getNodeColor(node.status)"
>
<div class="font-bold mb-5px">
{{ $t('approval.process.participantLabel', { index: index + 1 }) }}
{{ '参与者' + (index + 1) }}
</div>
<div class="text-gray-500">
{{ $t('approval.process.participantId') }}{{ node.participant_id }}
{{ '参与者ID' }}{{ node.participant_id }}
</div>
<div class="text-gray-500">
{{ $t('approval.process.sequence') }}{{ node.sequence }}
{{ '顺序' }}{{ node.sequence }}
</div>
<div class="text-gray-500">
{{ $t('approval.process.status') }}{{ getStatusText(node.status) }}
{{ '状态' }}{{ getStatusText(node.status) }}
</div>
<div class="text-gray-500">
{{ $t('approval.process.signType') }}{{ node.sign_type === 'or_sign' ? $t('approval.process.orSign') : $t('approval.process.andSign') }}
{{ '签名类型' }}{{ node.sign_type === 'or_sign' ? '或签名' : '和签名' }}
</div>
<div class="text-gray-500">
{{ $t('approval.process.remarks') }}{{ node.remarks || '-' }}
{{ '备注' }}{{ node.remarks || '-' }}
</div>
</el-timeline-item>
</el-timeline>
@ -263,23 +263,39 @@ import { reactive, ref, onMounted } from 'vue'
import { ElMessage, ElMessageBox, FormInstance } from 'element-plus'
import { getProcessList, getProcessInfo, createProcess, approveProcess, cancelProcess } from '@/app/api/school_approval/process'
import { getConfigList } from '@/app/api/school_approval/config'
import { useI18n } from 'vue-i18n'
// import { useI18n } from 'vue-i18n'
// import { useUserInfo } from '@/stores/userInfo'
const { t } = useI18n()
// const { t } = useI18n()
// const userInfo = useUserInfo()
//
const createFormRef = ref<FormInstance>()
const approveFormRef = ref<FormInstance>()
// script
interface ConfigOption {
label: string;
value: number;
}
interface Participant {
participant_id: number;
sequence: number;
status: string;
sign_type: string;
remarks?: string;
}
//
const state = reactive({
loading: false,
processList: [],
total: 0,
activeTab: 'all',
userInfo: null,
userInfo: {
uid: 1 // IDstore
},
searchParams: {
page: 1,
limit: 10,
@ -288,7 +304,7 @@ const state = reactive({
applicant_id: 0,
approver_id: 0
},
configOptions: [], //
configOptions: [] as ConfigOption[], //
createDialog: {
visible: false,
loading: false,
@ -299,10 +315,10 @@ const state = reactive({
},
rules: {
process_name: [
{ required: true, message: t('approval.process.processNameRequired'), trigger: 'blur' }
{ required: true, message: '请输入流程名称', trigger: 'blur' }
],
config_id: [
{ required: true, message: t('approval.process.configIdRequired'), trigger: 'change' }
{ required: true, message: '请选择审批流配置', trigger: 'change' }
]
}
},
@ -316,13 +332,23 @@ const state = reactive({
},
rules: {
status: [
{ required: true, message: t('approval.process.statusRequired'), trigger: 'change' }
{ required: true, message: '请选择审批状态', trigger: 'change' }
]
}
},
detailDialog: {
visible: false,
info: {}
info: {
id: 0,
process_name: '',
applicant_id: 0,
application_time: '',
current_approver_id: 0,
approval_status: '',
approval_time: '',
remarks: '',
participants: [] as Participant[] //
}
}
})
@ -394,11 +420,11 @@ function handleTabChange() {
async function getConfigOptions() {
try {
const res = await getConfigList({ status: 1 })
state.configOptions = res.data.list.map((item: any) => {
state.configOptions = (res.data.list || []).map((item: any) => {
return {
label: item.config_name,
value: item.id
}
label: item.config_name || '',
value: item.id || 0
} as ConfigOption
})
} catch (error) {
console.error(error)
@ -425,7 +451,7 @@ async function handleCreateSubmit() {
state.createDialog.loading = true
try {
await createProcess(state.createDialog.form)
ElMessage.success(t('approval.process.createSuccess'))
ElMessage.success('创建成功')
state.createDialog.visible = false
getList()
} catch (error) {
@ -460,7 +486,7 @@ async function handleApproveSubmit() {
status: state.approveDialog.form.status,
remarks: state.approveDialog.form.remarks
})
ElMessage.success(t('approval.process.approveSuccess'))
ElMessage.success('审批成功')
state.approveDialog.visible = false
getList()
} catch (error) {
@ -473,15 +499,15 @@ async function handleApproveSubmit() {
//
function handleCancel(row: any) {
ElMessageBox.confirm(t('approval.process.confirmCancel'), t('common.warning'), {
confirmButtonText: t('common.confirm'),
cancelButtonText: t('common.cancel'),
ElMessageBox.confirm('确认取消审批?', '警告', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning'
})
.then(async () => {
try {
await cancelProcess({ process_id: row.id })
ElMessage.success(t('approval.process.cancelSuccess'))
ElMessage.success('取消成功')
getList()
} catch (error) {
console.error(error)
@ -514,9 +540,9 @@ function getStatusType(status: string) {
//
function getStatusText(status: string) {
const map: Record<string, string> = {
pending: t('approval.process.pending'),
approved: t('approval.process.approved'),
rejected: t('approval.process.rejected')
pending: '待审批',
approved: '已审批',
rejected: '已拒绝'
}
return map[status] || status
}

37
admin/src/utils/request.ts

@ -8,7 +8,6 @@ import type {
import { getToken, isUrl } from './common'
import { ElMessage } from 'element-plus'
import type { MessageParams } from 'element-plus'
import { t } from '@/lang'
import useUserStore from '@/stores/modules/user'
import storage from '@/utils/storage'
@ -172,13 +171,13 @@ class Request {
const errStatus = err.response.status
switch (errStatus) {
case 400:
errMessage = t('axios.400')
errMessage = '请求错误'
break
case 401:
errMessage = t('axios.401')
errMessage = '未授权,请登录'
break
case 403:
errMessage = t('axios.403')
errMessage = '拒绝访问'
break
case 404:
let baseURL = '';
@ -191,38 +190,38 @@ class Request {
} catch (e) {
baseURL = location.origin;
}
errMessage = baseURL + t('axios.baseUrlError')
errMessage = baseURL + '请求地址出错'
break
case 405:
errMessage = t('axios.405')
errMessage = '请求方法未允许'
break
case 408:
errMessage = t('axios.408')
errMessage = '请求超时'
break
case 409:
errMessage = t('axios.409')
errMessage = '资源冲突'
break
case 500:
errMessage = t('axios.500')
errMessage = '服务器内部错误'
break
case 501:
errMessage = t('axios.501')
errMessage = '服务未实现'
break
case 502:
errMessage = t('axios.502')
errMessage = '网关错误'
break
case 503:
errMessage = t('axios.503')
errMessage = '服务不可用'
break
case 504:
errMessage = t('axios.504')
errMessage = '网关超时'
break
case 505:
errMessage = t('axios.505')
errMessage = 'HTTP版本不受支持'
break
}
}
err.message.includes('timeout') && (errMessage = t('axios.timeout'))
err.message.includes('timeout') && (errMessage = '请求超时')
if (err.code == 'ERR_NETWORK') {
let baseURL = '';
try {
@ -234,7 +233,7 @@ class Request {
} catch (e) {
baseURL = location.origin;
}
errMessage = baseURL + t('axios.baseUrlError')
errMessage = baseURL + '请求地址出错'
}
errMessage &&
this.showElMessage({
@ -256,7 +255,11 @@ class Request {
private messageCache = new Map()
private showElMessage(options: MessageParams) {
const cacheKey = options.message
// 处理类型问题,安全地获取消息
const message = typeof options === 'string' ? options : (options as any).message;
if (!message) return;
const cacheKey = message;
const cachedMessage = this.messageCache.get(cacheKey)
if (!cachedMessage || Date.now() - cachedMessage.timestamp > 5000) {

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

@ -50,14 +50,11 @@ class PersonCourseSchedule extends BaseAdminController
*/
public function add(){
$data = $this->request->params([
["person_id",0],
["person_type",""],
["resources_id",[]],
["schedule_id",0],
["course_date","2025-05-29 17:03:27"],
["time_slot",""],
["student_ids",[]],
]);
$this->validate($data, 'app\validate\person_course_schedule\PersonCourseSchedule.add');
$id = (new PersonCourseScheduleService())->add($data);
return success('ADD_SUCCESS', ['id' => $id]);
}
@ -69,14 +66,11 @@ class PersonCourseSchedule extends BaseAdminController
*/
public function edit(int $id){
$data = $this->request->params([
["person_id",0],
["person_type",""],
["schedule_id",0],
["course_date","2025-05-29 17:03:27"],
["time_slot",""],
["resources_id",[]],
["schedule_id",0],
["student_ids",[]],
]);
$this->validate($data, 'app\validate\person_course_schedule\PersonCourseSchedule.edit');
(new PersonCourseScheduleService())->edit($id, $data);
return success('EDIT_SUCCESS');
}

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

@ -58,7 +58,7 @@ class Process extends BaseAdminController
$where[] = ['approval_status', '=', 'pending'];
}
$data = $this->service->getList($where, $page, $limit);
$data = $this->service->getList($where, (int)$page, (int)$limit);
return success($data);
}
@ -73,7 +73,7 @@ class Process extends BaseAdminController
return fail('参数错误');
}
$info = $this->service->getInfo($id);
$info = $this->service->getInfo((int)$id);
if (empty($info)) {
return fail('审批流程不存在');
}
@ -99,7 +99,7 @@ class Process extends BaseAdminController
}
// 设置申请人ID
$data['applicant_id'] = $this->user_info['uid'];
$data['applicant_id'] = $this->request->uid();
try {
$process_id = $this->service->create($data, $config_id);
@ -127,7 +127,7 @@ class Process extends BaseAdminController
}
try {
$result = $this->service->approve($process_id, $this->user_info['uid'], $status, $remarks);
$result = $this->service->approve((int)$process_id, $this->request->uid(), $status, $remarks);
return success($result);
} catch (\Exception $e) {
return fail($e->getMessage());
@ -146,7 +146,7 @@ class Process extends BaseAdminController
}
try {
$result = $this->service->cancel($process_id, $this->user_info['uid']);
$result = $this->service->cancel($process_id, $this->request->uid());
return success($result);
} catch (\Exception $e) {
return fail($e->getMessage());

32
niucloud/app/api/controller/apiController/Common.php

@ -61,4 +61,36 @@ class Common extends BaseApiService
return success([]);
}
//获取配置信息
public function getConfig(Request $request){
$config_key = $request->param('config_key', '');//配置项关键字
if (empty($config_key)) {
return fail('缺少必填参数');
}
$where = [
'config_key'=>$config_key
];
$res = (new CommonService())->getConfig($where);
if (!$res){
return fail('配置信息有误');
}
return success($res);
}
public function getMiniWxOpenId(Request $request){
$code = $request->param('code', '');//微信code
if (empty($code)) {
return fail('缺少必填参数');
}
$res = (new CommonService())->getMiniWxOpenId($code);
if (!$res['code']){
return fail($res['msg']);
}
return success($res['data']);
}
}

4
niucloud/app/api/route/route.php

@ -178,6 +178,10 @@ Route::group(function () {
Route::get('common/getDictionary', 'apiController.Common/getDictionary');
//忘记密码-通过短信验证码进行密码重置(学生/员工通用)
Route::post('common/forgetPassword', 'apiController.Common/forgetPassword');
//获取配置项
Route::get('common/getConfig', 'apiController.Common/getConfig');
//获取微信小程序openid
Route::post('common/getMiniWxOpenId', 'apiController.Common/getMiniWxOpenId');

78
niucloud/app/model/person_course_schedule/PersonCourseSchedule.php

@ -11,6 +11,8 @@
namespace app\model\person_course_schedule;
use app\model\personnel\Personnel;
use app\model\student\Student;
use core\base\BaseModel;
use think\model\relation\HasMany;
use think\model\relation\HasOne;
@ -40,7 +42,19 @@ class PersonCourseSchedule extends BaseModel
/**
* 搜索器:人员与课程安排关系资源
* 搜索器:人员与课程安排关系关系编号
* @param $value
* @param $data
*/
public function searchIdAttr($query, $value, $data)
{
if ($value) {
$query->where("id", $value);
}
}
/**
* 搜索器:人员与课程安排关系人员或资源ID
* @param $value
* @param $data
*/
@ -51,13 +65,71 @@ class PersonCourseSchedule extends BaseModel
}
}
/**
* 搜索器:人员与课程安排关系人员类型: student-正式学员, customer_resource-客户资源
* @param $value
* @param $data
*/
public function searchPersonTypeAttr($query, $value, $data)
{
if ($value) {
$query->where("person_type", $value);
}
}
/**
* 搜索器:人员与课程安排关系课程安排ID
* @param $value
* @param $data
*/
public function searchScheduleIdAttr($query, $value, $data)
{
if ($value) {
$query->where("schedule_id", $value);
}
}
/**
* 搜索器:人员与课程安排关系上课日期
* @param $value
* @param $data
*/
public function searchCourseDateAttr($query, $value, $data)
{
if ($value) {
$query->where("course_date", $value);
}
}
/**
* 搜索器:人员与课程安排关系上课时段
* @param $value
* @param $data
*/
public function searchTimeSlotAttr($query, $value, $data)
{
if ($value) {
$query->where("time_slot", $value);
}
}
public function person()
{
return $this->hasOne(Personnel::class, 'id', 'person_id');
}
public function student()
{
return $this->hasOne(Student::class, 'id', 'student_id');
}
public function customerResources(){
return $this->hasOne(CustomerResources::class, 'id', 'person_id')->joinType('left')->withField('name,id')->bind(['person_id_name'=>'name']);
public function resources()
{
return $this->hasOne(CustomerResources::class, 'id', 'resources_id');
}
public function customerResources(){
return $this->hasOne(CustomerResources::class, 'id', 'person_id')->joinType('left')->withField('name,id')->bind(['person_id_name'=>'name']);
}
}

76
niucloud/app/service/api/apiService/CommonService.php

@ -13,6 +13,7 @@ namespace app\service\api\apiService;
use app\model\dict\Dict;
use app\model\member\Member;
use app\model\sys\SysConfig;
use app\model\sys\SysUser;
use core\base\BaseApiService;
@ -165,5 +166,80 @@ class CommonService extends BaseApiService
return $distance <= $radius;//false=超出打卡范围
}
/**
* 获取配置文件
* @param array $where
*/
public function getConfig(array $where){
$model = (new SysConfig());
if(!empty($where['config_key'])){
$model = $model->where('config_key',$where['config_key']);
}
$data = $model->find();//员工信息
if($data){
$data = $data->toArray();
}else{
$data = [];
}
return $data;
}
//获取微信小程序openid
public function getMiniWxOpenId(string $code)
{
// 微信小程序登录接口地址
$url = 'https://api.weixin.qq.com/sns/jscode2session';
// 从配置中获取appid和secret
$config = (new SysConfig())->where('config_key', 'weapp')->find();//微信小程序配置信息
if (!$config) {
return [
'code' => 0,
'msg' => '未找到微信小程序配置信息',
'data' => []
];
}
$configData = $config->toArray();
$params = [
'appid' => $configData['value']['app_id'] ?? '',
'secret' => $configData['value']['app_secret'] ?? '',
'js_code' => $code,
'grant_type' => 'authorization_code'
];
// 发起请求
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url . '?' . http_build_query($params));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
// 处理响应
$result = json_decode($response, true);
if (isset($result['errcode']) && $result['errcode'] != 0) {
return [
'code' => 0,
'msg' => '获取 openid 失败: ' . $result['errmsg'],
'data' => []
];
}
return [
'code' => 1,
'msg' => '操作成功',
'data' => [
'openid' => $result['openid'] ?? '',
'session_key' => $result['session_key'] ?? ''
]
];
}
}

2
niucloud/app/service/school_approval/SchoolApprovalProcessService.php

@ -81,7 +81,7 @@ class SchoolApprovalProcessService
$process = [
'process_name' => $data['process_name'],
'applicant_id' => $data['applicant_id'],
'application_time' => time(),
'application_time' => date("Y-m-d H:i:s"),
'current_approver_id' => 0, // 初始时为0,后面会更新
'approval_status' => SchoolApprovalProcess::STATUS_PENDING,
'remarks' => $data['remarks'] ?? ''

BIN
niucloud/public/uniapp_src/static/images/common/black_arrow_right.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 349 B

BIN
niucloud/public/uniapp_src/static/images/common/closex.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 801 B

BIN
niucloud/public/uniapp_src/static/images/common/clousex-big.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 642 B

BIN
niucloud/public/uniapp_src/static/images/common/common_icon_jump_gold.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 475 B

BIN
niucloud/public/uniapp_src/static/images/common/delete.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
niucloud/public/uniapp_src/static/images/common/edit.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
niucloud/public/uniapp_src/static/images/common/fa_song.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 B

BIN
niucloud/public/uniapp_src/static/images/common/gift_icon_close_new.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

BIN
niucloud/public/uniapp_src/static/images/common/gouxuankuang.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
niucloud/public/uniapp_src/static/images/common/gray_arrow_down.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 298 B

BIN
niucloud/public/uniapp_src/static/images/common/icon-close.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 B

BIN
niucloud/public/uniapp_src/static/images/common/icon-drop-down.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 652 B

BIN
niucloud/public/uniapp_src/static/images/common/icon_about.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
niucloud/public/uniapp_src/static/images/common/icon_black_back.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
niucloud/public/uniapp_src/static/images/common/icon_jump_black3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 422 B

BIN
niucloud/public/uniapp_src/static/images/common/image-delete.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 561 B

BIN
niucloud/public/uniapp_src/static/images/common/jia_hao.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 817 B

BIN
niucloud/public/uniapp_src/static/images/common/jump-r-arrow.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 370 B

BIN
niucloud/public/uniapp_src/static/images/common/menu_icon_empty.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 570 B

BIN
niucloud/public/uniapp_src/static/images/common/more-arrow-right.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 B

BIN
niucloud/public/uniapp_src/static/images/common/round-black-selected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
niucloud/public/uniapp_src/static/images/common/round_add_disabled.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 639 B

BIN
niucloud/public/uniapp_src/static/images/common/round_add_normal.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 639 B

BIN
niucloud/public/uniapp_src/static/images/common/round_minus.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 860 B

BIN
niucloud/public/uniapp_src/static/images/common/search-icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
niucloud/public/uniapp_src/static/images/common/star_normal.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
niucloud/public/uniapp_src/static/images/common/xi_tong_xiao_xi.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 729 B

BIN
niucloud/public/uniapp_src/static/images/common/yong_hu.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 625 B

BIN
niucloud/public/uniapp_src/static/images/home/chaungjian.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 B

BIN
niucloud/public/uniapp_src/static/images/home/tixing.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1003 B

BIN
niucloud/public/uniapp_src/static/images/home/wang.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
niucloud/public/uniapp_src/static/images/home/yong.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
niucloud/public/uniapp_src/static/images/index/addto.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

BIN
niucloud/public/uniapp_src/static/images/index/check_mark.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
niucloud/public/uniapp_src/static/images/index/danlan.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

BIN
niucloud/public/uniapp_src/static/images/index/danlv.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

BIN
niucloud/public/uniapp_src/static/images/index/dian.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 317 B

BIN
niucloud/public/uniapp_src/static/images/index/hong.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

BIN
niucloud/public/uniapp_src/static/images/index/huang.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

BIN
niucloud/public/uniapp_src/static/images/index/icon_shopping_bag.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 930 B

BIN
niucloud/public/uniapp_src/static/images/index/img.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

BIN
niucloud/public/uniapp_src/static/images/index/intention1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

BIN
niucloud/public/uniapp_src/static/images/index/intention2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

BIN
niucloud/public/uniapp_src/static/images/index/intention3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

BIN
niucloud/public/uniapp_src/static/images/index/lan.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

BIN
niucloud/public/uniapp_src/static/images/index/lv.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

BIN
niucloud/public/uniapp_src/static/images/index/lvs.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

BIN
niucloud/public/uniapp_src/static/images/index/manjian.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
niucloud/public/uniapp_src/static/images/index/me_icon_notification.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
niucloud/public/uniapp_src/static/images/index/menu_btn_close.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 390 B

BIN
niucloud/public/uniapp_src/static/images/index/menu_icon_popup_triangle_normal.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 563 B

BIN
niucloud/public/uniapp_src/static/images/index/menupopup_btn_share_normal.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
niucloud/public/uniapp_src/static/images/index/menupopup_btn_share_quanzi.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
niucloud/public/uniapp_src/static/images/index/menupopup_btn_share_wechat.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
niucloud/public/uniapp_src/static/images/index/message.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

BIN
niucloud/public/uniapp_src/static/images/index/myk.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

BIN
niucloud/public/uniapp_src/static/images/index/phone.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

BIN
niucloud/public/uniapp_src/static/images/index/rexiao.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
niucloud/public/uniapp_src/static/images/index/round-cancel.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 B

BIN
niucloud/public/uniapp_src/static/images/index/round.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

BIN
niucloud/public/uniapp_src/static/images/index/round_close_btn.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
niucloud/public/uniapp_src/static/images/index/score.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

BIN
niucloud/public/uniapp_src/static/images/index/score1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
niucloud/public/uniapp_src/static/images/index/setup.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 546 B

BIN
niucloud/public/uniapp_src/static/images/index/shadow_yellow_star.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 595 B

BIN
niucloud/public/uniapp_src/static/images/index/shenlan.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

BIN
niucloud/public/uniapp_src/static/images/index/star.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

BIN
niucloud/public/uniapp_src/static/images/index/task.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

BIN
niucloud/public/uniapp_src/static/images/index/tuijian.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
niucloud/public/uniapp_src/static/images/index/work_details.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
niucloud/public/uniapp_src/static/images/index/writing.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

BIN
niucloud/public/uniapp_src/static/images/index/xinpin.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

BIN
niucloud/public/uniapp_src/static/images/index/yellow_star.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 647 B

BIN
niucloud/public/uniapp_src/static/images/index/zan_wu.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 872 B

BIN
niucloud/public/uniapp_src/static/images/login/login1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 631 B

BIN
niucloud/public/uniapp_src/static/images/login/login2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 347 B

BIN
niucloud/public/uniapp_src/static/images/login/wechat1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
niucloud/public/uniapp_src/static/images/mall/b3d3a98e3c7f450aaa32fbec6aecdfaf.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

BIN
niucloud/public/uniapp_src/static/images/mall/img_pointmall_star.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
niucloud/public/uniapp_src/static/images/mall/me_img_banner_mall.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
niucloud/public/uniapp_src/static/images/mall/me_pointmall_img_nogift.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
niucloud/public/uniapp_src/static/images/mall/store_brh_home_page_normal.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 B

BIN
niucloud/public/uniapp_src/static/images/mall/store_brh_service_normal.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 807 B

BIN
niucloud/public/uniapp_src/static/images/member/me_club_task_img_done.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
niucloud/public/uniapp_src/static/images/my/b3d3a98e3c7f450aaa32fbec6aecdfaf.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
niucloud/public/uniapp_src/static/images/my/coupons-empty.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
niucloud/public/uniapp_src/static/images/my/icon_arrow.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 296 B

BIN
niucloud/public/uniapp_src/static/images/my/icon_attention.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 918 B

BIN
niucloud/public/uniapp_src/static/images/my/icon_giftcard.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save