From 5cf009d5ee7cd782a360848d5c2d7b71aec4d8af Mon Sep 17 00:00:00 2001
From: loulijun2021 <1694218219@qq.com>
Date: 星期三, 19 七月 2023 11:07:55 +0800
Subject: [PATCH] 1.接入signalR 消息推送功能

---
 src/views/purchasesManager/goodsStatisticsList.vue |  123 ++++--
 src/main.js                                        |    3 
 src/layout/components/Navbar.vue                   |   26 +
 src/views/purchasesManager/InventoryLedgerList.vue |    3 
 package.json                                       |    2 
 src/settings.js                                    |    4 
 src/layout/components/Sidebar/index.vue            |    2 
 src/utils/signalR.js                               |   36 ++
 src/store/modules/settings.js                      |    4 
 src/views/purchasesManager/salesStatisticsList.vue |  788 ++++------------------------------------------
 10 files changed, 227 insertions(+), 764 deletions(-)

diff --git a/package.json b/package.json
index edd9c99..cdcf9ff 100644
--- a/package.json
+++ b/package.json
@@ -14,6 +14,7 @@
     "test:ci": "npm run lint && npm run test:unit"
   },
   "dependencies": {
+    "@microsoft/signalr": "^7.0.9",
     "axios": "0.18.1",
     "core-js": "3.6.5",
     "cronstrue": "^2.28.0",
@@ -41,6 +42,7 @@
     "vuedraggable": "^2.24.3"
   },
   "devDependencies": {
+    "@aspnet/signalr": "^1.0.27",
     "@vue/cli-plugin-babel": "4.4.4",
     "@vue/cli-plugin-eslint": "4.4.4",
     "@vue/cli-plugin-unit-jest": "4.4.4",
diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
index e504d48..41a17d2 100644
--- a/src/layout/components/Navbar.vue
+++ b/src/layout/components/Navbar.vue
@@ -64,6 +64,13 @@
           <el-tooltip class="item" effect="dark" content="鍏ㄥ睆" placement="bottom">
             <screenfull id="screenfull" class="right-menu-item hover-effect" />
           </el-tooltip>
+
+          <el-tooltip class="item" effect="dark" content="鎴戠殑娑堟伅" placement="bottom">
+            <el-badge :is-dot="$store.state.settings.isDot" class="item right-menu-item hover-effect">
+              <i class="el-icon-bell" @click="$message('鐐瑰嚮浜嗘垜鐨勬秷鎭紒');$store.state.settings.isDot=false" />
+            </el-badge>
+          </el-tooltip>
+
           <div style=" font-size: 18px;font-family: 'Microsoft YaHei';color:#AAAAAA;padding:0 8px;cursor: pointer">
             {{ stu_torgname }}
           </div>
@@ -228,6 +235,18 @@
     this.username = getCookie('username')
     this.stu_torgname = getCookie('stu_torgname') === '' ? '绯荤粺绠$悊鍛�' : getCookie('stu_torgname')
   },
