You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

370 lines
17 KiB

2 years ago
  1. <template>
  2. <el-row>
  3. <el-row>
  4. <!--新增/编辑界面 MoOrder mo_order-->
  5. <el-form :model="editForm" label-width="120px" :rules="editFormRules" ref="editFormRef">
  6. <el-descriptions :column="3" :size="size" border>
  7. <el-descriptions-item label="订单编号">{{editForm.id}}</el-descriptions-item>
  8. <el-descriptions-item label="下单机构" :span="2">{{editForm.obranchName}}</el-descriptions-item>
  9. <el-descriptions-item label="折前总价">{{editForm.moFinalFee}}</el-descriptions-item>
  10. <el-descriptions-item label="折扣率">{{editForm.odisRate}}%</el-descriptions-item>
  11. <el-descriptions-item label="折后总价">{{editForm.ofinalFee}}</el-descriptions-item>
  12. <el-descriptions-item label="状态"><mdp-select item-code="mo_order_status" v-model="editForm.status" /></el-descriptions-item>
  13. <el-descriptions-item label="操作类型"><mdp-select item-code="mo_ooper" v-model="editForm.ooper" /></el-descriptions-item>
  14. </el-descriptions>
  15. <el-tabs v-model="activePane">
  16. <el-tab-pane label="订单信息" name="1" >
  17. <el-row>
  18. <el-col :span="8">
  19. <el-form-item label="订单状态" prop="status">
  20. <mdp-select item-code="mo_order_status" v-model="editForm.status" @change="editSomeFields(editForm,'status',$event)"/>
  21. </el-form-item>
  22. </el-col>
  23. <el-col :span="8">
  24. <el-form-item label="订单来源" prop="osource">
  25. <mdp-select item-code="osource" v-model="editForm.osource" @change="editSomeFields(editForm,'osource',$event)"/>
  26. </el-form-item>
  27. </el-col>
  28. <el-col :span="8">
  29. <el-form-item label="创建时间" prop="ctime">
  30. <el-date-picker type="date" placeholder="选择日期" v-model="editForm.ctime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd"></el-date-picker>
  31. </el-form-item>
  32. </el-col>
  33. </el-row>
  34. <el-row>
  35. <el-col :span="8">
  36. <el-form-item label="购买人数" prop="ousers">
  37. <el-input-number v-model="editForm.ousers" :min="0" :max="200" @change="editSomeFields(editForm,'ousers',$event)"></el-input-number>
  38. </el-form-item>
  39. </el-col>
  40. <el-col :span="8">
  41. <el-form-item label="购买天数" prop="odays">
  42. <el-input-number v-model="editForm.odays" :min="0" :max="200" @change="editSomeFields(editForm,'odays',$event)"></el-input-number>
  43. </el-form-item>
  44. </el-col>
  45. <el-col :span="8">
  46. <el-form-item label="购买模块数" prop="omodules">
  47. <el-input-number v-model="editForm.omodules" :min="0" :max="200" @change="editSomeFields(editForm,'omodules',$event)"></el-input-number>
  48. </el-form-item>
  49. </el-col>
  50. </el-row>
  51. <el-row>
  52. <el-col :span="8">
  53. <el-form-item label="购买天数" prop="odays">
  54. <el-input-number v-model="editForm.odays" :min="0" :max="200" @change="editSomeFields(editForm,'odays',$event)"></el-input-number>
  55. </el-form-item>
  56. </el-col>
  57. <el-col :span="8">
  58. <el-form-item label="开始日期" prop="startTime">
  59. <el-date-picker type="date" placeholder="选择日期" v-model="editForm.startTime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd" @change="editSomeFields(editForm,'startTime',$event)"></el-date-picker>
  60. </el-form-item>
  61. </el-col>
  62. <el-col :span="8">
  63. <el-form-item label="截止日期" prop="endTime">
  64. <el-date-picker type="date" placeholder="选择日期" v-model="editForm.endTime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd" @change="editSomeFields(editForm,'endTime',$event)"></el-date-picker>
  65. </el-form-item>
  66. </el-col>
  67. </el-row>
  68. <el-row>
  69. <el-col :span="8">
  70. <el-form-item label="完成时间" prop="finishTime">
  71. <el-date-picker type="date" placeholder="选择日期" v-model="editForm.finishTime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd"></el-date-picker>
  72. </el-form-item>
  73. </el-col>
  74. <el-col :span="8">
  75. <el-form-item label="关闭时间" prop="closeTime">
  76. <el-date-picker type="date" placeholder="选择日期" v-model="editForm.closeTime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd"></el-date-picker>
  77. </el-form-item>
  78. </el-col>
  79. <el-col :span="8">
  80. <el-form-item label="结算时间" prop="setTime">
  81. <el-date-picker type="date" placeholder="选择日期" v-model="editForm.setTime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd"></el-date-picker>
  82. </el-form-item>
  83. </el-col>
  84. </el-row>
  85. <el-row>
  86. <el-form-item label="备注" prop="remark">
  87. <el-input type="textarea" :rows="2" v-model="editForm.remark" placeholder="备注" :maxlength="255" @change="editSomeFields(editForm,'remark',$event)"></el-input>
  88. </el-form-item>
  89. </el-row>
  90. </el-tab-pane>
  91. <el-tab-pane label="客户信息" name="2" >
  92. <el-form-item label="下单机构号码" prop="obranchId">
  93. <el-input v-model="editForm.obranchId" placeholder="下单机构号码" :maxlength="50"></el-input>
  94. </el-form-item>
  95. <el-form-item label="下单用户编号" prop="ouserid">
  96. <el-input v-model="editForm.ouserid" placeholder="下单用户编号" :maxlength="50"></el-input>
  97. </el-form-item>
  98. <el-form-item label="下单用户名称" prop="ousername" >
  99. <el-input v-model="editForm.ousername" placeholder="下单用户名称" :maxlength="255" @change="editSomeFields(editForm,'ousername',$event)"></el-input>
  100. </el-form-item>
  101. <el-form-item label="客户联系电话" prop="custPhone">
  102. <el-input v-model="editForm.custPhone" placeholder="客户联系电话" :maxlength="50" @change="editSomeFields(editForm,'custPhone',$event)"></el-input>
  103. </el-form-item>
  104. <el-form-item label="客户联系地址" prop="custAddress" >
  105. <el-input v-model="editForm.custAddress" placeholder="客户联系地址" :maxlength="255" @change="editSomeFields(editForm,'custAddress',$event)"></el-input>
  106. </el-form-item>
  107. <el-form-item label="下单机构名称" prop="obranchName">
  108. <el-input v-model="editForm.obranchName" placeholder="下单机构名称" :maxlength="255"></el-input>
  109. </el-form-item>
  110. <el-form-item label="第三方账号编号" prop="topenId">
  111. <el-input v-model="editForm.topenId" placeholder="第三方账号编号" :maxlength="50"></el-input>
  112. </el-form-item>
  113. </el-tab-pane>
  114. <el-tab-pane label="销售经理" name="31" >
  115. <el-form-item label="销售经理编号" prop="saleUserid" >
  116. <el-input v-model="editForm.saleUserid" placeholder="销售经理编号" :maxlength="50" @change="editSomeFields(editForm,'saleUserid',$event)"></el-input>
  117. </el-form-item>
  118. <el-form-item label="销售经理名称" prop="saleUsername" >
  119. <el-input v-model="editForm.saleUsername" placeholder="销售经理名称" :maxlength="255" @change="editSomeFields(editForm,'saleUsername',$event)"></el-input>
  120. </el-form-item>
  121. </el-tab-pane>
  122. <el-tab-pane label="付款信息" name="3" >
  123. <el-row :gutter="5">
  124. <el-col :span="12">
  125. <el-form-item label="支付方式" prop="payType">
  126. <mdp-select item-code="tpAppPayType" v-model="editForm.payType"/>
  127. </el-form-item>
  128. <el-form-item label="应付金额" prop="ofinalFee" >
  129. <el-input :disabled="true" v-model="editForm.ofinalFee" placeholder="最终订单价格、最终付款金额" :maxlength="10"></el-input>
  130. </el-form-item>
  131. <div v-if="editForm.status>2">
  132. <el-form-item label="付款时间" prop="payTime" >
  133. <el-date-picker :disabled="true" type="date" placeholder="选择日期" v-model="editForm.payTime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd"></el-date-picker>
  134. </el-form-item>
  135. <el-form-item label="付款确认时间" prop="payCtime" >
  136. <el-date-picker :disabled="true" type="date" placeholder="选择日期" v-model="editForm.payCtime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd"></el-date-picker>
  137. </el-form-item>
  138. <el-form-item label="付款订单号" prop="prepayId">
  139. <el-input :disabled="true" v-model="editForm.prepayId" placeholder="付款订单号(第三方返回)" :maxlength="50" @change="editSomeFields(editForm,'prepayId',$event)"></el-input>
  140. </el-form-item>
  141. <el-form-item label="实际付款金额" prop="payAt" >
  142. <el-input :disabled="true" v-model="editForm.payAt" placeholder="最终付款金额-客户付款后回填" :maxlength="20" @change="editSomeFields(editForm,'payAt',$event)"></el-input>
  143. </el-form-item>
  144. </div>
  145. </el-col>
  146. <el-col v-if="editForm.payType=='1'" :span="12">
  147. <el-button v-if="!codeUrl" @click="createOrder">创建微信收款码</el-button>
  148. <qriously v-else :value="codeUrl" :size="300" />
  149. </el-col>
  150. <el-col v-else-if="editForm.payType=='2'" :span="12">
  151. <el-button @click="createOrder">创建支付宝收款码</el-button>
  152. </el-col>
  153. </el-row>
  154. </el-tab-pane>
  155. <el-tab-pane label="收款信息" name="32" >
  156. <el-form-item label="收款银行编号 " prop="pbankId" >
  157. <el-input v-model="editForm.pbankId" placeholder="收款银行编号(支付方式为3时必填)" :maxlength="50" @change="editSomeFields(editForm,'pbankId',$event)"></el-input>
  158. </el-form-item>
  159. <el-form-item label="收款银行名称 " prop="pbankName">
  160. <el-input v-model="editForm.pbankName" placeholder="收款银行名称(支付方式为3时必填)" :maxlength="255" @change="editSomeFields(editForm,'pbankName',$event)"></el-input>
  161. </el-form-item>
  162. <el-form-item label="收款银行卡号 " prop="pbankCardNo">
  163. <el-input v-model="editForm.pbankCardNo" placeholder="收款银行卡号(支付方式为3时必填)" :maxlength="50" @change="editSomeFields(editForm,'pbankCardNo',$event)"></el-input>
  164. </el-form-item>
  165. <el-form-item label="收款账户姓名 " prop="pbankUsername">
  166. <el-input v-model="editForm.pbankUsername" placeholder="收款账户姓名(支付方式为3时必填)" :maxlength="255" @change="editSomeFields(editForm,'pbankUsername',$event)"></el-input>
  167. </el-form-item>
  168. </el-tab-pane>
  169. <el-tab-pane label="折扣信息" name="4" >
  170. <el-form-item label="最新折扣率" prop="odisRate">
  171. <el-input style="width:30%;" type="number" v-model="odisRate" title="折扣率0.01-100之间,9.9折填99,9折填90,最小填0.01折"></el-input> %
  172. <el-button @click="odisRateConfirm">确认修改折扣率</el-button>
  173. </el-form-item>
  174. </el-tab-pane>
  175. <el-tab-pane label="产品列表" name="5" >
  176. <mo-order-module-index :mo-order="editForm"></mo-order-module-index>
  177. </el-tab-pane>
  178. </el-tabs>
  179. </el-form>
  180. </el-row>
  181. <slot name="footer" :page="this">
  182. <el-row v-if="showBtn!==false" style="float:right;" class="footer">
  183. <el-button @click.native="close">关闭</el-button>
  184. <el-button v-if="currOpType=='add'" v-loading="load.edit" type="primary" @click.native="saveSubmit" :disabled="disabledJudge('addBtn') || !checkBtnQx('addBtn',menuDefId) || load.edit">提交</el-button>
  185. </el-row>
  186. </slot>
  187. </el-row>
  188. </template>
  189. <script>
  190. import util from '@/components/mdp-ui/js/util';//全局公共库
  191. import config from "@/api/mdp_pub/mdp_config"; //全局公共库import
  192. import * as MoOrderApi from '@/api/mdp/mo/moOrder';
  193. import { mapGetters } from 'vuex'
  194. import { MdpFormMixin } from '@/components/mdp-ui/mixin/MdpFormMixin.js';
  195. import {createOrder} from '@/api/mdp/sys/order'
  196. import {aliPay, weixinPay, checkWxPayStatus} from '@/api/mdp/pay/pay'
  197. import MoOrderModuleIndex from '../moOrderModule/Index.vue';
  198. export default {
  199. name:'moOrderForm',
  200. mixins:[MdpFormMixin],
  201. components: {
  202. MoOrderModuleIndex
  203. },
  204. computed: {
  205. },
  206. props:{
  207. },
  208. watch: {
  209. },
  210. data() {
  211. return {
  212. menuDefId:'',//menu_def.id 菜单表菜单编号,用于按钮权限判断
  213. pkNames:["id"],//表格主键的java属性名称,驼峰命名,默认为id,支持多主键
  214. currOpType:'add',//表单 add、edit,所有按钮可动、detail-只看不能操作
  215. editFormRules: {
  216. id:[
  217. //{ required: true, message: '此项必填', trigger: 'change' },
  218. //{ min: 1,max: 200, message: '长度在1到200之间', trigger: 'change'}
  219. ]
  220. },
  221. editForm: {
  222. id:'',name:'',obranchId:'',ouserid:'',ousername:'',moFinalFee:'',status:'',sstatus:'',ctime:'',payTime:'',payCtime:'',moOrginFee:'',ousers:'',ocates:'',omodules:'',poid:'',startTime:'',endTime:'',payType:'',payId:'',prepayId:'',topenId:'',pbankId:'',pbankName:'',pbankCardNo:'',pbankUsername:'',remark:'',finishTime:'',closeTime:'',setTime:'',odays:'',ofinalFee:'',odisRate:'',othFee:'',otype:'',osource:'',memType:'',atype:'',saleUserid:'',saleUsername:'',custPhone:'',custAddress:'',payAt:'',obranchName:'',ooper:'',tranId:'',invoice:'',invoiceTime:'',invoiceId:''
  223. },
  224. odisRate:null,
  225. codeUrl:null,
  226. timer:0,
  227. //增删改查(含批量)接口
  228. apis:{
  229. queryById: MoOrderApi.queryMoOrderById,
  230. add: MoOrderApi.addMoOrder,
  231. edit: MoOrderApi.editMoOrder,
  232. editSomeFields: MoOrderApi.editSomeFieldsMoOrder
  233. }
  234. }
  235. },
  236. methods: {
  237. //由组件扩展添加其它的初始页面的逻辑(mounted+onOpen都会调用此函数,建议只添加公共逻辑)
  238. initCurrData(){
  239. },
  240. /**
  241. * 检查参数是否满足调用后台接口的条件
  242. * @returns true / false
  243. */
  244. preParamCheck(params){
  245. return true;
  246. },
  247. /**
  248. * 设置某个关键词按钮输入框禁用 disabledRules['addBtn']=false
  249. * 判断某个对象是否可编辑 this.disabledJudge('addBtn')==false
  250. */
  251. disabledRulesInit(disabledRules){
  252. },
  253. /**
  254. * 对修改的字段进行判断返回false ,将取消更新数据库,由组件扩展
  255. * @param {*} row 当前选中的行
  256. * @param {*} fieldName 修改的字段名
  257. * @param {*} $event 修改后的值
  258. * @param {*} params 将要提交服务器的参数
  259. * @returns true/false 返回false ,将取消更新数据库
  260. */
  261. editSomeFieldsCheck(row,fieldName,$event,params){
  262. params[fieldName]=$event
  263. return true;
  264. },
  265. odisRateConfirm(){
  266. var params={$pks:[this.editForm.id],odisRate:this.odisRate}
  267. this.apis.editSomeFields(params).then(res=>{
  268. var tips = res.data.tips
  269. if(tips.isOk){
  270. Object.assign(this.editForm,res.data.data)
  271. }
  272. this.$notify({ message: tips.msg, type: tips.isOk?'success':'error' });
  273. })
  274. },
  275. createOrder() {
  276. let orderId = this.editForm.id;
  277. if(this.editForm.payType == '2') {
  278. this.toAliPay(orderId);
  279. return;
  280. }else if(this.editForm.payType == '1') {
  281. this.toWeixinPay(orderId);
  282. return;
  283. }else{
  284. this.$notify({ message: "请选则支付方式", type:'error' });
  285. return;
  286. }
  287. },
  288. toAliPay(orderId) {
  289. let params = {
  290. id: orderId,
  291. otype: 1,
  292. returnUrl: `${window.location.protocol+"//"+window.location.host}/${process.env.CONTEXT}/${process.env.VERSION}/#/my/order/paySuccess`
  293. }
  294. aliPay(params).then(res => {
  295. if(res.data.tips.isOk) {
  296. let routerData = this.$router.resolve({path:'/my/order/alipay',query: {htmlStr: res.data.data.htmlStr}})
  297. // 打开新页面
  298. window.open(routerData.href, '_blank')
  299. }else {
  300. this.$notify.error(res.data.tips.msg);
  301. }
  302. }).finally(() => {
  303. setTimeout(() => {
  304. this.load.add = false;
  305. }, 2000);
  306. })
  307. },
  308. toWeixinPay(orderId) {
  309. let params = {
  310. id: orderId,
  311. otype: 1,
  312. returnUrl: ""
  313. }
  314. weixinPay(params).then(res => {
  315. if(res.data.tips.isOk) {
  316. this.codeUrl = res.data.data.codeUrl;
  317. this.timer = setInterval(() => {
  318. this.queryOrderStatus(orderId,res.data.data.payId)
  319. }, 3000)
  320. }else {
  321. this.$notify.error(res.data.tips.msg);
  322. }
  323. }).finally(() => {
  324. setTimeout(() => {
  325. this.load.add = false;
  326. }, 2000);
  327. })
  328. },
  329. //查询订单支付状态
  330. queryOrderStatus(orderId,payId) {
  331. console.log("查询订单");
  332. checkWxPayStatus({'orderId': orderId, "otype": "1","payId":payId}).then(res => {
  333. if(res.data.tips.isOk) {
  334. this.$router.push({path:'/my/order/paySuccess', query:{total_amount: this.editForm.ofinalFee, out_trade_no: orderId,pay_id:payId}});
  335. clearInterval(this.timer);
  336. }else {
  337. }
  338. }).finally(() => {
  339. })
  340. },
  341. },
  342. mounted() {
  343. }
  344. }
  345. </script>
  346. <style scoped>
  347. </style>