Browse Source

修改 bug

master
王泽彦 9 months ago
parent
commit
a6dc41b75f
  1. 1
      .gitignore
  2. 6673
      admin/yarn.lock
  3. 119
      docker-compose.yml
  4. 5
      niucloud/app/api/controller/apiController/OrderTable.php
  5. 3
      niucloud/app/command/TestCommand.php
  6. 2
      niucloud/app/dict/schedule/schedule.php
  7. 3
      niucloud/app/job/transfer/schedule/PerformanceCalculation.php
  8. 268
      start.sh
  9. 2
      uniapp/components/AQ/AQTabber.vue
  10. 9
      uniapp/pages.json
  11. 9
      uniapp/pages/market/clue/clue_info.vue
  12. 118
      uniapp/pages/market/clue/order_list.vue
  13. 5
      uniapp/pages/student/login/login.vue

1
.gitignore

@ -9,3 +9,4 @@
/niucloud/vendor
/CLAUDE.md
.claude
node_modules

6673
admin/yarn.lock

File diff suppressed because it is too large

119
docker-compose.yml

@ -0,0 +1,119 @@
version: '3.8'
services:
# PHP 服务
php:
image: php:8.2-fpm
container_name: niucloud_php
volumes:
- ./niucloud:/var/www/html
- ./docker/php/php.ini:/usr/local/etc/php/php.ini
- ./docker/php/www.conf:/usr/local/etc/php-fpm.d/www.conf
working_dir: /var/www/html
depends_on:
- mysql
- redis
environment:
- PHP_IDE_CONFIG=serverName=niucloud
command: >
bash -c "
apt-get update &&
apt-get install -y libzip-dev zip unzip git libpng-dev libjpeg-dev libfreetype6-dev &&
docker-php-ext-configure gd --with-freetype --with-jpeg &&
docker-php-ext-install pdo pdo_mysql mysqli zip gd &&
pecl install redis &&
docker-php-ext-enable redis &&
php-fpm
"
networks:
- niucloud_network
# Nginx 服务
nginx:
image: nginx:alpine
container_name: niucloud_nginx
ports:
- "20080:80" # 原本是 80 映射到 20080
- "20081:8080" # 原本是 8080 映射到 20081
volumes:
- ./niucloud:/var/www/html
- ./admin/dist:/var/www/admin
- ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
- ./docker/nginx/conf.d:/etc/nginx/conf.d
- ./docker/logs/nginx:/var/log/nginx
depends_on:
- php
- node
networks:
- niucloud_network
# MySQL 数据库
mysql:
image: mysql:8.0
container_name: niucloud_mysql
ports:
- "23306:3306" # 原本是 3306 映射到 23306
environment:
MYSQL_ROOT_PASSWORD: root123456
MYSQL_DATABASE: niucloud
MYSQL_USER: niucloud
MYSQL_PASSWORD: niucloud123
volumes:
- ./docker/data/mysql:/var/lib/mysql
- ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
- ./docker/logs/mysql:/var/log/mysql
command: --default-authentication-plugin=mysql_native_password
networks:
- niucloud_network
# Redis 缓存
redis:
image: redis:alpine
container_name: niucloud_redis
ports:
- "26379:6379" # 原本是 6379 映射到 26379
volumes:
- ./docker/data/redis:/data
- ./docker/redis/redis.conf:/usr/local/etc/redis/redis.conf
command: redis-server /usr/local/etc/redis/redis.conf
networks:
- niucloud_network
# Node.js 服务 (用于构建前端)
node:
image: node:18-alpine
container_name: niucloud_node
working_dir: /app
volumes:
- ./admin:/app
- ./docker/data/node_modules:/app/node_modules
ports:
- "23000:3000" # 原本是 3000 映射到 23000
command: >
sh -c "
npm config set registry https://registry.npmmirror.com &&
npm install &&
npm run dev
"
networks:
- niucloud_network
# Composer 服务 (用于 PHP 依赖管理)
composer:
image: composer:latest
container_name: niucloud_composer
volumes:
- ./niucloud:/app
working_dir: /app
command: install --ignore-platform-reqs
networks:
- niucloud_network
networks:
niucloud_network:
driver: bridge
volumes:
mysql_data:
redis_data:
node_modules:

5
niucloud/app/api/controller/apiController/OrderTable.php

