AddPolicy.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579
  1. <template>
  2. <div>
  3. <el-header height="50px" class="header">
  4. <el-page-header @back="$parent.isShow = 1" content="详情页面">
  5. </el-page-header>
  6. </el-header>
  7. <div class="app-container">
  8. <div class="screen-container">
  9. <h4>销售政策信息</h4>
  10. <el-divider></el-divider>
  11. <el-form
  12. :model="searchForm"
  13. :rules="rules"
  14. ref="searchForm"
  15. label-width="120px"
  16. size="small"
  17. class="demo-searchForm"
  18. >
  19. <el-row>
  20. <el-col :xs="24" :ms="12" :lg="12">
  21. <el-form-item label="销售政策编号" prop="code">
  22. <el-input
  23. disabled
  24. v-model="searchForm.code"
  25. placeholder="如未填写,则系统自动生成"
  26. ></el-input>
  27. </el-form-item>
  28. </el-col>
  29. <el-col :xs="24" :ms="12" :lg="12">
  30. <el-form-item label="销售政策说明" prop="title">
  31. <el-input
  32. v-model="searchForm.title"
  33. placeholder="销售政策说明"
  34. ></el-input>
  35. </el-form-item>
  36. </el-col>
  37. <el-col :xs="24" :ms="12" :lg="12">
  38. <el-form-item label="销售政策类型" prop="type">
  39. <el-select
  40. size="small"
  41. v-model="searchForm.type"
  42. placeholder="销售政策类型"
  43. @change="hanleChange"
  44. class="select_height"
  45. >
  46. <el-option
  47. v-for="item in typeOptions"
  48. :key="item.value"
  49. :label="item.label"
  50. :value="item.value"
  51. >
  52. </el-option>
  53. </el-select>
  54. </el-form-item>
  55. </el-col>
  56. <el-col :xs="24" :ms="12" :lg="12">
  57. <el-form-item label="支付钱包类型" prop="name">
  58. <el-select v-model="value" placeholder="请选择">
  59. <el-option
  60. v-for="item in walletList"
  61. :key="item.mainId"
  62. :label="item.mainName"
  63. :value="item.mainId"
  64. >
  65. </el-option>
  66. </el-select>
  67. </el-form-item>
  68. </el-col>
  69. <!-- <el-col :xs="24" :ms="12" :lg="12">
  70. <el-form-item label="制单日期" prop="name">
  71. <el-date-picker
  72. v-model="searchForm.name"
  73. type="date"
  74. placeholder="制单日期"
  75. >
  76. </el-date-picker> </el-form-item
  77. ></el-col> -->
  78. <el-col :xs="24" :ms="12" :lg="12">
  79. <el-form-item label="生效日期" prop="startTime">
  80. <el-date-picker
  81. v-model="searchForm.startTime"
  82. type="datetime"
  83. placeholder="生效日期"
  84. default-time="00:00:00"
  85. value-format="yyyy-MM-dd HH:mm:ss"
  86. >
  87. </el-date-picker> </el-form-item
  88. ></el-col>
  89. <el-col :xs="24" :ms="12" :lg="12">
  90. <el-form-item label="失效日期" prop="endTime">
  91. <el-date-picker
  92. v-model="searchForm.endTime"
  93. type="datetime"
  94. placeholder="失效日期" default-time="00:00:00"
  95. value-format="yyyy-MM-dd HH:mm:ss"
  96. >
  97. </el-date-picker> </el-form-item
  98. ></el-col>
  99. <el-col :xs="24" :ms="24" :lg="24">
  100. <el-form-item label="表头备注" prop="remark">
  101. <el-input
  102. v-model="searchForm.remark"
  103. placeholder="新风机变频挂机。按提货数量1:3开单"
  104. ></el-input>
  105. </el-form-item>
  106. </el-col>
  107. <el-col :xs="24" :ms="24" :lg="24">
  108. <el-form-item label="政策封面图" prop="imgSrc">
  109. <el-upload
  110. class="avatar-uploader"
  111. action="https://jsonplaceholder.typicode.com/posts/"
  112. :show-file-list="false"
  113. :on-success="handleAvatarSuccess"
  114. :before-upload="beforeAvatarUpload"
  115. >
  116. <img v-if="imageUrl" :src="imageUrl" class="avatar" />
  117. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  118. </el-upload>
  119. </el-form-item>
  120. </el-col>
  121. </el-row>
  122. </el-form>
  123. </div>
  124. <div class="mymian-container">
  125. <el-row>
  126. <el-divider></el-divider>
  127. <el-row type="flex">
  128. <el-col :span="12">
  129. <h4 style="display: inline-block; margin-right: 20px">
  130. 货品信息
  131. </h4>
  132. <el-upload
  133. class="import-btn"
  134. :action="baseURL + 'student/import'"
  135. :http-request="handleImport"
  136. :file-list="importFileList"
  137. >
  138. <el-button size="small">导入货品价格表</el-button>
  139. </el-upload>
  140. <el-button size="small" @click="hanleDownloadFiles"
  141. >下载模板</el-button
  142. >
  143. </el-col>
  144. </el-row>
  145. <el-divider></el-divider>
  146. </el-row>
  147. <el-table
  148. v-loading="listLoading"
  149. :data="dataList"
  150. element-loading-text="Loading"
  151. border
  152. fit
  153. highlight-current-row
  154. stripe
  155. >
  156. <el-table-column
  157. fixed
  158. prop="num"
  159. label="序号"
  160. width="50"
  161. align="center"
  162. >
  163. </el-table-column>
  164. <el-table-column
  165. prop="materialNumber"
  166. label="货品编码"
  167. align="center"
  168. >
  169. </el-table-column>
  170. <el-table-column prop="materialName" label="货品名称" align="center">
  171. </el-table-column>
  172. <el-table-column prop="specification" label="规格型号" align="center">
  173. </el-table-column>
  174. <el-table-column
  175. prop="saleTypeCode"
  176. label="销售类型编码"
  177. width="500"
  178. align="center"
  179. >
  180. </el-table-column>
  181. <el-table-column prop="saleTypeName" label="销售类型" align="center">
  182. </el-table-column>
  183. <el-table-column prop="price" label="单价" align="center">
  184. </el-table-column>
  185. <el-table-column label="支付钱包" align="center">
  186. <template slot-scope="scope">
  187. <el-tag
  188. type="danger"
  189. size="small"
  190. v-if="scope.row.walletCommonly == 1"
  191. >
  192. 允许普通钱包
  193. </el-tag>
  194. <el-tag type="danger" size="small" v-else
  195. >不允许使用普通钱包</el-tag
  196. >
  197. <el-tag
  198. type="danger"
  199. size="small"
  200. v-if="scope.row.walletDeduct == 1"
  201. >
  202. 允许抵扣钱包</el-tag
  203. >
  204. <el-tag type="danger" size="small" v-else>不允许抵扣钱包</el-tag>
  205. <el-tag
  206. type="danger"
  207. size="small"
  208. v-if="scope.row.walletRebate == 1"
  209. >
  210. 允许返利钱包
  211. </el-tag>
  212. <el-tag type="danger" size="small" v-else>不允许返利钱包</el-tag>
  213. <el-tag
  214. type="danger"
  215. size="small"
  216. v-if="scope.row.walletSpecial == 1"
  217. >允许特殊钱包</el-tag
  218. >
  219. <el-tag type="danger" size="small" v-else>
  220. 不允许特殊钱包
  221. </el-tag>
  222. </template>
  223. </el-table-column>
  224. <el-table-column fixed="right" label="操作" align="center">
  225. <template slot-scope="scope">
  226. <el-popconfirm
  227. confirm-button-text="好的"
  228. cancel-button-text="不用了"
  229. icon="el-icon-info"
  230. icon-color="red"
  231. title="内容确定删除吗?"
  232. @onConfirm="hanleDelete(scope.row.id)"
  233. >
  234. <el-button
  235. slot="reference"
  236. type="text"
  237. class="textColor el-popover-left"
  238. >删除</el-button
  239. >
  240. </el-popconfirm>
  241. </template>
  242. </el-table-column>
  243. </el-table>
  244. <!-- 分页 -->
  245. <div style="margin: 20px">
  246. <el-pagination
  247. @size-change="handleSizeChange"
  248. @current-change="handleCurrentChange"
  249. :current-page="currentPage"
  250. :page-sizes="[10, 20, 30, 50]"
  251. :page-size="10"
  252. layout="total, sizes, prev, pager, next, jumper"
  253. :total="listTotal"
  254. >
  255. </el-pagination>
  256. </div>
  257. <el-row>
  258. <el-divider></el-divider>
  259. <el-row type="flex">
  260. <el-col :span="12">
  261. <h4 style="display: inline-block; margin-right: 20px">
  262. 条件信息
  263. </h4>
  264. <el-button size="small" @click="$parent.isShow = 3"
  265. >管理条件</el-button
  266. ></el-col
  267. >
  268. </el-row>
  269. <el-divider></el-divider>
  270. </el-row>
  271. <el-table
  272. v-loading="listLoading"
  273. :data="conditionList"
  274. element-loading-text="Loading"
  275. border
  276. fit
  277. highlight-current-row
  278. stripe
  279. >
  280. <el-table-column
  281. fixed
  282. type="index"
  283. label="序号"
  284. width="50"
  285. align="center"
  286. >
  287. </el-table-column>
  288. <el-table-column prop="name" label="限定条件" align="center">
  289. </el-table-column>
  290. <el-table-column
  291. fixed="right"
  292. width="150"
  293. label="操作"
  294. align="center"
  295. >
  296. <template slot-scope="scope">
  297. <el-button type="text" size="small">删除</el-button>
  298. </template>
  299. </el-table-column>
  300. </el-table>
  301. </div>
  302. <div>
  303. <el-row>
  304. <el-divider></el-divider>
  305. <el-row type="flex" align="middle">
  306. <el-col :span="2">
  307. <h4>经销商信息</h4>
  308. </el-col>
  309. </el-row>
  310. <el-divider></el-divider>
  311. </el-row>
  312. <Transfer @handleAddPolicy="handleAddPolicy" />
  313. </div>
  314. </div>
  315. </div>
  316. </template>
  317. <script>
  318. import {
  319. getId,
  320. addPoliy,
  321. getTypeList,
  322. getWalletList,
  323. getMaterialList,
  324. getConditionList,
  325. getCrList,
  326. } from "@/api/supply/sales";
  327. import {
  328. downloadFiles,
  329. handleImport,
  330. deleteMaterialPolicy,
  331. } from "@/utils/util";
  332. import Minxin from "@/mixin";
  333. import Pagination from "@/components/Pagination";
  334. import Transfer from "./Transfer";
  335. export default {
  336. mixins: [Minxin],
  337. data() {
  338. return {
  339. input: "",
  340. baseURL: "",
  341. searchForm: {
  342. code: "",
  343. endTime: "",
  344. imgSrc: "",
  345. remark: "",
  346. startTime: "",
  347. title: "",
  348. type: "",
  349. },
  350. listLoading: false,
  351. rules: {
  352. name: [
  353. { required: true, message: "", trigger: "click" },
  354. { min: 3, max: 5, message: "", trigger: "click" },
  355. ],
  356. },
  357. imageUrl: "",
  358. dataList: [],
  359. importFileList: [],
  360. fileList: [],
  361. options: {},
  362. value: "",
  363. typeList: [],
  364. walletList: [],
  365. typeOptions: [
  366. {
  367. vlaue: "PROVISION",
  368. label: "配提",
  369. },
  370. {
  371. value: "LIMIT",
  372. label: "限量",
  373. },
  374. ],
  375. conditionList: [],
  376. };
  377. },
  378. created() {
  379. this.getCommonApi();
  380. },
  381. mounted() {},
  382. methods: {
  383. //下载excel模板
  384. hanleDownloadFiles() {
  385. downloadFiles("/policy/download");
  386. },
  387. getCommonApi() {
  388. const params = {
  389. pageNum: 1,
  390. pageSize: 10,
  391. saleCode: "",
  392. saleName: "",
  393. status: "",
  394. };
  395. const walletParams = {
  396. pageNum: 1,
  397. pageSize: 10,
  398. mainName: "",
  399. saleTypeCode: "",
  400. saleTypeName: "",
  401. status: "",
  402. };
  403. // 获取销售政策编号
  404. getId().then((res) => {
  405. console.log(res.data);
  406. this.searchForm.code = res.data;
  407. this.$parent.codeId = res.data
  408. });
  409. // 获取销售类型列表
  410. getTypeList(params).then((res) => {
  411. this.typeList = res.data.records;
  412. console.log(this.typeList, "type");
  413. });
  414. // 获取钱包列表
  415. getWalletList(walletParams).then((res) => {
  416. this.walletList = res.data.records;
  417. });
  418. },
  419. // 导入
  420. async handleImport(param) {
  421. this.importLoading = true;
  422. const file = param.file;
  423. console.log(file, 123);
  424. const formData = new FormData();
  425. formData.append("file", file);
  426. formData.append("policyId", this.searchForm.code);
  427. let result = await handleImport("/policy/material/import", formData);
  428. this.importLoading = false;
  429. this.importFileList = [];
  430. if (result.code == 200) {
  431. this.$alert(result.message, "导入成功", {
  432. confirmButtonText: "确定",
  433. });
  434. // this.getList();
  435. this.handletwoList();
  436. } else {
  437. this.$alert(result.message, "导入失败", {
  438. confirmButtonText: "确定",
  439. });
  440. }
  441. },
  442. getList() {
  443. const params = {
  444. policyId: this.searchForm.code,
  445. };
  446. // 获取条件政策
  447. getConditionList(params).then((res) => {
  448. this.conditionList = res.data;
  449. });
  450. },
  451. //获取政策id调取货品信息
  452. hanleChange() {
  453. // this.handletwoList();
  454. },
  455. // 获取货品信息
  456. handletwoList() {
  457. const paramss = {
  458. pageNum: this.currentPage,
  459. pageSize: this.pageSize,
  460. policyId: this.searchForm.code,
  461. saleTypeCode: this.searchForm.type,
  462. };
  463. console.log(45454);
  464. getMaterialList(paramss)
  465. .then((result) => {
  466. this.dataList = result.data.records;
  467. console.log(result, 9898989);
  468. })
  469. .catch((err) => {
  470. console.error(err);
  471. });
  472. },
  473. // 获取图片路径
  474. beforeAvatarUpload() {},
  475. handleAvatarSuccess() {},
  476. // 提交审核
  477. handleAddPolicy(policyCustomers) {
  478. console.log(policyCustomers, "选择的经销商");
  479. var arr = [
  480. {
  481. customerId: "",
  482. customerName: "",
  483. customerNumber: "",
  484. id: "",
  485. lastOrderTime: "",
  486. limitTakeNum: 0,
  487. policyId: "",
  488. policyTitle: "",
  489. remark: "",
  490. },
  491. ];
  492. policyCustomers.forEach((el) => {
  493. arr.push({
  494. customerId: "",
  495. customerName: el.name,
  496. customerNumber: el.number,
  497. lastOrderTime: "",
  498. limitTakeNum: 0,
  499. policyId: this.searchForm.code,
  500. policyTitle: "",
  501. remark: "",
  502. });
  503. });
  504. const params = {
  505. adminCompanyId: "",
  506. code: "",
  507. customerCount: 0,
  508. examineBy: "",
  509. examineRemark: "",
  510. examineStatus: "",
  511. id: "",
  512. imgSrc: "",
  513. policyCustomers: arr,
  514. remark: "",
  515. status: true,
  516. title: "",
  517. type: "",
  518. ...this.searchForm,
  519. };
  520. addPoliy(params).then((res) => {
  521. console.log(res);
  522. });
  523. },
  524. //删除
  525. hanleDelete(id) {
  526. const params = { policyMaterialId: id };
  527. deleteMaterialPolicy(params).then((res) => {
  528. this.$successMsg("删除成功");
  529. this.handletwoList();
  530. });
  531. },
  532. },
  533. components: {
  534. Transfer,
  535. Pagination,
  536. },
  537. };
  538. </script>
  539. <style lang="scss" scoped>
  540. h4 {
  541. margin: 0;
  542. }
  543. .pdt {
  544. padding-top: 20px;
  545. }
  546. .import-btn {
  547. margin-right: 10px;
  548. display: inline-block;
  549. }
  550. .radio {
  551. padding: 20px 0;
  552. }
  553. .el-divider--horizontal {
  554. margin: 20px 0;
  555. }
  556. .el-container .el-divider--horizontal {
  557. margin: 10px;
  558. }
  559. .el-select {
  560. width: 100%;
  561. }
  562. .footer {
  563. margin-bottom: 20px;
  564. }
  565. </style>