Customer.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675
  1. <template>
  2. <div class="custome_container">
  3. <div class="title">
  4. <el-row>
  5. <el-col :span="24">
  6. <div class="top">
  7. <el-input placeholder="用户" class="input-demo" v-model="formCondition.customName"></el-input>
  8. <el-input placeholder="部门" class="input-demo" v-model="formCondition.startTime"></el-input>
  9. <el-button type="success" style="margin-left: 1%;" @click="loadData">查询</el-button>
  10. <el-button type="success" style="margin-left: 1%;" @click="addCustomerShow = true">添加</el-button>
  11. </div>
  12. </el-col>
  13. </el-row>
  14. </div>
  15. <!-- 表格部分 -->
  16. <template>
  17. <el-table
  18. v-loading="loading"
  19. ref="multipleTable"
  20. :data="coustomerTable"
  21. height="370px"
  22. border
  23. tooltip-effect="dark">
  24. <el-table-column
  25. label="客户名称"
  26. prop="customerName"
  27. show-overflow-tooltip>
  28. </el-table-column>
  29. <el-table-column
  30. prop="invoiceTime"
  31. label="开票时间"
  32. show-overflow-tooltip>
  33. </el-table-column>
  34. <el-table-column
  35. prop="company"
  36. label="主体名称"
  37. show-overflow-tooltip>
  38. </el-table-column>
  39. <el-table-column
  40. prop="usenumAll"
  41. label="调用量"
  42. show-overflow-tooltip>
  43. </el-table-column>
  44. <el-table-column
  45. prop="integrationType"
  46. label="对接方式"
  47. show-overflow-tooltip>
  48. <template slot-scope="scope">
  49. <span v-if="scope.row.integrationType == 0" >接口</span>
  50. <span v-else-if="scope.row.integrationType == 1" >平台</span>
  51. </template>
  52. </el-table-column>
  53. <el-table-column
  54. prop="accountBalance"
  55. label="账号余额"
  56. show-overflow-tooltip>
  57. </el-table-column>
  58. <el-table-column
  59. prop="firstSign"
  60. label="首签日"
  61. show-overflow-tooltip>
  62. </el-table-column>
  63. <el-table-column
  64. prop="accstatus"
  65. label="账号状态"
  66. show-overflow-tooltip>
  67. <template slot-scope="scope">
  68. <span v-if="scope.row.accstatus == 0" style="color:green">正常</span>
  69. <span v-else-if="scope.row.accstatus == 1" style="color: red">停用</span>
  70. </template>
  71. </el-table-column>
  72. <el-table-column
  73. label="操作"
  74. width="280">
  75. <template slot-scope="scope" show-overflow-tooltip>
  76. <el-link style="cursor:pointer; color: blue;" @click="investMone(scope.row)">充值</el-link>
  77. <el-link style="margin-left: 10px; cursor:pointer; color: blue;" @click="recInfoList(scope.row)">备案列表</el-link>
  78. <el-link style="margin-left: 10px; cursor:pointer; color: blue;" @click="carInfo(scope.row)">车辆信息</el-link>
  79. <el-link style="margin-left: 10px; cursor:pointer; color: blue;" @click="updateStatus(scope.row)">状态修改</el-link>
  80. </template>
  81. </el-table-column>
  82. </el-table>
  83. </template>
  84. <!-- 分页 -->
  85. <div class="block">
  86. <el-pagination
  87. @size-change="handleSizeChange"
  88. @current-change="handleCurrentChange"
  89. :current-page="current"
  90. :page-sizes="[6, 8, 10]"
  91. :page-size="pagesize"
  92. layout="total, sizes, prev, pager, next, jumper"
  93. :total="total">
  94. </el-pagination>
  95. </div>
  96. <el-dialog
  97. @close="addCustomerClose"
  98. :visible.sync="addCustomerShow"
  99. style="font-size: 0px;">
  100. <div class="tou">客戶--添加</div>
  101. <div class="line"></div>
  102. <el-form
  103. label-position="right"
  104. label-width="80px"
  105. :rules="custAddrules"
  106. ref="customerForm"
  107. :model="customer">
  108. <el-form-item label="客戶名称" prop="customerName">
  109. <el-input v-model="customer.customerName" auto-complete="off" placeholder="请输入用户名"></el-input>
  110. </el-form-item>
  111. <el-form-item label="客户主体" prop="customerCompany">
  112. <el-input v-model="customer.company" auto-complete="off" placeholder="请输入用户名"></el-input>
  113. </el-form-item>
  114. </el-form>
  115. <div slot="footer" class="dialog-footer">
  116. <el-button @click="addCustomerShow = false" type="info">取 消</el-button>
  117. <el-button type="primary" @click="addCustomer('customerForm')">新 增</el-button>
  118. </div>
  119. </el-dialog>
  120. <!-- 修改锁定和解锁状态 -->
  121. <el-dialog
  122. @close="addCustomerClose"
  123. :visible.sync="changeStatus"
  124. style="font-size: 0px;">
  125. <div class="tou">客户--修改状态</div>
  126. <div class="line"></div>
  127. <el-form
  128. label-position="right"
  129. label-width="80px"
  130. :model="customer">
  131. <el-form-item label="用户名">
  132. <el-input v-model="customer.customerName" auto-complete="off" placeholder="请输入用户名"></el-input>
  133. </el-form-item>
  134. <el-form-item label="状态">
  135. <el-select v-model="customer.accstatus" placeholder="请选择状态" style="width: 100%">
  136. <el-option
  137. v-for="item in optionone"
  138. :key="item.value"
  139. :label="item.label"
  140. :value="item.value">
  141. </el-option>
  142. </el-select>
  143. </el-form-item>
  144. </el-form>
  145. <div slot="footer" class="dialog-footer">
  146. <el-button @click="changeStatus = false" type="info">取 消</el-button>
  147. <el-button type="primary" @click="changeStatusM">修 改</el-button>
  148. </div>
  149. </el-dialog>
  150. <el-dialog
  151. @close="addCustomerClose"
  152. :visible.sync="recVisList"
  153. style="font-size: 0px;">
  154. <div class="tou">客户--备案列表</div>
  155. <div class="line"></div>
  156. <!-- 表格部分 -->
  157. <template>
  158. <el-table
  159. v-loading="loading"
  160. ref="multipleTable"
  161. :data="customeRecQueryListTable"
  162. height="370px"
  163. border
  164. tooltip-effect="dark">
  165. <el-table-column
  166. label="客户名称"
  167. prop="customerName"
  168. show-overflow-tooltip>
  169. </el-table-column>
  170. <el-table-column
  171. prop="companyLeader"
  172. label="公司负责人"
  173. show-overflow-tooltip>
  174. </el-table-column>
  175. <el-table-column
  176. prop="companyName"
  177. label="公司名称"
  178. show-overflow-tooltip>
  179. </el-table-column>
  180. <el-table-column
  181. prop="companyReferencenum"
  182. label="税号"
  183. show-overflow-tooltip>
  184. </el-table-column>
  185. <el-table-column
  186. prop="companyOpenbank"
  187. label="开户行"
  188. show-overflow-tooltip>
  189. </el-table-column>
  190. <el-table-column
  191. prop="companyOpenbankAcc"
  192. label="银行账号"
  193. show-overflow-tooltip>
  194. </el-table-column>
  195. <el-table-column
  196. prop="recStatus"
  197. label="备案状态"
  198. show-overflow-tooltip>
  199. <template slot-scope="scope">
  200. <span v-if="scope.row.recStatus == 0">备案中</span>
  201. <span v-else-if="scope.row.recStatus == 1" style="color: green">备案成功</span>
  202. <span v-else-if="scope.row.recStatus == 2" style="color: red">备案失败</span>
  203. </template>
  204. </el-table-column>
  205. <el-table-column
  206. prop="interType"
  207. label="对接方式"
  208. show-overflow-tooltip>
  209. <template slot-scope="scope">
  210. <span v-if="scope.row.interType == 0">接口</span>
  211. <span v-if="scope.row.interType == 1">平台</span>
  212. </template>
  213. </el-table-column>
  214. <el-table-column
  215. prop="bussinessType"
  216. label="业务类型"
  217. show-overflow-tooltip>
  218. <template slot-scope="scope">
  219. <span v-if="scope.row.bussinessType == 0">自有车</span>
  220. <span v-if="scope.row.bussinessType == 1">外协车</span>
  221. <span v-if="scope.row.bussinessType == 2">无车</span>
  222. </template>
  223. </el-table-column>
  224. <el-table-column
  225. label="操作"
  226. width="280">
  227. <template slot-scope="scope" show-overflow-tooltip>
  228. <el-link style="margin-left: 10px; cursor:pointer; color: blue;" @click="recInfo(scope.row)">备案信息</el-link>
  229. </template>
  230. </el-table-column>
  231. </el-table>
  232. </template>
  233. </el-dialog>
  234. <el-dialog
  235. @close="custRecClose"
  236. :visible.sync="recVis"
  237. style="font-size: 0px;">
  238. <div class="tou">客户--备案信息</div>
  239. <div class="line"></div>
  240. <el-form
  241. label-position="right"
  242. label-width="80px"
  243. :model="formUserList">
  244. <el-row :span="24">
  245. <el-col :span="12">
  246. <el-form-item label-width=120px label="客户名称">
  247. <el-input v-model="customerRec.customerName" auto-complete="off" readonly=true ></el-input>
  248. </el-form-item>
  249. </el-col>
  250. <el-col :span="12">
  251. <el-form-item label-width=120px label="公司负责人">
  252. <el-input v-model="customerRec.companyLeader" readonly=true style="width: 100%"></el-input>
  253. </el-form-item>
  254. </el-col>
  255. </el-row>
  256. <el-row :span="24">
  257. <el-col :span="12">
  258. <el-form-item label-width=120px label="负责人手机号">
  259. <el-input v-model="customerRec.companyLeaderPhone" auto-complete="off" readonly=true ></el-input>
  260. </el-form-item>
  261. </el-col>
  262. <el-col :span="12">
  263. <el-form-item label-width=120px label="公司名称">
  264. <el-input v-model="customerRec.companyName" readonly=true style="width: 100%"></el-input>
  265. </el-form-item>
  266. </el-col>
  267. </el-row>
  268. <el-row :span="24">
  269. <el-col :span="12">
  270. <el-form-item label-width=120px label="公司税号">
  271. <el-input v-model="customerRec.companyReferencenum" auto-complete="off" readonly=true ></el-input>
  272. </el-form-item>
  273. </el-col>
  274. <el-col :span="12">
  275. <el-form-item label-width=120px label="公司开户行">
  276. <el-input v-model="customerRec.companyOpenbank" readonly=true style="width: 100%"></el-input>
  277. </el-form-item>
  278. </el-col>
  279. </el-row>
  280. <el-row :span="24">
  281. <el-col :span="12">
  282. <el-form-item label-width=120px label="公司开户行账号">
  283. <el-input v-model="customerRec.companyOpenbankAcc" auto-complete="off" readonly=true ></el-input>
  284. </el-form-item>
  285. </el-col>
  286. <el-col :span="12">
  287. <el-form-item label-width=120px label="公司地址">
  288. <el-input v-model="customerRec.companyAdress" style="width: 100%" readonly=true></el-input>
  289. </el-form-item>
  290. </el-col>
  291. </el-row>
  292. <el-row :span="24">
  293. <el-col :span="12">
  294. <el-form-item label-width=120px label="公司电话">
  295. <el-input v-model="customerRec.companyPhone" auto-complete="off" readonly=true ></el-input>
  296. </el-form-item>
  297. </el-col>
  298. <el-col :span="12">
  299. <el-form-item label-width=120px label="备案申请时间">
  300. <el-input v-model="customerRec.createtime" style="width: 100%" readonly=true></el-input>
  301. </el-form-item>
  302. </el-col>
  303. </el-row>
  304. </el-form>
  305. <div slot="footer" class="dialog-footer">
  306. <el-button @click="changeStatus = false" type="primary">信息上传</el-button>
  307. <el-button type="primary" @click="changeStatusM">生成文档</el-button>
  308. </div>
  309. </el-dialog>
  310. <el-dialog
  311. @close="addCustomerClose"
  312. :visible.sync="accIsclose"
  313. style="font-size: 0px;">
  314. <div class="tou">客户--充值</div>
  315. <div class="line"></div>
  316. <el-form
  317. label-position="right"
  318. label-width="80px"
  319. :model="customer">
  320. <el-form-item label="客户名称">
  321. <el-input v-model="customer.customerName" auto-complete="off" readonly=true></el-input>
  322. </el-form-item>
  323. <el-form-item label="账号余额">
  324. <el-input v-model="customer.accountBalance" auto-complete="off" readonly=true></el-input>
  325. </el-form-item>
  326. <el-form-item label="充值金额">
  327. <el-input v-model="customerRecharge.rechargeMony" auto-complete="off"></el-input>
  328. </el-form-item>
  329. </el-form>
  330. <div slot="footer" class="dialog-footer">
  331. <el-button @click="accIsclose = false" type="info">取 消</el-button>
  332. <el-button type="primary" @click="customRecharge">充值</el-button>
  333. </div>
  334. </el-dialog>
  335. <el-dialog
  336. @close="addCustomerClose"
  337. :visible.sync="carRecclose"
  338. style="font-size: 0px;">
  339. <div class="tou">客户--车辆备案</div>
  340. <div class="line"></div>
  341. <!-- 表格部分 -->
  342. <template>
  343. <el-table
  344. v-loading="loading"
  345. ref="multipleTable"
  346. :data="coustomerCarTable"
  347. height="370px"
  348. border
  349. tooltip-effect="dark">
  350. <el-table-column
  351. label="客户名称"
  352. prop="customerName"
  353. show-overflow-tooltip>
  354. </el-table-column>
  355. <el-table-column
  356. prop="companyName"
  357. label="公司名称"
  358. show-overflow-tooltip>
  359. </el-table-column>
  360. <el-table-column
  361. prop="businessType"
  362. label="业务类型"
  363. show-overflow-tooltip>
  364. <template slot-scope="scope">
  365. <span v-if="scope.row.businessType == 0">自有车</span>
  366. <span v-if="scope.row.businessType == 1">外协车</span>
  367. <span v-if="scope.row.businessType == 2">无车</span>
  368. </template>
  369. </el-table-column>
  370. <el-table-column
  371. prop="carNum"
  372. label="车牌号"
  373. show-overflow-tooltip>
  374. </el-table-column>
  375. <el-table-column
  376. prop="carColor"
  377. label="车辆颜色"
  378. show-overflow-tooltip>
  379. </el-table-column>
  380. <el-table-column
  381. prop="custPhone"
  382. label="手机号"
  383. show-overflow-tooltip>
  384. </el-table-column>
  385. <el-table-column
  386. prop="etcNum"
  387. label="ETC卡号"
  388. show-overflow-tooltip>
  389. </el-table-column>
  390. <el-table-column
  391. prop="recStatus"
  392. label="备案状态"
  393. show-overflow-tooltip>
  394. <template slot-scope="scope">
  395. <span v-if="scope.row.recStatus == 1" style="color: green">备案成功</span>
  396. <span v-else-if="scope.row.recStatus == 0" style="color: red">备案失败</span>
  397. </template>
  398. </el-table-column>
  399. <el-table-column
  400. prop="succTime"
  401. label="成功时间"
  402. show-overflow-tooltip>
  403. </el-table-column>
  404. <el-table-column
  405. prop="failTime"
  406. label="失败时间"
  407. show-overflow-tooltip>
  408. </el-table-column>
  409. <el-table-column
  410. prop="failReason"
  411. label="失败原因"
  412. show-overflow-tooltip>
  413. </el-table-column>
  414. <el-table-column
  415. label="操作"
  416. width="280">
  417. <template slot-scope="scope" show-overflow-tooltip>
  418. <el-link v-if="scope.row.businessType == 1 || scope.row.businessType == 0" style="cursor:pointer; color: blue;" @click="alert(scope)">解绑</el-link>
  419. </template>
  420. </el-table-column>
  421. </el-table>
  422. </template>
  423. </el-dialog>
  424. </div>
  425. </template>
  426. <script type="text/javascript">
  427. export default {
  428. data(){
  429. return{
  430. formCondition:{
  431. customerName:'',
  432. startTime:''
  433. },
  434. coustomerTable:[],
  435. coustomerCarTable:[],
  436. customeRecQueryListTable:[],
  437. custAddrules: {
  438. customerName: [
  439. { required: true, message: '请输入', trigger: 'blur' },
  440. { min: 3, max: 100, message: '长度在 3 到 100个字符', trigger: 'blur' }
  441. ]
  442. },
  443. customerRec:{
  444. },
  445. customer:{
  446. id:0,
  447. customerName:'',
  448. usenumAll:'',
  449. invoiceTime:'',
  450. usenumInterface:'',
  451. usenumPlat:'',
  452. accountBalance:'',
  453. bussinessType:'',
  454. integrationType:'',
  455. firstSign:'',
  456. accstatus:'0',
  457. company:''
  458. },
  459. customerRecharge:{
  460. customerName:'',
  461. rechargeMony:''
  462. },
  463. queryParam:{
  464. },
  465. optionone: [{
  466. value: 0,
  467. label: '正常'
  468. }, {
  469. value: 1,
  470. label: '停用'
  471. }],
  472. current: 1,
  473. pagesize: 8,
  474. total:'',
  475. addCustomerShow:false,
  476. changeStatus:false,
  477. recVis:false,
  478. accIsclose:false,
  479. carRecclose:false,
  480. recVisList:false
  481. }
  482. },
  483. created() {
  484. this.loadData();
  485. },
  486. methods:{
  487. addCustomer(formName){
  488. this.$refs[formName].validate(async (valid) => {
  489. if(valid) {
  490. console.log(this.customer);
  491. const response = await this.$http.post(`customer/addCustomer`, this.customer);
  492. if(response.data.code === 0) {
  493. this.loadData();
  494. this.addCustomerShow = false;
  495. this.$message({
  496. type: 'success',
  497. message: '添加成功'
  498. });
  499. }else {
  500. this.$message({
  501. type: 'error',
  502. message: '添加失败'
  503. });
  504. }
  505. }else {
  506. this.$message.error('请查看是否有选项未填写或填错项');
  507. return false;
  508. }
  509. })
  510. },
  511. investMone(recoder){
  512. this.customer = this.customer= JSON.parse(JSON.stringify(recoder ));;
  513. this.customerRecharge['rechargeMony']='';
  514. this.accIsclose = true;
  515. },
  516. async customRecharge(){
  517. this.customerRecharge['customerName'] = this.customer['customerName'];
  518. const response = await this.$http.post(`customer/customRecharge`, this.customerRecharge);
  519. if(response.data.code === 0) {
  520. this.loadData();
  521. this.accIsclose = false;
  522. this.$message({
  523. type: 'success',
  524. message: '充值成功'
  525. });
  526. }else {
  527. this.$message({
  528. type: 'error',
  529. message: '充值失败'
  530. });
  531. }
  532. },
  533. async changeStatusM(){
  534. const response = await this.$http.post(`customer/updateCustomer`, this.customer);
  535. if(response.data.code === 0) {
  536. this.loadData();
  537. this.changeStatus = false;
  538. this.$message({
  539. type: 'success',
  540. message: '修改成功'
  541. });
  542. }else {
  543. this.$message({
  544. type: 'error',
  545. message: '修改失败'
  546. });
  547. }
  548. },
  549. updateStatus(recoder){
  550. this.changeStatus = true;
  551. this.customer= JSON.parse(JSON.stringify(recoder ));
  552. },
  553. async recInfo(recoder){
  554. this.recVis = true;
  555. console.log(recoder);
  556. const response = await this.$http.post(`lowerService/customeRecQuery`, {"customerName":recoder.customerName,"companyName":recoder.companyName});
  557. if (response.data.code === 0) {
  558. this.customerRec = response.data.data;
  559. }
  560. },
  561. async recInfoList(recoder){
  562. const response = await this.$http.post(`lowerService/customeRecQueryList`, {"customerName":recoder.customerName});
  563. if (response.data.code === 0) {
  564. this.customeRecQueryListTable = response.data.data;
  565. }
  566. this.recVisList = true;
  567. },
  568. async carInfo(recoder){
  569. const response = await this.$http.post(`lowerService/customerCarRecQuery`, {"customerName":recoder.customerName});
  570. if (response.data.code === 0) {
  571. this.coustomerCarTable = response.data.data;
  572. }
  573. this.carRecclose = true;
  574. },
  575. // 清空表单数据
  576. addCustomerClose() {
  577. for (var key in this.customer) {
  578. this.customer[key] = '';
  579. };
  580. this.customer['id'] = 0;
  581. this.customer['accstatus'] = 0;
  582. this.current = 1;
  583. this.pagesize = 8;
  584. },
  585. custRecClose() {
  586. customerRec = {};
  587. },
  588. // 列表展示
  589. async loadData() {
  590. const formData = new FormData();
  591. formData.append('current', this.current);
  592. formData.append('size', this.pagesize);
  593. const response = await this.$http.post(`customer/findCustomer`, formData);
  594. if (response.data.code === 0) {
  595. this.coustomerTable = response.data.data.records;
  596. this.total = response.data.data.total;
  597. }
  598. },
  599. // 分页方法
  600. handleSizeChange(val) {
  601. this.pagesize = val;
  602. this.loadData();
  603. console.log(`每页 ${val} 条`);
  604. },
  605. handleCurrentChange(val) {
  606. this.current = val;
  607. this.loadData();
  608. // console.log(`当前页: ${val}`);
  609. }
  610. }
  611. };
  612. </script>
  613. <style>
  614. .custome_container {
  615. border: 1px solid #d9d9d9;
  616. border-radius: 10px;
  617. }
  618. .custome_container .title {
  619. font-size: 5px;
  620. margin-bottom: 20px;
  621. }
  622. .custome_container .top {
  623. padding-top: 20px;
  624. padding-left: 20px;
  625. }
  626. .custome_container .text {
  627. display: inline-block;
  628. color: #000;
  629. font-size: 16px ;
  630. margin-left: 1%;
  631. }
  632. .custome_container .input-demo {
  633. display: inline-block;
  634. width: 20%;
  635. margin-left: 1%;
  636. }
  637. .custome_container .block {
  638. font-size: 5px;
  639. text-align: center;
  640. margin-top: 25px;
  641. margin-bottom: 25px;
  642. }
  643. .custome_container .el-dialog {
  644. width: 60%;
  645. }
  646. .custome_container .el-dialog__header, .el-dialog__body {
  647. padding: 0 20px;
  648. }
  649. .custome_container .tou {
  650. font-size: 20px;
  651. height: 30px;
  652. line-height: 30px;
  653. padding-top: 15px;
  654. }
  655. .custome_container .line {
  656. margin-top: 15px;
  657. margin-bottom: 15px;
  658. width: 100%;
  659. height: 2px;
  660. background-color: #d9d9d9;
  661. }
  662. .custome_container .xinxi {
  663. text-align: center;
  664. margin: 15px auto;
  665. font-size: 18px;
  666. }
  667. </style>