@ -73,14 +73,14 @@ class OrderTable extends BaseApiService
public function add(Request $request)
{
// 获取当前登录的员工ID
$staff_id = request()->personnel_id ?? 0;
$staff_id = $request->memberId() ?? 0;
$params = $request->params([
["payment_type", ""], // 付款类型必填验证
["course_id", ""], // 课程ID必填验证
["class_id", ""], // 班级ID必填验证
["staff_id", ""], // 员工ID(可选)
["resource_id", ""], // 客户资源表ID必填验证
["order_type", ""], // 客户资源表ID必填验证
]);
// 验证必要参数
@ -124,6 +124,7 @@ class OrderTable extends BaseApiService
'staff_id' => $params['staff_id'],//员工表ID
'resource_id' => $params['resource_id'],//客户资源表id
'campus_id' => $campus_id,//校区ID
'order_type' => $params['order_type'],
];
$res = (new OrderTableService())->addData($data);

3
niucloud/app/command/TestCommand.php

@ -4,6 +4,7 @@ declare (strict_types = 1);
namespace app\command;
use app\job\transfer\schedule\CourseScheduleJob;
use app\job\transfer\schedule\PerformanceCalculation;
use app\job\transfer\schedule\ResourceAutoAllocation;
use think\console\Command;
use think\console\Input;
@ -23,7 +24,7 @@ class TestCommand extends Command
protected function execute(Input $input, Output $output)
{
// 指令输出
$obj = new CourseScheduleJob();
$obj = new ResourceAutoAllocation();
$obj->doJob();
$output->writeln('testcommand');
}

2
niucloud/app/dict/schedule/schedule.php

