Browse Source

refactor(zhjw):重构智慧教务 API 和视图

- 重命名和更新了 contracts、orders、students 模块的 API 函数
- 更新了相关视图组件中的 API调用
- 删除了未使用的 users 模块
- 优化了下拉列表的显示字段
master
liutong 1 year ago
parent
commit
058bc5ed13
  1. 32
      admin/components.d.ts
  2. 8
      admin/src/addon/zhjw/api/contracts.ts
  3. 20
      admin/src/addon/zhjw/api/orders.ts
  4. 6
      admin/src/addon/zhjw/api/students.ts
  5. 62
      admin/src/addon/zhjw/api/users.ts
  6. 4
      admin/src/addon/zhjw/lang/zh-cn/orders.orders.json
  7. 6
      admin/src/addon/zhjw/lang/zh-cn/orders.orders_edit.json
  8. 88
      admin/src/addon/zhjw/lang/zh-cn/users.users.json
  9. 87
      admin/src/addon/zhjw/lang/zh-cn/users.users_edit.json
  10. 8
      admin/src/addon/zhjw/views/contracts/contracts.vue
  11. 8
      admin/src/addon/zhjw/views/contracts/contracts_edit.vue
  12. 16
      admin/src/addon/zhjw/views/orders/orders.vue
  13. 8
      admin/src/addon/zhjw/views/orders/orders_edit.vue
  14. 4
      admin/src/addon/zhjw/views/students/students.vue
  15. 4
      admin/src/addon/zhjw/views/students/students_edit.vue
  16. 615
      admin/src/addon/zhjw/views/users/components/users-edit.vue
  17. 481
      admin/src/addon/zhjw/views/users/users.vue
  18. 612
      admin/src/addon/zhjw/views/users/users_edit.vue
  19. 8
      niucloud/addon/zhjw/admin/api/contracts.ts
  20. 20
      niucloud/addon/zhjw/admin/api/orders.ts
  21. 6
      niucloud/addon/zhjw/admin/api/students.ts
  22. 62
      niucloud/addon/zhjw/admin/api/users.ts
  23. 4
      niucloud/addon/zhjw/admin/lang/zh-cn/orders.orders.json
  24. 6
      niucloud/addon/zhjw/admin/lang/zh-cn/orders.orders_edit.json
  25. 88
      niucloud/addon/zhjw/admin/lang/zh-cn/users.users.json
  26. 87
      niucloud/addon/zhjw/admin/lang/zh-cn/users.users_edit.json
  27. 8
      niucloud/addon/zhjw/admin/views/contracts/contracts.vue
  28. 8
      niucloud/addon/zhjw/admin/views/contracts/contracts_edit.vue
  29. 16
      niucloud/addon/zhjw/admin/views/orders/orders.vue
  30. 8
      niucloud/addon/zhjw/admin/views/orders/orders_edit.vue
  31. 4
      niucloud/addon/zhjw/admin/views/students/students.vue
  32. 4
      niucloud/addon/zhjw/admin/views/students/students_edit.vue
  33. 615
      niucloud/addon/zhjw/admin/views/users/components/users-edit.vue
  34. 481
      niucloud/addon/zhjw/admin/views/users/users.vue
  35. 612
      niucloud/addon/zhjw/admin/views/users/users_edit.vue
  36. 12
      niucloud/addon/zhjw/app/adminapi/controller/contracts/Contracts.php
  37. 20
      niucloud/addon/zhjw/app/adminapi/controller/orders/Orders.php
  38. 4
      niucloud/addon/zhjw/app/adminapi/controller/students/Students.php
  39. 205
      niucloud/addon/zhjw/app/adminapi/controller/users/Users.php
  40. 71
      niucloud/addon/zhjw/app/adminapi/route/route.php
  41. 6
      niucloud/addon/zhjw/app/model/contracts/Contracts.php
  42. 24
      niucloud/addon/zhjw/app/model/orders/Orders.php
  43. 6
      niucloud/addon/zhjw/app/model/students/Students.php
  44. 520
      niucloud/addon/zhjw/app/model/users/Users.php
  45. 12
      niucloud/addon/zhjw/app/service/admin/contracts/ContractsService.php
  46. 24
      niucloud/addon/zhjw/app/service/admin/orders/OrdersService.php
  47. 12
      niucloud/addon/zhjw/app/service/admin/students/StudentsService.php
  48. 104
      niucloud/addon/zhjw/app/service/admin/users/UsersService.php
  49. 2
      niucloud/addon/zhjw/app/validate/orders/Orders.php
  50. 49
      niucloud/addon/zhjw/app/validate/users/Users.php

32
admin/components.d.ts

