edit.vue 21 KB

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