index.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740
  1. <template>
  2. <div class="app-container personnelMr-table">
  3. <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="120px">
  4. <el-form-item label="分销商名称" label-width="90px">
  5. <el-input
  6. v-model="queryParams.name"
  7. placeholder="请输入分销商名称"
  8. clearable
  9. style="width: 240px;"
  10. @keyup.enter.native="handleQuery"
  11. />
  12. </el-form-item>
  13. <el-form-item label="分销商类型">
  14. <el-select
  15. v-model="queryParams.type"
  16. placeholder="分销商类型"
  17. clearable
  18. style="width: 140px"
  19. >
  20. <el-option
  21. v-for="dict in dict.type.distribution_type"
  22. :key="dict.value"
  23. :label="dict.label"
  24. :value="dict.value"
  25. />
  26. </el-select>
  27. </el-form-item>
  28. <el-form-item label="分销商标签">
  29. <el-select
  30. v-model="queryParams.personsType"
  31. placeholder="分销商标签"
  32. clearable
  33. style="width: 140px"
  34. >
  35. <el-option
  36. v-for="dict in dict.type.persons_type"
  37. :key="dict.value"
  38. :label="dict.label"
  39. :value="dict.value"
  40. />
  41. </el-select>
  42. </el-form-item>
  43. <el-form-item>
  44. <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  45. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  46. </el-form-item>
  47. </el-form>
  48. <el-row :gutter="10" class="mb8">
  49. <el-col :span="1.5">
  50. <el-button
  51. type="primary"
  52. plain
  53. icon="el-icon-plus"
  54. size="mini"
  55. @click="handleAdd"
  56. v-hasPermi="['personnelMr:personnelMr:add']"
  57. >新增</el-button>
  58. </el-col>
  59. <el-col :span="1.5">
  60. <el-button
  61. type="success"
  62. plain
  63. icon="el-icon-setting"
  64. size="mini"
  65. @click="openSet"
  66. v-hasPermi="['personnelMr:personnelMr:set']"
  67. >提现设置</el-button>
  68. </el-col>
  69. <el-col :span="1.5">
  70. <el-button
  71. type="warning"
  72. plain
  73. icon="el-icon-s-tools"
  74. size="mini"
  75. @click="codeSet"
  76. v-hasPermi="['personnelMr:personnelMr:codeSet']"
  77. >推广码海报设置</el-button>
  78. </el-col>
  79. <el-col :span="1.5">
  80. <el-button
  81. type="danger"
  82. plain
  83. icon="el-icon-s-tools"
  84. size="mini"
  85. @click="openRetailRate"
  86. v-hasPermi="['personnelMr:personnelMr:RetailRate']"
  87. >批量设置佣金税率</el-button>
  88. <el-button
  89. type="primary"
  90. size="mini"
  91. icon="el-icon-download"
  92. v-hasPermi="['personnelMr:personnelMr:downloadExcel']"
  93. @click="handleExport"
  94. v-loading.fullscreen.lock="handleExportLoading"
  95. element-loading-text="正在拼命生成数据中..."
  96. element-loading-spinner="el-icon-loading"
  97. element-loading-background="rgba(0, 0, 0, 0.5)"
  98. >导出excel</el-button>
  99. </el-col>
  100. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  101. </el-row>
  102. <el-table ref="tables" v-loading="loading" height="100%" :data="dataList" @selection-change="handleSelectionChange" border>
  103. <el-table-column type="selection" width="55">
  104. </el-table-column>
  105. <el-table-column label="序号" align="center" type="index" width="50"></el-table-column>
  106. <el-table-column label="分销商名称" align="center" prop="name" />
  107. <el-table-column label="分销商类型" align="center" prop="type">
  108. <template slot-scope="scope">
  109. <dict-tag :options="dict.type.distribution_type" :value="scope.row.type"/>
  110. </template>
  111. </el-table-column>
  112. <el-table-column label="分销商标签" align="center" prop="type">
  113. <template slot-scope="scope">
  114. <dict-tag :options="dict.type.persons_type" :value="scope.row.personsType"/>
  115. </template>
  116. </el-table-column>
  117. <el-table-column label="佣金税率" align="center" prop="type">
  118. <template slot-scope="scope">
  119. <span>{{ scope.row.retailRate }}%</span>
  120. </template>
  121. </el-table-column>
  122. <!-- <el-table-column label="佣金税率" align="center" prop="retailRate" /> -->
  123. <el-table-column label="负责人" align="center" prop="contact" />
  124. <el-table-column label="账号/联系电话" align="center" prop="mobile" />
  125. <el-table-column label="被扫次数" align="center" prop="scanCounts" />
  126. <el-table-column label="佣金总额" align="center" prop="brokerageTotal">
  127. <template slot-scope="scope">
  128. <span v-if="scope.row.brokerageTotal">¥{{ scope.row.brokerageTotal }}</span>
  129. </template>
  130. </el-table-column>
  131. <el-table-column label="待提现" align="center" prop="withdrawTotal">
  132. <template slot-scope="scope">
  133. <span v-if="scope.row.withdrawTotal">¥{{ scope.row.withdrawTotal }}</span>
  134. </template>
  135. </el-table-column>
  136. <el-table-column label="是否可提现" align="center" prop="allowWithdraw">
  137. <template slot-scope="scope">
  138. <dict-tag :options="dict.type.user_allow_withdraw" :value="scope.row.allowWithdraw"/>
  139. </template>
  140. </el-table-column>
  141. <el-table-column label="状态" align="center">
  142. <template slot-scope="scope">
  143. <el-switch
  144. @change="ionlineApi(scope.row)"
  145. v-model="scope.row.switchValue"
  146. :active-value="1"
  147. active-color="#13ce66"
  148. inactive-color="#ff4949">
  149. </el-switch>
  150. </template>
  151. </el-table-column>
  152. <el-table-column label="销售人员" align="center" prop="salePerson" />
  153. <el-table-column label="添加时间" align="center" prop="createTime" width="160">
  154. <template slot-scope="scope">
  155. <span>{{ parseTime(scope.row.createTime) }}</span>
  156. </template>
  157. </el-table-column>
  158. <el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width">
  159. <template slot-scope="scope">
  160. <el-button
  161. size="mini"
  162. type="text"
  163. @click="handleUpdate(scope.row)"
  164. v-hasPermi="['personnelMr:personnelMr:edit']"
  165. >修改</el-button>
  166. <el-button
  167. size="mini"
  168. type="text"
  169. @click="resettingApi(scope.row)"
  170. v-hasPermi="['personnelMr:personnelMr:resetting']"
  171. >重置密码</el-button>
  172. <el-button
  173. size="mini"
  174. type="text"
  175. @click="handleCode(scope.row, 'img')"
  176. v-hasPermi="['personnelMr:personnelMr:code']"
  177. >推广码</el-button>
  178. <el-button
  179. size="mini"
  180. type="text"
  181. @click="handleDelete(scope.row,scope.index)"
  182. v-hasPermi="['personnelMr:personnelMr:delete']"
  183. >删除</el-button>
  184. </template>
  185. </el-table-column>
  186. </el-table>
  187. <pagination
  188. v-show="total>0"
  189. :total="total"
  190. :page.sync="queryParams.pageNum"
  191. :limit.sync="queryParams.pageSize"
  192. @pagination="getList"
  193. />
  194. <!-- 新增/编辑弹框 -->
  195. <add-and-edit
  196. ref="addAndEdit"
  197. :dict="dict"
  198. @getList="getList"
  199. />
  200. <!-- 海报设置 -->
  201. <promotion-code ref="promotionCode"></promotion-code>
  202. <el-dialog
  203. title="推广码"
  204. :visible.sync="visibleStatus"
  205. width="400px"
  206. :destroy-on-close="true"
  207. :close-on-click-modal="false"
  208. >
  209. <div style="display: flex;justify-content: center;">
  210. <div style="width: 300px; height: 544px; background-size: cover;background-repeat: no-repeat;box-shadow: 0px 0px 20px 2px rgba(221,221,221,0.5);border-radius: 10px;">
  211. <div id="capture" style="width: 100%;height: 100%;position: relative;border-radius: 10px;">
  212. <img style="width: 100%;height: 100%;" :src="newObj.posterImg" alt="">
  213. <el-image
  214. style="width: 80px; height: 80px; position: absolute; bottom: 10px; right: 10px;"
  215. :src="newObj.url"
  216. fit="fill"
  217. />
  218. </div>
  219. </div>
  220. </div>
  221. <div slot="footer" class="dialog-footer">
  222. <el-button @click="visibleStatus = false">取 消</el-button>
  223. <el-button :loading="getShareImgBase64Loading" type="primary" @click="getShareImgBase64(newObj)">
  224. {{ getShareImgBase64Loading ? '下载中':'下 载' }}</el-button>
  225. </div>
  226. </el-dialog>
  227. <el-dialog
  228. title="提现设置"
  229. :visible.sync="setStatus"
  230. width="650px"
  231. :destroy-on-close="true"
  232. :close-on-click-modal="false"
  233. >
  234. <el-form :model="setForm" ref="setForm" :rules="setFormRules" label-width="120px">
  235. <el-form-item label="类型:" prop="type">
  236. <el-radio-group v-model="setForm.type">
  237. <el-radio label="1">按实值</el-radio>
  238. <el-radio label="2">按比例</el-radio>
  239. </el-radio-group>
  240. </el-form-item>
  241. <el-form-item label="提现手续费" prop="serviceCharge">
  242. <el-input
  243. type="number"
  244. v-model="setForm.serviceCharge"
  245. placeholder="请输入提现手续费"
  246. clearable
  247. @change="changePriceAmount('serviceCharge')"
  248. style="width: 260px;"
  249. >
  250. <template slot="append">{{ setForm.type == 2 ? '%' : '元' }}</template>
  251. </el-input>
  252. </el-form-item>
  253. <!-- <el-form-item label="提现门槛" prop="withdrawMinMoney">
  254. <div>
  255. <el-input
  256. type="number"
  257. v-model="setForm.withdrawMinMoney"
  258. placeholder="请输入提现门槛,最低0.3元"
  259. clearable
  260. @change="changePriceAmount('withdrawMinMoney')"
  261. style="width: 260px;"
  262. >
  263. </el-input>
  264. <span style="margin-left: 5px">元以上方可提现</span>
  265. </div>
  266. <span style="font-size: 14px;color: #777;">注: 最低提现为0.3元</span>
  267. </el-form-item> -->
  268. </el-form>
  269. <div slot="footer" class="dialog-footer">
  270. <el-button @click="setStatus = false">取消</el-button>
  271. <el-button
  272. type="primary"
  273. @click="submitForm"
  274. v-loading.fullscreen.lock="setLoading"
  275. element-loading-text="请等待..."
  276. element-loading-spinner="el-icon-loading"
  277. element-loading-background="rgba(0, 0, 0, 0.8)"
  278. >
  279. <span v-if="loading">提交中...</span>
  280. <span v-else>保存</span>
  281. </el-button>
  282. </div>
  283. </el-dialog>
  284. <el-dialog
  285. title="佣金税率设置"
  286. :visible.sync="showRetailRate"
  287. width="650px"
  288. :destroy-on-close="true"
  289. :close-on-click-modal="false"
  290. >
  291. <el-form :model="retailRateForm" ref="retailRateForm" :rules="retailRateFormRules" label-width="120px">
  292. <el-form-item label="佣金税率设置" prop="retailRate">
  293. <el-input
  294. type="number"
  295. v-model="retailRateForm.retailRate"
  296. placeholder="请输入佣金税率"
  297. clearable
  298. @change="retailRateChange"
  299. style="width: 260px;"
  300. >
  301. <template slot="append">%</template>
  302. </el-input>
  303. </el-form-item>
  304. </el-form>
  305. <div slot="footer" class="dialog-footer">
  306. <el-button @click="showRetailRate = false">取消</el-button>
  307. <el-button
  308. type="primary"
  309. @click="submitRetailRateForm"
  310. v-loading.fullscreen.lock="loading"
  311. element-loading-text="请等待..."
  312. element-loading-spinner="el-icon-loading"
  313. element-loading-background="rgba(0, 0, 0, 0.8)"
  314. >
  315. <span v-if="loading">提交中...</span>
  316. <span v-else>保存</span>
  317. </el-button>
  318. </div>
  319. </el-dialog>
  320. </div>
  321. </template>
  322. <script>
  323. import { pageList, deleteById, updateStatus, configUpdate, getSetInfo, getRetailQrcode ,batchUpdateRetailRate,downOrderListXls} from '@/api/distribution/personnelMr'
  324. import addAndEdit from "./dialog/addAndEdit.vue";
  325. import promotionCode from "./dialog/promotionCode.vue";
  326. import { exportExcel } from '@/utils/exportexcel'
  327. import html2canvas from 'html2canvas'
  328. export default {
  329. name: "agreement",
  330. computed: {
  331. url() {
  332. return url
  333. }
  334. },
  335. dicts: ['distribution_type','user_allow_withdraw','persons_type'],
  336. components: { addAndEdit, promotionCode },
  337. data() {
  338. let validateNumber = (rule, value, callback) => {
  339. let regNumber=/^(([1-9]\d*)|([0][.]{1}[0-9]{0,2}[1-9]+)|([1-9]\d*[.]{1}[0-9]+))$/g;
  340. if (value === '') {
  341. callback(new Error('请输入数值!!!'));
  342. }else if (!regNumber.test(value)) {
  343. callback(new Error('只能输入大于0.3的数值!!!'));
  344. } else if(value < 0.3){
  345. callback(new Error('只能输入大于0.3的数值!!!'));
  346. }else {
  347. callback();
  348. }
  349. };
  350. let validateNumber1 = (rule, value, callback) => {
  351. let regNumber=/^(([1-9]\d*)|([0][.]{1}[0-9]{0,2}[1-9]+)|([1-9]\d*[.]{1}[0-9]+))$/g;
  352. if (value === '') {
  353. callback(new Error('请输入数值!!!'));
  354. } else if (value == 0) {
  355. callback();
  356. } else if (!regNumber.test(value)) {
  357. callback(new Error('只能输入>=0的数值!!!'));
  358. }else {
  359. callback();
  360. }
  361. };
  362. return {
  363. // 遮罩层
  364. loading: true,
  365. // 选中数组
  366. ids: [],
  367. // 非单个禁用
  368. single: true,
  369. // 非多个禁用
  370. multiple: true,
  371. // 显示搜索条件
  372. showSearch: true,
  373. // 总条数
  374. total: 0,
  375. // 用户表格数据
  376. dataList: null,
  377. // 弹出层标题
  378. title: "",
  379. // 是否显示弹出层
  380. open: false,
  381. // 日期范围
  382. dateRange: [],
  383. // 查询参数
  384. queryParams: {
  385. pageNum: 1,
  386. pageSize: 10,
  387. type: undefined
  388. },
  389. statusList: [
  390. {id: 1, name: '未发布', value: 0},
  391. {id: 2, name: '发布', value: 1},
  392. {id: 3, name: '下架', value: 2},
  393. ],
  394. visibleStatus: false,
  395. newObj: {},
  396. visibleType: '',
  397. setStatus: false,
  398. setForm: {},
  399. setFormRules: {
  400. type: [
  401. { required: true, message: '请选择类型', trigger: ['change','blur'] },
  402. ],
  403. serviceCharge: [
  404. { required: true, message: '请输入提现手续费', trigger: ['change','blur'] },
  405. { validator: validateNumber1, trigger: ["blur","change"]},
  406. ],
  407. withdrawMinMoney: [
  408. { required: true, message: '请输入提现门槛,最低0.3元', trigger: ['change','blur'] },
  409. { validator: validateNumber, trigger: ["blur","change"]},
  410. ],
  411. },
  412. setRules: [],
  413. setLoading: false,
  414. getShareImgBase64Loading: false,
  415. showRetailRate: false,//税率设置弹窗
  416. retailRateForm: {ids:[],retailRate:undefined},
  417. retailRateFormRules: {
  418. retailRate: [
  419. { required: true, message: '请输入佣金税率', trigger: ['change','blur'] },
  420. ],
  421. },
  422. handleExportLoading: false,
  423. };
  424. },
  425. created() {
  426. this.getList();
  427. },
  428. methods: {
  429. /** 查询列表 */
  430. getList() {
  431. this.dataList = []
  432. this.loading = true;
  433. pageList(this.queryParams)
  434. .then(response => {
  435. let list = response.data.rows
  436. list.forEach(item =>{
  437. item.switchValue = item.status;
  438. })
  439. this.dataList = list
  440. this.total = response.data.total;
  441. this.loading = false;
  442. }
  443. ).catch(()=>{
  444. this.dataList = []
  445. this.loading = false;
  446. })
  447. },
  448. // 取消按钮
  449. cancel() {
  450. this.open = false;
  451. },
  452. /** 搜索按钮操作 */
  453. handleQuery() {
  454. this.queryParams.pageNum = 1;
  455. this.getList();
  456. },
  457. /** 重置按钮操作 */
  458. resetQuery() {
  459. this.dateRange = [];
  460. this.$set(this.queryParams, 'name', '');
  461. this.$set(this.queryParams, 'type', '');
  462. this.$set(this.queryParams, 'personsType', '');
  463. this.queryParams.pageNum = 1;
  464. this.handleQuery();
  465. },
  466. /** 价格输入事件 */
  467. changePriceAmount(key) {
  468. if(this.setForm[key] * 1 < 0){
  469. this.$message.error("输入需大于或等于0!");
  470. this.$set(this.setForm, key, '');
  471. return false
  472. }
  473. },
  474. /** 新增按钮操作 */
  475. handleAdd() {
  476. this.$refs["addAndEdit"].openDialog("新增数据", null);
  477. },
  478. /** 提现设置按钮操作 */
  479. openSet() {
  480. this.setStatus = true
  481. this.getSetApi();
  482. },
  483. /** 佣金税率设置 */
  484. openRetailRate() {
  485. if(this.ids.length == 0){
  486. this.$message.warning("请选择分销商");
  487. return;
  488. }
  489. console.log('ids',this.ids)
  490. this.showRetailRate = true;
  491. },
  492. /** 海报设置按钮操作 */
  493. codeSet() {
  494. this.$refs["promotionCode"].openDialog("海报设置", null);
  495. },
  496. /** 修改按钮操作 */
  497. handleUpdate(row) {
  498. this.$refs["addAndEdit"].openDialog("修改数据", row);
  499. },
  500. /** 获取提现设置 */
  501. getSetApi(row) {
  502. getSetInfo().then(response => {
  503. const obj = response.data;
  504. this.$nextTick(() => {
  505. this.$set(this.setForm, 'id', obj.id ? obj.id : '');
  506. this.$set(this.setForm, 'withdrawMinMoney', obj.withdrawMinMoney);
  507. this.$set(this.setForm, 'serviceCharge', obj.serviceCharge);
  508. this.$set(this.setForm, 'type', obj.type ? (obj.type + '') : '1');
  509. });
  510. });
  511. },
  512. /** 获取推广码 */
  513. getRetailQrcodeApi(row) {
  514. getRetailQrcode({personsId: row.id}).then(response => {
  515. if(response.code == 200) {
  516. const obj = response.data;
  517. this.newObj = obj;
  518. this.newObj.name = row.name;
  519. this.visibleStatus = true
  520. }
  521. });
  522. },
  523. /**
  524. * 分析提现
  525. * @date 2023-11-22
  526. * @returns {any}
  527. */
  528. submitForm() {
  529. this.$refs["setForm"].validate(async (valid) => {
  530. if (valid) {
  531. try {
  532. this.setLoading = true;
  533. const { code } = await configUpdate({ ...this.setForm });
  534. if (code === 200) {
  535. this.setLoading = false;
  536. this.$message.success("操作成功!");
  537. this.getList();
  538. this.setStatus = false;
  539. }
  540. } catch (error) {
  541. } finally {
  542. this.setLoading = false;
  543. }
  544. }
  545. });
  546. },
  547. /** 佣金税率输入事件 */
  548. retailRateChange(value) {
  549. // 检查输入值是否大于0
  550. if (value <= 0) {
  551. // 如果小于等于0,则将输入值置为0
  552. this.retailRateForm.retailRate = 0;
  553. } else {
  554. // 如果大于0,则保留输入值
  555. this.retailRateForm.retailRate = value;
  556. }
  557. },
  558. // 佣金税率设置
  559. submitRetailRateForm(){
  560. this.retailRateForm.ids = this.ids;
  561. this.$refs["retailRateForm"].validate(async (valid) => {
  562. if (valid) {
  563. try {
  564. this.loading = true;
  565. const { code } = await batchUpdateRetailRate({ ...this.retailRateForm });
  566. if (code === 200) {
  567. this.setLoading = false;
  568. this.$message.success("操作成功!");
  569. this.getList();
  570. this.retailRateForm={ids:[],retailRate:undefined};
  571. this.showRetailRate = false;
  572. }
  573. } catch (error) {
  574. } finally {
  575. this.loading = false;
  576. }
  577. }
  578. });
  579. },
  580. /** 禁用或者启用发布按钮操作 */
  581. ionlineApi(row) {
  582. this.$confirm("是否对分销商名称为" + row.name + "的数据进行" + (row.status == 1 ? '禁用?' : '启用?'), '提示', {
  583. confirmButtonText: '确定',
  584. cancelButtonText: '取消',
  585. type: 'warning'
  586. }).then(() => {
  587. updateStatus({ id: row.id, status: row.status == 1 ? 0 : 1 }).then((res) => {
  588. if (res.code == 200) {
  589. this.$message({
  590. type: 'success',
  591. message: '操作成功!'
  592. });
  593. this.getList();
  594. }
  595. });
  596. }).catch(() => {});
  597. },
  598. /** 置顶或者取消置顶按钮操作 */
  599. resettingApi(row) {
  600. this.$confirm("是否对分销商名称为" + row.name + "的数据进行密码重置?重置后的密码为123456", '提示', {
  601. confirmButtonText: '确定',
  602. cancelButtonText: '取消',
  603. type: 'warning'
  604. }).then(() => {
  605. updateStatus({ id: row.id, password: '123456' }).then((res) => {
  606. if (res.code == 200) {
  607. this.$message({
  608. type: 'success',
  609. message: '操作成功!'
  610. });
  611. this.getList();
  612. }
  613. });
  614. }).catch(() => {});
  615. },
  616. /** 删除按钮操作 */
  617. handleDelete(row) {
  618. this.$modal.confirm('是否确认删除数据分销商名称为"' + row.name + '"的数据项?').then(function() {
  619. return deleteById(row.id);
  620. }).then(() => {
  621. this.getList();
  622. this.$modal.msgSuccess("删除成功");
  623. }).catch(() => {});
  624. },
  625. /** 推广码按钮操作 */
  626. handleCode(obj, type) {
  627. this.getRetailQrcodeApi(obj);
  628. },
  629. // 推广码下载
  630. codeDownload(row) {
  631. let name = this.newObj.name + '的推广码' || ''
  632. if(row){
  633. let a = document.createElement("a");
  634. a.href = row;
  635. if(name.indexOf(".") > -1){
  636. a.download = name;
  637. } else {
  638. a.download = name + ".jpg";
  639. }
  640. a.style.display = "none";
  641. document.body.appendChild(a);
  642. a.click();
  643. a.remove();
  644. }
  645. },
  646. // 推广码 base64
  647. getShareImgBase64() {
  648. return new Promise((resolve) => {
  649. this.getShareImgBase64Loading = true
  650. setTimeout(() => {
  651. // #capture 就是我们要获取截图对应的 DOM 元素选择器
  652. html2canvas(document.querySelector('#capture'), {
  653. useCORS: true, // 【重要】开启跨域配置
  654. scale: window.devicePixelRatio < 3 ? window.devicePixelRatio : 2,
  655. allowTaint: true, // 允许跨域图片
  656. }).then((canvas) => {
  657. const imgData = canvas.toDataURL('image/jpeg', 1.0);
  658. this.codeDownload(imgData);
  659. resolve(imgData);
  660. this.getShareImgBase64Loading = false
  661. }).catch(()=>{
  662. this.getShareImgBase64Loading = false
  663. })
  664. }, 300); // 这里加上 300ms 的延迟是为了让 DOM 元素完全渲染完成后再进行图片的生成
  665. });
  666. },
  667. // 多选框选中数据
  668. handleSelectionChange(selection) {
  669. this.ids = selection.map(item => item.id)
  670. this.single = selection.length!=1
  671. this.multiple = !selection.length
  672. },
  673. /**
  674. * 导出报表
  675. * @date 2022-10-24
  676. * @returns {any}
  677. */
  678. handleExport() {
  679. this.$confirm('您确定要导出当前查询的数据吗?', '提示', {
  680. confirmButtonText: '确定 ',
  681. cancelButtonText: '取消 ',
  682. type: 'warning'
  683. })
  684. .then(() => {
  685. this.handleExportLoading = true;
  686. // const { pageNum, pageSize} = this.params;
  687. let postMap = {}
  688. let params = JSON.parse(JSON.stringify(this.queryParams))
  689. for (let key in params) {
  690. if(key != 'pageNum' && key != 'pageSize' && key != 'time' && key != 'createTime' && key != 'performDate' && key != 'invoiceTime'){
  691. postMap[key] = params[key]
  692. }
  693. }
  694. downOrderListXls(postMap)
  695. .then((res) => {
  696. exportExcel(res, '分销人员', '.xlsx');
  697. this.handleExportLoading = false;
  698. })
  699. .catch((error) => {
  700. console.log("error===",error)
  701. this.handleExportLoading = false;
  702. });
  703. })
  704. .catch(() => {
  705. this.$message.info('您已取消导出!');
  706. });
  707. },
  708. }
  709. };
  710. </script>
  711. <style lang="scss" scoped>
  712. .personnelMr-table {
  713. ::v-deep .el-table {
  714. width: 99.9% !important;
  715. }
  716. }
  717. </style>