openOrder.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  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="建议标价" border="none" type="number"></u--input></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="dealPrice">
  26. ¥<u--input v-model="openOrderForm.dealPrice" placeholder="成交金额" 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" button-size="26"></u-number-box>
  32. </u-form-item>
  33. </view>
  34. <view class="card_item">
  35. <u-form-item label="订单类型">
  36. <TabSelect :tabList="orderTypeList" mode="single" :colNum="4" :defaultIndex="1" labelKey="dictLabel" valueKey="dictValue"
  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.orderDate }}</view>
  52. <u-datetime-picker :show="dateShow" v-model="openOrderForm.orderDate" 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="payTypeList" mode="single" :colNum="4" :defaultIndex="1"
  60. @tabChange="changepayType">
  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. <view class="imgs_scroll">
  74. <ImgsRowScroll v-if="payTypeProofPicFileList.length > 0" :isShowDeleteIcon="true"
  75. @deleteImgInfo="getDeleteGoodPicInfo" imgMode="aspectFill" :totalWidth="400"
  76. :images="payTypeProofPicFileList" :previewEnabled="true" :imageWidth="150" :imageHeight="150">
  77. </ImgsRowScroll>
  78. <u-upload @afterRead="afterReadpayTypeProofPic" name="1" multiple :maxCount="10"></u-upload>
  79. </view>
  80. </u-form-item>
  81. </view>
  82. <view class="card_item">
  83. <u-form-item label="订单备注">
  84. <u--textarea v-model="openOrderForm.remark" placeholder="请输入订单备注" confirmType="done"></u--textarea>
  85. </u-form-item>
  86. </view>
  87. <view class="card_item">
  88. <u-form-item label="收货地址">
  89. <u--textarea v-model="openOrderForm.address" placeholder="请输入收货地址" confirmType="done"></u--textarea>
  90. </u-form-item>
  91. </view>
  92. </u--form>
  93. </view>
  94. <view class="bottom_box">
  95. <view class="bottom_box_item">
  96. <view class="bottom_box_item_title">实收总计</view>
  97. <view class="bottom_box_item_price">¥{{ openOrderForm.dealPrice * openOrderForm.quantity || 0 }}</view>
  98. </view>
  99. <u-button color="#3c9cff" type="primary" @click="submitForm" icon="checkmark">确认开单</u-button>
  100. </view>
  101. </view>
  102. </template>
  103. <script>
  104. import TabSelect from '@/components/custom-tab-select/index.vue'
  105. import ImgsRowScroll from '@/components/imgs-row-scroll/index.vue'
  106. import PersonPicker from '@/components/person-picker/index.vue'
  107. export default {
  108. components: {
  109. TabSelect,
  110. ImgsRowScroll,
  111. PersonPicker,
  112. },
  113. data() {
  114. return {
  115. payTypeProofPicFileList: [],
  116. openOrderForm: {
  117. url: '',
  118. dictLabel: '',
  119. dictValue: '',
  120. model: '',
  121. agentPrice: '',
  122. price: null,
  123. dealPrice: null,
  124. quantity: 1,
  125. recyclePerson: '',
  126. recyclePersonId: '',
  127. orderType: '',
  128. orderDate: this.$dayjs().format('YYYY-MM-DD'),
  129. payType: 1,
  130. afterSaleTab: [],
  131. remark: '',
  132. address: '',
  133. },
  134. orderTypeList: [],
  135. payTypeList: [
  136. {
  137. name: '微信',
  138. value: 1,
  139. },
  140. {
  141. name: '支付宝',
  142. value: 2,
  143. },
  144. {
  145. name: '银行卡',
  146. value: 3,
  147. },
  148. {
  149. name: '现金',
  150. value: 4,
  151. },
  152. {
  153. name: '数字货币',
  154. value: 5,
  155. },
  156. {
  157. name: '挂账',
  158. value: 6,
  159. },
  160. ],
  161. afterSaleTabList: [
  162. {
  163. name: '假一赔三',
  164. value: 1,
  165. },
  166. {
  167. name: '一年质保',
  168. value: 2,
  169. },
  170. {
  171. name: '一年内八折回收',
  172. value: 3,
  173. },
  174. {
  175. name: '送保养一次',
  176. value: 4,
  177. },
  178. {
  179. name: '原厂配件保证',
  180. value: 5,
  181. },
  182. ],
  183. rules: {
  184. dealPrice: [
  185. { required: true, message: '请输入成交金额', trigger: ['blur'] },
  186. ],
  187. },
  188. dateShow: false,
  189. }
  190. },
  191. onLoad(options) {
  192. const params = options.params || '{}'
  193. if (params) {
  194. this.openOrderForm.quantity = 1
  195. Object.keys(JSON.parse(params)).forEach(key => {
  196. this.openOrderForm[key] = JSON.parse(params)[key]
  197. })
  198. console.log(this.openOrderForm);
  199. this.getOrderTypeList()
  200. }
  201. },
  202. methods: {
  203. getOrderTypeList() {
  204. this.$getDicts("crm_sendOrder_type").then(res => {
  205. this.orderTypeList = res
  206. })
  207. },
  208. changeOrderType(val) {
  209. this.openOrderForm.orderType = val
  210. },
  211. changepayType(val) {
  212. this.openOrderForm.payType = val
  213. },
  214. changeAfterSaleTab(val) {
  215. this.openOrderForm.afterSaleTab = val
  216. },
  217. // 打开回收人选择器
  218. recyclePersonClick() {
  219. this.$refs.recyclePersonPickerRef.open();
  220. },
  221. handleSelectRecyclePerson(person) {
  222. this.openOrderForm.recyclePerson = person.label
  223. this.openOrderForm.recyclePersonId = person.id
  224. console.log(this.openOrderForm);
  225. },
  226. handleClickOutside() {
  227. this.personShow = false
  228. },
  229. confirmDate(val) {
  230. this.$nextTick(() => {
  231. this.openOrderForm.orderDate = this.$dayjs(val.value).format('YYYY-MM-DD');
  232. })
  233. this.dateShow = false
  234. },
  235. closeDate() {
  236. this.dateShow = false
  237. },
  238. getDeleteGoodPicInfo(info) {
  239. this.payTypeProofPicFileList = info.newImages
  240. },
  241. async afterReadpayTypeProofPic(event) {
  242. event.file.forEach(item => {
  243. uni.$u.api.uploadFile(item.url).then((res) => {
  244. this.payTypeProofPicFileList.push(res.data.url);
  245. uni.$u.toast("文件上传成功");
  246. }).catch(() => {
  247. uni.$u.toast("上传文件失败");
  248. })
  249. })
  250. },
  251. submitForm() {
  252. this.$refs.openOrderForm.validate().then(res => {
  253. if (res) {
  254. const data = {
  255. ...this.openOrderForm,
  256. payTypeProofPicFileList: this.payTypeProofPicFileList,
  257. amountReceived: Number(this.openOrderForm.dealPrice) * Number(this.openOrderForm.quantity),
  258. }
  259. uni.$u.api.wareHouseOpenOrder(data).then(() => {
  260. uni.$u.toast("开单成功");
  261. setTimeout(() => {
  262. uni.navigateBack({
  263. delta: 2
  264. });
  265. }, 1000);
  266. }).catch((error) => {
  267. uni.$u.toast(error);
  268. })
  269. }
  270. })
  271. },
  272. }
  273. }
  274. </script>
  275. <style lang="scss" scoped>
  276. @import '../styles/openOrder.scss';
  277. </style>