openOrder.vue 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. <template>
  2. <view class="open_order" @click="handleClickOutside">
  3. <u-navbar class="nav-bar" title="销售业务开单" :autoBack="true" :placeholder="true" v-hideNav></u-navbar>
  4. <view class="open_order_content">
  5. <view class="header">
  6. <image class="header_img" :src="openOrderForm.url || '/static/no-img.png'" alt=""></image>
  7. <view class="header_box">
  8. <view class="title">
  9. {{ openOrderForm.dictLabel }} | {{ openOrderForm.model }}
  10. </view>
  11. <view class="header_detail_box">
  12. <view class="total_cost">
  13. <view class="total_cost_title">系统总成本</view>
  14. <view class="total_cost_price">¥{{ openOrderForm.agentPrice }}</view>
  15. </view>
  16. <view class="advice_price">
  17. <view class="advice_price_title">建议标价</view>
  18. <view class="advice_price_price">¥<u--input v-model="openOrderForm.price" placeholder="建议标价"
  19. border="none" type="number"></u--input></view>
  20. </view>
  21. </view>
  22. </view>
  23. </view>
  24. <u--form labelPosition="top" :model="openOrderForm" :rules="rules" ref="openOrderForm" label-width="200rpx">
  25. <view class="card_item">
  26. <u-form-item label="成交金额" required prop="dealPrice">
  27. ¥<u--input v-model="openOrderForm.dealPrice" placeholder="成交金额" border="none"
  28. type="number"></u--input>
  29. </u-form-item>
  30. </view>
  31. <view class="card_item">
  32. <u-form-item label="开单数量">
  33. <u-number-box v-model="openOrderForm.quantity" button-size="26"></u-number-box>
  34. </u-form-item>
  35. </view>
  36. <view class="card_item">
  37. <u-form-item label="订单类型">
  38. <TabSelect :tabList="orderTypeList" mode="single" :colNum="4" :defaultIndex="1" labelKey="dictLabel"
  39. valueKey="dictValue" @tabChange="changeOrderType">
  40. </tabSelect>
  41. </u-form-item>
  42. </view>
  43. <view class="card_item">
  44. <u-form-item label="销售人员与时间" class="sales_person_box_form">
  45. <view class="sales_person_box" @click="recyclePersonClick">
  46. <u-icon name="man-add" size="36rpx" color="#374151"></u-icon>
  47. <view class="text">{{ openOrderForm.recyclePerson }}</view>
  48. <PersonPicker ref="recyclePersonPickerRef" title="请选择回收人员"
  49. @selectPerson="handleSelectRecyclePerson"></PersonPicker>
  50. </view>
  51. <view class="sales_person_box" @click="dateShow = true">
  52. <u-icon name="calendar" size="36rpx" color="#374151"></u-icon>
  53. <view class="text">{{ openOrderForm.orderDate }}</view>
  54. <u-datetime-picker :show="dateShow" v-model="openOrderForm.orderDate" mode="date"
  55. @confirm="confirmDate" @close="closeDate" @cancel="closeDate"></u-datetime-picker>
  56. </view>
  57. </u-form-item>
  58. </view>
  59. <view class="card_item">
  60. <u-form-item label="收款方式">
  61. <TabSelect :tabList="paymentTabList" mode="single" :colNum="4" :defaultIndex="1"
  62. @tabChange="changepayType">
  63. </tabSelect>
  64. </u-form-item>
  65. </view>
  66. <view class="card_item">
  67. <u-form-item label="售后保障配置">
  68. <TabSelect :tabList="afterSaleTabList" mode="multiple" :colNum="3" :defaultIndex="1"
  69. @tabChange="changeAfterSaleTab">
  70. </tabSelect>
  71. </u-form-item>
  72. </view>
  73. <view class="card_item">
  74. <u-form-item label="支付凭证图片">
  75. <view class="imgs_scroll">
  76. <ImgsRowScroll :isShowDeleteIcon="true"
  77. @deleteImgInfo="getDeletePayTypeProofPicInfo" imgMode="aspectFill" :totalWidth="400"
  78. :images="openOrderForm.payTypeProofPicFileList" :previewEnabled="true" :imageWidth="150"
  79. :imageHeight="150">
  80. </ImgsRowScroll>
  81. <u-upload @afterRead="afterReadpayTypeProofPic" name="1" multiple :maxCount="10"></u-upload>
  82. </view>
  83. </u-form-item>
  84. </view>
  85. <view class="card_item">
  86. <u-form-item label="订单备注">
  87. <u--textarea v-model="openOrderForm.remark" placeholder="请输入订单备注" confirmType="done"></u--textarea>
  88. </u-form-item>
  89. </view>
  90. <view class="card_item">
  91. <u-form-item label="收货地址">
  92. <u--textarea v-model="openOrderForm.address" placeholder="请输入收货地址" confirmType="done"></u--textarea>
  93. </u-form-item>
  94. </view>
  95. </u--form>
  96. </view>
  97. <view class="bottom_box">
  98. <view class="bottom_box_item">
  99. <view class="bottom_box_item_title">实收总计</view>
  100. <view class="bottom_box_item_price">¥{{ openOrderForm.dealPrice * openOrderForm.quantity || 0 }}</view>
  101. </view>
  102. <u-button color="#3c9cff" type="primary" @click="submitForm" icon="checkmark">确认开单</u-button>
  103. </view>
  104. </view>
  105. </template>
  106. <script>
  107. import TabSelect from '@/components/custom-tab-select/index.vue'
  108. import ImgsRowScroll from '@/components/imgs-row-scroll/index.vue'
  109. import PersonPicker from '@/components/person-picker/index.vue'
  110. import { afterSaleTabList, paymentTabList } from '../js/public.js'
  111. export default {
  112. components: {
  113. TabSelect,
  114. ImgsRowScroll,
  115. PersonPicker,
  116. },
  117. data() {
  118. return {
  119. payTypeProofPicFileList: [],
  120. openOrderForm: {
  121. url: '',
  122. dictLabel: '',
  123. dictValue: '',
  124. model: '',
  125. agentPrice: '',
  126. price: null,
  127. dealPrice: null,
  128. quantity: 1,
  129. recyclePerson: '',
  130. recyclePersonId: '',
  131. orderType: '',
  132. orderDate: this.$dayjs().format('YYYY-MM-DD'),
  133. payType: 1,
  134. afterSaleTab: [],
  135. remark: '',
  136. address: '',
  137. type: '',
  138. },
  139. afterSaleTabList: afterSaleTabList,
  140. paymentTabList: paymentTabList,
  141. orderTypeList: [],
  142. rules: {
  143. dealPrice: [
  144. { required: true, message: '请输入成交金额', trigger: ['blur'] },
  145. ],
  146. },
  147. dateShow: false,
  148. }
  149. },
  150. onLoad(options) {
  151. const params = options.params || '{}'
  152. if (params) {
  153. this.openOrderForm.quantity = 1
  154. Object.keys(JSON.parse(params)).forEach(key => {
  155. this.openOrderForm[key] = JSON.parse(params)[key]
  156. })
  157. this.getOrderTypeList()
  158. }
  159. },
  160. methods: {
  161. getOrderTypeList() {
  162. this.$getDicts("crm_sendOrder_type").then(res => {
  163. this.orderTypeList = res
  164. })
  165. },
  166. changeOrderType(val) {
  167. this.openOrderForm.orderType = val
  168. },
  169. changepayType(val) {
  170. this.openOrderForm.payType = val
  171. },
  172. changeAfterSaleTab(val) {
  173. this.openOrderForm.afterSaleTab = val
  174. },
  175. // 打开回收人选择器
  176. recyclePersonClick() {
  177. this.$refs.recyclePersonPickerRef.open();
  178. },
  179. handleSelectRecyclePerson(person) {
  180. this.openOrderForm.recyclePerson = person.label
  181. this.openOrderForm.recyclePersonId = person.id
  182. },
  183. handleClickOutside() {
  184. this.personShow = false
  185. },
  186. confirmDate(val) {
  187. this.$nextTick(() => {
  188. this.openOrderForm.orderDate = this.$dayjs(val.value).format('YYYY-MM-DD');
  189. })
  190. this.dateShow = false
  191. },
  192. closeDate() {
  193. this.dateShow = false
  194. },
  195. getDeletePayTypeProofPicInfo(info) {
  196. this.openOrderForm.payTypeProofPicFileList = info.newImages
  197. },
  198. async afterReadPayTypeProofPic(event) {
  199. event.file.forEach(item => {
  200. uni.$u.api.uploadFile(item.url).then((res) => {
  201. this.openOrderForm.payTypeProofPicFileList.push(res.data.url);
  202. uni.$u.toast("文件上传成功");
  203. }).catch(() => {
  204. uni.$u.toast("上传文件失败");
  205. })
  206. })
  207. },
  208. submitForm() {
  209. this.$refs.openOrderForm.validate().then(res => {
  210. if (res) {
  211. const data = {
  212. ...this.openOrderForm,
  213. payTypeProofPicFileList: this.payTypeProofPicFileList,
  214. amountReceived: Number(this.openOrderForm.dealPrice) * Number(this.openOrderForm.quantity),
  215. }
  216. uni.$u.api.wareHouseOpenOrder(data).then(() => {
  217. uni.$u.toast("开单成功");
  218. setTimeout(() => {
  219. uni.navigateBack({
  220. delta: 2
  221. });
  222. }, 1000);
  223. }).catch((error) => {
  224. uni.$u.toast(error);
  225. })
  226. }
  227. })
  228. },
  229. }
  230. }
  231. </script>
  232. <style lang="scss" scoped>
  233. @import '../styles/openOrder.scss';
  234. </style>