Advertisement
Guest User

Untitled

a guest
Mar 30th, 2020
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 40.65 KB | None | 0 0
  1. <template>
  2. <div class="doc-base__content doc-base__content_left">
  3. <div class="doc-base__article">
  4. <div class="doc-base__article-section doc-base__article-section--wrap">
  5. <a class="doc-base__back_mobile" href="">
  6. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240.823 240.823">
  7. <path
  8. d="M57.633 129.007L165.93 237.268c4.752 4.74 12.451 4.74 17.215 0 4.752-4.74 4.752-12.439 0-17.179l-99.707-99.671 99.695-99.671c4.752-4.74 4.752-12.439 0-17.191-4.752-4.74-12.463-4.74-17.215 0L57.621 111.816c-4.679 4.691-4.679 12.511.012 17.191z"></path>
  9. </svg>
  10. Назад в базу
  11. </a>
  12. <!-- Заголовок -->
  13. <div class="doc-base__head-top">
  14. <div class="doc-base__title">
  15. <a class="doc-base__back-link" href="javascript:void(0)" v-show="rubric_name"
  16. @click="previousRubric">
  17. <i class="fa fa-angle-left"></i>
  18. </a>
  19. <span v-show="!rubric_name"> Документы </span>
  20. <span v-show="rubric_name"> {{rubric_name}} </span>
  21. </div>
  22.  
  23. <div class="doc-base__btn-wrap">
  24. <button class="base-btn doc-base__rubric-btn" title="Рубрики">
  25. <div class="base-btn__text">Рубрики</div>
  26. <svg width="5" height="8" viewBox="0 0 5 8" fill="none" xmlns="http://www.w3.org/2000/svg">
  27. <path d="M1 1L4 4" stroke="black" stroke-linecap="round"/>
  28. <path d="M4 4L1 7" stroke="black" stroke-linecap="round"/>
  29. </svg>
  30. </button>
  31. <a href="/documents/add/" v-if="is_editor_document || is_editor_rubric"
  32. class="base-btn base-btn--primary base-btn_icon doc-base__add-article"
  33. title="Добавить документ">
  34. <svg class="base-btn__sign" width="16" height="14" viewBox="0 0 14 14">
  35. <g>
  36. <g>
  37. <g>
  38. <path fill="none" stroke="#FFFFFF" stroke-linecap="round"
  39. stroke-miterlimit="50" stroke-width="1.96" d="M6.996 1.545v10.91"/>
  40. </g>
  41. <g>
  42. <path fill="none" stroke="#FFFFFF" stroke-linecap="round"
  43. stroke-miterlimit="50" stroke-width="1.96" d="M1.55 7h10.91"/>
  44. </g>
  45. </g>
  46. </g>
  47. </svg>
  48. </a>
  49. </div>
  50. </div>
  51. <!-- Фильтр -->
  52. <div class="doc-base__filter" v-show="rubrics.length !== 0 || materials.length !== 0 || search">
  53. <!-- Поиск -->
  54. <div class="doc-base__search doc-base__search--mobile" name="search-article">
  55. <div class="input-group">
  56. <input type="text" class="doc-base__search-input form-control" placeholder="Поиск"
  57. id="id_search" name="search" v-model="search">
  58. <button type="submit" class="doc-base__search-btn btn fa fa-search"
  59. @click="searchData"></button>
  60. </div>
  61. </div>
  62. <div class="doc-base__table-header">
  63. <div class="doc-base__col-header doc-base__col-header--small" v-if="is_editor_document || is_editor_rubric">
  64. </div>
  65. <div class="doc-base__col-header doc-base__col-header--large">
  66. <span class="doc-base__col-title">Название</span>
  67. </div>
  68. <div class="doc-base__col-header"></div>
  69. <div class="doc-base__col-header">
  70. <span class="doc-base__col-title">Дата добавления</span>
  71. </div>
  72. <div class="doc-base__col-header" v-if="is_editor_document || is_editor_rubric"></div>
  73. </div>
  74. </div>
  75. </div>
  76. <!-- Пустая рубрика -->
  77. <<<<<<< HEAD
  78. <div class="doc-base__article-section" v-if="rubrics.length === 0 && materials.length === 0 && !search"
  79. v-show="!isLoading">
  80. =======
  81. <div class="doc-base__article-section" v-if="(rubrics.length === 0 && materials.length === 0 && !search) && (is_editor_document || is_editor_rubric)" v-show="!isLoading">
  82. >>>>>>> 27f0264e695b32a258adcebabb299461ddc1d399
  83. <a href="/documents/add/" class="doc-base__add-material">
  84. <span class="add-material__link">+ Добавить документ</span>
  85. </a>
  86. </div>
  87.  
  88.  
  89. <!-- Поиск не дал результатов-->
  90. <div class="doc-base__empty-block"
  91. v-if="(search && rubrics.length === 0 && materials.length === 0) || rubrics.length === 0 && materials.length === 0"
  92. v-show="!isLoading">
  93. <!-- doc-base__block-content-->
  94. <div class="doc-base__empty-block--content">
  95. <svg class="content__icon" width="112" height="112" fill="none" xmlns="http://www.w3.org/2000/svg">
  96. <path d="M56 112c30.928 0 56-25.072 56-56S86.928 0 56 0 0 25.072 0 56s25.072 56 56 56z"
  97. fill="#FFF9EC"/>
  98. <path d="M61.494 64.714l1.378 1.378 1.611 1.603.621.626 3.215-3.218-3.604-3.61-3.22 3.22z"
  99. fill="#5D6D7E"/>
  100. <path
  101. d="M71.598 65.082l11.094 11.094a4.577 4.577 0 011.349 3.258 4.595 4.595 0 01-4.607 4.607 4.591 4.591 0 01-3.258-1.347L65.082 71.599l6.516-6.517z"
  102. fill="#FF8E31"/>
  103. <path
  104. d="M70.067 66.615l.901-.903 11.096 11.095a3.687 3.687 0 011.085 2.626c0 .995-.386 1.93-1.085 2.632a.643.643 0 01-.906-.002.64.64 0 010-.9 2.43 2.43 0 00.716-1.731 2.411 2.411 0 00-.713-1.722L70.067 66.615z"
  105. fill="#FECE59"/>
  106. <path
  107. d="M65.082 71.599l6.516-6.517-.486-.487a1.598 1.598 0 00-1.14-.474c-.45 0-.851.178-1.142.471l-4.237 4.24a1.599 1.599 0 00-.472 1.14c0 .442.181.85.472 1.136l.489.49zM27.959 48.788c0-11.502 9.326-20.83 20.83-20.83 11.505 0 20.83 9.329 20.83 20.83 0 11.505-9.326 20.83-20.83 20.834-11.504-.003-20.83-9.329-20.83-20.834z"
  108. fill="#34495E"/>
  109. <path
  110. d="M48.789 67.365c10.256 0 18.575-8.316 18.575-18.577 0-10.255-8.319-18.574-18.575-18.574-10.258 0-18.576 8.318-18.576 18.574 0 10.26 8.318 18.577 18.576 18.577z"
  111. fill="#5D6D7E"/>
  112. <path
  113. d="M48.789 65.878c9.436 0 17.088-7.65 17.088-17.09 0-9.434-7.652-17.088-17.088-17.088S31.7 39.354 31.7 48.788c0 9.44 7.651 17.09 17.089 17.09z"
  114. fill="#CEE2F2"/>
  115. <path
  116. d="M49.239 34.506a1.514 1.514 0 00-1.342-.671 14.868 14.868 0 00-6.625 1.99 1.515 1.515 0 00-.546 2.065 1.507 1.507 0 002.06.541 11.942 11.942 0 015.288-1.584 1.497 1.497 0 001.414-1.586 1.428 1.428 0 00-.25-.755zM39.563 39.46a1.5 1.5 0 00-2.418-.107 14.923 14.923 0 00-3.067 6.57c-.553 2.866-.264 5.8.835 8.49a1.509 1.509 0 001.971.822 1.503 1.503 0 00.823-1.965 11.866 11.866 0 01-.659-6.774 11.792 11.792 0 012.438-5.244 1.508 1.508 0 00.077-1.792z"
  117. fill="#fff"/>
  118. </svg>
  119. <span class="content__text"
  120. v-show="rubrics.length === 0 && materials.length === 0 && search && rubric_id">
  121. Поиск по рубрике не дал результатов. Попробуйте выполнить
  122. <a href="javascript:void(0)" @click="loadHome">поиск</a> на главной странице Документов
  123. </span>
  124. <span class="content__text"
  125. v-show="rubrics.length === 0 && materials.length === 0 && search && !rubric_id">
  126. По вашему запросу ничего не найдено
  127. </span>
  128. <<<<<<< HEAD
  129. <span class="content__text"
  130. v-show="rubrics.length === 0 && materials.length === 0 && !search && !rubric_id">
  131. Раздел документов пуст.
  132. Добавьте документы, их смогут просматривать сотрудники компании, которым вы откроете доступ
  133. </span>
  134. <a href="/documents/add/" class="btn doc-base__block-btn"
  135. v-show="rubrics.length === 0 && materials.length === 0 && !search">+ Добавить документ</a>
  136. =======
  137. <span class="content__text" v-show="rubrics.length === 0 && materials.length === 0 && !search && !rubric_id" v-if="is_editor_document || is_editor_rubric">
  138. Раздел документов пуст.
  139. Добавьте документы, их смогут просматривать сотрудники компании, которым вы откроете доступ
  140. </span>
  141. <a href="/documents/add/" class="btn doc-base__block-btn" v-if="is_editor_document || is_editor_rubric" v-show="rubrics.length === 0 && materials.length === 0 && !search">+ Добавить документ</a>
  142. >>>>>>> 27f0264e695b32a258adcebabb299461ddc1d399
  143. </div>
  144. </div>
  145.  
  146. <div id="result_list_container">
  147. <div class="doc-base__list" v-if="rubrics.length > 0" v-for="(item, index) in rubrics"
  148. :key="'item_' + item.id">
  149. <div class="doc-base__list-item" v-if="item.is_rubric">
  150. <!-- Add class doc-base__list-item--not-rubric -->
  151. <div class="doc-base__item-caption" v-if="is_editor_document || is_editor_rubric">
  152. <span class="item-caption__text" style="cursor: pointer;" @click="loadRubric(item)">{{item.name}}</span>
  153. <<<<<<< HEAD
  154. <v-popover
  155. popoverInnerClass="one-rubric__popover-inner"
  156. popoverClass="one-rubric__popover"
  157. placement="bottom-center"
  158. offset="1"
  159. >
  160. =======
  161. <v-popover v-if="is_editor_document || is_editor_rubric"">
  162. >>>>>>> 27f0264e695b32a258adcebabb299461ddc1d399
  163. <span class="item-caption__more">
  164. <svg xmlns="http://www.w3.org/2000/svg" width="18" height="4">
  165. <path fill-rule="evenodd"
  166. d="M4 2a2 2 0 10-4 0 2 2 0 004 0zM11 2a2 2 0 10-4 0 2 2 0 004 0zM18 2a2 2 0 10-4 0 2 2 0 004 0z"
  167. clip-rule="evenodd"/>
  168. </svg>
  169. </span>
  170. <div class="menu-btn__inner" slot="popover">
  171. <<<<<<< HEAD
  172. <a href="javascript:void(0)" class="menu-btn__button one-rubric__change">Редактировать</a>
  173. <button class="menu-btn__button one-rubric__delete"
  174. @click="modalDeleteRubric(item)">Удалить
  175. </button>
  176. =======
  177. <a href="javascript:void(0)" class="menu-btn__button one-rubric__change js-edit-rubric" :id="item.id" v-close-popover>Редактировать</a>
  178. <button class="menu-btn__button one-rubric__delete" @click="modalDeleteRubric(item)" v-close-popover>Удалить</button>
  179. >>>>>>> 27f0264e695b32a258adcebabb299461ddc1d399
  180. </div>
  181. </v-popover>
  182. </div>
  183. <div class="doc-base__article-section" v-if="item.documents.length > 0">
  184. <div class="doc-base__rubric-item" v-if="item.documents.length > 0"
  185. v-for="(document, index) in item.documents" :key="'document_' + document.id">
  186. <div class="doc-base__col-item doc-base__col-item--small" v-if="is_editor_document || is_editor_rubric">
  187. <label class="css-control css-control-sm css-control-secondary css-checkbox">
  188. <input type="checkbox" name="selected"
  189. class="css-control-input js-show-actions">
  190. <span class="css-control-indicator"></span>
  191. </label>
  192. </div>
  193. <div class="doc-base__col-wrap">
  194. <div class="doc-base__col-item doc-base__col-item--large">
  195. <div class="doc-base__col-text doc-base__col-text--bold">
  196. <a href="javascript:void(0)"
  197. class="doc-base__col-text doc-base__col-text--link doc-base__col-text--bold"
  198. :title="document.name"
  199. >
  200. <span v-html="document.name"></span>
  201. </a>
  202. </div>
  203. </div>
  204. <div class="doc-base__col-item"></div>
  205. <div class="doc-base__col-item"></div>
  206.  
  207. <div class="doc-base__col-item doc-base__col-item--text">
  208. <span class="doc-base__col-text text-center js-date_change">
  209. {{document.date}}
  210. </span>
  211. </div>
  212.  
  213. <div class="doc-base__col-item"></div>
  214.  
  215. <div class="doc-base__col-item doc-base__col-item--very-small" v-if="is_editor_document || is_editor_rubric">
  216. <div class="doc-base__col-item-wrapper">
  217. <a class="doc-base__col-button"
  218. :href="'/documents/edit/' + document.id + '/'">
  219. <svg class="doc-base__col-icon--pencil"
  220. xmlns="http://www.w3.org/2000/svg"
  221. width="10" height="10" fill="none">
  222. <path fill-rule="evenodd"
  223. d="M9.796 1.176L8.89.264a.897.897 0 00-1.272 0l-.869.873 2.034 2.045 1.014-1.019a.7.7 0 000-.987zm-3.048-.028l2.034 2.045-5.679 5.694L1.07 6.843l5.678-5.695zM.286 9.993a.232.232 0 01-.28-.277l.513-2.32 2.034 2.045-2.267.552z"
  224. clip-rule="evenodd"/>
  225. </svg>
  226. </a>
  227. <span class="doc-base__col-button" @click="modalDeleteDocument(document)">
  228. <svg class="doc-base__col-icon--delete"
  229. xmlns="http://www.w3.org/2000/svg" width="10" height="10"
  230. fill="none">
  231. <path stroke-linecap="round" stroke-width="2"
  232. d="M1 1l7.615 7.615M8.615 1L1 8.615"/>
  233. </svg>
  234. </span>
  235. </div>
  236. <<<<<<< HEAD
  237. <v-popover
  238. popoverInnerClass="one-rubric__popover-inner"
  239. popoverClass="one-rubric__popover"
  240. >
  241. <button class="one-rubric__menu-open"></button>
  242. <div class="menu-btn__inner" slot="popover">
  243. <a :href="'/documents/edit/' + document.id + '/'"
  244. class="menu-btn__button one-rubric__change">Редактировать</a>
  245. <button class="menu-btn__button one-rubric__delete"
  246. @click="modalDeleteDocument(document)">Удалить
  247. </button>
  248. </div>
  249. </v-popover>
  250. =======
  251. >>>>>>> 27f0264e695b32a258adcebabb299461ddc1d399
  252. </div>
  253. </div>
  254. </div>
  255. </div>
  256. <button class="base-btn doc-base__rubric-more" @click="loadMore(item)"
  257. v-show="item.is_exists_more">Показать еще
  258. </button>
  259. </div>
  260. </div>
  261. </div>
  262. <div class="doc-base__list" v-show="materials.length > 0">
  263. <div class="doc-base__list-item doc-base__list-item--not-rubric">
  264. <div class="doc-base__article-section" v-for="(document, index) in materials"
  265. :key="'document_' + document.id">
  266. <div class="doc-base__rubric-item">
  267. <div class="doc-base__col-item doc-base__col-item--small" v-if="is_editor_document || is_editor_rubric">
  268. <label class="css-control css-control-sm css-control-secondary css-checkbox">
  269. <input type="checkbox" name="selected"
  270. class="css-control-input js-show-actions">
  271. <span class="css-control-indicator"></span>
  272. </label>
  273. </div>
  274. <div class="doc-base__col-wrap">
  275. <div class="doc-base__col-item doc-base__col-item--large">
  276. <div class="doc-base__col-text doc-base__col-text--bold">
  277. <a href="javascript:void(0)"
  278. class="doc-base__col-text doc-base__col-text--link doc-base__col-text--bold">
  279. <span v-html="document.name"></span>
  280. </a>
  281. </div>
  282. </div>
  283. <div class="doc-base__col-item"></div>
  284. <div class="doc-base__col-item"></div>
  285.  
  286. <div class="doc-base__col-item doc-base__col-item--text">
  287. <span class="doc-base__col-text text-center js-date_change">
  288. {{document.date}}
  289. </span>
  290. </div>
  291.  
  292. <div class="doc-base__col-item"></div>
  293.  
  294. <div class="doc-base__col-item doc-base__col-item--very-small" v-if="is_editor_document || is_editor_rubric">
  295. <div class="doc-base__col-item-wrapper">
  296. <a class="doc-base__col-button"
  297. :href="'/documents/edit/' + document.id + '/'">
  298. <svg class="doc-base__col-icon--pencil"
  299. xmlns="http://www.w3.org/2000/svg"
  300. width="10" height="10" fill="none">
  301. <path fill-rule="evenodd"
  302. d="M9.796 1.176L8.89.264a.897.897 0 00-1.272 0l-.869.873 2.034 2.045 1.014-1.019a.7.7 0 000-.987zm-3.048-.028l2.034 2.045-5.679 5.694L1.07 6.843l5.678-5.695zM.286 9.993a.232.232 0 01-.28-.277l.513-2.32 2.034 2.045-2.267.552z"
  303. clip-rule="evenodd"/>
  304. </svg>
  305. </a>
  306. <span class="doc-base__col-button" @click="modalDeleteDocument(document)">
  307. <svg class="doc-base__col-icon--delete"
  308. xmlns="http://www.w3.org/2000/svg" width="10" height="10"
  309. fill="none">
  310. <path stroke-linecap="round" stroke-width="2"
  311. d="M1 1l7.615 7.615M8.615 1L1 8.615"/>
  312. </svg>
  313. </span>
  314. </div>
  315. </div>
  316. </div>
  317. </div>
  318. </div>
  319. </div>
  320. </div>
  321. </div>
  322.  
  323. <loading-spinner
  324. v-if="isLoading"
  325. class="wall__spinner"
  326. />
  327. <mugen-scroll
  328. :handler="infiniteScrollHandler"
  329. :should-handle="!isLoading"
  330. />
  331.  
  332. </div>
  333.  
  334. <!-- <div id="actions_block" class="doc-base__actions" v-if="is_editor_document || is_editor_rubric">-->
  335. <!-- <span class="doc-base__actions-item actions-item&#45;&#45;unchecked">Снять выделенные </span>-->
  336. <!-- <div class="doc-base__actions-item actions-item&#45;&#45;delete">-->
  337. <!-- <span class="actions-item&#45;&#45;delete-icon">-->
  338. <!-- ×-->
  339. <!-- </span>-->
  340. <!-- Удалить выделенные-->
  341. <!-- </div>-->
  342. <!-- </div>-->
  343. </div>
  344. </template>
  345.  
  346. <script>
  347. import Vue from 'vue'
  348. import MugenScroll from 'vue-mugen-scroll'
  349. import LoadingSpinner from "../../LoadingSpinner";
  350. import {mapActions, mapState} from "vuex"
  351.  
  352. export default {
  353. name: 'DocumentList',
  354. components: {
  355. MugenScroll,
  356. LoadingSpinner,
  357. },
  358. props: {
  359. is_editor_document: {
  360. type: Boolean,
  361. default: false
  362. },
  363. is_editor_rubric: {
  364. type: Boolean,
  365. default: true
  366. }
  367. },
  368. data() {
  369. return {
  370. nextData: '/api/v1/document/',
  371. isLoading: false,
  372. deleteDocument: [],
  373. deleteRubric: [],
  374. level_back: null,
  375. rubric_name: null,
  376. rubric_id: null,
  377. search: '',
  378. results: []
  379. }
  380. },
  381. computed: {
  382. rubrics: function () {
  383. let list = this.results.filter(item => !Array.isArray(item));
  384. list.map(item => {
  385. if (item.next === null) {
  386. item.is_exists_more = item.count > 2;
  387. item.next = '/api/v1/document/load_more/{ID}/'.replace('{ID}', item.id);
  388. }
  389. return item
  390. });
  391. list.map(rubric => {
  392. let documents = rubric.documents.filter(item => !this.deleteDocument.some(elem => elem.id === item.id));
  393. rubric.documents = documents;
  394. return rubric
  395. });
  396. console.log('deleteRubric', this.deleteRubric)
  397. return list.filter(item => !this.deleteRubric.some(elem => elem.id === item.id))
  398. },
  399. materials: function () {
  400. let materials = [],
  401. array = this.results.filter(item => Array.isArray(item));
  402. array.forEach(item => {
  403. materials.push(...item)
  404. });
  405. return materials.filter(item => !this.deleteDocument.some(elem => elem.id === item.id))
  406. },
  407. ...mapState('defaultData', [
  408. 'current_user'
  409. ]),
  410. },
  411. watch: {
  412. search: {
  413. handler: function (val, oldVal) {
  414. this.searchData();
  415. },
  416. deep: true
  417. },
  418. },
  419. methods: {
  420. async searchData() {
  421. if (this.search && this.nextData && this.rubric_id) {
  422. this.nextData = this.nextData + '?search=' + this.search + '&rubric=' + this.rubric_id;
  423. } else if (this.search && !this.nextData) {
  424. this.nextData = '/api/v1/document/?search=' + this.search;
  425. } else if (!this.search) {
  426. this.nextData = '/api/v1/document/';
  427. }
  428. this.results = [];
  429. this.infiniteScrollHandler();
  430. },
  431. async loadHome() {
  432. this.nextData = '/api/v1/document/';
  433. this.$emit('rubricID', 0);
  434. this.search = '';
  435. this.results = [];
  436. this.infiniteScrollHandler();
  437. },
  438. async previousRubric() {
  439. this.nextData = '/api/v1/document/';
  440. if (this.level_back) {
  441. this.nextData = '/api/v1/document/?rubric={ID}'.replace('{ID}', this.level_back);
  442. this.$emit('rubricID', this.level_back);
  443. } else {
  444. this.nextData = '/api/v1/document/';
  445. this.$emit('rubricID', 0);
  446. }
  447. this.results = [];
  448. this.infiniteScrollHandler();
  449. },
  450. async loadRubric(rubric) {
  451. this.nextData = '/api/v1/document/?rubric={ID}'.replace('{ID}', rubric.id);
  452. this.results = [];
  453. this.$emit('rubricID', rubric.id);
  454. this.infiniteScrollHandler();
  455. },
  456. async infiniteScrollHandler() {
  457.  
  458. if (!this.nextData) {
  459. return false;
  460. }
  461.  
  462. this.isLoading = true;
  463. let data = await this.loadList();
  464. this.results.push(...data);
  465. this.isLoading = false;
  466. },
  467. async loadMore(item) {
  468. Vue.axios
  469. .get(item.next)
  470. .then(response => {
  471. let documents = item.documents.concat(response.data.results);
  472. item.documents = [...new Set(documents.map(JSON.stringify))].map(JSON.parse);
  473. item.next = response.data.next;
  474. item.is_exists_more = !!item.next;
  475. })
  476. .catch((err) => {
  477. this.errorHandler(err);
  478. })
  479. },
  480. async loadList() {
  481. let data, response;
  482.  
  483. try {
  484. const request = Vue.axios.get(this.nextData);
  485. response = await request;
  486. data = response.data.results;
  487. this.nextData = response.data.next;
  488. this.level_back = response.data.level_back;
  489. this.rubric_name = response.data.rubric_name;
  490. this.rubric_id = response.data.rubric_id;
  491. return data
  492. } catch (err) {
  493. this.errorHandler(err);
  494. }
  495. },
  496. async modalDeleteDocument(document) {
  497. this.$swal({
  498. customClass: {
  499. confirmButton: 'btn btn-lg btn-alt-success m-5',
  500. cancelButton: 'btn btn-lg btn-alt-danger m-5'
  501. },
  502. title: 'Удалить документ?',
  503. text: document.name,
  504. icon: 'warning',
  505. showCancelButton: true,
  506. confirmButtonText: 'Да, удалить!',
  507. cancelButtonText: 'Отменить',
  508. preConfirm: function () {
  509. return new Promise(function (resolve) {
  510. setTimeout(function () {
  511. resolve();
  512. }, 50);
  513. });
  514. }
  515. }).then(value => {
  516. if (value.value) {
  517. let swal = this.$swal({
  518. title: 'Удаление...',
  519. icon: 'info',
  520. showConfirmButton: false,
  521. allowOutsideClick: false,
  522. html: '<i class="fa fa-2x fa-cog fa-spin"></i>'
  523. });
  524. // выполнение
  525. Vue.axios
  526. .delete(site_routes.document.destroy.replace('{ID}', document.id))
  527. .then(response => {
  528. this.popDocument(document);
  529. swal.close();
  530. this.$swal({
  531. title: 'Отлично!',
  532. text: 'Документ удален',
  533. icon: 'success',
  534. showConfirmButton: false,
  535. timer: 1400,
  536. });
  537. })
  538. .catch((err) => {
  539. this.$swal('Ошибка!', 'При обработке запроса произошла ошибка на сервере', 'error');
  540. this.errorHandler(err);
  541. });
  542. }
  543. }, reason => {
  544. // отказ
  545. });
  546. },
  547. async modalDeleteRubric(rubric) {
  548. this.$swal({
  549. customClass: {
  550. confirmButton: 'btn btn-lg btn-alt-success m-5',
  551. cancelButton: 'btn btn-lg btn-alt-danger m-5'
  552. },
  553. title: 'Удалить рубрику?',
  554. text: rubric.name,
  555. icon: 'warning',
  556. showCancelButton: true,
  557. confirmButtonText: 'Да, удалить!',
  558. cancelButtonText: 'Отменить',
  559. preConfirm: function () {
  560. return new Promise(function (resolve) {
  561. setTimeout(function () {
  562. resolve();
  563. }, 50);
  564. });
  565. }
  566. }).then(value => {
  567. if (value.value) {
  568. let swal = this.$swal({
  569. title: 'Удаление...',
  570. icon: 'info',
  571. showConfirmButton: false,
  572. allowOutsideClick: false,
  573. html: '<i class="fa fa-2x fa-cog fa-spin"></i>'
  574. });
  575. // выполнение
  576. Vue.axios
  577. .delete('/api/v1/rubric_document/{ID}/'.replace('{ID}', rubric.id))
  578. .then(response => {
  579. this.popRubric(rubric);
  580. swal.close();
  581. this.$swal({
  582. title: 'Отлично!',
  583. text: 'Рубрика удалена',
  584. icon: 'success',
  585. showConfirmButton: false,
  586. timer: 1400,
  587. });
  588. })
  589. .catch(error => {
  590. this.$swal({
  591. customClass: {
  592. confirmButton: 'btn btn-lg btn-alt-success m-5',
  593. cancelButton: 'btn btn-lg btn-alt-danger m-5'
  594. },
  595. title: 'Внимание!',
  596. text: error.response.data.message,
  597. icon: 'warning',
  598. showCancelButton: true,
  599. confirmButtonText: 'Да, удалить!',
  600. cancelButtonText: 'Отменить',
  601. preConfirm: function () {
  602. return new Promise(function (resolve) {
  603. setTimeout(function () {
  604. resolve();
  605. }, 50);
  606. });
  607. }
  608. }).then(value => {
  609. if (value.value) {
  610. let swal = this.$swal({
  611. title: 'Удаление...',
  612. icon: 'info',
  613. showConfirmButton: false,
  614. allowOutsideClick: false,
  615. html: '<i class="fa fa-2x fa-cog fa-spin"></i>'
  616. });
  617. // выполнение
  618. Vue.axios
  619. .delete('/api/v1/rubric_document/{ID}/?always_delete=1'.replace('{ID}', rubric.id))
  620. .then(response => {
  621. this.popRubric(rubric);
  622. swal.close();
  623. this.$swal({
  624. title: 'Отлично!',
  625. text: 'Рубрика удалена',
  626. icon: 'success',
  627. showConfirmButton: false,
  628. timer: 1400,
  629. });
  630. })
  631. .catch((err) => {
  632. this.errorHandler(err);
  633. });
  634. }
  635. }, reason => {
  636. // отказ
  637. });
  638. });
  639. }
  640. }, reason => {
  641. // отказ
  642. });
  643. },
  644. errorHandler(err) {
  645. swal('Ошибка!', 'При обработке запроса произошла ошибка на сервере', 'error');
  646. console.error(err);
  647. this.isLoading = false;
  648. },
  649. popDocument(document) {
  650. this.$emit('changeList', true);
  651. this.deleteDocument.push(document);
  652. },
  653. popRubric(rubric) {
  654. console.log('rubric', rubric)
  655. this.$emit('changeList', true);
  656. this.deleteRubric.push(rubric);
  657. }
  658. }
  659. }
  660. </script>
  661. <style lang="sass">
  662. @import "#sass/v-style"
  663. .doc-base__item-caption .item-caption__more
  664. margin-left: 0
  665.  
  666. .trigger
  667. margin-left: 10px
  668.  
  669. .swal2-icon.swal2-warning,
  670. .swal2-icon.swal2-info
  671. font-size: 20px
  672.  
  673. .one-rubric
  674. &__popover
  675. border-radius: 10px
  676. border: none !important
  677. box-shadow: 1px 1px 24px 4px rgba(38, 38, 38, 0.3)
  678.  
  679. .doc-base__col-text
  680. overflow: hidden
  681. text-overflow: ellipsis
  682. text-align: left !important
  683.  
  684. .doc-base__col-text > span
  685. overflow: hidden
  686. white-space: nowrap
  687.  
  688. .doc-base__col-item--large
  689. width: 17%
  690.  
  691. .doc-base__col-header--small
  692. width: 2%
  693.  
  694. #main-container
  695. background: #f0f2f5
  696. </style>
  697. .tooltip
  698. display: block !important
  699. z-index: 10000
  700.  
  701. .tooltip-inner
  702. background: #fff
  703. color: #000
  704. border-radius: 4px
  705. font-size: 13px
  706. padding: 10px 20px
  707. box-shadow: 0px 3px 10px rgba(0, 0, 0, 0.12)
  708. text-align: left
  709.  
  710.  
  711. .tooltip-arrow
  712. width: 0
  713. height: 0
  714. border-style: solid
  715. position: absolute
  716. margin: 5px
  717. border-color: #fff
  718. z-index: 1
  719. box-shadow: 0px 3px 10px rgba(0, 0, 0, 0.12)
  720.  
  721. &[x-placement^="top"]
  722. margin-bottom: 5px
  723.  
  724. .tooltip-arrow
  725. border-width: 5px 5px 0 5px
  726. border-left-color: transparent !important
  727. border-right-color: transparent !important
  728. border-bottom-color: transparent !important
  729. bottom: -5px
  730. left: calc(50% - 5px)
  731. margin-top: 0
  732. margin-bottom: 0
  733.  
  734.  
  735.  
  736. &[x-placement^="bottom"]
  737. margin-top: 5px
  738.  
  739. .tooltip-arrow
  740. border-width: 0 5px 5px 5px
  741. border-left-color: transparent !important
  742. border-right-color: transparent !important
  743. border-top-color: transparent !important
  744. top: -5px
  745. left: calc(50% - 5px)
  746. margin-top: 0
  747. margin-bottom: 0
  748.  
  749.  
  750.  
  751. &[x-placement^="right"]
  752. margin-left: 5px
  753.  
  754. .tooltip-arrow
  755. border-width: 5px 5px 5px 0
  756. border-left-color: transparent !important
  757. border-top-color: transparent !important
  758. border-bottom-color: transparent !important
  759. left: -5px
  760. top: calc(50% - 5px)
  761. margin-left: 0
  762. margin-right: 0
  763.  
  764.  
  765.  
  766. &[x-placement^="left"]
  767. margin-right: 5px
  768.  
  769. .tooltip-arrow
  770. border-width: 5px 0 5px 5px
  771. border-top-color: transparent !important
  772. border-right-color: transparent !important
  773. border-bottom-color: transparent !important
  774. right: -5px
  775. top: calc(50% - 5px)
  776. margin-left: 0
  777. margin-right: 0
  778.  
  779.  
  780.  
  781. &.popover
  782. $border: 1px solid #c5d0db
  783.  
  784. border: $border
  785. outline: none
  786.  
  787. .popover-inner
  788.  
  789. background: #fff
  790. color: #000
  791. border-radius: 4px
  792. font-size: 13px
  793. padding: 10px 20px
  794. box-shadow: 0 1px 3px rgba(0,0,0,.1)
  795. text-align: left
  796. border-color: #fff
  797.  
  798.  
  799. .popover-arrow
  800. border-color: #fff
  801.  
  802. &[aria-hidden='true']
  803. visibility: hidden
  804. opacity: 0
  805. transition: opacity .15s, visibility .15s
  806.  
  807.  
  808. &[aria-hidden='false']
  809. visibility: visible
  810. opacity: 1
  811. transition: opacity .15s
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement