├── .babelrc
├── gulpfile.babel.js
├── src
├── components
│ ├── item-content
│ │ ├── template.jade
│ │ └── index.js
│ ├── popover-lang
│ │ ├── style.scss
│ │ ├── template.jade
│ │ └── index.js
│ ├── item-content-link
│ │ ├── template.jade
│ │ └── index.js
│ ├── page
│ │ ├── template.jade
│ │ └── index.js
│ ├── popover-order
│ │ ├── style.scss
│ │ ├── template.jade
│ │ └── index.js
│ ├── calendar-rang
│ │ ├── template.jade
│ │ └── index.js
│ ├── bill-item
│ │ ├── style.scss
│ │ ├── template.jade
│ │ └── index.js
│ ├── item-content-accordion
│ │ ├── template.jade
│ │ └── index.js
│ ├── search-bar
│ │ ├── style.scss
│ │ ├── template.jade
│ │ └── index.js
│ ├── navbar
│ │ ├── style.scss
│ │ ├── template.jade
│ │ └── index.js
│ ├── icon
│ │ ├── template.jade
│ │ ├── style.scss
│ │ └── index.js
│ ├── card
│ │ ├── template.jade
│ │ └── index.js
│ ├── container-item
│ │ ├── style.scss
│ │ ├── template.jade
│ │ └── index.js
│ ├── bill-info-item-table
│ │ ├── index.js
│ │ └── template.jade
│ ├── operation-item
│ │ ├── index.js
│ │ └── template.jade
│ ├── container-item-table
│ │ ├── index.js
│ │ └── template.jade
│ ├── bill-info-item
│ │ ├── template.jade
│ │ └── index.js
│ └── panel-left
│ │ ├── template.jade
│ │ ├── style.scss
│ │ ├── index.js
│ │ └── menu.js
├── modules
│ ├── ios.js
│ ├── android.js
│ ├── app
│ │ ├── template.jade
│ │ └── index.js
│ ├── static.js
│ ├── icons.js
│ ├── commons.js
│ └── main.js
├── pages
│ ├── 404
│ │ ├── template.jade
│ │ ├── index.js
│ │ └── style.scss
│ ├── logout
│ │ ├── i18n.js
│ │ └── index.js
│ ├── contacts
│ │ ├── i18n.js
│ │ ├── dryTerminal.js
│ │ ├── template.jade
│ │ ├── index.js
│ │ └── seaTerminal.js
│ ├── bills
│ │ ├── index.js
│ │ ├── index
│ │ │ ├── style.scss
│ │ │ ├── template.jade
│ │ │ └── index.js
│ │ ├── info
│ │ │ ├── style.scss
│ │ │ ├── template.jade
│ │ │ └── index.js
│ │ └── i18n.js
│ ├── profile
│ │ ├── template.jade
│ │ ├── index
│ │ │ ├── template.jade
│ │ │ └── index.js
│ │ ├── edit
│ │ │ ├── template.jade
│ │ │ └── index.js
│ │ ├── index.js
│ │ └── i18n.js
│ ├── settings
│ │ ├── template.jade
│ │ ├── i18n.js
│ │ ├── index
│ │ │ ├── index.js
│ │ │ └── template.jade
│ │ ├── edit
│ │ │ ├── index.js
│ │ │ └── template.jade
│ │ └── index.js
│ ├── containers
│ │ ├── index.js
│ │ ├── index
│ │ │ └── style.scss
│ │ └── info
│ │ │ ├── style.scss
│ │ │ └── template.jade
│ ├── news
│ │ ├── i18n.js
│ │ ├── index.js
│ │ ├── item
│ │ │ ├── style.scss
│ │ │ ├── template.jade
│ │ │ └── index.js
│ │ └── index
│ │ │ ├── index.js
│ │ │ ├── template.jade
│ │ │ └── style.scss
│ ├── login
│ │ ├── style.scss
│ │ ├── i18n.js
│ │ ├── template.jade
│ │ └── index.js
│ ├── about
│ │ ├── index.js
│ │ ├── i18n.js
│ │ ├── style.scss
│ │ └── template.jade
│ ├── index
│ │ ├── i18n.js
│ │ ├── template.jade
│ │ ├── index.js
│ │ └── style.scss
│ ├── feedback
│ │ ├── i18n.js
│ │ ├── index.js
│ │ └── template.jade
│ ├── tabs-swipeable
│ │ ├── toolbar.jade
│ │ └── template.jade
│ └── advance
│ │ ├── i18n.js
│ │ ├── index.js
│ │ └── template.jade
├── images
│ ├── favicon
│ │ ├── red
│ │ │ ├── 256x256.png
│ │ │ ├── 512x512.png
│ │ │ ├── icon-128x128.png
│ │ │ ├── android-icon-36x36.png
│ │ │ ├── android-icon-48x48.png
│ │ │ ├── android-icon-72x72.png
│ │ │ ├── android-icon-96x96.png
│ │ │ ├── apple-touch-icon.png
│ │ │ ├── android-icon-144x144.png
│ │ │ ├── android-icon-192x192.png
│ │ │ ├── chrome-touch-icon-192x192.png
│ │ │ └── ms-touch-icon-144x144-precomposed.png
│ │ └── white
│ │ │ ├── 256x256.png
│ │ │ ├── 512x512.png
│ │ │ ├── icon-128x128.png
│ │ │ ├── apple-touch-icon.png
│ │ │ ├── android-icon-36x36.png
│ │ │ ├── android-icon-48x48.png
│ │ │ ├── android-icon-72x72.png
│ │ │ ├── android-icon-96x96.png
│ │ │ ├── _android-icon-144x144.png
│ │ │ ├── _android-icon-192x192.png
│ │ │ ├── android-icon-144x144-.png
│ │ │ ├── android-icon-144x144.png
│ │ │ ├── android-icon-192x192-.png
│ │ │ ├── android-icon-192x192.png
│ │ │ ├── chrome-touch-icon-192x192.png.png
│ │ │ └── ms-touch-icon-144x144-precomposed.png
│ ├── icons-f7
│ │ ├── ios-back.svg
│ │ ├── ios-forward.svg
│ │ ├── android-bars.svg
│ │ ├── ios-next.svg
│ │ ├── ios-prev.svg
│ │ ├── android-back.svg
│ │ ├── icon-check.svg
│ │ ├── icon-checked.svg
│ │ ├── android-forward.svg
│ │ ├── swiper-button-prev.svg
│ │ ├── ios-pull-to-refresh-arrow.svg
│ │ ├── swiper-button-next.svg
│ │ ├── icon-shevron-next.svg
│ │ ├── ios-bars.svg
│ │ ├── swiper-button-next_blue.svg
│ │ ├── swiper-button-prev_blue.svg
│ │ ├── icon-plus.svg
│ │ ├── android-prev.svg
│ │ ├── android-pull-to-refresh-arrow.svg
│ │ ├── ios-bars_small.svg
│ │ ├── sortable-handler.svg
│ │ ├── android-next.svg
│ │ ├── icon-shevron-open_right.svg
│ │ ├── icon-shevron-prev.svg
│ │ ├── icon-shevron-open_left.svg
│ │ ├── android-close.svg
│ │ ├── ios-search.svg
│ │ ├── android-cancel.svg
│ │ ├── ios-cancel.svg
│ │ ├── android-camera.svg
│ │ ├── android-search.svg
│ │ ├── ios-close-outline.svg
│ │ ├── ios-camera.svg
│ │ ├── ios-preloader.svg
│ │ └── ios-preloader_white.svg
│ ├── icons-ionic
│ │ ├── paper-airplane.svg
│ │ ├── android-create.svg
│ │ ├── contacts.svg
│ │ ├── information-circled.svg
│ │ ├── sort.svg
│ │ ├── android-star-outline.svg
│ │ ├── android-locate.svg
│ │ ├── android-call.svg
│ │ ├── clip.svg
│ │ ├── calendar.svg
│ │ ├── logout.svg
│ │ ├── android-list.svg
│ │ ├── email.svg
│ │ ├── code-working.svg
│ │ ├── android-settings.svg
│ │ └── bug.svg
│ ├── operations
│ │ ├── seal.svg
│ │ ├── supply.svg
│ │ ├── expense.svg
│ │ ├── expense-1.svg
│ │ ├── arrival.svg
│ │ ├── lathing.svg
│ │ ├── arrival-1.svg
│ │ ├── disconnection.svg
│ │ ├── delivery.svg
│ │ ├── MIDK.svg
│ │ ├── inspection-2.svg
│ │ ├── inspection-1.svg
│ │ ├── connection.svg
│ │ ├── weighing.svg
│ │ ├── nomination.svg
│ │ ├── unstuffing.svg
│ │ └── stuffing.svg
│ ├── icons-vsct
│ │ ├── logo-emblem.svg
│ │ ├── favicon.svg
│ │ ├── favicon-white.svg
│ │ ├── operations.svg
│ │ ├── containers.svg
│ │ ├── bills.svg
│ │ ├── size.svg
│ │ ├── bills-1.svg
│ │ ├── types.svg
│ │ ├── profile.svg
│ │ ├── cargo-2.svg
│ │ └── cargo.svg
│ ├── icons-vsct.js
│ ├── containers.js
│ ├── containers
│ │ ├── FL.svg
│ │ ├── HC.svg
│ │ └── ST.svg
│ └── icons-ionic.js
├── initials
│ ├── index.js
│ ├── components.js
│ ├── router.js
│ └── F7.js
├── mixins
│ ├── filters
│ │ ├── formatSumm.js
│ │ ├── stock.js
│ │ └── date.js
│ └── global.js
├── styles
│ ├── transition-page.scss
│ ├── main.scss
│ ├── table-shadow.scss
│ └── vars.scss
├── services
│ ├── fetch
│ │ ├── auth.js
│ │ ├── index.js
│ │ ├── bill-list.js
│ │ ├── settings.js
│ │ ├── bill-info.js
│ │ ├── news.js
│ │ └── advance.js
│ ├── CacheItem.js
│ ├── Storage.js
│ └── CacheList.js
├── partials
│ └── item-content.jade
├── vuex
│ ├── modules
│ │ ├── progress.js
│ │ ├── order.js
│ │ ├── profile.js
│ │ ├── news.js
│ │ ├── advance.js
│ │ ├── locales.js
│ │ ├── bill.js
│ │ ├── container.js
│ │ └── settings.js
│ ├── store.js
│ ├── mutation-types.js
│ └── actions.js
├── fixtures
│ ├── utils.js
│ ├── settings.js
│ ├── container-info.js
│ ├── bill-list.js
│ ├── auth.js
│ ├── advance.js
│ └── bill-info.js
└── templates
│ └── index.jade
├── gulp
├── tasks
│ ├── build.js
│ ├── default.js
│ ├── clean.js
│ ├── connect.js
│ └── webpack.js
├── helpers
│ ├── revision.js
│ ├── errorHandler.js
│ └── getArg.js
└── config.js
├── .gitignore
├── bower.json
├── README.md
└── package.json
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["es2015"]
3 | }
4 |
--------------------------------------------------------------------------------
/gulpfile.babel.js:
--------------------------------------------------------------------------------
1 | require('require-dir')('./gulp/tasks', { recurse: true })
2 |
--------------------------------------------------------------------------------
/src/components/item-content/template.jade:
--------------------------------------------------------------------------------
1 | .item-content
2 | partial(name='partial')
3 |
--------------------------------------------------------------------------------
/src/components/popover-lang/style.scss:
--------------------------------------------------------------------------------
1 | :local div.popover {
2 | width: 100px;
3 | }
4 |
--------------------------------------------------------------------------------
/gulp/tasks/build.js:
--------------------------------------------------------------------------------
1 | import gulp from 'gulp'
2 |
3 | gulp.task('build', ['clean', 'webpack'])
4 |
--------------------------------------------------------------------------------
/src/modules/ios.js:
--------------------------------------------------------------------------------
1 | // hack for webpack extruct plugin
2 |
3 | import 'styles/ios.less'
4 |
--------------------------------------------------------------------------------
/src/modules/android.js:
--------------------------------------------------------------------------------
1 | // hack for webpack extruct plugin
2 |
3 | import 'styles/android.less'
4 |
--------------------------------------------------------------------------------
/src/components/item-content-link/template.jade:
--------------------------------------------------------------------------------
1 | a.item-content.item-link
2 | partial(name='partial')
3 |
--------------------------------------------------------------------------------
/gulp/tasks/default.js:
--------------------------------------------------------------------------------
1 | import gulp from 'gulp'
2 |
3 | gulp.task('default', ['clean', 'webpack', 'connect'])
4 |
--------------------------------------------------------------------------------
/src/components/page/template.jade:
--------------------------------------------------------------------------------
1 | .page(
2 | :data-page='name',
3 | :transition='transition')
4 | slot
5 |
--------------------------------------------------------------------------------
/src/components/popover-order/style.scss:
--------------------------------------------------------------------------------
1 | :local div.popover {
2 | // width: auto;
3 | width: 160px;
4 | }
5 |
--------------------------------------------------------------------------------
/src/pages/logout/i18n.js:
--------------------------------------------------------------------------------
1 | var en = { title: 'Logout' }
2 | var ru = { title: 'Выйти' }
3 | export default {en, ru}
4 |
--------------------------------------------------------------------------------
/src/components/calendar-rang/template.jade:
--------------------------------------------------------------------------------
1 | input(
2 | v-el:calendar,
3 | type='text',
4 | style='display: none')
5 |
--------------------------------------------------------------------------------
/src/images/favicon/red/256x256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tyllo/Framework7-VueJS/HEAD/src/images/favicon/red/256x256.png
--------------------------------------------------------------------------------
/src/images/favicon/red/512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tyllo/Framework7-VueJS/HEAD/src/images/favicon/red/512x512.png
--------------------------------------------------------------------------------
/src/images/favicon/white/256x256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tyllo/Framework7-VueJS/HEAD/src/images/favicon/white/256x256.png
--------------------------------------------------------------------------------
/src/images/favicon/white/512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tyllo/Framework7-VueJS/HEAD/src/images/favicon/white/512x512.png
--------------------------------------------------------------------------------
/src/pages/contacts/i18n.js:
--------------------------------------------------------------------------------
1 | var en = { title: 'Contacts' }
2 | var ru = { title: 'Контакты' }
3 | export default { en, ru }
4 |
--------------------------------------------------------------------------------
/src/images/favicon/red/icon-128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tyllo/Framework7-VueJS/HEAD/src/images/favicon/red/icon-128x128.png
--------------------------------------------------------------------------------
/src/images/favicon/white/icon-128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tyllo/Framework7-VueJS/HEAD/src/images/favicon/white/icon-128x128.png
--------------------------------------------------------------------------------
/src/images/favicon/red/android-icon-36x36.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tyllo/Framework7-VueJS/HEAD/src/images/favicon/red/android-icon-36x36.png
--------------------------------------------------------------------------------
/src/images/favicon/red/android-icon-48x48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tyllo/Framework7-VueJS/HEAD/src/images/favicon/red/android-icon-48x48.png
--------------------------------------------------------------------------------
/src/images/favicon/red/android-icon-72x72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tyllo/Framework7-VueJS/HEAD/src/images/favicon/red/android-icon-72x72.png
--------------------------------------------------------------------------------
/src/images/favicon/red/android-icon-96x96.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tyllo/Framework7-VueJS/HEAD/src/images/favicon/red/android-icon-96x96.png
--------------------------------------------------------------------------------
/src/images/favicon/red/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tyllo/Framework7-VueJS/HEAD/src/images/favicon/red/apple-touch-icon.png
--------------------------------------------------------------------------------
/src/images/favicon/white/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tyllo/Framework7-VueJS/HEAD/src/images/favicon/white/apple-touch-icon.png
--------------------------------------------------------------------------------
/src/pages/bills/index.js:
--------------------------------------------------------------------------------
1 | var name = 'bills'
2 |
3 | export default {
4 | name,
5 | template: '',
6 | }
7 |
--------------------------------------------------------------------------------
/src/images/favicon/red/android-icon-144x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tyllo/Framework7-VueJS/HEAD/src/images/favicon/red/android-icon-144x144.png
--------------------------------------------------------------------------------
/src/images/favicon/red/android-icon-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tyllo/Framework7-VueJS/HEAD/src/images/favicon/red/android-icon-192x192.png
--------------------------------------------------------------------------------
/src/images/favicon/white/android-icon-36x36.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tyllo/Framework7-VueJS/HEAD/src/images/favicon/white/android-icon-36x36.png
--------------------------------------------------------------------------------
/src/images/favicon/white/android-icon-48x48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tyllo/Framework7-VueJS/HEAD/src/images/favicon/white/android-icon-48x48.png
--------------------------------------------------------------------------------
/src/images/favicon/white/android-icon-72x72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tyllo/Framework7-VueJS/HEAD/src/images/favicon/white/android-icon-72x72.png
--------------------------------------------------------------------------------
/src/images/favicon/white/android-icon-96x96.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tyllo/Framework7-VueJS/HEAD/src/images/favicon/white/android-icon-96x96.png
--------------------------------------------------------------------------------
/src/initials/index.js:
--------------------------------------------------------------------------------
1 | import 'initials/F7'
2 | import 'initials/components'
3 | import router from 'initials/router'
4 |
5 | export { router }
6 |
--------------------------------------------------------------------------------
/src/pages/profile/template.jade:
--------------------------------------------------------------------------------
1 | a.floating-button(href='#'
2 | @click.stop.prevent='action')
3 | icon(:id='button')
4 |
5 | router-view
6 |
--------------------------------------------------------------------------------
/src/pages/settings/template.jade:
--------------------------------------------------------------------------------
1 | a.floating-button(href='#'
2 | @click.stop.prevent='action')
3 | icon(:id='button')
4 |
5 | router-view
6 |
--------------------------------------------------------------------------------
/src/images/favicon/white/_android-icon-144x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tyllo/Framework7-VueJS/HEAD/src/images/favicon/white/_android-icon-144x144.png
--------------------------------------------------------------------------------
/src/images/favicon/white/_android-icon-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tyllo/Framework7-VueJS/HEAD/src/images/favicon/white/_android-icon-192x192.png
--------------------------------------------------------------------------------
/src/images/favicon/white/android-icon-144x144-.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tyllo/Framework7-VueJS/HEAD/src/images/favicon/white/android-icon-144x144-.png
--------------------------------------------------------------------------------
/src/images/favicon/white/android-icon-144x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tyllo/Framework7-VueJS/HEAD/src/images/favicon/white/android-icon-144x144.png
--------------------------------------------------------------------------------
/src/images/favicon/white/android-icon-192x192-.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tyllo/Framework7-VueJS/HEAD/src/images/favicon/white/android-icon-192x192-.png
--------------------------------------------------------------------------------
/src/images/favicon/white/android-icon-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tyllo/Framework7-VueJS/HEAD/src/images/favicon/white/android-icon-192x192.png
--------------------------------------------------------------------------------
/src/images/icons-f7/ios-back.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/images/favicon/red/chrome-touch-icon-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tyllo/Framework7-VueJS/HEAD/src/images/favicon/red/chrome-touch-icon-192x192.png
--------------------------------------------------------------------------------
/src/pages/containers/index.js:
--------------------------------------------------------------------------------
1 | var name = 'containers'
2 |
3 | export default {
4 | name: name,
5 | template: '',
6 | }
7 |
--------------------------------------------------------------------------------
/src/images/icons-f7/ios-forward.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/components/bill-item/style.scss:
--------------------------------------------------------------------------------
1 | :local .link {
2 | background-color: rgb(160,160,160);
3 |
4 | :global .item-title {
5 | color: white;
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/src/components/item-content-accordion/template.jade:
--------------------------------------------------------------------------------
1 | a.item-content(href='#').item-link
2 | partial(name='partial')
3 | .accordion-item-content
4 | slot(name='accordion')
5 |
--------------------------------------------------------------------------------
/src/images/favicon/red/ms-touch-icon-144x144-precomposed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tyllo/Framework7-VueJS/HEAD/src/images/favicon/red/ms-touch-icon-144x144-precomposed.png
--------------------------------------------------------------------------------
/src/images/favicon/white/chrome-touch-icon-192x192.png.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tyllo/Framework7-VueJS/HEAD/src/images/favicon/white/chrome-touch-icon-192x192.png.png
--------------------------------------------------------------------------------
/src/images/icons-f7/android-bars.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/images/icons-f7/ios-next.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/pages/containers/index/style.scss:
--------------------------------------------------------------------------------
1 | :local .link {
2 | background-color: rgb(160,160,160);
3 |
4 | :global .item-title {
5 | color: white;
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/src/images/favicon/white/ms-touch-icon-144x144-precomposed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tyllo/Framework7-VueJS/HEAD/src/images/favicon/white/ms-touch-icon-144x144-precomposed.png
--------------------------------------------------------------------------------
/src/images/icons-f7/ios-prev.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/images/icons-f7/android-back.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/components/search-bar/style.scss:
--------------------------------------------------------------------------------
1 | .searchbar .searchbar-search {
2 | width: 24px;
3 | height: 100%;
4 | display: inline-block;
5 | position: absolute;
6 | top: 0;
7 | }
8 |
--------------------------------------------------------------------------------
/src/images/icons-f7/icon-check.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/images/icons-f7/icon-checked.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Specifies intentionally untracked files to ignore when using Git
2 | # http://git-scm.com/docs/gitignore
3 |
4 | bower_components/
5 | node_modules/
6 | platforms/
7 | plugins/
8 |
9 | www/
--------------------------------------------------------------------------------
/src/images/icons-f7/android-forward.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/images/icons-f7/swiper-button-prev.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/images/icons-f7/ios-pull-to-refresh-arrow.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/images/icons-f7/swiper-button-next.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/mixins/filters/formatSumm.js:
--------------------------------------------------------------------------------
1 | export default {
2 | filters: {
3 | formatSumm(value) {
4 | return (value + '').replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 ')
5 | },
6 | },
7 | }
8 |
--------------------------------------------------------------------------------
/src/components/navbar/style.scss:
--------------------------------------------------------------------------------
1 |
2 | :local div.progressbar {
3 | position: absolute;
4 | bottom: 0;
5 | margin-bottom: -4px;
6 | }
7 |
8 | :local .center {
9 | width: 100%;
10 | }
11 |
--------------------------------------------------------------------------------
/src/images/icons-f7/icon-shevron-next.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/images/icons-f7/ios-bars.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/images/icons-f7/swiper-button-next_blue.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/images/icons-f7/swiper-button-prev_blue.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/pages/news/i18n.js:
--------------------------------------------------------------------------------
1 | var en = {
2 | title: 'News',
3 | read: 'Read more',
4 | }
5 |
6 | var ru = {
7 | title: 'Новости',
8 | read: 'Читать',
9 | }
10 |
11 | export default {en, ru}
12 |
--------------------------------------------------------------------------------
/src/images/icons-f7/icon-plus.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/src/images/icons-f7/android-prev.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/images/icons-f7/android-pull-to-refresh-arrow.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/images/icons-f7/ios-bars_small.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/images/icons-f7/sortable-handler.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/src/images/icons-f7/android-next.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/src/pages/login/style.scss:
--------------------------------------------------------------------------------
1 | :local .cancel {
2 | composes: button button-fill button-big color-red from global;
3 | }
4 |
5 | :local .login {
6 | composes: button button-fill button-big color-green from global;
7 | width: 100%;
8 | }
9 |
--------------------------------------------------------------------------------
/src/images/icons-f7/icon-shevron-open_right.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/images/icons-f7/icon-shevron-prev.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/pages/bills/index/style.scss:
--------------------------------------------------------------------------------
1 | :local .title {
2 | :global(div.item-title-row) {
3 | padding-right: 26px;
4 | }
5 |
6 | :global(div.item-text) {
7 | max-height: none;
8 | -webkit-line-clamp: 40;
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/src/pages/containers/info/style.scss:
--------------------------------------------------------------------------------
1 | :local .title {
2 | :global(div.item-title-row) {
3 | padding-right: 26px;
4 | }
5 |
6 | :global(div.item-text) {
7 | max-height: none;
8 | -webkit-line-clamp: 40;
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/src/components/icon/template.jade:
--------------------------------------------------------------------------------
1 | svg(
2 | xmlns='http://www.w3.org/2000/svg',
3 | xmlns:xlink='http://www.w3.org/1999/xlink',
4 | :viewBox.once='viewBox',
5 | class='#{style.icon} {{* class }}',
6 | :style.once='style')
7 | use(:xlink:href='id')
8 |
--------------------------------------------------------------------------------
/src/images/icons-f7/icon-shevron-open_left.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/modules/app/template.jade:
--------------------------------------------------------------------------------
1 | .statusbar-overlay
2 | .searchbar-overlay
3 | .panel-overlay
4 |
5 | panel-left
6 | popover-lang
7 | popover-order
8 |
9 | .views
10 | .view.view-main(v-el:view)
11 | .pages
12 | router-view
13 |
--------------------------------------------------------------------------------
/src/components/card/template.jade:
--------------------------------------------------------------------------------
1 | .card
2 | .card-header
3 | slot(name='header') {{* header }}
4 | .card-content
5 | .card-content-inner
6 | slot(name='content') {{* content }}
7 | .card-footer
8 | slot(name='footer') {{* footer }}
9 |
--------------------------------------------------------------------------------
/src/modules/static.js:
--------------------------------------------------------------------------------
1 | // hack for webpack - require favicon, index.html, manifest.json
2 |
3 | import 'templates/index.jade'
4 | import '!file?name=[name].[ext]!manifest.json'
5 |
6 | require.context('!file?name=assets/[path][name].[ext]!images/favicon/')
7 |
--------------------------------------------------------------------------------
/src/components/card/index.js:
--------------------------------------------------------------------------------
1 | import template from './template.jade'
2 |
3 | export let name = 'card'
4 |
5 | export default {
6 | props: [
7 | 'header',
8 | 'content',
9 | 'footer',
10 | ],
11 | template: template(),
12 | }
13 |
--------------------------------------------------------------------------------
/src/components/container-item/style.scss:
--------------------------------------------------------------------------------
1 | @import '~styles/vars';
2 |
3 | :local .icon {
4 | height: 45px !important;
5 | width: 90px !important;
6 | }
7 |
8 | .badge.badge-clear {
9 | color: inherit;
10 | background-color: transparent;
11 | }
12 |
--------------------------------------------------------------------------------
/src/components/page/index.js:
--------------------------------------------------------------------------------
1 | import template from './template.jade'
2 |
3 | export let name = 'page'
4 |
5 | export default {
6 | props: {
7 | name: { required: true },
8 | transition: { default: 'page' },
9 | },
10 | template: template(),
11 | }
12 |
--------------------------------------------------------------------------------
/src/pages/404/template.jade:
--------------------------------------------------------------------------------
1 | Page(v-el:page name=name class=style.page).navbar-fixed
2 | Navbar
3 | .page-content
4 | .content-block
5 | icon(id='dry_terminal', class=style.notFound)
6 | h1(class=style.title) 404
7 | h2(class=style.content) not found
8 |
--------------------------------------------------------------------------------
/gulp/tasks/clean.js:
--------------------------------------------------------------------------------
1 | import gulp from 'gulp'
2 | import del from 'del'
3 |
4 | import config from '../config'
5 |
6 | gulp.task('clean', cb => {
7 | try {
8 | del.sync(config.dest)
9 | } catch (e) {
10 | console.log('%s do not clean', config.dest)
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/images/icons-f7/android-close.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/src/mixins/filters/stock.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Переназываем склады
3 | */
4 |
5 | export default {
6 | filters: {
7 | stock(stock) {
8 | return (stock === 'ПИК')
9 | ? this.$t('containers.PIK')
10 | : this.$t('containers.VSCT')
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/gulp/helpers/revision.js:
--------------------------------------------------------------------------------
1 | import git from 'git-rev-sync'
2 |
3 | var revision = {
4 | hash: git.short(),
5 | branch: git.branch(),
6 | count: git.count(),
7 | tag: git.tag(),
8 | version: `git-${git.short()}-${git.count()} (${git.branch()})`
9 | }
10 |
11 | export default revision
12 |
--------------------------------------------------------------------------------
/src/images/icons-ionic/paper-airplane.svg:
--------------------------------------------------------------------------------
1 |
2 |
6 |
--------------------------------------------------------------------------------
/src/pages/404/index.js:
--------------------------------------------------------------------------------
1 | import template from './template.jade'
2 | import style from './style.scss'
3 |
4 | var name = 'notFound'
5 |
6 | export default {
7 | name,
8 | template: template({ name, style }),
9 | methods: {
10 | back: () => window.history.back(),
11 | },
12 | }
13 |
--------------------------------------------------------------------------------
/src/images/icons-ionic/android-create.svg:
--------------------------------------------------------------------------------
1 |
2 |
5 |
--------------------------------------------------------------------------------
/gulp/helpers/errorHandler.js:
--------------------------------------------------------------------------------
1 | import plumber from 'gulp-plumber'
2 | import notify from 'gulp-notify'
3 |
4 | export default () => {
5 | return plumber({
6 | errorHandler: notify.onError({
7 | title: '<%= error.name %>',
8 | message: '<%= error.message %>',
9 | sound: true,
10 | })
11 | })
12 | }
13 |
--------------------------------------------------------------------------------
/src/images/icons-f7/ios-search.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/src/pages/bills/info/style.scss:
--------------------------------------------------------------------------------
1 | :local .title {
2 | :global(div.item-title-row) {
3 | padding-right: 26px;
4 | }
5 |
6 | :global(div.item-text) {
7 | max-height: none;
8 | -webkit-line-clamp: 40;
9 | }
10 | }
11 |
12 | :local div.total {
13 | color: #FFF;
14 | background-color: #a0a0a0;
15 | }
--------------------------------------------------------------------------------
/src/pages/news/index.js:
--------------------------------------------------------------------------------
1 | import { updateNews } from 'vuex/actions'
2 |
3 | var name = 'news'
4 |
5 | export default {
6 | name: name,
7 | template: '',
8 |
9 | vuex: {
10 | actions: { updateNews },
11 | },
12 |
13 | created() {
14 | this.updateNews()
15 | },
16 | }
17 |
--------------------------------------------------------------------------------
/src/images/icons-f7/android-cancel.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/src/pages/profile/index/template.jade:
--------------------------------------------------------------------------------
1 | Page(v-el:page name=name).navbar-fixed
2 | Navbar(title='profile.title')
3 |
4 | .page-content
5 | .list-block.media-list.clear-both
6 | ul: li(v-for='(key, title) in profile')
7 | item-content(
8 | :title='toProfileName(key)',
9 | :text.once='title')
10 |
--------------------------------------------------------------------------------
/src/components/popover-order/template.jade:
--------------------------------------------------------------------------------
1 | .popover(class=style.popover, v-el:popover)
2 | .popover-angle
3 | .popover-inner
4 | .list-block
5 | ul: li(v-for='(key, value) in sortList')
6 | a.list-button.item-link(
7 | :href="'#' + key",
8 | @click="changeOrder(key)")
9 | | {{* value }}
10 |
--------------------------------------------------------------------------------
/src/components/popover-lang/template.jade:
--------------------------------------------------------------------------------
1 | .popover(class=style.popover, v-el:popover)
2 | .popover-angle
3 | .popover-inner
4 | .list-block
5 | ul: li(v-for='lang in langs')
6 | a.list-button.item-link(
7 | :href="'#' + lang.key",
8 | @click="changeLang(lang.key)")
9 | | {{* lang.value }}
10 |
--------------------------------------------------------------------------------
/src/pages/logout/index.js:
--------------------------------------------------------------------------------
1 | import { logout } from 'vuex/actions'
2 |
3 | var name = 'logout'
4 |
5 | export default {
6 | name,
7 |
8 | route: {
9 | activate({ redirect }) {
10 | this.logout()
11 | redirect({name: 'index'})
12 | },
13 | },
14 |
15 | vuex: {
16 | actions: { logout },
17 | },
18 | }
19 |
--------------------------------------------------------------------------------
/src/styles/transition-page.scss:
--------------------------------------------------------------------------------
1 | /* always present */
2 | .page-transition {
3 | transition: all .3s ease;
4 | overflow: hidden;
5 | }
6 |
7 | /* .expand-enter defines the starting state for entering */
8 | /* .expand-leave defines the ending state for leaving */
9 | .page-enter, .page-leave {
10 | height: 0;
11 | opacity: 0;
12 | }
13 |
--------------------------------------------------------------------------------
/src/images/icons-f7/ios-cancel.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/pages/news/item/style.scss:
--------------------------------------------------------------------------------
1 |
2 | :local .lazy {
3 | composes: lazy-fadeIn from global;
4 | display: block;
5 | width: 100%;
6 | height: auto;
7 | }
8 |
9 | :local div.date {
10 | display: inline-block;
11 | width: 100%;
12 | // min-height: auto;
13 | text-align: end;
14 | font-size: 14px;
15 | line-height: 48px;
16 | }
17 |
--------------------------------------------------------------------------------
/src/images/icons-f7/android-camera.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/src/components/item-content/index.js:
--------------------------------------------------------------------------------
1 | import template from './template.jade'
2 | import partial from 'partials/item-content.jade'
3 |
4 | export let name = 'item-content'
5 |
6 | export default {
7 | props: [
8 | 'icon',
9 | 'title',
10 | 'after',
11 | 'subtitle',
12 | 'text',
13 | ],
14 | template: template(),
15 | partials: { partial: partial() },
16 | }
17 |
--------------------------------------------------------------------------------
/src/components/item-content-link/index.js:
--------------------------------------------------------------------------------
1 | import template from './template.jade'
2 | import partial from 'partials/item-content.jade'
3 |
4 | export let name = 'item-content-link'
5 |
6 | export default {
7 | props: [
8 | 'icon',
9 | 'title',
10 | 'after',
11 | 'subtitle',
12 | 'text',
13 | ],
14 | template: template(),
15 | partials: { partial: partial() },
16 | }
17 |
--------------------------------------------------------------------------------
/src/components/container-item/template.jade:
--------------------------------------------------------------------------------
1 | item-content-accordion(
2 | :icon.once='type',
3 | :title.once='title',
4 | :text.once='text',
5 | :after='size')
6 | icon(slot='icon', :id.once='type', class=style.icon)
7 | template(slot='after')
8 | .badge.badge-clear {{* type }}
9 | .badge(:class.once="{'bg-red': load}") {{* size | parseSize }}
10 | slot(slot='accordion')
11 |
--------------------------------------------------------------------------------
/src/images/icons-ionic/contacts.svg:
--------------------------------------------------------------------------------
1 |
2 |
5 |
--------------------------------------------------------------------------------
/src/images/icons-ionic/information-circled.svg:
--------------------------------------------------------------------------------
1 |
2 |
5 |
--------------------------------------------------------------------------------
/gulp/helpers/getArg.js:
--------------------------------------------------------------------------------
1 | export default function getArg(key) {
2 | var index = process.argv.indexOf(key);
3 | var next = process.argv[index + 1];
4 | return (index < 0)
5 | ? null
6 | : (!next || next[0] === "-") ? true : next;
7 | }
8 |
9 | export let debug = getArg('--debug') || getArg('-dp') || getArg('-pd')
10 | export let production = getArg('--prod') || getArg('--production') || getArg('-p')
--------------------------------------------------------------------------------
/src/mixins/global.js:
--------------------------------------------------------------------------------
1 | /* global DEBUG */
2 |
3 | import { F7 } from 'commons'
4 | import store from 'vuex/store'
5 |
6 | export default {
7 | ready() {
8 | DEBUG && console.log('init component %s', this.$options.name)
9 | var mainView = store.mainView
10 |
11 | mainView.router.loadContent(this.$els.page)
12 | F7.params.swipePanel = 'left' // this.$route.panel
13 | },
14 | }
15 |
--------------------------------------------------------------------------------
/src/images/icons-f7/android-search.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/src/pages/about/index.js:
--------------------------------------------------------------------------------
1 | /* globals revision */
2 |
3 | import style from './style.scss'
4 | import template from './template.jade'
5 |
6 | var name = 'about'
7 |
8 | export default {
9 | name: name,
10 | template: template({ name, style }),
11 | computed: {
12 | version() {
13 | // TODO: config
14 | return this.$t('about.version', {version: revision.version})
15 | }
16 | },
17 | }
18 |
--------------------------------------------------------------------------------
/src/pages/index/i18n.js:
--------------------------------------------------------------------------------
1 | var en = {
2 | company: {
3 | name: 'VLADIVOSTOK SEA CONTAINER TERMINAL',
4 | shortName: 'VSCT',
5 | },
6 |
7 | btn: 'Login',
8 | }
9 |
10 | var ru = {
11 | company: {
12 | name: 'ВЛАДИВОСТОКСКИЙ МОРСКОЙ КОНТЕЙНЕРНЫЙ ТЕРМИНАЛ',
13 | shortName: 'ВМКТ',
14 | },
15 |
16 | btn: 'Войти',
17 | }
18 |
19 | export default {en, ru}
20 |
--------------------------------------------------------------------------------
/src/components/bill-info-item-table/index.js:
--------------------------------------------------------------------------------
1 | import formatSumm from 'mixins/filters/formatSumm'
2 | import template from './template.jade'
3 |
4 | export let name = 'bill-info-item-table'
5 |
6 | export default {
7 | name,
8 | props: [
9 | 'count',
10 | 'price',
11 | 'summa',
12 | 'NDS',
13 | 'summands',
14 | ],
15 | mixins: [formatSumm],
16 | template: template({name}),
17 | }
18 |
--------------------------------------------------------------------------------
/src/services/fetch/auth.js:
--------------------------------------------------------------------------------
1 | import { fetchFactory, URL, fixtures } from './utils'
2 |
3 | export let login = fetchFactory({
4 | url: URL.login,
5 | parser: ({ data }) => data,
6 | fixture: fixtures.auth.login,
7 | })
8 |
9 | export let logout = fetchFactory({
10 | url: URL.logout,
11 | parser: ({ data }) => data,
12 | fixture: fixtures.auth.logout,
13 | })
14 |
15 | export default { login, logout }
16 |
--------------------------------------------------------------------------------
/gulp/tasks/connect.js:
--------------------------------------------------------------------------------
1 | import gulp from 'gulp'
2 | import connect from 'gulp-connect'
3 | import config from '../config'
4 |
5 | gulp.task('connect', () =>
6 | connect.server({
7 | root: [config.dest],
8 | port: config.server.port,
9 | livereload: true,
10 | // https://github.com/bripkens/connect-history-api-fallback
11 | // fallback: config.dest + '/index.html',
12 | })
13 | )
14 |
15 | export default connect
16 |
--------------------------------------------------------------------------------
/src/images/icons-ionic/sort.svg:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/src/initials/components.js:
--------------------------------------------------------------------------------
1 | import { Vue } from 'commons'
2 |
3 | var components = requireAll(require.context('components/', true, /index\.js$/))
4 |
5 | components.map( ({ name, default: component }) => {
6 | Vue.component(name, component)
7 | })
8 |
9 | // https://webpack.github.io/docs/context.html#require-context
10 | function requireAll(requireContext) {
11 | return requireContext.keys().map(requireContext)
12 | }
13 |
--------------------------------------------------------------------------------
/src/initials/router.js:
--------------------------------------------------------------------------------
1 | import { Vue, VueRouter } from 'commons'
2 | import routes from './routes'
3 |
4 | Vue.use(VueRouter)
5 |
6 | const router = new VueRouter({
7 | root: '',
8 | linkActiveClass: 'active',
9 | hashbang: true,
10 | // history: true,
11 | // saveScrollPosition: true,
12 | })
13 |
14 | router.map(routes)
15 |
16 | router.alias({
17 | '/': 'index',
18 | })
19 |
20 | export default router
21 |
--------------------------------------------------------------------------------
/src/pages/news/item/template.jade:
--------------------------------------------------------------------------------
1 | Page(v-el:page name=name).navbar-fixed
2 | Navbar(title='news.title', state='back')
3 | .page-content
4 | img.lazy(
5 | v-el:image
6 | :src.once='newsItem.image',
7 | class=style.lazy)
8 | .card-header.color-gray(class=style.date) {{* newsItem.date | dateFull }}
9 | .content-block-title {{* newsItem.title }}
10 | .content-block: p {{{* newsItem.content }}}
11 |
--------------------------------------------------------------------------------
/src/partials/item-content.jade:
--------------------------------------------------------------------------------
1 | .item-media(v-if='icon')
2 | slot(name='icon')
3 | icon(:id.once='icon')
4 | .item-inner
5 | .item-title-row
6 | .item-title
7 | slot(name='title') {{ title }}
8 | .item-after
9 | slot(name='after') {{ after }}
10 | .item-subtitle
11 | slot(name='subtitle') {{ subtitle }}
12 | .item-text
13 | slot(name='text') {{ text }}
14 | slot(name='input').item-input
15 |
--------------------------------------------------------------------------------
/src/images/icons-ionic/android-star-outline.svg:
--------------------------------------------------------------------------------
1 |
2 |
5 |
--------------------------------------------------------------------------------
/src/pages/profile/index/index.js:
--------------------------------------------------------------------------------
1 | import template from './template.jade'
2 |
3 | var name = 'profile-index'
4 |
5 | export default {
6 | name,
7 | template: template({ name }),
8 |
9 | vuex: {
10 | getters: {
11 | profile: state => state.profile.data || [],
12 | },
13 | },
14 |
15 | methods: {
16 | toProfileName(key) {
17 | return this.$t(`profile['${key}']`)
18 | }
19 | },
20 | }
21 |
--------------------------------------------------------------------------------
/src/components/icon/style.scss:
--------------------------------------------------------------------------------
1 | @import '~styles/vars';
2 |
3 | :local .icon {
4 | height: 24px;
5 | width: 24px;
6 | fill: currentColor;
7 | }
8 |
9 | [slot='media'] {
10 | color: $icon-default;
11 | }
12 |
13 | .icon-color-default {
14 | svg {
15 | color: $icon-default;
16 | .layout-dark & {
17 | color: #fff;
18 | }
19 | }
20 | }
21 |
22 | .icon-color-brend {
23 | svg {
24 | color: $brend-color;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/images/icons-ionic/android-locate.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/images/icons-f7/ios-close-outline.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/src/images/icons-ionic/android-call.svg:
--------------------------------------------------------------------------------
1 |
2 |
5 |
--------------------------------------------------------------------------------
/src/pages/feedback/i18n.js:
--------------------------------------------------------------------------------
1 | var en = {
2 | title: 'Feedback',
3 | text: 'Please use this form to submit your question. We will respond to you shortly.',
4 | placeholder: 'Your question...',
5 | }
6 |
7 | var ru = {
8 | title: 'Обратная связь',
9 | text: 'Воспользуйтесь данной формой, для того, чтобы отправить ваш вопрос. Мы обязательно ответим вам в ближайшее время.',
10 | placeholder: 'Ваш вопрос...',
11 | }
12 |
13 | export default {en, ru}
14 |
--------------------------------------------------------------------------------
/src/components/search-bar/template.jade:
--------------------------------------------------------------------------------
1 | form.searchbar(v-el:form)
2 | .searchbar-input
3 | input(
4 | type='search',
5 | v-model='model',
6 | @keyup.enter='onSearch',
7 | :placeholder='placeholder')
8 | a.searchbar-search(
9 | @click='onSearch',
10 | href='#')
11 | a.searchbar-clear(href='#')
12 | //- a.searchbar-cancel(href='#') Cancel
13 |
14 | .searchbar-overlay.searchbar-overlay-active(
15 | @click='hide')
16 |
--------------------------------------------------------------------------------
/src/components/operation-item/index.js:
--------------------------------------------------------------------------------
1 | import template from './template.jade'
2 |
3 | export let name = 'operation-item'
4 |
5 | export default {
6 | props: [
7 | { name: 'operation', required: true },
8 | { name: 'date', required: true },
9 | 'transport',
10 | 'kontr',
11 | ],
12 | template: template(),
13 | computed: {
14 | title() {
15 | return this.$t(`containers.operations['${this.$get('operation')}']`)
16 | },
17 | },
18 | }
19 |
--------------------------------------------------------------------------------
/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "VMKT",
3 | "version": "0.0.2",
4 | "description": "Прототип мобильного приложения для владивостокского морского контейнерного терминала",
5 | "authors": [
6 | {
7 | "name": "Andrey Pastukhov",
8 | "email": "gmtyllo@gmail.com"
9 | }
10 | ],
11 | "dependencies": {
12 | "animatewithsass": "~3.2.2",
13 | "roboto-fontface": "~0.4.3",
14 | "Framework7": "framework7#~1.4.2",
15 | "Ionicons": "ionicons#~2.0.1"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/pages/tabs-swipeable/toolbar.jade:
--------------------------------------------------------------------------------
1 | .toolbar.tabbar.toolbar-bottom
2 | .toolbar-inner
3 | a.tab-link(href='#tab-containers').active
4 | //- icon(id='containers')
5 | span.tabbar-label {{ $t('containers.title.main') }}
6 | a.tab-link(href='#tab-bills')
7 | //- icon(id='bills')
8 | span.tabbar-label {{ $t('bills.title') }}
9 | a.tab-link(href='#tab-advance')
10 | //- icon(id='advance')
11 | span.tabbar-label {{ $t('advance.title') }}
12 |
--------------------------------------------------------------------------------
/src/vuex/modules/progress.js:
--------------------------------------------------------------------------------
1 | import { SET_PROGRESS } from '../mutation-types'
2 |
3 | export let name = 'progress'
4 |
5 | // initial state
6 | export const state = {
7 | active: false,
8 | }
9 |
10 | // mutations
11 | export const mutations = {
12 | [SET_PROGRESS](state, flag) {
13 | state.active = flag
14 | },
15 | }
16 |
17 | // actions
18 | export const actions = {
19 | setProgress({ dispatch }, flag) {
20 | dispatch(SET_PROGRESS, flag)
21 | },
22 | }
23 |
--------------------------------------------------------------------------------
/src/components/item-content-accordion/index.js:
--------------------------------------------------------------------------------
1 | import template from './template.jade'
2 | import partial from 'partials/item-content.jade'
3 |
4 | export let name = 'item-content-accordion'
5 |
6 | export default {
7 | name,
8 | props: [
9 | 'icon',
10 | 'title',
11 | 'after',
12 | 'subtitle',
13 | 'text',
14 | // TODO - for remove 'component is instance'
15 | 'class',
16 | 'href',
17 | ],
18 | template: template(),
19 | partials: { partial: partial() },
20 | }
21 |
--------------------------------------------------------------------------------
/src/components/operation-item/template.jade:
--------------------------------------------------------------------------------
1 | item-content-accordion(
2 | v-if='kontr',
3 | :icon.once='operation',
4 | :title.once='title')
5 | .badge.badge-clear(slot='after') {{* date }}
6 |
7 | .table-shadow(slot='accordion',)
8 | container-item-table(
9 | :transport.once='transport',
10 | :kontr.once='kontr')
11 |
12 | item-content(
13 | v-else
14 | :icon.once='operation',
15 | :title.once='title')
16 | .badge.badge-clear(slot='after') {{* date }}
17 |
--------------------------------------------------------------------------------
/src/components/navbar/template.jade:
--------------------------------------------------------------------------------
1 | mixin left()
2 | slot(name='left')
3 | a(href='#' @click='click').link.icon-only
4 | icon(:id='icon')
5 |
6 | mixin center()
7 | slot(name='center') {{ $t(title) }}
8 |
9 | mixin right()
10 | slot(name='right')
11 |
12 | .navbar
13 | .navbar-inner
14 | .left: +left()
15 | .center(class=style.center): +center()
16 | .right: +right()
17 | .progressbar-infinite(
18 | v-if='progress',
19 | class=style.progressbar)
20 |
21 |
--------------------------------------------------------------------------------
/src/pages/contacts/dryTerminal.js:
--------------------------------------------------------------------------------
1 | export let title = 'Сухой терминал'
2 |
3 | export let list = [
4 | {
5 | title: 'Код получателя',
6 | text: '7149, ОКПО 15262378',
7 | type: 'image',
8 | }, {
9 | title: 'Адрес ЗАО «ПИК»',
10 | text: '692770, г. Артем, ул. Гагарина, 23',
11 | type: 'address',
12 | }, {
13 | title: 'Станция и дорога назначения',
14 | text: 'Угольная, ДВЖД, код станции 982102, подача на п/путь ЗАО «ПИК»',
15 | type: 'address',
16 | },
17 | ]
18 |
--------------------------------------------------------------------------------
/src/components/container-item/index.js:
--------------------------------------------------------------------------------
1 | import template from './template.jade'
2 | import style from './style.scss'
3 |
4 | export let name = 'container-item'
5 |
6 | export default {
7 | props: [
8 | { name: 'title', required: true },
9 | { name: 'type', required: true },
10 | 'text',
11 | 'size',
12 | 'load',
13 | ],
14 | template: template({name, style}),
15 | filters: {
16 | parseSize(size) {
17 | return this.$t(`containers.sizes[${size}]`)
18 | },
19 | },
20 | }
21 |
--------------------------------------------------------------------------------
/src/images/icons-ionic/clip.svg:
--------------------------------------------------------------------------------
1 |
2 |
5 |
--------------------------------------------------------------------------------
/src/pages/news/index/index.js:
--------------------------------------------------------------------------------
1 | import dateMixin from 'mixins/filters/date'
2 |
3 | import style from './style.scss'
4 | import template from './template.jade'
5 |
6 | var name = 'news-index'
7 |
8 | export default {
9 | name,
10 | mixins: [dateMixin],
11 | template: template({name, style}),
12 |
13 | vuex: {
14 | getters: {
15 | newsList: state => state.news.list,
16 | },
17 | },
18 | filters: {
19 | background(url) {
20 | return `background-image: url(${url})`
21 | },
22 | },
23 | }
24 |
--------------------------------------------------------------------------------
/src/modules/icons.js:
--------------------------------------------------------------------------------
1 | // http://tympanus.net/codrops/2015/07/16/styling-svg-use-content-css/
2 |
3 | import containers from 'images/containers'
4 | import f7 from 'images/icons-f7'
5 | import ionic from 'images/icons-ionic'
6 | import vsct from 'images/icons-vsct'
7 | import operations from 'images/operations'
8 |
9 | export {
10 | containers,
11 | f7,
12 | ionic,
13 | vsct,
14 | operations,
15 | }
16 |
17 | export default Object.assign({},
18 | containers,
19 | f7,
20 | ionic,
21 | operations,
22 | vsct
23 | )
24 |
--------------------------------------------------------------------------------
/src/components/bill-info-item-table/template.jade:
--------------------------------------------------------------------------------
1 | .content-block
2 | .row
3 | .col-33 {{ $t('bills.count') }}
4 | .col-66 {{* count }}
5 |
6 | .row
7 | .col-33 {{ $t('bills.price') }}
8 | .col-66 {{* price | formatSumm}}
9 |
10 | .row
11 | .col-33 {{ $t('bills.summa') }}
12 | .col-66 {{* summa | formatSumm}}
13 |
14 | .row
15 | .col-33 {{ $t('bills.NDS') }}
16 | .col-66 {{* NDS | formatSumm }}
17 |
18 | .row
19 | .col-33 {{ $t('bills.summands') }}
20 | .col-66 {{* summands | formatSumm }}
21 |
--------------------------------------------------------------------------------
/src/pages/profile/edit/template.jade:
--------------------------------------------------------------------------------
1 | Page(v-el:page name=name).navbar-fixed
2 | Navbar(title='profile.title' state='back')
3 |
4 | .page-content
5 | .list-block.inputs-list.clear-both
6 | ul: li(v-for='(key, value) in profile')
7 | item-content
8 | .label(slot='title') {{ toProfileName(key) }}
9 | template(slot='input')
10 | .item-input.item-input-field
11 | textarea.resizable(
12 | type='text',
13 | v-model='value',
14 | debounce='500')
15 |
--------------------------------------------------------------------------------
/src/pages/feedback/index.js:
--------------------------------------------------------------------------------
1 | import { F7, isAndroid } from 'commons'
2 |
3 | import template from './template.jade'
4 |
5 | var name = 'feedback'
6 |
7 | export default {
8 | name,
9 | template: template({name}),
10 |
11 | data: () => ({
12 | textarea: '',
13 | isAndroid,
14 | }),
15 |
16 | methods: {
17 | onSubmit() {
18 | var textarea = this.$get('textarea')
19 | this.$nextTick( () =>
20 | F7.alert(textarea, 'Форма обратной связи')
21 | )
22 | this.$set('textarea', null)
23 | },
24 | },
25 | }
26 |
--------------------------------------------------------------------------------
/src/images/operations/seal.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
--------------------------------------------------------------------------------
/src/components/container-item-table/index.js:
--------------------------------------------------------------------------------
1 | import dateMixin from 'mixins/filters/date'
2 | import stockMixin from 'mixins/filters/stock'
3 | import template from './template.jade'
4 |
5 | export let name = 'container-item-table'
6 |
7 | export default {
8 | props: [
9 | 'number',
10 | 'type',
11 | 'load',
12 | 'size',
13 | 'date_in',
14 | 'date_out',
15 | 'transport',
16 | 'kontr',
17 | 'konos',
18 | 'sklad_in',
19 | 'sklad_out',
20 | ],
21 | mixins: [dateMixin, stockMixin],
22 | template: template({name}),
23 | }
24 |
--------------------------------------------------------------------------------
/src/mixins/filters/date.js:
--------------------------------------------------------------------------------
1 | import { moment } from 'commons'
2 |
3 | const FORMAT = 'L'
4 | const FORMAT_EXTEND = 'LL'
5 |
6 | export default {
7 | filters: {
8 | date(date) {
9 | return moment(date).format(FORMAT)
10 | },
11 |
12 | dateFull(date) {
13 | return moment(date).format(FORMAT_EXTEND)
14 | },
15 |
16 | rangeDate(container) {
17 | var date_in = moment(container.date_in).format(FORMAT)
18 | var date_out = moment(container.date_out).format(FORMAT)
19 | return `${date_in} - ${date_out}`
20 | },
21 | },
22 | }
23 |
--------------------------------------------------------------------------------
/src/modules/app/index.js:
--------------------------------------------------------------------------------
1 | /* global DEBUG */
2 |
3 | import { F7 } from 'commons'
4 | import store from 'vuex/store'
5 | import template from './template.jade'
6 |
7 | var name = 'app'
8 |
9 | export default {
10 | name,
11 | store,
12 | template: template(),
13 |
14 | vuex: {
15 | getters: {
16 | auth: state => state.auth.login,
17 | },
18 | },
19 |
20 | ready() {
21 | DEBUG && console.log('init', name)
22 |
23 | F7.init()
24 | var mainView = F7.addView(this.$els.view, {})
25 | store.mainView = mainView
26 | },
27 | }
28 |
--------------------------------------------------------------------------------
/src/images/icons-f7/ios-camera.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/images/operations/supply.svg:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
--------------------------------------------------------------------------------
/src/pages/feedback/template.jade:
--------------------------------------------------------------------------------
1 | Page(v-el:page name=name).navbar-fixed
2 | Navbar
3 | a.floating-button(
4 | v-if='isAndroid'
5 | v-show='textarea.trim()'
6 | @click.stop.prevent='onSubmit'
7 | href='#')
8 | icon(id='check')
9 |
10 | .page-content
11 | .content-block
12 | p {{ $t('feedback.text') }}
13 | form(@submit.stop.prevent='onSubmit').list-block
14 | .item-input
15 | textarea.resizable(
16 | v-model='textarea'
17 | debounce='500'
18 | placeholder="{{ $t('feedback.placeholder') }}")
19 |
--------------------------------------------------------------------------------
/src/pages/news/index/template.jade:
--------------------------------------------------------------------------------
1 | Page(v-el:page name=name).navbar-fixed
2 | Navbar(title='news.title')
3 | .page-content
4 | Card(v-for='news in newsList', class=style.card)
5 | div(
6 | slot='header',
7 | :style.once='news.image | background',
8 | class=style.header)
9 | div(slot='content', class=style.content)
10 | | {{* news.title }}
11 | template(slot='footer')
12 | span.color-gray {{* news.date | dateFull }}
13 | a(v-link="{name: 'news/item', params: {id: news.id }}").link
14 | | {{ $t('news.read') }}
15 |
--------------------------------------------------------------------------------
/src/pages/settings/i18n.js:
--------------------------------------------------------------------------------
1 | var en = {
2 | title: 'Settings',
3 | titleNotify: 'Notify about login in your cabinet',
4 | email: 'Notify via email',
5 | phone: 'Notify via phone',
6 | avatar: 'E-mail service for avatar with gravatar',
7 | lang: 'Change language',
8 | }
9 |
10 | var ru = {
11 | title: 'Настройки',
12 | titleNotify: 'Уведомления о входе в Ваш личный кабинет',
13 | email: 'Уведомлять по email',
14 | phone: 'Уведомлять по phone',
15 | avatar: 'E-mail для аватара с сервиса gravatar',
16 | lang: 'Сменить язык',
17 | }
18 |
19 | export default {en, ru}
20 |
--------------------------------------------------------------------------------
/src/pages/news/item/index.js:
--------------------------------------------------------------------------------
1 | import dateMixin from 'mixins/filters/date'
2 |
3 | import style from './style.scss'
4 | import template from './template.jade'
5 |
6 | var name = 'news-item'
7 |
8 | export default {
9 | name,
10 | mixins: [dateMixin],
11 | template: template({name, style}),
12 |
13 | vuex: {
14 | getters: {
15 | news: state => state.news.list,
16 | },
17 | },
18 |
19 | computed: {
20 | newsItem() {
21 | var id = this.$route.params.id | 0
22 | return this.$get('news').find( item => id === item.id )
23 | },
24 | },
25 | }
26 |
--------------------------------------------------------------------------------
/src/pages/profile/edit/index.js:
--------------------------------------------------------------------------------
1 | import { F7 } from 'commons'
2 | import template from './template.jade'
3 |
4 | var name = 'profile-edit'
5 |
6 | export default {
7 | name,
8 | template: template({ name }),
9 |
10 | vuex: {
11 | getters: {
12 | profile: state => state.profile.data || [],
13 | },
14 | },
15 |
16 | methods: {
17 | toProfileName(key) {
18 | return this.$t(`profile['${key}']`)
19 | }
20 | },
21 |
22 | events: {
23 | ['profile:update']() {
24 | F7.alert('Profile update', '', () => window.history.back())
25 | },
26 | },
27 | }
28 |
--------------------------------------------------------------------------------
/src/images/icons-vsct/logo-emblem.svg:
--------------------------------------------------------------------------------
1 |
2 |
10 |
--------------------------------------------------------------------------------
/src/pages/settings/index/index.js:
--------------------------------------------------------------------------------
1 | import { toggleNotify } from 'vuex/actions'
2 | import template from './template.jade'
3 |
4 | var name = 'settings-index'
5 |
6 | export default {
7 | name,
8 | template: template({ name }),
9 |
10 | vuex: {
11 | actions: { toggleNotify },
12 |
13 | getters: {
14 | settings: state => state.settings || [],
15 | },
16 | },
17 |
18 | methods: {
19 | toggleNotify: (e) => {
20 | this.toggleNotify(e.target.name)
21 | },
22 |
23 | openLangs() {
24 | this.$root.$broadcast('open:actionSheet:langs')
25 | },
26 | },
27 | }
28 |
--------------------------------------------------------------------------------
/src/services/CacheItem.js:
--------------------------------------------------------------------------------
1 | /**
2 | * cache item (bill or container) by number
3 | * @param {String} name — имя кеша
4 | * @param