meeting_pad.vue 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. <template>
  2. <div>
  3. <div class="display-row nav">
  4. <div class="display-row">
  5. <el-image :src="logo" fit="fit" class="icon-32" />
  6. <div class="title" style="margin-left:4px">灯塔智慧党建-控制端</div>
  7. </div>
  8. <div class="logout" @click="logout">
  9. 退出登录
  10. </div>
  11. </div>
  12. <div class="left-bar display-cloumn">
  13. <div v-for="item,index in menulist" @click="menuClick(index)">
  14. <div v-if="index==menuIndex" class="display-row memu_item" style="background: rgba(202, 0, 1, 0.102);">
  15. <svg-icon :icon-class="item.icon" class="menu-icon"
  16. style="margin-left: 12px;margin-right:4px;color: #CA0001;" />
  17. <div style="flex:auto;" class="menu_title_selected">
  18. {{item.name}}
  19. </div>
  20. <div style="width:2px;height: 35px;background-color: #CA0001;"></div>
  21. </div>
  22. <div v-else class="display-row memu_item">
  23. <svg-icon :icon-class="item.icon" class="menu-icon"
  24. style="margin-left: 12px;margin-right:4px;color: #545454;" />
  25. <div style="flex:auto;" class="menu_title">
  26. {{item.name}}
  27. </div>
  28. </div>
  29. </div>
  30. </div>
  31. <div class="content-class">
  32. <div class="display-row" style="flex-wrap: wrap;padding-top: 16px;padding-left: 16px; height: 102%;overflow-y: auto;align-content: flex-start;" @scroll="handleScroll">
  33. <div v-for="item,index in meetingList" class="content-item display-cloumn"
  34. style="margin-right:16px;margin-bottom: 16px;padding: 12px;justify-content: space-between;">
  35. <div class="display-row">
  36. <div style="flex: auto;justify-content: space-between;" class="display-cloumn">
  37. <div class="item-title two-lines">
  38. {{ item.title }}
  39. </div>
  40. <div class="display-row" style="align-items: center;">
  41. <img :src="weizhiImg" style="width:13px;height:13px;margin-right: 4px;" />
  42. <div class="time-font ">{{ item.address }}</div>
  43. </div>
  44. </div>
  45. <div style="margin-left: 7px;">
  46. <!-- <el-image :src="logo" style="width:107px;height:60px;" /> -->
  47. <image-preview :src="item.picsPath+'_400.png'" :width="107" :height="60" :key="item.picsPath"
  48. style="border-radius: 0;" />
  49. </div>
  50. </div>
  51. <div class="display-row" style="align-items: center;">
  52. <div style="flex: auto;" class="time-font">
  53. {{item.beginTime}}
  54. </div>
  55. <div class="item-btn" @click="joinMeeting(item)">
  56. 进入会议
  57. </div>
  58. </div>
  59. </div>
  60. </div>
  61. </div>
  62. </div>
  63. </template>
  64. <script>
  65. import {
  66. listMeeting
  67. } from "@/api/partywork/meeting";
  68. import {
  69. getList
  70. } from "@/api/system/table_list";
  71. import logoImg from '@/assets/logo/party.png';
  72. import locImg from '@/assets/images/weizhi.png';
  73. export default {
  74. name: "Login",
  75. data() {
  76. return {
  77. logo: logoImg,
  78. weizhiImg: locImg,
  79. loading: true,
  80. total: 0,
  81. menulist: [{
  82. icon: "zbdydh",
  83. name: "支部党员大会",
  84. path: ""
  85. }, {
  86. icon: "zbwyh",
  87. name: "支部委员会",
  88. path: ""
  89. }, {
  90. icon: "dxzh",
  91. name: "党小组会",
  92. path: ""
  93. }, {
  94. icon: "detail1",
  95. name: "党课",
  96. path: ""
  97. }],
  98. menuIndex: 0,
  99. meetingList: [],
  100. // 查询参数
  101. queryParams: {
  102. pageNum: 1,
  103. pageSize: 15,
  104. beginTime: null,
  105. endTime: null,
  106. address: null,
  107. host: null,
  108. fromOrg: null,
  109. title: null,
  110. describe: null,
  111. meetingResult: null,
  112. fileList: null,
  113. picsPath: null,
  114. file: null,
  115. sort: null,
  116. attendanceStatus: null,
  117. isMobile: null,
  118. djOrgid: null,
  119. isPush: null,
  120. content: null,
  121. thumb: null,
  122. type: 1,
  123. }
  124. };
  125. },
  126. watch: {
  127. },
  128. created() {
  129. this.getList();
  130. },
  131. methods: {
  132. menuClick(index) {
  133. this.menuIndex = index;
  134. this.queryParams.type = index + 1;
  135. this.getList();
  136. },
  137. joinMeeting(row) {
  138. let meetingId = row.id;
  139. this.$router.push({
  140. path: "/party_work/meeting/info_pad",
  141. query: {
  142. meetingId: meetingId,
  143. }
  144. });
  145. },
  146. handleScroll(event) {
  147. // 获取div元素
  148. const { target } = event;
  149. // 计算滚动位置是否到达底部
  150. if (target.scrollHeight - target.scrollTop <= target.clientHeight) {
  151. this.loadMore();
  152. }
  153. },
  154. loadMore(){
  155. console.log("loadMore");
  156. if(this.total <= this.meetingList.length){
  157. console.log("不拉数据")
  158. return;
  159. }
  160. this.queryParams.pageNum = this.queryParams.pageNum+1;
  161. this.loading = true;
  162. listMeeting(this.queryParams).then(response => {
  163. console.log(response.rows);
  164. this.meetingList.push(...response.rows);
  165. this.total = response.total;
  166. this.loading = false;
  167. });
  168. },
  169. /** 查询党员会议列表 */
  170. getList() {
  171. this.loading = true;
  172. this.queryParams.pageNum = 1;
  173. listMeeting(this.queryParams).then(response => {
  174. this.meetingList = response.rows;
  175. console.log(this.meetingList);
  176. this.total = response.total;
  177. this.loading = false;
  178. });
  179. },
  180. async logout() {
  181. this.$confirm('确定注销并退出系统吗?', '提示', {
  182. confirmButtonText: '确定',
  183. cancelButtonText: '取消',
  184. type: 'warning'
  185. }).then(() => {
  186. this.$store.dispatch('LogOut').then(() => {
  187. /*location.href = '/index';*/
  188. this.$router.push("/login_pad")
  189. })
  190. }).catch(() => {});
  191. },
  192. }
  193. };
  194. </script>
  195. <style lang="scss" scoped>
  196. .display-row {
  197. display: flex;
  198. flex-direction: row;
  199. }
  200. .content-class {
  201. position: fixed;
  202. left: 120px;
  203. right: 0;
  204. bottom: 0;
  205. top: 42px;
  206. }
  207. .two-lines {
  208. overflow: hidden;
  209. display: -webkit-box;
  210. -webkit-line-clamp: 2;
  211. -webkit-box-orient: vertical;
  212. text-overflow: ellipsis;
  213. }
  214. .left-bar {
  215. position: fixed;
  216. left: 0;
  217. top: 42px;
  218. bottom: 0;
  219. width: 120px;
  220. box-sizing: border-box;
  221. border-width: 0px 1px 0px 0px;
  222. border-style: solid;
  223. border-color: #D8D8D8;
  224. }
  225. .menu_title {
  226. font-family: Source Han Sans;
  227. font-size: 12px;
  228. font-weight: normal;
  229. line-height: 12px;
  230. letter-spacing: 0px;
  231. color: #545454;
  232. }
  233. .memu_item {
  234. align-items: center;
  235. justify-content: center;
  236. height: 45px;
  237. }
  238. .menu_title_selected {
  239. font-family: 思源黑体;
  240. font-size: 12px;
  241. font-weight: bold;
  242. line-height: 12px;
  243. letter-spacing: 0px;
  244. color: #CA0001;
  245. }
  246. .time-font {
  247. font-size: 10px;
  248. font-weight: normal;
  249. line-height: 12px;
  250. letter-spacing: 0.01em;
  251. color: #86909C;
  252. }
  253. .nav {
  254. height: 42px;
  255. width: 100vw;
  256. background: #CA0001;
  257. align-items: center;
  258. justify-content: space-between;
  259. padding: 0 16px;
  260. position: fixed;
  261. left: 0;
  262. top: 0;
  263. }
  264. .icon-32 {
  265. width: 16px;
  266. height: 16px;
  267. }
  268. .display-cloumn {
  269. display: flex;
  270. flex-direction: column;
  271. }
  272. .display-center {
  273. display: flex;
  274. justify-content: center;
  275. align-items: center;
  276. }
  277. .menu-icon {
  278. width: 13px;
  279. height: 13px;
  280. }
  281. .icon_32 {}
  282. .logout {
  283. font-family: Source Han Sans;
  284. font-size: 12px;
  285. font-weight: normal;
  286. line-height: 12px;
  287. letter-spacing: 0px;
  288. color: #FFFFFF;
  289. }
  290. .title {
  291. font-family: Alimama DongFangDaKai;
  292. font-size: 16px;
  293. font-weight: normal;
  294. line-height: 16px;
  295. letter-spacing: -1px;
  296. // font-variation-settings: "opsz" auto;
  297. color: #FFE59E;
  298. }
  299. .content-item {
  300. width: calc((100% - 48px)/3);
  301. aspect-ratio: 259/128;
  302. //height: 128px;
  303. border-radius: 4px;
  304. background: #FFFFFF;
  305. border: 1px solid #E5E8EF;
  306. }
  307. .item-btn {
  308. width: 64px;
  309. height: 28px;
  310. line-height: 28px;
  311. border-radius: 2px;
  312. opacity: 1;
  313. font-family: 思源黑体;
  314. font-size: 12px;
  315. font-weight: normal;
  316. text-align: center;
  317. border: 1px solid #4E5969;
  318. color: #4E5969;
  319. }
  320. .item-title {
  321. font-family: 思源黑体;
  322. font-size: 12px;
  323. font-weight: normal;
  324. line-height: 20px;
  325. letter-spacing: 0px;
  326. color: #1D2129;
  327. }
  328. </style>