liveDetail.vue 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119
  1. <template>
  2. <div style="background-color: #f0f2f5; padding-bottom: 20px; min-height: 100%; " >
  3. <div style="padding: 20px; background-color: #fff;">
  4. 订单详情
  5. </div>
  6. <div class="contentx" v-if="item!=null">
  7. <div class="desct"></div>
  8. <div class="order-status" v-if="item!=null" >
  9. <el-steps :active="item.status+1" align-center>
  10. <el-step title="待支付"></el-step>
  11. <el-step title="待发货"></el-step>
  12. <el-step title="待收货"></el-step>
  13. <el-step title="已完成"></el-step>
  14. </el-steps>
  15. </div>
  16. <el-card shadow="never" style="margin-top: 15px">
  17. <div class="operate-container" v-if="item!=null">
  18. <span style="margin-left: 20px" class="color-danger">订单状态:
  19. <el-tag prop="status" v-for="(ite, index) in orderOptions" v-if="item.status==ite.dictValue">{{ite.dictLabel}}</el-tag>
  20. </span>
  21. <div class="operate-button-container" v-if="item.status==3">
  22. <el-button size="mini" @click="finishOrder()" v-hasPermi="['his:liveOrder:good']">确认收货</el-button>
  23. </div>
  24. <div class="operate-button-container" v-if="item.status==2&&item.orderType==1">
  25. <el-button size="mini" @click="sendVisible=true" v-hasPermi="['his:liveOrder:sendGoods']">发货</el-button>
  26. </div>
  27. <div class="operate-button-container" v-if="item.status==2&&item.orderType==2">
  28. <el-button size="mini" @click="tuiOrder()" v-hasPermi="['his:liveOrder:sendHisGoods']" >推送订单</el-button>
  29. </div>
  30. <div class="operate-button-container" v-if="item.deliverySn!=null" v-hasPermi="['his:liveOrder:express']">
  31. <el-button size="mini" @click="showExpress()" >查看物流</el-button>
  32. </div>
  33. <div class="operate-button-container" >
  34. <el-button size="mini" @click="editDelivery()" v-hasPermi="['his:liveOrder:updateDelivery']" >修改物流单号</el-button>
  35. </div>
  36. <div class="operate-button-container" >
  37. <el-button size="mini" @click="editOrder()" v-hasPermi="['his:liveOrder:edit']" >修改订单</el-button>
  38. </div>
  39. <div class="operate-button-container" v-if="item.extendOrderId == null" >
  40. <el-button size="mini" @click="addErpOrder()" >创建ERP订单信息</el-button>
  41. </div>
  42. <div class="operate-button-container" v-if="item.extendOrderId!=null" >
  43. <el-button size="mini" @click="showErpOrder()" >ERP订单信息</el-button>
  44. </div>
  45. <div class="operate-button-container" v-if="item.status>1">
  46. <el-button size="mini" @click="refund()" v-hasPermi="['his:liveOrder:refundOrderMoney']">退款</el-button>
  47. </div>
  48. </div>
  49. <div class="desct">
  50. 基本信息
  51. </div>
  52. <el-descriptions :column="3" border >
  53. <el-descriptions-item label="订单编号" ><span v-if="item!=null">{{item.orderCode}}</span></el-descriptions-item>
  54. <el-descriptions-item label="会员"><span v-if="item.nickName!=null">{{item.nickName}}({{item.phone}})</span></el-descriptions-item>
  55. <el-descriptions-item label="支付方式" ><dict-tag :options="PayOptions" :value="item.payType"/></el-descriptions-item>
  56. <el-descriptions-item label="收货人" > <span v-if="item!=null">{{item.userName}}</span> </el-descriptions-item>
  57. <el-descriptions-item label="手机号码" > <span v-if="item!=null">{{item.userPhone}}</span>
  58. <el-button icon="el-icon-search" size="mini" @click="handlePhone()" style="margin-left: 20px;" circle v-hasPermi="['his:liveOrder:queryPhone']"></el-button>
  59. </el-descriptions-item>
  60. <el-descriptions-item label="收货地址" > <span>{{item.userAddress}}</span> </el-descriptions-item>
  61. <el-descriptions-item label="所属公司"><span v-if="item!=null">{{item.companyName}}</span></el-descriptions-item>
  62. <el-descriptions-item label="员工"><span v-if="item!=null">{{item.companyUserName}}</span></el-descriptions-item>
  63. <el-descriptions-item label="推广佣金" ><span v-if="item.tuiMoney!=null">{{item.tuiMoney.toFixed(2)}}</span></el-descriptions-item>
  64. <el-descriptions-item label="推广佣金状态" ><span v-if="item!=null"><dict-tag :options="tuiOptions" :value="item.tuiMoneyStatus"/> </span></el-descriptions-item>
  65. <el-descriptions-item label="ERP编号" ><span v-if="item!=null">{{item.extendOrderId}}</span></el-descriptions-item>
  66. <el-descriptions-item label="用户备注" ><span v-if="item!=null">{{item.remark}}</span></el-descriptions-item>
  67. <el-descriptions-item label="档期归属" >
  68. <el-tag prop="scheduleId" v-for="(schedule, index) in scheduleOptions" v-if="item!=null&&item.scheduleId==schedule.id">{{schedule.name}}
  69. </el-tag>
  70. </el-descriptions-item>
  71. <el-descriptions-item label="订单购买类型" ><span v-if="item!=null"><dict-tag :options="orderBuyTypeOptions" :value="item.orderBuyType"/></span></el-descriptions-item>
  72. <el-descriptions-item label=" 公众号/渠道" ><span v-if="item!=null">{{item.channel}}</span></el-descriptions-item>
  73. <el-descriptions-item label=" 渠道" ><span v-if="item!=null"><dict-tag :options="channelOptions" :value="item.orderChannel"/></span></el-descriptions-item>
  74. <el-descriptions-item label=" 企微主体" ><span v-if="item!=null"><dict-tag :options="qwSubjectOptions" :value="item.qwSubject"/></span></el-descriptions-item>
  75. <el-descriptions-item label="物流公司编码" ><span v-if="item!=null">{{item.deliveryCode}}</span></el-descriptions-item>
  76. <el-descriptions-item label="物流公司名称" ><span v-if="item!=null">{{item.deliveryName}}</span></el-descriptions-item>
  77. <el-descriptions-item label="物流单号" ><span v-if="item!=null">{{item.deliveryId}}</span></el-descriptions-item>
  78. <el-descriptions-item label="发货时间" ><span v-if="item!=null">{{item.deliverySendTime}}</span></el-descriptions-item>
  79. </el-descriptions>
  80. </el-card>
  81. </div>
  82. <!-- <div class="contentx" v-if="item!=null" style="padding-bottom: 70px;">-->
  83. <!-- <div style="margin-top: 20px">-->
  84. <!-- <div class="desct">-->
  85. <!-- 物流信息-->
  86. <!-- </div>-->
  87. <!-- &nbsp;-->
  88. <!-- <el-link type="primary" @click="editDelivery(null)">添加物流信息</el-link>-->
  89. <!-- </div>-->
  90. <!-- <el-table-->
  91. <!-- border-->
  92. <!-- :data="deliverList"-->
  93. <!-- size="small"-->
  94. <!-- style="width: 100%;margin-top: 20px" >-->
  95. <!-- <el-table-column label="物流公司编码" width="150" align="center">-->
  96. <!-- <template slot-scope="scope">-->
  97. <!-- <p>{{scope.row.deliverSn}}</p>-->
  98. <!-- </template>-->
  99. <!-- </el-table-column>-->
  100. <!-- <el-table-column label="物流公司名称" width="300" align="center">-->
  101. <!-- <template slot-scope="scope">-->
  102. <!-- <p>{{scope.row.deliverName}}</p>-->
  103. <!-- </template>-->
  104. <!-- </el-table-column>-->
  105. <!-- <el-table-column label="物流单号" width="300" align="center">-->
  106. <!-- <template slot-scope="scope">-->
  107. <!-- <p>{{scope.row.deliverId}}</p>-->
  108. <!-- </template>-->
  109. <!-- </el-table-column>-->
  110. <!-- <el-table-column label="物流状态" width="300" align="center">-->
  111. <!-- <template slot-scope="scope">-->
  112. <!-- <span>-->
  113. <!-- <el-tag v-for="(item, index) in deliveryStatusOptions" v-if="scope.row!=null&&scope.row.status==item.dictValue">-->
  114. <!-- {{item.dictLabel}}-->
  115. <!-- </el-tag>-->
  116. <!-- </span>-->
  117. <!-- </template>-->
  118. <!-- </el-table-column>-->
  119. <!-- <el-table-column label="发货时间" width="240" align="center">-->
  120. <!-- <template slot-scope="scope">-->
  121. <!-- {{scope.row.deliverySendTime}}-->
  122. <!-- </template>-->
  123. <!-- </el-table-column>-->
  124. <!-- <el-table-column label="操作" width="240" align="center">-->
  125. <!-- <template slot-scope="scope">-->
  126. <!-- <el-link type="primary" @click="showExpress(scope)">查看物流跟踪</el-link>-->
  127. <!-- &nbsp;&nbsp;-->
  128. <!-- <el-link type="primary" @click="editDelivery(scope)">修改物流</el-link>-->
  129. <!-- </template>-->
  130. <!-- </el-table-column>-->
  131. <!-- </el-table>-->
  132. <!-- </div>-->
  133. <div class="contentx" v-if="item!=null" style="padding-bottom: 70px;">
  134. <div class="desct">
  135. 商品信息
  136. </div>
  137. <el-tooltip class="item" effect="dark" :content="showList ? '显示全部' : '隐藏'" placement="top" style="float: right;">
  138. <el-button size="mini" circle icon="el-icon-search" @click="showListD()" />
  139. </el-tooltip>
  140. <el-table border v-if="showProd!=null" :data="showProd" size="small" style="width: 100%;margin-top: 20px" >
  141. <el-table-column label="商品图片" width="150" align="center">
  142. <template slot-scope="scope">
  143. <img :src="scope.row.imgUrl" style="height: 80px">
  144. </template>
  145. </el-table-column>
  146. <el-table-column label="商品编码" width="300" align="center">
  147. <template slot-scope="scope">
  148. <p>{{scope.row.barCode}}</p>
  149. </template>
  150. </el-table-column>
  151. <el-table-column label="仓库代码" width="300" align="center">
  152. <template slot-scope="scope">
  153. <p>{{scope.row.warehouseCode}}</p>
  154. </template>
  155. </el-table-column>
  156. <el-table-column label="商品名称" width="300" align="center">
  157. <template slot-scope="scope">
  158. <p>{{scope.row.productName}}</p>
  159. </template>
  160. </el-table-column>
  161. <el-table-column label="单价" width="240" align="center">
  162. <template slot-scope="scope">
  163. <p>¥{{scope.row.price.toFixed(2)}}</p>
  164. </template>
  165. </el-table-column>
  166. <el-table-column label="市场价" width="240" align="center">
  167. <template slot-scope="scope">
  168. {{scope.row.otPrice}}
  169. </template>
  170. </el-table-column>
  171. </el-table>
  172. <div style="float: right;margin: 20px" v-if="item.totalPrice!=null">
  173. 合计:<span class="color-danger">¥{{item.totalPrice.toFixed(2)}}</span>
  174. </div>
  175. </div>
  176. <div class="contentx" v-if="item!=null" style="padding-bottom: 70px;">
  177. <div class="desct">
  178. 费用信息
  179. </div>
  180. <el-tooltip class="item" effect="dark" :content="showList ? '显示全部' : '隐藏'" placement="top" style="float: right;">
  181. <el-button size="mini" circle icon="el-icon-search" @click="showListD()" />
  182. </el-tooltip>
  183. <el-descriptions :column="3" border >
  184. <el-descriptions-item label="商品合计" ><span v-if="item!=null">{{item.totalPrice}}</span></el-descriptions-item>
  185. <el-descriptions-item label="应付金额"><span v-if="item.totalPrice!=null">{{item.totalPrice}}</span></el-descriptions-item>
  186. <!-- <el-descriptions-item label="运费"><span v-if="item.payDelivery!=null">{{item.payDelivery}}</span></el-descriptions-item>-->
  187. <el-descriptions-item label="运费"><span v-if="item.payDelivery!=null">{{item.payPostage}}</span></el-descriptions-item>
  188. <el-descriptions-item label="优惠券" ><span v-if="item.discountMoney!=null"/>{{item.discountMoney}}</el-descriptions-item>
  189. <el-descriptions-item label="积分抵扣" > <span v-if="item!=null">{{item.payIntegral}}</span> </el-descriptions-item>
  190. <el-descriptions-item label="实付金额" > <span v-if="item!=null">{{item.payMoney}}</span> </el-descriptions-item>
  191. <el-descriptions-item label="代收金额" > <span v-if="item!=null">{{item.payRemain}}</span> </el-descriptions-item>
  192. <el-descriptions-item label="服务费" > <span v-if="item!=null">{{0.00}}</span> </el-descriptions-item>
  193. </el-descriptions>
  194. <div style="float: right;margin: 20px" v-if="item.totalPrice!=null">
  195. 合计:<span class="color-danger">¥{{item.totalPrice.toFixed(2)}}</span>
  196. </div>
  197. </div>
  198. <div class="contentx" v-if="payments!=null" style="padding-bottom: 70px;">
  199. <div class="desct">
  200. 支付信息
  201. </div>
  202. <el-table
  203. border
  204. :data="payments"
  205. size="small"
  206. style="width: 100%;margin-top: 20px" >
  207. <el-table-column label="支付单号" align="center" prop="payCode" width="120px" />
  208. <el-table-column label="支付金额" align="center" prop="payMoney" />
  209. <el-table-column label="类型" align="center" prop="payTypeCode" />
  210. <el-table-column label="交易单号" align="center" prop="bankTransactionId" />
  211. <el-table-column label="银行单号" align="center" prop="bankSerialNo" />
  212. <el-table-column label="创建时间" align="center" prop="createTime" />
  213. <el-table-column label="支付时间" align="center" prop="payTime" />
  214. </el-table>
  215. </div>
  216. <div class="contentx" v-if="logs!=null" style="padding-bottom: 70px;">
  217. <div class="desct">
  218. 操作信息
  219. </div>
  220. <el-table style="margin-top: 20px;width: 100%"
  221. ref="orderHistoryTable"
  222. :data="logs" border>
  223. <el-table-column label="操作时间" width="160" align="center">
  224. <template slot-scope="scope">
  225. {{scope.row.changeTime}}
  226. </template>
  227. </el-table-column>
  228. <el-table-column label="备注" align="center">
  229. <template slot-scope="scope">
  230. {{scope.row.changeMessage}}
  231. </template>
  232. </el-table-column>
  233. </el-table>
  234. </div>
  235. <div class="contentx" v-if="tuiMoneyLogs!=null" style="padding-bottom: 70px;">
  236. <div class="desct">
  237. 分佣信息
  238. </div>
  239. <el-table
  240. border
  241. :data="tuiMoneyLogs"
  242. size="small"
  243. style="width: 100%;margin-top: 20px" >
  244. <el-table-column label="公司名称" align="center" prop="companyName" width="120px" />
  245. <el-table-column label="金额" align="center" prop="money" />
  246. <el-table-column label="余额" align="center" prop="balance" />
  247. <el-table-column label="创建时间" align="center" prop="createTime" />
  248. <el-table-column label="备注" align="center" prop="remark" />
  249. </el-table>
  250. </div>
  251. <el-dialog :title="edit.title" :visible.sync="edit.open" width="600px" append-to-body>
  252. <el-form ref="editForm" :model="editForm" :rules="editRules" label-width="100px">
  253. <el-form-item label="订单状态" prop="status" >
  254. <el-select v-model="editForm.status" placeholder="请选择状态" clearable size="small" filterable>
  255. <el-option
  256. v-for="dict in orderOptions "
  257. :key="dict.dictValue"
  258. :label="dict.dictLabel"
  259. :value="dict.dictValue"
  260. />
  261. </el-select>
  262. </el-form-item>
  263. <el-form-item label="物流状态" prop="deliveryStatus" >
  264. <el-select v-model="editForm.deliveryStatus" placeholder="请选择物流状态" clearable size="small" filterable>
  265. <el-option
  266. v-for="dict in deliveryStatusOptions "
  267. :key="dict.dictValue"
  268. :label="dict.dictLabel"
  269. :value="dict.dictValue"
  270. />
  271. </el-select>
  272. </el-form-item>
  273. <el-form-item label="物流跟踪状态" prop="deliveryType" >
  274. <el-select v-model="editForm.deliveryType" placeholder="请选择状态" clearable size="small" filterable>
  275. <el-option
  276. v-for="dict in deliveryTypeOptions "
  277. :key="dict.dictValue"
  278. :label="dict.dictLabel"
  279. :value="dict.dictValue"
  280. />
  281. </el-select>
  282. </el-form-item>
  283. <el-form-item label="详情地址" prop="userAddress" >
  284. <el-input v-model="editForm.userAddress" placeholder="请输入" />
  285. </el-form-item>
  286. <el-form-item label="备注" prop="remark" >
  287. <el-input v-model="editForm.remark" placeholder="请输入备注" />
  288. </el-form-item>
  289. </el-form>
  290. <div slot="footer" class="dialog-footer">
  291. <el-button type="primary" @click="submitEditForm">确 定</el-button>
  292. </div>
  293. </el-dialog>
  294. <el-dialog :title="erpDialog.title" :visible.sync="erpDialog.open" width="600px" append-to-body>
  295. <div v-if="order!=null&&order.extendOrderId!=null&&order.status==1" v-hasPermi="['store:storeOrder:updateExpress']" >
  296. <el-button size="mini" @click="updateExpress()" >同步物流发货</el-button>
  297. </div>
  298. <div class="table-layout" v-if="erpOrder!=null">
  299. <el-row>
  300. <el-col :span="6" class="table-cell-title">订单编号</el-col>
  301. <el-col :span="6" class="table-cell-title">是否代收</el-col>
  302. <el-col :span="6" class="table-cell-title">快递编号</el-col>
  303. <el-col :span="6" class="table-cell-title">快递名称</el-col>
  304. </el-row>
  305. <el-row>
  306. <el-col :span="6" class="table-cell">
  307. {{erpOrder.code}}
  308. </el-col>
  309. <el-col :span="6" class="table-cell">
  310. {{erpOrder.cod?'是':'否'}}
  311. </el-col>
  312. <el-col :span="6" class="table-cell">
  313. {{erpOrder.express_code}}
  314. </el-col>
  315. <el-col :span="6" class="table-cell">
  316. {{erpOrder.express_name}}
  317. </el-col>
  318. </el-row>
  319. <el-row>
  320. <el-col :span="6" class="table-cell-title">收货人</el-col>
  321. <el-col :span="6" class="table-cell-title">电话</el-col>
  322. <el-col :span="6" class="table-cell-title">地址</el-col>
  323. <el-col :span="6" class="table-cell-title">运单号</el-col>
  324. </el-row>
  325. <el-row>
  326. <el-col :span="6" class="table-cell">
  327. {{erpOrder.receiver_name}}
  328. </el-col>
  329. <el-col :span="6" class="table-cell">
  330. {{erpOrder.receiver_mobile}}
  331. </el-col>
  332. <el-col :span="6" class="table-cell">
  333. {{erpOrder.receiver_address}}
  334. </el-col>
  335. <el-col :span="6" class="table-cell">
  336. {{erpOrder.deliverys!=null&&erpOrder.deliverys.length>0?erpOrder.deliverys[0].mail_no:''}}
  337. </el-col>
  338. </el-row>
  339. </div>
  340. </el-dialog>
  341. <el-dialog :title="editDy.title" :visible.sync="editDy.open" width="600px" append-to-body>
  342. <el-form ref="editDyForm" :model="editDyForm" :rules="editDyRules" label-width="100px">
  343. <div v-hasPermi="['his:liveOrder:updateErpOrder']" style="margin-bottom: 20px;" >
  344. <el-button size="mini" @click="updateErpOrder" >同步物流单号信息</el-button>
  345. </div>
  346. <el-form-item label="物流公司" prop="deliveryCode" >
  347. <el-select style="width:220px" v-model="editDyForm.deliveryCode" placeholder="请选择" clearable size="small">
  348. <el-option key="SF" label="顺丰" value="SF" />
  349. <el-option key="EMS" label="邮政" value="EMS" />
  350. <el-option key="ZTO" label="中通" value="ZTO" />
  351. <el-option key="STO" label="申通" value="STO" />
  352. <el-option key="JD" label="京东" value="JD" />
  353. <el-option key="DBL" label="德邦" value="DBL" />
  354. <el-option key="JTSD" label="极兔" value="JTSD" />
  355. <el-option key="YD" label="韵达" value="YD" />
  356. <el-option key="YTO" label="圆通" value="YTO" />
  357. </el-select>
  358. </el-form-item>
  359. <el-form-item label="物流单号" prop="deliverySn" >
  360. <el-input v-model="editDyForm.deliverySn" placeholder="请输入物流单号" />
  361. </el-form-item>
  362. </el-form>
  363. <div slot="footer" class="dialog-footer">
  364. <el-button type="primary" @click="submitEditDyForm">确 定</el-button>
  365. <el-button @click="editDy.open = false">取 消</el-button>
  366. </div>
  367. </el-dialog>
  368. <el-dialog :title="expressDialog.title" :visible.sync="expressDialog.open" width="600px" append-to-body>
  369. <div v-hasPermi="['his:storeOrder:syncExpress']" >
  370. <el-button size="mini" @click="syncExpress()" >同步快递鸟物流状态</el-button>
  371. </div>
  372. <el-table style="margin-top: 20px;width: 100%"
  373. ref="orderHistoryTable"
  374. :data="traces" border>
  375. <el-table-column label="操作时间" width="160" align="center">
  376. <template slot-scope="scope">
  377. {{scope.row.AcceptTime}}
  378. </template>
  379. </el-table-column>
  380. <el-table-column label="位置" align="center">
  381. <template slot-scope="scope">
  382. {{scope.row.Location}}
  383. </template>
  384. </el-table-column>
  385. <el-table-column label="描述" align="center">
  386. <template slot-scope="scope">
  387. {{scope.row.AcceptStation}}
  388. </template>
  389. </el-table-column>
  390. </el-table>
  391. </el-dialog>
  392. </div>
  393. </template>
  394. <script>
  395. import {
  396. getLiveOrder,
  397. syncExpress,
  398. updateLiveOrder,
  399. updateErp,
  400. getExpress,
  401. listOrderitem,
  402. tuiOrder,
  403. refundOrderMoney,
  404. editDeliveryId,
  405. finishOrder,
  406. getOrderExpress,
  407. getOrderPayments,
  408. getOrderLog,
  409. tuiMoneyLogs,
  410. updateExpress,
  411. createErpOrder, getEroOrder
  412. } from "@/api/live/liveOrder";
  413. import {getStoreOrderLive} from "@/api/store/storeOrder";
  414. export default {
  415. props:{
  416. data: [Object, Array, String, Number, Boolean],
  417. orderId: {
  418. type: [String, Number],
  419. default: null
  420. }
  421. },
  422. watch: {
  423. orderId: {
  424. immediate: true,
  425. handler(val) {
  426. if (val) {
  427. this.getDetails(val, null, null)
  428. }
  429. }
  430. }
  431. },
  432. data() {
  433. return {
  434. expressDialog:{
  435. title:"物流信息",
  436. open:false,
  437. },
  438. editDy:{
  439. title:"修改物流单号",
  440. open:false,
  441. },
  442. sourceOptions:[],
  443. payments: [],
  444. followDialogVisible:false,
  445. dialogVisible:false,
  446. total: 0,
  447. msgForm:{
  448. pageNum: 1,
  449. pageSize: 10,
  450. userId:null,
  451. followDoctorId:null,
  452. },
  453. editDyForm:{
  454. orderId:null,
  455. deliveryId:null,
  456. deliveryCode:null,
  457. },
  458. showList:true,
  459. edit:{
  460. title:"修改订单",
  461. open:false,
  462. },
  463. erpDialog:{
  464. title:"ERP订单信息",
  465. open:false,
  466. },
  467. show:{
  468. title:"问诊详情",
  469. open:false,
  470. },
  471. pack:{
  472. title:"套餐包",
  473. open:false,
  474. },
  475. followList:[],
  476. money:null,
  477. moneyVisible:false,
  478. rules:{},
  479. sendVisible:false,
  480. logs:[],
  481. pay:[],
  482. nickName:null,
  483. storeName:null,
  484. PayOptions:[],
  485. orderOptions:[],
  486. payStatusOptions:[],
  487. express:null,
  488. traces:[],
  489. msg:[],
  490. deliverList: [],
  491. sexOptions:[],
  492. refundOptions:[],
  493. channelOptions:[],
  494. qwSubjectOptions:[],
  495. tuiOptions:[],
  496. orOptions:[],
  497. storeOPtions:[],
  498. deliveryStatusOptions:[],
  499. deliveryPayStatusOptions:[],
  500. deliveryTypeOptions:[],
  501. orderTypeOptions:[],
  502. orderBuyTypeOptions:[],
  503. scheduleOptions:[],
  504. item:null,
  505. tuiMoneyLogs:[],
  506. erpOrder:null,
  507. prod:null,
  508. showProd:null,
  509. editForm:{
  510. orderId:null,
  511. status:null,
  512. userAddress:null,
  513. deliveryStatus:null,
  514. deliveryType:null,
  515. remark:"",
  516. },
  517. editDyRules:{
  518. deliverySn: [
  519. { required: true, message: "物流单号不能为空", trigger: "blur" }
  520. ],
  521. deliveryCode: [
  522. { required: true, message: "物流公司不能为空", trigger: "blur" }
  523. ],
  524. },
  525. editRules:{
  526. userAddress: [
  527. { required: true, message: "收货地址不能为空", trigger: "blur" }
  528. ],
  529. },
  530. mrules:{
  531. },
  532. form: {
  533. deliveryCode: null,
  534. deliveryName:null,
  535. deliverySn:null,
  536. orderId:null,
  537. }
  538. }
  539. },
  540. created() {
  541. this.getDicts("sys_store_pay_type").then(response => {
  542. this.PayOptions = response.data;
  543. });
  544. this.getDicts("sys_live_order_status").then(response => {
  545. this.orderOptions = response.data;
  546. });
  547. this.getDicts("sys_order_pay").then(response => {
  548. this.payStatusOptions = response.data;
  549. });
  550. this.getDicts("sys_order_source").then(response => {
  551. this.sourceOptions = response.data;
  552. });
  553. this.getDicts("sys_store_order_type").then(response => {
  554. this.orderTypeOptions = response.data;
  555. });
  556. this.getDicts("sys_store_order_buy_type").then(response => {
  557. this.orderBuyTypeOptions = response.data;
  558. });
  559. this.getDicts("sys_refund_status").then(response => {
  560. this.refundOptions = response.data;
  561. });
  562. this.getDicts("sys_store_channel").then(response => {
  563. this.channelOptions = response.data;
  564. });
  565. this.getDicts("sys_store_qw_subject").then(response => {
  566. this.qwSubjectOptions = response.data;
  567. });
  568. this.getDicts("sys_tui_money_status").then(response => {
  569. this.tuiOptions = response.data;
  570. });
  571. this.getDicts("sys_company_or").then(response => {
  572. this.orOptions = response.data;
  573. });
  574. this.getDicts("sys_patient_sex").then(response => {
  575. this.sexOptions = response.data;
  576. });
  577. this.getDicts("sys_store_delivery_pay_status").then(response => {
  578. this.deliveryPayStatusOptions = response.data;
  579. });
  580. this.getDicts("store_order_delivery_status").then(response => {
  581. this.deliveryStatusOptions = response.data;
  582. });
  583. this.getDicts("logistics_status").then(response => {
  584. this.deliveryTypeOptions = response.data;
  585. });
  586. },
  587. methods: {
  588. getOrderLive(orderId){
  589. getLiveOrder(orderId).then(response => {
  590. this.item=response.data
  591. });
  592. this.getlistOrderitem(orderId);
  593. },
  594. followMsg(row){
  595. const userId = this.item.userId;
  596. const followDoctorId =this.item.followDoctorId;
  597. const doctorName = this.item.doctorName;
  598. const patientName = this.item.patientName;
  599. setTimeout(() => {
  600. this.$refs.msgDetails.getDetails(userId,followDoctorId,doctorName,patientName);
  601. }, 500);
  602. this.dialogVisible = true;
  603. },
  604. msgDialogClose(){
  605. this.dialogVisible = false;
  606. },
  607. handlePhone(){
  608. const orderId = this.item.orderId;
  609. getOrderUserPhone(orderId).then(response =>{
  610. this.item.userPhone = response.userPhone;
  611. })
  612. },
  613. editDelivery(){
  614. this.editDy.open = true;
  615. this.editDyForm.orderId = this.item.orderId;
  616. },
  617. showListD(){
  618. if(this.showList){
  619. this.showProd=this.prod
  620. }else{
  621. this.showProd=[this.prod[0]]
  622. }
  623. this.showList=this.showList?false:true;
  624. },
  625. showExpress(){
  626. this.expressDialog.open=true;
  627. getExpress({
  628. orderId: this.item.orderId,
  629. deliverId: this.item.deliverySn,
  630. deliverSn: this.item.deliveryCode,
  631. }).then(response => {
  632. this.express = response.data;
  633. if(this.express!=null&&this.express.Traces!=null){
  634. this.traces=this.express.Traces
  635. }
  636. });
  637. },
  638. updateErpOrder(){
  639. var that=this;
  640. this.$confirm('确定同步物流单号信息吗', "警告", {
  641. confirmButtonText: "确定",
  642. cancelButtonText: "取消",
  643. type: "warning"
  644. }).then(function() {
  645. var data={orderId:that.item.orderId}
  646. return updateErp(data);
  647. }).then(() => {
  648. this.msgSuccess("操作成功");
  649. getLiveOrder(this.item.orderId).then(response => {
  650. this.item=response.data
  651. that.getlogList(this.item.orderId);
  652. that.$parent.$parent.getList();
  653. });
  654. this.editDy.open = false
  655. }).catch(function() {});
  656. },
  657. sendFollowMsg(){
  658. var that=this;
  659. this.$confirm('是否确认发送消息?', "警告", {
  660. confirmButtonText: "确定",
  661. cancelButtonText: "取消",
  662. type: "warning"
  663. }).then(function() {
  664. return sendMsg(that.item.orderId);
  665. }).then(() => {
  666. this.msgSuccess("操作成功");
  667. }).catch(function() {});
  668. },
  669. handleClose1(){
  670. this.dialogVisible=false;
  671. },
  672. handleClose2(){
  673. this.followDialogVisible=false;
  674. },
  675. follow(row){
  676. getMsgFollow(row).then(response => {
  677. if(response.data.formJson!=null&&response.data.formJson!=''&&response.data.writeStatus==1){
  678. this.messageFollowList=JSON.parse(response.data.formJson );
  679. this.followDialogVisible=true;
  680. }else{
  681. this.$message({
  682. message: '未填写随访单',
  683. type: 'info'
  684. });
  685. return
  686. }
  687. });
  688. },
  689. //修改订单状态
  690. submitEditForm(){
  691. var that = this;
  692. this.$refs["editForm"].validate(valid => {
  693. if (valid) {
  694. updateLiveOrder(this.editForm).then(response => {
  695. if (response.code === 200) {
  696. this.msgSuccess("操作成功");
  697. this.edit.open = false;
  698. // 刷新当前页面数据
  699. this.getDetails(this.item.orderId, this.nickName, this.storeName);
  700. }
  701. });
  702. }
  703. });
  704. },
  705. editOrder(){
  706. this.edit.open=true;
  707. this.editForm.orderId=this.item.orderId;
  708. this.editForm.remark=this.item.remark;
  709. this.editForm.userAddress = this.item.userAddress == null ? '' : this.item.userAddress.toString();
  710. this.editForm.status = this.item.status == null ? '' : this.item.status.toString();
  711. this.editForm.deliveryType = this.item.deliveryType == null ? '' : this.item.deliveryType.toString();
  712. this.editForm.deliveryStatus = this.item.deliveryStatus == null ? '' : this.item.deliveryStatus.toString();
  713. },
  714. updateExpress(){
  715. var that=this;
  716. this.$confirm('确定同步物流信息吗,同步后将自动发货?', "警告", {
  717. confirmButtonText: "确定",
  718. cancelButtonText: "取消",
  719. type: "warning"
  720. }).then(function() {
  721. var data=that.item.orderId
  722. return updateExpress(data);
  723. }).then(() => {
  724. this.msgSuccess("操作成功");
  725. getLiveOrder(this.item.orderId).then(response => {
  726. this.item=response.data
  727. that.getlogList(this.item.orderId);
  728. that.$parent.$parent.getList();
  729. });
  730. }).catch(function() {});
  731. },
  732. addErpOrder(){
  733. var that=this;
  734. this.$confirm('是否确认推送管易?', "警告", {
  735. confirmButtonText: "确定",
  736. cancelButtonText: "取消",
  737. type: "warning"
  738. }).then(function() {
  739. var data=that.item.orderCode
  740. return createErpOrder({
  741. orderCode: data
  742. });
  743. }).then(() => {
  744. this.msgSuccess("操作成功");
  745. getLiveOrder(this.item.orderId).then(response => {
  746. this.item=response.data
  747. that.getlogList(this.item.orderId);
  748. that.$parent.$parent.getList();
  749. });
  750. }).catch(function() {});
  751. },
  752. showErpOrder(){
  753. this.erpDialog.open=true;
  754. var data=this.item.extendOrderId;
  755. getEroOrder({
  756. extendOrderId: data
  757. }).then(response => {
  758. this.erp = response.data;
  759. if(response.data.orders!=null&&response.data.orders.length==1){
  760. this.erpOrder=response.data.orders[0]
  761. }
  762. });
  763. },
  764. editTuiMoney1(){
  765. var that=this;
  766. this.$confirm('是否解冻此订单推广佣金吗?', "警告", {
  767. confirmButtonText: "确定",
  768. cancelButtonText: "取消",
  769. type: "warning"
  770. }).then(function() {
  771. var data=that.item.orderId;
  772. return editTuiMoney(data);
  773. }).then(() => {
  774. this.msgSuccess("操作成功");
  775. getLiveOrder(this.item.orderId).then(response => {
  776. this.item=response.data
  777. that.getlogList(this.item.orderId);
  778. that.$parent.$parent.getList();
  779. });
  780. }).catch(function() {});
  781. },
  782. editTuiMoney2(){
  783. var that=this;
  784. this.$confirm('是否冻结此订单推广佣金吗?', "警告", {
  785. confirmButtonText: "确定",
  786. cancelButtonText: "取消",
  787. type: "warning"
  788. }).then(function() {
  789. var data=that.item.orderId;
  790. return editTuiMoney(data);
  791. }).then(() => {
  792. this.msgSuccess("操作成功");
  793. getLiveOrder(this.item.orderId).then(response => {
  794. this.item=response.data
  795. that.getlogList(this.item.orderId);
  796. that.$parent.$parent.getList();
  797. });
  798. }).catch(function() {});
  799. },
  800. returnCost(){
  801. var that=this;
  802. this.$confirm('是否退还此订单成本吗?', "警告", {
  803. confirmButtonText: "确定",
  804. cancelButtonText: "取消",
  805. type: "warning"
  806. }).then(function() {
  807. var data=that.item.orderId;
  808. return returnCost(data);
  809. }).then(() => {
  810. this.msgSuccess("操作成功");
  811. this.getDetails(this.item.orderId,null,null)
  812. }).catch(function() {});
  813. },
  814. moneyCancel(){
  815. this.money=null;
  816. this.moneyVisible=false;
  817. },
  818. refund(){
  819. var that=this;
  820. this.$confirm('是否确认申请退款?', "警告", {
  821. confirmButtonText: "确定",
  822. cancelButtonText: "取消",
  823. type: "warning"
  824. }).then(function() {
  825. var data={
  826. orderId:that.item.orderId
  827. }
  828. return refundOrderMoney(data);
  829. }).then(() => {
  830. this.msgSuccess("操作成功");
  831. getLiveOrder(this.item.orderId).then(response => {
  832. this.item = response.data;
  833. // this.getlogList(this.item.orderId);
  834. this.$parent.$parent.getList();
  835. });
  836. }).catch(function() {});
  837. },
  838. finishOrder(){
  839. var that=this;
  840. this.$confirm('是否确认客户已收货?', "警告", {
  841. confirmButtonText: "确定",
  842. cancelButtonText: "取消",
  843. type: "warning"
  844. }).then(function() {
  845. var data={
  846. orderId:that.item.orderId
  847. }
  848. return finishOrder(data);
  849. }).then(() => {
  850. this.msgSuccess("操作成功");
  851. getLiveOrder(this.item.orderId).then(response => {
  852. this.item = response.data;
  853. this.getlistOrderitem(this.item.orderId);
  854. this.$parent.$parent.getList();
  855. });
  856. }).catch(function() {});
  857. },
  858. syncExpress(){
  859. var that=this;
  860. this.$confirm('确定同步物流状态吗', "警告", {
  861. confirmButtonText: "确定",
  862. cancelButtonText: "取消",
  863. type: "warning"
  864. }).then(function() {
  865. var data=that.item.orderId
  866. return syncExpress(data);
  867. }).then(() => {
  868. this.msgSuccess("操作成功");
  869. this.expressDialog.open=false
  870. getLiveOrder(this.item.orderId).then(response => {
  871. this.item=response.data
  872. that.getlogList(this.item.orderId);
  873. that.$parent.$parent.getList();
  874. });
  875. }).catch(function() {});
  876. },
  877. getInquiryOrder(){
  878. this.show.open=true;
  879. setTimeout(() => {
  880. this.$refs.Details.getDetails(this.item.inquiryOrderId);
  881. }, 1);
  882. },
  883. getPackageOrder(){
  884. this.pack.open=true;
  885. console.log(this.item.packageOrderId)
  886. setTimeout(() => {
  887. this.$refs.packDetails.getDetails(this.item.packageOrderId);
  888. }, 1);
  889. },
  890. tuiOrder(){
  891. var that=this;
  892. this.$confirm('是否确认推送订单?', "警告", {
  893. confirmButtonText: "确定",
  894. cancelButtonText: "取消",
  895. type: "warning"
  896. }).then(function() {
  897. var data={
  898. orderId:that.item.orderId
  899. }
  900. return tuiOrder(data);
  901. }).then(() => {
  902. this.msgSuccess("操作成功");
  903. getLiveOrder(this.item.orderId).then(response => {
  904. this.item = response.data;
  905. this.getlogList(this.item.orderId);
  906. this.$parent.$parent.getList();
  907. });
  908. }).catch(function() {});
  909. },
  910. getDetails(orderId,nickName,storeName) {
  911. this.nickName=nickName;
  912. this.storeName=storeName;
  913. this.item=null;
  914. this.tuiMoneyLogs=null;
  915. getLiveOrder(orderId).then(response => {
  916. this.item = response.data;
  917. console.log(this.tuiMoneyLogs)
  918. this.tuiMoneyLogs = response.tuiMoneyLogs;
  919. this.msgForm.userId=response.data.userId;
  920. this.msgForm.followDoctorId=response.data.followDoctorId;
  921. this.getlistOrderitem(this.item.orderId);
  922. getOrderExpress(orderId).then(response => {
  923. this.deliverList = response.data;
  924. console.log(this.deliverList)
  925. });
  926. getOrderPayments(this.item.orderId).then(response => {
  927. this.payments = response.payments;
  928. });
  929. getOrderLog(this.item.orderId).then(response => {
  930. this.logs = response.logs
  931. });
  932. tuiMoneyLogs(this.item.orderId).then(response => {
  933. this.tuiMoneyLogs = response.data
  934. })
  935. });
  936. },
  937. getOrder(){
  938. getLiveOrder(this.item.orderId).then(response => {
  939. this.item = response.data;
  940. this.getlistOrderitem(this.item.orderId);
  941. });
  942. },
  943. submitEditDyForm(){
  944. this.$refs["editDyForm"].validate(valid => {
  945. if (valid) {
  946. editDeliveryId({orderId: this.editDyForm.orderId,
  947. deliverSn: this.editDyForm.deliveryCode,
  948. deliverId: this.editDyForm.deliverySn,type: 1}).then(response => {
  949. if (response.code === 200) {
  950. this.msgSuccess("操作成功");
  951. this.editDy.open = false;
  952. // 刷新当前页面数据
  953. this.getDetails(this.item.orderId, this.nickName, this.storeName);
  954. }
  955. })
  956. }
  957. });
  958. },
  959. getlistOrderitem(orderId){
  960. this.prod = null
  961. this.showProd=[]
  962. this.showList = true
  963. listOrderitem(orderId).then(response => {
  964. this.prod = response.rows;
  965. if (this.prod.length > 0) {
  966. this.showProd=[this.prod[0]];
  967. }
  968. });
  969. },
  970. // getlogList(orderId){
  971. // logList(orderId).then(response => {
  972. // this.logs = response.rows;
  973. // });
  974. // },
  975. // getPayment(orderId){
  976. // payment(orderId).then(response => {
  977. // console.log(response)
  978. // this.pay = response.data;
  979. // });
  980. // }
  981. }
  982. }
  983. </script>
  984. <style scoped>
  985. .content{
  986. height: 100%;
  987. background-color: #fff;
  988. padding: 0px 20px;
  989. }
  990. .contentx{
  991. height: 100%;
  992. background-color: #fff;
  993. padding: 0px 20px 20px;
  994. margin: 20px;
  995. }
  996. .el-descriptions-item__label.is-bordered-label{
  997. font-weight: normal;
  998. }
  999. .el-descriptions-item__content {
  1000. max-width: 150px;
  1001. min-width: 100px;
  1002. }
  1003. .desct{
  1004. padding-top: 20px;
  1005. padding-bottom: 20px;
  1006. color: #524b4a;
  1007. font-weight: bold;
  1008. }
  1009. .order-content{
  1010. margin: 10px;
  1011. }
  1012. .operate-container {
  1013. background: #F2F6FC;
  1014. height: 60px;
  1015. margin: -20px -20px 0;
  1016. line-height: 60px;
  1017. }
  1018. .operate-button-container {
  1019. float: right;
  1020. margin-right: 20px
  1021. }
  1022. </style>
  1023. <style scoped>
  1024. .chat-records {
  1025. overflow-y: auto;
  1026. }
  1027. .timestamp {
  1028. font-size: 12px;
  1029. color: #A9A9A9;
  1030. }
  1031. .chat-record {
  1032. margin: 10px;
  1033. flex-direction: column;
  1034. align-items: flex-start;
  1035. }
  1036. .sent {
  1037. background-color: #fbfdff;
  1038. color: #000839;
  1039. }
  1040. .sent .timestamp {
  1041. float: right;
  1042. }
  1043. .right{
  1044. float: right;
  1045. }
  1046. .received {
  1047. background-color: #fbfdff;
  1048. color: #000000;
  1049. }
  1050. .el-descriptions-item__content {
  1051. max-width: 150px;
  1052. min-width: 100px;
  1053. }
  1054. .order-content{
  1055. margin: 10px;
  1056. }
  1057. .operate-container {
  1058. background: #F2F6FC;
  1059. height: 60px;
  1060. margin: -20px -20px 0;
  1061. line-height: 60px;
  1062. }
  1063. .operate-button-container {
  1064. float: right;
  1065. margin-right: 20px
  1066. }
  1067. </style>