Browse Source

Merge branch 'master' into wangzeyan

master
王泽彦 10 months ago
parent
commit
f88d6beef2
  1. 14
      admin/src/app/api/pay.ts
  2. 13
      admin/src/app/api/student.ts
  3. 52
      admin/src/app/api/student_label.ts
  4. 4
      admin/src/app/lang/zh-cn/student.student.json
  5. 13
      admin/src/app/lang/zh-cn/student_label.student_label.json
  6. 32
      admin/src/app/views/customer_resources/components/customer-resources-edit.vue
  7. 9
      admin/src/app/views/customer_resources/customer_resources.vue
  8. 656
      admin/src/app/views/order_table/order_table.vue
  9. 75
      admin/src/app/views/student/components/student-edit.vue
  10. 67
      admin/src/app/views/student/student.vue
  11. 163
      admin/src/app/views/student_label/components/student-label-edit.vue
  12. 163
      admin/src/app/views/student_label/student_label.vue
  13. BIN
      niucloud/app.zip
  14. 8
      niucloud/app/adminapi/controller/customer_resources/CustomerResources.php
  15. 3
      niucloud/app/adminapi/controller/order_table/OrderTable.php
  16. 18
      niucloud/app/adminapi/controller/pay/Pay.php
  17. 24
      niucloud/app/adminapi/controller/student/Student.php
  18. 89
      niucloud/app/adminapi/controller/student_label/StudentLabel.php
  19. 5
      niucloud/app/adminapi/route/pay.php
  20. 8
      niucloud/app/adminapi/route/student.php
  21. 37
      niucloud/app/adminapi/route/student_label.php
  22. 46
      niucloud/app/api/controller/login/Login.php
  23. 9
      niucloud/app/api/controller/pay/Pay.php
  24. 2
      niucloud/app/api/route/pay.php
  25. 3
      niucloud/app/api/route/route.php
  26. 57
      niucloud/app/common.php
  27. 41
      niucloud/app/model/student/Student.php
  28. 62
      niucloud/app/model/student_label/StudentLabel.php
  29. 6
      niucloud/app/service/admin/customer_resources/CustomerResourcesService.php
  30. 17
      niucloud/app/service/admin/order_table/OrderTableService.php
  31. 32
      niucloud/app/service/admin/pay/PayService.php
  32. 44
      niucloud/app/service/admin/student/StudentService.php
  33. 105
      niucloud/app/service/admin/student_label/StudentLabelService.php
  34. 43
      niucloud/app/service/api/pay/PayService.php
  35. 4
      niucloud/app/validate/customer_resources/CustomerResources.php
  36. 8
      niucloud/app/validate/student/Student.php
  37. 39
      niucloud/app/validate/student_label/StudentLabel.php
  38. 5
      niucloud/composer.json
  39. 6
      niucloud/core/pay/Wechatpay.php
  40. 1
      niucloud/public/admin/assets/404-145f080f.css
  41. 1
      niucloud/public/admin/assets/404-c962cf1f.js
  42. 1
      niucloud/public/admin/assets/404-da705250.js
  43. 1
      niucloud/public/admin/assets/404-e4083eb7.css
  44. 1
      niucloud/public/admin/assets/App-16d4b42a.js
  45. 1
      niucloud/public/admin/assets/App-ec453f95.js
  46. 0
      niucloud/public/admin/assets/Jump-lesson-library-edit-1c99c58d.css
  47. 1
      niucloud/public/admin/assets/Jump-lesson-library-edit-3189b23c.js
  48. 1
      niucloud/public/admin/assets/Jump-lesson-library-edit-3e62ccae.js
  49. 1
      niucloud/public/admin/assets/Jump-lesson-library-edit-4812450a.js
  50. 1
      niucloud/public/admin/assets/Jump-lesson-library-edit-5cc28b5d.js
  51. 1
      niucloud/public/admin/assets/Jump-lesson-library-edit-6dc2e56c.js
  52. 1
      niucloud/public/admin/assets/Jump-lesson-library-edit-a6de66e4.js
  53. 1
      niucloud/public/admin/assets/Jump-lesson-library-edit.vue_vue_type_style_index_0_lang-0957e465.js
  54. 1
      niucloud/public/admin/assets/Jump-lesson-library-edit.vue_vue_type_style_index_0_lang-1c547358.js
  55. 1
      niucloud/public/admin/assets/Jump-lesson-library-edit.vue_vue_type_style_index_0_lang-53efee48.js
  56. 1
      niucloud/public/admin/assets/Jump-lesson-library-edit.vue_vue_type_style_index_0_lang-9e4d4bb1.js
  57. 1
      niucloud/public/admin/assets/Jump-lesson-library-edit.vue_vue_type_style_index_0_lang-bc69a74f.js
  58. 1
      niucloud/public/admin/assets/Jump-lesson-library-edit.vue_vue_type_style_index_0_lang-cce9c9c4.js
  59. 1
      niucloud/public/admin/assets/TencentMapPicker-1e83737e.js
  60. 1
      niucloud/public/admin/assets/TencentMapPicker-b9ebc9f2.css
  61. 1
      niucloud/public/admin/assets/Verify-3982a86a.css
  62. 1
      niucloud/public/admin/assets/Verify-58f557e5.js
  63. 1
      niucloud/public/admin/assets/Verify-a7b88df1.css
  64. 1
      niucloud/public/admin/assets/Verify-dcfea7b0.js
  65. 1
      niucloud/public/admin/assets/VerifyPoints-456464e8.js
  66. 1
      niucloud/public/admin/assets/VerifyPoints-e63baa06.js
  67. 1
      niucloud/public/admin/assets/VerifySlide-4f0c67f6.js
  68. 1
      niucloud/public/admin/assets/VerifySlide-ab9ad691.js
  69. 1
      niucloud/public/admin/assets/access-1f8d1357.js
  70. 1
      niucloud/public/admin/assets/access-32ca4ee0.js
  71. 1
      niucloud/public/admin/assets/access-4c00a1ff.js
  72. 1
      niucloud/public/admin/assets/access-ade860fb.js
  73. 1
      niucloud/public/admin/assets/access-ba64cbff.js
  74. 1
      niucloud/public/admin/assets/access-beb3a581.js
  75. 1
      niucloud/public/admin/assets/account-75de01cb.js
  76. 1
      niucloud/public/admin/assets/account-fd9654f7.js
  77. 1
      niucloud/public/admin/assets/add-01ce3e3b.css
  78. 1
      niucloud/public/admin/assets/add-3c4caa24.js
  79. 1
      niucloud/public/admin/assets/add-653e18a4.css
  80. 1
      niucloud/public/admin/assets/add-879e8e6f.js
  81. 1
      niucloud/public/admin/assets/add-ed66b0f3.js
  82. 1
      niucloud/public/admin/assets/add-f6f58231.js
  83. 1
      niucloud/public/admin/assets/add-member-c6c04c63.js
  84. 1
      niucloud/public/admin/assets/add-member-e2c0cf5c.js
  85. 1
      niucloud/public/admin/assets/add-member.vue_vue_type_script_setup_true_lang-30c598d2.js
  86. 1
      niucloud/public/admin/assets/add-member.vue_vue_type_script_setup_true_lang-b04e5828.js
  87. 1
      niucloud/public/admin/assets/add-table-07402a9a.js
  88. 1
      niucloud/public/admin/assets/add-table-5e6a9ce0.js
  89. 1
      niucloud/public/admin/assets/add-table.vue_vue_type_script_setup_true_lang-4331f2a8.js
  90. 1
      niucloud/public/admin/assets/add-table.vue_vue_type_script_setup_true_lang-e5255b78.js
  91. 1
      niucloud/public/admin/assets/add-theme-21ddecba.js
  92. 1
      niucloud/public/admin/assets/add-theme-fd0ffdf8.js
  93. 1
      niucloud/public/admin/assets/add-theme.vue_vue_type_script_setup_true_lang-64b3eaf1.js
  94. 1
      niucloud/public/admin/assets/add-theme.vue_vue_type_script_setup_true_lang-b0b26888.js
  95. 1
      niucloud/public/admin/assets/adjust-money-875435eb.js
  96. 1
      niucloud/public/admin/assets/adjust-money-e3db4669.js
  97. 1
      niucloud/public/admin/assets/adjust-money.vue_vue_type_style_index_0_lang-42f3e76e.js
  98. 1
      niucloud/public/admin/assets/adjust-money.vue_vue_type_style_index_0_lang-ed07b1fa.js
  99. 1
      niucloud/public/admin/assets/adminlogin-118bc87a.js
  100. 1
      niucloud/public/admin/assets/adminlogin-2ef8d97e.js

14
admin/src/app/api/pay.ts

@ -71,6 +71,7 @@ export function getRefundTransfer(params: Record<string, any>) {
})
}
/**
*
*/
@ -107,3 +108,16 @@ export function getFriendsPay(
showErrorMessage: false,
})
}
export function orderPay(params: Record<string, any>) {
return request.post(`pay/order_pay`, params, {
showSuccessMessage: true,
})
}
export function checkPaymentStatus(params: Record<string, any>) {
return request.post(`pay/check_payment_status`, params)
}

13
admin/src/app/api/student.ts

@ -2,6 +2,8 @@ import request from '@/utils/request'
// USER_CODE_BEGIN -- student
/**
*
@ -49,12 +51,17 @@ export function deleteStudent(id: number) {
return request.delete(`student/student/${id}`, { showErrorMessage: true, showSuccessMessage: true })
}
export function getWithCampusList(params: Record<string,any>){
export function getWithCustomerResourcesList(params: Record<string,any>){
return request.get('student/customer_resources_all', {params})
}export function getWithCampusList(params: Record<string,any>){
return request.get('student/campus_all', {params})
}export function getWithClassGradeList(params: Record<string,any>){
return request.get('student/class_grade_all', {params})
}export function getWithMemberList(params: Record<string,any>){
return request.get('student/member_all', {params})
}
// USER_CODE_END -- student
export function getMemberLabelAll() {
return request.get(`student/label_all`)
}

52
admin/src/app/api/student_label.ts

@ -0,0 +1,52 @@
import request from '@/utils/request'
// USER_CODE_BEGIN -- student_label
/**
*
* @param params
* @returns
*/
export function getStudentLabelList(params: Record<string, any>) {
return request.get(`student_label/student_label`, {params})
}
/**
*
* @param label_id label_id
* @returns
*/
export function getStudentLabelInfo(label_id: number) {
return request.get(`student_label/student_label/${label_id}`);
}
/**
*
* @param params
* @returns
*/
export function addStudentLabel(params: Record<string, any>) {
return request.post('student_label/student_label', params, { showErrorMessage: true, showSuccessMessage: true })
}
/**
*
* @param label_id
* @param params
* @returns
*/
export function editStudentLabel(params: Record<string, any>) {
return request.put(`student_label/student_label/${params.label_id}`, params, { showErrorMessage: true, showSuccessMessage: true })
}
/**
*
* @param label_id
* @returns
*/
export function deleteStudentLabel(label_id: number) {
return request.delete(`student_label/student_label/${label_id}`, { showErrorMessage: true, showSuccessMessage: true })
}
// USER_CODE_END -- student_label

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

@ -1,10 +1,10 @@
{
"userId":"资源",
"userIdPlaceholder":"请输入资源",
"campusId":"校区",
"campusIdPlaceholder":"全部",
"classId":"班级",
"classIdPlaceholder":"请输入班级",
"userId":"用户",
"userIdPlaceholder":"请输入用户",
"name":"学员姓名",
"namePlaceholder":"请输入学员姓名",
"gender":"性别",

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

@ -0,0 +1,13 @@
{
"labelName":"标签名称",
"labelNamePlaceholder":"请输入标签名称",
"memo":"备注",
"memoPlaceholder":"请输入备注",
"sort":"排序",
"sortPlaceholder":"请输入排序",
"addStudentLabel":"添加学员标签",
"updateStudentLabel":"编辑学员标签",
"studentLabelDeleteTips":"确定要删除该数据吗?",
"startDate":"请选择开始时间",
"endDate":"请选择结束时间"
}

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

@ -547,37 +547,7 @@ const formRules = computed(() => {
message: t('cognitiveIdeaPlaceholder'),
trigger: 'blur',
},
],
optional_class_time: [
{
required: true,
message: t('optionalClassTimePlaceholder'),
trigger: 'blur',
},
],
distance: [
{ required: true, message: t('distancePlaceholder'), trigger: 'blur' },
],
decision_maker: [
{
required: true,
message: t('decisionMakerPlaceholder'),
trigger: 'blur',
},
],
initial_intent: [
{
required: true,
message: t('initialIntentPlaceholder'),
trigger: 'blur',
},
],
campus: [
{ required: true, message: t('campusPlaceholder'), trigger: 'blur' },
],
status: [
{ required: true, message: t('statusPlaceholder'), trigger: 'blur' },
],
]
}
})

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

@ -138,11 +138,13 @@
</el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="200"
<el-table-column :label="t('operation')" fixed="right" min-width="300"
v-if="customerResourcesTable.searchParam.type == 'zylb'">
<template #default="{ row }">
<el-button type="primary" link @click="editEvent(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="orderList(row.id)">订单列表</el-button>
<el-button type="primary" link @click="addOrder({'resource_id':row.id})">添加订单</el-button>
<el-button type="primary" link @click="tcEvent({'resource_id':row.id})">体测</el-button>
@ -252,6 +254,11 @@
TcCustomerResourcesDialog.value.showDialog = true
}
const orderList = (resource_id : number) => {
router.push({ path: '/order_table/order_table', query: { resource_id: resource_id } })
}

656
admin/src/app/views/order_table/order_table.vue

