edit.vue 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444
  1. <template>
  2. <div>
  3. <!-- <el-button :disabled="data.status !=='新建'" type="primary" size="mini" @click="onShow(drawer = true)">编 辑</el-button> -->
  4. <el-button type="primary" size="mini" @click="onShow(drawer = true)">编 辑</el-button>
  5. <el-drawer
  6. :visible.sync="drawer"
  7. direction="rtl"
  8. append-to-body
  9. size="80%">
  10. <div slot="title">
  11. <div class="flex-align-center">
  12. <p><span style="font-size:14px">订单合计:</span><span style="color:red;font-size:16px;"><b>¥&nbsp;{{tool.formatAmount(data.amount,2)}}</b></span></p>
  13. <!-- <label style="font-size:14px;margin-left:10px" for="">备注:</label>
  14. <input class="order__note__input" v-model="defaultData.remarks" type="text" placeholder="请输入订单备注"> -->
  15. <p>运费:{{data.amount > data.freefreightamount >= 0?'当前订单免运费':`订单满${data.freefreightamount}元免运费,当前还差${data.freefreightamount - data.amount}元`}}</p>
  16. </div>
  17. </div>
  18. <div class="drawer__panel">
  19. <!-- 项目订单显示信息 -->
  20. <div v-if="data.type === '项目订单'" class="reveive__panel normal-margin flex-align-center">
  21. <p class="inline-16"><small>项目信息:</small>{{data.projectname}}</p>
  22. <p class="inline-16"><small>合同信息:</small>{{data.contract_title}}</p>
  23. <p class="inline-16"><small>领域:</small>{{data.tradefield}}</p>
  24. <p class="inline-16"><small>品牌:</small>{{data.brandname}}</p>
  25. </div>
  26. <div>
  27. <div class="mt-10">
  28. <p class="normal-title inline-16">支付信息</p>
  29. </div>
  30. <div class="reveive__panel normal-margin">
  31. <p class="flex-align-center"><small>结算企业:&nbsp;</small><b>{{defaultData.finance.enterprisename}}</b>&nbsp;<financeEnterprise v-if="data.type !== '项目订单'" @select="onSelect"></financeEnterprise></p>
  32. <div class="flex-align-center">
  33. <p class="inline-16"><small>账户余额:&nbsp;</small><b>¥{{tool.formatAmount(defaultData.accountclass.balance?defaultData.accountclass.balance:0,2)}}</b></p>
  34. <p class="inline-16"><small>账户名称:&nbsp;</small>{{defaultData.accountclass.accountname?defaultData.accountclass.accountname:'未选择账户'}}</p>
  35. <p><small>本单金额:&nbsp;</small>{{tool.formatAmount(data.amount - rebateamount,2)}}</p>
  36. </div>
  37. <div v-if="(data.type === '标准订单' || data.type === '特殊订单') && isusedrebate === 1">
  38. <el-checkbox v-model="checked" :true-label="1" :false-label="0">使用返利金</el-checkbox>
  39. <div v-if="checked" class="flex-align-center">
  40. <p class="inline-16"><b>返利金余额:{{tool.formatAmount(defaultData.rebatebalance,2)}}</b></p>
  41. <el-input class="inline-16" size="mini" style="width:150px" v-model="rebateamount" @blur="useRebate" placeholder="输入使用金额"></el-input>
  42. <small>(返利金最高使用比例{{data.order_rebate_userate}}%,本单上限:{{tool.formatAmount(data.amount * data.order_rebate_userate / 100,2)}})</small>
  43. </div>
  44. </div>
  45. </div>
  46. </div>
  47. <div class="flex-align-center normal-margin">
  48. <div style="flex:1; margin-right:10px">
  49. <div class="mt-10">
  50. <p class="normal-title inline-16">选择财务信息</p>
  51. <el-popover
  52. placement="bottom"
  53. title="选择财务信息"
  54. trigger="click"
  55. v-model="visible2">
  56. <addAmountInfo style="text-align:right" :data="{sys_enterpriseid:data.sys_enterpriseid}" @onSuccess="thisDetail().queryMainData().then(() => {setDefaultData()})"/>
  57. <el-table
  58. :data="financiallist"
  59. style="width: 100%"
  60. size="mini">
  61. <el-table-column
  62. prop="enterprisename"
  63. label="公司抬头"
  64. width="120">
  65. </el-table-column>
  66. <el-table-column
  67. prop="address"
  68. label="开票地址"
  69. width="120">
  70. </el-table-column>
  71. <el-table-column
  72. prop="bank"
  73. label="开户行"
  74. width="120">
  75. </el-table-column>
  76. <el-table-column
  77. prop="bankcardno"
  78. label="开户账号"
  79. width="120">
  80. </el-table-column>
  81. <el-table-column
  82. label="操作"
  83. width="90">
  84. <template slot-scope="scope">
  85. <el-button type="text" @click="(defaultData.fin_info = scope.row,visible2 = false)" size="mini">选 择</el-button>
  86. </template>
  87. </el-table-column>
  88. </el-table>
  89. <el-button slot="reference" type="text" size="mini">选择其他</el-button>
  90. </el-popover>
  91. </div>
  92. <div class="reveive__panel normal-margin">
  93. <p><small>抬头:&nbsp;</small><span class="inline-16"><b>{{defaultData.fin_info.enterprisename}}</b></span></p>
  94. <div class="flex-align-center">
  95. <p class="inline-16"><small>开票地址:&nbsp;</small>{{defaultData.fin_info.address?defaultData.fin_info.address:'--'}}</p>
  96. <p><small>开户行:&nbsp;</small> {{defaultData.fin_info.bank}} &emsp;<small>开户账号:&nbsp;</small> {{defaultData.fin_info.bankcardno}}</p>
  97. </div>
  98. </div>
  99. </div>
  100. <div style="flex:1;">
  101. <div class="mt-10">
  102. <p class="normal-title inline-16">收货信息</p>
  103. <el-popover
  104. placement="bottom"
  105. title="选择地址"
  106. trigger="click"
  107. v-model="visible">
  108. <addAddressInfo style="text-align:right" @onAddSuccess="receiveAddress()" :mainData="{sys_enterpriseid:data.sys_enterpriseid}"/>
  109. <el-table
  110. :data="receiveAddresslist"
  111. style="width: 100%"
  112. size="mini">
  113. <el-table-column
  114. prop="name"
  115. label="联系人"
  116. width="90">
  117. </el-table-column>
  118. <el-table-column
  119. prop="phonenumber"
  120. label="电话"
  121. width="120">
  122. </el-table-column>
  123. <el-table-column
  124. label="地址"
  125. width="360">
  126. <template slot-scope="scope">
  127. {{scope.row.province}}{{scope.row.city}}{{scope.row.county}}{{scope.row.address}}
  128. </template>
  129. </el-table-column>
  130. <el-table-column
  131. label="操作"
  132. width="90">
  133. <template slot-scope="scope">
  134. <el-button type="text" @click="(defaultData.re_info = scope.row,visible = false)" size="mini">选 择</el-button>
  135. </template>
  136. </el-table-column>
  137. </el-table>
  138. <el-button slot="reference" type="text" size="mini">选择其他地址</el-button>
  139. </el-popover>
  140. </div>
  141. <div class="reveive__panel normal-margin">
  142. <p><span class="inline-16"><b>{{defaultData.re_info.name}}</b></span><small>{{defaultData.re_info.phonenumber}}</small></p>
  143. <small>{{defaultData.re_info.province?defaultData.re_info.province:'--'}}{{defaultData.re_info.city}}{{defaultData.re_info.county}}{{defaultData.re_info.address?defaultData.re_info.address:''}}</small>
  144. </div>
  145. </div>
  146. </div>
  147. <div class="normal-margin flex-align-center">
  148. <div class="inline-16">
  149. <small><b>回签单</b>&nbsp;</small>
  150. <el-radio-group v-model="signbackstatus">
  151. <el-radio label="不需要">不需要</el-radio>
  152. <el-radio label="纸质件">纸质件</el-radio>
  153. <el-radio label="扫描件">扫描件</el-radio>
  154. </el-radio-group>
  155. </div>
  156. <div style="margin-left:20px">
  157. <small><b>销售类别:</b>&nbsp;</small>
  158. <el-select v-model="saletype" size="mini" placeholder="请选择">
  159. <el-option
  160. v-for="item in saleroptions"
  161. :key="item.value"
  162. :label="item.value"
  163. :value="item.value">
  164. </el-option>
  165. </el-select>
  166. </div>
  167. </div>
  168. <div class="normal-margin">
  169. <p class="normal-title mt-10 inline-16">订单备注</p>
  170. <el-input size="mini" class="order__note__input" type="textarea" v-model="defaultData.remarks" :autosize="{minRows:5}" placeholder="请输入订单备注"></el-input>
  171. </div>
  172. <div class="mt-10">
  173. <div>
  174. <p class="normal-title inline-16">订单产品</p>
  175. <el-button type="text" size="mini" @click="addMoreProduct">{{setcol === 12?'关闭选择':'添加产品'}}</el-button>
  176. </div>
  177. <el-row :gutter="10">
  178. <el-col :span="setcol">
  179. <product-list ref="prolist" :data="data" :type="'edit'" @onSuccess="onEditSuccess"></product-list>
  180. </el-col>
  181. <el-col :span="24 - setcol">
  182. <add-product ref="addpro" :data="data" @onConfirm="onConfirm"></add-product>
  183. </el-col>
  184. </el-row>
  185. </div>
  186. </div>
  187. <div class="fixed__btn__panel">
  188. <el-button size="small" @click="drawer = false" class="normal-btn-width">取 消</el-button>
  189. <el-button size="small" type="primary" @click="onSubmit" class="normal-btn-width">保存修改</el-button>
  190. </div>
  191. </el-drawer>
  192. </div>
  193. </template>
  194. <script>
  195. import previewImage from '@/components/previewImage/index.vue'
  196. import productList from './productlist.vue'
  197. import addProduct from '@/template/orderCanUseProduct/index.vue'
  198. import financeEnterprise from '@/template/orderCanUseFinance/index.vue'
  199. import addAmountInfo from '@/components/financialInfo/modules/add'
  200. import addAddressInfo from '@/HManagement/marketing2/agent/details/modules/address/add'
  201. export default {
  202. props:['data'],
  203. components:{
  204. previewImage,
  205. productList,
  206. addProduct,
  207. financeEnterprise,
  208. addAmountInfo,
  209. addAddressInfo
  210. },
  211. inject:['thisDetail'],
  212. data () {
  213. return {
  214. checked:0,
  215. visible:false,
  216. visible1:false,
  217. visible2:false,
  218. visible3:false,
  219. drawer:false,
  220. receiveAddresslist:[],
  221. accountlist:[],
  222. rebateAccount:[],
  223. logisticcomlist:[],
  224. financiallist:[],
  225. saleroptions:[],
  226. defaultData:{
  227. re_info:{},
  228. logist_info:{},
  229. fin_info:{},
  230. finance:{},
  231. accountclass:{},
  232. account_index:0,
  233. remarks:this.data.remarks
  234. },
  235. total:0,
  236. setcol:24,
  237. rebateamount:null,
  238. isusedrebate:0,
  239. signbackstatus:'不需要',
  240. saletype:""
  241. }
  242. },
  243. methods:{
  244. onShow () {
  245. this.initPage()
  246. },
  247. async initPage () {
  248. this.setDefaultData()
  249. this.receiveAddress()
  250. this.queryUsedrebate()
  251. this.selectOptions()
  252. this.checked = this.data.rebate_used
  253. this.rebateamount = this.data.rebateamount
  254. },
  255. // 收货信息:合作企业联系人
  256. async receiveAddress (fn) {
  257. const res = await this.$api.requested({
  258. "id": "20230220002602",
  259. "content": {
  260. "pageSize":100,
  261. "where": {
  262. "condition": ""
  263. }
  264. },
  265. })
  266. this.receiveAddresslist = res.data
  267. },
  268. // 设置默认信息
  269. async setDefaultData () {
  270. this.defaultData.rebatebalance = this.data.rebatebalance
  271. this.defaultData.finance = this.data.finance
  272. this.defaultData.fin_info = this.data.finance
  273. this.defaultData.accountclass = this.data.accountclass
  274. this.defaultData.re_info = this.data.contacts
  275. this.financiallist = this.data.pay_finance
  276. this.saletype = this.data.saletype
  277. this.signbackstatus = this.data.signbackstatus
  278. },
  279. async onSubmit() {
  280. const res = await this.$api.requested({
  281. "id": 20221108111402,
  282. "content": {
  283. "sa_orderid": this.$route.query.id,
  284. "sys_enterpriseid": this.data.sys_enterpriseid, //订货企业id
  285. "sa_accountclassid": this.defaultData.accountclass.sa_accountclassid, //营销账户类型ID
  286. "sa_brandid": this.data.sa_brandid, //品牌ID
  287. "sa_contractid":this.data.sa_contractid, //合同ID,标准订单不传
  288. "sa_projectid": this.data.sa_projectid, //工程项目表ID,标准订单不传
  289. "sys_enterprise_financeid": this.defaultData.fin_info.sys_enterprise_financeid, //合作企业财务信息ID(开票信息)
  290. "sa_logiscompid": this.defaultData.logist_info.sa_logiscompid, //物流公司档案ID
  291. "rec_contactsid": this.defaultData.re_info.contactsid, //合作企业联系人表ID(收货信息)
  292. "type": this.data.type, //订单类型
  293. "typemx":this.data.typemx, //明细分类,可选
  294. "remarks": this.defaultData.remarks, //可选
  295. "saler_hrid":this.data.saler_hrid,//销售人员hrid,业务员hrid
  296. "signbackstatus":this.signbackstatus,
  297. "tradefieldmx":this.data.tradefieldmx,
  298. "pay_enterpriseid":this.data.pay_enterpriseid,
  299. "tradefield":this.data.tradefield,
  300. "saletype":this.saletype,
  301. "rebate_used":this.checked,//默认0,是否使用返利金
  302. "signbacknum":'',
  303. "sa_promotionid":this.data.sa_promotionid,
  304. "billdate":this.data.billdate
  305. },
  306. })
  307. this.tool.showMessage(res,()=>{
  308. this.$emit('onSuccess')
  309. if (this.data.type === '标准订单' || this.data.type === '特殊订单') {
  310. this.isusedrebate === 1?this.useRebate():""
  311. }
  312. this.drawer = false
  313. })
  314. },
  315. onEditSuccess () {
  316. this.$refs.addpro.listData()
  317. },
  318. addMoreProduct () {
  319. this.setcol === 12?this.setcol = 24 : this.setcol = 12
  320. },
  321. // 订单添加商品
  322. async onConfirm (data) {
  323. const res = await this.$api.requested({
  324. "id": 20221109093602,
  325. "content": {
  326. "sa_orderid": this.$route.query.id, //订单ID
  327. "sys_enterpriseid": this.data.sys_enterpriseid, //企业ID
  328. "type": "标准订单", //订单类型
  329. "items": data.map(e=>{
  330. return {
  331. sa_orderitemsid:0,
  332. itemid:e.itemid,
  333. qty:e.orderminqty,
  334. needdate:e.deliverydate
  335. }
  336. })
  337. },
  338. })
  339. this.tool.showMessage(res,()=>{
  340. this.setcol = 24
  341. this.$refs['prolist'].listData()
  342. this.$emit('onSuccess')
  343. })
  344. },
  345. async useRebate () {
  346. let that = this
  347. if (this.rebateamount > this.defaultData.rebatebalance ||this.rebateamount > (this.data.amount * this.data.order_rebate_userate / 100) ) return this.$message({
  348. message:`余额不足或已超过可用上限!`,
  349. type:function () {
  350. that.rebateamount = 0
  351. return 'error'
  352. }()
  353. })
  354. if (this.rebateamount == null) return this.$message({
  355. message:"返利金不能为空",
  356. type:'error'
  357. })
  358. const res = await this.$api.requested({
  359. "id": 20230218225002,
  360. "content": {
  361. "sa_orderid": this.data.sa_orderid, //订单金额
  362. "isused": this.checked, //是否使用
  363. "rebateamount": this.rebateamount //返利金使用金额
  364. },
  365. })
  366. if (res.code === 0) this.$message({
  367. message:`使用返利金失败!${res.msg}`,
  368. type:'error'
  369. })
  370. },
  371. // 查询站点是否使用返利金
  372. async queryUsedrebate () {
  373. const res = await this.$api.requested({
  374. "classname": "webmanage.site.site",
  375. "method": "querySite_Parameter",
  376. "content": {
  377. }
  378. })
  379. this.isusedrebate = res.data.order_rebate_used
  380. },
  381. // 选择结算企业
  382. onSelect (data) {
  383. this.defaultData.finance = data
  384. this.financiallist = data.finance
  385. data.finance.forEach(e => {
  386. if (e.isdefault === 1) {
  387. this.defaultData.fin_info = e
  388. } else {
  389. this.defaultData.fin_info = data.finance.length > 0 ?data.finance[0]:{}
  390. }
  391. });
  392. },
  393. async selectOptions () {
  394. const res = await this.$store.dispatch('optiontypeselect','saletype')
  395. this.saleroptions = res.data
  396. }
  397. },
  398. }
  399. </script>
  400. <style>
  401. </style>
  402. <style scoped>
  403. .reveive__panel{
  404. font-size: 16px;
  405. line-height: 30px;
  406. padding: 10px;
  407. background: #d9ecff;
  408. border: 1px dashed #0676e7;
  409. }
  410. .account__panel small,.reveive__panel small{
  411. color:#888
  412. }
  413. .account__panel{
  414. width: calc(25% - 26px);
  415. padding: 10px;
  416. margin-bottom:10px;
  417. border: 1px dashed #666;
  418. }
  419. .act{
  420. background: #d9ecff;
  421. border: 1px dashed #0676e7;
  422. }
  423. .image {
  424. width:40px;height:40px;margin:0px auto;
  425. }
  426. .order__note__input{
  427. border: none;
  428. outline: none;
  429. /* margin-left: 10px; */
  430. /* border-bottom: 1px solid #f1f2f3; */
  431. flex:1
  432. }
  433. </style>