dec.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552
  1. <template>
  2. <div v-loading="loading">
  3. <div class="white-box">
  4. <el-form ref="form" label-width="250px" class="form-page">
  5. <div class="hr-tip"><span>账号信息</span></div>
  6. <el-form-item label="会员编号">
  7. <el-input v-model="form.insertUserName"></el-input>
  8. </el-form-item>
  9. <el-form-item>
  10. <template slot="label">
  11. 实时报单级别
  12. </template>
  13. <el-select v-model="form.decLv" placeholder="请选择报单级别" @change="selectOne($event)">
  14. <el-option v-for="(item,index) in allDecLevel" :key="index" :label="item.LEVEL_NAME"
  15. :value="item.ID"></el-option>
  16. </el-select>
  17. </el-form-item>
  18. <el-form-item label="报单中心编号">
  19. <el-input v-model="form.decUserName"></el-input>
  20. </el-form-item>
  21. <el-form-item>
  22. <template slot="label">
  23. 报单方式二选一
  24. </template>
  25. <el-tabs type="border-card" v-model="decWay" style="position: relative;width: 600px;">
  26. <el-tab-pane name="1">
  27. <span slot="label">报单级别套餐</span>
  28. <el-table class="table-box" :data="_tableData" stripe style="width: 100%;" highlight-current-row @current-change="handleCurrentChange">
  29. <el-table-column
  30. type="index"
  31. width="50">
  32. </el-table-column>
  33. <el-table-column label=" " width="50">
  34. <template slot-scope="scope">
  35. <span class="el-checkbox__input" :class="{'is-checked':scope && scope.row && currentRow && scope.row.ID==currentRow.ID}">
  36. <span class="el-checkbox__inner">
  37. </span>
  38. <input type="checkbox" aria-hidden="false" class="el-checkbox__original" value="">
  39. </span>
  40. </template>
  41. </el-table-column>
  42. <el-table-column label="套餐名称" prop="PACKAGE_NAME">
  43. </el-table-column>
  44. <el-table-column label="套餐金额" prop="AMOUNT">
  45. </el-table-column>
  46. <el-table-column label="套餐PV" prop="PV">
  47. <template>
  48. </template>
  49. </el-table-column>
  50. <!--<el-table-column label="所属报单级别ID" prop="LEVEL_ID">-->
  51. <!--<template>-->
  52. <!--</template>-->
  53. <!--</el-table-column>-->
  54. <el-table-column label="所属报单级别" prop="LEVEL_NAME">
  55. <template>
  56. </template>
  57. </el-table-column>
  58. <el-table-column label="套餐内容" prop="PACKAGE_CONTENT">
  59. <template >
  60. </template>
  61. </el-table-column>
  62. </el-table>
  63. <!-- <el-form-item>
  64. <el-button type="primary" @click="onclock" :loading="submitButton">保存</el-button>
  65. </el-form-item>-->
  66. </el-tab-pane>
  67. <el-tab-pane label="商品报单" name="2">
  68. <el-table class="table-box" v-if="numList.length > 0" :data="tableDatas" stripe style="width: 100%;" highlight-current-row @selection-change="handleSelectionChange">
  69. <el-table-column
  70. type="selection"
  71. width="55">
  72. </el-table-column>
  73. <el-table-column label="商品名称" prop="GOODS_NAME">
  74. </el-table-column>
  75. <el-table-column label="商品编号" prop="GOODS_NO">
  76. </el-table-column>
  77. <el-table-column label="卖价" prop="SELL_PRICE">
  78. </el-table-column>
  79. <el-table-column label="PV价格" prop="PRICE_PV">
  80. </el-table-column>
  81. <el-table-column label="数量" width="150">
  82. <template slot-scope="scope">
  83. <el-input-number size="mini" v-model="numList[scope.$index]" :min="0" :max="Number(scope.row.STORE_NUMS)" @change="value=>{handleChange(value,scope.row.ID)}"></el-input-number>
  84. </template>
  85. <!-- <template slot-scope="scope">
  86. <el-input-number v-if="form.goodsId.some(item=>item==scope.row.ID)" v-model='scope.row.goodsNum' @change="value=>{handleChange(value,scope.row.ID)}" controls-position="right" style="width: 70px;" size="mini"></el-input-number>
  87. </template> -->
  88. </el-table-column>
  89. </el-table>
  90. <div class="white-box-footer flex">
  91. <el-button @click="getSum()">计算合计</el-button>
  92. <div class='flex data' style="flex:1;justify-content: flex-end;">
  93. <div style="margin-right:2rem">商品价格:¥{{sell_price_sum}}</div>
  94. <div>商品PV:¥{{price_pv_sum}}</div>
  95. </div>
  96. </div>
  97. </el-tab-pane>
  98. </el-tabs>
  99. </el-form-item>
  100. <div class="hr-tip"><span>网络信息</span></div>
  101. <el-form-item label="推荐人编号">
  102. <el-input v-model="form.recUserName" @change="handleChkRecUser">
  103. <template slot="append">【{{recRealName}}】</template>
  104. </el-input>
  105. </el-form-item>
  106. <el-form-item label="接点人编号">
  107. <el-input v-model="form.conUserName" @change="handleChkConUser">
  108. <template slot="append">【{{conRealName}}】</template>
  109. </el-input>
  110. </el-form-item>
  111. <el-form-item label="安置区位">
  112. <el-radio-group v-model="form.location">
  113. <el-radio-button :label="1">左区</el-radio-button>
  114. <el-radio-button :label="2">中区</el-radio-button>
  115. <el-radio-button :label="3">右区</el-radio-button>
  116. </el-radio-group>
  117. </el-form-item>
  118. <div class="hr-tip"><span>个人资料</span></div>
  119. <el-form-item>
  120. <template slot="label">
  121. 会员姓名
  122. </template>
  123. <el-input v-model="form.realName"></el-input>
  124. </el-form-item>
  125. <el-form-item>
  126. <template slot="label">
  127. 会员手机
  128. </template>
  129. <el-input v-model="form.mobile"></el-input>
  130. </el-form-item>
  131. <el-form-item>
  132. <template slot="label">
  133. 身份证号
  134. </template>
  135. <el-input v-model="form.insertUserIdCard" maxlength="18"></el-input>
  136. </el-form-item>
  137. <el-form-item>
  138. <template slot="label">
  139. 登录密码
  140. </template>
  141. <el-input v-model="form.password" maxlength="32" placeholder="请输入密码"></el-input>
  142. </el-form-item>
  143. <el-form-item>
  144. <template slot="label">
  145. 支付密码
  146. </template>
  147. <el-input v-model="form.payPassword" maxlength="32" placeholder="请输入支付密码"></el-input>
  148. </el-form-item>
  149. <el-form-item>
  150. <template slot="label">
  151. 收货人
  152. </template>
  153. <el-input v-model="form.consignee"></el-input>
  154. </el-form-item>
  155. <el-form-item>
  156. <template slot="label">
  157. 收货人手机
  158. </template>
  159. <el-input v-model="form.acceptMobile"></el-input>
  160. </el-form-item>
  161. <el-form-item>
  162. <template slot="label">
  163. 收货方式
  164. </template>
  165. <el-radio-group v-model="form.way" @change="wayChange">
  166. <el-radio label="express">快递</el-radio>
  167. <el-radio label="pickup">自提</el-radio>
  168. </el-radio-group>
  169. </el-form-item>
  170. <el-form-item prop="areaSelected">
  171. <template slot="label">
  172. 地区
  173. </template>
  174. <el-cascader
  175. :disabled="areaDisabled"
  176. size="large"
  177. :options="regionData"
  178. v-model="form.areaSelected">
  179. </el-cascader>
  180. </el-form-item>
  181. <el-form-item>
  182. <template slot="label">
  183. 详细地址
  184. </template>
  185. <el-input :disabled="addressDisabled" v-model="form.address"></el-input>
  186. </el-form-item>
  187. <div class="hr-tip"><span>银行信息</span></div>
  188. <el-form-item label="开户行">
  189. <el-select v-model="form.openBank" placeholder="请选择开户行">
  190. <el-option v-for="(item,index) in allOpenBank" :key="index" :label="item.BANK_NAME"
  191. :value="item.BANK_CODE"></el-option>
  192. </el-select>
  193. </el-form-item>
  194. <el-form-item label="银行所在地区" prop="bankAreaSelected">
  195. <el-cascader
  196. size="large"
  197. :options="regionData"
  198. v-model="form.bankAreaSelected">
  199. </el-cascader>
  200. </el-form-item>
  201. <el-form-item label="开户支行">
  202. <el-input v-model="form.bankAddress"></el-input>
  203. </el-form-item>
  204. <el-form-item label="银行账号">
  205. <el-input v-model="form.bankNo" maxlength="19"></el-input>
  206. </el-form-item>
  207. <el-form-item>
  208. <el-button type="primary" @click="onSubmit" :loading="submitButtonStat">保存</el-button>
  209. </el-form-item>
  210. </el-form>
  211. </div>
  212. </div>
  213. </template>
  214. <script>
  215. import Vue from 'vue'
  216. import network from '@/utils/network'
  217. import baseInfo from '@/utils/baseInfo'
  218. import store from '@/utils/vuexStore'
  219. import tool from '@/utils/tool'
  220. export default {
  221. name: 'user_dec',
  222. mounted() {
  223. this.getData()
  224. },
  225. computed:{
  226. _tableData(){
  227. if(this.tableData==null){
  228. return [];
  229. }
  230. if(this.form.decLv==''){
  231. return this.tableData;
  232. }
  233. return this.tableData.filter(item=>{
  234. return item.LEVEL_ID == this.form.decLv
  235. })
  236. }
  237. },
  238. data() {
  239. return {
  240. currentRow:null,
  241. decWay:'1',
  242. regionData: store.state.regionInfo.regionData,
  243. form: {
  244. realName:'',
  245. decLv: '',
  246. insertUserName:'',
  247. decUserName:'',
  248. recUserName:'',
  249. conUserName:'',
  250. insertUserIdCard:'',
  251. consignee:'',
  252. acceptMobile:'',
  253. areaSelected: [],
  254. address: '',
  255. openBank:'',
  256. bankAddress: '',
  257. bankProvince: '',
  258. bankCity: '',
  259. bankCounty: '',
  260. bankNo: '',
  261. bankAreaSelected: [],
  262. password:'111111',
  263. payPassword:'111111',
  264. mobile:'',
  265. packageId:'',
  266. goodsId:[],
  267. goodsNum:[],
  268. province:'',
  269. city:'',
  270. county:'',
  271. way:"express"
  272. },
  273. conRealName: '-',
  274. recRealName: '-',
  275. num: 1,
  276. tableData:null,
  277. tableDatas:null,
  278. allOpenBank: null,
  279. allDecPackage:{},
  280. allDecLevel: baseInfo.decLevels(),
  281. loading: false,
  282. submitButtonStat: false,
  283. submitButton:false,
  284. allGoods:[],
  285. multipleSelection: [],
  286. goodsNums:[],
  287. numList: [],
  288. sell_price_sum:0.00,
  289. price_pv_sum:0.00,
  290. areaDisabled: false,
  291. addressDisabled: false
  292. }
  293. },
  294. methods: {
  295. wayChange(){
  296. if(this.form.way==='pickup'){
  297. this.areaDisabled = true
  298. this.addressDisabled = true
  299. }else{
  300. this.areaDisabled = false
  301. this.addressDisabled = false
  302. }
  303. },
  304. getSum(){
  305. let sell_price_sum=0,price_pv_sum=0;
  306. this.multipleSelection.map((item,index)=>{
  307. console.log(item)
  308. sell_price_sum+=Number(item.SELL_PRICE)*item.goodsNum;
  309. price_pv_sum+=Number(item.PRICE_PV)*item.goodsNum;
  310. })
  311. this.sell_price_sum=tool.formatPrice(sell_price_sum);
  312. this.price_pv_sum=tool.formatPrice(price_pv_sum);
  313. console.log(this.sell_price_sum,this.price_pv_sum)
  314. },
  315. getData () {
  316. network.getData(`user/dec`).then(response => {
  317. console.log(response)
  318. this.loading = false;
  319. this.form.insertUserName = response.userName;
  320. this.allOpenBank = response.allOpenBank;
  321. this.allDecPackage = response.allDecPackage;
  322. this.allGoods = response.allGoods;
  323. console.log(this.allDecPackage);
  324. let settingObj=this.allDecPackage;
  325. let settingArr = Object.keys(settingObj).map(key => {
  326. //console.log(key); //为每个键名
  327. return settingObj[key]; //把每个对象返回出去生成一个新的数组中相当于0:{id:1}
  328. } );
  329. this.tableData=settingArr;
  330. let settingObj1=this.allGoods;
  331. for(let i in settingObj1){
  332. this.numList[i] = 1;
  333. settingObj1[i].goodsNum= 1 ;
  334. }
  335. this.tableDatas=settingObj1;
  336. // this.tableDatas=this.allGoods.map(item=>{return {...item,goodsNum:1}});
  337. console.log(this.tableDatas);
  338. console.log(this.numList);
  339. }).catch(() => {
  340. });
  341. },
  342. handleCurrentChange(val) {
  343. console.log(val)
  344. if(!val){return}
  345. this.currentRow = val;
  346. this.form.packageId=this.currentRow.ID;
  347. console.log(this.form.packageId)
  348. },
  349. // handleSelectionChange(val) {
  350. // this.multipleSelection = val;
  351. // this.form.goodsId = this.multipleSelection.map(item => item.ID)
  352. // this.form.goodsNum = this.multipleSelection.map(item=>{
  353. // return item.goodsNum
  354. // })
  355. // },
  356. handleSelectionChange(val) {
  357. let idx = -1,num;
  358. for(let i in this.tableDatas){
  359. for(let v in val){
  360. if(val[v].ID==this.tableDatas[i].ID){
  361. idx = i;
  362. num = this.numList[idx];
  363. val[v]["goodsNum"] = num;
  364. break;
  365. }
  366. }
  367. }
  368. console.log(val)
  369. this.multipleSelection = val;
  370. },
  371. handleChange(value,ID) {
  372. for(let i in this.multipleSelection){
  373. if(this.multipleSelection[i]['ID']==ID) {
  374. this.multipleSelection[i]["goodsNum"] = value;
  375. }
  376. }
  377. },
  378. getGoods(){
  379. this.form.goodsId=[];
  380. this.form.goodsNum=[];
  381. this.multipleSelection.map((item,index)=>{
  382. console.log(item);
  383. console.log('==');
  384. this.form.goodsId.push(item.ID)
  385. this.form.goodsNum.push(item.goodsNum)
  386. })
  387. },
  388. onSubmit() {
  389. this.getGoods();
  390. this.submitButtonStat = true
  391. let path = 'user/dec'
  392. let postData = {
  393. consignee: this.form.consignee,
  394. acceptMobile: this.form.acceptMobile,
  395. province: this.form.areaSelected[0] ? this.form.areaSelected[0] : '',
  396. city: this.form.areaSelected[1] ? this.form.areaSelected[1] : '',
  397. county: this.form.areaSelected[2] ? this.form.areaSelected[2] : '',
  398. address: this.form.address,
  399. insertUserName: this.form.insertUserName,
  400. decLv: this.form.decLv,
  401. realName: this.form.realName,
  402. decUserName: this.form.decUserName,
  403. conUserName: this.form.conUserName,
  404. recUserName: this.form.recUserName,
  405. insertUserIdCard: this.form.insertUserIdCard,
  406. openBank: this.form.openBank,
  407. bankAddress: this.form.bankAddress,
  408. mobile: this.form.mobile,
  409. bankProvince: this.form.bankAreaSelected[0] ? this.form.bankAreaSelected[0] : '',
  410. bankCity: this.form.bankAreaSelected[1] ? this.form.bankAreaSelected[1] : '',
  411. bankCounty: this.form.bankAreaSelected[2] ? this.form.bankAreaSelected[2] : '',
  412. bankNo: this.form.bankNo,
  413. password: this.form.password,
  414. payPassword: this.form.payPassword,
  415. packageId: this.form.packageId,
  416. goodsId: this.form.goodsId,
  417. goodsNum: this.form.goodsNum,
  418. location: this.form.location,
  419. decWay:this.decWay
  420. }
  421. return network.postData(path, postData).then(response => {
  422. console.log(response);
  423. this.$message({
  424. message: response,
  425. type: 'success'
  426. })
  427. this.submitButtonStat = false
  428. this.$router.go(-1)
  429. }).catch(() => {
  430. this.submitButtonStat = false
  431. })
  432. },
  433. selectOne(event, item) {
  434. network.getData(`user/dec`).then(response => {
  435. })
  436. },
  437. handleChkConUser() {
  438. if (this.form.conUserName) {
  439. this.loading = true
  440. network.getData('user/full-info', {userName: this.form.conUserName}).then(response => {
  441. this.conRealName = response.REAL_NAME + response.isLocation
  442. this.loading = false
  443. }).catch(response => {
  444. this.conRealName = '-'
  445. this.loading = false
  446. })
  447. }
  448. },
  449. handleChkRecUser() {
  450. if (this.form.recUserName) {
  451. this.loading = true
  452. network.getData('user/full-info', {userName: this.form.recUserName}).then(response => {
  453. this.recRealName = response.REAL_NAME
  454. this.loading = false
  455. }).catch(response => {
  456. this.recRealName = '-'
  457. this.loading = false
  458. })
  459. }
  460. },
  461. }
  462. }
  463. </script>
  464. <style>
  465. .hr-tip {
  466. font-size: 12px;
  467. position: relative;
  468. text-align: center;
  469. height: 30px;
  470. line-height: 30px;
  471. color: #999;
  472. margin-bottom: 20px;
  473. }
  474. .hr-tip:before {
  475. content: '';
  476. display: block;
  477. position: absolute;
  478. left: 0;
  479. right: 0;
  480. top: 14px;
  481. border-bottom: 1px dashed #ddd;
  482. height: 1px;
  483. }
  484. .hr-tip span {
  485. display: inline-block;
  486. background: #fff;
  487. position: relative;
  488. padding: 0 10px;
  489. }
  490. .el-input-number--mini .el-input-number__decrease, .el-input-number--mini .el-input-number__increase{width: 22px!important}
  491. .el-input-number.is-controls-right .el-input__inner{padding-left: 10px;
  492. padding-right: 30px;}
  493. .el-tabs--border-card{
  494. position: relative;
  495. width: 600px;
  496. }
  497. .flex{
  498. display: flex;
  499. }
  500. </style>