@ -11,7 +11,7 @@ return [
'hour' => 0,
'min' => 5
],
'class' => 'app\job\transfer\schedule\CheckFinish',
'class' => 'app\job\transfer\schedule\ResourceAutoAllocation',
'function' => ''
],
[

3
niucloud/app/job/transfer/schedule/PerformanceCalculation.php

@ -235,8 +235,7 @@ class PerformanceCalculation extends BaseJob
$orders = OrderTable::with(['course', 'personnel'])
->where('order_status', 'completed') // 假设只计算已完成的订单
->where(function ($query) {
$query->where('performance_calculated', 0) // 未计算过绩效的订单
->whereOr('accounting_time', null); // 或者核算时间为空的订单
$query->whereNull('accounting_time'); // 或者核算时间为空的订单
})
->select()
->toArray();

268
start.sh

@ -0,0 +1,268 @@
#!/bin/bash
# 颜色输出函数
print_message() {
echo -e "\033[1;32m[INFO] $1\033[0m"
}
print_warning() {
echo -e "\033[1;33m[WARNING] $1\033[0m"
}
print_error() {
echo -e "\033[1;31m[ERROR] $1\033[0m"
}
# 设置项目名称
PROJECT_NAME="MyApp"
# 检查Docker和Docker Compose是否安装
check_docker() {
if ! command -v docker &> /dev/null; then
print_error "Docker未安装,请先安装Docker"
exit 1
fi
if ! command -v docker-compose &> /dev/null; then
print_error "Docker Compose未安装,请先安装Docker Compose"
exit 1
fi
}
# 创建必要的目录结构
create_directories() {
print_message "创建必要的目录结构..."
mkdir -p docker/{logs/{nginx,mysql},data/{mysql,redis,node_modules},nginx/conf.d,php,mysql,redis}
}
# 检查并生成配置文件
check_config_files() {
print_message "检查必要的配置文件..."
# Nginx 主配置
if [ ! -f "docker/nginx/nginx.conf" ]; then
print_warning "Nginx主配置文件不存在,创建默认配置..."
cat > docker/nginx/nginx.conf << 'EOF'
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
client_max_body_size 20M;
include /etc/nginx/conf.d/*.conf;
}
EOF
fi
# Nginx 站点配置
if [ ! -f "docker/nginx/conf.d/default.conf" ]; then
print_warning "Nginx站点配置文件不存在,创建默认配置..."
cat > docker/nginx/conf.d/default.conf << 'EOF'
server {
listen 80;
server_name localhost;
root /var/www/html/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
server {
listen 8080;
server_name localhost;
root /var/www/admin;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
EOF
fi
# PHP 配置
if [ ! -f "docker/php/php.ini" ]; then
print_warning "PHP配置文件不存在,创建默认配置..."
cat > docker/php/php.ini << 'EOF'
[PHP]
memory_limit = 256M
upload_max_filesize = 20M
post_max_size = 20M
max_execution_time = 300
date.timezone = Asia/Shanghai
[opcache]
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
EOF
fi
# PHP-FPM 配置
if [ ! -f "docker/php/www.conf" ]; then
print_warning "PHP-FPM配置文件不存在,创建默认配置..."
cat > docker/php/www.conf << 'EOF'
[www]
user = www-data
group = www-data
listen = 9000
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
EOF
fi
# MySQL 配置
if [ ! -f "docker/mysql/my.cnf" ]; then
print_warning "MySQL配置文件不存在,创建默认配置..."
cat > docker/mysql/my.cnf << 'EOF'
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
default-authentication-plugin = mysql_native_password
max_allowed_packet = 64M
sql_mode = ''
[client]
default-character-set = utf8mb4
EOF
fi
# Redis 配置
if [ ! -f "docker/redis/redis.conf" ]; then
print_warning "Redis配置文件不存在,创建默认配置..."
cat > docker/redis/redis.conf << 'EOF'
requirepass niucloud123456
appendonly yes
EOF
fi
}
# 启动服务
start_services() {
print_message "启动 ${PROJECT_NAME} 服务..."
docker-compose up -d
}
# 停止服务
stop_services() {
print_message "停止 ${PROJECT_NAME} 服务..."
docker-compose down
}
# 重启服务
restart_services() {
print_message "重启 ${PROJECT_NAME} 服务..."
docker-compose restart
}
# 查看状态
check_status() {
print_message "${PROJECT_NAME} 服务状态:"
docker-compose ps
}
# 查看日志
view_logs() {
service=$1
if [ -z "$service" ]; then
print_message "查看所有服务日志..."
docker-compose logs
else
print_message "查看 $service 服务日志..."
docker-compose logs $service
fi
}
# 初始化项目
init_project() {
print_message "初始化 ${PROJECT_NAME} 项目..."
# 检查是否存在 docker-compose.yml
if [ ! -f "docker-compose.yml" ]; then
print_error "缺少 docker-compose.yml 文件,请先创建!"
exit 1
fi
create_directories
check_config_files
print_message "拉取Docker镜像..."
docker-compose pull
print_message "项目初始化完成,现在可以启动服务了"
}
# 显示帮助信息
show_help() {
echo "用法: $0 [选项]"
echo ""
echo "选项:"
echo " start 启动所有服务"
echo " stop 停止所有服务"
echo " restart 重启所有服务"
echo " status 查看服务状态"
echo " logs 查看所有服务日志"
echo " logs <服务名> 查看指定服务日志"
echo " init 初始化项目"
echo " help 显示此帮助信息"
}
# 主程序入口
main() {
check_docker
case "$1" in
start)
start_services
;;
stop)
stop_services
;;
restart)
restart_services
;;
status)
check_status
;;
logs)
view_logs "$2"
;;
init)
init_project
;;
help|*)
show_help
;;
esac
}
main "$@"

2
uniapp/components/AQ/AQTabber.vue

@ -142,7 +142,7 @@
},
{
text: "数据",
urlPath: '/pages/market/data/statistics', //
urlPath: '/pages/market/clue/clue_table', //
iconPath: util.img('/uniapp_src/static/images/tabbar/timetable.png'),
selectedIconPath: util.img('/uniapp_src/static/images/tabbar/timetables.png'),
},

9
uniapp/pages.json

@ -673,6 +673,15 @@
"navigationBarBackgroundColor": "#007ACC",
"navigationBarTextStyle": "white"
}
},
{
"path": "pages/market/clue/clue_table",
"style": {
"navigationBarTitleText": "线索统计表",
"navigationStyle": "default",
"navigationBarBackgroundColor": "#18181c",
"navigationBarTextStyle": "white"
}
}

9
uniapp/pages/market/clue/clue_info.vue

@ -715,12 +715,11 @@
return;
}
let member_id = this.clientInfo.customerResource.member_id;
let member_name = this.clientInfo.customerResource.name || '';
let from_id = uni.getStorageSync('userInfo').id //id
let to_id = this.clientInfo.customerResource.member_id //ID
this.$navigateTo({
url: `/pages/market/clue/chat?member_id=${member_id}&member_name=${member_name}`
});
url: `/pages/common/im_chat_info?from_id=${from_id}&to_id=${to_id}`
})
},
//

118
uniapp/pages/market/clue/order_list.vue

@ -14,6 +14,7 @@
class="item"
v-for="(v,k) in tableList"
:key="k"
@click="handleOrderClick(v)"
>
<view class="top">
<view class="title">订单状态{{v.order_status == 'pending' ? '待支付':'已支付' }}</view>
@ -97,7 +98,7 @@
<!--付款类型-->
<fui-form-item
label="选择付款类型"
label="付款类型"
asterisk
asteriskPosition="right"
labelSize='26'
@ -181,7 +182,35 @@
@cancel="cancelClassId">
</fui-picker>
</fui-form-item>
<!--订单类型-->
<fui-form-item
label="订单类型"
asterisk
asteriskPosition="right"
labelSize='26'
prop=""
background='#fff'
labelColor='#000'
:bottomBorder='true'
>
<fui-radio-group name="radio" v-model="formData.order_type">
<view style="display: flex;justify-content: flex-end">
<fui-label>
<view class="fui-align__center">
<fui-radio value="1" checked></fui-radio>
<text class="fui-text">新报名</text>
</view>
</fui-label>
<fui-label :margin="['0','0','0','40rpx']">
<view class="fui-align__center">
<fui-radio value="2"></fui-radio>
<text class="fui-text">续费</text>
</view>
</fui-label>
</view>
</fui-radio-group>
</fui-form-item>
<!--订单金额-->
<fui-form-item
label="订单金额"
@ -220,9 +249,11 @@
<script>
import apiRoute from '@/api/apiRoute.js';
import FuiRadioGroup from '../../../components/firstui/fui-radio-group/fui-radio-group.vue'
export default {
components: {
FuiRadioGroup,
},
data() {
return {
@ -257,6 +288,7 @@ export default {
resource_id_name:'',//ID
money:'',//|
order_type:'1'
},
order_show:false,//|true=,false=
@ -711,6 +743,90 @@ export default {
this.class_id_show = false
},
//
handleOrderClick(orderData) {
console.log('点击订单:', orderData)
//
if (orderData.order_status === 'pending') {
this.initiatePayment(orderData)
} else {
//
console.log('订单已支付,无需再次支付')
uni.showToast({
title: '订单已支付',
icon: 'none'
})
}
},
//
initiatePayment(orderData) {
console.log('发起支付,订单信息:', orderData)
console.log('支付类型:', orderData.payment_type)
//
switch (orderData.payment_type) {
case 'cash':
this.handleCashPayment(orderData)
break
case 'scan_code':
this.handleScanCodePayment(orderData)
break
case 'subscription':
this.handleSubscriptionPayment(orderData)
break
default:
uni.showToast({
title: '未知支付类型',
icon: 'none'
})
break
}
},
//
handleCashPayment(orderData) {
console.log('处理现金支付:', orderData)
//
//
uni.showToast({
title: '现金支付处理中...',
icon: 'loading'
})
//
// this.confirmCashPayment(orderData)
},
//
handleScanCodePayment(orderData) {
console.log('处理扫码支付:', orderData)
//
//
uni.showToast({
title: '扫码支付处理中...',
icon: 'loading'
})
//
// this.initiateScanCodePayment(orderData)
},
//
handleSubscriptionPayment(orderData) {
console.log('处理订阅支付:', orderData)
//
//
uni.showToast({
title: '订阅支付处理中...',
icon: 'loading'
})
//
// this.initiateSubscriptionPayment(orderData)
},
//
async downloadFile(fileUrl) {
if (!fileUrl) {

5
uniapp/pages/student/login/login.vue

@ -161,7 +161,6 @@
//
res = await apiRoute.xy_login(params);
}
console.log('登录响应:', res);
if (res && res.code === 1) { // 1
//
@ -175,6 +174,10 @@
if (res.data.expires_time) {
uni.setStorageSync("expires_time", res.data.expires_time);
}
//
if (res.data.userinfo){
uni.setStorageSync('userInfo',res.data.userinfo)
}
}
uni.showToast({

Loading…
Cancel
Save