edit.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473
  1. <template>
  2. <div>
  3. <el-button :disabled="data.status !=='新建' && data.status !=='提交'" type="primary" size="mini" @click="onShow(drawer = true)">编辑</el-button>
  4. <el-drawer
  5. :visible.sync="drawer"
  6. direction="rtl"
  7. append-to-body
  8. size="80%">
  9. <div slot="title">
  10. <div class="flex-align-center">
  11. <p><span style="font-size:14px">订单合计:</span><span style="color:red;font-size:16px;"><b>¥&nbsp;{{tool.formatAmount(data.amount,2)}}</b></span></p>
  12. <!-- <label style="font-size:14px;margin-left:10px" for="">备注:</label>
  13. <input class="order__note__input" v-model="defaultData.remarks" type="text" placeholder="请输入订单备注"> -->
  14. </div>
  15. </div>
  16. <div class="drawer__panel">
  17. <div>
  18. <div class="mt-10">
  19. <p class="normal-title inline-16">选择账户</p>
  20. <el-popover
  21. placement="bottom"
  22. title="选择账户"
  23. trigger="click"
  24. v-model="visible3">
  25. <el-table
  26. :data="accountlist"
  27. style="width: 100%"
  28. size="mini">
  29. <el-table-column
  30. prop="accountname"
  31. label="账户名称"
  32. width="120">
  33. </el-table-column>
  34. <el-table-column
  35. prop="balance"
  36. label="账户余额"
  37. width="120">
  38. <template slot-scope="scope">
  39. ¥{{tool.formatAmount(scope.row.balance,2)}}
  40. </template>
  41. </el-table-column>
  42. <el-table-column
  43. label="操作"
  44. width="90">
  45. <template slot-scope="scope">
  46. <el-button type="text" @click="(defaultData.accountclass = scope.row,visible3 = false)" size="mini">选 择</el-button>
  47. </template>
  48. </el-table-column>
  49. </el-table>
  50. <el-button slot="reference" type="text" size="mini">选择其他账户</el-button>
  51. </el-popover>
  52. </div>
  53. <div class="reveive__panel normal-margin">
  54. <p><b>¥{{tool.formatAmount(defaultData.accountclass.balance?defaultData.accountclass.balance:0,2)}}</b></p>
  55. <small>{{defaultData.accountclass.accountname?defaultData.accountclass.accountname:'未选择账户'}}</small>
  56. <div v-if="(data.type === '标准订单' || data.type === '特殊订单') && isusedrebate === 1">
  57. <el-checkbox v-model="checked" :true-label="1" :false-label="0">使用返利金</el-checkbox>
  58. <div v-if="checked" class="flex-align-center">
  59. <p class="inline-16"><b>返利金余额:{{tool.formatAmount(rebateAccount[0]?rebateAccount[0].balance:0,2)}}</b></p>
  60. <el-input class="inline-16" size="mini" style="width:150px" v-model="rebateamount" @blur="useRebate" placeholder="输入使用金额"></el-input>
  61. <small>(返利金最高使用比例{{data.order_rebate_userate}}%)</small>
  62. </div>
  63. </div>
  64. </div>
  65. </div>
  66. <div class="flex-align-center normal-margin">
  67. <div style="flex:1;margin-right:10px">
  68. <div class="mt-10">
  69. <p class="normal-title inline-16">选择财务信息</p>
  70. <el-popover
  71. placement="bottom"
  72. title="选择财务信息"
  73. trigger="click"
  74. v-model="visible2">
  75. <el-table
  76. :data="financiallist"
  77. style="width: 100%"
  78. size="mini">
  79. <el-table-column
  80. prop="enterprisename"
  81. label="公司抬头"
  82. width="120">
  83. </el-table-column>
  84. <el-table-column
  85. prop="address"
  86. label="开票地址"
  87. width="120">
  88. </el-table-column>
  89. <el-table-column
  90. prop="bank"
  91. label="开户行"
  92. width="120">
  93. </el-table-column>
  94. <el-table-column
  95. prop="bankcardno"
  96. label="开户账号"
  97. width="120">
  98. </el-table-column>
  99. <el-table-column
  100. label="操作"
  101. width="90">
  102. <template slot-scope="scope">
  103. <el-button type="text" @click="(defaultData.fin_info = scope.row,visible2 = false)" size="mini">选 择</el-button>
  104. </template>
  105. </el-table-column>
  106. </el-table>
  107. <el-button slot="reference" type="text" size="mini">选择其他</el-button>
  108. </el-popover>
  109. </div>
  110. <div class="reveive__panel normal-margin">
  111. <p><small>抬头:&nbsp;</small><span class="inline-16"><b>{{defaultData.fin_info.enterprisename}}</b></span></p>
  112. <div class="flex-align-center">
  113. <p class="inline-16"><small>开票地址:&nbsp;</small>{{defaultData.fin_info.address?defaultData.fin_info.address:'--'}}</p>
  114. <p><small>开户行:&nbsp;</small> {{defaultData.fin_info.bank}} &emsp;<small>开户账号:&nbsp;</small> {{defaultData.fin_info.bankcardno}}</p>
  115. </div>
  116. </div>
  117. </div>
  118. <div style="flex:1;">
  119. <div class="mt-10">
  120. <p class="normal-title inline-16">收货信息</p>
  121. <el-popover
  122. placement="bottom"
  123. title="选择地址"
  124. trigger="click"
  125. v-model="visible">
  126. <el-table
  127. :data="receiveAddresslist"
  128. style="width: 100%"
  129. size="mini">
  130. <el-table-column
  131. prop="name"
  132. label="联系人"
  133. width="90">
  134. </el-table-column>
  135. <el-table-column
  136. prop="phonenumber"
  137. label="电话"
  138. width="120">
  139. </el-table-column>
  140. <el-table-column
  141. label="地址"
  142. width="360">
  143. <template slot-scope="scope">
  144. {{scope.row.province}}{{scope.row.city}}{{scope.row.county}}{{scope.row.address}}
  145. </template>
  146. </el-table-column>
  147. <el-table-column
  148. label="操作"
  149. width="90">
  150. <template slot-scope="scope">
  151. <el-button type="text" @click="(defaultData.re_info = scope.row,visible = false)" size="mini">选 择</el-button>
  152. </template>
  153. </el-table-column>
  154. </el-table>
  155. <el-button slot="reference" type="text" size="mini">选择其他地址</el-button>
  156. </el-popover>
  157. </div>
  158. <div class="reveive__panel normal-margin">
  159. <p><span class="inline-16"><b>{{defaultData.re_info.name}}</b></span><small>{{defaultData.re_info.phonenumber}}</small></p>
  160. <small>{{defaultData.re_info.province}}{{defaultData.re_info.city}}{{defaultData.re_info.county}}{{defaultData.re_info.address?defaultData.re_info.address:'--'}}</small>
  161. </div>
  162. </div>
  163. </div>
  164. <div class="mt-10">
  165. <p class="normal-title inline-16">领域明细</p>
  166. </div>
  167. <div class="mt-10 flex-align-center">
  168. <div v-for="item in data.subvalues" :key="item.index" :style="defaultData.tradefieldmx === item?{background:'#d9ecff'}:{background:'#fff'}" class="reveive__panel normal-margin inline-16" @click="defaultData.tradefieldmx = item">
  169. <p>{{item}}</p>
  170. </div>
  171. </div>
  172. <div class="mt-10">
  173. <p class="normal-title inline-16">寄付方式</p>
  174. </div>
  175. <div class="mt-10 flex-align-center">
  176. <div :style="defaultData.freightstatus === '到付'?{background:'#d9ecff'}:{background:'#fff'}" class="reveive__panel normal-margin inline-16" @click="defaultData.freightstatus = '到付'">
  177. <p>到付</p>
  178. </div>
  179. <div :style="defaultData.freightstatus === '预付'?{background:'#d9ecff'}:{background:'#fff'}" class="reveive__panel normal-margin" @click="defaultData.freightstatus = '预付'">
  180. <p>预付</p>
  181. </div>
  182. </div>
  183. <div class="mt-10">
  184. <p class="normal-title inline-16">订单备注</p>
  185. </div>
  186. <div class="mt-10">
  187. <el-input v-model="defaultData.remarks" type="textarea" :autosize="{minRows:5,maxRows:10}" placeholder="请输入订单备注"></el-input>
  188. </div>
  189. <div>
  190. <div class="mt-10">
  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="data.status === '提交'?'':'edit'" @onSuccess="onDelSuccess"></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. export default {
  216. props:['data'],
  217. components:{
  218. previewImage,
  219. productList,
  220. addProduct
  221. },
  222. data () {
  223. return {
  224. visible:false,
  225. visible1:false,
  226. visible2:false,
  227. visible3:false,
  228. drawer:false,
  229. receiveAddresslist:[],
  230. accountlist:[],
  231. logisticcomlist:[],
  232. financiallist:[],
  233. defaultData:{
  234. re_info:{},
  235. logist_info:{},
  236. fin_info:{},
  237. accountclass:{},
  238. account_index:0,
  239. remarks:this.data.remarks,
  240. freightstatus:'到付',
  241. tradefieldmx:''
  242. },
  243. agnetInfo:{},
  244. total:0,
  245. setcol:24,
  246. checked:0,
  247. rebateamount:null,
  248. isusedrebate:0,
  249. rebateAccount:[]
  250. }
  251. },
  252. methods:{
  253. onShow () {
  254. this.queryAgentiInfo()
  255. this.defaultData.freightstatus = this.data.freightstatus
  256. this.defaultData.tradefieldmx = this.data.tradefieldmx
  257. },
  258. async queryAgentiInfo () {
  259. const res = await this.$api.requested({
  260. "id": "20221022165203",
  261. "content": {
  262. sys_enterpriseid:this.data.sys_enterpriseid
  263. }
  264. })
  265. this.agnetInfo = res.data
  266. this.receiveAddress()
  267. this.queryAccount()
  268. this.queryLogisticcom()
  269. this.queryFinancial()
  270. this.queryUsedrebate()
  271. this.checked = this.data.rebate_used
  272. this.rebateamount = this.data.rebateamount
  273. },
  274. // 收货信息:合作企业联系人
  275. async receiveAddress () {
  276. const res = await this.$api.requested({
  277. "id": "20221009155803",
  278. "content": {
  279. "sys_enterpriseid":this.agnetInfo.sys_enterpriseid,
  280. "where":{
  281. "condition":"",
  282. "workaddress":0
  283. }
  284. }
  285. })
  286. this.receiveAddresslist = res.data
  287. this.defaultData.re_info = res.data[0]
  288. },
  289. // 账号信息
  290. async queryAccount () {
  291. const res = await this.$api.requested({
  292. "id": "20221008134803",
  293. "content": {
  294. "pageNumber": 1,
  295. "pageSize": 100,
  296. "where":{
  297. "isused":1
  298. }
  299. }
  300. })
  301. this.accountlist = res.data.filter(e=>{
  302. return e.isrebate !== 1
  303. })
  304. this.rebateAccount = res.data.filter(e=>{
  305. return e.isrebate === 1
  306. })
  307. this.defaultData.accountclass = this.data.accountclass
  308. },
  309. // 物流企业
  310. async queryLogisticcom () {
  311. const res = await this.$api.requested({
  312. "id": "20221121135804",
  313. "content": {
  314. "pageNumber": 1,
  315. "pageSize": 100
  316. }
  317. })
  318. this.logisticcomlist = res.data
  319. this.defaultData.logist_info = this.data.logiscomp
  320. },
  321. // 财务信息
  322. async queryFinancial () {
  323. const res = await this.$api.requested({
  324. "id": "20221013160602",
  325. "content": {
  326. "sys_enterpriseid":this.agnetInfo.sys_enterpriseid,
  327. "pageNumber": 1,
  328. "pageSize": 100
  329. }
  330. })
  331. this.financiallist = res.data
  332. this.defaultData.fin_info = this.data.finance
  333. },
  334. async onSubmit() {
  335. const res = await this.$api.requested({
  336. "id": 20221108111402,
  337. "content": {
  338. "sa_orderid": this.$route.query.id,
  339. "sys_enterpriseid": this.data.sys_enterpriseid, //订货企业id
  340. "sa_accountclassid": this.defaultData.accountclass.sa_accountclassid, //营销账户类型ID
  341. "sa_brandid": this.data.sa_brandid, //品牌ID
  342. "sa_contractid":this.data.sa_contractid, //合同ID,标准订单不传
  343. "sa_projectid": this.data.sa_projectid, //工程项目表ID,标准订单不传
  344. "sys_enterprise_financeid": this.defaultData.fin_info.sys_enterprise_financeid, //合作企业财务信息ID(开票信息)
  345. "sa_logiscompid": this.defaultData.logist_info.sa_logiscompid, //物流公司档案ID
  346. "rec_contactsid": this.defaultData.re_info.contactsid, //合作企业联系人表ID(收货信息)
  347. "type": this.data.type, //订单类型
  348. "typemx":this.data.typemx, //明细分类,可选
  349. "remarks": this.defaultData.remarks, //可选
  350. // "saler_hrid":this.data.saler_hrid//销售人员hrid,业务员hrid
  351. "pay_enterpriseid":this.data.pay_enterpriseid,
  352. "tradefield":this.data.tradefield,
  353. "freightstatus":this.defaultData.freightstatus
  354. },
  355. })
  356. this.tool.showMessage(res,()=>{
  357. console.log(this.data)
  358. this.$emit('onSuccess')
  359. this.useRebate()
  360. this.drawer = false
  361. })
  362. },
  363. onDelSuccess () {
  364. this.$refs.addpro.listData()
  365. },
  366. addMoreProduct () {
  367. this.setcol === 12?this.setcol = 24 : this.setcol = 12
  368. },
  369. // 订单添加商品
  370. async onConfirm (data) {
  371. const res = await this.$api.requested({
  372. "id": 20221109093602,
  373. "content": {
  374. "sa_orderid": this.$route.query.id, //订单ID
  375. "sys_enterpriseid": this.data.sys_enterpriseid, //企业ID
  376. "type": "标准订单", //订单类型
  377. "items": data.map(e=>{
  378. return {
  379. sa_orderitemsid:0,
  380. itemid:e.itemid,
  381. qty:e.orderminqty,
  382. needdate:e.deliverydate
  383. }
  384. })
  385. },
  386. })
  387. this.tool.showMessage(res,()=>{
  388. this.setcol = 24
  389. this.$refs['prolist'].listData()
  390. })
  391. },
  392. async useRebate () {
  393. if (this.rebateamount == null) return this.$message({
  394. message:"返利金不能为空",
  395. type:'error'
  396. })
  397. const res = await this.$api.requested({
  398. "id": 20230218225002,
  399. "content": {
  400. "sa_orderid": this.data.sa_orderid, //订单金额
  401. "isused": this.checked, //是否使用
  402. "rebateamount": this.rebateamount //返利金使用金额
  403. },
  404. })
  405. if (res.code === 0) this.$message({
  406. message:`使用返利金失败!${res.msg}`,
  407. type:'error'
  408. })
  409. },
  410. // 查询站点是否使用返利金
  411. async queryUsedrebate () {
  412. const res = await this.$api.requested({
  413. "classname": "webmanage.site.site",
  414. "method": "querySite_Parameter",
  415. "content": {
  416. }
  417. })
  418. this.isusedrebate = res.data.order_rebate_used
  419. }
  420. },
  421. mounted () {
  422. }
  423. }
  424. </script>
  425. <style>
  426. </style>
  427. <style scoped>
  428. .reveive__panel{
  429. font-size: 14px;
  430. line-height: 30px;
  431. padding: 10px;
  432. background: #d9ecff;
  433. border: 1px dashed #0676e7;
  434. cursor: pointer;
  435. }
  436. .account__panel small,.reveive__panel small{
  437. color:#666
  438. }
  439. .account__panel{
  440. width: calc(25% - 26px);
  441. padding: 10px;
  442. margin-bottom:10px;
  443. border: 1px dashed #666;
  444. }
  445. .act{
  446. background: #d9ecff;
  447. border: 1px dashed #0676e7;
  448. }
  449. .image {
  450. width:40px;height:40px;margin:0px auto;
  451. }
  452. .order__note__input{
  453. border: none;
  454. outline: none;
  455. /* margin-left: 10px; */
  456. /* border-bottom: 1px solid #f1f2f3; */
  457. flex:1
  458. }
  459. </style>