浏览代码

项目生命周期分析

xiaohaizhao 5 月之前
父节点
当前提交
c43ac41841

+ 293 - 292
app.json

@@ -1,296 +1,297 @@
 {
-    "pages": [
-        "pages/login/phone",
-        "pages/login/selectSite",
-        "pages/login/retrievePassword",
-        "pages/tabbar/home/index",
-        "pages/tabbar/mine/index",
-        "pages/tabbar/message/index",
-        "pages/tabbar/mine/userMsg/index",
-        "pages/tabbar/message/details",
-        "pages/tabbar/mine/changePassword/index",
-        "pages/annunciate/index",
-        "pages/annunciate/details",
-        "pages/promotional/index",
-        "pages/promotional/details",
-        "pages/promotional/upload",
-        "pages/college/index",
-        "pages/college/detail",
-        "pages/submission/index",
-        "pages/teams/index",
-        "pages/teams/addUsers",
-        "pages/teams/addRole",
-        "pages/submission/details",
-        "pages/group/index",
-        "pages/group/select",
-        "pages/tags/index",
-        "pages/mediaLibrary/index",
-        "pages/tabbar/mine/webView",
-        "pages/tabbar/mine/associatedPublicNumber",
-        "pages/trace/insert",
-        "pages/trace/detail",
-        "pages/login/developerTools"
-    ],
-    "subpackages": [
-        {
-            "root": "packageA",
-            "pages": [
-                "forecast/index",
-                "forecast/detail",
-                "forecast/record",
-                "forecast/reportForms",
-                "target/index",
-                "target/person",
-                "target/project",
-                "target/addProject",
-                "setclient/index",
-                "setclient/detail",
-                "setclient/addAndEditor",
-                "setclient/modules/address/add/index",
-                "setclient/modules/contacts/add/index",
-                "project/index",
-                "setclient/modules/trace/add/index",
-                "setclient/modules/trace/list/delete",
-                "setclient/modules/financing/add/index",
-                "setclient/modules/contacts/detail/index",
-                "setclient/modules/financing/detail/index",
-                "setclient/modules/trace/detail/index",
-                "setclient/delete",
-                "setclient/modules/contacts/quickly/index",
-                "setclient/modules/address/search/index",
-                "setclient/modules/financing/search/index",
-                "options/index",
-                "project/addAndEdit",
-                "project/detail",
-                "project/modules/task/add",
-                "project/modules/treaty/add/index",
-                "project/modules/contacts/search/index",
-                "project/delete",
-                "offers/index",
-                "offers/addProjectOffer",
-                "offers/addSetclientOffer",
-                "select/setclient/select",
-                "select/project/select",
-                "select/contacts/select",
-                "offers/detail",
-                "select/product/select",
-                "contract/index",
-                "contract/detail",
-                "contract/add/type1/index",
-                "contract/add/type2/index",
-                "contract/add/type3/index",
-                "contract/add/type4/index",
-                "contract/add/type5/index",
-                "contract/modules/discount/type/add/index",
-                "activity/index",
-                "activity/detail",
-                "activity/addActivity",
-                "activity/modules/clue/addClue",
-                "contract/modules/discount/product/index",
-                "publicClue/index",
-                "publicClue/detail",
-                "publicClue/addClue",
-                "publicClue/distribution",
-                "saleClue/index",
-                "saleClue/addClue",
-                "saleClue/detail",
-                "saleClue/change",
-                "saleClue/audit/client",
-                "saleClue/audit/project",
-                "opponent/index",
-                "opponent/detail",
-                "opponent/add",
-                "publicCustomer/index",
-                "publicCustomer/detail",
-                "publicCustomer/addAndEditor",
-                "publicCustomer/pond/index",
-                "project/modules/task/history",
-                "salesForecasting/index",
-                "salesForecasting/detail",
-                "work/index",
-                "work/add",
-                "work/detail",
-                "select/selectActivity/index",
-                "select/contract/select",
-                "saleClue/translate",
-                "project/modules/contacts/quickly/index",
-                "project/modules/contacts/add/index",
-                "project/modules/contacts/select/index",
-                "select/offers/select",
-                "contract/modules/objective/add",
-                "clockIn/index",
-                "clockIn/signIn",
-                "contract/modules/objective/setUp",
-                "offers/modules/pettyExpense/update",
-                "select/brand/select",
-                "select/paytype/select",
-                "contract/add/setclient/select",
-                "setclient/modules/bankcard/update",
-                "report/index",
-                "report/insert",
-                "report/detail",
-                "achievement/index",
-                "project/webview",
-                "finishforecast/index",
-                "finishforecast/detail",
-                "finishforecast/admin",
-                "invoiceforecast/index",
-                "invoiceforecast/detail",
-                "invoiceforecast/admin",
-                "select/project/select2",
-                "select/orderForm/select",
-                "invoiceforecast/modules/client/select",
-                "project/modules/fail/index",
-                "project/impower/initiate",
-                "project/impower/webview",
-                "project/impower/impower",
-                "select/linkman/select",
-                "saleAdmin/index",
-                "saleAdmin/detail",
-                "saleAdmin/insert",
-                "contract/add/type6/index",
-                "publicClue/modules/follow/insert",
-                "invoiceforecast/modules/orderForm/row",
-                "invoiceforecast/modules/orderForm/select",
-                "setclient/contacts",
-                "work/synchronization",
-                "select/clue/select",
-                "contacts/index",
-                "contacts/group",
-                "contacts/insert",
-                "contacts/detail",
-                "select/group/select",
-                "contacts/modules/client/index",
-                "contacts/modules/project/index",
-                "offers/delete",
-                "contract/delete",
-                "contract/add/type4/select",
-                "expenseBreakdown/index",
-                "expenseBreakdown/insertion",
-                "expenseBreakdown/edit",
-                "contract/modules/contacts/quickly",
-                "opponent/modules/aAD/insert",
-                "saleClue/modules/contacts/add/index",
-                "saleClue/modules/contacts/detail/index",
-                "saleClue/modules/contacts/quickly/index"
-            ]
-        },
-        {
-            "root": "portrayal",
-            "pages": [
-                "index/index",
-                "details/client",
-                "details/project",
-                "details/sales",
-                "details/contacts"
-            ]
-        },
-        {
-            "root": "salesPanel",
-            "pages": [
-                "index/index",
-                "panel/detail",
-                "customerBlance/detail",
-                "customerBlance/Pipeline",
-                "salesHourglass/index",
-                "dataOverview/index",
-                "dataOverview/OverviewAndDetails/Clue",
-                "FinancialCollectionAnalysis/detail",
-                "AnalysisOfUninvoicedShipments/detail",
-                "dataOverview/OverviewAndDetails/Client",
-                "dataOverview/OverviewAndDetails/project",
-                "dataOverview/OverviewAndDetails/Costs",
-                "dataOverview/Costs/SPMEDetail"
-            ]
-        }
-    ],
-    "preloadRule": {
-        "pages/login/phone": {
-            "packages": [
-                "packageA",
-                "portrayal"
-            ],
-            "network": "all"
-        }
+  "pages": [
+    "pages/login/phone",
+    "pages/login/selectSite",
+    "pages/login/retrievePassword",
+    "pages/tabbar/home/index",
+    "pages/tabbar/mine/index",
+    "pages/tabbar/message/index",
+    "pages/tabbar/mine/userMsg/index",
+    "pages/tabbar/message/details",
+    "pages/tabbar/mine/changePassword/index",
+    "pages/annunciate/index",
+    "pages/annunciate/details",
+    "pages/promotional/index",
+    "pages/promotional/details",
+    "pages/promotional/upload",
+    "pages/college/index",
+    "pages/college/detail",
+    "pages/submission/index",
+    "pages/teams/index",
+    "pages/teams/addUsers",
+    "pages/teams/addRole",
+    "pages/submission/details",
+    "pages/group/index",
+    "pages/group/select",
+    "pages/tags/index",
+    "pages/mediaLibrary/index",
+    "pages/tabbar/mine/webView",
+    "pages/tabbar/mine/associatedPublicNumber",
+    "pages/trace/insert",
+    "pages/trace/detail",
+    "pages/login/developerTools"
+  ],
+  "subpackages": [
+    {
+      "root": "packageA",
+      "pages": [
+        "forecast/index",
+        "forecast/detail",
+        "forecast/record",
+        "forecast/reportForms",
+        "target/index",
+        "target/person",
+        "target/project",
+        "target/addProject",
+        "setclient/index",
+        "setclient/detail",
+        "setclient/addAndEditor",
+        "setclient/modules/address/add/index",
+        "setclient/modules/contacts/add/index",
+        "project/index",
+        "setclient/modules/trace/add/index",
+        "setclient/modules/trace/list/delete",
+        "setclient/modules/financing/add/index",
+        "setclient/modules/contacts/detail/index",
+        "setclient/modules/financing/detail/index",
+        "setclient/modules/trace/detail/index",
+        "setclient/delete",
+        "setclient/modules/contacts/quickly/index",
+        "setclient/modules/address/search/index",
+        "setclient/modules/financing/search/index",
+        "options/index",
+        "project/addAndEdit",
+        "project/detail",
+        "project/modules/task/add",
+        "project/modules/treaty/add/index",
+        "project/modules/contacts/search/index",
+        "project/delete",
+        "offers/index",
+        "offers/addProjectOffer",
+        "offers/addSetclientOffer",
+        "select/setclient/select",
+        "select/project/select",
+        "select/contacts/select",
+        "offers/detail",
+        "select/product/select",
+        "contract/index",
+        "contract/detail",
+        "contract/add/type1/index",
+        "contract/add/type2/index",
+        "contract/add/type3/index",
+        "contract/add/type4/index",
+        "contract/add/type5/index",
+        "contract/modules/discount/type/add/index",
+        "activity/index",
+        "activity/detail",
+        "activity/addActivity",
+        "activity/modules/clue/addClue",
+        "contract/modules/discount/product/index",
+        "publicClue/index",
+        "publicClue/detail",
+        "publicClue/addClue",
+        "publicClue/distribution",
+        "saleClue/index",
+        "saleClue/addClue",
+        "saleClue/detail",
+        "saleClue/change",
+        "saleClue/audit/client",
+        "saleClue/audit/project",
+        "opponent/index",
+        "opponent/detail",
+        "opponent/add",
+        "publicCustomer/index",
+        "publicCustomer/detail",
+        "publicCustomer/addAndEditor",
+        "publicCustomer/pond/index",
+        "project/modules/task/history",
+        "salesForecasting/index",
+        "salesForecasting/detail",
+        "work/index",
+        "work/add",
+        "work/detail",
+        "select/selectActivity/index",
+        "select/contract/select",
+        "saleClue/translate",
+        "project/modules/contacts/quickly/index",
+        "project/modules/contacts/add/index",
+        "project/modules/contacts/select/index",
+        "select/offers/select",
+        "contract/modules/objective/add",
+        "clockIn/index",
+        "clockIn/signIn",
+        "contract/modules/objective/setUp",
+        "offers/modules/pettyExpense/update",
+        "select/brand/select",
+        "select/paytype/select",
+        "contract/add/setclient/select",
+        "setclient/modules/bankcard/update",
+        "report/index",
+        "report/insert",
+        "report/detail",
+        "achievement/index",
+        "project/webview",
+        "finishforecast/index",
+        "finishforecast/detail",
+        "finishforecast/admin",
+        "invoiceforecast/index",
+        "invoiceforecast/detail",
+        "invoiceforecast/admin",
+        "select/project/select2",
+        "select/orderForm/select",
+        "invoiceforecast/modules/client/select",
+        "project/modules/fail/index",
+        "project/impower/initiate",
+        "project/impower/webview",
+        "project/impower/impower",
+        "select/linkman/select",
+        "saleAdmin/index",
+        "saleAdmin/detail",
+        "saleAdmin/insert",
+        "contract/add/type6/index",
+        "publicClue/modules/follow/insert",
+        "invoiceforecast/modules/orderForm/row",
+        "invoiceforecast/modules/orderForm/select",
+        "setclient/contacts",
+        "work/synchronization",
+        "select/clue/select",
+        "contacts/index",
+        "contacts/group",
+        "contacts/insert",
+        "contacts/detail",
+        "select/group/select",
+        "contacts/modules/client/index",
+        "contacts/modules/project/index",
+        "offers/delete",
+        "contract/delete",
+        "contract/add/type4/select",
+        "expenseBreakdown/index",
+        "expenseBreakdown/insertion",
+        "expenseBreakdown/edit",
+        "contract/modules/contacts/quickly",
+        "opponent/modules/aAD/insert",
+        "saleClue/modules/contacts/add/index",
+        "saleClue/modules/contacts/detail/index",
+        "saleClue/modules/contacts/quickly/index"
+      ]
     },
-    "usingComponents": {
-        "My_Empty": "/components/My_empty/index",
-        "Yl_Files": "/components/Yl_Files/index",
-        "Yl_Tabbar": "/components/Yl_Tabbar/index",
-        "Yl-tags": "/pages/tags/modules/Yl-tags/index",
-        "Yl-group": "/pages/group/modules/Yl-group/index",
-        "Yl_field": "/components/Yl_field/index",
-        "Yl_FloatingButton": "/components/Yl_FloatingButton/index",
-        "Yl_ReportForms": "/components/Yl_ReportForms/index",
-        "Yl_Headline": "/components/Yl_Headline/index",
-        "Yl_FunTabs": "/components/Yl_FunTabs/index",
-        "Yl_Detail": "/components/Yl_Detail/index",
-        "Yl_nav": "/components/Yl_nav/index",
-        "Yl_filtrate": "/components/Yl_filtrate/index",
-        "organization": "/components/organization/index",
-        "Yl_Filtrate1": "/components/Yl_Filtrate1/index",
-        "Yl_ListBox": "/components/Yl_ListBox/index",
-        "My_switch": "/components/My_switch/index",
-        "My_empty": "/components/My_empty/index",
-        "shrink": "/components/shrink/shrink",
-        "timeRange": "/components/timeRange/timeRange",
-        "van-button": "@vant/weapp/button/index",
-        "van-icon": "@vant/weapp/icon/index",
-        "van-image": "@vant/weapp/image/index",
-        "van-loading": "@vant/weapp/loading/index",
-        "van-tab": "@vant/weapp/tab/index",
-        "van-tabs": "@vant/weapp/tabs/index",
-        "van-search": "@vant/weapp/search/index",
-        "van-tag": "@vant/weapp/tag/index",
-        "van-dropdown-menu": "@vant/weapp/dropdown-menu/index",
-        "van-dropdown-item": "@vant/weapp/dropdown-item/index",
-        "van-tree-select": "@vant/weapp/tree-select/index",
-        "van-toast": "@vant/weapp/toast/index",
-        "van-cell": "@vant/weapp/cell/index",
-        "van-action-sheet": "@vant/weapp/action-sheet/index",
-        "van-popup": "@vant/weapp/popup/index",
-        "van-checkbox": "@vant/weapp/checkbox/index",
-        "van-checkbox-group": "@vant/weapp/checkbox-group/index",
-        "van-transition": "@vant/weapp/transition/index",
-        "viewDate": "/components/viewDate/index",
-        "filtrate": "/components/filtrate/filtrate"
+    {
+      "root": "portrayal",
+      "pages": [
+        "index/index",
+        "details/client",
+        "details/project",
+        "details/sales",
+        "details/contacts"
+      ]
     },
-    "tabBar": {
-        "custom": true,
-        "color": "#000000",
-        "selectedColor": "#000000",
-        "backgroundColor": "#000000",
-        "list": [
-            {
-                "pagePath": "pages/tabbar/home/index"
-            },
-            {
-                "pagePath": "pages/tabbar/message/index"
-            },
-            {
-                "pagePath": "pages/tabbar/mine/index"
-            }
-        ]
-    },
-    "window": {
-        "backgroundTextStyle": "light",
-        "navigationBarBackgroundColor": "#085CDF",
-        "navigationBarTitleText": "Weixin",
-        "navigationBarTextStyle": "white"
-    },
-    "permission": {
-        "scope.userLocation": {
-            "desc": "您的位置信息将用于小程序位置接口的效果展示"
-        }
-    },
-    "requiredPrivateInfos": [
-        "getLocation"
-    ],
-    "plugins": {
-        "WechatSI": {
-            "version": "0.0.7",
-            "provider": "wx069ba97219f66d99"
-        }
-    },
-    "sitemapLocation": "sitemap.json"
+    {
+      "root": "salesPanel",
+      "pages": [
+        "index/index",
+        "panel/detail",
+        "customerBlance/detail",
+        "customerBlance/Pipeline",
+        "salesHourglass/index",
+        "dataOverview/index",
+        "dataOverview/OverviewAndDetails/Clue",
+        "FinancialCollectionAnalysis/detail",
+        "AnalysisOfUninvoicedShipments/detail",
+        "dataOverview/OverviewAndDetails/Client",
+        "dataOverview/OverviewAndDetails/project",
+        "dataOverview/OverviewAndDetails/Costs",
+        "dataOverview/Costs/SPMEDetail",
+        "dataOverview/Project/projectList"
+      ]
+    }
+  ],
+  "preloadRule": {
+    "pages/login/phone": {
+      "packages": [
+        "packageA",
+        "portrayal"
+      ],
+      "network": "all"
+    }
+  },
+  "usingComponents": {
+    "My_Empty": "/components/My_empty/index",
+    "Yl_Files": "/components/Yl_Files/index",
+    "Yl_Tabbar": "/components/Yl_Tabbar/index",
+    "Yl-tags": "/pages/tags/modules/Yl-tags/index",
+    "Yl-group": "/pages/group/modules/Yl-group/index",
+    "Yl_field": "/components/Yl_field/index",
+    "Yl_FloatingButton": "/components/Yl_FloatingButton/index",
+    "Yl_ReportForms": "/components/Yl_ReportForms/index",
+    "Yl_Headline": "/components/Yl_Headline/index",
+    "Yl_FunTabs": "/components/Yl_FunTabs/index",
+    "Yl_Detail": "/components/Yl_Detail/index",
+    "Yl_nav": "/components/Yl_nav/index",
+    "Yl_filtrate": "/components/Yl_filtrate/index",
+    "organization": "/components/organization/index",
+    "Yl_Filtrate1": "/components/Yl_Filtrate1/index",
+    "Yl_ListBox": "/components/Yl_ListBox/index",
+    "My_switch": "/components/My_switch/index",
+    "My_empty": "/components/My_empty/index",
+    "shrink": "/components/shrink/shrink",
+    "timeRange": "/components/timeRange/timeRange",
+    "van-button": "@vant/weapp/button/index",
+    "van-icon": "@vant/weapp/icon/index",
+    "van-image": "@vant/weapp/image/index",
+    "van-loading": "@vant/weapp/loading/index",
+    "van-tab": "@vant/weapp/tab/index",
+    "van-tabs": "@vant/weapp/tabs/index",
+    "van-search": "@vant/weapp/search/index",
+    "van-tag": "@vant/weapp/tag/index",
+    "van-dropdown-menu": "@vant/weapp/dropdown-menu/index",
+    "van-dropdown-item": "@vant/weapp/dropdown-item/index",
+    "van-tree-select": "@vant/weapp/tree-select/index",
+    "van-toast": "@vant/weapp/toast/index",
+    "van-cell": "@vant/weapp/cell/index",
+    "van-action-sheet": "@vant/weapp/action-sheet/index",
+    "van-popup": "@vant/weapp/popup/index",
+    "van-checkbox": "@vant/weapp/checkbox/index",
+    "van-checkbox-group": "@vant/weapp/checkbox-group/index",
+    "van-transition": "@vant/weapp/transition/index",
+    "viewDate": "/components/viewDate/index",
+    "filtrate": "/components/filtrate/filtrate"
+  },
+  "tabBar": {
+    "custom": true,
+    "color": "#000000",
+    "selectedColor": "#000000",
+    "backgroundColor": "#000000",
+    "list": [
+      {
+        "pagePath": "pages/tabbar/home/index"
+      },
+      {
+        "pagePath": "pages/tabbar/message/index"
+      },
+      {
+        "pagePath": "pages/tabbar/mine/index"
+      }
+    ]
+  },
+  "window": {
+    "backgroundTextStyle": "light",
+    "navigationBarBackgroundColor": "#085CDF",
+    "navigationBarTitleText": "Weixin",
+    "navigationBarTextStyle": "white"
+  },
+  "permission": {
+    "scope.userLocation": {
+      "desc": "您的位置信息将用于小程序位置接口的效果展示"
+    }
+  },
+  "requiredPrivateInfos": [
+    "getLocation"
+  ],
+  "plugins": {
+    "WechatSI": {
+      "version": "0.0.7",
+      "provider": "wx069ba97219f66d99"
+    }
+  },
+  "sitemapLocation": "sitemap.json"
 }

+ 10 - 0
components/filtrate/filtrate.js

@@ -23,6 +23,10 @@ Component({
         clickOpen: {
             type: Function,
         },
+        isEmpty: {
+            type: Boolean,
+            value: false
+        }
     },
     lifetimes: {
         attached: function () {
@@ -95,6 +99,12 @@ Component({
                 })
             })
             this.setShowText();
+        },
+        clearResults() {
+            this.setData({
+                showText: '全部'
+            })
+            this.triggerEvent("clickOpen", "clear")
         }
     }
 })