@ -1,323 +1,363 @@
<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('addOrderTable') }}
</el-button>
</div>
<el-card
class="box-card !border-none my-[10px] table-search-wrap"
shadow="never"
>
<el-form
:inline="true"
:model="orderTableTable.searchParam"
ref="searchFormRef"
>
<el-form-item :label="t('orderStatus')" prop="order_status">
<el-select
class="w-[280px]"
v-model="orderTableTable.searchParam.order_status"
clearable
:placeholder="t('orderStatusPlaceholder')"
>
<el-option label="全部" value=""></el-option>
<el-option
v-for="(item, index) in order_statusList"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('paymentType')" prop="payment_type">
<el-select
class="w-[280px]"
v-model="orderTableTable.searchParam.payment_type"
clearable
:placeholder="t('paymentTypePlaceholder')"
>
<el-option label="全部" value=""></el-option>
<el-option
v-for="(item, index) in payment_typeList"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="loadOrderTableList()">{{
<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('addOrderTable') }}
</el-button>
</div>
<el-card class="box-card !border-none my-[10px] table-search-wrap" shadow="never">
<el-form :inline="true" :model="orderTableTable.searchParam" ref="searchFormRef">
<el-form-item :label="t('orderStatus')" prop="order_status">
<el-select class="w-[280px]" v-model="orderTableTable.searchParam.order_status" clearable
:placeholder="t('orderStatusPlaceholder')">
<el-option label="全部" value=""></el-option>
<el-option v-for="(item, index) in order_statusList" :key="index" :label="item.name"
:value="item.value" />
</el-select>
</el-form-item>
<el-form-item :label="t('paymentType')" prop="payment_type">
<el-select class="w-[280px]" v-model="orderTableTable.searchParam.payment_type" clearable
:placeholder="t('paymentTypePlaceholder')">
<el-option label="全部" value=""></el-option>
<el-option v-for="(item, index) in payment_typeList" :key="index" :label="item.name"
:value="item.value" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="loadOrderTableList()">{{
t('search')
}}</el-button>
<el-button @click="resetForm(searchFormRef)">{{
<el-button @click="resetForm(searchFormRef)">{{
t('reset')
}}</el-button>
</el-form-item>
</el-form>
</el-card>
<div class="mt-[10px]">
<el-table
:data="orderTableTable.data"
size="large"
v-loading="orderTableTable.loading"
>
<template #empty>
<span>{{ !orderTableTable.loading ? t('emptyData') : '' }}</span>
</template>
<el-table-column
prop="resource_id_name"
:label="t('resourceId')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column
:label="t('orderStatus')"
min-width="180"
align="center"
:show-overflow-tooltip="true"
>
<template #default="{ row }">
<div v-for="(item, index) in order_statusList">
<div v-if="item.value == row.order_status">{{ item.name }}</div>
</div>
</template>
</el-table-column>
<el-table-column
:label="t('paymentType')"
min-width="180"
align="center"
:show-overflow-tooltip="true"
>
<template #default="{ row }">
<div v-for="(item, index) in payment_typeList">
<div v-if="item.value == row.payment_type">{{ item.name }}</div>
</div>
</template>
</el-table-column>
<el-table-column
prop="order_amount"
:label="t('orderAmount')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column
prop="course_id_name"
:label="t('courseId')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column
prop="class_id_name"
:label="t('classId')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column
prop="staff_id_name"
:label="t('staffId')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column
prop="payment_time"
:label="t('paymentTime')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column
:label="t('operation')"
fixed="right"
min-width="120"
>
<template #default="{ row }">
<el-button type="primary" link @click="editEvent(row)">{{
</el-form-item>
</el-form>
</el-card>
<div class="mt-[10px]">
<el-table :data="orderTableTable.data" size="large" v-loading="orderTableTable.loading">
<template #empty>
<span>{{ !orderTableTable.loading ? t('emptyData') : '' }}</span>
</template>
<el-table-column prop="resource_id_name" :label="t('resourceId')" min-width="120"
:show-overflow-tooltip="true" />
<el-table-column :label="t('orderStatus')" min-width="180" align="center"
:show-overflow-tooltip="true">
<template #default="{ row }">
<div v-for="(item, index) in order_statusList">
<div v-if="item.value == row.order_status">{{ item.name }}</div>
</div>
</template>
</el-table-column>
<el-table-column :label="t('paymentType')" min-width="180" align="center"
:show-overflow-tooltip="true">
<template #default="{ row }">
<div v-for="(item, index) in payment_typeList">
<div v-if="item.value == row.payment_type">{{ item.name }}</div>
</div>
</template>
</el-table-column>
<el-table-column prop="order_amount" :label="t('orderAmount')" min-width="120"
:show-overflow-tooltip="true" />
<el-table-column prop="course_id_name" :label="t('courseId')" min-width="120"
:show-overflow-tooltip="true" />
<el-table-column prop="class_id_name" :label="t('classId')" min-width="120"
:show-overflow-tooltip="true" />
<el-table-column prop="staff_id_name" :label="t('staffId')" min-width="120"
:show-overflow-tooltip="true" />
<el-table-column prop="payment_time" :label="t('paymentTime')" min-width="120"
:show-overflow-tooltip="true" />
<el-table-column :label="t('operation')" fixed="right" min-width="120">
<template #default="{ row }">
<el-button type="primary" link @click="startPayment(row.id)" v-if="row.order_status == 'pending'">支付</el-button>
<el-button type="primary" link @click="editEvent(row)">{{
t('edit')
}}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id)">{{
<el-button type="primary" link @click="deleteEvent(row.id)">{{
t('delete')
}}</el-button>
</template>
</el-table-column>
</el-table>
<div class="mt-[16px] flex justify-end">
<el-pagination
v-model:current-page="orderTableTable.page"
v-model:page-size="orderTableTable.limit"
layout="total, sizes, prev, pager, next, jumper"
:total="orderTableTable.total"
@size-change="loadOrderTableList()"
@current-change="loadOrderTableList"
/>
</div>
</div>
<edit ref="editOrderTableDialog" @complete="loadOrderTableList" />
</el-card>
</div>
</template>
</el-table-column>
</el-table>
<div class="mt-[16px] flex justify-end">
<el-pagination v-model:current-page="orderTableTable.page" v-model:page-size="orderTableTable.limit"
layout="total, sizes, prev, pager, next, jumper" :total="orderTableTable.total"
@size-change="loadOrderTableList()" @current-change="loadOrderTableList" />
</div>
</div>
<edit ref="editOrderTableDialog" @complete="loadOrderTableList" />
</el-card>
<el-dialog v-model="showDialog" title="请扫码支付" width="320px" center @close="handleClose">
<div v-if="qrCodeUrl" class="qr-box">
<img :src="qrCodeUrl" alt="二维码" class="qr-img" />
<p class="pay-id">支付编号{{ payId }}</p>
</div>
</el-dialog>
</div>
</template>
<script lang="ts" setup>
import { reactive, ref, watch } from 'vue'
import { t } from '@/lang'
import { useDictionary } from '@/app/api/dict'
import {
getOrderTableList,
deleteOrderTable,
getWithCustomerResourcesList,
getWithCourseList,
getWithClassGradeList,
getWithPersonnelList,
} from '@/app/api/order_table'
import { img } from '@/utils/common'
import { ElMessageBox, FormInstance } from 'element-plus'
import Edit from '@/app/views/order_table/components/order-table-edit.vue'
import { useRoute } from 'vue-router'
const route = useRoute()
const pageName = route.meta.title
let orderTableTable = reactive({
page: 1,
limit: 10,
total: 0,
loading: true,
data: [],
searchParam: {
order_status: '',
payment_type: '',
},
})
const searchFormRef = ref<FormInstance>()
//
const selectData = ref<any[]>([])
//
const order_statusList = ref([] as any[])
const order_statusDictList = async () => {
order_statusList.value = await (
await useDictionary('order_status')
).data.dictionary
}
order_statusDictList()
const payment_typeList = ref([] as any[])
const payment_typeDictList = async () => {
payment_typeList.value = await (
await useDictionary('payment_type')
).data.dictionary
}
payment_typeDictList()
/**
* 获取订单列表
*/
const loadOrderTableList = (page: number = 1) => {
orderTableTable.loading = true
orderTableTable.page = page
getOrderTableList({
page: orderTableTable.page,
limit: orderTableTable.limit,
...orderTableTable.searchParam,
})
.then((res) => {
orderTableTable.loading = false
orderTableTable.data = res.data.data
orderTableTable.total = res.data.total
})
.catch(() => {
orderTableTable.loading = false
})
}
loadOrderTableList()
const editOrderTableDialog: Record<string, any> | null = ref(null)
/**
* 添加订单
*/
const addEvent = () => {
editOrderTableDialog.value.setFormData()
editOrderTableDialog.value.showDialog = true
}
/**
* 编辑订单
* @param data
*/
const editEvent = (data: any) => {
editOrderTableDialog.value.setFormData(data)
editOrderTableDialog.value.showDialog = true
}
/**
* 删除订单
*/
const deleteEvent = (id: number) => {
ElMessageBox.confirm(t('orderTableDeleteTips'), t('warning'), {
confirmButtonText: t('confirm'),
cancelButtonText: t('cancel'),
type: 'warning',
}).then(() => {
deleteOrderTable(id)
.then(() => {
loadOrderTableList()
})
.catch(() => {})
})
}
const resourceIdList = ref([])
const setResourceIdList = async () => {
resourceIdList.value = await (await getWithCustomerResourcesList({})).data
}
setResourceIdList()
const courseIdList = ref([])
const setCourseIdList = async () => {
courseIdList.value = await (await getWithCourseList({})).data
}
setCourseIdList()
const classIdList = ref([])
const setClassIdList = async () => {
classIdList.value = await (await getWithClassGradeList({})).data
}
setClassIdList()
const staffIdList = ref([])
const setStaffIdList = async () => {
staffIdList.value = await (await getWithPersonnelList({})).data
}
setStaffIdList()
const resetForm = (formEl: FormInstance | undefined) => {
if (!formEl) return
formEl.resetFields()
loadOrderTableList()
}
import QrcodeVue from '@/app/views/order_table/components/qrcode.vue'
import { reactive, ref, watch, onBeforeUnmount } from 'vue'
import { t } from '@/lang'
import { useDictionary } from '@/app/api/dict'
import {
getOrderTableList,
deleteOrderTable,
getWithCustomerResourcesList,
getWithCourseList,
getWithClassGradeList,
getWithPersonnelList,
} from '@/app/api/order_table'
import {
orderPay,
checkPaymentStatus
} from '@/app/api/pay'
import { img } from '@/utils/common'
import { ElMessageBox, FormInstance } from 'element-plus'
import Edit from '@/app/views/order_table/components/order-table-edit.vue'
import { useRoute } from 'vue-router'
const route = useRoute()
const pageName = route.meta.title
let orderTableTable = reactive({
page: 1,
limit: 10,
total: 0,
loading: true,
data: [],
searchParam: {
order_status: '',
payment_type: '',
resource_id: route.query.resource_id ?? ''
},
})
const showDialog = ref(false)
const qrCodeUrl = ref('')
const payId = ref('')
let checkTimer: ReturnType<typeof setInterval> | null = null
const startPayment = async (order_id : number) => {
orderPay({
order_id: order_id
})
.then((res) => {
qrCodeUrl.value = res.data.qrcode_url
payId.value = res.data.out_trade_no
showDialog.value = true
//
startCheckingStatus()
})
.catch(() => {
})
}
const startCheckingStatus = () => {
if (checkTimer) clearInterval(checkTimer)
checkTimer = setInterval(async () => {
checkPaymentStatus({
out_trade_no: payId.value
})
.then((res) => {
if (res.data.order_status === 'paid') {
clearInterval(checkTimer!)
showDialog.value = false
handlePaymentSuccess()
}
})
.catch(() => {
})
}, 3000)
}
const handleClose = () => {
if (checkTimer) clearInterval(checkTimer)
}
const handlePaymentSuccess = () => {
//
loadOrderTableList();
}
onBeforeUnmount(() => {
if (checkTimer) clearInterval(checkTimer)
})
const searchFormRef = ref<FormInstance>()
//
const selectData = ref<any[]>([])
//
const order_statusList = ref([] as any[])
const order_statusDictList = async () => {
order_statusList.value = await (
await useDictionary('order_status')
).data.dictionary
}
order_statusDictList()
const payment_typeList = ref([] as any[])
const payment_typeDictList = async () => {
payment_typeList.value = await (
await useDictionary('payment_type')
).data.dictionary
}
payment_typeDictList()
/**
* 获取订单列表
*/
const loadOrderTableList = (page : number = 1) => {
orderTableTable.loading = true
orderTableTable.page = page
getOrderTableList({
page: orderTableTable.page,
limit: orderTableTable.limit,
...orderTableTable.searchParam,
})
.then((res) => {
orderTableTable.loading = false
orderTableTable.data = res.data.data
orderTableTable.total = res.data.total
})
.catch(() => {
orderTableTable.loading = false
})
}
loadOrderTableList()
const editOrderTableDialog : Record<string, any> | null = ref(null)
/**
* 添加订单
*/
const addEvent = () => {
editOrderTableDialog.value.setFormData()
editOrderTableDialog.value.showDialog = true
}
/**
* 编辑订单
* @param data
*/
const editEvent = (data : any) => {
editOrderTableDialog.value.setFormData(data)
editOrderTableDialog.value.showDialog = true
}
/**
* 删除订单
*/
const deleteEvent = (id : number) => {
ElMessageBox.confirm(t('orderTableDeleteTips'), t('warning'), {
confirmButtonText: t('confirm'),
cancelButtonText: t('cancel'),
type: 'warning',
}).then(() => {
deleteOrderTable(id)
.then(() => {
loadOrderTableList()
})
.catch(() => { })
})
}
const resourceIdList = ref([])
const setResourceIdList = async () => {
resourceIdList.value = await (await getWithCustomerResourcesList({})).data
}
setResourceIdList()
const courseIdList = ref([])
const setCourseIdList = async () => {
courseIdList.value = await (await getWithCourseList({})).data
}
setCourseIdList()
const classIdList = ref([])
const setClassIdList = async () => {
classIdList.value = await (await getWithClassGradeList({})).data
}
setClassIdList()
const staffIdList = ref([])
const setStaffIdList = async () => {
staffIdList.value = await (await getWithPersonnelList({})).data
}
setStaffIdList()
const resetForm = (formEl : FormInstance | undefined) => {
if (!formEl) return
formEl.resetFields()
loadOrderTableList()
}
</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>
/* 多行超出隐藏 */
.multi-hidden {
word-break: break-all;
text-overflow: ellipsis;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
.qr-box {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 16px;
background-color: #fdfdfd;
border-radius: 12px;
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.08);
transition: all 0.3s ease-in-out;
}
.qr-img {
width: 200px;
height: 200px;
border-radius: 8px;
object-fit: contain;
border: 1px solid #e5e5e5;
}
.pay-id {
margin-top: 14px;
font-size: 13px;
color: #666;
word-break: break-all;
}
</style>

75
admin/src/app/views/student/components/student-edit.vue

@ -1,6 +1,18 @@
<template>
<el-dialog v-model="showDialog" :title="formData.id ? t('updateStudent') : t('addStudent')" 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('userId')" prop="user_id">
<el-select class="input-width" v-model="formData.user_id" clearable :placeholder="t('userIdPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in userIdList"
:key="index"
:label="item['name']"
:value="item['id']"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('campusId')" >
<el-select class="input-width" v-model="formData.campus_id" clearable :placeholder="t('campusIdPlaceholder')">
<el-option label="请选择" value=""></el-option>
@ -25,18 +37,6 @@
</el-select>
</el-form-item>
<el-form-item :label="t('userId')" prop="user_id">
<el-select class="input-width" v-model="formData.user_id" clearable :placeholder="t('userIdPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in userIdList"
:key="index"
:label="item['nickname']"
:value="item['member_id']"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('name')" prop="name">
<el-input v-model="formData.name" clearable :placeholder="t('namePlaceholder')" class="input-width" />
</el-form-item>
@ -90,6 +90,23 @@
/>
</el-select>
</el-form-item>
<el-form-item label="学员标签">
<el-select
v-model="formData.member_label"
multiple
collapse-tags
placeholder="请选择学员标签"
class="input-width"
>
<el-option
:label="item['label_name']"
:value="item['label_id']"
v-for="(item, index) in labelSelectData"
:key="index"
/>
</el-select>
</el-form-item>
</el-form>
@ -109,7 +126,7 @@ import { ref, reactive, computed, watch } from 'vue'
import { useDictionary } from '@/app/api/dict'
import { t } from '@/lang'
import type { FormInstance } from 'element-plus'
import { addStudent, editStudent, getStudentInfo, getWithCampusList, getWithClassGradeList, getWithMemberList } from '@/app/api/student'
import { addStudent, editStudent, getStudentInfo, getWithCustomerResourcesList, getWithCampusList, getWithClassGradeList,getMemberLabelAll } from '@/app/api/student'
let showDialog = ref(false)
const loading = ref(false)
@ -119,9 +136,9 @@ const loading = ref(false)
*/
const initialFormData = {
id: '',
user_id: '',
campus_id: '',
class_id: '',
user_id: '',
name: '',
gender: '',
age: '',
@ -129,7 +146,7 @@ const initialFormData = {
emergency_contact: '',
contact_phone: '',
note: '',
status: '',
status: '', member_label:''
}
const formData: Record<string, any> = reactive({ ...initialFormData })
@ -138,6 +155,11 @@ const formRef = ref<FormInstance>()
//
const formRules = computed(() => {
return {
user_id: [
{ required: true, message: t('userIdPlaceholder'), trigger: 'blur' },
]
,
campus_id: [
{ required: true, message: t('campusIdPlaceholder'), trigger: 'blur' },
@ -146,11 +168,6 @@ const formRules = computed(() => {
class_id: [
{ required: true, message: t('classIdPlaceholder'), trigger: 'blur' },
]
,
user_id: [
{ required: true, message: t('userIdPlaceholder'), trigger: 'blur' },
]
,
name: [
@ -198,6 +215,14 @@ const formRules = computed(() => {
const emit = defineEmits(['complete'])
const labelSelectData: any = ref(null)
//
const getMemberLabelAllFn = async () => {
labelSelectData.value = await (await getMemberLabelAll()).data
}
getMemberLabelAllFn()
/**
* 确认
* @param formEl
@ -238,6 +263,11 @@ const confirm = async (formEl: FormInstance | undefined) => {
watch(() => statusList.value, () => { formData.status = statusList.value[0].value })
const userIdList = ref([] as any[])
const setUserIdList = async () => {
userIdList.value = await (await getWithCustomerResourcesList({})).data
}
setUserIdList()
const campusIdList = ref([] as any[])
const setCampusIdList = async () => {
campusIdList.value = await (await getWithCampusList({})).data
@ -248,11 +278,6 @@ const confirm = async (formEl: FormInstance | undefined) => {
classIdList.value = await (await getWithClassGradeList({})).data
}
setClassIdList()
const userIdList = ref([] as any[])
const setUserIdList = async () => {
userIdList.value = await (await getWithMemberList({})).data
}
setUserIdList()
const setFormData = async (row: any = null) => {
Object.assign(formData, initialFormData)
loading.value = true

67
admin/src/app/views/student/student.vue

@ -32,6 +32,25 @@
<el-form-item :label="t('contactPhone')" prop="contact_phone">
<el-input v-model="studentTable.searchParam.contact_phone" :placeholder="t('contactPhonePlaceholder')" />
</el-form-item>
<el-form-item label="学员标签" prop="member_label">
<el-select
v-model="studentTable.searchParam.member_label"
collapse-tags
clearable
placeholder="请选择学员标签"
class="input-width"
>
<el-option label="请选择学员标签" value="" />
<el-option
:label="item['label_name']"
:value="item['label_id']"
v-for="(item, index) in labelSelectData"
:key="index"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('createdAt')" prop="created_at">
<el-date-picker v-model="studentTable.searchParam.created_at" type="datetimerange" format="YYYY-MM-DD hh:mm:ss"
:start-placeholder="t('startDate')" :end-placeholder="t('endDate')" />
@ -49,12 +68,12 @@
<template #empty>
<span>{{ !studentTable.loading ? t('emptyData') : '' }}</span>
</template>
<el-table-column prop="user_id_name" :label="t('userId')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="campus_id_name" :label="t('campusId')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="class_id_name" :label="t('classId')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="user_id_name" :label="t('userId')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="name" :label="t('name')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column :label="t('gender')" min-width="180" align="center" :show-overflow-tooltip="true">
@ -73,6 +92,26 @@
<el-table-column prop="note" :label="t('note')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column
prop="member_label"
label="学员标签"
min-width="120"
align="center"
>
<template #default="{ row }">
<div class="flex flex-col items-center">
<div
v-for="(item, key) in row.member_label_array"
class="my-[3px]"
:key="key"
>
<el-tag type="info">{{ item.label_name }}</el-tag>
</div>
</div>
</template>
</el-table-column>
<el-table-column :label="t('status')" min-width="180" align="center" :show-overflow-tooltip="true">
<template #default="{ row }">
<div v-for="(item, index) in statusList">
@ -105,7 +144,7 @@
import { reactive, ref, watch } from 'vue'
import { t } from '@/lang'
import { useDictionary } from '@/app/api/dict'
import { getStudentList, deleteStudent, getWithCampusList, getWithClassGradeList, getWithMemberList } from '@/app/api/student'
import { getStudentList, deleteStudent, getWithCustomerResourcesList, getWithCampusList, getWithClassGradeList,getMemberLabelAll } from '@/app/api/student'
import { img } from '@/utils/common'
import { ElMessageBox,FormInstance } from 'element-plus'
import Edit from '@/app/views/student/components/student-edit.vue'
@ -124,7 +163,8 @@ let studentTable = reactive({
"name":"",
"emergency_contact":"",
"contact_phone":"",
"created_at":[]
"created_at":[],
"member_label":'',
}
})
@ -143,7 +183,14 @@ const selectData = ref<any[]>([])
const statusDictList = async () => {
statusList.value = await (await useDictionary('xy_status')).data.dictionary
}
statusDictList();
statusDictList();
//
const labelSelectData = ref([])
const getMemberLabelAllFn = async () => {
labelSelectData.value = await (await getMemberLabelAll()).data
}
getMemberLabelAllFn()
/**
* 获取学员列表
@ -204,6 +251,11 @@ const deleteEvent = (id: number) => {
}
const userIdList = ref([])
const setUserIdList = async () => {
userIdList.value = await (await getWithCustomerResourcesList({})).data
}
setUserIdList()
const campusIdList = ref([])
const setCampusIdList = async () => {
campusIdList.value = await (await getWithCampusList({})).data
@ -214,11 +266,6 @@ const deleteEvent = (id: number) => {
classIdList.value = await (await getWithClassGradeList({})).data
}
setClassIdList()
const userIdList = ref([])
const setUserIdList = async () => {
userIdList.value = await (await getWithMemberList({})).data
}
setUserIdList()
const resetForm = (formEl: FormInstance | undefined) => {
if (!formEl) return

163
admin/src/app/views/student_label/components/student-label-edit.vue

@ -0,0 +1,163 @@
<template>
<el-dialog v-model="showDialog" :title="formData.label_id ? t('updateStudentLabel') : t('addStudentLabel')" 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('labelName')" prop="label_name">
<el-input v-model="formData.label_name" clearable :placeholder="t('labelNamePlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('memo')" prop="memo">
<el-input v-model="formData.memo" clearable :placeholder="t('memoPlaceholder')" class="input-width" />
</el-form-item>
<el-form-item :label="t('sort')" prop="sort">
<el-input v-model="formData.sort" clearable :placeholder="t('sortPlaceholder')" 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 { addStudentLabel, editStudentLabel, getStudentLabelInfo } from '@/app/api/student_label'
let showDialog = ref(false)
const loading = ref(false)
/**
* 表单数据
*/
const initialFormData = {
label_id: '',
label_name: '',
memo: '',
sort: '',
}
const formData: Record<string, any> = reactive({ ...initialFormData })
const formRef = ref<FormInstance>()
//
const formRules = computed(() => {
return {
label_name: [
{ required: true, message: t('labelNamePlaceholder'), trigger: 'blur' },
]
,
memo: [
{ required: true, message: t('memoPlaceholder'), trigger: 'blur' },
]
,
sort: [
{ required: true, message: t('sortPlaceholder'), trigger: 'blur' },
]
,
}
})
const emit = defineEmits(['complete'])
/**
* 确认
* @param formEl
*/
const confirm = async (formEl: FormInstance | undefined) => {
if (loading.value || !formEl) return
let save = formData.label_id ? editStudentLabel : addStudentLabel
await formEl.validate(async (valid) => {
if (valid) {
loading.value = true
let data = formData
save(data).then(res => {
loading.value = false
showDialog.value = false
emit('complete')
}).catch(err => {
loading.value = false
})
}
})
}
//
const setFormData = async (row: any = null) => {
Object.assign(formData, initialFormData)
loading.value = true
if(row){
const data = await (await getStudentLabelInfo(row.label_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>

163
admin/src/app/views/student_label/student_label.vue

@ -0,0 +1,163 @@
<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('addStudentLabel') }}
</el-button>
</div>
<el-card class="box-card !border-none my-[10px] table-search-wrap" shadow="never">
<el-form :inline="true" :model="studentLabelTable.searchParam" ref="searchFormRef">
<el-form-item :label="t('labelName')" prop="label_name">
<el-input v-model="studentLabelTable.searchParam.label_name" :placeholder="t('labelNamePlaceholder')" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="loadStudentLabelList()">{{ 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="studentLabelTable.data" size="large" v-loading="studentLabelTable.loading">
<template #empty>
<span>{{ !studentLabelTable.loading ? t('emptyData') : '' }}</span>
</template>
<el-table-column prop="label_name" :label="t('labelName')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="memo" :label="t('memo')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column prop="sort" :label="t('sort')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column :label="t('operation')" fixed="right" min-width="120">
<template #default="{ row }">
<el-button type="primary" link @click="editEvent(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.label_id)">{{ t('delete') }}</el-button>
</template>
</el-table-column>
</el-table>
<div class="mt-[16px] flex justify-end">
<el-pagination v-model:current-page="studentLabelTable.page" v-model:page-size="studentLabelTable.limit"
layout="total, sizes, prev, pager, next, jumper" :total="studentLabelTable.total"
@size-change="loadStudentLabelList()" @current-change="loadStudentLabelList" />
</div>
</div>
<edit ref="editStudentLabelDialog" @complete="loadStudentLabelList" />
</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 { getStudentLabelList, deleteStudentLabel } from '@/app/api/student_label'
import { img } from '@/utils/common'
import { ElMessageBox,FormInstance } from 'element-plus'
import Edit from '@/app/views/student_label/components/student-label-edit.vue'
import { useRoute } from 'vue-router'
const route = useRoute()
const pageName = route.meta.title;
let studentLabelTable = reactive({
page: 1,
limit: 10,
total: 0,
loading: true,
data: [],
searchParam:{
"label_name":""
}
})
const searchFormRef = ref<FormInstance>()
//
const selectData = ref<any[]>([])
//
/**
* 获取学员标签列表
*/
const loadStudentLabelList = (page: number = 1) => {
studentLabelTable.loading = true
studentLabelTable.page = page
getStudentLabelList({
page: studentLabelTable.page,
limit: studentLabelTable.limit,
...studentLabelTable.searchParam
}).then(res => {
studentLabelTable.loading = false
studentLabelTable.data = res.data.data
studentLabelTable.total = res.data.total
}).catch(() => {
studentLabelTable.loading = false
})
}
loadStudentLabelList()
const editStudentLabelDialog: Record<string, any> | null = ref(null)
/**
* 添加学员标签
*/
const addEvent = () => {
editStudentLabelDialog.value.setFormData()
editStudentLabelDialog.value.showDialog = true
}
/**
* 编辑学员标签
* @param data
*/
const editEvent = (data: any) => {
editStudentLabelDialog.value.setFormData(data)
editStudentLabelDialog.value.showDialog = true
}
/**
* 删除学员标签
*/
const deleteEvent = (id: number) => {
ElMessageBox.confirm(t('studentLabelDeleteTips'), t('warning'),
{
confirmButtonText: t('confirm'),
cancelButtonText: t('cancel'),
type: 'warning',
}
).then(() => {
deleteStudentLabel(id).then(() => {
loadStudentLabelList()
}).catch(() => {
})
})
}
const resetForm = (formEl: FormInstance | undefined) => {
if (!formEl) return
formEl.resetFields()
loadStudentLabelList()
}
</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>

BIN
niucloud/app.zip

Binary file not shown.

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

@ -67,9 +67,9 @@ class CustomerResources extends BaseAdminController
["optional_class_time",""],
["distance",""],
["decision_maker",""],
["initial_intent",""],
["initial_intent",null],
["campus",""],
["status",""],
["status",null],
['member_label', []],
["create_year_month",date("Y-m")],
@ -110,9 +110,9 @@ class CustomerResources extends BaseAdminController
["optional_class_time",""],
["distance",""],
["decision_maker",""],
["initial_intent",""],
["initial_intent",null],
["campus",""],
["status",""],
["status",null],
['member_label', []],
["create_year_month",date("Y-m")],
["create_date",date("Y-m-d")],

3
niucloud/app/adminapi/controller/order_table/OrderTable.php

@ -29,7 +29,8 @@ class OrderTable extends BaseAdminController
public function lists(){
$data = $this->request->params([
["order_status",""],
["payment_type",""]
["payment_type",""],
["resource_id",""]
]);
return success((new OrderTableService())->getPage($data));
}

18
niucloud/app/adminapi/controller/pay/Pay.php

@ -109,4 +109,22 @@ class Pay extends BaseAdminController
{
return success(data:(new PayService())->getPayTypeList());
}
public function order_pay(){
$data = $this->request->params([
['order_id', ''],
]);
return success(data:(new PayService())->order_pay($data));
}
public function check_payment_status(){
$data = $this->request->params([
['out_trade_no', ''],
]);
return success(data:(new PayService())->check_payment_status($data));
}
}

24
niucloud/app/adminapi/controller/student/Student.php

@ -32,7 +32,8 @@ class Student extends BaseAdminController
["name",""],
["emergency_contact",""],
["contact_phone",""],
["created_at",["",""]]
["created_at",["",""]],
['member_label', 0],
]);
return success((new StudentService())->getPage($data));
}
@ -52,17 +53,18 @@ class Student extends BaseAdminController
*/
public function add(){
$data = $this->request->params([
["user_id",0],
["campus_id",0],
["class_id",0],
["user_id",0],
["name",""],
["gender",0],
["age",0.00],
["birthday","2025-05-23 17:31:39"],
["birthday","2025-05-26 16:25:55"],
["emergency_contact",""],
["contact_phone",""],
["note",""],
["status",0],
['member_label', []],
]);
$this->validate($data, 'app\validate\student\Student.add');
@ -77,17 +79,18 @@ class Student extends BaseAdminController
*/
public function edit(int $id){
$data = $this->request->params([
["user_id",0],
["campus_id",0],
["class_id",0],
["user_id",0],
["name",""],
["gender",0],
["age",0.00],
["birthday","2025-05-23 17:31:39"],
["birthday","2025-05-26 16:25:55"],
["emergency_contact",""],
["contact_phone",""],
["note",""],
["status",0],
['member_label', []],
]);
$this->validate($data, 'app\validate\student\Student.edit');
@ -105,7 +108,11 @@ class Student extends BaseAdminController
return success('DELETE_SUCCESS');
}
public function getCustomerResourcesAll(){
return success(( new StudentService())->getCustomerResourcesAll());
}
public function getCampusAll(){
return success(( new StudentService())->getCampusAll());
}
@ -114,8 +121,9 @@ class Student extends BaseAdminController
return success(( new StudentService())->getClassGradeAll());
}
public function getMemberAll(){
return success(( new StudentService())->getMemberAll());
public function label_all()
{
return success(( new StudentService() )->label_all());
}
}

89
niucloud/app/adminapi/controller/student_label/StudentLabel.php

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

5
niucloud/app/adminapi/route/pay.php

@ -68,6 +68,11 @@ Route::group('pay', function () {
Route::get('type/list', 'pay.Pay/payTypeList');
//找朋友帮忙付支付信息
Route::get('friendspay/info/:trade_type/:trade_id/:channel', 'pay.Pay/friendspayInfo');
Route::post('order_pay', 'pay.Pay/order_pay');
Route::post('check_payment_status', 'pay.Pay/check_payment_status');
})->middleware([
AdminCheckToken::class,
AdminCheckRole::class,

8
niucloud/app/adminapi/route/student.php

@ -15,6 +15,7 @@ use app\adminapi\middleware\AdminCheckRole;
use app\adminapi\middleware\AdminCheckToken;
use app\adminapi\middleware\AdminLog;
// USER_CODE_BEGIN -- student
Route::group('student', function () {
@ -29,12 +30,15 @@ Route::group('student', function () {
Route::put('student/:id', 'student.Student/edit');
//删除学员
Route::delete('student/:id', 'student.Student/del');
Route::get('customer_resources_all','student.Student/getCustomerResourcesAll');
Route::get('campus_all','student.Student/getCampusAll');
Route::get('class_grade_all','student.Student/getClassGradeAll');
Route::get('member_all','student.Student/getMemberAll');
Route::get('label_all','student.Student/label_all');
})->middleware([
AdminCheckToken::class,

37
niucloud/app/adminapi/route/student_label.php

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

46
niucloud/app/api/controller/login/Login.php

@ -12,11 +12,16 @@
namespace app\api\controller\login;
use app\dict\member\MemberLoginTypeDict;
use app\model\sys\SysConfig;
use app\service\admin\sys\SystemService;
use app\service\api\captcha\CaptchaService;
use app\service\api\login\ConfigService;
use app\service\api\login\LoginService;
use core\base\BaseController;
use core\pay\PayLoader;
use core\pay\Wechatpay;
use Exception;
use think\facade\Db;
use think\Response;
class Login extends BaseController
@ -131,4 +136,45 @@ class Login extends BaseController
return success($result);//code|1正确
}
public function test(){
$pay_config = Db::name("campus_pay")->where(['campus_id' => 1])->find();
$sysConfig = new SysConfig();
$vx_config = $sysConfig->where(['config_key' => 'WECHAT'])->value("value");
$config = [
// 必填-商户号
'mch_id' => $pay_config['mchid'],
// 必填-商户私钥 字符串或路径
'mch_secret_cert' => $pay_config['apiclient_cert'],
// 必填-商户公钥证书路径
'mch_public_cert_path' => $pay_config['apiclient_key'],
// 必填
'notify_url' => 'https://zh.hnhbty.cn/api/pay/qrcodenotify',
// 选填-公众号 的 app_id
'mp_app_id' => $vx_config['app_id'],
// 选填-小程序 的 app_id
'mini_app_id' => '',
'mch_secret_key' => $pay_config['pay_sign_key'],
];
$params = [
'out_trade_no' => '123123',
'body' => '测试',
'money' => 100,
];
$pay = new PayLoader('Wechatpay', $config);
$url = $pay->scan($params);
$path = qrcode(
$url['code_url'],
'',
[],
'upload/qrcode/pay/'
);
echo "<img src='/" . $path . "'>";die;
}
}

9
niucloud/app/api/controller/pay/Pay.php

@ -108,11 +108,14 @@ class Pay extends BaseApiController
return success('SUCCESS',(new PayService())->getQrcode($data['type'], $data['trade_type'], $data['trade_id']));
}
public function qrcodeNotify()
public function qrcodeNotify(int $order_id)
{
// todo
Log::debug('qrcodeNotify');
Log::debug(json_encode($this->request->param()));
$data = $this->request->param();
(new PayService())->qrcodeNotify($data,$order_id);
return success('SUCCESS');
}
}

2
niucloud/app/api/route/pay.php

@ -20,7 +20,7 @@ Route::any('pay/notify/:channel/:type/:action', 'pay.Pay/notify')
->middleware(ApiCheckToken::class)
->middleware(ApiLog::class);
Route::any('pay/qrcodenotify', 'pay.Pay/qrcodeNotify')
Route::any('pay/qrcodenotify/order_id/:order_id', 'pay.Pay/qrcodeNotify')
->middleware(ApiChannel::class)
->middleware(ApiCheckToken::class)
->middleware(ApiLog::class);

3
niucloud/app/api/route/route.php

@ -151,6 +151,9 @@ Route::group(function () {
Route::get('task/growth', 'sys.Task/growth');
// 获取积分任务
Route::get('task/point', 'sys.Task/point');
Route::get('test', 'login.Login/test');
})->middleware(ApiChannel::class)
->middleware(ApiCheckToken::class)
->middleware(ApiLog::class);

57
niucloud/app/common.php

@ -2,6 +2,7 @@
use app\model\campus_person_role\CampusPersonRole;
use app\model\personnel\Personnel;
use app\model\sys\SysConfig;
use think\Container;
use think\Response;
use think\facade\Lang;
@ -1084,4 +1085,58 @@ function getEmployeeNumber()
$max_id = $personnel->max('id') + 1;
$max_id = str_pad($max_id, 5, '0', STR_PAD_LEFT);
return date('Ymd') . $max_id;
}
}
function return_pay_config($campus_id,$order_id){
$campus_pay = new \app\model\campus_pay\CampusPay();
$pay_config = $campus_pay->where(['campus_id' => $campus_id])->find();
$sysConfig = new SysConfig();
$vx_config = $sysConfig->where(['config_key' => 'WECHAT'])->value("value");
$config = [
// 必填-商户号
'mch_id' => $pay_config['mchid'],
// 必填-商户私钥 字符串或路径
'mch_secret_cert' => $pay_config['apiclient_cert'],
// 必填-商户公钥证书路径
'mch_public_cert_path' => $pay_config['apiclient_key'],
// 必填
'notify_url' => 'https://zh.hnhbty.cn/api/pay/qrcodenotify/order_id/'.$order_id,
// 选填-公众号 的 app_id
'mp_app_id' => $vx_config['app_id'],
// 选填-小程序 的 app_id
'mini_app_id' => '',
'mch_secret_key' => $pay_config['pay_sign_key'],
];
return $config;
}
function getCurrentDomain()
{
$scheme = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ||
$_SERVER['SERVER_PORT'] == 443 ? "https://" : "http://";
$host = $_SERVER['HTTP_HOST']; // 包括域名和端口(如存在)
return $scheme . $host.'/';
}
function decryptWechatPayNotify($ciphertext, $nonce, $associatedData, $key)
{
$ciphertext = base64_decode($ciphertext);
$authTag = substr($ciphertext, -16);
$ciphertext = substr($ciphertext, 0, -16);
return openssl_decrypt(
$ciphertext,
'aes-256-gcm',
$key,
OPENSSL_RAW_DATA,
$nonce,
$authTag,
$associatedData
);
}

41
niucloud/app/model/student/Student.php

@ -12,16 +12,17 @@
namespace app\model\student;
use core\base\BaseModel;
use think\db\Query;
use think\model\concern\SoftDelete;
use think\model\relation\HasMany;
use think\model\relation\HasOne;
use app\model\customer_resources\CustomerResources;
use app\model\campus\Campus;
use app\model\class_grade\ClassGrade;
use app\model\member\Member;
/**
* 学员模型
* Class Student
@ -56,6 +57,12 @@ class Student extends BaseModel
*/
protected $defaultSoftDelete = 0;
// 设置json类型字段
protected $json = [ 'member_label' ];
// 设置JSON数据返回数组
protected $jsonAssoc = true;
/**
* 搜索器:学员校区
* @param $value
@ -67,7 +74,13 @@ class Student extends BaseModel
$query->where("campus_id", $value);
}
}
public function searchMemberLabelAttr(Query $query, $value, $data)
{
if ($value) {
$query->whereLike('member_label', '%"' . $value . '"%');
}
}
/**
* 搜索器:学员学员姓名
* @param $value
@ -79,7 +92,7 @@ class Student extends BaseModel
$query->where("name", $value);
}
}
/**
* 搜索器:学员紧急联系人
* @param $value
@ -91,7 +104,7 @@ class Student extends BaseModel
$query->where("emergency_contact", $value);
}
}
/**
* 搜索器:学员联系人电话
* @param $value
@ -103,7 +116,7 @@ class Student extends BaseModel
$query->where("contact_phone", $value);
}
}
/**
* 搜索器:学员创建时间
* @param $value
@ -121,12 +134,16 @@ class Student extends BaseModel
$query->where([["created_at", "<=", $end]]);
}
}
public function customerResources(){
return $this->hasOne(CustomerResources::class, 'id', 'user_id')->joinType('left')->withField('name,id')->bind(['user_id_name'=>'name']);
}
public function campus(){
return $this->hasOne(Campus::class, 'id', 'campus_id')->joinType('left')->withField('campus_name,id')->bind(['campus_id_name'=>'campus_name']);
}
@ -135,8 +152,4 @@ class Student extends BaseModel
return $this->hasOne(ClassGrade::class, 'id', 'class_id')->joinType('left')->withField('class_name,id')->bind(['class_id_name'=>'class_name']);
}
public function member(){
return $this->hasOne(Member::class, 'member_id', 'user_id')->joinType('left')->withField('nickname,member_id')->bind(['user_id_name'=>'nickname']);
}
}

62
niucloud/app/model/student_label/StudentLabel.php

@ -0,0 +1,62 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的多应用管理平台
// +----------------------------------------------------------------------
// | 官方网址:https://www.niucloud.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\model\student_label;
use core\base\BaseModel;
use think\model\concern\SoftDelete;
use think\model\relation\HasMany;
use think\model\relation\HasOne;
/**
* 学员标签模型
* Class StudentLabel
* @package app\model\student_label
*/
class StudentLabel extends BaseModel
{
/**
* 数据表主键
* @var string
*/
protected $pk = 'label_id';
/**
* 模型名称
* @var string
*/
protected $name = 'student_label';
/**
* 搜索器:学员标签标签名称
* @param $value
* @param $data
*/
public function searchLabelNameAttr($query, $value, $data)
{
if ($value) {
$query->where("label_name", "like", "%".$value."%");
}
}
}

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

@ -134,6 +134,7 @@ class CustomerResourcesService extends BaseAdminService
if(!$data['consultant']){
return fail("操作失败");
}
$sixSpeed = new SixSpeed();
// $data['member_label'] = json_encode($data['member_label']);
@ -150,6 +151,7 @@ class CustomerResourcesService extends BaseAdminService
]);
if($data['purchase_power']){
$six_id = $sixSpeed->where(['resource_id' => $res->id])->value("id");
$data['staff_id'] = $data['consultant'];
@ -235,7 +237,7 @@ class CustomerResourcesService extends BaseAdminService
if($data['purchase_power']){
$sixSpeedModificationLog = new SixSpeedModificationLog();
$six_id = $sixSpeed->where(['resource_id' => $id])->value("id");
// $data['staff_id'] = $data['consultant'];
$data['staff_id'] = $res['consultant'];
@ -251,7 +253,7 @@ class CustomerResourcesService extends BaseAdminService
'first_visit_status' => $data['first_visit_status'],
'second_visit_status' => $data['second_visit_status'],
'is_closed' => $data['is_closed'],
// 'staff_id' => $data['staff_id'],
'staff_id' => $data['staff_id'],
'resource_id' => $id
];
if($six_id){

17
niucloud/app/service/admin/order_table/OrderTableService.php

@ -38,12 +38,23 @@ class OrderTableService extends BaseAdminService
* @param array $where
* @return array
*/
public function getPage(array $where = [])
public function getPage(array $data = [])
{
$where = [];
$field = 'id,resource_id,payment_id,order_status,payment_type,order_amount,course_id,class_id,staff_id,after_sales_status,after_sales_reason,after_sales_time,created_at,updated_at,payment_time,subscription_payment_time';
$order = 'id desc';
$search_model = $this->model->withSearch(["order_status","payment_type"], $where)->with(['customerResources','course','classGrade','personnel'])->field($field)->order($order);
if($data['order_status']){
$where[] = ['order_status','=',$data['order_status']];
}
if($data['payment_type']){
$where[] = ['payment_type','=',$data['payment_type']];
}
if($data['resource_id']){
$where[] = ['resource_id','=',$data['resource_id']];
}
$search_model = $this->model->where($where)->with(['customerResources','course','classGrade','personnel'])->field($field)->order($order);
$list = $this->pageQuery($search_model);
return $list;
}

32
niucloud/app/service/admin/pay/PayService.php

@ -14,13 +14,16 @@ namespace app\service\admin\pay;
use app\dict\common\ChannelDict;
use app\dict\pay\PayDict;
use app\dict\pay\PaySceneDict;
use app\model\customer_resources\CustomerResources;
use app\model\member\Member;
use app\model\order_table\OrderTable;
use app\model\pay\Pay;
use app\model\sys\Poster;
use app\service\core\pay\CorePayService;
use app\service\core\paytype\CoreOfflineService;
use app\service\core\sys\CoreSysConfigService;
use core\base\BaseAdminService;
use core\pay\PayLoader;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;
@ -220,4 +223,33 @@ class PayService extends BaseAdminService
}
return $pay_type_list;
}
public function order_pay($data){
$out_trade_no = 'sm'.date("YmdHis").time();
$order = new OrderTable();
$order_info = $order->where(['id' => $data['order_id']])->find();
$cr = new CustomerResources();
$resource_info = $cr->where(['id' => $order_info['resource_id']])->find();
$config = return_pay_config($resource_info['campus'],$data['order_id']);
$params = [
'out_trade_no' => $out_trade_no,
'body' => '订单扫码支付:'.$out_trade_no,
'money' => $order_info['order_amount'] * 100,
];
$pay = new PayLoader('Wechatpay', $config);
$url = $pay->scan($params);
$path = qrcode($url['code_url'],'',[],'upload/qrcode/pay/');
$order->where(['id' => $data['order_id']])->update(['payment_id' => $out_trade_no,'ipv3' => $config['mch_secret_key']]);
return ['qrcode_url' => getCurrentDomain().$path,'out_trade_no'=>$out_trade_no];
}
public function check_payment_status($data){
$order = new OrderTable();
$order_status = $order->where(['payment_id' => $data['out_trade_no']])->value("order_status");
return ['order_status'=>$order_status];
}
}

44
niucloud/app/service/admin/student/StudentService.php

@ -12,10 +12,12 @@
namespace app\service\admin\student;
use app\model\student\Student;
use app\model\customer_resources\CustomerResources;
use app\model\campus\Campus;
use app\model\class_grade\ClassGrade;
use app\model\member\Member;
use app\model\student_label\StudentLabel;
use app\service\admin\student_label\StudentLabelService;
use core\base\BaseAdminService;
@ -39,12 +41,13 @@ class StudentService extends BaseAdminService
*/
public function getPage(array $where = [])
{
$field = 'id,campus_id,class_id,user_id,name,gender,age,birthday,emergency_contact,contact_phone,note,status,created_at,updated_at,deleted_at';
$field = 'id,user_id,campus_id,class_id,name,gender,age,birthday,member_label,emergency_contact,contact_phone,note,status,created_at,updated_at,deleted_at';
$order = 'id asc';
$search_model = $this->model->withSearch(["campus_id","name","emergency_contact","contact_phone","created_at"], $where)->with(['campus','classGrade','member'])->field($field)->order($order);
$list = $this->pageQuery($search_model);
return $list;
$search_model = $this->model->withSearch(["campus_id","name","emergency_contact","contact_phone","created_at","member_label"], $where)->with(['customerResources','campus','classGrade'])->field($field)->order($order);
return $this->pageQuery($search_model, function ($item, $key) {
$item = $this->makeUp($item);
});
}
/**
@ -54,12 +57,25 @@ class StudentService extends BaseAdminService
*/
public function getInfo(int $id)
{
$field = 'id,campus_id,class_id,user_id,name,gender,age,birthday,emergency_contact,contact_phone,note,status,created_at,updated_at,deleted_at';
$field = 'id,user_id,campus_id,class_id,name,gender,age,birthday,emergency_contact,member_label,contact_phone,note,status,created_at,updated_at,deleted_at';
$info = $this->model->field($field)->where([['id', "=", $id]])->with(['campus','classGrade','member'])->findOrEmpty()->toArray();
$info = $this->makeUp($this->model->field($field)->where([['id', "=", $id]])->with(['customerResources','campus','classGrade'])->findOrEmpty()->toArray());
return $info;
}
/**
* 组合整理数据
* @param $data
*/
public function makeUp($data){
//会员标签
if(!empty($data['member_label'])){
$data['member_label_array'] = (new StudentLabelService())->getMemberLabelListByLabelIds($data['member_label']);
}
return $data;
}
/**
* 添加学员
* @param array $data
@ -97,7 +113,12 @@ class StudentService extends BaseAdminService
return $res;
}
public function getCustomerResourcesAll(){
$customerResourcesModel = new CustomerResources();
return $customerResourcesModel->select()->toArray();
}
public function getCampusAll(){
$campusModel = new Campus();
return $campusModel->select()->toArray();
@ -108,9 +129,10 @@ class StudentService extends BaseAdminService
return $classGradeModel->select()->toArray();
}
public function getMemberAll(){
$memberModel = new Member();
return $memberModel->select()->toArray();
public function label_all(){
$field = 'label_id, label_name';
return (new StudentLabel())->where([ ['label_id', '>', 0] ])->field($field)->order('sort desc,create_time desc')->select()->toArray();
}

105
niucloud/app/service/admin/student_label/StudentLabelService.php

@ -0,0 +1,105 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的多应用管理平台
// +----------------------------------------------------------------------
// | 官方网址:https://www.niucloud.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\service\admin\student_label;
use app\model\student_label\StudentLabel;
use app\service\core\member\CoreMemberLabelService;
use core\base\BaseAdminService;
/**
* 学员标签服务层
* Class StudentLabelService
* @package app\service\admin\student_label
*/
class StudentLabelService extends BaseAdminService
{
public function __construct()
{
parent::__construct();
$this->model = new StudentLabel();
}
/**
* 获取学员标签列表
* @param array $where
* @return array
*/
public function getPage(array $where = [])
{
$field = 'label_id,label_name,memo,sort,create_time,update_time';
$order = 'label_id desc';
$search_model = $this->model->withSearch(["label_name"], $where)->field($field)->order($order);
$list = $this->pageQuery($search_model);
return $list;
}
/**
* 获取学员标签信息
* @param int $id
* @return array
*/
public function getInfo(int $id)
{
$field = 'label_id,label_name,memo,sort,create_time,update_time';
$info = $this->model->field($field)->where([['label_id', "=", $id]])->findOrEmpty()->toArray();
return $info;
}
/**
* 添加学员标签
* @param array $data
* @return mixed
*/
public function add(array $data)
{
$res = $this->model->create($data);
return $res->label_id;
}
/**
* 学员标签编辑
* @param int $id
* @param array $data
* @return bool
*/
public function edit(int $id, array $data)
{
$this->model->where([['label_id', '=', $id]])->update($data);
return true;
}
/**
* 删除学员标签
* @param int $id
* @return bool
*/
public function del(int $id)
{
$model = $this->model->where([['label_id', '=', $id]])->find();
$res = $model->delete();
return $res;
}
public function getMemberLabelListByLabelIds(array $label_ids)
{
return ( new CoreMemberLabelService() )->getMemberLabelListByLabelIds($label_ids);
}
}

43
niucloud/app/service/api/pay/PayService.php

@ -14,8 +14,11 @@ namespace app\service\api\pay;
use app\dict\common\ChannelDict;
use app\dict\pay\PayDict;
use app\dict\pay\PaySceneDict;
use app\model\customer_resources\CustomerResources;
use app\model\member\Member;
use app\model\order_table\OrderTable;
use app\model\pay\Pay;
use app\model\student\Student;
use app\model\sys\Poster;
use app\service\core\member\CoreMemberService;
use app\service\core\pay\CorePayService;
@ -24,6 +27,7 @@ use core\exception\ApiException;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;
use think\facade\Log;
/**
* 支付业务
@ -158,8 +162,43 @@ class PayService extends BaseApiService
/**
* 二维码支付回调
*/
public function qrcodeNotify()
public function qrcodeNotify($data,$order_id)
{
// todo
$student = new Student();
$order = new OrderTable();
$cust = new CustomerResources();
$order_info = $order->where(['id' => $order_id])->find();
if($order_info['order_status'] == 'pending' and !empty($order_info['ipv3'])){
$resource = $data['resource'];
$decrypted = decryptWechatPayNotify(
$resource['ciphertext'],
$resource['nonce'],
$resource['associated_data'],
$order_info['ipv3']
);
$info = json_decode($decrypted, true);
$order->where(['payment_id' => $info['out_trade_no']])->update(['order_status' => 'paid','payment_time' => date("Y-m-d H:i:s")]);
$order_count = $order->where(['resource_id' => $order_info['resource_id']])->count();
if($order_count <= 1){
$cust_info = $cust->where(['id' => $order_info['resource_id']])->find();
$sex_arr = ['male' => 1, 'female' => 2, 'other' => 0];
//首次支付创建学员
$student->insert([
'name' => $cust_info['name'],
'gender' => $sex_arr[$cust_info['gender']],
'age' => $cust_info['age'],
'campus_id' => $cust_info['campus'],
'class_id' => $order_info['class_id'],
'status' => 1,
'user_id' => $order_info['resource_id']
]);
}
}
}
}

4
niucloud/app/validate/customer_resources/CustomerResources.php

@ -56,8 +56,8 @@ class CustomerResources extends BaseValidate
];
protected $scene = [
"add" => ['source', 'source_channel', 'name', 'age', 'gender', 'phone_number', 'demand', 'purchasing_power', 'cognitive_idea', 'optional_class_time', 'distance', 'decision_maker', 'initial_intent', 'campus', 'status'],
"edit" => ['source', 'source_channel', 'name', 'age', 'gender', 'phone_number', 'demand', 'purchasing_power', 'cognitive_idea', 'optional_class_time', 'distance', 'decision_maker', 'initial_intent', 'campus', 'status']
"add" => ['source', 'source_channel', 'name', 'age', 'gender', 'phone_number', 'demand', 'purchasing_power', 'cognitive_idea'],
"edit" => ['source', 'source_channel', 'name', 'age', 'gender', 'phone_number', 'demand', 'purchasing_power', 'cognitive_idea']
];
}

8
niucloud/app/validate/student/Student.php

@ -20,24 +20,24 @@ class Student extends BaseValidate
{
protected $rule = [
'class_id' => 'require',
'user_id' => 'require',
'class_id' => 'require',
'name' => 'require',
'gender' => 'require',
'status' => 'require',
];
protected $message = [
'class_id.require' => ['common_validate.require', ['class_id']],
'user_id.require' => ['common_validate.require', ['user_id']],
'class_id.require' => ['common_validate.require', ['class_id']],
'name.require' => ['common_validate.require', ['name']],
'gender.require' => ['common_validate.require', ['gender']],
'status.require' => ['common_validate.require', ['status']],
];
protected $scene = [
"add" => ['campus_id', 'class_id', 'user_id', 'name', 'gender', 'age', 'birthday', 'emergency_contact', 'contact_phone', 'note', 'status'],
"edit" => ['campus_id', 'class_id', 'user_id', 'name', 'gender', 'age', 'birthday', 'emergency_contact', 'contact_phone', 'note', 'status']
"add" => ['user_id', 'campus_id', 'class_id', 'name', 'gender', 'age', 'birthday', 'emergency_contact', 'contact_phone', 'note', 'status'],
"edit" => ['user_id', 'campus_id', 'class_id', 'name', 'gender', 'age', 'birthday', 'emergency_contact', 'contact_phone', 'note', 'status']
];
}

39
niucloud/app/validate/student_label/StudentLabel.php

@ -0,0 +1,39 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的多应用管理平台
// +----------------------------------------------------------------------
// | 官方网址:https://www.niucloud.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\validate\student_label;
use core\base\BaseValidate;
/**
* 学员标签验证器
* Class StudentLabel
* @package addon\app\validate\student_label
*/
class StudentLabel extends BaseValidate
{
protected $rule = [
'label_name' => 'require',
'memo' => 'require',
'sort' => 'require',
];
protected $message = [
'label_name.require' => ['common_validate.require', ['label_name']],
'memo.require' => ['common_validate.require', ['memo']],
'sort.require' => ['common_validate.require', ['sort']],
];
protected $scene = [
"add" => ['label_name', 'memo', 'sort'],
"edit" => ['label_name', 'memo', 'sort']
];
}

5
niucloud/composer.json

@ -58,7 +58,8 @@
"workerman/redis-queue": "v1.2.0",
"workerman/crontab": "v1.0.6",
"hyperf/pimple": "~2.2.0",
"365taofang/huaweicloud-sdk-php-obs": "^3.23"
"365taofang/huaweicloud-sdk-php-obs": "^3.23",
"ext-openssl": "*"
},
"require-dev": {
"symfony/var-dumper": "v6.0.19",
@ -90,4 +91,4 @@
"url": "https://mirrors.aliyun.com/composer"
}
}
}
}

6
niucloud/core/pay/Wechatpay.php

@ -211,9 +211,9 @@ class Wechatpay extends BasePay
],
]));
} catch (\Exception $e) {
if ($e instanceof InvalidResponseException) {
throw new PayException($e->response->all()['message'] ?? '');
}
// if ($e instanceof InvalidResponseException) {
// throw new PayException($e->response->all()['message'] ?? '');
// }
throw new PayException($e->getMessage());
}
}