+  mounted() {
+    this.$signalr.off('SendAll')
+    this.$signalr.on('SendAll', (res) => {
+      this.$notify({
+        offset: 80,
+        type: 'warning',
+        title: '娑堟伅鎻愰啋',
+        message: res
+      })
+      this.$store.state.settings.isDot = true
+    })
+  },
   computed: {
     ...mapGetters([
       'sidebar',
@@ -285,6 +304,7 @@
       this.$store.dispatch('app/toggleSideBar')
     },
     async logout() {
+      this.$signalr.off('SendAll')
       await this.$store.dispatch('user/logout')
       this.$message.success('閫�鍑烘垚鍔燂紒')
       this.$router.push(`/login`)
@@ -322,6 +342,12 @@
 }
 </script>
 <style lang="scss" scoped>
+::v-deep .el-badge__content {
+  position: absolute !important;
+  top: 12px !important;
+  right: 10px !important;
+}
+
 .display_btw {
   display: flex;
   justify-content: space-between;
diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue
index 24a9fe1..acd2ac3 100644
--- a/src/layout/components/Sidebar/index.vue
+++ b/src/layout/components/Sidebar/index.vue
@@ -42,7 +42,7 @@
     <div v-if="!$store.state.settings.menuIsHorizontal" style="position: absolute;bottom: 20px;left: 30px;">
       <div>
         <el-button v-if="$store.state.app.sidebar.opened" type="text" style="font-size: 14px;cursor: pointer">
-          鏂板嚡杩埗閫燰1.6.52
+          鏂板嚡杩埗閫燰1.6.53
         </el-button>
         <!--        <el-button type="text"><a href="http://www.ykxkd.com/" target="_blank">鏂板嚡杩埗閫燰1.0.01</a></el-button>-->
       </div>
diff --git a/src/main.js b/src/main.js
index 0754da0..81f0498 100644
--- a/src/main.js
+++ b/src/main.js
@@ -70,6 +70,9 @@
 // 寮曠敤淇敼杩囩殑gantt
 Vue.use(vGanttChart)
 
+import signalr from './utils/signalR'
+Vue.prototype.$signalr = signalr.signal
+
 import { setCookie } from '@/utils/auth' // 寮曠敤淇敼杩囩殑gantt
 // 鍒ゆ柇鏄惁璧板師骞冲彴杩囨潵
 if (window.location.hash.indexOf('guid') !== -1) {
diff --git a/src/settings.js b/src/settings.js
index 36efd85..f444e6f 100644
--- a/src/settings.js
+++ b/src/settings.js
@@ -34,6 +34,8 @@
 
   animationType: 'fade-transform', // 鍔ㄧ敾绫诲瀷     鍒濆绫诲瀷:fade-transform
 
-  orgType: ''// 缁勭粐绫诲瀷  D 閮ㄩ棬   W 杞﹂棿  '' 绠$悊鍛�
+  orgType: '', // 缁勭粐绫诲瀷  D 閮ㄩ棬   W 杞﹂棿  '' 绠$悊鍛�
+
+  isDot: false// 鎴戠殑娑堟伅鍙充笂瑙掑皬绾㈢偣  true 鏄剧ず   false 闅愯棌
 
 }
diff --git a/src/store/modules/settings.js b/src/store/modules/settings.js
index bc708b8..717708c 100644
--- a/src/store/modules/settings.js
+++ b/src/store/modules/settings.js
@@ -9,7 +9,8 @@
   headBackgroundColorValue,
   menuIsHorizontal,
   leftBackgroundColorValue,
-  animationType
+  animationType,
+  isDot
 } = defaultSettings
 
 const state = {
@@ -17,6 +18,7 @@
   leftBackgroundColorValue: leftBackgroundColorValue, // 宸﹁竟鑳屾櫙棰滆壊
   headBackgroundColorValue: headBackgroundColorValue, // 澶撮儴鑳屾櫙棰滆壊
   menuIsHorizontal: menuIsHorizontal, // 鑿滃崟鏄惁鏄í灞�
+  isDot: isDot,
   theme: variables.theme,
   showSettings: showSettings,
   fixedHeader: fixedHeader,
diff --git a/src/utils/signalR.js b/src/utils/signalR.js
new file mode 100644
index 0000000..11180bf
--- /dev/null
+++ b/src/utils/signalR.js
@@ -0,0 +1,36 @@
+import * as signalR from '@aspnet/signalr'
+
+const url = 'http://121.196.36.24:8019/chatHub'
+const signal = new signalR.HubConnectionBuilder()
+  .withUrl(url, {
+    // skipNegotiation: true,
+    // transport: signalR.HttpTransportType.WebSockets
+  })
+  .configureLogging(signalR.LogLevel.Information)
+  .build()
+// signal.on('SendAll', (res) => {
+//   console.log(res, '鏀跺埌娑堟伅浜�')
+// })
+signal.start().then(() => {
+  if (window.Notification) {
+    if (Notification.permission === 'granted') {
+      console.log('鍏佽閫氱煡')
+    } else if (Notification.permission !== 'denied') {
+      console.log('闇�瑕侀�氱煡鏉冮檺')
+      Notification.requestPermission((permission) => {
+        console.log('鏉冮檺閫氱煡', permission)
+      })
+    } else if (Notification.permission === 'denied') {
+      console.log('鎷掔粷閫氱煡')
+    }
+  } else {
+    console.error('娴忚鍣ㄤ笉鏀寔Notification')
+  }
+  console.log('杩炴帴鎴愬姛')
+})
+// signal.onclose((err) => {
+//   console.log('杩炴帴宸茬粡鏂紑 鎵ц鍑芥暟onclose', err)
+// })
+export default {
+  signal
+}
diff --git a/src/views/purchasesManager/InventoryLedgerList.vue b/src/views/purchasesManager/InventoryLedgerList.vue
index e62c5d9..c7af705 100644
--- a/src/views/purchasesManager/InventoryLedgerList.vue
+++ b/src/views/purchasesManager/InventoryLedgerList.vue
@@ -410,6 +410,7 @@
 
       },
       dialogVisible2: false,
+      OrgTypeArrxx: [],
       recordData: []// 鏌ョ湅璁板綍鏁扮粍
 
     }
@@ -637,7 +638,7 @@
 
 ::v-deep .pop_btn {
   .el-button--primary {
-  float: right;
+    float: right;
   }
 }
 
diff --git a/src/views/purchasesManager/goodsStatisticsList.vue b/src/views/purchasesManager/goodsStatisticsList.vue
index d89f627..8cd0464 100644
--- a/src/views/purchasesManager/goodsStatisticsList.vue
+++ b/src/views/purchasesManager/goodsStatisticsList.vue
@@ -1,41 +1,84 @@
-<template>
-  <div id="app">
-    <div class="box">
-      <el-input v-model="input" placeholder class="inp" />
-      <el-button type="primary" @click="showDialog">鐢熸垚 cron</el-button>
-    </div>
-    <el-dialog title="鐢熸垚 cron" :visible.sync="showCron">
-      <vcrontab :expression="expression" @hide="showCron=false" @fill="crontabFill" />
-    </el-dialog>
-  </div>
-</template>
-<script>
-import vcrontab from 'vcrontab'
+<!--<template>-->
+<!--  <div class="home">-->
+<!--    <h1>鍓嶇婕旂ずSignalR</h1>-->
+<!--    <input v-model="user" type="text">-->
+<!--    <input v-model="message" type="text">-->
+<!--    <button @click="sendAll">鍙戦�佸叏閮�</button>-->
+<!--    <button @click="sendOwn">瀵硅嚜宸卞彂閫�</button>-->
+<!--    <button @click="sendOther">瀵瑰叾浠栧彂閫�</button>-->
+<!--    <div>-->
+<!--      <ul v-for="(item, index) in messages" :key="index + 'itemMessage'">-->
+<!--        <li>{{ item.user }} says {{ item.message }}</li>-->
+<!--      </ul>-->
+<!--    </div>-->
+<!--  </div>-->
+<!--</template>-->
 
-export default {
-  components: { vcrontab },
-  data() {
-    return {
-      input: '',
-      expression: '',
-      showCron: false,
-      cronExpression: '*/1 * * * *',
-      form: {},
-      formLabelWidth: '120px'
-      // showCron: false
-    }
-  },
-  methods: {
-    crontabFill(value) {
-      // 纭畾鍚庡洖浼犵殑鍊�
-      this.input = value
-    },
-    showDialog() {
-      this.expression = this.input
-      // 浼犲叆鐨� cron 琛ㄨ揪寮忥紝鍙互鍙嶈В鏋愬埌 UI 涓�
-      this.showCron = true
-    }
-  }
-}
-</script>
-}
+<!--<script>-->
+<!--// @ is an alias to /src-->
+<!--import * as signalR from '@aspnet/signalr'-->
+<!--export default {-->
+<!--  name: 'Home',-->
+<!--  components: {},-->
+<!--  data() {-->
+<!--    return {-->
+<!--      user: 's2', // 鐢ㄦ埛-->
+<!--      message: '22222', // 娑堟伅-->
+<!--      connection: '', // signalr杩炴帴-->
+<!--      messages: [] // 杩斿洖娑堟伅-->
+<!--    }-->
+<!--  },-->
+<!--  created: function() {-->
+<!--    const thisVue = this-->
+<!--    this.connection = new signalR.HubConnectionBuilder()-->
+<!--      .withUrl('http://121.196.36.24:8019/chatHub', {-->
+<!--        // skipNegotiation: true,-->
+<!--        // transport: signalR.HttpTransportType.WebSockets-->
+<!--      })-->
+<!--      .configureLogging(signalR.LogLevel.Information)-->
+<!--      .build()-->
+
+<!--    console.log(this.connection, 1)-->
+
+<!--    this.connection.on('ReceiveMessage', function(user, message) {-->
+<!--      debugger-->
+<!--      thisVue.messages.push({ user, message })-->
+<!--      console.log({ user, message })-->
+<!--    })-->
+<!--    this.connection.on('ReceiveCaller', function(message) {-->
+<!--      debugger-->
+<!--      const user = '鑷繁' // 杩欓噷涓轰簡push涓嶆姤閿欙紝鎴戝氨寮勪簡涓�涓粯璁ゅ�笺��-->
+<!--      thisVue.messages.push({ user, message })-->
+<!--      console.log({ user, message })-->
+<!--    })-->
+<!--    this.connection.start()-->
+<!--  },-->
+<!--  methods: {-->
+<!--    // 缁欏叏閮ㄥ彂閫佹秷鎭�-->
+<!--    sendAll: function() {-->
+<!--      this.connection-->
+<!--        .invoke('SendMessage', this.user, this.message)-->
+<!--        .catch(function(err) {-->
+<!--          return console.error(err)-->
+<!--        })-->
+<!--    },-->
+<!--    // 鍙粰鑷繁鍙戦�佹秷鎭�-->
+<!--    sendOwn: function() {-->
+<!--      this.connection-->
+<!--        .invoke('SendMessageCaller', this.message)-->
+<!--        .catch(function(err) {-->
+<!--          return console.error(err)-->
+<!--        })-->
+<!--    },-->
+
+<!--    // 缁欏叾浠栦汉鍛樺彂閫佹秷鎭�-->
+<!--    sendOther: function() {-->
+<!--      this.connection-->
+<!--        .invoke('SendMessageOther', this.user, this.message)-->
+<!--        .catch(function(err) {-->
+<!--          return console.error(err)-->
+<!--        })-->
+<!--    }-->
+<!--  }-->
+<!--}-->
+<!--</script>-->
diff --git a/src/views/purchasesManager/salesStatisticsList.vue b/src/views/purchasesManager/salesStatisticsList.vue
index e634736..05fca5c 100644
--- a/src/views/purchasesManager/salesStatisticsList.vue
+++ b/src/views/purchasesManager/salesStatisticsList.vue
@@ -1,746 +1,94 @@
 <template>
   <div>
