Files
yudao-ui-admin/src/views/bxg/shop/customer/index.vue
T
2022-04-21 18:07:55 +08:00

263 lines
7.9 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div class="app-container">
<!--工具栏-->
<div class="head-container">
<div v-if="crud.props.searchToggle">
<!-- 搜索 -->
<el-input
v-model="query.nickName"
clearable
placeholder="输入用户昵称"
style="width: 200px;"
class="filter-item"
@keyup.enter.native="crud.toQuery"
/>
<el-input
v-model="query.remark"
clearable
placeholder="输入备注"
style="width: 200px;"
class="filter-item"
@keyup.enter.native="crud.toQuery"
/>
<rrOperation :crud="crud" />
</div>
<!--如果想在工具栏加入更多按钮可以使用插槽方式 slot = 'left' or 'right'-->
<crudOperation :permission="permission" />
<!--表单组件-->
<el-dialog
:close-on-click-modal="false"
:before-close="crud.cancelCU"
:visible.sync="crud.status.cu > 0"
:title="crud.status.title"
width="750px"
>
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="120px">
<el-form-item label="用户昵称">
<el-input v-model="form.nickName" style="width: 485px;" :disabled="true" />
</el-form-item>
<el-form-item label="openId">
<el-input v-model="form.openId" style="width: 485px;" :disabled="true" />
</el-form-item>
<el-form-item label="扫码获取">
<div class="qrcode_img">
<el-image :src="gzhsrc" class="qrcode">
<div slot="placeholder" class="image-slot">
加载中
<span class="dot">...</span>
</div>
</el-image>
<div class="attention">
<span class="demonstration">注:未关注公众号请先关注</span>
</div>
</div>
<div class="qrcode_img">
<el-image :src="src" class="qrcode">
<div slot="placeholder" class="image-slot">
加载中
<span class="dot">...</span>
</div>
</el-image>
</div>
</el-form-item>
<el-form-item label="备注" style="margin-top:40px">
<el-input v-model="form.remark" style="width: 485px;" />
</el-form-item>
<el-form-item label="是否启用">
<el-radio v-for="item in dict.is_enable" :key="item.id" v-model="form.isEnable" :label="item.value">{{ item.label }}</el-radio>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="crud.cancelCU">取消</el-button>
<el-button :loading="crud.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
</div>
</el-dialog>
<!--表格渲染-->
<el-table
ref="table"
v-loading="crud.loading"
:data="crud.data"
size="small"
style="width: 100%;"
@selection-change="crud.selectionChangeHandler"
>
<el-table-column type="selection" width="55" />
<el-table-column v-if="columns.visible('id')" prop="id" label="id" />
<el-table-column v-if="columns.visible('nickName')" prop="nickName" label="用户昵称" />
<el-table-column v-if="columns.visible('openId')" prop="openId" label="用户标识" />
<el-table-column v-if="columns.visible('remark')" prop="remark" label="备注" />
<el-table-column v-if="columns.visible('isEnable')" prop="isEnable" label="是否启用">
<template slot-scope="scope">
{{ dict.label.is_enable[scope.row.isEnable] }}
</template>
</el-table-column>
<el-table-column v-if="columns.visible('createTime')" prop="createTime" label="创建时间">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column
v-permission="['admin','yzCustomer:edit','yzCustomer:del']"
label="操作"
width="150px"
align="center"
>
<template slot-scope="scope">
<udOperation :data="scope.row" :permission="permission" />
</template>
</el-table-column>
</el-table>
<!--分页组件-->
<pagination />
</div>
</div>
</template>
<script>
import crudYzCustomer from "@/api/bxg/yxStoreCustomer";
import CRUD, { presenter, header, form, crud } from "@crud/crud";
import rrOperation from "@crud/RR.operation";
import crudOperation from "@crud/CRUD.operation";
import udOperation from "@crud/UD.operation";
import pagination from "@crud/Pagination";
import { RandomNumber } from "@/utils/index";
// crud交由presenter持有
const defaultCrud = CRUD({
title: "消息通知",
url: "api/yxStoreCustomer",
sort: "id,desc",
crudMethod: { ...crudYzCustomer }
});
const defaultForm = {
id: null,
nickName: null,
openId: null,
remark: null,
createTime: null,
updateTime: null
};
export default {
name: "yxStoreCustomer",
components: { pagination, crudOperation, rrOperation, udOperation },
mixins: [presenter(defaultCrud), header(), form(defaultForm), crud()],
dicts: ['is_enable'],
data() {
return {
timer: null, //定时器
src: "",
gzhsrc: "",
permission: {
add: ["admin", "yzCustomer:add"],
edit: ["admin", "yzCustomer:edit"],
del: ["admin", "yzCustomer:del"]
},
rules: {}
};
},
created() {
this.init();
},
methods: {
// 获取数据前设置好接口地址
[CRUD.HOOK.beforeRefresh]() {
const query = this.query;
if (query.type && query.value) {
this.crud.params[query.type] = query.value;
}
return true;
},
[CRUD.HOOK.beforeToAdd]() {
this.randomStr = RandomNumber();
this.src =
process.env.VUE_APP_BASE_API + "/api/wxmp/qrcode?key=" + this.randomStr;
this.setIntervaltimer();
crudYzCustomer.getwechatCode()
//getOpenId("FK14YV17TURrFdyWG4")
.then(res => {
if (res != "") {
this.gzhsrc = res;
console.log(res);
}
})
.catch(err => {
console.log(err.response.data.message);
});
return true;
},
//新增与编辑前做的操作
[CRUD.HOOK.afterToCU](crud, form) {
},
[CRUD.HOOK.beforeToCU]() {
this.randomStr = RandomNumber();
this.src =
process.env.VUE_APP_BASE_API + "/api/wxmp/qrcode?key=" + this.randomStr;
this.setIntervaltimer();
return true;
},
[CRUD.HOOK.afterAddCancel]() {
clearInterval(this.timer);
this.timer = null;
return true;
},
[CRUD.HOOK.afterEditCancel]() {
clearInterval(this.timer);
this.timer = null;
return true;
},
[CRUD.HOOK.afterAddCancel]() {
clearInterval(this.timer);
this.timer = null;
return true;
},
init() {},
setIntervaltimer() {
if (this.timer != null) {
clearInterval(this.timer);
this.timer = null;
}
this.timer = setInterval(() => {
crudYzCustomer.getOpenId(this.randomStr)
//getOpenId("FK14YV17TURrFdyWG4")
.then(res => {
if (res != "") {
this.form.nickName = res.nickName;
this.form.openId = res.openId;
clearInterval(this.timer);
this.timer = null;
}
})
.catch(err => {
console.log(err.response.data.message);
});
}, 2000);
return this.timer;
}
}
};
</script>
<style scoped>
.qrcode_img {
width: 250px;
height: 250px;
float: left;
}
.qrcode_img .qrcode {
width: 100%;
height: 100%;
}
.attention {
line-height: 0px;
color: red;
margin-left: 20px;
font-size: 19px;
}
</style>