openOrder.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  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" 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.totalCost }}</view>
  15. </view>
  16. <view class="advice_price">
  17. <view class="advice_price_title">建议标价</view>
  18. <view class="advice_price_price">¥{{ openOrderForm.suggestedPrice }}</view>
  19. </view>
  20. </view>
  21. </view>
  22. </view>
  23. <u--form labelPosition="top" :model="openOrderForm" :rules="rules" ref="openOrderForm" label-width="200rpx">
  24. <view class="card_item">
  25. <u-form-item label="成交金额" required prop="price">
  26. ¥<u--input v-model="openOrderForm.price" border="none" type="number"></u--input>
  27. </u-form-item>
  28. </view>
  29. <view class="card_item">
  30. <u-form-item label="开单数量">
  31. <u-number-box v-model="openOrderForm.quantity"></u-number-box>
  32. </u-form-item>
  33. </view>
  34. <view class="card_item">
  35. <u-form-item label="订单类型">
  36. <TabSelect :tabList="tabList" mode="single" :colNum="4" :defaultIndex="1"
  37. @tabChange="changeOrderType">
  38. </tabSelect>
  39. </u-form-item>
  40. </view>
  41. <view class="card_item">
  42. <u-form-item label="销售人员与时间" class="sales_person_box_form">
  43. <view class="sales_person_box" @click="recyclePersonClick">
  44. <u-icon name="man-add" size="36rpx" color="#374151"></u-icon>
  45. <view class="text">{{ openOrderForm.recyclePerson }}</view>
  46. <PersonPicker ref="recyclePersonPickerRef" title="请选择回收人员"
  47. @selectPerson="handleSelectRecyclePerson"></PersonPicker>
  48. </view>
  49. <view class="sales_person_box" @click="dateShow = true">
  50. <u-icon name="calendar" size="36rpx" color="#374151"></u-icon>
  51. <view class="text">{{ openOrderForm.warehouseDate }}</view>
  52. <u-datetime-picker :show="dateShow" v-model="openOrderForm.warehouseDate" mode="date" @confirm="confirmDate"
  53. @close="closeDate" @cancel="closeDate"></u-datetime-picker>
  54. </view>
  55. </u-form-item>
  56. </view>
  57. <view class="card_item">
  58. <u-form-item label="收款方式">
  59. <TabSelect :tabList="payTypeTabList" mode="single" :colNum="4" :defaultIndex="1"
  60. @tabChange="changepayTypeTab">
  61. </tabSelect>
  62. </u-form-item>
  63. </view>
  64. <view class="card_item">
  65. <u-form-item label="售后保障配置">
  66. <TabSelect :tabList="afterSaleTabList" mode="multiple" :colNum="3" :defaultIndex="1"
  67. @tabChange="changeAfterSaleTab">
  68. </tabSelect>
  69. </u-form-item>
  70. </view>
  71. <view class="card_item">
  72. <u-form-item label="支付凭证上传">
  73. <ImgsRowScroll v-if="payTypeProofPicFileList.length > 0" :isShowDeleteIcon="true"
  74. @deleteImgInfo="getDeleteGoodPicInfo" imgMode="aspectFill" :totalWidth="400"
  75. :images="payTypeProofPicFileList" :previewEnabled="true" :imageWidth="150" :imageHeight="150">
  76. </ImgsRowScroll>
  77. <u-upload @afterRead="afterReadpayTypeProofPic" name="1" multiple :maxCount="10"></u-upload>
  78. </u-form-item>
  79. </view>
  80. <view class="card_item">
  81. <u-form-item label="订单备注">
  82. <u--textarea v-model="openOrderForm.remark" placeholder="请输入订单备注" confirmType="done"></u--textarea>
  83. </u-form-item>
  84. </view>
  85. <view class="card_item">
  86. <u-form-item label="收货地址">
  87. <u--textarea v-model="openOrderForm.address" placeholder="请输入收货地址" confirmType="done"></u--textarea>
  88. </u-form-item>
  89. </view>
  90. </u--form>
  91. </view>
  92. <view class="bottom_box">
  93. <view class="bottom_box_item">
  94. <view class="bottom_box_item_title">实收总计</view>
  95. <view class="bottom_box_item_price">¥{{ openOrderForm.price * openOrderForm.quantity || 0 }}</view>
  96. </view>
  97. <u-button color="#3c9cff" type="primary" @click="submitForm" icon="checkmark">确认开单</u-button>
  98. </view>
  99. </view>
  100. </template>
  101. <script>
  102. import TabSelect from '@/components/custom-tab-select/index.vue'
  103. import ImgsRowScroll from '@/components/imgs-row-scroll/index.vue'
  104. import PersonPicker from '@/components/person-picker/index.vue'
  105. export default {
  106. components: {
  107. TabSelect,
  108. ImgsRowScroll,
  109. PersonPicker,
  110. },
  111. data() {
  112. return {
  113. payTypeProofPicFileList: [],
  114. openOrderForm: {
  115. // url: '',
  116. // dictLabel: '',
  117. // dictValue: '',
  118. // model: '',
  119. // totalCost: '',
  120. // suggestedPrice: '',
  121. // price: null,
  122. // quantity: 1,
  123. // recyclePerson: '',
  124. // recyclePersonId: '',
  125. // orderType: [],
  126. // warehouseDate: '',
  127. // payTypeTab: 1,
  128. // afterSaleTab: [],
  129. // remark: '',
  130. // address: '',
  131. },
  132. tabList: [
  133. {
  134. name: '零售',
  135. value: 1,
  136. },
  137. {
  138. name: '寄卖',
  139. value: 2,
  140. },
  141. {
  142. name: '同行',
  143. value: 3,
  144. },
  145. {
  146. name: '退货',
  147. value: 4,
  148. },
  149. {
  150. name: '质押',
  151. value: 5,
  152. },
  153. ],
  154. payTypeTabList: [
  155. {
  156. name: '微信',
  157. value: 1,
  158. },
  159. {
  160. name: '支付宝',
  161. value: 2,
  162. },
  163. {
  164. name: '银行卡',
  165. value: 3,
  166. },
  167. {
  168. name: '现金',
  169. value: 4,
  170. },
  171. {
  172. name: '数字货币',
  173. value: 5,
  174. },
  175. {
  176. name: '挂账',
  177. value: 6,
  178. },
  179. ],
  180. afterSaleTabList: [
  181. {
  182. name: '假一赔三',
  183. value: 1,
  184. },
  185. {
  186. name: '一年质保',
  187. value: 2,
  188. },
  189. {
  190. name: '一年内八折回收',
  191. value: 3,
  192. },
  193. {
  194. name: '送保养一次',
  195. value: 4,
  196. },
  197. {
  198. name: '原厂配件保证',
  199. value: 5,
  200. },
  201. ],
  202. rules: {
  203. price: [
  204. { required: true, message: '请输入成交金额', trigger: ['blur'] },
  205. ],
  206. },
  207. dateShow: false,
  208. }
  209. },
  210. onLoad() {
  211. const params = this.$route.query.params
  212. if (params) {
  213. this.openOrderForm = JSON.parse(params)
  214. this.openOrderForm.quantity = 1
  215. // Object.keys(params).forEach(key => {
  216. // this.openOrderForm[key] = params[key]
  217. // })
  218. }
  219. },
  220. methods: {
  221. changeOrderType(val) {
  222. this.openOrderForm.orderType = val
  223. },
  224. changepayTypeTab(val) {
  225. this.openOrderForm.payTypeTab = val
  226. },
  227. changeAfterSaleTab(val) {
  228. this.openOrderForm.afterSaleTab = val
  229. },
  230. // 打开回收人选择器
  231. recyclePersonClick() {
  232. this.$refs.recyclePersonPickerRef.open();
  233. },
  234. handleSelectRecyclePerson(person) {
  235. this.openOrderForm.recyclePerson = person.label
  236. this.openOrderForm.recyclePersonId = person.id
  237. },
  238. handleClickOutside() {
  239. this.personShow = false
  240. },
  241. confirmDate(val) {
  242. this.$nextTick(() => {
  243. this.openOrderForm.warehouseDate = this.$dayjs(val.value).format('YYYY-MM-DD');
  244. })
  245. this.dateShow = false
  246. },
  247. closeDate() {
  248. this.dateShow = false
  249. },
  250. getDeleteGoodPicInfo(info) {
  251. this.payTypeProofPicFileList = info.newImages
  252. },
  253. async afterReadpayTypeProofPic(event) {
  254. event.file.forEach(item => {
  255. uni.$u.api.uploadFile(item.url).then((res) => {
  256. this.payTypeProofPicFileList.push(res.data.url);
  257. uni.$u.toast("文件上传成功");
  258. }).catch(() => {
  259. uni.$u.toast("上传文件失败");
  260. })
  261. })
  262. },
  263. submitForm() {
  264. this.$refs.openOrderForm.validate().then(res => {
  265. if (res) {
  266. const data = {
  267. ...this.openOrderForm,
  268. payTypeProofPicFileList: this.payTypeProofPicFileList,
  269. amountReceived: Number(this.openOrderForm.price) * Number(this.openOrderForm.quantity),
  270. }
  271. uni.$u.api.wareHouseOpenOrder(data).then(res => {
  272. if (res.code === 200) {
  273. uni.$u.toast("开单成功");
  274. setTimeout(() => {
  275. uni.navigateBack({
  276. delta: 2
  277. });
  278. }, 1000);
  279. } else {
  280. uni.$u.toast(res.msg);
  281. }
  282. }).catch(() => {
  283. uni.$u.toast("开单失败");
  284. })
  285. console.log('提交成功', this.openOrderForm);
  286. }
  287. })
  288. },
  289. }
  290. }
  291. </script>
  292. <style lang="scss" scoped>
  293. @import '../styles/openOrder.scss';
  294. </style>