index.vue 26 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052
  1. <template>
  2. <view :data-theme="theme" class="discover borderPad">
  3. <!-- 表单 -->
  4. <form v-if="!topicShow" @submit="formSubmit" report-submit='true'>
  5. <navigator url="/pages/address/user_address_list/index" v-if="fair">
  6. <view class="allAddress">
  7. <view class='address row-between-wrapper flex-between-center'>
  8. <view class='addressCon' v-if="addressInfo.realName">
  9. <view class='name'>{{addressInfo.realName}}
  10. <text class='phone'>{{addressInfo.phone}}</text>
  11. </view>
  12. <view class="acea-row line2">
  13. <text class='default font_color' v-if="addressInfo.isDefault">[默认]</text>
  14. <text>{{addressInfo.province}}{{addressInfo.city}}{{addressInfo.district}}{{ addressInfo.street}}{{addressInfo.detail}}</text>
  15. </view>
  16. </view>
  17. <view class='addressCon' v-else>
  18. <view class='setaddress'>设置收货地址</view>
  19. </view>
  20. <view class='iconfont icon-jiantou'></view>
  21. </view>
  22. <view class='line'>
  23. <image src='../../goods/static/images/line.png'></image>
  24. </view>
  25. </view>
  26. </navigator>
  27. <view class="release_content">
  28. <view class="release_item">
  29. <view class="title mb30">
  30. <input :placeholder="fair ? '填写好物名称' : dazi ? '填写标题' : '填写标题会有更多赞噢~'" name="title" placeholder-class='placeholder'
  31. v-model="formData.title" maxlength="20" />
  32. </view>
  33. <view class="textarea">
  34. <textarea :placeholder="fair ? '说说好物信息,入手渠道,转卖原因...' : dazi ? '填写简介' : formData.type == 1?'分享使用体验和心得,获得更多点赞和关注哦~(600字以内)':'分享使用体验和心得,获得更多点赞和关注哦~(200字以内)'"
  35. auto-height name="comment" placeholder-class='placeholder' v-model="formData.content" :maxlength="formData.type == 1?'600':'200'"></textarea>
  36. <view class="discoverlist acea-row mt-10">
  37. <view v-for="(item, index) in discoverTopicList" :key="item.id" class="list mr-12 font-color">
  38. <text class="icon iconfont icon-huati"></text>{{item.name}}
  39. </view>
  40. </view>
  41. </view>
  42. <view class="photo_count mt-30">
  43. <view class="input_photo acea-row row-middle">
  44. <view class="pictrue" v-if="formData.video">
  45. <image class="video-bg" mode="widthFix" src="../static/images/video_bg.png"></image>
  46. <view class="videoHover" @click="videoshow">
  47. <view>
  48. <text class="iconfont icon-24gf-play"></text>
  49. </view>
  50. </view>
  51. <text class="video-text">点击可预览视频</text>
  52. <view class="close_btn" @click="formData.video = ''"><text class="iconfont icon-guanbi4"></text></view>
  53. </view>
  54. <view class="pictrue" v-for="(item, index) in image" :key="index">
  55. <easy-loadimage mode="widthFix" :image-src="item.url"></easy-loadimage>
  56. <text class="cover_text" v-if="item.isCover">封面</text>
  57. <view class="close_btn" @click="DelPic(index)"><text class="iconfont icon-guanbi4"></text></view>
  58. <view class="cover_change" v-if="!item.isCover" @click="onChangeCover(item, index)">{{dazi ? '进群二维码(点击更换)' : '更换封面'}}
  59. </view>
  60. </view>
  61. <view v-if="image.length < (dazi ? 2 : 9) && !formData.video" class="pictrue acea-row row-center-wrapper row-column add"
  62. @click="upload('image')">
  63. <view><text class='iconfont icon-paizhao'></text></view>
  64. <view class="text">{{dazi ? image.length < 1 ? '添加封面' : '添加二维码' : '添加图片'}}</view>
  65. </view>
  66. <view v-if="image.length === 0 && !formData.video && !dazi" class="pictrue acea-row row-center-wrapper row-column add"
  67. @click="upload('video',1)">
  68. <view><text class='iconfont icon-tianjiashipin'></text></view>
  69. <view class="text">添加视频</view>
  70. </view>
  71. <view v-if="formData.video && image.length=== 0" class="pictrue acea-row row-center-wrapper row-column add"
  72. @click="upload('video',2)">
  73. <view><text class='iconfont icon-paizhao'></text></view>
  74. <view class="text">添加封面</view>
  75. </view>
  76. </view>
  77. </view>
  78. <!-- <view @click="addTopic" class="flex flex-wrap mt-120">
  79. <view class="h-52 px-16 rd-30rpx border-eee flex-center fs-24">
  80. <span class="line-heightOne">#话题</span>
  81. </view>
  82. </view> -->
  83. </view>
  84. </view>
  85. <view class="release_content">
  86. <view class="release_item" style="padding: 0 24rpx;">
  87. <!-- <view class='item acea-row row-between-wrapper' @click.stop="addProduct">
  88. <view class='name color28'><text class="iconfont icon-tianjiabaobei"></text>添加宝贝({{productList.length}})
  89. </view>
  90. <view class="select">
  91. <view class="select_count">
  92. <text v-if="productList.length == 0" class="text">请选择</text>
  93. <view v-else class="text">
  94. <image class="image" v-for="(item,index) in productList" :key="index" :src="item.image || item.productImage"></image>
  95. </view>
  96. <text class="iconfont icon-xiangyou"></text>
  97. </view>
  98. </view>
  99. </view> -->
  100. <view class='item acea-row row-between-wrapper'>
  101. <view class='name color28'><text class="iconfont icon-neirongfenlei"></text>内容分类
  102. </view>
  103. <view class="select">
  104. <view class="select_count">
  105. <picker class="pickerIpt" @change="bindSexChange" :value="sexindex" :range="categoryList" range-key="name">
  106. <text v-if="!categoryList[sexindex].name" class="text">请选择</text>
  107. <view class="uni-input color28 text">{{categoryList[sexindex].name}}</view>
  108. </picker>
  109. <text @change="bindSexChange" class="iconfont icon-xiangyou"></text>
  110. </view>
  111. </view>
  112. </view>
  113. <view v-if="fair && noteId" class='item acea-row row-between-wrapper'>
  114. <view class='name color28'><text class="iconfont icon-neirongfenlei"></text>是否上架</view>
  115. <view class="select">
  116. <switch @change="switch2Change" :checked="saleStatus" :color="indicatorBg" style="transform:scale(0.7)" />
  117. </view>
  118. </view>
  119. <view class='item acea-row row-between-wrapper' v-if="fair">
  120. <view class='name color28'><text class="iconfont icon-qiandai"></text>价格
  121. </view>
  122. <view class="select">
  123. <view class="select_count">
  124. <text class="select-input">¥</text>
  125. <input class="text w-128 select-input" type="number" :maxlength="6" :placeholder="'价格'" placeholder-class="placeholder"
  126. v-model="formData.price" />
  127. <text @change="bindSexChange" class="iconfont icon-xiangyou"></text>
  128. </view>
  129. </view>
  130. </view>
  131. <template v-if="!fair && !dazi">
  132. <view v-if="!replyPlatformSwitch" class='item acea-row row-between-wrapper'>
  133. <view class='name color28'>总平台禁止评论</view>
  134. </view>
  135. <view v-else class='item acea-row row-between-wrapper'>
  136. <view class='name color28'><text class="iconfont icon-pinglun3"></text>是否禁止评论</view>
  137. <view class="select">
  138. <switch @change="switch1Change" :checked="replyStatus" :color="indicatorBg" style="transform:scale(0.7)" />
  139. </view>
  140. </view>
  141. </template>
  142. </view>
  143. </view>
  144. <button class="release_btn button" form-type="submit">发布</button>
  145. </form>
  146. <!-- 商品列表 -->
  147. <tui-bottom-popup class="topic" :zIndex="1002" :maskZIndex="1001" :show="popupShow" @close="popup">
  148. <associated-product v-if="popupShow" :checkedObj="productList" @getProduct="getProduct" @close="popup"></associated-product>
  149. </tui-bottom-popup>
  150. <!-- 话题列表 -->
  151. <tui-bottom-popup class="topic" :zIndex="1002" :maskZIndex="1001" :show="topicShow" @close="popupTopic">
  152. <discover-topic v-if="topicShow" @onClose="popupTopic"></discover-topic>
  153. </tui-bottom-popup>
  154. <!--视频预览弹窗-->
  155. <tui-bottom-popup class="topic" :zIndex="1002" :maskZIndex="1001" :show="showVideo" @close="showVideo=false">
  156. <view v-if="showVideo" class="video-count">
  157. <!--#ifndef APP-PLUS-->
  158. <video id="myVideo" class="videoLink" autoplay loop muted :src="formData.video"></video>
  159. <!--#endif-->
  160. <!--#ifdef APP-PLUS-->
  161. <view v-html="videoHtml"></view>
  162. <!--#endif-->
  163. </view>
  164. </tui-bottom-popup>
  165. </view>
  166. </template>
  167. <script>
  168. // #ifdef MP
  169. import {
  170. base64src
  171. } from '@/utils/base64src.js'
  172. // #endif
  173. import {
  174. mapGetters
  175. } from "vuex";
  176. import {
  177. setThemeColor
  178. } from '@/utils/setTheme.js'
  179. import {
  180. gameAddApi,
  181. gameUpdateApi,
  182. gameDetailApi
  183. } from '@/api/gameDazi.js';
  184. import {
  185. noteDetailApi,
  186. secondHandDetailApi,
  187. communityCategoryListApi,
  188. getSecondHandInfo,
  189. noteUpdateApi,
  190. noteAddApi,
  191. secondHandAddApi,
  192. secondHandUpdateApi,
  193. replyPlatformSwitchApi
  194. } from '@/api/discover.js';
  195. import {
  196. Debounce
  197. } from '@/utils/validate.js';
  198. import {
  199. HTTP_REQUEST_URL
  200. } from '@/config/app.js';
  201. import {
  202. getAddressDefault
  203. } from '@/api/user.js';
  204. import tuiBottomPopup from "../components/tui-bottom-popup.vue"
  205. import associatedProduct from "../components/associatedProduct.vue"
  206. import easyLoadimage from '@/components/base/easy-loadimage.vue';
  207. import discoverTopic from '../components/discover_topic.vue';
  208. let app = getApp();
  209. export default {
  210. components: {
  211. tuiBottomPopup,
  212. associatedProduct,
  213. easyLoadimage,
  214. discoverTopic
  215. },
  216. computed: {
  217. ...mapGetters(['discoverTopic']),
  218. videoHtml: function() {
  219. return `<video autoplay loop muted controls="controls" width="100%" height="870px"><source src="${this.formData.video}" type="video/mp4"></video>`;
  220. }
  221. },
  222. data() {
  223. return {
  224. topicShow: false,
  225. popupShow: false,
  226. theme: app.globalData.theme,
  227. image: [], //图片集合
  228. cover: '', //视频第一帧作为封面
  229. filesLen: 0,
  230. exceeded_list: [],
  231. uploadMaxSize: 50, //上传图片大小限制
  232. formData: {
  233. categoryId: 0,
  234. image: "",
  235. content: "",
  236. cover: '',
  237. topicIds: "",
  238. proIds: "",
  239. video: '',
  240. id: 0,
  241. replyStatus: 1,
  242. title: "",
  243. type: 1 //1图文,2视频
  244. },
  245. productList: [], //商品
  246. topicList: [], //话题
  247. noteId: 0, //内容id
  248. sexindex: 0, //分类索引
  249. categoryName: '', //分类名称
  250. categoryList: [], //逛逛分类
  251. indicatorBg: '#e93323',
  252. discoverTopicList: [], //选中的话题列表
  253. replyStatus: false, //开关
  254. saleStatus: true, //开关
  255. showVideo: false, //预览视频弹窗
  256. replyPlatformSwitch: false, //评论总开关状态,true开启,false关闭
  257. videoContext: '',
  258. fair: false,
  259. dazi: false,
  260. addressInfo: {},
  261. }
  262. },
  263. onShow() {
  264. this.getReplyPlatformSwitch();
  265. uni.$on('addressInfo', function(res) {
  266. that.$set(that, 'addressInfo', res);
  267. })
  268. },
  269. mounted() {
  270. // #ifndef APP-PLUS
  271. this.videoContext = uni.createVideoContext('myVideo', this);
  272. // #endif
  273. },
  274. onLoad(options) {
  275. console.log(options)
  276. this.discoverTopicList = [];
  277. this.$store.commit('DiscoverTopic', this.discoverTopicList);
  278. this.indicatorBg = setThemeColor();
  279. this.fair = options.fair ? options.fair : false
  280. this.dazi = options.dazi ? options.dazi : false
  281. this.noteId = options.noteId ? Number(options.noteId) : 0;
  282. if (this.noteId > 0) this.getDetail();
  283. this.getCommunityCategoryList();
  284. this.videoContext = uni.createVideoContext("myvideo", this);
  285. if (this.fair) {
  286. getAddressDefault().then(res => {
  287. console.log('地址', res)
  288. this.addressInfo = res.data || {}
  289. })
  290. }
  291. },
  292. // 滚动监听
  293. onPageScroll(e) {
  294. // 传入scrollTop值并触发所有easy-loadimage组件下的滚动监听事件
  295. uni.$emit('scroll');
  296. },
  297. methods: {
  298. /*更换封面*/
  299. onChangeCover(item) {
  300. uni.showLoading({
  301. title: '加载中',
  302. mask: true
  303. })
  304. setTimeout(() => {
  305. this.image.map(items => {
  306. items.isCover = false
  307. })
  308. this.$set(item, 'isCover', true);
  309. uni.hideLoading();
  310. }, 500);
  311. },
  312. /*获取评论总开关状态*/
  313. getReplyPlatformSwitch() {
  314. replyPlatformSwitchApi().then(res => {
  315. this.replyPlatformSwitch = res.data == 1 ? true : false;
  316. })
  317. },
  318. /*查看视频*/
  319. videoshow() {
  320. this.showVideo = true
  321. this.videoContext = uni.createVideoContext('myVideo', this);
  322. this.$nextTick(() => {
  323. this.videoContext.play();
  324. })
  325. },
  326. //开关
  327. switch1Change: function(e) {
  328. this.formData.replyStatus = e.detail.value ? 2 : 1;
  329. },
  330. //开关
  331. switch2Change: function(e) {
  332. this.formData.saleStatus = e.detail.value ? 0 : 4;
  333. },
  334. //分类列表
  335. getCommunityCategoryList() {
  336. if (this.dazi) {
  337. this.categoryList = [{
  338. id: 0,
  339. name: '游戏陪玩'
  340. }, {
  341. id: 1,
  342. name: '代练'
  343. }]
  344. } else {
  345. let categoryApi = this.fair ? getSecondHandInfo() : communityCategoryListApi();
  346. categoryApi.then(res => {
  347. this.categoryList = this.fair ? res.data.navigatList : res.data;
  348. })
  349. }
  350. },
  351. //选择分类
  352. bindSexChange(e) {
  353. this.sexindex = e.detail.value;
  354. this.formData.categoryId = this.categoryList[this.sexindex].id;
  355. this.categoryName = this.categoryList[this.sexindex].name;
  356. },
  357. /*获取图文详情*/
  358. getDetail() {
  359. let api = this.fair ? secondHandDetailApi : this.dazi ? gameDetailApi : noteDetailApi;
  360. api(this.noteId).then(res => {
  361. this.formData = res.data;
  362. this.productList = res.data.productList || [];
  363. this.topicList = res.data.topicList || [];
  364. //视频2 图文1
  365. if (this.formData.type === 2) {
  366. this.image = [{
  367. url: res.data.cover,
  368. isCover: true
  369. }];
  370. } else {
  371. let images = res.data.image ? res.data.image.split(',') : [];
  372. let index = images.findIndex(item => {
  373. if (item === this.formData.cover) {
  374. return true
  375. }
  376. });
  377. images.map(item => {
  378. this.image.push({
  379. isCover: false,
  380. url: item
  381. })
  382. })
  383. this.$set(this.image[index], 'isCover', true);
  384. }
  385. this.discoverTopicList = res.data.topicList || [];
  386. this.$store.commit('DiscoverTopic', this.discoverTopicList);
  387. this.replyStatus = this.formData.replyStatus == 2 ? true : false;
  388. this.saleStatus = this.formData.saleStatus == 0 ? true : false;
  389. this.categoryName = this.formData.categoryName;
  390. this.sexindex = this.formData.categoryId;
  391. }).catch(err => {
  392. return this.$util.Tips({
  393. title: err
  394. });
  395. })
  396. },
  397. /*删除话题*/
  398. onDel(i) {
  399. this.discoverTopicList.splice(i, 1);
  400. this.$store.commit('DiscoverTopic', this.discoverTopicList);
  401. },
  402. /*参与话题*/
  403. addTopic() {
  404. this.topicShow = true;
  405. },
  406. popup() {
  407. this.popupShow = false;
  408. },
  409. popupTopic() {
  410. this.topicShow = false;
  411. this.discoverTopicList = [...this.discoverTopic]
  412. },
  413. /*添加宝贝*/
  414. addProduct() {
  415. this.popupShow = true;
  416. },
  417. // 上传
  418. upload(name, n) {
  419. if (name === 'image') {
  420. this.formData.type = 1
  421. this.getImage();
  422. } else {
  423. this.formData.type = 2
  424. n === 1 ? this.getVideo() : this.getImage();
  425. }
  426. },
  427. //传图片
  428. getImage() {
  429. this.$util.uploadImageOne({
  430. name: 'multipart',
  431. model: "product",
  432. pid: 1,
  433. count: 9
  434. }, res => {
  435. let data = []
  436. res.map(item => {
  437. data.push({
  438. isCover: false,
  439. url: item
  440. })
  441. })
  442. this.image = [...this.image, ...data];
  443. if (this.image && this.image.length) this.image[0].isCover = true;
  444. });
  445. },
  446. //传视频
  447. getVideo() {
  448. this.$util.uploadVideo({
  449. name: 'multipart',
  450. model: "product",
  451. pid: 1,
  452. }, async res => {
  453. this.formData.video = res.fils;
  454. // #ifdef H5
  455. this.image = [{
  456. url: res.coverURL,
  457. isCover: true
  458. }];
  459. // #endif
  460. });
  461. },
  462. /**删除图片*/
  463. DelPic(index) {
  464. this.image.splice(index, 1);
  465. },
  466. /*获取选中的宝贝*/
  467. getProduct(data) {
  468. this.productList = data;
  469. this.popupShow = false;
  470. },
  471. /**
  472. * 提交数据
  473. */
  474. formSubmit: Debounce(function(e) {
  475. let that = this;
  476. if (this.fair) {
  477. this.formData.addressId = this.addressInfo.id
  478. if (that.image.length == 0) return that.$util.Tips({
  479. title: '请添加内容图片'
  480. });
  481. if (that.formData.type == 2 && !that.formData.video) {
  482. return that.$util.Tips({
  483. title: '请添加内容视频'
  484. });
  485. }
  486. }
  487. if (this.dazi) {
  488. if (that.image.length < 2) return that.$util.Tips({
  489. title: '请添加进群二维码'
  490. });
  491. }
  492. if (!that.formData.categoryId && !isFinite(that.formData.categoryId)) return that.$util.Tips({
  493. title: '请选择内容分类'
  494. });
  495. if (!that.formData.price && that.fair) return that.$util.Tips({
  496. title: '请输入价格'
  497. });
  498. if (this.formData.type == 1) {
  499. let images = [];
  500. this.image.map(item => {
  501. images.push(item.url)
  502. });
  503. this.formData.image = images.join(',');
  504. let index = this.image.findIndex(item => {
  505. if (item.isCover) {
  506. return true
  507. }
  508. });
  509. if (this.image.length) this.formData.cover = this.image[index].url;
  510. } else {
  511. if (this.image.length > 0) {
  512. this.formData.cover = this.image[0].url;
  513. } else {
  514. this.formData.cover = this.cover;
  515. }
  516. }
  517. this.formData.proIds = this.productList.map(val => val.productId).join(',');
  518. this.formData.topicIds = this.discoverTopicList.map(val => val.id).join(',');
  519. this.formData.city = uni.getStorageSync('cityName')
  520. // if (!that.formData.cover) return that.$util.Tips({
  521. // title: '请上传封面图'
  522. // });
  523. this.formData.latitude = uni.getStorageSync('user_latitude');
  524. this.formData.longitude = uni.getStorageSync('user_longitude');
  525. uni.showLoading({
  526. title: '保存中',
  527. mask: true
  528. })
  529. let addApi = this.fair ? secondHandAddApi : this.dazi ? gameAddApi : noteAddApi
  530. let editApi = this.fair ? secondHandUpdateApi : this.data ? gameUpdateApi : noteUpdateApi
  531. console.log(that.noteId, this.formData, this.saleStatus)
  532. that.noteId ? editApi(that.formData).then(res => {
  533. uni.hideLoading()
  534. that.$util.Tips({
  535. title: '提交成功',
  536. icon: 'success'
  537. });
  538. setTimeout(function() {
  539. let url = that.fair ? '/pages/trade_fair/trade_fair_user/index' : that.dazi ?
  540. `/pages/discover/discover_user/index?dazi=dazi` : '/pages/discover/discover_user/index'
  541. uni.redirectTo({
  542. url: url
  543. })
  544. }, 500);
  545. }).catch(err => {
  546. uni.hideLoading()
  547. return that.$util.Tips({
  548. title: err
  549. });
  550. }) : addApi(that.formData).then(res => {
  551. that.$util.Tips({
  552. title: '提交成功',
  553. icon: 'success'
  554. });
  555. uni.hideLoading()
  556. setTimeout(function() {
  557. let url = that.fair ? '/pages/trade_fair/trade_fair_user/index' : that.dazi ?
  558. `/pages/discover/discover_user/index?dazi=dazi` : '/pages/discover/discover_user/index'
  559. uni.redirectTo({
  560. url: url
  561. })
  562. }, 500);
  563. }).catch(err => {
  564. uni.hideLoading()
  565. return that.$util.Tips({
  566. title: err
  567. });
  568. })
  569. })
  570. }
  571. }
  572. </script>
  573. <style lang="scss" scoped>
  574. .pickerIpt {
  575. width: 300rpx;
  576. }
  577. .icon-huati {
  578. font-size: 24rpx;
  579. }
  580. .icon-guanbi5 {
  581. font-size: 20rpx;
  582. }
  583. .discover {
  584. padding-bottom: env(safe-area-inset-bottom); ///兼容 IOS>11.2/ */
  585. padding-bottom: constant(safe-area-inset-bottom) !important; ///兼容 IOS<11.2/
  586. }
  587. .topic {
  588. /deep/.tui-popup-class {
  589. height: 95% !important;
  590. }
  591. }
  592. .discoverlist {
  593. .list {
  594. // height: 62rpx;
  595. // line-height: 62rpx;
  596. // border-radius: 31rpx;
  597. @include main_color(theme);
  598. border: none;
  599. font-size: 24rpx;
  600. .icon {
  601. margin-right: 2rpx;
  602. }
  603. }
  604. }
  605. .crop_btn {
  606. line-height: 90rpx;
  607. height: 90rpx;
  608. height: calc(90rpx+ constant(safe-area-inset-bottom)); ///兼容 IOS<11.2/
  609. height: calc(90rpx + env(safe-area-inset-bottom)); ///兼容 IOS>11.2/
  610. }
  611. .container {
  612. position: fixed;
  613. top: 0;
  614. left: 0;
  615. z-index: 20;
  616. width: 750rpx;
  617. height: 100vh;
  618. }
  619. .release_content {
  620. margin-top: 20rpx;
  621. .release_tab {
  622. border-radius: 16rpx 16rpx 0 0;
  623. border-bottom: 1rpx solid #E4E4E4;
  624. background: #fff;
  625. align-items: center;
  626. justify-content: center;
  627. height: 86rpx;
  628. .tab_item {
  629. margin: 0 40rpx;
  630. font-size: 32rpx;
  631. color: #999;
  632. position: relative;
  633. line-height: 86rpx;
  634. cursor: pointer;
  635. &.on {
  636. color: #E93323;
  637. &::after {
  638. content: "";
  639. display: inline-block;
  640. width: 100%;
  641. height: 3rpx;
  642. background: #E93323;
  643. position: absolute;
  644. bottom: 2rpx;
  645. left: 0;
  646. }
  647. }
  648. .iconfont {
  649. margin-right: 10rpx;
  650. font-size: 32rpx;
  651. }
  652. }
  653. }
  654. .release_item {
  655. background: #ffffff;
  656. padding: 30rpx;
  657. border-radius: 10rpx;
  658. }
  659. .photo_count {}
  660. }
  661. /deep/.input_photo .easy-loadimage,
  662. /deep/.input_photo uni-image,
  663. /deep/.input_photo image {
  664. width: 200rpx;
  665. height: 200rpx;
  666. border-radius: 12rpx !important;
  667. }
  668. .input_photo .pictrue {
  669. width: 200rpx;
  670. height: 200rpx;
  671. border-radius: 12rpx !important;
  672. margin-right: 20rpx;
  673. position: relative;
  674. overflow: hidden;
  675. &:nth-child(3n) {
  676. margin-right: 0;
  677. }
  678. .close_btn {
  679. width: 30rpx;
  680. height: 30rpx;
  681. background: rgba(0, 0, 0, .6);
  682. border-radius: 0 12rpx 0 12rpx;
  683. position: absolute;
  684. top: 0;
  685. right: 0;
  686. display: flex;
  687. align-items: center;
  688. justify-content: center;
  689. z-index: 10;
  690. .iconfont {
  691. color: #ffffff;
  692. font-size: 12rpx;
  693. }
  694. }
  695. .cover_text {
  696. display: flex;
  697. width: 58rpx;
  698. height: 29rpx;
  699. background: #E93323;
  700. border-radius: 0px 12rpx 0px 12rpx;
  701. position: absolute;
  702. left: 0;
  703. bottom: 0;
  704. z-index: 10;
  705. align-items: center;
  706. justify-content: center;
  707. font-size: 18rpx;
  708. color: #fff;
  709. }
  710. .cover_change {
  711. width: 200rpx;
  712. height: 40rpx;
  713. background: rgba(0, 0, 0, 0.5);
  714. border-radius: 0px 0px 12rpx 12rpx;
  715. opacity: 1;
  716. color: #fff;
  717. text-align: center;
  718. font-size: 18rpx;
  719. position: absolute;
  720. z-index: 10;
  721. bottom: 0;
  722. line-height: 38rpx;
  723. }
  724. }
  725. /deep/.loading-img {
  726. width: 200rpx;
  727. height: 200rpx;
  728. border-radius: 12rpx;
  729. }
  730. .input_photo .pictrue {
  731. margin-bottom: 20rpx;
  732. .videoHover {
  733. width: 200rpx;
  734. height: 200rpx;
  735. display: flex;
  736. align-items: center;
  737. justify-content: center;
  738. position: absolute;
  739. top: 0;
  740. left: 0;
  741. z-index: 10;
  742. >view {
  743. width: 50rpx;
  744. height: 50rpx;
  745. background: #000000;
  746. border-radius: 50rpx;
  747. display: flex;
  748. align-items: center;
  749. justify-content: center;
  750. .iconfont {
  751. color: #ffffff;
  752. font-size: 21rpx;
  753. }
  754. }
  755. }
  756. .video-text {
  757. display: block;
  758. width: 200rpx;
  759. text-align: center;
  760. color: #ffffff;
  761. font-size: 18rpx;
  762. z-index: 13;
  763. position: absolute;
  764. bottom: 20rpx;
  765. }
  766. video {
  767. width: 200rpx;
  768. height: 200rpx;
  769. border-radius: 12rpx;
  770. }
  771. }
  772. .input_photo .add {
  773. background: #f6f6f6;
  774. color: #666666;
  775. .iconfont {
  776. font-size: 50rpx;
  777. }
  778. .text {
  779. margin-top: 20rpx;
  780. font-size: 27rpx;
  781. }
  782. }
  783. .textarea {
  784. padding-top: 30rpx;
  785. border-top: 1px solid #EEEEEE;
  786. // min-height: 120rpx;
  787. textarea {
  788. font-size: 28rpx;
  789. width: 100%;
  790. box-sizing: border-box;
  791. // overflow: hidden;
  792. }
  793. }
  794. .title {
  795. font-size: 30rpx !important;
  796. margin-top: 20rpx;
  797. .placeholder {
  798. font-size: 30rpx !important;
  799. }
  800. }
  801. .textarea .placeholder,
  802. .title .placeholder {
  803. color: #999999;
  804. overflow: auto !important;
  805. }
  806. .release_item .item {
  807. height: 106rpx;
  808. border-bottom: 1rpx solid #eee;
  809. position: relative;
  810. font-size: 30rpx;
  811. &:nth-child(3) {
  812. height: auto;
  813. padding: 30rpx 0 10rpx;
  814. }
  815. &:last-child {
  816. border-bottom: none;
  817. }
  818. .name {
  819. .iconfont {
  820. margin-right: 20rpx;
  821. font-size: 32rpx;
  822. }
  823. }
  824. .select {
  825. // width: 300rpx;
  826. color: #bbbbbb;
  827. text-align: right;
  828. .select_count {
  829. display: flex;
  830. align-items: center;
  831. justify-content: flex-end;
  832. }
  833. .select-input {
  834. color: $bg-color-primary;
  835. }
  836. .text {
  837. margin-right: 15rpx;
  838. text-align: right;
  839. .image,
  840. image,
  841. uni-image {
  842. width: 60rpx;
  843. height: 60rpx;
  844. border-radius: 6rpx;
  845. overflow: hidden;
  846. margin-right: 10rpx;
  847. }
  848. }
  849. .iconfont {
  850. font-size: 24rpx;
  851. }
  852. .text_name {
  853. color: var(--view-theme);
  854. padding: 5rpx 12rpx;
  855. background: var(--view-minorColor);
  856. border-radius: 23rpx;
  857. font-size: 24rpx;
  858. margin-right: 10rpx;
  859. .icon {
  860. color: var(--view-theme);
  861. font-weight: bold;
  862. font-size: 24rpx;
  863. }
  864. .title {
  865. margin: 0 10rpx;
  866. }
  867. .iconfont {
  868. font-size: 16rpx;
  869. }
  870. }
  871. }
  872. }
  873. .button {
  874. width: 710rpx;
  875. height: 86rpx;
  876. line-height: 84rpx;
  877. color: #ffffff;
  878. text-align: center;
  879. font-size: 32rpx;
  880. @include main_bg_color(theme);
  881. border-radius: 43rpx;
  882. }
  883. .release_btn {
  884. position: fixed;
  885. bottom: 30rpx;
  886. padding-bottom: constant(safe-area-inset-bottom); ///兼容 IOS<11.2/
  887. padding-bottom: env(safe-area-inset-bottom); ///兼容 IOS>11.2/
  888. }
  889. .video-count {
  890. position: fixed;
  891. width: 600rpx;
  892. height: 500rpx;
  893. top: 50%;
  894. left: 50%;
  895. margin-left: -300rpx;
  896. margin-top: -250rpx;
  897. z-index: 100;
  898. display: flex;
  899. align-items: center;
  900. justify-content: center;
  901. .videoLink {
  902. width: 600rpx;
  903. height: 500rpx;
  904. }
  905. }
  906. .address {
  907. padding: 40rpx 24rpx;
  908. background-color: #fff;
  909. box-sizing: border-box;
  910. }
  911. .address .addressCon {
  912. width: 596rpx;
  913. font-size: 26rpx;
  914. color: #666;
  915. }
  916. .address .addressCon .name {
  917. font-size: 30rpx;
  918. color: #282828;
  919. font-weight: bold;
  920. // margin-bottom: 10rpx;
  921. }
  922. .address .addressCon .name .phone {
  923. margin-left: 50rpx;
  924. }
  925. .address .addressCon .default {
  926. margin-right: 12rpx;
  927. }
  928. .address .addressCon .setaddress {
  929. color: #333;
  930. font-size: 28rpx;
  931. }
  932. .address .iconfont {
  933. color: #707070;
  934. }
  935. .allAddress {
  936. width: 100%;
  937. @include index-gradient(theme);
  938. padding: 30rpx 24rpx 0 24rpx;
  939. }
  940. .allAddress .address.group {
  941. border-radius: 0;
  942. }
  943. .allAddress .address {
  944. max-height: 180rpx;
  945. margin: -2rpx auto 0 auto;
  946. border-radius: 14rpx 14rpx 0 0;
  947. }
  948. .allAddress .line {
  949. width: 100%;
  950. margin: 0 auto;
  951. }
  952. .line {
  953. width: 100%;
  954. height: 3rpx;
  955. }
  956. .line image {
  957. width: 100%;
  958. height: 100%;
  959. display: block;
  960. }
  961. .font_color {
  962. @include main_color(theme);
  963. }
  964. </style>