-    <div class="body" :style="{height:mainHeight+'px'}">
+    <!--    <input v-model="user" type="text">-->
+    <!--    <input v-model="message" type="text"><br>-->
+    <!--    <button @click="SendAll">鍙戦��</button>-->
+    <!--    <hr>-->
+    <!--    <ul>-->
+    <!--      <li v-for="(item, index) in msgList" :key="index">-->
+    <!--        {{ item.user }}:&nbsp;&nbsp;&nbsp;&nbsp;{{ item.msg }}-->
+    <!--      </li>-->
+    <!--    </ul>-->
 
-      <div class="bodyTopButtonGroup">
-        <el-button v-waves type="primary" icon="el-icon-circle-plus-outline" @click="add('add')">鏂板</el-button>
-      </div>
-      <div class="bodyTopFormGroup">
-        <el-form
-          ref="form"
-          :model="form"
-          label-width="100px"
-          inline
-          style="display: flex;"
-        >
-          <div class="elForm">
-            <el-form-item label="瀛樿揣缂栫爜" style=" display: flex;">
-              <el-input v-model="form.OrgCode" placeholder="璇疯緭鍏�" style="width: 200px" />
-            </el-form-item>
-            <el-form-item label="瀛樿揣鍚嶇О" style=" display: flex;">
-              <el-input v-model="form.OrgName" placeholder="璇疯緭鍏�" style="width: 200px" />
-            </el-form-item>
-            <!--            <el-form-item label="鍒涘缓浜哄憳" style=" display: flex;">-->
-            <!--              <el-input v-model="form.UserName" style="width: 200px" placeholder="璇疯緭鍏�" />-->
-            <!--            </el-form-item>-->
-            <el-form-item label="棰勮浜よ揣鏃ユ湡" style="display: flex;font-size: 14px;align-items: center">
-              <el-date-picker
-                v-model="form.orderdate"
-                type="daterange"
-                range-separator="~"
-                class="timeMini"
-                size="mini"
-                style="width: 200px;display: flex;line-height: 34px;height: 34px;"
-                :clearable="false"
-                start-placeholder="寮�濮嬫棩鏈�"
-                end-placeholder="缁撴潫鏃ユ湡"
-              />
-            </el-form-item>
-          </div>
-          <div
-            class="bodySearchReset"
-            :style="{marginLeft:$store.state.app.sidebar.opened? $store.state.settings.menuIsHorizontal?'15%':'3%':'10%'}"
-          >
-            <el-button v-waves type="primary" icon="el-icon-search" @click="search">鏌ヨ</el-button>
-            <el-button v-waves type="info" icon="el-icon-refresh" @click="reset">閲嶇疆</el-button>
-          </div>
-        </el-form>
-        <div
-          class="bodyTopFormExpand"
-        />
-      </div>
-      <div class="elTableDiv">
-        <!--        <TableColumnSettings-->
-        <!--          :list1="tableColumnSettingsArray"-->
-        <!--          @tableColumnUpdate="tableColumnUpdate"-->
-        <!--        />-->
-        <el-table
-          ref="tableDataRef"
-          :key="tableTimeStampKey"
-          class="tableFixed"
-          :data="tableData"
-          border
-          :row-class-name="tableRowClassName"
-          :style="{width: 100+'%',height:tableHeight+'px'}"
-          highlight-current-row
-          :height="tableHeight+'px'"
-          :header-cell-style="this.$headerCellStyle"
-          :cell-style="this.$cellStyle"
-        >
-          <!--          @sort-change="sortChange"-->
+    <button @click="onClickButton">
+      鎵嬪姩鍙戦��
+    </button>
 