+ 7 - 2
components/filtrate/filtrate.wxml

@@ -4,8 +4,13 @@
     </view>
     <view class="right">
         <view style='color:#3874F6;'>{{language[showText]||showText}}</view>
-        <view class="iconfont icon-xiangxiazhankai" />
+        <block wx:if='{{isEmpty}}'>
+            <view wx:if="{{showText != '全部'}}" class="iconfont icon-quxiao" catchtap="clearResults" />
+            <view wx:else class="iconfont icon-xiangxiazhankai" />
+        </block>
+        <view wx:else class="iconfont icon-xiangxiazhankai" />
     </view>
 </view>
-<van-action-sheet show="{{  actionShow }}" actions="{{ actions }}" bind:select='onSelect' bind:cancel='onCancel' bind:click-overlay='onCancel' cancel-text="{{language['取消']||'取消'}}" />
+<van-action-sheet show="{{  actionShow }}" actions="{{ actions }}" bind:select='onSelect' bind:cancel='onCancel'
+    bind:click-overlay='onCancel' cancel-text="{{language['取消']||'取消'}}" />
 <wxs src='../../utils/wxmlQueryPer.wxs' module="per" />

+ 122 - 24
salesPanel/dataOverview/Project/XMSMZQFX.js

@@ -4,7 +4,6 @@ const _Http = getApp().globalData.http,
         symbol,
         precision
     }).format();
