123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543 |
- <template>
- <div class="app-container">
- <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="120px">
- <el-form-item label="分销商名称" label-width="90px">
- <el-input
- v-model="queryParams.name"
- placeholder="请输入分销商名称"
- clearable
- style="width: 240px;"
- @keyup.enter.native="handleQuery"
- />
- </el-form-item>
- <el-form-item label="分销商类型">
- <el-select
- v-model="queryParams.type"
- placeholder="分销商类型"
- clearable
- style="width: 140px"
- >
- <el-option
- v-for="dict in dict.type.distribution_type"
- :key="dict.value"
- :label="dict.label"
- :value="dict.value"
- />
- </el-select>
- </el-form-item>
- <el-form-item>
- <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
- <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
- </el-form-item>
- </el-form>
- <el-row :gutter="10" class="mb8">
- <el-col :span="1.5">
- <el-button
- type="primary"
- plain
- icon="el-icon-plus"
- size="mini"
- @click="handleAdd"
- v-hasPermi="['personnelMr:personnelMr:add']"
- >新增</el-button>
- </el-col>
- <el-col :span="1.5">
- <el-button
- type="success"
- plain
- icon="el-icon-setting"
- size="mini"
- @click="openSet"
- v-hasPermi="['personnelMr:personnelMr:set']"
- >提现设置</el-button>
- </el-col>
- <el-col :span="1.5">
- <el-button
- type="warning"
- plain
- icon="el-icon-s-tools"
- size="mini"
- @click="codeSet"
- v-hasPermi="['personnelMr:personnelMr:codeSet']"
- >推广码海报设置</el-button>
- </el-col>
- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
- </el-row>
- <el-table ref="tables" v-loading="loading" :data="dataList" border>
- <el-table-column label="序号" align="center" type="index" width="50"></el-table-column>
- <el-table-column label="分销商名称" align="center" prop="name" />
- <el-table-column label="分销商类型" align="center" prop="type">
- <template slot-scope="scope">
- <dict-tag :options="dict.type.distribution_type" :value="scope.row.type"/>
- </template>
- </el-table-column>
- <el-table-column label="负责人" align="center" prop="contact" />
- <el-table-column label="账号/联系电话" align="center" prop="mobile" />
- <el-table-column label="被扫次数" align="center" prop="scanCounts" />
- <el-table-column label="佣金总额" align="center" prop="brokerageTotal">
- <template slot-scope="scope">
- <span v-if="scope.row.brokerageTotal">¥{{ scope.row.brokerageTotal }}</span>
- </template>
- </el-table-column>
- <el-table-column label="待提现" align="center" prop="withdrawTotal">
- <template slot-scope="scope">
- <span v-if="scope.row.withdrawTotal">¥{{ scope.row.withdrawTotal }}</span>
- </template>
- </el-table-column>
- <el-table-column label="是否可提现" align="center" prop="allowWithdraw">
- <template slot-scope="scope">
- <dict-tag :options="dict.type.user_allow_withdraw" :value="scope.row.allowWithdraw"/>
- </template>
- </el-table-column>
- <el-table-column label="状态" align="center">
- <template slot-scope="scope">
- <el-switch
- @change="ionlineApi(scope.row)"
- v-model="scope.row.switchValue"
- :active-value="1"
- active-color="#13ce66"
- inactive-color="#ff4949">
- </el-switch>
- </template>
- </el-table-column>
- <el-table-column label="销售人员" align="center" prop="salePerson" />
- <el-table-column label="添加时间" align="center" prop="createTime" width="160">
- <template slot-scope="scope">
- <span>{{ parseTime(scope.row.createTime) }}</span>
- </template>
- </el-table-column>
- <el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width">
- <template slot-scope="scope">
- <el-button
- size="mini"
- type="text"
- @click="handleUpdate(scope.row)"
- v-hasPermi="['personnelMr:personnelMr:edit']"
- >修改</el-button>
- <el-button
- size="mini"
- type="text"
- @click="resettingApi(scope.row)"
- v-hasPermi="['personnelMr:personnelMr:resetting']"
- >重置密码</el-button>
- <el-button
- size="mini"
- type="text"
- @click="handleCode(scope.row, 'img')"
- v-hasPermi="['personnelMr:personnelMr:code']"
- >推广码</el-button>
- <el-button
- size="mini"
- type="text"
- @click="handleDelete(scope.row,scope.index)"
- v-hasPermi="['personnelMr:personnelMr:delete']"
- >删除</el-button>
- </template>
- </el-table-column>
- </el-table>
- <pagination
- v-show="total>0"
- :total="total"
- :page.sync="queryParams.pageNum"
- :limit.sync="queryParams.pageSize"
- @pagination="getList"
- />
- <!-- 新增/编辑弹框 -->
- <add-and-edit
- ref="addAndEdit"
- :dict="dict"
- @getList="getList"
- />
- <!-- 海报设置 -->
- <promotion-code ref="promotionCode"></promotion-code>
- <el-dialog
- title="推广码"
- :visible.sync="visibleStatus"
- width="400px"
- :destroy-on-close="true"
- :close-on-click-modal="false"
- >
- <div style="display: flex;justify-content: center;">
- <div id="capture" style="width: 300px; height: 544px; position: relative;background-size: cover;background-repeat: no-repeat;box-shadow: 0px 0px 20px 2px rgba(221,221,221,0.5);border-radius: 10px;" :style="{backgroundImage:'url('+newObj.posterImg+')'}">
- <el-image
- style="width: 80px; height: 80px; position: absolute; bottom: 10px; right: 10px;"
- :src="newObj.url"
- fit="fill"
- />
- </div>
- </div>
-
- <div slot="footer" class="dialog-footer">
- <el-button @click="visibleStatus = false">取 消</el-button>
- <el-button :loading="getShareImgBase64Loading" type="primary" @click="getShareImgBase64(newObj)">
- {{ getShareImgBase64Loading ? '下载中':'下 载' }}</el-button>
- </div>
- </el-dialog>
- <el-dialog
- title="提现设置"
- :visible.sync="setStatus"
- width="650px"
- :destroy-on-close="true"
- :close-on-click-modal="false"
- >
- <el-form :model="setForm" ref="setForm" :rules="setFormRules" label-width="120px">
- <el-form-item label="类型:" prop="type">
- <el-radio-group v-model="setForm.type">
- <el-radio label="1">按实值</el-radio>
- <el-radio label="2">按比例</el-radio>
- </el-radio-group>
- </el-form-item>
- <el-form-item label="提现手续费" prop="serviceCharge">
- <el-input
- type="number"
- v-model="setForm.serviceCharge"
- placeholder="请输入提现手续费"
- clearable
- @change="changePriceAmount('serviceCharge')"
- style="width: 260px;"
- >
- <template slot="append">{{ setForm.type == 2 ? '%' : '元' }}</template>
- </el-input>
- </el-form-item>
- <el-form-item label="提现门槛" prop="withdrawMinMoney">
- <div>
- <el-input
- type="number"
- v-model="setForm.withdrawMinMoney"
- placeholder="请输入提现门槛,最低0.3元"
- clearable
- @change="changePriceAmount('withdrawMinMoney')"
- style="width: 260px;"
- >
- </el-input>
- <span style="margin-left: 5px">元以上方可提现</span>
- </div>
- <span style="font-size: 14px;color: #777;">注: 最低提现为0.3元</span>
- </el-form-item>
- </el-form>
- <div slot="footer" class="dialog-footer">
- <el-button @click="setStatus = false">取消</el-button>
- <el-button
- type="primary"
- @click="submitForm"
- v-loading.fullscreen.lock="setLoading"
- element-loading-text="提交中..."
- element-loading-spinner="el-icon-loading"
- element-loading-background="rgba(0, 0, 0, 0.8)"
- >
- <span v-if="loading">提交中...</span>
- <span v-else>保存</span>
- </el-button>
- </div>
- </el-dialog>
- </div>
- </template>
- <script>
- import { pageList, deleteById, updateStatus, configUpdate, getSetInfo, getRetailQrcode } from '@/api/distribution/personnelMr'
- import addAndEdit from "./dialog/addAndEdit.vue";
- import promotionCode from "./dialog/promotionCode.vue";
- import { Message } from 'element-ui'
- import * as url from 'url'
- import html2canvas from 'html2canvas'
- export default {
- name: "agreement",
- computed: {
- url() {
- return url
- }
- },
- dicts: ['distribution_type','user_allow_withdraw'],
- components: { addAndEdit, promotionCode },
- data() {
- let validateNumber = (rule, value, callback) => {
- let regNumber=/^(([1-9]\d*)|([0][.]{1}[0-9]{0,2}[1-9]+)|([1-9]\d*[.]{1}[0-9]+))$/g;
- if (value === '') {
- callback(new Error('请输入数值!!!'));
- }else if (!regNumber.test(value)) {
- callback(new Error('只能输入大于0.3的数值!!!'));
- } else if(value < 0.3){
- callback(new Error('只能输入大于0.3的数值!!!'));
- }else {
- callback();
- }
- };
- let validateNumber1 = (rule, value, callback) => {
- let regNumber=/^(([1-9]\d*)|([0][.]{1}[0-9]{0,2}[1-9]+)|([1-9]\d*[.]{1}[0-9]+))$/g;
- if (value === '') {
- callback(new Error('请输入数值!!!'));
- } else if (value === 0) {
- callback();
- } else if (!regNumber.test(value)) {
- callback(new Error('只能输入>=0的数值!!!'));
- }else {
- callback();
- }
- };
- return {
- // 遮罩层
- loading: true,
- // 选中数组
- ids: [],
- // 非单个禁用
- single: true,
- // 非多个禁用
- multiple: true,
- // 显示搜索条件
- showSearch: true,
- // 总条数
- total: 0,
- // 用户表格数据
- dataList: null,
- // 弹出层标题
- title: "",
- // 是否显示弹出层
- open: false,
- // 日期范围
- dateRange: [],
- // 查询参数
- queryParams: {
- pageNum: 1,
- pageSize: 10,
- type: undefined
- },
- statusList: [
- {id: 1, name: '未发布', value: 0},
- {id: 2, name: '发布', value: 1},
- {id: 3, name: '下架', value: 2},
- ],
- visibleStatus: false,
- newObj: {},
- visibleType: '',
- setStatus: false,
- setForm: {},
- setFormRules: {
- type: [
- { required: true, message: '请选择类型', trigger: ['change','blur'] },
- ],
- serviceCharge: [
- { required: true, message: '请输入提现手续费', trigger: ['change','blur'] },
- { validator: validateNumber1, trigger: ["blur","change"]},
- ],
- withdrawMinMoney: [
- { required: true, message: '请输入提现门槛,最低0.3元', trigger: ['change','blur'] },
- { validator: validateNumber, trigger: ["blur","change"]},
- ],
- },
- setRules: [],
- setLoading: false,
- getShareImgBase64Loading: false,
- };
- },
- created() {
- this.getList();
- },
- methods: {
- /** 查询列表 */
- getList() {
- this.loading = true;
- pageList(this.queryParams)
- .then(response => {
- this.dataList = response.data.rows;
- this.dataList.forEach(item =>{
- item.switchValue = item.status;
- })
- this.total = response.data.total;
- this.loading = false;
- }
- );
- },
- // 取消按钮
- cancel() {
- this.open = false;
- },
- /** 搜索按钮操作 */
- handleQuery() {
- this.queryParams.pageNum = 1;
- this.getList();
- },
- /** 重置按钮操作 */
- resetQuery() {
- this.dateRange = [];
- this.$set(this.queryParams, 'name', '');
- this.$set(this.queryParams, 'type', '');
- this.queryParams.pageNum = 1;
- this.handleQuery();
- },
- /** 价格输入事件 */
- changePriceAmount(key) {
- if(this.setForm[key] * 1 < 0){
- this.$message.error("输入需大于或等于0!");
- this.$set(this.setForm, key, '');
- return false
- }
- },
- /** 新增按钮操作 */
- handleAdd() {
- this.$refs["addAndEdit"].openDialog("新增数据", null);
- },
- /** 提现设置按钮操作 */
- openSet() {
- this.setStatus = true
- this.getSetApi();
- },
- /** 海报设置按钮操作 */
- codeSet() {
- this.$refs["promotionCode"].openDialog("海报设置", null);
- },
- /** 修改按钮操作 */
- handleUpdate(row) {
- this.$refs["addAndEdit"].openDialog("修改数据", row);
- },
- /** 获取提现设置 */
- getSetApi(row) {
- getSetInfo().then(response => {
- const obj = response.data;
- this.$nextTick(() => {
- this.$set(this.setForm, 'id', obj.id ? obj.id : '');
- this.$set(this.setForm, 'withdrawMinMoney', obj.withdrawMinMoney);
- this.$set(this.setForm, 'serviceCharge', obj.serviceCharge);
- this.$set(this.setForm, 'type', obj.type ? (obj.type + '') : '1');
- });
- });
- },
- /** 获取推广码 */
- getRetailQrcodeApi(row) {
- getRetailQrcode({personsId: row.id}).then(response => {
- const obj = response.data;
- this.newObj = obj;
- this.newObj.name = row.name;
- });
- },
- /**
- * 分析提现
- * @date 2023-11-22
- * @returns {any}
- */
- submitForm() {
- this.$refs["setForm"].validate(async (valid) => {
- if (valid) {
- try {
- this.setLoading = true;
- const { code } = await configUpdate({ ...this.setForm });
- if (code === 200) {
- this.setLoading = false;
- this.$message.success("操作成功!");
- this.getList();
- this.setStatus = false;
- }
- } catch (error) {
- } finally {
- this.setLoading = false;
- }
- }
- });
- },
- /** 禁用或者启用发布按钮操作 */
- ionlineApi(row) {
- this.$confirm("是否对分销商名称为" + row.name + "的数据进行" + (row.status == 1 ? '禁用?' : '启用?'), '提示', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning'
- }).then(() => {
- updateStatus({ id: row.id, status: row.status == 1 ? 0 : 1 }).then((res) => {
- if (res.code == 200) {
- this.$message({
- type: 'success',
- message: '操作成功!'
- });
- this.getList();
- }
- });
- }).catch(() => {});
- },
- /** 置顶或者取消置顶按钮操作 */
- resettingApi(row) {
- this.$confirm("是否对分销商名称为" + row.name + "的数据进行密码重置?重置后的密码为123456!", '提示', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning'
- }).then(() => {
- updateStatus({ id: row.id, password: '123456' }).then((res) => {
- if (res.code == 200) {
- this.$message({
- type: 'success',
- message: '操作成功!'
- });
- this.getList();
- }
- });
- }).catch(() => {});
- },
- /** 删除按钮操作 */
- handleDelete(row) {
- this.$modal.confirm('是否确认删除数据分销商名称为"' + row.name + '"的数据项?').then(function() {
- return deleteById(row.id);
- }).then(() => {
- this.getList();
- this.$modal.msgSuccess("删除成功");
- }).catch(() => {});
- },
- /** 推广码按钮操作 */
- handleCode(obj, type) {
- this.getRetailQrcodeApi(obj);
- this.visibleStatus = true
- },
- // 推广码下载
- codeDownload(row) {
- let name = this.newObj.name + '的推广码' || ''
- if(row){
- let a = document.createElement("a");
- a.href = row;
- if(name.indexOf(".") > -1){
- a.download = name;
- } else {
- a.download = name + ".jpg";
- }
- a.style.display = "none";
- document.body.appendChild(a);
- a.click();
- a.remove();
- }
- },
- // 推广码 base64
- getShareImgBase64() {
- return new Promise((resolve) => {
- this.getShareImgBase64Loading = true
- setTimeout(() => {
- // #capture 就是我们要获取截图对应的 DOM 元素选择器
- html2canvas(document.querySelector('#capture'), {
- useCORS: true, // 【重要】开启跨域配置
- scale: window.devicePixelRatio < 3 ? window.devicePixelRatio : 2,
- allowTaint: true, // 允许跨域图片
- }).then((canvas) => {
- const imgData = canvas.toDataURL('image/jpeg', 1.0);
- this.codeDownload(imgData);
- resolve(imgData);
- this.getShareImgBase64Loading = false
- }).catch(()=>{
- this.getShareImgBase64Loading = false
- })
- }, 300); // 这里加上 300ms 的延迟是为了让 DOM 元素完全渲染完成后再进行图片的生成
- });
- },
- }
- };
- </script>
|