@ -10,23 +10,33 @@ declare module '@vue/runtime-core' {
Attachment: typeof import('./src/components/upload-attachment/attachment.vue')['default']
DiyLink: typeof import('./src/components/diy-link/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']
ElAvatar: typeof import('element-plus/es')['ElAvatar']
ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb']
ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem']
ElButton: typeof import('element-plus/es')['ElButton']
ElCard: typeof import('element-plus/es')['ElCard']
ElCarousel: typeof import('element-plus/es')['ElCarousel']
ElCarouselItem: typeof import('element-plus/es')['ElCarouselItem']
ElCascader: typeof import('element-plus/es')['ElCascader']
ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
ElCol: typeof import('element-plus/es')['ElCol']
ElCollapse: typeof import('element-plus/es')['ElCollapse']
ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem']
ElColorPicker: typeof import('element-plus/es')['ElColorPicker']
ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
ElContainer: typeof import('element-plus/es')['ElContainer']
ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
ElDescriptions: typeof import('element-plus/es')['ElDescriptions']
ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem']
ElDialog: typeof import('element-plus/es')['ElDialog']
ElDrawer: typeof import('element-plus/es')['ElDrawer']
ElDropdown: typeof import('element-plus/es')['ElDropdown']
ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']
ElEmpty: typeof import('element-plus/es')['ElEmpty']
ElForm: typeof import('element-plus/es')['ElForm']
ElFormItem: typeof import('element-plus/es')['ElFormItem']
ElHeader: typeof import('element-plus/es')['ElHeader']
@ -34,20 +44,42 @@ declare module '@vue/runtime-core' {
ElImage: typeof import('element-plus/es')['ElImage']
ElImageViewer: typeof import('element-plus/es')['ElImageViewer']
ElInput: typeof import('element-plus/es')['ElInput']
ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
ElLink: typeof import('element-plus/es')['ElLink']
ElMain: typeof import('element-plus/es')['ElMain']
ElMenu: typeof import('element-plus/es')['ElMenu']
ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
ElOption: typeof import('element-plus/es')['ElOption']
ElOptionGroup: typeof import('element-plus/es')['ElOptionGroup']
ElPageHeader: typeof import('element-plus/es')['ElPageHeader']
ElPagination: typeof import('element-plus/es')['ElPagination']
ElPopover: typeof import('element-plus/es')['ElPopover']
ElProgress: typeof import('element-plus/es')['ElProgress']
ElRadio: typeof import('element-plus/es')['ElRadio']
ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
ElRate: typeof import('element-plus/es')['ElRate']
ElResult: typeof import('element-plus/es')['ElResult']
ElRow: typeof import('element-plus/es')['ElRow']
ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
ElSelect: typeof import('element-plus/es')['ElSelect']
ElSlider: typeof import('element-plus/es')['ElSlider']
ElStatistic: typeof import('element-plus/es')['ElStatistic']
ElStep: typeof import('element-plus/es')['ElStep']
ElSteps: typeof import('element-plus/es')['ElSteps']
ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
ElSwitch: typeof import('element-plus/es')['ElSwitch']
ElTable: typeof import('element-plus/es')['ElTable']
ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
ElTabPane: typeof import('element-plus/es')['ElTabPane']
ElTabs: typeof import('element-plus/es')['ElTabs']
ElTag: typeof import('element-plus/es')['ElTag']
ElTimeline: typeof import('element-plus/es')['ElTimeline']
ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem']
ElTimePicker: typeof import('element-plus/es')['ElTimePicker']
ElTooltip: typeof import('element-plus/es')['ElTooltip']
ElTree: typeof import('element-plus/es')['ElTree']
ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']
ElUpload: typeof import('element-plus/es')['ElUpload']
ExportSure: typeof import('./src/components/export-sure/index.vue')['default']
HeatMap: typeof import('./src/components/heat-map/index.vue')['default']

8
admin/src/addon/zhjw/api/contracts.ts

@ -8,6 +8,10 @@ import request from '@/utils/request'
// USER_CODE_BEGIN -- zhjw_contracts
/**
*
@ -55,8 +59,8 @@ export function deleteContracts(id: number) {
return request.delete(`zhjw/contracts/${id}`, { showErrorMessage: true, showSuccessMessage: true })
}
export function getWithUsersList(params: Record<string,any>){
return request.get('zhjw/users_all', {params})
export function getWithStudentsList(params: Record<string,any>){
return request.get('zhjw/students_all', {params})
}
// USER_CODE_END -- zhjw_contracts

20
admin/src/addon/zhjw/api/orders.ts

@ -1,8 +1,12 @@
import request from '@/utils/request'
// USER_CODE_BEGIN -- zhjw_orders
/**
* -
*
* @param params
* @returns
*/
@ -11,8 +15,8 @@ export function getOrdersList(params: Record<string, any>) {
}
/**
* -
* @param id -id
*
* @param id id
* @returns
*/
export function getOrdersInfo(id: number) {
@ -20,7 +24,7 @@ export function getOrdersInfo(id: number) {
}
/**
* -
*
* @param params
* @returns
*/
@ -29,7 +33,7 @@ export function addOrders(params: Record<string, any>) {
}
/**
* -
*
* @param id
* @param params
* @returns
@ -39,7 +43,7 @@ export function editOrders(params: Record<string, any>) {
}
/**
* -
*
* @param id
* @returns
*/
@ -47,8 +51,8 @@ export function deleteOrders(id: number) {
return request.delete(`zhjw/orders/${id}`, { showErrorMessage: true, showSuccessMessage: true })
}
export function getWithMemberList(params: Record<string,any>){
return request.get('zhjw/member_all', {params})
export function getWithStudentsList(params: Record<string,any>){
return request.get('zhjw/students_all', {params})
}export function getWithContractsList(params: Record<string,any>){
return request.get('zhjw/contracts_all', {params})
}

6
admin/src/addon/zhjw/api/students.ts

@ -6,6 +6,8 @@ import request from '@/utils/request'
// USER_CODE_BEGIN -- zhjw_students
/**
*
@ -53,8 +55,8 @@ export function deleteStudents(id: number) {
return request.delete(`zhjw/students/${id}`, { showErrorMessage: true, showSuccessMessage: true })
}
export function getWithUsersList(params: Record<string,any>){
return request.get('zhjw/users_all', {params})
export function getWithMemberList(params: Record<string,any>){
return request.get('zhjw/member_all', {params})
}
// USER_CODE_END -- zhjw_students

62
admin/src/addon/zhjw/api/users.ts

@ -1,62 +0,0 @@
import request from '@/utils/request'
// USER_CODE_BEGIN -- zhjw_users
/**
*
* @param params
* @returns
*/
export function getUsersList(params: Record<string, any>) {
return request.get(`zhjw/users`, {params})
}
/**
*
* @param member_id member_id
* @returns
*/
export function getUsersInfo(member_id: number) {
return request.get(`zhjw/users/${member_id}`);
}
/**
*
* @param params
* @returns
*/
export function addUsers(params: Record<string, any>) {
return request.post('zhjw/users', params, { showErrorMessage: true, showSuccessMessage: true })
}
/**
*
* @param member_id
* @param params
* @returns
*/
export function editUsers(params: Record<string, any>) {
return request.put(`zhjw/users/${params.member_id}`, params, { showErrorMessage: true, showSuccessMessage: true })
}
/**
*
* @param member_id
* @returns
*/
export function deleteUsers(member_id: number) {
return request.delete(`zhjw/users/${member_id}`, { showErrorMessage: true, showSuccessMessage: true })
}
export function getWithUsersList(params: Record<string,any>){
return request.get('zhjw/users_all', {params})
}
// USER_CODE_END -- zhjw_users

4
admin/src/addon/zhjw/lang/zh-cn/orders.orders.json

@ -18,8 +18,8 @@
"createTimePlaceholder":"请输入添加时间",
"updateTime":"更新时间",
"isDeleted":"是否删除",
"addOrders":"添加智慧教务-订单管理",
"updateOrders":"编辑智慧教务-订单管理",
"addOrders":"添加订单管理",
"updateOrders":"编辑订单管理",
"ordersDeleteTips":"确定要删除该数据吗?",
"startDate":"请选择开始时间",
"endDate":"请选择结束时间"

6
admin/src/addon/zhjw/lang/zh-cn/orders.orders_edit.json

@ -13,7 +13,7 @@
"payTypePlaceholder":"请选择支付类型",
"paymentStatusPlaceholder":"请选择支付状态",
"paymentTimePlaceholder":"请选择支付时间",
"addOrders":"添加智慧教务-订单管理",
"updateOrders":"编辑智慧教务-订单管理",
"ordersDeleteTips":"确定要删除该智慧教务-订单管理吗?"
"addOrders":"添加订单管理",
"updateOrders":"编辑订单管理",
"ordersDeleteTips":"确定要删除该订单管理吗?"
}

88
admin/src/addon/zhjw/lang/zh-cn/users.users.json

@ -1,88 +0,0 @@
{
"memberId":"序号",
"memberNo":"会员编码",
"pid":"推广会员",
"username":"会员用户名",
"usernamePlaceholder":"请输入会员用户名",
"mobile":"手机号",
"mobilePlaceholder":"请输入手机号",
"password":"会员密码",
"nickname":"会员昵称",
"nicknamePlaceholder":"请输入会员昵称",
"headimg":"会员头像",
"memberLevel":"会员等级",
"memberLevelPlaceholder":"请输入会员等级",
"memberLabel":"会员标签",
"memberLabelPlaceholder":"请输入会员标签",
"wxOpenid":"微信用户openid",
"wxOpenidPlaceholder":"请输入微信用户openid",
"weappOpenid":"微信小程序openid",
"weappOpenidPlaceholder":"请输入微信小程序openid",
"wxUnionid":"微信unionid",
"wxUnionidPlaceholder":"请输入微信unionid",
"aliOpenid":"支付宝账户id",
"aliOpenidPlaceholder":"请输入支付宝账户id",
"douyinOpenid":"抖音小程序openid",
"douyinOpenidPlaceholder":"请输入抖音小程序openid",
"registerChannel":"注册来源",
"registerChannelPlaceholder":"请输入注册来源",
"registerType":"注册方式",
"registerTypePlaceholder":"请输入注册方式",
"loginIp":"当前登录ip",
"loginIpPlaceholder":"请输入当前登录ip",
"loginType":"当前登录的操作终端类型",
"loginTypePlaceholder":"请输入当前登录的操作终端类型",
"loginChannel":"登录渠道",
"loginChannelPlaceholder":"请输入登录渠道",
"loginCount":"登录次数",
"loginCountPlaceholder":"请输入登录次数",
"loginTime":"当前登录时间",
"loginTimePlaceholder":"请输入当前登录时间",
"lastVisitTime":"最后访问时间",
"lastVisitTimePlaceholder":"请输入最后访问时间",
"lastConsumTime":"最后消费时间",
"lastConsumTimePlaceholder":"请输入最后消费时间",
"sex":"性别",
"sexPlaceholder":"请输入性别",
"status":"用户状态",
"statusPlaceholder":"请输入用户状态",
"birthday":"出生日期",
"birthdayPlaceholder":"请输入出生日期",
"point":"可用积分",
"pointPlaceholder":"请输入可用积分",
"pointGet":"累计获取积分",
"pointGetPlaceholder":"请输入累计获取积分",
"balance":"可用余额",
"balancePlaceholder":"请输入可用余额",
"balanceGet":"累计获取余额",
"balanceGetPlaceholder":"请输入累计获取余额",
"money":"可用余额(可提现)",
"moneyPlaceholder":"请输入可用余额(可提现)",
"moneyGet":"累计获取余额(可提现)",
"moneyGetPlaceholder":"请输入累计获取余额(可提现)",
"moneyCashOuting":"提现中余额(可提现)",
"moneyCashOutingPlaceholder":"请输入提现中余额(可提现)",
"growth":"成长值",
"growthPlaceholder":"请输入成长值",
"growthGet":"累计获得成长值",
"growthGetPlaceholder":"请输入累计获得成长值",
"commission":"当前佣金",
"commissionPlaceholder":"请输入当前佣金",
"commissionGet":"佣金获取",
"commissionGetPlaceholder":"请输入佣金获取",
"commissionCashOuting":"提现中佣金",
"commissionCashOutingPlaceholder":"请输入提现中佣金",
"isMember":"是否是会员",
"isMemberPlaceholder":"请输入是否是会员",
"memberTime":"成为会员时间",
"memberTimePlaceholder":"请输入成为会员时间",
"address":"详细地址",
"createTime":"注册时间",
"createTimePlaceholder":"请输入注册时间",
"updateTime":"修改时间",
"addUsers":"添加用户管理",
"updateUsers":"编辑用户管理",
"usersDeleteTips":"确定要删除该数据吗?",
"startDate":"请选择开始时间",
"endDate":"请选择结束时间"
}

87
admin/src/addon/zhjw/lang/zh-cn/users.users_edit.json

@ -1,87 +0,0 @@
{
"memberNo":"会员编码",
"pid":"推广会员",
"username":"会员用户名",
"mobile":"手机号",
"password":"会员密码",
"nickname":"会员昵称",
"headimg":"会员头像",
"memberLevel":"会员等级",
"memberLabel":"会员标签",
"wxOpenid":"微信用户openid",
"weappOpenid":"微信小程序openid",
"wxUnionid":"微信unionid",
"aliOpenid":"支付宝账户id",
"douyinOpenid":"抖音小程序openid",
"registerChannel":"注册来源",
"registerType":"注册方式",
"loginIp":"当前登录ip",
"loginType":"当前登录的操作终端类型",
"loginChannel":"登录渠道",
"loginCount":"登录次数",
"loginTime":"当前登录时间",
"lastVisitTime":"最后访问时间",
"lastConsumTime":"最后消费时间",
"sex":"性别",
"status":"用户状态",
"birthday":"出生日期",
"point":"可用积分",
"pointGet":"累计获取积分",
"balance":"可用余额",
"balanceGet":"累计获取余额",
"money":"可用余额(可提现)",
"moneyGet":"累计获取余额(可提现)",
"moneyCashOuting":"提现中余额(可提现)",
"growth":"成长值",
"growthGet":"累计获得成长值",
"commission":"当前佣金",
"commissionGet":"佣金获取",
"commissionCashOuting":"提现中佣金",
"isMember":"是否是会员",
"memberTime":"成为会员时间",
"address":"详细地址",
"memberNoPlaceholder":"请输入会员编码",
"pidPlaceholder":"请选择推广会员",
"usernamePlaceholder":"请输入会员用户名",
"mobilePlaceholder":"请输入手机号",
"passwordPlaceholder":"请输入会员密码",
"nicknamePlaceholder":"请输入会员昵称",
"headimgPlaceholder":"请上传会员头像",
"memberLevelPlaceholder":"请输入会员等级",
"memberLabelPlaceholder":"请输入会员标签",
"wxOpenidPlaceholder":"请输入微信用户openid",
"weappOpenidPlaceholder":"请输入微信小程序openid",
"wxUnionidPlaceholder":"请输入微信unionid",
"aliOpenidPlaceholder":"请输入支付宝账户id",
"douyinOpenidPlaceholder":"请输入抖音小程序openid",
"registerChannelPlaceholder":"请输入注册来源",
"registerTypePlaceholder":"请输入注册方式",
"loginIpPlaceholder":"请输入当前登录ip",
"loginTypePlaceholder":"请输入当前登录的操作终端类型",
"loginChannelPlaceholder":"请输入登录渠道",
"loginCountPlaceholder":"请输入登录次数",
"loginTimePlaceholder":"请输入当前登录时间",
"lastVisitTimePlaceholder":"请输入最后访问时间",
"lastConsumTimePlaceholder":"请输入最后消费时间",
"sexPlaceholder":"请选择性别",
"statusPlaceholder":"请选择用户状态",
"birthdayPlaceholder":"请选择出生日期",
"pointPlaceholder":"请输入可用积分",
"pointGetPlaceholder":"请输入累计获取积分",
"balancePlaceholder":"请输入可用余额",
"balanceGetPlaceholder":"请输入累计获取余额",
"moneyPlaceholder":"请输入可用余额(可提现)",
"moneyGetPlaceholder":"请输入累计获取余额(可提现)",
"moneyCashOutingPlaceholder":"请输入提现中余额(可提现)",
"growthPlaceholder":"请输入成长值",
"growthGetPlaceholder":"请输入累计获得成长值",
"commissionPlaceholder":"请输入当前佣金",
"commissionGetPlaceholder":"请输入佣金获取",
"commissionCashOutingPlaceholder":"请输入提现中佣金",
"isMemberPlaceholder":"请选择是否是会员",
"memberTimePlaceholder":"请选择成为会员时间",
"addressPlaceholder":"请输入详细地址",
"addUsers":"添加用户管理",
"updateUsers":"编辑用户管理",
"usersDeleteTips":"确定要删除该用户管理吗?"
}

8
admin/src/addon/zhjw/views/contracts/contracts.vue

@ -17,8 +17,8 @@
<el-option
v-for="(item, index) in studentIdList"
:key="index"
:label="item['mobile']"
:value="item['member_id']"
:label="item['name']"
:value="item['id']"
/>
</el-select>
</el-form-item>
@ -120,7 +120,7 @@
import { reactive, ref, watch } from 'vue'
import { t } from '@/lang'
import { useDictionary } from '@/app/api/dict'
import { getContractsList, deleteContracts, getWithUsersList } from '@/addon/zhjw/api/contracts'
import { getContractsList, deleteContracts, getWithStudentsList } from '@/addon/zhjw/api/contracts'
import { img } from '@/utils/common'
import { ElMessageBox,FormInstance } from 'element-plus'
import { useRouter } from 'vue-router'
@ -220,7 +220,7 @@ const deleteEvent = (id: number) => {
const studentIdList = ref([])
const setStudentIdList = async () => {
studentIdList.value = await (await getWithUsersList({})).data
studentIdList.value = await (await getWithStudentsList({})).data
}
setStudentIdList()

8
admin/src/addon/zhjw/views/contracts/contracts_edit.vue

@ -16,8 +16,8 @@
<el-option
v-for="(item, index) in studentIdList"
:key="index"
:label="item['mobile']"
:value="item['member_id']"
:label="item['name']"
:value="item['id']"
/>
</el-select>
</el-form-item>
@ -81,7 +81,7 @@ import { ref, reactive, computed, watch } from 'vue'
import { t } from '@/lang'
import { useDictionary } from '@/app/api/dict'
import type { FormInstance } from 'element-plus'
import { getContractsInfo,addContracts,editContracts, getWithUsersList } from '@/addon/zhjw/api/contracts';
import { getContractsInfo,addContracts,editContracts, getWithStudentsList } from '@/addon/zhjw/api/contracts';
import { useRoute } from 'vue-router'
const route = useRoute()
@ -136,7 +136,7 @@ const selectData = ref<any[]>([])
const studentIdList = ref([] as any[])
const setStudentIdList = async () => {
studentIdList.value = await (await getWithUsersList({})).data
studentIdList.value = await (await getWithStudentsList({})).data
}
setStudentIdList()
//

16
admin/src/addon/zhjw/views/orders/orders.vue

@ -17,8 +17,8 @@
<el-option
v-for="(item, index) in studentIdList"
:key="index"
:label="item['mobile']"
:value="item['member_id']"
:label="item['name']"
:value="item['id']"
/>
</el-select>
</el-form-item>
@ -182,7 +182,7 @@
import { reactive, ref, watch } from 'vue'
import { t } from '@/lang'
import { useDictionary } from '@/app/api/dict'
import { getOrdersList, deleteOrders, getWithMemberList, getWithContractsList } from '@/addon/zhjw/api/orders'
import { getOrdersList, deleteOrders, getWithStudentsList, getWithContractsList } from '@/addon/zhjw/api/orders'
import { img } from '@/utils/common'
import { ElMessageBox,FormInstance } from 'element-plus'
import { useRouter } from 'vue-router'
@ -236,7 +236,7 @@ const selectData = ref<any[]>([])
is_deletedDictList();
/**
* 获取智慧教务-订单管理列表
* 获取订单管理列表
*/
const loadOrdersList = (page: number = 1) => {
ordersTable.loading = true
@ -259,14 +259,14 @@ loadOrdersList()
const router = useRouter()
/**
* 添加智慧教务-订单管理
* 添加订单管理
*/
const addEvent = () => {
router.push('/orders/orders_edit')
}
/**
* 编辑智慧教务-订单管理
* 编辑订单管理
* @param data
*/
const editEvent = (data: any) => {
@ -274,7 +274,7 @@ const editEvent = (data: any) => {
}
/**
* 删除智慧教务-订单管理
* 删除订单管理
*/
const deleteEvent = (id: number) => {
ElMessageBox.confirm(t('ordersDeleteTips'), t('warning'),
@ -294,7 +294,7 @@ const deleteEvent = (id: number) => {
const studentIdList = ref([])
const setStudentIdList = async () => {
studentIdList.value = await (await getWithMemberList({})).data
studentIdList.value = await (await getWithStudentsList({})).data
}
setStudentIdList()
const contractIdList = ref([])

8
admin/src/addon/zhjw/views/orders/orders_edit.vue

@ -16,8 +16,8 @@
<el-option
v-for="(item, index) in studentIdList"
:key="index"
:label="item['mobile']"
:value="item['member_id']"
:label="item['name']"
:value="item['id']"
/>
</el-select>
</el-form-item>
@ -100,7 +100,7 @@ import { ref, reactive, computed, watch } from 'vue'
import { t } from '@/lang'
import { useDictionary } from '@/app/api/dict'
import type { FormInstance } from 'element-plus'
import { getOrdersInfo,addOrders,editOrders, getWithMemberList, getWithContractsList } from '@/addon/zhjw/api/orders';
import { getOrdersInfo,addOrders,editOrders, getWithStudentsList, getWithContractsList } from '@/addon/zhjw/api/orders';
import { useRoute } from 'vue-router'
const route = useRoute()
@ -167,7 +167,7 @@ const selectData = ref<any[]>([])
const studentIdList = ref([] as any[])
const setStudentIdList = async () => {
studentIdList.value = await (await getWithMemberList({})).data
studentIdList.value = await (await getWithStudentsList({})).data
}
setStudentIdList()
const contractIdList = ref([] as any[])

4
admin/src/addon/zhjw/views/students/students.vue

@ -128,7 +128,7 @@
import { reactive, ref, watch } from 'vue'
import { t } from '@/lang'
import { useDictionary } from '@/app/api/dict'
import { getStudentsList, deleteStudents, getWithUsersList } from '@/addon/zhjw/api/students'
import { getStudentsList, deleteStudents, getWithMemberList } from '@/addon/zhjw/api/students'
import { img } from '@/utils/common'
import { ElMessageBox,FormInstance } from 'element-plus'
import { useRouter } from 'vue-router'
@ -225,7 +225,7 @@ const deleteEvent = (id: number) => {
const userIdList = ref([])
const setUserIdList = async () => {
userIdList.value = await (await getWithUsersList({})).data
userIdList.value = await (await getWithMemberList({})).data
}
setUserIdList()

4
admin/src/addon/zhjw/views/students/students_edit.vue

@ -70,7 +70,7 @@ import { ref, reactive, computed, watch } from 'vue'
import { t } from '@/lang'
import { useDictionary } from '@/app/api/dict'
import type { FormInstance } from 'element-plus'
import { getStudentsInfo,addStudents,editStudents, getWithUsersList } from '@/addon/zhjw/api/students';
import { getStudentsInfo,addStudents,editStudents, getWithMemberList } from '@/addon/zhjw/api/students';
import { useRoute } from 'vue-router'
const route = useRoute()
@ -119,7 +119,7 @@ const selectData = ref<any[]>([])
const userIdList = ref([] as any[])
const setUserIdList = async () => {
userIdList.value = await (await getWithUsersList({})).data
userIdList.value = await (await getWithMemberList({})).data
}
setUserIdList()
//

615
admin/src/addon/zhjw/views/users/components/users-edit.vue

@ -1,615 +0,0 @@
<template>
<el-dialog v-model="showDialog" :title="formData.member_id ? t('updateUsers') : t('addUsers')" 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('memberNo')" >
<el-input v-model="formData.member_no" clearable :placeholder="t('memberNoPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('pid')" >
<el-select class="input-width" v-model="formData.pid" clearable :placeholder="t('pidPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in pidList"
:key="index"
:label="item['mobile']"
:value="item['member_id']"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('username')" prop="username">
<el-input v-model="formData.username" clearable :placeholder="t('usernamePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('mobile')" prop="mobile">
<el-input v-model="formData.mobile" clearable :placeholder="t('mobilePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('password')" prop="password">
<el-input v-model="formData.password" clearable :placeholder="t('passwordPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('nickname')" prop="nickname">
<el-input v-model="formData.nickname" clearable :placeholder="t('nicknamePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('headimg')">
<upload-image v-model="formData.headimg" />
</el-form-item>
<el-form-item :label="t('memberLevel')" prop="member_level">
<el-input v-model="formData.member_level" clearable :placeholder="t('memberLevelPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('memberLabel')" prop="member_label">
<el-input v-model="formData.member_label" clearable :placeholder="t('memberLabelPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('wxOpenid')" >
<el-input v-model="formData.wx_openid" clearable :placeholder="t('wxOpenidPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('weappOpenid')" >
<el-input v-model="formData.weapp_openid" clearable :placeholder="t('weappOpenidPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('wxUnionid')" >
<el-input v-model="formData.wx_unionid" clearable :placeholder="t('wxUnionidPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('aliOpenid')" >
<el-input v-model="formData.ali_openid" clearable :placeholder="t('aliOpenidPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('douyinOpenid')" >
<el-input v-model="formData.douyin_openid" clearable :placeholder="t('douyinOpenidPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('registerChannel')" >
<el-input v-model="formData.register_channel" clearable :placeholder="t('registerChannelPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('registerType')" >
<el-input v-model="formData.register_type" clearable :placeholder="t('registerTypePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('loginIp')" >
<el-input v-model="formData.login_ip" clearable :placeholder="t('loginIpPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('loginType')" >
<el-input v-model="formData.login_type" clearable :placeholder="t('loginTypePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('loginChannel')" >
<el-input v-model="formData.login_channel" clearable :placeholder="t('loginChannelPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('loginCount')" >
<el-input v-model="formData.login_count" clearable :placeholder="t('loginCountPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('loginTime')" >
<el-input v-model="formData.login_time" clearable :placeholder="t('loginTimePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('lastVisitTime')" >
<el-input v-model="formData.last_visit_time" clearable :placeholder="t('lastVisitTimePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('lastConsumTime')" >
<el-input v-model="formData.last_consum_time" clearable :placeholder="t('lastConsumTimePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('sex')" prop="sex">
<el-select class="input-width" v-model="formData.sex" clearable :placeholder="t('sexPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in sexList"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('status')" prop="status">
<el-select class="input-width" v-model="formData.status" clearable :placeholder="t('statusPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in statusList"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('birthday')" class="input-width">
<el-date-picker
class="flex-1 !flex"
v-model="formData.birthday"
clearable
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
:placeholder="t('birthdayPlaceholder')">
</el-date-picker>
</el-form-item>
<el-form-item :label="t('point')" >
<el-input v-model="formData.point" clearable :placeholder="t('pointPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('pointGet')" >
<el-input v-model="formData.point_get" clearable :placeholder="t('pointGetPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('balance')" >
<el-input v-model="formData.balance" clearable :placeholder="t('balancePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('balanceGet')" >
<el-input v-model="formData.balance_get" clearable :placeholder="t('balanceGetPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('money')" >
<el-input v-model="formData.money" clearable :placeholder="t('moneyPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('moneyGet')" >
<el-input v-model="formData.money_get" clearable :placeholder="t('moneyGetPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('moneyCashOuting')" >
<el-input v-model="formData.money_cash_outing" clearable :placeholder="t('moneyCashOutingPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('growth')" >
<el-input v-model="formData.growth" clearable :placeholder="t('growthPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('growthGet')" >
<el-input v-model="formData.growth_get" clearable :placeholder="t('growthGetPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('commission')" >
<el-input v-model="formData.commission" clearable :placeholder="t('commissionPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('commissionGet')" >
<el-input v-model="formData.commission_get" clearable :placeholder="t('commissionGetPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('commissionCashOuting')" >
<el-input v-model="formData.commission_cash_outing" clearable :placeholder="t('commissionCashOutingPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('isMember')" prop="is_member">
<el-select class="input-width" v-model="formData.is_member" clearable :placeholder="t('isMemberPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in is_memberList"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('memberTime')" class="input-width">
<el-date-picker
class="flex-1 !flex"
v-model="formData.member_time"
clearable
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
:placeholder="t('memberTimePlaceholder')">
</el-date-picker>
</el-form-item>
<el-form-item :label="t('address')" >
<el-input v-model="formData.address" clearable :placeholder="t('addressPlaceholder')" 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 { addUsers, editUsers, getUsersInfo, getWithUsersList } from '@/addon/zhjw/api/users'
let showDialog = ref(false)
const loading = ref(false)
/**
* 表单数据
*/
const initialFormData = {
member_id: '',
member_no: '',
pid: '',
username: '',
mobile: '',
password: '',
nickname: '',
headimg: '',
member_level: '',
member_label: '',
wx_openid: '',
weapp_openid: '',
wx_unionid: '',
ali_openid: '',
douyin_openid: '',
register_channel: '',
register_type: '',
login_ip: '',
login_type: '',
login_channel: '',
login_count: '',
login_time: '',
last_visit_time: '',
last_consum_time: '',
sex: '',
status: '',
birthday: '',
point: '',
point_get: '',
balance: '',
balance_get: '',
money: '',
money_get: '',
money_cash_outing: '',
growth: '',
growth_get: '',
commission: '',
commission_get: '',
commission_cash_outing: '',
is_member: '',
member_time: '',
address: '',
}
const formData: Record<string, any> = reactive({ ...initialFormData })
const formRef = ref<FormInstance>()
//
const formRules = computed(() => {
return {
member_no: [
{ required: true, message: t('memberNoPlaceholder'), trigger: 'blur' },
]
,
pid: [
{ required: true, message: t('pidPlaceholder'), trigger: 'blur' },
]
,
username: [
{ required: true, message: t('usernamePlaceholder'), trigger: 'blur' },
]
,
mobile: [
{ required: true, message: t('mobilePlaceholder'), trigger: 'blur' },
]
,
password: [
{ required: true, message: t('passwordPlaceholder'), trigger: 'blur' },
]
,
nickname: [
{ required: true, message: t('nicknamePlaceholder'), trigger: 'blur' },
]
,
headimg: [
{ required: true, message: t('headimgPlaceholder'), trigger: 'blur' },
]
,
member_level: [
{ required: true, message: t('memberLevelPlaceholder'), trigger: 'blur' },
]
,
member_label: [
{ required: true, message: t('memberLabelPlaceholder'), trigger: 'blur' },
]
,
wx_openid: [
{ required: true, message: t('wxOpenidPlaceholder'), trigger: 'blur' },
]
,
weapp_openid: [
{ required: true, message: t('weappOpenidPlaceholder'), trigger: 'blur' },
]
,
wx_unionid: [
{ required: true, message: t('wxUnionidPlaceholder'), trigger: 'blur' },
]
,
ali_openid: [
{ required: true, message: t('aliOpenidPlaceholder'), trigger: 'blur' },
]
,
douyin_openid: [
{ required: true, message: t('douyinOpenidPlaceholder'), trigger: 'blur' },
]
,
register_channel: [
{ required: true, message: t('registerChannelPlaceholder'), trigger: 'blur' },
]
,
register_type: [
{ required: true, message: t('registerTypePlaceholder'), trigger: 'blur' },
]
,
login_ip: [
{ required: true, message: t('loginIpPlaceholder'), trigger: 'blur' },
]
,
login_type: [
{ required: true, message: t('loginTypePlaceholder'), trigger: 'blur' },
]
,
login_channel: [
{ required: true, message: t('loginChannelPlaceholder'), trigger: 'blur' },
]
,
login_count: [
{ required: true, message: t('loginCountPlaceholder'), trigger: 'blur' },
]
,
login_time: [
{ required: true, message: t('loginTimePlaceholder'), trigger: 'blur' },
]
,
last_visit_time: [
{ required: true, message: t('lastVisitTimePlaceholder'), trigger: 'blur' },
]
,
last_consum_time: [
{ required: true, message: t('lastConsumTimePlaceholder'), trigger: 'blur' },
]
,
sex: [
{ required: true, message: t('sexPlaceholder'), trigger: 'blur' },
]
,
status: [
{ required: true, message: t('statusPlaceholder'), trigger: 'blur' },
]
,
birthday: [
{ required: true, message: t('birthdayPlaceholder'), trigger: 'blur' },
]
,
point: [
{ required: true, message: t('pointPlaceholder'), trigger: 'blur' },
]
,
point_get: [
{ required: true, message: t('pointGetPlaceholder'), trigger: 'blur' },
]
,
balance: [
{ required: true, message: t('balancePlaceholder'), trigger: 'blur' },
]
,
balance_get: [
{ required: true, message: t('balanceGetPlaceholder'), trigger: 'blur' },
]
,
money: [
{ required: true, message: t('moneyPlaceholder'), trigger: 'blur' },
]
,
money_get: [
{ required: true, message: t('moneyGetPlaceholder'), trigger: 'blur' },
]
,
money_cash_outing: [
{ required: true, message: t('moneyCashOutingPlaceholder'), trigger: 'blur' },
]
,
growth: [
{ required: true, message: t('growthPlaceholder'), trigger: 'blur' },
]
,
growth_get: [
{ required: true, message: t('growthGetPlaceholder'), trigger: 'blur' },
]
,
commission: [
{ required: true, message: t('commissionPlaceholder'), trigger: 'blur' },
]
,
commission_get: [
{ required: true, message: t('commissionGetPlaceholder'), trigger: 'blur' },
]
,
commission_cash_outing: [
{ required: true, message: t('commissionCashOutingPlaceholder'), trigger: 'blur' },
]
,
is_member: [
{ required: true, message: t('isMemberPlaceholder'), trigger: 'blur' },
]
,
member_time: [
{ required: true, message: t('memberTimePlaceholder'), trigger: 'blur' },
]
,
address: [
{ required: true, message: t('addressPlaceholder'), trigger: 'blur' },
]
,
}
})
const emit = defineEmits(['complete'])
/**
* 确认
* @param formEl
*/
const confirm = async (formEl: FormInstance | undefined) => {
if (loading.value || !formEl) return
let save = formData.member_id ? editUsers : addUsers
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
})
}
})
}
//
let sexList = ref([])
const sexDictList = async () => {
sexList.value = await (await useDictionary('users_sex')).data.dictionary
}
sexDictList();
watch(() => sexList.value, () => { formData.sex = sexList.value[0].value })
let statusList = ref([])
const statusDictList = async () => {
statusList.value = await (await useDictionary('is_radio')).data.dictionary
}
statusDictList();
watch(() => statusList.value, () => { formData.status = statusList.value[0].value })
let is_memberList = ref([])
const is_memberDictList = async () => {
is_memberList.value = await (await useDictionary('is_radio')).data.dictionary
}
is_memberDictList();
watch(() => is_memberList.value, () => { formData.is_member = is_memberList.value[0].value })
let is_delList = ref([])
const is_delDictList = async () => {
is_delList.value = await (await useDictionary('is_radio')).data.dictionary
}
is_delDictList();
watch(() => is_delList.value, () => { formData.is_del = is_delList.value[0].value })
const pidList = ref([] as any[])
const setPidList = async () => {
pidList.value = await (await getWithUsersList({})).data
}
setPidList()
const setFormData = async (row: any = null) => {
Object.assign(formData, initialFormData)
loading.value = true
if(row){
const data = await (await getUsersInfo(row.member_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>

481
admin/src/addon/zhjw/views/users/users.vue

@ -1,481 +0,0 @@
<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('addUsers') }}
</el-button>
</div>
<el-card class="box-card !border-none my-[10px] table-search-wrap" shadow="never">
<el-form :inline="true" :model="usersTable.searchParam" ref="searchFormRef">
<el-form-item :label="t('username')" prop="username">
<el-input v-model="usersTable.searchParam.username" :placeholder="t('usernamePlaceholder')" />
</el-form-item>
<el-form-item :label="t('mobile')" prop="mobile">
<el-input v-model="usersTable.searchParam.mobile" :placeholder="t('mobilePlaceholder')" />
</el-form-item>
<el-form-item :label="t('nickname')" prop="nickname">
<el-input v-model="usersTable.searchParam.nickname" :placeholder="t('nicknamePlaceholder')" />
</el-form-item>
<el-form-item :label="t('memberLevel')" prop="member_level">
<el-input v-model="usersTable.searchParam.member_level" :placeholder="t('memberLevelPlaceholder')" />
</el-form-item>
<el-form-item :label="t('memberLabel')" prop="member_label">
<el-input v-model="usersTable.searchParam.member_label" :placeholder="t('memberLabelPlaceholder')" />
</el-form-item>
<el-form-item :label="t('wxOpenid')" prop="wx_openid">
<el-input v-model="usersTable.searchParam.wx_openid" :placeholder="t('wxOpenidPlaceholder')" />
</el-form-item>
<el-form-item :label="t('weappOpenid')" prop="weapp_openid">
<el-input v-model="usersTable.searchParam.weapp_openid" :placeholder="t('weappOpenidPlaceholder')" />
</el-form-item>
<el-form-item :label="t('wxUnionid')" prop="wx_unionid">
<el-input v-model="usersTable.searchParam.wx_unionid" :placeholder="t('wxUnionidPlaceholder')" />
</el-form-item>
<el-form-item :label="t('aliOpenid')" prop="ali_openid">
<el-input v-model="usersTable.searchParam.ali_openid" :placeholder="t('aliOpenidPlaceholder')" />
</el-form-item>
<el-form-item :label="t('douyinOpenid')" prop="douyin_openid">
<el-input v-model="usersTable.searchParam.douyin_openid" :placeholder="t('douyinOpenidPlaceholder')" />
</el-form-item>
<el-form-item :label="t('registerChannel')" prop="register_channel">
<el-input v-model="usersTable.searchParam.register_channel" :placeholder="t('registerChannelPlaceholder')" />
</el-form-item>
<el-form-item :label="t('registerType')" prop="register_type">
<el-input v-model="usersTable.searchParam.register_type" :placeholder="t('registerTypePlaceholder')" />
</el-form-item>
<el-form-item :label="t('loginIp')" prop="login_ip">
<el-input v-model="usersTable.searchParam.login_ip" :placeholder="t('loginIpPlaceholder')" />
</el-form-item>
<el-form-item :label="t('loginType')" prop="login_type">
<el-input v-model="usersTable.searchParam.login_type" :placeholder="t('loginTypePlaceholder')" />
</el-form-item>
<el-form-item :label="t('loginChannel')" prop="login_channel">
<el-input v-model="usersTable.searchParam.login_channel" :placeholder="t('loginChannelPlaceholder')" />
</el-form-item>
<el-form-item :label="t('loginCount')" prop="login_count">
<el-input v-model="usersTable.searchParam.login_count" :placeholder="t('loginCountPlaceholder')" />
</el-form-item>
<el-form-item :label="t('loginTime')" prop="login_time">
<el-input v-model="usersTable.searchParam.login_time" :placeholder="t('loginTimePlaceholder')" />
</el-form-item>
<el-form-item :label="t('lastVisitTime')" prop="last_visit_time">
<el-input v-model="usersTable.searchParam.last_visit_time" :placeholder="t('lastVisitTimePlaceholder')" />
</el-form-item>
<el-form-item :label="t('lastConsumTime')" prop="last_consum_time">
<el-input v-model="usersTable.searchParam.last_consum_time" :placeholder="t('lastConsumTimePlaceholder')" />
</el-form-item>
<el-form-item :label="t('sex')" prop="sex">
<el-select class="w-[280px]" v-model="usersTable.searchParam.sex" clearable :placeholder="t('sexPlaceholder')">
<el-option label="全部" value=""></el-option>
<el-option
v-for="(item, index) in sexList"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('status')" prop="status">
<el-select class="w-[280px]" v-model="usersTable.searchParam.status" clearable :placeholder="t('statusPlaceholder')">
<el-option label="全部" value=""></el-option>
<el-option
v-for="(item, index) in statusList"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('birthday')" prop="birthday">
<el-date-picker v-model="usersTable.searchParam.birthday" type="datetimerange" format="YYYY-MM-DD hh:mm:ss"
:start-placeholder="t('startDate')" :end-placeholder="t('endDate')" />
</el-form-item>
<el-form-item :label="t('point')" prop="point">
<el-input v-model="usersTable.searchParam.point" :placeholder="t('pointPlaceholder')" />
</el-form-item>
<el-form-item :label="t('pointGet')" prop="point_get">
<el-input v-model="usersTable.searchParam.point_get" :placeholder="t('pointGetPlaceholder')" />
</el-form-item>
<el-form-item :label="t('balance')" prop="balance">
<el-input v-model="usersTable.searchParam.balance" :placeholder="t('balancePlaceholder')" />
</el-form-item>
<el-form-item :label="t('balanceGet')" prop="balance_get">
<el-input v-model="usersTable.searchParam.balance_get" :placeholder="t('balanceGetPlaceholder')" />
</el-form-item>
<el-form-item :label="t('money')" prop="money">
<el-input v-model="usersTable.searchParam.money" :placeholder="t('moneyPlaceholder')" />
</el-form-item>
<el-form-item :label="t('moneyGet')" prop="money_get">
<el-input v-model="usersTable.searchParam.money_get" :placeholder="t('moneyGetPlaceholder')" />
</el-form-item>
<el-form-item :label="t('moneyCashOuting')" prop="money_cash_outing">
<el-input v-model="usersTable.searchParam.money_cash_outing" :placeholder="t('moneyCashOutingPlaceholder')" />
</el-form-item>
<el-form-item :label="t('growth')" prop="growth">
<el-input v-model="usersTable.searchParam.growth" :placeholder="t('growthPlaceholder')" />
</el-form-item>
<el-form-item :label="t('growthGet')" prop="growth_get">
<el-input v-model="usersTable.searchParam.growth_get" :placeholder="t('growthGetPlaceholder')" />
</el-form-item>
<el-form-item :label="t('commission')" prop="commission">
<el-input v-model="usersTable.searchParam.commission" :placeholder="t('commissionPlaceholder')" />
</el-form-item>
<el-form-item :label="t('commissionGet')" prop="commission_get">
<el-input v-model="usersTable.searchParam.commission_get" :placeholder="t('commissionGetPlaceholder')" />
</el-form-item>
<el-form-item :label="t('commissionCashOuting')" prop="commission_cash_outing">
<el-input v-model="usersTable.searchParam.commission_cash_outing" :placeholder="t('commissionCashOutingPlaceholder')" />
</el-form-item>
<el-form-item :label="t('isMember')" prop="is_member">
<el-select class="w-[280px]" v-model="usersTable.searchParam.is_member" clearable :placeholder="t('isMemberPlaceholder')">
<el-option label="全部" value=""></el-option>
<el-option
v-for="(item, index) in is_memberList"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('memberTime')" prop="member_time">
<el-date-picker v-model="usersTable.searchParam.member_time" type="datetimerange" format="YYYY-MM-DD hh:mm:ss"
:start-placeholder="t('startDate')" :end-placeholder="t('endDate')" />
</el-form-item>
<el-form-item :label="t('createTime')" prop="create_time">
<el-date-picker v-model="usersTable.searchParam.create_time" type="datetimerange" format="YYYY-MM-DD hh:mm:ss"
:start-placeholder="t('startDate')" :end-placeholder="t('endDate')" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="loadUsersList()">{{ 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="usersTable.data" size="large" v-loading="usersTable.loading">
<template #empty>
<span>{{ !usersTable.loading ? t('emptyData') : '' }}</span>
</template>
<el-table-column prop="member_id" :label="t('memberId')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="member_no" :label="t('memberNo')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="pid_name" :label="t('pid')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="username" :label="t('username')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="mobile" :label="t('mobile')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="password" :label="t('password')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="nickname" :label="t('nickname')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column :label="t('headimg')" width="100" align="left">
<template #default="{ row }">
<el-avatar v-if="row.headimg" :src="img(row.headimg)" />
<el-avatar v-else icon="UserFilled" />
</template>
</el-table-column>
<el-table-column prop="member_level" :label="t('memberLevel')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="member_label" :label="t('memberLabel')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="wx_openid" :label="t('wxOpenid')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="weapp_openid" :label="t('weappOpenid')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="wx_unionid" :label="t('wxUnionid')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="ali_openid" :label="t('aliOpenid')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="douyin_openid" :label="t('douyinOpenid')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="register_channel" :label="t('registerChannel')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="register_type" :label="t('registerType')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="login_ip" :label="t('loginIp')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="login_type" :label="t('loginType')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="login_channel" :label="t('loginChannel')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="login_count" :label="t('loginCount')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="login_time" :label="t('loginTime')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="last_visit_time" :label="t('lastVisitTime')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="last_consum_time" :label="t('lastConsumTime')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column :label="t('sex')" min-width="180" align="center" :show-overflow-tooltip="true">
<template #default="{ row }">
<div v-for="(item, index) in sexList">
<div v-if="item.value == row.sex">{{ item.name }}</div>
</div>
</template>
</el-table-column>
<el-table-column :label="t('status')" min-width="180" align="center" :show-overflow-tooltip="true">
<template #default="{ row }">
<div v-for="(item, index) in statusList">
<div v-if="item.value == row.status">{{ item.name }}</div>
</div>
</template>
</el-table-column>
<el-table-column prop="birthday" :label="t('birthday')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="point" :label="t('point')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="point_get" :label="t('pointGet')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="balance" :label="t('balance')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="balance_get" :label="t('balanceGet')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="money" :label="t('money')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="money_get" :label="t('moneyGet')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="money_cash_outing" :label="t('moneyCashOuting')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="growth" :label="t('growth')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="growth_get" :label="t('growthGet')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="commission" :label="t('commission')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="commission_get" :label="t('commissionGet')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="commission_cash_outing" :label="t('commissionCashOuting')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column :label="t('isMember')" min-width="180" align="center" :show-overflow-tooltip="true">
<template #default="{ row }">
<div v-for="(item, index) in is_memberList">
<div v-if="item.value == row.is_member">{{ item.name }}</div>
</div>
</template>
</el-table-column>
<el-table-column :label="t('memberTime')" min-width="180" align="center" :show-overflow-tooltip="true">
<template #default="{ row }">
{{ row.member_time || '' }}
</template>
</el-table-column>
<el-table-column prop="address" :label="t('address')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column :label="t('createTime')" min-width="180" align="center" :show-overflow-tooltip="true">
<template #default="{ row }">
{{ row.create_time || '' }}
</template>
</el-table-column>
<el-table-column :label="t('updateTime')" min-width="180" align="center" :show-overflow-tooltip="true">
<template #default="{ row }">
{{ row.update_time || '' }}
</template>
</el-table-column>
<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.member_id)">{{ t('delete') }}</el-button>
</template>
</el-table-column>
</el-table>
<div class="mt-[16px] flex justify-end">
<el-pagination v-model:current-page="usersTable.page" v-model:page-size="usersTable.limit"
layout="total, sizes, prev, pager, next, jumper" :total="usersTable.total"
@size-change="loadUsersList()" @current-change="loadUsersList" />
</div>
</div>
</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 { getUsersList, deleteUsers, getWithUsersList } from '@/addon/zhjw/api/users'
import { img } from '@/utils/common'
import { ElMessageBox,FormInstance } from 'element-plus'
import { useRouter } from 'vue-router'
import { useRoute } from 'vue-router'
const route = useRoute()
const pageName = route.meta.title;
let usersTable = reactive({
page: 1,
limit: 10,
total: 0,
loading: true,
data: [],
searchParam:{
"username":"",
"mobile":"",
"nickname":"",
"member_level":"",
"member_label":"",
"wx_openid":"",
"weapp_openid":"",
"wx_unionid":"",
"ali_openid":"",
"douyin_openid":"",
"register_channel":"",
"register_type":"",
"login_ip":"",
"login_type":"",
"login_channel":"",
"login_count":"",
"login_time":"",
"last_visit_time":"",
"last_consum_time":"",
"sex":"",
"status":"",
"birthday":[],
"point":"",
"point_get":"",
"balance":"",
"balance_get":"",
"money":"",
"money_get":"",
"money_cash_outing":"",
"growth":"",
"growth_get":"",
"commission":"",
"commission_get":"",
"commission_cash_outing":"",
"is_member":"",
"member_time":[],
"create_time":""
}
})
const searchFormRef = ref<FormInstance>()
//
const selectData = ref<any[]>([])
//
const sexList = ref([] as any[])
const sexDictList = async () => {
sexList.value = await (await useDictionary('users_sex')).data.dictionary
}
sexDictList();
const statusList = ref([] as any[])
const statusDictList = async () => {
statusList.value = await (await useDictionary('is_radio')).data.dictionary
}
statusDictList();
const is_memberList = ref([] as any[])
const is_memberDictList = async () => {
is_memberList.value = await (await useDictionary('is_radio')).data.dictionary
}
is_memberDictList();
const is_delList = ref([] as any[])
const is_delDictList = async () => {
is_delList.value = await (await useDictionary('is_radio')).data.dictionary
}
is_delDictList();
/**
* 获取用户管理列表
*/
const loadUsersList = (page: number = 1) => {
usersTable.loading = true
usersTable.page = page
getUsersList({
page: usersTable.page,
limit: usersTable.limit,
...usersTable.searchParam
}).then(res => {
usersTable.loading = false
usersTable.data = res.data.data
usersTable.total = res.data.total
}).catch(() => {
usersTable.loading = false
})
}
loadUsersList()
const router = useRouter()
/**
* 添加用户管理
*/
const addEvent = () => {
router.push('/users/users_edit')
}
/**
* 编辑用户管理
* @param data
*/
const editEvent = (data: any) => {
router.push('/users/users_edit?id='+data.member_id)
}
/**
* 删除用户管理
*/
const deleteEvent = (id: number) => {
ElMessageBox.confirm(t('usersDeleteTips'), t('warning'),
{
confirmButtonText: t('confirm'),
cancelButtonText: t('cancel'),
type: 'warning',
}
).then(() => {
deleteUsers(id).then(() => {
loadUsersList()
}).catch(() => {
})
})
}
const pidList = ref([])
const setPidList = async () => {
pidList.value = await (await getWithUsersList({})).data
}
setPidList()
const resetForm = (formEl: FormInstance | undefined) => {
if (!formEl) return
formEl.resetFields()
loadUsersList()
}
</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>

612
admin/src/addon/zhjw/views/users/users_edit.vue

@ -1,612 +0,0 @@
<template>
<div class="main-container">
<div class="detail-head">
<div class="left" @click="back()">
<span class="iconfont iconxiangzuojiantou !text-xs"></span>
<span class="ml-[1px]">{{t('returnToPreviousPage')}}</span>
</div>
<span class="adorn">|</span>
<span class="right">{{ pageName }}</span>
</div>
<el-card class="box-card !border-none" shadow="never">
<el-form :model="formData" label-width="90px" ref="formRef" :rules="formRules" class="page-form">
<el-form-item :label="t('memberNo')" >
<el-input v-model="formData.member_no" clearable :placeholder="t('memberNoPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('pid')" >
<el-select class="input-width" v-model="formData.pid" clearable :placeholder="t('pidPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in pidList"
:key="index"
:label="item['mobile']"
:value="item['member_id']"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('username')" prop="username">
<el-input v-model="formData.username" clearable :placeholder="t('usernamePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('mobile')" prop="mobile">
<el-input v-model="formData.mobile" clearable :placeholder="t('mobilePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('password')" prop="password">
<el-input v-model="formData.password" clearable :placeholder="t('passwordPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('nickname')" prop="nickname">
<el-input v-model="formData.nickname" clearable :placeholder="t('nicknamePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('headimg')">
<upload-image v-model="formData.headimg" />
</el-form-item>
<el-form-item :label="t('memberLevel')" >
<el-input v-model="formData.member_level" clearable :placeholder="t('memberLevelPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('memberLabel')" >
<el-input v-model="formData.member_label" clearable :placeholder="t('memberLabelPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('wxOpenid')" >
<el-input v-model="formData.wx_openid" clearable :placeholder="t('wxOpenidPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('weappOpenid')" >
<el-input v-model="formData.weapp_openid" clearable :placeholder="t('weappOpenidPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('wxUnionid')" >
<el-input v-model="formData.wx_unionid" clearable :placeholder="t('wxUnionidPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('aliOpenid')" >
<el-input v-model="formData.ali_openid" clearable :placeholder="t('aliOpenidPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('douyinOpenid')" >
<el-input v-model="formData.douyin_openid" clearable :placeholder="t('douyinOpenidPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('registerChannel')" >
<el-input v-model="formData.register_channel" clearable :placeholder="t('registerChannelPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('registerType')" >
<el-input v-model="formData.register_type" clearable :placeholder="t('registerTypePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('loginIp')" >
<el-input v-model="formData.login_ip" clearable :placeholder="t('loginIpPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('loginType')" >
<el-input v-model="formData.login_type" clearable :placeholder="t('loginTypePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('loginChannel')" >
<el-input v-model="formData.login_channel" clearable :placeholder="t('loginChannelPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('loginCount')" >
<el-input v-model="formData.login_count" clearable :placeholder="t('loginCountPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('loginTime')" >
<el-input v-model="formData.login_time" clearable :placeholder="t('loginTimePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('lastVisitTime')" >
<el-input v-model="formData.last_visit_time" clearable :placeholder="t('lastVisitTimePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('lastConsumTime')" >
<el-input v-model="formData.last_consum_time" clearable :placeholder="t('lastConsumTimePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('sex')" prop="sex">
<el-select class="input-width" v-model="formData.sex" clearable :placeholder="t('sexPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in sexList"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('status')" prop="status">
<el-select class="input-width" v-model="formData.status" clearable :placeholder="t('statusPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in statusList"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('birthday')" class="input-width">
<el-date-picker
class="flex-1 !flex"
v-model="formData.birthday"
clearable
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
:placeholder="t('birthdayPlaceholder')">
</el-date-picker>
</el-form-item>
<el-form-item :label="t('point')" >
<el-input v-model="formData.point" clearable :placeholder="t('pointPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('pointGet')" >
<el-input v-model="formData.point_get" clearable :placeholder="t('pointGetPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('balance')" >
<el-input v-model="formData.balance" clearable :placeholder="t('balancePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('balanceGet')" >
<el-input v-model="formData.balance_get" clearable :placeholder="t('balanceGetPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('money')" >
<el-input v-model="formData.money" clearable :placeholder="t('moneyPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('moneyGet')" >
<el-input v-model="formData.money_get" clearable :placeholder="t('moneyGetPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('moneyCashOuting')" >
<el-input v-model="formData.money_cash_outing" clearable :placeholder="t('moneyCashOutingPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('growth')" >
<el-input v-model="formData.growth" clearable :placeholder="t('growthPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('growthGet')" >
<el-input v-model="formData.growth_get" clearable :placeholder="t('growthGetPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('commission')" >
<el-input v-model="formData.commission" clearable :placeholder="t('commissionPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('commissionGet')" >
<el-input v-model="formData.commission_get" clearable :placeholder="t('commissionGetPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('commissionCashOuting')" >
<el-input v-model="formData.commission_cash_outing" clearable :placeholder="t('commissionCashOutingPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('isMember')" prop="is_member">
<el-select class="input-width" v-model="formData.is_member" clearable :placeholder="t('isMemberPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in is_memberList"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('memberTime')" class="input-width">
<el-date-picker
class="flex-1 !flex"
v-model="formData.member_time"
clearable
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
:placeholder="t('memberTimePlaceholder')">
</el-date-picker>
</el-form-item>
<el-form-item :label="t('address')" >
<el-input v-model="formData.address" clearable :placeholder="t('addressPlaceholder')" class="input-width" />
</el-form-item>
</el-form>
</el-card>
<div class="fixed-footer-wrap">
<div class="fixed-footer">
<el-button type="primary" @click="onSave(formRef)">{{ t('save') }}</el-button>
<el-button @click="back()">{{ t('cancel') }}</el-button>
</div>
</div>
</div>
</template>
<script lang="ts" setup>
import { ref, reactive, computed, watch } from 'vue'
import { t } from '@/lang'
import { useDictionary } from '@/app/api/dict'
import type { FormInstance } from 'element-plus'
import { getUsersInfo,addUsers,editUsers, getWithUsersList } from '@/addon/zhjw/api/users';
import { useRoute } from 'vue-router'
const route = useRoute()
const id:number = parseInt(route.query.id);
const loading = ref(false)
const pageName = route.meta.title
/**
* 表单数据
*/
const initialFormData = {
member_id: 0,
member_no: '',
pid: '',
username: '',
mobile: '',
password: '',
nickname: '',
headimg: '',
member_level: 0,
member_label: '',
wx_openid: '',
weapp_openid: '',
wx_unionid: '',
ali_openid: '',
douyin_openid: '',
register_channel: '',
register_type: '',
login_ip: '',
login_type: '',
login_channel: '',
login_count: 0,
login_time: 0,
last_visit_time: 0,
last_consum_time: 0,
sex: 0,
status: 0,
birthday: '',
point: 0,
point_get: 0,
balance: '',
balance_get: '',
money: '',
money_get: '',
money_cash_outing: '',
growth: 0,
growth_get: 0,
commission: '',
commission_get: '',
commission_cash_outing: '',
is_member: 0,
member_time: 0,
address: '',
}
const formData: Record<string, any> = reactive({ ...initialFormData })
const setFormData = async (id:number = 0) => {
Object.assign(formData, initialFormData)
const data = await (await getUsersInfo(id)).data
Object.keys(formData).forEach((key: string) => {
if (data[key] != undefined) formData[key] = data[key]
})
}
if(id) setFormData(id);
const formRef = ref<FormInstance>()
//
const selectData = ref<any[]>([])
//
let sexList = ref([])
const sexDictList = async () => {
sexList.value = await (await useDictionary('users_sex')).data.dictionary
}
sexDictList();
watch(() => sexList.value, () => { formData.sex = sexList.value[0].value })
let statusList = ref([])
const statusDictList = async () => {
statusList.value = await (await useDictionary('is_radio')).data.dictionary
}
statusDictList();
watch(() => statusList.value, () => { formData.status = statusList.value[0].value })
let is_memberList = ref([])
const is_memberDictList = async () => {
is_memberList.value = await (await useDictionary('is_radio')).data.dictionary
}
is_memberDictList();
watch(() => is_memberList.value, () => { formData.is_member = is_memberList.value[0].value })
let is_delList = ref([])
const is_delDictList = async () => {
is_delList.value = await (await useDictionary('is_radio')).data.dictionary
}
is_delDictList();
watch(() => is_delList.value, () => { formData.is_del = is_delList.value[0].value })
const pidList = ref([] as any[])
const setPidList = async () => {
pidList.value = await (await getWithUsersList({})).data
}
setPidList()
//
const formRules = computed(() => {
return {
member_no: [
{ required: true, message: t('memberNoPlaceholder'), trigger: 'blur' },
]
,
pid: [
{ required: true, message: t('pidPlaceholder'), trigger: 'blur' },
]
,
username: [
{ required: true, message: t('usernamePlaceholder'), trigger: 'blur' },
]
,
mobile: [
{ required: true, message: t('mobilePlaceholder'), trigger: 'blur' },
]
,
password: [
{ required: true, message: t('passwordPlaceholder'), trigger: 'blur' },
]
,
nickname: [
{ required: true, message: t('nicknamePlaceholder'), trigger: 'blur' },
]
,
headimg: [
{ required: true, message: t('headimgPlaceholder'), trigger: 'blur' },
]
,
member_level: [
{ required: true, message: t('memberLevelPlaceholder'), trigger: 'blur' },
]
,
member_label: [
{ required: true, message: t('memberLabelPlaceholder'), trigger: 'blur' },
]
,
wx_openid: [
{ required: true, message: t('wxOpenidPlaceholder'), trigger: 'blur' },
]
,
weapp_openid: [
{ required: true, message: t('weappOpenidPlaceholder'), trigger: 'blur' },
]
,
wx_unionid: [
{ required: true, message: t('wxUnionidPlaceholder'), trigger: 'blur' },
]
,
ali_openid: [
{ required: true, message: t('aliOpenidPlaceholder'), trigger: 'blur' },
]
,
douyin_openid: [
{ required: true, message: t('douyinOpenidPlaceholder'), trigger: 'blur' },
]
,
register_channel: [
{ required: true, message: t('registerChannelPlaceholder'), trigger: 'blur' },
]
,
register_type: [
{ required: true, message: t('registerTypePlaceholder'), trigger: 'blur' },
]
,
login_ip: [
{ required: true, message: t('loginIpPlaceholder'), trigger: 'blur' },
]
,
login_type: [
{ required: true, message: t('loginTypePlaceholder'), trigger: 'blur' },
]
,
login_channel: [
{ required: true, message: t('loginChannelPlaceholder'), trigger: 'blur' },
]
,
login_count: [
{ required: true, message: t('loginCountPlaceholder'), trigger: 'blur' },
]
,
login_time: [
{ required: true, message: t('loginTimePlaceholder'), trigger: 'blur' },
]
,
last_visit_time: [
{ required: true, message: t('lastVisitTimePlaceholder'), trigger: 'blur' },
]
,
last_consum_time: [
{ required: true, message: t('lastConsumTimePlaceholder'), trigger: 'blur' },
]
,
sex: [
{ required: true, message: t('sexPlaceholder'), trigger: 'blur' },
]
,
status: [
{ required: true, message: t('statusPlaceholder'), trigger: 'blur' },
]
,
birthday: [
{ required: true, message: t('birthdayPlaceholder'), trigger: 'blur' },
]
,
point: [
{ required: true, message: t('pointPlaceholder'), trigger: 'blur' },
]
,
point_get: [
{ required: true, message: t('pointGetPlaceholder'), trigger: 'blur' },
]
,
balance: [
{ required: true, message: t('balancePlaceholder'), trigger: 'blur' },
]
,
balance_get: [
{ required: true, message: t('balanceGetPlaceholder'), trigger: 'blur' },
]
,
money: [
{ required: true, message: t('moneyPlaceholder'), trigger: 'blur' },
]
,
money_get: [
{ required: true, message: t('moneyGetPlaceholder'), trigger: 'blur' },
]
,
money_cash_outing: [
{ required: true, message: t('moneyCashOutingPlaceholder'), trigger: 'blur' },
]
,
growth: [
{ required: true, message: t('growthPlaceholder'), trigger: 'blur' },
]
,
growth_get: [
{ required: true, message: t('growthGetPlaceholder'), trigger: 'blur' },
]
,
commission: [
{ required: true, message: t('commissionPlaceholder'), trigger: 'blur' },
]
,
commission_get: [
{ required: true, message: t('commissionGetPlaceholder'), trigger: 'blur' },
]
,
commission_cash_outing: [
{ required: true, message: t('commissionCashOutingPlaceholder'), trigger: 'blur' },
]
,
is_member: [
{ required: true, message: t('isMemberPlaceholder'), trigger: 'blur' },
]
,
member_time: [
{ required: true, message: t('memberTimePlaceholder'), trigger: 'blur' },
]
,
address: [
{ required: true, message: t('addressPlaceholder'), trigger: 'blur' },
]
,
}
})
const onSave = async (formEl: FormInstance | undefined) => {
if (loading.value || !formEl) return
await formEl.validate(async (valid) => {
if (valid) {
loading.value = true
let data = formData
const save = id ? editUsers : addUsers
save(data).then(res => {
loading.value = false
history.back()
}).catch(err => {
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()
}
}
const back = () => {
history.back()
}
</script>
<style lang="scss" scoped></style>

8
niucloud/addon/zhjw/admin/api/contracts.ts

@ -8,6 +8,10 @@ import request from '@/utils/request'
// USER_CODE_BEGIN -- zhjw_contracts
/**
*
@ -55,8 +59,8 @@ export function deleteContracts(id: number) {
return request.delete(`zhjw/contracts/${id}`, { showErrorMessage: true, showSuccessMessage: true })
}
export function getWithUsersList(params: Record<string,any>){
return request.get('zhjw/users_all', {params})
export function getWithStudentsList(params: Record<string,any>){
return request.get('zhjw/students_all', {params})
}
// USER_CODE_END -- zhjw_contracts

20
niucloud/addon/zhjw/admin/api/orders.ts

@ -1,8 +1,12 @@
import request from '@/utils/request'
// USER_CODE_BEGIN -- zhjw_orders
/**
* -
*
* @param params
* @returns
*/
@ -11,8 +15,8 @@ export function getOrdersList(params: Record<string, any>) {
}
/**
* -
* @param id -id
*
* @param id id
* @returns
*/
export function getOrdersInfo(id: number) {
@ -20,7 +24,7 @@ export function getOrdersInfo(id: number) {
}
/**
* -
*
* @param params
* @returns
*/
@ -29,7 +33,7 @@ export function addOrders(params: Record<string, any>) {
}
/**
* -
*
* @param id
* @param params
* @returns
@ -39,7 +43,7 @@ export function editOrders(params: Record<string, any>) {
}
/**
* -
*
* @param id
* @returns
*/
@ -47,8 +51,8 @@ export function deleteOrders(id: number) {
return request.delete(`zhjw/orders/${id}`, { showErrorMessage: true, showSuccessMessage: true })
}
export function getWithMemberList(params: Record<string,any>){
return request.get('zhjw/member_all', {params})
export function getWithStudentsList(params: Record<string,any>){
return request.get('zhjw/students_all', {params})
}export function getWithContractsList(params: Record<string,any>){
return request.get('zhjw/contracts_all', {params})
}

6
niucloud/addon/zhjw/admin/api/students.ts

@ -6,6 +6,8 @@ import request from '@/utils/request'
// USER_CODE_BEGIN -- zhjw_students
/**
*
@ -53,8 +55,8 @@ export function deleteStudents(id: number) {
return request.delete(`zhjw/students/${id}`, { showErrorMessage: true, showSuccessMessage: true })
}
export function getWithUsersList(params: Record<string,any>){
return request.get('zhjw/users_all', {params})
export function getWithMemberList(params: Record<string,any>){
return request.get('zhjw/member_all', {params})
}
// USER_CODE_END -- zhjw_students

62
niucloud/addon/zhjw/admin/api/users.ts

@ -1,62 +0,0 @@
import request from '@/utils/request'
// USER_CODE_BEGIN -- zhjw_users
/**
*
* @param params
* @returns
*/
export function getUsersList(params: Record<string, any>) {
return request.get(`zhjw/users`, {params})
}
/**
*
* @param member_id member_id
* @returns
*/
export function getUsersInfo(member_id: number) {
return request.get(`zhjw/users/${member_id}`);
}
/**
*
* @param params
* @returns
*/
export function addUsers(params: Record<string, any>) {
return request.post('zhjw/users', params, { showErrorMessage: true, showSuccessMessage: true })
}
/**
*
* @param member_id
* @param params
* @returns
*/
export function editUsers(params: Record<string, any>) {
return request.put(`zhjw/users/${params.member_id}`, params, { showErrorMessage: true, showSuccessMessage: true })
}
/**
*
* @param member_id
* @returns
*/
export function deleteUsers(member_id: number) {
return request.delete(`zhjw/users/${member_id}`, { showErrorMessage: true, showSuccessMessage: true })
}
export function getWithUsersList(params: Record<string,any>){
return request.get('zhjw/users_all', {params})
}
// USER_CODE_END -- zhjw_users

4
niucloud/addon/zhjw/admin/lang/zh-cn/orders.orders.json

@ -18,8 +18,8 @@
"createTimePlaceholder":"请输入添加时间",
"updateTime":"更新时间",
"isDeleted":"是否删除",
"addOrders":"添加智慧教务-订单管理",
"updateOrders":"编辑智慧教务-订单管理",
"addOrders":"添加订单管理",
"updateOrders":"编辑订单管理",
"ordersDeleteTips":"确定要删除该数据吗?",
"startDate":"请选择开始时间",
"endDate":"请选择结束时间"

6
niucloud/addon/zhjw/admin/lang/zh-cn/orders.orders_edit.json

@ -13,7 +13,7 @@
"payTypePlaceholder":"请选择支付类型",
"paymentStatusPlaceholder":"请选择支付状态",
"paymentTimePlaceholder":"请选择支付时间",
"addOrders":"添加智慧教务-订单管理",
"updateOrders":"编辑智慧教务-订单管理",
"ordersDeleteTips":"确定要删除该智慧教务-订单管理吗?"
"addOrders":"添加订单管理",
"updateOrders":"编辑订单管理",
"ordersDeleteTips":"确定要删除该订单管理吗?"
}

88
niucloud/addon/zhjw/admin/lang/zh-cn/users.users.json

@ -1,88 +0,0 @@
{
"memberId":"序号",
"memberNo":"会员编码",
"pid":"推广会员",
"username":"会员用户名",
"usernamePlaceholder":"请输入会员用户名",
"mobile":"手机号",
"mobilePlaceholder":"请输入手机号",
"password":"会员密码",
"nickname":"会员昵称",
"nicknamePlaceholder":"请输入会员昵称",
"headimg":"会员头像",
"memberLevel":"会员等级",
"memberLevelPlaceholder":"请输入会员等级",
"memberLabel":"会员标签",
"memberLabelPlaceholder":"请输入会员标签",
"wxOpenid":"微信用户openid",
"wxOpenidPlaceholder":"请输入微信用户openid",
"weappOpenid":"微信小程序openid",
"weappOpenidPlaceholder":"请输入微信小程序openid",
"wxUnionid":"微信unionid",
"wxUnionidPlaceholder":"请输入微信unionid",
"aliOpenid":"支付宝账户id",
"aliOpenidPlaceholder":"请输入支付宝账户id",
"douyinOpenid":"抖音小程序openid",
"douyinOpenidPlaceholder":"请输入抖音小程序openid",
"registerChannel":"注册来源",
"registerChannelPlaceholder":"请输入注册来源",
"registerType":"注册方式",
"registerTypePlaceholder":"请输入注册方式",
"loginIp":"当前登录ip",
"loginIpPlaceholder":"请输入当前登录ip",
"loginType":"当前登录的操作终端类型",
"loginTypePlaceholder":"请输入当前登录的操作终端类型",
"loginChannel":"登录渠道",
"loginChannelPlaceholder":"请输入登录渠道",
"loginCount":"登录次数",
"loginCountPlaceholder":"请输入登录次数",
"loginTime":"当前登录时间",
"loginTimePlaceholder":"请输入当前登录时间",
"lastVisitTime":"最后访问时间",
"lastVisitTimePlaceholder":"请输入最后访问时间",
"lastConsumTime":"最后消费时间",
"lastConsumTimePlaceholder":"请输入最后消费时间",
"sex":"性别",
"sexPlaceholder":"请输入性别",
"status":"用户状态",
"statusPlaceholder":"请输入用户状态",
"birthday":"出生日期",
"birthdayPlaceholder":"请输入出生日期",
"point":"可用积分",
"pointPlaceholder":"请输入可用积分",
"pointGet":"累计获取积分",
"pointGetPlaceholder":"请输入累计获取积分",
"balance":"可用余额",
"balancePlaceholder":"请输入可用余额",
"balanceGet":"累计获取余额",
"balanceGetPlaceholder":"请输入累计获取余额",
"money":"可用余额(可提现)",
"moneyPlaceholder":"请输入可用余额(可提现)",
"moneyGet":"累计获取余额(可提现)",
"moneyGetPlaceholder":"请输入累计获取余额(可提现)",
"moneyCashOuting":"提现中余额(可提现)",
"moneyCashOutingPlaceholder":"请输入提现中余额(可提现)",
"growth":"成长值",
"growthPlaceholder":"请输入成长值",
"growthGet":"累计获得成长值",
"growthGetPlaceholder":"请输入累计获得成长值",
"commission":"当前佣金",
"commissionPlaceholder":"请输入当前佣金",
"commissionGet":"佣金获取",
"commissionGetPlaceholder":"请输入佣金获取",
"commissionCashOuting":"提现中佣金",
"commissionCashOutingPlaceholder":"请输入提现中佣金",
"isMember":"是否是会员",
"isMemberPlaceholder":"请输入是否是会员",
"memberTime":"成为会员时间",
"memberTimePlaceholder":"请输入成为会员时间",
"address":"详细地址",
"createTime":"注册时间",
"createTimePlaceholder":"请输入注册时间",
"updateTime":"修改时间",
"addUsers":"添加用户管理",
"updateUsers":"编辑用户管理",
"usersDeleteTips":"确定要删除该数据吗?",
"startDate":"请选择开始时间",
"endDate":"请选择结束时间"
}

87
niucloud/addon/zhjw/admin/lang/zh-cn/users.users_edit.json

@ -1,87 +0,0 @@
{
"memberNo":"会员编码",
"pid":"推广会员",
"username":"会员用户名",
"mobile":"手机号",
"password":"会员密码",
"nickname":"会员昵称",
"headimg":"会员头像",
"memberLevel":"会员等级",
"memberLabel":"会员标签",
"wxOpenid":"微信用户openid",
"weappOpenid":"微信小程序openid",
"wxUnionid":"微信unionid",
"aliOpenid":"支付宝账户id",
"douyinOpenid":"抖音小程序openid",
"registerChannel":"注册来源",
"registerType":"注册方式",
"loginIp":"当前登录ip",
"loginType":"当前登录的操作终端类型",
"loginChannel":"登录渠道",
"loginCount":"登录次数",
"loginTime":"当前登录时间",
"lastVisitTime":"最后访问时间",
"lastConsumTime":"最后消费时间",
"sex":"性别",
"status":"用户状态",
"birthday":"出生日期",
"point":"可用积分",
"pointGet":"累计获取积分",
"balance":"可用余额",
"balanceGet":"累计获取余额",
"money":"可用余额(可提现)",
"moneyGet":"累计获取余额(可提现)",
"moneyCashOuting":"提现中余额(可提现)",
"growth":"成长值",
"growthGet":"累计获得成长值",
"commission":"当前佣金",
"commissionGet":"佣金获取",
"commissionCashOuting":"提现中佣金",
"isMember":"是否是会员",
"memberTime":"成为会员时间",
"address":"详细地址",
"memberNoPlaceholder":"请输入会员编码",
"pidPlaceholder":"请选择推广会员",
"usernamePlaceholder":"请输入会员用户名",
"mobilePlaceholder":"请输入手机号",
"passwordPlaceholder":"请输入会员密码",
"nicknamePlaceholder":"请输入会员昵称",
"headimgPlaceholder":"请上传会员头像",
"memberLevelPlaceholder":"请输入会员等级",
"memberLabelPlaceholder":"请输入会员标签",
"wxOpenidPlaceholder":"请输入微信用户openid",
"weappOpenidPlaceholder":"请输入微信小程序openid",
"wxUnionidPlaceholder":"请输入微信unionid",
"aliOpenidPlaceholder":"请输入支付宝账户id",
"douyinOpenidPlaceholder":"请输入抖音小程序openid",
"registerChannelPlaceholder":"请输入注册来源",
"registerTypePlaceholder":"请输入注册方式",
"loginIpPlaceholder":"请输入当前登录ip",
"loginTypePlaceholder":"请输入当前登录的操作终端类型",
"loginChannelPlaceholder":"请输入登录渠道",
"loginCountPlaceholder":"请输入登录次数",
"loginTimePlaceholder":"请输入当前登录时间",
"lastVisitTimePlaceholder":"请输入最后访问时间",
"lastConsumTimePlaceholder":"请输入最后消费时间",
"sexPlaceholder":"请选择性别",
"statusPlaceholder":"请选择用户状态",
"birthdayPlaceholder":"请选择出生日期",
"pointPlaceholder":"请输入可用积分",
"pointGetPlaceholder":"请输入累计获取积分",
"balancePlaceholder":"请输入可用余额",
"balanceGetPlaceholder":"请输入累计获取余额",
"moneyPlaceholder":"请输入可用余额(可提现)",
"moneyGetPlaceholder":"请输入累计获取余额(可提现)",
"moneyCashOutingPlaceholder":"请输入提现中余额(可提现)",
"growthPlaceholder":"请输入成长值",
"growthGetPlaceholder":"请输入累计获得成长值",
"commissionPlaceholder":"请输入当前佣金",
"commissionGetPlaceholder":"请输入佣金获取",
"commissionCashOutingPlaceholder":"请输入提现中佣金",
"isMemberPlaceholder":"请选择是否是会员",
"memberTimePlaceholder":"请选择成为会员时间",
"addressPlaceholder":"请输入详细地址",
"addUsers":"添加用户管理",
"updateUsers":"编辑用户管理",
"usersDeleteTips":"确定要删除该用户管理吗?"
}

8
niucloud/addon/zhjw/admin/views/contracts/contracts.vue

@ -17,8 +17,8 @@
<el-option
v-for="(item, index) in studentIdList"
:key="index"
:label="item['mobile']"
:value="item['member_id']"
:label="item['name']"
:value="item['id']"
/>
</el-select>
</el-form-item>
@ -120,7 +120,7 @@
import { reactive, ref, watch } from 'vue'
import { t } from '@/lang'
import { useDictionary } from '@/app/api/dict'
import { getContractsList, deleteContracts, getWithUsersList } from '@/addon/zhjw/api/contracts'
import { getContractsList, deleteContracts, getWithStudentsList } from '@/addon/zhjw/api/contracts'
import { img } from '@/utils/common'
import { ElMessageBox,FormInstance } from 'element-plus'
import { useRouter } from 'vue-router'
@ -220,7 +220,7 @@ const deleteEvent = (id: number) => {
const studentIdList = ref([])
const setStudentIdList = async () => {
studentIdList.value = await (await getWithUsersList({})).data
studentIdList.value = await (await getWithStudentsList({})).data
}
setStudentIdList()

8
niucloud/addon/zhjw/admin/views/contracts/contracts_edit.vue

@ -16,8 +16,8 @@
<el-option
v-for="(item, index) in studentIdList"
:key="index"
:label="item['mobile']"
:value="item['member_id']"
:label="item['name']"
:value="item['id']"
/>
</el-select>
</el-form-item>
@ -81,7 +81,7 @@ import { ref, reactive, computed, watch } from 'vue'
import { t } from '@/lang'
import { useDictionary } from '@/app/api/dict'
import type { FormInstance } from 'element-plus'
import { getContractsInfo,addContracts,editContracts, getWithUsersList } from '@/addon/zhjw/api/contracts';
import { getContractsInfo,addContracts,editContracts, getWithStudentsList } from '@/addon/zhjw/api/contracts';
import { useRoute } from 'vue-router'
const route = useRoute()
@ -136,7 +136,7 @@ const selectData = ref<any[]>([])
const studentIdList = ref([] as any[])
const setStudentIdList = async () => {
studentIdList.value = await (await getWithUsersList({})).data
studentIdList.value = await (await getWithStudentsList({})).data
}
setStudentIdList()
//

16
niucloud/addon/zhjw/admin/views/orders/orders.vue

@ -17,8 +17,8 @@
<el-option
v-for="(item, index) in studentIdList"
:key="index"
:label="item['mobile']"
:value="item['member_id']"
:label="item['name']"
:value="item['id']"
/>
</el-select>
</el-form-item>
@ -182,7 +182,7 @@
import { reactive, ref, watch } from 'vue'
import { t } from '@/lang'
import { useDictionary } from '@/app/api/dict'
import { getOrdersList, deleteOrders, getWithMemberList, getWithContractsList } from '@/addon/zhjw/api/orders'
import { getOrdersList, deleteOrders, getWithStudentsList, getWithContractsList } from '@/addon/zhjw/api/orders'
import { img } from '@/utils/common'
import { ElMessageBox,FormInstance } from 'element-plus'
import { useRouter } from 'vue-router'
@ -236,7 +236,7 @@ const selectData = ref<any[]>([])
is_deletedDictList();
/**
* 获取智慧教务-订单管理列表
* 获取订单管理列表
*/
const loadOrdersList = (page: number = 1) => {
ordersTable.loading = true
@ -259,14 +259,14 @@ loadOrdersList()
const router = useRouter()
/**
* 添加智慧教务-订单管理
* 添加订单管理
*/
const addEvent = () => {
router.push('/orders/orders_edit')
}
/**
* 编辑智慧教务-订单管理
* 编辑订单管理
* @param data
*/
const editEvent = (data: any) => {
@ -274,7 +274,7 @@ const editEvent = (data: any) => {
}
/**
* 删除智慧教务-订单管理
* 删除订单管理
*/
const deleteEvent = (id: number) => {
ElMessageBox.confirm(t('ordersDeleteTips'), t('warning'),
@ -294,7 +294,7 @@ const deleteEvent = (id: number) => {
const studentIdList = ref([])
const setStudentIdList = async () => {
studentIdList.value = await (await getWithMemberList({})).data
studentIdList.value = await (await getWithStudentsList({})).data
}
setStudentIdList()
const contractIdList = ref([])

8
niucloud/addon/zhjw/admin/views/orders/orders_edit.vue

@ -16,8 +16,8 @@
<el-option
v-for="(item, index) in studentIdList"
:key="index"
:label="item['mobile']"
:value="item['member_id']"
:label="item['name']"
:value="item['id']"
/>
</el-select>
</el-form-item>
@ -100,7 +100,7 @@ import { ref, reactive, computed, watch } from 'vue'
import { t } from '@/lang'
import { useDictionary } from '@/app/api/dict'
import type { FormInstance } from 'element-plus'
import { getOrdersInfo,addOrders,editOrders, getWithMemberList, getWithContractsList } from '@/addon/zhjw/api/orders';
import { getOrdersInfo,addOrders,editOrders, getWithStudentsList, getWithContractsList } from '@/addon/zhjw/api/orders';
import { useRoute } from 'vue-router'
const route = useRoute()
@ -167,7 +167,7 @@ const selectData = ref<any[]>([])
const studentIdList = ref([] as any[])
const setStudentIdList = async () => {
studentIdList.value = await (await getWithMemberList({})).data
studentIdList.value = await (await getWithStudentsList({})).data
}
setStudentIdList()
const contractIdList = ref([] as any[])

4
niucloud/addon/zhjw/admin/views/students/students.vue

@ -128,7 +128,7 @@
import { reactive, ref, watch } from 'vue'
import { t } from '@/lang'
import { useDictionary } from '@/app/api/dict'
import { getStudentsList, deleteStudents, getWithUsersList } from '@/addon/zhjw/api/students'
import { getStudentsList, deleteStudents, getWithMemberList } from '@/addon/zhjw/api/students'
import { img } from '@/utils/common'
import { ElMessageBox,FormInstance } from 'element-plus'
import { useRouter } from 'vue-router'
@ -225,7 +225,7 @@ const deleteEvent = (id: number) => {
const userIdList = ref([])
const setUserIdList = async () => {
userIdList.value = await (await getWithUsersList({})).data
userIdList.value = await (await getWithMemberList({})).data
}
setUserIdList()

4
niucloud/addon/zhjw/admin/views/students/students_edit.vue

@ -70,7 +70,7 @@ import { ref, reactive, computed, watch } from 'vue'
import { t } from '@/lang'
import { useDictionary } from '@/app/api/dict'
import type { FormInstance } from 'element-plus'
import { getStudentsInfo,addStudents,editStudents, getWithUsersList } from '@/addon/zhjw/api/students';
import { getStudentsInfo,addStudents,editStudents, getWithMemberList } from '@/addon/zhjw/api/students';
import { useRoute } from 'vue-router'
const route = useRoute()
@ -119,7 +119,7 @@ const selectData = ref<any[]>([])
const userIdList = ref([] as any[])
const setUserIdList = async () => {
userIdList.value = await (await getWithUsersList({})).data
userIdList.value = await (await getWithMemberList({})).data
}
setUserIdList()
//

615
niucloud/addon/zhjw/admin/views/users/components/users-edit.vue

@ -1,615 +0,0 @@
<template>
<el-dialog v-model="showDialog" :title="formData.member_id ? t('updateUsers') : t('addUsers')" 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('memberNo')" >
<el-input v-model="formData.member_no" clearable :placeholder="t('memberNoPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('pid')" >
<el-select class="input-width" v-model="formData.pid" clearable :placeholder="t('pidPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in pidList"
:key="index"
:label="item['mobile']"
:value="item['member_id']"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('username')" prop="username">
<el-input v-model="formData.username" clearable :placeholder="t('usernamePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('mobile')" prop="mobile">
<el-input v-model="formData.mobile" clearable :placeholder="t('mobilePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('password')" prop="password">
<el-input v-model="formData.password" clearable :placeholder="t('passwordPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('nickname')" prop="nickname">
<el-input v-model="formData.nickname" clearable :placeholder="t('nicknamePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('headimg')">
<upload-image v-model="formData.headimg" />
</el-form-item>
<el-form-item :label="t('memberLevel')" prop="member_level">
<el-input v-model="formData.member_level" clearable :placeholder="t('memberLevelPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('memberLabel')" prop="member_label">
<el-input v-model="formData.member_label" clearable :placeholder="t('memberLabelPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('wxOpenid')" >
<el-input v-model="formData.wx_openid" clearable :placeholder="t('wxOpenidPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('weappOpenid')" >
<el-input v-model="formData.weapp_openid" clearable :placeholder="t('weappOpenidPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('wxUnionid')" >
<el-input v-model="formData.wx_unionid" clearable :placeholder="t('wxUnionidPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('aliOpenid')" >
<el-input v-model="formData.ali_openid" clearable :placeholder="t('aliOpenidPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('douyinOpenid')" >
<el-input v-model="formData.douyin_openid" clearable :placeholder="t('douyinOpenidPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('registerChannel')" >
<el-input v-model="formData.register_channel" clearable :placeholder="t('registerChannelPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('registerType')" >
<el-input v-model="formData.register_type" clearable :placeholder="t('registerTypePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('loginIp')" >
<el-input v-model="formData.login_ip" clearable :placeholder="t('loginIpPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('loginType')" >
<el-input v-model="formData.login_type" clearable :placeholder="t('loginTypePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('loginChannel')" >
<el-input v-model="formData.login_channel" clearable :placeholder="t('loginChannelPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('loginCount')" >
<el-input v-model="formData.login_count" clearable :placeholder="t('loginCountPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('loginTime')" >
<el-input v-model="formData.login_time" clearable :placeholder="t('loginTimePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('lastVisitTime')" >
<el-input v-model="formData.last_visit_time" clearable :placeholder="t('lastVisitTimePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('lastConsumTime')" >
<el-input v-model="formData.last_consum_time" clearable :placeholder="t('lastConsumTimePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('sex')" prop="sex">
<el-select class="input-width" v-model="formData.sex" clearable :placeholder="t('sexPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in sexList"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('status')" prop="status">
<el-select class="input-width" v-model="formData.status" clearable :placeholder="t('statusPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in statusList"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('birthday')" class="input-width">
<el-date-picker
class="flex-1 !flex"
v-model="formData.birthday"
clearable
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
:placeholder="t('birthdayPlaceholder')">
</el-date-picker>
</el-form-item>
<el-form-item :label="t('point')" >
<el-input v-model="formData.point" clearable :placeholder="t('pointPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('pointGet')" >
<el-input v-model="formData.point_get" clearable :placeholder="t('pointGetPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('balance')" >
<el-input v-model="formData.balance" clearable :placeholder="t('balancePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('balanceGet')" >
<el-input v-model="formData.balance_get" clearable :placeholder="t('balanceGetPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('money')" >
<el-input v-model="formData.money" clearable :placeholder="t('moneyPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('moneyGet')" >
<el-input v-model="formData.money_get" clearable :placeholder="t('moneyGetPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('moneyCashOuting')" >
<el-input v-model="formData.money_cash_outing" clearable :placeholder="t('moneyCashOutingPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('growth')" >
<el-input v-model="formData.growth" clearable :placeholder="t('growthPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('growthGet')" >
<el-input v-model="formData.growth_get" clearable :placeholder="t('growthGetPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('commission')" >
<el-input v-model="formData.commission" clearable :placeholder="t('commissionPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('commissionGet')" >
<el-input v-model="formData.commission_get" clearable :placeholder="t('commissionGetPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('commissionCashOuting')" >
<el-input v-model="formData.commission_cash_outing" clearable :placeholder="t('commissionCashOutingPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('isMember')" prop="is_member">
<el-select class="input-width" v-model="formData.is_member" clearable :placeholder="t('isMemberPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in is_memberList"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('memberTime')" class="input-width">
<el-date-picker
class="flex-1 !flex"
v-model="formData.member_time"
clearable
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
:placeholder="t('memberTimePlaceholder')">
</el-date-picker>
</el-form-item>
<el-form-item :label="t('address')" >
<el-input v-model="formData.address" clearable :placeholder="t('addressPlaceholder')" 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 { addUsers, editUsers, getUsersInfo, getWithUsersList } from '@/addon/zhjw/api/users'
let showDialog = ref(false)
const loading = ref(false)
/**
* 表单数据
*/
const initialFormData = {
member_id: '',
member_no: '',
pid: '',
username: '',
mobile: '',
password: '',
nickname: '',
headimg: '',
member_level: '',
member_label: '',
wx_openid: '',
weapp_openid: '',
wx_unionid: '',
ali_openid: '',
douyin_openid: '',
register_channel: '',
register_type: '',
login_ip: '',
login_type: '',
login_channel: '',
login_count: '',
login_time: '',
last_visit_time: '',
last_consum_time: '',
sex: '',
status: '',
birthday: '',
point: '',
point_get: '',
balance: '',
balance_get: '',
money: '',
money_get: '',
money_cash_outing: '',
growth: '',
growth_get: '',
commission: '',
commission_get: '',
commission_cash_outing: '',
is_member: '',
member_time: '',
address: '',
}
const formData: Record<string, any> = reactive({ ...initialFormData })
const formRef = ref<FormInstance>()
//
const formRules = computed(() => {
return {
member_no: [
{ required: true, message: t('memberNoPlaceholder'), trigger: 'blur' },
]
,
pid: [
{ required: true, message: t('pidPlaceholder'), trigger: 'blur' },
]
,
username: [
{ required: true, message: t('usernamePlaceholder'), trigger: 'blur' },
]
,
mobile: [
{ required: true, message: t('mobilePlaceholder'), trigger: 'blur' },
]
,
password: [
{ required: true, message: t('passwordPlaceholder'), trigger: 'blur' },
]
,
nickname: [
{ required: true, message: t('nicknamePlaceholder'), trigger: 'blur' },
]
,
headimg: [
{ required: true, message: t('headimgPlaceholder'), trigger: 'blur' },
]
,
member_level: [
{ required: true, message: t('memberLevelPlaceholder'), trigger: 'blur' },
]
,
member_label: [
{ required: true, message: t('memberLabelPlaceholder'), trigger: 'blur' },
]
,
wx_openid: [
{ required: true, message: t('wxOpenidPlaceholder'), trigger: 'blur' },
]
,
weapp_openid: [
{ required: true, message: t('weappOpenidPlaceholder'), trigger: 'blur' },
]
,
wx_unionid: [
{ required: true, message: t('wxUnionidPlaceholder'), trigger: 'blur' },
]
,
ali_openid: [
{ required: true, message: t('aliOpenidPlaceholder'), trigger: 'blur' },
]
,
douyin_openid: [
{ required: true, message: t('douyinOpenidPlaceholder'), trigger: 'blur' },
]
,
register_channel: [
{ required: true, message: t('registerChannelPlaceholder'), trigger: 'blur' },
]
,
register_type: [
{ required: true, message: t('registerTypePlaceholder'), trigger: 'blur' },
]
,
login_ip: [
{ required: true, message: t('loginIpPlaceholder'), trigger: 'blur' },
]
,
login_type: [
{ required: true, message: t('loginTypePlaceholder'), trigger: 'blur' },
]
,
login_channel: [
{ required: true, message: t('loginChannelPlaceholder'), trigger: 'blur' },
]
,
login_count: [
{ required: true, message: t('loginCountPlaceholder'), trigger: 'blur' },
]
,
login_time: [
{ required: true, message: t('loginTimePlaceholder'), trigger: 'blur' },
]
,
last_visit_time: [
{ required: true, message: t('lastVisitTimePlaceholder'), trigger: 'blur' },
]
,
last_consum_time: [
{ required: true, message: t('lastConsumTimePlaceholder'), trigger: 'blur' },
]
,
sex: [
{ required: true, message: t('sexPlaceholder'), trigger: 'blur' },
]
,
status: [
{ required: true, message: t('statusPlaceholder'), trigger: 'blur' },
]
,
birthday: [
{ required: true, message: t('birthdayPlaceholder'), trigger: 'blur' },
]
,
point: [
{ required: true, message: t('pointPlaceholder'), trigger: 'blur' },
]
,
point_get: [
{ required: true, message: t('pointGetPlaceholder'), trigger: 'blur' },
]
,
balance: [
{ required: true, message: t('balancePlaceholder'), trigger: 'blur' },
]
,
balance_get: [
{ required: true, message: t('balanceGetPlaceholder'), trigger: 'blur' },
]
,
money: [
{ required: true, message: t('moneyPlaceholder'), trigger: 'blur' },
]
,
money_get: [
{ required: true, message: t('moneyGetPlaceholder'), trigger: 'blur' },
]
,
money_cash_outing: [
{ required: true, message: t('moneyCashOutingPlaceholder'), trigger: 'blur' },
]
,
growth: [
{ required: true, message: t('growthPlaceholder'), trigger: 'blur' },
]
,
growth_get: [
{ required: true, message: t('growthGetPlaceholder'), trigger: 'blur' },
]
,
commission: [
{ required: true, message: t('commissionPlaceholder'), trigger: 'blur' },
]
,
commission_get: [
{ required: true, message: t('commissionGetPlaceholder'), trigger: 'blur' },
]
,
commission_cash_outing: [
{ required: true, message: t('commissionCashOutingPlaceholder'), trigger: 'blur' },
]
,
is_member: [
{ required: true, message: t('isMemberPlaceholder'), trigger: 'blur' },
]
,
member_time: [
{ required: true, message: t('memberTimePlaceholder'), trigger: 'blur' },
]
,
address: [
{ required: true, message: t('addressPlaceholder'), trigger: 'blur' },
]
,
}
})
const emit = defineEmits(['complete'])
/**
* 确认
* @param formEl
*/
const confirm = async (formEl: FormInstance | undefined) => {
if (loading.value || !formEl) return
let save = formData.member_id ? editUsers : addUsers
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
})
}
})
}
//
let sexList = ref([])
const sexDictList = async () => {
sexList.value = await (await useDictionary('users_sex')).data.dictionary
}
sexDictList();
watch(() => sexList.value, () => { formData.sex = sexList.value[0].value })
let statusList = ref([])
const statusDictList = async () => {
statusList.value = await (await useDictionary('is_radio')).data.dictionary
}
statusDictList();
watch(() => statusList.value, () => { formData.status = statusList.value[0].value })
let is_memberList = ref([])
const is_memberDictList = async () => {
is_memberList.value = await (await useDictionary('is_radio')).data.dictionary
}
is_memberDictList();
watch(() => is_memberList.value, () => { formData.is_member = is_memberList.value[0].value })
let is_delList = ref([])
const is_delDictList = async () => {
is_delList.value = await (await useDictionary('is_radio')).data.dictionary
}
is_delDictList();
watch(() => is_delList.value, () => { formData.is_del = is_delList.value[0].value })
const pidList = ref([] as any[])
const setPidList = async () => {
pidList.value = await (await getWithUsersList({})).data
}
setPidList()
const setFormData = async (row: any = null) => {
Object.assign(formData, initialFormData)
loading.value = true
if(row){
const data = await (await getUsersInfo(row.member_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>

481
niucloud/addon/zhjw/admin/views/users/users.vue

@ -1,481 +0,0 @@
<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('addUsers') }}
</el-button>
</div>
<el-card class="box-card !border-none my-[10px] table-search-wrap" shadow="never">
<el-form :inline="true" :model="usersTable.searchParam" ref="searchFormRef">
<el-form-item :label="t('username')" prop="username">
<el-input v-model="usersTable.searchParam.username" :placeholder="t('usernamePlaceholder')" />
</el-form-item>
<el-form-item :label="t('mobile')" prop="mobile">
<el-input v-model="usersTable.searchParam.mobile" :placeholder="t('mobilePlaceholder')" />
</el-form-item>
<el-form-item :label="t('nickname')" prop="nickname">
<el-input v-model="usersTable.searchParam.nickname" :placeholder="t('nicknamePlaceholder')" />
</el-form-item>
<el-form-item :label="t('memberLevel')" prop="member_level">
<el-input v-model="usersTable.searchParam.member_level" :placeholder="t('memberLevelPlaceholder')" />
</el-form-item>
<el-form-item :label="t('memberLabel')" prop="member_label">
<el-input v-model="usersTable.searchParam.member_label" :placeholder="t('memberLabelPlaceholder')" />
</el-form-item>
<el-form-item :label="t('wxOpenid')" prop="wx_openid">
<el-input v-model="usersTable.searchParam.wx_openid" :placeholder="t('wxOpenidPlaceholder')" />
</el-form-item>
<el-form-item :label="t('weappOpenid')" prop="weapp_openid">
<el-input v-model="usersTable.searchParam.weapp_openid" :placeholder="t('weappOpenidPlaceholder')" />
</el-form-item>
<el-form-item :label="t('wxUnionid')" prop="wx_unionid">
<el-input v-model="usersTable.searchParam.wx_unionid" :placeholder="t('wxUnionidPlaceholder')" />
</el-form-item>
<el-form-item :label="t('aliOpenid')" prop="ali_openid">
<el-input v-model="usersTable.searchParam.ali_openid" :placeholder="t('aliOpenidPlaceholder')" />
</el-form-item>
<el-form-item :label="t('douyinOpenid')" prop="douyin_openid">
<el-input v-model="usersTable.searchParam.douyin_openid" :placeholder="t('douyinOpenidPlaceholder')" />
</el-form-item>
<el-form-item :label="t('registerChannel')" prop="register_channel">
<el-input v-model="usersTable.searchParam.register_channel" :placeholder="t('registerChannelPlaceholder')" />
</el-form-item>
<el-form-item :label="t('registerType')" prop="register_type">
<el-input v-model="usersTable.searchParam.register_type" :placeholder="t('registerTypePlaceholder')" />
</el-form-item>
<el-form-item :label="t('loginIp')" prop="login_ip">
<el-input v-model="usersTable.searchParam.login_ip" :placeholder="t('loginIpPlaceholder')" />
</el-form-item>
<el-form-item :label="t('loginType')" prop="login_type">
<el-input v-model="usersTable.searchParam.login_type" :placeholder="t('loginTypePlaceholder')" />
</el-form-item>
<el-form-item :label="t('loginChannel')" prop="login_channel">
<el-input v-model="usersTable.searchParam.login_channel" :placeholder="t('loginChannelPlaceholder')" />
</el-form-item>
<el-form-item :label="t('loginCount')" prop="login_count">
<el-input v-model="usersTable.searchParam.login_count" :placeholder="t('loginCountPlaceholder')" />
</el-form-item>
<el-form-item :label="t('loginTime')" prop="login_time">
<el-input v-model="usersTable.searchParam.login_time" :placeholder="t('loginTimePlaceholder')" />
</el-form-item>
<el-form-item :label="t('lastVisitTime')" prop="last_visit_time">
<el-input v-model="usersTable.searchParam.last_visit_time" :placeholder="t('lastVisitTimePlaceholder')" />
</el-form-item>
<el-form-item :label="t('lastConsumTime')" prop="last_consum_time">
<el-input v-model="usersTable.searchParam.last_consum_time" :placeholder="t('lastConsumTimePlaceholder')" />
</el-form-item>
<el-form-item :label="t('sex')" prop="sex">
<el-select class="w-[280px]" v-model="usersTable.searchParam.sex" clearable :placeholder="t('sexPlaceholder')">
<el-option label="全部" value=""></el-option>
<el-option
v-for="(item, index) in sexList"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('status')" prop="status">
<el-select class="w-[280px]" v-model="usersTable.searchParam.status" clearable :placeholder="t('statusPlaceholder')">
<el-option label="全部" value=""></el-option>
<el-option
v-for="(item, index) in statusList"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('birthday')" prop="birthday">
<el-date-picker v-model="usersTable.searchParam.birthday" type="datetimerange" format="YYYY-MM-DD hh:mm:ss"
:start-placeholder="t('startDate')" :end-placeholder="t('endDate')" />
</el-form-item>
<el-form-item :label="t('point')" prop="point">
<el-input v-model="usersTable.searchParam.point" :placeholder="t('pointPlaceholder')" />
</el-form-item>
<el-form-item :label="t('pointGet')" prop="point_get">
<el-input v-model="usersTable.searchParam.point_get" :placeholder="t('pointGetPlaceholder')" />
</el-form-item>
<el-form-item :label="t('balance')" prop="balance">
<el-input v-model="usersTable.searchParam.balance" :placeholder="t('balancePlaceholder')" />
</el-form-item>
<el-form-item :label="t('balanceGet')" prop="balance_get">
<el-input v-model="usersTable.searchParam.balance_get" :placeholder="t('balanceGetPlaceholder')" />
</el-form-item>
<el-form-item :label="t('money')" prop="money">
<el-input v-model="usersTable.searchParam.money" :placeholder="t('moneyPlaceholder')" />
</el-form-item>
<el-form-item :label="t('moneyGet')" prop="money_get">
<el-input v-model="usersTable.searchParam.money_get" :placeholder="t('moneyGetPlaceholder')" />
</el-form-item>
<el-form-item :label="t('moneyCashOuting')" prop="money_cash_outing">
<el-input v-model="usersTable.searchParam.money_cash_outing" :placeholder="t('moneyCashOutingPlaceholder')" />
</el-form-item>
<el-form-item :label="t('growth')" prop="growth">
<el-input v-model="usersTable.searchParam.growth" :placeholder="t('growthPlaceholder')" />
</el-form-item>
<el-form-item :label="t('growthGet')" prop="growth_get">
<el-input v-model="usersTable.searchParam.growth_get" :placeholder="t('growthGetPlaceholder')" />
</el-form-item>
<el-form-item :label="t('commission')" prop="commission">
<el-input v-model="usersTable.searchParam.commission" :placeholder="t('commissionPlaceholder')" />
</el-form-item>
<el-form-item :label="t('commissionGet')" prop="commission_get">
<el-input v-model="usersTable.searchParam.commission_get" :placeholder="t('commissionGetPlaceholder')" />
</el-form-item>
<el-form-item :label="t('commissionCashOuting')" prop="commission_cash_outing">
<el-input v-model="usersTable.searchParam.commission_cash_outing" :placeholder="t('commissionCashOutingPlaceholder')" />
</el-form-item>
<el-form-item :label="t('isMember')" prop="is_member">
<el-select class="w-[280px]" v-model="usersTable.searchParam.is_member" clearable :placeholder="t('isMemberPlaceholder')">
<el-option label="全部" value=""></el-option>
<el-option
v-for="(item, index) in is_memberList"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('memberTime')" prop="member_time">
<el-date-picker v-model="usersTable.searchParam.member_time" type="datetimerange" format="YYYY-MM-DD hh:mm:ss"
:start-placeholder="t('startDate')" :end-placeholder="t('endDate')" />
</el-form-item>
<el-form-item :label="t('createTime')" prop="create_time">
<el-date-picker v-model="usersTable.searchParam.create_time" type="datetimerange" format="YYYY-MM-DD hh:mm:ss"
:start-placeholder="t('startDate')" :end-placeholder="t('endDate')" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="loadUsersList()">{{ 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="usersTable.data" size="large" v-loading="usersTable.loading">
<template #empty>
<span>{{ !usersTable.loading ? t('emptyData') : '' }}</span>
</template>
<el-table-column prop="member_id" :label="t('memberId')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="member_no" :label="t('memberNo')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="pid_name" :label="t('pid')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="username" :label="t('username')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="mobile" :label="t('mobile')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="password" :label="t('password')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="nickname" :label="t('nickname')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column :label="t('headimg')" width="100" align="left">
<template #default="{ row }">
<el-avatar v-if="row.headimg" :src="img(row.headimg)" />
<el-avatar v-else icon="UserFilled" />
</template>
</el-table-column>
<el-table-column prop="member_level" :label="t('memberLevel')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="member_label" :label="t('memberLabel')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="wx_openid" :label="t('wxOpenid')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="weapp_openid" :label="t('weappOpenid')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="wx_unionid" :label="t('wxUnionid')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="ali_openid" :label="t('aliOpenid')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="douyin_openid" :label="t('douyinOpenid')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="register_channel" :label="t('registerChannel')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="register_type" :label="t('registerType')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="login_ip" :label="t('loginIp')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="login_type" :label="t('loginType')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="login_channel" :label="t('loginChannel')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="login_count" :label="t('loginCount')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="login_time" :label="t('loginTime')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="last_visit_time" :label="t('lastVisitTime')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="last_consum_time" :label="t('lastConsumTime')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column :label="t('sex')" min-width="180" align="center" :show-overflow-tooltip="true">
<template #default="{ row }">
<div v-for="(item, index) in sexList">
<div v-if="item.value == row.sex">{{ item.name }}</div>
</div>
</template>
</el-table-column>
<el-table-column :label="t('status')" min-width="180" align="center" :show-overflow-tooltip="true">
<template #default="{ row }">
<div v-for="(item, index) in statusList">
<div v-if="item.value == row.status">{{ item.name }}</div>
</div>
</template>
</el-table-column>
<el-table-column prop="birthday" :label="t('birthday')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="point" :label="t('point')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="point_get" :label="t('pointGet')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="balance" :label="t('balance')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="balance_get" :label="t('balanceGet')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="money" :label="t('money')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="money_get" :label="t('moneyGet')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="money_cash_outing" :label="t('moneyCashOuting')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="growth" :label="t('growth')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="growth_get" :label="t('growthGet')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="commission" :label="t('commission')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="commission_get" :label="t('commissionGet')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="commission_cash_outing" :label="t('commissionCashOuting')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column :label="t('isMember')" min-width="180" align="center" :show-overflow-tooltip="true">
<template #default="{ row }">
<div v-for="(item, index) in is_memberList">
<div v-if="item.value == row.is_member">{{ item.name }}</div>
</div>
</template>
</el-table-column>
<el-table-column :label="t('memberTime')" min-width="180" align="center" :show-overflow-tooltip="true">
<template #default="{ row }">
{{ row.member_time || '' }}
</template>
</el-table-column>
<el-table-column prop="address" :label="t('address')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column :label="t('createTime')" min-width="180" align="center" :show-overflow-tooltip="true">
<template #default="{ row }">
{{ row.create_time || '' }}
</template>
</el-table-column>
<el-table-column :label="t('updateTime')" min-width="180" align="center" :show-overflow-tooltip="true">
<template #default="{ row }">
{{ row.update_time || '' }}
</template>
</el-table-column>
<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.member_id)">{{ t('delete') }}</el-button>
</template>
</el-table-column>
</el-table>
<div class="mt-[16px] flex justify-end">
<el-pagination v-model:current-page="usersTable.page" v-model:page-size="usersTable.limit"
layout="total, sizes, prev, pager, next, jumper" :total="usersTable.total"
@size-change="loadUsersList()" @current-change="loadUsersList" />
</div>
</div>
</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 { getUsersList, deleteUsers, getWithUsersList } from '@/addon/zhjw/api/users'
import { img } from '@/utils/common'
import { ElMessageBox,FormInstance } from 'element-plus'
import { useRouter } from 'vue-router'
import { useRoute } from 'vue-router'
const route = useRoute()
const pageName = route.meta.title;
let usersTable = reactive({
page: 1,
limit: 10,
total: 0,
loading: true,
data: [],
searchParam:{
"username":"",
"mobile":"",
"nickname":"",
"member_level":"",
"member_label":"",
"wx_openid":"",
"weapp_openid":"",
"wx_unionid":"",
"ali_openid":"",
"douyin_openid":"",
"register_channel":"",
"register_type":"",
"login_ip":"",
"login_type":"",
"login_channel":"",
"login_count":"",
"login_time":"",
"last_visit_time":"",
"last_consum_time":"",
"sex":"",
"status":"",
"birthday":[],
"point":"",
"point_get":"",
"balance":"",
"balance_get":"",
"money":"",
"money_get":"",
"money_cash_outing":"",
"growth":"",
"growth_get":"",
"commission":"",
"commission_get":"",
"commission_cash_outing":"",
"is_member":"",
"member_time":[],
"create_time":""
}
})
const searchFormRef = ref<FormInstance>()
//
const selectData = ref<any[]>([])
//
const sexList = ref([] as any[])
const sexDictList = async () => {
sexList.value = await (await useDictionary('users_sex')).data.dictionary
}
sexDictList();
const statusList = ref([] as any[])
const statusDictList = async () => {
statusList.value = await (await useDictionary('is_radio')).data.dictionary
}
statusDictList();
const is_memberList = ref([] as any[])
const is_memberDictList = async () => {
is_memberList.value = await (await useDictionary('is_radio')).data.dictionary
}
is_memberDictList();
const is_delList = ref([] as any[])
const is_delDictList = async () => {
is_delList.value = await (await useDictionary('is_radio')).data.dictionary
}
is_delDictList();
/**
* 获取用户管理列表
*/
const loadUsersList = (page: number = 1) => {
usersTable.loading = true
usersTable.page = page
getUsersList({
page: usersTable.page,
limit: usersTable.limit,
...usersTable.searchParam
}).then(res => {
usersTable.loading = false
usersTable.data = res.data.data
usersTable.total = res.data.total
}).catch(() => {
usersTable.loading = false
})
}
loadUsersList()
const router = useRouter()
/**
* 添加用户管理
*/
const addEvent = () => {
router.push('/users/users_edit')
}
/**
* 编辑用户管理
* @param data
*/
const editEvent = (data: any) => {
router.push('/users/users_edit?id='+data.member_id)
}
/**
* 删除用户管理
*/
const deleteEvent = (id: number) => {
ElMessageBox.confirm(t('usersDeleteTips'), t('warning'),
{
confirmButtonText: t('confirm'),
cancelButtonText: t('cancel'),
type: 'warning',
}
).then(() => {
deleteUsers(id).then(() => {
loadUsersList()
}).catch(() => {
})
})
}
const pidList = ref([])
const setPidList = async () => {
pidList.value = await (await getWithUsersList({})).data
}
setPidList()
const resetForm = (formEl: FormInstance | undefined) => {
if (!formEl) return
formEl.resetFields()
loadUsersList()
}
</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>

612
niucloud/addon/zhjw/admin/views/users/users_edit.vue

@ -1,612 +0,0 @@
<template>
<div class="main-container">
<div class="detail-head">
<div class="left" @click="back()">
<span class="iconfont iconxiangzuojiantou !text-xs"></span>
<span class="ml-[1px]">{{t('returnToPreviousPage')}}</span>
</div>
<span class="adorn">|</span>
<span class="right">{{ pageName }}</span>
</div>
<el-card class="box-card !border-none" shadow="never">
<el-form :model="formData" label-width="90px" ref="formRef" :rules="formRules" class="page-form">
<el-form-item :label="t('memberNo')" >
<el-input v-model="formData.member_no" clearable :placeholder="t('memberNoPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('pid')" >
<el-select class="input-width" v-model="formData.pid" clearable :placeholder="t('pidPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in pidList"
:key="index"
:label="item['mobile']"
:value="item['member_id']"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('username')" prop="username">
<el-input v-model="formData.username" clearable :placeholder="t('usernamePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('mobile')" prop="mobile">
<el-input v-model="formData.mobile" clearable :placeholder="t('mobilePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('password')" prop="password">
<el-input v-model="formData.password" clearable :placeholder="t('passwordPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('nickname')" prop="nickname">
<el-input v-model="formData.nickname" clearable :placeholder="t('nicknamePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('headimg')">
<upload-image v-model="formData.headimg" />
</el-form-item>
<el-form-item :label="t('memberLevel')" >
<el-input v-model="formData.member_level" clearable :placeholder="t('memberLevelPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('memberLabel')" >
<el-input v-model="formData.member_label" clearable :placeholder="t('memberLabelPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('wxOpenid')" >
<el-input v-model="formData.wx_openid" clearable :placeholder="t('wxOpenidPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('weappOpenid')" >
<el-input v-model="formData.weapp_openid" clearable :placeholder="t('weappOpenidPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('wxUnionid')" >
<el-input v-model="formData.wx_unionid" clearable :placeholder="t('wxUnionidPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('aliOpenid')" >
<el-input v-model="formData.ali_openid" clearable :placeholder="t('aliOpenidPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('douyinOpenid')" >
<el-input v-model="formData.douyin_openid" clearable :placeholder="t('douyinOpenidPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('registerChannel')" >
<el-input v-model="formData.register_channel" clearable :placeholder="t('registerChannelPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('registerType')" >
<el-input v-model="formData.register_type" clearable :placeholder="t('registerTypePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('loginIp')" >
<el-input v-model="formData.login_ip" clearable :placeholder="t('loginIpPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('loginType')" >
<el-input v-model="formData.login_type" clearable :placeholder="t('loginTypePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('loginChannel')" >
<el-input v-model="formData.login_channel" clearable :placeholder="t('loginChannelPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('loginCount')" >
<el-input v-model="formData.login_count" clearable :placeholder="t('loginCountPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('loginTime')" >
<el-input v-model="formData.login_time" clearable :placeholder="t('loginTimePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('lastVisitTime')" >
<el-input v-model="formData.last_visit_time" clearable :placeholder="t('lastVisitTimePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('lastConsumTime')" >
<el-input v-model="formData.last_consum_time" clearable :placeholder="t('lastConsumTimePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('sex')" prop="sex">
<el-select class="input-width" v-model="formData.sex" clearable :placeholder="t('sexPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in sexList"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('status')" prop="status">
<el-select class="input-width" v-model="formData.status" clearable :placeholder="t('statusPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in statusList"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('birthday')" class="input-width">
<el-date-picker
class="flex-1 !flex"
v-model="formData.birthday"
clearable
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
:placeholder="t('birthdayPlaceholder')">
</el-date-picker>
</el-form-item>
<el-form-item :label="t('point')" >
<el-input v-model="formData.point" clearable :placeholder="t('pointPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('pointGet')" >
<el-input v-model="formData.point_get" clearable :placeholder="t('pointGetPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('balance')" >
<el-input v-model="formData.balance" clearable :placeholder="t('balancePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('balanceGet')" >
<el-input v-model="formData.balance_get" clearable :placeholder="t('balanceGetPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('money')" >
<el-input v-model="formData.money" clearable :placeholder="t('moneyPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('moneyGet')" >
<el-input v-model="formData.money_get" clearable :placeholder="t('moneyGetPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('moneyCashOuting')" >
<el-input v-model="formData.money_cash_outing" clearable :placeholder="t('moneyCashOutingPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('growth')" >
<el-input v-model="formData.growth" clearable :placeholder="t('growthPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('growthGet')" >
<el-input v-model="formData.growth_get" clearable :placeholder="t('growthGetPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('commission')" >
<el-input v-model="formData.commission" clearable :placeholder="t('commissionPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('commissionGet')" >
<el-input v-model="formData.commission_get" clearable :placeholder="t('commissionGetPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('commissionCashOuting')" >
<el-input v-model="formData.commission_cash_outing" clearable :placeholder="t('commissionCashOutingPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('isMember')" prop="is_member">
<el-select class="input-width" v-model="formData.is_member" clearable :placeholder="t('isMemberPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in is_memberList"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('memberTime')" class="input-width">
<el-date-picker
class="flex-1 !flex"
v-model="formData.member_time"
clearable
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
:placeholder="t('memberTimePlaceholder')">
</el-date-picker>
</el-form-item>
<el-form-item :label="t('address')" >
<el-input v-model="formData.address" clearable :placeholder="t('addressPlaceholder')" class="input-width" />
</el-form-item>
</el-form>
</el-card>
<div class="fixed-footer-wrap">
<div class="fixed-footer">
<el-button type="primary" @click="onSave(formRef)">{{ t('save') }}</el-button>
<el-button @click="back()">{{ t('cancel') }}</el-button>
</div>
</div>
</div>
</template>
<script lang="ts" setup>
import { ref, reactive, computed, watch } from 'vue'
import { t } from '@/lang'
import { useDictionary } from '@/app/api/dict'
import type { FormInstance } from 'element-plus'
import { getUsersInfo,addUsers,editUsers, getWithUsersList } from '@/addon/zhjw/api/users';
import { useRoute } from 'vue-router'
const route = useRoute()
const id:number = parseInt(route.query.id);
const loading = ref(false)
const pageName = route.meta.title
/**
* 表单数据
*/
const initialFormData = {
member_id: 0,
member_no: '',
pid: '',
username: '',
mobile: '',
password: '',
nickname: '',
headimg: '',
member_level: 0,
member_label: '',
wx_openid: '',
weapp_openid: '',
wx_unionid: '',
ali_openid: '',
douyin_openid: '',
register_channel: '',
register_type: '',
login_ip: '',
login_type: '',
login_channel: '',
login_count: 0,
login_time: 0,
last_visit_time: 0,
last_consum_time: 0,
sex: 0,
status: 0,
birthday: '',
point: 0,
point_get: 0,
balance: '',
balance_get: '',
money: '',
money_get: '',
money_cash_outing: '',
growth: 0,
growth_get: 0,
commission: '',
commission_get: '',
commission_cash_outing: '',
is_member: 0,
member_time: 0,
address: '',
}
const formData: Record<string, any> = reactive({ ...initialFormData })
const setFormData = async (id:number = 0) => {
Object.assign(formData, initialFormData)
const data = await (await getUsersInfo(id)).data
Object.keys(formData).forEach((key: string) => {
if (data[key] != undefined) formData[key] = data[key]
})
}
if(id) setFormData(id);
const formRef = ref<FormInstance>()
//
const selectData = ref<any[]>([])
//
let sexList = ref([])
const sexDictList = async () => {
sexList.value = await (await useDictionary('users_sex')).data.dictionary
}
sexDictList();
watch(() => sexList.value, () => { formData.sex = sexList.value[0].value })
let statusList = ref([])
const statusDictList = async () => {
statusList.value = await (await useDictionary('is_radio')).data.dictionary
}
statusDictList();
watch(() => statusList.value, () => { formData.status = statusList.value[0].value })
let is_memberList = ref([])
const is_memberDictList = async () => {
is_memberList.value = await (await useDictionary('is_radio')).data.dictionary
}
is_memberDictList();
watch(() => is_memberList.value, () => { formData.is_member = is_memberList.value[0].value })
let is_delList = ref([])
const is_delDictList = async () => {
is_delList.value = await (await useDictionary('is_radio')).data.dictionary
}
is_delDictList();
watch(() => is_delList.value, () => { formData.is_del = is_delList.value[0].value })
const pidList = ref([] as any[])
const setPidList = async () => {
pidList.value = await (await getWithUsersList({})).data
}
setPidList()
//
const formRules = computed(() => {
return {
member_no: [
{ required: true, message: t('memberNoPlaceholder'), trigger: 'blur' },
]
,
pid: [
{ required: true, message: t('pidPlaceholder'), trigger: 'blur' },
]
,
username: [
{ required: true, message: t('usernamePlaceholder'), trigger: 'blur' },
]
,
mobile: [
{ required: true, message: t('mobilePlaceholder'), trigger: 'blur' },
]
,
password: [
{ required: true, message: t('passwordPlaceholder'), trigger: 'blur' },
]
,
nickname: [
{ required: true, message: t('nicknamePlaceholder'), trigger: 'blur' },
]
,
headimg: [
{ required: true, message: t('headimgPlaceholder'), trigger: 'blur' },
]
,
member_level: [
{ required: true, message: t('memberLevelPlaceholder'), trigger: 'blur' },
]
,
member_label: [
{ required: true, message: t('memberLabelPlaceholder'), trigger: 'blur' },
]
,
wx_openid: [
{ required: true, message: t('wxOpenidPlaceholder'), trigger: 'blur' },
]
,
weapp_openid: [
{ required: true, message: t('weappOpenidPlaceholder'), trigger: 'blur' },
]
,
wx_unionid: [
{ required: true, message: t('wxUnionidPlaceholder'), trigger: 'blur' },
]
,
ali_openid: [
{ required: true, message: t('aliOpenidPlaceholder'), trigger: 'blur' },
]
,
douyin_openid: [
{ required: true, message: t('douyinOpenidPlaceholder'), trigger: 'blur' },
]
,
register_channel: [
{ required: true, message: t('registerChannelPlaceholder'), trigger: 'blur' },
]
,
register_type: [
{ required: true, message: t('registerTypePlaceholder'), trigger: 'blur' },
]
,
login_ip: [
{ required: true, message: t('loginIpPlaceholder'), trigger: 'blur' },
]
,
login_type: [
{ required: true, message: t('loginTypePlaceholder'), trigger: 'blur' },
]
,
login_channel: [
{ required: true, message: t('loginChannelPlaceholder'), trigger: 'blur' },
]
,
login_count: [
{ required: true, message: t('loginCountPlaceholder'), trigger: 'blur' },
]
,
login_time: [
{ required: true, message: t('loginTimePlaceholder'), trigger: 'blur' },
]
,
last_visit_time: [
{ required: true, message: t('lastVisitTimePlaceholder'), trigger: 'blur' },
]
,
last_consum_time: [
{ required: true, message: t('lastConsumTimePlaceholder'), trigger: 'blur' },
]
,
sex: [
{ required: true, message: t('sexPlaceholder'), trigger: 'blur' },
]
,
status: [
{ required: true, message: t('statusPlaceholder'), trigger: 'blur' },
]
,
birthday: [
{ required: true, message: t('birthdayPlaceholder'), trigger: 'blur' },
]
,
point: [
{ required: true, message: t('pointPlaceholder'), trigger: 'blur' },
]
,
point_get: [
{ required: true, message: t('pointGetPlaceholder'), trigger: 'blur' },
]
,
balance: [
{ required: true, message: t('balancePlaceholder'), trigger: 'blur' },
]
,
balance_get: [
{ required: true, message: t('balanceGetPlaceholder'), trigger: 'blur' },
]
,
money: [
{ required: true, message: t('moneyPlaceholder'), trigger: 'blur' },
]
,
money_get: [
{ required: true, message: t('moneyGetPlaceholder'), trigger: 'blur' },
]
,
money_cash_outing: [
{ required: true, message: t('moneyCashOutingPlaceholder'), trigger: 'blur' },
]
,
growth: [
{ required: true, message: t('growthPlaceholder'), trigger: 'blur' },
]
,
growth_get: [
{ required: true, message: t('growthGetPlaceholder'), trigger: 'blur' },
]
,
commission: [
{ required: true, message: t('commissionPlaceholder'), trigger: 'blur' },
]
,
commission_get: [
{ required: true, message: t('commissionGetPlaceholder'), trigger: 'blur' },
]
,
commission_cash_outing: [
{ required: true, message: t('commissionCashOutingPlaceholder'), trigger: 'blur' },
]
,
is_member: [
{ required: true, message: t('isMemberPlaceholder'), trigger: 'blur' },
]
,
member_time: [
{ required: true, message: t('memberTimePlaceholder'), trigger: 'blur' },
]
,
address: [
{ required: true, message: t('addressPlaceholder'), trigger: 'blur' },
]
,
}
})
const onSave = async (formEl: FormInstance | undefined) => {
if (loading.value || !formEl) return
await formEl.validate(async (valid) => {
if (valid) {
loading.value = true
let data = formData
const save = id ? editUsers : addUsers
save(data).then(res => {
loading.value = false
history.back()
}).catch(err => {
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()
}
}
const back = () => {
history.back()
}
</script>
<style lang="scss" scoped></style>

12
niucloud/addon/zhjw/app/adminapi/controller/contracts/Contracts.php

@ -57,8 +57,8 @@ class Contracts extends BaseAdminController
["title",""],
["content",""],
["file_data",""],
["start_date","2025-03-06 13:28:06"],
["end_date","2025-03-06 13:28:06"],
["start_date","2025-03-14 15:30:15"],
["end_date","2025-03-14 15:30:15"],
["status",""],
]);
@ -78,8 +78,8 @@ class Contracts extends BaseAdminController
["title",""],
["content",""],
["file_data",""],
["start_date","2025-03-06 13:28:06"],
["end_date","2025-03-06 13:28:06"],
["start_date","2025-03-14 15:30:15"],
["end_date","2025-03-14 15:30:15"],
["status",""],
]);
@ -99,8 +99,8 @@ class Contracts extends BaseAdminController
}
public function getUsersAll(){
return success(( new ContractsService())->getUsersAll());
public function getStudentsAll(){
return success(( new ContractsService())->getStudentsAll());
}
}

20
niucloud/addon/zhjw/app/adminapi/controller/orders/Orders.php

@ -16,14 +16,14 @@ use addon\zhjw\app\service\admin\orders\OrdersService;
/**
* 智慧教务-订单管理控制器
* 订单管理控制器
* Class Orders
* @package addon\zhjw\app\adminapi\controller\orders
*/
class Orders extends BaseAdminController
{
/**
* 获取智慧教务-订单管理列表
* 获取订单管理列表
* @return \think\Response
*/
public function lists(){
@ -41,7 +41,7 @@ class Orders extends BaseAdminController
}
/**
* 智慧教务-订单管理详情
* 订单管理详情
* @param int $id
* @return \think\Response
*/
@ -50,7 +50,7 @@ class Orders extends BaseAdminController
}
/**
* 添加智慧教务-订单管理
* 添加订单管理
* @return \think\Response
*/
public function add(){
@ -70,8 +70,8 @@ class Orders extends BaseAdminController
}
/**
* 智慧教务-订单管理编辑
* @param $id 智慧教务-订单管理id
* 订单管理编辑
* @param $id 订单管理id
* @return \think\Response
*/
public function edit(int $id){
@ -91,8 +91,8 @@ class Orders extends BaseAdminController
}
/**
* 智慧教务-订单管理删除
* @param $id 智慧教务-订单管理id
* 订单管理删除
* @param $id 订单管理id
* @return \think\Response
*/
public function del(int $id){
@ -101,8 +101,8 @@ class Orders extends BaseAdminController
}
public function getMemberAll(){
return success(( new OrdersService())->getMemberAll());
public function getStudentsAll(){
return success(( new OrdersService())->getStudentsAll());
}
public function getContractsAll(){

4
niucloud/addon/zhjw/app/adminapi/controller/students/Students.php

@ -101,8 +101,8 @@ class Students extends BaseAdminController
}
public function getUsersAll(){
return success(( new StudentsService())->getUsersAll());
public function getMemberAll(){
return success(( new StudentsService())->getMemberAll());
}
}

205
niucloud/addon/zhjw/app/adminapi/controller/users/Users.php

@ -1,205 +0,0 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的多应用管理平台
// +----------------------------------------------------------------------
// | 官方网址:https://www.niucloud.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace addon\zhjw\app\adminapi\controller\users;
use core\base\BaseAdminController;
use addon\zhjw\app\service\admin\users\UsersService;
/**
* 用户管理控制器
* Class Users
* @package addon\zhjw\app\adminapi\controller\users
*/
class Users extends BaseAdminController
{
/**
* 获取用户管理列表
* @return \think\Response
*/
public function lists(){
$data = $this->request->params([
["username",""],
["mobile",""],
["nickname",""],
["member_level",""],
["member_label",""],
["wx_openid",""],
["weapp_openid",""],
["wx_unionid",""],
["ali_openid",""],
["douyin_openid",""],
["register_channel",""],
["register_type",""],
["login_ip",""],
["login_type",""],
["login_channel",""],
["login_count",""],
["login_time",""],
["last_visit_time",""],
["last_consum_time",""],
["sex",""],
["status",""],
["birthday",["",""]],
["point",""],
["point_get",""],
["balance",""],
["balance_get",""],
["money",""],
["money_get",""],
["money_cash_outing",""],
["growth",""],
["growth_get",""],
["commission",""],
["commission_get",""],
["commission_cash_outing",""],
["is_member",""],
["member_time",["",""]],
["create_time",""]
]);
return success((new UsersService())->getPage($data));
}
/**
* 用户管理详情
* @param int $id
* @return \think\Response
*/
public function info(int $id){
return success((new UsersService())->getInfo($id));
}
/**
* 添加用户管理
* @return \think\Response
*/
public function add(){
$data = $this->request->params([
["member_no",""],
["pid",0],
["username",""],
["mobile",""],
["password",""],
["nickname",""],
["headimg",""],
["member_level",0],
["member_label",""],
["wx_openid",""],
["weapp_openid",""],
["wx_unionid",""],
["ali_openid",""],
["douyin_openid",""],
["register_channel",""],
["register_type",""],
["login_ip",""],
["login_type",""],
["login_channel",""],
["login_count",0],
["login_time",0],
["last_visit_time",0],
["last_consum_time",0],
["sex",0],
["status",0],
["birthday",""],
["point",0],
["point_get",0],
["balance",0.00],
["balance_get",0.00],
["money",0.00],
["money_get",0.00],
["money_cash_outing",0.00],
["growth",0],
["growth_get",0],
["commission",0.00],
["commission_get",0.00],
["commission_cash_outing",0.00],
["is_member",0],
["member_time",0],
["address",""],
]);
$this->validate($data, 'addon\zhjw\app\validate\users\Users.add');
$id = (new UsersService())->add($data);
return success('ADD_SUCCESS', ['id' => $id]);
}
/**
* 用户管理编辑
* @param $id 用户管理id
* @return \think\Response
*/
public function edit(int $id){
$data = $this->request->params([
["member_no",""],
["pid",0],
["username",""],
["mobile",""],
["password",""],
["nickname",""],
["headimg",""],
["member_level",0],
["member_label",""],
["wx_openid",""],
["weapp_openid",""],
["wx_unionid",""],
["ali_openid",""],
["douyin_openid",""],
["register_channel",""],
["register_type",""],
["login_ip",""],
["login_type",""],
["login_channel",""],
["login_count",0],
["login_time",0],
["last_visit_time",0],
["last_consum_time",0],
["sex",0],
["status",0],
["birthday",""],
["point",0],
["point_get",0],
["balance",0.00],
["balance_get",0.00],
["money",0.00],
["money_get",0.00],
["money_cash_outing",0.00],
["growth",0],
["growth_get",0],
["commission",0.00],
["commission_get",0.00],
["commission_cash_outing",0.00],
["is_member",0],
["member_time",0],
["address",""],
]);
$this->validate($data, 'addon\zhjw\app\validate\users\Users.edit');
(new UsersService())->edit($id, $data);
return success('EDIT_SUCCESS');
}
/**
* 用户管理删除
* @param $id 用户管理id
* @return \think\Response
*/
public function del(int $id){
(new UsersService())->del($id);
return success('DELETE_SUCCESS');
}
public function getUsersAll(){
return success(( new UsersService())->getUsersAll());
}
}

71
niucloud/addon/zhjw/app/adminapi/route/route.php

@ -259,6 +259,7 @@ Route::group('zhjw', function () {
]);
// USER_CODE_END -- zhjw_schedules
// USER_CODE_BEGIN -- zhjw_students
Route::group('zhjw', function () {
@ -274,29 +275,33 @@ Route::group('zhjw', function () {
//删除学员管理
Route::delete('students/:id', 'addon\zhjw\app\adminapi\controller\students\Students@del');
Route::get('users_all','addon\zhjw\app\adminapi\controller\students\Students@getUsersAll');
Route::get('member_all','addon\zhjw\app\adminapi\controller\students\Students@getMemberAll');
})->middleware([
AdminCheckToken::class,
AdminCheckRole::class,
AdminLog::class
]);
// USER_CODE_END -- zhjw_students
// USER_CODE_BEGIN -- zhjw_orders
Route::group('zhjw', function () {
//智慧教务-订单管理列表
//订单管理列表
Route::get('orders', 'addon\zhjw\app\adminapi\controller\orders\Orders@lists');
//智慧教务-订单管理详情
//订单管理详情
Route::get('orders/:id', 'addon\zhjw\app\adminapi\controller\orders\Orders@info');
//添加智慧教务-订单管理
//添加订单管理
Route::post('orders', 'addon\zhjw\app\adminapi\controller\orders\Orders@add');
//编辑智慧教务-订单管理
//编辑订单管理
Route::put('orders/:id', 'addon\zhjw\app\adminapi\controller\orders\Orders@edit');
//删除智慧教务-订单管理
//删除订单管理
Route::delete('orders/:id', 'addon\zhjw\app\adminapi\controller\orders\Orders@del');
Route::get('member_all','addon\zhjw\app\adminapi\controller\orders\Orders@getMemberAll');
Route::get('students_all','addon\zhjw\app\adminapi\controller\orders\Orders@getStudentsAll');
Route::get('contracts_all','addon\zhjw\app\adminapi\controller\orders\Orders@getContractsAll');
@ -305,53 +310,9 @@ Route::group('zhjw', function () {
AdminCheckRole::class,
AdminLog::class
]);
// USER_CODE_END -- zhjw_orders
Route::group('zhjw', function () {
//文章管理列表
Route::get('articles', 'addon\zhjw\app\adminapi\controller\articles\Articles@lists');
//文章管理详情
Route::get('articles/:id', 'addon\zhjw\app\adminapi\controller\articles\Articles@info');
//添加文章管理
Route::post('articles', 'addon\zhjw\app\adminapi\controller\articles\Articles@add');
//编辑文章管理
Route::put('articles/:id', 'addon\zhjw\app\adminapi\controller\articles\Articles@edit');
//删除文章管理
Route::delete('articles/:id', 'addon\zhjw\app\adminapi\controller\articles\Articles@del');
Route::get('sys_user_all','addon\zhjw\app\adminapi\controller\articles\Articles@getSysUserAll');
})->middleware([
AdminCheckToken::class,
AdminCheckRole::class,
AdminLog::class
]);
Route::group('zhjw', function () {
//用户管理列表
Route::get('users', 'addon\zhjw\app\adminapi\controller\users\Users@lists');
//用户管理详情
Route::get('users/:id', 'addon\zhjw\app\adminapi\controller\users\Users@info');
//添加用户管理
Route::post('users', 'addon\zhjw\app\adminapi\controller\users\Users@add');
//编辑用户管理
Route::put('users/:id', 'addon\zhjw\app\adminapi\controller\users\Users@edit');
//删除用户管理
Route::delete('users/:id', 'addon\zhjw\app\adminapi\controller\users\Users@del');
Route::get('users_all','addon\zhjw\app\adminapi\controller\users\Users@getUsersAll');
})->middleware([
AdminCheckToken::class,
AdminCheckRole::class,
AdminLog::class
]);
// USER_CODE_BEGIN -- zhjw_contracts
Route::group('zhjw', function () {
@ -366,11 +327,11 @@ Route::group('zhjw', function () {
//删除合同管理
Route::delete('contracts/:id', 'addon\zhjw\app\adminapi\controller\contracts\Contracts@del');
Route::get('users_all','addon\zhjw\app\adminapi\controller\contracts\Contracts@getUsersAll');
Route::get('students_all','addon\zhjw\app\adminapi\controller\contracts\Contracts@getStudentsAll');
})->middleware([
AdminCheckToken::class,
AdminCheckRole::class,
AdminLog::class
]);
// USER_CODE_END -- zhjw_students
// USER_CODE_END -- zhjw_contracts

6
niucloud/addon/zhjw/app/model/contracts/Contracts.php

@ -16,7 +16,7 @@ use think\model\concern\SoftDelete;
use think\model\relation\HasMany;
use think\model\relation\HasOne;
use addon\zhjw\app\model\users\Users;
use addon\zhjw\app\model\students\Students;
/**
* 合同管理模型
@ -147,8 +147,8 @@ class Contracts extends BaseModel
public function users(){
return $this->hasOne(Users::class, 'member_id', 'student_id')->joinType('left')->withField('mobile,member_id')->bind(['student_id_name'=>'mobile']);
public function students(){
return $this->hasOne(Students::class, 'id', 'student_id')->joinType('left')->withField('name,id')->bind(['student_id_name'=>'name']);
}
}

24
niucloud/addon/zhjw/app/model/orders/Orders.php

@ -16,12 +16,12 @@ use think\model\concern\SoftDelete;
use think\model\relation\HasMany;
use think\model\relation\HasOne;
use app\model\member\Member;
use addon\zhjw\app\model\students\Students;
use addon\zhjw\app\model\contracts\Contracts;
/**
* 智慧教务-订单管理模型
* 订单管理模型
* Class Orders
* @package addon\zhjw\app\model\orders
*/
@ -55,7 +55,7 @@ class Orders extends BaseModel
protected $defaultSoftDelete = 0;
/**
* 搜索器:智慧教务-订单管理学员
* 搜索器:订单管理学员
* @param $value
* @param $data
*/
@ -67,7 +67,7 @@ class Orders extends BaseModel
}
/**
* 搜索器:智慧教务-订单管理关联合同
* 搜索器:订单管理关联合同
* @param $value
* @param $data
*/
@ -79,7 +79,7 @@ class Orders extends BaseModel
}
/**
* 搜索器:智慧教务-订单管理订单金额
* 搜索器:订单管理订单金额
* @param $value
* @param $data
*/
@ -97,7 +97,7 @@ class Orders extends BaseModel
}
/**
* 搜索器:智慧教务-订单管理订单类型
* 搜索器:订单管理订单类型
* @param $value
* @param $data
*/
@ -109,7 +109,7 @@ class Orders extends BaseModel
}
/**
* 搜索器:智慧教务-订单管理支付类型
* 搜索器:订单管理支付类型
* @param $value
* @param $data
*/
@ -121,7 +121,7 @@ class Orders extends BaseModel
}
/**
* 搜索器:智慧教务-订单管理支付状态
* 搜索器:订单管理支付状态
* @param $value
* @param $data
*/
@ -133,7 +133,7 @@ class Orders extends BaseModel
}
/**
* 搜索器:智慧教务-订单管理支付时间
* 搜索器:订单管理支付时间
* @param $value
* @param $data
*/
@ -151,7 +151,7 @@ class Orders extends BaseModel
}
/**
* 搜索器:智慧教务-订单管理添加时间
* 搜索器:订单管理添加时间
* @param $value
* @param $data
*/
@ -173,8 +173,8 @@ class Orders extends BaseModel
public function member(){
return $this->hasOne(Member::class, 'member_id', 'student_id')->joinType('left')->withField('mobile,member_id')->bind(['student_id_name'=>'mobile']);
public function students(){
return $this->hasOne(Students::class, 'id', 'student_id')->joinType('left')->withField('name,id')->bind(['student_id_name'=>'name']);
}
public function contracts(){

6
niucloud/addon/zhjw/app/model/students/Students.php

@ -16,7 +16,7 @@ use think\model\concern\SoftDelete;
use think\model\relation\HasMany;
use think\model\relation\HasOne;
use addon\zhjw\app\model\users\Users;
use app\model\member\Member;
/**
* 学员管理模型
@ -171,8 +171,8 @@ class Students extends BaseModel
public function users(){
return $this->hasOne(Users::class, 'member_id', 'user_id')->joinType('left')->withField('mobile,member_id')->bind(['user_id_name'=>'mobile']);
public function member(){
return $this->hasOne(Member::class, 'member_id', 'user_id')->joinType('left')->withField('mobile,member_id')->bind(['user_id_name'=>'mobile']);
}
}

520
niucloud/addon/zhjw/app/model/users/Users.php

@ -1,520 +0,0 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的多应用管理平台
// +----------------------------------------------------------------------
// | 官方网址:https://www.niucloud.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace addon\zhjw\app\model\users;
use core\base\BaseModel;
use think\model\concern\SoftDelete;
use think\model\relation\HasMany;
use think\model\relation\HasOne;
use addon\zhjw\app\model\users\Users;
/**
* 用户管理模型
* Class Users
* @package addon\zhjw\app\model\users
*/
class Users extends BaseModel
{
use SoftDelete;
/**
* 数据表主键
* @var string
*/
protected $pk = 'member_id';
/**
* 模型名称
* @var string
*/
protected $name = 'zhjw_users';
/**
* 定义软删除标记字段.
* @var string
*/
protected $deleteTime = 'is_del';
/**
* 定义软删除字段的默认值.
* @var int
*/
protected $defaultSoftDelete = 0;
/**
* 搜索器:用户管理会员用户名
* @param $value
* @param $data
*/
public function searchUsernameAttr($query, $value, $data)
{
if ($value) {
$query->where("username", "like", "%".$value."%");
}
}
/**
* 搜索器:用户管理手机号
* @param $value
* @param $data
*/
public function searchMobileAttr($query, $value, $data)
{
if ($value) {
$query->where("mobile", "like", "%".$value."%");
}
}
/**
* 搜索器:用户管理会员昵称
* @param $value
* @param $data
*/
public function searchNicknameAttr($query, $value, $data)
{
if ($value) {
$query->where("nickname", "like", "%".$value."%");
}
}
/**
* 搜索器:用户管理会员等级
* @param $value
* @param $data
*/
public function searchMemberLevelAttr($query, $value, $data)
{
if ($value) {
$query->where("member_level", $value);
}
}
/**
* 搜索器:用户管理会员标签
* @param $value
* @param $data
*/
public function searchMemberLabelAttr($query, $value, $data)
{
if ($value) {
$query->where("member_label", $value);
}
}
/**
* 搜索器:用户管理微信用户openid
* @param $value
* @param $data
*/
public function searchWxOpenidAttr($query, $value, $data)
{
if ($value) {
$query->where("wx_openid", $value);
}
}
/**
* 搜索器:用户管理微信小程序openid
* @param $value
* @param $data
*/
public function searchWeappOpenidAttr($query, $value, $data)
{
if ($value) {
$query->where("weapp_openid", $value);
}
}
/**
* 搜索器:用户管理微信unionid
* @param $value
* @param $data
*/
public function searchWxUnionidAttr($query, $value, $data)
{
if ($value) {
$query->where("wx_unionid", $value);
}
}
/**
* 搜索器:用户管理支付宝账户id
* @param $value
* @param $data
*/
public function searchAliOpenidAttr($query, $value, $data)
{
if ($value) {
$query->where("ali_openid", $value);
}
}
/**
* 搜索器:用户管理抖音小程序openid
* @param $value
* @param $data
*/
public function searchDouyinOpenidAttr($query, $value, $data)
{
if ($value) {
$query->where("douyin_openid", $value);
}
}
/**
* 搜索器:用户管理注册来源
* @param $value
* @param $data
*/
public function searchRegisterChannelAttr($query, $value, $data)
{
if ($value) {
$query->where("register_channel", $value);
}
}
/**
* 搜索器:用户管理注册方式
* @param $value
* @param $data
*/
public function searchRegisterTypeAttr($query, $value, $data)
{
if ($value) {
$query->where("register_type", $value);
}
}
/**
* 搜索器:用户管理当前登录ip
* @param $value
* @param $data
*/
public function searchLoginIpAttr($query, $value, $data)
{
if ($value) {
$query->where("login_ip", $value);
}
}
/**
* 搜索器:用户管理当前登录的操作终端类型
* @param $value
* @param $data
*/
public function searchLoginTypeAttr($query, $value, $data)
{
if ($value) {
$query->where("login_type", $value);
}
}
/**
* 搜索器:用户管理登录渠道
* @param $value
* @param $data
*/
public function searchLoginChannelAttr($query, $value, $data)
{
if ($value) {
$query->where("login_channel", $value);
}
}
/**
* 搜索器:用户管理登录次数
* @param $value
* @param $data
*/
public function searchLoginCountAttr($query, $value, $data)
{
if ($value) {
$query->where("login_count", $value);
}
}
/**
* 搜索器:用户管理当前登录时间
* @param $value
* @param $data
*/
public function searchLoginTimeAttr($query, $value, $data)
{
if ($value) {
$query->where("login_time", $value);
}
}
/**
* 搜索器:用户管理最后访问时间
* @param $value
* @param $data
*/
public function searchLastVisitTimeAttr($query, $value, $data)
{
if ($value) {
$query->where("last_visit_time", $value);
}
}
/**
* 搜索器:用户管理最后消费时间
* @param $value
* @param $data
*/
public function searchLastConsumTimeAttr($query, $value, $data)
{
if ($value) {
$query->where("last_consum_time", $value);
}
}
/**
* 搜索器:用户管理性别
* @param $value
* @param $data
*/
public function searchSexAttr($query, $value, $data)
{
if ($value) {
$query->where("sex", $value);
}
}
/**
* 搜索器:用户管理用户状态
* @param $value
* @param $data
*/
public function searchStatusAttr($query, $value, $data)
{
if ($value) {
$query->where("status", $value);
}
}
/**
* 搜索器:用户管理出生日期
* @param $value
* @param $data
*/
public function searchBirthdayAttr($query, $value, $data)
{
$start = empty($value[0]) ? 0 : strtotime($value[0]);
$end = empty($value[1]) ? 0 : strtotime($value[1]);
if ($start > 0 && $end > 0) {
$query->where([["birthday", "between", [$start, $end]]]);
} else if ($start > 0 && $end == 0) {
$query->where([["birthday", ">=", $start]]);
} else if ($start == 0 && $end > 0) {
$query->where([["birthday", "<=", $end]]);
}
}
/**
* 搜索器:用户管理可用积分
* @param $value
* @param $data
*/
public function searchPointAttr($query, $value, $data)
{
if ($value) {
$query->where("point", $value);
}
}
/**
* 搜索器:用户管理累计获取积分
* @param $value
* @param $data
*/
public function searchPointGetAttr($query, $value, $data)
{
if ($value) {
$query->where("point_get", $value);
}
}
/**
* 搜索器:用户管理可用余额
* @param $value
* @param $data
*/
public function searchBalanceAttr($query, $value, $data)
{
if ($value) {
$query->where("balance", $value);
}
}
/**
* 搜索器:用户管理累计获取余额
* @param $value
* @param $data
*/
public function searchBalanceGetAttr($query, $value, $data)
{
if ($value) {
$query->where("balance_get", $value);
}
}
/**
* 搜索器:用户管理可用余额(可提现)
* @param $value
* @param $data
*/
public function searchMoneyAttr($query, $value, $data)
{
if ($value) {
$query->where("money", $value);
}
}
/**
* 搜索器:用户管理累计获取余额(可提现)
* @param $value
* @param $data
*/
public function searchMoneyGetAttr($query, $value, $data)
{
if ($value) {
$query->where("money_get", $value);
}
}
/**
* 搜索器:用户管理提现中余额(可提现)
* @param $value
* @param $data
*/
public function searchMoneyCashOutingAttr($query, $value, $data)
{
if ($value) {
$query->where("money_cash_outing", $value);
}
}
/**
* 搜索器:用户管理成长值
* @param $value
* @param $data
*/
public function searchGrowthAttr($query, $value, $data)
{
if ($value) {
$query->where("growth", $value);
}
}
/**
* 搜索器:用户管理累计获得成长值
* @param $value
* @param $data
*/
public function searchGrowthGetAttr($query, $value, $data)
{
if ($value) {
$query->where("growth_get", $value);
}
}
/**
* 搜索器:用户管理当前佣金
* @param $value
* @param $data
*/
public function searchCommissionAttr($query, $value, $data)
{
if ($value) {
$query->where("commission", $value);
}
}
/**
* 搜索器:用户管理佣金获取
* @param $value
* @param $data
*/
public function searchCommissionGetAttr($query, $value, $data)
{
if ($value) {
$query->where("commission_get", $value);
}
}
/**
* 搜索器:用户管理提现中佣金
* @param $value
* @param $data
*/
public function searchCommissionCashOutingAttr($query, $value, $data)
{
if ($value) {
$query->where("commission_cash_outing", $value);
}
}
/**
* 搜索器:用户管理是否是会员
* @param $value
* @param $data
*/
public function searchIsMemberAttr($query, $value, $data)
{
if ($value) {
$query->where("is_member", $value);
}
}
/**
* 搜索器:用户管理成为会员时间
* @param $value
* @param $data
*/
public function searchMemberTimeAttr($query, $value, $data)
{
$start = empty($value[0]) ? 0 : strtotime($value[0]);
$end = empty($value[1]) ? 0 : strtotime($value[1]);
if ($start > 0 && $end > 0) {
$query->where([["member_time", "between", [$start, $end]]]);
} else if ($start > 0 && $end == 0) {
$query->where([["member_time", ">=", $start]]);
} else if ($start == 0 && $end > 0) {
$query->where([["member_time", "<=", $end]]);
}
}
/**
* 搜索器:用户管理注册时间
* @param $value
* @param $data
*/
public function searchCreateTimeAttr($query, $value, $data)
{
if ($value) {
$query->where("create_time", $value);
}
}
public function users(){
return $this->hasOne(Users::class, 'member_id', 'pid')->joinType('left')->withField('mobile,member_id')->bind(['pid_name'=>'mobile']);
}
}

12
niucloud/addon/zhjw/app/service/admin/contracts/ContractsService.php

@ -12,7 +12,7 @@
namespace addon\zhjw\app\service\admin\contracts;
use addon\zhjw\app\model\contracts\Contracts;
use addon\zhjw\app\model\users\Users;
use addon\zhjw\app\model\students\Students;
use core\base\BaseAdminService;
@ -40,7 +40,7 @@ class ContractsService extends BaseAdminService
$field = 'id,student_id,title,content,file_data,start_date,end_date,status,create_time,update_time,is_deleted,created_by,created_role,updated_by,updated_role';
$order = 'id desc';
$search_model = $this->model->withSearch(["student_id","title","start_date","end_date","status","create_time"], $where)->with(['users'])->field($field)->order($order);
$search_model = $this->model->withSearch(["student_id","title","start_date","end_date","status","create_time"], $where)->with(['students'])->field($field)->order($order);
$list = $this->pageQuery($search_model);
return $list;
}
@ -54,7 +54,7 @@ class ContractsService extends BaseAdminService
{
$field = 'id,student_id,title,content,file_data,start_date,end_date,status,create_time,update_time,is_deleted,created_by,created_role,updated_by,updated_role';
$info = $this->model->field($field)->where([['id', "=", $id]])->with(['users'])->findOrEmpty()->toArray();
$info = $this->model->field($field)->where([['id', "=", $id]])->with(['students'])->findOrEmpty()->toArray();
return $info;
}
@ -96,9 +96,9 @@ class ContractsService extends BaseAdminService
}
public function getUsersAll(){
$usersModel = new Users();
return $usersModel->select()->toArray();
public function getStudentsAll(){
$studentsModel = new Students();
return $studentsModel->select()->toArray();
}

24
niucloud/addon/zhjw/app/service/admin/orders/OrdersService.php

@ -12,14 +12,14 @@
namespace addon\zhjw\app\service\admin\orders;
use addon\zhjw\app\model\orders\Orders;
use app\model\member\Member;
use addon\zhjw\app\model\students\Students;
use addon\zhjw\app\model\contracts\Contracts;
use core\base\BaseAdminService;
/**
* 智慧教务-订单管理服务层
* 订单管理服务层
* Class OrdersService
* @package addon\zhjw\app\service\admin\orders
*/
@ -32,7 +32,7 @@ class OrdersService extends BaseAdminService
}
/**
* 获取智慧教务-订单管理列表
* 获取订单管理列表
* @param array $where
* @return array
*/
@ -41,13 +41,13 @@ class OrdersService extends BaseAdminService
$field = 'id,student_id,contract_id,amount,order_type,pay_type,payment_status,payment_time,create_time,update_time,is_deleted,created_by,created_role,updated_by,updated_role';
$order = 'id desc';
$search_model = $this->model->withSearch(["student_id","contract_id","amount","order_type","pay_type","payment_status","payment_time","create_time"], $where)->with(['member','contracts'])->field($field)->order($order);
$search_model = $this->model->withSearch(["student_id","contract_id","amount","order_type","pay_type","payment_status","payment_time","create_time"], $where)->with(['students','contracts'])->field($field)->order($order);
$list = $this->pageQuery($search_model);
return $list;
}
/**
* 获取智慧教务-订单管理信息
* 获取订单管理信息
* @param int $id
* @return array
*/
@ -55,13 +55,13 @@ class OrdersService extends BaseAdminService
{
$field = 'id,student_id,contract_id,amount,order_type,pay_type,payment_status,payment_time,create_time,update_time,is_deleted,created_by,created_role,updated_by,updated_role';
$info = $this->model->field($field)->where([['id', "=", $id]])->with(['member','contracts'])->findOrEmpty()->toArray();
$info = $this->model->field($field)->where([['id', "=", $id]])->with(['students','contracts'])->findOrEmpty()->toArray();
$info['is_deleted'] = strval($info['is_deleted']);
return $info;
}
/**
* 添加智慧教务-订单管理
* 添加订单管理
* @param array $data
* @return mixed
*/
@ -73,7 +73,7 @@ class OrdersService extends BaseAdminService
}
/**
* 智慧教务-订单管理编辑
* 订单管理编辑
* @param int $id
* @param array $data
* @return bool
@ -86,7 +86,7 @@ class OrdersService extends BaseAdminService
}
/**
* 删除智慧教务-订单管理
* 删除订单管理
* @param int $id
* @return bool
*/
@ -98,9 +98,9 @@ class OrdersService extends BaseAdminService
}
public function getMemberAll(){
$memberModel = new Member();
return $memberModel->select()->toArray();
public function getStudentsAll(){
$studentsModel = new Students();
return $studentsModel->select()->toArray();
}
public function getContractsAll(){

12
niucloud/addon/zhjw/app/service/admin/students/StudentsService.php

@ -12,7 +12,7 @@
namespace addon\zhjw\app\service\admin\students;
use addon\zhjw\app\model\students\Students;
use addon\zhjw\app\model\users\Users;
use app\model\member\Member;
use core\base\BaseAdminService;
@ -40,7 +40,7 @@ class StudentsService extends BaseAdminService
$field = 'id,name,user_id,have_study_time,end_study_time,emergency_contact,level,status,create_time,update_time,is_deleted,created_by,created_role,updated_by,updated_role';
$order = 'id desc';
$search_model = $this->model->withSearch(["name","user_id","have_study_time","end_study_time","emergency_contact","level","status","create_time"], $where)->with(['users'])->field($field)->order($order);
$search_model = $this->model->withSearch(["name","user_id","have_study_time","end_study_time","emergency_contact","level","status","create_time"], $where)->with(['member'])->field($field)->order($order);
$list = $this->pageQuery($search_model);
return $list;
}
@ -54,7 +54,7 @@ class StudentsService extends BaseAdminService
{
$field = 'id,name,user_id,have_study_time,end_study_time,emergency_contact,level,status,create_time,update_time,is_deleted,created_by,created_role,updated_by,updated_role';
$info = $this->model->field($field)->where([['id', "=", $id]])->with(['users'])->findOrEmpty()->toArray();
$info = $this->model->field($field)->where([['id', "=", $id]])->with(['member'])->findOrEmpty()->toArray();
return $info;
}
@ -96,9 +96,9 @@ class StudentsService extends BaseAdminService
}
public function getUsersAll(){
$usersModel = new Users();
return $usersModel->select()->toArray();
public function getMemberAll(){
$memberModel = new Member();
return $memberModel->select()->toArray();
}

104
niucloud/addon/zhjw/app/service/admin/users/UsersService.php

@ -1,104 +0,0 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的多应用管理平台
// +----------------------------------------------------------------------
// | 官方网址:https://www.niucloud.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace addon\zhjw\app\service\admin\users;
use addon\zhjw\app\model\users\Users;
use core\base\BaseAdminService;
/**
* 用户管理服务层
* Class UsersService
* @package addon\zhjw\app\service\admin\users
*/
class UsersService extends BaseAdminService
{
public function __construct()
{
parent::__construct();
$this->model = new Users();
}
/**
* 获取用户管理列表
* @param array $where
* @return array
*/
public function getPage(array $where = [])
{
$field = 'member_id,member_no,pid,username,mobile,password,nickname,headimg,member_level,member_label,wx_openid,weapp_openid,wx_unionid,ali_openid,douyin_openid,register_channel,register_type,login_ip,login_type,login_channel,login_count,login_time,last_visit_time,last_consum_time,sex,status,birthday,point,point_get,balance,balance_get,money,money_get,money_cash_outing,growth,growth_get,commission,commission_get,commission_cash_outing,is_member,member_time,is_del,province_id,city_id,district_id,address,location,delete_time,create_time,update_time,created_by,created_role,updated_by,updated_role';
$order = 'member_id desc';
$search_model = $this->model->withSearch(["username","mobile","nickname","member_level","member_label","wx_openid","weapp_openid","wx_unionid","ali_openid","douyin_openid","register_channel","register_type","login_ip","login_type","login_channel","login_count","login_time","last_visit_time","last_consum_time","sex","status","birthday","point","point_get","balance","balance_get","money","money_get","money_cash_outing","growth","growth_get","commission","commission_get","commission_cash_outing","is_member","member_time","create_time"], $where)->with(['users'])->field($field)->order($order);
$list = $this->pageQuery($search_model);
return $list;
}
/**
* 获取用户管理信息
* @param int $id
* @return array
*/
public function getInfo(int $id)
{
$field = 'member_id,member_no,pid,username,mobile,password,nickname,headimg,member_level,member_label,wx_openid,weapp_openid,wx_unionid,ali_openid,douyin_openid,register_channel,register_type,login_ip,login_type,login_channel,login_count,login_time,last_visit_time,last_consum_time,sex,status,birthday,point,point_get,balance,balance_get,money,money_get,money_cash_outing,growth,growth_get,commission,commission_get,commission_cash_outing,is_member,member_time,is_del,province_id,city_id,district_id,address,location,delete_time,create_time,update_time,created_by,created_role,updated_by,updated_role';
$info = $this->model->field($field)->where([['member_id', "=", $id]])->with(['users'])->findOrEmpty()->toArray();
$info['is_del'] = strval($info['is_del']);
return $info;
}
/**
* 添加用户管理
* @param array $data
* @return mixed
*/
public function add(array $data)
{
$res = $this->model->create($data);
return $res->member_id;
}
/**
* 用户管理编辑
* @param int $id
* @param array $data
* @return bool
*/
public function edit(int $id, array $data)
{
$this->model->where([['member_id', '=', $id]])->update($data);
return true;
}
/**
* 删除用户管理
* @param int $id
* @return bool
*/
public function del(int $id)
{
$model = $this->model->where([['member_id', '=', $id]])->find();
$res = $model->delete();
return $res;
}
public function getUsersAll(){
$usersModel = new Users();
return $usersModel->select()->toArray();
}
}

2
niucloud/addon/zhjw/app/validate/orders/Orders.php

@ -12,7 +12,7 @@
namespace addon\zhjw\app\validate\orders;
use core\base\BaseValidate;
/**
* 智慧教务-订单管理验证器
* 订单管理验证器
* Class Orders
* @package addon\zhjw\app\validate\orders
*/

49
niucloud/addon/zhjw/app/validate/users/Users.php

@ -1,49 +0,0 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的多应用管理平台
// +----------------------------------------------------------------------
// | 官方网址:https://www.niucloud.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace addon\zhjw\app\validate\users;
use core\base\BaseValidate;
/**
* 用户管理验证器
* Class Users
* @package addon\zhjw\app\validate\users
*/
class Users extends BaseValidate
{
protected $rule = [
'username' => 'require',
'mobile' => 'require',
'password' => 'require',
'nickname' => 'require',
'headimg' => 'require',
'sex' => 'require',
'status' => 'require',
'is_member' => 'require',
];
protected $message = [
'username.require' => ['common_validate.require', ['username']],
'mobile.require' => ['common_validate.require', ['mobile']],
'password.require' => ['common_validate.require', ['password']],
'nickname.require' => ['common_validate.require', ['nickname']],
'headimg.require' => ['common_validate.require', ['headimg']],
'sex.require' => ['common_validate.require', ['sex']],
'status.require' => ['common_validate.require', ['status']],
'is_member.require' => ['common_validate.require', ['is_member']],
];
protected $scene = [
"add" => ['member_no', 'pid', 'username', 'mobile', 'password', 'nickname', 'headimg', 'member_level', 'member_label', 'wx_openid', 'weapp_openid', 'wx_unionid', 'ali_openid', 'douyin_openid', 'register_channel', 'register_type', 'login_ip', 'login_type', 'login_channel', 'login_count', 'login_time', 'last_visit_time', 'last_consum_time', 'sex', 'status', 'birthday', 'point', 'point_get', 'balance', 'balance_get', 'money', 'money_get', 'money_cash_outing', 'growth', 'growth_get', 'commission', 'commission_get', 'commission_cash_outing', 'is_member', 'member_time', 'address'],
"edit" => ['member_no', 'pid', 'username', 'mobile', 'password', 'nickname', 'headimg', 'member_level', 'member_label', 'wx_openid', 'weapp_openid', 'wx_unionid', 'ali_openid', 'douyin_openid', 'register_channel', 'register_type', 'login_ip', 'login_type', 'login_channel', 'login_count', 'login_time', 'last_visit_time', 'last_consum_time', 'sex', 'status', 'birthday', 'point', 'point_get', 'balance', 'balance_get', 'money', 'money_get', 'money_cash_outing', 'growth', 'growth_get', 'commission', 'commission_get', 'commission_cash_outing', 'is_member', 'member_time', 'address']
];
}
Loading…
Cancel
Save