-          <el-table-column
-            type="index"
-            width="50"
-            label="搴忓彿"
-            fixed
-          />
-          <el-table-column
-            v-for="item in tableColumnSettingsArray"
-            v-if="item.show"
-            :key="item.id"
-            :sortable="item.sortable"
-            :prop="item.prop"
-            :min-width="item.minWidth"
-            :label="item.label"
-            :width="item.width"
-            show-tooltip-when-overflow
-            :fixed="item.fixed?(item.fixed==='left'?'left':'right'):false"
-          >
-            <template slot-scope="{row}">
-              <div v-if="!row[item.prop]">/</div>
-              <div v-else>{{ row[item.prop] }}</div>
-            </template>
-          </el-table-column>
-
-          <el-table-column
-            fixed="right"
-            label="鎿嶄綔"
-            width="120"
-          >
-            <template slot-scope="{row}">
-              <div class="operationClass">
-                <el-tooltip class="item" effect="dark" content="缂栬緫" placement="top">
-                  <i
-                    :style="{color:$store.state.settings.theme}"
-                    class="el-icon-edit-outline"
-                    @click="edit('edit',row)"
-                  />
-                </el-tooltip>
-                <el-tooltip v-del-tab-index class="item" effect="dark" content="鍒犻櫎" placement="top">
-                  <i :style="{color:$store.state.settings.theme}" class="el-icon-delete" @click="del(row.id)" />
-                </el-tooltip>
-                <!--                <el-button type="primary" size="mini" />-->
-                <!--                <el-button type="danger" size="mini">鍒犻櫎</el-button>-->
-
-              </div>
-            </template>
-          </el-table-column>
-        </el-table>
-      </div>
-      <!--鍒嗛〉-->
-      <pagination
-        :total="total"
-        :page.sync="form.page"
-        :limit.sync="form.rows"
-        align="right"
-        layout="total ,prev, pager, next,sizes,jumper"
-        popper-class="select_bottom"
-        @pagination="getOrganizationSearch"
-      />
-    </div>
-
-    <el-dialog
-      v-el-drag-dialog
-      :title="operation==='add'?'鏂板':'缂栬緫'"
-      :visible.sync="dialogVisible"
-      width="900px"
-      top="15vh"
-      :close-on-click-modal="false"
-      @closed="handleClose"
-      @close="handleClose"
-    >
-      <el-form ref="dialogForm" inline :rules="dialogFormRules" :model="dialogForm" label-width="100px">
-        <el-form-item label="瀛樿揣缂栫爜" prop="partcode">
-          <el-input v-model="dialogForm.partcode" :disabled="operation!=='add'" style="width: 200px" />
-        </el-form-item>
-        <el-form-item label="瀛樿揣鍚嶇О" prop="partname">
-          <el-input v-model="dialogForm.partname" :disabled="operation!=='add'" style="width: 200px" />
-        </el-form-item>
-        <el-form-item label="瑙勬牸鍨嬪彿" prop="partspec">
-          <el-input v-model="dialogForm.partspec" style="width: 200px" />
-        </el-form-item>
-        <el-form-item label="閿�鍞崟浣�" prop="saleUnit">
-          <el-input v-model="dialogForm.saleUnit" style="width: 200px" />
-        </el-form-item>
-        <el-form-item label="鏁伴噺" prop="sum">
-          <el-input v-model="dialogForm.sum" style="width: 200px" />
-        </el-form-item>
-        <el-form-item label="鏈�鏂板惈绋庡敭浠�" prop="newSale">
-          <el-input v-model="dialogForm.newSale" style="width: 200px" />
-        </el-form-item>
-        <el-form-item label="绋庣巼%" prop="taxPercent">
-          <el-input v-model="dialogForm.taxPercent" style="width: 200px" />
-        </el-form-item>
-        <el-form-item label="鍚◣鍗曚环" prop="newTaxPrice">
-          <el-input v-model="dialogForm.newTaxPrice" style="width: 200px" />
-        </el-form-item>
-        <el-form-item label="閲戦" prop="money">
-          <el-input v-model="dialogForm.money" style="width: 200px" />
-        </el-form-item>
-        <el-form-item label="鍚◣閲戦" prop="taxMoney">
-          <el-input v-model="dialogForm.taxMoney" style="width: 200px" />
-        </el-form-item>
-
-        <el-form-item label="棰勮浜よ揣鏃ユ湡" prop="expectedDate" style="width: 200px" />
-        <el-date-picker
-          v-model="dialogForm.expectedDate"
-          type="date"
-          placeholder="閫夋嫨鏃ユ湡"
-        />
-          <!--          <el-input v-model="dialogForm.expectedDate" style="width: 200px" />-->
-        </el-form-item>
-        <el-form-item label="鐜板瓨閲�" prop="stockCount">
-          <el-input v-model="dialogForm.stockCount" style="width: 200px" />
-        </el-form-item>
-        <el-form-item label="鐜板瓨閲忚鏄�" prop="stockDesc">
-          <el-input v-model="dialogForm.stockDesc" type="textarea" style="width: 200px" />
-        </el-form-item>
-        <el-form-item label="澶囨敞" prop="notes">
-          <el-input v-model="dialogForm.notes" type="textarea" style="width: 200px" />
-        </el-form-item>
-        <el-form-item label="閫�璐у師鍥�" prop="returnReason">
-          <el-input v-model="dialogForm.returnReason" type="textarea" style="width: 200px" />
-        </el-form-item>
-
-      </el-form>
-      <span slot="footer" class="dialog-footer">
-        <div class="footerButton">
-          <el-button v-waves @click="dialogVisibleCancel">鍙� 娑�</el-button>
-          <el-button
-            v-waves
-            type="primary"
-            :loading="$store.state.app.buttonIsDisabled"
-            :disabled="$store.state.app.buttonIsDisabled"
-            @click="dialogVisibleConfirm"
-          >纭� 瀹�</el-button>
-        </div>
-      </span>
-    </el-dialog>
+    <div style="margin: 200px">{{ msg }}</div>
   </div>
 </template>
 
 <script>