-import * as echarts from '../../ec-canvas/echarts';
 Component({
     options: {
         addGlobalClass: true
@@ -20,36 +19,107 @@ Component({
     },
     data: {
         "content": {
-            dateType: "15-30天",
             dataType: "",
             where: {
-                dateType: "15-30天",
                 type: "",
                 tradingstatus: "",
+                tradefield: "",
                 grade: "",
+                sa_projectid: ""
             },
             pageNumber: 1,
             pageSize: 20,
             pageTotal: 1
         },
-        types: [],
         grades: [],
-        tradingstatus: [{
+        tradefields: [],
+        projecttypes: [],
+        nodes: [{
             remarks: '全部',
             value: ''
         }, {
-            remarks: '未成交',
-            value: '未成交'
+            remarks: '立项',
+            value: '立项'
         }, {
-            remarks: '已成交',
-            value: '已成交'
+            remarks: '报备',
+            value: '报备'
         }, {
-            remarks: '多次成交',
-            value: '多次成交'
+            remarks: '报价',
+            value: '报价'
+        }, {
+            remarks: '合同',
+            value: '合同'
+        }, {
+            remarks: '订单',
+            value: '订单'
+        }, {
+            remarks: '结案',
+            value: '结案'
         }],
     },
     methods: {
         async getList() {
+            let content = this.data.content;
+
+            if (this.data.tradefields.length == 0) {
+                _Http.basic({
+                    "classname": "sysmanage.develop.optiontype.optiontype",
+                    "method": "optiontypeselect",
+                    "content": {
+                        "pageNumber": 1,
+                        "pageSize": 1000,
+                        "typename": "tradefield",
+                        "parameter": {}
+                    },
+                }).then(res => {
+                    console.log("领域", res)
+                    if (res.code == 1) {
+                        res.data = res.data.map(v => {
+                            v.remarks = v.value
+                            return v
+                        })
+                        res.data.unshift({
+                            remarks: '全部',
+                            value: ''
+                        })
+                        this.setData({
+                            tradefields: res.data
+                        })
+                    }
+
+                })
+            }
+            if (this.data.projecttypes.length == 0) await _Http.basic({
+                "classname": "sysmanage.develop.optiontype.optiontype",
+                "method": "optiontypeselect",
+                "content": {
+                    "pageNumber": 1,
+                    "pageSize": 1000,
+                    "typename": "projecttype",
+                    "parameter": {}
+                },
+            }).then(res => {
+                console.log("项目类型", res)
+                if (res.code == 1) {
+                    res.data = res.data.map((v, i) => {
+                        if (i == 0) content.where.projecttype = v.value;
+                        v.remarks = v.value + '-' + getApp().globalData.Language.getMapText(v.remarks)
+                        return v
+                    })
+                    res.data.unshift({
+                        remarks: '全部',
+                        value: ''
+                    })
+                    this.setData({
+                        content,
+                        projecttypes: res.data
+                    })
+                }
+
+            })
+
+
+
             if (this.data.grades.length == 0) {
                 _Http.basic({
                     "classname": "sysmanage.develop.optiontype.optiontype",
@@ -57,12 +127,16 @@ Component({
                     "content": {
                         "pageNumber": 1,
                         "pageSize": 1000,
-                        "typename": "agentgrade",
+                        "typename": "projectgrade",
                         "parameter": {}
                     },
                 }).then(res => {
-                    console.log("客户分类", res)
+                    console.log("项目等级", res)
                     if (res.code == 1) {
+                        res.data = res.data.map(v => {
+                            v.remarks = v.value + '-' + getApp().globalData.Language.getMapText(v.remarks)
+                            return v
+                        })
                         res.data.unshift({
                             remarks: '全部',
                             value: ''
@@ -75,7 +149,6 @@ Component({
                 })
             }
 
-            let content = this.data.content
             const {
                 dataid,
                 type,
@@ -117,20 +190,15 @@ Component({
                 } catch (error) {}
             })
         },
-        changeType1({
-            detail
-        }) {
-            console.log(detail)
+        changeType1(e) {
             this.setData({
-                "content.where.tradingstatus": detail,
+                [`content.${e.currentTarget.dataset.node}`]: e.detail,
             })
             this.getList(true)
         },
-        changeType2({
-            detail
-        }) {
+        changeType2(e) {
             this.setData({
-                "content.where.type": detail,
+                [`content.where.${e.currentTarget.dataset.node}`]: e.detail,
             })
             this.getList(true)
         },
@@ -138,12 +206,42 @@ Component({
             detail
         }) {
             this.setData({
-                "content.where.grade": detail,
+                "content.where.tradefield": detail,
             })
             this.getList(true)
         },
         showTips() {
             getApp().globalData.Language.showToast('统计项目生命周期中的各个关键节点之间平均周期')
+        },
+        toSelectProject({
+            detail
+        }) {
+            if (detail) {
+                this.setData({
+                    "content.where.sa_projectid": ''
+                })
+                this.getList(true);
+            } else {
+                _Http.data = JSON.parse(JSON.stringify(this.data));
+                delete _Http.data.list;
+                delete _Http.data.language;
+                delete _Http.data.sColors;
+                delete _Http.data.nodes;
+                wx.navigateTo({
+                    url: '/salesPanel/dataOverview/Project/projectList'
+                })
+
+                function selectItem(item) {
+                    this.setData({
+                        "content.where.sa_projectid": item.sa_projectid,
+                    })
+                    this.selectComponent("#Filtrate1").setShowArrText([item.projectname]);
+                    this.getList(true);
+                    wx.navigateBack()
+                    delete _Http.selectItem;
+                }
+                _Http.selectItem = selectItem.bind(this);
+            }
         }
     }
 })

+ 5 - 0
salesPanel/dataOverview/Project/XMSMZQFX.scss

@@ -66,4 +66,9 @@
         }
     }
 
+}
+
+.empty{
+    margin-left: -60rpx;
+    padding-bottom: 140rpx;
 }

+ 45 - 32
salesPanel/dataOverview/Project/XMSMZQFX.wxml

@@ -1,39 +1,52 @@
-<filtrate id='Filtrate' iconName='icon-kehuleixing' wx:if='{{types.length}}' list='{{types}}'
-	type="{{content.where.type}}" title='客户类型' bind:onChange='changeType2' />
-<filtrate id='Filtrate' iconName='icon-kehudengji' wx:if='{{grades.length}}' list='{{grades}}'
-	type="{{content.where.grade}}" title='客户等级' bind:onChange='changeType3' />
-<filtrate id='Filtrate' iconName='icon-chengjiaozhuangtai' list='{{tradingstatus}}'
-	type="{{content.where.tradingstatus}}" title='成交状态' bind:onChange='changeType1' />
-<view class="global-card">
-	<view class="range">
-		{{language['平均周期']||'平均周期'}}
-		<view class="iconfont icon-wenhao" bindtap="showTips" />
-	</view>
-	<view class="chart">
-		<view class="item" wx:for="{{list}}" wx:key="end"
-			style="background-color: {{item.bgColor}}; flex: {{item.avg}};">
-			{{item.dateavg}}{{language['天']||'天'}}
+<Yl_ListBox pullDown='{{false}}' id='ListBox'>
+	<filtrate id='Filtrate' iconName='icon-rili1' list='{{nodes}}' type="{{content.begnode}}" title='开始节点'
+		data-node="begnode" bind:onChange='changeType1' />
+	<filtrate id='Filtrate' iconName='icon-rili1' list='{{nodes}}' type="{{content.username}}" title='结束节点'
+		data-node="username" bind:onChange='changeType1' />
 
-			<view class="text">
-				<view class="label">
-					{{language[item.start]||item.start}}
-				</view>
-				<view class="tips">
-					{{language[item.tips]||item.tips}}
-				</view>
-			</view>
+	<filtrate id='Filtrate' iconName='icon-xiangmuleixing' wx:if='{{projecttypes.length}}' list='{{projecttypes}}'
+		type="{{content.where.projecttype}}" title='项目类型' data-node="projecttype" bind:onChange='changeType2' />
+	<filtrate id='Filtrate' iconName='icon-baobeishenhe' wx:if='{{grades.length}}' list='{{grades}}'
+		type="{{content.where.grade}}" title='项目等级' data-node="grade" bind:onChange='changeType2' />
+	<filtrate id='Filtrate' iconName='icon-lingyu' wx:if='{{tradefields.length}}' list='{{tradefields}}'
+		type="{{content.where.tradefield}}" title='领域' data-node="tradefield" bind:onChange='changeType2' />
+
+	<filtrate id='Filtrate1' iconName='icon-xiangmumingcheng' list='{{[]}}' title='项目名称' isEmpty
+		bind:clickOpen='toSelectProject' />
 
-			<view wx:if="{{index == list.length-1}}" class="text text1">
-				<view class="label">
-					{{language[item.end]||item.end}}
+	<view class="global-card">
+		<view class="range">
+			{{language[' 平均周期']||'平均周期'}}
+			<view class="iconfont icon-wenhao" bindtap="showTips" />
+		</view>
+		<view class="chart" wx:if="{{list.length}}">
+			<view class="item" wx:for="{{list}}" wx:key="end"
+				style="background-color: {{item.bgColor}}; flex: {{item.avg}};">
+				{{item.dateavg}}{{language['天']||'天'}}
+
+				<view class="text" wx:if="{{item.avg > 0}}">
+					<view class="label">
+						{{language[item.start]||item.start}}
+					</view>
+					<view class="tips">
+						{{language[item.tips]||item.tips}}
+					</view>
 				</view>
-				<view class="tips">
-					{{language[item.tips]||item.tips}}
+
+				<view wx:if="{{index == list.length-1}}" class="text text1">
+					<view class="label">
+						{{language[item.end]||item.end}}
+					</view>
+					<view class="tips">
+						{{language[item.tips]||item.tips}}
+					</view>
 				</view>
 			</view>
 		</view>
-	</view>
 
-</view>
-<My_empty wx:if="{{list.length==0}}" />
-<view style="height: 100rpx;" />
+		<view wx:else class="empty">
+			<My_empty />
+		</view>
+	</view>
+	<view style="height: 100rpx;" />
+</Yl_ListBox>

+ 120 - 0
salesPanel/dataOverview/Project/projectList.js

@@ -0,0 +1,120 @@
+const _Http = getApp().globalData.http,
+  currency = require("../../../utils/currency"),
+  CNY = (value, symbol = "¥", precision = 2) => currency(value, {
+    symbol,
+    precision
+  }).format();
+
+Page({
+  data: {
+    condition: ""
+  },
+  onLoad(options) {
+    getApp().globalData.Language.getLanguagePackage(this, '选择项目')
+    this.setData({
+      content: _Http.data.content,
+    })
+    const filtratelist = [{
+      label: "项目类型",
+      index: _Http.data.projecttypes.findIndex(v => v.value == _Http.data.content.where.projecttype) || 0,
+      showName: "remarks", //显示字段
+      valueKey: "projecttype", //返回Key
+      selectKey: "value", //传参 代表选着字段 不传参返回整个选择对象
+      value: _Http.data.content.where.projecttype, //选中值
+      list: _Http.data.projecttypes
+    }, {
+      label: "项目等级",
+      index: _Http.data.grades.findIndex(v => v.value == _Http.data.content.where.grade) || 0,
+      showName: "remarks", //显示字段
+      valueKey: "grade", //返回Key
+      selectKey: "value", //传参 代表选着字段 不传参返回整个选择对象
+      value: _Http.data.content.where.grade, //选中值
+      list: _Http.data.grades.map(v => {
+        v.remarks = v.remarks.split("-")[0]
+        return v
+      })
+    }, {
+      label: "领域",
+      index: _Http.data.tradefields.findIndex(v => v.value == _Http.data.content.where.tradefield) || 0,
+      showName: "remarks", //显示字段
+      valueKey: "tradefield", //返回Key
+      selectKey: "value", //传参 代表选着字段 不传参返回整个选择对象
+      value: _Http.data.content.where.tradefield, //选中值
+      list: _Http.data.tradefields
+    }, ];
+    this.setData({
+      filtratelist
+    })
+    this.getList()
+  },
+  getList(init = false) {
+    _Http.init(this.data.content, init).then(content => {
+      _Http.basic({
+        "id": 20230715111604,
+        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;
+    this.setData({
+      "content.where.grade": detail.grade || "",
+      "content.where.projecttype": detail.projecttype || "",
+      "content.where.tradefield": detail.tradefield || "",
+    })
+    this.getList(true);
+  },
+  openFiltrate() {
+    this.setData({
+      showFiltrate: true
+    })
+  },
+  selectItem(e) {
+    const {
+      item
+    } = e.currentTarget.dataset;
+    _Http.selectItem(item)
+  },
+  onUnload() {
+    delete _Http.data
+  },
+  onChange(e) {
+    this.setData({
+      condition: e.detail,
+    });
+  },
+  onSearch() {
+    this.setData({
+      "content.where.condition": this.data.condition
+    })
+    this.getList(true);
+  },
+  onClear() {
+    this.setData({
+      "content.where.condition": "",
+      condition: "",
+    })
+    this.getList(true);
+  }
+})

+ 4 - 0
salesPanel/dataOverview/Project/projectList.json

@@ -0,0 +1,4 @@
+{
+  "navigationBarTitleText": "选择项目",
+  "usingComponents": {}
+}

+ 18 - 0
salesPanel/dataOverview/Project/projectList.scss

@@ -0,0 +1,18 @@
+@import "../OverviewAndDetails/project.scss";
+
+.filtrate-box {
+    display: flex;
+    height: 100%;
+    align-items: center;
+    padding: 0 20rpx;
+
+    font-family: PingFang SC, PingFang SC;
+    font-size: 28rpx;
+    color: #666666;
+
+    .iconfont {
+        margin-right: 6rpx;
+        color: #999999;
+    }
+
+}

+ 44 - 0
salesPanel/dataOverview/Project/projectList.wxml

@@ -0,0 +1,44 @@
+<van-search value="{{ condition }}" shape='round' placeholder="{{language['请输入搜索关键词']||'请输入搜索关键词'}}" use-action-slot bind:change="onChange" bind:clear='onClear' bind:search="onSearch">
+    <view class="filtrate-box" slot="action" hover-class="navigator-hover" bindtap="openFiltrate">
+        <view class="iconfont  icon-shaixuan" />
+        <view>{{language['筛选']||'筛选'}}</view>
+    </view>
+</van-search>
+
+<view style="height: 20rpx;" />
+<Yl_ListBox id='ListBox' bind:getlist='getList'>
+    <view class="global-card item" hover-class="navigator-hover" wx:for="{{list}}" wx:key="sa_projectid"
+        data-item="{{item}}" bind:tap="selectItem">
+        <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}}' rule='{{false}}' list='{{filtratelist}}' dateRange="{{false}}"
+    bindhandle="handleFilter" />