editCenter.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795
  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" :value="wechat" @input="wechatInput">
  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. auth:'经过我授权才能查看微信',
  258. weiXinStatusEnum:'WaitAuth',
  259. wechat:'',
  260. myCitys:[],
  261. myLabels:[],
  262. myWants:[],
  263. saveOptions:{
  264. birthday: "",
  265. career: "",
  266. cities: [],
  267. completeUser: {},
  268. desc: "",
  269. education: {},
  270. height: 0,
  271. icon: "",
  272. myLabelIds: [],
  273. nick: "",
  274. wantedLabelIds: [],
  275. weiXinStatus: {},
  276. weight: 0,
  277. wxId: ""
  278. }
  279. };
  280. },
  281. computed: {
  282. statusBarHeight() {
  283. return this.$store.state.statusBarHeight;
  284. },
  285. topbarOffsetHeight() {
  286. return this.$store.state.topbarOffsetHeight;
  287. }
  288. },
  289. mounted() {
  290. let arr=[];
  291. for(let i=150;i<210;i++){
  292. arr.push(`${i}cm`);
  293. }
  294. this.heights=arr;
  295. arr=[];
  296. for(let i=30;i<150;i++){
  297. arr.push(`${i}kg`);
  298. }
  299. this.weights=arr;
  300. this.getCareersConfig();
  301. let user=JSON.parse(uni.getStorageSync('user'));
  302. if(user.sex==='Famale'){
  303. this.auths=[
  304. {key:'WxM2F5',value:'对VIP公开或使用颜豆、权益卡查看'},
  305. {key:'WaitAuth',value:'经过我授权才能查看微信'},
  306. ]
  307. this.auth='对VIP公开或使用颜豆、权益卡查看';
  308. }
  309. else if(user.sex==='Male'){
  310. this.auths=[
  311. {key:'WxF2M7',value:'对完成真人认证的女士公开'},
  312. {key:'WaitAuth',value:'经过我授权才能查看微信'},
  313. ]
  314. this.auth='对完成真人认证的女士公开';
  315. }
  316. this.computedScollviewHeight();
  317. this.getMineData();
  318. },
  319. onPageScroll(e) {
  320. },
  321. methods:{
  322. wechatInput(e){
  323. let value=(e.detail.value||'').trim();
  324. if(value){
  325. const reg = /[\u4e00-\u9fa5]/ig;
  326. if ((reg.test(value))) {
  327. value = value.replace(reg, '');
  328. return;
  329. }
  330. }
  331. this.wechat=e.detail.value;
  332. },
  333. back(){
  334. uni.navigateBack({
  335. delta:1
  336. })
  337. },
  338. showHeadPopup(){
  339. this.btnText="从相册上传";
  340. this.$refs.popup.open();
  341. },
  342. hideHeadPopup(){
  343. this.btnText="完成";
  344. this.$refs.popup.close();
  345. },
  346. /**
  347. * 计算scroll高度
  348. */
  349. computedScollviewHeight() {
  350. let query = uni.createSelectorQuery().in(this);
  351. let heightLeaf =0;
  352. query.select('#topnav').boundingClientRect(data => {
  353. this.topNavHeight=data.height;
  354. heightLeaf += data.height;
  355. }).exec(() => {
  356. let sysInfo = uni.getSystemInfoSync();
  357. this.scrollHeight = sysInfo.windowHeight - heightLeaf;
  358. });
  359. },
  360. /**
  361. * 推荐下拉刷新、加载更多
  362. */
  363. scrollRefresh(){
  364. if (this.scrollRefreshing)
  365. {
  366. return;
  367. }
  368. this.scrollRefreshing = true;
  369. setTimeout(() => {
  370. this.scrollTriggered = false;
  371. this.scrollRefreshing = false;
  372. }, 1000)
  373. this.getMineDetail();
  374. },
  375. scrollPulling(e) {},
  376. scrollRestore() {this.scrollTriggered = true;},
  377. scrollAbort() {},
  378. scrollToBottom(){
  379. },
  380. randNick(){
  381. this.$api.login.randNick({}).then(res=>{
  382. this.nickname=res.data.nick;
  383. }).catch(err=>{})
  384. },
  385. confirm(e) {
  386. this.tempFilePath = ''
  387. this.cropFilePath = e.detail.tempFilePath;
  388. const that=this;
  389. const policyText=getPolicy();
  390. const policy=encode(JSON.stringify(policyText));
  391. const key=getKey(0,this.cropFilePath.split('.')[1]);
  392. that.$api.public.aliossToken({}).then(resuslt=>{
  393. let formData={
  394. key:key,
  395. policy:policy,
  396. OSSAccessKeyId:resuslt.data.accessKeyId,
  397. signature:computeSignature(resuslt.data.accessKeySecret,policy),
  398. 'x-oss-security-token':resuslt.data.securityToken,
  399. success_action_status:'200'
  400. }
  401. uni.uploadFile({
  402. url: 'https://zhenyanapp-gen.oss-cn-qingdao.aliyuncs.com',
  403. filePath:this.cropFilePath,
  404. name: 'file',
  405. header:{
  406. "Content-Type": "multipart/form-data"
  407. },
  408. formData: formData,
  409. success: (data) => {
  410. if (data.statusCode === 200) {
  411. that.icon=`${that.$store.state.imageCdn}/${key}`;
  412. that.saveOptions.icon=`${that.$store.state.imageCdn}/${key}`;
  413. }
  414. },
  415. fail: err => {
  416. console.log(err);
  417. }
  418. })
  419. })
  420. },
  421. cancel() {
  422. console.log('canceled')
  423. },
  424. getCareersConfig(){
  425. this.$api.public.config({tscsj:['Careers']}).then(res=>{
  426. this.careersData=res.data.careers;
  427. let arr=[],arr1=[];
  428. for(let item in res.data.careers){
  429. arr1.push(item)
  430. }
  431. arr.push(arr1);
  432. arr.push(res.data.careers[arr1[0]]);
  433. this.jobs=arr;
  434. }).catch(err=>{
  435. console.log(err)
  436. })
  437. },
  438. getMineDetail(){
  439. let user=JSON.parse(uni.getStorageSync('user'));
  440. this.$api.public.mineDetail({
  441. getAlbum:true,
  442. completeUser:user
  443. }).then(res=>{
  444. this.$store.commit('setUserInfo',res.data);
  445. uni.setStorageSync('userInfo',JSON.stringify(res.data));//正式环境删除
  446. })
  447. },
  448. heightsChange(e){
  449. this.height=parseInt(this.heights[e.detail.value].split('cm')[0]);
  450. },
  451. weightsChange(e){
  452. this.weight=parseInt(this.weights[e.detail.value].split('kg')[0]);
  453. },
  454. agesChange(e){
  455. this.age=e.detail.value;
  456. },
  457. jobsChange(e){
  458. let str=this.jobs[1][e.detail.value[1]];
  459. this.job=str;
  460. },
  461. jobsColumnChange(e){
  462. let leftValue=this.jobs[e.detail.column][e.detail.value];
  463. if(e.detail.column===0){
  464. this.jobs[1]=this.careersData[leftValue];
  465. this.$forceUpdate()
  466. }
  467. },
  468. authsChange(e){
  469. this.auth=this.auths[e.detail.value].value;
  470. this.weiXinStatusEnum=this.auths[e.detail.value].key;
  471. },
  472. editCity(){
  473. uni.navigateTo({
  474. url:'/pages/info/city?type=edit'
  475. })
  476. },
  477. editLabels(){
  478. uni.navigateTo({
  479. url:'/pages/info/labels?type=labels'
  480. })
  481. },
  482. editWants(){
  483. uni.navigateTo({
  484. url:'/pages/info/labels?type=wants'
  485. })
  486. },
  487. getMineData(){
  488. let userInfo=this.$store.state.userInfo||JSON.parse(uni.getStorageSync('userInfo'));
  489. console.log(userInfo)
  490. this.saveOptions.icon=userInfo.icon
  491. this.cropFilePath=userInfo.iconThumbnail;
  492. this.nickname=userInfo.nick;
  493. this.introduce=userInfo.desc;
  494. this.height=userInfo.height;
  495. this.weight=userInfo.weight;
  496. this.age=userInfo.ageInfo.birthday;
  497. this.job=userInfo.career;
  498. this.wechat=userInfo.wxId;
  499. if(userInfo.weixinStatus==='NoWeiXin'){
  500. this.auth='';
  501. }
  502. else{
  503. this.weiXinStatusEnum=userInfo.weixinStatus;
  504. this.auths.forEach((item,index)=>{
  505. if(item.key===this.weiXinStatusEnum){
  506. this.auth=item.value;
  507. }
  508. });
  509. }
  510. this.myCitys=userInfo.cities||[];
  511. this.myLabels=userInfo.myLabels||[];
  512. this.myWants=userInfo.userWantedLabels||[];
  513. },
  514. sure(){
  515. if(this.btnText==='完成'){
  516. let userInfo=this.$store.state.userInfo||JSON.parse(uni.getStorageSync('userInfo'));
  517. this.saveOptions.birthday=this.age;
  518. this.saveOptions.education=userInfo.education;
  519. this.saveOptions.career=this.job;
  520. this.saveOptions.cities=this.myCitys;
  521. this.saveOptions.completeUser=JSON.parse(uni.getStorageSync('user'));
  522. this.saveOptions.desc=this.introduce;
  523. this.saveOptions.weight=this.weight;
  524. this.saveOptions.height=this.height;
  525. this.saveOptions.nick=this.nickname;
  526. this.saveOptions.weiXinStatus=this.weiXinStatusEnum;
  527. this.saveOptions.wxId=this.wechat;
  528. if(!this.saveOptions.icon){uni.showToast({mask:true,title:'请上传头像',icon:'none'});return;}
  529. if(!this.saveOptions.nick){uni.showToast({mask:true,title:'请填写昵称',icon:'none'});return;}
  530. if(!this.saveOptions.desc){uni.showToast({mask:true,title:'请填写个人简介',icon:'none'});return;}
  531. uni.showLoading({
  532. mask:true,
  533. title:'更新中···'
  534. })
  535. this.$api.login.editPersonal(this.saveOptions).then(res=>{
  536. if(res.status==='Succ'){
  537. let user=JSON.parse(uni.getStorageSync('user'));
  538. this.$api.login.editHead({completeUser:user,icon:this.saveOptions.icon}).then(res=>{
  539. uni.hideLoading();
  540. uni.showToast({
  541. mask:true,
  542. title:'更新成功',
  543. icon:'success'
  544. });
  545. })
  546. this.$api.public.wxConfig({status:this.weiXinStatusEnum}).then(res=>{})
  547. this.getMineDetail();
  548. }
  549. })
  550. }
  551. else{
  552. this.$refs.popup.close();
  553. this.btnText="完成";
  554. uni.chooseImage({
  555. count: 1, //默认9
  556. sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
  557. sourceType: ['album','camera'], //从相册选择
  558. success: res=>{
  559. this.tempFilePath = res.tempFiles[0].path;
  560. }
  561. });
  562. }
  563. }
  564. }
  565. }
  566. </script>
  567. <style lang="scss" scoped>
  568. .container{
  569. width: 100vw;
  570. height: 100vh;
  571. background-color: $bgcolor1;
  572. position: relative;
  573. .topnav {
  574. padding: 0 10rpx;
  575. position: fixed;
  576. top: 0;
  577. left: 0;
  578. width: 100vw;
  579. z-index: 100;
  580. backdrop-filter: blur(10px);
  581. .nav-item {
  582. width: 40rpx;
  583. height: 40rpx;
  584. margin-left: 16rpx;
  585. .nav-img{
  586. width: 40rpx;
  587. height: 40rpx;
  588. }
  589. }
  590. .nav-text{
  591. flex: 1;
  592. color: $fontcolor5;
  593. height: 40rpx;
  594. text-align: center;
  595. }
  596. }
  597. .popup{
  598. width: 100vw;
  599. box-sizing: border-box;
  600. padding: 56rpx 60rpx;
  601. background-color: $bgcolor3;
  602. .p-title-box{
  603. .p-title{
  604. color: $fontcolor5;
  605. }
  606. .p-close{
  607. width: 40rpx;
  608. height: 40rpx;
  609. }
  610. }
  611. .p-title-tip{
  612. color: $fontcolor3;
  613. margin-top: 16rpx;
  614. }
  615. .p-img-box{
  616. margin-top: 80rpx;
  617. .p-img{
  618. .img{
  619. width: 200rpx;
  620. height: 200rpx;
  621. }
  622. .p-text{
  623. color: $fontcolor2;
  624. text-align: center;
  625. }
  626. }
  627. }
  628. }
  629. .scroll-view{
  630. flex-wrap: wrap;
  631. align-items: flex-start !important;
  632. box-sizing: border-box;
  633. .head-info{
  634. position: relative;
  635. width: 184rpx;
  636. height: 184rpx;
  637. margin: 0 auto;
  638. .head-box{
  639. width: 184rpx;
  640. height: 184rpx;
  641. border-radius: 92rpx;
  642. margin: 0 auto;
  643. margin-top: 88rpx;
  644. overflow: hidden;
  645. .head-inner{
  646. width: 184rpx;
  647. height: 184rpx;
  648. background: linear-gradient(133deg, rgba(250, 92, 116, 1), rgba(188, 85, 191, 1), rgba(138, 79, 255, 1));
  649. .add{
  650. width: 40rpx;
  651. height: 40rpx;
  652. background-color: $bgcolor1;
  653. border-radius: 92rpx;
  654. padding: 68rpx;
  655. }
  656. }
  657. }
  658. .camera{
  659. position: absolute;
  660. right: 0;
  661. bottom: 0;
  662. width: 56rpx;
  663. height: 56rpx;
  664. }
  665. }
  666. .label-box{
  667. margin: 0 60rpx;
  668. margin-top: 56rpx;
  669. .left{
  670. color: $fontcolor3;
  671. }
  672. .right{
  673. .rand-btn{
  674. border-radius: 24rpx;
  675. border: 1rpx solid #7D7DA4;
  676. width: 136rpx;
  677. height: 40rpx;
  678. .rand{
  679. width: 24rpx;
  680. height: 24rpx;
  681. }
  682. .rand-text{
  683. color: $fontcolor2;
  684. margin-left: 10rpx;
  685. }
  686. }
  687. .edit{
  688. width: 32rpx;
  689. height: 32rpx;
  690. }
  691. }
  692. }
  693. .tag-box{
  694. margin: 0 60rpx;
  695. margin-top: 56rpx;
  696. flex-wrap: wrap;
  697. .tag{
  698. height: 40rpx;
  699. line-height: 40rpx;
  700. color: $fontcolor3;
  701. padding: 0 20rpx;
  702. margin-right: 20rpx;
  703. border-radius: 16rpx;
  704. background-color: $bgcolor3;
  705. margin-bottom: 20rpx;
  706. }
  707. }
  708. .input-box{
  709. margin: 0rpx 60rpx;
  710. margin-top: 16rpx;
  711. background-color: $bgcolor3;
  712. border-radius: 16rpx;
  713. height: 112rpx;
  714. padding: 0rpx 32rpx;
  715. .input{
  716. color: $fontcolor5;
  717. }
  718. }
  719. .textarea-box{
  720. border-radius: 16rpx;
  721. margin: 0rpx 60rpx;
  722. margin-top: 16rpx;
  723. background-color: $bgcolor3;
  724. padding: 0rpx 32rpx;
  725. min-height: 200rpx;
  726. .textarea{
  727. color: $fontcolor5;
  728. height: 136rpx;
  729. }
  730. }
  731. .select-title{
  732. color: $fontcolor3;
  733. margin: 0 60rpx;
  734. margin-top: 56rpx;
  735. }
  736. .select{
  737. background-color: $bgcolor3;
  738. margin: 0 60rpx;
  739. margin-top: 16rpx;
  740. height: 112rpx;
  741. border-radius: 16px;
  742. padding: 0 36rpx;
  743. .select-val{
  744. color: $fontcolor1;
  745. }
  746. .select-icon{
  747. width: 24rpx;
  748. height: 24rpx;
  749. }
  750. }
  751. }
  752. .btn{
  753. position: fixed;
  754. z-index: 999;
  755. left: 0;
  756. right: 0;
  757. bottom: 44rpx;
  758. margin: auto;
  759. width: 630rpx;
  760. height: 104rpx;
  761. border-radius: 52rpx;
  762. background-color: $primary;
  763. color: $fontcolor5;
  764. text-align: center;
  765. line-height: 104rpx;
  766. }
  767. .input-num{
  768. color: $fontcolor2;
  769. }
  770. }
  771. </style>