policy_list.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567
  1. <template>
  2. <div v-if="isShow === 1" class="app-container">
  3. <div class="screen-container">
  4. <Collapse :screen-form="screenForm">
  5. <template #right_btn>
  6. <el-button size="mini" @click="resetScreenForm">清空</el-button>
  7. <el-button type="primary" size="mini" @click="submitScreenForm">搜索</el-button>
  8. </template>
  9. <template #search>
  10. <el-form
  11. ref="screenForm"
  12. size="mini"
  13. :model="screenForm"
  14. :inline="false"
  15. label-width="120px"
  16. label-position="left"
  17. >
  18. <el-row>
  19. <el-row :gutter="20">
  20. <el-col :xs="24" :ms="6" :lg="6">
  21. <el-form-item label="销售政策编号" prop="code">
  22. <el-input v-model="screenForm.code" placeholder="销售政策编号" size="mini" />
  23. </el-form-item>
  24. </el-col>
  25. <el-col :xs="24" :ms="6" :lg="6">
  26. <el-form-item label="销售政策说明" prop="title">
  27. <el-input v-model="screenForm.title" placeholder="销售政策说明" size="mini" />
  28. </el-form-item>
  29. </el-col>
  30. <el-col :xs="24" :ms="6" :lg="6">
  31. <el-form-item label="表头备注" prop="remark">
  32. <el-input v-model="screenForm.remark" placeholder="表头备注" size="mini" />
  33. </el-form-item>
  34. </el-col>
  35. <el-col :xs="24" :ms="6" :lg="6">
  36. <el-form-item label="生效日期" prop="startTime1">
  37. <el-date-picker
  38. v-model="screenForm.startTime1"
  39. type="datetime"
  40. size="mini"
  41. placeholder="生效日期"
  42. value-format="yyyy-MM-dd HH:mm:ss"
  43. />
  44. </el-form-item>
  45. </el-col>
  46. </el-row>
  47. <el-row :gutter="20">
  48. <el-col :xs="24" :ms="6" :lg="6">
  49. <el-form-item label="结束日期" prop="endTime1">
  50. <el-date-picker
  51. v-model="screenForm.endTime1"
  52. type="datetime"
  53. size="mini"
  54. placeholder="结束日期"
  55. value-format="yyyy-MM-dd HH:mm:ss"
  56. />
  57. </el-form-item>
  58. </el-col>
  59. <el-col :xs="24" :ms="6" :lg="6">
  60. <el-form-item label="制表日期" prop="startCreateTime">
  61. <el-date-picker
  62. v-model="screenForm.startCreateTime"
  63. type="datetime"
  64. size="mini"
  65. placeholder="制表日期"
  66. value-format="yyyy-MM-dd HH:mm:ss"
  67. />
  68. </el-form-item>
  69. </el-col>
  70. <el-col :xs="24" :ms="6" :lg="6">
  71. <el-form-item label="制表人" prop="createBy">
  72. <el-input v-model="screenForm.createBy" placeholder="制表人" size="mini" />
  73. </el-form-item>
  74. </el-col>
  75. <el-col :xs="24" :ms="6" :lg="6">
  76. <el-form-item label="审核人" prop="examineBy">
  77. <el-input v-model="screenForm.examineBy" placeholder="审核人" size="mini" />
  78. </el-form-item>
  79. </el-col>
  80. </el-row>
  81. <el-row :gutter="20">
  82. <el-col :xs="24" :ms="6" :lg="6">
  83. <el-form-item label="状态" prop="status">
  84. <el-select
  85. v-model="screenForm.status"
  86. clearable
  87. size="mini"
  88. placeholder="状态"
  89. class="select_height"
  90. >
  91. <el-option
  92. v-for="(item, index) in statusOptions"
  93. :key="index"
  94. :label="item.label"
  95. :value="item.value"
  96. />
  97. </el-select>
  98. </el-form-item>
  99. </el-col>
  100. <el-col :xs="24" :ms="6" :lg="6">
  101. <el-form-item label="销售政策类型" prop="type">
  102. <el-select
  103. v-model="screenForm.type"
  104. size="mini"
  105. clearable
  106. placeholder="销售政策类型"
  107. class="select_height"
  108. >
  109. <el-option
  110. v-for="item in typeOptions"
  111. :key="item.value"
  112. :label="item.label"
  113. :value="item.value"
  114. />
  115. </el-select>
  116. </el-form-item>
  117. </el-col>
  118. <el-col :xs="24" :ms="6" :lg="6">
  119. <el-form-item label="经销商名称" prop="customerId">
  120. <el-select
  121. v-model="screenForm.customerId"
  122. size="mini"
  123. filterable
  124. clearable
  125. placeholder="经销商名称"
  126. class="select_height"
  127. >
  128. <el-option v-for="item in CrList" :key="item.id" :label="item.name" :value="item.id" />
  129. </el-select>
  130. </el-form-item>
  131. </el-col>
  132. <el-col :xs="24" :ms="6" :lg="6">
  133. <el-form-item label="经销商编码" prop="customerNumber">
  134. <el-select
  135. v-model="screenForm.customerNumber"
  136. size="mini"
  137. filterable
  138. clearable
  139. placeholder="经销商编码"
  140. class="select_height"
  141. >
  142. <el-option v-for="item in CrList" :key="item.id" :label="item.number" :value="item.number" />
  143. </el-select>
  144. </el-form-item>
  145. </el-col>
  146. <el-col :xs="24" :ms="6" :lg="6">
  147. <el-form-item label="机型" prop="specification">
  148. <el-input v-model="screenForm.specification" placeholder="机型" size="mini" />
  149. </el-form-item>
  150. </el-col>
  151. </el-row>
  152. </el-row>
  153. </el-form>
  154. </template>
  155. </Collapse>
  156. </div>
  157. <div class="btn-group">
  158. <el-row type="flex">
  159. <el-button
  160. v-if="$checkBtnRole('add', $route.meta.roles)"
  161. size="mini"
  162. type="primary"
  163. icon="el-icon-plus"
  164. @click="hanlenewInfo"
  165. >新增</el-button
  166. >
  167. </el-row>
  168. </div>
  169. <div class="mymain-container">
  170. <div class="table">
  171. <el-table :data="dataList" :row-class-name="tableRowClassName" border style="width: 100%">
  172. <el-table-column fixed="left" label="操作" min-width="250" align="center">
  173. <template slot-scope="scope">
  174. <el-button
  175. v-if="scope.row.examineStatus == 'SAVE'"
  176. type="text"
  177. size="mini"
  178. @click=";(isShow = 5), (id = scope.row.id)"
  179. >编辑</el-button
  180. >
  181. <el-button type="text" size="mini" @click=";(isShow = 4), (id = scope.row.id), (code = scope.row.code)"
  182. >详情</el-button
  183. >
  184. <el-button
  185. v-if="scope.row.examineStatus == 'WAIT' && $checkBtnRole('examine', $route.meta.roles)"
  186. type="text"
  187. size="mini"
  188. @click=";(isShow = 8), (id = scope.row.id), (policyId = scope.row.policyId), (code = scope.row.code)"
  189. >审核</el-button
  190. >
  191. <!-- </el-popconfirm> -->
  192. <el-popconfirm
  193. v-if="scope.row.examineStatus == 'SAVE'"
  194. style="margin-left: 10px"
  195. title="提审?"
  196. @onConfirm="handlesubmit(scope.row)"
  197. >
  198. <el-button slot="reference" type="text" size="mini">提审</el-button>
  199. </el-popconfirm>
  200. <el-popconfirm
  201. v-if="scope.row.examineStatus === 'OK' && scope.row.status"
  202. style="margin-left: 10px"
  203. title="作废?"
  204. @onConfirm="handleNullify(scope.row)"
  205. >
  206. <el-button slot="reference" type="text" size="mini">作废</el-button>
  207. </el-popconfirm>
  208. <el-popconfirm
  209. v-if="scope.row.examineStatus === 'OK'"
  210. style="margin-left: 10px"
  211. title="克隆?"
  212. @onConfirm="handleClone(scope.row)"
  213. >
  214. <!-- -->
  215. <el-button slot="reference" type="text" size="mini">克隆</el-button>
  216. </el-popconfirm>
  217. <el-popconfirm
  218. v-if="scope.row.examineStatus != 'OK'"
  219. style="margin-left: 10px"
  220. title="删除吗?"
  221. @onConfirm="hanleDelete(scope.row.id)"
  222. >
  223. <el-button slot="reference" type="text" size="mini">删除</el-button>
  224. </el-popconfirm>
  225. <el-popconfirm
  226. v-if="scope.row.examineStatus == 'OK'"
  227. style="margin-left: 10px"
  228. title="弃审吗?"
  229. @onConfirm="hanleAbandon(scope.row.id)"
  230. >
  231. <el-button slot="reference" type="text" size="mini">弃审</el-button>
  232. </el-popconfirm>
  233. </template>
  234. </el-table-column>
  235. <el-table-column label="状态" width="120" align="left">
  236. <template slot-scope="scope">
  237. <el-tag size="mini" type="success" v-if="scope.row.status == '1'">已生效</el-tag>
  238. <el-tag size="mini" type="danger" v-else-if="scope.row.status == '0'">未生效 </el-tag>
  239. </template>
  240. </el-table-column>
  241. <el-table-column label="审核状态" width="120" align="left">
  242. <template slot-scope="scope">
  243. <el-tag size="mini" v-if="scope.row.examineStatus == 'SAVE'">保存</el-tag>
  244. <el-tag size="mini" type="warning" v-else-if="scope.row.examineStatus == 'WAIT'">待审核 </el-tag>
  245. <el-tag size="mini" type="success" v-else-if="scope.row.examineStatus == 'OK'">通过 </el-tag>
  246. <el-tag size="mini" type="danger" v-else>不通过 </el-tag>
  247. </template>
  248. </el-table-column>
  249. <el-table-column prop="code" label="销售政策编号" show-overflow-tooltip min-width="200" align="left" />
  250. <el-table-column show-overflow-tooltip prop="title" label="销售政策名称" min-width="150" align="left" />
  251. <!-- <el-table-column
  252. prop="mainName"
  253. label="产品类别"
  254. align="left"
  255. ></el-table-column> -->
  256. <el-table-column show-overflow-tooltip prop="remark" label="销售政策说明" min-width="150" align="left" />
  257. <el-table-column min-width="200" show-overflow-tooltip prop="startTime" label="生效日期" align="left" />
  258. <el-table-column min-width="200" show-overflow-tooltip prop="endTime" label="结束日期" align="left" />
  259. <el-table-column show-overflow-tooltip prop="createBy" label="制表人" min-width="200" align="left" />
  260. <el-table-column show-overflow-tooltip prop="createTime" label="制表日期" min-width="200" align="left" />
  261. <el-table-column show-overflow-tooltip prop="examineBy" label="审核人" min-width="200" align="left" />
  262. </el-table>
  263. <!-- 分页 -->
  264. <div class="fr">
  265. <el-pagination
  266. :current-page="currentPage"
  267. :page-sizes="[10, 20, 30, 50]"
  268. :page-size="10"
  269. layout="total, sizes, prev, pager, next, jumper"
  270. :total="listTotal"
  271. @size-change="handleSizeChange"
  272. @current-change="handleCurrentChange"
  273. />
  274. </div>
  275. </div>
  276. </div>
  277. </div>
  278. <AddPolicy v-else-if="isShow === 2" />
  279. <AddCondition v-else-if="isShow === 10 || isShow === 12" :id="id" :policy-id="policyId" />
  280. <EditPolicy v-else-if="isShow === 5" />
  281. <Details v-else-if="isShow === 4" />
  282. <Examine v-else />
  283. </template>
  284. <script>
  285. import {
  286. cancelPolicy,
  287. cloneList,
  288. deletePolicy,
  289. getCrList,
  290. getId,
  291. getList,
  292. getpolicySubmit,
  293. getTypeList,
  294. toExamine,
  295. setAbandon
  296. } from '@/api/policy_list'
  297. import Minxin from '@/mixin'
  298. import { downloadFiles, handleImport } from '@/utils/util'
  299. import AddPolicy from './components/AddPolicy'
  300. import EditPolicy from './components/editPolicy'
  301. import AddModel from './components/AddModel'
  302. import Pagination from './components/Pagination'
  303. import AddCondition from './components/AddCondition'
  304. import Details from './components/details.vue'
  305. import Examine from './components/Examine'
  306. import { mapState } from 'vuex'
  307. export default {
  308. mixins: [Minxin],
  309. data() {
  310. return {
  311. id: '',
  312. code: '',
  313. codeId: '',
  314. listLoading: false,
  315. policyId: '',
  316. CrList: [],
  317. isShow: 1,
  318. dataList: [],
  319. screenForm: {
  320. code: '',
  321. createBy: '',
  322. endCreateTime: '',
  323. endTime1: '',
  324. endTime2: '',
  325. examineBy: '',
  326. remark: '',
  327. startCreateTime: '',
  328. startTime1: '',
  329. startTime2: '',
  330. status: '',
  331. title: '',
  332. type: '',
  333. customerId: '',
  334. specification: '',
  335. customerNumber: ''
  336. },
  337. fileList: [],
  338. statusOptions: [
  339. {
  340. value: true,
  341. label: '已生效'
  342. },
  343. {
  344. value: false,
  345. label: '未生效'
  346. }
  347. ],
  348. typeOptions: [
  349. {
  350. vlaue: 'PROVISION',
  351. label: '配提'
  352. },
  353. {
  354. value: 'LIMIT',
  355. label: '限量'
  356. }
  357. ],
  358. typeList: [],
  359. value: '',
  360. imageUrl: '',
  361. baseURL: '',
  362. isFlag: '',
  363. isCollapse: true
  364. }
  365. },
  366. created() {
  367. const customerParams = {
  368. pageNum: 1,
  369. pageSize: -1,
  370. keyword: '',
  371. region: ''
  372. }
  373. // 获取经销商列表
  374. getCrList(customerParams).then(res => {
  375. this.CrList = res.data.records
  376. })
  377. },
  378. computed: mapState({
  379. comCode: state => state.sales.code
  380. }),
  381. methods: {
  382. tableRowClassName({ row, rowIndex }) {
  383. // || row.examineStatus=='FAIL'
  384. if (row.status == 0) {
  385. return 'warning-row'
  386. }
  387. return ''
  388. },
  389. hanlenewInfo() {
  390. console.log()
  391. getId().then(res => {
  392. this.$store.commit('sales/setId', res.data)
  393. this.isShow = 2
  394. })
  395. },
  396. handleClone(row) {
  397. cloneList({ policyId: row.id }).then(res => {
  398. this.$successMsg('克隆成功')
  399. this.getList()
  400. })
  401. },
  402. getList() {
  403. this.listLoading = true
  404. const params = {
  405. pageNum: this.currentPage,
  406. pageSize: this.pageSize,
  407. code: this.screenForm.code,
  408. type: this.screenForm.type,
  409. createBy: this.screenForm.createBy,
  410. endCreateTime: this.screenForm.endCreateTime,
  411. endTime1: this.screenForm.endTime1,
  412. endTime2: this.screenForm.endTime2,
  413. examineBy: this.screenForm.examineBy,
  414. remark: this.screenForm.remark,
  415. startCreateTime: this.screenForm.startCreateTime,
  416. startTime1: this.screenForm.startTime1,
  417. startTime2: this.screenForm.startTime2,
  418. status: this.screenForm.status,
  419. title: this.screenForm.title,
  420. customerId: this.screenForm.customerId,
  421. customerNumber: this.screenForm.customerNumber,
  422. specification: this.screenForm.specification
  423. }
  424. getList(params).then(res => {
  425. this.dataList = res.data.records
  426. console.log(this.dataList)
  427. this.listTotal = res.data.total
  428. this.listLoading = false
  429. })
  430. // 产品类型
  431. // const paramsType = {
  432. // pageNum: 1,
  433. // pageSize: 10,
  434. // saleCdoe: '',
  435. // saleName: '',
  436. // stauts: ''
  437. // }
  438. // getTypeList(paramsType).then(res => {
  439. // this.typeList = res.data.records
  440. // })
  441. },
  442. hanleAbandon(id) {
  443. setAbandon({ policyId: id }).then(res => {
  444. this.$successMsg('弃审成功')
  445. this.getList()
  446. })
  447. },
  448. hanleDelete(id) {
  449. this.hanleDeleteAllPromise(id).then(ids => {
  450. deletePolicy({
  451. id: ids[0]
  452. }).then(res => {
  453. this.$successMsg('删除成功')
  454. this.getList()
  455. })
  456. })
  457. },
  458. // 作废
  459. handleNullify(row) {
  460. cancelPolicy({ id: row.id }).then(res => {
  461. this.$successMsg('已作废')
  462. this.getList()
  463. })
  464. },
  465. // 导出文档
  466. handleExport() {
  467. const screenData = {
  468. customerTel: this.diaLogForm.customerTel,
  469. logisticsCompany: this.diaLogForm.logisticsCompany
  470. }
  471. downloadFiles('policy/export', screenData)
  472. },
  473. // 导入
  474. async handleImport(param) {
  475. this.importLoading = true
  476. const file = param.file
  477. console.log(file, 123)
  478. const formData = new FormData()
  479. formData.append('file', file)
  480. const result = await handleImport('/policy/material/import', formData)
  481. this.importLoading = false
  482. this.importFileList = []
  483. if (result.code == 200) {
  484. this.$alert('导入成功', '导入成功', {
  485. confirmButtonText: '确定'
  486. })
  487. this.getList()
  488. } else {
  489. this.$alert('导入失败', '导入失败', {
  490. confirmButtonText: '确定'
  491. })
  492. }
  493. },
  494. handlesubmit(e) {
  495. getpolicySubmit({ policyId: e.id }).then(res => {
  496. this.$successMsg('已提交')
  497. this.getList()
  498. })
  499. },
  500. hanleExamine(e) {
  501. if (e.examineStatus == 'WAIT') {
  502. toExamine({
  503. examineRemark: e.id,
  504. examineStatus: 'WAIT',
  505. policyId: e.id
  506. }).then(res => {
  507. this.$successMsg('已提交')
  508. })
  509. } else {
  510. this.$errorMsg('未满足条件')
  511. }
  512. }
  513. },
  514. components: {
  515. Examine,
  516. Details,
  517. AddModel,
  518. AddPolicy,
  519. EditPolicy,
  520. Pagination,
  521. AddCondition
  522. }
  523. }
  524. </script>
  525. <style lang="scss" scoped>
  526. ::v-deep .el-table .warning-row {
  527. background: oldlace;
  528. }
  529. // ::v-deep .el-table .success-row {
  530. // background: #f0f9eb;
  531. // }
  532. .btn {
  533. width: 80px;
  534. }
  535. .mpd {
  536. padding: 20px 0 0 0;
  537. }
  538. .select_height {
  539. width: 100%;
  540. }
  541. .import-btn {
  542. margin: 0 10px;
  543. }
  544. .header {
  545. display: flex;
  546. height: 50px;
  547. align-items: center;
  548. }
  549. .fr {
  550. margin: 20px 0;
  551. }
  552. </style>