From 0187cbec681fffcd6a77190b5ed35d185d5bcfcb Mon Sep 17 00:00:00 2001
From: chenhaozhe <cgz@hz-kingdee.com>
Date: 星期三, 14 一月 2026 13:37:04 +0800
Subject: [PATCH] 1

---
 .gitignore                                                                     |    1 
 pages/MJGL/mujubaoyangjiludan/Sc_MouldMaintainBill.vue                         |    2 
 pages/MJGL/mujudianjianjiludan/Sc_MouldDotCheckBill.vue                        |    2 
 utils/WebSocketServices.js                                                     |   65 ++
 pages.json                                                                     |   14 
 utils/BasicInfo.js                                                             |   37 +
 pages/ZLGL/style/MJListStyle.scss                                              |  193 ++++++
 pages/index/tab4.vue                                                           |   14 
 pages/ZLGL/AanDengHujiao/OA_ErrMsgBackBill/OA_ErrMsgBackBill.vue               |    2 
 App.vue                                                                        |    9 
 pages/ZLGL/AanDengHujiao/OA_ErrMsgBackHandleBill/OA_ErrMsgBackHandleBill.vue   |    2 
 pages/ZLGL/AanDengHujiao/OA_ErrMsgBackReceiveBill/OA_ErrMsgBackReceiveBill.vue |    2 
 utils/common.js                                                                |   15 
 pages/ZLGL/OA_WorkLink/OA_WorkLinkBillList.vue                                 |  483 +++++++++++++++++
 pages/ZLGL/style/MJBillStyle.scss                                              |  310 +++++++++++
 pages/ZLGL/OA_WorkLink/OA_WorkLinkBill.vue                                     |  474 ++++++++++++++++
 manifest.json                                                                  |   10 
 pages/ZLGL/AanDengHujiao/OA_ErrMsgBackCheckBill/OA_ErrMsgBackCheckBill.vue     |    2 
 pages/MJGL/Sb_EquipMaintainBill/Sb_EquipMaintainBill.vue                       |    3 
 pages/ZLGL/AanDengHujiao/OA_ErrMsgBackSignBill/OA_ErrMsgBackSignBill.vue       |    2 
 pages/index/login.vue                                                          |    8 
 21 files changed, 1,634 insertions(+), 16 deletions(-)

diff --git a/.gitignore b/.gitignore
index f8d66e1..b99a29d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,4 @@
 node_modules
 /package-lock.json
 /unpackage
+
diff --git a/App.vue b/App.vue
index c4c1fff..0e962d5 100644
--- a/App.vue
+++ b/App.vue
@@ -11,6 +11,15 @@
         },
         onShow: function() {
             console.log('App Show')
+            // let content = "鎮ㄦ湁涓�鏉℃柊鐨勬秷鎭紒";
+            // let options = {
+            // title: "閫氱煡鏍囬",
+            // cover: false, // 鏄惁瑕嗙洊涓婁竴娆$殑閫氱煡
+            // when: new Date() // 閫氱煡鏄剧ず鏃堕棿
+            // };
+            // let payload = JSON.stringify({ id: "123", key: "value" });
+            
+            // plus.push.createMessage(content, payload, options);
         },
         onHide: function() {
             console.log('App Hide')
diff --git a/manifest.json b/manifest.json
index 1cbe8d4..10b5c50 100644
--- a/manifest.json
+++ b/manifest.json
@@ -2,8 +2,8 @@
     "name" : "鏅轰簯LMES",
     "appid" : "__UNI__B002F49",
     "description" : "",
-    "versionName" : "2.0.46",
-    "versionCode" : 246,
+    "versionName" : "2.0.52",
+    "versionCode" : 252,
     "transformPx" : false,
     /* 5+App鐗规湁鐩稿叧 */
     "app-plus" : {
@@ -21,7 +21,8 @@
             "Camera" : {},
             "Contacts" : {},
             "Bluetooth" : {},
-            "Barcode" : {}
+            "Barcode" : {},
+            "Push" : {}
         },
         /* 搴旂敤鍙戝竷淇℃伅 */
         "distribute" : {
@@ -57,7 +58,8 @@
             },
             /* SDK閰嶇疆 */
             "sdkConfigs" : {
-                "ad" : {}
+                "ad" : {},
+                "push" : {}
             },
             "icons" : {
                 "android" : {
diff --git a/pages.json b/pages.json
index 2bf5370..c6105d1 100644
--- a/pages.json
+++ b/pages.json
@@ -1548,6 +1548,20 @@
             {
                 "navigationBarTitleText" : "鍣ㄥ叿缁翠慨楠屾敹鍗曠紦瀛�"
             }
+		},
+		{
+		    "path" : "pages/ZLGL/OA_WorkLink/OA_WorkLinkBill",
+		    "style" : 
+		    {
+		        "navigationBarTitleText" : "宸ヤ綔鑱旂郴鍗�"
+		    }
+		},
+		{
+		    "path" : "pages/ZLGL/OA_WorkLink/OA_WorkLinkBillList",
+		    "style" : 
+		    {
+		        "navigationBarTitleText" : "宸ヤ綔鑱旂郴鍗曞垪琛�"
+		    }
 		}
 
 	],
diff --git a/pages/MJGL/Sb_EquipMaintainBill/Sb_EquipMaintainBill.vue b/pages/MJGL/Sb_EquipMaintainBill/Sb_EquipMaintainBill.vue
index a651419..63cf5a0 100644
--- a/pages/MJGL/Sb_EquipMaintainBill/Sb_EquipMaintainBill.vue
+++ b/pages/MJGL/Sb_EquipMaintainBill/Sb_EquipMaintainBill.vue
@@ -424,9 +424,6 @@
                         message: err
                     })
                 }
