rebate_list.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522
  1. <template>
  2. <template-page
  3. ref="pageRef"
  4. :getList="getList"
  5. :operation="operation()"
  6. :optionsEvensGroup="optionsEvensGroup"
  7. :exportList="exportList"
  8. :columnParsing="columnParsing"
  9. :tableAttributes="tableAttributes"
  10. :tableEvents="tableEvents"
  11. >
  12. <div>
  13. <el-dialog :visible.sync="dialogVisible" width="30%" @close="hanelclose" title="返利类型">
  14. <el-form :model="dialogForm" ref="dialogForm" :rules="rules" label-width="120px" :inline="false" size="normal">
  15. <el-form-item label="返利使用钱包" prop="walletRebateId">
  16. <!-- <el-input
  17. v-model="dialogForm.name"
  18. :readonly="type == 3"
  19. ></el-input> -->
  20. <el-select v-model="dialogForm.walletRebateId" :disabled="type == 3" filterable placeholder="请选择钱包">
  21. <el-option
  22. v-for="item in walletList"
  23. :key="item.walletRebateId"
  24. :label="item.name"
  25. :value="item.walletRebateId"
  26. >
  27. </el-option>
  28. </el-select>
  29. </el-form-item>
  30. <el-form-item label="销售类型名称" prop="saleTypeId">
  31. <el-select
  32. v-model="dialogForm.saleTypeId"
  33. :disabled="type == 3"
  34. filterable
  35. @change="handleChange"
  36. placeholder="请选择销售类型名称"
  37. >
  38. <el-option v-for="item in typeList" :key="item.id" :label="item.saleName" :value="item.id"> </el-option>
  39. </el-select>
  40. </el-form-item>
  41. <el-form-item label="销售类型编码" prop="saleTypeCode">
  42. <el-input
  43. disabled
  44. type="text"
  45. v-model="dialogForm.saleTypeCode"
  46. placeholder="选择销售类型自动获取销售编码"
  47. />
  48. </el-form-item>
  49. <el-form-item label="返利折扣比例" prop="rebateRate">
  50. <el-input
  51. type="number"
  52. @mousewheel.native.prevent
  53. placeholder="例如0.1=1折"
  54. :disabled="type == 3"
  55. @change="handleNumber"
  56. v-model.number="dialogForm.rebateRate"
  57. ></el-input>
  58. </el-form-item>
  59. <!-- <el-form-item label="销售类型编码" prop="saleTypeCode">
  60. <el-input
  61. v-model="dialogForm.saleTypeCode"
  62. :readonly="true"
  63. ></el-input>
  64. </el-form-item> -->
  65. <!-- <el-form-item label="产品使用品类" prop="mainName">
  66. <el-input v-model="dialogForm.mainName" :readonly="true"></el-input>
  67. </el-form-item> -->
  68. <el-form-item label="状态" prop="status">
  69. <el-switch
  70. v-model="dialogForm.status"
  71. :disabled="type == 3"
  72. :active-value="true"
  73. :inactive-value="false"
  74. :active-text="dialogForm.status ? '启用' : ''"
  75. >
  76. </el-switch>
  77. </el-form-item>
  78. </el-form>
  79. <template v-if="type !== 3">
  80. <span slot="footer" class="dialog-footer">
  81. <el-button @click="hanleCancel">取 消</el-button>
  82. <el-button type="primary" @click="handelInfo">确 定</el-button>
  83. </span>
  84. </template>
  85. </el-dialog>
  86. </div>
  87. </template-page>
  88. </template>
  89. <script>
  90. import TemplatePage from '@/components/template/template-page-1.vue'
  91. // import add_callback_mixin from '@/components/template/add_callback_mixin.js'
  92. import Mixin from '@/mixin/index'
  93. // import Pagination from '@/components/Pagination'
  94. import {
  95. getDictList,
  96. getTypeList,
  97. getWalletRebateList,
  98. getWalletRebateSaletypeAdd,
  99. getWalletRebateSaletypeDelete,
  100. getWalletRebateSaletypelist,
  101. getWalletRebateSaletypeUpdate,
  102. walletRebateSaletypeListV2,
  103. walletRebateSaletypeListV2Export,
  104. getWalletRebateSaletypeDetail
  105. } from '@/api/policy_list'
  106. export default {
  107. mixins: [],
  108. data() {
  109. return {
  110. // 事件组合
  111. optionsEvensGroup: [
  112. [
  113. [
  114. {
  115. name: '新增',
  116. click: () => {
  117. this.dialogVisible = true
  118. this.type = 1
  119. this.getDictList()
  120. },
  121. isRole: this.$checkBtnRole('add', this.$route.meta.roles)
  122. }
  123. ]
  124. ],
  125. [
  126. [
  127. {
  128. name: '批量删除',
  129. click: async () => {
  130. if (this.recordSelected.length === 0) {
  131. this.$message.error('请选择需要删除的数据')
  132. return
  133. }
  134. this.delfn()
  135. this.$refs.pageRef.refreshList()
  136. this.$message.success('批量删除成功')
  137. },
  138. isRole: this.$checkBtnRole('del', this.$route.meta.roles)
  139. }
  140. ]
  141. ]
  142. ],
  143. // 表格属性
  144. tableAttributes: {
  145. // 启用勾选列
  146. selectColumn: true
  147. },
  148. // 表格事件
  149. tableEvents: {
  150. 'selection-change': this.selectionChange
  151. },
  152. recordSelected: [],
  153. ids: [],
  154. walletList: [],
  155. type: 0, // 0 1
  156. screenForm: {
  157. // mainName: "",
  158. saleTypeCode: '',
  159. saleTypeName: '',
  160. status: ''
  161. },
  162. dialogVisible: false,
  163. dialogForm: {
  164. walletRebateId: '',
  165. rebateRate: '',
  166. saleTypeId: '',
  167. status: '',
  168. saleTypeCode: ''
  169. },
  170. dataList: [],
  171. columns: [
  172. {
  173. prop: 'saleTypeCode',
  174. lable: '销售类型编码',
  175. widht: 160
  176. },
  177. {
  178. prop: 'saleTypeName',
  179. lable: '销售类型名称',
  180. widht: 160
  181. },
  182. {
  183. prop: 'name',
  184. lable: '返利类型',
  185. widht: 160
  186. },
  187. {
  188. prop: 'rebateRate',
  189. lable: '返利折扣比例',
  190. widht: 160
  191. },
  192. {
  193. prop: 'status',
  194. lable: '状态',
  195. widht: 160
  196. },
  197. {
  198. prop: 'createBy',
  199. lable: '创建人',
  200. widht: 160
  201. },
  202. {
  203. prop: 'createTime',
  204. lable: '创建时间',
  205. widht: 160
  206. },
  207. {
  208. prop: 'updateBy',
  209. lable: '更新人',
  210. widht: 160
  211. },
  212. {
  213. prop: 'updateTime',
  214. lable: '更新时间',
  215. widht: 160
  216. }
  217. ],
  218. options: [
  219. {
  220. value: '',
  221. label: '全部'
  222. },
  223. {
  224. value: 1,
  225. label: '已启用'
  226. },
  227. {
  228. value: 0,
  229. label: '已停用'
  230. }
  231. ],
  232. dictListData: [],
  233. typeList: [],
  234. rules: {
  235. walletRebateId: [{ required: true, message: '请输入名称', trigger: 'blur' }],
  236. saleTypeId: [{ required: true, message: '请选择销售类型', trigger: 'blur' }],
  237. rebateRate: [{ required: true, message: '请输入比例', trigger: 'blur' }]
  238. }
  239. }
  240. },
  241. computed: {
  242. exParams() {
  243. return {
  244. pageNum: this.currentPage,
  245. pageSize: this.pageSize,
  246. // mainName: this.screenForm.mainName,
  247. saleTypeCode: this.screenForm.saleTypeCode,
  248. saleTypeName: this.screenForm.saleTypeName,
  249. status: this.screenForm.status
  250. }
  251. }
  252. },
  253. methods: {
  254. // 列表请求函数
  255. getList: walletRebateSaletypeListV2,
  256. // 列表导出函数
  257. exportList: walletRebateSaletypeListV2Export,
  258. // 表格列解析渲染数据更改
  259. columnParsing(item, defaultData) {
  260. return defaultData
  261. },
  262. // 监听勾选变化
  263. selectionChange(data) {
  264. this.recordSelected = data
  265. },
  266. operation() {
  267. return (h, { row, index, column }) => {
  268. return (
  269. <div class="operation-btns">
  270. <el-button
  271. size="mini"
  272. type="text"
  273. onClick={async () => {
  274. this.hanleDateil(row)
  275. }}
  276. >
  277. 查看
  278. </el-button>
  279. {this.$checkBtnRole('edit', this.$route.meta.roles) ? (
  280. <el-button
  281. size="mini"
  282. type="text"
  283. onClick={async () => {
  284. this.hanleEdit(row)
  285. }}
  286. >
  287. 编辑
  288. </el-button>
  289. ) : (
  290. ''
  291. )}
  292. </div>
  293. )
  294. }
  295. },
  296. //
  297. async getDetail(walletRebateSaleTypeId) {
  298. return await getWalletRebateSaletypeDetail({ walletRebateSaleTypeId })
  299. },
  300. //
  301. selectionhangeFn(value) {
  302. console.log(value)
  303. this.ids = value.map(v => v.walletRebateSaleTypeId)
  304. },
  305. //删除
  306. async delfn() {
  307. // if (this.ids.length == 0) {
  308. // this.$message.error("请选择列表数据");
  309. // return;
  310. // }
  311. let res = this.recordSelected.map(v => v.walletRebateSaleTypeId).toString()
  312. await getWalletRebateSaletypeDelete({ walletRebateSaleTypeIds: res })
  313. },
  314. //获取钱包列表
  315. async getWalletList() {
  316. const res = await getWalletRebateList({
  317. pageNum: 1,
  318. pageSize: -1
  319. })
  320. this.walletList = res.data.records
  321. },
  322. // getList() {
  323. // this.listLoading = true
  324. // const params = {
  325. // pageNum: this.currentPage,
  326. // pageSize: this.pageSize,
  327. // // mainName: this.screenForm.mainName,
  328. // saleTypeCode: this.screenForm.saleTypeCode,
  329. // saleTypeName: this.screenForm.saleTypeName,
  330. // status: this.screenForm.status
  331. // }
  332. // getWalletRebateSaletypelist(params).then(res => {
  333. // this.dataList = res.data.records
  334. // this.listTotal = res.data.total
  335. // this.listLoading = false
  336. // })
  337. // // getProductList({
  338. // // productCategoryName: "",
  339. // // productCategoryNumber: "",
  340. // // }).then((res) => {
  341. // // this.productList = res.data;
  342. // // });
  343. // },
  344. handleChange(e) {
  345. this.typeList.find(k => {
  346. if (e == k.id) {
  347. this.dialogForm.saleTypeName = k.saleName
  348. this.dialogForm.saleTypeCode = k.saleCode
  349. // this.dialogForm.mainId = k.mainId;
  350. // this.dialogForm.mainName = k.mainName;
  351. }
  352. })
  353. },
  354. handleNumber(e) {
  355. console.log(e)
  356. if (Number(e) < 0) {
  357. this.dialogForm.rebateRate = ''
  358. this.$errorMsg('不能小于0,输入数值0至1之间')
  359. } else if (Number(e) > 1) {
  360. this.dialogForm.rebateRate = ''
  361. this.$errorMsg('不能大于1,输入数值0至1之间')
  362. } else {
  363. this.dialogForm.rebateRate = e
  364. }
  365. },
  366. handleSwitch(e, walletRebateSaleTypeId) {
  367. getWalletRebateSaletypeUpdate({
  368. walletRebateSaleTypeId,
  369. status: e
  370. }).then(res => {
  371. this.$successMsg('状态已更改')
  372. // this.hanleReset();
  373. })
  374. },
  375. async hanleEdit(item) {
  376. let { data } = await this.getDetail(item.walletRebateSaleTypeId)
  377. this.dialogForm = {
  378. // adminCompanyId: item.adminCompanyId,
  379. // name: item.name,
  380. rebateRate: data.rebateRate,
  381. // rabateSort: item.rabateSort,
  382. // saleTypeCode: item.saleTypeCode,
  383. saleTypeId: data.saleTypeId,
  384. // saleTypeName: item.saleTypeName,
  385. status: data.status,
  386. walletRebateId: data.walletRebateId,
  387. walletRebateSaleTypeId: data.walletRebateSaleTypeId
  388. }
  389. await this.getDictList()
  390. this.handleChange(data.saleTypeId)
  391. this.dialogVisible = true
  392. },
  393. getDictList() {
  394. getDictList({
  395. sysDictEnum: 'PRODUCT_TYPE'
  396. }).then(res => {
  397. this.dictListData = res.data
  398. })
  399. const params = {
  400. pageNum: 1,
  401. pageSize: -1,
  402. saleCode: '',
  403. saleName: '',
  404. status: ''
  405. }
  406. getTypeList(params).then(res => {
  407. this.typeList = res.data.records
  408. })
  409. },
  410. async hanleDateil(item) {
  411. let { data } = await this.getDetail(item.walletRebateSaleTypeId)
  412. this.type = 3
  413. this.dialogVisible = true
  414. this.dialogForm = {
  415. // ...res,
  416. // saleTypeId: res.saleTypeName
  417. walletRebateId: data.walletRebateId,
  418. walletRebateSaleTypeId: data.walletRebateSaleTypeId,
  419. rebateRate: data.rebateRate,
  420. saleTypeId: data.saleTypeId,
  421. status: data.status,
  422. saleTypeCode: data.saleTypeCode
  423. }
  424. await this.getDictList()
  425. this.handleChange(data.saleTypeId)
  426. },
  427. hanelclose() {
  428. this.type = ''
  429. this.hanleReset()
  430. this.$refs.dialogForm.resetFields()
  431. },
  432. handelInfo() {
  433. this.$refs.dialogForm.validate(valid => {
  434. if (valid) {
  435. if (this.type) {
  436. // this.hanleScreen(this.dialogForm.mainId);
  437. const params = {
  438. ...this.dialogForm
  439. }
  440. getWalletRebateSaletypeAdd(params).then(res => {
  441. this.$successMsg('添加成功')
  442. this.hanleReset()
  443. this.$refs.pageRef.refreshList()
  444. })
  445. } else {
  446. const upParams = {
  447. ...this.dialogForm
  448. }
  449. getWalletRebateSaletypeUpdate(upParams).then(res => {
  450. this.$successMsg('修改成功')
  451. this.hanleReset()
  452. this.$refs.pageRef.refreshList()
  453. })
  454. }
  455. } else {
  456. console.log('error submit!!')
  457. return false
  458. }
  459. })
  460. },
  461. hanleReset() {
  462. this.dialogForm = {
  463. name: '',
  464. // mainId: "",
  465. // mainName: "",
  466. // saleTypeCode: "",
  467. // saleTypeName: "",
  468. // rabateRate: "",
  469. status: true
  470. }
  471. // this.$refs.dialogForm.resetFields()
  472. this.dialogVisible = false
  473. // this.getList()
  474. },
  475. hanleCancel() {
  476. this.hanleReset()
  477. this.dialogVisible = false
  478. },
  479. hanleScreen(code) {
  480. // this.dictListData.find((k) => {
  481. // if (k.dictCode == code) {
  482. // this.dialogForm.mainId = k.dictCode;
  483. // this.dialogForm.mainName = k.dictValue;
  484. // return;
  485. // }
  486. // });
  487. }
  488. },
  489. created() {
  490. this.getWalletList()
  491. },
  492. components: {
  493. TemplatePage
  494. }
  495. }
  496. </script>
  497. <style scoped>
  498. .el-switch.is-disabled {
  499. opacity: inherit;
  500. }
  501. ::v-deep .el-select {
  502. width: 100%;
  503. }
  504. .delClass {
  505. margin: 0 10px;
  506. }
  507. </style>