create.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493
  1. <template>
  2. <view class="page">
  3. <view class="form">
  4. <u-form :model="form" ref="uForm">
  5. <u-form-item label-width="150" label="成交楼盘" prop="deal_item" required>
  6. <u-input placeholder="请输入成交楼盘" v-model="form.deal_item" type="text"></u-input>
  7. </u-form-item>
  8. <u-form-item label-width="150" label="成交房号" prop="house_no" required>
  9. <u-input placeholder="请输入成交房号" v-model="form.house_no" type="text"></u-input>
  10. </u-form-item>
  11. <u-form-item label-width="150" label="房屋类型" prop="house_type" required>
  12. <u-radio-group v-model="form.house_type" active-color="#2979ff">
  13. <u-radio :name="HT.val" v-for="HT in houseTypeList" :key="HT.val">{{HT.key}}</u-radio>
  14. </u-radio-group>
  15. </u-form-item>
  16. <u-form-item label-width="150" label="成交店员" prop="deal_clerk" required>
  17. <u-input placeholder="请输入成交店员" v-model="form.deal_clerk" type="text"></u-input>
  18. </u-form-item>
  19. <u-form-item label-width="150" label="成交类型" prop="deal_type" required>
  20. <u-radio-group v-model="form.deal_type" active-color="#2979ff">
  21. <u-radio :name="DT.val" v-for="DT in dealTypeList" :key="DT.val">{{DT.key}}</u-radio>
  22. </u-radio-group>
  23. </u-form-item>
  24. <u-form-item label-width="150" label="成交日期" prop="deal_at" @click.native="openDealAtPopoup" required>
  25. <view class="scoped-input-floor" @click.native="openDealAtPopoup"></view>
  26. <u-input placeholder="请选择成交日期" v-model="form.deal_at" disabled type="text"></u-input>
  27. </u-form-item>
  28. <u-form-item label-width="150" label="客户姓名" prop="customer_name" required>
  29. <u-input placeholder="请输入客户姓名" v-model="form.customer_name" type="text"></u-input>
  30. </u-form-item>
  31. <u-form-item label-width="150" label="手机号" prop="customer_phone" required>
  32. <u-input placeholder="请输入手机号" v-model="form.customer_phone" type="number"></u-input>
  33. </u-form-item>
  34. <u-form-item label-width="150" label="面积" prop="area" required>
  35. <u-input placeholder="请输入面积" v-model="form.area" type="text"></u-input>
  36. <template v-slot:right>
  37. </template>
  38. </u-form-item>
  39. <u-form-item label-width="150" label="总价" prop="price" required>
  40. <u-input placeholder="请输入总价" v-model="form.price" type="text"></u-input>
  41. <template v-slot:right>
  42. </template>
  43. </u-form-item>
  44. <u-form-item label-width="150" label="报备渠道" prop="report_dept" required>
  45. <u-input placeholder="请输入报备渠道" v-model="form.report_dept" type="text"></u-input>
  46. </u-form-item>
  47. <u-form-item label-width="150" label="折扣体系" prop="discount">
  48. <u-input placeholder="请输入折扣体系" v-model="form.discount" type="text"></u-input>
  49. </u-form-item>
  50. <u-form-item label-width="150" label="佣金" prop="brokerage">
  51. <u-input placeholder="请输入佣金" v-model="form.brokerage" type="text"></u-input>
  52. </u-form-item>
  53. <u-form-item label-position="top" label-width="150" label="佣金凭证" prop="brokerage_img">
  54. <view class="id_card" @click="uploadbrokerageImgImage">
  55. <u-icon v-if="form.brokerage_img == null" name="plus" size="32" color="#606266"></u-icon>
  56. <text v-if="form.brokerage_img == null">请先上传佣金凭证照片</text>
  57. <image v-if="form.brokerage_img != null" :src="brokerage_img" mode="aspectFill"></image>
  58. </view>
  59. </u-form-item>
  60. <u-form-item label-width="150" label="返佣" prop="rebate">
  61. <u-input placeholder="请输入返佣" v-model="form.rebate" type="text"></u-input>
  62. </u-form-item>
  63. <u-form-item label-width="150" label="备注信息" prop="remark" label-position="top">
  64. <u-input placeholder="备注信息" v-model="form.remark" type="textarea"></u-input>
  65. </u-form-item>
  66. </u-form>
  67. <u-gap height="60"></u-gap>
  68. <u-button type="primary" :diabled="submitButtonDisabled" @click="submitHandle">提交</u-button>
  69. </view>
  70. <!-- 列表选择 -->
  71. <u-select mode="single-column" :list="propertySelectList" v-model="propertySelectShow" @confirm="propertySelectConfirm"></u-select>
  72. <u-select mode="single-column" :list="salerSelectList" v-model="salerSelectShow" @confirm="salerSelectConfirm"></u-select>
  73. <!-- modal -->
  74. <u-modal v-model="submitModalShow" content="请务必仔细确认各项信息是否正确" :show-cancel-button="true" @confirm="submit()"></u-modal>
  75. <u-modal v-model="modalShow" :content="modalContent" :show-cancel-button="true" @cancel="modalCancel()" @confirm="modalConfirm()"></u-modal>
  76. <u-calendar v-model="dealAtShow" :mode="calendarMode" @change="dealAtChange"></u-calendar>
  77. <!-- utoast -->
  78. <u-toast ref="uToast" />
  79. </view>
  80. </template>
  81. <script>
  82. export default {
  83. data() {
  84. const userInfo = uni.getStorageSync('MD_userInfo2')
  85. return {
  86. brokerage_img: '',
  87. dealAtShow: false,
  88. calendarMode: 'date',
  89. isEdit: false,
  90. form: {
  91. deal_item: '',
  92. house_no: '',
  93. house_type: '1',
  94. deal_clerk: userInfo.nickname,
  95. deal_type: '1',
  96. deal_at: '',
  97. customer_name: '',
  98. customer_phone: '',
  99. area: '',
  100. price: '',
  101. report_dept: '',
  102. discount: '',
  103. brokerage: '',
  104. rebate: '',
  105. brokerage_img: null,
  106. remark: null
  107. },
  108. submitButtonDisabled: true,
  109. rules: {
  110. deal_item: [
  111. {
  112. required: true,
  113. message: '成交楼盘不得为空',
  114. trigger: ['change', 'blur']
  115. },
  116. ],
  117. house_no: [
  118. {
  119. required: true,
  120. message: '成交房号不得为空',
  121. trigger: ['change', 'blur']
  122. },
  123. ],
  124. house_type: [
  125. {
  126. required: true,
  127. message: '房屋类型不得为空',
  128. trigger: ['change', 'blur']
  129. },
  130. ],
  131. deal_clerk: [
  132. {
  133. required: true,
  134. message: '成交店员不得为空',
  135. trigger: ['change', 'blur']
  136. },
  137. ],
  138. deal_type: [
  139. {
  140. required: true,
  141. message: '成交类型不得为空',
  142. trigger: ['change', 'blur']
  143. },
  144. ],
  145. deal_at: [
  146. {
  147. required: true,
  148. message: '成交日期不得为空',
  149. trigger: ['change', 'blur']
  150. },
  151. ],
  152. customer_name: [
  153. {
  154. required: true,
  155. message: '客户姓名不得为空',
  156. trigger: ['change', 'blur']
  157. },
  158. ],
  159. customer_phone: [
  160. {
  161. required: true,
  162. message: '客户手机号不得为空',
  163. trigger: ['change', 'blur']
  164. },
  165. // 11个字符判断
  166. {
  167. len: 11,
  168. message: '手机号格式不正确',
  169. trigger: ['change', 'blur']
  170. },
  171. ],
  172. area: [
  173. {
  174. required: true,
  175. message: '面积不得为空',
  176. trigger: ['change', 'blur']
  177. },
  178. ],
  179. price: [
  180. {
  181. required: true,
  182. message: '总价不得为空',
  183. trigger: ['change', 'blur']
  184. },
  185. ],
  186. report_dept: [
  187. {
  188. required: true,
  189. message: '报备渠道不得为空',
  190. trigger: ['change', 'blur']
  191. },
  192. ],
  193. },
  194. recordLevelList: [],
  195. propertySelectShow: false,
  196. propertySelectList: [],
  197. salerSelectShow: false,
  198. salerSelectList: [],
  199. submitModalShow: false,
  200. modalShow: false,
  201. modalContent: '',
  202. houseTypeList: [],
  203. dealTypeList: [],
  204. };
  205. },
  206. onLoad(data) {
  207. const that = this
  208. const eventChannel = that.getOpenerEventChannel(); // that 需指向 this
  209. // 监听data事件,获取上一页面通过eventChannel.emit传送到当前页面的数据
  210. if (eventChannel.on) {
  211. eventChannel.on('data', data => {
  212. if (data) {
  213. that.form.deal_item = data.info.deal_item;
  214. that.form.house_no = data.info.house_no;
  215. that.form.house_type = data.info.house_type;
  216. that.form.deal_clerk = data.info.deal_clerk;
  217. that.form.deal_type = data.info.deal_type;
  218. that.form.deal_at = data.info.deal_at;
  219. that.form.customer_name = data.info.customer_name;
  220. that.form.customer_phone = data.info.customer_phone;
  221. that.form.area = String(data.info.area);
  222. that.form.price = String(data.info.price);
  223. that.form.report_dept = data.info.report_dept;
  224. that.form.discount = data.info.discount;
  225. that.form.brokerage = data.info.brokerage;
  226. that.form.rebate = data.info.rebate;
  227. that.brokerage_img = that.form.brokerage_img = data.info.brokerage_img;
  228. that.form.remark = data.info.remark;
  229. that.form.id = data.info.id;
  230. that.isEdit = true
  231. wx.setNavigationBarTitle({
  232. title: `编辑成交单-${data.info.deal_item}(${data.info.house_no})`
  233. })
  234. }
  235. })
  236. }
  237. },
  238. created () {
  239. const dictObj = uni.getStorageSync('MD_dict')
  240. this.houseTypeList = dictObj.trade_house_type || []
  241. this.dealTypeList = dictObj.trade_deal_type || []
  242. },
  243. // 必须要在onReady生命周期,因为onLoad生命周期组件可能尚未创建完毕
  244. onReady() {
  245. this.$refs.uForm.setRules(this.rules);
  246. },
  247. methods: {
  248. uploadImgHandle (bc) {
  249. uni.chooseImage({
  250. count: 1,
  251. sizeType: ['compressed'],
  252. success: function(res) {
  253. const filePath = res.tempFilePaths[0];
  254. let token = uni.getStorageSync('MD_token') || ''
  255. uni.uploadFile({
  256. url: uni.baseUrl + 'api/upload/cloud',
  257. filePath,
  258. name: 'upload',
  259. formData: {
  260. 'token': token
  261. },
  262. success: (f) => {
  263. const cData = JSON.parse(f.data)
  264. if (cData.errno === 0) {
  265. if (bc && typeof(bc) === 'function') bc(cData.data)
  266. } else {
  267. uni.$msg(cData.errmsg || `未知错误-${cData.errno}`)
  268. }
  269. }
  270. })
  271. }
  272. })
  273. },
  274. // 选择、验证、上传正面照片
  275. uploadbrokerageImgImage() {
  276. this.uploadImgHandle((d) => {
  277. this.form.brokerage_img = d.url
  278. // this.brokerage_img = d.pub_url
  279. this.brokerage_img = d.url
  280. })
  281. },
  282. openDealAtPopoup () {
  283. console.log('成交日期成交日期')
  284. this.dealAtShow = true
  285. },
  286. dealAtChange (e) {
  287. this.form.deal_at = e.result || ''
  288. },
  289. // 选择所属项目回调
  290. propertySelectConfirm(e) {
  291. e.map((val, index) => {
  292. this.form.estate_id = val.value;
  293. this.form.estate_name = val.label;
  294. });
  295. },
  296. submitHandle() {
  297. const that = this
  298. this.$refs.uForm.validate(valid => {
  299. if (valid) {
  300. // 验证成功
  301. let apiStr = 'apitradeadd'
  302. let params = {
  303. deal_item: that.form.deal_item,
  304. house_no: that.form.house_no,
  305. house_type: that.form.house_type,
  306. deal_clerk: that.form.deal_clerk,
  307. deal_type: that.form.deal_type,
  308. deal_at: that.form.deal_at,
  309. customer_name: that.form.customer_name,
  310. customer_phone: that.form.customer_phone,
  311. price: that.form.price,
  312. area: that.form.area,
  313. report_dept: that.form.report_dept,
  314. discount: that.form.discount,
  315. brokerage: that.form.brokerage,
  316. rebate: that.form.rebate,
  317. brokerage_img: that.form.brokerage_img,
  318. remark: that.form.remark
  319. }
  320. if(that.isEdit) {
  321. apiStr = 'apitradeedit'
  322. params.id = that.form.id
  323. }
  324. uni.api.cust[apiStr](params).then(res => {
  325. if (that.isEdit) {
  326. uni.$msgConfirm('编辑成功', () => {
  327. uni.reLaunch({
  328. url: '/pages/trade/list'
  329. })
  330. }, () => {
  331. uni.reLaunch({
  332. url: '/pages/trade/list'
  333. })
  334. })
  335. } else {
  336. uni.$msgConfirm('添加成功,是否前往成交单列表?', () => {
  337. uni.reLaunch({
  338. url: '/pages/trade/list'
  339. })
  340. }, () => {
  341. const userInfo = uni.getStorageSync('MD_userInfo2')
  342. this.form = {
  343. deal_item: '',
  344. house_no: '',
  345. house_type: '1',
  346. deal_clerk: userInfo.nickname,
  347. deal_type: '1',
  348. deal_at: '',
  349. customer_name: '',
  350. customer_phone: '',
  351. area: '',
  352. price: '',
  353. report_dept: '',
  354. discount: '',
  355. brokerage: '',
  356. rebate: '',
  357. brokerage_img: null,
  358. remark: null
  359. }
  360. })
  361. }
  362. })
  363. } else {
  364. console.log('验证失败');
  365. }
  366. });
  367. },
  368. // 获取手机号
  369. getPhoneNumber: function(e) {
  370. // 点击获取手机号码按钮
  371. let _that = this;
  372. if (e.detail.errMsg == 'getPhoneNumber:fail user deny') {
  373. _that.$refs.uToast.show({
  374. title: '您可以在个人设置中再次绑定',
  375. type: 'warning'
  376. });
  377. setTimeout(() => {
  378. _that.reLunchUser();
  379. }, 1500);
  380. return; // 即用户拒绝授权
  381. }
  382. console.log(e.detail.errMsg);
  383. console.log(e.detail.iv);
  384. console.log(e.detail.encryptedData);
  385. let iv = e.detail.iv;
  386. let encryptedData = e.detail.encryptedData;
  387. // 不是登陆完第一时间授权
  388. wx.login({
  389. success(res) {
  390. if (res.code) {
  391. // 设置用户手机号
  392. _that.setUserPhoneNumber(encryptedData, iv, res.code);
  393. } else {
  394. this.$refs.uToast.show({
  395. title: res.errMsg,
  396. type: 'warning'
  397. });
  398. console.log('登录失败!' + res.errMsg);
  399. }
  400. }
  401. });
  402. },
  403. // 以下是工具函数
  404. // 关闭键盘
  405. hideKeyboard() {
  406. uni.hideKeyboard();
  407. },
  408. // 格式化日期的月份或天数的显示(小于10,在前面增加0)
  409. getFormatDate(value) {
  410. if (value == undefined || value == '') {
  411. return '';
  412. }
  413. var str = value;
  414. if (parseInt(value) < 10) {
  415. str = '0' + value;
  416. }
  417. return str;
  418. }
  419. }
  420. };
  421. </script>
  422. <style lang="scss">
  423. .page {
  424. padding: 20rpx;
  425. background-color: #ffffff;
  426. }
  427. .form {
  428. border-radius: 10rpx;
  429. padding: 0 40rpx;
  430. }
  431. .popup-body {
  432. .tips-title {
  433. font-size: $u-p;
  434. margin-bottom: 20rpx;
  435. }
  436. .tips-content {
  437. font-size: $u-p2;
  438. color: $u-tips-color;
  439. margin-bottom: 60rpx;
  440. }
  441. }
  442. .id_card {
  443. color: #606266;
  444. width: 100%;
  445. height: 350rpx;
  446. display: flex;
  447. flex-direction: column;
  448. align-items: center;
  449. justify-content: center;
  450. background-color: #f4f5f6;
  451. font-size: $u-p2;
  452. }
  453. .footer {
  454. position: absolute;
  455. text-align: center;
  456. bottom: 40rpx;
  457. font-size: $u-p2;
  458. .agreement {
  459. color: $u-type-error;
  460. }
  461. }
  462. .slot-content {
  463. font-size: 28rpx;
  464. color: $u-content-color;
  465. padding: 20rpx;
  466. }
  467. .scoped-input-floor {
  468. position: absolute;
  469. left: 0;
  470. top: 0;
  471. width: 100%;
  472. height: 100%;
  473. background: transparent;
  474. z-index: 9;
  475. }
  476. </style>