|
@@ -0,0 +1,414 @@
|
|
|
+<script setup>
|
|
|
+import { reactive,ref,onMounted } from "vue";
|
|
|
+import { VueThrottle,downloadFn } from '@/utils/index.js'
|
|
|
+import { openLoading, closeLoading } from '@/utils/loading.js'
|
|
|
+import { ElMessage,ElMessageBox } from 'element-plus'
|
|
|
+import { providerPage,modifyProvider,getBizNoInfo,insertProviderUser,deleteProvider,changeStatus,getThirdAppInfoList } from '@/apis/supplier.js'
|
|
|
+import { setTime } from '@/utils/public.js'
|
|
|
+
|
|
|
+const disabledDate = (time) => {
|
|
|
+ return time.getTime() > new Date().getTime()
|
|
|
+}
|
|
|
+const validateConfirm = (rule, value, callback) => {
|
|
|
+ if (value !== data.useruleForm.password) {
|
|
|
+ callback(new Error('密码不一致'))
|
|
|
+ }
|
|
|
+ callback()
|
|
|
+}
|
|
|
+const data = reactive({
|
|
|
+ searchForm:{
|
|
|
+ name:'',
|
|
|
+ status:'',
|
|
|
+ createTime:[]
|
|
|
+ },
|
|
|
+ statusOptions:[
|
|
|
+ {
|
|
|
+ value:1,
|
|
|
+ label:'正常'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value:0,
|
|
|
+ label:'失效'
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ tableData: [],
|
|
|
+ pagingData: {
|
|
|
+ current: 1,
|
|
|
+ size: 20,
|
|
|
+ total: 0,
|
|
|
+ },
|
|
|
+ couponBizList:[],//兑换券编号
|
|
|
+ currencyOpions:[],//游戏币编号
|
|
|
+ title:'新增',
|
|
|
+ ruleForm:{
|
|
|
+ currencyBizList: [],
|
|
|
+ name: "",
|
|
|
+ status: undefined,
|
|
|
+ appId:''
|
|
|
+ },
|
|
|
+ rules:{
|
|
|
+ name:[
|
|
|
+ { required: true, message: "请输入", trigger: "blur" },
|
|
|
+ ],
|
|
|
+ status:[
|
|
|
+ { required: true, message: "请选择", trigger: "blur" },
|
|
|
+ ],
|
|
|
+ appId:[
|
|
|
+ { required: true, message: "请选择", trigger: "blur" },
|
|
|
+ ],
|
|
|
+ currencyBizList:[
|
|
|
+ { required: true, message: "请选择", trigger: "blur" },
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ useruleForm:{
|
|
|
+ username:'',//用户名
|
|
|
+ phone:'',//手机号
|
|
|
+ providerId:'',//供应商id
|
|
|
+ password:'',//密码
|
|
|
+ confirmPassword:'',//确认密码
|
|
|
+ name:'',//名称
|
|
|
+ },
|
|
|
+ userules:{
|
|
|
+ username:[
|
|
|
+ { required: true, message: "用户名不能为空", trigger: "blur" },
|
|
|
+ ],
|
|
|
+ phone:[
|
|
|
+ { required: true, message: "手机号不能为空", trigger: "blur" },
|
|
|
+ ],
|
|
|
+ password:[
|
|
|
+ { required: true, message: "密码不能为空", trigger: "blur" },
|
|
|
+ ],
|
|
|
+ confirmPassword:[
|
|
|
+ { required: true, message: "请再次输入密码", trigger: "blur" },
|
|
|
+ { validator: validateConfirm, trigger: 'blur' }
|
|
|
+ ],
|
|
|
+
|
|
|
+ },
|
|
|
+ appInfoList:[]
|
|
|
+})
|
|
|
+
|
|
|
+
|
|
|
+const getSearchData = (page = 1, size = data.pagingData.size) => {
|
|
|
+ openLoading()
|
|
|
+ let params = {
|
|
|
+ name: data.searchForm.name || undefined,
|
|
|
+ tel: data.searchForm.tel || undefined,
|
|
|
+ status: data.searchForm.status || undefined,
|
|
|
+ }
|
|
|
+ if (data.searchForm.createTime && data.searchForm.createTime.length > 0) {
|
|
|
+ params['startTime'] = data.searchForm.createTime[0] + ' 00:00:00';
|
|
|
+ params['endTime'] = data.searchForm.createTime[1] + ' 23:59:59';
|
|
|
+ }
|
|
|
+ params['current'] = page;
|
|
|
+ params['size'] = size;
|
|
|
+ providerPage(params).then((res) => {
|
|
|
+ if (res.code === 1) {
|
|
|
+ let tableList = res.data.records;
|
|
|
+ tableList.map((i) => {
|
|
|
+ let currencyName = []
|
|
|
+ let currencyNo = []
|
|
|
+ let currencyType = []
|
|
|
+ let currencyTypeName = []
|
|
|
+ i.currencyBizList.map(d => {
|
|
|
+ currencyName.push(d.bizName)
|
|
|
+ currencyNo.push(d.bizNo)
|
|
|
+ d.bizType === 1?d.bizTypeName ='游戏币':d.bizTypeName ='兑换券'
|
|
|
+ currencyType.push(d.bizType)
|
|
|
+ currencyTypeName.push(d.bizTypeName)
|
|
|
+ })
|
|
|
+ i.currencyName = currencyName.join(',')
|
|
|
+ i.currencyNo = currencyNo.join(',')
|
|
|
+ i.currencyType = currencyType.join(',')
|
|
|
+ i.currencyTypeName = currencyTypeName.join(',')
|
|
|
+ })
|
|
|
+
|
|
|
+ data.tableData = tableList;
|
|
|
+ data.pagingData.total = res.data.total;
|
|
|
+ }
|
|
|
+ closeLoading()
|
|
|
+ }).catch(err => {
|
|
|
+ console.log(err);
|
|
|
+ closeLoading()
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+const getBizNoInfoList = async () => {
|
|
|
+ const res = await getBizNoInfo()
|
|
|
+ if(res.code === 1){
|
|
|
+ data.couponBizList = res.data.couponBizList
|
|
|
+ data.currencyOpions = res.data.currencyBizList
|
|
|
+ }
|
|
|
+}
|
|
|
+const getThirdAppInfo = async () => {
|
|
|
+ const res = await getThirdAppInfoList()
|
|
|
+ if(res.code === 1){
|
|
|
+ data.appInfoList = res.data
|
|
|
+ }
|
|
|
+}
|
|
|
+const searchFn = () => {
|
|
|
+ getSearchData()
|
|
|
+
|
|
|
+}
|
|
|
+const refresh = () => {
|
|
|
+ data.searchForm = {
|
|
|
+ name:'',
|
|
|
+ status:'',
|
|
|
+ createTime:[]
|
|
|
+ }
|
|
|
+ getSearchData()
|
|
|
+}
|
|
|
+onMounted(()=>{
|
|
|
+ getBizNoInfoList()
|
|
|
+ getThirdAppInfo()
|
|
|
+ getSearchData()
|
|
|
+})
|
|
|
+const handleSizeChange = (size) => {
|
|
|
+ // console.log(page,'zise');
|
|
|
+ // data.pagingData.current = 1;
|
|
|
+ // data.pagingData.size = size;
|
|
|
+ getSearchData();
|
|
|
+}
|
|
|
+const handleCurrentChange = (page) => {
|
|
|
+ getSearchData(page)
|
|
|
+}
|
|
|
+
|
|
|
+const showDialog = ref(false)
|
|
|
+const ruleFormRef = ref(null)
|
|
|
+const disabled = ref(false)
|
|
|
+const add = () => {
|
|
|
+ data.ruleForm = {
|
|
|
+ currencyBizList: [],
|
|
|
+ name: "",
|
|
|
+ status: undefined,
|
|
|
+ appId:''
|
|
|
+ }
|
|
|
+ data.title = '新增'
|
|
|
+ disabled.value = false
|
|
|
+ showDialog.value = true
|
|
|
+}
|
|
|
+const edit = (row) => {
|
|
|
+ let arr = JSON.parse(row.currencyBizList[0].thirdAppId)
|
|
|
+ data.ruleForm = {
|
|
|
+ id:row.id,
|
|
|
+ currencyBizList: row.currencyBizList,
|
|
|
+ name: row.name,
|
|
|
+ status: row.status,
|
|
|
+ appId:row.currencyBizList[0].thirdAppId
|
|
|
+ }
|
|
|
+ disabled.value = true
|
|
|
+ data.title = '编辑'
|
|
|
+ showDialog.value = true
|
|
|
+}
|
|
|
+const submit = (formEl) => {
|
|
|
+ formEl.validate(valid => {
|
|
|
+ if(valid){
|
|
|
+ let params = {
|
|
|
+ ...data.ruleForm
|
|
|
+ }
|
|
|
+ modifyProvider(params).then((res) => {
|
|
|
+ if(res.code === 1){
|
|
|
+ ElMessage.success(res.message)
|
|
|
+ getSearchData()
|
|
|
+ closeErr()
|
|
|
+ }else{
|
|
|
+ ElMessage.error(res.message)
|
|
|
+ }
|
|
|
+
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
+const closeErr = () => {
|
|
|
+ ruleFormRef.value.resetFields();
|
|
|
+ showDialog.value = false;
|
|
|
+}
|
|
|
+const adduserDialog = ref(false)
|
|
|
+const addFormRef = ref(null)
|
|
|
+const adduser = (row) => {
|
|
|
+ data.useruleForm = {
|
|
|
+ username:'',//用户名
|
|
|
+ phone:'',//手机号
|
|
|
+ providerId:row.id,//供应商id
|
|
|
+ password:'',//密码
|
|
|
+ confirmPassword:'',//确认密码
|
|
|
+ name:'',//名称
|
|
|
+ }
|
|
|
+ adduserDialog.value = true
|
|
|
+}
|
|
|
+const confirm = (formEl) => {
|
|
|
+ formEl.validate(valid => {
|
|
|
+ if(valid){
|
|
|
+ let params = {
|
|
|
+ ...data.useruleForm
|
|
|
+ }
|
|
|
+ insertProviderUser(params).then(res => {
|
|
|
+ if(res.code === 1){
|
|
|
+ ElMessage.success(res.message)
|
|
|
+ closeuseErr()
|
|
|
+ getSearchData()
|
|
|
+ }else{
|
|
|
+
|
|
|
+ ElMessage.error(res.message)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
+const closeuseErr = () => {
|
|
|
+ addFormRef.value.resetFields();
|
|
|
+ adduserDialog.value = false;
|
|
|
+}
|
|
|
+
|
|
|
+const del = (row) => {
|
|
|
+ ElMessageBox.confirm('确认是否删除','提示',{confirmButtonText:'确认',cancelButtonText:'取消',type:'warning'}).then(() => {
|
|
|
+ deleteProvider(row.id).then(res => {
|
|
|
+ if(res.code === 1){
|
|
|
+ ElMessage.success(res.message)
|
|
|
+ getSearchData()
|
|
|
+ }else{
|
|
|
+ ElMessage.error(res.message)
|
|
|
+ }
|
|
|
+ }).catch(() => {
|
|
|
+
|
|
|
+ })
|
|
|
+ })
|
|
|
+}
|
|
|
+const check = (row) => {
|
|
|
+ ElMessageBox.confirm(`确认是否${row.status === 0?'生效':'失效'}`,'提示',{confirmButtonText:'确认',cancelButtonText:'取消',type:'warning'}).then(() => {
|
|
|
+ let params = {
|
|
|
+ providerId:row.id,
|
|
|
+ status:row.status === 0? 1 : 0
|
|
|
+ }
|
|
|
+ changeStatus(params).then(res => {
|
|
|
+ if(res.code === 1){
|
|
|
+ ElMessage.success(res.message)
|
|
|
+ getSearchData()
|
|
|
+ }else{
|
|
|
+ ElMessage.error(res.message)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ })
|
|
|
+}
|
|
|
+</script>
|
|
|
+<template>
|
|
|
+<!-- 供应商列表管理 -->
|
|
|
+ <div class="suplier-list">
|
|
|
+ <div class="serch-box" style="height:40px">
|
|
|
+ <div class="form-left">
|
|
|
+ <el-form :inline="true" :model="data.searchForm">
|
|
|
+ <el-form-item label="供应商名称">
|
|
|
+ <el-input v-model="data.searchForm.name" placeholder="请输入" clearable></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="状态">
|
|
|
+ <el-select v-model="data.searchForm.status" clearable placeholder="请选择">
|
|
|
+ <el-option v-for="item in data.statusOptions" :key="item.value" :label="item.label"
|
|
|
+ :value="item.value">
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="创建时间">
|
|
|
+ <el-date-picker v-model="data.searchForm.createTime" :disabled-date="disabledDate"
|
|
|
+ type="daterange" value-format="YYYY-MM-DD" unlink-panels range-separator="至"
|
|
|
+ start-placeholder="开始日期" end-placeholder="结束日期" clearable>
|
|
|
+ </el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ </div>
|
|
|
+ <div class="form-right">
|
|
|
+ <el-button type="primary" @click="searchFn" class="iconfont icon-chaxun">搜索</el-button>
|
|
|
+ <el-button type="primary" @click="refresh" class="iconfont icon-xinzeng" plain>重置</el-button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="table-wrapper">
|
|
|
+ <div>
|
|
|
+ <el-button type="primary" @click="add" class="iconfont icon-xinzeng">新增</el-button>
|
|
|
+ </div>
|
|
|
+ <el-table :data="data.tableData" v-adaptive="{ fixedHeader: true, bottomOffset: 85 }"
|
|
|
+ :header-cell-style="{ background: '#FAFAFA', color: '#152129', fontSize: '14px' }" :cell-style="{ height: '50px' }"
|
|
|
+ style="width: 100%; margin-top:11px;">
|
|
|
+ <el-table-column type="index" width="60" align="center" label="序号"></el-table-column>
|
|
|
+ <!-- <el-table-column prop="username" label="用户昵称" align="center" min-width="210"></el-table-column> -->
|
|
|
+ <el-table-column prop="name" width="auto" align="center" min-width="150" label="供应商名称"></el-table-column>
|
|
|
+ <el-table-column prop="status" label="状态" align="center" min-width="160">
|
|
|
+ <template v-slot="scope">
|
|
|
+ <el-tag type="success" v-if="scope.row.status === 1">正常</el-tag>
|
|
|
+ <el-tag type="danger" v-if="scope.row.status === 0">失效</el-tag>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="currencyName" width="auto" align="center" label="游戏业务名称"></el-table-column>
|
|
|
+ <el-table-column prop="currencyNo" width="auto" align="center" label="游戏业务编号"></el-table-column>
|
|
|
+ <!-- <el-table-column prop="currencyTypeName" width="auto" align="center" label="游戏币业务类型"></el-table-column> -->
|
|
|
+ <el-table-column prop="createTime" label="创建时间" align="center" min-width="160">
|
|
|
+ <template v-slot="scope">
|
|
|
+ <p>{{ scope.row.createTime ? scope.row.createTime : '--' }}</p>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="operate" label="操作" min-width="150" fixed="right" align="center">
|
|
|
+ <template v-slot="scope">
|
|
|
+ <el-button size="small" type="primary" link @click="edit(scope.row)">编辑</el-button>
|
|
|
+ <el-button size="small" type="danger" link @click="del(scope.row)">删除</el-button>
|
|
|
+ <el-button size="small" :type="scope.row.status === 0 ?'success':'warning'" link @click="check(scope.row)">{{scope.row.status === 0 ?'生效':'失效'}}</el-button>
|
|
|
+ <el-button size="small" type="info" link @click="adduser(scope.row)">新增用户</el-button>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ <el-pagination class="pagination-style" @size-change="handleSizeChange" @current-change="handleCurrentChange"
|
|
|
+ v-model:current-page="data.pagingData.current" :page-sizes="[10, 20, 50]" v-model:page-size="data.pagingData.size"
|
|
|
+ layout="total, sizes, prev, pager, next" :total="data.pagingData.total">
|
|
|
+ </el-pagination>
|
|
|
+ </div>
|
|
|
+ <el-dialog :title="data.title" v-model="showDialog" width="600px" :before-close="closeErr">
|
|
|
+ <el-form ref="ruleFormRef" label-width="120px" :model="data.ruleForm" :rules="data.rules">
|
|
|
+ <el-form-item label="供应商名称" prop="name">
|
|
|
+ <el-input v-model.trim="data.ruleForm.name" maxlength="30" placeholder="请输入"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="状态" prop="status">
|
|
|
+ <el-select v-model="data.ruleForm.status" placeholder="请选择">
|
|
|
+ <el-option v-for="item in data.statusOptions" :key="item.value" :label="item.label" :value="item.value"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="第三方app" prop="appId">
|
|
|
+ <el-select v-model="data.ruleForm.appId" placeholder="请选择" :disabled="disabled">
|
|
|
+ <el-option v-for="item in data.appInfoList" :key="item.appId" :label="item.appName" :value="item.appId"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="游戏业务名称" prop="currencyBizList">
|
|
|
+ <el-select v-model="data.ruleForm.currencyBizList" placeholder="请选择" multiple clearable value-key="bizNo">
|
|
|
+ <el-option v-for="item in data.currencyOpions" :key="item.value" :label="item.bizName" :value="item"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <div class="btns" slot='footer' style="text-align: center;">
|
|
|
+ <el-button @click='showDialog = false'>取消</el-button>
|
|
|
+ <el-button type='primary' @click="submit(ruleFormRef)">保存</el-button>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
+ <el-dialog title="新增用户" v-model="adduserDialog" width="600px" :before-close="closeuseErr">
|
|
|
+ <el-form ref="addFormRef" label-width="120px" :model="data.useruleForm" :rules="data.userules">
|
|
|
+ <el-form-item label="用户名" prop="username">
|
|
|
+ <el-input v-model.trim="data.useruleForm.username" maxlength="30" placeholder="请输入"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="手机号" prop="phone">
|
|
|
+ <el-input v-model.trim="data.useruleForm.phone" maxlength="30" placeholder="请输入"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="名称" prop="name">
|
|
|
+ <el-input v-model.trim="data.useruleForm.name" maxlength="30" placeholder="请输入"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="密码" prop="password">
|
|
|
+ <el-input v-model.trim="data.useruleForm.password" show-password maxlength="30" placeholder="请输入"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="确认密码" prop="confirmPassword">
|
|
|
+ <el-input v-model.trim="data.useruleForm.confirmPassword" show-password maxlength="30" placeholder="请输入"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <div class="btns" slot='footer' style="text-align: center;">
|
|
|
+ <el-button @click='adduserDialog = false'>取消</el-button>
|
|
|
+ <el-button type='primary' @click="confirm(addFormRef)">保存</el-button>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+
|
|
|
+</style>
|