editWhite.vue 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. <template>
  2. <view class="container">
  3. <u-navbar title="编辑会员车辆" :background="{backgroundColor: '#ffffff'}" class="top-navbar" title-size="30">
  4. <view slot="right" class="my-nav-right" @tap="delHandler" v-if="isUpdate"><u-icon name="trash" size="40" color="#2979ff"></u-icon></view>
  5. </u-navbar>
  6. <u-form :model="white" ref="uForm" style="background-color: #ffffff;" :label-style="formLabelCss" label-width="180">
  7. <u-form-item label="持有人"><u-input v-model="white.memberName" placeholder="姓名或单位名" @focus="whenOthFocus"/></u-form-item>
  8. <u-form-item label="持有人电话*" prop="memberPhone"><u-input v-model="white.memberPhone" placeholder="联系电话" @focus="whenOthFocus"/></u-form-item>
  9. <u-form-item label="车牌号码*" prop="memberCarNum">
  10. <!--<u-input v-model="white.memberCarNum" placeholder="请输入完整车牌号码" maxlength="8" disabled="disabled" @tap="carboardShow=true"/>-->
  11. <view @click="openCarboard" style="width:500rpx;height:70rpx;">
  12. {{white.memberCarNum}}
  13. <text style="color:#c0c4cc;font-size:28rpx;" v-show="white.memberCarNum==null || white.memberCarNum.length==0">请输入完整车牌号码</text>
  14. </view>
  15. </u-form-item>
  16. <!-- <u-form-item>
  17. <u-message-input :value="white.memberCarNum" :maxlength="maxlength" :breathe="true" :disabled-keyboard="true" :fontSize="50" :width="70" @focus="carboardShow=true"></u-message-input>
  18. </u-form-item>-->
  19. <u-form-item label="使用场所*" prop="parkingName">
  20. <u-input v-model="white.parkingName" type="select" @click="parkSelShow = true;whenOthFocus()" placeholder="选择可使用的停车场" @focus="whenOthFocus"/>
  21. </u-form-item>
  22. <u-form-item label="使用期限*">
  23. <!-- <u-input :value="expireDateRange" type="select" @click="showCalendar = true;" placeholder="选择起始截止日期"/> -->
  24. </u-form-item>
  25. <u-form-item prop="memberStartTime">
  26. <u-input type="select" @click="timePickShow = true;timePickFor='memberStartTime';whenOthFocus()" placeholder="选择起始时间" :value="white.memberStartTime"/>
  27. </u-form-item>
  28. <u-form-item prop="memberEndTime">
  29. <u-input type="select" @click="timePickShow = true;timePickFor='memberEndTime';whenOthFocus()" placeholder="选择截止时间" :value="white.memberEndTime"/>
  30. </u-form-item>
  31. <u-form-item label="类型">
  32. <text>{{white.memberType==0?'充电附赠':(white.memberType==1?'正式会员':'')}}</text>
  33. </u-form-item>
  34. </u-form>
  35. <u-picker mode="selector" v-model="parkSelShow" :range="myParkSites" range-key="parking_name" @confirm="confirmPark"></u-picker>
  36. <u-picker mode="time" v-model="timePickShow" :params="timePickParams" @confirm="confirmTimePick"></u-picker>
  37. <u-calendar v-model="showCalendar" mode="range" @change="changeCalendar"></u-calendar>
  38. <ucarkeyboard ref="uKeyboard" mode="car" :zIndex="999999" :showTips="false" :mask="true" :confirmBtn="true" :mask-close-able="false" :tooltip="true" v-model="carboardShow" @change="valChange" @backspace="backspace"></ucarkeyboard>
  39. <view class="btn-bar">
  40. <u-button type="primary" style="flex:2;" :disabled="!(white.memberCarNum&&white.parkingName&&white.memberPhone&&white.memberStartTime)" @click="saveData">保存</u-button>
  41. </view>
  42. </view>
  43. </template>
  44. <script>
  45. import * as api from '@/apis/whiteBill.js'
  46. import ucarkeyboard from '@/components/Ucarkeyboard.vue'
  47. export default {
  48. components: {
  49. ucarkeyboard
  50. },
  51. data() {
  52. return {
  53. carboardShow: false,
  54. maxlength:8,
  55. formLabelCss:{
  56. 'color':'#7d7d7d'
  57. },
  58. isUpdate:false,
  59. white:{
  60. memberName:'',
  61. memberPhone:'',
  62. memberCarNum:'',
  63. parkingName:'',
  64. memberStartTime:'',
  65. memberEndTime:'',
  66. parkId:'',
  67. memberType:null
  68. },
  69. timePickShow:false,
  70. parkSelShow:false,
  71. myParkSites:[],
  72. showCalendar:false,
  73. timePickFor:'',
  74. timePickParams:{
  75. year: true,
  76. month: true,
  77. day: true,
  78. hour: true,
  79. minute: true,
  80. second: true
  81. },
  82. rules:{
  83. memberPhone:[
  84. {
  85. pattern: /1\d{10}/,
  86. message: '请输入有效的持有人电话',
  87. trigger: 'blur'
  88. }
  89. ],
  90. memberCarNum:[
  91. {
  92. min:7,
  93. max:8,
  94. message: '请输入有效的车牌号码',
  95. }
  96. ],
  97. parkingName:[
  98. {
  99. required:true,
  100. message: '请选择一个停车场',
  101. trigger: 'blur'
  102. }
  103. ],
  104. memberStartTime:[
  105. {
  106. required:true,
  107. message: '请选择一个起始时间',
  108. trigger: 'blur'
  109. }
  110. ],
  111. memberEndTime:[
  112. {
  113. required:true,
  114. message: '请选择一个截止时间',
  115. trigger: 'blur'
  116. }
  117. ]
  118. }
  119. }
  120. },
  121. onReady() {
  122. this.$refs.uForm.setRules(this.rules);
  123. if(!this.isUpdate){
  124. //document.querySelectorAll('.uni-page-head .uni-page-head-ft .uni-page-head-btn')[0].querySelector('.uni-btn-icon').innerText='';
  125. }
  126. },
  127. onLoad(opts){
  128. this.myParkSites=api.getMyParkSites();
  129. if(opts.id!=null){
  130. this.loadDate(opts.id);
  131. this.isUpdate=true;
  132. }
  133. else{
  134. }
  135. },
  136. methods: {
  137. whenOthFocus(){ //其它输入聚焦会弹出系统键盘,所以要关闭车牌输入键盘
  138. this.carboardShow=false
  139. },
  140. openCarboard(){
  141. this.carboardShow=true
  142. if(this.white.memberCarNum && this.white.memberCarNum.length>0){
  143. this.$refs.uKeyboard.changeCarInputValue();
  144. }
  145. },
  146. // 按键被点击(点击退格键不会触发此事件)
  147. valChange(val) {
  148. if(this.white.memberCarNum.length>=this.maxlength){
  149. return
  150. }
  151. // 将每次按键的值拼接到form.carNum变量中,注意+=写法
  152. this.white.memberCarNum += val;
  153. if(this.white.memberCarNum.length == 1) {
  154. this.$refs.uKeyboard.changeCarInputMode();
  155. }
  156. },
  157. // 退格键被点击
  158. backspace() {
  159. if (this.white.memberCarNum.length>0) {
  160. this.white.memberCarNum = this.white.memberCarNum.substr(0, this.white.memberCarNum.length - 1);
  161. }
  162. let inputVal = this.$refs.uKeyboard.changeCarInputValue();
  163. if(this.white.memberCarNum.length == 0 && inputVal) {
  164. this.$refs.uKeyboard.changeCarInputMode();
  165. }
  166. },
  167. confirmPark(data){
  168. let sel=this.myParkSites[data[0]];
  169. this.white.parkingName=sel.parking_name;
  170. this.white.parkId=sel.park_id;
  171. },
  172. confirmTimePick(date){
  173. //console.log(date)
  174. if(this.timePickFor&&this.timePickFor!=''){
  175. this.white[this.timePickFor]=date.year+"-"+date.month+'-'+date.day+" "+date.hour+":"+date.minute+":"+date.second;
  176. }
  177. },
  178. changeCalendar(e){
  179. this.white.memberStartTime=e.startDate;
  180. this.white.memberEndTime=e.endDate;
  181. },
  182. loadDate(id){
  183. uni.showLoading({
  184. title:'加载中...'
  185. });
  186. api.getOne(id).then(resp => {
  187. console.log(resp)
  188. uni.hideLoading();
  189. if(!resp.success){
  190. return;
  191. }
  192. //this.memberRecord=resp.data;
  193. let {memberName,memberPhone,memberCarNum,parkingName,memberStartTime,memberEndTime,parkId,memberType,id}=resp.data;
  194. this.white={memberName,memberPhone,memberCarNum,parkingName,memberStartTime,memberEndTime,parkId,memberType,id};
  195. console.log(this.white);
  196. }).catch(error => {
  197. uni.hideLoading();
  198. });
  199. },
  200. saveData(){
  201. this.$refs.uForm.validate(valid => {
  202. if(!valid){
  203. console.log('验证失败');
  204. return;
  205. }
  206. else{
  207. this.saveSubmit()
  208. }
  209. });
  210. },
  211. saveSubmit(){
  212. let apifun=this.isUpdate?api.saveForUpdate:api.saveForAdd;
  213. uni.showLoading({
  214. title:'保存中...'
  215. });
  216. let submitData={...this.white};
  217. delete submitData['memberType'];
  218. console.log(this.isUpdate);
  219. apifun(submitData).then(resp => {
  220. console.log(resp)
  221. uni.hideLoading();
  222. if(!resp.success){
  223. uni.showToast({
  224. title: resp.msg||'操作失败',
  225. icon:'none'
  226. });
  227. }
  228. else{
  229. uni.showToast({
  230. title: '操作成功',
  231. icon:'success'
  232. });
  233. setTimeout(function(){
  234. uni.$emit('reloadWhiteList');
  235. uni.navigateBack();
  236. },1000);
  237. }
  238. }).catch(error => {
  239. uni.hideLoading();
  240. });
  241. },
  242. delHandler(id){
  243. uni.showModal({
  244. title: '操作确认',
  245. content: '确定要删除吗?',
  246. success: (res)=> {
  247. if (res.confirm) {
  248. if(!this.white.id){
  249. uni.showToast({
  250. title: '无此记录',
  251. icon:'none'
  252. });
  253. return;
  254. }
  255. api.del(this.white.id).then(resp => {
  256. if(!resp.success){
  257. uni.showToast({
  258. title: resp.msg||'操作失败',
  259. icon:'none'
  260. });
  261. }
  262. else{
  263. uni.showToast({
  264. title: '操作成功',
  265. icon:'success'
  266. });
  267. setTimeout(function(){
  268. uni.$emit('reloadWhiteList');
  269. uni.navigateBack();
  270. },1000);
  271. }
  272. }).catch(error => {
  273. });
  274. } else if (res.cancel) {
  275. console.log('用户点击取消');
  276. }
  277. }
  278. })
  279. }
  280. }
  281. /* computed:{
  282. expireDateRange(){
  283. return this.white.memberStartTime?(this.white.memberStartTime+' 至 '+this.white.memberEndTime):'';
  284. }
  285. } */
  286. }
  287. </script>
  288. <style>
  289. page{
  290. background-color: #f4f4f4;
  291. font-family: '华文行楷';
  292. height: 100%;
  293. }
  294. .my-nav-right{
  295. margin:0rpx 20rpx;
  296. }
  297. .u-form-item{
  298. padding:10rpx 20rpx;
  299. }
  300. .btn-bar{
  301. margin:100rpx 0rpx;
  302. padding:0rpx 20rpx;
  303. /* display: flex;
  304. flex-flow: row nowrap;
  305. justify-content: center;
  306. align-items: center; */
  307. }
  308. /* .custom-btn{
  309. flex:1;
  310. border-top-right-radius: 20rpx !important;
  311. border-bottom-right-radius: 0rpx;
  312. } */
  313. </style>