MemberForm.vue 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. <template>
  2. <uni-drawer ref="drawer" mode="left" :mask-click="false" width="85%" :maskClick='true'>
  3. <scroll-view class="scroll-view" scroll-y="true">
  4. <view class="form-wrap" >
  5. <uni-forms ref="form" label-position="top" :rules="rules" :model="form">
  6. <uni-forms-item label="成员姓名" name="memberName" required>
  7. <uni-easyinput type="text" :maxlength="30" v-model="form.memberName" placeholder="请输入成员姓名"></uni-easyinput>
  8. </uni-forms-item>
  9. <uni-forms-item label="成员头像">
  10. <view class="memberAvatar" @click="editAvart">
  11. <image :src="form.memberAvatar" v-if="form.memberAvatar"></image>
  12. </view>
  13. </uni-forms-item>
  14. <uni-forms-item label="联系电话" name="memberPhone" required>
  15. <uni-easyinput v-model="form.memberPhone" type="number" :clearable="false" placeholder="请输入联系电话" />
  16. </uni-forms-item>
  17. <uni-forms-item label="是否党员" required>
  18. <uni-data-checkbox v-model="form.ifCpc" :localdata="ifCpcs" />
  19. </uni-forms-item>
  20. <view class="row" >
  21. <view class="col sex">
  22. <uni-forms-item label="性别">
  23. <view class="sexbox">
  24. <uni-data-checkbox v-model="form.memberSex" :localdata="sexs" />
  25. </view>
  26. </uni-forms-item>
  27. </view>
  28. <view class="col age">
  29. <uni-forms-item label="年龄">
  30. <uni-easyinput type="number" v-model.number="form.memberAge" :clearable="false" placeholder="请输入年龄" />
  31. </uni-forms-item>
  32. </view>
  33. </view>
  34. <uni-forms-item label="分工岗位">
  35. <uni-easyinput v-model="form.memberPosition" placeholder="请输入分工岗位" />
  36. </uni-forms-item>
  37. <uni-forms-item label="职责说明">
  38. <uni-easyinput type="textarea" :maxlength="1000" v-model="form.memberDuty" placeholder="请输入职责说明"></uni-easyinput>
  39. <view class="word-limit">{{form.memberDuty.length||0}}/500</view>
  40. </uni-forms-item>
  41. <uni-forms-item label="说明">
  42. <uni-easyinput type="textarea" :maxlength="500" v-model="form.remark" placeholder="请输入说明"></uni-easyinput>
  43. <view class="word-limit">{{form.remark.length||0}}/500</view>
  44. </uni-forms-item>
  45. <uni-forms-item label="排序" v-model="form.sortNo">
  46. <uni-number-box :min="1"></uni-number-box>
  47. </uni-forms-item>
  48. </uni-forms>
  49. <view class="handle-container">
  50. <button class="save" type="primary" @click="onSubmit">保存</button>
  51. <button class="cancel" type="default" @click="close">取消</button>
  52. </view>
  53. </view>
  54. </scroll-view>
  55. </uni-drawer>
  56. </template>
  57. <script>
  58. import teamApi from '@/api/team.js'
  59. import { upload } from '@/api/upload.js'
  60. export default{
  61. name:"MemberForm",
  62. data(){
  63. return{
  64. type:undefined,
  65. rules:{
  66. memberName:{
  67. rules:[
  68. {
  69. required: true,
  70. errorMessage: '请输入成员姓名'
  71. }
  72. ],
  73. validateTrigger:'submit'
  74. },
  75. memberPhone:{
  76. rules:[
  77. {
  78. required: true,
  79. errorMessage: '请输入联系电话',
  80. },{
  81. // validateFunction:function(rule,value,data,callback){
  82. // const regex = /^(\d{3,4}-)?\d{7,8}(-\d{1,4})?$/;
  83. // if(!regex.test(value)){
  84. // callback('请输入正确的手机号码')
  85. // }
  86. // return true
  87. // }
  88. }
  89. ],
  90. validateTrigger:'submit'
  91. }
  92. },
  93. sexs: [{
  94. text: '男',
  95. value: 1
  96. }, {
  97. text: '女',
  98. value: 2
  99. }],
  100. ifCpcs: [{
  101. text: '不是党员',
  102. value: 0
  103. }, {
  104. text: '党员',
  105. value: 1
  106. }],
  107. form:{
  108. teamId: 0,
  109. memberId: 0,
  110. memberName: '',
  111. memberAvatar: '',
  112. memberPosition: '',
  113. memberPhone: '',
  114. memberDuty: '',
  115. memberSex: 1,
  116. memberAge: 20,
  117. ifCpc: 0,
  118. remark: '',
  119. sortNo: 1,
  120. }
  121. }
  122. },
  123. onReady() {
  124. this.$refs.form.setRules(this.rules)
  125. },
  126. methods:{
  127. resetForm(){
  128. this.form={
  129. teamId: 0,
  130. memberId: 0,
  131. memberName: '',
  132. memberAvatar: '',
  133. memberPosition: '',
  134. memberPhone: '',
  135. memberDuty: '',
  136. memberSex: 1,
  137. memberAge: 20,
  138. ifCpc: 0,
  139. remark: '',
  140. sortNo: 1,
  141. }
  142. },
  143. onSubmit(){
  144. this.$refs.form.validate().then(res=>{
  145. let submitFx=this.type==='add'?teamApi.createMember:teamApi.updateMember
  146. submitFx(this.form).then(()=>{
  147. uni.showToast({
  148. icon:"none",
  149. title:"成功!!"
  150. })
  151. this.$emit('success')
  152. this.close();
  153. })
  154. }).catch(err =>{
  155. uni.showToast({
  156. icon:"none",
  157. title:"请检查填写信息!"
  158. })
  159. })
  160. },
  161. editAvart(){
  162. const self=this;
  163. uni.chooseImage({
  164. count: 1,
  165. sizeType: ['original', 'compressed'],
  166. sourceType: ['album',"camera"], //从相册选择
  167. success:(res)=>{
  168. let filePath=res.tempFilePaths[0]
  169. upload({filePath}).then((resq)=>{
  170. var fileResq=JSON.parse(resq)
  171. self.form.memberAvatar=fileResq.data.fileUrl;
  172. })
  173. }
  174. });
  175. },
  176. show(type,item){
  177. this.resetForm()
  178. if(type==='edit'){
  179. this.form={...item}
  180. }else{
  181. this.form.teamId=item
  182. }
  183. this.type=type
  184. this.$refs.drawer.open()
  185. },
  186. close(){
  187. this.$refs.drawer.close()
  188. }
  189. }
  190. }
  191. </script>
  192. <style lang="scss" scoped>
  193. .scroll-view {
  194. height: 100%;
  195. padding: 20rpx;
  196. box-sizing: border-box;
  197. .form-wrap{
  198. padding:40rpx 20rpx;
  199. .row{
  200. display: flex;
  201. align-items: flex-end;
  202. justify-content: space-between;
  203. .col{
  204. width: 50%;
  205. &.sex{
  206. .sexbox{
  207. padding-top: 22rpx;
  208. }
  209. }
  210. &.age{
  211. width: 200rpx;
  212. }
  213. }
  214. }
  215. .memberAvatar{
  216. width: 100rpx;
  217. height: 100rpx;
  218. border-radius: 50%;
  219. overflow: hidden;
  220. background-color: #eaeaea;
  221. image{
  222. display: block;
  223. width: 100rpx;
  224. height: 100rpx;
  225. border-radius: 50%;
  226. }
  227. }
  228. .word-limit{
  229. text-align: right;
  230. padding: 10rpx 0;
  231. color: #999;
  232. font-size: 26rpx;
  233. }
  234. .handle-container{
  235. display: flex;
  236. justify-content: center;
  237. align-items: center;
  238. button{
  239. width: 160rpx;
  240. padding: 20rpx 16rpx;
  241. line-height: 1;
  242. font-size: 28rpx;
  243. &.save{
  244. background-color: #007aff;
  245. }
  246. }
  247. }
  248. }
  249. }
  250. </style>