-import Pagination from '@/components/Pagination'
-import { AddUpdateOrganization, DeleteOrganization, OrganizationSearch, PrentOrganization } from '@/api/basicSettings'
-import { getCookie } from '@/utils/auth'
-import { validateCode } from '@/utils/global'
-import TableColumnSettings from '@/components/TableColumnSettings'
-import elDragDialog from '@/directive/el-drag-dialog' // base on element-ui
-import waves from '@/directive/waves/index.js' // 姘存尝绾规寚浠�
+import * as signalR from '@microsoft/signalr'
 
-// const SER_HZ = /^[\u4e00-\u9fa5]+$/
-// const SER_HZ = /^[a-zA-Z0-9_;,.<>() ]{0,}$/
 export default {
-  name: 'ZZJG',
-  components: {
-    Pagination, TableColumnSettings
-  },
-  directives: { elDragDialog, waves },
   data() {
-    const validateTypeCode = (rule, value, callback) => {
-      if (!value) {
-        return callback(new Error('璇烽�夋嫨涓婄骇'))
-      } else {
-        callback()
-      }
-    }
     return {
-      windowHeight: 0,
-      windowWidth: 0,
-      mainHeight: 0,
-      tableHeight: 0,
-      numvalue: 0,
-      form: {
-        OrgCode: '', // 缁勭粐鏋舵瀯浠g爜
-        OrgName: '', // 缁勭粐鏋舵瀯鍚嶇О
-        orderdate: '', // 鍗曟嵁鏃ユ湡
-        prop: 'lm_date', // 鎺掑簭瀛楁
-        order: 'desc', // 鎺掑簭瀛楁
-        page: 1, // 绗嚑椤�
-        rows: 20 // 姣忛〉澶氬皯鏉�
-      },
-
-      tableColumnSettingsArray: [
-        { minWidth: 50, width: false, prop: 'id', label: 'id', id: 1, show: false, fixed: false, sortable: false }, // 闅愯棌鍒�  show: false闅愯棌锛宼rue鏄剧ず
-        // { minWidth: 25, width: 50, prop: 'RowNum', label: '搴忓彿', id: 2, show: true, fixed: 'left', sortable: false }, // custom
-        {
-          minWidth: 110,
-          width: false,
-          prop: 'partcode',
-          label: '瀛樿揣缂栫爜',
-          id: 2,
-          show: true,
-          fixed: false,
-          sortable: true
-        }, {
-          minWidth: 110,
-          width: false,
-          prop: 'partname',
-          label: '瀛樿揣鍚嶇О',
-          id: 3,
-          show: true,
-          fixed: false,
-          sortable: true
-        },
-        {
-          minWidth: 110,
-          width: false,
-          prop: 'partspec',
-          label: '瑙勬牸鍨嬪彿',
-          id: 4,
-          show: true,
-          fixed: false,
-          sortable: true
-        },
-        {
-          minWidth: 110,
-          width: false,
-          prop: 'saleUnit',
-          label: '閿�鍞崟浣�',
-          id: 5,
-          show: true,
-          fixed: false,
-          sortable: true
-        },
-        {
-          minWidth: 110,
-          width: false,
-          prop: 'sum',
-          label: '鏁伴噺',
-          id: 6,
-          show: true,
-          fixed: false,
-          sortable: true
-        },
-        {
-          minWidth: 130,
-          width: false,
-          prop: 'newSale',
-          label: '鏈�鏂板惈绋庡敭浠�',
-          id: 7,
-          show: true,
-          fixed: false,
-          sortable: true
-        },
-        {
-          minWidth: 110,
-          width: false,
-          prop: 'taxPercent',
-          label: '绋庣巼%',
-          id: 8,
-          show: true,
-          fixed: false,
-          sortable: true
-        },
-        {
-          minWidth: 110,
-          width: false,
-          prop: 'newTaxPrice',
-          label: '鍚◣鍗曚环',
-          id: 9,
-          show: true,
-          fixed: false,
-          sortable: true
-        },
-        {
-          minWidth: 110,
-          width: false,
-          prop: 'money',
-          label: '閲戦',
-          id: 10,
-          show: true,
-          fixed: false,
-          sortable: true
-        },
-        {
-          minWidth: 110,
-          width: false,
-          prop: 'taxMoney',
-          label: '鍚◣閲戦',
-          id: 11,
-          show: true,
-          fixed: false,
-          sortable: true
-        },
-        {
-          minWidth: 130,
-          width: false,
-          prop: 'expectedDate',
-          label: '棰勮浜よ揣鏃ユ湡',
-          id: 12,
-          show: true,
-          fixed: false,
-          sortable: true
-        },
-        {
-          minWidth: 110,
-          width: false,
-          prop: 'stockCount',
-          label: '鐜板瓨閲�',
-          id: 13,
-          show: true,
-          fixed: false,
-          sortable: true
-        },
-        {
-          minWidth: 120,
-          width: false,
-          prop: 'stockDesc',
-          label: '鐜板瓨閲忚鏄�',
-          id: 13,
-          show: true,
-          fixed: false,
-          sortable: true
-        },
-        {
-          minWidth: 110,
-          width: false,
-          prop: 'notes',
-          label: '澶囨敞',
-          id: 13,
-          show: true,
-          fixed: false,
-          sortable: true
-        },
-        {
-          minWidth: 110,
-          width: false,
-          prop: 'returnReason',
-          label: '閫�璐у師鍥�',
-          id: 13,
-          show: true,
-          fixed: false,
-          sortable: true
-        }
-      ],
-      tableTimeStampKey: new Date().getTime(), // 琛ㄦ牸key
-
-      total: 10,
-      tableData: [
-        { id: 1001, partcode: 201, partname: '涓绘満', partspec: '', saleUnit: '涓�', sum: 1000, newScale: 200000, taxPercent: '', newTaxPrice: 200000, money: 200000, taxMoney: 200000, expectedDate: '2023-04-04', stockCount: 300, stockDesc: '', notes: '', returnReason: '' },
-        { id: 1002, partcode: 114, partname: '涓绘澘2', partspec: '#333', saleUnit: '涓�', sum: 1000, newScale: 100000, taxPercent: '', newTaxPrice: 100000, money: 100000, taxMoney: 100000, expectedDate: '2023-04-05', stockCount: 500, stockDesc: '', notes: '', returnReason: '' },
-        { id: 1003, partcode: 108, partname: '鏄剧ず鍣�', partspec: '', saleUnit: '涓�', sum: 2000, newScale: 100000, taxPercent: '', newTaxPrice: 100000, money: 100000, taxMoney: 100000, expectedDate: '2023-04-05', stockCount: 600, stockDesc: '', notes: '', returnReason: '' },
-        { id: 1004, partcode: 105, partname: '鏈虹', partspec: '', saleUnit: '涓�', sum: 1000, newScale: 20000, taxPercent: '', newTaxPrice: 20000, money: 20000, taxMoney: 20000, expectedDate: '2023-04-06', stockCount: 300, stockDesc: '', notes: '', returnReason: '' },
-        { id: 1005, partcode: 103, partname: '纭洏', partspec: '', saleUnit: '涓�', sum: 1000, newScale: 60000, taxPercent: '', newTaxPrice: 60000, money: 60000, taxMoney: 60000, expectedDate: '2023-04-07', stockCount: 300, stockDesc: '', notes: '', returnReason: '' }
-      ],
-
-      dialogVisible: false,
-      dialogForm: {
-        partcode: '',
-        partname: '',
-        partspec: '',
-        saleUnit: '',
-        sum: '',
-        newSale: '',
-        taxPercent: '',
-        newTaxPrice: '',
-        money: '',
-        taxMoney: '',
-        expectedDate: '',
-        stockCount: '',
-        stockDesc: '',
-        notes: '',
-        returnReason: ''
-      },
-
-      operation: '',
-      dialogFormRules: {
-        partcode: [
-          { required: true, validator: validateCode, trigger: ['blur', 'change'] }
-        ],
-        partname: [
-          { required: true, message: '璇疯緭鍏ュ悕绉�', trigger: ['blur', 'change'] }
-        ]
-
-      }
-
+      // connection: '',
+      // user: '',
+      // message: '',
+      // msgList: []
+      msg: ''
     }
   },
-  // watch: {
-  //   windowHeight(val) {
-  //     console.log('瀹炴椂灞忓箷楂樺害锛�', val, this.windowHeight)
-  //   },
-  //   windowWidth(val) {
-  //     if (val < 768) {
-  //       this.dialogWidth = '100%'
-  //     } else {
-  //       this.dialogWidth = '75%'
-  //     }
-  //     console.log('瀹炴椂灞忓箷瀹藉害锛�', val, this.windowHeight)
-  //   }
-  // },
   created() {
-    // this.getOrganizationSearch()
+    // this.init()
   },
-  mounted() {
-    window.addEventListener('resize', this.getHeight)
-    this.getHeight()
 
-    this.total = this.tableData.length
-  },
-  destroyed() {
-
-  },
   methods: {
-    tableColumnUpdate(val, isCopyTrue) {
-      if (isCopyTrue) {
-        this.tableColumnSettingsArray = val
-      }
-      this.tableTimeStampKey = new Date().getTime()
-      this.$refs.tableDataRef.doLayout()
-    },
-    async getOrganizationSearch() {
-      const res = await OrganizationSearch(this.form)
-      this.tableData = res.data
-      this.total = res.count
-    },
-    // 鎺掑簭鏀瑰彉鏃�
-    sortChange({ column, prop, order }) {
-      if (order === 'descending') {
-        order = 'desc'
-      } else if (order === 'ascending') {
-        order = 'asc'
-      } else {
-        order = 'desc'
-      }
-      this.form.order = order
-      this.form.prop = prop
-      this.getOrganizationSearch()
-    },
-    // 鏌ヨ
-    search() {
-      // this.getOrganizationSearch()
 
-    },
-    // 閲嶇疆
-    reset() {
-      this.form.OrgCode = ''
-      this.form.OrgName = ''
-      // this.form.OrgType = ''
-      // this.form.UserName = ''
-      // this.getOrganizationSearch()
-    },
-
-    // 鏂板鎸夐挳
-    async add(operation) {
-      this.operation = operation
-      this.dialogVisible = true
-
-      // const res = await getNewEncodingRules(getCookie('ruleCode'))
-      // this.dialogForm.OrgCode = res.RightCode
-      // this.numvalue = res.numvalue
-    },
-    // 淇敼鎸夐挳
-    edit(operation, row) {
-      this.operation = operation
-      this.dialogVisible = true
-      // if (row.description === 'F') {
-      //   this.dialogForm.OrgType = '宸ュ巶'
-      // } else
-      if (row.description === 'D') {
-        this.dialogForm.OrgType = '閮ㄩ棬'
-      } else if (row.description === 'W') {
-        this.dialogForm.OrgType = '杞﹂棿'
-      }
-      // else if (row.description === 'K') {
-      //   this.dialogForm.OrgType = '绉戝'
-      // } else if (row.description === 'L') {
-      //   this.dialogForm.OrgType = '鐢熶骇绾�'
-      // }
-      this.$nextTick(() => {
-        this.changeRadio(this.dialogForm.OrgType)
-        this.dialogForm.OrgCode = row.org_code
-        this.dialogForm.OrgName = row.org_name
-        this.dialogForm.SupUnit = row.parent_id
-      })
-    },
-    // 鍒犻櫎鎸夐挳
-    async del(id) {
-      this.$confirm('鏄惁纭鍒犻櫎?', '鎻愮ず', {
-        confirmButtonText: '纭畾',
-        cancelButtonText: '鍙栨秷',
-        type: 'warning'
-      }).then(() => {
-        DeleteOrganization({ orgid: id }).then(res => {
-          if (res.code === '200') {
-            this.$message.success('鍒犻櫎鎴愬姛!')
-            if (this.form.page > 1 && this.tableData.length === 1) {
-              this.form.page--
-            }
-            this.getOrganizationSearch()
-          }
+    onClickButton() {
+      this.$signalr.invoke('SendMessage', 'xx')// 鐢ㄤ簬鎵嬪姩鍙戦�佹秷鎭殑鏂瑰紡
+        .catch(function(err) {
+          return console.error(err)
         })
-      }).catch(() => {
-        this.$message.info('宸插彇娑堝垹闄�')
-      })
-    },
-    // 瀵硅瘽妗嗗叧闂簨浠�
-    handleClose() {
-      this.dialogForm.OrgType = '閮ㄩ棬'
-      this.dialogForm.OrgCode = ''
-      this.dialogForm.OrgName = ''
-      this.dialogForm.SupUnit = ''
-      this.$refs.dialogForm.clearValidate()
-    },
-    // 瀵硅瘽妗嗗彇娑�
-    dialogVisibleCancel() {
-      this.dialogVisible = false
-    },
-    // 瀵硅瘽妗嗙‘璁�
-    dialogVisibleConfirm() {
-      this.$refs.dialogForm.validate(valid => {
-        if (valid) {
-          this.$store.state.app.buttonIsDisabled = true
-          const data = {
-            OrganType: this.dialogForm.OrgType === '閮ㄩ棬' ? 'D' : 'W',
-            OrganCode: this.dialogForm.OrgCode,
-            OrganName: this.dialogForm.OrgName,
-            RightCode: '',
-            numvalue: '',
-            // RightCode: this.operation === 'add' ? getCookie('ruleCode') : '',
-            // numvalue: this.operation === 'add' ? this.numvalue : '',
-            SupUnit: this.dialogForm.OrgType === '閮ㄩ棬' ? '0' : this.dialogForm.SupUnit,
-            OperType: this.operation === 'add' ? 'Add' : 'Update',
-            Operator: getCookie('admin')
-          }
-
-          AddUpdateOrganization(data).then(res => {
-            if (res.code === '200') {
-              this.dialogVisible = false
-              this.$message.success(this.operation === 'add' ? '娣诲姞鎴愬姛锛�' : '淇敼鎴愬姛锛�')
-              this.getOrganizationSearch()
-              this.$store.state.app.buttonIsDisabled = false
-            } else {
-              this.$message.error(this.operation === 'add' ? '娣诲姞澶辫触锛�' : '淇敼澶辫触锛�')
-              this.$store.state.app.buttonIsDisabled = false
-            }
-          })
-        }
-      })
-    },
-    // 鑾峰彇椤甸潰楂樺害
-    getHeight() {
-      this.$nextTick(() => {
-        this.mainHeight = window.innerHeight - 85
-        this.tableHeight = this.mainHeight - 195
-        if (window.innerHeight < 769) {
-          this.tableHeight = this.tableHeight - 40
-        }
-        this.isIpad = window.innerHeight < 769 && window.innerWidth < 1367
-        this.$refs.tableDataRef.doLayout()
-      })
-    },
-    tableRowClassName({ row, rowIndex }) {
-      return 'custom-row'
     }
+    //
+    // init() {
+    //   this.connection = new signalR.HubConnectionBuilder()
+    //     .withUrl('http://121.196.36.24:8019/chatHub', {})
+    //     .configureLogging(signalR.LogLevel.Error)
+    //     .build()
+    //   this.connection.on('ReceiveMessage', data => {
+    //     this.msgList.push(data)
+    //   })
+    //
+    //   this.connection.start().then(() => {
+    //     if (window.Notification) {
+    //       if (Notification.permission === 'granted') {
+    //         console.log('鍏佽閫氱煡')
+    //       } else if (Notification.permission !== 'denied') {
+    //         console.log('闇�瑕侀�氱煡鏉冮檺')
+    //         Notification.requestPermission((permission) => {
+    //           console.log('鏉冮檺閫氱煡', permission)
+    //         })
+    //       } else if (Notification.permission === 'denied') {
+    //         console.log('鎷掔粷閫氱煡')
+    //       }
+    //     } else {
+    //       console.error('娴忚鍣ㄤ笉鏀寔Notification')
+    //     }
+    //     console.log('杩炴帴鎴愬姛')
+    //   })
+    //
+    //   this.connection.on('SendAll', (res) => {
+    //     console.log(res, '鏀跺埌娑堟伅')
+    //   })
+    //
+    //   // this.connection.start().then(() => {
+    //   //   this.connection.invoke('SendAll', '123', '鎴戣繛涓婂暒')
+    //   // })
+    // },
+    // SendAll() {
+    //   const params = {
+    //     user: this.user,
+    //     message: this.message
+    //   }
+    //   this.connection.invoke('SendAll', params)
+    // }
   }
 }
 </script>
 
-<!--鍏叡椤甸潰鏍峰紡-->
-<style lang="scss" scoped>
-$main_color: #42b983;
-.el-icon-share, .el-icon-delete, .el-icon-edit-outline {
-  color: $main_color;
-  cursor: pointer;
-}
+<style></style>
 
-.el-icon-edit-outline {
-  margin-right: 15px;
-}
-
-::v-deep .el-button--primary, .el-button--default, .el-button--info {
-  height: 34px;
-  display: flex;
-  align-items: center;
-  padding: 0 15px;
-}
-
-::v-deep .el-button--primary {
-  //background-color: $main_color !important;
-}
-
-::v-deep .el-button--default {
-  background-color: #f8f8fa;
-  border: none;
-}
-
-::v-deep .el-input__inner {
-  height: 34px;
-  line-height: 34px;
-  //color: #a7a7a7;
-}
-
-::v-deep .el-dialog__body {
-  padding: 20px 100px !important;
-}
-
-::v-deep .dialogVisibleRoles .el-dialog__body {
-  padding: 20px 20px !important;
-}
-
-::v-deep .importPickerClass .el-dialog__body {
-  padding: 20px 20px !important;
-}
-
-::v-deep .el-dialog__footer {
-  display: flex;
-  justify-content: flex-end;
-}
-
-::v-deep .el-table .caret-wrapper {
-  transform: scale(0.8);
-}
-
-::v-deep .cell {
-  display: flex;
-  align-items: center;
-  justify-content: space-between;
-}
-
-::v-deep .el-table::before {
-  height: 0;
-}
-
-::v-deep .el-table__body-wrapper {
-  background-color: #f8f8fa;
-}
-
-::v-deep .el-table__body .el-table__row.hover-row td {
-  background-color: #eaecef;
-}
-
-::v-deep .el-form--inline .el-form-item__label {
-  color: #a7a7a7;
-}
-
-.body ::v-deep .el-divider {
-  border: 1px solid #eee;
-  width: 99%;
-  margin: 10px auto;
-}
-
-.body ::v-deep .el-form-item {
-  margin-bottom: 0;
-}
-
-.tableFixed {
-  ::v-deep .el-table__fixed-right {
-    height: 100% !important;
-  }
-
-  ::v-deep .el-table__fixed {
-    height: 100% !important;
-  }
-}
-
-//::v-deep .cell {
-//  display: flex;
-//  flex-wrap: nowrap;
-//}
-//
-//::v-deep .has-gutter .cell {
-//  display: flex;
-//  flex-wrap: nowrap;
-//}
-</style>
-<style>
-.osloading {
-  font-size: 30px;
-}
-
-.el-table .custom-row {
-  background: #f8f8fa;
-}
-</style>

--
Gitblit v1.9.3