cityConstrution.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734
  1. <template>
  2. <view>
  3. <view class="align-items" style="margin-top: 80rpx;">
  4. <back></back>
  5. <view class="title-text" style="margin-left: 20rpx;">
  6. 阀管施工
  7. </view>
  8. </view>
  9. <view style="margin-top: 60rpx;">
  10. <view>
  11. <view class="font-fifty-six SourceHanSansCN choose" @click="openHouse('xiaoqu')">
  12. {{house ? house :'选择小区'}}
  13. <u-popup v-model="pop" mode="bottom" height="1000rpx">
  14. <view style="margin: 20rpx;">
  15. <u-search placeholder="请输入搜索内容" v-model="keyword" :action-style="{'font-size':'40rpx'}" @custom="searchinfo(selectType)"></u-search>
  16. </view>
  17. <view>
  18. <scroll-view scroll-y="true" style="height: 600rpx; text-align: center;">
  19. <view v-for="(item,index) in chooseHouseList" :key="item.value" >
  20. <view :class="current === index ? 'active' : '' " style="color: #000000;" @click="active(item,index)">
  21. {{item.label}}
  22. </view>
  23. </view>
  24. </scroll-view>
  25. <view class="">
  26. <button type="default" class="font-fifty-six" @click="search(selectType)">确定</button>
  27. </view>
  28. <view class="">
  29. <button type="default" @click="pop = false;" class="font-fifty-six">取消</button>
  30. </view>
  31. </view>
  32. </u-popup>
  33. <!-- <u-select v-model="houseShow" :list="chooseHouseList" @confirm="chooseHouse"></u-select> -->
  34. </view>
  35. </view>
  36. <view>
  37. <view class="font-fifty-six SourceHanSansCN choose" @click="openHouse('louyu')">
  38. {{bulid ? bulid : '选择楼宇'}}
  39. <!-- <u-select v-model="bulidShow" :list="chooseBuildList" @confirm="chooseBuild"></u-select> -->
  40. </view>
  41. </view>
  42. <view>
  43. <view class="font-fifty-six SourceHanSansCN choose" @click="openHouse('danyuan')">
  44. {{unit ? unit : '选择单元'}}
  45. <!-- openUnit(), <u-select v-model="unitShow" :list="chooseUnitList" @confirm="chooseUnit"></u-select> -->
  46. </view>
  47. </view>
  48. <view>
  49. <view class="font-fifty-six SourceHanSansCN choose" @click="openHouse('menpai')">
  50. {{houseNumber ? houseNumber : '选择门牌'}}
  51. <!-- open(), <u-select v-model="houseNumberShow" :list="chooseNumberList" @confirm="chooseNumber"></u-select> -->
  52. </view>
  53. </view>
  54. <view>
  55. <view class="font-fifty-six SourceHanSansCN select-type" @click="openType('shows')">
  56. 上门类型 <text class="font-fifty-six SourceHanSansCN" style="color: #232146;">
  57. {{type ? '----' + type : ''}}</text>
  58. <u-select v-model="shows" :list="mounicipalList" @confirm="confirm"></u-select>
  59. </view>
  60. <view v-if="typeValue">
  61. <view v-if=" typeValue === '002' ">
  62. <view class="font-fifty-six SourceHanSansCN select-type" @click="projectType()">
  63. 自闭阀类型 <text class="font-fifty-six SourceHanSansCN" style="color: #232146;">
  64. {{valueType ? '----' + valueType : ''}}</text>
  65. <u-select v-model="listTypeShow" :list="typeList" @confirm="listType"></u-select>
  66. </view>
  67. <view class="font-fifty-six SourceHanSansCN tube" @click="openType('tubeType')">
  68. 管子类别
  69. <text class="font-fifty-six SourceHanSansCN" style="color: #232146;">
  70. {{tubeType ?'----' + tubeType:''}}</text>
  71. <u-select v-model="tubeTypeShow" :list="tubeTypeList" @confirm="tubeTypeConfirm"></u-select>
  72. </view>
  73. <view class="font-fifty-six SourceHanSansCN tube" @click="openType('tubeLong')">
  74. 管子长度
  75. <text class="font-fifty-six SourceHanSansCN" style="color: #232146;">
  76. {{tubeLong ?'----' + tubeLong :''}}</text>
  77. <u-select v-model="tubeLongShow" :list="tubeTypeLongList" @confirm="tubeLongConfirm">
  78. </u-select>
  79. </view>
  80. </view>
  81. <view class="upload align-items">
  82. <view class="" style="display: flex; flex-wrap: wrap;">
  83. <image src="/static/icon/chooseimg.png" mode=""
  84. style="width: 190rpx; height: 190rpx; margin: 0 12rpx;; " @click="choose()"></image>
  85. <view v-for="(item,index) in imgArr" :key="index" style="position: relative;">
  86. <view v-if="item.substring(item.length - 3) == 'png' || item.substring(item.length - 3) == 'jpg' ">
  87. <image :src="item" mode=""
  88. style="width: 190rpx; height: 190rpx; margin: 0 12rpx;" @click="showPhoto(index)">
  89. </image>
  90. </view>
  91. <view v-else>
  92. <video :src="item"
  93. style="width: 190rpx; height: 190rpx; margin: 0 12rpx;"></video>
  94. </view>
  95. <view @click="remove(index)" style="position: absolute; top: 0; right: 14rpx; border-radius: 50%; background-color: #FF0000;">
  96. <u-icon name="close" color="#FFFFFF" size="35" ></u-icon>
  97. </view>
  98. </view>
  99. </view>
  100. <view class="gray font-forty-eight SourceHanSansCN" v-if="photo">
  101. 此处添加照片或视频
  102. </view>
  103. </view>
  104. <view class="upload">
  105. <text class="font-forty SourceHanSansCN">备注:</text>
  106. <textarea value="" placeholder="请输入备注" v-model="remark"/>
  107. </view>
  108. </view>
  109. <view class="font-fifty-six SourceHanSansCN total background-color1" @click="submit()">
  110. 提交数据
  111. </view>
  112. <!-- <u-select v-model="shows" :list="mounicipalList" @confirm="confirm"></u-select> -->
  113. <!-- <u-select v-model="tubeTypeShow" :list="tubeTypeList" @confirm="tubeTypeConfirm"></u-select> -->
  114. <!-- <u-select v-model="tubeLongShow" :list="tubeTypeLongList" @confirm="tubeLongConfirm"></u-select> -->
  115. </view>
  116. </view>
  117. </view>
  118. </template>
  119. <script>
  120. import service from '@/api/index.js'
  121. export default {
  122. components: {
  123. },
  124. data() {
  125. return {
  126. keyword:'',
  127. selectType:'',
  128. pop:false,
  129. housename:'',
  130. houseid:0,
  131. buildid:0,
  132. unitid:0,
  133. numberid:0,
  134. houseShow: false,
  135. current:-1,
  136. chooseHouseList: [],
  137. house: '选择小区',
  138. bulid: '选择楼宇',
  139. unit: '选择单元',
  140. houseNumber: '选择门牌',
  141. action: this.$HTTP.webUrl + `/obs`,
  142. shows: false,
  143. tubeTypeShow: false,
  144. tubeLongShow: false,
  145. mounicipalList: [],
  146. tubeTypeList: [],
  147. tubeTypeLongList: [],
  148. type: '',
  149. tubeType: '',
  150. tubeLong: '',
  151. // url: [],
  152. photo: true,
  153. typeValue: '',
  154. headers: {
  155. MAuthorization: "wxBearer " + uni.getStorageSync('token')
  156. },
  157. housedata: '',
  158. typeList: [],
  159. listTypeShow: false,
  160. valueType: '',
  161. uploading: false,
  162. imgArr:[],
  163. remark:'',
  164. show:false,
  165. progress:0 ,//上传图片进度百分比
  166. loading:false
  167. }
  168. },
  169. onLoad() {
  170. this.getArea();
  171. this.select();
  172. this.getTubeType();
  173. this.getTubeLong();
  174. this.getProjectType();
  175. },
  176. methods: {
  177. openHouse(selectType) {
  178. if(selectType === 'xiaoqu'){
  179. //选择小区
  180. this.selectType = 'xiaoqu'
  181. this.getArea();
  182. }else if(selectType === 'louyu'){
  183. //选择楼宇
  184. this.selectType = 'louyu'
  185. this.housename = null;
  186. this.buildid = 0;
  187. service.getBuilding({areaId: this.houseid}).then(res => {
  188. this.chooseHouseList = [];
  189. res.forEach(item => {
  190. this.chooseHouseList.push({
  191. value: item.id,
  192. label: item.name,
  193. selectType:'louyu'
  194. })
  195. })
  196. })
  197. }else if(selectType === 'danyuan'){
  198. //选择单元
  199. this.selectType = 'danyuan';
  200. this.housename = null;
  201. this.unitid = 0;
  202. service.getUnit({buildingId: this.buildid}).then(res => {
  203. this.chooseHouseList = [];
  204. res.forEach(item => {
  205. this.chooseHouseList.push({
  206. value: item.id,
  207. label: item.name,
  208. selectType:'danyuan'
  209. })
  210. })
  211. })
  212. }else if(selectType === 'menpai'){
  213. //选择门牌
  214. this.selectType = 'menpai';
  215. this.housename = null;
  216. this.numberid = null;
  217. service.getHouse({unitId: this.unitid}).then(res => {
  218. this.chooseHouseList = [];
  219. res.forEach(item => {
  220. this.chooseHouseList.push({
  221. value: item.id,
  222. label: item.name,
  223. selectType:'menpai'
  224. })
  225. })
  226. })
  227. }
  228. this.pop = !this.pop;
  229. },
  230. searchinfo(selectType){
  231. if(selectType == 'xiaoqu'){
  232. console.log('ssss',this.selectType)
  233. service.getArea({name:this.keyword}).then(res => {
  234. this.chooseHouseList = [];
  235. res.forEach((item, index) => {
  236. this.chooseHouseList.push({
  237. value: item.id,
  238. label: item.name,
  239. selectType:'xiaoqu'
  240. })
  241. })
  242. })
  243. this.keyword = '';
  244. }else if(selectType == 'louyu'){
  245. console.log('ssss',this.selectType)
  246. service.getBuilding({areaId: this.houseid,name:this.keyword}).then(res => {
  247. this.chooseHouseList = [];
  248. res.forEach((item, index) => {
  249. this.chooseHouseList.push({
  250. value: item.id,
  251. label: item.name,
  252. selectType:'louyu'
  253. })
  254. })
  255. })
  256. this.keyword = '';
  257. }else if(selectType == 'danyuan'){
  258. console.log('ssss',this.selectType)
  259. service.getUnit({buildingId: this.buildid,name:this.keyword}).then(res => {
  260. this.chooseHouseList = [];
  261. res.forEach((item, index) => {
  262. this.chooseHouseList.push({
  263. value: item.id,
  264. label: item.name,
  265. selectType:'danyuan'
  266. })
  267. })
  268. })
  269. this.keyword = '';
  270. }else if(selectType == 'menpai'){
  271. console.log('ssss',this.selectType)
  272. service.getHouse({unitId: this.unitid,name:this.keyword}).then(res => {
  273. this.chooseHouseList = [];
  274. res.forEach((item, index) => {
  275. this.chooseHouseList.push({
  276. value: item.id,
  277. label: item.name,
  278. selectType:'menpai'
  279. })
  280. })
  281. })
  282. this.keyword = '';
  283. }
  284. },
  285. showPhoto(index){
  286. uni.previewImage({
  287. current:index,
  288. urls:this.imgArr,
  289. })
  290. console.log('sss')
  291. },
  292. openBuild() {
  293. this.bulidShow = !this.bulidShow
  294. },
  295. projectType() {
  296. this.listTypeShow = !this.listTypeShow
  297. },
  298. //获取小区
  299. getArea() {
  300. service.getArea().then(res => {
  301. this.chooseHouseList = [];
  302. res.forEach((item, index) => {
  303. this.chooseHouseList.push({
  304. value: item.id,
  305. label: item.name,
  306. selectType:'xiaoqu'
  307. })
  308. })
  309. })
  310. },
  311. getProjectType() {
  312. service.getProject().then(res => {
  313. console.log('getProjectType', res)
  314. this.typeList = [];
  315. res.forEach(item => {
  316. this.typeList.push({
  317. value: item.id,
  318. label: item.valveType
  319. })
  320. })
  321. })
  322. },
  323. search(selectType){
  324. if(selectType == 'xiaoqu'){
  325. this.house = this.housename;
  326. service.getBuilding({areaId: this.houseid}).then(res => {
  327. this.chooseHouseList = [];
  328. res.forEach(item => {
  329. this.chooseHouseList.push({
  330. value: item.id,
  331. label: item.name,
  332. selectType:'louyu'
  333. })
  334. })
  335. })
  336. this.current = -1;
  337. this.bulid = null;
  338. this.unit = null;
  339. this.houseNumber = null;
  340. }else if(selectType == 'louyu'){
  341. this.bulid = this.housename;
  342. service.getUnit({buildingId: this.buildid}).then(res => {
  343. this.chooseHouseList = [];
  344. res.forEach(item => {
  345. this.chooseHouseList.push({
  346. value: item.id,
  347. label: item.name,
  348. selectType:'danyuan'
  349. })
  350. })
  351. })
  352. this.unit = null;
  353. this.houseNumber = null;
  354. this.current = -1;
  355. }else if(selectType == 'danyuan'){
  356. this.unit = this.housename;
  357. service.getHouse({unitId: this.unitid}).then(res => {
  358. this.chooseHouseList = [];
  359. res.forEach(item => {
  360. this.chooseHouseList.push({
  361. value: item.id,
  362. label: item.name,
  363. selectType:'menpai'
  364. })
  365. })
  366. })
  367. this.houseNumber = null;
  368. this.current = -1;
  369. }else if(selectType == 'menpai'){
  370. this.houseNumber = this.housename;
  371. this.housedata = this.numberid;
  372. this.current = -1;
  373. }
  374. this.pop = false;
  375. },
  376. active(item,index){
  377. this.current = index;
  378. this.housename = item.label;
  379. if(item.selectType == 'xiaoqu'){
  380. this.houseid = item.value;
  381. }else if(item.selectType == 'louyu'){
  382. this.buildid = item.value;
  383. }else if(item.selectType == 'danyuan'){
  384. this.unitid = item.value;
  385. }else if(item.selectType == 'menpai'){
  386. this.numberid = item.value
  387. }
  388. this.selectType = item.selectType;
  389. },
  390. openUnit() {
  391. this.unitShow = !this.unitShow
  392. },
  393. //选择门牌
  394. open() {
  395. this.houseNumberShow = !this.houseNumberShow
  396. },
  397. //选择上门类型
  398. confirm(e) {
  399. this.type = e[0].label
  400. this.typeValue = e[0].value
  401. this.imgArr = [];
  402. this.tubeType = null;
  403. this.tubeLong = null;
  404. this.valueType = null;
  405. this.photo = true;
  406. },
  407. //选择类型
  408. select() {
  409. service.getDic({
  410. dicType: 'service_type'
  411. }).then(res => {
  412. res.forEach(item => {
  413. this.mounicipalList.push({
  414. value: item.value,
  415. label: item.name
  416. })
  417. })
  418. })
  419. },
  420. openType(type) {
  421. if (type === 'shows') {
  422. this.shows = !this.shows
  423. } else if (type === 'tubeType') {
  424. this.tubeTypeShow = !this.tubeTypeShow
  425. } else {
  426. this.tubeLongShow = !this.tubeLongShow
  427. }
  428. },
  429. tubeTypeConfirm(e) {
  430. this.tubeType = e[0].label
  431. },
  432. listType(e) {
  433. this.valueType = e[0].label
  434. },
  435. tubeLongConfirm(e) {
  436. this.tubeLong = e[0].label
  437. },
  438. getTubeType() {
  439. service.getPipeType().then(res => {
  440. res.forEach(item => {
  441. this.tubeTypeList.push({
  442. value: item.id,
  443. label: item.pipeType
  444. })
  445. })
  446. })
  447. },
  448. getTubeLong() {
  449. service.getPipeLength().then(res => {
  450. res.forEach(item => {
  451. this.tubeTypeLongList.push({
  452. value: item.id,
  453. label: item.pipeLength
  454. })
  455. })
  456. })
  457. },
  458. remove(index) {
  459. uni.showModal({
  460. title: '提示',
  461. content: '是否删除该图片或视频?',
  462. success: (res) => {
  463. if (res.confirm) {
  464. this.imgArr.splice(index, 1)
  465. console.log('this.imgarr',this.imgArr)
  466. if (this.imgArr.length <= 0) {
  467. this.photo = true;
  468. }
  469. }
  470. }
  471. })
  472. },
  473. choose() {
  474. let _this = this;
  475. uni.showActionSheet({
  476. title:'上传',
  477. itemList:['图片','视频'],
  478. success: (res) => {
  479. console.log(res)
  480. if(res.tapIndex == 0){
  481. this.chooseimage()
  482. }else{
  483. this.choosevideo()
  484. }
  485. }
  486. })
  487. },
  488. chooseimage() {
  489. console.log('图片')
  490. let _this = this;
  491. uni.chooseImage({
  492. sizeType: ['album', 'camera'],
  493. success(resp) {
  494. console.log('res--uni.chooseMedia', resp);
  495. resp.tempFiles.forEach((item, index) => {
  496. const task = uni.uploadFile({
  497. url: _this.$HTTP.webUrl + `/obs`,
  498. filePath: item.path,
  499. name: 'file',
  500. formData: {},
  501. header: _this.headers,
  502. success: res => {
  503. // 判断是否json字符串,将其转为json格式
  504. let data = _this.$u.test.jsonString(res
  505. .data) ? JSON.parse(res.data) : res.data;
  506. if (![200, 201, 204].includes(res.statusCode)) {
  507. // this.uploadError(index, data);
  508. _this.$UTILS.showPrompt('上传失败!')
  509. } else {
  510. if (_this.progress === 100) {
  511. console.log('_this.progress', _this.progress)
  512. console.log('data----', data)
  513. console.log('res--', res)
  514. _this.imgArr.push(data.data.url)
  515. console.log('imgArr', _this.imgArr)
  516. _this.$UTILS.showPrompt('上传成功!')
  517. _this.photo = false;
  518. }
  519. }
  520. },
  521. fail: e => {
  522. _this.$UTILS.showPrompt('上传失败!')
  523. this.uploadError(index, e);
  524. },
  525. complete: res => {
  526. uni.hideLoading();
  527. _this.uploading = false;
  528. }
  529. });
  530. task.onProgressUpdate(res => {
  531. _this.progress = res.progress;
  532. console.log('onProgressUpdate', res)
  533. console.log('task.onProgressUpdate', _this.progress)
  534. uni.showLoading({
  535. title: '上传中'
  536. })
  537. if(_this.progress != 100){
  538. _this.loading = false
  539. console.log('_this.loading false', _this.loading)
  540. }else {
  541. _this.loading = true
  542. console.log('_this.loading true', _this.loading)
  543. }
  544. });
  545. })
  546. },
  547. })
  548. },
  549. choosevideo() {
  550. let _this = this;
  551. console.log('视频')
  552. uni.chooseVideo({
  553. sourceType: ['album','camera'],
  554. maxDuration: 30,
  555. success(resp) {
  556. const task = uni.uploadFile({
  557. url: _this.$HTTP.webUrl + `/obs`,
  558. filePath: resp.tempFilePath,
  559. name: 'file',
  560. formData: {},
  561. header: _this.headers,
  562. success: res => {
  563. // 判断是否json字符串,将其转为json格式
  564. let data = _this.$u.test.jsonString(res
  565. .data) ? JSON.parse(res.data) : res.data;
  566. if (![200, 201, 204].includes(res.statusCode)) {
  567. this.uploadError(index, data);
  568. } else {
  569. //上传成功
  570. if (_this.progress === 100) {
  571. console.log('_this.progress', _this.progress)
  572. _this.imgArr.push(data.data.url)
  573. console.log('imgArr', _this.imgArr)
  574. _this.$UTILS.showPrompt('上传成功!')
  575. _this.photo = false;
  576. }
  577. }
  578. },
  579. fail: e => {
  580. _this.$UTILS.showPrompt('上传失败!')
  581. this.uploadError(index, e);
  582. },
  583. complete: res => {
  584. uni.hideLoading();
  585. _this.uploading = false;
  586. }
  587. });
  588. task.onProgressUpdate(res => {
  589. _this.progress = res.progress;
  590. console.log('onProgressUpdate', res)
  591. uni.showLoading({
  592. title: '上传中'
  593. })
  594. if(_this.progress != 100){
  595. _this.loading = false
  596. console.log('_this.loading false', _this.loading)
  597. }else {
  598. _this.loading = true
  599. console.log('_this.loading true', _this.loading)
  600. }
  601. });
  602. },
  603. })
  604. },
  605. submit() {
  606. if (!this.housedata) {
  607. this.$UTILS.showPrompt('请选择门牌号!')
  608. return
  609. }
  610. if (!this.type) {
  611. this.$UTILS.showPrompt('请选择上门类型!')
  612. return
  613. }
  614. if (this.typeValue == '002') {
  615. if (!this.valueType) {
  616. this.$UTILS.showPrompt('请选择自闭阀类别!')
  617. return
  618. }
  619. if (!this.tubeType) {
  620. this.$UTILS.showPrompt('请选择管子类型!')
  621. return
  622. }
  623. if (!this.tubeLong) {
  624. this.$UTILS.showPrompt('请选择管子长度!')
  625. return
  626. }
  627. }
  628. if (this.imgArr.length <= 0) {
  629. this.$UTILS.showPrompt('请上传照片或视频!')
  630. return
  631. }
  632. if(this.loading == false) {
  633. this.$UTILS.showPrompt('照片或视频未上传完毕,无法提交!')
  634. return
  635. }
  636. let param = {
  637. serviceType: this.typeValue,
  638. pipeType: this.tubeType,
  639. pipeLength: this.tubeLong,
  640. houseId: this.housedata,
  641. valveType: this.valueType,
  642. picUrl: this.imgArr,
  643. remark: this.remark,
  644. }
  645. console.log('param-----', param)
  646. service.submitOrder(param).then(res => {
  647. this.$UTILS.showPrompt('提交成功!')
  648. this.houseNumber = null;
  649. this.type = null;
  650. this.typeValue = null;
  651. this.valueType = null;
  652. this.tubeType = null;
  653. this.tubeLong = null;
  654. this.housedata = null;
  655. this.typeValue = null;
  656. this.remark = null;
  657. this.imgArr = [];
  658. }).catch(e => {
  659. this.$UTILS.showPrompt('提交失败!')
  660. console.error(e)
  661. })
  662. },
  663. }
  664. }
  665. </script>
  666. <style lang="scss" scoped>
  667. .choose {
  668. text-align: center;
  669. padding: 20rpx;
  670. margin: 30rpx;
  671. color: #FFFFFF;
  672. background: #43CEB1;
  673. border-radius: 64rpx;
  674. }
  675. .active{
  676. background-color: #1890FF;
  677. }
  678. .select-type {
  679. border: 2rpx solid #3857F3;
  680. text-align: center;
  681. padding: 20rpx;
  682. margin: 30rpx;
  683. color: #3857F3;
  684. border-radius: 64rpx;
  685. }
  686. .upload {
  687. margin: 30rpx;
  688. padding: 30rpx 20rpx;
  689. border: 2rpx solid #3857F3;
  690. border-radius: 48rpx;
  691. }
  692. .tube {
  693. text-align: center;
  694. padding: 20rpx;
  695. margin: 30rpx;
  696. color: #43CEB1;
  697. border: 2rpx solid #43CEB1;
  698. border-radius: 64rpx;
  699. }
  700. .total {
  701. width: 100%;
  702. padding: 40rpx 30rpx;
  703. text-align: center;
  704. color: #FFFFFF;
  705. }
  706. </style>