edit.vue 18 KB

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