多媒体信息发布平台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

385 lines
12 KiB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
  1. <template>
  2. <div class="list_warp">
  3. <el-row :gutter="15">
  4. <el-col>
  5. <!-- v-loading="crud.loading" -->
  6. <el-table
  7. ref="table"
  8. :data="tableData"
  9. :header-cell-style="{ background: '#3a8aeb', color: '#fff' }"
  10. class="publish_table"
  11. @selection-change="handleSelectionChange"
  12. >
  13. <el-table-column type="selection" width="55" />
  14. <el-table-column label="文件名称" align="center" prop="name" />
  15. <el-table-column label="发布内容" align="center" prop="content">
  16. <template slot-scope="scope">
  17. <div>
  18. <img width="100px" size="medium" :src="scope.row.cover" />
  19. </div>
  20. </template>
  21. </el-table-column>
  22. <el-table-column label="发布时间" align="center" prop="date" />
  23. <el-table-column label="发布类型" align="center" prop="type">
  24. <template slot-scope="scope">
  25. <div>{{ scope.row.type ? "定时发布" : "即时发布" }}</div>
  26. </template>
  27. </el-table-column>
  28. <el-table-column label="发布人" align="center" prop="user" />
  29. <el-table-column label="状态" align="center" prop="enabled">
  30. <template slot-scope="scope">
  31. <div :class="{ stop_txt: scope.row.enabled }">
  32. {{ scope.row.enabled ? "发布中" : "停止" }}
  33. </div>
  34. </template>
  35. </el-table-column>
  36. <el-table-column
  37. prop="device"
  38. align="center"
  39. label="发布设备"
  40. width="300px"
  41. >
  42. <template slot-scope="scope">
  43. <div>
  44. {{ scope.row.device ? "" : "全部设备" }}
  45. <div class="tag_list">
  46. <el-tag
  47. v-for="tag in scope.row.deviceData"
  48. :key="tag"
  49. type="primary"
  50. >{{ tag }}</el-tag>
  51. </div>
  52. </div>
  53. </template>
  54. </el-table-column>
  55. <el-table-column
  56. label="操作"
  57. width="220px"
  58. align="center"
  59. fixed="right"
  60. >
  61. <template slot-scope="scope">
  62. <el-button
  63. type="primary"
  64. :class="['top_btn', { top_btn_active: scope.row.isTop }]"
  65. @click="isTophandle(scope.$index, scope.row)"
  66. >{{ scope.row.isTop ? "取消" : "置顶" }}</el-button>
  67. <el-button
  68. type="primary"
  69. class="edit_btn"
  70. @click="editForm(scope.$index, scope.row)"
  71. >编辑</el-button>
  72. <el-button
  73. type="primary"
  74. :class="['start_btn', { stop_btn: scope.row.enabled }]"
  75. @click="isStopHandle(scope.$index, scope.row)"
  76. >{{ scope.row.enabled ? "停止" : "恢复" }}</el-button>
  77. <el-button type="info" class="delt_btn">删除</el-button>
  78. </template>
  79. </el-table-column>
  80. </el-table>
  81. <!--分页组件-->
  82. <pagination />
  83. </el-col>
  84. </el-row>
  85. <!-- 编辑 -->
  86. <div class="publish_layer">
  87. <el-dialog
  88. title="编辑"
  89. :close-on-click-modal="false"
  90. :show-close="false"
  91. :visible.sync="publishVisible"
  92. width="872px"
  93. height="384px"
  94. >
  95. <el-form ref="form" :model="form" size="small" label-width="100px">
  96. <el-form-item
  97. label="发布名称"
  98. prop="name"
  99. :rules="[
  100. { required: true, message: '请输入发布名称', trigger: '' },
  101. ]"
  102. >
  103. <el-input v-model="form.name" style="width: 674px" />
  104. </el-form-item>
  105. <el-form-item
  106. label="发布时间"
  107. prop="date"
  108. :rules="[
  109. { required: true, message: '请选择发布时间', trigger: 'change' },
  110. ]"
  111. >
  112. <el-date-picker
  113. v-if="isTypeDate === 0"
  114. v-model="form.date"
  115. type="date"
  116. placeholder="选择日期"
  117. />
  118. <el-date-picker
  119. v-else
  120. v-model="form.date"
  121. type="daterange"
  122. range-separator="至"
  123. start-placeholder="开始日期"
  124. end-placeholder="结束日期"
  125. />
  126. </el-form-item>
  127. <el-form-item label="上传内容" prop="file">
  128. <el-upload action="#" list-type="picture-card" :auto-upload="false">
  129. <!-- <i slot="default" class="el-icon-plus"></i> -->
  130. <img src="@/assets/images/t-sc.png" alt />
  131. <div slot="file" slot-scope="{ file }">
  132. <img
  133. class="el-upload-list__item-thumbnail"
  134. :src="file.url"
  135. alt
  136. />
  137. <!-- <span class="el-upload-list__item-actions">
  138. <span
  139. class="el-upload-list__item-preview"
  140. @click="handlePictureCardPreview(file)"
  141. >
  142. <i class="el-icon-zoom-in"></i>
  143. </span>
  144. <span
  145. v-if="!disabled"
  146. class="el-upload-list__item-delete"
  147. @click="handleDownload(file)"
  148. >
  149. <i class="el-icon-download"></i>
  150. </span>
  151. <span
  152. v-if="!disabled"
  153. class="el-upload-list__item-delete"
  154. @click="handleRemove(file)"
  155. >
  156. <i class="el-icon-delete"></i>
  157. </span>
  158. </span>-->
  159. </div>
  160. </el-upload>
  161. <!-- <el-dialog :visible.sync="dialogVisible">
  162. <img width="100%" :src="dialogImageUrl" alt />
  163. </el-dialog>-->
  164. </el-form-item>
  165. <el-form-item
  166. label="选择设备"
  167. prop="deviceSelect"
  168. :rules="[
  169. { required: true, message: '请选择设备', trigger: 'change' },
  170. ]"
  171. >
  172. <el-radio-group v-model="form.deviceSelect">
  173. <el-radio label="all" value="all">所有设备</el-radio>
  174. <el-radio
  175. label="other"
  176. value="other"
  177. >部分设备<i
  178. v-if="form.deviceSelect === 'other'"
  179. class="radio_tip"
  180. @click="addDeviceTag()"
  181. >添加</i></el-radio>
  182. </el-radio-group>
  183. </el-form-item>
  184. <div v-if="form.deviceSelect === 'all'" class="select_all_tip">
  185. 所有设备都将被发送
  186. </div>
  187. <div
  188. v-if="deviceTags.length > 0 && form.deviceSelect === 'other'"
  189. class="select_other"
  190. >
  191. <el-row>
  192. <el-col
  193. :span="10"
  194. class="other_tip"
  195. >以下设备都将被发送<span>总计{{ deviceTags.length }}个设备</span></el-col>
  196. <el-col :span="4">
  197. <el-button
  198. round
  199. class="delt_btn"
  200. @click="clearDevice()"
  201. >清空</el-button>
  202. </el-col>
  203. </el-row>
  204. <el-tag
  205. v-for="tag in deviceTags"
  206. :key="tag"
  207. closable
  208. :disable-transitions="true"
  209. :hit="false"
  210. color="#cbe3ff"
  211. @close="handleClose(tag)"
  212. >
  213. {{ tag }}
  214. </el-tag>
  215. </div>
  216. </el-form>
  217. <div slot="footer" class="dialog-footer">
  218. <!-- :loading="crud.status.cu === 2"
  219. @click="crud.submitCU"-->
  220. <el-button
  221. type="primary"
  222. round
  223. >保存</el-button>
  224. <el-button round @click="publishVisible=false">关闭</el-button>
  225. </div>
  226. </el-dialog>
  227. </div>
  228. <!-- 添加发布的设备 -->
  229. <div class="add_device_layer">
  230. <el-dialog
  231. title="请选择设备"
  232. :close-on-click-modal="false"
  233. :visible.sync="selectDeviceVisible"
  234. width="400px"
  235. >
  236. <el-tag
  237. v-for="tag in deviceAllTags"
  238. :key="tag"
  239. :disable-transitions="true"
  240. :hit="false"
  241. color="#cbe3ff"
  242. class="all_tags"
  243. @click="tagHandle(tag)"
  244. >
  245. {{ tag }}
  246. </el-tag>
  247. </el-dialog>
  248. </div>
  249. </div>
  250. </template>
  251. <script>
  252. import pagination from '@crud/Pagination'
  253. import {reqPublishList} from '@/api/publish/publishList'
  254. export default {
  255. name: 'PublishList',
  256. components: { pagination },
  257. data() {
  258. return {
  259. queryInfo:{
  260. release_name:'',
  261. orga_id:'',
  262. page:1,
  263. size:3,
  264. },
  265. selectedList: [],
  266. publishVisible: false,
  267. messageVisible: false,
  268. selectDeviceVisible: false,
  269. isTypeDate: 0,
  270. tableData: [
  271. {
  272. id: 1,
  273. name: '及时发布 2022-1-1',
  274. cover: require('@/assets/images/background.jpg'),
  275. type: 0,
  276. user: '某某某',
  277. device: 0,
  278. deviceData: [],
  279. enabled: true,
  280. isTop: true,
  281. date: '2021-2-2'
  282. },
  283. {
  284. id: 2,
  285. name: '定时发布 2022-1-1',
  286. cover: require('@/assets/images/background.jpg'),
  287. type: 1,
  288. user: '某某某2',
  289. device: 1,
  290. deviceData: ['GCXR1', 'GCXR2', 'GCXR3', 'GCXR4', 'GCXR5'],
  291. enabled: false,
  292. isTop: false,
  293. date: '2021-2-2 至 2022-4-6'
  294. }
  295. ],
  296. deviceAllTags: ['GCXR1', 'GCXR2', 'GCXR3', 'GCXR4', 'GCXR5'],
  297. deviceTags: []
  298. }
  299. },
  300. mounted(){
  301. this.getPublishList()
  302. },
  303. methods: {
  304. // 获取发布列表的数据
  305. getPublishList(){
  306. const params=this.queryInfo
  307. reqPublishList(params).then(res=>{
  308. if(res.code==200) {
  309. this.publishList=res.data.content
  310. }
  311. })
  312. },
  313. isTophandle(index, row) {
  314. row.isTop = !row.isTop
  315. },
  316. isStopHandle(index, row) {
  317. row.enabled = !row.enabled
  318. },
  319. editForm(index, row) {
  320. this.publishVisible = true
  321. this.form.name = row.name
  322. this.isTypeDate = row.type
  323. if (this.isTypeDate === 0) {
  324. this.form.date = row.date
  325. } else {
  326. const dateSplice = row.date.split('至')
  327. this.form.date = dateSplice
  328. }
  329. if (row.device === 0) {
  330. this.form.deviceSelect = 'all'
  331. } else {
  332. this.form.deviceSelect = 'other'
  333. }
  334. this.deviceTags = row.deviceData
  335. },
  336. handleSelectionChange(val) {
  337. this.selectedList = val
  338. if (val.length > 0) {
  339. this.clearBtnDisabled = false
  340. } else {
  341. this.clearBtnDisabled = true
  342. }
  343. console.log(val)
  344. },
  345. addDeviceTag() {
  346. this.selectDeviceVisible = true
  347. },
  348. tagHandle(tag) {
  349. console.log(tag)
  350. this.deviceTags.push(tag)
  351. },
  352. handleClose(tag) {
  353. this.deviceTags.splice(this.deviceTags.indexOf(tag), 1)
  354. console.log(this.deviceTags)
  355. },
  356. clearDevice() {
  357. this.deviceTags = []
  358. }
  359. }
  360. }
  361. </script>
  362. <style lang="scss" scoped>
  363. .list_warp {
  364. padding: 0 24px;
  365. .stop_txt {
  366. color: #3a8aeb;
  367. }
  368. }
  369. .publish_table {
  370. .tag_list {
  371. text-align: left;
  372. .el-tag {
  373. height: 26px;
  374. line-height: 26px;
  375. margin: 5px 10px 5px 0;
  376. background: #cbe3ff;
  377. color: #3a8aeb;
  378. border: none;
  379. }
  380. }
  381. }
  382. </style>