index.vue 44 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310
  1. <template>
  2. <div class="orderConfirm pagePadding">
  3. <div
  4. style="width: 100%"
  5. v-if="powers && powers.length > 0 && powers.some((item) => item == '001')"
  6. >
  7. <show-data-table
  8. style="margin: 0 0 10px 0; padding: 0"
  9. :sitem="sitem"
  10. v-if="sitem && status"
  11. :columns="showColumns"
  12. border
  13. >
  14. <template #status>
  15. <el-tag
  16. :size="'mini'"
  17. :type="sitem.status_type"
  18. style="margin: auto"
  19. >{{ sitem.status_name }}</el-tag
  20. >
  21. </template>
  22. </show-data-table>
  23. <el-form
  24. ref="ruleForm"
  25. :model="ruleForm"
  26. status-icon
  27. :size="'mini'"
  28. :rules="rulesThis"
  29. label-width="0px"
  30. >
  31. <div class="tab-row">
  32. <div class="tab-item-label">
  33. <label style="color: transparent">*</label>字段
  34. </div>
  35. <div class="tab-item-main">
  36. <el-row class="tab-title">
  37. <el-col :span="4">文件导入数据</el-col>
  38. <el-col :span="9">系统解析数据</el-col>
  39. <el-col :span="11">确认后的数据</el-col>
  40. </el-row>
  41. </div>
  42. </div>
  43. <div
  44. v-if="
  45. importSitem &&
  46. importSitem.platform_code &&
  47. confirmSitem &&
  48. confirmSitem.platform_code
  49. "
  50. >
  51. <div class="tab-row">
  52. <div class="tab-item-label">
  53. <div><label style="color: red">*</label>平台订单号</div>
  54. <div><label style="color: transparent">*</label>其他单号</div>
  55. </div>
  56. <div class="tab-item-main">
  57. <el-row class="tab-title">
  58. <el-col :span="4">
  59. <div style="min-height: 26px">
  60. {{ importSitem.platform_code }}
  61. </div>
  62. <div style="min-height: 26px">{{ importSitem.po_code }}</div>
  63. </el-col>
  64. <el-col :span="9">
  65. <div style="min-height: 26px">
  66. {{ confirmSitem.platform_code }}
  67. </div>
  68. <div style="min-height: 26px">{{ confirmSitem.po_code }}</div>
  69. </el-col>
  70. <el-col :span="11" class="nop">
  71. <el-row>
  72. <el-col :span="12" class="border">
  73. <el-form-item prop="platform_code">
  74. <el-input
  75. v-model="ruleForm.platform_code"
  76. maxlength="100"
  77. :disabled="
  78. !(
  79. status === '2' &&
  80. powers.some((item) => item == '008')
  81. )
  82. "
  83. placeholder="平台订单号"
  84. /> </el-form-item
  85. ></el-col>
  86. <el-col :span="12" class="border">
  87. <el-form-item prop="po_code">
  88. <el-input
  89. v-model="ruleForm.po_code"
  90. maxlength="100"
  91. :disabled="
  92. !(
  93. status === '2' &&
  94. powers.some((item) => item == '008')
  95. )
  96. "
  97. placeholder="其他单号"
  98. />
  99. </el-form-item>
  100. </el-col>
  101. </el-row>
  102. </el-col>
  103. </el-row>
  104. </div>
  105. </div>
  106. <div class="tab-row">
  107. <div class="tab-item-label">
  108. <div><label style="color: red">*</label>平台订单下单时间</div>
  109. <div><label style="color: red">*</label>平台商品编号</div>
  110. </div>
  111. <div class="tab-item-main">
  112. <el-row class="tab-title">
  113. <el-col :span="4">
  114. <div style="min-height: 26px">
  115. {{ importSitem.platform_time }}
  116. </div>
  117. <div style="min-height: 26px">
  118. {{ importSitem.plat_code }}
  119. </div>
  120. </el-col>
  121. <el-col :span="9"
  122. ><div style="min-height: 26px">
  123. {{ confirmSitem.platform_time }}
  124. </div>
  125. <div style="min-height: 26px">
  126. {{ confirmSitem.plat_code }}
  127. </div>
  128. <div v-if="conGoodData && conGoodData.good_thumb_img">
  129. <show-data-table
  130. :sitem="conGoodData"
  131. :columns="onlineColumns"
  132. :border="true"
  133. >
  134. <template slot="good_name">
  135. <img
  136. v-viewer
  137. style="width: 23px; height: 23px; margin: 0 5px 0 0"
  138. class="fl hover"
  139. v-if="conGoodData.good_thumb_img"
  140. :src="conGoodData.good_thumb_img"
  141. alt=""
  142. />
  143. <span>{{ conGoodData.good_name }}</span>
  144. <span
  145. v-for="(si, i) in conGoodData.speclist"
  146. :key="si.spec_id + i"
  147. >
  148. <span v-if="i !== 0">-</span>
  149. <span v-else>_</span>
  150. <span>{{ si.spec_name }}[{{ si.spec_value }}]</span>
  151. </span>
  152. <el-popover placement="top" width="300" trigger="hover">
  153. <ul>
  154. <li>
  155. <span>SKU编号:</span
  156. ><span>{{ conGoodData.skuCode }}</span>
  157. </li>
  158. <li
  159. v-if="
  160. newTime !== '' &&
  161. private_field &&
  162. private_field.length > 0 &&
  163. private_field.some((item) => item == '1')
  164. "
  165. >
  166. <span>SPU编号:</span
  167. ><span>{{ conGoodData.spuCode }}</span>
  168. </li>
  169. <!-- <li>
  170. <span>平台商品编码:</span
  171. ><span>{{ conGoodData.platform_code_en }}</span>
  172. </li> -->
  173. </ul>
  174. <i
  175. class="el-icon-warning-outline fr"
  176. slot="reference"
  177. ></i>
  178. </el-popover>
  179. </template>
  180. <template slot="company">
  181. <span>{{ conGoodData.company }}</span>
  182. <el-popover placement="top" width="300" trigger="hover">
  183. <ul>
  184. <li>
  185. <span>业务企业编号:</span
  186. ><span>{{ conGoodData.companyNo }}</span>
  187. </li>
  188. </ul>
  189. <i
  190. class="el-icon-warning-outline fr"
  191. slot="reference"
  192. ></i>
  193. </el-popover>
  194. </template>
  195. <template slot="cat_info">
  196. <span
  197. v-for="(si, sii) in conGoodData.cat_info"
  198. :key="si + sii"
  199. >{{ sii === 0 ? "" : "_" }}{{ si.name }}</span
  200. >
  201. </template>
  202. <template slot="exclusive">
  203. <span
  204. v-for="(si, sii) in conGoodData.exclusive"
  205. :key="si.id"
  206. >
  207. <span v-if="sii !== 0">/</span>
  208. <span>{{ si.name }}</span>
  209. </span>
  210. </template>
  211. <template slot="is_stock">
  212. <el-tag
  213. :size="'mini'"
  214. v-text="
  215. (
  216. options4.find(
  217. (item) => item.id == conGoodData.is_stock
  218. ) || {}
  219. ).name || '--'
  220. "
  221. />
  222. </template>
  223. </show-data-table>
  224. </div>
  225. </el-col>
  226. <el-col :span="11" class="nop">
  227. <el-row>
  228. <el-col :span="12" class="border">
  229. <el-form-item prop="platform_time">
  230. <el-date-picker
  231. type="datetime"
  232. placeholder="平台订单下单时间"
  233. v-model="ruleForm.platform_time"
  234. style="width: 100%"
  235. value-format="yyyy-MM-dd HH:mm:ss"
  236. :disabled="
  237. !(
  238. status === '2' &&
  239. powers.some((item) => item == '008')
  240. )
  241. "
  242. :picker-options="pickerOptions"
  243. @change="selectTime"
  244. >
  245. </el-date-picker> </el-form-item
  246. ></el-col>
  247. <el-col :span="12" class="border">
  248. <el-form-item prop="plat_code">
  249. <el-input
  250. v-model="ruleForm.plat_code"
  251. maxlength="100"
  252. readonly
  253. :disabled="
  254. !(
  255. status === '2' &&
  256. powers.some((item) => item == '008')
  257. )
  258. "
  259. @focus="showModel = true"
  260. placeholder="平台商品编号"
  261. /></el-form-item>
  262. </el-col>
  263. <el-col
  264. :span="24"
  265. v-if="subGoodData && subGoodData.good_thumb_img"
  266. >
  267. <show-data-table
  268. :sitem="subGoodData"
  269. :columns="onlineColumns"
  270. :border="true"
  271. >
  272. <template slot="good_name">
  273. <img
  274. v-viewer
  275. style="width: 23px; height: 23px; margin: 0 5px 0 0"
  276. class="fl"
  277. v-if="subGoodData.good_thumb_img"
  278. :src="subGoodData.good_thumb_img"
  279. alt=""
  280. />
  281. <span>{{ subGoodData.good_name }}</span>
  282. <span
  283. v-for="(si, i) in subGoodData.speclist"
  284. :key="si.spec_id + i"
  285. >
  286. <span v-if="i !== 0">-</span>
  287. <span v-else>_</span>
  288. <span>{{ si.spec_name }}[{{ si.spec_value }}]</span>
  289. </span>
  290. <el-popover
  291. placement="top"
  292. width="300"
  293. trigger="hover"
  294. >
  295. <ul>
  296. <li>
  297. <span>SKU编号:</span
  298. ><span>{{ subGoodData.skuCode }}</span>
  299. </li>
  300. <li
  301. v-if="
  302. newTime !== '' &&
  303. private_field &&
  304. private_field.length > 0 &&
  305. private_field.some((item) => item == '1')
  306. "
  307. >
  308. <span>SPU编号:</span
  309. ><span>{{ subGoodData.spuCode }}</span>
  310. </li>
  311. <!-- <li>
  312. <span>平台商品编码:</span
  313. ><span>{{ subGoodData.platform_code_en }}</span>
  314. </li> -->
  315. </ul>
  316. <i
  317. class="el-icon-warning-outline fr"
  318. slot="reference"
  319. ></i>
  320. </el-popover>
  321. </template>
  322. <template slot="company">
  323. <span>{{ subGoodData.company }}</span>
  324. <el-popover
  325. placement="top"
  326. width="300"
  327. trigger="hover"
  328. >
  329. <ul>
  330. <li>
  331. <span>业务企业编号:</span
  332. ><span>{{ subGoodData.companyNo }}</span>
  333. </li>
  334. </ul>
  335. <i
  336. class="el-icon-warning-outline fr"
  337. slot="reference"
  338. ></i>
  339. </el-popover>
  340. </template>
  341. <template slot="cat_info">
  342. <span
  343. v-for="(si, sii) in subGoodData.cat_info"
  344. :key="si + sii"
  345. >{{ sii === 0 ? "" : "_" }}{{ si.name }}</span
  346. >
  347. </template>
  348. <template slot="exclusive">
  349. <span
  350. v-for="(si, sii) in subGoodData.exclusive"
  351. :key="si.id"
  352. >
  353. <span v-if="sii !== 0">/</span>
  354. <span>{{ si.name }}</span>
  355. </span>
  356. </template>
  357. <template slot="is_stock">
  358. <el-tag
  359. :size="'mini'"
  360. v-text="
  361. (
  362. options4.find(
  363. (item) => item.id == subGoodData.is_stock
  364. ) || {}
  365. ).name || '--'
  366. "
  367. />
  368. </template>
  369. </show-data-table>
  370. </el-col>
  371. </el-row>
  372. </el-col>
  373. </el-row>
  374. </div>
  375. </div>
  376. <div class="tab-row">
  377. <div class="tab-item-label">
  378. <div><label style="color: red">*</label>收费模式</div>
  379. <div><label style="color: red">*</label>销售渠道</div>
  380. </div>
  381. <div class="tab-item-main">
  382. <el-row class="tab-title">
  383. <el-col :span="4">
  384. <div style="min-height: 26px">{{ importSitem.mode }}</div>
  385. <div style="min-height: 26px">
  386. {{ importSitem.sale_source }}
  387. </div>
  388. </el-col>
  389. <el-col :span="9">
  390. <div style="min-height: 26px">{{ confirmSitem.mode }}</div>
  391. <div style="min-height: 26px">
  392. {{ confirmSitem.sale_source }}
  393. </div></el-col
  394. >
  395. <el-col :span="11" class="nop">
  396. <el-row>
  397. <el-col :span="12" class="border">
  398. <el-form-item prop="mode">
  399. <el-select
  400. v-model="ruleForm.mode"
  401. style="width: 100%"
  402. clearable
  403. :disabled="
  404. !(
  405. status === '2' &&
  406. powers.some((item) => item == '008')
  407. )
  408. "
  409. placeholder="收费模式"
  410. >
  411. <el-option
  412. v-for="item in options"
  413. :key="item.label"
  414. :label="item.label"
  415. :value="item.label"
  416. >
  417. </el-option> </el-select
  418. ></el-form-item>
  419. </el-col>
  420. <el-col :span="12" class="border">
  421. <el-form-item prop="sale_source">
  422. <el-select
  423. v-model="ruleForm.sale_source"
  424. style="width: 100%"
  425. clearable
  426. :disabled="
  427. !(
  428. status === '2' &&
  429. powers.some((item) => item == '008')
  430. )
  431. "
  432. placeholder="销售渠道"
  433. >
  434. <el-option
  435. v-for="(item, i) in coptions"
  436. :key="item.source + i"
  437. :label="item.source"
  438. :value="item.source"
  439. >
  440. </el-option> </el-select></el-form-item></el-col
  441. ></el-row>
  442. </el-col>
  443. </el-row>
  444. </div>
  445. </div>
  446. <div class="tab-row">
  447. <div class="tab-item-label">
  448. <div><label style="color: red">*</label>收货人</div>
  449. <div><label style="color: red">*</label>收货电话</div>
  450. </div>
  451. <div class="tab-item-main">
  452. <el-row class="tab-title">
  453. <el-col :span="4">
  454. <div style="min-height: 26px">
  455. {{ importSitem.contactor }}
  456. </div>
  457. <div style="min-height: 26px">
  458. {{ importSitem.mobile }}
  459. </div>
  460. </el-col>
  461. <el-col :span="9">
  462. <div style="min-height: 26px">
  463. {{ confirmSitem.contactor }}
  464. </div>
  465. <div style="min-height: 26px">
  466. {{ confirmSitem.mobile }}
  467. </div></el-col
  468. >
  469. <el-col :span="11" class="nop">
  470. <el-row>
  471. <el-col :span="12" class="border">
  472. <el-form-item prop="contactor">
  473. <el-input
  474. v-model="ruleForm.contactor"
  475. maxlength="100"
  476. :disabled="
  477. !(
  478. status === '2' &&
  479. powers.some((item) => item == '008')
  480. )
  481. "
  482. placeholder="收货人"
  483. />
  484. </el-form-item>
  485. </el-col>
  486. <el-col :span="12" class="border">
  487. <el-form-item prop="mobile">
  488. <el-input
  489. v-model="ruleForm.mobile"
  490. maxlength="100"
  491. :disabled="
  492. !(
  493. status === '2' &&
  494. powers.some((item) => item == '008')
  495. )
  496. "
  497. placeholder="收货电话"
  498. />
  499. </el-form-item>
  500. </el-col>
  501. </el-row>
  502. </el-col>
  503. </el-row>
  504. </div>
  505. </div>
  506. <div class="tab-row">
  507. <div class="tab-item-label">
  508. <div><label style="color: red">*</label>省市区</div>
  509. <div><label style="color: red">*</label>详细地址</div>
  510. </div>
  511. <div class="tab-item-main">
  512. <el-row class="tab-title">
  513. <el-col :span="4">
  514. <div style="min-height: 26px">&nbsp;</div>
  515. <div style="min-height: 26px">
  516. {{ importSitem.addr }}
  517. </div></el-col
  518. >
  519. <el-col :span="9">
  520. <div style="min-height: 26px">
  521. {{ confirmSitem.addr_name }}&nbsp;
  522. </div>
  523. <div style="min-height: 26px">{{ confirmSitem.addr }}</div>
  524. </el-col>
  525. <el-col :span="11" class="nop">
  526. <el-row>
  527. <el-col :span="12" class="border">
  528. <el-form-item prop="addr_code">
  529. <select-area
  530. :value="ruleForm.addr_code"
  531. :size="'mini'"
  532. :disabled="
  533. !(
  534. status === '2' &&
  535. powers.some((item) => item == '008')
  536. )
  537. "
  538. placeholder="收货省市区"
  539. @selectChange="select_area_change($event)"
  540. />
  541. </el-form-item>
  542. </el-col>
  543. <el-col :span="12" class="border">
  544. <el-form-item prop="addr">
  545. <el-input
  546. v-model="ruleForm.addr"
  547. maxlength="100"
  548. :disabled="
  549. !(
  550. status === '2' &&
  551. powers.some((item) => item == '008')
  552. )
  553. "
  554. placeholder="详细地址"
  555. />
  556. </el-form-item>
  557. </el-col>
  558. </el-row>
  559. </el-col>
  560. </el-row>
  561. </div>
  562. </div>
  563. <div class="tab-row">
  564. <div class="tab-item-label">
  565. <label style="color: red">*</label>订单备注
  566. </div>
  567. <div class="tab-item-main">
  568. <el-row class="tab-title">
  569. <el-col :span="4" style="min-height: 26px">{{
  570. importSitem.order_remark
  571. }}</el-col>
  572. <el-col :span="9" style="min-height: 26px">{{
  573. confirmSitem.order_remark
  574. }}</el-col>
  575. <el-col :span="11">
  576. <el-form-item prop="order_remark">
  577. <el-input
  578. v-model="ruleForm.order_remark"
  579. maxlength="100"
  580. :disabled="
  581. !(
  582. status === '2' && powers.some((item) => item == '008')
  583. )
  584. "
  585. placeholder="订单备注" /></el-form-item
  586. ></el-col>
  587. </el-row>
  588. </div>
  589. </div>
  590. <div class="tab-row">
  591. <div class="tab-item-label">
  592. <div><label style="color: red">*</label>数量</div>
  593. <div><label style="color: red">*</label>单价</div>
  594. </div>
  595. <div class="tab-item-main">
  596. <el-row class="tab-title">
  597. <el-col :span="4">
  598. <div style="min-height: 26px">{{ importSitem.num }}</div>
  599. <div style="min-height: 26px">{{ importSitem.price }}</div>
  600. </el-col>
  601. <el-col :span="9">
  602. <div style="min-height: 26px">{{ confirmSitem.num }}</div>
  603. <div style="min-height: 26px">{{ confirmSitem.price }}</div>
  604. </el-col>
  605. <el-col :span="11" class="nop">
  606. <el-row>
  607. <el-col :span="12" class="border">
  608. <el-form-item prop="num">
  609. <digital-input
  610. :values="ruleForm.num"
  611. :placeholder="'数量'"
  612. :min="0"
  613. :max="100000000000"
  614. :position="'right'"
  615. :precision="0"
  616. :size="'mini'"
  617. :controls="false"
  618. :append="''"
  619. :disabled="
  620. !(
  621. status === '2' &&
  622. powers.some((item) => item == '008')
  623. )
  624. "
  625. @reschange="number_change($event, 'num')"
  626. />
  627. </el-form-item>
  628. </el-col>
  629. <el-col :span="12" class="border">
  630. <el-form-item prop="price">
  631. <digital-input
  632. :values="ruleForm.price"
  633. :placeholder="'单价'"
  634. :min="price_min"
  635. :disabled="
  636. !(
  637. status === '2' &&
  638. powers.some((item) => item == '008')
  639. )
  640. "
  641. :max="100000000000"
  642. :position="'right'"
  643. :precision="2"
  644. :size="'mini'"
  645. :controls="false"
  646. :append="'元'"
  647. @reschange="number_change($event, 'price')"
  648. />
  649. </el-form-item>
  650. </el-col>
  651. </el-row>
  652. </el-col>
  653. </el-row>
  654. </div>
  655. </div>
  656. <div class="tab-row">
  657. <div class="tab-item-label">
  658. <label style="color: transparent">*</label>活动名称
  659. </div>
  660. <div class="tab-item-main">
  661. <el-row class="tab-title">
  662. <el-col :span="4" style="min-height: 26px">{{
  663. importSitem.activity_name
  664. }}</el-col>
  665. <el-col :span="9" style="min-height: 26px">{{
  666. confirmSitem.activity_name
  667. }}</el-col>
  668. <el-col :span="11">
  669. <el-form-item prop="activity_code">
  670. <el-select
  671. v-model="ruleForm.activity_code"
  672. style="width: 100%"
  673. clearable
  674. :disabled="
  675. !(
  676. status === '2' && powers.some((item) => item == '008')
  677. )
  678. "
  679. @change="get_new_price"
  680. placeholder="活动名称"
  681. >
  682. <el-option
  683. v-for="(item, i) in actOptions"
  684. :key="item.activity_code + i"
  685. :label="item.activity_name"
  686. :value="item.activity_code"
  687. >
  688. </el-option>
  689. </el-select>
  690. </el-form-item>
  691. </el-col>
  692. </el-row>
  693. </div>
  694. </div>
  695. <div class="tab-row">
  696. <div class="tab-item-label">
  697. <label style="color: transparent">*</label>订单总金额
  698. </div>
  699. <div class="tab-item-main">
  700. <el-row class="tab-title">
  701. <el-col :span="4" style="min-height: 26px">{{
  702. importSitem.before_discount_all_price
  703. }}</el-col>
  704. <el-col :span="9" style="min-height: 26px">{{
  705. confirmSitem.before_discount_all_price
  706. }}</el-col>
  707. <el-col :span="11" style="min-height: 26px">
  708. {{ ruleForm.before_discount_all_price }}</el-col
  709. >
  710. </el-row>
  711. </div>
  712. </div>
  713. <div
  714. class="tab-row"
  715. v-if="status === '2' && powers.some((item) => item == '008')"
  716. >
  717. <div class="tab-item-label">
  718. <label style="color: transparent">*</label>
  719. </div>
  720. <div class="tab-item-main tr">
  721. <el-button type="primary" @click="submitForm" :size="'mini'"
  722. >保 存
  723. </el-button>
  724. <!-- <el-button @click="showModelThis = false" :size="'mini'">{{
  725. isDetail ? "关 闭" : "取 消"
  726. }}</el-button> -->
  727. </div>
  728. </div>
  729. </div>
  730. </el-form>
  731. <search-good-online-modal
  732. :once="true"
  733. :sitem="{}"
  734. :active="true"
  735. :show-model="showModel"
  736. @resultList="resultList"
  737. @cancel="showModel = false"
  738. />
  739. </div>
  740. <div v-else>
  741. <no-auth></no-auth>
  742. </div>
  743. </div>
  744. </template>
  745. <script>
  746. import mixinPage from "@/mixins/elPaginationHandle";
  747. import resToken from "@/mixins/resToken";
  748. import asyncRequest from "@/apis/service/orderEntry/orderConfirm";
  749. import {
  750. options,
  751. ruleForm,
  752. rules,
  753. options1,
  754. options2,
  755. options3,
  756. options4,
  757. options5,
  758. options6,
  759. options7,
  760. options8,
  761. options9,
  762. onlineColumns,
  763. } from "./columns";
  764. import searchGoodOnlineModal from "@/components/search-good-online-modal";
  765. export default {
  766. name: "orderConfirm",
  767. mixins: [mixinPage, resToken],
  768. components: {
  769. searchGoodOnlineModal,
  770. },
  771. computed: {
  772. powers() {
  773. let tran =
  774. this.$store.getters.btnList.find(
  775. (item) => item.menu_route == "orderConfirm"
  776. ) || {};
  777. if (tran && tran.action && tran.action.length > 0) {
  778. return tran.action;
  779. } else {
  780. return [];
  781. }
  782. },
  783. },
  784. data() {
  785. return {
  786. statusOptions: [],
  787. showColumns: [
  788. {
  789. prop: "creater",
  790. label: "导入人",
  791. span: 6,
  792. },
  793. {
  794. prop: "addtime",
  795. label: "导入时间",
  796. span: 6,
  797. },
  798. {
  799. prop: "status",
  800. label: "状态",
  801. _slot_: "status",
  802. span: 6,
  803. },
  804. {
  805. prop: "orderCode",
  806. label: "订单编号",
  807. span: 6,
  808. },
  809. {
  810. prop: "updater",
  811. label: "确认人",
  812. span: 6,
  813. },
  814. {
  815. prop: "success_date",
  816. label: "录入成功时间",
  817. span: 6,
  818. },
  819. {
  820. prop: "platform_name",
  821. label: "客户名称",
  822. },
  823. ],
  824. showModel: false,
  825. hasdiff: false,
  826. activeTabs: "1",
  827. sitem: null,
  828. isMetal: false,
  829. finishStatus: "finish",
  830. pickerOptions: {
  831. disabledDate: (time) => {
  832. return time.getTime() > new Date().valueOf();
  833. },
  834. },
  835. activeNames: ["0", "1", "2", "3", "4", "5", "10"],
  836. importSitem: null,
  837. confirmSitem: null,
  838. price_min: "0",
  839. subSitem: null,
  840. conGoodData: null,
  841. subGoodData: null,
  842. status: "",
  843. newTime: "",
  844. loading: false,
  845. queryId: "",
  846. rulesThis: {},
  847. coptions: [],
  848. options,
  849. actOptions: [],
  850. ruleForm: {},
  851. rules,
  852. options1,
  853. options2,
  854. options3,
  855. options4,
  856. options5,
  857. options6,
  858. options7,
  859. options8,
  860. options9,
  861. onlineColumns,
  862. priceLoding: false,
  863. };
  864. },
  865. mounted() {
  866. this.queryId = this.$route.query.id;
  867. this.initForm();
  868. },
  869. methods: {
  870. change_good() {},
  871. statusActive(status) {
  872. let active = "";
  873. switch (status) {
  874. case "1":
  875. active = "系统验证数据中";
  876. break;
  877. case "2":
  878. active = "待确认订单信息";
  879. break;
  880. case "3":
  881. active = "待处理(待扣减库存)";
  882. break;
  883. case "4":
  884. active = "库存不足";
  885. break;
  886. case "5":
  887. active = "订单录入成功";
  888. break;
  889. }
  890. return active;
  891. },
  892. statusActiveTag(status) {
  893. let active = "";
  894. switch (status) {
  895. case "1":
  896. active = "";
  897. break;
  898. case "2":
  899. active = "info";
  900. break;
  901. case "3":
  902. active = "warning";
  903. break;
  904. case "4":
  905. active = "danger";
  906. break;
  907. case "5":
  908. active = "success";
  909. break;
  910. }
  911. return active;
  912. },
  913. async initForm() {
  914. this.loading = true;
  915. this.rulesThis = this.rules;
  916. await this.resetForm();
  917. await this.initData();
  918. this.loading = false;
  919. },
  920. async againForm(sitem) {
  921. const {
  922. platform_code,
  923. po_code,
  924. platform_time,
  925. plat_code,
  926. sale_source,
  927. mode,
  928. contactor,
  929. mobile,
  930. price,
  931. num,
  932. before_discount_all_price,
  933. activity_code,
  934. order_remark,
  935. addr,
  936. addr_code,
  937. } = sitem;
  938. this.ruleForm = {
  939. id: this.queryId || "",
  940. platform_code: platform_code || "", //平台订单号
  941. po_code: po_code || "", //其他单号
  942. platform_time: platform_time || "", //平台下单时间
  943. plat_code: plat_code || "", //平台商品编号
  944. sale_source: sale_source || "", //销售渠道
  945. mode: mode || "", //收费模式
  946. contactor: contactor || "", ///收货人
  947. mobile: mobile || "", //联系电话
  948. price: price || "", //单价
  949. num: num || "", //数量
  950. before_discount_all_price: before_discount_all_price || "", //优惠前总金额
  951. activity_code: activity_code || "", //优惠活动名称
  952. order_remark: order_remark || "", //订单备注
  953. addr: addr || "", //联系地址
  954. addr_code:
  955. addr_code && addr_code.length > 0 ? addr_code.split(",") : [], //省市区
  956. };
  957. this.ruleForm.before_discount_all_price = this.accMul(
  958. this.ruleForm.num,
  959. this.ruleForm.price
  960. );
  961. await this.get_goods_active();
  962. const { platform_code: platformCode } = this.subGoodData;
  963. if (platformCode) {
  964. await this.get_source(platformCode);
  965. }
  966. },
  967. async initData() {
  968. this.sitem = null;
  969. this.loading = true;
  970. const { code, data, message } = await asyncRequest.detail({
  971. id: this.queryId,
  972. });
  973. if (code === 0) {
  974. const {
  975. status,
  976. import: simport,
  977. confirm,
  978. user_update,
  979. orderCode,
  980. creater,
  981. addtime,
  982. updater,
  983. success_date,
  984. } = data;
  985. this.sitem = {
  986. orderCode,
  987. status,
  988. creater,
  989. addtime,
  990. updater,
  991. success_date,
  992. status_name: this.statusActive(status),
  993. status_type: this.statusActiveTag(status),
  994. platform_name: "",
  995. };
  996. this.importSitem = simport ? JSON.parse(JSON.stringify(simport)) : null;
  997. this.confirmSitem = confirm
  998. ? JSON.parse(JSON.stringify(confirm))
  999. : null;
  1000. this.status = status;
  1001. if (
  1002. !(this.status === "3" || this.status === "4" || this.status === "5")
  1003. ) {
  1004. console.log(this.status);
  1005. this.subSitem = confirm ? JSON.parse(JSON.stringify(confirm)) : null;
  1006. } else {
  1007. this.subSitem = user_update
  1008. ? JSON.parse(JSON.stringify(user_update))
  1009. : null;
  1010. }
  1011. if (this.confirmSitem && this.confirmSitem.plat_code) {
  1012. await this.onlineData(1, this.confirmSitem.plat_code);
  1013. }
  1014. if (this.subSitem && this.subSitem.plat_code) {
  1015. const { plat_code } = this.subSitem;
  1016. if (plat_code) {
  1017. await this.onlineData(2, plat_code);
  1018. }
  1019. await this.againForm(this.subSitem);
  1020. }
  1021. this.getNewTime();
  1022. } else if (code >= 100 && code <= 104) {
  1023. await this.logout();
  1024. } else {
  1025. this.$message.warning(message);
  1026. }
  1027. this.loading = false;
  1028. },
  1029. async onlineData(type, good_code) {
  1030. this.loading = true;
  1031. const { code, data, message } = await asyncRequest.good_detail({
  1032. plat_code: good_code,
  1033. });
  1034. if (code === 0) {
  1035. if (type === 1) {
  1036. this.conGoodData = data;
  1037. } else {
  1038. this.subGoodData = data;
  1039. const { platform_name } = data;
  1040. if (this.status !== "2") {
  1041. this.sitem.platform_name = platform_name + "客户";
  1042. }
  1043. }
  1044. } else if (code >= 100 && code <= 104) {
  1045. await this.logout();
  1046. } else {
  1047. this.$message.warning(message);
  1048. this.ruleForm.num = "0";
  1049. await this.get_new_price();
  1050. }
  1051. this.loading = false;
  1052. },
  1053. async get_source(platform_code) {
  1054. this.coptions = [];
  1055. const { code, data, message } = await asyncRequest.sourceList({
  1056. platform_id: platform_code,
  1057. });
  1058. if (code === 0) {
  1059. this.coptions = data;
  1060. } else if (code >= 100 && code <= 104) {
  1061. await this.logout();
  1062. } else {
  1063. this.$message.warning(message);
  1064. }
  1065. console.log(this.coptions.length);
  1066. if (this.coptions.length == 0) {
  1067. this.ruleForm.sale_source = "";
  1068. this.$refs.ruleForm.validateField("sale_source");
  1069. }
  1070. },
  1071. async resultList(e) {
  1072. if (e && e.length === 1) {
  1073. const { plat_code } = JSON.parse(JSON.stringify(e[0]));
  1074. this.ruleForm.plat_code = plat_code || "";
  1075. this.$refs.ruleForm.validateField("plat_code");
  1076. if (plat_code) {
  1077. await this.onlineData(2, plat_code);
  1078. } else {
  1079. this.subGoodData = null;
  1080. this.coptions = [];
  1081. this.ruleForm.num = "0";
  1082. this.ruleForm.price = "0";
  1083. this.ruleForm.sale_source = "";
  1084. this.$refs.ruleForm.validateField("num");
  1085. this.$refs.ruleForm.validateField("price");
  1086. this.$refs.ruleForm.validateField("sale_source");
  1087. }
  1088. }
  1089. },
  1090. //省市区选择
  1091. async select_area_change(e) {
  1092. this.ruleForm.addr_code = e;
  1093. this.$refs.ruleForm.validateField("addr_code");
  1094. },
  1095. async number_change(e, key) {
  1096. this.ruleForm[key] = e + "" || "0";
  1097. this.$refs.ruleForm.validateField(key);
  1098. if (key === "num") {
  1099. await this.get_new_price();
  1100. }
  1101. this.ruleForm.before_discount_all_price = this.accMul(
  1102. this.ruleForm.num,
  1103. this.ruleForm.price
  1104. );
  1105. },
  1106. async get_new_price() {
  1107. const { num, activity_code } = this.ruleForm;
  1108. if (num * 1 === 0) {
  1109. this.price_min = "0";
  1110. this.ruleForm.price = "0";
  1111. return;
  1112. } else {
  1113. const { skuCode: conSkuCode } = this.conGoodData;
  1114. const { skuCode: subSkuCode } = this.subGoodData;
  1115. let model = {
  1116. skuCode:
  1117. this.status === "3" || this.status === "4" || this.status === "5"
  1118. ? subSkuCode
  1119. : conSkuCode,
  1120. sale_num: num,
  1121. is_activity: activity_code ? "1" : "0",
  1122. act_code: activity_code ? activity_code : "",
  1123. };
  1124. if (!this.priceLoding) {
  1125. const { isok, price } = await this.set_salegetprice(model);
  1126. this.price_min = isok ? price : "0";
  1127. if (!isok) {
  1128. this.ruleForm.price = "0";
  1129. } else {
  1130. if (price * 1 >= this.ruleForm.price * 1)
  1131. this.ruleForm.price = price;
  1132. }
  1133. }
  1134. }
  1135. },
  1136. async get_goods_active() {
  1137. this.actOptions = [];
  1138. const { skuCode, companyNo, platform_code } = this.subGoodData;
  1139. let model = {
  1140. skuCode,
  1141. companyNo,
  1142. platform_id: platform_code,
  1143. };
  1144. const { code, data, message } = await asyncRequest.goods_active(model);
  1145. if (code === 0) {
  1146. const { act } = data;
  1147. this.actOptions = act;
  1148. } else if (code >= 100 && code <= 104) {
  1149. await this.logout();
  1150. } else {
  1151. this.$message.warning(message);
  1152. }
  1153. if (this.actOptions.length === 0) {
  1154. this.ruleForm.activity_code = "";
  1155. this.$refs.ruleForm.validateField("activity_code");
  1156. }
  1157. },
  1158. async resetForm() {
  1159. // 重置
  1160. await this.$nextTick(() => {
  1161. if (this.$refs.ruleForm) {
  1162. this.$refs.ruleForm.resetFields();
  1163. this.$refs.ruleForm.clearValidate();
  1164. this.ruleForm = ruleForm;
  1165. }
  1166. });
  1167. },
  1168. async submitForm() {
  1169. await this.$refs.ruleForm.validate(async (valid) => {
  1170. if (valid) {
  1171. this.loading = true;
  1172. let model = JSON.parse(JSON.stringify(this.ruleForm));
  1173. const { code, data, message } = await asyncRequest.update(model);
  1174. this.loading = false;
  1175. if (code === 0) {
  1176. this.$notify.success({
  1177. title: "提交成功!",
  1178. message: "",
  1179. });
  1180. this.initForm();
  1181. } else if (code >= 100 && code <= 104) {
  1182. await this.logout();
  1183. } else {
  1184. this.$message.warning(message);
  1185. }
  1186. } else {
  1187. console.log("error submit!!");
  1188. return false;
  1189. }
  1190. });
  1191. },
  1192. accMul(arg1, arg2) {
  1193. var m = 0,
  1194. s1 = arg1.toString(),
  1195. s2 = arg2.toString();
  1196. try {
  1197. m += s1.split(".")[1].length;
  1198. } catch (e) {}
  1199. try {
  1200. m += s2.split(".")[1].length;
  1201. } catch (e) {}
  1202. return (
  1203. (Number(s1.replace(".", "")) * Number(s2.replace(".", ""))) /
  1204. Math.pow(10, m)
  1205. );
  1206. },
  1207. async set_salegetprice(model) {
  1208. this.priceLoding = true;
  1209. let resModel = {
  1210. isok: true,
  1211. price: "0",
  1212. };
  1213. // console.log(model);
  1214. let { code, message, data } = await asyncRequest.salegetprice(model);
  1215. if (code === 0) {
  1216. const { sale_price } = data;
  1217. resModel.price = sale_price + "";
  1218. } else if (code >= 100 && code <= 104) {
  1219. await this.logout();
  1220. } else {
  1221. this.$message.warning(message);
  1222. resModel.isok = false;
  1223. }
  1224. this.priceLoding = false;
  1225. return resModel;
  1226. },
  1227. getNewTime() {
  1228. this.newTime = new Date().valueOf();
  1229. },
  1230. },
  1231. };
  1232. </script>
  1233. <style lang="scss" scoped>
  1234. .orderConfirm {
  1235. font-size: 13px;
  1236. color: #909399 !important;
  1237. line-height: 26px;
  1238. .tab-row {
  1239. border-left: 1px solid #ebeef5;
  1240. border-top: 1px solid #ebeef5;
  1241. display: flex;
  1242. align-items: stretch;
  1243. &:last-child {
  1244. border-bottom: 1px solid #ebeef5;
  1245. }
  1246. .tab-item-label {
  1247. padding: 4px 5px;
  1248. width: 125px;
  1249. .red {
  1250. color: red;
  1251. padding: 0 5px 0 0;
  1252. }
  1253. }
  1254. .tab-item-main {
  1255. width: calc(100% - 125px);
  1256. border-left: 1px solid #ebeef5;
  1257. .tab-title {
  1258. display: flex;
  1259. align-items: stretch;
  1260. .el-col {
  1261. padding: 3px 5px;
  1262. border-right: 1px solid #ebeef5;
  1263. &.nop {
  1264. padding: 0;
  1265. }
  1266. &.border {
  1267. border: 0;
  1268. }
  1269. }
  1270. }
  1271. }
  1272. }
  1273. }
  1274. </style>