yuantianjiao 6 years ago
parent
commit
a95fd35a84

+ 1
- 1
dist/index.html View File

4
         overflow-x: hidden;
4
         overflow-x: hidden;
5
         overflow-y: scroll;
5
         overflow-y: scroll;
6
         -webkit-overflow-scrolling: touch;
6
         -webkit-overflow-scrolling: touch;
7
-      }</style><link href=./static/css/app.2610990b58cc8123f42bd546525a1abb.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3ad1d5771e9b13dbdad2.js></script><script type=text/javascript src=./static/js/vendor.2a96777d0d5038fab28c.js></script><script type=text/javascript src=./static/js/app.2047d07d418afd0bd15c.js></script></body></html>
7
+      }</style><link href=./static/css/app.d2f7bd75c017c941e03e9a99feb19cb6.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3ad1d5771e9b13dbdad2.js></script><script type=text/javascript src=./static/js/vendor.2a96777d0d5038fab28c.js></script><script type=text/javascript src=./static/js/app.260a58d569dd508b835c.js></script></body></html>

+ 0
- 2
dist/static/css/app.2610990b58cc8123f42bd546525a1abb.css
File diff suppressed because it is too large
View File


+ 0
- 1
dist/static/css/app.2610990b58cc8123f42bd546525a1abb.css.map
File diff suppressed because it is too large
View File


+ 2
- 0
dist/static/css/app.d2f7bd75c017c941e03e9a99feb19cb6.css
File diff suppressed because it is too large
View File


+ 1
- 0
dist/static/css/app.d2f7bd75c017c941e03e9a99feb19cb6.css.map
File diff suppressed because it is too large
View File


BIN
dist/static/img/bottomMsg.2450d9b.png View File


BIN
dist/static/img/bottomMsg.ceb3401.png View File


+ 0
- 2
dist/static/js/app.2047d07d418afd0bd15c.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/static/js/app.2047d07d418afd0bd15c.js.map
File diff suppressed because it is too large
View File


+ 2
- 0
dist/static/js/app.260a58d569dd508b835c.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/static/js/app.260a58d569dd508b835c.js.map
File diff suppressed because it is too large
View File


+ 1
- 1
dist/static/js/manifest.3ad1d5771e9b13dbdad2.js.map View File

