editCenter.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767
  1. <template>
  2. <view class="container">
  3. <image-cropper :src="tempFilePath" @confirm="confirm" @cancel="cancel"></image-cropper>
  4. <view id="topnav" class="topnav flex-start" :style="{'height':`${topbarOffsetHeight-statusBarHeight}px`,'padding-top':`${statusBarHeight}px`,'background-color':`rgba(21, 17, 38,${topNavAlpha})`}" v-if="!cover.isFullScreen">
  5. <view class="nav-item flex-center" @click="back">
  6. <image :src="`${assetsUrl}back.png`" mode="widthFix" class="nav-img"></image>
  7. </view>
  8. <view class="nav-text font32 fw600">
  9. {{pageName}}
  10. </view>
  11. <view class="nav-item"></view>
  12. </view>
  13. <uni-popup ref="popup" type="bottom" :is-mask-click="false">
  14. <view class="popup" @touchmove.prevent>
  15. <view class="p-title-box flex-between">
  16. <view class="p-title font36 fw600">
  17. 上传头像
  18. </view>
  19. <image :src="`${assetsUrl}info-figure-close.png`" mode="aspectFill" class="p-close" @click="hideHeadPopup"></image>
  20. </view>
  21. <view class="p-title-tip font28 fw400">
  22. 上传清晰本人照片更容易交到好友哦
  23. </view>
  24. <view class="p-img-box flex-between">
  25. <view class="p-img">
  26. <image :src="`${assetsUrl}info-figure-img1.png`" mode="aspectFill" class="img"></image>
  27. <view class="p-text font22 fw400">
  28. 五官清晰
  29. </view>
  30. </view>
  31. <view class="p-img">
  32. <image :src="`${assetsUrl}info-figure-img2.png`" mode="aspectFill" class="img"></image>
  33. <view class="p-text font22 fw400">
  34. 半身照
  35. </view>
  36. </view>
  37. <view class="p-img">
  38. <image :src="`${assetsUrl}info-figure-img3.png`" mode="aspectFill" class="img"></image>
  39. <view class="p-text font22 fw400">
  40. 风景和人
  41. </view>
  42. </view>
  43. </view>
  44. <view style="height: 60rpx;">
  45. </view>
  46. </view>
  47. </uni-popup>
  48. <scroll-view
  49. scroll-y="true"
  50. :style="{'height': `${scrollHeight}px`,'padding-top':`${topNavHeight}px`}"
  51. v-if="scrollHeight>0"
  52. lower-threshold="200"
  53. refresher-enabled="true"
  54. :refresher-triggered="scrollTriggered"
  55. :refresher-threshold="45"
  56. refresher-default-style="white"
  57. refresher-background="#151126"
  58. @refresherrefresh="scrollRefresh"
  59. @refresherpulling="scrollPulling"
  60. @refresherrestore="scrollRestore"
  61. @refresherabort="scrollAbort"
  62. @scrolltolower="scrollToBottom"
  63. class="scroll-view flex-start"
  64. >
  65. <view class="head-info" @click="showHeadPopup">
  66. <view class="head-box flex-center">
  67. <view class="head-inner flex-center" v-if="!cropFilePath">
  68. <image :src="`${assetsUrl}info-figure-add.png`" mode="aspectFill" class="add"></image>
  69. </view>
  70. <image :src="cropFilePath" mode="aspectFit" v-else></image>
  71. </view>
  72. <image :src="`${assetsUrl}info-figure-camera.png`" mode="aspectFill" class="camera"></image>
  73. </view>
  74. <view class="label-box flex-between">
  75. <view class="left font28 fw400">
  76. 昵称
  77. </view>
  78. <view class="right flex-center" @click="randNick">
  79. <view class="rand-btn flex-center">
  80. <image :src="`${assetsUrl}info-figure-tou.png`" mode="aspectFill" class="rand"></image>
  81. <view class="rand-text font20 fw400">
  82. 随机昵称
  83. </view>
  84. </view>
  85. </view>
  86. </view>
  87. <view class="input-box flex-between">
  88. <input type="text" maxlength="10" placeholder="请输入你的昵称" placeholder-style="color:#494667;font-size:28rpx;" class="input fw500 font32" v-model="nickname">
  89. <view class="input-num font22 fw400" v-if="nickname!==''">
  90. {{nickname.length}}/10
  91. </view>
  92. </view>
  93. <view class="label-box flex-between">
  94. <view class="left font28 fw400">
  95. 个人简介
  96. </view>
  97. <view class="right flex-center" v-if="introduce!==''">
  98. <view class="input-num font22 fw400">
  99. {{introduce.length}}/200
  100. </view>
  101. </view>
  102. </view>
  103. <view class="textarea-box flex-between">
  104. <textarea maxlength="200" placeholder="可以填写个人介绍、人生经历、交友期望等" placeholder-style="color:#494667;font-size:28rpx;" class="textarea fw500 font32" v-model="introduce"></textarea>
  105. </view>
  106. <view class="select-title font28 fw400">
  107. 你的身高
  108. </view>
  109. <picker mode="selector" :range="heights" value="30" @change="heightsChange">
  110. <view class="select flex-between">
  111. <view class="select-val font28 fw400" :style="{'color':`${height==='选择身高'?'':'#ffffff'}`}">
  112. {{height}}
  113. </view>
  114. <image :src="`${assetsUrl}info-figure-select.png`" mode="aspectFill" class="select-icon"></image>
  115. </view>
  116. </picker>
  117. <view class="select-title font28 fw400">
  118. 你的体重
  119. </view>
  120. <picker mode="selector" :range="weights" value="50" @change="weightsChange">
  121. <view class="select flex-between">
  122. <view class="select-val font28 fw400" :style="{'color':`${weight==='选择体重'?'':'#ffffff'}`}">
  123. {{weight}}
  124. </view>
  125. <image :src="`${assetsUrl}info-figure-select.png`" mode="aspectFill" class="select-icon"></image>
  126. </view>
  127. </picker>
  128. <view class="select-title font28 fw400">
  129. 你的年龄
  130. </view>
  131. <picker mode="date" fields="day" value="1993-09-12" @change="agesChange">
  132. <view class="select flex-between">
  133. <view class="select-val font28 fw400" :style="{'color':`${age==='选择年龄'?'':'#ffffff'}`}">
  134. {{age}}
  135. </view>
  136. <image :src="`${assetsUrl}info-figure-select.png`" mode="aspectFill" class="select-icon"></image>
  137. </view>
  138. </picker>
  139. <view class="select-title font28 fw400">
  140. 你的职业
  141. </view>
  142. <picker mode="multiSelector" :range="jobs" @change="jobsChange" @columnchange="jobsColumnChange">
  143. <view class="select flex-between">
  144. <view class="select-val font28 fw400" :style="{'color':`${job==='选择职业'?'':'#ffffff'}`}">
  145. {{job}}
  146. </view>
  147. <image :src="`${assetsUrl}info-figure-select.png`" mode="aspectFill" class="select-icon"></image>
  148. </view>
  149. </picker>
  150. <view class="label-box flex-between">
  151. <view class="left font28 fw400">
  152. 微信号
  153. </view>
  154. </view>
  155. <view class="input-box flex-between">
  156. <input type="text" maxlength="10" placeholder="请填写真实正确的微信号" placeholder-style="color:#494667;font-size:28rpx;" class="input fw500 font32" v-model="wechat">
  157. </view>
  158. <view class="select-title font28 fw400">
  159. 设置查看权限
  160. </view>
  161. <picker mode="selector" :range="auths" range-key="value" @change="authsChange">
  162. <view class="select flex-between">
  163. <view class="select-val font28 fw400" :style="{'color':`${height===''?'':'#ffffff'}`}">
  164. {{auth}}
  165. </view>
  166. <image :src="`${assetsUrl}info-figure-select.png`" mode="aspectFill" class="select-icon"></image>
  167. </view>
  168. </picker>
  169. <view class="label-box flex-between">
  170. <view class="left font28 fw400">
  171. 常驻城市
  172. </view>
  173. <view class="right flex-center" @click="editCity">
  174. <image :src="`${assetsUrl}mine-edit.png`" mode="aspectFill" class="edit"></image>
  175. </view>
  176. </view>
  177. <view class="tag-box flex-start">
  178. <view class="tag font28" v-for="(item,index) in myCitys" :key="index">
  179. {{item}}
  180. </view>
  181. <view class="tag font28" v-if="myCitys.length===0">
  182. 未设置
  183. </view>
  184. </view>
  185. <view class="label-box flex-between">
  186. <view class="left font28 fw400">
  187. 个性标签
  188. </view>
  189. <view class="right flex-center" @click="editLabels">
  190. <image :src="`${assetsUrl}mine-edit.png`" mode="aspectFill" class="edit"></image>
  191. </view>
  192. </view>
  193. <view class="tag-box flex-start">
  194. <view class="tag font28" v-for="(item,index) in myLabels" :key="index">
  195. {{item.name}}
  196. </view>
  197. <view class="tag font28" v-if="myLabels.length===0">
  198. 未设置
  199. </view>
  200. </view>
  201. <view class="label-box flex-between">
  202. <view class="left font28 fw400">
  203. 我喜欢的
  204. </view>
  205. <view class="right flex-center" @click="editWants">
  206. <image :src="`${assetsUrl}mine-edit.png`" mode="aspectFill" class="edit"></image>
  207. </view>
  208. </view>
  209. <view class="tag-box flex-start">
  210. <view class="tag font28" v-for="(item,index) in myWants" :key="index">
  211. {{item.name}}
  212. </view>
  213. <view class="tag font28" v-if="myWants.length===0">
  214. 未设置
  215. </view>
  216. </view>
  217. </scroll-view>
  218. <view class="btn font32 fw600" @click="sure">
  219. {{btnText}}
  220. </view>
  221. </view>
  222. </template>
  223. <script>
  224. import TabBar from '@/components/TabBar/TabBar.vue';
  225. import ImageCropper from "@/components/invinbg-image-cropper/invinbg-image-cropper.vue";
  226. import wxMap from '@/static/qqmap-wx-jssdk1.2/qqmap-wx-jssdk.min.js';
  227. import {getPolicy,computeSignature,getKey} from '@/util/oss.js';
  228. import {encode} from '@/util/base64.js'
  229. /**
  230. * 腾讯位置服务,手机账号:18996226740
  231. */
  232. const wxMapSdk=new wxMap({key:'E5SBZ-T2YC3-CBL3F-YGFQQ-26PP2-ERFII'})
  233. export default {
  234. components:{TabBar,ImageCropper},
  235. data() {
  236. return {
  237. btnText:'完成',
  238. pageName:'个人资料',
  239. assetsUrl:this.$util.assetsUrl,
  240. scrollHeight:0,
  241. topNavHeight:0,
  242. scrollRefreshing:false,
  243. scrollTriggered:true,
  244. tempFilePath: '',
  245. cropFilePath: '',
  246. nickname:'',
  247. introduce:'',
  248. heights:[],
  249. height:'选择身高',
  250. weights:[],
  251. weight:'选择体重',
  252. age:'选择年龄',
  253. jobs:[],
  254. careersData:[],
  255. job:'选择职业',
  256. auths:[
  257. {key:'WxM2F5',value:'对VIP公开或使用颜豆、权益卡查看'},
  258. {key:'WaitAuth',value:'经过我授权才能查看微信'},
  259. ],
  260. auth:'经过我授权才能查看微信',
  261. weiXinStatusEnum:'WaitAuth',
  262. wechat:'',
  263. myCitys:[],
  264. myLabels:[],
  265. myWants:[],
  266. saveOptions:{
  267. birthday: "",
  268. career: "",
  269. cities: [],
  270. completeUser: {},
  271. desc: "",
  272. education: {},
  273. height: 0,
  274. icon: "",
  275. myLabelIds: [],
  276. nick: "",
  277. wantedLabelIds: [],
  278. weiXinStatus: {},
  279. weight: 0,
  280. wxId: ""
  281. }
  282. };
  283. },
  284. computed: {
  285. statusBarHeight() {
  286. return this.$store.state.statusBarHeight;
  287. },
  288. topbarOffsetHeight() {
  289. return this.$store.state.topbarOffsetHeight;
  290. }
  291. },
  292. onLoad(options) {
  293. this.computedScollviewHeight();
  294. this.getMineData();
  295. },
  296. mounted() {
  297. let arr=[];
  298. for(let i=150;i<210;i++){
  299. arr.push(`${i}cm`);
  300. }
  301. this.heights=arr;
  302. arr=[];
  303. for(let i=30;i<150;i++){
  304. arr.push(`${i}kg`);
  305. }
  306. this.weights=arr;
  307. this.getCareersConfig();
  308. },
  309. onPageScroll(e) {
  310. },
  311. methods:{
  312. back(){
  313. uni.navigateBack({
  314. delta:1
  315. })
  316. },
  317. showHeadPopup(){
  318. this.btnText="从相册上传";
  319. this.$refs.popup.open();
  320. },
  321. hideHeadPopup(){
  322. this.btnText="完成";
  323. this.$refs.popup.close();
  324. },
  325. /**
  326. * 计算scroll高度
  327. */
  328. computedScollviewHeight() {
  329. let query = uni.createSelectorQuery().in(this);
  330. let heightLeaf =0;
  331. query.select('#topnav').boundingClientRect(data => {
  332. this.topNavHeight=data.height;
  333. heightLeaf += data.height;
  334. }).exec(() => {
  335. let sysInfo = uni.getSystemInfoSync();
  336. this.scrollHeight = sysInfo.windowHeight - heightLeaf;
  337. });
  338. },
  339. /**
  340. * 推荐下拉刷新、加载更多
  341. */
  342. scrollRefresh(){
  343. if (this.scrollRefreshing)
  344. {
  345. return;
  346. }
  347. this.scrollRefreshing = true;
  348. setTimeout(() => {
  349. this.scrollTriggered = false;
  350. this.scrollRefreshing = false;
  351. }, 1000)
  352. this.getMineDetail();
  353. },
  354. scrollPulling(e) {},
  355. scrollRestore() {this.scrollTriggered = true;},
  356. scrollAbort() {},
  357. scrollToBottom(){
  358. },
  359. randNick(){
  360. this.$api.login.randNick({}).then(res=>{
  361. this.nickname=res.data.nick;
  362. }).catch(err=>{})
  363. },
  364. confirm(e) {
  365. this.tempFilePath = ''
  366. this.cropFilePath = e.detail.tempFilePath;
  367. const that=this;
  368. const policyText=getPolicy();
  369. const policy=encode(JSON.stringify(policyText));
  370. const key=getKey(0,this.cropFilePath.split('.')[1]);
  371. that.$api.public.aliossToken({}).then(resuslt=>{
  372. let formData={
  373. key:key,
  374. policy:policy,
  375. OSSAccessKeyId:resuslt.data.accessKeyId,
  376. signature:computeSignature(resuslt.data.accessKeySecret,policy),
  377. 'x-oss-security-token':resuslt.data.securityToken,
  378. success_action_status:'200'
  379. }
  380. uni.uploadFile({
  381. url: 'https://zhenyanapp-gen.oss-cn-qingdao.aliyuncs.com',
  382. filePath:this.cropFilePath,
  383. name: 'file',
  384. header:{
  385. "Content-Type": "multipart/form-data"
  386. },
  387. formData: formData,
  388. success: (data) => {
  389. if (data.statusCode === 200) {
  390. that.icon=`${that.$store.state.imageCdn}/${key}`;
  391. that.saveOptions.icon=`${that.$store.state.imageCdn}/${key}`;
  392. }
  393. },
  394. fail: err => {
  395. console.log(err);
  396. }
  397. })
  398. })
  399. },
  400. cancel() {
  401. console.log('canceled')
  402. },
  403. getCareersConfig(){
  404. this.$api.public.config({tscsj:['Careers']}).then(res=>{
  405. this.careersData=res.data.careers;
  406. let arr=[],arr1=[];
  407. for(let item in res.data.careers){
  408. arr1.push(item)
  409. }
  410. arr.push(arr1);
  411. arr.push(res.data.careers[arr1[0]]);
  412. this.jobs=arr;
  413. }).catch(err=>{
  414. console.log(err)
  415. })
  416. },
  417. getMineDetail(){
  418. let user=JSON.parse(uni.getStorageSync('user'));
  419. this.$api.public.mineDetail({
  420. getAlbum:true,
  421. completeUser:user
  422. }).then(res=>{
  423. this.$store.commit('setUserInfo',res.data);
  424. uni.setStorageSync('userInfo',JSON.stringify(res.data));//正式环境删除
  425. })
  426. },
  427. heightsChange(e){
  428. this.height=this.heights[e.detail.value];
  429. },
  430. weightsChange(e){
  431. this.weight=this.weights[e.detail.value];
  432. },
  433. agesChange(e){
  434. this.age=e.detail.value;
  435. },
  436. jobsChange(e){
  437. let str=this.jobs[1][e.detail.value[1]];
  438. this.job=str;
  439. },
  440. jobsColumnChange(e){
  441. let leftValue=this.jobs[e.detail.column][e.detail.value];
  442. if(e.detail.column===0){
  443. this.jobs[1]=this.careersData[leftValue];
  444. this.$forceUpdate()
  445. }
  446. },
  447. authsChange(e){
  448. this.auth=this.auths[e.detail.value].value;
  449. this.weiXinStatusEnum=this.auths[e.detail.value].key;
  450. },
  451. editCity(){
  452. uni.navigateTo({
  453. url:'/pages/info/city?type=edit'
  454. })
  455. },
  456. editLabels(){
  457. uni.navigateTo({
  458. url:'/pages/info/labels?type=labels'
  459. })
  460. },
  461. editWants(){
  462. uni.navigateTo({
  463. url:'/pages/info/labels?type=wants'
  464. })
  465. },
  466. getMineData(){
  467. let userInfo=this.$store.state.userInfo||JSON.parse(uni.getStorageSync('userInfo'));
  468. console.log(userInfo)
  469. this.saveOptions.icon=userInfo.icon
  470. this.cropFilePath=userInfo.iconThumbnail;
  471. this.nickname=userInfo.nick;
  472. this.introduce=userInfo.desc;
  473. this.height=userInfo.height;
  474. this.weight=userInfo.weight;
  475. this.age=userInfo.ageInfo.birthday;
  476. this.job=userInfo.career;
  477. this.wechat=userInfo.wxId
  478. this.weiXinStatusEnum=userInfo.weixinStatus;
  479. this.auths.forEach((item,index)=>{
  480. if(item.key===this.weiXinStatusEnum){
  481. this.auth=item.value;
  482. }
  483. });
  484. this.myCitys=userInfo.cities||[];
  485. this.myLabels=userInfo.myLabels||[];
  486. this.myWants=userInfo.userWantedLabels||[];
  487. },
  488. sure(){
  489. if(this.btnText==='完成'){
  490. let userInfo=this.$store.state.userInfo||JSON.parse(uni.getStorageSync('userInfo'));
  491. this.saveOptions.birthday=this.age;
  492. this.saveOptions.education=userInfo.education;
  493. this.saveOptions.career=this.job;
  494. this.saveOptions.cities=this.myCitys;
  495. this.saveOptions.completeUser=JSON.parse(uni.getStorageSync('user'));
  496. this.saveOptions.desc=this.introduce;
  497. this.saveOptions.weight=this.weight;
  498. this.saveOptions.height=this.height;
  499. this.saveOptions.nick=this.nickname;
  500. this.saveOptions.weiXinStatus=this.weiXinStatusEnum;
  501. this.saveOptions.wxId=this.wechat;
  502. if(!this.saveOptions.icon){uni.showToast({mask:true,title:'请上传头像',icon:'none'});return;}
  503. if(!this.saveOptions.nick){uni.showToast({mask:true,title:'请填写昵称',icon:'none'});return;}
  504. if(!this.saveOptions.desc){uni.showToast({mask:true,title:'请填写个人简介',icon:'none'});return;}
  505. uni.showLoading({
  506. mask:true,
  507. title:'更新中···'
  508. })
  509. this.$api.login.editPersonal(this.saveOptions).then(res=>{
  510. if(res.status==='Succ'){
  511. let user=JSON.parse(uni.getStorageSync('user'));
  512. this.$api.login.editHead({completeUser:user,icon:this.saveOptions.icon}).then(res=>{
  513. uni.hideLoading();
  514. uni.showToast({
  515. mask:true,
  516. title:'更新成功',
  517. icon:'success'
  518. });
  519. })
  520. this.getMineDetail();
  521. }
  522. })
  523. }
  524. else{
  525. this.$refs.popup.close();
  526. this.btnText="完成";
  527. uni.chooseImage({
  528. count: 1, //默认9
  529. sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
  530. sourceType: ['album','camera'], //从相册选择
  531. success: res=>{
  532. this.tempFilePath = res.tempFiles[0].path;
  533. }
  534. });
  535. }
  536. }
  537. }
  538. }
  539. </script>
  540. <style lang="scss" scoped>
  541. .container{
  542. width: 100vw;
  543. height: 100vh;
  544. background-color: $bgcolor1;
  545. position: relative;
  546. .topnav {
  547. padding: 0 10rpx;
  548. position: fixed;
  549. top: 0;
  550. left: 0;
  551. width: 100vw;
  552. z-index: 100;
  553. backdrop-filter: blur(10px);
  554. .nav-item {
  555. width: 40rpx;
  556. height: 40rpx;
  557. margin-left: 16rpx;
  558. .nav-img{
  559. width: 40rpx;
  560. height: 40rpx;
  561. }
  562. }
  563. .nav-text{
  564. flex: 1;
  565. color: $fontcolor5;
  566. height: 40rpx;
  567. text-align: center;
  568. }
  569. }
  570. .popup{
  571. width: 100vw;
  572. box-sizing: border-box;
  573. padding: 56rpx 60rpx;
  574. background-color: $bgcolor3;
  575. .p-title-box{
  576. .p-title{
  577. color: $fontcolor5;
  578. }
  579. .p-close{
  580. width: 40rpx;
  581. height: 40rpx;
  582. }
  583. }
  584. .p-title-tip{
  585. color: $fontcolor3;
  586. margin-top: 16rpx;
  587. }
  588. .p-img-box{
  589. margin-top: 80rpx;
  590. .p-img{
  591. .img{
  592. width: 200rpx;
  593. height: 200rpx;
  594. }
  595. .p-text{
  596. color: $fontcolor2;
  597. text-align: center;
  598. }
  599. }
  600. }
  601. }
  602. .scroll-view{
  603. flex-wrap: wrap;
  604. align-items: flex-start !important;
  605. box-sizing: border-box;
  606. .head-info{
  607. position: relative;
  608. width: 184rpx;
  609. height: 184rpx;
  610. margin: 0 auto;
  611. .head-box{
  612. width: 184rpx;
  613. height: 184rpx;
  614. border-radius: 92rpx;
  615. margin: 0 auto;
  616. margin-top: 88rpx;
  617. overflow: hidden;
  618. .head-inner{
  619. width: 184rpx;
  620. height: 184rpx;
  621. background: linear-gradient(133deg, rgba(250, 92, 116, 1), rgba(188, 85, 191, 1), rgba(138, 79, 255, 1));
  622. .add{
  623. width: 40rpx;
  624. height: 40rpx;
  625. background-color: $bgcolor1;
  626. border-radius: 92rpx;
  627. padding: 68rpx;
  628. }
  629. }
  630. }
  631. .camera{
  632. position: absolute;
  633. right: 0;
  634. bottom: 0;
  635. width: 56rpx;
  636. height: 56rpx;
  637. }
  638. }
  639. .label-box{
  640. margin: 0 60rpx;
  641. margin-top: 56rpx;
  642. .left{
  643. color: $fontcolor3;
  644. }
  645. .right{
  646. .rand-btn{
  647. border-radius: 24rpx;
  648. border: 1rpx solid #7D7DA4;
  649. width: 136rpx;
  650. height: 40rpx;
  651. .rand{
  652. width: 24rpx;
  653. height: 24rpx;
  654. }
  655. .rand-text{
  656. color: $fontcolor2;
  657. margin-left: 10rpx;
  658. }
  659. }
  660. .edit{
  661. width: 32rpx;
  662. height: 32rpx;
  663. }
  664. }
  665. }
  666. .tag-box{
  667. margin: 0 60rpx;
  668. margin-top: 56rpx;
  669. flex-wrap: wrap;
  670. .tag{
  671. height: 40rpx;
  672. line-height: 40rpx;
  673. color: $fontcolor3;
  674. padding: 0 20rpx;
  675. margin-right: 20rpx;
  676. border-radius: 16rpx;
  677. background-color: $bgcolor3;
  678. margin-bottom: 20rpx;
  679. }
  680. }
  681. .input-box{
  682. margin: 0rpx 60rpx;
  683. margin-top: 16rpx;
  684. background-color: $bgcolor3;
  685. border-radius: 16rpx;
  686. height: 112rpx;
  687. padding: 0rpx 32rpx;
  688. .input{
  689. color: $fontcolor5;
  690. }
  691. }
  692. .textarea-box{
  693. border-radius: 16rpx;
  694. margin: 0rpx 60rpx;
  695. margin-top: 16rpx;
  696. background-color: $bgcolor3;
  697. padding: 0rpx 32rpx;
  698. min-height: 200rpx;
  699. .textarea{
  700. color: $fontcolor5;
  701. height: 136rpx;
  702. }
  703. }
  704. .select-title{
  705. color: $fontcolor3;
  706. margin: 0 60rpx;
  707. margin-top: 56rpx;
  708. }
  709. .select{
  710. background-color: $bgcolor3;
  711. margin: 0 60rpx;
  712. margin-top: 16rpx;
  713. height: 112rpx;
  714. border-radius: 16px;
  715. padding: 0 36rpx;
  716. .select-val{
  717. color: $fontcolor1;
  718. }
  719. .select-icon{
  720. width: 24rpx;
  721. height: 24rpx;
  722. }
  723. }
  724. }
  725. .btn{
  726. position: fixed;
  727. z-index: 999;
  728. left: 0;
  729. right: 0;
  730. bottom: 44rpx;
  731. margin: auto;
  732. width: 630rpx;
  733. height: 104rpx;
  734. border-radius: 52rpx;
  735. background-color: $primary;
  736. color: $fontcolor5;
  737. text-align: center;
  738. line-height: 104rpx;
  739. }
  740. .input-num{
  741. color: $fontcolor2;
  742. }
  743. }
  744. </style>