多租户商城-商户端
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.

1011 lines
31 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. <template>
  2. <div class="liveRoomPage">
  3. <nav>
  4. <el-form :inline="true" :model="listQuery" class="demo-form-inline">
  5. <el-form-item label="状态:" label-width="100px">
  6. <el-radio-group v-model="listQuery.state" @change="searchTypeChange">
  7. <el-radio-button
  8. v-for="item in searchType"
  9. :key="item.value"
  10. :label="item.value"
  11. >
  12. {{ item.label }}
  13. </el-radio-button>
  14. </el-radio-group>
  15. </el-form-item>
  16. <br>
  17. <el-form-item label="关键字:" label-width="100px">
  18. <el-input
  19. v-model="listQuery.search"
  20. maxlength="20"
  21. placeholder="请输入直播间名称/ID/主播昵称/微信号"
  22. class="inputKeyWord"
  23. style="width:400px;"
  24. >
  25. <el-button slot="append" icon="el-icon-search" @click="getList" />
  26. </el-input>
  27. </el-form-item>
  28. <el-form-item>
  29. <el-button style="margin-left: 20px" type="success" @click="add">创建直播间</el-button>
  30. </el-form-item>
  31. </el-form>
  32. </nav>
  33. <section>
  34. <el-table
  35. ref="multipleTable"
  36. :data="roomList"
  37. border
  38. :header-cell-style="{ background: '#EEF3FF', color: '#333333' }"
  39. tooltip-effect="dark"
  40. style="width: 100%"
  41. >
  42. <el-table-column prop="id" label="直播间id" />
  43. <el-table-column prop="title" label="直播间标题" />
  44. <el-table-column prop="anchorNickname" label="主播昵称" />
  45. <el-table-column prop="anchorWechat" label="主播微信号" />
  46. <el-table-column prop="startTime" label="直播开始时间" />
  47. <el-table-column prop="endTime" label="预计结束时间" />
  48. <el-table-column prop="createTime" label="创建时间" />
  49. <el-table-column label="审核状态" width="100">
  50. <template slot-scope="scope">
  51. <el-tag v-if="scope.row.state == 0" type="warning">
  52. 待审核
  53. </el-tag>
  54. <el-tag v-if="scope.row.state == 1" type="success">
  55. 已通过
  56. </el-tag>
  57. <el-tag v-if="scope.row.state == 2" type="danger">
  58. 未通过
  59. </el-tag>
  60. </template>
  61. </el-table-column>
  62. <el-table-column
  63. fixed="right"
  64. width="200"
  65. label="操作"
  66. show-overflow-tooltip
  67. >
  68. <template slot-scope="scope">
  69. <div class="btnList">
  70. <el-button
  71. v-if="scope.row.state == 1"
  72. type="text"
  73. @click="addPro(scope.row)"
  74. >导入</el-button>
  75. <el-button type="text" @click="edit(scope.row)">编辑</el-button>
  76. <el-button type="text" @click="seeMore(scope.row)">详情</el-button>
  77. <el-button type="text" @click="del(scope.row)">删除</el-button>
  78. <el-button
  79. v-if="scope.row.state == 2"
  80. type="text"
  81. @click="reExamine(scope.row)"
  82. >重新审核</el-button>
  83. </div>
  84. </template>
  85. </el-table-column>
  86. </el-table>
  87. <div class="pagination">
  88. <el-pagination
  89. :current-page="listQuery.page"
  90. :page-sizes="[10, 20, 50, 100]"
  91. :page-size="10"
  92. layout="total, sizes, prev, pager, next, jumper"
  93. :total="total"
  94. @size-change="handleSizeChange"
  95. @current-change="handleCurrentChange"
  96. />
  97. </div>
  98. </section>
  99. <el-dialog
  100. :title="'直播间信息'"
  101. :visible.sync="DetailsLiveShow"
  102. width="50%"
  103. center
  104. :close-on-click-modal="false"
  105. >
  106. <el-row>
  107. <el-col :span="12">
  108. <el-form :model="liveForm" size="mini" label-width="180px">
  109. <el-form-item label="直播间标题:">
  110. {{ liveForm.title }}
  111. </el-form-item>
  112. <el-form-item label="直播间id:">
  113. {{ liveForm.id }}
  114. </el-form-item>
  115. <el-form-item label="直播间开始时间:">
  116. {{ liveForm.startTime }}
  117. </el-form-item>
  118. <el-form-item label="背景图:">
  119. <img :src="liveForm.coverImg" alt="" srcset="">
  120. </el-form-item>
  121. <el-form-item label="直播间类型:">
  122. {{ liveForm.liveType == 1 ? "推流" : "手机" }}
  123. </el-form-item>
  124. <el-form-item label="是否开启点赞:">
  125. {{ liveForm.closeLike == 0 ? "是" : "否" }}
  126. </el-form-item>
  127. <el-form-item label="是否开启评论:">
  128. {{ liveForm.closeComment == 0 ? "是" : "否" }}
  129. </el-form-item>
  130. </el-form>
  131. </el-col>
  132. <el-col :span="12">
  133. <el-form :model="liveForm" size="mini" label-width="180px">
  134. <el-form-item label="主播微信号:">
  135. {{ liveForm.anchorWechat }}
  136. </el-form-item>
  137. <el-form-item label="主播昵称:">
  138. {{ liveForm.anchorNickname }}
  139. </el-form-item>
  140. <el-form-item label="直播间结束时间:">
  141. {{ liveForm.endTime }}
  142. </el-form-item>
  143. <el-form-item label="分享图:">
  144. <img :src="liveForm.shareImg" alt="" srcset="">
  145. </el-form-item>
  146. <el-form-item label="是否开启回放:">
  147. {{ liveForm.closePlayback == 0 ? "是" : "否" }}
  148. </el-form-item>
  149. <el-form-item label="是否开启预约:">
  150. {{ liveForm.closeAppointment == 0 ? "是" : "否" }}
  151. </el-form-item>
  152. </el-form>
  153. </el-col>
  154. </el-row>
  155. <div>
  156. <el-table
  157. ref="multipleTable"
  158. :data="roomProList"
  159. border
  160. :header-cell-style="{ background: '#EEF3FF', color: '#333333' }"
  161. tooltip-effect="dark"
  162. style="width: 100%"
  163. >
  164. <el-table-column prop="productId" label="商品ID" />
  165. <el-table-column prop="productImage" label="商品图片">
  166. <template slot-scope="scope">
  167. <img
  168. style="width: 40px; height: 40px"
  169. :src="scope.row.productImage"
  170. alt=""
  171. >
  172. </template>
  173. </el-table-column>
  174. <el-table-column prop="productName" label="商品名称" />
  175. <el-table-column prop="stockNumber" label="库存" />
  176. <el-table-column label="价格">
  177. <template slot-scope="scope">
  178. <span v-if="scope.row.priceType == 1">
  179. 一口价: {{ scope.row.fixedPrice }}
  180. </span>
  181. <span v-if="scope.row.priceType == 2">
  182. 最低价{{ scope.row.minPrice }} <br>
  183. 最高价{{ scope.row.maxPrice }}
  184. </span>
  185. <span v-if="scope.row.priceType == 3">
  186. 现价: {{ scope.row.marketPrice }}
  187. </span>
  188. </template>
  189. </el-table-column>
  190. <el-table-column prop="saleNumber" label="销售数量" />
  191. <el-table-column prop="saleAmount" label="销售金额" />
  192. </el-table>
  193. <el-pagination
  194. style="margin-top: 20px"
  195. :current-page="proListQuery.page"
  196. :page-sizes="[10, 20, 50, 100]"
  197. :page-size="10"
  198. layout="total, sizes, prev, pager, next, jumper"
  199. :total="proTotal"
  200. @size-change="handleSizeChange1"
  201. @current-change="handleCurrentChange1"
  202. />
  203. </div>
  204. <div v-if="liveForm.remark" style="text-align: center; margin-top: 20px">
  205. <span style="color: red">备注</span>
  206. {{ liveForm.remark }}
  207. </div>
  208. <span slot="footer" class="dialog-footer">
  209. <el-button @click="closeFn"> </el-button>
  210. </span>
  211. </el-dialog>
  212. <!--表单组件-->
  213. <el-dialog
  214. :close-on-click-modal="false"
  215. :visible.sync="addLiveShow"
  216. :title="LiveShowState == 1 ? '创建直播间' : '编辑直播间'"
  217. width="800px"
  218. center
  219. >
  220. <el-form
  221. ref="form"
  222. :model="form"
  223. :rules="rules"
  224. size="small"
  225. label-width="140px"
  226. >
  227. <el-form-item label="直播间标题" prop="title">
  228. <el-input
  229. v-model="form.title"
  230. maxlength="20"
  231. style="width: 370px"
  232. :disabled="isDisabled"
  233. />
  234. </el-form-item>
  235. <el-form-item label="直播间背景图" prop="coverImg">
  236. <div class="uploadWidth">
  237. <el-upload
  238. class="avatar-uploader1"
  239. :headers="headers"
  240. :action="uploadUrl"
  241. :show-file-list="false"
  242. :on-success="handlePictureCardPreview1"
  243. >
  244. <img
  245. v-if="form.coverImg"
  246. :src="form.coverImg"
  247. class="avatar"
  248. >
  249. <i v-else class="el-icon-plus avatar-uploader-icon" />
  250. </el-upload>
  251. </div>
  252. <p style="color: #cf0f0f">直播间背景图图片规则建议像素1080*1920大小不超过2M</p>
  253. </el-form-item>
  254. <el-form-item label="直播间分享图片" prop="shareImg">
  255. <div class="uploadWidth">
  256. <el-upload
  257. class="avatar-uploader2"
  258. :headers="headers"
  259. :action="uploadUrl"
  260. :show-file-list="false"
  261. :on-success="handlePictureCardPreview2"
  262. >
  263. <img v-if="form.shareImg" :src="form.shareImg" class="avatar">
  264. <i v-else class="el-icon-plus avatar-uploader-icon" />
  265. </el-upload>
  266. </div>
  267. <p style="color: #cf0f0f">直播分享图 建议像素800*640大小不超过1M</p>
  268. </el-form-item>
  269. <el-form-item label="封面图" prop="feedsImg">
  270. <div class="uploadWidth">
  271. <el-upload
  272. class="avatar-uploader3"
  273. :headers="headers"
  274. :action="uploadUrl"
  275. :show-file-list="false"
  276. :on-success="handlePictureCardPreview3"
  277. >
  278. <img v-if="form.feedsImg" :src="form.feedsImg" class="avatar">
  279. <i v-else class="el-icon-plus avatar-uploader-icon" />
  280. </el-upload>
  281. </div>
  282. <p style="color: #cf0f0f">购物直播封面图 建议尺寸800*800</p>
  283. </el-form-item>
  284. <el-form-item label="计划直播开始时间" prop="startTime">
  285. <el-date-picker
  286. v-model="form.startTime"
  287. type="datetime"
  288. style="width: 370px"
  289. :disabled="isDisabled"
  290. format="yyyy-MM-dd HH:mm:ss"
  291. value-format="yyyy-MM-dd HH:mm:ss"
  292. />
  293. <p style="color: #cf0f0f">
  294. 开播时间需要在当前时间的50分钟左右,并且开始时间不能在6个月后
  295. </p>
  296. </el-form-item>
  297. <el-form-item label="计划直播结束时间" prop="endTime">
  298. <el-date-picker
  299. v-model="form.endTime"
  300. type="datetime"
  301. style="width: 370px"
  302. :disabled="isDisabled"
  303. format="yyyy-MM-dd HH:mm:ss"
  304. value-format="yyyy-MM-dd HH:mm:ss"
  305. />
  306. <p style="color: #cf0f0f">
  307. 开播时间和结束时间间隔不得短于30分钟,不得超过24小时
  308. </p>
  309. </el-form-item>
  310. <el-form-item
  311. label="主播昵称"
  312. prop="anchorNickname"
  313. :disabled="isDisabled"
  314. >
  315. <el-input
  316. v-model="form.anchorNickname"
  317. maxlength="20"
  318. style="width: 370px"
  319. :disabled="isDisabled"
  320. />
  321. </el-form-item>
  322. <el-form-item
  323. label="主播微信号"
  324. prop="anchorWechat"
  325. :disabled="isDisabled"
  326. >
  327. <el-input
  328. v-model="form.anchorWechat"
  329. maxlength="20"
  330. style="width: 370px"
  331. :disabled="isDisabled"
  332. />
  333. <p style="color: #cf0f0f">
  334. 主播微信号需要实名搜索微信官方小程序小程序直播进行认证
  335. </p>
  336. </el-form-item>
  337. <el-form-item label="主播头像" prop="anchorImge">
  338. <div class="uploadWidth">
  339. <el-upload
  340. class="avatar-uploader3"
  341. :headers="headers"
  342. :action="uploadUrl"
  343. :show-file-list="false"
  344. :on-success="handlePictureCardPreview4"
  345. >
  346. <img
  347. v-if="form.anchorHeadImg"
  348. :src="form.anchorHeadImg"
  349. class="avatar"
  350. >
  351. <i v-else class="el-icon-plus avatar-uploader-icon" />
  352. </el-upload>
  353. </div>
  354. </el-form-item>
  355. <el-form-item label="直播间类型" prop="liveType">
  356. <el-radio-group v-model="form.liveType" :disabled="isDisabled">
  357. <el-radio :label="1" class="radio">推流</el-radio>
  358. <el-radio :label="0">手机直播</el-radio>
  359. </el-radio-group>
  360. </el-form-item>
  361. <el-form-item label="横屏、竖屏" prop="screenType">
  362. <el-radio-group v-model="form.screenType" :disabled="isDisabled">
  363. <el-radio :label="1" class="radio">横屏</el-radio>
  364. <el-radio :label="0">竖屏</el-radio>
  365. </el-radio-group>
  366. </el-form-item>
  367. <el-form-item label="是否关闭点赞" prop="closeLike">
  368. <el-radio-group v-model="form.closeLike" :disabled="isDisabled">
  369. <el-radio :label="1" class="radio">关闭</el-radio>
  370. <el-radio :label="0">开启</el-radio>
  371. </el-radio-group>
  372. </el-form-item>
  373. <el-form-item label="是否关闭货架" prop="closeGoodsShelf">
  374. <el-radio-group v-model="form.closeGoodsShelf" :disabled="isDisabled">
  375. <el-radio :label="1" class="radio">关闭</el-radio>
  376. <el-radio :label="0">开启</el-radio>
  377. </el-radio-group>
  378. </el-form-item>
  379. <el-form-item label="是否关闭评论" prop="closeComment">
  380. <el-radio-group v-model="form.closeComment" :disabled="isDisabled">
  381. <el-radio :label="1" class="radio">关闭</el-radio>
  382. <el-radio :label="0">开启</el-radio>
  383. </el-radio-group>
  384. </el-form-item>
  385. <el-form-item label="是否关闭回放" prop="closePlayback">
  386. <el-radio-group v-model="form.closePlayback" :disabled="isDisabled">
  387. <el-radio :label="1" class="radio">关闭</el-radio>
  388. <el-radio :label="0">开启</el-radio>
  389. </el-radio-group>
  390. </el-form-item>
  391. <el-form-item label="是否关闭分享" prop="closeShare">
  392. <el-radio-group v-model="form.closeShare" :disabled="isDisabled">
  393. <el-radio :label="1" class="radio">关闭</el-radio>
  394. <el-radio :label="0">开启</el-radio>
  395. </el-radio-group>
  396. </el-form-item>
  397. <!-- <el-form-item label="是否关闭客服" prop="closeService">
  398. <el-radio-group v-model="form.closeService" :disabled="isDisabled">
  399. <el-radio :label="1" class="radio">关闭</el-radio>
  400. <el-radio :label="0">开启</el-radio>
  401. </el-radio-group>
  402. </el-form-item> -->
  403. <el-form-item label="是否关闭预约" prop="closeAppointment">
  404. <el-radio-group
  405. v-model="form.closeAppointment"
  406. :disabled="isDisabled"
  407. >
  408. <el-radio :label="1" class="radio">关闭</el-radio>
  409. <el-radio :label="0">开启</el-radio>
  410. </el-radio-group>
  411. </el-form-item>
  412. </el-form>
  413. <span slot="footer" class="dialog-footer">
  414. <el-button @click="addLiveShow = false"> </el-button>
  415. <el-button
  416. v-if="LiveShowState == 1"
  417. type="success"
  418. :disabled="isDisabled"
  419. @click="submitCU"
  420. > </el-button>
  421. <el-button
  422. v-if="LiveShowState == 2"
  423. type="primary"
  424. :disabled="isDisabled"
  425. @click="submitCU"
  426. > </el-button>
  427. </span>
  428. </el-dialog>
  429. <!-- 导入商品 -->
  430. <el-dialog
  431. title="导入商品"
  432. :visible.sync="addProShow"
  433. width="60%"
  434. center
  435. :close-on-click-modal="false"
  436. >
  437. <el-form
  438. :inline="true"
  439. :model="proListPassQuery"
  440. class="demo-form-inline"
  441. >
  442. <el-form-item class="inputWide" label="关键字">
  443. <el-input
  444. v-model="proListPassQuery.search"
  445. maxlength="20"
  446. placeholder="请输入关键字搜索"
  447. />
  448. </el-form-item>
  449. <el-form-item>
  450. <el-button type="primary" plain @click="getProPassList">查询</el-button>
  451. </el-form-item>
  452. </el-form>
  453. <!-- 表格 -->
  454. <div class="tableBox">
  455. <el-table
  456. ref="multipleTable"
  457. :data="proListPassData"
  458. border
  459. :header-cell-style="{ background: '#EEF3FF', color: '#333333' }"
  460. tooltip-effect="dark"
  461. style="width: 100%"
  462. @selection-change="handleSelectionChange"
  463. >
  464. <el-table-column type="selection" width="55" />
  465. <el-table-column prop="productId" label="商品ID" />
  466. <el-table-column prop="productImage" label="商品图片">
  467. <template slot-scope="scope">
  468. <img
  469. style="width: 40px; height: 40px"
  470. :src="scope.row.productImage"
  471. alt=""
  472. >
  473. </template>
  474. </el-table-column>
  475. <el-table-column prop="productName" label="商品名称" />
  476. <el-table-column prop="stockNumber" label="库存" />
  477. <el-table-column label="价格">
  478. <template slot-scope="scope">
  479. <span v-if="scope.row.priceType == 1">
  480. 一口价: {{ scope.row.fixedPrice }}
  481. </span>
  482. <span v-if="scope.row.priceType == 2">
  483. 最低价{{ scope.row.minPrice }} <br>
  484. 最高价{{ scope.row.maxPrice }}
  485. </span>
  486. <span v-if="scope.row.priceType == 3">
  487. 现价: {{ scope.row.marketPrice }}
  488. </span>
  489. </template>
  490. </el-table-column>
  491. </el-table>
  492. <el-pagination
  493. style="margin-top: 20px"
  494. :page-sizes="[10, 20, 50, 100]"
  495. :page-size="10"
  496. layout="total, sizes, prev, pager, next, jumper"
  497. :total="proListPassTotal"
  498. @size-change="handleSizeChange3"
  499. @current-change="handleCurrentChange3"
  500. />
  501. </div>
  502. <!-- 新增用户 -->
  503. <span slot="footer" class="dialog-footer">
  504. <el-button @click="addProShow = false"> </el-button>
  505. <el-button type="success" @click="addproSubmit"> </el-button>
  506. </span>
  507. </el-dialog>
  508. </div>
  509. </template>
  510. <script>
  511. import {
  512. liveGetList,
  513. liveGetProduct,
  514. addLiveSave,
  515. updateLive,
  516. deleteLive,
  517. liveProGetAll,
  518. importProduct,
  519. reExamine,
  520. } from '@/api/live';
  521. import { WXuploadUrl } from '@/utils/request';
  522. import { getToken } from '@/utils/auth.js'
  523. export default {
  524. data() {
  525. return {
  526. uploadUrl: WXuploadUrl,
  527. headers: {
  528. 'Authorization-business': getToken()
  529. },
  530. searchType: [
  531. {
  532. label: '全部',
  533. value: null,
  534. },
  535. {
  536. label: '待审核',
  537. value: 0,
  538. },
  539. {
  540. label: '审核已通过',
  541. value: 1,
  542. },
  543. {
  544. label: '审核未通过',
  545. value: 2,
  546. },
  547. ],
  548. listQuery: {
  549. state: null,
  550. search: '',
  551. page: 0,
  552. pageSize: 10,
  553. shopId: null,
  554. },
  555. proListQuery: {
  556. liveId: null,
  557. page: 0,
  558. pageSize: 10,
  559. shopId: null,
  560. },
  561. roomList: [], // 直播间列表
  562. roomProList: [], // 直播相关产品列表
  563. total: 0,
  564. proTotal: 0,
  565. DetailsLiveShow: false,
  566. activeName: 'first',
  567. disabled: false,
  568. liveForm: {}, // 添加直播间
  569. // 添加直播间部分
  570. addLiveShow: false,
  571. isDisabled: false,
  572. LiveShowState: false,
  573. form: {
  574. anchorHeadImg: '',
  575. anchorNickname: '',
  576. anchorWechat: '',
  577. coverImg: '',
  578. coverMediaId: '',
  579. closeAppointment: 0,
  580. closeComment: 0,
  581. closeGoodsShelf: 0,
  582. closeLike: 0,
  583. closePlayback: 0,
  584. closeService: 0,
  585. closeShare: 0,
  586. feedsImg: '',
  587. feedsMediaId: '',
  588. endTime: '',
  589. id: 0,
  590. liveType: 0,
  591. remark: '',
  592. screenType: 0,
  593. shareImg: '',
  594. shareMediaId: '',
  595. shopId: 0,
  596. startTime: '',
  597. state: 0,
  598. title: '',
  599. },
  600. rules: {
  601. title: [
  602. { required: true, message: '直播间标题不能为空', trigger: 'blur' },
  603. { min: 3, max: 17, message: '最短3个汉字,最长17个汉字', trigger: 'blur' }
  604. ],
  605. coverImg: [
  606. { required: true, message: '背景图不能为空', trigger: 'blur' },
  607. ],
  608. feedsImg: [
  609. { required: true, message: '封面图不能为空', trigger: 'blur' },
  610. ],
  611. shareImg: [
  612. { required: true, message: '分享图片不能为空', trigger: 'blur' },
  613. ],
  614. startTime: [
  615. { required: true, message: '开始时间不能为空', trigger: 'blur' },
  616. ],
  617. endTime: [
  618. { required: true, message: '预计结束时间不能为空', trigger: 'blur' },
  619. ],
  620. anchorNickname: [
  621. { required: true, message: '主播昵称不能为空', trigger: 'blur' },
  622. { min: 2, max: 15, message: '最短2个汉字,最长15个汉字', trigger: 'blur' }
  623. ],
  624. anchorWechat: [
  625. { required: true, message: '主播微信号不能为空', trigger: 'blur' },
  626. ],
  627. liveType: [
  628. {
  629. required: true,
  630. message: '直播间类型 1:推流 0:手机直播不能为空',
  631. trigger: 'blur',
  632. },
  633. ],
  634. screenType: [
  635. {
  636. required: true,
  637. message: '横屏、竖屏 【1:横屏,0:竖屏】不能为空',
  638. trigger: 'blur',
  639. },
  640. ],
  641. closeGoodsShelf: [
  642. {
  643. required: true,
  644. message: '是否关闭货架 【0:开启,1:关闭】不能为空',
  645. trigger: 'blur',
  646. },
  647. ],
  648. closeComment: [
  649. {
  650. required: true,
  651. message: '是否关闭评论 【0:开启,1:关闭】不能为空',
  652. trigger: 'blur',
  653. },
  654. ],
  655. closeAppointment: [
  656. {
  657. required: true,
  658. message: '是否关闭预约 【0:开启,1:关闭】不能为空',
  659. trigger: 'blur',
  660. },
  661. ],
  662. },
  663. addProShow: false,
  664. proListPassData: [],
  665. proListPassQuery: {
  666. liveId: null,
  667. page: 0,
  668. pageSize: 10,
  669. shopId: null,
  670. search: null,
  671. },
  672. proListPassTotal: 0,
  673. proPassFrom: {
  674. liveId: null,
  675. liveProductIdList: [],
  676. shopId: null,
  677. },
  678. isAllow: true,
  679. };
  680. },
  681. created() {
  682. this.getList();
  683. },
  684. methods: {
  685. // 获取直播间列表
  686. async getList() {
  687. const res = await liveGetList(this.listQuery);
  688. this.total = res.data.total;
  689. this.roomList = res.data.list;
  690. },
  691. // 获取直播间相关产品信息
  692. async getProList() {
  693. this.proListQuery.shopId = this.liveForm.shopId;
  694. this.proListQuery.liveId = this.liveForm.id;
  695. const res = await liveGetProduct(this.proListQuery);
  696. this.roomProList = res.data.list;
  697. this.proTotal = res.data.total;
  698. },
  699. seeMore(row) {
  700. this.liveForm = row;
  701. this.DetailsLiveShow = true;
  702. this.getProList();
  703. },
  704. del(row) {
  705. this.$confirm('是否确认删除该内容?', '提示', {
  706. confirmButtonText: '确定',
  707. cancelButtonText: '取消',
  708. type: 'warning',
  709. }).then(() => {
  710. deleteLive(row)
  711. .then((res) => {
  712. this.closeDialogVisible = false;
  713. this.$message.success('删除成功');
  714. this.getList();
  715. })
  716. .catch((err) => {
  717. this.$message.error(err.msg);
  718. });
  719. });
  720. },
  721. // 选择查询状态
  722. searchTypeChange(e) {
  723. this.listQuery.state = e;
  724. this.getList();
  725. },
  726. // 分页
  727. handleCurrentChange(e) {
  728. this.listQuery.page = e;
  729. this.getList();
  730. },
  731. handleSizeChange(e) {
  732. this.listQuery.pageSize = e;
  733. this.getList();
  734. },
  735. handleCurrentChange1(e) {
  736. this.proListQuery.page = e;
  737. this.getProList();
  738. },
  739. handleSizeChange1(e) {
  740. this.proListQuery.pageSize = e;
  741. this.getProList();
  742. },
  743. closeFn() {
  744. this.DetailsLiveShow = false;
  745. },
  746. // 添加直播间
  747. // 图片上传
  748. handlePictureCardPreview1(file) {
  749. console.log(file);
  750. if(file.code==='200'){
  751. this.form.coverImg = file.data.url;
  752. this.form.coverMediaId = file.data.mediaId
  753. }else{
  754. this.$message.error('图片超出规定像素,上传失败!')
  755. }
  756. },
  757. handlePictureCardPreview2(file) {
  758. if(file.code==='200'){
  759. this.form.shareImg = file.data.url;
  760. this.form.shareMediaId = file.data.mediaId
  761. }else{
  762. this.$message.error('图片超出规定像素,上传失败!')
  763. }
  764. },
  765. handlePictureCardPreview3(file) {
  766. if(file.code==='200'){
  767. this.form.feedsImg = file.data.url;
  768. this.form.feedsMediaId = file.data.mediaId
  769. }else{
  770. this.$message.error('图片超出规定像素,上传失败!')
  771. }
  772. },
  773. handlePictureCardPreview4(file) {
  774. if(file.code==='200'){
  775. this.form.anchorHeadImg = file.data.url;
  776. }else{
  777. this.$message.error('图片超出规定像素,上传失败!')
  778. }
  779. },
  780. add() {
  781. this.addLiveShow = true;
  782. this.LiveShowState = 1;
  783. this.form = {
  784. anchorHeadImg: '',
  785. anchorNickname: '',
  786. anchorWechat: '',
  787. coverImg: '',
  788. coverMediaId: '',
  789. closeAppointment: 0,
  790. closeComment: 0,
  791. closeGoodsShelf: 0,
  792. closeLike: 0,
  793. closePlayback: 0,
  794. closeService: 0,
  795. closeShare: 0,
  796. feedsImg: '',
  797. feedsMediaId: '',
  798. endTime: '',
  799. id: 0,
  800. liveType: 0,
  801. remark: '',
  802. screenType: 0,
  803. shareImg: '',
  804. shareMediaId: '',
  805. shopId: 0,
  806. startTime: '',
  807. state: 0,
  808. title: '',
  809. };
  810. },
  811. edit(row) {
  812. this.addLiveShow = true;
  813. this.LiveShowState = 2;
  814. const data = Object.assign({}, row)
  815. this.form = data;
  816. },
  817. // 添加直播间
  818. submitCU() {
  819. this.$refs.form.validate((valid) => {
  820. if (valid) {
  821. if (this.LiveShowState === 1) {
  822. if(this.isAllow){
  823. this.isAllow = false
  824. addLiveSave(this.form).then((res) => {
  825. if (res.code === '') {
  826. this.$message({
  827. message: '创建成功',
  828. type: 'success',
  829. });
  830. this.addLiveShow = false;
  831. this.getList();
  832. }
  833. });
  834. setTimeout(()=>{
  835. this.isAllow = true
  836. },1000)
  837. }
  838. } else {
  839. updateLive(this.form).then((res) => {
  840. if (res.code === '') {
  841. this.$message({
  842. message: '修改成功',
  843. type: 'success',
  844. });
  845. this.addLiveShow = false;
  846. this.getList();
  847. }
  848. });
  849. }
  850. }
  851. });
  852. },
  853. // 导入商品
  854. addPro(row) {
  855. this.proPassFrom.liveId = row.id;
  856. this.proPassFrom.shopId = row.shopId;
  857. this.proListPassQuery.search = '';
  858. this.proListPassQuery.liveId = row.id;
  859. this.proListPassQuery.shopId = row.shopId;
  860. this.addProShow = true;
  861. this.getProPassList();
  862. },
  863. async getProPassList() {
  864. this.proListPassQuery.state = 1;
  865. const res = await liveProGetAll(this.proListPassQuery);
  866. this.proListPassTotal = res.data.total;
  867. this.proListPassData = res.data.list;
  868. },
  869. handleSizeChange3(e) {
  870. this.proListPassQuery.pageSize = e;
  871. this.getProPassList();
  872. },
  873. handleCurrentChange3(e) {
  874. this.proListPassQuery.page = e;
  875. this.getProPassList();
  876. },
  877. // 选中的
  878. handleSelectionChange(val) {
  879. this.proPassFrom.liveProductIdList = val.map((el) => {
  880. return el.id;
  881. });
  882. },
  883. // 导入操作
  884. addproSubmit() {
  885. if (this.proPassFrom.liveProductIdList.length === 0) {
  886. this.$message.warning('请选择导入的商品');
  887. } else {
  888. importProduct(this.proPassFrom).then((res) => {
  889. if (res.code === '') {
  890. this.$message({
  891. message: '导入成功',
  892. type: 'success',
  893. });
  894. this.addProShow = false;
  895. this.getList();
  896. }
  897. });
  898. }
  899. },
  900. // 重新审核
  901. reExamine(row) {
  902. reExamine({ id: row.id }).then((res) => {
  903. if (res.code === '') {
  904. this.$message.success('已重新提交');
  905. this.getList();
  906. }
  907. });
  908. },
  909. },
  910. };
  911. </script>
  912. <style lang="scss" scpoed>
  913. img {
  914. width: 100px;
  915. height: 100px;
  916. }
  917. .liveRoomPage {
  918. padding: 32px 20px;
  919. nav {
  920. .search {
  921. line-height: 40px;
  922. margin: 10px 0;
  923. display: flex;
  924. .title {
  925. min-width: 120px;
  926. text-align: right;
  927. }
  928. .inputKeyWord {
  929. max-width: 400px;
  930. min-width: 200px;
  931. }
  932. }
  933. }
  934. section {
  935. padding: 12px 8px;
  936. background-color: #fff;
  937. .pagination {
  938. margin-top: 30px;
  939. }
  940. }
  941. }
  942. .avatar-uploader .el-upload {
  943. border: 1px dashed #d9d9d9;
  944. border-radius: 6px;
  945. cursor: pointer;
  946. position: relative;
  947. overflow: hidden;
  948. }
  949. .avatar-uploader1{
  950. border: 1px dashed #d9d9d9;
  951. width: 108px;
  952. height: 192px;
  953. .avatar-uploader-icon {
  954. font-size: 28px;
  955. color: #8c939d;
  956. width: 108px;
  957. height: 192px;
  958. line-height: 192px;
  959. text-align: center;
  960. }
  961. .avatar {
  962. width: 108px;
  963. height: 192px;
  964. display: block;
  965. }
  966. }
  967. .avatar-uploader2{
  968. border: 1px dashed #d9d9d9;
  969. width: 180px;
  970. height: 148px;
  971. .avatar-uploader-icon {
  972. font-size: 28px;
  973. color: #8c939d;
  974. width: 180px;
  975. height: 148px;
  976. line-height: 148px;
  977. text-align: center;
  978. }
  979. .avatar {
  980. width: 180px;
  981. height: 148px;
  982. display: block;
  983. }
  984. }
  985. .avatar-uploader3{
  986. border: 1px dashed #d9d9d9;
  987. width: 140px;
  988. height: 140px;
  989. .avatar-uploader-icon {
  990. font-size: 28px;
  991. color: #8c939d;
  992. width: 140px;
  993. height: 140px;
  994. line-height: 140px;
  995. text-align: center;
  996. }
  997. .avatar {
  998. width: 140px;
  999. height: 140px;
  1000. display: block;
  1001. }
  1002. }
  1003. </style>