PageSourceSearch

https://iampho.ru/var/cache/asset20_5b249c348dc6d205bebea1271dd037e3.js

js iampho.ru collected 2026-10-07 18:09:37 UTC 9,792 bytes, 146 lines download raw bytes

1app.orderItemComponent={components:{orderDish:app.orderDishComponent,orderInfo:app.orderInfoComponent,orderTimer:app.timerComponent,orderAction:app.orderActionComponent,},props:['item','loc'],data(){return{isLoading:!1,}},computed:{dishes(){return this.item.dishes.slice(0,2)},isManyDishes(){return this.item.dishes.length>2},summaryTotal(){return this.item.summary.find(item=>item.type==='total')},totalValue(){return this.summaryTotal.value},totalName(){return this.summaryTotal.name},locCancelBtn(){return this.loc['history/btn-cancel']},locRepeatBtn(){return this.loc['history/btn-repeat']},locReviewBtn(){return this.loc['history/btn-review']},dataNumbers(){return JSON.stringify(this.item.dataQa)},payUrl(){return this.item.info.payUrl},locPayBtn(){return this.loc['profile/order/pay']},isImported(){return this.item.info.source==='imported'},locImportedNote(){return this.loc['history/inside']}},methods:{closeAll(){PubSub.publish('closeProfileOrders');PubSub.publish('closeProfile')},showOrderDetails(orderId){PubSub.publish('showOrderDetails',{orderId})},onConfirmCancelOrder(orderId){app.viewerConfirm(this.loc['profile/order/confirm/question'],this.loc['profile/order/confirm/success'],this.loc['profile/order/confirm/cancel'],()=>{this.cancelOrder(orderId)})},cancelOrder(id){if(this.isLoading){return}
2this.isLoading=!0;let payload={meta:{company:this.company,},cart:{id}}
3app.fetch('/cart/cancel',payload,(res)=>{this.isLoading=!1;if(res.error){app.growl(res.message,'danger');return}
4PubSub.publish('refetchOrders')})},repeatOrder(id){if(this.isLoading){return}
5this.isLoading=!0;let payload={meta:{company:this.company,},repeatCartId:id}
6app.fetch('/cart/recalc3',payload,(res)=>{this.isLoading=!1;if(res.error){app.growl(res.message,'danger');return}
7this.closeAll();app.updateStore({cart:res.cart});PubSub.publish('showCart')})},openReviewForm(){PubSub.publish('showCartReviewForm',{cartId:this.item.info.id,loc:this.loc,})},openPayUrl(){if(this.payUrl){window.location.href=this.payUrl}}},template:`
8        <div class="niOrder" :data-id="item.info.id" :data-numbers="dataNumbers">
9        
10            <div class="niOrder__info">
11                <orderInfo :info="item.info"
12                           :loc="loc"/>
13            </div>
14            
15            <div v-if="dishes.length"
16                 class="niOrder__dishes"
17                 @click="showOrderDetails(item.info.id)">
18                <orderDish v-for="dish in dishes"
19                           :dish="dish"
20                           :loc="loc"/>
21            </div>
22
23            <div v-if="isManyDishes" class="niOrder__cut">...</div>
24
25            <div class="niOrder__total">
26                <div class="niOrder__totalName">{{totalName}}</div>
27                <div class="niOrder__totalValue">{{totalValue}}</div>
28            </div>
29
30            <div v-if="isImported" class="niOrder__importedNote">{{ locImportedNote }}</div>
31
32            <div v-else class="niOrder__actions">
33
34                <orderAction v-if="item.info.cancelTimer"
35                        class="niOrder__action"
36                        :isLoading="isLoading"
37                        @click="onConfirmCancelOrder(item.info.id)">
38                        {{ locCancelBtn }}
39                        <orderTimer v-model="item.info.cancelTimer"></orderTimer>
40                </orderAction>
41
42                <orderAction v-else
43                             class="niOrder__action"
44                             :isLoading="isLoading"
45                             @click="repeatOrder(item.info.id)">{{ locRepeatBtn }}</orderAction>
46
47                <div class="niOrder__detail"
48                     @click="showOrderDetails(item.info.id)">
49                    <svg width="2" height="12" viewBox="0 0 2 12" fill="none" xmlns="http://www.w3.org/2000/svg">
50                    <circle cx="1" cy="1" r="1" fill="#292929"/>
51                    <rect y="4" width="2" height="8" rx="1" fill="#292929"/>
52                    </svg>
53                </div>
54            </div>
55
56            <orderAction v-if="payUrl"
57                         class="niOrder__action niOrder__payBtn"
58                         @click="openPayUrl">{{ locPayBtn }}</orderAction>
59
60            <orderAction v-if="item.info.showReviewButton"
61                         class="niOrder__action niOrder__actionReview"
62                         @click="openReviewForm()">{{ locReviewBtn }}</orderAction>
63
64        </div>
65    `};app.ordersMainComponent={components:{orderItem:app.orderItemComponent,spinner:app.commonSpinnerComponent,},props:['loc','isWeb','isApp'],data(){return{loading:!0,loaded:!1,list:[],}}
65,mounted(){PubSub.subscribe('refetchOrders',this.fetch);this.fetch()},destroyed(){PubSub.unsubscribe('refetchOrders')},computed:{isEmpty(){return!this.list.length},locEmpty(){return this.loc['history/empty']}},methods:{fetch(){this.loading=!0;app.fetch('/profile/orders/get',{},(res)=>{if(res.error){this.$emit('error',res.message);return}
66this.list=res.orders||[];this.loading=!1;setTimeout(()=>{this.loaded=!0},30)})}},template:`
67    
68        <div class="mcOrders" :class="{'mcOrders--web': isWeb, 'mcOrders--app': isApp}">
69
70            <spinner v-if="loading"/>
71            
72            <div 
73                v-else 
74                class="mcOrders__content"
75                :class="{'mcOrders__content--loaded': loaded}">
76            
77                <div v-if="isEmpty" class="mcOrders__empty">
78                    {{locEmpty}}
79                </div>
80                
81                <div v-else class="mcOrders__list">
82                     <orderItem 
83                        v-for="item in list"
84                        :item="item"
85                        :loc="loc"/>      
86                </div>
87                      
88            </div>
89        
90
91        
92        </div>
93    
94    `};app.addModule(()=>{PubSub.subscribe('showProfileOrders',()=>{if(!app.store.state.user){PubSub.publish('showLoginModalWindow',{cb:function(){window.location.assign(window.location.pathname+'?page=orders')}});return}
95app.openViewer({mobile:{withTick:!0,maxHeight:'calc(100dvh - 20px)',},desktop:{maxWidth:'400px',},backgroundColor:'var(--profileViewerBg)',component:{components:{profileHeader:app.profileHeaderComponent,ordersMain:app.ordersMainComponent},computed:{...Vuex.mapState(['loc']),locTitle(){return this.loc['tab/history']}}
95,created(){PubSub.subscribe('closeProfileOrders',this.close)},destroyed(){PubSub.unsubscribe('closeProfileOrders')},methods:{close(){this.$emit('close')},onError(message){app.growl(message,'danger');this.close()},},store:app.store,template:`
96                <div>
97                     <profileHeader :title="locTitle"/>
98                     <ordersMain
99                            :loc="loc"
100                            :isWeb="true"
101                            @close="close"
102                            @error="onError"/>
103                </div>
104`}})});const url=new URL(window.location.href);if(url.searchParams.get('page')==='orders'){PubSub.publish('showProfileOrders');url.searchParams.delete('page');history.replaceState(null,'',url.pathname+url.search)}});app.promoCodesItemComponent={props:['item','loc'],computed:{hasDateEnd(){return!!this.item.dateEnd},locDateEnd(){return(this.loc['profile/promoCodes/validUntil']||'').replace('{date}',this.item.dateEnd)}},template:`
105        <div class="niPromo">
106            <div class="niPromo__code">{{item.code}}</div>
107            <div v-if="item.name" class="niPromo__name">{{item.name}}</div>
108            <div v-if="hasDateEnd" class="niPromo__date">{{locDateEnd}}</div>
109        </div>
110    `};app.promoCodesMainComponent={components:{promoCodesItem:app.promoCodesItemComponent,spinner:app.commonSpinnerComponent,},props:['loc','isWeb'],data(){return{loading:!0,loaded:!1,list:[],}},mounted(){this.fetch()},computed:{isEmpty(){return!this.list.length},locEmpty(){return this.loc['profile/promoCodes/empty']}},methods:{fetch(){this.loading=!0;app.fetch('/profile/promo-codes/get',{},(res)=>{this.loading=!1;if(res.error){this.$emit('error',res.message);return}
111this.list=res.codes||[];setTimeout(()=>{this.loaded=!0},30)})}},template:`
112
113        <div class="mcPromo" :class="{'mcPromo--web': isWeb}">
114
115            <spinner v-if="loading"/>
116
117            <div
118                v-else
119                class="mcPromo__content"
120                :class="{'mcPromo__content--loaded': loaded}">
121
122                <div v-if="isEmpty" class="mcPromo__empty">
123                    {{locEmpty}}
124                </div>
125
126                <div v-else class="mcPromo__list">
127                     <promoCodesItem
128                        v-for="item in list"
129                        :item="item"
130                        :loc="loc"/>
131                </div>
132
133            </div>
134
135        </div>
136
137    `};app.addModule(()=>{PubSub.subscribe('showProfilePromoCodes',()=>{if(!app.store.state.user){PubSub.publish('showLoginModalWindow',{returnTo:'profile'});return}
138app.openViewer({mobile:{withTick:!0,maxHeight:'calc(100dvh - 20px)',},desktop:{maxWidth:'400px',},backgroundColor:'var(--profileViewerBg)',component:{components:{profileHeader:app.profileHeaderComponent,promoCodesMain:app.promoCodesMainComponent},computed:{...Vuex.mapState(['loc']),locTitle(){return this.loc['profile/promoCodes/title']}}
138,created(){PubSub.subscribe('closeProfilePromoCodes',this.close)},destroyed(){PubSub.unsubscribe('closeProfilePromoCodes')},methods:{close(){this.$emit('close')},onError(message){app.growl(message,'danger');this.close()},},store:app.store,template:`
139                <div>
140                     <profileHeader :title="locTitle"/>
141                     <promoCodesMain
142                            :loc="loc"
143                            :isWeb="true"
144                            @error="onError"/>
145                </div>
146`}})})});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.