rebate_list.vue 15 KB

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