addPage.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696
  1. <template>
  2. <view id="networkComponent-add-apge">
  3. <view class="addForm-max-big-box">
  4. <view class="addForm-big-box">
  5. <!-- 名称 -->
  6. <view class="addForm-input-box">
  7. <view class="addForm-input-icon">*</view>
  8. <view class="addForm-input-title">名称:</view>
  9. <input class="addForm-input" v-model="addForm.moduleName" style="width:340rpx;" type="text" :maxlength="20"
  10. placeholder="输入名称" placeholder-style="color:#999;">
  11. </view>
  12. <!-- 类型 -->
  13. <view class="addForm-input-box">
  14. <view class="addForm-input-icon">*</view>
  15. <view class="addForm-input-title">类型:</view>
  16. <picker @change="classChange" :value="classIndex" :range="classNameList">
  17. <view class="addForm-input" style="width:340rpx;"
  18. :class="!className?'addForm-input-placeholder':''">
  19. {{className?className:'请选择类型'}}
  20. </view>
  21. </picker>
  22. </view>
  23. <!-- 本地地址 -->
  24. <view class="addForm-input-box" v-if="addForm.moduleType == 1 || addForm.moduleType == 2 || addForm.moduleType == 3">
  25. <view class="addForm-input-icon">*</view>
  26. <view class="addForm-input-title">本地地址:</view>
  27. <input class="addForm-input" v-model="addForm.localIp" style="width:340rpx;"
  28. type="text" :maxlength="20" placeholder="输入本地地址" placeholder-style="color:#999;">
  29. </view>
  30. <!-- 本地端口 -->
  31. <view class="addForm-input-box" v-if="addForm.moduleType == 1 || addForm.moduleType == 2 || addForm.moduleType == 3">
  32. <view class="addForm-input-icon">*</view>
  33. <view class="addForm-input-title">本地端口:</view>
  34. <input class="addForm-input" v-model="addForm.localPort" style="width:340rpx;"
  35. type="text" :maxlength="10" placeholder="输入本地端口" placeholder-style="color:#999;">
  36. </view>
  37. <!-- 公网地址 -->
  38. <view class="addForm-input-box" v-if="addForm.moduleType">
  39. <view class="addForm-input-icon">*</view>
  40. <view class="addForm-input-title">{{addForm.moduleType==4?'远程地址:':'公网地址:'}}</view>
  41. <input class="addForm-input" v-model="addForm.publicIp" style="width:340rpx;"
  42. type="text" :maxlength="20" :placeholder="addForm.moduleType==4?'请输入远程地址':'请输入公网地址'" placeholder-style="color:#999;">
  43. </view>
  44. <!-- 公网端口 -->
  45. <view class="addForm-input-box" v-if="addForm.moduleType">
  46. <view class="addForm-input-icon">*</view>
  47. <view class="addForm-input-title">{{addForm.moduleType==4?'远程端口:':'公网端口:'}}</view>
  48. <input class="addForm-input" v-model="addForm.publicPort" style="width:340rpx;"
  49. type="text" :maxlength="10" :placeholder="addForm.moduleType==4?'请输入远程端口':'请输入公网端口'" placeholder-style="color:#999;">
  50. </view>
  51. <!-- 认证key/用户名 -->
  52. <view class="addForm-input-box" v-if="addForm.moduleType == 1 || addForm.moduleType == 4">
  53. <view class="addForm-input-icon">*</view>
  54. <view class="addForm-input-title">{{addForm.moduleType==4?'用户名:':'认证key:'}}</view>
  55. <input class="addForm-input" v-model="addForm.authKey" style="width:340rpx;"
  56. type="text" :maxlength="200" :placeholder="addForm.moduleType==4?'请输入用户名':'请输入认证key'" placeholder-style="color:#999;">
  57. </view>
  58. <!-- 密匙/密码 -->
  59. <view class="addForm-input-box" v-if="addForm.moduleType == 1 || addForm.moduleType == 4">
  60. <view class="addForm-input-icon">*</view>
  61. <view class="addForm-input-title">{{addForm.moduleType==4?'密码:':'密匙:'}}</view>
  62. <input class="addForm-input" v-model="addForm.authPassword" style="width:340rpx;"
  63. type="text" :maxlength="200" :placeholder="addForm.moduleType==4?'请输入密码':'请输入密匙'" placeholder-style="color:#999;">
  64. </view>
  65. <!-- 粘拆包 -->
  66. <view class="addForm-input-box" v-if="addForm.moduleType==2">
  67. <view class="addForm-input-icon">*</view>
  68. <view class="addForm-input-title">粘拆包:</view>
  69. <picker @change="typeChange" :value="typeIndex" :range="typeNameList">
  70. <view class="addForm-input" style="width:340rpx;"
  71. :class="!typeName?'addForm-input-placeholder':''">
  72. {{typeName?typeName:'请选择粘拆包'}}
  73. </view>
  74. </picker>
  75. </view>
  76. <!-- 粘拆包字符 -->
  77. <view class="addForm-input-box" v-if="addForm.moduleType == 2 && (addForm.dataPacket && addForm.dataPacket !== 0)">
  78. <view class="addForm-input-icon">*</view>
  79. <view class="addForm-input-title">粘拆包字符:</view>
  80. <input class="addForm-input" v-model="addForm.dataPacketContent" style="width:340rpx;"
  81. type="text" :maxlength="200" placeholder="请输入粘拆包字符" placeholder-style="color:#999;">
  82. </view>
  83. <!-- 订阅前缀 -->
  84. <view class="addForm-input-box" v-if="addForm.moduleType == 4">
  85. <view class="addForm-input-icon">*</view>
  86. <view class="addForm-input-title">订阅前缀:</view>
  87. <input class="addForm-input" v-model="addForm.prefix" style="width:340rpx;"
  88. type="text" :maxlength="30" placeholder="请输入订阅前缀" placeholder-style="color:#999;">
  89. </view>
  90. <!-- 消息长度 -->
  91. <view class="addForm-input-box" v-if="addForm.moduleType == 3 || addForm.moduleType == 4">
  92. <view class="addForm-input-icon">*</view>
  93. <view class="addForm-input-title">消息长度:</view>
  94. <input class="addForm-input" v-model="addForm.messageLength" style="width:340rpx;"
  95. type="number" :maxlength="4" :min="10" :max="1000" placeholder="请输入消息长度" placeholder-style="color:#999;">
  96. </view>
  97. <!-- 自定义参数 -->
  98. <view class="addForm-input-box-one">
  99. <view class="addForm-input-box-one-top">
  100. <view class="addForm-input-icon"></view>
  101. <view class="addForm-input-title">自定义参数:</view>
  102. <view class="addForm-add-button" v-if="!addForm.params[4]" @click="addParams">添加</view>
  103. </view>
  104. <view class="addForm-input-box-one-bottom">
  105. <view class="addForm-max-for-box">
  106. <view class="addForm-for-box" v-for="(item,index) in addForm.params">
  107. <view class="addForm-for-min-box">
  108. <view class="for-input-box">
  109. <input class="addForm-input" v-model="item.key" style="width:360rpx;"
  110. type="text" :maxlength="30" placeholder="key" placeholder-style="color:#999;">
  111. </view>
  112. <view class="for-input-box-one">
  113. <input class="addForm-input" v-model="item.value" style="width:360rpx;"
  114. type="text" :maxlength="30" placeholder="value" placeholder-style="color:#999;">
  115. </view>
  116. </view>
  117. <view class="del-view" @click="dleParams(index)">删除</view>
  118. </view>
  119. </view>
  120. </view>
  121. </view>
  122. <!-- 说明 -->
  123. <view class="addForm-input-box">
  124. <view class="addForm-input-icon"></view>
  125. <view class="addForm-input-title">说明:</view>
  126. <input class="addForm-input" v-model="addForm.remark" style="width:340rpx;"
  127. type="text" :maxlength="200" placeholder="请输入说明" placeholder-style="color:#999;">
  128. </view>
  129. </view>
  130. </view>
  131. <view class="addForm-button-box">
  132. <view class="button-null"></view>
  133. <view class="button-view" @click="submitForm">提交</view>
  134. <view class="button-null"></view>
  135. </view>
  136. </view>
  137. </template>
  138. <script>
  139. import { itoNetworkAdd,itoNetworkUpdate } from '@/api/index.js'
  140. export default {
  141. data() {
  142. return {
  143. addForm: {
  144. moduleName:"",
  145. moduleType:"",
  146. localIp:"",
  147. localPort:"",
  148. publicIp:"",
  149. publicPort:"",
  150. authKey:"",
  151. authPassword:"",
  152. dataPacket:"",
  153. dataPacketContent:"",
  154. prefix:"",
  155. messageLength:"",
  156. params:[],
  157. remark:"",
  158. },
  159. //类型
  160. classList:[
  161. {name:'HTTP服务',value:1},
  162. {name:'TCP服务',value:2},
  163. {name:'MQTT服务',value:3},
  164. {name:'MQTT客户端',value:4},
  165. ],
  166. classNameList:['HTTP服务','TCP服务','MQTT服务','MQTT客户端'],
  167. classIndex:0,
  168. className:'',
  169. //粘拆包
  170. typeList: [
  171. {name:'不处理',value:0},
  172. {name:'分隔符',value:1},
  173. {name:'自定义脚本',value:2},
  174. {name:'固定长度',value:3},
  175. {name:'长度字段',value:4},
  176. ],
  177. typeNameList: ['不处理','分隔符','自定义脚本','固定长度','长度字段',],
  178. typeIndex: 0,
  179. typeName: '',
  180. }
  181. },
  182. onLoad(option) {
  183. if(option.item){
  184. this.initialize(option.item);
  185. }
  186. },
  187. onShow(){
  188. },
  189. methods: {
  190. initialize(item){
  191. let obj = JSON.parse(decodeURIComponent(item));
  192. this.$set(this,'addForm',this.dataProcessing(obj,'get'));
  193. },
  194. //类型选择
  195. classChange(event) {
  196. if(this.classList[0]){
  197. this.$set(this, 'classIndex', event.target.value);
  198. this.$set(this, 'className', this.classList[event.target.value].name);
  199. this.$set(this.addForm, 'moduleType', this.classList[event.target.value].value);
  200. }
  201. },
  202. //粘拆包选择
  203. typeChange(event) {
  204. if(this.typeList[0]){
  205. this.$set(this, 'typeIndex', event.target.value);
  206. this.$set(this, 'typeName', this.typeList[event.target.value].name);
  207. this.$set(this.addForm, 'dataPacket', this.typeList[event.target.value].value);
  208. }
  209. },
  210. //添加自定义参数
  211. addParams(){
  212. this.addForm.params.push({key:'',value:''})
  213. },
  214. //删除自定义参数
  215. dleParams(index){
  216. this.addForm.params.splice(index,1);
  217. },
  218. //提交
  219. submitForm(){
  220. let self = this;
  221. if(!this.addForm.moduleName){
  222. uni.showToast({
  223. mask: true,
  224. icon: "none",
  225. position: "center",
  226. title: '输入名称',
  227. duration: 1000
  228. });
  229. return
  230. }else if(!this.addForm.moduleType){
  231. uni.showToast({
  232. mask: true,
  233. icon: "none",
  234. position: "center",
  235. title: '请选择类型',
  236. duration: 1000
  237. });
  238. return
  239. }
  240. let num = 0;
  241. if(this.addForm.moduleType == 1 || this.addForm.moduleType == 2 || this.addForm.moduleType == 3){
  242. if(!this.addForm.localIp){
  243. uni.showToast({
  244. mask: true,
  245. icon: "none",
  246. position: "center",
  247. title: '输入本地地址',
  248. duration: 1000
  249. });
  250. num++
  251. return
  252. }else if(!this.addForm.localPort){
  253. uni.showToast({
  254. mask: true,
  255. icon: "none",
  256. position: "center",
  257. title: '输入本地端口',
  258. duration: 1000
  259. });
  260. num++
  261. return
  262. }
  263. }
  264. if(this.addForm.moduleType == 1 || this.addForm.moduleType == 4){
  265. if(!this.addForm.authKey){
  266. uni.showToast({
  267. mask: true,
  268. icon: "none",
  269. position: "center",
  270. title: this.addForm.moduleType==4?'请输入用户名':'请输入认证key',
  271. duration: 1000
  272. });
  273. num++
  274. return
  275. }else if(!this.addForm.authPassword){
  276. uni.showToast({
  277. mask: true,
  278. icon: "none",
  279. position: "center",
  280. title: this.addForm.moduleType==4?'请输入密码':'请输入密匙',
  281. duration: 1000
  282. });
  283. num++
  284. return
  285. }
  286. }
  287. if(this.addForm.moduleType == 3 || this.addForm.moduleType == 4){
  288. if(!this.addForm.messageLength){
  289. uni.showToast({
  290. mask: true,
  291. icon: "none",
  292. position: "center",
  293. title: '请输入消息长度',
  294. duration: 1000
  295. });
  296. num++
  297. return
  298. }
  299. }
  300. if(this.addForm.moduleType){
  301. if(!this.addForm.publicIp){
  302. uni.showToast({
  303. mask: true,
  304. icon: "none",
  305. position: "center",
  306. title: this.addForm.moduleType==4?'请输入远程地址':'请输入公网地址',
  307. duration: 1000
  308. });
  309. num++
  310. return
  311. }else if(!this.addForm.publicPort){
  312. uni.showToast({
  313. mask: true,
  314. icon: "none",
  315. position: "center",
  316. title: this.addForm.moduleType==4?'请输入远程端口':'请输入公网端口',
  317. duration: 1000
  318. });
  319. num++
  320. return
  321. }
  322. }
  323. if(this.addForm.moduleType == 2){
  324. if(!this.addForm.dataPacket && this.addForm.dataPacket != 0){
  325. uni.showToast({
  326. mask: true,
  327. icon: "none",
  328. position: "center",
  329. title: '请选择粘拆包',
  330. duration: 1000
  331. });
  332. num++
  333. return
  334. }else if(this.addForm.dataPacket != 0){
  335. if(!this.addForm.dataPacketContent){
  336. uni.showToast({
  337. mask: true,
  338. icon: "none",
  339. position: "center",
  340. title: '请输入粘拆包字符',
  341. duration: 1000
  342. });
  343. num++
  344. return
  345. }
  346. }
  347. }
  348. if(this.addForm.moduleType == 4){
  349. if(!this.addForm.prefix){
  350. uni.showToast({
  351. mask: true,
  352. icon: "none",
  353. position: "center",
  354. title: '请输入订阅前缀',
  355. duration: 1000
  356. });
  357. num++
  358. return
  359. }
  360. }
  361. if(this.addForm.params[0]){
  362. this.addForm.params.forEach((item,index)=>{
  363. if(!item.key){
  364. uni.showToast({
  365. mask: true,
  366. icon: "none",
  367. position: "center",
  368. title: '第'+(index+1)+'个自定义参数的key未填写',
  369. duration: 1000
  370. });
  371. num++
  372. return
  373. }else if(!item.value){
  374. uni.showToast({
  375. mask: true,
  376. icon: "none",
  377. position: "center",
  378. title: '第'+(index+1)+'个自定义参数的value未填写',
  379. duration: 1000
  380. });
  381. num++
  382. return
  383. }
  384. })
  385. }
  386. if(num !== 0){
  387. return
  388. }
  389. let obj = this.dataProcessing(this.addForm,'set');
  390. uni.showModal({
  391. title:'警告',
  392. content:'是否确认提交?',
  393. showCancel: true,
  394. cancelColor:'#999999,',
  395. confirmColor: '#0183FA',
  396. success: (res) => {
  397. if(res.confirm){
  398. if(obj.id){
  399. self.itoNetworkUpdate(obj);
  400. }else{
  401. self.itoNetworkAdd(obj);
  402. }
  403. }
  404. },
  405. fail: (res) => {}
  406. })
  407. },
  408. //编辑
  409. async itoNetworkUpdate(obj){
  410. const {data} = await itoNetworkUpdate(obj);
  411. if(data.code==200){
  412. uni.showToast({
  413. mask: true,
  414. icon: "none",
  415. position: "center",
  416. title: data.message,
  417. duration: 2000
  418. });
  419. setTimeout(function(){
  420. uni.navigateBack();
  421. },1800);
  422. }
  423. },
  424. //新增
  425. async itoNetworkAdd(obj){
  426. const {data} = await itoNetworkAdd(obj);
  427. if(data.code==200){
  428. uni.showToast({
  429. mask: true,
  430. icon: "none",
  431. position: "center",
  432. title: data.message,
  433. duration: 2000
  434. });
  435. setTimeout(function(){
  436. uni.navigateBack();
  437. },1800);
  438. }
  439. },
  440. //数据处理
  441. dataProcessing(data,type){
  442. let newData = {
  443. moduleName:data.moduleName,
  444. moduleType:data.moduleType,
  445. publicIp:data.publicIp,
  446. publicPort:data.publicPort,
  447. remark:data.remark,
  448. localIp:data.moduleType == 1 || data.moduleType == 2 || data.moduleType == 3?data.localIp:'',
  449. localPort:data.moduleType == 1 || data.moduleType == 2 || data.moduleType == 3?data.localPort:'',
  450. authKey:data.moduleType == 1 || data.moduleType == 4?data.authKey:'',
  451. authPassword:data.moduleType == 1 || data.moduleType == 4 ?data.authPassword:'',
  452. dataPacket:data.moduleType == 2 ?data.dataPacket:'',
  453. dataPacketContent:data.moduleType == 2 && data.dataPacket != 0 ?data.dataPacketContent:'',
  454. // clientId:data.moduleType == 4 ?data.clientId:'',
  455. // authKey:data.moduleType == 4 ?data.username:'',
  456. // authPassword:data.moduleType == 4 ?data.password:'',
  457. prefix:data.moduleType == 4 ?data.prefix:'',
  458. messageLength:data.moduleType == 3 || data.moduleType == 4 ?data.messageLength:'',
  459. }
  460. if(type == 'get'){
  461. if(data.params){
  462. let obj = data.params?JSON.parse(data.params):{};
  463. let list = [];
  464. Object.keys(obj).forEach((key) => {
  465. const value = obj[key];
  466. list.push({
  467. key:key,
  468. value:value
  469. })
  470. });
  471. newData.params = list[0]?list:[];
  472. }else{
  473. newData.params = [];
  474. }
  475. this.classList.forEach((item)=>{
  476. if(data.moduleType == item.value){
  477. this.$set(this,'className',item.name);
  478. }
  479. })
  480. if(data.moduleType == 2){
  481. this.typeList.forEach((item)=>{
  482. if(data.dataPacket == item.value){
  483. this.$set(this,'typeName',item.name);
  484. }
  485. })
  486. }
  487. }else if(type == 'set'){
  488. let obj = {};
  489. for(let i=0;i<data.params.length;i++){
  490. obj[data.params[i].key] = data.params[i].value
  491. }
  492. newData.params = data.params[0]?JSON.stringify(obj):'';
  493. }
  494. if(data.id){
  495. newData.id = data.id;
  496. }
  497. return JSON.parse(JSON.stringify(newData))
  498. },
  499. }
  500. }
  501. </script>
  502. <style lang="stylus" scoped>
  503. #networkComponent-add-apge{
  504. flex:1;
  505. display: flex;
  506. flex-direction: column;
  507. overflow: hidden;
  508. .addForm-max-big-box {
  509. flex: 1;
  510. overflow-x: hidden;
  511. overflow-y: scroll;
  512. .addForm-big-box {
  513. background-color: #fff;
  514. margin: 20rpx;
  515. border-radius: 12rpx;
  516. padding: 0 0 30rpx;
  517. .addForm-input-box-one{
  518. margin: 10rpx 0 0 10rpx;
  519. font-size: 28rpx;
  520. padding: 20rpx 0 0 0;
  521. .addForm-input-box-one-top{
  522. display: flex;
  523. .addForm-input-icon {
  524. color: #FF6666;
  525. width: 40rpx;
  526. margin-right: 10rpx;
  527. text-align: right;
  528. line-height: 60rpx;
  529. }
  530. .addForm-input-title {
  531. width: 200rpx;
  532. color: #333;
  533. line-height: 60rpx;
  534. }
  535. .addForm-add-button{
  536. height:60rpx;
  537. width:380rpx;
  538. border-radius:8rpx;
  539. background-color: #0183FA;
  540. color:#fff;
  541. font-size:26rpx;
  542. line-height:60rpx;
  543. text-align: center;
  544. }
  545. }
  546. .addForm-input-box-one-bottom{
  547. .addForm-max-for-box{
  548. .addForm-for-box{
  549. display: flex;
  550. margin:30rpx 0;
  551. .addForm-for-min-box{
  552. margin-left:106rpx;
  553. .for-input-box{
  554. // margin-bottom:20rpx;
  555. .addForm-input {
  556. padding: 0 20rpx;
  557. height: 60rpx;
  558. line-height: 60rpx;
  559. font-size: 26rpx;
  560. // border-radius: 8rpx;
  561. border: 1px solid #dedede;
  562. border-right: none;
  563. border-top-left-radius: 8rpx
  564. }
  565. .addForm-input-placeholder{
  566. color: #999 !important;
  567. }
  568. }
  569. .for-input-box-one{
  570. .addForm-input {
  571. padding: 0 20rpx;
  572. height: 60rpx;
  573. line-height: 60rpx;
  574. font-size: 26rpx;
  575. // border-radius: 8rpx;
  576. border: 1px solid #dedede;
  577. border-top: none;
  578. border-right: none;
  579. border-bottom-left-radius: 8rpx
  580. }
  581. .addForm-input-placeholder{
  582. color: #999 !important;
  583. }
  584. }
  585. }
  586. .del-view{
  587. height:125rpx;
  588. width:120rpx;
  589. background-color: #FF6666;
  590. color:#fff;
  591. font-size:26rpx;
  592. line-height:125rpx;
  593. text-align: center;
  594. border-top-right-radius: 8rpx;
  595. border-bottom-right-radius: 8rpx;
  596. }
  597. }
  598. }
  599. }
  600. }
  601. .addForm-input-box {
  602. display: flex;
  603. margin: 10rpx 0 0 10rpx;
  604. font-size: 28rpx;
  605. padding: 20rpx 0 0 0;
  606. .addForm-input-icon {
  607. color: #FF6666;
  608. width: 40rpx;
  609. margin-right: 10rpx;
  610. text-align: right;
  611. line-height: 60rpx;
  612. }
  613. .addForm-input-title {
  614. width: 200rpx;
  615. color: #333;
  616. line-height: 60rpx;
  617. }
  618. .addForm-max-for-box{
  619. .addForm-for-box{
  620. margin-bottom:20rpx;
  621. .addForm-for-min-box{
  622. display: flex;
  623. .for-input-box{
  624. margin-right:20rpx;
  625. }
  626. }
  627. .del-view{
  628. height:60rpx;
  629. width:100rpx;
  630. border-radius:8rpx;
  631. background-color: #FF6666;
  632. color:#fff;
  633. font-size:26rpx;
  634. line-height:60rpx;
  635. text-align: center;
  636. }
  637. }
  638. .addForm-add-button{
  639. height:60rpx;
  640. width:160rpx;
  641. border-radius:8rpx;
  642. background-color: #0183FA;
  643. color:#fff;
  644. font-size:26rpx;
  645. line-height:60rpx;
  646. text-align: center;
  647. }
  648. }
  649. .addForm-input {
  650. padding: 0 20rpx;
  651. height: 60rpx;
  652. line-height: 60rpx;
  653. font-size: 26rpx;
  654. border-radius: 8rpx;
  655. border: 1px solid #dedede;
  656. }
  657. .addForm-input-placeholder{
  658. color: #999 !important;
  659. }
  660. }
  661. }
  662. }
  663. .addForm-button-box {
  664. height: 80rpx;
  665. display: flex;
  666. .button-null {
  667. flex: 1;
  668. }
  669. .button-view {
  670. width: 260rpx;
  671. margin: 10rpx 0 0 0;
  672. background-color: #0183FA;
  673. color: #fff;
  674. font-size: 26rpx;
  675. text-align: center;
  676. line-height: 60rpx;
  677. height: 60rpx;
  678. border-radius: 12rpx;
  679. }
  680. }
  681. }
  682. </style>