/// 品项统计数据(内部类)
diff --git a/netcore/src/Modularity/Extend/NCC.Extend/Utils/WeChatBotService.cs b/netcore/src/Modularity/Extend/NCC.Extend/Utils/WeChatBotService.cs
index 7dc6b81..8d62fe3 100644
--- a/netcore/src/Modularity/Extend/NCC.Extend/Utils/WeChatBotService.cs
+++ b/netcore/src/Modularity/Extend/NCC.Extend/Utils/WeChatBotService.cs
@@ -105,7 +105,7 @@ namespace NCC.Extend.Utils
{
try
{
- var reportUrl = "http://lvqian.antissoft.com/html/dailyReportnew.html";
+ var reportUrl = "https://erp.lvqianmeiye.com/html/dailyReportnew.html";
var messageContent = $"📊 今日日报已生成,点击链接查看\n\n{reportUrl}";
Console.WriteLine("发送每日统计消息...");
diff --git a/sql/同步耗卡时间和创建时间字段.sql b/sql/同步耗卡时间和创建时间字段.sql
new file mode 100644
index 0000000..c2f107e
--- /dev/null
+++ b/sql/同步耗卡时间和创建时间字段.sql
@@ -0,0 +1,110 @@
+-- ============================================
+-- 同步耗卡时间和创建时间字段
+-- 说明:
+-- 1. 在 lq_xh_pxmx 表添加 yjsj 字段(耗卡时间)
+-- 2. 在 lq_xh_jksyj 表添加 F_CreateTime 字段(创建时间)
+-- 3. 在 lq_xh_kjbsyj 表添加 F_CreateTime 字段(创建时间)
+-- 4. 同步 lq_xh_hyhk.hksj 到相关表的 yjsj 字段
+-- 5. 同步 lq_xh_hyhk.F_CreateTime 到相关表的创建时间字段
+-- ============================================
+
+-- ============================================
+-- 第一步:添加字段
+-- ============================================
+
+-- 1. 在 lq_xh_pxmx 表添加 yjsj 字段(耗卡时间)
+ALTER TABLE `lq_xh_pxmx`
+ADD COLUMN `yjsj` DATETIME NULL COMMENT '耗卡时间' AFTER `F_CreateTIme`;
+
+-- 2. 在 lq_xh_jksyj 表添加 F_CreateTime 字段(创建时间)
+ALTER TABLE `lq_xh_jksyj`
+ADD COLUMN `F_CreateTime` DATETIME NULL COMMENT '创建时间' AFTER `yjsj`;
+
+-- 3. 在 lq_xh_kjbsyj 表添加 F_CreateTime 字段(创建时间)
+ALTER TABLE `lq_xh_kjbsyj`
+ADD COLUMN `F_CreateTime` DATETIME NULL COMMENT '创建时间' AFTER `yjsj`;
+
+-- ============================================
+-- 第二步:同步数据
+-- ============================================
+
+-- 4. 同步 lq_xh_hyhk.hksj 到 lq_xh_pxmx.yjsj
+UPDATE `lq_xh_pxmx` pxmx
+INNER JOIN `lq_xh_hyhk` hyhk ON pxmx.F_ConsumeInfoId = hyhk.F_Id
+SET pxmx.yjsj = hyhk.hksj
+WHERE hyhk.hksj IS NOT NULL;
+
+-- 5. 同步 lq_xh_hyhk.hksj 到 lq_xh_jksyj.yjsj
+UPDATE `lq_xh_jksyj` jksyj
+INNER JOIN `lq_xh_hyhk` hyhk ON jksyj.glkdbh = hyhk.F_Id
+SET jksyj.yjsj = hyhk.hksj
+WHERE hyhk.hksj IS NOT NULL;
+
+-- 6. 同步 lq_xh_hyhk.hksj 到 lq_xh_kjbsyj.yjsj
+UPDATE `lq_xh_kjbsyj` kjbsyj
+INNER JOIN `lq_xh_hyhk` hyhk ON kjbsyj.glkdbh = hyhk.F_Id
+SET kjbsyj.yjsj = hyhk.hksj
+WHERE hyhk.hksj IS NOT NULL;
+
+-- 7. 同步 lq_xh_hyhk.F_CreateTime 到 lq_xh_pxmx.F_CreateTIme
+-- 注意:lq_xh_pxmx 表的创建时间字段是 F_CreateTIme(注意拼写)
+UPDATE `lq_xh_pxmx` pxmx
+INNER JOIN `lq_xh_hyhk` hyhk ON pxmx.F_ConsumeInfoId = hyhk.F_Id
+SET pxmx.F_CreateTIme = hyhk.F_CreateTime
+WHERE hyhk.F_CreateTime IS NOT NULL;
+
+-- 8. 同步 lq_xh_hyhk.F_CreateTime 到 lq_xh_jksyj.F_CreateTime
+UPDATE `lq_xh_jksyj` jksyj
+INNER JOIN `lq_xh_hyhk` hyhk ON jksyj.glkdbh = hyhk.F_Id
+SET jksyj.F_CreateTime = hyhk.F_CreateTime
+WHERE hyhk.F_CreateTime IS NOT NULL;
+
+-- 9. 同步 lq_xh_hyhk.F_CreateTime 到 lq_xh_kjbsyj.F_CreateTime
+UPDATE `lq_xh_kjbsyj` kjbsyj
+INNER JOIN `lq_xh_hyhk` hyhk ON kjbsyj.glkdbh = hyhk.F_Id
+SET kjbsyj.F_CreateTime = hyhk.F_CreateTime
+WHERE hyhk.F_CreateTime IS NOT NULL;
+
+-- ============================================
+-- 验证查询(可选,用于验证同步结果)
+-- ============================================
+
+-- 验证 lq_xh_pxmx 表数据同步情况
+-- SELECT
+-- pxmx.F_Id,
+-- pxmx.F_ConsumeInfoId,
+-- pxmx.yjsj as PxmxYjsj,
+-- hyhk.hksj as HyhkHksj,
+-- pxmx.F_CreateTIme as PxmxCreateTime,
+-- hyhk.F_CreateTime as HyhkCreateTime
+-- FROM lq_xh_pxmx pxmx
+-- LEFT JOIN lq_xh_hyhk hyhk ON pxmx.F_ConsumeInfoId = hyhk.F_Id
+-- WHERE pxmx.F_ConsumeInfoId IS NOT NULL
+-- LIMIT 10;
+
+-- 验证 lq_xh_jksyj 表数据同步情况
+-- SELECT
+-- jksyj.F_Id,
+-- jksyj.glkdbh,
+-- jksyj.yjsj as JksyjYjsj,
+-- hyhk.hksj as HyhkHksj,
+-- jksyj.F_CreateTime as JksyjCreateTime,
+-- hyhk.F_CreateTime as HyhkCreateTime
+-- FROM lq_xh_jksyj jksyj
+-- LEFT JOIN lq_xh_hyhk hyhk ON jksyj.glkdbh = hyhk.F_Id
+-- WHERE jksyj.glkdbh IS NOT NULL
+-- LIMIT 10;
+
+-- 验证 lq_xh_kjbsyj 表数据同步情况
+-- SELECT
+-- kjbsyj.F_Id,
+-- kjbsyj.glkdbh,
+-- kjbsyj.yjsj as KjbsyjYjsj,
+-- hyhk.hksj as HyhkHksj,
+-- kjbsyj.F_CreateTime as KjbsyjCreateTime,
+-- hyhk.F_CreateTime as HyhkCreateTime
+-- FROM lq_xh_kjbsyj kjbsyj
+-- LEFT JOIN lq_xh_hyhk hyhk ON kjbsyj.glkdbh = hyhk.F_Id
+-- WHERE kjbsyj.glkdbh IS NOT NULL
+-- LIMIT 10;
+
diff --git a/绿纤html/dailyReportnew.html b/绿纤html/dailyReportnew.html
index 820971c..21afeb8 100644
--- a/绿纤html/dailyReportnew.html
+++ b/绿纤html/dailyReportnew.html
@@ -45,9 +45,9 @@
.header {
background: linear-gradient(120deg, #43e97b 0%, #38f9d7 100%);
border-radius: 18px;
- padding: 32px 24px;
+ padding: 15px 24px;
text-align: center;
- margin-bottom: 24px;
+ margin-bottom: 10px;
box-shadow: 0 4px 24px 0 rgba(76, 175, 80, 0.10);
position: relative;
overflow: hidden;
@@ -90,7 +90,7 @@
}
.date-filter-container {
- margin-bottom: 24px;
+ margin-bottom: 10px;
/* padding: 0 20px; */
width: 100%;
}
@@ -102,7 +102,7 @@
box-shadow: 0 4px 16px 0 rgba(76, 175, 80, 0.08);
border: 1px solid #e8f5e9;
display: flex;
- align-items: center;
+ align-items: flex-end;
gap: 12px;
/* min-width: 280px; */
width: 100%;
@@ -115,6 +115,31 @@
/* flex: 1; */
}
+ .query-button {
+ margin-left: 16px;
+ padding: 12px 32px;
+ background: linear-gradient(120deg, #43e97b 0%, #38f9d7 100%);
+ border: none;
+ border-radius: 12px;
+ color: #fff;
+ font-size: 0.95em;
+ font-weight: 500;
+ cursor: pointer;
+ transition: all 0.3s ease;
+ white-space: nowrap;
+ box-shadow: 0 2px 8px 0 rgba(67, 233, 123, 0.3);
+ }
+
+ .query-button:hover {
+ transform: translateY(-2px);
+ box-shadow: 0 4px 12px 0 rgba(67, 233, 123, 0.4);
+ }
+
+ .query-button:active {
+ transform: translateY(0);
+ box-shadow: 0 2px 6px 0 rgba(67, 233, 123, 0.3);
+ }
+
.date-input {
width: 100%;
padding: 12px 40px 12px 16px;
@@ -486,7 +511,7 @@
background: #fff;
border-radius: 16px;
padding: 8px;
- margin-bottom: 24px;
+ margin-bottom: 10px;
box-shadow: 0 4px 16px 0 rgba(76, 175, 80, 0.08);
border: 1px solid #e8f5e9;
display: flex;
@@ -579,6 +604,18 @@
min-width: auto;
width: 100%;
/* max-width: 320px; */
+ flex-wrap: wrap;
+ }
+
+ .date-input-wrapper {
+ width: 100%;
+ /* margin-bottom: 12px; */
+ }
+
+ .query-button {
+ width: 100%;
+ margin-left: 0;
+ margin-top: 8px;
}
.tab-button {
@@ -610,7 +647,7 @@
-->
-
@@ -690,7 +728,7 @@
| 门店 |
目标业绩 |
完成业绩 |
- 退款 |
+
完成率 |
排名 |
@@ -894,44 +932,47 @@
startDateInput.value = firstDayString;
endDateInput.value = todayString;
- // 添加日期变化事件监听
- function handleDateChange() {
+ // 验证日期范围
+ function validateDateRange() {
const startDate = startDateInput.value;
const endDate = endDateInput.value;
- // 验证日期范围
if (startDate && endDate && startDate > endDate) {
alert('开始日期不能大于结束日期!');
endDateInput.value = startDate;
- return;
- }
-
- if (startDate && endDate) {
- console.log('选择的日期区间:', startDate, '至', endDate);
- loadReportData(startDate, endDate);
+ return false;
}
+ return true;
}
- // 验证日期范围(用于 blur 事件)
- function validateDateRange() {
+ // 查询按钮点击事件
+ function handleQuery() {
const startDate = startDateInput.value;
const endDate = endDateInput.value;
- if (startDate && endDate && startDate > endDate) {
- alert('开始日期不能大于结束日期!');
- endDateInput.value = startDate;
+ // 验证日期是否已选择
+ if (!startDate || !endDate) {
+ alert('请选择开始日期和结束日期!');
+ return;
+ }
+
+ // 验证日期范围
+ if (!validateDateRange()) {
+ return;
}
+
+ console.log('选择的日期区间:', startDate, '至', endDate);
+ loadReportData(startDate, endDate);
}
- // 添加多种事件监听确保能响应
- startDateInput.addEventListener('change', handleDateChange);
- startDateInput.addEventListener('input', handleDateChange);
+ // 只保留日期范围验证,不自动请求
startDateInput.addEventListener('blur', validateDateRange);
-
- endDateInput.addEventListener('change', handleDateChange);
- endDateInput.addEventListener('input', handleDateChange);
endDateInput.addEventListener('blur', validateDateRange);
+ // 查询按钮点击事件
+ const queryButton = document.getElementById('queryButton');
+ queryButton.addEventListener('click', handleQuery);
+
// 确保输入框可以点击打开日期选择器(现代浏览器支持)
startDateInput.addEventListener('click', function() {
if (this.showPicker) {
@@ -1337,7 +1378,6 @@
${store.StoreName} |
${formatNumber(store.TargetPerformance || 0)} |
${formatNumber(store.CompletedPerformance || 0)} |
- ${formatNumber(store.RefundPerformance || 0)} |
${completionRate}% |
${index + 1} |
`;
diff --git a/绿纤uni-app/common/config.js b/绿纤uni-app/common/config.js
index ab8ccef..c156a1c 100644
--- a/绿纤uni-app/common/config.js
+++ b/绿纤uni-app/common/config.js
@@ -10,8 +10,8 @@ const ENV_CONFIG = {
// 正式环境
production: {
name: '正式环境',
- apiBaseUrl: 'http://erp_test.lvqianmeiye.com',
- // apiBaseUrl: 'https://erp.lvqianmeiye.com',
+ // apiBaseUrl: 'http://erp_test.lvqianmeiye.com',
+ apiBaseUrl: 'https://erp.lvqianmeiye.com',
description: '生产环境服务器'
}
};
diff --git a/绿纤uni-app/pages/index/index.vue b/绿纤uni-app/pages/index/index.vue
index 42cccb2..2230ee8 100644
--- a/绿纤uni-app/pages/index/index.vue
+++ b/绿纤uni-app/pages/index/index.vue
@@ -151,11 +151,11 @@
消耗业绩
- ¥{{ (performanceData.ConsumeProjectCount || 0).toFixed(2) }}
+ {{ (performanceData.ConsumeProjectCount || 0).toFixed(2) }}
项目数
- {{ performanceData.ConsumeLaborCost || 0 }}
+ ¥{{ performanceData.ConsumeLaborCost || 0 }}
手工
@@ -189,7 +189,7 @@
人次
- {{ performanceData.LaborCost || 0 }}
+ ¥{{ performanceData.LaborCost || 0 }}
手工费
diff --git a/绿纤uni-app/unpackage/dist/build/web/index.html b/绿纤uni-app/unpackage/dist/build/web/index.html
index 50f2181..54020cf 100644
--- a/绿纤uni-app/unpackage/dist/build/web/index.html
+++ b/绿纤uni-app/unpackage/dist/build/web/index.html
@@ -1,2 +1,2 @@
绿纤
\ No newline at end of file
+ document.write('')