From ee228475a943adcf1a275fccf5fe04a3f652beeb Mon Sep 17 00:00:00 2001 From: xuli3099 Date: Fri, 12 Sep 2025 13:14:52 +0800 Subject: [PATCH 01/60] =?UTF-8?q?=E5=9C=B0=E5=9D=80=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 12 ++++++++---- .env.production | 15 ++++++++++----- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/.env.development b/.env.development index f34654e..935a2b1 100644 --- a/.env.development +++ b/.env.development @@ -1,12 +1,16 @@ #调用后台地址 -# 公司 -VITE_APP_BASE_URL = 'http://118.186.13.120:31302' +# 贝英斯公司 +# VITE_APP_BASE_URL = 'http://118.186.13.120:31302' # VITE_APP_BASE_URL = "http://192.168.236.71:31302" # VITE_APP_BASE_URL = "http://123.57.20.168:3000" -# 友晟外网 +# 友晟test外网 # VITE_APP_BASE_URL = 'https://app-test.718yousheng.com/app' -# 友晟内网 +# 友晟test内网 # VITE_APP_BASE_URL = 'https://appi-test.718yousheng.com/app' +# 友晟线上内网 +# VITE_APP_BASE_URL = 'https://appi.718yousheng.com/app' +# 友晟线上外网网 +VITE_APP_BASE_URL = 'https://app.718yousheng.com/app' diff --git a/.env.production b/.env.production index 6731db1..b9a031e 100644 --- a/.env.production +++ b/.env.production @@ -1,11 +1,16 @@ #调用后台地址 -# 公司 +# 贝英斯公司 # VITE_APP_BASE_URL = 'http://118.186.13.120:31302' # VITE_APP_BASE_URL = "http://192.168.236.71:31302" # VITE_APP_BASE_URL = "http://123.57.20.168:3000" -# 友晟外网 -VITE_APP_BASE_URL = 'https://app-test.718yousheng.com/app' -# 友晟内网 -# VITE_APP_BASE_URL = 'https://appi-test.718yousheng.com/app' \ No newline at end of file +# 友晟test外网 +# VITE_APP_BASE_URL = 'https://app-test.718yousheng.com/app' +# 友晟test内网 +# VITE_APP_BASE_URL = 'https://appi-test.718yousheng.com/app' + +# 友晟线上内网 +# VITE_APP_BASE_URL = 'https://appi.718yousheng.com/app' +# 友晟线上外网网 +VITE_APP_BASE_URL = 'https://app.718yousheng.com/app' \ No newline at end of file From 19fa0622290982149392338fd2fddbaa3b5a0e25 Mon Sep 17 00:00:00 2001 From: wangzhuo Date: Fri, 12 Sep 2025 16:54:04 +0800 Subject: [PATCH 02/60] =?UTF-8?q?fix:=20=E5=91=A8=E8=AE=A1=E5=88=92-?= =?UTF-8?q?=E5=88=9B=E5=BB=BA-=E5=8F=96=E6=B6=88=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=BD=93=E5=89=8D=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/business/CRM/plan/planEdit.vue | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/pages/business/CRM/plan/planEdit.vue b/src/pages/business/CRM/plan/planEdit.vue index cf37728..7862137 100644 --- a/src/pages/business/CRM/plan/planEdit.vue +++ b/src/pages/business/CRM/plan/planEdit.vue @@ -130,12 +130,12 @@ let instance = null; let initCreate = (params)=>{ const {itemList, selectIndex} = params; // 获取用户信息 - getUserInfo().then(res => { - userInfo.value = res.user; - console.log(route.path, ":用户信息获取成功"); - }).catch(err => { - console.warn(err, "用户信息获取失败") - }); + // getUserInfo().then(res => { + // userInfo.value = res.user; + // console.log(route.path, ":用户信息获取成功"); + // }).catch(err => { + // console.warn(err, "用户信息获取失败") + // }); console.log(route.path,`:创建${itemList[selectIndex]}计划`); title.value="创建周计划"; currentEditDate.value.yearMonth = getDate({format: true}).substring(0, 7); // 只要年月 From d36cadd06f5da671817b61c037bc3dc778a7ce1f Mon Sep 17 00:00:00 2001 From: wangzhuo Date: Fri, 12 Sep 2025 16:57:00 +0800 Subject: [PATCH 03/60] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=BD=91?= =?UTF-8?q?=E7=BB=9C=E8=B6=85=E6=97=B6loading=E6=8F=90=E7=A4=BA=E4=B8=8D?= =?UTF-8?q?=E9=9A=90=E8=97=8F=E7=9A=84=E9=97=AE=E9=A2=98=20fix:=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=A1=B5=E9=9D=A2=E9=AB=98=E5=BA=A6=E9=80=82?= =?UTF-8?q?=E9=85=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CRM/customer/changeCustomerOwner.vue | 103 +++++++----------- .../CRM/customer/customerUserBelong.vue | 64 ++++++----- .../business/CRM/customer/selectCustomer.vue | 15 ++- .../mainOwner/audit/mainOwnerChangeAudit.vue | 94 +++++++++------- .../CRM/mainOwner/view/viewMainOwner.vue | 14 +-- .../mainOwner/view/viewMainOwnerDetail.vue | 12 ++ src/pages/business/CRM/plan/myPlan.vue | 6 +- 7 files changed, 155 insertions(+), 153 deletions(-) diff --git a/src/pages/business/CRM/customer/changeCustomerOwner.vue b/src/pages/business/CRM/customer/changeCustomerOwner.vue index feb555b..c37f3b2 100644 --- a/src/pages/business/CRM/customer/changeCustomerOwner.vue +++ b/src/pages/business/CRM/customer/changeCustomerOwner.vue @@ -24,7 +24,7 @@ - @@ -126,7 +126,7 @@ let list = ref([]); const upOption = ref({ page: {num: 0, size: 10}, noMoreSize: 5, - empty: { + empty: { tip: '~ 空空如也 ~', icon: "../../../../static/images/mescroll-empty.png" }, @@ -149,44 +149,31 @@ const mescrollInit = (mescroll) => { // 下拉刷新 const downCallback = async (mescroll) => { - try { - uni.showLoading(); - cssFlag.value = true; - setTimeout(async () => { - // 重置页码为第一页 - const res = await getList(1, mescroll.size || upOption.page.size); - list.value = res.list; - cssFlag.value = false; - // 正确传递 total 参数 - mescroll.endSuccess(res.list.length, res.total >= mescroll.size); - uni.hideLoading(); - - }, 500); - } catch (error) { - console.log(error) - mescroll.endErr(); - } + uni.showLoading(); + cssFlag.value = true; + setTimeout(async () => { + // 重置页码为第一页 + const res = await getList(1, mescroll.size || upOption.page.size); + cssFlag.value = false; + list.value = res.list; + // 正确传递 total 参数 + mescroll.endSuccess(res.list.length, res.total >= mescroll.size); + }, 500); } // 上拉加载更多 const upCallback = async (mescroll) => { - try { - uni.showLoading(); - setTimeout(async () => { - // 使用 mescroll 提供的页码和大小参数 - const res = await getList(mescroll.num, mescroll.size); - if (mescroll.num === 1) { - list.value = res.list; - } else { - list.value.push(...res.list); - } - // 正确判断是否还有更多数据 - mescroll.endSuccess(res.list.length, res.total >= mescroll.size); - uni.hideLoading(); - }, 500); - } catch (error) { - console.log(error) - mescroll.endErr(); - } + uni.showLoading(); + setTimeout(async () => { + // 使用 mescroll 提供的页码和大小参数 + const res = await getList(mescroll.num, mescroll.size); + if (mescroll.num === 1) { + list.value = res.list; + } else { + list.value.push(...res.list); + } + // 正确判断是否还有更多数据 + mescroll.endSuccess(res.list.length, res.total >= mescroll.size); + }, 500); } // 获取数据列表 @@ -197,12 +184,17 @@ const getList = (pageIndex, pageSize) => { pageSize, searchContent: searchValue.value } - - let res = await SearchForAllPerson(param); - resolve({ - list: res.rows, - total: res.total - }); + try { + let res = await SearchForAllPerson(param); + resolve({ + list: res.rows, + total: res.total + }); + } catch (e) { + console.log(e, '数据获取失败'); + } finally { + uni.hideLoading(); + } }); } @@ -306,16 +298,14 @@ let handleCopyInfo = (item) => { \ No newline at end of file diff --git a/src/pages/business/CRM/customer/customerUserBelong.vue b/src/pages/business/CRM/customer/customerUserBelong.vue index 6e57682..523dd3e 100644 --- a/src/pages/business/CRM/customer/customerUserBelong.vue +++ b/src/pages/business/CRM/customer/customerUserBelong.vue @@ -134,7 +134,7 @@ const upOption = ref({ noMoreSize: 5, empty: { tip: '~ 空空如也 ~', - icon: "../../static/images/mescroll-empty.png" + icon: "../../../../static/images/mescroll-empty.png" }, textLoading: '加载中...', textNoMore: '已经到底了' @@ -155,27 +155,27 @@ const mescrollInit = (mescroll) => { // 下拉刷新 const downCallback = async (mescroll) => { - try { - cssFlag.value = true; - uni.showLoading(); - setTimeout(async () => { + cssFlag.value = true; + uni.showLoading(); + setTimeout(async () => { + try { // 重置页码为第一页 const res = await getList(1, mescroll.size || upOption.page.size); - cssFlag.value = false; list.value = res.list; // 正确传递 total 参数 mescroll.endSuccess(res.list.length, res.total > (mescroll.size || upOption.page.size)); - uni.hideLoading(); - }, 500); - } catch (error) { - console.log(error) - mescroll.endErr(); - } + } catch (error) { + mescroll.endErr(); + } finally { + cssFlag.value = false; + } + }, 500); + } // 上拉加载更多 const upCallback = async (mescroll) => { - try { - setTimeout(async () => { + setTimeout(async () => { + try { // 使用 mescroll 提供的页码和大小参数 const res = await getList(mescroll.num, mescroll.size); if (mescroll.num === 1) { @@ -186,11 +186,10 @@ const upCallback = async (mescroll) => { // 正确判断是否还有更多数据 mescroll.endBySize(res.list.length, res.total) // mescroll.endSuccess(res.list.length, res.total > mescroll.num * mescroll.size); - }, 500); - } catch (error) { - console.log(error) - mescroll.endErr(); - } + } catch (error) { + mescroll.endErr(); + } + }, 500); } // 获取数据列表 @@ -201,12 +200,18 @@ const getList = (pageIndex, pageSize) => { pageSize, searchContent: searchValue.value } + try { + let res = await SearchForAllCustomersSalesperson(param); + resolve({ + list: res.rows, + total: res.total + }); + } catch (e) { + console.log(e, "获取所有客户人员所属失败"); + } finally { + uni.hideLoading(); + } - let res = await SearchForAllCustomersSalesperson(param); - resolve({ - list: res.rows, - total: res.total - }); }); } @@ -224,7 +229,7 @@ let handleDetail = (item) => { res.eventChannel.emit('editCusData', {param: item, isAdd: false}) } }) - }else{ + } else { uni.showToast({ title: '已完成审核,不可修改', icon: 'none' @@ -278,16 +283,15 @@ let handleDelete = async (item) => { \ No newline at end of file diff --git a/src/pages/business/CRM/mainOwner/view/viewMainOwner.vue b/src/pages/business/CRM/mainOwner/view/viewMainOwner.vue index 621d22f..31e7bc4 100644 --- a/src/pages/business/CRM/mainOwner/view/viewMainOwner.vue +++ b/src/pages/business/CRM/mainOwner/view/viewMainOwner.vue @@ -155,9 +155,9 @@ const upCallback = async (mescroll) => { const upOption = ref({ page: { num: 0, size: 10 }, noMoreSize: 5, - empty: { - tip: '~ 空空如也 ~', - icon: "../../static/images/mescroll-empty.png" + empty: { + tip: '~ 空空如也 ~', + icon: "../../../../../static/images/mescroll-empty.png" }, textLoading: '加载中...', textNoMore: '已经到底了' @@ -184,12 +184,12 @@ function showDetail(item) { .all-body { /* #ifdef APP-PLUS */ - top: 150rpx; - height: calc(100vh - 75px); + top: 160rpx; + height: calc(100vh - 160rpx); /* #endif */ /* #ifndef APP-PLUS */ - top: 120rpx; - height: calc(100vh); + top: 116rpx; + height: calc(100vh - 116rpx); /* #endif */ } diff --git a/src/pages/business/CRM/mainOwner/view/viewMainOwnerDetail.vue b/src/pages/business/CRM/mainOwner/view/viewMainOwnerDetail.vue index 0d52803..a5c63dc 100644 --- a/src/pages/business/CRM/mainOwner/view/viewMainOwnerDetail.vue +++ b/src/pages/business/CRM/mainOwner/view/viewMainOwnerDetail.vue @@ -138,6 +138,18 @@ function getCrmCusUserNewChangeOwnerList() { /* min-height: 100vh; */ } +.all-body { + /* #ifdef APP-PLUS */ + top: 160rpx; + height: calc(100vh - 160rpx); + /* #endif */ + /* #ifndef APP-PLUS */ + top: 116rpx; + height: calc(100vh - 116rpx); + /* #endif */ + overflow-y: auto; +} + .white-bg { padding-bottom: 10rpx; } diff --git a/src/pages/business/CRM/plan/myPlan.vue b/src/pages/business/CRM/plan/myPlan.vue index f9670ab..ffbd47b 100644 --- a/src/pages/business/CRM/plan/myPlan.vue +++ b/src/pages/business/CRM/plan/myPlan.vue @@ -56,7 +56,9 @@ - + + 暂无数据 + @@ -282,7 +284,7 @@ function handleEdit(index) { } .con-bg { - height: 445rpx; + /*height: 445rpx;*/ } .nav-list { From 842781b8d57df571d2100d194453fb4505c0e094 Mon Sep 17 00:00:00 2001 From: wangyang Date: Mon, 15 Sep 2025 12:55:23 +0800 Subject: [PATCH 04/60] =?UTF-8?q?CRM-=E8=B5=B0=E8=AE=BF=E6=9F=A5=E7=9C=8B-?= =?UTF-8?q?=E7=82=B9=E5=87=BB=E6=9F=A5=E7=9C=8B=E8=AF=A6=E6=83=85=E5=92=8C?= =?UTF-8?q?=E9=95=BF=E6=8C=89=E5=88=A0=E9=99=A4=E4=BA=8B=E4=BB=B6=E7=9A=84?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CRM/marketActivity/visitReport.vue | 35 ++++++++++--------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/src/pages/business/CRM/marketActivity/visitReport.vue b/src/pages/business/CRM/marketActivity/visitReport.vue index 09ffdb9..77aa8e5 100644 --- a/src/pages/business/CRM/marketActivity/visitReport.vue +++ b/src/pages/business/CRM/marketActivity/visitReport.vue @@ -27,14 +27,16 @@ :up="upOption" :down="downOption" :fixed="false" textColor="#ffffff" bgColor="#ffffff" class="scroll-h" :class="{ 'loading-scroll': cssFlag }"> + @longpress="touchstart(item)" + @tap="touchend" + > 客户:{{ item.cusName }} {{ item.visistCode }} - + {{ item.status == '驳回' ? '再次提交' : item.status }} @@ -211,8 +213,6 @@ const getVisitorReportList = (pageNum, pageSize) => { } -let Loop = ref(0) -let now const visistId = ref(); const cusName = ref(); const cusId = ref(); @@ -223,9 +223,6 @@ function touchstart(item) { cusName.value = item.cusName cusId.value = item.cusId status.value = item.status - now = new Date(); - clearInterval(Loop.value); //再次清空定时器,防止重复注册定时器 - Loop.value = setTimeout(() => { uni.showModal({ title: '删除', content: '请问要删除本条消息吗?', @@ -257,21 +254,25 @@ function touchstart(item) { } } }); - }, 750); } - +let isLongPressed = ref(false); function touchend() { - let endDate = new Date(); - console.log('结束时间', endDate) - let cha = endDate.getTime() - now.getTime(); - console.log(cha, 'casd') - if (cha < 750) { + // 如果未触发长按,则执行点击逻辑 + if (!isLongPressed.value) { uni.navigateTo({ - url: "/pages/business/CRM/marketActivity/visitorReportEnter?visistId=" + visistId.value + '&cusName=' + cusName.value + '&cusId=' + cusId.value + '&status=' + status.value + url: "/pages/business/CRM/marketActivity/visitorReportEnter?visistId=" + + visistId.value + + '&cusName=' + + cusName.value + + '&cusId=' + + cusId.value + + '&status=' + + status.value }) } - clearInterval(Loop.value); + // 重置状态(避免影响下次事件) + isLongPressed.value = false; } //点击状态按钮 From 20f1c9b857784d23848137a291ffc6ab4148b2f0 Mon Sep 17 00:00:00 2001 From: wangzhuo Date: Tue, 16 Sep 2025 08:58:29 +0800 Subject: [PATCH 05/60] =?UTF-8?q?fix:=20=E5=AE=A2=E6=88=B7=E4=BA=BA?= =?UTF-8?q?=E5=91=98=E5=AE=A1=E6=A0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../business/CRM/customer/customerAudit.vue | 76 +++++++++++-------- 1 file changed, 43 insertions(+), 33 deletions(-) diff --git a/src/pages/business/CRM/customer/customerAudit.vue b/src/pages/business/CRM/customer/customerAudit.vue index 533fcf5..7fbf62d 100644 --- a/src/pages/business/CRM/customer/customerAudit.vue +++ b/src/pages/business/CRM/customer/customerAudit.vue @@ -17,12 +17,12 @@ - - - - + + + + - + { // 下拉刷新 const downCallback = async (mescroll) => { - try { - uni.showLoading(); - cssFlag.value = true; - setTimeout(async () => { + + uni.showLoading(); + cssFlag.value = true; + setTimeout(async () => { + try { // 重置页码为第一页 const res = await getList(1, mescroll.size || upOption.page.size); @@ -144,17 +145,21 @@ const downCallback = async (mescroll) => { // 正确传递 total 参数 mescroll.endSuccess(res.list.length, res.total > (mescroll.size || upOption.page.size)); uni.hideLoading(); + + } catch (error) { + console.log(error) + mescroll.endErr(); + } finally { cssFlag.value = false; - }, 500); - } catch (error) { - console.log(error) - mescroll.endErr(); - } + } + }, 500); + } // 上拉加载更多 const upCallback = async (mescroll) => { - try { - setTimeout(async () => { + + setTimeout(async () => { + try { // 使用 mescroll 提供的页码和大小参数 const res = await getList(mescroll.num, mescroll.size); if (mescroll.num === 1) { @@ -165,11 +170,11 @@ const upCallback = async (mescroll) => { mescroll.endBySize(res.list.length, res.total); // 正确判断是否还有更多数据 mescroll.endSuccess(res.list.length, res.total > mescroll.num * mescroll.size); - }, 500); - } catch (error) { - console.log(error) - mescroll.endErr(); - } + } catch (error) { + mescroll.endErr(); + } + }, 500); + } // 获取数据列表 @@ -180,12 +185,17 @@ const getList = (pageIndex, pageSize) => { pageSize, searchContent: searchValue.value } - - let res = await getCusUserApprovalList(param); - resolve({ - list: res.rows, - total: res.total - }); + try { + let res = await getCusUserApprovalList(param); + resolve({ + list: res.rows, + total: res.total + }); + } catch (e) { + console.log(e, "客户人员审核任务列表获取失败"); + } finally { + uni.hideLoading(); + } }); } @@ -210,12 +220,12 @@ let handleDetail = (item) => { \ No newline at end of file From 3a1339fc76be6890b0b096f8855b5ffe821892de Mon Sep 17 00:00:00 2001 From: wangzhuo Date: Wed, 17 Sep 2025 21:44:01 +0800 Subject: [PATCH 09/60] =?UTF-8?q?feat:=20=E5=91=A8=E8=AE=A1=E5=88=92?= =?UTF-8?q?=E6=9F=A5=E7=9C=8B=E6=94=AF=E6=8C=81=E4=B8=8B=E6=8B=89=E5=88=B7?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages.json | 3 +- src/pages/business/CRM/plan/planView.vue | 67 +++++++++++++----------- 2 files changed, 37 insertions(+), 33 deletions(-) diff --git a/src/pages.json b/src/pages.json index d86b7d5..b0f497d 100644 --- a/src/pages.json +++ b/src/pages.json @@ -331,7 +331,8 @@ "path": "pages/business/CRM/plan/planView", //周计划查看 "style": { - "navigationBarTitleText": "" + "navigationBarTitleText": "", + "enablePullDownRefresh": true } }, { diff --git a/src/pages/business/CRM/plan/planView.vue b/src/pages/business/CRM/plan/planView.vue index 2f999c7..26c6adf 100644 --- a/src/pages/business/CRM/plan/planView.vue +++ b/src/pages/business/CRM/plan/planView.vue @@ -44,7 +44,7 @@ {{ parseInt(searchValue.selectDate.substring(5, 7)) }}月 - {{searchValue.selectDate.substring(0, 4) }}年 + {{ searchValue.selectDate.substring(0, 4) }}年 @@ -58,6 +58,7 @@ {{ WeekShortCN[i] }} {{ list[0][field].substring(8) }} + {{ getWeek(i) }} @@ -103,9 +104,10 @@ import MescrollUni from 'mescroll-uni/mescroll-uni.vue'; import {getNavBarPaddingTop} from '@/utils/system.js' import {getAllWeekPlanList} from "@/api/crm/plan/getPlan"; import {AreaList, COLOR_MAP, OrdinalDate, WeekShortCN, WorkEvent, WorkType} from "./dataMap"; -import {getCurrentWeekNum} from "./dateTimeUtils"; +import {getCurrentWeekNum, getWeek2} from "./dateTimeUtils"; import {getDate} from "@/utils/datetime"; import {getWeekPlanListByDate} from "@/api/crm/plan/getPlan"; +import {onPullDownRefresh} from "@dcloudio/uni-app"; // const currentYear = new Date().getFullYear(); const currentMonth = new Date().getMonth() + 1; @@ -116,10 +118,13 @@ const navBarPaddingTop = ref(0); onMounted(() => { navBarPaddingTop.value = getNavBarPaddingTop() * 2; uni.showLoading({}) - getPlanList().then(res=>{ + getPlanList().then(res => { let {total, rows} = res; - console.log(rows, "周计划数据获取成功") + console.log(total, rows, "周计划数据获取成功") list.value = rows; + }).catch((err) => { + console.warn(err, "周计划数据获取失败") + }).finally(() => { uni.hideLoading(); }) }) @@ -140,22 +145,21 @@ let searchValue = ref({ // 查询列表 let list = ref([]); const mescrollRef = ref(null); -const upOption = ref({ - page: {num: 0, size: 10}, - noMoreSize: 5, - empty: {tip: '~ 空空如也 ~'}, - textLoading: '加载中...', - textNoMore: '已经到底了' +onPullDownRefresh(() => { + getPlanList().then(res => { + const {rows} = res; + list.value = rows; + console.log(rows,'刷新周计划成功'); + }).finally(()=>{ + uni.stopPullDownRefresh(); + }) }); -const downOption = ref({ - auto: true, - textInOffset: '下拉刷新', - textOutOffset: '释放更新', - textLoading: '刷新中...' -}); - -let cssFlag = ref(false);//控制样式 +// 查询当前周一周日期 +const aweek = getWeek2('本周'); +const getWeek = (i) => { + return aweek[OrdinalDate[i]].substring(7) +} // 获取数据列表 const getPlanList = (month, date, pageIndex, pageSize) => { @@ -187,20 +191,17 @@ let bindDateChange = (e) => { let handleSearch = () => { console.log(searchValue.value, '查询参数') uni.showLoading(); - getWeekPlanListByDate(searchValue.value).then(res=>{ - const {total, rows } = res; + getWeekPlanListByDate(searchValue.value).then(res => { + const {total, rows} = res; list.value = rows; console.log(rows, '查询成功'); - }).catch(err=>{ - console.warn(err,'数据获取失败'); - }).finally(()=>{ + }).catch(err => { + console.warn(err, '数据获取失败'); + }).finally(() => { uni.hideLoading(); }) } -const mescrollInit = (mescroll) => { - cssFlag.value = true; - mescrollRef.value = mescroll; -}; + // 搜索区域变更 const bindPickerChange = (e) => { // console.log('picker发送选择改变,携带值为', peopleIndex.value) @@ -216,7 +217,7 @@ let handleDetail = (rowIndex, colIndex) => { let workDate = detail[OrdinalDate[colIndex]]; let workType = detail[WorkType[colIndex]]; let workEvent = detail[WorkEvent[colIndex]]; - if(workType && workEvent){ + if (workType && workEvent) { uni.showModal({ title: `${workDate}\n${workType}`, content: `${workEvent}`, @@ -231,8 +232,7 @@ let handleDetail = (rowIndex, colIndex) => { } } }) - } - else{ + } else { uni.showToast({ title: "暂无内容", icon: "none", @@ -366,10 +366,12 @@ let handleDetail = (rowIndex, colIndex) => { margin: 20rpx 0 0 0; border-radius: 8px 8px 0 0; /* #ifdef APP-PLUS */ - min-height: calc(100vh - 160rpx/*.topbar height*/ - 68rpx/*.search height*/ - 40rpx/*.white-bg padding-top*/ - 40rpx/*.white-bg padding-bottom*/); + min-height: calc(100vh - 160rpx/*.topbar height*/ - 68rpx/*.search height*/ - 40rpx/*.white-bg padding-top*/ - 40rpx /*.white-bg padding-bottom*/ + ); /* #endif */ /* #ifndef APP-PLUS */ - min-height: calc(100vh - 116rpx/*.topbar height*/ - 68rpx/*.search height*/ - 40rpx/*.white-bg padding-top*/ - 40rpx/*.white-bg padding-bottom*/); + min-height: calc(100vh - 116rpx/*.topbar height*/ - 68rpx/*.search height*/ - 40rpx/*.white-bg padding-top*/ - 40rpx /*.white-bg padding-bottom*/ + ); /* #endif */ //overflow-y: auto; } @@ -394,6 +396,7 @@ let handleDetail = (rowIndex, colIndex) => { :deep(.form-con .uni-forms-item) { margin-bottom: 22px !important; } + /*.con-bg { height: 420rpx; }*/ From 1a3c014c8374bb86a3c5faf550abed200e67f436 Mon Sep 17 00:00:00 2001 From: wangzhuo Date: Wed, 17 Sep 2025 21:47:23 +0800 Subject: [PATCH 10/60] =?UTF-8?q?fix:=20=E4=B8=BB=E5=BD=92=E5=B1=9E?= =?UTF-8?q?=E4=BA=BA=E5=8F=98=E6=9B=B4=E5=AE=A1=E6=A0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainOwner/audit/mainOwnerChangeAudit.vue | 49 +++------- .../CRM/mainOwner/view/viewMainOwner.vue | 93 +++++++------------ 2 files changed, 46 insertions(+), 96 deletions(-) diff --git a/src/pages/business/CRM/mainOwner/audit/mainOwnerChangeAudit.vue b/src/pages/business/CRM/mainOwner/audit/mainOwnerChangeAudit.vue index 5ce10c6..8e37c43 100644 --- a/src/pages/business/CRM/mainOwner/audit/mainOwnerChangeAudit.vue +++ b/src/pages/business/CRM/mainOwner/audit/mainOwnerChangeAudit.vue @@ -16,13 +16,12 @@ - - - - - - - + + + + + + {{ item.cusName }} - {{ item.auditStatus ? item.auditStatus : '待审核' }} + {{ item.auditStatus ? item.auditStatus : '待您审核' }} @@ -100,7 +99,8 @@ const mescrollRef = ref(null); let timerId = null; // 查询搜索跳转 let handleSearch = () => { - // 防抖搜索 console.log(searchValue.value) + // 防抖搜索 + console.log(searchValue.value) if (timerId) clearTimeout(timerId); timerId = setTimeout(async () => { @@ -236,29 +236,6 @@ let handleDetail = (item) => { /* #endif */ } -.search { - display: flex; -} - -.search .btn-search { - border: none; - background: none; - line-height: normal; - color: #fff; - line-height: 56rpx !important; - padding: 10rpx 0 0; - text-align: left; - cursor: pointer; -} - -.search .btn-search::after { - display: none; -} - -.search .custom-search { - width: 80%; - -} .scroll-h{ /* #ifdef APP-PLUS */ top: 160rpx; @@ -270,10 +247,6 @@ let handleDetail = (item) => { /* #endif */ } -.search .custom-search.uni-searchbar { - padding-right: 0 !important; -} - .white-bg { padding-bottom: 10rpx; @@ -282,11 +255,11 @@ let handleDetail = (item) => { } } -.no-wrap{ +.no-wrap { white-space: nowrap; } -.btn-blue{ +.btn-blue { border-radius: 10rpx; } \ No newline at end of file diff --git a/src/pages/business/CRM/mainOwner/view/viewMainOwner.vue b/src/pages/business/CRM/mainOwner/view/viewMainOwner.vue index 31e7bc4..05b7093 100644 --- a/src/pages/business/CRM/mainOwner/view/viewMainOwner.vue +++ b/src/pages/business/CRM/mainOwner/view/viewMainOwner.vue @@ -1,19 +1,17 @@ + \ No newline at end of file diff --git a/src/manifest.json b/src/manifest.json index 2b66cdd..77acf10 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -112,6 +112,27 @@ "pid" : "", "parameters" : {} } + }, + "LF-Sense-Card" : { + "插件需要配置的参数名称, 如appid" : "", + "__plugin_info__" : { + "name" : "Android-NFC读卡", + "description" : "uni-app android原生插件 用来使用nfc读取m1卡", + "platforms" : "Android", + "url" : "", + "android_package_name" : "", + "ios_bundle_id" : "", + "isCloud" : false, + "bought" : -1, + "pid" : "", + "parameters" : { + "插件需要配置的参数名称, 如appid" : { + "des" : "参数描述", + "key" : "AndroidManifest.xml中添加meta-data节点!对应android:name属性值, 如GETUI_APPID", + "value" : "" + } + } + } } } }, diff --git a/src/pages/business/polling/index.vue b/src/pages/business/polling/index.vue index 1fd77bc..6dd0c88 100644 --- a/src/pages/business/polling/index.vue +++ b/src/pages/business/polling/index.vue @@ -52,7 +52,7 @@ 完成进度{{item.groupFinishNum}}/{{item.groupNum}} - 完成比率{{(item.groupFinishNum/item.groupNum).toFixed()+'%'}} + 完成比率{{(item.groupFinishNum/item.groupNum*100).toFixed()+'%'}} @@ -102,7 +102,7 @@ 完成进度{{item.groupFinishNum}}/{{item.groupNum}} - 完成比率{{(item.groupFinishNum/item.groupNum).toFixed()+'%'}} + 完成比率{{(item.groupFinishNum/item.groupNum*100).toFixed()+'%'}} @@ -305,12 +305,12 @@ const handleJump = (item)=>{ .white-bg{ width: 670rpx; padding: 30rpx 40rpx 40rpx; - margin-bottom: 0; + margin: 0 auto !important; border-radius: 8px 8px 0 0; } .white-bg2{ border-radius: 0; - margin-top:20rpx; + border-top:20rpx solid #F5F5F5 } .report-list{ position: relative; diff --git a/src/pages/business/polling/optionDetail.vue b/src/pages/business/polling/optionDetail.vue index 6abe028..feb3744 100644 --- a/src/pages/business/polling/optionDetail.vue +++ b/src/pages/business/polling/optionDetail.vue @@ -129,8 +129,8 @@ {{ item.pointName }} - - + + @@ -145,8 +145,8 @@ {{ item.pointName }} - - + + @@ -194,6 +194,8 @@ ref="showModel3" > + + @@ -231,7 +246,7 @@ const handleDelete=()=>{ } .white-bg{ width: 680rpx; - padding: 15rpx 30rpx 10rpx 40rpx; + padding: 15rpx 30rpx 50rpx 40rpx; margin-bottom: 0; border-radius: 8px 8px 0 0; } diff --git a/src/pages/business/polling/problemList.vue b/src/pages/business/polling/problemList.vue index 0f4e06e..2fe4d3b 100644 --- a/src/pages/business/polling/problemList.vue +++ b/src/pages/business/polling/problemList.vue @@ -68,7 +68,6 @@ import customHeader from '@/components/customHeader.vue' import customSearch from '@/components/customSearch.vue' import MescrollUni from 'mescroll-uni/mescroll-uni.vue'; import { getNavBarPaddingTop } from '@/utils/system.js' -import { noticeList } from '@/api/notice.js' import { parseTime } from '@/utils/datetime.js' import { problemList } from '@/api/polling.js' @@ -188,90 +187,10 @@ const getList = (pageIndex, pageSize) => { taskType:notictTypeCheck.value.id } let res = await problemList(param); - // let res={ - // "code": 200, - // "msg": "操作成功", - // "data": { - // list:[ - // { - // problemDesc:'西区地下车库入口防汛物资摆放', - // problemId:202512297899, - // problemStatus:1, - // modifyTime:new Date().getTime(), - // count:0, - // }, - // { - // problemDesc:'监控室消防设备阀门确保正常开启闭合', - // problemId:202512297899, - // problemStatus:2, - // modifyTime:new Date().getTime(), - // count:20, - // }, - // { - // problemDesc:'西区地下车库入口防汛物资摆放', - // problemId:202512297899, - // problemStatus:1, - // modifyTime:new Date().getTime(), - // count:0, - // }, - // { - // problemDesc:'监控室消防设备阀门确保正常开启闭合', - // problemId:202512297899, - // problemStatus:2, - // modifyTime:new Date().getTime(), - // count:20, - // },{ - // problemDesc:'西区地下车库入口防汛物资摆放', - // problemId:202512297899, - // problemStatus:1, - // modifyTime:new Date().getTime(), - // count:0, - // }, - // { - // problemDesc:'监控室消防设备阀门确保正常开启闭合', - // problemId:202512297899, - // problemStatus:2, - // modifyTime:new Date().getTime(), - // count:20, - // }, - // { - // problemDesc:'监控室消防设备阀门确保正常开启闭合', - // problemId:202512297899, - // problemStatus:2, - // modifyTime:new Date().getTime(), - // count:20, - // }, - // { - // problemDesc:'监控室消防设备阀门确保正常开启闭合', - // problemId:202512297899, - // problemStatus:2, - // modifyTime:new Date().getTime(), - // count:20, - // }, - // { - // problemDesc:'监控室消防设备阀门确保正常开启闭合', - // problemId:202512297899, - // problemStatus:2, - // modifyTime:new Date().getTime(), - // count:20, - // }, - // { - // problemDesc:'监控室消防设备阀门确保正常开启闭合', - // problemId:202512297899, - // problemStatus:2, - // modifyTime:new Date().getTime(), - // count:20, - // } - // ], - // recordCount:2 - // } - // } - let list = res.list || []; - resolve({ list, - total: res.recordCount || 0 + // total: res.recordCount || 0 }); }); diff --git a/src/pages/business/polling/problemLog.vue b/src/pages/business/polling/problemLog.vue index b97ccf3..9a83e0e 100644 --- a/src/pages/business/polling/problemLog.vue +++ b/src/pages/business/polling/problemLog.vue @@ -8,118 +8,167 @@ - - 问题:{{optionObj.groupName}} - - 问题项 - - - - {{String(index+1).padStart(2, '0')+'.'}} - {{ item }} + + + + 问题:{{optionObj.groupName}} + + 问题项 + + + + {{String(index+1).padStart(2, '0')+'.'}} + {{ item }} + - - - - 巡检人 - {{realname}} - - - - 检查点跟踪情况描述 - - - - - 问题点位照片或视频 * - - - - - - - - - + + + 提交人 + {{optionObj.createUserName}} + + + + 检查点跟踪情况描述 + + + + + 问题点位照片或视频 * + + + + + + + + + + + + + + + + + + + + - - - - + \ No newline at end of file diff --git a/src/manifest.json b/src/manifest.json index 77acf10..2b66cdd 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -112,27 +112,6 @@ "pid" : "", "parameters" : {} } - }, - "LF-Sense-Card" : { - "插件需要配置的参数名称, 如appid" : "", - "__plugin_info__" : { - "name" : "Android-NFC读卡", - "description" : "uni-app android原生插件 用来使用nfc读取m1卡", - "platforms" : "Android", - "url" : "", - "android_package_name" : "", - "ios_bundle_id" : "", - "isCloud" : false, - "bought" : -1, - "pid" : "", - "parameters" : { - "插件需要配置的参数名称, 如appid" : { - "des" : "参数描述", - "key" : "AndroidManifest.xml中添加meta-data节点!对应android:name属性值, 如GETUI_APPID", - "value" : "" - } - } - } } } }, diff --git a/src/pages.json b/src/pages.json index 6c1c9fd..8bdcf5d 100644 --- a/src/pages.json +++ b/src/pages.json @@ -662,6 +662,18 @@ "style": { "navigationBarTitleText": "" } + }, + { + "path": "pages/business/polling/nfcTest/nfcTemplate", + "style": { + "navigationBarTitleText": "" + } + }, + { + "path": "pages/business/polling/nfcTest/index", + "style": { + "navigationBarTitleText": "" + } } ], "globalStyle": { diff --git a/src/pages/business/polling/nfcTest/index.vue b/src/pages/business/polling/nfcTest/index.vue new file mode 100644 index 0000000..d514c98 --- /dev/null +++ b/src/pages/business/polling/nfcTest/index.vue @@ -0,0 +1,78 @@ + + + + + \ No newline at end of file diff --git a/src/pages/business/polling/nfcTest/nfcTemplate.vue b/src/pages/business/polling/nfcTest/nfcTemplate.vue new file mode 100644 index 0000000..6339445 --- /dev/null +++ b/src/pages/business/polling/nfcTest/nfcTemplate.vue @@ -0,0 +1,784 @@ + + + + + \ No newline at end of file diff --git a/src/pages/business/polling/optionDetail.vue b/src/pages/business/polling/optionDetail.vue index feb3744..3a1027d 100644 --- a/src/pages/business/polling/optionDetail.vue +++ b/src/pages/business/polling/optionDetail.vue @@ -6,7 +6,9 @@ :leftFlag="true" :rightFlag="true" > \ No newline at end of file diff --git a/src/utils/ouu-nfc.js b/src/pages/business/polling/nfcTest/ouu-nfc.js similarity index 100% rename from src/utils/ouu-nfc.js rename to src/pages/business/polling/nfcTest/ouu-nfc.js diff --git a/src/pages/business/polling/optionDetail.vue b/src/pages/business/polling/optionDetail.vue index 3a1027d..bf45601 100644 --- a/src/pages/business/polling/optionDetail.vue +++ b/src/pages/business/polling/optionDetail.vue @@ -94,10 +94,20 @@ {{ item.pointName }} - + + + 识别成功点击再次识别 + + 开始识别 + + + + 识别成功 + + @@ -204,17 +214,21 @@ @close="handlePreviewClose" > - - + + + + + \ No newline at end of file diff --git a/src/pages/business/CRM/leave/addBackApply.vue b/src/pages/business/CRM/leave/addBackApply.vue new file mode 100644 index 0000000..e2461f2 --- /dev/null +++ b/src/pages/business/CRM/leave/addBackApply.vue @@ -0,0 +1,316 @@ + + + + + \ No newline at end of file diff --git a/src/pages/business/CRM/leave/askLeave.vue b/src/pages/business/CRM/leave/askLeave.vue new file mode 100644 index 0000000..dfdef2a --- /dev/null +++ b/src/pages/business/CRM/leave/askLeave.vue @@ -0,0 +1,58 @@ + + + + + \ No newline at end of file diff --git a/src/pages/business/CRM/leave/backApply.vue b/src/pages/business/CRM/leave/backApply.vue new file mode 100644 index 0000000..65dc938 --- /dev/null +++ b/src/pages/business/CRM/leave/backApply.vue @@ -0,0 +1,159 @@ + + + + + \ No newline at end of file diff --git a/src/pages/business/CRM/leave/myApply.vue b/src/pages/business/CRM/leave/myApply.vue new file mode 100644 index 0000000..3621e03 --- /dev/null +++ b/src/pages/business/CRM/leave/myApply.vue @@ -0,0 +1,237 @@ + + + + + \ No newline at end of file diff --git a/src/pages/business/CRM/leave/myApplyDetail.vue b/src/pages/business/CRM/leave/myApplyDetail.vue new file mode 100644 index 0000000..75fc539 --- /dev/null +++ b/src/pages/business/CRM/leave/myApplyDetail.vue @@ -0,0 +1,313 @@ + + + + + \ No newline at end of file diff --git a/src/pages/business/CRM/leave/reviewDetail.vue b/src/pages/business/CRM/leave/reviewDetail.vue new file mode 100644 index 0000000..269c761 --- /dev/null +++ b/src/pages/business/CRM/leave/reviewDetail.vue @@ -0,0 +1,318 @@ + + + + + \ No newline at end of file diff --git a/src/pages/business/CRM/leave/reviewLeave.vue b/src/pages/business/CRM/leave/reviewLeave.vue new file mode 100644 index 0000000..27842a5 --- /dev/null +++ b/src/pages/business/CRM/leave/reviewLeave.vue @@ -0,0 +1,376 @@ + + + + + \ No newline at end of file From a0a8e5e6684a5a2bd9ee56dfc89252ae2b7b2b75 Mon Sep 17 00:00:00 2001 From: xuli Date: Fri, 12 Dec 2025 18:00:01 +0800 Subject: [PATCH 40/60] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8E=A8=E9=80=81?= =?UTF-8?q?=E5=B0=8F=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/manifest.json | 27 +++++++++++++++++---------- src/static/images/icon_small.png | Bin 0 -> 16483 bytes 2 files changed, 17 insertions(+), 10 deletions(-) create mode 100644 src/static/images/icon_small.png diff --git a/src/manifest.json b/src/manifest.json index d955d7e..f26148a 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -1,7 +1,7 @@ { "id" : "H5E705637", "name" : "718友晟", - "appid" : "__UNI__4C459F4", + "appid" : "__UNI__0B682E1", "description" : "", "versionName" : "1.0.2", "versionCode" : "100", @@ -86,15 +86,22 @@ "unipush" : { "version" : "2", "offline" : true, - "icons" : { - "small" : { - "ldpi" : "/static/images/icon.png", - "mdpi" : "/static/images/icon.png", - "hdpi" : "/static/images/icon.png", - "xhdpi" : "/static/images/icon.png", - "xxhdpi" : "/static/images/icon.png" - } - } + "icons" : { + "push" : { + "ldpi" : "/static/images/icon.png", + "mdpi" : "/static/images/icon.png", + "hdpi" : "/static/images/icon.png", + "xhdpi" : "/static/images/icon.png", + "xxhdpi" : "/static/images/icon.png" + }, + "small" : { + "ldpi" : "/static/images/icon_small.png", + "mdpi" : "/static/images/icon_small.png", + "hdpi" : "/static/images/icon_small.png", + "xhdpi" : "/static/images/icon_small.png", + "xxhdpi" : "/static/images/icon_small.png" + } + } } } } diff --git a/src/static/images/icon_small.png b/src/static/images/icon_small.png new file mode 100644 index 0000000000000000000000000000000000000000..242cbed29ce60eedc1564a1bb55649a109158313 GIT binary patch literal 16483 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 ZVx1rVV;YT(`=4`KlA^LAwL Date: Fri, 12 Dec 2025 18:01:03 +0800 Subject: [PATCH 41/60] =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/business/polling/nfcTest/ouu-nfc.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pages/business/polling/nfcTest/ouu-nfc.js b/src/pages/business/polling/nfcTest/ouu-nfc.js index ada5176..1baca23 100644 --- a/src/pages/business/polling/nfcTest/ouu-nfc.js +++ b/src/pages/business/polling/nfcTest/ouu-nfc.js @@ -75,6 +75,8 @@ export default { let ndef = new IntentFilter("android.nfc.action.TECH_DISCOVERED"); ndef.addDataType("*/*"); let intentFiltersArray = [ndef]; + + console.log('newintent running==>',intentFiltersArray); plus.globalEvent.addEventListener('newintent',function() { console.log('newintent running'); From b84d395b431dc5b8de95cbc37b40579373152bd1 Mon Sep 17 00:00:00 2001 From: xuli Date: Fri, 12 Dec 2025 18:05:37 +0800 Subject: [PATCH 42/60] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/notice/notice.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/notice/notice.vue b/src/pages/notice/notice.vue index 243a7d8..7e4b582 100644 --- a/src/pages/notice/notice.vue +++ b/src/pages/notice/notice.vue @@ -260,7 +260,7 @@ const handleJump = (item)=>{ } .scroll-h{ /* #ifdef APP-PLUS */ - height: calc(100vh - 120px); + height: calc(100vh - 150px); /* #endif */ /* #ifndef APP-PLUS */ height: calc(100vh - 160px); From 47618273eab98530cdfcd7807a9a3a915948fa37 Mon Sep 17 00:00:00 2001 From: xuli Date: Mon, 15 Dec 2025 14:09:48 +0800 Subject: [PATCH 43/60] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=BB=E5=8A=A8?= =?UTF-8?q?=E8=B0=83=E7=94=A8=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/manifest.json | 3 +- src/pages/loading/loading.vue | 75 +++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/src/manifest.json b/src/manifest.json index f26148a..9de3ab4 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -62,7 +62,8 @@ "", "", "", - "" + "", + "" ], "abiFilters" : [ "armeabi-v7a", "arm64-v8a" ], "minSdkVersion" : 23, diff --git a/src/pages/loading/loading.vue b/src/pages/loading/loading.vue index 91990a8..fd2ab03 100644 --- a/src/pages/loading/loading.vue +++ b/src/pages/loading/loading.vue @@ -55,6 +55,9 @@ onLoad(async(opt) => { // uni.preloadPage({url: "/pages/home/home"}); // #ifdef APP-PLUS + //手机通知授权 + noticMsgTool(); + // 查询版本接口 await getOSVesion(); @@ -216,6 +219,78 @@ const handleClose=()=>{ selectDeviceId() } } + +//通知授权 +const noticMsgTool=()=>{ + if (uni.getSystemInfoSync().platform == "ios") { + // iOS: 使用 iOS API 检查通知权限 + plus.ios.import('UserNotifications'); + var UNNotificationSettings = plus.ios.invoke('UNUserNotificationCenter', 'currentNotificationCenter'); + plus.ios.invoke(UNNotificationSettings, 'getNotificationSettingsWithCompletionHandler', function(settings) { + var authorizationStatus = plus.ios.invoke(settings, 'authorizationStatus'); + if (authorizationStatus !== 3) { // 3表示已授权 + //苹果打开对应的通知栏 + uni.showModal({ + title: '通知权限开启提醒', + content: '您还没有开启通知权限,无法接受到消息通知,请前往设置!', + showCancel: false, + confirmText: '去设置', + success: function(res) { + if (res.confirm) { + var app = plus.ios.invoke('UIApplication', 'sharedApplication'); + var setting = plus.ios.invoke('NSURL', 'URLWithString:','app-settings:'); + plus.ios.invoke(app, 'openURL:', setting); + plus.ios.deleteObject(setting); + plus.ios.deleteObject(app); + } + } + }); + } + }); + + } else { + //android打开对应的通知栏 + var main = plus.android.runtimeMainActivity(); + var pkName = main.getPackageName(); + var uid = main.getApplicationInfo().plusGetAttribute("uid"); + var context = main.getApplicationContext(); + var NotificationManager = plus.android.importClass('android.app.NotificationManager'); + var notificationManager = context.getSystemService(context.NOTIFICATION_SERVICE); + var areNotificationsEnabled = notificationManager.areNotificationsEnabled(); + + if (!areNotificationsEnabled) { + // 提示用户开启通知权限 + uni.showModal({ + title: '通知权限开启提醒', + content: '您还没有开启通知权限,无法接受到消息通知,请前往设置!', + showCancel: false, + confirmText: '去设置', + success: function(res) { + if (res.confirm) { + var Intent = plus.android.importClass('android.content.Intent'); + var Build = plus.android.importClass("android.os.Build"); + //android 8.0引导 + if (Build.VERSION.SDK_INT >= 26) { + var intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS'); + intent.putExtra('android.provider.extra.APP_PACKAGE', pkName); + } else if (Build.VERSION.SDK_INT >= 21) { //android 5.0-7.0 + var intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS'); + intent.putExtra("app_package", pkName); + intent.putExtra("app_uid", uid); + } else { //(<21)其他--跳转到该应用管理的详情页 + intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); + var uri = Uri.fromParts("package", mainActivity.getPackageName(), null); + intent.setData(uri); + } + // 跳转到该应用的系统通知设置页 + main.startActivity(intent); + } + } + }); + } + + } +} + \ No newline at end of file From c36aa01f0a564aa495834c658d319103d60560f0 Mon Sep 17 00:00:00 2001 From: jiangyanshan Date: Thu, 18 Dec 2025 10:59:40 +0800 Subject: [PATCH 47/60] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=AD=BE=E5=88=B0?= =?UTF-8?q?=E6=89=93=E5=8D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/crm/activity/map.js | 45 ++++++++------------ src/pages/business/CRM/map/vistorCheckin.vue | 15 +++---- 2 files changed, 24 insertions(+), 36 deletions(-) diff --git a/src/api/crm/activity/map.js b/src/api/crm/activity/map.js index 7a4638f..fb4bdb9 100644 --- a/src/api/crm/activity/map.js +++ b/src/api/crm/activity/map.js @@ -3,41 +3,30 @@ import request from "@/utils/request"; //新增地图开始签到接口 export function addStartMap(data) { return request.post({ - url: "/crm/app/appVisistMap/Startadd", + url: "/crm/jys/app/appVisistMap/Startadd", data, },{ isTransformResponse:false }); } -// //出差打卡接口 -// export function businessTripClockIn(data) { -// return request.post({ -// url: '/crm/app/appVisistMap/businessTripClockIn', -// data -// },{isTransformResponse:false}); -// } - -// //新增地图开始打卡接口 -// export function addStartMapForClockIn(data) { -// return request.post({ -// url: "/crm/app/appVisistMap/StartaddForClockIn", -// data, -// },{ -// isTransformResponse:false -// }); -// } - - //出差打卡接口 - export function businessTripClockIn(data) { - return request('/app/appVisistMap/businessTripClockIn', data, 'POST', 'application/json;charset=UTF-8'); - } - - //新增地图开始打卡接口 - export function addStartMapForClockIn(data) { - return request('/app/appVisistMap/StartaddForClockIn', data, 'POST', 'application/json;charset=UTF-8'); - } +//出差打卡接口 +export function businessTripClockIn(data) { + return request.post({ + url: '/crm/jys/app/appVisistMap/businessTripClockIn', + data + },{isTransformResponse:false}); +} +//新增地图开始打卡接口 +export function addStartMapForClockIn(data) { + return request.post({ + url: "/crm/jys/app/appVisistMap/StartaddForClockIn", + data, + },{ + isTransformResponse:false + }); +} //打卡信息查看 export function CheckInInformationViewing(data) { diff --git a/src/pages/business/CRM/map/vistorCheckin.vue b/src/pages/business/CRM/map/vistorCheckin.vue index 353e162..07e19eb 100644 --- a/src/pages/business/CRM/map/vistorCheckin.vue +++ b/src/pages/business/CRM/map/vistorCheckin.vue @@ -1,5 +1,5 @@ - \ No newline at end of file + From bfbb1a1cf490e8169d3ea625de8f77a69301c728 Mon Sep 17 00:00:00 2001 From: xuli Date: Thu, 18 Dec 2025 17:57:09 +0800 Subject: [PATCH 49/60] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=B7=A1=E6=A3=80?= =?UTF-8?q?=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/business/polling/index.vue | 77 +++++++++++------- src/pages/business/polling/optionDetail.vue | 53 +++++++------ src/pages/business/polling/problemList.vue | 4 +- src/pages/business/polling/searchList.vue | 87 +++++++++++++-------- src/pages/business/polling/taskDetail.vue | 2 +- src/pages/business/polling/taskList.vue | 43 ++++++---- 6 files changed, 159 insertions(+), 107 deletions(-) diff --git a/src/pages/business/polling/index.vue b/src/pages/business/polling/index.vue index 6dd0c88..2820070 100644 --- a/src/pages/business/polling/index.vue +++ b/src/pages/business/polling/index.vue @@ -31,8 +31,8 @@ - - + + @@ -43,7 +43,23 @@ - 开始时间{{ parseTime(item.planTime,'{h}:{i}') }} + + 执行时间{{ parseTime(item.beginTime,'{y}-{m}-{d} {h}:{i}') }} + + + 开始时间{{ parseTime(item.planTime,'{y}-{m}-{d} {h}:{i}') }} + + + + + + + 任务状态 + 执行中 + 待执行 + + {{formatTaskStatus(item.taskStatus) }} + 任务时长{{ item.workHour }}小时 @@ -52,17 +68,8 @@ 完成进度{{item.groupFinishNum}}/{{item.groupNum}} - 完成比率{{(item.groupFinishNum/item.groupNum*100).toFixed()+'%'}} - - - - - 任务状态 - - 待执行 - 执行中 - - {{formatTaskStatus(item.taskStatus) }} + + 完成比率{{(item.groupFinishNum/item.groupNum*100).toFixed()+'%'}} @@ -93,8 +100,26 @@ - 开始时间{{ parseTime(item.planTime,'{h}:{i}') }} - 任务时长{{ item.workHour }}小时 + + 执行时间{{ parseTime(item.beginTime,'{y}-{m}-{d} {h}:{i}') }} + + + 开始时间{{ parseTime(item.planTime,'{y}-{m}-{d} {h}:{i}') }} + + + + + + + 任务状态 + 执行中 + 待执行 + + {{formatTaskStatus(item.taskStatus) }} + + + 任务时长{{ item.workHour }}小时 + @@ -102,17 +127,8 @@ 完成进度{{item.groupFinishNum}}/{{item.groupNum}} - 完成比率{{(item.groupFinishNum/item.groupNum*100).toFixed()+'%'}} - - - - - 任务状态 - - 待执行 - 执行中 - - {{formatTaskStatus(item.taskStatus) }} + + 完成比率{{(item.groupFinishNum/item.groupNum*100).toFixed()+'%'}} @@ -138,7 +154,7 @@ 跟踪次数{{ item.logNum }} - 最近跟踪时间{{ parseTime(item.lastLogTime,'{m}-{d} {h}:{i}') }} + 最近跟踪时间{{ parseTime(item.lastLogTime,'{y}-{m}-{d} {h}:{i}') }} @@ -201,7 +217,7 @@ const mescrollInit = (mescroll) => { // 下拉刷新 const downCallback = async (mescroll) => { try { - console.log("下拉刷新") + // console.log("下拉刷新") const res = await getList(1, upOption.value.page.size); cssFlag.value = false; list1.value = res.list1 || []; @@ -337,6 +353,7 @@ const handleJump = (item)=>{ } .report-list .r-list .r-left{ display: flex; + align-items: center; } .report-list .r-list .r-gray{ margin-left:10rpx; @@ -352,7 +369,7 @@ const handleJump = (item)=>{ width:525rpx } .r-left .r-l-left{ - width:280rpx; + width:345rpx; } .r-left .r-l-right{ diff --git a/src/pages/business/polling/optionDetail.vue b/src/pages/business/polling/optionDetail.vue index 2ae70ec..2b24685 100644 --- a/src/pages/business/polling/optionDetail.vue +++ b/src/pages/business/polling/optionDetail.vue @@ -56,7 +56,7 @@ - + {{String(index+1).padStart(2, '0')+'.'}} @@ -141,7 +141,7 @@ {{ item.pointName }} - + @@ -157,7 +157,7 @@ {{ item.pointName }} - + @@ -166,6 +166,12 @@ + + + {{String(index+1).padStart(2, '0')+'.'}} + {{ item.pointName }} + + @@ -293,27 +299,28 @@ const getList = async() => { let res = await taskGroupDetail(param); let data = res||{}; data.pointList.forEach(item=>{ + item['imgArr']=[]; + item['imgArr2']=[]; + item['videoArr']=[]; + item['videoArr2']=[]; + item['chooseList']=[]; if(item.resultContent){ if(item.pointType==2 ||item.pointType==1){ item['chooseList'] = item.resultContent.split(",") //JSON.parse(item.resultContent) }else if(item.pointType==7){ - imgArr.value=[]; - imgArr2.value=[]; let imgList = item.resultContent?.split(",")||[]; imgList.forEach(imgUrl=>{ - imgArr.value.push(imgUrl); - imgArr2.value.push({ + item.imgArr.push(imgUrl); + item.imgArr2.push({ shortUrl:minioObj.minioThumbUrl +"/"+imgUrl, url:minioObj.minioUrl +"/"+imgUrl, }) }) }else if(item.pointType==8){ - videoArr.value=[]; - videoArr2.value=[] let videoList = item.resultContent?.split(",")||[]; videoList.forEach(videoUrl=>{ - videoArr.value.push(videoUrl); - videoArr2.value.push({ + item.videoArr.push(videoUrl); + item.videoArr2.push({ shortUrl:minioObj.minioThumbUrl +"/"+videoUrl, url:minioObj.minioUrl +"/"+videoUrl, }) @@ -356,10 +363,10 @@ const changeCheck = (param,param2,item) => { } // 照片及拍照处理 -const imgArr = ref([]); -const imgArr2=ref([]); +// const imgArr = ref([]); +// const imgArr2=ref([]); const chooseImage = (item) => { - console.log("item=>",item) + // console.log("item=>",item) try { uni.chooseImage({ // count: 1, // 默认是9,这里设置为1次只选1张 @@ -392,12 +399,12 @@ const chooseImage = (item) => { let data = res.data; // console.log("444图片上传成功=>",data) // imgArr2.value.push(data.fileUrl) - imgArr2.value.push({ + item['imgArr2'].push({ shortUrl:minioObj.minioThumbUrl +"/"+data.fileName, url:minioObj.minioUrl +"/"+data.fileName, }) - imgArr.value.push(data.fileName)//传给后台的路径 - item.resultContent = imgArr.value.join(",") + item['imgArr'].push(data.fileName)//传给后台的路径 + item.resultContent = item['imgArr'].join(",") }) }) @@ -412,9 +419,9 @@ const chooseImage = (item) => { }; // 视频处理 -const videoSrc = ref(''); -const videoArr = ref([]); -const videoArr2 = ref([]); +// const videoSrc = ref(''); +// const videoArr = ref([]); +// const videoArr2 = ref([]); const chooseVideo = (item) => { uni.chooseVideo({ sourceType: ['album', 'camera'], // 来源:相册和相机 @@ -438,9 +445,9 @@ const chooseVideo = (item) => { } minioUpload(param).then(uploadRes=>{ let data = uploadRes.data; - videoArr.value.push(data.fileName)//传给后台的路径 - videoArr2.value.push(data.fileUrl) - item.resultContent = videoArr.value.join(",") + item['videoArr'].push(data.fileName)//传给后台的路径 + item['videoArr2'].push(data.fileUrl) + item.resultContent = item['videoArr'].join(",") }).finally(()=>{ }) diff --git a/src/pages/business/polling/problemList.vue b/src/pages/business/polling/problemList.vue index 2fe4d3b..808ce54 100644 --- a/src/pages/business/polling/problemList.vue +++ b/src/pages/business/polling/problemList.vue @@ -46,7 +46,7 @@ 跟踪次数{{ item.logNum }} - 最近跟踪时间{{parseTime(item.lastLogTime,'{m}-{d} {h}:{i}') }} + 最近跟踪时间{{parseTime(item.lastLogTime,'{y}-{m}-{d} {h}:{i}') }} @@ -152,7 +152,7 @@ const downCallback = async (mescroll) => { const res = await getList(1, upOption.value.page.size); cssFlag.value = false; list.value = res.list; - mescroll.resetUpScroll(); + // mescroll.resetUpScroll(); } catch (error) { mescroll.endErr(); } finally { diff --git a/src/pages/business/polling/searchList.vue b/src/pages/business/polling/searchList.vue index fb037c5..0df9e61 100644 --- a/src/pages/business/polling/searchList.vue +++ b/src/pages/business/polling/searchList.vue @@ -79,8 +79,8 @@ - - + + @@ -91,8 +91,26 @@ - 开始时间{{ parseTime(item.planTime,'{h}:{i}') }} - 任务时长{{ item.workHour }}小时 + + 执行时间{{ parseTime(item.beginTime,'{y}-{m}-{d} {h}:{i}') }} + + + 开始时间{{ parseTime(item.planTime,'{y}-{m}-{d} {h}:{i}') }} + + + + + + + 任务状态 + 执行中 + 待执行 + + {{formatTaskStatus(item.taskStatus) }} + + + 任务时长{{ item.workHour }}小时 + @@ -100,20 +118,12 @@ 完成进度{{item.groupFinishNum}}/{{item.groupNum}} - 完成比率{{(item.groupFinishNum/item.groupNum*100).toFixed()+'%'}} - - - - - 任务状态 - - 待执行 - 执行中 - - {{formatTaskStatus(item.taskStatus) }} + + 完成比率{{(item.groupFinishNum/item.groupNum*100).toFixed()+'%'}} + @@ -136,8 +146,8 @@ - - + + @@ -148,8 +158,26 @@ - 开始时间{{ parseTime(item.planTime,'{h}:{i}') }} - 任务时长{{ item.workHour }}小时 + + 执行时间{{ parseTime(item.beginTime,'{y}-{m}-{d} {h}:{i}') }} + + + 开始时间{{ parseTime(item.planTime,'{y}-{m}-{d} {h}:{i}') }} + + + + + + + 任务状态 + 执行中 + 待执行 + + {{formatTaskStatus(item.taskStatus) }} + + + 任务时长{{ item.workHour }}小时 + @@ -157,17 +185,8 @@ 完成进度{{item.groupFinishNum}}/{{item.groupNum}} - 完成比率{{item.percentage}} - - - - - 任务状态 - - 待执行 - 执行中 - - {{formatTaskStatus(item.taskStatus) }} + + 完成比率{{item.percentage}} @@ -200,7 +219,7 @@ 跟踪次数{{ item.logNum }} - 最近跟踪时间{{ parseTime(item.lastLogTime,'{m}-{d} {h}:{i}') }} + 最近跟踪时间{{ parseTime(item.lastLogTime,'{y}-{m}-{d} {h}:{i}') }} @@ -337,12 +356,12 @@ const scrollToPosition = () => { // 下拉刷新 const downCallback = async (mescroll) => { try { - console.log("下拉刷新") + // console.log("下拉刷新") isMonth.value=true; const res = await getList(1, upOption.value.page.size); cssFlag.value = false; list.value = res.list; - mescroll.resetUpScroll(); + // mescroll.resetUpScroll(); } catch (error) { mescroll.endErr(); } finally { @@ -354,7 +373,7 @@ const downCallback = async (mescroll) => { // 上拉加载更多 const upCallback = async (mescroll) => { try { - console.log("上拉加载更多") + // console.log("上拉加载更多") let res = await getList(mescroll.num, mescroll.size); if (mescroll.num === 1) { list.value = res.list; diff --git a/src/pages/business/polling/taskDetail.vue b/src/pages/business/polling/taskDetail.vue index f156cb6..22f6158 100644 --- a/src/pages/business/polling/taskDetail.vue +++ b/src/pages/business/polling/taskDetail.vue @@ -173,7 +173,7 @@ const downCallback = async (mescroll) => { const res = await getList(1, upOption.value.page.size); cssFlag.value = false; taskObj.value = res; - mescroll.resetUpScroll(); + // mescroll.resetUpScroll(); } catch (error) { mescroll.endErr(); } finally { diff --git a/src/pages/business/polling/taskList.vue b/src/pages/business/polling/taskList.vue index f9adc05..f7eaed4 100644 --- a/src/pages/business/polling/taskList.vue +++ b/src/pages/business/polling/taskList.vue @@ -37,8 +37,8 @@ - - + + @@ -52,8 +52,26 @@ - 开始时间{{ parseTime(item.planTime,'{y}-{m}-{d} {h}:{i}') }} - 任务时长{{ item.workHour }}小时 + + 执行时间{{ parseTime(item.beginTime,'{y}-{m}-{d} {h}:{i}') }} + + + 开始时间{{ parseTime(item.planTime,'{y}-{m}-{d} {h}:{i}') }} + + + + + + + 任务状态 + 执行中 + 待执行 + + {{formatTaskStatus(item.taskStatus) }} + + + 任务时长{{ item.workHour }}小时 + @@ -61,20 +79,12 @@ 完成进度{{item.groupFinishNum}}/{{item.groupNum}} - 完成比率{{(item.groupFinishNum/item.groupNum*100).toFixed()+'%'}} - - - - - 任务状态 - - 待执行 - 执行中 - - {{formatTaskStatus(item.taskStatus) }} + + 完成比率{{(item.groupFinishNum/item.groupNum*100).toFixed()+'%'}} + @@ -183,13 +193,12 @@ const mescrollInit = (mescroll) => { // 下拉刷新 const downCallback = async (mescroll) => { - console.log("mescroll=>",mescroll) try { console.log("下拉刷新"); const res = await getList(1, upOption.value.page.size,undefined); cssFlag.value = false; list.value = res.list; - mescroll.resetUpScroll() + // mescroll.resetUpScroll() } catch (error) { mescroll.endErr(); } finally { From a55cdb81214d469ee50b164d6a9b693273d71ec3 Mon Sep 17 00:00:00 2001 From: xuli Date: Thu, 18 Dec 2025 17:58:21 +0800 Subject: [PATCH 50/60] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=B7=A1=E6=A3=80?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/business/polling/searchList.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/business/polling/searchList.vue b/src/pages/business/polling/searchList.vue index 0df9e61..4664f72 100644 --- a/src/pages/business/polling/searchList.vue +++ b/src/pages/business/polling/searchList.vue @@ -652,6 +652,7 @@ const handleJump = (item)=>{ } .report-list .r-list .r-left{ display: flex; + align-items:center; } .report-list .r-list .r-gray{ margin-left:10rpx; From d32152912a87f1a7b0c2cbb432ac06a9bfd98b5f Mon Sep 17 00:00:00 2001 From: xuli Date: Thu, 18 Dec 2025 17:59:09 +0800 Subject: [PATCH 51/60] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20=E4=B8=8B=E6=8B=89?= =?UTF-8?q?=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/business/business.vue | 2 +- src/pages/notice/notice.vue | 2 +- src/pages/notice/waitApprove.vue | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/business/business.vue b/src/pages/business/business.vue index 9a38cf6..0461a9e 100644 --- a/src/pages/business/business.vue +++ b/src/pages/business/business.vue @@ -166,7 +166,7 @@ const downCallback = async (mescroll) => { setTimeout(async ()=>{ // getTaskCount(); getList(); - mescroll.resetUpScroll(); + // mescroll.resetUpScroll(); },500); } catch (error) { mescroll.endErr(); diff --git a/src/pages/notice/notice.vue b/src/pages/notice/notice.vue index 7e4b582..cb769a2 100644 --- a/src/pages/notice/notice.vue +++ b/src/pages/notice/notice.vue @@ -162,7 +162,7 @@ const downCallback = async (mescroll) => { const res = await getNoticeList(1, upOption.value.page.size); cssFlag.value = false; list.value = res.list; - mescroll.resetUpScroll(); + // mescroll.resetUpScroll(); } catch (error) { mescroll.endErr(); } finally { diff --git a/src/pages/notice/waitApprove.vue b/src/pages/notice/waitApprove.vue index de0693f..0edd7c6 100644 --- a/src/pages/notice/waitApprove.vue +++ b/src/pages/notice/waitApprove.vue @@ -103,7 +103,7 @@ const downCallback = async (mescroll) => { const res = await getFlowList(1, upOption.value.page.size); cssFlag.value = false; list.value = res.list; - mescroll.resetUpScroll(); + // mescroll.resetUpScroll(); } catch (error) { mescroll.endErr(); } finally { From 1f2bb96ef3be62136ca976c7c4c060602b3ff21e Mon Sep 17 00:00:00 2001 From: jiangyanshan Date: Fri, 19 Dec 2025 08:29:39 +0800 Subject: [PATCH 52/60] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AF=B7=E5=81=87?= =?UTF-8?q?=E4=BC=91=E5=81=87=E6=8E=A5=E5=8F=A3=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/crm/activity/activity.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/api/crm/activity/activity.js b/src/api/crm/activity/activity.js index 6ab67d4..d1d1bce 100644 --- a/src/api/crm/activity/activity.js +++ b/src/api/crm/activity/activity.js @@ -216,7 +216,7 @@ export function addMapForReport(data) { //新增请假申请 export function addLeaveApply(data) { return request.post({ - url: "/crm/jys/app/appLeaveApply/add", + url: "/crm/app/appLeaveApply/add", data, },{ isTransformResponse:false @@ -226,7 +226,7 @@ export function addLeaveApply(data) { //我的表单 export function getLeaveApplyList(data) { return request.get({ - url: "/crm/jys/app/appLeaveApply/list", + url: "/crm/app/appLeaveApply/list", data },{ isTransformResponse:false @@ -236,7 +236,7 @@ export function getLeaveApplyList(data) { //可销假表单 export function getBackList(data) { return request.get({ - url: "/crm/jys/app/appLeaveApply/getBackList", + url: "/crm/app/appLeaveApply/getBackList", data },{ isTransformResponse:false @@ -246,7 +246,7 @@ export function getBackList(data) { //我的审批 export function getMyReviewList(data) { return request.get({ - url: "/crm/jys/app/appLeaveApply/myReview", + url: "/crm/app/appLeaveApply/myReview", data },{ isTransformResponse:false @@ -256,7 +256,7 @@ export function getMyReviewList(data) { //可销假表单 export function getBackLeaveList(data) { return request.get({ - url: "/crm/jys/app/appLeaveApply/myBackLeave", + url: "/crm/app/appLeaveApply/myBackLeave", data },{ isTransformResponse:false @@ -266,7 +266,7 @@ export function getBackLeaveList(data) { //提交审批 export function addReviewLeave(data) { return request.post({ - url: "/crm/jys/app/appLeaveApply/addReview", + url: "/crm/app/appLeaveApply/addReview", data, },{ isTransformResponse:false @@ -276,7 +276,7 @@ export function addReviewLeave(data) { //新增销假申请 export function addBackApply(data) { return request.post({ - url: "/crm/jys/app/appLeaveApply/addBackApply", + url: "/crm/app/appLeaveApply/addBackApply", data, },{ isTransformResponse:false @@ -286,7 +286,7 @@ export function addBackApply(data) { //可销假表单 export function getDelLeaveApply(data) { return request.get({ - url: "/crm/jys/app/appLeaveApply/delLeaveApply", + url: "/crm/app/appLeaveApply/delLeaveApply", data },{ isTransformResponse:false From 3da8fe4027461a035632c1b4173ebad946801742 Mon Sep 17 00:00:00 2001 From: xuli Date: Fri, 19 Dec 2025 16:54:02 +0800 Subject: [PATCH 53/60] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=B7=A1=E6=A3=80?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E8=A7=86=E9=A2=91=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 9 + package.json | 1 + src/components/calenderMonth.vue | 2 +- src/components/mediaPreview.vue | 36 +++- src/manifest.json | 38 ++-- src/pages/business/polling/index.vue | 13 +- src/pages/business/polling/optionDetail.vue | 181 ++++++++++++++---- src/pages/business/polling/problemDetail.vue | 61 ++++-- src/pages/business/polling/problemLog.vue | 136 ++++++++++++- src/pages/business/polling/problemReport.vue | 95 ++++++++- src/pages/business/polling/taskDetail.vue | 154 +-------------- src/pages/login/login.vue | 2 +- src/static/common.css | 23 ++- src/utils/common.js | 117 +++++++++++ .../__UNI__4C459F4/www/app-config-service.js | 2 +- .../__UNI__4C459F4/www/app-service.js | 10 +- .../www/pages/business/polling/index.css | 2 +- .../pages/business/polling/optionDetail.css | 2 +- .../pages/business/polling/problemList.css | 2 +- .../www/pages/business/polling/searchList.css | 2 +- .../www/pages/business/polling/taskDetail.css | 2 +- .../www/pages/business/polling/taskList.css | 2 +- .../www/pages/notice/notice.css | 2 +- .../www/pages/notice/waitApprove.css | 2 +- 24 files changed, 627 insertions(+), 269 deletions(-) diff --git a/package-lock.json b/package-lock.json index 48b83b6..ebaa9ea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,6 +30,7 @@ "minio": "^8.0.6", "minio-js": "^1.0.7", "pinia": "2.0.20", + "uniapp-video-player": "^1.3.0", "uuid": "^11.1.0", "vue": "3.4.21", "vue-i18n": "9.14.5" @@ -12288,6 +12289,14 @@ "license": "MIT", "peer": true }, + "node_modules/uniapp-video-player": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/uniapp-video-player/-/uniapp-video-player-1.3.0.tgz", + "integrity": "sha512-WZa/U836ou053pzqijL2EzDrN1VX2e7Dj4R/xSMKzhcotaTqTLTc9xL832xkgwPDFmL5MEecGuyPsw2sE4hutA==", + "peerDependencies": { + "vue": "^2.6.0 || ^3.0.0" + } + }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", diff --git a/package.json b/package.json index 6439f36..72718eb 100644 --- a/package.json +++ b/package.json @@ -62,6 +62,7 @@ "minio": "^8.0.6", "minio-js": "^1.0.7", "pinia": "2.0.20", + "uniapp-video-player": "^1.3.0", "uuid": "^11.1.0", "vue": "3.4.21", "vue-i18n": "9.14.5" diff --git a/src/components/calenderMonth.vue b/src/components/calenderMonth.vue index 49136b7..2184c69 100644 --- a/src/components/calenderMonth.vue +++ b/src/components/calenderMonth.vue @@ -184,7 +184,7 @@ const getCurrentMonth = ()=>{ padding:20rpx 0 0; /* #endif */ width: calc(100% / 4 - 12px); /* 减去一些间隙以避免溢出 */ - margin: 10rpx; /* 可选,用于添加间距 */ + margin: 9rpx; /* 可选,用于添加间距 */ } .month-item.active { diff --git a/src/components/mediaPreview.vue b/src/components/mediaPreview.vue index ac871e9..7bc7fbf 100644 --- a/src/components/mediaPreview.vue +++ b/src/components/mediaPreview.vue @@ -1,6 +1,9 @@ + + \ No newline at end of file From 9f12490fb5479e1dbe9512db84eaa1c74ac7390c Mon Sep 17 00:00:00 2001 From: "PC-202311141343\\Administrator" <505354293@qq.com> Date: Wed, 24 Dec 2025 10:29:39 +0800 Subject: [PATCH 59/60] =?UTF-8?q?=E6=8F=90=E4=BA=A4CRM=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E4=B8=AD=E4=BB=BB=E5=8A=A1=E5=8A=9F=E8=83=BD=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages.json | 22 + src/pages/business/CRM/scheduler/index.vue | 118 ++++++ .../CRM/scheduler/taskListViewing.vue | 219 ++++++++++ .../business/CRM/scheduler/taskPlanAdded.vue | 388 ++++++++++++++++++ 4 files changed, 747 insertions(+) create mode 100644 src/pages/business/CRM/scheduler/index.vue create mode 100644 src/pages/business/CRM/scheduler/taskListViewing.vue create mode 100644 src/pages/business/CRM/scheduler/taskPlanAdded.vue diff --git a/src/pages.json b/src/pages.json index 6c5a27c..d8697e7 100644 --- a/src/pages.json +++ b/src/pages.json @@ -730,6 +730,28 @@ { "path": "pages/business/CRM/leave/reviewDetail", + "style": { + "navigationBarTitleText": "" + } + }, + //************************任务板块页面 + { + "path": "pages/business/CRM/scheduler/index", + + "style": { + "navigationBarTitleText": "" + } + }, + { + "path": "pages/business/CRM/scheduler/taskPlanAdded", + + "style": { + "navigationBarTitleText": "" + } + }, + { + "path": "pages/business/CRM/scheduler/taskListViewing", + "style": { "navigationBarTitleText": "" } diff --git a/src/pages/business/CRM/scheduler/index.vue b/src/pages/business/CRM/scheduler/index.vue new file mode 100644 index 0000000..d9aaf15 --- /dev/null +++ b/src/pages/business/CRM/scheduler/index.vue @@ -0,0 +1,118 @@ + + + + + \ No newline at end of file diff --git a/src/pages/business/CRM/scheduler/taskListViewing.vue b/src/pages/business/CRM/scheduler/taskListViewing.vue new file mode 100644 index 0000000..903f645 --- /dev/null +++ b/src/pages/business/CRM/scheduler/taskListViewing.vue @@ -0,0 +1,219 @@ + + + + + diff --git a/src/pages/business/CRM/scheduler/taskPlanAdded.vue b/src/pages/business/CRM/scheduler/taskPlanAdded.vue new file mode 100644 index 0000000..049db37 --- /dev/null +++ b/src/pages/business/CRM/scheduler/taskPlanAdded.vue @@ -0,0 +1,388 @@ + + + + + \ No newline at end of file From a97fabbef884266a7d041d6322fed9e8e7dc10c3 Mon Sep 17 00:00:00 2001 From: jiangyanshan Date: Mon, 29 Dec 2025 14:31:38 +0800 Subject: [PATCH 60/60] =?UTF-8?q?=E8=AF=B7=E5=81=87=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/business/CRM/leave/reviewLeave.vue | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/pages/business/CRM/leave/reviewLeave.vue b/src/pages/business/CRM/leave/reviewLeave.vue index 27842a5..c6343c2 100644 --- a/src/pages/business/CRM/leave/reviewLeave.vue +++ b/src/pages/business/CRM/leave/reviewLeave.vue @@ -111,23 +111,17 @@ onMounted(() => { onShow(() => { uni.$on('isRefresh', function () { isRefresh.value = true - getApplyList(); + getlist(); }) }) -function getApplyList() { - getlist({ - applyUserName: searchValue.value - }) -} - let isRefresh = ref(false) let searchValue = ref(null) // 查询搜索跳转 let handleSearch = () => { isRefresh.value = true - getApplyList(); + getlist(); } const pageSize = ref(4); @@ -162,10 +156,12 @@ let passList = ref([]) //已审批 let reviewList = ref([]) -const getlist = async (param) => { +const getlist = async () => { loading.value = true - let res = await getMyReviewList(param); + let res = await getMyReviewList({ + applyUserName: searchValue.value + }); detailLists.value = res.rows; reviewListA.value = res.rows.filter(t => (t.status == '待审批' || t.status == '审批中') && t .applyType == '请假' && t.reviewerIdR == null)