-
-
-
             },
             toCheckFile() {
                 if (this.hform.HEquipID == 0) {
diff --git a/pages/MJGL/mujubaoyangjiludan/Sc_MouldMaintainBill.vue b/pages/MJGL/mujubaoyangjiludan/Sc_MouldMaintainBill.vue
index be9739d..37d6acd 100644
--- a/pages/MJGL/mujubaoyangjiludan/Sc_MouldMaintainBill.vue
+++ b/pages/MJGL/mujubaoyangjiludan/Sc_MouldMaintainBill.vue
@@ -273,7 +273,6 @@
 	import {
 		MpaasScan
 	} from "@/utils/mpaasScan.js"
-	import "@/pages/MJGL/style/MJBillStyle.scss"
 	import {
 		getUserInfo
 	} from "../../../utils/auth";
@@ -869,4 +868,5 @@
 </script>
 
 <style lang="scss">
+    @import "@/pages/MJGL/style/MJBillStyle.scss"
 </style>
\ No newline at end of file
diff --git a/pages/MJGL/mujudianjianjiludan/Sc_MouldDotCheckBill.vue b/pages/MJGL/mujudianjianjiludan/Sc_MouldDotCheckBill.vue
index 6d8027b..792f7d2 100644
--- a/pages/MJGL/mujudianjianjiludan/Sc_MouldDotCheckBill.vue
+++ b/pages/MJGL/mujudianjianjiludan/Sc_MouldDotCheckBill.vue
@@ -309,7 +309,6 @@
 	import {
 		MpaasScan
 	} from "@/utils/mpaasScan.js"
-	import "@/pages/MJGL/style/MJBillStyle.scss"
 	import {
 		getUserInfo
 	} from "../../../utils/auth";
@@ -951,4 +950,5 @@
 </script>
 
 <style lang="scss">
+    @import "@/pages/MJGL/style/MJBillStyle.scss"
 </style>
\ No newline at end of file
diff --git a/pages/ZLGL/AanDengHujiao/OA_ErrMsgBackBill/OA_ErrMsgBackBill.vue b/pages/ZLGL/AanDengHujiao/OA_ErrMsgBackBill/OA_ErrMsgBackBill.vue
index 5b4afdd..48535d4 100644
--- a/pages/ZLGL/AanDengHujiao/OA_ErrMsgBackBill/OA_ErrMsgBackBill.vue
+++ b/pages/ZLGL/AanDengHujiao/OA_ErrMsgBackBill/OA_ErrMsgBackBill.vue
@@ -277,7 +277,6 @@
 	import {CommonUtils} from "@/utils/common";
 	import getDateTime from '@/utils/getdateTime.js';
 	import {getUserInfo} from "../../../../utils/auth";
-	import "@/pages/ZLGL/AanDengHujiao/style/OA_ErrMsgStyle.scss"
 	export default {
 		data() {
 			return {
@@ -1040,4 +1039,5 @@
 </script>
 
 <style lang="scss">
+    @import "@/pages/ZLGL/AanDengHujiao/style/OA_ErrMsgStyle.scss"
 </style>
\ No newline at end of file
diff --git a/pages/ZLGL/AanDengHujiao/OA_ErrMsgBackCheckBill/OA_ErrMsgBackCheckBill.vue b/pages/ZLGL/AanDengHujiao/OA_ErrMsgBackCheckBill/OA_ErrMsgBackCheckBill.vue
index 977fc23..cad1a85 100644
--- a/pages/ZLGL/AanDengHujiao/OA_ErrMsgBackCheckBill/OA_ErrMsgBackCheckBill.vue
+++ b/pages/ZLGL/AanDengHujiao/OA_ErrMsgBackCheckBill/OA_ErrMsgBackCheckBill.vue
@@ -232,7 +232,6 @@
 	import {
 		getUserInfo
 	} from "../../../../utils/auth";
-	import "@/pages/ZLGL/AanDengHujiao/style/OA_ErrMsgStyle.scss"
 	export default {
 		data() {
 			return {
@@ -1020,4 +1019,5 @@
 </script>
 
 <style lang="scss">
+    @import "@/pages/ZLGL/AanDengHujiao/style/OA_ErrMsgStyle.scss"
 </style>
\ No newline at end of file
diff --git a/pages/ZLGL/AanDengHujiao/OA_ErrMsgBackHandleBill/OA_ErrMsgBackHandleBill.vue b/pages/ZLGL/AanDengHujiao/OA_ErrMsgBackHandleBill/OA_ErrMsgBackHandleBill.vue
index dc0a762..1eb2a83 100644
--- a/pages/ZLGL/AanDengHujiao/OA_ErrMsgBackHandleBill/OA_ErrMsgBackHandleBill.vue
+++ b/pages/ZLGL/AanDengHujiao/OA_ErrMsgBackHandleBill/OA_ErrMsgBackHandleBill.vue
@@ -239,7 +239,6 @@
 	import {
 		getUserInfo
 	} from "../../../../utils/auth";
-	import "@/pages/ZLGL/AanDengHujiao/style/OA_ErrMsgStyle.scss"
 	export default {
 		data() {
 			return {
@@ -1044,4 +1043,5 @@
 </script>
 
 <style lang="scss">
+    @import "@/pages/ZLGL/AanDengHujiao/style/OA_ErrMsgStyle.scss"
 </style>
\ No newline at end of file
diff --git a/pages/ZLGL/AanDengHujiao/OA_ErrMsgBackReceiveBill/OA_ErrMsgBackReceiveBill.vue b/pages/ZLGL/AanDengHujiao/OA_ErrMsgBackReceiveBill/OA_ErrMsgBackReceiveBill.vue
index aaff83c..1d9f27f 100644
--- a/pages/ZLGL/AanDengHujiao/OA_ErrMsgBackReceiveBill/OA_ErrMsgBackReceiveBill.vue
+++ b/pages/ZLGL/AanDengHujiao/OA_ErrMsgBackReceiveBill/OA_ErrMsgBackReceiveBill.vue
@@ -240,7 +240,6 @@
 	import {
 		getUserInfo
 	} from "../../../../utils/auth";
-	import "@/pages/ZLGL/AanDengHujiao/style/OA_ErrMsgStyle.scss"
 	export default {
 		data() {
 			return {
@@ -905,4 +904,5 @@
 </script>
 
 <style lang="scss">
+    @import "@/pages/ZLGL/AanDengHujiao/style/OA_ErrMsgStyle.scss"
 </style>
\ No newline at end of file
diff --git a/pages/ZLGL/AanDengHujiao/OA_ErrMsgBackSignBill/OA_ErrMsgBackSignBill.vue b/pages/ZLGL/AanDengHujiao/OA_ErrMsgBackSignBill/OA_ErrMsgBackSignBill.vue
index d9c5c84..1025f80 100644
--- a/pages/ZLGL/AanDengHujiao/OA_ErrMsgBackSignBill/OA_ErrMsgBackSignBill.vue
+++ b/pages/ZLGL/AanDengHujiao/OA_ErrMsgBackSignBill/OA_ErrMsgBackSignBill.vue
@@ -227,7 +227,6 @@
 	import {
 		getUserInfo
 	} from "../../../../utils/auth";
-	import "@/pages/ZLGL/AanDengHujiao/style/OA_ErrMsgStyle.scss"
 	export default {
 		data() {
 			return {
@@ -986,4 +985,5 @@
 </script>
 
 <style lang="scss">
+    @import "@/pages/ZLGL/AanDengHujiao/style/OA_ErrMsgStyle.scss"
 </style>
\ No newline at end of file
diff --git a/pages/ZLGL/OA_WorkLink/OA_WorkLinkBill.vue b/pages/ZLGL/OA_WorkLink/OA_WorkLinkBill.vue
new file mode 100644
index 0000000..1678a02
--- /dev/null
+++ b/pages/ZLGL/OA_WorkLink/OA_WorkLinkBill.vue
@@ -0,0 +1,474 @@
+<template>
+    <view>
+        <view class="tabs" id="tabs">
+            <view :class="tabs == 0 ? 'on':''" @tap="tabs = 0">鍩烘湰淇℃伅</view>
+            <!-- <view :class="tabs == 1 ? 'on':''" @tap="tabs = 1">鏄庣粏淇℃伅</view> -->
+            <view :class="tabs == 2 ? 'on':''" @tap="tabs = 2">鍏朵粬淇℃伅</view>
+            <!-- <view :class="tabs == 3 ? 'on':''" @tap="tabs = 3">闄勪欢淇℃伅</view> -->
+        </view>
+        <!-- 鍩烘湰淇℃伅 -->
+        <template v-if="tabs == 0">
+            <view class="form" :style="{
+                height: containerHeight + 'px',
+                overflow: 'auto'
+            }">
+                <view class="form-item">
+                    <view class="title">涓婚:</view>
+                    <view class="right">
+                        <input type="text" v-model="hform.HContext" placeholder="璇疯緭鍏ヤ富棰�..." />
+                    </view>
+                </view>
+                <view class="form-item">
+                    <view class="title">鍙戦�佷汉:</view>
+                    <zxz-uni-data-select class="right" :localdata="HEmpList" dataKey="HName" dataValue="HName"
+                        v-model="hform.HSendMan" :filterable="true">
+                    </zxz-uni-data-select>
+                    <!-- <input disabled v-model="hform.HDeptName" placeholder="璇烽�夋嫨閮ㄩ棬" /> -->
+                </view>
+                <view class="form-item">
+                    <view class="title">鎺ユ敹浜�:</view>
+                    <zxz-uni-data-select class="right" :localdata="HEmpList" dataKey="HName" dataValue="HName"
+                        v-model="hform.HReceiveMan" :filterable="true">
+                    </zxz-uni-data-select>
+                    <!-- <input disabled v-model="hform.HDeptName" placeholder="璇烽�夋嫨閮ㄩ棬" /> -->
+                </view>
+                <view class="form-item">
+                    <view class="title">绱ф�ョ被鍨�:</view>
+                    <zxz-uni-data-select class="right" :localdata="[
+                        {value: '鏅��'},
+                        {value: '绱ф��'}
+                        ]" dataKey="value" dataValue="value" v-model="hform.HLevel">
+                    </zxz-uni-data-select>
+                    <!-- <input disabled v-model="hform.HDeptName" placeholder="璇烽�夋嫨閮ㄩ棬" /> -->
+                </view>
+                <view class="form-item">
+                    <view class="title">鍙戦�佺被鍨�:</view>
+                    <zxz-uni-data-select class="right" :localdata="[
+                        {value: '鍏叡'},
+                        {value: '涓汉'}
+                    ]" dataKey="value" dataValue="value" v-model="hform.HSendType">
+                    </zxz-uni-data-select>
+                    <!-- <input disabled v-model="hform.HDeptName" placeholder="璇烽�夋嫨閮ㄩ棬" /> -->
+                </view>
+                <view class="form-item">
+                    <view class="title">鎶勯�佷汉:</view>
+                    <zxz-uni-data-select class="right" :localdata="HEmpList" dataKey="HName" dataValue="HName"
+                        :filterable="true" 
+                        :multiple="true" placeholder="璇烽�夋嫨鎶勯�佷汉..."
+                         @input="HCopyManChange">
+                    </zxz-uni-data-select>
+                    <!-- <input disabled v-model="hform.HDeptName" placeholder="璇烽�夋嫨閮ㄩ棬" /> -->
+                </view>
+                <view class="form-item">
+                    <view class="title">鍗曟嵁鍙�:</view>
+                    <view class="righton">
+                        <input disabled v-model="hform.HBillNo" />
+                    </view>
+                </view>
+                <view class="form-item">
+                    <view class="title">鍗曟嵁鏃ユ湡:</view>
+                    <view class="righton">
+                        <input disabled v-model="hform.HDate" />
+                    </view>
+                </view>
+                <view class="form-item">
+                    <view class="title">鎺ㄨ崘瀹屾垚鏃ユ湡:</view>
+                    <view class="right">
+                        <uni-datetime-picker type="date" :clear-icon="false" v-model="hform.HCommDate">
+                            <input :value="hform.HCommDate" />
+                        </uni-datetime-picker>
+                    </view>
+                </view>
+                <view class="form-item">
+                    <view class="title">鍙戦�侀儴闂�:</view>
+                    <zxz-uni-data-select class="right" :localdata="HDeptList" dataKey="閮ㄩ棬鍚嶇О" dataValue="HItemID"
+                        v-model="hform.HDeptID" :filterable="true">
+
+                    </zxz-uni-data-select>
+                    <!-- <input disabled v-model="hform.HDeptName" placeholder="璇烽�夋嫨閮ㄩ棬" /> -->
+                </view>
+                <view class="form-item">
+                    <view class="title">璇︾粏鍐呭:</view>
+                    <view class="right">
+                        <textarea v-model="hform.HDescription" placeholder="璇疯緭鍏ヨ缁嗗唴瀹�" />
+                    </view>
+                </view>
+                <view class="form-item">
+                    <view class="title">澶囨敞:</view>
+                    <view class="right">
+                        <textarea v-model="hform.HRemark" placeholder="璇疯緭鍏ュ娉�" />
+                    </view>
+                </view>
+
+            </view>
+        </template>
+        <!-- 鍏朵粬淇℃伅 -->
+        <template v-if="tabs == 2">
+            <view class="form" :style="{
+                height: containerHeight + 'px',
+                overflow: 'auto'
+            }">
+                <view class="form-item">
+                    <view class="title">鍒涘缓浜�:</view>
+                    <view class="righton">
+                        <input v-model="hform.HMaker" />
+                    </view>
+                </view>
+                <view class="form-item">
+                    <view class="title">鍒涘缓鏃ユ湡:</view>
+                    <view class="righton">
+                        <input v-model="hform.HMakeDate" />
+                    </view>
+                </view>
+                <view class="form-item">
+                    <view class="title">淇敼浜�:</view>
+                    <view class="righton">
+                        <input v-model="hform.HUpDater" />
+                    </view>
+                </view>
+                <view class="form-item">
+                    <view class="title">淇敼鏃ユ湡:</view>
+                    <view class="righton">
+                        <input v-model="hform.HUpDateDate" />
+                    </view>
+                </view>
+                <view class="form-item">
+                    <view class="title">瀹℃牳浜�:</view>
+                    <view class="righton">
+                        <input v-model="hform.HChecker" />
+                    </view>
+                </view>
+                <view class="form-item">
+                    <view class="title">瀹℃牳鏃堕棿:</view>
+                    <view class="righton">
+                        <input v-model="hform.HCheckDate" />
+                    </view>
+                </view>
+                <view class="form-item">
+                    <view class="title">浣滃簾浜�:</view>
+                    <view class="righton">
+                        <input v-model="hform.HDeleteMan" />
+                    </view>
+                </view>
+                <view class="form-item">
+                    <view class="title">浣滃簾鏃ユ湡:</view>
+                    <view class="righton">
+                        <input v-model="hform.HDeleteDate" />
+                    </view>
+                </view>
+            </view>
+
+        </template>
+        <!-- 鎿嶄綔鎸夐挳 -->
+        <view class="buttons" id="buttons">
+            <button class="btn-a" size="mini" @tap="submit">鎻愪氦</button>
+            <view style="flex: 1;"></view>
+            <button class="btn-a" size="mini" @tap="addNew">鏂板</button>
+            <button class="btn-c" size="mini" @tap="goBack">閫�鍑�</button>
+        </view>
+    </view>
+</template>
+
+<script>
+    import dayjs from "dayjs";
+    import {
+        CommonUtils
+    } from "@/utils/common";
+    import {
+        MpaasScan
+    } from "@/utils/mpaasScan.js"
+    import {
+        getUserInfo
+    } from "../../../utils/auth";
+    import {
+        getEmpList
+    } from "@/utils/BasicInfo.js"
+    export default {
+        name: 'OA_WorkLinkBill',
+        data() {
+            return {
+                tabs: 0,
+                HMainSourceBillType: "",
+                btnTop: 0,
+                tabsBottom: 0,
+                HModName: "OA_WorkLinkBill",
+                HBillType: '4501',
+                operationType: 1,
+                refSav: 'Add', // 鎵ц鎻愪氦鐨勬搷浣滅被鍨嬶紝涓巓perationType绫讳技
+                enableEdit: true,
+                uploadOptions: {},
+
+                HEmpList: [],
+                HDeptList: [],
+                HShiftsList: [],
+                HCheckFileList: [],
+                attachmentInfo: [],
+
+                hform: {
+                    HBarCode: "",
+                    HBillNo: "",
+                    HInterID: "",
+                    HEntryID: "",
+                    HDate: dayjs(new Date()).format("YYYY-MM-DD"),
+                    HContext: "",
+                    HSendMan: getUserInfo()["HEmpName"],
+                    HReceiveMan: "",
+                    HLevel: "鏅��",
+                    HSendType: "鍏叡",
+                    HCopyMan: "",
+                    HDescription: "",
+                    HRemark: "",
+                    HCommDate: "",
+                    HEvaluateStatusName: "",
+                    HEvaluateStatusID: "0",
+                    HRelationBillNo: "",
+                    HRelationInterID: "0",
+                    HRelationEntryID: "0",
+                    HRelationBillType: "",
+                    HDeptName: "",
+                    HDeptID: "0",
+                    HHasten: "0",
+                    HMaker: getUserInfo()['Czymc'],
+                    HMakeDate: dayjs(new Date()).format("YYYY-MM-DD"),
+                    HUpDater: "",
+                    HUpDateDate: "",
+                    HChecker: "",
+                    HCheckDate: "",
+                    HDeleteMan: "",
+                    HDeleteDate: "",
+                }
+            };
+        },
+        computed: {
+            containerHeight: {
+                get() {
+                    return this.btnTop - this.tabsBottom - 5
+                }
+            },
+            calcHLastResult: {
+                get() {
+                    if (this.HCheckFileList.length == 0) {
+                        return 'OK'
+                    } else {
+                        let okCount = this.HCheckFileList.reduce((acc, item) => {
+                            if (item.HMaintainResult) {
+                                return acc + 1
+                            }
+                            return acc
+                        }, 0)
+                        if (okCount == this.HCheckFileList.length) {
+                            return 'OK'
+                        }
+                        return 'NG'
+                    }
+                }
+            }
+
+        },
+        methods: {
+            // 鎶勯�佷汉淇敼
+            HCopyManChange(e) {
+                this.hform.HCopyMan = e.join(',')
+            },
+            ValidCheck() {
+                if (this.hform.HContext == "") {
+                    return {
+                        Message: "鏈綍鍏ヤ富棰橈紝璇峰厛褰曞叆涓婚!",
+                        state: false
+                    }
+                }
+                if (this.hform.HSendMan == "") {
+                    return {
+                        Message: "鏈綍鍏ヤ富棰橈紝璇峰厛褰曞叆涓婚!",
+                        state: false
+                    }
+                }
+                if (this.hform.HReceiveMan == "") {
+                    return {
+                        Message: "鏈�夋嫨鎺ユ敹浜猴紝璇峰厛閫夋嫨鎺ユ敹浜�!",
+                        state: false
+                    }
+                }
+                if (this.hform.HDeptID == 0) {
+                    return {
+                        Message: "鏈�夋嫨鍙戦�侀儴闂紝璇峰厛閫夋嫨鍙戦�侀儴闂�",
+                        state: false
+                    }
+                }
+
+                return {
+                    Message: "",
+                    state: true
+                }
+            },
+            addNew() {
+                uni.redirectTo({
+                    url: './OA_WorkLinkBill?operationType=1'
+                })
+            },
+            goBack() {
+                uni.navigateBack()
+            },
+            //鑾峰彇浣跨敤閮ㄩ棬鏁版嵁
+            async getHDeptList() {
+                try {
+                    let res = await CommonUtils.doRequest2Async({
+                        url: '/Gy_Department/list',
+                        data: {
+                            sWhere: "",
+                            user: uni.getStorageSync('HUserName'),
+                            Organization: uni.getStorageSync('Organization')
+                        }
+                    })
+
+                    let {
+                        data,
+                        count,
+                        Message
+                    } = res.data
+                    if (count == 1) {
+                        this.HDeptList = data
+                    } else {
+                        CommonUtils.showTips({
+                            title: '娓╅Θ鎻愮ず',
+                            message: Message
+                        })
+                    }
+                } catch (err) {
+                    CommonUtils.showTips({
+                        title: '娓╅Θ鎻愮ず',
+                        message: err
+                    })
+                }
+            },
+            async getMaxNum() {
+                try {
+                    let res = await CommonUtils.doRequest2Async({
+                        url: "/Web/GetMAXNum",
+                        data: {
+                            "HBillType": this.HBillType
+                        }
+                    })
+
+                    let {
+                        count,
+                        data,
+                        Message
+                    } = res.data
+                    console.log('data: ', data);
+                    this.hform.HInterID = 0
+                    this.hform.HBillNo = data[0]["HBillNo"]
+                } catch (err) {
+                    CommonUtils.showTips({
+                        title: "娓╅Θ鎻愮ず",
+                        message: "鑾峰彇鍗曟嵁淇℃伅寮傚父: " + err
+                    })
+                }
+            },
+            async submit() {
+                let valid = this.ValidCheck()
+                if (!valid.state) {
+                    return CommonUtils.showTips({
+                        message: valid.Message
+                    })
+                }
+
+                try {
+                    let oMain = JSON.stringify(this.hform);
+                    let sMainSub = oMain + ';' + getUserInfo()['Czymc'] + ';' + this.refSav;
+                    let res = await CommonUtils.doRequest2Sync({
+                        url: "/Sc_MESTransFerWorkBill/SaveOA_WorkLinkBill",
+                        data: {
+                            "msg": sMainSub
+                        },
+                        method: "POST"
+                    })
+
+                    if (!res) {
+                        return
+                    }
+
+                    let {
+                        count,
+                        Message
+                    } = res.data
+                    if (count == 1) {
+                        uni.showModal({
+                            title: '鎻愮ず',
+                            content: res.data.Message + '銆傛槸鍚︾户缁柊澧烇紵(鐐瑰嚮鍙栨秷杩斿洖涓婄骇椤甸潰)',
+                            success: (res) => {
+                                if (res.confirm) {
+                                    console.log('鐢ㄦ埛鐐瑰嚮纭畾');
+                                    uni.redirectTo({
+                                        url: './OA_WorkLinkBill?operationType=1'
+                                    })
+                                } else if (res.cancel) {
+                                    console.log('鐢ㄦ埛鐐瑰嚮鍙栨秷');
+                                    setTimeout(() => {
+                                        uni.navigateBack();
+                                    }, 50)
+                                }
+                            }
+                        });
+                    } else {
+                        CommonUtils.showTips({
+                            title: "娓╅Θ鎻愮ず",
+                            message: "鎻愪氦鍗曟嵁澶辫触: " + Message
+                        })
+                    }
+
+
+                } catch (err) {
+                    CommonUtils.showTips({
+                        title: "娓╅Θ鎻愮ず",
+                        message: "鎻愪氦鍗曟嵁澶辫触: " + err
+                    })
+                }
+            }
+        },
+        async onLoad(e) {
+            console.log('e: ', e);
+            if (!e.operationType) {
+                this.operationType = 1
+            } else {
+                this.operationType = e.operationType
+            }
+
+            if (this.operationType == 1) {
+                // 鏂板
+                this.getMaxNum()
+            } else if (this.operationType == 2) {
+                // 澶嶅埗
+            } else if (this.operationType == 3) {
+                // 缂栬緫
+
+            } else if (this.operationType == 4) {
+                // 娴忚
+
+            }
+            
+            this.getHDeptList()
+            try {
+                this.HEmpList = await getEmpList()
+            } catch (err) {
+
+            }
+
+        },
+        onReady() {
+            const query = uni.createSelectorQuery().in(this)
+            query.select("#buttons")
+                .boundingClientRect()
+                .select("#tabs")
+                .boundingClientRect()
+                .exec(res => {
+                    this.btnTop = Math.floor(res[0].top)
+                    this.tabsBottom = Math.ceil(res[1].bottom)
+                })
+        }
+    }
+</script>
+
+<style lang="scss" scoped>
+    @import "@/pages/ZLGL/style/MJBillStyle.scss"
+</style>
\ No newline at end of file
diff --git a/pages/ZLGL/OA_WorkLink/OA_WorkLinkBillList.vue b/pages/ZLGL/OA_WorkLink/OA_WorkLinkBillList.vue
new file mode 100644
index 0000000..b0356ab
--- /dev/null
+++ b/pages/ZLGL/OA_WorkLink/OA_WorkLinkBillList.vue
@@ -0,0 +1,483 @@
+<template>
+    <view class="content">
+        <view class="form">
+            <view class="form-item">
+                <view class="title">寮�濮嬫椂闂�:</view>
+                <view class="right">
+                    <uni-datetime-picker type="date" :clear-icon="false" v-model="hform.HBeginDate">
+                        <input :value="hform.HBeginDate" />
+                    </uni-datetime-picker>
+                </view>
+            </view>
+            <view class="form-item">
+                <view class="title">缁撴潫鏃堕棿:</view>
+                <view class="right">
+                    <uni-datetime-picker type="date" :clear-icon="false" v-model="hform.HEndDate">
+                        <input :value="hform.HEndDate" />
+                    </uni-datetime-picker>
+                </view>
+            </view>
+            <view v-if="showmore">
+                <view class="form-item">
+                    <view class="title">鍗曟嵁鍙�:</view>
+                    <view class="right">
+                        <input v-model="hform.HBillNo" placeholder="璇疯緭鍏ュ崟鎹彿" />
+                    </view>
+                </view>
+
+            </view>
+            <view class="other">
+                <view v-if="!showmore" @tap="changeShowMore">
+                    灞曞紑鍏朵粬鏉′欢<uni-icons color="#1890FF" style="margin-left: 8rpx;" type="bottom"></uni-icons>
+                </view>
+                <view v-if="showmore" @tap="changeShowMore">
+                    鎶樺彔鍏朵粬鏉′欢<uni-icons color="#1890FF" style="margin-left: 8rpx;" type="top"></uni-icons>
+                </view>
+            </view>
+
+            <view class="buttons">
+                <button class="btn-a" size="mini" type="default" @tap="clear">閲嶇疆</button>
+                <button class="btn-b" size="mini" type="default" @tap="add">鏂板</button>
+                <button class="btn-c" size="mini" type="default" @tap="search">鏌ヨ</button>
+            </view>
+        </view>
+
+        <view id="divide" style="width: 100%;height: 16rpx;background-color: #e5e5e5;"></view>
+        <view :style="{
+            height: calcContentHeight + 'px',
+            overflowY: 'auto'
+        }">
+            <view class="list" v-for="(item,index) in showList" :key="index" v-if="tabs==0">
+                <uni-card :title="item.鍒跺崟鏃ユ湡.substr(0,10)" :extra="item.鍗曟嵁鍙�" style="margin: 10px;"
+                    @tap="showDetail = showDetail==index?-1:index">
+                    <view class="card-detail">
+                        <view class="detail" v-if="item.涓婚">
+                            <text>涓婚锛�</text>{{item.涓婚}}
+                        </view>
+                        <view class="detail" v-if="item.绱ф�ョ▼搴�">
+                            <text>绱ф�ョ▼搴︼細</text>{{item.绱ф�ョ▼搴}
+                        </view>
+                        <view class="detail" v-if="item.鍙戦�佺被鍨�">
+                            <text>鍙戦�佺被鍨嬶細</text>{{item.鍙戦�佺被鍨媫}
+                        </view>
+                        <view class="detail" v-if="item.鍒跺崟浜�">
+                            <text>鍒跺崟浜猴細</text>{{item.鍒跺崟浜簘}
+                        </view>
+                        <view class="detail" v-if="item.闃呰鐘舵��">
+                            <text>闃呰鐘舵�侊細</text>{{item.闃呰鐘舵�亇}
+                        </view>
+                        <view class="detail" v-if="item.鍙戦�侀儴闂�">
+                            <text>鍙戦�侀儴闂細</text>{{item.鍙戦�侀儴闂▆}
+                        </view>
+                        <view class="detail" v-if="item.鍙戦�佷汉">
+                            <text>鍙戦�佷汉锛�</text>{{item.鍙戦�佷汉}}
+                        </view>
+                        <view class="detail" v-if="item.鎺ユ敹浜�">
+                            <text>鎺ユ敹浜猴細</text>{{item.鎺ユ敹浜簘}
+                        </view>
+                        <view class="detail" v-if="item.鎶勯�佹帴鏀朵汉">
+                            <text>鎶勯�佹帴鏀朵汉锛�</text>{{item.鎶勯�佹帴鏀朵汉}}
+                        </view>
+                        <view class="detail" v-if="item.鎵�鏈夋妱閫佷汉">
+                            <text>鎵�鏈夋妱閫佷汉锛�</text>{{item.鎵�鏈夋妱閫佷汉}}
+                        </view>
+                        <view class="card-detail" v-if="showDetail == index">
+                            <view class="detail" v-if="item.鍐呭">
+                                <text>鍐呭锛�</text>{{item.鍐呭}}
+                            </view>
+                            <view class="detail" v-if="item.琛ㄥご澶囨敞">
+                                <text>琛ㄥご澶囨敞锛�</text>{{item.琛ㄥご澶囨敞}}
+                            </view>
+                            <view class="detail" v-if="item.寤鸿瀹屾垚鏃ユ湡">
+                                <text>寤鸿瀹屾垚鏃ユ湡锛�</text>{{dayjs(item.寤鸿瀹屾垚鏃ユ湡).format("YYYY-MM-DD HH:mm:DD")}}
+                            </view>
+                            <view class="detail" v-if="item.鍌績娆℃暟">
+                                <text>鍌績娆℃暟锛�</text>{{item.鍌績娆℃暟}}
+                            </view>
+                            <view class="detail" v-if="item.hmainid">
+                                <text>鍐呴儴鍗曟嵁鍙凤細</text>{{item.hmainid}}
+                            </view>
+                        </view>
+                    </view>
+
+                    <view class="more" v-if="showDetail == index && operations != index">
+                        <view class="part" style="border-right: 1px solid #eee;">
+                            <uni-icons type="top" style="color: #888;margin-right: 10rpx;" size="14"></uni-icons>鏀惰捣
+                        </view>
+                        <view class="part" @tap.stop="operations = operations==index?-1:index">
+                            <uni-icons type="more-filled" style="color: #888;margin-right: 10rpx;"
+                                size="14"></uni-icons>鎿嶄綔
+                        </view>
+                    </view>
+                    <view class="more" v-if="showDetail != index && operations != index">
+                        <view class="part" style="border-right: 1px solid #eee;">
+                            <uni-icons type="bottom" style="color: #888;margin-right: 10rpx;" size="14"></uni-icons>鏇村淇℃伅
+                        </view>
+                        <view class="part" @tap.stop="operations = operations==index?-1:index">
+                            <uni-icons type="more-filled" style="color: #888;margin-right: 10rpx;"
+                                size="14"></uni-icons>鎿嶄綔
+                        </view>
+                    </view>
+                    <view class="op" v-if="operations == index">
+                        <!-- <button class="op3" size="mini" plain @tap.stop="edit(item)">缂栬緫</button> -->
+                        <!-- <button class="op4" size="mini" plain @tap.stop="del(item)">鍒犻櫎</button> -->
+                        <button class="op5" size="mini" plain @tap.stop="operations = -1">鍙栨秷鎿嶄綔</button>
+                    </view>
+                </uni-card>
+            </view>
+        </view>
+        <view class="pagination-zone" id="pagination-zone">
+            <uni-pagination show-icon :page-size="size" :total="dataLength" :current="page"
+                @change="onPaginationChangeHandler"></uni-pagination>
+        </view>
+        <BarCodePopupVue ref="barcodePopup"></BarCodePopupVue>
+    </view>
+</template>
+
+<script>
+    import {
+        getUserInfo
+    } from "@/utils/auth.js";
+    import BarCodePopupVue from "@/components/BarCodePopup/BarCodePopup.vue";
+    import {
+        CommonUtils
+    } from "../../../utils/common";
+    import dayjs from "dayjs";
+    export default {
+        data() {
+            return {
+                dayjs,
+                userInfo: getUserInfo(),
+                serverUrl: uni.getStorageSync('serverUrl') || 'http://47.96.97.237/API',
+                tabs: 0,
+                urls: '/Sc_MESTransFerWorkBill/GetOA_WorkLinkBillListPage',
+                MvarReportTitle: '璁惧缁翠慨娲惧伐鍗曠紦瀛�',
+                hform: {
+                    HBillNo: '',
+                    HSourceBillNo: '',
+                    HBillType: 3909,
+                    user: uni.getStorageSync('HUserName'),
+                    HStockOrgID: uni.getStorageSync('OrganizationID'),
+                    sWhere: "",
+                    HBeginDate: dayjs(new Date()).subtract(30, 'day').format("YYYY-MM-DD"),
+                    HEndDate: dayjs(new Date()).format("YYYY-MM-DD"),
+                },
+                sWhere: '',
+                listData: [],
+                showList: [],
+                showDetail: -1,
+                operations: -1,
+
+                page: 1,
+                size: 20,
+                dataLength: 0,
+                divideBottom: 0,
+                paginationTop: 0,
+                showmore: false,
+            }
+        },
+        computed: {
+            calcContentHeight: {
+                get() {
+                    return this.paginationTop - this.divideBottom
+                }
+            }
+        },
+        onShow() {
+            //鐢ㄦ埛妯″潡鏉冮檺鍒ゆ柇
+            this.CheckModRight()
+            this.changeTab(0)
+            console.log(this.userInfo, uni.getStorageSync('HUserName'))
+        },
+        components: {
+            BarCodePopupVue
+        },
+        onPullDownRefresh: function() {
+            this.clear()
+            setTimeout(() => {
+                uni.stopPullDownRefresh();
+            }, 1000);
+        },
+        onReady() {
+            this.getCalcHeight()
+        },
+        methods: {
+            changeShowMore() {
+                this.showmore = !this.showmore
+                this.$nextTick(() => {
+                    // 閲嶆柊璁$畻鍐呭瑙嗗彛楂樺害
+                    this.getCalcHeight()
+                })
+            },
+            getCalcHeight() {
+                let query = uni.createSelectorQuery().in(this)
+                query
+                    .select("#divide")
+                    .boundingClientRect()
+                    .select("#pagination-zone")
+                    .boundingClientRect()
+                    .exec(res => {
+                        this.divideBottom = Math.ceil(res[0].bottom)
+                        this.paginationTop = Math.floor(res[1].top)
+                    })
+            },
+            async qrCodeDisplay(item) {
+                this.$refs.barcodePopup.setCodeInfo(item.HBillNo)
+                await this.$nextTick()
+                this.$refs.barcodePopup.open()
+            },
+            CheckModRight() {
+                uni.request({
+                    url: this.serverUrl + '/WEBSController/CheckModRight_Json',
+                    data: {
+                        ModRightName: 'CE_OtherOut',
+                        HUserName: uni.getStorageSync('HUserName')
+                    },
+                    success: (res) => {
+                        if (res.data.count == 1) {} else {
+                            uni.showToast({
+                                title: res.data.Message,
+                                icon: 'none'
+                            })
+                        }
+                    },
+                    fail: (res) => {
+                        console.log(res);
+                        uni.showToast({
+                            title: '鎺ュ彛璇锋眰澶辫触',
+                            icon: 'none'
+                        })
+                    },
+                });
+            },
+            onPaginationChangeHandler({
+                current
+            }) {
+                this.page = current
+                // this.showList = this.getPage(current, this.size, this.listData)
+                this.getList()
+            },
+            getPage(page, size, list) {
+                let sindex = (parseInt(page) - 1) * size
+                let eindex = parseInt(page) * size
+                let newList = list.slice(sindex, eindex)
+                return newList
+            },
+            changeTab(e) {
+                this.tabs = e
+                this.page = 1
+                this.showList = []
+
+                if (this.tabs == 0) {
+                    this.urls = '/Sc_MESTransFerWorkBill/GetOA_WorkLinkBillListPage'
+                }
+                // if (this.tabs == 1) {
+                // 	this.urls = '/WEBSController/GetKf_ICStockBillQueryList_User_Json'
+                // }
+                this.search()
+            },
+            async getList() {
+                try {
+                    let res = await CommonUtils.doRequest2Async({
+                        url: this.urls,
+                        data: {
+                            sWhere: this.hform.sWhere,
+                            user: this.hform.user,
+                            page: this.page,
+                            size: this.size
+                        }
+                    })
+
+                    let {
+                        count,
+                        data,
+                        Message
+                    } = res.data
+
+                    if (count > 0) {
+                        if (data == null) {
+                            data = []
+                        }
+                        this.listData = data
+                        console.log('data: ', data);
+                        this.showList = data
+                        this.dataLength = count
+                    } else {
+                        CommonUtils.showTips({
+                            title: "娓╅Θ鎻愮ず",
+                            message: `鑾峰彇璁惧鐐规璁板綍鍗曞け璐�: ${Message}`
+                        })
+                    }
+                } catch (err) {
+                    CommonUtils.showTips({
+                        title: "娓╅Θ鎻愮ず",
+                        message: `鑾峰彇璁惧鐐规璁板綍鍗曞け璐�: ${err}`
+                    })
+                }
+
+            },
+            search() {
+                this.hform.sWhere = ''
+                this.listData = []
+                this.page = 1
+                this.showList = []
+
+                console.log(this.hform)
+                if (this.hform.HBillNo) {
+                    this.hform.sWhere += " and 鍗曟嵁鍙� like '%" + this.hform.HBillNo + "%'";
+                }
+                if (this.hform.HBeginDate && this.hform.HEndDate) {
+                    this.hform.sWhere +=
+                        ` and convert(date,鏃ユ湡) between convert(date, '${this.hform.HBeginDate}') and convert(date, '${this.hform.HEndDate}')`;
+                }
+                this.getList()
+            },
+            clear() {
+                this.listData = []
+                this.page = 1
+                this.showList = []
+
+                this.sWhere = ''
+                this.hform = {
+                    HBillNo: '',
+                    HSourceBillNo: '',
+                    HBillType: 3909,
+                    user: uni.getStorageSync('HUserName'),
+                    HStockOrgID: uni.getStorageSync('OrganizationID'),
+                    sWhere: "",
+                    HBeginDate: dayjs(new Date()).subtract(30, 'day').format("YYYY-MM-DD"),
+                    HEndDate: dayjs(new Date()).format("YYYY-MM-DD"),
+                }
+                this.search()
+            },
+            add() {
+                uni.navigateTo({
+                    url: '/pages/ZLGL/OA_WorkLink/OA_WorkLinkBill?operationType=1'
+                })
+            },
+            //缂栬緫
+            edit(item) {
+                console.log(item)
+                uni.request({
+                    url: this.serverUrl + '/WEBSController/TempList_Modify_Json',
+                    data: {
+                        "HInterID": item.HInterID,
+                        "HBillNo": item.鍗曟嵁鍙�,
+                        "HBillType": this.hform.HBillType
+                    },
+                    success: (res) => {
+                        console.log(1, res);
+                        if (res.data.count == 1) {
+                            uni.navigateTo({
+                                url: './OtherOutBill?OperationType=2&HInterID=' + item.HInterID
+                            })
+                        } else {
+                            uni.showToast({
+                                title: res.data.Message,
+                                icon: 'none'
+                            })
+                        }
+
+                    },
+                    fail: (res) => {
+                        console.log(res);
+                        uni.hideLoading()
+                        uni.showToast({
+                            title: '鎺ュ彛璇锋眰澶辫触',
+                            icon: 'none'
+                        })
+                    },
+                })
+            },
+            //鍒犻櫎
+            del(item) {
+                // console.log(item.hmainid,uni.getStorageSync('HUserName'))
+                uni.showModal({
+                    title: '鎻愮ず',
+                    content: '纭瑕佸垹闄よ褰曪紵鍒犻櫎鍚庝笉鑳芥仮澶�',
+                    success: (res) => {
+                        if (res.confirm) {
+                            console.log('鐢ㄦ埛鐐瑰嚮纭畾');
+                            uni.request({
+                                url: this.serverUrl +
+                                    '/Sb_EquipRepairSendWorkBill/DeleteWorkBill',
+                                data: {
+                                    HInterID: item.hmainid,
+                                    user: uni.getStorageSync('HUserName'),
+                                },
+                                success: (res) => {
+                                    console.log(1, res);
+                                    if (res.data.count == 1) {
+                                        this.clear()
+                                    }
+                                    uni.showToast({
+                                        title: res.data.Message,
+                                        icon: 'none'
+                                    })
+                                },
+                                fail: (res) => {
+                                    console.log(res);
+                                    uni.hideLoading()
+                                    uni.showToast({
+                                        title: '鎺ュ彛璇锋眰澶辫触',
+                                        icon: 'none'
+                                    })
+                                },
+                            });
+                        } else if (res.cancel) {
+                            console.log('鐢ㄦ埛鐐瑰嚮鍙栨秷');
+                        }
+                    }
+                });
+            },
+            //鎾ら攢
+            revoke(item) {
+                // console.log(item.hmainid,uni.getStorageSync('HUserName'))
+                uni.showModal({
+                    title: '鎻愮ず',
+                    content: '鏄惁纭鎾ら攢',
+                    success: (res) => {
+                        if (res.confirm) {
+                            console.log('鐢ㄦ埛鐐瑰嚮纭畾');
+                            uni.request({
+                                url: this.serverUrl +
+                                    '/WEBSController/set_DeleteICStockBillAndWMS_Json',
+                                data: {
+                                    HInterID: item.HInterID,
+                                    HBillNo: item.鍗曟嵁鍙�,
+                                    HBillType: this.hform.HBillType,
+                                    HMaker: uni.getStorageSync('HUserName'),
+                                    MvarReportTitle: this.MvarReportTitle,
+                                },
+                                success: (res) => {
+                                    console.log(1, res);
+                                    if (res.data.count == 1) {
+                                        this.clear()
+                                    }
+                                    uni.showToast({
+                                        title: res.data.Message,
+                                        icon: 'none'
+                                    })
+                                },
+                                fail: (res) => {
+                                    console.log(res);
+                                    uni.hideLoading()
+                                    uni.showToast({
+                                        title: '鎺ュ彛璇锋眰澶辫触',
+                                        icon: 'none'
+                                    })
+                                },
+                            });
+                        } else if (res.cancel) {
+                            console.log('鐢ㄦ埛鐐瑰嚮鍙栨秷');
+                        }
+                    }
+                });
+            },
+        }
+    }
+</script>
+
+<style lang="scss" scoped>
+    @import "@/pages/ZLGL/style/MJListStyle.scss"
+</style>
\ No newline at end of file
diff --git a/pages/ZLGL/style/MJBillStyle.scss b/pages/ZLGL/style/MJBillStyle.scss
new file mode 100644
index 0000000..21ebdbb
--- /dev/null
+++ b/pages/ZLGL/style/MJBillStyle.scss
@@ -0,0 +1,310 @@
+.buttons {
+    box-sizing: border-box;
+    width: 100%;
+    height: 120rpx;
+    position: fixed;
+    bottom: 0;
+    left: 0;
+    background-color: #fff;
+    box-shadow: 0 2rpx 10rpx 2rpx rgba(0, 0, 0, 0.4);
+    padding: 30rpx 40rpx 40rpx 40rpx;
+    display: flex;
+    flex-direction: row;
+    gap: 10rpx;
+    button {
+        border-radius: 50rpx;
+        width: 180rpx;
+        height: 66rpx;
+        line-height: 66rpx;
+        font-size: 28rpx;
+    }
+    .btn-a {
+        background-color: #3a78ff;
+        color: #fff;
+    }
+    .btn-b {
+        background-color: #41a863;
+        color: #fff;
+    }
+    .btn-c {
+        background-color: #acacac;
+        color: #fff;
+        // position: absolute;
+        // right: 120rpx;
+    }
+    .btn-d {
+        background-color: #ff8901;
+        color: #fff;
+    }
+    .placeholder-view {
+        flex: 1;
+    }
+}
+
+.tabs {
+    width: 100%;
+    display: flex;
+    border-bottom: 1px solid #ddd;
+
+    view {
+        width: 25%;
+        font-size: 30rpx;
+        color: #555;
+        text-align: center;
+        padding: 16rpx 0;
+    }
+
+    .on {
+        color: #3a78ff;
+        font-weight: bold;
+        border-bottom: 3px solid #3a78ff;
+    }
+}
+
+.form {
+    display: flex;
+    flex-direction: column;
+    gap: 10rpx;
+    box-sizing: border-box;
+    padding: 20rpx 40rpx;
+}
+
+.form-item {
+    display: flex;
+    align-items: center;
+    font-size: 30rpx;
+    padding: 6rpx 0;
+    gap: 12rpx;
+
+    .title {
+        width: 208rpx;
+        flex-shrink: 0;
+
+        text {
+            color: red;
+            font-weight: bold;
+        }
+    }
+    
+    .required::after{
+          content: "*";
+          color: red;
+          margin-left: 4px; 
+          font-weight: bold;
+    }
+    
+    .right {
+        // width: 450rpx;
+        flex: 1;
+        border-radius: 22rpx;
+        border: 1px solid #acacac;
+        position: relative;
+        display: flex;
+
+        picker {
+            width: 100%;
+        }
+
+        .uni-combox {
+            width: 100%
+        }
+    }
+
+    .righton {
+        width: 450rpx;
+        border-radius: 22rpx;
+        border: 1px solid #e4e4e4;
+        background-color: #e4e4e4;
+    }
+
+    input {
+        width: 100%;
+        padding: 8rpx 20rpx;
+        font-size: 30rpx;
+    }
+
+    textarea {
+        width: 98%;
+        height: 6em;
+        padding: 8rpx 20rpx;
+        font-size: 30rpx;
+    }
+
+    .icon-wrapper {
+        background-color: #3A78FF;
+        width: 52rpx;
+        height: 52rpx;
+        border-radius: 100%;
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        flex-shrink: 0;
+
+        .uni-icons {
+            color: #fff !important;
+        }
+    }
+
+    .icon-wrapper[disabled] {
+        background-color: rgba(228, 228, 228, 1);
+        pointer-events: none;
+        touch-action: none;
+    }
+
+}
+
+.none-border {
+    border: none !important;
+}
+
+.radio_Container {
+    display: flex;
+    flex-direction: row;
+    gap: 30rpx;
+}
+
+ .list {
+        width: 100%;
+
+        .card-detail {
+            width: 100%;
+            display: flex;
+            flex-wrap: wrap;
+            justify-content: space-between;
+            line-height: 120%;
+
+            .detail {
+                // width: 50%;
+                font-size: 26rpx;
+                margin-bottom: 12rpx;
+                color: #555;
+                margin-right: 20rpx;
+
+                text {
+                    color: #999;
+                    font-size: 26rpx;
+                }
+            }
+        }
+
+        .more {
+            color: #888;
+            font-size: 24rpx;
+            display: flex;
+            border-top: 1px solid #eee;
+            padding-top: 20rpx;
+
+            .part {
+                width: 50%;
+                text-align: center;
+            }
+        }
+    }
+    
+.card-item-wrapper {
+        display: flex;
+        flex-direction: column;
+        justify-content: center;
+        box-sizing: border-box;
+        padding: 20rpx 20rpx;
+
+        .card-detail {
+            width: 100%;
+            display: flex;
+            flex-wrap: wrap;
+            justify-content: space-between;
+            line-height: 120%;
+
+            .detail {
+                // width: 50%;
+                font-size: 26rpx;
+                margin-bottom: 12rpx;
+                color: #555;
+                margin-right: 20rpx;
+
+                text {
+                    color: #999;
+                    font-size: 26rpx;
+                }
+            }
+
+            .operation {
+                display: flex;
+                align-items: center;
+                gap: 10rpx;
+
+                .btn-a {
+                    background-color: #3A78FF;
+                    color: #fff;
+                }
+
+                .btn-b {
+                    background-color: rgb(255, 87, 34);
+                    color: #fff;
+                }
+
+                uni-button {}
+            }
+
+        }
+
+        .more {
+            color: #888;
+            font-size: 24rpx;
+            display: flex;
+            border-top: 1px solid #eee;
+            padding-top: 20rpx;
+
+            .part {
+                width: 50%;
+                text-align: center;
+            }
+        }
+    }
+
+    .attachment-btns {
+        display: flex;
+        flex-direction: row;
+        justify-content: flex-start;
+        gap: 6rpx;
+
+    }
+    
+    .card-buttons {
+        padding: 8rpx;
+        display: flex;
+        flex-direction: row;
+        gap: 20rpx;
+        justify-content: center;
+        align-items: flex-start;
+        
+        button {
+            border-radius: 10rpx;
+            width: 180rpx;
+            height: 66rpx;
+            line-height: 66rpx;
+            font-size: 28rpx;
+        }
+        .btn-a {
+            background-color: #3a78ff;
+            color: #fff;
+        }
+        .btn-b {
+            background-color: #41a863;
+            color: #fff;
+        }
+        .btn-c {
+            background-color: #acacac;
+            color: #fff;
+            // position: absolute;
+            // right: 120rpx;
+        }
+        .btn-d {
+            background-color: #ff8901;
+            color: #fff;
+        }
+        
+        .placeholder {
+            flex: 1
+        }
+    }
\ No newline at end of file
diff --git a/pages/ZLGL/style/MJListStyle.scss b/pages/ZLGL/style/MJListStyle.scss
new file mode 100644
index 0000000..f27e690
--- /dev/null
+++ b/pages/ZLGL/style/MJListStyle.scss
@@ -0,0 +1,193 @@
+	.form {
+		padding: 20rpx;
+        width: 100%;
+        display: flex;
+        flex-direction: column;
+        align-items: center;
+	}
+    
+    .other {
+    	margin-top: 8rpx;
+    	text-align: center;
+    	font-size: 28rpx;
+    	padding: 4rpx 18rpx;
+    	color: #1890FF;
+    }
+
+	.tabs {
+		width: 100%;
+		position: fixed;
+		left: 0;
+		z-index: 9;
+		display: flex;
+		background-color: #e5e5e5;
+
+		view {
+			width: 50%;
+			font-size: 30rpx;
+			color: #333;
+			text-align: center;
+			padding: 16rpx 0;
+		}
+
+		.on {
+			color: #3a78ff;
+			font-weight: bold;
+			border-bottom: 3px solid #3a78ff;
+		}
+	}
+
+	.buttons {
+		width: 100%;
+		display: flex;
+		justify-content: center;
+		margin-top: 20rpx;
+
+		button {
+			border-radius: 50rpx;
+			width: 180rpx;
+			height: 66rpx;
+			line-height: 66rpx;
+			font-size: 28rpx;
+		}
+
+		.btn-a {
+			background-color: #acacac;
+			color: #fff;
+		}
+
+		.btn-b {
+			background-color: #41a863;
+			color: #fff;
+		}
+
+		.btn-c {
+			background-color: #3a78ff;
+			color: #fff;
+		}
+	}
+
+	.form-item {
+		display: flex;
+		align-items: center;
+		font-size: 28rpx;
+		padding: 6rpx 0;
+
+		.title {
+			width: 180rpx;
+
+			text {
+				color: red;
+				font-weight: bold;
+			}
+		}
+
+		.right {
+			width: 450rpx;
+			border-radius: 22rpx;
+			border: 1px solid #acacac;
+		}
+
+		.righton {
+			width: 450rpx;
+			border-radius: 22rpx;
+			border: 1px solid #e4e4e4;
+			background-color: #e4e4e4;
+		}
+
+		input {
+			width: 100%;
+			padding: 8rpx 20rpx;
+			font-size: 30rpx;
+		}
+	}
+
+	.list {
+		width: 100%;
+
+		.card-detail {
+			width: 100%;
+			display: flex;
+			flex-wrap: wrap;
+			justify-content: space-between;
+			line-height: 120%;
+
+			.detail {
+				// width: 50%;
+				font-size: 26rpx;
+				color: #555;
+                padding-bottom: 20rpx;
+
+				text {
+					color: #999;
+					font-size: 26rpx;
+				}
+			}
+		}
+
+		.more {
+			color: #888;
+			font-size: 26rpx;
+			display: flex;
+			border-top: 1px solid #eee;
+			padding-top: 20rpx;
+
+			.part {
+				width: 50%;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+			}
+		}
+        
+        .op {
+            display: flex;
+            justify-content: space-around;
+            margin-top: 20rpx;
+        
+            button {
+                padding: 0;
+                width: 150rpx;
+                font-size: 25rpx;
+            }
+        
+            .op1 {
+                border: 1px solid #41a863;
+                color: #41a863;
+            }
+        
+            .op2 {
+                border: 1px solid #d98d00;
+                color: #d98d00;
+            }
+        
+            .op3 {
+                border: 1px solid #3a78ff;
+                color: #3a78ff;
+            }
+        
+            .op4 {
+                border: 1px solid #da0000;
+                color: #da0000;
+            }
+        
+            .op5 {
+                border: 1px solid #888;
+                color: #888;
+            }
+        }
+	}
+    
+    .pagination-zone {
+        position: fixed;
+        bottom: 0;
+        box-sizing: border-box;
+        background-color: #fff;
+        box-shadow: 0 2rpx 10rpx 2rpx rgba(0, 0, 0, 0.4);
+        padding: 20rpx 40rpx 20rpx 40rpx;
+        display: flex;
+        flex-direction: column;
+        gap: 20rpx;
+        justify-content: space-between;
+        width: 100%;
+    }
\ No newline at end of file
diff --git a/pages/index/login.vue b/pages/index/login.vue
index decaaab..615cdc6 100644
--- a/pages/index/login.vue
+++ b/pages/index/login.vue
@@ -81,7 +81,8 @@
     import {
         CommonUtils
     } from "../../utils/common";
-import { getLanguagePackJson } from "../../utils/i18n";
+    import { getLanguagePackJson } from "../../utils/i18n";
+    import WebSocketServices from "../../utils/WebSocketServices";
     export default {
         components: {
             hFormAlert
@@ -91,6 +92,7 @@
         },
         data() {
             return {
+                WebSocketServices,
                 CommonUtils,
                 arrayDataBases: [],
                 DataBases: '',
@@ -115,7 +117,8 @@
                     "瀹佹尝鍥涚淮灏�-鍐呯綉": "http://192.168.0.236:9010/API/",
                     "瀹佹尝鍥涚淮灏�-澶栫綉": "http://220.189.218.155:9010/API/",
                     // 閿﹂殕
-                    "閿﹂殕-鏅鸿兘瀹跺眳": "http://192.168.1.11/API/"
+                    "閿﹂殕-鏅鸿兘瀹跺眳": "http://192.168.1.11/API/",
+                    "閿﹂殕-鏅鸿兘瀹跺眳-澶栫綉": "http://61.174.29.234:8880/API/"
                 },
                 serverUrlName: '娴欐睙鏅轰簯杩堟��',
 
@@ -328,6 +331,7 @@
 								uni.setStorageSync('HSecManagerID', res.data.data[0].HSecManagerID); //瀵瑰簲楠屾敹
 								uni.setStorageSync('HSecManagerName', res.data.data[0].HSecManagerName);
                                 this.CommonUtils.setServerUrl(this.serverUrl)
+                                // this.WebSocketServices.createConnect(res.data.data[0].Czybm)
                                 uni.reLaunch({
                                     url: '/pages/index/index'
                                 })
diff --git a/pages/index/tab4.vue b/pages/index/tab4.vue
index 85dbe89..0ccf50b 100644
--- a/pages/index/tab4.vue
+++ b/pages/index/tab4.vue
@@ -154,6 +154,20 @@
                     	"id": 15,
                     	"hidden": false
                     },
+                    {
+                    	"img": "../../static/icon/icon15.png",
+                    	"text": "宸ヤ綔鑱旂郴鍗�",
+                    	"url": "/pages/ZLGL/OA_WorkLink/OA_WorkLinkBill?OperationType=1",
+                    	"id": 16,
+                    	"hidden": false
+                    },
+                    {
+                    	"img": "../../static/icon/icon15.png",
+                    	"text": "宸ヤ綔鑱旂郴鍗曞垪琛�",
+                    	"url": "/pages/ZLGL/OA_WorkLink/OA_WorkLinkBillList?OperationType=1",
+                    	"id": 16,
+                    	"hidden": false
+                    },
 
 				]
 			}
diff --git a/utils/BasicInfo.js b/utils/BasicInfo.js
new file mode 100644
index 0000000..1d6863b
--- /dev/null
+++ b/utils/BasicInfo.js
@@ -0,0 +1,37 @@
+import { CommonUtils } from "./common"
+
+export async function getEmpList() {
+    return new Promise(async (resolve, reject) => {
+        // 鑾峰彇鑱屽憳鏁版嵁
+        try {
+            let res = await CommonUtils.doRequest2Async({
+                url: '/PublicPageMethod/UserList',
+                data: {
+                    sWhere: " where 1=1",
+                }
+            })
+        
+            let {
+                data,
+                count,
+                Message
+            } = res.data
+            if (count == 1) {
+                resolve(data)
+            } else {
+                CommonUtils.showTips({
+                    title: '娓╅Θ鎻愮ず',
+                    message: Message
+                })
+                reject()
+                
+            }
+        } catch (err) {
+            CommonUtils.showTips({
+                title: '娓╅Θ鎻愮ず',
+                message: err
+            })
+            reject()
+        }
+    })   
+}
\ No newline at end of file
diff --git a/utils/WebSocketServices.js b/utils/WebSocketServices.js
new file mode 100644
index 0000000..4a86605
--- /dev/null
+++ b/utils/WebSocketServices.js
@@ -0,0 +1,65 @@
+import { CommonUtils } from "@/utils/common.js";
+
+class WebSocketServices {
+    constructor() {
+        this.wsInstance = null; // WebSocket 瀹炰緥
+        this.isConnecting = false; // 閬垮厤骞跺彂閲嶈繛
+        this.isConnected = false; // 閬垮厤骞跺彂閲嶈繛
+        this.wsUrl = CommonUtils.httpFormatWs() 
+    }
+    
+    // 寤虹珛WebSocket杩炴帴
+    createConnect(userId) { // 浣跨敤鐢ㄦ埛鏍囪瘑 浣滀负鍚庣杩炴帴鐨勫嚟鎹�
+       
+        if(this.isConnecting || !userId || this.isConnected) {
+            return
+        }
+        console.log('wsUrl: ',this.wsUrl);
+        console.log('userId: ',userId);
+        this.wsInstance = uni.connectSocket({
+            url: this.wsUrl,
+            header: {
+                "X-User-Id": userId
+            },
+            success() {
+                this.isConnecting = true
+            }
+        })
+        
+        // 鐩戝惉濂楁帴瀛楄繛鎺ュ缓绔�
+        uni.onSocketOpen((res) => {
+            console.log('[webSocket]: 濂楁帴瀛楄繛鎺ュ缓绔嬫垚鍔�');
+            this.isConnecting = false
+            this.isConnected = true
+            console.log('res: ',res);
+            this.wsInstance = res.socketTask
+        })
+    }
+
+    // 閲嶈繛
+    reConnect(reCount = 1, limit = 3) {
+        if(reCount > limit) {
+            uni.showToast({
+                icon: 'none',
+                title: `瓒呭嚭鏈�澶ч噸杩炴鏁般�傚凡閫�鍑鸿繛鎺
+            })
+            this.isConnecting = false
+            return
+        }
+        uni.showToast({
+            icon: 'none',
+            title: `姝e湪灏濊瘯閲嶈繛锛岄噸杩炴鏁� ${reCount}`
+        })
+        
+        reConnect(reCount+1, limit)
+        
+        uni.hideToast()
+    }
+
+    // 杩炴帴娉ㄩ攢
+    disConnect() {
+
+    }
+}
+
+export default new WebSocketServices()
\ No newline at end of file
diff --git a/utils/common.js b/utils/common.js
index 2002e39..77074ff 100644
--- a/utils/common.js
+++ b/utils/common.js
@@ -494,6 +494,21 @@
             return item[e.ColmCols]
         })
     }
+    
+    httpFormatWs(httpUrl=this.serverUrl) {
+        console.log('httpUrl: ',httpUrl);
+        if(httpUrl.indexOf("http://") === 0){
+            httpUrl = httpUrl.replace("http://", "")
+            httpUrl = "ws://" + httpUrl.split(":")[0]+":18080/WS"
+        }else if(httpUrl.indexOf("https://") === 0) {
+            httpUrl = httpUrl.replace("https://", "")
+            httpUrl = "wss://" + httpUrl.split(":")[0]+":18080/WS"
+        }else{
+            // 鎻愮ず浼犲叆杩炴帴閿欒
+        }
+        
+        return httpUrl
+    }
 }
 
 export const CommonUtils = new commonUtils()
\ No newline at end of file

--
Gitblit v1.9.1