1
-{"version":3,"sources":["webpack:///webpack/bootstrap 6f984afb7eac6ff994d9"],"names":["parentJsonpFunction","window","chunkIds","moreModules","executeModules","moduleId","chunkId","result","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","shift","__webpack_require__","s","installedModules","2","exports","module","l","m","c","d","name","getter","o","defineProperty","configurable","enumerable","get","n","__esModule","object","property","p","oe","err","console","error"],"mappings":"aACA,IAAAA,EAAAC,OAAA,aACAA,OAAA,sBAAAC,EAAAC,EAAAC,GAIA,IADA,IAAAC,EAAAC,EAAAC,EAAAC,EAAA,EAAAC,KACQD,EAAAN,EAAAQ,OAAoBF,IAC5BF,EAAAJ,EAAAM,GACAG,EAAAL,IACAG,EAAAG,KAAAD,EAAAL,GAAA,IAEAK,EAAAL,GAAA,EAEA,IAAAD,KAAAF,EACAU,OAAAC,UAAAC,eAAAC,KAAAb,EAAAE,KACAY,EAAAZ,GAAAF,EAAAE,IAIA,IADAL,KAAAE,EAAAC,EAAAC,GACAK,EAAAC,QACAD,EAAAS,OAAAT,GAEA,GAAAL,EACA,IAAAI,EAAA,EAAYA,EAAAJ,EAAAM,OAA2BF,IACvCD,EAAAY,IAAAC,EAAAhB,EAAAI,IAGA,OAAAD,GAIA,IAAAc,KAGAV,GACAW,EAAA,GAIA,SAAAH,EAAAd,GAGA,GAAAgB,EAAAhB,GACA,OAAAgB,EAAAhB,GAAAkB,QAGA,IAAAC,EAAAH,EAAAhB,IACAG,EAAAH,EACAoB,GAAA,EACAF,YAUA,OANAN,EAAAZ,GAAAW,KAAAQ,EAAAD,QAAAC,IAAAD,QAAAJ,GAGAK,EAAAC,GAAA,EAGAD,EAAAD,QAKAJ,EAAAO,EAAAT,EAGAE,EAAAQ,EAAAN,EAGAF,EAAAS,EAAA,SAAAL,EAAAM,EAAAC,GACAX,EAAAY,EAAAR,EAAAM,IACAhB,OAAAmB,eAAAT,EAAAM,GACAI,cAAA,EACAC,YAAA,EACAC,IAAAL,KAMAX,EAAAiB,EAAA,SAAAZ,GACA,IAAAM,EAAAN,KAAAa,WACA,WAA2B,OAAAb,EAAA,SAC3B,WAAiC,OAAAA,GAEjC,OADAL,EAAAS,EAAAE,EAAA,IAAAA,GACAA,GAIAX,EAAAY,EAAA,SAAAO,EAAAC,GAAsD,OAAA1B,OAAAC,UAAAC,eAAAC,KAAAsB,EAAAC,IAGtDpB,EAAAqB,EAAA,KAGArB,EAAAsB,GAAA,SAAAC,GAA8D,MAApBC,QAAAC,MAAAF,GAAoBA","file":"static/js/manifest.3ad1d5771e9b13dbdad2.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n \t\tif(executeModules) {\n \t\t\tfor(i=0; i < executeModules.length; i++) {\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = executeModules[i]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// objects to store loaded and loading chunks\n \tvar installedChunks = {\n \t\t2: 0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"./\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 6f984afb7eac6ff994d9"],"sourceRoot":""}
1
+{"version":3,"sources":["webpack:///webpack/bootstrap 3a70ec7ac0841c986663"],"names":["parentJsonpFunction","window","chunkIds","moreModules","executeModules","moduleId","chunkId","result","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","shift","__webpack_require__","s","installedModules","2","exports","module","l","m","c","d","name","getter","o","defineProperty","configurable","enumerable","get","n","__esModule","object","property","p","oe","err","console","error"],"mappings":"aACA,IAAAA,EAAAC,OAAA,aACAA,OAAA,sBAAAC,EAAAC,EAAAC,GAIA,IADA,IAAAC,EAAAC,EAAAC,EAAAC,EAAA,EAAAC,KACQD,EAAAN,EAAAQ,OAAoBF,IAC5BF,EAAAJ,EAAAM,GACAG,EAAAL,IACAG,EAAAG,KAAAD,EAAAL,GAAA,IAEAK,EAAAL,GAAA,EAEA,IAAAD,KAAAF,EACAU,OAAAC,UAAAC,eAAAC,KAAAb,EAAAE,KACAY,EAAAZ,GAAAF,EAAAE,IAIA,IADAL,KAAAE,EAAAC,EAAAC,GACAK,EAAAC,QACAD,EAAAS,OAAAT,GAEA,GAAAL,EACA,IAAAI,EAAA,EAAYA,EAAAJ,EAAAM,OAA2BF,IACvCD,EAAAY,IAAAC,EAAAhB,EAAAI,IAGA,OAAAD,GAIA,IAAAc,KAGAV,GACAW,EAAA,GAIA,SAAAH,EAAAd,GAGA,GAAAgB,EAAAhB,GACA,OAAAgB,EAAAhB,GAAAkB,QAGA,IAAAC,EAAAH,EAAAhB,IACAG,EAAAH,EACAoB,GAAA,EACAF,YAUA,OANAN,EAAAZ,GAAAW,KAAAQ,EAAAD,QAAAC,IAAAD,QAAAJ,GAGAK,EAAAC,GAAA,EAGAD,EAAAD,QAKAJ,EAAAO,EAAAT,EAGAE,EAAAQ,EAAAN,EAGAF,EAAAS,EAAA,SAAAL,EAAAM,EAAAC,GACAX,EAAAY,EAAAR,EAAAM,IACAhB,OAAAmB,eAAAT,EAAAM,GACAI,cAAA,EACAC,YAAA,EACAC,IAAAL,KAMAX,EAAAiB,EAAA,SAAAZ,GACA,IAAAM,EAAAN,KAAAa,WACA,WAA2B,OAAAb,EAAA,SAC3B,WAAiC,OAAAA,GAEjC,OADAL,EAAAS,EAAAE,EAAA,IAAAA,GACAA,GAIAX,EAAAY,EAAA,SAAAO,EAAAC,GAAsD,OAAA1B,OAAAC,UAAAC,eAAAC,KAAAsB,EAAAC,IAGtDpB,EAAAqB,EAAA,KAGArB,EAAAsB,GAAA,SAAAC,GAA8D,MAApBC,QAAAC,MAAAF,GAAoBA","file":"static/js/manifest.3ad1d5771e9b13dbdad2.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n \t\tif(executeModules) {\n \t\t\tfor(i=0; i < executeModules.length; i++) {\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = executeModules[i]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// objects to store loaded and loading chunks\n \tvar installedChunks = {\n \t\t2: 0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"./\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 3a70ec7ac0841c986663"],"sourceRoot":""}

+ 2
- 2
src/App.vue View File

5
 </template>
5
 </template>
6
 
6
 
7
 <script>
7
 <script>
8
-import overscroll from './util/scroll'
8
+// import overscroll from './util/scroll'
9
 
9
 
10
 export default {
10
 export default {
11
   name: 'App',
11
   name: 'App',
12
   mounted () {
12
   mounted () {
13
-    overscroll(window.document.getElementById('app'))
13
+    // overscroll(window.document.getElementById('app'))
14
   }
14
   }
15
 }
15
 }
16
 </script>
16
 </script>

BIN
src/assets/bottomMsg.png View File


+ 12
- 18
src/components/qrCodeCard/qrCodeCard.vue View File

1
 <template>
1
 <template>
2
   <div class="codeLayout">
2
   <div class="codeLayout">
3
     <div id="QRcode"></div>
3
     <div id="QRcode"></div>
4
+    <div class='text'>{{num}}</div>
4
   </div>
5
   </div>
5
 </template>
6
 </template>
6
 
7
 
11
   props: {
12
   props: {
12
     msg: {
13
     msg: {
13
       type: Object,
14
       type: Object,
14
-      default: () => {}
15
+      default: () => { }
15
     }
16
     }
16
   },
17
   },
17
   data () {
18
   data () {
18
     return {
19
     return {
19
-      lessonType: {
20
-        800: '1012-',
21
-        801: '1012-',
22
-        802: '1011-',
23
-        803: '1010-',
24
-        804: '1013-',
25
-        777: '777'
26
-      }
20
+      num: ''
27
     }
21
     }
28
   },
22
   },
29
   methods: {
23
   methods: {
30
     InitCodeRules (info) {
24
     InitCodeRules (info) {
31
-      let codeText
32
-      for (var Key in this.lessonType
33
-      ) {
34
-        if (parseInt(Key) === this.msg.course_type) {
35
-          codeText = `${this.lessonType[Key]}-${this.msg.record_id}-${this.msg.luckydraw_id}-1`
36
-        }
37
-      }
25
+      let codeText = `${this.msg.record_id}`
26
+      this.num = codeText
38
       const ele = document.querySelector('#QRcode')
27
       const ele = document.querySelector('#QRcode')
39
       this.qrCode = new QRCode(ele, {
28
       this.qrCode = new QRCode(ele, {
40
         text: codeText,
29
         text: codeText,
56
 </script>
45
 </script>
57
 
46
 
58
 <style lang="scss" scoped>
47
 <style lang="scss" scoped>
59
-.codeLayout{
48
+.codeLayout {
60
   display: flex;
49
   display: flex;
61
   flex-flow: column nowrap;
50
   flex-flow: column nowrap;
62
   justify-content: center;
51
   justify-content: center;
63
   align-items: center;
52
   align-items: center;
64
-  padding-bottom: .1rem;
53
+  padding-bottom: 0.1rem;
54
+}
55
+.text {
56
+  text-align: center;
57
+  margin-top: 0.2rem;
58
+  font-size: 0.14rem;
65
 }
59
 }
66
 </style>
60
 </style>

+ 5
- 6
src/page/index/index.vue View File

289
           lockScroll: true
289
           lockScroll: true
290
         }).then(() => {
290
         }).then(() => {
291
           const luckshare = this.$route.params.id ? `&luckshare=${this.$route.params.id}` : ''
291
           const luckshare = this.$route.params.id ? `&luckshare=${this.$route.params.id}` : ''
292
-          window.location.href = `${window.location.origin}/user.html#/bindMobile?isLottery=1${luckshare}`
292
+          window.location.href = `${window.location.origin}/wechat/user.html#/bindMobile?isLottery=1${luckshare}`
293
         }).catch(() => {
293
         }).catch(() => {
294
           return false
294
           return false
295
         })
295
         })
296
       } else {
296
       } else {
297
         this.start().then((res) => {
297
         this.start().then((res) => {
298
+          window.setTimeout(() => {
299
+            this.showDialog = true
300
+            this.isRun = false
301
+          }, 10000)
298
           window.setTimeout(() => {
302
           window.setTimeout(() => {
299
             this.getRecord({ id: this.lotteryId }).then((res) => {
303
             this.getRecord({ id: this.lotteryId }).then((res) => {
300
               this.data.list = this.list
304
               this.data.list = this.list
304
           if (this.$route.params.id) {
308
           if (this.$route.params.id) {
305
             this.setUser({ toId: this.lotteryId, fromId: this.$route.params.id })
309
             this.setUser({ toId: this.lotteryId, fromId: this.$route.params.id })
306
           }
310
           }
307
-
308
           this.winning = res.prize.PrizeName
311
           this.winning = res.prize.PrizeName
309
           this.showBtn = res.detail.Url ? 1 : 0
312
           this.showBtn = res.detail.Url ? 1 : 0
310
           this.jump = res.detail.Url
313
           this.jump = res.detail.Url
311
-          setTimeout(() => {
312
-            this.showDialog = true
313
-            this.isRun = false
314
-          }, 10000)
315
         }).catch(() => {
314
         }).catch(() => {
316
           this.isRun = false
315
           this.isRun = false
317
         })
316
         })

+ 6
- 6
src/page/lotteryDetail/index.vue View File

1
 <template>
1
 <template>
2
-  <div class="mainPage">
2
+  <div class="mainPage" v-if='showPage'>
3
     <div>核销时间:<span v-if="data.prize">{{this.showDate(data.prize.VerificationStart)}} ~ {{this.showDate(data.prize.VerificationEnd)}}</span></div>
3
     <div>核销时间:<span v-if="data.prize">{{this.showDate(data.prize.VerificationStart)}} ~ {{this.showDate(data.prize.VerificationEnd)}}</span></div>
4
     <div class="name">核销地点:{{data.caseAddress}}</div>
4
     <div class="name">核销地点:{{data.caseAddress}}</div>
5
     <div>
5
     <div>
21
     return {
21
     return {
22
       data: {},
22
       data: {},
23
       msg: {
23
       msg: {
24
-        course_type: 777,
25
-        record_id: '',
26
-        luckydraw_id: ''
24
+        record_id: ''
27
       },
25
       },
28
-      bottomMsg
26
+      bottomMsg,
27
+      showPage: false
29
     }
28
     }
30
   },
29
   },
31
   components: {
30
   components: {
40
     this.getLotteryDetail({ id: this.$route.query.id }).then((res) => {
39
     this.getLotteryDetail({ id: this.$route.query.id }).then((res) => {
41
       this.data = this.detail
40
       this.data = this.detail
42
       this.msg.luckydraw_id = this.data.record.LuckdrawId
41
       this.msg.luckydraw_id = this.data.record.LuckdrawId
43
-      this.msg.record_id = this.data.record.Id
42
+      this.msg.record_id = this.data.record.CustomerQrcode
43
+      this.showPage = true
44
     })
44
     })
45
   },
45
   },
46
   methods: {
46
   methods: {

+ 1
- 1
src/page/lotteryDetail/page.scss View File

10
   }
10
   }
11
   .bottomMsg{
11
   .bottomMsg{
12
     img{
12
     img{
13
-      width: 3rem;
13
+      width: 1.5rem;
14
     }
14
     }
15
   }
15
   }
16
 }
16
 }

+ 1
- 1
src/page/lotteryList/page.scss View File

26
 .bottomMsg{
26
 .bottomMsg{
27
   img{
27
   img{
28
     margin-top: 1.5rem;
28
     margin-top: 1.5rem;
29
-    width: 3rem;
29
+    width: 1.5rem;
30
   }
30
   }
31
 }
31
 }

+ 4
- 4
src/store/app.js View File

49
       method: api.lottery.setPrize.method,
49
       method: api.lottery.setPrize.method,
50
       urlData: {
50
       urlData: {
51
         id: data.id
51
         id: data.id
52
-      },
53
-      data: {
54
-        openid: data.openId
55
-        // openid: 'oMOpz0hNdM4vvxI6CghCSUWiRsJA'
56
       }
52
       }
53
+      // data: {
54
+      //   openid: data.openId
55
+      //   // openid: 'oMOpz0hNdM4vvxI6CghCSUWiRsJA'
56
+      // }
57
     }).then(res => {
57
     }).then(res => {
58
       resolve(res)
58
       resolve(res)
59
     }).catch((err) => {
59
     }).catch((err) => {