xiaohaizhao 6 ماه پیش
والد
کامیت
bae95b2d09

+ 4 - 1
app.json

@@ -196,7 +196,10 @@
                 "dataOverview/index",
                 "dataOverview/OverviewAndDetails/Clue",
                 "FinancialCollectionAnalysis/detail",
-                "AnalysisOfUninvoicedShipments/detail"
+                "AnalysisOfUninvoicedShipments/detail",
+                "dataOverview/OverviewAndDetails/Client",
+                "dataOverview/OverviewAndDetails/project",
+                "dataOverview/OverviewAndDetails/Costs"
             ]
         }
     ],

+ 2 - 2
salesPanel/AnalysisOfUninvoicedShipments/detail.js

@@ -11,7 +11,7 @@ Page({
         searchValue: "",
     },
     onLoad(options) {
-        getApp().globalData.Language.getLanguagePackage('出货未开票明细')
+        getApp().globalData.Language.getLanguagePackage(this, '出货未开票明细')
         this.setData({
             content: JSON.parse(options.content),
             siteid: wx.getStorageSync('userMsg').siteid
@@ -30,7 +30,7 @@ Page({
                 "id": this.data.id,
                 content
             }).then(res => {
-                console.log( "明细列表", res)
+                console.log("明细列表", res)
                 this.selectComponent('#ListBox').automaticSetHei();
                 this.selectComponent('#ListBox').RefreshToComplete();
                 if (res.code != '1') return wx.showToast({

+ 2 - 2
salesPanel/FinancialCollectionAnalysis/detail.js

@@ -11,7 +11,7 @@ Page({
         searchValue: "",
     },
     onLoad(options) {
-        getApp().globalData.Language.getLanguagePackage('订单未回款明细')
+        getApp().globalData.Language.getLanguagePackage(this, '订单未回款明细')
         this.setData({
             content: JSON.parse(options.content),
             siteid: wx.getStorageSync('userMsg').siteid
@@ -30,7 +30,7 @@ Page({
                 "id": this.data.id,
                 content
             }).then(res => {
-                console.log( "明细列表", res)
+                console.log("明细列表", res)
                 this.selectComponent('#ListBox').automaticSetHei();
                 this.selectComponent('#ListBox').RefreshToComplete();
                 if (res.code != '1') return wx.showToast({

+ 6 - 1
salesPanel/dataOverview/Client/dataOverview.js

@@ -123,7 +123,12 @@ Component({
         toDetail(e) {
             const {
                 item
-            } = e.currentTarget.dataset;
+            } = e.currentTarget.dataset,
+                content = this.data.content;
+            content.typemx = item.title;
+            wx.navigateTo({
+                url: '/salesPanel/dataOverview/OverviewAndDetails/Client?content=' + JSON.stringify(content),
+            })
         },
         openDateType() {
             this.setData({

+ 6 - 1
salesPanel/dataOverview/Costs/dataOverview.js

@@ -104,7 +104,12 @@ Component({
         toDetail(e) {
             const {
                 item
-            } = e.currentTarget.dataset;
+            } = e.currentTarget.dataset,
+                content = this.data.content;
+            content.typemx = item.title;
+            wx.navigateTo({
+                url: '/salesPanel/dataOverview/OverviewAndDetails/Costs?content=' + JSON.stringify(content),
+            })
         },
         openDateType() {
             this.setData({

+ 84 - 0
salesPanel/dataOverview/OverviewAndDetails/Client.js

@@ -0,0 +1,84 @@
+const _Http = getApp().globalData.http;
+Page({
+    data: {},
+    onLoad(options) {
+        getApp().globalData.Language.getLanguagePackage(this, '数据总览')
+        this.setData({
+            content: JSON.parse(options.content)
+        })
+        this.getList()
+
+        let page = getCurrentPages()[getCurrentPages().length - 2],
+            model = page.selectComponent("#organization"),
+            organization = this.selectComponent("#organization"),
+            {
+                username,
+                isleave
+            } = page.data;
+        organization.setData({
+            ...model.data
+        })
+        this.setData({
+            username,
+            isleave
+        })
+    },
+    getList(init = false) {
+        _Http.init(this.data.content, init).then(content => {
+            console.log("content", content)
+            _Http.basic({
+                "id": 20241008144104,
+                content
+            }).then(res => {
+                console.log("res", res)
+                this.selectComponent('#ListBox').RefreshToComplete();
+                if (res.code != '1') return wx.showToast({
+                    title: res.data,
+                    icon: "none"
+                })
+                this.setData({
+                    list: res.pageNumber == 1 ? res.data : this.data.list.concat(res.data),
+                    "content.pageNumber": res.pageNumber + 1,
+                    "content.pageSize": res.pageSize,
+                    "content.pageTotal": res.pageTotal,
+                    "total": res.total,
+                })
+            })
+        })
+    },
+    handleFilter({
+        detail
+    }) {
+        if (detail.name == "close") return;
+        if (detail.name == 'reset') {
+            this.selectComponent("#organization").setData({
+                isleave: 1
+            })
+            this.selectComponent("#organization").initDepAndUser()
+            this.setData({
+                "content.dataid": wx.getStorageSync('userMsg').userid,
+                "content.type": 0,
+                "content.where.isleave": 1,
+                username: wx.getStorageSync('userMsg').name,
+                isleave: 1
+            })
+        } else {
+            let active = this.selectComponent("#organization").data.result,
+                isleave = this.selectComponent("#organization").data.isleave;
+            let type = active.userid ? 0 : 1,
+                dataid = type == 0 ? active.userid : active.departmentid
+            this.setData({
+                "content.dataid": dataid,
+                "content.type": type,
+                "content.where.isleave": isleave,
+                "content.username": active.name
+            })
+        }
+        this.getList(true);
+    },
+    openFiltrate() {
+        this.setData({
+            showFiltrate: true
+        })
+    },
+})

+ 4 - 0
salesPanel/dataOverview/OverviewAndDetails/Client.json

@@ -0,0 +1,4 @@
+{
+    "usingComponents": {},
+    "navigationBarTitleText": "数据总览"
+}

+ 6 - 0
salesPanel/dataOverview/OverviewAndDetails/Client.scss

@@ -0,0 +1,6 @@
+@import "./Clue.scss";
+
+.status2 {
+	top: 60rpx;
+	font-weight: normal;
+}

+ 42 - 0
salesPanel/dataOverview/OverviewAndDetails/Client.wxml

@@ -0,0 +1,42 @@
+<view class='tab-box'>
+	<view class="left">
+		<view class="user line-1">{{language[content.dateType]||content.dateType}}-{{language[content.typemx]||content.typemx}}</view>
+	</view>
+	<view class="right">
+		<view class="filtrate-box" hover-class="navigator-hover" bindtap="openFiltrate">
+			<view class="iconfont  icon-shaixuan" />
+			<view wx:if="{{username}}">
+				{{language[username]||username}}_{{language[isleave==1?'在职':'离职']||isleave==1?'在职':'离职'}}
+			</view>
+			<view wx:else>{{language['筛选']||'筛选'}}</view>
+		</view>
+	</view>
+</view>
+<view style="height: 20rpx;" />
+<Yl_ListBox id='ListBox' bind:getlist='getList'>
+	<view class="global-card item" wx:for="{{list}}" wx:key="sa_orderitemsid">
+		<view class="title">
+			<text class="line-1">{{item.enterprisename || " --"}}</text>
+			<view class="status" style="background-color: {{sColors[item.status]}};">{{language[item.status]||item.status}}</view>
+			<view class="status status2" style="background-color: {{sColors[item.tradingstatus]}};">{{language[item.tradingstatus]||item.tradingstatus}}</view>
+		</view>
+		<view class="tag-box">
+			<van-tag custom-class='tag' wx:for="{{item.sys_tag}}" wx:key="index" wx:for-item='tag' color='#3874f6' text-color='#fff' round>{{language[tag]||tag}}</van-tag>
+		</view>
+		<view class="row">
+			<view class="col">{{language['负责人']||'负责人'}}:{{item.leader.length?item.leader[0].name :' --'}}</view>
+			<view class="col">{{language['部门']||'部门'}}:{{item.leader.length?item.leader[0].depname :' --'}}</view>
+		</view>
+		<view class="row">{{language['客户类型']||'客户类型'}}:{{language[item.type] || item.type ||' --'}}</view>
+		<view class="row">{{language['客户分类']||'客户分类'}}:{{language[item.customergrade] || item.customergrade ||' --'}}</view>
+		<view class="row">{{language['客户等级']||'客户等级'}}:{{item.grade}}</view>
+		<view class="row">{{language['上级企业']||'上级企业'}}:{{item.parententerprisename ||' --' }}</view>
+		<view class="row">{{language['来源']||'来源'}}:{{item.source||' --'}}</view>
+		<view class="row">{{language['创建时间']||'创建时间'}}:{{item.createdate ||' --'}}</view>
+	</view>
+	<My_empty wx:if="{{list.length==0}}" />
+</Yl_ListBox>
+
+<Yl_Filtrate1 show='{{showFiltrate}}' list='{{[]}}' dateRange bindhandle="handleFilter">
+	<organization slot='head' defaultIsleave='1' dimissionF id='organization' />
+</Yl_Filtrate1>

+ 28 - 24
salesPanel/dataOverview/OverviewAndDetails/Clue.js

@@ -1,18 +1,10 @@
-const _Http = getApp().globalData.http,
-    currency = require("../../../utils/currency"),
-    CNY = (value, symbol = "¥", precision = 2) => currency(value, {
-        symbol,
-        precision
-    }).format();
+const _Http = getApp().globalData.http;
 Page({
-    data: {
-        tradefieldShow: false
-    },
+    data: {},
     onLoad(options) {
-        getApp().globalData.Language.getLanguagePackage('数据总览')
+        getApp().globalData.Language.getLanguagePackage(this, '数据总览')
         this.setData({
-            content: JSON.parse(options.content),
-            siteid: wx.getStorageSync('userMsg').siteid
+            content: JSON.parse(options.content)
         })
         this.getList()
 
@@ -38,23 +30,12 @@ Page({
                 "id": 20241008125804,
                 content
             }).then(res => {
+                console.log("res", res)
                 this.selectComponent('#ListBox').RefreshToComplete();
                 if (res.code != '1') return wx.showToast({
                     title: res.data,
                     icon: "none"
                 })
-                res.data = res.data.map(v => {
-                    v.marketprice = CNY(v.marketprice)
-                    v.amount = CNY(v.amount)
-                    v.invoiceamount = CNY(v.invoiceamount)
-                    v.uninvoiceamount = CNY(v.uninvoiceamount)
-                    v.writeoffamount = CNY(v.writeoffamount)
-                    v.unwriteoffamount = CNY(v.unwriteoffamount)
-                    v.returnamount = CNY(v.returnamount)
-                    v.price = CNY(v.price)
-                    v.logisticsamount = CNY(v.logisticsamount)
-                    return v
-                })
                 this.setData({
                     list: res.pageNumber == 1 ? res.data : this.data.list.concat(res.data),
                     "content.pageNumber": res.pageNumber + 1,
@@ -62,6 +43,29 @@ Page({
                     "content.pageTotal": res.pageTotal,
                     "total": res.total,
                 })
+                this.getTags();
+            })
+        })
+    },
+    /* 获取列表标签 */
+    getTags() {
+        let list = this.data.list,
+            ownerids = list.map(v => v.sat_orderclueid);
+        _Http.basic({
+            "id": 20221018102001,
+            "content": {
+                nocache: true,
+                "ownertable": "sat_orderclue",
+                ownerids
+            }
+        }).then(res => {
+            console.log("标签", res)
+            for (let key in res.data) {
+                let index = list.findIndex(v => v.sat_orderclueid == key);
+                list[index].tags = res.data[key]
+            };
+            this.setData({
+                list
             })
         })
     },

+ 56 - 46
salesPanel/dataOverview/OverviewAndDetails/Clue.scss

@@ -70,56 +70,66 @@
 	}
 }
 
-.title {
-	line-height: 38rpx;
-	font-family: Microsoft YaHei, Microsoft YaHei;
-	font-weight: bold;
-	font-size: 28rpx;
-	color: #333333;
-
-	.tag {
-		display: inline-block;
-		height: 40rpx;
-		line-height: 40rpx;
-		padding: 0 8rpx;
-		border-radius: 4rpx;
-		font-family: PingFang SC, PingFang SC;
-		font-size: 24rpx;
-		color: #FFFFFF;
-		font-weight: 400;
-		margin-right: 8rpx;
+.item {
+	position: relative;
+
+	.tag-box {
+
+		.tag {
+			height: 40rpx;
+			font-size: 18rpx !important;
+			font-family: PingFang SC-Regular, PingFang SC;
+			padding: 0 12rpx;
+			margin-right: 10rpx;
+		}
 	}
-}
 
-.row {
-	line-height: 32rpx;
-	font-family: Microsoft YaHei, Microsoft YaHei;
-	font-size: 24rpx;
-	color: #999999;
-	margin-top: 10rpx;
-}
+	.title {
+		position: relative;
+		display: flex;
+		line-height: 38rpx;
+		align-items: center;
+		font-family: Microsoft YaHei, Microsoft YaHei;
+		font-weight: bold;
+		font-size: 28rpx;
+		color: #333333;
+
+		>text {
+			display: inline-block;
+			width: 80%;
+			font-size: 30rpx;
+			color: #333333;
+			font-weight: normal;
+		}
 
-.expanded {
-	display: flex;
-	align-items: center;
-	height: 32rpx;
-	font-family: Microsoft YaHei, Microsoft YaHei;
-	font-weight: bold;
-	font-size: 24rpx;
-	color: #3874F6;
-	margin-top: 10rpx;
-
-	.iconfont {
-		font-size: 16rpx;
-		margin-left: 8rpx;
-		display: inline-block; // 使transform生效
-		transform: rotate(90deg) !important; // 默认指向下方
-		transition: transform 0.3s ease; // 添加过渡效果
+		.status {
+			position: absolute;
+			right: -20rpx;
+			width: 132rpx;
+			height: 40rpx;
+			border-radius: 20rpx 0px 0px 20rpx;
+			box-sizing: border-box;
+			padding-left: 30rpx;
+			line-height: 40rpx;
+			font-size: 24rpx;
+			font-family: PingFang SC-Regular, PingFang SC;
+			color: #FFFFFF;
+			font-weight: normal;
+		}
 	}
-}
 
-.up {
-	.iconfont {
-		transform: rotate(-90deg) !important; // 指向上方
+
+	.row {
+		display: flex;
+		line-height: 32rpx;
+		font-family: Microsoft YaHei, Microsoft YaHei;
+		font-size: 24rpx;
+		color: #999999;
+		margin-top: 10rpx;
+		flex-wrap: wrap;
+
+		.col {
+			width: 50%;
+		}
 	}
 }

+ 14 - 55
salesPanel/dataOverview/OverviewAndDetails/Clue.wxml

@@ -14,65 +14,24 @@
 </view>
 <view style="height: 20rpx;" />
 <Yl_ListBox id='ListBox' bind:getlist='getList'>
-	<view class="global-card" wx:for="{{list}}" wx:key="sa_orderitemsid">
+	<view class="global-card item" wx:for="{{list}}" wx:key="sa_orderitemsid">
 		<view class="title">
-			<text class="tag" style="background-color: #3874F6;">{{language[item.type]||item.type}}</text>
-			<text class="tag" style="background-color: #67C23A;">{{language[item.tradefield]||item.tradefield}}</text>
-			{{item.sonum}}
+			<text class="line-1">{{item.enterprisename_customer || " --"}}</text>
+			<view class="status" style="background-color: {{sColors[item.status]}};">{{language[item.status]||item.status}}</view>
 		</view>
-		<view class="row">erp{{language['单号']||'单号'}}:{{item.erpbillno ||' --'}}</view>
-		<view class="row">{{language['企业名称']||'企业名称'}}:{{item.enterprisename ||' --'}}</view>
-		<view class="row">{{language['项目名称']||'项目名称'}}:{{item.projectname ||' --'}}</view>
-		<view class="row">{{language['业务员']||'业务员'}}:{{item.salername ||' --'}}</view>
-
-		<view class="row" wx:if="{{item.expanded}}">{{language['行号']||'行号'}}:{{item.rowno ||' --'}}</view>
-		<view class="row">{{language['产品名称']||'产品名称'}}:{{item.itemname ||' --'}}</view>
-		<view class="row">{{language['产品编号']||'产品编号'}}:{{item.itemno ||' --'}}</view>
-		<view class="row" wx:if="{{item.expanded}}">
-			{{language['型号']||'型号'}}:{{language[item.model]||item.model||' --'}}
-		</view>
-		<view class="row" wx:if="{{siteid!='HY' && item.expanded}}">
-			{{language['规格']||'规格'}}:{{language[item.spec]||item.spec||' --'}}
-		</view>
-		<view class="row" wx:if="{{siteid=='HY' && item.expanded}}">
-			{{language['公称通径']||'公称通径'}}:{{item.caliber||' --'}}
-		</view>
-		<view class="row" wx:if="{{siteid=='HY' && item.expanded}}">
-			{{language['公称压力']||'公称压力'}}:{{item.nominalpressureStr||' --'}}
+		<view class="tag-box">
+			<van-tag custom-class='tag' wx:for="{{item.tags}}" wx:key="index" wx:for-item='tag' color='#3874f6' text-color='#fff' round>{{language[tag]||tag}}</van-tag>
 		</view>
-		<view class="row" wx:if="{{item.expanded}}">{{language['需求日期']||'需求日期'}}:{{item.needdate||' --'}}</view>
-		<view class="row" wx:if="{{item.expanded}}">{{language['回复交期']||'回复交期'}}:{{item.deliverydate||' --'}}</view>
-		<view class="row">{{language['数量']||'数量'}}:{{item.qty||' --'}}</view>
-		<view class="row">{{language['牌价']||'牌价'}}:<text style="color: #3874F6;">{{item.marketprice||' --'}}</text></view>
-		<view class="row">{{language['订单单价']||'订单单价'}}:<text style="color: #3874F6;">{{item.price||' --'}}</text></view>
-		<view class="row">{{language['订单金额']||'订单金额'}}:<text style="color: #3874F6;">{{item.amount||' --'}}</text></view>
-		<view wx:if="{{item.expanded}}">
-			<view class="row">
-				{{language['未出货数量']||'未出货数量'}}:<text style="color: #3874F6;">{{item.unlogisticsqty||' --'}}</text>
-			</view>
-			<view class="row">
-				{{language['已开票金额']||'已开票金额'}}:<text style="color: #3874F6;">{{item.invoiceamount||' --'}}</text>
-			</view>
-			<view class="row">
-				{{language['已核销金额']||'已核销金额'}}:<text style="color: #3874F6;">{{item.writeoffamount||' --'}}</text>
-			</view>
-			<view class="row">{{language['退货数量']||'退货数量'}}:{{item.returngty||' --'}}</view>
-			<view class="row">{{language['退款金额']||'退款金额'}}:<text style="color: #3874F6;">{{item.returnamount||' --'}}</text></view>
-			<view class="row">
-				{{language['材质']||'材质'}}:{{language[item.material]||item.material||' --'}}
-			</view>
-			<block wx:if="{{siteid=='HY'}}">
-				<view class="row">
-					{{language['产线']||'产线'}}:{{language[item.prodline]||item.prodline||' --'}}
-				</view>
-				<view class="row">
-					{{language['装置']||'装置'}}:{{language[item.device]||item.device||' --'}}
-				</view>
-				<view class="row">
-					{{language['备注']||'备注'}}:{{language[item.specalnote]||item.specalnote||' --'}}
-				</view>
-			</block>
+		<view class="row">
+			<view class="col">{{language['负责人']||'负责人'}}:{{item.leader.length?item.leader[0].name :' --'}}</view>
+			<view class="col">{{language['部门']||'部门'}}:{{item.leader.length?item.leader[0].depname :' --'}}</view>
 		</view>
+		<view class="row">{{language['客户名称']||'客户名称'}}:{{item.enterprisename ||' --'}}</view>
+		<view class="row">{{language['项目名称']||'项目名称'}}:{{item.projectname ||' --'}}</view>
+		<view class="row">{{language['联系人']||'联系人'}}:{{item.name ||' --'}}</view>
+		<view class="row">{{language['联系方式']||'联系方式'}}:{{item.phonenumber ||' --'}}</view>
+		<view class="row">{{language['详细地址']||'详细地址'}}:{{item.address ||' --'}}</view>
+		<view class="row">{{language['创建时间']||'创建时间'}}:{{item.createdate ||' --'}}</view>
 	</view>
 	<My_empty wx:if="{{list.length==0}}" />
 </Yl_ListBox>

+ 94 - 0
salesPanel/dataOverview/OverviewAndDetails/Costs.js

@@ -0,0 +1,94 @@
+const _Http = getApp().globalData.http,
+    currency = require("../../../utils/currency"),
+    CNY = (value, symbol = "¥", precision = 2) => currency(value, {
+        symbol,
+        precision
+    }).format();
+
+Page({
+    data: {},
+    onLoad(options) {
+        getApp().globalData.Language.getLanguagePackage(this, '数据总览')
+        this.setData({
+            content: JSON.parse(options.content)
+        })
+        this.getList()
+
+        let page = getCurrentPages()[getCurrentPages().length - 2],
+            model = page.selectComponent("#organization"),
+            organization = this.selectComponent("#organization"),
+            {
+                username,
+                isleave
+            } = page.data;
+        organization.setData({
+            ...model.data
+        })
+        this.setData({
+            username,
+            isleave
+        })
+    },
+    getList(init = false) {
+        _Http.init(this.data.content, init).then(content => {
+            console.log("content", content)
+            _Http.basic({
+                "id": 20241015151504,
+                content
+            }).then(res => {
+                console.log("res", res)
+                this.selectComponent('#ListBox').RefreshToComplete();
+                if (res.code != '1') return wx.showToast({
+                    title: res.data,
+                    icon: "none"
+                })
+                res.data = res.data.map(v=>{
+                    v.amount = CNY(v.amount)
+                    return v
+                })
+                this.setData({
+                    list: res.pageNumber == 1 ? res.data : this.data.list.concat(res.data),
+                    "content.pageNumber": res.pageNumber + 1,
+                    "content.pageSize": res.pageSize,
+                    "content.pageTotal": res.pageTotal,
+                    "total": res.total,
+                })
+            })
+        })
+    },
+    handleFilter({
+        detail
+    }) {
+        if (detail.name == "close") return;
+        if (detail.name == 'reset') {
+            this.selectComponent("#organization").setData({
+                isleave: 1
+            })
+            this.selectComponent("#organization").initDepAndUser()
+            this.setData({
+                "content.dataid": wx.getStorageSync('userMsg').userid,
+                "content.type": 0,
+                "content.where.isleave": 1,
+                username: wx.getStorageSync('userMsg').name,
+                isleave: 1
+            })
+        } else {
+            let active = this.selectComponent("#organization").data.result,
+                isleave = this.selectComponent("#organization").data.isleave;
+            let type = active.userid ? 0 : 1,
+                dataid = type == 0 ? active.userid : active.departmentid
+            this.setData({
+                "content.dataid": dataid,
+                "content.type": type,
+                "content.where.isleave": isleave,
+                "content.username": active.name
+            })
+        }
+        this.getList(true);
+    },
+    openFiltrate() {
+        this.setData({
+            showFiltrate: true
+        })
+    },
+})

+ 4 - 0
salesPanel/dataOverview/OverviewAndDetails/Costs.json

@@ -0,0 +1,4 @@
+{
+    "usingComponents": {},
+    "navigationBarTitleText": "数据总览"
+}

+ 6 - 0
salesPanel/dataOverview/OverviewAndDetails/Costs.scss

@@ -0,0 +1,6 @@
+@import "./Clue.scss";
+
+.amount{
+	color: #FF3B30;
+	font-size: 24rpx;
+}

+ 39 - 0
salesPanel/dataOverview/OverviewAndDetails/Costs.wxml

@@ -0,0 +1,39 @@
+<view class='tab-box'>
+	<view class="left">
+		<view class="user line-1">{{language[content.dateType]||content.dateType}}-{{language[content.typemx]||content.typemx}}</view>
+	</view>
+	<view class="right">
+		<view class="filtrate-box" hover-class="navigator-hover" bindtap="openFiltrate">
+			<view class="iconfont  icon-shaixuan" />
+			<view wx:if="{{username}}">
+				{{language[username]||username}}_{{language[isleave==1?'在职':'离职']||isleave==1?'在职':'离职'}}
+			</view>
+			<view wx:else>{{language['筛选']||'筛选'}}</view>
+		</view>
+	</view>
+</view>
+<view style="height: 20rpx;" />
+<Yl_ListBox id='ListBox' bind:getlist='getList'>
+	<view class="global-card item" wx:for="{{list}}" wx:key="sa_orderitemsid">
+		<view class="title">
+			<text class="line-1">{{item.billno || " --"}}</text>
+		</view>
+		<view class="row">
+			<view class="col">{{language['负责人']||'负责人'}}:{{language[item.salesname]||item.salesname ||' --'}}</view>
+			<view class="col">{{language['部门']||'部门'}}:{{language[item.depname]||item.depname ||' --'}}</view>
+		</view>
+		<view class="row">{{language['客户名称']||'客户名称'}}:{{item.enterprisename ||' --'}}</view>
+		<view class="row">{{language['项目名称']||'项目名称'}}:{{item.projectname ||' --'}}</view>
+		<view class="row">{{language['联系人']||'联系人'}}:{{item.names ||' --'}}</view>
+		<view class="row">{{language['费用类型']||'费用类型'}}:<text class="amount">{{item.amount}}</text></view>
+		<view class="row">{{language['营销费用(元)']||'营销费用(元)'}}:{{language[item.feestypefullname]||item.feestypefullname ||' --'}}</view>
+		<view class="row">{{language['跟进类型']||'跟进类型'}}:{{language[item.type]||item.type ||' --'}}</view>
+		<view class="row">{{language['跟进内容']||'跟进内容'}}:{{item.content ||' --'}}</view>
+		<view class="row">{{language['跟进时间']||'跟进时间'}}:{{item.createdate ||' --'}}</view>
+	</view>
+	<My_empty wx:if="{{list.length==0}}" />
+</Yl_ListBox>
+
+<Yl_Filtrate1 show='{{showFiltrate}}' list='{{[]}}' dateRange bindhandle="handleFilter">
+	<organization slot='head' defaultIsleave='1' dimissionF id='organization' />
+</Yl_Filtrate1>

+ 95 - 0
salesPanel/dataOverview/OverviewAndDetails/project.js

@@ -0,0 +1,95 @@
+const _Http = getApp().globalData.http,
+    currency = require("../../../utils/currency"),
+    CNY = (value, symbol = "¥", precision = 2) => currency(value, {
+        symbol,
+        precision
+    }).format();
+
+Page({
+    data: {},
+    onLoad(options) {
+        getApp().globalData.Language.getLanguagePackage(this, '数据总览')
+        this.setData({
+            content: JSON.parse(options.content)
+        })
+        this.getList()
+
+        let page = getCurrentPages()[getCurrentPages().length - 2],
+            model = page.selectComponent("#organization"),
+            organization = this.selectComponent("#organization"),
+            {
+                username,
+                isleave
+            } = page.data;
+        organization.setData({
+            ...model.data
+        })
+        this.setData({
+            username,
+            isleave
+        })
+    },
+    getList(init = false) {
+        _Http.init(this.data.content, init).then(content => {
+            console.log("content", content)
+            _Http.basic({
+                "id": 20241008152904,
+                content
+            }).then(res => {
+                console.log("res", res)
+                this.selectComponent('#ListBox').RefreshToComplete();
+                if (res.code != '1') return wx.showToast({
+                    title: res.data,
+                    icon: "none"
+                })
+                res.data = res.data.map(v=>{
+                    v.signamount_due = CNY(v.signamount_due)
+                    v.dealamount = CNY(v.dealamount)
+                    return v
+                })
+                this.setData({
+                    list: res.pageNumber == 1 ? res.data : this.data.list.concat(res.data),
+                    "content.pageNumber": res.pageNumber + 1,
+                    "content.pageSize": res.pageSize,
+                    "content.pageTotal": res.pageTotal,
+                    "total": res.total,
+                })
+            })
+        })
+    },
+    handleFilter({
+        detail
+    }) {
+        if (detail.name == "close") return;
+        if (detail.name == 'reset') {
+            this.selectComponent("#organization").setData({
+                isleave: 1
+            })
+            this.selectComponent("#organization").initDepAndUser()
+            this.setData({
+                "content.dataid": wx.getStorageSync('userMsg').userid,
+                "content.type": 0,
+                "content.where.isleave": 1,
+                username: wx.getStorageSync('userMsg').name,
+                isleave: 1
+            })
+        } else {
+            let active = this.selectComponent("#organization").data.result,
+                isleave = this.selectComponent("#organization").data.isleave;
+            let type = active.userid ? 0 : 1,
+                dataid = type == 0 ? active.userid : active.departmentid
+            this.setData({
+                "content.dataid": dataid,
+                "content.type": type,
+                "content.where.isleave": isleave,
+                "content.username": active.name
+            })
+        }
+        this.getList(true);
+    },
+    openFiltrate() {
+        this.setData({
+            showFiltrate: true
+        })
+    },
+})

+ 4 - 0
salesPanel/dataOverview/OverviewAndDetails/project.json

@@ -0,0 +1,4 @@
+{
+    "usingComponents": {},
+    "navigationBarTitleText": "数据总览"
+}

+ 1 - 0
salesPanel/dataOverview/OverviewAndDetails/project.scss

@@ -0,0 +1 @@
+@import "./Clue.scss";

+ 46 - 0
salesPanel/dataOverview/OverviewAndDetails/project.wxml

@@ -0,0 +1,46 @@
+<view class='tab-box'>
+	<view class="left">
+		<view class="user line-1">{{language[content.dateType]||content.dateType}}-{{language[content.typemx]||content.typemx}}</view>
+	</view>
+	<view class="right">
+		<view class="filtrate-box" hover-class="navigator-hover" bindtap="openFiltrate">
+			<view class="iconfont  icon-shaixuan" />
+			<view wx:if="{{username}}">
+				{{language[username]||username}}_{{language[isleave==1?'在职':'离职']||isleave==1?'在职':'离职'}}
+			</view>
+			<view wx:else>{{language['筛选']||'筛选'}}</view>
+		</view>
+	</view>
+</view>
+<view style="height: 20rpx;" />
+<Yl_ListBox id='ListBox' bind:getlist='getList'>
+	<view class="global-card item" wx:for="{{list}}" wx:key="sa_orderitemsid">
+		<view class="title">
+			<text class="line-1">{{item.projectname || " --"}}</text>
+			<view class="status" style="background-color: {{sColors[item.status]}};">{{language[item.status]||item.status}}</view>
+		</view>
+		<view class="tag-box">
+			<van-tag custom-class='tag' wx:for="{{item.sys_tag}}" wx:key="index" wx:for-item='tag' color='#3874f6' text-color='#fff' round>{{language[tag]||tag}}</van-tag>
+		</view>
+		<view class="row">
+			<view class="col">{{language['负责人']||'负责人'}}:{{item.leader.length?item.leader[0].name :' --'}}</view>
+			<view class="col">{{language['部门']||'部门'}}:{{item.leader.length?item.leader[0].depname :' --'}}</view>
+		</view>
+		<view class="row">
+			<view class="col">{{language['项目阶段']||'项目阶段'}}:{{language[item.stagename] || item.stagename ||' --'}}</view>
+			<view class="col">{{language['报备进度']||'报备进度'}}:<text style="color: {{sColors[item.status]}};">{{language[item.reportstatus] || item.reportstatus ||' --'}}</text></view>
+		</view>
+		<view class="row">{{language['预计签约金额']||'预计签约金额'}}:{{item.signamount_due ||' --'}}</view>
+		<view class="row">{{language['项目成交金额']||'项目成交金额'}}:{{item.dealamount ||' --'}}</view>
+		<view class="row">{{language['项目地址']||'项目地址'}}:{{item.province + item.city +item.county +item.address}}</view>
+		<view class="row">{{language['项目编号']||'项目编号'}}:{{item.projectnum ||' --' }}</view>
+		<view class="row">{{language['项目规模']||'项目规模'}}:{{item.scale + (language[item.unitname] || item.unitname||'')}}</view>
+		<view class="row">{{language['领域']||'领域'}}:{{language[item.tradefield] || item.tradefield||' --'}}</view>
+		<view class="row">{{language['创建时间']||'创建时间'}}:{{item.createdate ||' --'}}</view>
+	</view>
+	<My_empty wx:if="{{list.length==0}}" />
+</Yl_ListBox>
+
+<Yl_Filtrate1 show='{{showFiltrate}}' list='{{[]}}' dateRange bindhandle="handleFilter">
+	<organization slot='head' defaultIsleave='1' dimissionF id='organization' />
+</Yl_Filtrate1>

+ 6 - 1
salesPanel/dataOverview/Project/dataOverview.js

@@ -150,7 +150,12 @@ Component({
         toDetail(e) {
             const {
                 item
-            } = e.currentTarget.dataset;
+            } = e.currentTarget.dataset,
+                content = this.data.content;
+            content.typemx = item.title;
+            wx.navigateTo({
+                url: '/salesPanel/dataOverview/OverviewAndDetails/project?content=' + JSON.stringify(content),
+            })
         },
         openDateType() {
             this.setData({

+ 1 - 0
utils/language.js

@@ -1,6 +1,7 @@
 class Language {
 	constructor() {
 		this.languagePackage = null;
+		this.getLanguages = this.getLanguages.bind(this);
 	}
 
 	getLanguages(languagecode) {