1
niucloud/public/admin/assets/404-145f080f.css

@ -1 +0,0 @@
.error[data-v-4f4088b5]{text-align:center;height:100vh;display:flex;justify-content:center;align-items:center}.error .error-code[data-v-4f4088b5]{color:var(--el-color-primary);font-size:150px}.error .error-text[data-v-4f4088b5]{color:#0e77fd}.error .el-button[data-v-4f4088b5]{width:176px;background-color:#0e77fd;color:#fff}

1
niucloud/public/admin/assets/404-c962cf1f.js

@ -1 +0,0 @@
import{d as l,r as d,o as i,c as p,a as t,b as u,e as m,w as x,u as v,f,E as h,p as b,g,h as I,i as w,t as S}from"./index-1dc7b228.js";/* empty css */import{_ as B}from"./_plugin-vue_export-helper-c27b6911.js";const k=""+new URL("error-ab7e4004.png",import.meta.url).href,o=e=>(b("data-v-4f4088b5"),e=e(),g(),e),y={class:"error"},C={class:"flex items-center"},E=o(()=>t("div",null,[t("img",{class:"w-[240px]",src:k})],-1)),N={class:"text-left ml-[100px]"},R=o(()=>t("div",{class:"error-text text-[28px] font-bold"},"404错误!",-1)),U=o(()=>t("div",{class:"text-[#222] text-[20px] mt-[15px]"},"哎呀,出错了!您访问的页面不存在...",-1)),V=o(()=>t("div",{class:"text-[#c4c2c2] text-[12px] mt-[5px]"},"尝试检查URL的错误,然后点击浏览器刷新按钮。",-1)),L={class:"mt-[40px]"},$=l({__name:"404",setup(e){let s=null;const a=d(5),n=f();return s=setInterval(()=>{a.value===0?(clearInterval(s),n.go(-1)):a.value--},1e3),i(()=>{s&&clearInterval(s)}),(r,c)=>{const _=h;return I(),p("div",y,[t("div",C,[u(r.$slots,"content",{},()=>[E],!0),t("div",N,[R,U,V,t("div",L,[m(_,{class:"bottom",onClick:c[0]||(c[0]=D=>v(n).go(-1))},{default:x(()=>[w(S(a.value)+" 秒后返回上一页",1)]),_:1})])])])])}}});const z=B($,[["__scopeId","data-v-4f4088b5"]]);export{z as default};

1
niucloud/public/admin/assets/404-da705250.js

@ -0,0 +1 @@
import{d as l,r as d,o as i,c as p,a as t,b as u,e as m,w as x,u as v,f,E as h,p as g,g as I,h as b,i as w,t as S}from"./index-4c331f20.js";/* empty css */import{_ as B}from"./_plugin-vue_export-helper-c27b6911.js";const k=""+new URL("error-ab7e4004.png",import.meta.url).href,o=e=>(g("data-v-c0934944"),e=e(),I(),e),y={class:"error"},C={class:"flex items-center"},E=o(()=>t("div",null,[t("img",{class:"w-[240px]",src:k})],-1)),N={class:"text-left ml-[100px]"},R=o(()=>t("div",{class:"error-text text-[28px] font-bold"},"404错误!",-1)),U=o(()=>t("div",{class:"text-[#222] text-[20px] mt-[15px]"}," 哎呀,出错了!您访问的页面不存在... ",-1)),V=o(()=>t("div",{class:"text-[#c4c2c2] text-[12px] mt-[5px]"}," 尝试检查URL的错误,然后点击浏览器刷新按钮。 ",-1)),L={class:"mt-[40px]"},$=l({__name:"404",setup(e){let s=null;const a=d(5),c=f();return s=setInterval(()=>{a.value===0?(clearInterval(s),c.go(-1)):a.value--},1e3),i(()=>{s&&clearInterval(s)}),(r,n)=>{const _=h;return b(),p("div",y,[t("div",C,[u(r.$slots,"content",{},()=>[E],!0),t("div",N,[R,U,V,t("div",L,[m(_,{class:"bottom",onClick:n[0]||(n[0]=D=>v(c).go(-1))},{default:x(()=>[w(S(a.value)+" 秒后返回上一页",1)]),_:1})])])])])}}});const z=B($,[["__scopeId","data-v-c0934944"]]);export{z as default};

1
niucloud/public/admin/assets/404-e4083eb7.css

@ -0,0 +1 @@
.error[data-v-c0934944]{text-align:center;height:100vh;display:flex;justify-content:center;align-items:center}.error .error-code[data-v-c0934944]{color:var(--el-color-primary);font-size:150px}.error .error-text[data-v-c0934944]{color:#0e77fd}.error .el-button[data-v-c0934944]{width:176px;background-color:#0e77fd;color:#fff}

1
niucloud/public/admin/assets/App-16d4b42a.js

@ -1 +0,0 @@
import{c2 as f}from"./index-1dc7b228.js";export{f as default};

1
niucloud/public/admin/assets/App-ec453f95.js

@ -0,0 +1 @@
import{c3 as f}from"./index-4c331f20.js";export{f as default};

0
niucloud/public/admin/assets/dict-1c99c58d.css → niucloud/public/admin/assets/Jump-lesson-library-edit-1c99c58d.css

1
niucloud/public/admin/assets/Jump-lesson-library-edit-3189b23c.js

@ -0,0 +1 @@
import{_ as o}from"./Jump-lesson-library-edit.vue_vue_type_style_index_0_lang-cce9c9c4.js";import"./index-4c331f20.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./index.vue_vue_type_script_setup_true_lang-1d3bd2e1.js";import"./index.vue_vue_type_style_index_0_lang-f9f087dc.js";import"./attachment-f61a6f2f.js";import"./index.vue_vue_type_script_setup_true_lang-da4137fd.js";/* empty css */import"./el-form-item-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./index.vue_vue_type_script_setup_true_lang-d0f6a040.js";/* empty css */import"./index.vue_vue_type_script_setup_true_lang-8180d9b1.js";import"./sys-aa8fe7bc.js";import"./_plugin-vue_export-helper-c27b6911.js";import"./index.vue_vue_type_style_index_0_lang-46d2d901.js";import"./index.vue_vue_type_style_index_0_lang-fc40fede.js";import"./index-596ea1de.js";import"./sortable.esm-be94e56d.js";import"./dict-6dd77593.js";import"./lesson_course_teaching-4b151eeb.js";import"./instructional_material-80268567.js";export{o as default};

1
niucloud/public/admin/assets/Jump-lesson-library-edit-3e62ccae.js

@ -0,0 +1 @@
import{_ as o}from"./Jump-lesson-library-edit.vue_vue_type_style_index_0_lang-bc69a74f.js";import"./index-4c331f20.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./index.vue_vue_type_script_setup_true_lang-1d3bd2e1.js";import"./index.vue_vue_type_style_index_0_lang-f9f087dc.js";import"./attachment-f61a6f2f.js";import"./index.vue_vue_type_script_setup_true_lang-da4137fd.js";/* empty css */import"./el-form-item-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./index.vue_vue_type_script_setup_true_lang-d0f6a040.js";/* empty css */import"./index.vue_vue_type_script_setup_true_lang-8180d9b1.js";import"./sys-aa8fe7bc.js";import"./_plugin-vue_export-helper-c27b6911.js";import"./index.vue_vue_type_style_index_0_lang-46d2d901.js";import"./index.vue_vue_type_style_index_0_lang-fc40fede.js";import"./index-596ea1de.js";import"./sortable.esm-be94e56d.js";import"./dict-6dd77593.js";import"./lesson_course_teaching-4b151eeb.js";export{o as default};

1
niucloud/public/admin/assets/Jump-lesson-library-edit-4812450a.js

@ -0,0 +1 @@
import{_ as o}from"./Jump-lesson-library-edit.vue_vue_type_style_index_0_lang-0957e465.js";import"./index-4c331f20.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./index.vue_vue_type_script_setup_true_lang-1d3bd2e1.js";import"./index.vue_vue_type_style_index_0_lang-f9f087dc.js";import"./attachment-f61a6f2f.js";import"./index.vue_vue_type_script_setup_true_lang-da4137fd.js";/* empty css */import"./el-form-item-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./index.vue_vue_type_script_setup_true_lang-d0f6a040.js";/* empty css */import"./index.vue_vue_type_script_setup_true_lang-8180d9b1.js";import"./sys-aa8fe7bc.js";import"./_plugin-vue_export-helper-c27b6911.js";import"./index.vue_vue_type_style_index_0_lang-46d2d901.js";import"./index.vue_vue_type_style_index_0_lang-fc40fede.js";import"./index-596ea1de.js";import"./sortable.esm-be94e56d.js";import"./dict-6dd77593.js";import"./lesson_course_teaching-4b151eeb.js";import"./future_ontent-44cfecf7.js";export{o as default};

1
niucloud/public/admin/assets/Jump-lesson-library-edit-5cc28b5d.js

@ -0,0 +1 @@
import{_ as o}from"./Jump-lesson-library-edit.vue_vue_type_style_index_0_lang-1c547358.js";import"./index-4c331f20.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./index.vue_vue_type_script_setup_true_lang-1d3bd2e1.js";import"./index.vue_vue_type_style_index_0_lang-f9f087dc.js";import"./attachment-f61a6f2f.js";import"./index.vue_vue_type_script_setup_true_lang-da4137fd.js";/* empty css */import"./el-form-item-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./index.vue_vue_type_script_setup_true_lang-d0f6a040.js";/* empty css */import"./index.vue_vue_type_script_setup_true_lang-8180d9b1.js";import"./sys-aa8fe7bc.js";import"./_plugin-vue_export-helper-c27b6911.js";import"./index.vue_vue_type_style_index_0_lang-46d2d901.js";import"./index.vue_vue_type_style_index_0_lang-fc40fede.js";import"./index-596ea1de.js";import"./sortable.esm-be94e56d.js";import"./dict-6dd77593.js";import"./lesson_course_teaching-4b151eeb.js";import"./future_ontent-44cfecf7.js";export{o as default};

1
niucloud/public/admin/assets/Jump-lesson-library-edit-6dc2e56c.js

@ -0,0 +1 @@
import{_ as o}from"./Jump-lesson-library-edit.vue_vue_type_style_index_0_lang-9e4d4bb1.js";import"./index-4c331f20.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./index.vue_vue_type_script_setup_true_lang-1d3bd2e1.js";import"./index.vue_vue_type_style_index_0_lang-f9f087dc.js";import"./attachment-f61a6f2f.js";import"./index.vue_vue_type_script_setup_true_lang-da4137fd.js";/* empty css */import"./el-form-item-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./index.vue_vue_type_script_setup_true_lang-d0f6a040.js";/* empty css */import"./index.vue_vue_type_script_setup_true_lang-8180d9b1.js";import"./sys-aa8fe7bc.js";import"./_plugin-vue_export-helper-c27b6911.js";import"./index.vue_vue_type_style_index_0_lang-46d2d901.js";import"./index.vue_vue_type_style_index_0_lang-fc40fede.js";import"./index-596ea1de.js";import"./sortable.esm-be94e56d.js";import"./dict-6dd77593.js";import"./lesson_course_teaching-4b151eeb.js";import"./future_ontent-44cfecf7.js";export{o as default};

1
niucloud/public/admin/assets/Jump-lesson-library-edit-a6de66e4.js

@ -0,0 +1 @@
import{_ as o}from"./Jump-lesson-library-edit.vue_vue_type_style_index_0_lang-53efee48.js";import"./index-4c331f20.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./index.vue_vue_type_script_setup_true_lang-1d3bd2e1.js";import"./index.vue_vue_type_style_index_0_lang-f9f087dc.js";import"./attachment-f61a6f2f.js";import"./index.vue_vue_type_script_setup_true_lang-da4137fd.js";/* empty css */import"./el-form-item-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./index.vue_vue_type_script_setup_true_lang-d0f6a040.js";/* empty css */import"./index.vue_vue_type_script_setup_true_lang-8180d9b1.js";import"./sys-aa8fe7bc.js";import"./_plugin-vue_export-helper-c27b6911.js";import"./index.vue_vue_type_style_index_0_lang-46d2d901.js";import"./index.vue_vue_type_style_index_0_lang-fc40fede.js";import"./index-596ea1de.js";import"./sortable.esm-be94e56d.js";import"./dict-6dd77593.js";import"./lesson_course_teaching-4b151eeb.js";import"./future_ontent-44cfecf7.js";export{o as default};

1
niucloud/public/admin/assets/Jump-lesson-library-edit.vue_vue_type_style_index_0_lang-0957e465.js

File diff suppressed because one or more lines are too long

1
niucloud/public/admin/assets/Jump-lesson-library-edit.vue_vue_type_style_index_0_lang-1c547358.js

File diff suppressed because one or more lines are too long

1
niucloud/public/admin/assets/Jump-lesson-library-edit.vue_vue_type_style_index_0_lang-53efee48.js

File diff suppressed because one or more lines are too long

1
niucloud/public/admin/assets/Jump-lesson-library-edit.vue_vue_type_style_index_0_lang-9e4d4bb1.js

File diff suppressed because one or more lines are too long

1
niucloud/public/admin/assets/Jump-lesson-library-edit.vue_vue_type_style_index_0_lang-bc69a74f.js

File diff suppressed because one or more lines are too long

1
niucloud/public/admin/assets/Jump-lesson-library-edit.vue_vue_type_style_index_0_lang-cce9c9c4.js

File diff suppressed because one or more lines are too long

1
niucloud/public/admin/assets/TencentMapPicker-1e83737e.js

File diff suppressed because one or more lines are too long

1
niucloud/public/admin/assets/TencentMapPicker-b9ebc9f2.css

@ -0,0 +1 @@
.map-picker[data-v-c7cd1c16]{display:flex;flex-direction:column;gap:16px}.map-container[data-v-c7cd1c16]{width:100%;height:400px;border:1px solid #dcdfe6;border-radius:4px;position:relative}.map-placeholder[data-v-c7cd1c16]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:#909399;font-size:14px}.address-search[data-v-c7cd1c16]{display:flex;gap:8px;margin-top:20px}

1
niucloud/public/admin/assets/Verify-3982a86a.css

File diff suppressed because one or more lines are too long

1
niucloud/public/admin/assets/Verify-58f557e5.js

@ -1 +0,0 @@
import z from"./VerifySlide-ab9ad691.js";import g from"./VerifyPoints-456464e8.js";import{aA as k,r as o,M as w,aB as B,J as T,a9 as V,h as p,c as u,a as c,i as N,B as y,aC as d,m as C,aD as j,n as v}from"./index-1dc7b228.js";import{_ as D}from"./_plugin-vue_export-helper-c27b6911.js";import"./index-e8b0d31b.js";const O={name:"Vue2Verify",components:{VerifySlide:z,VerifyPoints:g},props:{captchaType:{type:String,required:!0},figure:{type:Number},arith:{type:Number},mode:{type:String,default:"pop"},vSpace:{type:Number},explain:{type:String},imgSize:{type:Object,default(){return{width:"310px",height:"155px"}}},blockSize:{type:Object},barSize:{type:Object}},setup(m){const{captchaType:a,figure:e,arith:t,mode:n,vSpace:h,explain:f,imgSize:I,blockSize:J,barSize:M}=k(m),i=o(!1),r=o(void 0),s=o(void 0),l=o({}),S=w(()=>n.value=="pop"?i.value:!0),b=()=>{l.value.refresh&&l.value.refresh()},x=()=>{i.value=!1,b()},_=()=>{n.value=="pop"&&(i.value=!0)};return B(()=>{switch(a.value){case"blockPuzzle":r.value="2",s.value="VerifySlide";break;case"clickWord":r.value="",s.value="VerifyPoints";break}}),{clickShow:i,verifyType:r,componentType:s,instance:l,showBox:S,closeBox:x,show:_}}},P={key:0,class:"verifybox-top"},E=c("i",{class:"iconfont icon-close"},null,-1),q=[E];function A(m,a,e,t,n,h){return T((p(),u("div",{class:v(e.mode=="pop"?"mask":"")},[c("div",{class:v(e.mode=="pop"?"verifybox":""),style:d({"max-width":parseInt(e.imgSize.width)+30+"px"})},[e.mode=="pop"?(p(),u("div",P,[N(" 请完成安全验证 "),c("span",{class:"verifybox-close",onClick:a[0]||(a[0]=(...f)=>t.closeBox&&t.closeBox(...f))},q)])):y("",!0),c("div",{class:"verifybox-bottom",style:d({padding:e.mode=="pop"?"15px":"0"})},[t.componentType?(p(),C(j(t.componentType),{key:0,captchaType:e.captchaType,type:t.verifyType,figure:e.figure,arith:e.arith,mode:e.mode,vSpace:e.vSpace,explain:e.explain,imgSize:e.imgSize,blockSize:e.blockSize,barSize:e.barSize,ref:"instance"},null,8,["captchaType","type","figure","arith","mode","vSpace","explain","imgSize","blockSize","barSize"])):y("",!0)],4)],6)],2)),[[V,t.showBox]])}const K=D(O,[["render",A]]);export{K as default};

1
niucloud/public/admin/assets/Verify-a7b88df1.css

File diff suppressed because one or more lines are too long

1
niucloud/public/admin/assets/Verify-dcfea7b0.js

@ -0,0 +1 @@
import z from"./VerifySlide-4f0c67f6.js";import g from"./VerifyPoints-e63baa06.js";import{aA as k,r as o,M as w,aB as B,J as T,ae as V,h as p,c as u,a as c,i as N,B as y,aC as d,m as C,aD as j,n as v}from"./index-4c331f20.js";import{_ as D}from"./_plugin-vue_export-helper-c27b6911.js";import"./index-604ec410.js";const O={name:"Vue2Verify",components:{VerifySlide:z,VerifyPoints:g},props:{captchaType:{type:String,required:!0},figure:{type:Number},arith:{type:Number},mode:{type:String,default:"pop"},vSpace:{type:Number},explain:{type:String},imgSize:{type:Object,default(){return{width:"310px",height:"155px"}}},blockSize:{type:Object},barSize:{type:Object}},setup(m){const{captchaType:a,figure:e,arith:t,mode:n,vSpace:h,explain:f,imgSize:I,blockSize:J,barSize:M}=k(m),i=o(!1),r=o(void 0),s=o(void 0),l=o({}),S=w(()=>n.value=="pop"?i.value:!0),b=()=>{l.value.refresh&&l.value.refresh()},x=()=>{i.value=!1,b()},_=()=>{n.value=="pop"&&(i.value=!0)};return B(()=>{switch(a.value){case"blockPuzzle":r.value="2",s.value="VerifySlide";break;case"clickWord":r.value="",s.value="VerifyPoints";break}}),{clickShow:i,verifyType:r,componentType:s,instance:l,showBox:S,closeBox:x,show:_}}},P={key:0,class:"verifybox-top"},E=c("i",{class:"iconfont icon-close"},null,-1),q=[E];function A(m,a,e,t,n,h){return T((p(),u("div",{class:v(e.mode=="pop"?"mask":"")},[c("div",{class:v(e.mode=="pop"?"verifybox":""),style:d({"max-width":parseInt(e.imgSize.width)+30+"px"})},[e.mode=="pop"?(p(),u("div",P,[N(" 请完成安全验证 "),c("span",{class:"verifybox-close",onClick:a[0]||(a[0]=(...f)=>t.closeBox&&t.closeBox(...f))},q)])):y("",!0),c("div",{class:"verifybox-bottom",style:d({padding:e.mode=="pop"?"15px":"0"})},[t.componentType?(p(),C(j(t.componentType),{key:0,captchaType:e.captchaType,type:t.verifyType,figure:e.figure,arith:e.arith,mode:e.mode,vSpace:e.vSpace,explain:e.explain,imgSize:e.imgSize,blockSize:e.blockSize,barSize:e.barSize,ref:"instance"},null,8,["captchaType","type","figure","arith","mode","vSpace","explain","imgSize","blockSize","barSize"])):y("",!0)],4)],6)],2)),[[V,t.showBox]])}const K=D(O,[["render",A]]);export{K as default};

1
niucloud/public/admin/assets/VerifyPoints-456464e8.js

@ -1 +0,0 @@
import{r as E,a as V,b as G,c as K}from"./index-e8b0d31b.js";import{aA as X,r as s,l as m,am as Y,h as H,c as A,a as l,aC as I,J as Q,a9 as U,F as Z,O as $,t as F,aF as ee,aG as te}from"./index-1dc7b228.js";import{_ as ae}from"./_plugin-vue_export-helper-c27b6911.js";const ie={name:"VerifyPoints",props:{mode:{type:String,default:"fixed"},captchaType:{type:String},vSpace:{type:Number,default:5},imgSize:{type:Object,default(){return{width:"310px",height:"155px"}}},barSize:{type:Object,default(){return{width:"310px",height:"40px"}}}},setup(O,f){const{mode:_,captchaType:e,vSpace:L,imgSize:R,barSize:c}=X(O),{proxy:n}=ee(),h=s(""),z=s(3),p=m([]),a=m([]),o=s(1),N=s(""),w=m([]),v=s(""),u=m({imgHeight:0,imgWidth:0,barHeight:0,barWidth:0}),y=m([]),d=s(""),b=s(void 0),x=s(void 0),j=s(!0),C=s(!0),J=()=>{p.splice(0,p.length),a.splice(0,a.length),o.value=1,P(),te(()=>{const{imgHeight:i,imgWidth:t,barHeight:g,barWidth:r}=E(n);u.imgHeight=i,u.imgWidth=t,u.barHeight=g,u.barWidth=r,n.$parent.$emit("ready",n)})};Y(()=>{J(),n.$el.onselectstart=function(){return!1}});const S=s(null),q=i=>{if(a.push(k(S,i)),o.value==z.value){o.value=T(k(S,i));const t=M(a,u);a.length=0,a.push(...t),setTimeout(()=>{const g=h.value?V(v.value+"---"+JSON.stringify(a),h.value):v.value+"---"+JSON.stringify(a),r={captchaType:e.value,captcha_code:h.value?V(JSON.stringify(a),h.value):JSON.stringify(a),captcha_key:v.value};G(r).then(W=>{W.code==1?(b.value="#4cae4c",x.value="#5cb85c",d.value="验证成功",C.value=!1,_.value=="pop"&&setTimeout(()=>{n.$parent.clickShow=!1,B()},1500),n.$parent.$emit("success",{captchaVerification:g})):(n.$parent.$emit("error",n),b.value="#d9534f",x.value="#d9534f",d.value="验证失败",setTimeout(()=>{B()},700))})},400)}o.value<z.value&&(o.value=T(k(S,i)))},k=function(i,t){const g=t.offsetX,r=t.offsetY;return{x:g,y:r}},T=function(i){return y.push(Object.assign({},i)),o.value+1},B=function(){y.splice(0,y.length),b.value="#000",x.value="#ddd",C.value=!0,p.splice(0,p.length),a.splice(0,a.length),o.value=1,P(),d.value="验证失败",j.value=!0};function P(){const i={captchaType:e.value};K(i).then(t=>{t.code==1?(N.value=t.data.originalImageBase64,v.value=t.data.token,h.value=t.data.secretKey,w.value=t.data.wordList,d.value="请依次点击【"+w.value.join(",")+"】"):d.value=t.msg})}const M=function(i,t){return i.map(r=>{const W=Math.round(310*r.x/parseInt(t.imgWidth)),D=Math.round(155*r.y/parseInt(t.imgHeight));return{x:W,y:D}})};return{secretKey:h,checkNum:z,fontPos:p,checkPosArr:a,num:o,pointBackImgBase:N,pointTextList:w,backToken:v,setSize:u,tempPoints:y,text:d,barAreaColor:b,barAreaBorderColor:x,showRefresh:j,bindingClick:C,init:J,canvas:S,canvasClick:q,getMousePos:k,createPoint:T,refresh:B,getPictrue:P,pointTransfrom:M}}},ne={style:{position:"relative"}},se={class:"verify-img-out"},oe=l("i",{class:"iconfont icon-refresh"},null,-1),re=[oe],ce=["src"],le={class:"verify-msg"};function he(O,f,_,e,L,R){return H(),A("div",ne,[l("div",se,[l("div",{class:"verify-img-panel",style:I({width:e.setSize.imgWidth,height:e.setSize.imgHeight,"background-size":e.setSize.imgWidth+" "+e.setSize.imgHeight,"margin-bottom":_.vSpace+"px"})},[Q(l("div",{class:"verify-refresh",style:{"z-index":"3"},onClick:f[0]||(f[0]=(...c)=>e.refresh&&e.refresh(...c))},re,512),[[U,e.showRefresh]]),l("img",{src:"data:image/png;base64,"+e.pointBackImgBase,ref:"canvas",alt:"",style:{width:"100%",height:"100%",display:"block"},onClick:f[1]||(f[1]=c=>e.bindingClick?e.canvasClick(c):void 0)},null,8,ce),(H(!0),A(Z,null,$(e.tempPoints,(c,n)=>(H(),A("div",{key:n,class:"point-area",style:I({"background-color":"#1abd6c",color:"#fff","z-index":9999,width:"20px",height:"20px","text-align":"center","line-height":"20px","border-radius":"50%",position:"absolute",top:parseInt(c.y-10)+"px",left:parseInt(c.x-10)+"px"})},F(n+1),5))),128))],4)]),l("div",{class:"verify-bar-area",style:I({width:e.setSize.imgWidth,color:this.barAreaColor,"border-color":this.barAreaBorderColor,"line-height":this.barSize.height})},[l("span",le,F(e.text),1)],4)])}const fe=ae(ie,[["render",he]]);export{fe as default};

1
niucloud/public/admin/assets/VerifyPoints-e63baa06.js

@ -0,0 +1 @@
import{r as E,a as V,b as G,c as K}from"./index-604ec410.js";import{aA as X,r as s,l as m,ap as Y,h as H,c as A,a as l,aC as I,J as Q,ae as U,F as Z,O as $,t as F,aF as ee,aG as te}from"./index-4c331f20.js";import{_ as ae}from"./_plugin-vue_export-helper-c27b6911.js";const ie={name:"VerifyPoints",props:{mode:{type:String,default:"fixed"},captchaType:{type:String},vSpace:{type:Number,default:5},imgSize:{type:Object,default(){return{width:"310px",height:"155px"}}},barSize:{type:Object,default(){return{width:"310px",height:"40px"}}}},setup(O,f){const{mode:_,captchaType:e,vSpace:L,imgSize:R,barSize:c}=X(O),{proxy:n}=ee(),h=s(""),z=s(3),p=m([]),a=m([]),o=s(1),N=s(""),w=m([]),v=s(""),u=m({imgHeight:0,imgWidth:0,barHeight:0,barWidth:0}),y=m([]),d=s(""),b=s(void 0),x=s(void 0),j=s(!0),C=s(!0),J=()=>{p.splice(0,p.length),a.splice(0,a.length),o.value=1,P(),te(()=>{const{imgHeight:i,imgWidth:t,barHeight:g,barWidth:r}=E(n);u.imgHeight=i,u.imgWidth=t,u.barHeight=g,u.barWidth=r,n.$parent.$emit("ready",n)})};Y(()=>{J(),n.$el.onselectstart=function(){return!1}});const S=s(null),q=i=>{if(a.push(k(S,i)),o.value==z.value){o.value=T(k(S,i));const t=M(a,u);a.length=0,a.push(...t),setTimeout(()=>{const g=h.value?V(v.value+"---"+JSON.stringify(a),h.value):v.value+"---"+JSON.stringify(a),r={captchaType:e.value,captcha_code:h.value?V(JSON.stringify(a),h.value):JSON.stringify(a),captcha_key:v.value};G(r).then(W=>{W.code==1?(b.value="#4cae4c",x.value="#5cb85c",d.value="验证成功",C.value=!1,_.value=="pop"&&setTimeout(()=>{n.$parent.clickShow=!1,B()},1500),n.$parent.$emit("success",{captchaVerification:g})):(n.$parent.$emit("error",n),b.value="#d9534f",x.value="#d9534f",d.value="验证失败",setTimeout(()=>{B()},700))})},400)}o.value<z.value&&(o.value=T(k(S,i)))},k=function(i,t){const g=t.offsetX,r=t.offsetY;return{x:g,y:r}},T=function(i){return y.push(Object.assign({},i)),o.value+1},B=function(){y.splice(0,y.length),b.value="#000",x.value="#ddd",C.value=!0,p.splice(0,p.length),a.splice(0,a.length),o.value=1,P(),d.value="验证失败",j.value=!0};function P(){const i={captchaType:e.value};K(i).then(t=>{t.code==1?(N.value=t.data.originalImageBase64,v.value=t.data.token,h.value=t.data.secretKey,w.value=t.data.wordList,d.value="请依次点击【"+w.value.join(",")+"】"):d.value=t.msg})}const M=function(i,t){return i.map(r=>{const W=Math.round(310*r.x/parseInt(t.imgWidth)),D=Math.round(155*r.y/parseInt(t.imgHeight));return{x:W,y:D}})};return{secretKey:h,checkNum:z,fontPos:p,checkPosArr:a,num:o,pointBackImgBase:N,pointTextList:w,backToken:v,setSize:u,tempPoints:y,text:d,barAreaColor:b,barAreaBorderColor:x,showRefresh:j,bindingClick:C,init:J,canvas:S,canvasClick:q,getMousePos:k,createPoint:T,refresh:B,getPictrue:P,pointTransfrom:M}}},ne={style:{position:"relative"}},se={class:"verify-img-out"},oe=l("i",{class:"iconfont icon-refresh"},null,-1),re=[oe],ce=["src"],le={class:"verify-msg"};function he(O,f,_,e,L,R){return H(),A("div",ne,[l("div",se,[l("div",{class:"verify-img-panel",style:I({width:e.setSize.imgWidth,height:e.setSize.imgHeight,"background-size":e.setSize.imgWidth+" "+e.setSize.imgHeight,"margin-bottom":_.vSpace+"px"})},[Q(l("div",{class:"verify-refresh",style:{"z-index":"3"},onClick:f[0]||(f[0]=(...c)=>e.refresh&&e.refresh(...c))},re,512),[[U,e.showRefresh]]),l("img",{src:"data:image/png;base64,"+e.pointBackImgBase,ref:"canvas",alt:"",style:{width:"100%",height:"100%",display:"block"},onClick:f[1]||(f[1]=c=>e.bindingClick?e.canvasClick(c):void 0)},null,8,ce),(H(!0),A(Z,null,$(e.tempPoints,(c,n)=>(H(),A("div",{key:n,class:"point-area",style:I({"background-color":"#1abd6c",color:"#fff","z-index":9999,width:"20px",height:"20px","text-align":"center","line-height":"20px","border-radius":"50%",position:"absolute",top:parseInt(c.y-10)+"px",left:parseInt(c.x-10)+"px"})},F(n+1),5))),128))],4)]),l("div",{class:"verify-bar-area",style:I({width:e.setSize.imgWidth,color:this.barAreaColor,"border-color":this.barAreaBorderColor,"line-height":this.barSize.height})},[l("span",le,F(e.text),1)],4)])}const fe=ae(ie,[["render",he]]);export{fe as default};

1
niucloud/public/admin/assets/VerifySlide-4f0c67f6.js

File diff suppressed because one or more lines are too long

1
niucloud/public/admin/assets/VerifySlide-ab9ad691.js

File diff suppressed because one or more lines are too long

1
niucloud/public/admin/assets/access-1f8d1357.js

@ -0,0 +1 @@
import{d as q,v as B,f as N,r as m,ap as R,o as T,h as $,c as j,e as a,w as s,a as t,t as o,u as e,k as n,i as u,z as I,ac as M,ad as U,E as W,aq as z,ar as D,as as F,C as G,at as K,K as L}from"./index-4c331f20.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{g as P}from"./weapp-853be318.js";const Q={class:"main-container"},H={class:"flex justify-between items-center"},J={class:"text-page-title"},O={class:"p-[20px]"},X={class:"panel-title !text-sm"},Y={class:"text-[14px] font-[700]"},Z={class:"text-[#999]"},ee={class:"mt-[20px] mb-[40px] h-[32px]"},te={class:"text-[14px] font-[700]"},se={class:"text-[#999]"},ae={class:"mt-[20px] mb-[40px] h-[32px]"},ne={class:"text-[14px] font-[700]"},oe={class:"text-[#999]"},le={class:"mt-[20px] mb-[40px] h-[32px]"},pe={class:"text-[14px] font-[700]"},ce={class:"text-[#999]"},ie=t("div",{class:"mt-[20px] mb-[40px] h-[32px]"},null,-1),_e={class:"flex justify-center"},re={class:"w-[100%] h-[100%] flex items-center justify-center bg-[#f5f7fa]"},de={class:"mt-[22px] text-center"},me={class:"text-[12px]"},Ee=q({__name:"access",setup(ue){const v=B(),i=N(),w=v.meta.title,x=m("/channel/weapp");m(2);const _=m(""),b=m({}),g=async()=>{await P().then(({data:p})=>{b.value=p,_.value=p.qr_code})};R(async()=>{g()}),T(()=>{document.removeEventListener("visibilitychange",()=>{})});const C=p=>{window.open(p,"_blank")},y=p=>{i.push({path:x.value})};return(p,l)=>{const h=M,E=U,r=W,d=z,k=D,f=F,V=G,A=K,S=L;return $(),j("div",Q,[a(S,{class:"card !border-none",shadow:"never"},{default:s(()=>[t("div",H,[t("span",J,o(e(w)),1)]),a(E,{modelValue:x.value,"onUpdate:modelValue":l[0]||(l[0]=c=>x.value=c),class:"mt-[20px]",onTabChange:y},{default:s(()=>[a(h,{label:e(n)("weappAccessFlow"),name:"/channel/weapp"},null,8,["label"]),a(h,{label:e(n)("subscribeMessage"),name:"/channel/weapp/message"},null,8,["label"]),a(h,{label:e(n)("weappRelease"),name:"/channel/weapp/code"},null,8,["label"])]),_:1},8,["modelValue"]),t("div",O,[t("h3",X,o(e(n)("weappInlet")),1),a(A,null,{default:s(()=>[a(f,{span:20},{default:s(()=>[a(k,{class:"!mt-[10px]",active:4,direction:"vertical"},{default:s(()=>[a(d,null,{title:s(()=>[t("p",Y,o(e(n)("weappAttestation")),1)]),description:s(()=>[t("span",Z,o(e(n)("weappAttest")),1),t("div",ee,[a(r,{type:"primary",onClick:l[1]||(l[1]=c=>C("https://mp.weixin.qq.com/"))},{default:s(()=>[u(o(e(n)("clickAccess")),1)]),_:1})])]),_:1}),a(d,null,{title:s(()=>[t("p",te,o(e(n)("weappSetting")),1)]),description:s(()=>[t("span",se,o(e(n)("emplace")),1),t("div",ae,[a(r,{type:"primary",onClick:l[2]||(l[2]=c=>e(i).push("/channel/weapp/config"))},{default:s(()=>[u(o(e(n)("weappSettingBtn")),1)]),_:1}),a(r,{type:"primary",plain:"",onClick:l[3]||(l[3]=c=>e(i).push("/channel/weapp/course"))},{default:s(()=>[u("配置教程")]),_:1})])]),_:1}),a(d,null,{title:s(()=>[t("p",ne,o(e(n)("uploadVersion")),1)]),description:s(()=>[t("span",oe,o(e(n)("releaseCourse")),1),t("div",le,[a(r,{type:"primary",plain:"",onClick:l[4]||(l[4]=c=>e(i).push("/channel/weapp/code"))},{default:s(()=>[u(o(e(n)("weappRelease")),1)]),_:1})])]),_:1}),a(d,null,{title:s(()=>[t("p",pe,o(e(n)("completeAccess")),1)]),description:s(()=>[t("span",ce,o(e(n)("releaseCourse")),1),ie]),_:1})]),_:1})]),_:1}),a(f,{span:4},{default:s(()=>[t("div",_e,[a(V,{class:"w-[180px] h-[180px]",src:_.value?e(I)(_.value):""},{error:s(()=>[t("div",re,[t("span",null,o(_.value?e(n)("fileErr"):e(n)("emptyQrCode")),1)])]),_:1},8,["src"])]),t("div",de,[t("p",me,o(e(n)("clickAccess2")),1)])]),_:1})]),_:1})])]),_:1})])}}});export{Ee as default};

1
niucloud/public/admin/assets/access-32ca4ee0.js

@ -1 +0,0 @@
import{d as q,v as N,f as T,r as i,am as B,o as j,h as R,c as $,e as s,w as n,a as t,t as o,u as e,k as a,i as x,z as I,a7 as M,a8 as U,E as W,an as z,ao as D,ap as F,C as G,aq as K,K as L}from"./index-1dc7b228.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{g as P}from"./wechat-bc30ca31.js";const Q={class:"main-container"},H={class:"flex justify-between items-center"},J={class:"text-page-title"},O={class:"p-[20px]"},X={class:"panel-title !text-sm"},Y={class:"text-[14px] font-[700]"},Z={class:"text-[#999]"},ee={class:"mt-[20px] mb-[40px] h-[32px]"},te={class:"text-[14px] font-[700]"},se={class:"text-[#999]"},ae={class:"mt-[20px] mb-[40px] h-[32px]"},ne={class:"text-[14px] font-[700]"},oe={class:"text-[#999]"},le={class:"mt-[20px] mb-[40px] h-[32px]"},ce={class:"flex justify-center"},ie={class:"w-[100%] h-[100%] flex items-center justify-center bg-[#f5f7fa]"},pe={class:"mt-[22px] text-center"},_e={class:"text-[12px]"},ge=q({__name:"access",setup(re){const w=N(),m=T(),v=w.meta.title,d=i("/channel/wechat");i(2);const p=i(""),b=i({});i({});const g=async()=>{await P().then(({data:c})=>{b.value=c,p.value=c.qr_code})};B(async()=>{g()}),j(()=>{document.removeEventListener("visibilitychange",()=>{})});const y=c=>{window.open(c,"_blank")},C=c=>{m.push({path:d.value})};return(c,l)=>{const _=M,E=U,u=W,h=z,k=D,f=F,A=G,S=K,V=L;return R(),$("div",Q,[s(V,{class:"card !border-none",shadow:"never"},{default:n(()=>[t("div",H,[t("span",J,o(e(v)),1)]),s(E,{modelValue:d.value,"onUpdate:modelValue":l[0]||(l[0]=r=>d.value=r),class:"my-[20px]",onTabChange:C},{default:n(()=>[s(_,{label:e(a)("wechatAccessFlow"),name:"/channel/wechat"},null,8,["label"]),s(_,{label:e(a)("customMenu"),name:"/channel/wechat/menu"},null,8,["label"]),s(_,{label:e(a)("wechatTemplate"),name:"/channel/wechat/message"},null,8,["label"]),s(_,{label:e(a)("reply"),name:"/channel/wechat/reply"},null,8,["label"])]),_:1},8,["modelValue"]),t("div",O,[t("h3",X,o(e(a)("wechatInlet")),1),s(S,null,{default:n(()=>[s(f,{span:20},{default:n(()=>[s(k,{class:"!mt-[10px]",active:3,direction:"vertical"},{default:n(()=>[s(h,null,{title:n(()=>[t("p",Y,o(e(a)("wechatAttestation")),1)]),description:n(()=>[t("span",Z,o(e(a)("wechatAttestation1")),1),t("div",ee,[s(u,{type:"primary",onClick:l[1]||(l[1]=r=>y("https://mp.weixin.qq.com/"))},{default:n(()=>[x(o(e(a)("clickAccess")),1)]),_:1})])]),_:1}),s(h,null,{title:n(()=>[t("p",te,o(e(a)("wechatSetting")),1)]),description:n(()=>[t("span",se,o(e(a)("wechatSetting1")),1),t("div",ae,[s(u,{type:"primary",onClick:l[2]||(l[2]=r=>e(m).push("/channel/wechat/config"))},{default:n(()=>[x(o(e(a)("clickSetting")),1)]),_:1})])]),_:1}),s(h,null,{title:n(()=>[t("p",ne,o(e(a)("wechatAccess")),1)]),description:n(()=>[t("span",oe,o(e(a)("wechatAccess")),1),t("div",le,[s(u,{type:"primary",plain:"",onClick:l[3]||(l[3]=r=>e(m).push("/channel/wechat/course"))},{default:n(()=>[x(o(e(a)("releaseCourse")),1)]),_:1})])]),_:1})]),_:1})]),_:1}),s(f,{span:4},{default:n(()=>[t("div",ce,[s(A,{class:"w-[180px] h-[180px]",src:p.value?e(I)(p.value):""},{error:n(()=>[t("div",ie,[t("span",null,o(p.value?e(a)("fileErr"):e(a)("emptyQrCode")),1)])]),_:1},8,["src"])]),t("div",pe,[t("p",_e,o(e(a)("clickAccess2")),1)])]),_:1})]),_:1})])]),_:1})])}}});export{ge as default};

1
niucloud/public/admin/assets/access-4c00a1ff.js

@ -1 +0,0 @@
import{d as V,v as B,f as N,r as d,am as S,h as T,c as j,e as o,w as s,a as t,t as n,u as e,k as a,i as h,z as q,a7 as R,a8 as I,E as $,an as z,ao as D,ap as F,C as K,aq as M,K as P}from"./index-1dc7b228.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{g as Q}from"./aliapp-95215a37.js";const U={class:"main-container"},G={class:"flex justify-between items-center"},H={class:"text-page-title"},J={class:"p-[20px]"},L={class:"panel-title !text-sm"},O={class:"text-[14px] font-[700]"},W={class:"text-[#999]"},X={class:"mt-[20px] mb-[40px] h-[32px]"},Y={class:"text-[14px] font-[700]"},Z={class:"text-[#999]"},tt={class:"mt-[20px] mb-[40px] h-[32px]"},et={class:"text-[14px] font-[700]"},st={class:"text-[#999]"},at=t("div",{class:"mt-[20px] mb-[40px] h-[32px]"},null,-1),ot={class:"text-[14px] font-[700]"},nt={class:"text-[#999]"},lt={class:"flex justify-center"},ct={class:"w-[100%] h-[100%] flex items-center justify-center bg-[#f5f7fa]"},pt={class:"mt-[22px] text-center"},it={class:"text-[12px]"},bt=V({__name:"access",setup(_t){const f=B(),m=N(),v=f.meta.title,_=d("/channel/aliapp");d(2);const p=d("");S(async()=>{const c=await Q();p.value=c.data.qr_code});const w=c=>{window.open(c,"_blank")},b=c=>{m.push({path:_.value})};return(c,l)=>{const g=R,C=I,u=$,i=z,E=D,x=F,y=K,k=M,A=P;return T(),j("div",U,[o(A,{class:"card !border-none",shadow:"never"},{default:s(()=>[t("div",G,[t("span",H,n(e(v)),1)]),o(C,{modelValue:_.value,"onUpdate:modelValue":l[0]||(l[0]=r=>_.value=r),class:"my-[20px]",onTabChange:b},{default:s(()=>[o(g,{label:e(a)("weappAccessFlow"),name:"/channel/aliapp"},null,8,["label"])]),_:1},8,["modelValue"]),t("div",J,[t("h3",L,n(e(a)("weappInlet")),1),o(k,null,{default:s(()=>[o(x,{span:20},{default:s(()=>[o(E,{active:4,direction:"vertical"},{default:s(()=>[o(i,null,{title:s(()=>[t("p",O,n(e(a)("weappAttestation")),1)]),description:s(()=>[t("span",W,n(e(a)("weappAttest")),1),t("div",X,[o(u,{type:"primary",onClick:l[1]||(l[1]=r=>w("https://open.alipay.com/develop/manage"))},{default:s(()=>[h(n(e(a)("clickAccess")),1)]),_:1})])]),_:1}),o(i,null,{title:s(()=>[t("p",Y,n(e(a)("weappSetting")),1)]),description:s(()=>[t("span",Z,n(e(a)("emplace")),1),t("div",tt,[o(u,{type:"primary",plain:"",onClick:l[2]||(l[2]=r=>e(m).push("/channel/aliapp/config"))},{default:s(()=>[h(n(e(a)("weappSettingBtn")),1)]),_:1})])]),_:1}),o(i,null,{title:s(()=>[t("p",et,n(e(a)("uploadVersion")),1)]),description:s(()=>[t("span",st,n(e(a)("releaseCourse")),1),at]),_:1}),o(i,null,{title:s(()=>[t("p",ot,n(e(a)("completeAccess")),1)]),description:s(()=>[t("span",nt,n(e(a)("releaseCourse")),1)]),_:1})]),_:1})]),_:1}),o(x,{span:4},{default:s(()=>[t("div",lt,[o(y,{class:"w-[180px] h-[180px]",src:p.value?e(q)(p.value):""},{error:s(()=>[t("div",ct,[t("span",null,n(p.value?e(a)("fileErr"):e(a)("emptyQrCode")),1)])]),_:1},8,["src"])]),t("div",pt,[t("p",it,n(e(a)("clickAccess2")),1)])]),_:1})]),_:1})])]),_:1})])}}});export{bt as default};

1
niucloud/public/admin/assets/access-ade860fb.js

@ -0,0 +1 @@
import{d as q,v as N,f as T,r as i,ap as B,o as j,h as R,c as $,e as s,w as n,a as t,t as o,u as e,k as a,i as x,z as I,ac as M,ad as U,E as W,aq as z,ar as D,as as F,C as G,at as K,K as L}from"./index-4c331f20.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{g as P}from"./wechat-81f02bf5.js";const Q={class:"main-container"},H={class:"flex justify-between items-center"},J={class:"text-page-title"},O={class:"p-[20px]"},X={class:"panel-title !text-sm"},Y={class:"text-[14px] font-[700]"},Z={class:"text-[#999]"},ee={class:"mt-[20px] mb-[40px] h-[32px]"},te={class:"text-[14px] font-[700]"},se={class:"text-[#999]"},ae={class:"mt-[20px] mb-[40px] h-[32px]"},ne={class:"text-[14px] font-[700]"},oe={class:"text-[#999]"},le={class:"mt-[20px] mb-[40px] h-[32px]"},ce={class:"flex justify-center"},ie={class:"w-[100%] h-[100%] flex items-center justify-center bg-[#f5f7fa]"},pe={class:"mt-[22px] text-center"},_e={class:"text-[12px]"},ge=q({__name:"access",setup(re){const w=N(),d=T(),v=w.meta.title,m=i("/channel/wechat");i(2);const p=i(""),b=i({});i({});const g=async()=>{await P().then(({data:c})=>{b.value=c,p.value=c.qr_code})};B(async()=>{g()}),j(()=>{document.removeEventListener("visibilitychange",()=>{})});const y=c=>{window.open(c,"_blank")},C=c=>{d.push({path:m.value})};return(c,l)=>{const _=M,E=U,u=W,h=z,k=D,f=F,A=G,S=K,V=L;return R(),$("div",Q,[s(V,{class:"card !border-none",shadow:"never"},{default:n(()=>[t("div",H,[t("span",J,o(e(v)),1)]),s(E,{modelValue:m.value,"onUpdate:modelValue":l[0]||(l[0]=r=>m.value=r),class:"my-[20px]",onTabChange:C},{default:n(()=>[s(_,{label:e(a)("wechatAccessFlow"),name:"/channel/wechat"},null,8,["label"]),s(_,{label:e(a)("customMenu"),name:"/channel/wechat/menu"},null,8,["label"]),s(_,{label:e(a)("wechatTemplate"),name:"/channel/wechat/message"},null,8,["label"]),s(_,{label:e(a)("reply"),name:"/channel/wechat/reply"},null,8,["label"])]),_:1},8,["modelValue"]),t("div",O,[t("h3",X,o(e(a)("wechatInlet")),1),s(S,null,{default:n(()=>[s(f,{span:20},{default:n(()=>[s(k,{class:"!mt-[10px]",active:3,direction:"vertical"},{default:n(()=>[s(h,null,{title:n(()=>[t("p",Y,o(e(a)("wechatAttestation")),1)]),description:n(()=>[t("span",Z,o(e(a)("wechatAttestation1")),1),t("div",ee,[s(u,{type:"primary",onClick:l[1]||(l[1]=r=>y("https://mp.weixin.qq.com/"))},{default:n(()=>[x(o(e(a)("clickAccess")),1)]),_:1})])]),_:1}),s(h,null,{title:n(()=>[t("p",te,o(e(a)("wechatSetting")),1)]),description:n(()=>[t("span",se,o(e(a)("wechatSetting1")),1),t("div",ae,[s(u,{type:"primary",onClick:l[2]||(l[2]=r=>e(d).push("/channel/wechat/config"))},{default:n(()=>[x(o(e(a)("clickSetting")),1)]),_:1})])]),_:1}),s(h,null,{title:n(()=>[t("p",ne,o(e(a)("wechatAccess")),1)]),description:n(()=>[t("span",oe,o(e(a)("wechatAccess")),1),t("div",le,[s(u,{type:"primary",plain:"",onClick:l[3]||(l[3]=r=>e(d).push("/channel/wechat/course"))},{default:n(()=>[x(o(e(a)("releaseCourse")),1)]),_:1})])]),_:1})]),_:1})]),_:1}),s(f,{span:4},{default:n(()=>[t("div",ce,[s(A,{class:"w-[180px] h-[180px]",src:p.value?e(I)(p.value):""},{error:n(()=>[t("div",ie,[t("span",null,o(p.value?e(a)("fileErr"):e(a)("emptyQrCode")),1)])]),_:1},8,["src"])]),t("div",pe,[t("p",_e,o(e(a)("clickAccess2")),1)])]),_:1})]),_:1})])]),_:1})])}}});export{ge as default};

1
niucloud/public/admin/assets/access-ba64cbff.js

@ -0,0 +1 @@
import{d as V,v as B,f as N,r as d,ap as S,h as T,c as j,e as o,w as s,a as t,t as n,u as e,k as a,i as h,z as q,ac as R,ad as I,E as $,aq as z,ar as D,as as F,C as K,at as M,K as P}from"./index-4c331f20.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{g as Q}from"./aliapp-c1e63b74.js";const U={class:"main-container"},G={class:"flex justify-between items-center"},H={class:"text-page-title"},J={class:"p-[20px]"},L={class:"panel-title !text-sm"},O={class:"text-[14px] font-[700]"},W={class:"text-[#999]"},X={class:"mt-[20px] mb-[40px] h-[32px]"},Y={class:"text-[14px] font-[700]"},Z={class:"text-[#999]"},tt={class:"mt-[20px] mb-[40px] h-[32px]"},et={class:"text-[14px] font-[700]"},st={class:"text-[#999]"},at=t("div",{class:"mt-[20px] mb-[40px] h-[32px]"},null,-1),ot={class:"text-[14px] font-[700]"},nt={class:"text-[#999]"},lt={class:"flex justify-center"},ct={class:"w-[100%] h-[100%] flex items-center justify-center bg-[#f5f7fa]"},pt={class:"mt-[22px] text-center"},it={class:"text-[12px]"},bt=V({__name:"access",setup(_t){const f=B(),m=N(),v=f.meta.title,_=d("/channel/aliapp");d(2);const p=d("");S(async()=>{const c=await Q();p.value=c.data.qr_code});const w=c=>{window.open(c,"_blank")},b=c=>{m.push({path:_.value})};return(c,l)=>{const g=R,C=I,u=$,i=z,E=D,x=F,y=K,k=M,A=P;return T(),j("div",U,[o(A,{class:"card !border-none",shadow:"never"},{default:s(()=>[t("div",G,[t("span",H,n(e(v)),1)]),o(C,{modelValue:_.value,"onUpdate:modelValue":l[0]||(l[0]=r=>_.value=r),class:"my-[20px]",onTabChange:b},{default:s(()=>[o(g,{label:e(a)("weappAccessFlow"),name:"/channel/aliapp"},null,8,["label"])]),_:1},8,["modelValue"]),t("div",J,[t("h3",L,n(e(a)("weappInlet")),1),o(k,null,{default:s(()=>[o(x,{span:20},{default:s(()=>[o(E,{active:4,direction:"vertical"},{default:s(()=>[o(i,null,{title:s(()=>[t("p",O,n(e(a)("weappAttestation")),1)]),description:s(()=>[t("span",W,n(e(a)("weappAttest")),1),t("div",X,[o(u,{type:"primary",onClick:l[1]||(l[1]=r=>w("https://open.alipay.com/develop/manage"))},{default:s(()=>[h(n(e(a)("clickAccess")),1)]),_:1})])]),_:1}),o(i,null,{title:s(()=>[t("p",Y,n(e(a)("weappSetting")),1)]),description:s(()=>[t("span",Z,n(e(a)("emplace")),1),t("div",tt,[o(u,{type:"primary",plain:"",onClick:l[2]||(l[2]=r=>e(m).push("/channel/aliapp/config"))},{default:s(()=>[h(n(e(a)("weappSettingBtn")),1)]),_:1})])]),_:1}),o(i,null,{title:s(()=>[t("p",et,n(e(a)("uploadVersion")),1)]),description:s(()=>[t("span",st,n(e(a)("releaseCourse")),1),at]),_:1}),o(i,null,{title:s(()=>[t("p",ot,n(e(a)("completeAccess")),1)]),description:s(()=>[t("span",nt,n(e(a)("releaseCourse")),1)]),_:1})]),_:1})]),_:1}),o(x,{span:4},{default:s(()=>[t("div",lt,[o(y,{class:"w-[180px] h-[180px]",src:p.value?e(q)(p.value):""},{error:s(()=>[t("div",ct,[t("span",null,n(p.value?e(a)("fileErr"):e(a)("emptyQrCode")),1)])]),_:1},8,["src"])]),t("div",pt,[t("p",it,n(e(a)("clickAccess2")),1)])]),_:1})]),_:1})])]),_:1})])}}});export{bt as default};

1
niucloud/public/admin/assets/access-beb3a581.js

@ -1 +0,0 @@
import{d as q,v as B,f as N,r as m,am as R,o as T,h as $,c as j,e as n,w as s,a as t,t as o,u as e,k as a,i as u,z as I,a7 as M,a8 as U,E as W,an as z,ao as D,ap as F,C as G,aq as K,K as L}from"./index-1dc7b228.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{g as P}from"./weapp-4913e381.js";const Q={class:"main-container"},H={class:"flex justify-between items-center"},J={class:"text-page-title"},O={class:"p-[20px]"},X={class:"panel-title !text-sm"},Y={class:"text-[14px] font-[700]"},Z={class:"text-[#999]"},ee={class:"mt-[20px] mb-[40px] h-[32px]"},te={class:"text-[14px] font-[700]"},se={class:"text-[#999]"},ne={class:"mt-[20px] mb-[40px] h-[32px]"},ae={class:"text-[14px] font-[700]"},oe={class:"text-[#999]"},le={class:"mt-[20px] mb-[40px] h-[32px]"},pe={class:"text-[14px] font-[700]"},ce={class:"text-[#999]"},ie=t("div",{class:"mt-[20px] mb-[40px] h-[32px]"},null,-1),_e={class:"flex justify-center"},re={class:"w-[100%] h-[100%] flex items-center justify-center bg-[#f5f7fa]"},de={class:"mt-[22px] text-center"},me={class:"text-[12px]"},Ee=q({__name:"access",setup(ue){const v=B(),i=N(),w=v.meta.title,x=m("/channel/weapp");m(2);const _=m(""),b=m({}),g=async()=>{await P().then(({data:p})=>{b.value=p,_.value=p.qr_code})};R(async()=>{g()}),T(()=>{document.removeEventListener("visibilitychange",()=>{})});const C=p=>{window.open(p,"_blank")},y=p=>{i.push({path:x.value})};return(p,l)=>{const h=M,E=U,r=W,d=z,k=D,f=F,V=G,A=K,S=L;return $(),j("div",Q,[n(S,{class:"card !border-none",shadow:"never"},{default:s(()=>[t("div",H,[t("span",J,o(e(w)),1)]),n(E,{modelValue:x.value,"onUpdate:modelValue":l[0]||(l[0]=c=>x.value=c),class:"mt-[20px]",onTabChange:y},{default:s(()=>[n(h,{label:e(a)("weappAccessFlow"),name:"/channel/weapp"},null,8,["label"]),n(h,{label:e(a)("subscribeMessage"),name:"/channel/weapp/message"},null,8,["label"]),n(h,{label:e(a)("weappRelease"),name:"/channel/weapp/code"},null,8,["label"])]),_:1},8,["modelValue"]),t("div",O,[t("h3",X,o(e(a)("weappInlet")),1),n(A,null,{default:s(()=>[n(f,{span:20},{default:s(()=>[n(k,{class:"!mt-[10px]",active:4,direction:"vertical"},{default:s(()=>[n(d,null,{title:s(()=>[t("p",Y,o(e(a)("weappAttestation")),1)]),description:s(()=>[t("span",Z,o(e(a)("weappAttest")),1),t("div",ee,[n(r,{type:"primary",onClick:l[1]||(l[1]=c=>C("https://mp.weixin.qq.com/"))},{default:s(()=>[u(o(e(a)("clickAccess")),1)]),_:1})])]),_:1}),n(d,null,{title:s(()=>[t("p",te,o(e(a)("weappSetting")),1)]),description:s(()=>[t("span",se,o(e(a)("emplace")),1),t("div",ne,[n(r,{type:"primary",onClick:l[2]||(l[2]=c=>e(i).push("/channel/weapp/config"))},{default:s(()=>[u(o(e(a)("weappSettingBtn")),1)]),_:1}),n(r,{type:"primary",plain:"",onClick:l[3]||(l[3]=c=>e(i).push("/channel/weapp/course"))},{default:s(()=>[u("配置教程")]),_:1})])]),_:1}),n(d,null,{title:s(()=>[t("p",ae,o(e(a)("uploadVersion")),1)]),description:s(()=>[t("span",oe,o(e(a)("releaseCourse")),1),t("div",le,[n(r,{type:"primary",plain:"",onClick:l[4]||(l[4]=c=>e(i).push("/channel/weapp/code"))},{default:s(()=>[u(o(e(a)("weappRelease")),1)]),_:1})])]),_:1}),n(d,null,{title:s(()=>[t("p",pe,o(e(a)("completeAccess")),1)]),description:s(()=>[t("span",ce,o(e(a)("releaseCourse")),1),ie]),_:1})]),_:1})]),_:1}),n(f,{span:4},{default:s(()=>[t("div",_e,[n(V,{class:"w-[180px] h-[180px]",src:_.value?e(I)(_.value):""},{error:s(()=>[t("div",re,[t("span",null,o(_.value?e(a)("fileErr"):e(a)("emptyQrCode")),1)])]),_:1},8,["src"])]),t("div",de,[t("p",me,o(e(a)("clickAccess2")),1)])]),_:1})]),_:1})])]),_:1})])}}});export{Ee as default};

1
niucloud/public/admin/assets/account-75de01cb.js

File diff suppressed because one or more lines are too long

1
niucloud/public/admin/assets/account-fd9654f7.js

File diff suppressed because one or more lines are too long

1
niucloud/public/admin/assets/add-01ce3e3b.css

@ -0,0 +1 @@
input[data-v-b7685a6d]::-webkit-outer-spin-button,input[data-v-b7685a6d]::-webkit-inner-spin-button{-webkit-appearance:none!important;-moz-appearance:none!important;-o-appearance:none!important;appearance:none!important;margin:0}input[type=number][data-v-b7685a6d]{-webkit-appearance:textfield;-moz-appearance:textfield;-o-appearance:textfield;appearance:textfield}.sku-form-item-wrap[data-v-b7685a6d] .el-form-item__content{margin-left:0!important}.sku_list[data-v-b7685a6d] .cell{overflow:initial!important}

1
niucloud/public/admin/assets/add-3c4caa24.js

File diff suppressed because one or more lines are too long

1
niucloud/public/admin/assets/add-653e18a4.css

@ -1 +0,0 @@
input[data-v-e0e9137f]::-webkit-outer-spin-button,input[data-v-e0e9137f]::-webkit-inner-spin-button{-webkit-appearance:none!important;-moz-appearance:none!important;-o-appearance:none!important;appearance:none!important;margin:0}input[type=number][data-v-e0e9137f]{-webkit-appearance:textfield;-moz-appearance:textfield;-o-appearance:textfield;appearance:textfield}.sku-form-item-wrap[data-v-e0e9137f] .el-form-item__content{margin-left:0!important}.sku_list[data-v-e0e9137f] .cell{overflow:initial!important}

1
niucloud/public/admin/assets/add-879e8e6f.js

File diff suppressed because one or more lines are too long

1
niucloud/public/admin/assets/add-ed66b0f3.js

File diff suppressed because one or more lines are too long

1
niucloud/public/admin/assets/add-f6f58231.js

File diff suppressed because one or more lines are too long

1
niucloud/public/admin/assets/add-member-c6c04c63.js

@ -1 +0,0 @@
import{_ as o}from"./add-member.vue_vue_type_script_setup_true_lang-30c598d2.js";import"./index-1dc7b228.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css */import"./member-ec021399.js";export{o as default};

1
niucloud/public/admin/assets/add-member-e2c0cf5c.js

@ -0,0 +1 @@
import{_ as o}from"./add-member.vue_vue_type_script_setup_true_lang-b04e5828.js";import"./index-4c331f20.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css */import"./member-9eadae64.js";export{o as default};

1
niucloud/public/admin/assets/add-member.vue_vue_type_script_setup_true_lang-30c598d2.js

@ -1 +0,0 @@
import{d as I,r as m,l as L,M as R,k as o,h as N,m as k,w as d,a as j,e as s,i as M,t as C,u as t,J as z,bk as A,D as O,G as T,H as G,E as J,V as K,L as S}from"./index-1dc7b228.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css */import{p as Z,z as Q,A as W}from"./member-ec021399.js";const X={class:"dialog-footer"},me=I({__name:"add-member",emits:["complete"],setup(Y,{expose:$,emit:D}){const p=m(!1),i=m(!1),b=m(!1);let f="",c="";const w=m(!0),v=m(!0),g=m(!0),_={member_id:"",nickname:"",member_no:"",init_member_no:"",mobile:"",password:"",password_copy:""},r=L({..._}),y=m(),P=R(()=>({member_no:[{required:!0,message:o("memberNoPlaceholder"),trigger:"blur"},{validator:B,trigger:"blur"}],mobile:[{required:!0,message:o("mobilePlaceholder"),trigger:"blur"},{validator:x,trigger:"blur"}],password:[{required:!0,message:o("passwordPlaceholder"),trigger:"blur"}],password_copy:[{required:!0,message:o("passwordPlaceholder"),trigger:"blur"},{validator:E,trigger:"blur"}]})),x=(n,e,a)=>{e&&!/^1[3-9]\d{9}$/.test(e)?a(new Error(o("mobileHint"))):a()},E=(n,e,a)=>{e!=r.password?a(o("doubleCipherHint")):a()},B=(n,e,a)=>{e&&!/^[0-9a-zA-Z]*$/g.test(e)?a(new Error(o("memberNoHint"))):a()},U=async()=>{await Q().then(n=>{c=n.data}).catch(()=>{})},F=async n=>{if(i.value||!n)return;const e=W;await n.validate(async a=>{if(a){if(i.value=!0,b.value)return;b.value=!0,e(r).then(V=>{i.value=!1,b.value=!1,p.value=!1,D("complete")}).catch(()=>{i.value=!1,b.value=!1})}})};return $({showDialog:p,setFormData:async(n=null)=>{if(i.value=!0,Object.assign(r,_),f=o("addMember"),n){f=o("updateMember");const e=await(await Z(n.member_id)).data;e&&Object.keys(r).forEach(a=>{e[a]!=null&&(r[a]=e[a])})}else await U(),r.member_no=c,r.init_member_no=c;i.value=!1}}),(n,e)=>{const a=O,u=T,V=G,h=J,q=K,H=S;return N(),k(q,{modelValue:p.value,"onUpdate:modelValue":e[14]||(e[14]=l=>p.value=l),title:t(f),width:"500px","destroy-on-close":!0},{footer:d(()=>[j("span",X,[s(h,{onClick:e[12]||(e[12]=l=>p.value=!1)},{default:d(()=>[M(C(t(o)("cancel")),1)]),_:1}),s(h,{type:"primary",loading:i.value,onClick:e[13]||(e[13]=l=>F(y.value))},{default:d(()=>[M(C(t(o)("confirm")),1)]),_:1},8,["loading"])])]),default:d(()=>[z((N(),k(V,{model:r,"label-width":"90px",ref_key:"formRef",ref:y,rules:t(P),class:"page-form"},{default:d(()=>[s(u,{label:t(o)("memberNo"),prop:"member_no"},{default:d(()=>[s(a,{modelValue:r.member_no,"onUpdate:modelValue":e[0]||(e[0]=l=>r.member_no=l),modelModifiers:{trim:!0},clearable:"",maxlength:"20",placeholder:t(o)("memberNoPlaceholder"),class:"input-width"},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s(u,{label:t(o)("mobile"),prop:"mobile"},{default:d(()=>[s(a,{modelValue:r.mobile,"onUpdate:modelValue":e[1]||(e[1]=l=>r.mobile=l),modelModifiers:{trim:!0},clearable:"",placeholder:t(o)("mobilePlaceholder"),onKeyup:e[2]||(e[2]=l=>t(A)(l)),class:"input-width"},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s(u,{label:t(o)("nickname")},{default:d(()=>[s(a,{modelValue:r.nickname,"onUpdate:modelValue":e[3]||(e[3]=l=>r.nickname=l),modelModifiers:{trim:!0},clearable:"",placeholder:t(o)("nickNamePlaceholder"),class:"input-width",maxlength:"10","show-word-limit":"",readonly:w.value,onClick:e[4]||(e[4]=l=>w.value=!1),onBlur:e[5]||(e[5]=l=>w.value=!0)},null,8,["modelValue","placeholder","readonly"])]),_:1},8,["label"]),s(u,{label:t(o)("password"),prop:"password"},{default:d(()=>[s(a,{modelValue:r.password,"onUpdate:modelValue":e[6]||(e[6]=l=>r.password=l),modelModifiers:{trim:!0},type:"password",placeholder:t(o)("passwordPlaceholder"),clearable:"",class:"input-width","show-password":!0,readonly:v.value,onClick:e[7]||(e[7]=l=>v.value=!1),onBlur:e[8]||(e[8]=l=>v.value=!0)},null,8,["modelValue","placeholder","readonly"])]),_:1},8,["label"]),s(u,{label:t(o)("passwordCopy"),prop:"password_copy"},{default:d(()=>[s(a,{modelValue:r.password_copy,"onUpdate:modelValue":e[9]||(e[9]=l=>r.password_copy=l),modelModifiers:{trim:!0},type:"password",placeholder:t(o)("passwordPlaceholder"),clearable:"",class:"input-width","show-password":!0,readonly:g.value,onClick:e[10]||(e[10]=l=>g.value=!1),onBlur:e[11]||(e[11]=l=>g.value=!0)},null,8,["modelValue","placeholder","readonly"])]),_:1},8,["label"])]),_:1},8,["model","rules"])),[[H,i.value]])]),_:1},8,["modelValue","title"])}}});export{me as _};

1
niucloud/public/admin/assets/add-member.vue_vue_type_script_setup_true_lang-b04e5828.js

@ -0,0 +1 @@
import{d as I,r as m,l as L,M as R,k as o,h as N,m as k,w as d,a as j,e as s,i as M,t as C,u as t,J as z,bm as A,D as O,G as T,H as G,E as J,V as K,L as S}from"./index-4c331f20.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css */import{p as Z,z as Q,A as W}from"./member-9eadae64.js";const X={class:"dialog-footer"},me=I({__name:"add-member",emits:["complete"],setup(Y,{expose:$,emit:D}){const p=m(!1),i=m(!1),b=m(!1);let f="",c="";const w=m(!0),v=m(!0),g=m(!0),_={member_id:"",nickname:"",member_no:"",init_member_no:"",mobile:"",password:"",password_copy:""},r=L({..._}),y=m(),P=R(()=>({member_no:[{required:!0,message:o("memberNoPlaceholder"),trigger:"blur"},{validator:B,trigger:"blur"}],mobile:[{required:!0,message:o("mobilePlaceholder"),trigger:"blur"},{validator:x,trigger:"blur"}],password:[{required:!0,message:o("passwordPlaceholder"),trigger:"blur"}],password_copy:[{required:!0,message:o("passwordPlaceholder"),trigger:"blur"},{validator:E,trigger:"blur"}]})),x=(n,e,a)=>{e&&!/^1[3-9]\d{9}$/.test(e)?a(new Error(o("mobileHint"))):a()},E=(n,e,a)=>{e!=r.password?a(o("doubleCipherHint")):a()},B=(n,e,a)=>{e&&!/^[0-9a-zA-Z]*$/g.test(e)?a(new Error(o("memberNoHint"))):a()},U=async()=>{await Q().then(n=>{c=n.data}).catch(()=>{})},F=async n=>{if(i.value||!n)return;const e=W;await n.validate(async a=>{if(a){if(i.value=!0,b.value)return;b.value=!0,e(r).then(V=>{i.value=!1,b.value=!1,p.value=!1,D("complete")}).catch(()=>{i.value=!1,b.value=!1})}})};return $({showDialog:p,setFormData:async(n=null)=>{if(i.value=!0,Object.assign(r,_),f=o("addMember"),n){f=o("updateMember");const e=await(await Z(n.member_id)).data;e&&Object.keys(r).forEach(a=>{e[a]!=null&&(r[a]=e[a])})}else await U(),r.member_no=c,r.init_member_no=c;i.value=!1}}),(n,e)=>{const a=O,u=T,V=G,h=J,q=K,H=S;return N(),k(q,{modelValue:p.value,"onUpdate:modelValue":e[14]||(e[14]=l=>p.value=l),title:t(f),width:"500px","destroy-on-close":!0},{footer:d(()=>[j("span",X,[s(h,{onClick:e[12]||(e[12]=l=>p.value=!1)},{default:d(()=>[M(C(t(o)("cancel")),1)]),_:1}),s(h,{type:"primary",loading:i.value,onClick:e[13]||(e[13]=l=>F(y.value))},{default:d(()=>[M(C(t(o)("confirm")),1)]),_:1},8,["loading"])])]),default:d(()=>[z((N(),k(V,{model:r,"label-width":"90px",ref_key:"formRef",ref:y,rules:t(P),class:"page-form"},{default:d(()=>[s(u,{label:t(o)("memberNo"),prop:"member_no"},{default:d(()=>[s(a,{modelValue:r.member_no,"onUpdate:modelValue":e[0]||(e[0]=l=>r.member_no=l),modelModifiers:{trim:!0},clearable:"",maxlength:"20",placeholder:t(o)("memberNoPlaceholder"),class:"input-width"},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s(u,{label:t(o)("mobile"),prop:"mobile"},{default:d(()=>[s(a,{modelValue:r.mobile,"onUpdate:modelValue":e[1]||(e[1]=l=>r.mobile=l),modelModifiers:{trim:!0},clearable:"",placeholder:t(o)("mobilePlaceholder"),onKeyup:e[2]||(e[2]=l=>t(A)(l)),class:"input-width"},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s(u,{label:t(o)("nickname")},{default:d(()=>[s(a,{modelValue:r.nickname,"onUpdate:modelValue":e[3]||(e[3]=l=>r.nickname=l),modelModifiers:{trim:!0},clearable:"",placeholder:t(o)("nickNamePlaceholder"),class:"input-width",maxlength:"10","show-word-limit":"",readonly:w.value,onClick:e[4]||(e[4]=l=>w.value=!1),onBlur:e[5]||(e[5]=l=>w.value=!0)},null,8,["modelValue","placeholder","readonly"])]),_:1},8,["label"]),s(u,{label:t(o)("password"),prop:"password"},{default:d(()=>[s(a,{modelValue:r.password,"onUpdate:modelValue":e[6]||(e[6]=l=>r.password=l),modelModifiers:{trim:!0},type:"password",placeholder:t(o)("passwordPlaceholder"),clearable:"",class:"input-width","show-password":!0,readonly:v.value,onClick:e[7]||(e[7]=l=>v.value=!1),onBlur:e[8]||(e[8]=l=>v.value=!0)},null,8,["modelValue","placeholder","readonly"])]),_:1},8,["label"]),s(u,{label:t(o)("passwordCopy"),prop:"password_copy"},{default:d(()=>[s(a,{modelValue:r.password_copy,"onUpdate:modelValue":e[9]||(e[9]=l=>r.password_copy=l),modelModifiers:{trim:!0},type:"password",placeholder:t(o)("passwordPlaceholder"),clearable:"",class:"input-width","show-password":!0,readonly:g.value,onClick:e[10]||(e[10]=l=>g.value=!1),onBlur:e[11]||(e[11]=l=>g.value=!0)},null,8,["modelValue","placeholder","readonly"])]),_:1},8,["label"])]),_:1},8,["model","rules"])),[[H,i.value]])]),_:1},8,["modelValue","title"])}}});export{me as _};

1
niucloud/public/admin/assets/add-table-07402a9a.js

@ -1 +0,0 @@
import{_ as o}from"./add-table.vue_vue_type_script_setup_true_lang-4331f2a8.js";import"./index-1dc7b228.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./tools-5df62b1d.js";export{o as default};

1
niucloud/public/admin/assets/add-table-5e6a9ce0.js

@ -0,0 +1 @@
import{_ as o}from"./add-table.vue_vue_type_script_setup_true_lang-e5255b78.js";import"./index-4c331f20.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./tools-fa050e4f.js";export{o as default};

1
niucloud/public/admin/assets/add-table.vue_vue_type_script_setup_true_lang-4331f2a8.js

@ -1 +0,0 @@
import{d as L,f as N,r as c,l as k,M as E,h as p,m as _,w as o,a as b,J as x,u as t,t as f,k as n,e as d,i as B,$ as z,D as F,E as M,a0 as P,V as U,L as $}from"./index-1dc7b228.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{k as q,l as G}from"./tools-5df62b1d.js";const le=L({__name:"add-table",setup(I,{expose:h}){const g=N(),m=c(!1),s=c(""),e=k({loading:!0,data:[],searchParam:{table_name:"",table_content:""}}),v=E(()=>e.data.filter(a=>!s.value||a.Name.toLowerCase().includes(s.value.toLowerCase())||a.Comment.toLowerCase().includes(s.value.toLowerCase()))),u=()=>{e.loading=!0,q().then(a=>{e.loading=!1,e.data=a.data}).catch(()=>{e.loading=!1})};u();const w=a=>{const l=a.Name;e.loading=!0,G({table_name:l}).then(i=>{e.loading=!1,m.value=!1,g.push({path:"/tools/code/edit",query:{id:i.data.id}})}).catch(()=>{e.loading=!1})};return h({showDialog:m,setFormData:async(a=null)=>{u()}}),(a,l)=>{const i=z,C=F,D=M,V=P,y=U,T=$;return p(),_(y,{modelValue:m.value,"onUpdate:modelValue":l[1]||(l[1]=r=>m.value=r),title:t(n)("addCode"),width:"800px","destroy-on-close":!0},{default:o(()=>[b("div",null,[x((p(),_(V,{data:t(v),size:"large",height:"400"},{empty:o(()=>[b("span",null,f(e.loading?"":t(n)("emptyData")),1)]),default:o(()=>[d(i,{prop:"Name",label:t(n)("tableName"),"min-width":"150"},null,8,["label"]),d(i,{prop:"Comment",label:t(n)("tableComment"),"min-width":"120"},null,8,["label"]),d(i,{align:"right","min-width":"150"},{header:o(()=>[d(C,{modelValue:s.value,"onUpdate:modelValue":l[0]||(l[0]=r=>s.value=r),modelModifiers:{trim:!0},size:"small",placeholder:t(n)("searchPlaceholder")},null,8,["modelValue","placeholder"])]),default:o(r=>[d(D,{size:"small",type:"primary",onClick:R=>w(r.row)},{default:o(()=>[B(f(t(n)("addBtn")),1)]),_:2},1032,["onClick"])]),_:1})]),_:1},8,["data"])),[[T,e.loading]])])]),_:1},8,["modelValue","title"])}}});export{le as _};

1
niucloud/public/admin/assets/add-table.vue_vue_type_script_setup_true_lang-e5255b78.js

@ -0,0 +1 @@
import{d as L,f as N,r as c,l as k,M as E,h as p,m as _,w as o,a as b,J as x,u as t,t as f,k as n,e as d,i as B,a1 as z,D as F,E as M,a2 as P,V as U,L as q}from"./index-4c331f20.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{k as G,l as I}from"./tools-fa050e4f.js";const le=L({__name:"add-table",setup(J,{expose:h}){const g=N(),m=c(!1),s=c(""),e=k({loading:!0,data:[],searchParam:{table_name:"",table_content:""}}),v=E(()=>e.data.filter(a=>!s.value||a.Name.toLowerCase().includes(s.value.toLowerCase())||a.Comment.toLowerCase().includes(s.value.toLowerCase()))),u=()=>{e.loading=!0,G().then(a=>{e.loading=!1,e.data=a.data}).catch(()=>{e.loading=!1})};u();const w=a=>{const l=a.Name;e.loading=!0,I({table_name:l}).then(i=>{e.loading=!1,m.value=!1,g.push({path:"/tools/code/edit",query:{id:i.data.id}})}).catch(()=>{e.loading=!1})};return h({showDialog:m,setFormData:async(a=null)=>{u()}}),(a,l)=>{const i=z,C=F,D=M,V=P,y=U,T=q;return p(),_(y,{modelValue:m.value,"onUpdate:modelValue":l[1]||(l[1]=r=>m.value=r),title:t(n)("addCode"),width:"800px","destroy-on-close":!0},{default:o(()=>[b("div",null,[x((p(),_(V,{data:t(v),size:"large",height:"400"},{empty:o(()=>[b("span",null,f(e.loading?"":t(n)("emptyData")),1)]),default:o(()=>[d(i,{prop:"Name",label:t(n)("tableName"),"min-width":"150"},null,8,["label"]),d(i,{prop:"Comment",label:t(n)("tableComment"),"min-width":"120"},null,8,["label"]),d(i,{align:"right","min-width":"150"},{header:o(()=>[d(C,{modelValue:s.value,"onUpdate:modelValue":l[0]||(l[0]=r=>s.value=r),modelModifiers:{trim:!0},size:"small",placeholder:t(n)("searchPlaceholder")},null,8,["modelValue","placeholder"])]),default:o(r=>[d(D,{size:"small",type:"primary",onClick:S=>w(r.row)},{default:o(()=>[B(f(t(n)("addBtn")),1)]),_:2},1032,["onClick"])]),_:1})]),_:1},8,["data"])),[[T,e.loading]])])]),_:1},8,["modelValue","title"])}}});export{le as _};

1
niucloud/public/admin/assets/add-theme-21ddecba.js

@ -0,0 +1 @@
import{_ as e}from"./add-theme.vue_vue_type_script_setup_true_lang-b0b26888.js";const o=Object.freeze(Object.defineProperty({__proto__:null,default:e},Symbol.toStringTag,{value:"Module"}));export{o as _};

1
niucloud/public/admin/assets/add-theme-fd0ffdf8.js

@ -1 +0,0 @@
import{_ as e}from"./add-theme.vue_vue_type_script_setup_true_lang-64b3eaf1.js";const o=Object.freeze(Object.defineProperty({__proto__:null,default:e},Symbol.toStringTag,{value:"Module"}));export{o as _};

1
niucloud/public/admin/assets/add-theme.vue_vue_type_script_setup_true_lang-64b3eaf1.js

@ -1 +0,0 @@
import{d as U,r as u,l as _,h as B,m as h,w as r,a as q,e as a,i as c,u as g,Q as F,D as N,G as O,b2 as R,H as $,E as j,V as A}from"./index-1dc7b228.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";import{u as I}from"./diy-2da15bc1.js";const S={class:"dialog-footer"},M=U({__name:"add-theme",emits:["confirm"],setup(T,{expose:v,emit:V}){const b=I(),n=u(!1),y={title:"",label:"",value:"",tip:""};let m=[],d=u("");const l=_({...y}),k=o=>{m=o.key,d.value="";for(let e in l)l[e]="";o.data&&Object.keys(o.data).length&&(d.value="edit",Object.keys(l).forEach((e,s)=>{l[e]=o.data[e]?o.data[e]:""})),n.value=!0},p=u(),x=_({title:[{required:!0,message:"请输入颜色名称",trigger:"blur"}],value:[{required:!0,message:"请输入颜色value值",trigger:"blur"}],label:[{required:!0,message:"请输入颜色key值",trigger:"blur"},{validator:(o,e,s)=>{const i=/^[a-zA-Z0-9-]+$/;m.indexOf(e)!=-1&&s("新增颜色key值与已存在颜色key值命名重复,请修改命名"),i.test(e)?s():s("颜色key值只能输入字母、数字和连字符")},trigger:"blur"}]}),w=async o=>{o&&await o.validate(async e=>{e&&(V("confirm",F(l)),n.value=!1)})};return v({dialogThemeVisible:n,open:k}),(o,e)=>{const s=N,i=O,E=R,C=$,f=j,D=A;return B(),h(D,{modelValue:n.value,"onUpdate:modelValue":e[6]||(e[6]=t=>n.value=t),title:"新增颜色",width:"550px","align-center":""},{footer:r(()=>[q("div",S,[a(f,{onClick:e[4]||(e[4]=t=>n.value=!1)},{default:r(()=>[c("取消")]),_:1}),a(f,{type:"primary",onClick:e[5]||(e[5]=t=>w(p.value))},{default:r(()=>[c("保存")]),_:1})])]),default:r(()=>[a(C,{model:l,"label-width":"120px",ref_key:"formRef",ref:p,rules:x},{default:r(()=>[a(i,{label:"名字",prop:"title"},{default:r(()=>[a(s,{modelValue:l.title,"onUpdate:modelValue":e[0]||(e[0]=t=>l.title=t),class:"!w-[250px]",maxlength:"7",placeholder:"请输入颜色名称"},null,8,["modelValue"])]),_:1}),a(i,{label:"颜色key值",prop:"label"},{default:r(()=>[a(s,{modelValue:l.label,"onUpdate:modelValue":e[1]||(e[1]=t=>l.label=t),class:"!w-[250px]",maxlength:"20",disabled:g(d)=="edit",placeholder:"请输入颜色key值"},null,8,["modelValue","disabled"])]),_:1}),a(i,{label:"颜色value值",prop:"value"},{default:r(()=>[a(E,{modelValue:l.value,"onUpdate:modelValue":e[2]||(e[2]=t=>l.value=t),"show-alpha":"",predefine:g(b).predefineColors},null,8,["modelValue","predefine"])]),_:1}),a(i,{label:"颜色提示"},{default:r(()=>[a(s,{modelValue:l.tip,"onUpdate:modelValue":e[3]||(e[3]=t=>l.tip=t),class:"!w-[250px]",placeholder:"请输入颜色提示"},null,8,["modelValue"])]),_:1})]),_:1},8,["model","rules"])]),_:1},8,["modelValue"])}}});export{M as _};

1
niucloud/public/admin/assets/add-theme.vue_vue_type_script_setup_true_lang-b0b26888.js

@ -0,0 +1 @@
import{d as U,r as u,l as _,h as B,m as h,w as r,a as q,e as a,i as c,u as g,Q as F,D as N,G as O,b6 as R,H as $,E as j,V as A}from"./index-4c331f20.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";import{u as I}from"./diy-a0465a67.js";const S={class:"dialog-footer"},M=U({__name:"add-theme",emits:["confirm"],setup(T,{expose:v,emit:V}){const b=I(),n=u(!1),y={title:"",label:"",value:"",tip:""};let m=[],d=u("");const l=_({...y}),k=o=>{m=o.key,d.value="";for(let e in l)l[e]="";o.data&&Object.keys(o.data).length&&(d.value="edit",Object.keys(l).forEach((e,s)=>{l[e]=o.data[e]?o.data[e]:""})),n.value=!0},p=u(),x=_({title:[{required:!0,message:"请输入颜色名称",trigger:"blur"}],value:[{required:!0,message:"请输入颜色value值",trigger:"blur"}],label:[{required:!0,message:"请输入颜色key值",trigger:"blur"},{validator:(o,e,s)=>{const i=/^[a-zA-Z0-9-]+$/;m.indexOf(e)!=-1&&s("新增颜色key值与已存在颜色key值命名重复,请修改命名"),i.test(e)?s():s("颜色key值只能输入字母、数字和连字符")},trigger:"blur"}]}),w=async o=>{o&&await o.validate(async e=>{e&&(V("confirm",F(l)),n.value=!1)})};return v({dialogThemeVisible:n,open:k}),(o,e)=>{const s=N,i=O,E=R,C=$,f=j,D=A;return B(),h(D,{modelValue:n.value,"onUpdate:modelValue":e[6]||(e[6]=t=>n.value=t),title:"新增颜色",width:"550px","align-center":""},{footer:r(()=>[q("div",S,[a(f,{onClick:e[4]||(e[4]=t=>n.value=!1)},{default:r(()=>[c("取消")]),_:1}),a(f,{type:"primary",onClick:e[5]||(e[5]=t=>w(p.value))},{default:r(()=>[c("保存")]),_:1})])]),default:r(()=>[a(C,{model:l,"label-width":"120px",ref_key:"formRef",ref:p,rules:x},{default:r(()=>[a(i,{label:"名字",prop:"title"},{default:r(()=>[a(s,{modelValue:l.title,"onUpdate:modelValue":e[0]||(e[0]=t=>l.title=t),class:"!w-[250px]",maxlength:"7",placeholder:"请输入颜色名称"},null,8,["modelValue"])]),_:1}),a(i,{label:"颜色key值",prop:"label"},{default:r(()=>[a(s,{modelValue:l.label,"onUpdate:modelValue":e[1]||(e[1]=t=>l.label=t),class:"!w-[250px]",maxlength:"20",disabled:g(d)=="edit",placeholder:"请输入颜色key值"},null,8,["modelValue","disabled"])]),_:1}),a(i,{label:"颜色value值",prop:"value"},{default:r(()=>[a(E,{modelValue:l.value,"onUpdate:modelValue":e[2]||(e[2]=t=>l.value=t),"show-alpha":"",predefine:g(b).predefineColors},null,8,["modelValue","predefine"])]),_:1}),a(i,{label:"颜色提示"},{default:r(()=>[a(s,{modelValue:l.tip,"onUpdate:modelValue":e[3]||(e[3]=t=>l.tip=t),class:"!w-[250px]",placeholder:"请输入颜色提示"},null,8,["modelValue"])]),_:1})]),_:1},8,["model","rules"])]),_:1},8,["modelValue"])}}});export{M as _};

1
niucloud/public/admin/assets/adjust-money-875435eb.js

@ -0,0 +1 @@
import{_ as o}from"./adjust-money.vue_vue_type_style_index_0_lang-ed07b1fa.js";import"./index-4c331f20.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css */import"./order-251457e8.js";export{o as default};

1
niucloud/public/admin/assets/adjust-money-e3db4669.js

@ -1 +0,0 @@
import{_ as o}from"./adjust-money.vue_vue_type_style_index_0_lang-42f3e76e.js";import"./index-1dc7b228.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css */import"./order-8a914cd9.js";export{o as default};

1
niucloud/public/admin/assets/adjust-money.vue_vue_type_style_index_0_lang-42f3e76e.js

@ -1 +0,0 @@
import{d as O,r as f,l as R,h as b,m as M,w as d,a as r,e as a,i as x,t as u,u as t,k as l,B as $,c as V,bi as z,Q as G,D as L,G as P,H as S,$ as A,ax as H,a0 as K,E as Q,V as q}from"./index-1dc7b228.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css */import{o as J}from"./order-8a914cd9.js";const W={class:"max-h-[600px] overflow-y-auto"},X={class:"panel-title ml-[10px]"},Y={class:"mb-[20px]"},Z={class:"multi-hidden text-[14px]"},ee=r("text",{class:"nc-iconfont nc-icon-bangzhuV6xx ml-[5px] text-[12px]"},null,-1),oe=r("h3",{class:"panel-title ml-[10px]"},[r("span",{class:"text-primary"},"实际商品金额"),r("span",null," = 商品总额 - 优惠金额 + 调价")],-1),te={class:"panel-title ml-[10px]"},le=r("span",{class:"text-primary"},"订单总额",-1),ae={key:0},ne={key:1},se={class:"dialog-footer"},Me=O({__name:"adjust-money",emits:["complete"],setup(de,{expose:w,emit:E}){const m=f(!1),y=f(!1),n=R({}),_=f(0),g=f([]),F=o=>{z(o),_.value=o.target.value},k=o=>{for(let e in n)delete n[e];Object.assign(n,G(o)),n.order_goods=n.order_goods.filter(e=>e.is_gift!=1),g.value=[],n.order_goods.forEach(e=>{e.adjust_money="",e.total=(parseFloat(e.goods_money)-parseFloat(e.discount_money)).toFixed(2),g.value.push(e.goods_type)}),_.value=n.delivery_money},D=(o,e,c)=>{let i=parseFloat(c.goods_money)-parseFloat(c.discount_money);o.length==0||isNaN(o)?(o=0,n.order_goods[e].adjust_money=""):o=parseFloat(o),parseFloat(o)+i<0?(o=i,n.order_goods[e].adjust_money=-o,i=0):i+=o,i=Math.round(i*100)/100,n.order_goods[e].total=i.toFixed(2)},h=f(!1),C=()=>{if(y.value=!0,h.value)return;h.value=!0;let o={};n.order_goods.forEach(e=>{e.adjust_money&&(o[e.order_goods_id]={money:e.adjust_money})}),J({order_id:n.order_id,delivery_money:parseFloat(_.value),order_goods_data:o}).then(e=>{h.value=!1,y.value=!1,m.value=!1,E("complete")}).catch(()=>{h.value=!1,y.value=!1})};return w({showDialog:m,setFormData:k}),(o,e)=>{const c=L,i=P,T=S,p=A,N=H,B=K,j=Q,U=q;return b(),M(U,{modelValue:m.value,"onUpdate:modelValue":e[4]||(e[4]=s=>m.value=s),title:t(l)("adjustMoneyDialogTitle"),width:"1000px",class:"diy-dialog-wrap","destroy-on-close":!0},{footer:d(()=>[r("span",se,[a(j,{onClick:e[2]||(e[2]=s=>m.value=!1)},{default:d(()=>[x(u(t(l)("cancel")),1)]),_:1}),a(j,{type:"primary",loading:y.value,onClick:e[3]||(e[3]=s=>C(o.formRef))},{default:d(()=>[x(u(t(l)("confirm")),1)]),_:1},8,["loading"])])]),default:d(()=>[r("div",W,[r("h3",X,u(t(l)("adjustMoneyTips")),1),g.value.indexOf("real")!=-1?(b(),M(T,{key:0,"label-width":"50px",ref:"formRef",class:"page-form"},{default:d(()=>[a(i,{label:t(l)("adjustMoneyDeliveryMoney"),prop:"express_number"},{default:d(()=>[a(c,{modelValue:_.value,"onUpdate:modelValue":e[0]||(e[0]=s=>_.value=s),modelModifiers:{trim:!0},clearable:"",placeholder:"0.00",class:"!w-[200px]",maxlength:"8",onKeyup:e[1]||(e[1]=s=>F(s))},{append:d(()=>[x(u(t(l)("adjustMoneyUnit")),1)]),_:1},8,["modelValue"])]),_:1},8,["label"])]),_:1},512)):$("",!0),r("div",Y,[a(B,{data:n.order_goods,size:"large"},{default:d(()=>[a(p,{label:t(l)("adjustMoneyGoodsInfo"),align:"left",width:"200"},{default:d(({row:s})=>[r("p",Z,u(s.goods_name),1)]),_:1},8,["label"]),a(p,{prop:"price",label:t(l)("adjustMoneyPrice"),"min-width":"50",align:"left"},null,8,["label"]),a(p,{prop:"num",label:t(l)("adjustMoneyNum"),"min-width":"50",align:"right"},null,8,["label"]),a(p,{prop:"goods_money",label:t(l)("adjustMoneySubTotal"),"min-width":"50",align:"right"},null,8,["label"]),a(p,{prop:"discount_money",label:t(l)("adjustMoneyDiscountMoney"),"min-width":"50",align:"right"},null,8,["label"]),a(p,{prop:"goods_name",label:t(l)("adjustMoneyLabel"),"min-width":"100"},{header:d(()=>[r("div",null,[r("span",null,u(t(l)("adjustMoneyLabel")),1),a(N,{effect:"dark",content:"负数表示下调金额,正数表示上调金额",placement:"top"},{default:d(()=>[ee]),_:1})])]),default:d(({row:s,$index:I})=>[a(c,{modelValue:s.adjust_money,"onUpdate:modelValue":v=>s.adjust_money=v,modelModifiers:{trim:!0},clearable:"",placeholder:"0.00",maxlength:"6",onChange:v=>D(v,I,s)},{append:d(()=>[x(u(t(l)("adjustMoneyUnit")),1)]),_:2},1032,["modelValue","onUpdate:modelValue","onChange"])]),_:1},8,["label"]),a(p,{prop:"total",label:t(l)("adjustMoneyTotal"),"min-width":"70",align:"right"},null,8,["label"])]),_:1},8,["data"])]),oe,r("h3",te,[le,g.value.indexOf("real")!=-1?(b(),V("span",ae," = 实际商品金额 + 运费")):(b(),V("span",ne," = 实际商品金额"))])])]),_:1},8,["modelValue","title"])}}});export{Me as _};

1
niucloud/public/admin/assets/adjust-money.vue_vue_type_style_index_0_lang-ed07b1fa.js

@ -0,0 +1 @@
import{d as I,r as f,l as O,h as b,m as M,w as d,a as r,e as a,i as v,t as u,u as t,k as l,B as R,c as V,bk as G,Q as L,D as P,G as S,H as $,a1 as A,az as H,a2 as K,E as Q,V as q}from"./index-4c331f20.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css */import{o as J}from"./order-251457e8.js";const W={class:"max-h-[600px] overflow-y-auto"},X={class:"panel-title ml-[10px]"},Y={class:"mb-[20px]"},Z={class:"multi-hidden text-[14px]"},ee=r("text",{class:"nc-iconfont nc-icon-bangzhuV6xx ml-[5px] text-[12px]"},null,-1),oe=r("h3",{class:"panel-title ml-[10px]"},[r("span",{class:"text-primary"},"实际商品金额"),r("span",null," = 商品总额 - 优惠金额 + 调价")],-1),te={class:"panel-title ml-[10px]"},le=r("span",{class:"text-primary"},"订单总额",-1),ae={key:0},ne={key:1},se={class:"dialog-footer"},Me=I({__name:"adjust-money",emits:["complete"],setup(de,{expose:w,emit:E}){const m=f(!1),y=f(!1),n=O({}),_=f(0),g=f([]),k=o=>{G(o),_.value=o.target.value},F=o=>{for(let e in n)delete n[e];Object.assign(n,L(o)),n.order_goods=n.order_goods.filter(e=>e.is_gift!=1),g.value=[],n.order_goods.forEach(e=>{e.adjust_money="",e.total=(parseFloat(e.goods_money)-parseFloat(e.discount_money)).toFixed(2),g.value.push(e.goods_type)}),_.value=n.delivery_money},D=(o,e,c)=>{let i=parseFloat(c.goods_money)-parseFloat(c.discount_money);o.length==0||isNaN(o)?(o=0,n.order_goods[e].adjust_money=""):o=parseFloat(o),parseFloat(o)+i<0?(o=i,n.order_goods[e].adjust_money=-o,i=0):i+=o,i=Math.round(i*100)/100,n.order_goods[e].total=i.toFixed(2)},h=f(!1),C=()=>{if(y.value=!0,h.value)return;h.value=!0;let o={};n.order_goods.forEach(e=>{e.adjust_money&&(o[e.order_goods_id]={money:e.adjust_money})}),J({order_id:n.order_id,delivery_money:parseFloat(_.value),order_goods_data:o}).then(e=>{h.value=!1,y.value=!1,m.value=!1,E("complete")}).catch(()=>{h.value=!1,y.value=!1})};return w({showDialog:m,setFormData:F}),(o,e)=>{const c=P,i=S,T=$,p=A,N=H,B=K,j=Q,U=q;return b(),M(U,{modelValue:m.value,"onUpdate:modelValue":e[4]||(e[4]=s=>m.value=s),title:t(l)("adjustMoneyDialogTitle"),width:"1000px",class:"diy-dialog-wrap","destroy-on-close":!0},{footer:d(()=>[r("span",se,[a(j,{onClick:e[2]||(e[2]=s=>m.value=!1)},{default:d(()=>[v(u(t(l)("cancel")),1)]),_:1}),a(j,{type:"primary",loading:y.value,onClick:e[3]||(e[3]=s=>C(o.formRef))},{default:d(()=>[v(u(t(l)("confirm")),1)]),_:1},8,["loading"])])]),default:d(()=>[r("div",W,[r("h3",X,u(t(l)("adjustMoneyTips")),1),g.value.indexOf("real")!=-1?(b(),M(T,{key:0,"label-width":"50px",ref:"formRef",class:"page-form"},{default:d(()=>[a(i,{label:t(l)("adjustMoneyDeliveryMoney"),prop:"express_number"},{default:d(()=>[a(c,{modelValue:_.value,"onUpdate:modelValue":e[0]||(e[0]=s=>_.value=s),modelModifiers:{trim:!0},clearable:"",placeholder:"0.00",class:"!w-[200px]",maxlength:"8",onKeyup:e[1]||(e[1]=s=>k(s))},{append:d(()=>[v(u(t(l)("adjustMoneyUnit")),1)]),_:1},8,["modelValue"])]),_:1},8,["label"])]),_:1},512)):R("",!0),r("div",Y,[a(B,{data:n.order_goods,size:"large"},{default:d(()=>[a(p,{label:t(l)("adjustMoneyGoodsInfo"),align:"left",width:"200"},{default:d(({row:s})=>[r("p",Z,u(s.goods_name),1)]),_:1},8,["label"]),a(p,{prop:"price",label:t(l)("adjustMoneyPrice"),"min-width":"50",align:"left"},null,8,["label"]),a(p,{prop:"num",label:t(l)("adjustMoneyNum"),"min-width":"50",align:"right"},null,8,["label"]),a(p,{prop:"goods_money",label:t(l)("adjustMoneySubTotal"),"min-width":"50",align:"right"},null,8,["label"]),a(p,{prop:"discount_money",label:t(l)("adjustMoneyDiscountMoney"),"min-width":"50",align:"right"},null,8,["label"]),a(p,{prop:"goods_name",label:t(l)("adjustMoneyLabel"),"min-width":"100"},{header:d(()=>[r("div",null,[r("span",null,u(t(l)("adjustMoneyLabel")),1),a(N,{effect:"dark",content:"负数表示下调金额,正数表示上调金额",placement:"top"},{default:d(()=>[ee]),_:1})])]),default:d(({row:s,$index:z})=>[a(c,{modelValue:s.adjust_money,"onUpdate:modelValue":x=>s.adjust_money=x,modelModifiers:{trim:!0},clearable:"",placeholder:"0.00",maxlength:"6",onChange:x=>D(x,z,s)},{append:d(()=>[v(u(t(l)("adjustMoneyUnit")),1)]),_:2},1032,["modelValue","onUpdate:modelValue","onChange"])]),_:1},8,["label"]),a(p,{prop:"total",label:t(l)("adjustMoneyTotal"),"min-width":"70",align:"right"},null,8,["label"])]),_:1},8,["data"])]),oe,r("h3",te,[le,g.value.indexOf("real")!=-1?(b(),V("span",ae," = 实际商品金额 + 运费")):(b(),V("span",ne," = 实际商品金额"))])])]),_:1},8,["modelValue","title"])}}});export{Me as _};

1
niucloud/public/admin/assets/adminlogin-118bc87a.js

@ -1 +0,0 @@
import{d as V,v as C,r as u,l as E,h as f,c as k,J as y,m as B,w as s,e,a as m,t as c,u as r,k as n,i as D,Q as F,av as I,G as L,K as N,H as R,E as S,L as H}from"./index-1dc7b228.js";/* empty css *//* empty css *//* empty css *//* empty css */import T from"./index-372cf5b6.js";import"./el-form-item-4ed993c7.js";/* empty css */import{H as U,I as j}from"./sys-3783faf5.js";/* empty css */import"./index.vue_vue_type_style_index_0_lang-bbada8fe.js";/* empty css *//* empty css */import"./attachment-a2bedbef.js";import"./index.vue_vue_type_script_setup_true_lang-5649c955.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./index.vue_vue_type_script_setup_true_lang-01b1252e.js";/* empty css */import"./index.vue_vue_type_script_setup_true_lang-83404fbb.js";import"./_plugin-vue_export-helper-c27b6911.js";import"./sortable.esm-be94e56d.js";const G={class:"main-container"},J={class:"panel-title !text-sm"},K={class:"form-tip"},O={class:"fixed-footer-wrap"},Q={class:"fixed-footer"},Bt=V({__name:"adminlogin",setup($){C().meta.title;const a=u(!0),d=u(),o=E({is_captcha:0,bg:""});(async()=>{const i=await(await U()).data;Object.keys(o).forEach(t=>{o[t]=i[t]}),a.value=!1})();const v=async i=>{a.value||!i||await i.validate(t=>{if(t){const p=F(o);j(p).then(()=>{a.value=!1}).catch(()=>{a.value=!1})}})};return(i,t)=>{const p=I,_=L,g=T,h=N,b=R,w=S,x=H;return f(),k("div",G,[y((f(),B(b,{class:"page-form",model:o,"label-width":"150px",ref_key:"ruleFormRef",ref:d},{default:s(()=>[e(h,{class:"box-card !border-none",shadow:"never"},{default:s(()=>[m("h3",J,c(r(n)("admin")),1),e(_,{label:r(n)("isCaptcha")},{default:s(()=>[e(p,{modelValue:o.is_captcha,"onUpdate:modelValue":t[0]||(t[0]=l=>o.is_captcha=l),"active-value":1,"inactive-value":0},null,8,["modelValue"])]),_:1},8,["label"]),e(_,{label:r(n)("bgImg")},{default:s(()=>[e(g,{modelValue:o.bg,"onUpdate:modelValue":t[1]||(t[1]=l=>o.bg=l)},null,8,["modelValue"]),m("div",K,c(r(n)("adminBgImgTip")),1)]),_:1},8,["label"])]),_:1})]),_:1},8,["model"])),[[x,a.value]]),m("div",O,[m("div",Q,[e(w,{type:"primary",onClick:t[2]||(t[2]=l=>v(d.value))},{default:s(()=>[D(c(r(n)("save")),1)]),_:1})])])])}}});export{Bt as default};

1
niucloud/public/admin/assets/adminlogin-2ef8d97e.js

@ -0,0 +1 @@
import{d as V,v as C,r as u,l as E,h as f,c as k,J as y,m as B,w as s,e,a as m,t as c,u as r,k as n,i as D,Q as F,ax as I,G as L,K as N,H as R,E as S,L as J}from"./index-4c331f20.js";/* empty css *//* empty css *//* empty css *//* empty css */import T from"./index-596ea1de.js";import"./el-form-item-4ed993c7.js";/* empty css */import{I as U,J as j}from"./sys-aa8fe7bc.js";/* empty css */import"./index.vue_vue_type_style_index_0_lang-f9f087dc.js";/* empty css *//* empty css */import"./attachment-f61a6f2f.js";import"./index.vue_vue_type_script_setup_true_lang-da4137fd.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./index.vue_vue_type_script_setup_true_lang-d0f6a040.js";/* empty css */import"./index.vue_vue_type_script_setup_true_lang-8180d9b1.js";import"./_plugin-vue_export-helper-c27b6911.js";import"./sortable.esm-be94e56d.js";const G={class:"main-container"},H={class:"panel-title !text-sm"},K={class:"form-tip"},O={class:"fixed-footer-wrap"},Q={class:"fixed-footer"},Bt=V({__name:"adminlogin",setup($){C().meta.title;const a=u(!0),d=u(),o=E({is_captcha:0,bg:""});(async()=>{const i=await(await U()).data;Object.keys(o).forEach(t=>{o[t]=i[t]}),a.value=!1})();const v=async i=>{a.value||!i||await i.validate(t=>{if(t){const p=F(o);j(p).then(()=>{a.value=!1}).catch(()=>{a.value=!1})}})};return(i,t)=>{const p=I,_=L,g=T,h=N,b=R,w=S,x=J;return f(),k("div",G,[y((f(),B(b,{class:"page-form",model:o,"label-width":"150px",ref_key:"ruleFormRef",ref:d},{default:s(()=>[e(h,{class:"box-card !border-none",shadow:"never"},{default:s(()=>[m("h3",H,c(r(n)("admin")),1),e(_,{label:r(n)("isCaptcha")},{default:s(()=>[e(p,{modelValue:o.is_captcha,"onUpdate:modelValue":t[0]||(t[0]=l=>o.is_captcha=l),"active-value":1,"inactive-value":0},null,8,["modelValue"])]),_:1},8,["label"]),e(_,{label:r(n)("bgImg")},{default:s(()=>[e(g,{modelValue:o.bg,"onUpdate:modelValue":t[1]||(t[1]=l=>o.bg=l)},null,8,["modelValue"]),m("div",K,c(r(n)("adminBgImgTip")),1)]),_:1},8,["label"])]),_:1})]),_:1},8,["model"])),[[x,a.value]]),m("div",O,[m("div",Q,[e(w,{type:"primary",onClick:t[2]||(t[2]=l=>v(d.value))},{default:s(()=>[D(c(r(n)("save")),1)]),_:1})])])])}}});export{Bt as default};

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

Loading…
Cancel
Save