Commit 7c6d7959 authored by xhx's avatar xhx

类型增加及客户表调整

parents 0e015fc6 487e7c3a
This diff is collapsed.
This image diff could not be displayed because it is too large. You can view the blob instead.
...@@ -146,10 +146,12 @@ export default Vue.extend({ ...@@ -146,10 +146,12 @@ export default Vue.extend({
this.searchPageReqParams.startTime = undefined this.searchPageReqParams.startTime = undefined
this.searchPageReqParams.endTime = undefined this.searchPageReqParams.endTime = undefined
this.$nextTick(() => { this.$nextTick(() => {
if (this.type === addUser.superManager) {
this.platformSave({ this.platformSave({
page: 1, page: 1,
}) })
this.query() this.query()
}
}) })
}, },
showModal() { showModal() {
......
...@@ -4,22 +4,28 @@ const columns:Array<column>= ...@@ -4,22 +4,28 @@ const columns:Array<column>=
{ {
title: '发布时间', title: '发布时间',
align:'center', align:'center',
dataIndex: 'time', dataIndex: 'created_at',
scopedSlots:{
customRender :'created_at'
}
}, },
{ {
title: '类型', title: '问题',
align:'center', align:'center',
dataIndex: 'type', dataIndex: 'question',
}, },
{ {
title: '内容', title: '回复',
align:'center', align:'center',
dataIndex: 'content', dataIndex: 'answer',
}, },
{ {
title: '状态', title: '状态',
align:'center', align:'center',
dataIndex: 'state', dataIndex: 'faq_status',
scopedSlots: {
customRender: 'faq_status',
}
}, },
{ {
title: '操作', title: '操作',
......
...@@ -4,27 +4,27 @@ const columns:Array<column> = ...@@ -4,27 +4,27 @@ const columns:Array<column> =
{ {
title: '注册时间', title: '注册时间',
align:'center', align:'center',
dataIndex: 'time', dataIndex: 'created_at',
}, },
{ {
title:'uid', title:'uid',
align:'center', align:'center',
dataIndex:'key' dataIndex:'uuid'
}, },
{ {
title:'姓名', title:'姓名',
align:'center', align:'center',
dataIndex: 'name' dataIndex: 'user_name'
}, },
{ {
title: '手机号', title: '手机号',
align:'center', align:'center',
dataIndex: 'account', dataIndex: 'phone',
}, },
{ {
title: '所属网点', title: '所属网点',
align:'center', align:'center',
dataIndex: 'bank', dataIndex: 'location',
}, },
{ {
title: '备注', title: '备注',
......
...@@ -154,7 +154,6 @@ const columns:Array<column> = ...@@ -154,7 +154,6 @@ const columns:Array<column> =
align:'center', align:'center',
scopedSlots: { customRender: 'firstSubClientManager' }, scopedSlots: { customRender: 'firstSubClientManager' },
role:[ role:[
eRole.firstLevel_sub_branch
] ]
}, },
{ {
......
import { eBannerLocation, eBannerStatus } from '@/types/banner' import { eBannerLocation, eBannerStatus } from '@/types/banner'
import { eUserStatus } from '@/types/user' import { eUserStatus } from '@/types/user'
import { editableProductStatus,eGuaranteeType,eProductType} from '@/types/loanProduct' import { editableProductStatus,eGuaranteeType,eProductType} from '@/types/loanProduct'
import { activityStatus } from "@/service/ActivityService/type" // import { activityStatus } from "@/service/ActivityService/type"
import moment from 'moment' import moment from 'moment'
import { activityStatus } from '@/service/ActivityService/type'
import { eLevel } from '@/types/level' import { eLevel } from '@/types/level'
export default { export default {
......
...@@ -2,7 +2,7 @@ import Vue from 'vue' ...@@ -2,7 +2,7 @@ import Vue from 'vue'
import App from './App.vue' import App from './App.vue'
import router from './router' import router from './router'
import store from './store' import store from './store'
import 'ant-design-vue/dist/antd.css' import 'ant-design-vue/dist/antd.less'
import 'tailwindcss/tailwind.css' import 'tailwindcss/tailwind.css'
import 'element-ui/lib/theme-chalk/index.css' import 'element-ui/lib/theme-chalk/index.css'
import filter from './filter' import filter from './filter'
......
...@@ -2,31 +2,32 @@ import { chat } from '@/types/chat' ...@@ -2,31 +2,32 @@ import { chat } from '@/types/chat'
export const chatList:Array<chat>=[ export const chatList:Array<chat>=[
{ {
key:'1', key:1,
time:'2020-09-21', time:'2020-09-21',
type:'自动回复', type:'自动回复',
content:'您好?请问有什么可以帮到您', content:'您好?请问有什么可以帮到您',
state:'已发布' state:'已发布'
}, },
{ {
key:'2', key:2,
time:'2020-09-21', time:'2020-09-21',
type:'常用', type:'常用问题',
content:'没什么可以帮我', content:'没什么可以帮我',
state:'已发布' state:'已发布'
}, },
{ {
key:'3', key:3,
time:'2020-09-21', time:'2020-09-21',
type:'常用', type:'常用问题',
content:'你们最近的网点在哪里', content:'你们最近的网点在哪里',
state:'已下架' state:'已下架'
}, },
{ {
key:'4', key:4,
time:'2020-09-21', time:'2020-09-21',
type:'自动回复', type:'自动回复',
content:'您好?我们是中小企业协会综合服务平台', content:'您好?我们是中小企业协会综合服务平台',
state:'已下架' state:'已下架'
} },
] ]
import baseAxios from '../index'
import { eAQRStatus } from '@/types/chat'
import { FAQItem } from './type'
export default class FAQService {
static instance: FAQService
static getInstance() {
if (!FAQService.instance) {
FAQService.instance = new FAQService()
}
return FAQService.instance
}
AddQueAns(data:{answer:string;question: string }){
return baseAxios({
url:'/faq/admin/add',
method:'POST',
data,
})
}
DeleteQueAns(data:{id:string}){
return baseAxios({
url:'faq/admin/delete',
method:'DELETE',
// data
params: data,
})
}
CheckQueAnsList(data:{
end_time: number
limit: number
faq_status: number
offset: number
start_time: number
}){
return baseAxios({
url:'faq/admin/list',
method:'POST',
data
})
}
ModifyQueAns(data:{faq_status: eAQRStatus,id: number}){
return baseAxios({
url:'faq/admin/modify/status',
method:'POST',
data,
})
}
CheckMsg(data:{question:string}){
return baseAxios({
url:'faq/query/answer',
method:'GET',
data:data,
})
}
CheckList(){
return baseAxios({
url:'faq/query/list',
method:'GET',
})
}
}
export interface FAQItem{
answer: string,
question: string,
start_time: number,
end_time: number,
faq_status: number,
id: number
limit: number,
offset: number,
}
\ No newline at end of file
...@@ -44,7 +44,7 @@ export default class UserService { ...@@ -44,7 +44,7 @@ export default class UserService {
*/ */
logout() { logout() {
return baseAxios({ return baseAxios({
url: '/login', url: '/logout',
method: 'get', method: 'get',
}) })
} }
......
export interface chat{ export interface chat{
key:string key:number
time:string, time:string,
type:string, type:string,
content:string, content:string,
state:string state:string
}
export enum eAQRStatus {
full=0,
editable = 1,
published = 2,
delete=3,
} }
\ No newline at end of file
<template> <template>
<div class="min-h-screen bg-color-primary flex items-center"> <div
<div class="w-96 h-80 bg-white mx-auto border border-gray-500 py-9"> class="
<p class="font-extrabold text-xl text-center">登录</p> login_background
<div class="w-60 mx-auto text-center"> min-h-screen
<a-tabs default-active-key="1" @change="toggleLoginWay"> bg-center bg-cover
<!-- 账号登录 --> flex flex-col
<a-tab-pane key="1" tab="密码登录"> justify-center
<a-form-model "
v-if="!loading" >
:model="loginByPwdForm" <p class="text-3xl semi-bold text-white text-center mb-10">
:rules="loginByPwdForm.rule" 中小企业普惠金融管理平台
ref="loginByPwdForm" </p>
> <div class="flex items-center">
<a-form-model-item prop="username"> <div
<a-input class="
placeholder="请输入账号" w-96
v-model="loginByPwdForm.username" bg-white
/> mx-auto
</a-form-model-item> py-9
<a-form-model-item prop="password"> rounded-lg
<a-input ring-15 ring-white ring-opacity-40
placeholder="请输入密码" "
type="password" >
v-model="loginByPwdForm.password" <div class="w-60 mx-auto text-center">
/> <a-tabs default-active-key="1" @change="toggleLoginWay">
</a-form-model-item> <!-- 账号登录 -->
</a-form-model> <a-tab-pane key="1" tab="密码登录">
<div v-else class="example"> <a-form-model
<a-spin size="large" /> v-if="!loading"
</div> :model="loginByPwdForm"
</a-tab-pane> :rules="loginByPwdForm.rule"
<!-- 验证码登录 --> ref="loginByPwdForm"
<a-tab-pane key="2" tab="验证码登录" force-render> >
<a-form-model <a-form-model-item prop="username">
v-if="!loading" <a-input
:model="loginBySmsForm" placeholder="请输入账号"
:rules="loginBySmsForm.rule" v-model="loginByPwdForm.username"
ref="loginBySmsForm" >
> <a-icon slot="prefix" type="user" />
<a-form-model-item prop="phoneNumber"> </a-input>
<div class="w-full flex justify-between"> </a-form-model-item>
<a-form-model-item prop="password">
<a-input-password
placeholder="请输入密码"
type="password"
v-model="loginByPwdForm.password"
>
<a-icon slot="prefix" type="lock" />
</a-input-password>
</a-form-model-item>
</a-form-model>
<div v-else class="example">
<a-spin size="large" />
</div>
</a-tab-pane>
<!-- 验证码登录 -->
<a-tab-pane key="2" tab="验证码登录" force-render>
<a-form-model
v-if="!loading"
:model="loginBySmsForm"
:rules="loginBySmsForm.rule"
ref="loginBySmsForm"
>
<a-form-model-item prop="phoneNumber">
<a-input <a-input
placeholder="请输入手机号" placeholder="请输入手机号"
style="width: 60%; margin-right: 10px"
v-model="loginBySmsForm.phoneNumber" v-model="loginBySmsForm.phoneNumber"
/>
<a-button
type="primary"
v-if="smsCount === 60"
@click="handleClickSendSms"
> >
获取验证码 <a-icon slot="prefix" type="phone" />
</a-button> </a-input>
<a-button v-else type="primary" disabled> </a-form-model-item>
已发送 {{ smsCount }} S <a-form-model-item prop="validation">
</a-button> <div class="w-full flex justify-between">
</div> <a-input
</a-form-model-item> style="width: 60%; margin-right: 10px"
<a-form-model-item prop="validation"> placeholder="请输入验证码"
<a-input v-model="loginBySmsForm.validation"
placeholder="请输入验证码" />
v-model="loginBySmsForm.validation" <a-button
/> v-if="smsCount === 60"
</a-form-model-item> @click="handleClickSendSms"
</a-form-model> >
<div v-else class="example"> 获取验证码
<a-spin size="large" /> </a-button>
</div> <a-button v-else type="primary" disabled>
</a-tab-pane> 已发送 {{ smsCount }} S
</a-tabs> </a-button>
<a-button v-if="!loading" type="primary" @click="handleClickLogin"> </div>
确定 </a-form-model-item>
</a-button> </a-form-model>
<div v-else class="example">
<a-spin size="large" />
</div>
</a-tab-pane>
</a-tabs>
<a-button
v-if="!loading"
type="primary"
@click="handleClickLogin"
style="width: 100%; margin-bottom: 30px"
>
登录
</a-button>
</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -82,13 +113,13 @@ import { eNewRoleRelatedToBackEnd, eRole } from "@/types/role"; ...@@ -82,13 +113,13 @@ import { eNewRoleRelatedToBackEnd, eRole } from "@/types/role";
import { setUserMsg } from "@/utils/userMsg/userMsg"; import { setUserMsg } from "@/utils/userMsg/userMsg";
import { eLoginWay } from "./type"; import { eLoginWay } from "./type";
import { phoneValid } from "./const"; import { phoneValid } from "./const";
import { isPhoneValid } from '@/utils/phone/index'; import { isPhoneValid } from "@/utils/phone/index";
import { Tabs, FormModel, message } from "ant-design-vue"; import { Tabs, FormModel, message, Icon } from "ant-design-vue";
import Vue from "vue"; import Vue from "vue";
import UserService from "@/service/UserManagementService"; import UserService from "@/service/UserManagementService";
import VerifyCodeService, { eSmsType } from "@/service/VerifyCodeService"; import VerifyCodeService, { eSmsType } from "@/service/VerifyCodeService";
Vue.use(Tabs); Vue.use(Tabs).use(Icon);
export default Vue.extend({ export default Vue.extend({
props: { props: {
...@@ -202,11 +233,13 @@ export default Vue.extend({ ...@@ -202,11 +233,13 @@ export default Vue.extend({
const { accessToken, level, phone, role, userType } = ret.data; const { accessToken, level, phone, role, userType } = ret.data;
setUserMsg({ setUserMsg({
token: accessToken, token: accessToken,
newRole: this.adminLogin ? eNewRoleRelatedToBackEnd.PlatformAdmin : role, newRole: this.adminLogin
? eNewRoleRelatedToBackEnd.PlatformAdmin
: role,
level: level, level: level,
phone, phone,
userType, userType,
}) });
this.$router.push({ this.$router.push({
name: "home", name: "home",
}); });
...@@ -223,16 +256,18 @@ export default Vue.extend({ ...@@ -223,16 +256,18 @@ export default Vue.extend({
pwd, pwd,
}); });
console.log(ret); console.log(ret);
if (ret.code === 200) { if (ret.code === 200) {
const { accessToken, level, phone, role, userType } = ret.data; const { accessToken, level, phone, role, userType } = ret.data;
setUserMsg({ setUserMsg({
token: accessToken, token: accessToken,
newRole: this.adminLogin ? eNewRoleRelatedToBackEnd.PlatformAdmin : role, newRole: this.adminLogin
? eNewRoleRelatedToBackEnd.PlatformAdmin
: role,
level: level, level: level,
phone, phone,
userType, userType,
}) });
this.$router.push({ this.$router.push({
name: "home", name: "home",
}); });
...@@ -270,4 +305,8 @@ export default Vue.extend({ ...@@ -270,4 +305,8 @@ export default Vue.extend({
padding: 30px 50px; padding: 30px 50px;
margin: 20px 0; margin: 20px 0;
} }
.login_background {
background-image: url(../../assets/login_background.png);
}
</style> </style>
\ No newline at end of file
export enum modal{ export enum modal{
on, on,
off, off,
setDefault,
delete delete
} }
\ No newline at end of file
This diff is collapsed.
<template> <template>
<div> <div>
<a-card :title="title" style="width: 400px; border-radius: 0.75rem"> <a-card :title="title" style="width: 400px; border-radius: 0.75rem;">
<p class="text-blue-400 text-3xl font-medium mb-0 mt-4">{{ total }}</p> <p class=" text-color-primary text-3xl font-bold mb-0 mt-4">{{ total }} <span class=" text-base"></span></p>
</a-card> </a-card>
</div> </div>
</template> </template>
...@@ -27,5 +27,10 @@ export default Vue.extend({ ...@@ -27,5 +27,10 @@ export default Vue.extend({
</script> </script>
<style> <style lang="less" scoped>
/deep/.ant-card-body{
background-image: url(../../../assets/statics_bg.png);
background-size: cover;
background-position: center;
}
</style> </style>
\ No newline at end of file
...@@ -14,16 +14,16 @@ ...@@ -14,16 +14,16 @@
</a-row> </a-row>
<p class="text-2xl font-bold my-5">日活折线图</p> <p class="text-2xl font-bold my-5">日活折线图</p>
<!-- 数据源 --> <!-- 数据源 -->
<span>统计</span> <span>数据</span>
<a-radio-group <a-radio-group
@change="handleChangeSource" @change="handleChangeSource"
:default-value="eBarChart.login_dau" v-model="chartType"
> >
<a-radio-button :value="eBarChart.not_login_dau"> 全局日活 </a-radio-button> <a-radio-button :value="eBarChart.not_login_dau"> 全局日活 </a-radio-button>
<a-radio-button :value="eBarChart.login_dau"> 注册日活 </a-radio-button> <a-radio-button :value="eBarChart.login_dau"> 注册日活 </a-radio-button>
</a-radio-group> </a-radio-group>
<!-- 日期范围 --> <!-- 日期范围 -->
<span class="ml-7">统计</span> <span class="ml-7">日期区间</span>
<a-radio-group @change="handleChangeTimeRange" default-value="10"> <a-radio-group @change="handleChangeTimeRange" default-value="10">
<a-radio-button value="10"> 10天 </a-radio-button> <a-radio-button value="10"> 10天 </a-radio-button>
<a-radio-button value="15"> 15天 </a-radio-button> <a-radio-button value="15"> 15天 </a-radio-button>
...@@ -40,6 +40,7 @@ import { Row, Col, Radio } from "ant-design-vue"; ...@@ -40,6 +40,7 @@ import { Row, Col, Radio } from "ant-design-vue";
import * as echarts from "echarts"; import * as echarts from "echarts";
import { eBarChart } from "./const"; import { eBarChart } from "./const";
import DashboardService from "@/service/DashboardService/index"; import DashboardService from "@/service/DashboardService/index";
import { getPastDaysUtilYesterday } from "@/utils/days/index";
Vue.use(Row).use(Col).use(Radio); Vue.use(Row).use(Col).use(Radio);
export default Vue.extend({ export default Vue.extend({
...@@ -54,25 +55,31 @@ export default Vue.extend({ ...@@ -54,25 +55,31 @@ export default Vue.extend({
data() { data() {
return { return {
option: { option: {
color: "#60A5FA", color: "#3E4FAF",
xAxis: { xAxis: {
type: "category", type: "category",
data: [0], // mock
data: [] as Array<any>
// data: [] as Array<number>,
}, },
yAxis: { yAxis: {
type: "value", type: "value",
}, },
series: [ series: [
{ {
data: [100], // data: [] as Array<number>,
type: "bar", // mock
data: [820, 932, 901, 934, 1290, 1330, 1320,934, 1290, 1330, 1320,820, 932, 901, 934, 1290, 1330, 1320,934, 1290, 1330, 1320],
type: "line",
areaStyle: {color: "#F5F5FB"},
smooth: true,
showBackground: false, showBackground: false,
}, },
], ],
}, },
timeRange: 10, timeRange: 10,
myChart: undefined as undefined | echarts.ECharts, myChart: undefined as undefined | echarts.ECharts,
chartType:'', chartType:eBarChart.not_login_dau,
eBarChart, eBarChart,
type:'', type:'',
login_dau: 0, login_dau: 0,
...@@ -95,10 +102,17 @@ export default Vue.extend({ ...@@ -95,10 +102,17 @@ export default Vue.extend({
}, },
handleChangeSource(e: any) { handleChangeSource(e: any) {
let type = e.target!.value let type = e.target!.value
console.log(type);
this.chartType = type === eBarChart.login_dau? eBarChart.login_dau:eBarChart.not_login_dau this.chartType = type === eBarChart.login_dau? eBarChart.login_dau:eBarChart.not_login_dau
this.queryChart() this.queryChart()
}, },
initEchart(period: number) { initEchart(period: number) {
// mock
(this.option.xAxis.data as Array<String>) = getPastDaysUtilYesterday(
period
) as Array<String>;
//
(this.myChart as echarts.ECharts).setOption(this.option); (this.myChart as echarts.ECharts).setOption(this.option);
this.queryChart() this.queryChart()
}, },
...@@ -111,6 +125,8 @@ export default Vue.extend({ ...@@ -111,6 +125,8 @@ export default Vue.extend({
} }
}, },
async queryChart() { async queryChart() {
console.log(this.timeRange,this.chartType);
const ret = await DashboardService.getInstance().queryChart( const ret = await DashboardService.getInstance().queryChart(
{ {
days:this.timeRange, days:this.timeRange,
...@@ -120,8 +136,9 @@ export default Vue.extend({ ...@@ -120,8 +136,9 @@ export default Vue.extend({
if (ret.code === 200) { if (ret.code === 200) {
console.log(ret); console.log(ret);
ret.data.map((data)=>{ ret.data.map((data)=>{
this.option.series[0].data.push(data.value) // 真实数据
this.option.xAxis.data.push(data.time) // this.option.series[0].data.push(data.value)
// this.option.xAxis.data.push(data.time)
}) })
} }
}, },
......
...@@ -279,7 +279,7 @@ export default Vue.extend({ ...@@ -279,7 +279,7 @@ export default Vue.extend({
let form = this.form let form = this.form
type formtype = keyof typeof form type formtype = keyof typeof form
Object.keys(this.form).forEach(m=>{ Object.keys(this.form).forEach(m=>{
this.form[m as formtype] = '' // this.form[m as formtype] = ''
}) })
this.form['type'] = 1 this.form['type'] = 1
}, },
......
...@@ -110,6 +110,7 @@ ...@@ -110,6 +110,7 @@
:rules="formRules" :rules="formRules"
layout="horizontal" layout="horizontal"
ref="form" ref="form"
style="position: relative;left: 12rem;"
> >
<FormModelItem class="base_form_item my-2" label="所属一级分行"> <FormModelItem class="base_form_item my-2" label="所属一级分行">
<Select <Select
...@@ -176,6 +177,7 @@ ...@@ -176,6 +177,7 @@
label="现属二级支行" label="现属二级支行"
prop="newSecondSubBranch" prop="newSecondSubBranch"
v-if="modalType === eModalType.edit" v-if="modalType === eModalType.edit"
style="position: relative;left: -0.75rem;"
> >
<a-input <a-input
v-model="formData.newSecondSubBranch" v-model="formData.newSecondSubBranch"
...@@ -189,7 +191,7 @@ ...@@ -189,7 +191,7 @@
> >
<a-input v-model="formData.location" placeholder="请输入现详细地址" /> <a-input v-model="formData.location" placeholder="请输入现详细地址" />
</FormModelItem> </FormModelItem>
<FormModelItem class="base_form_item my-2" label="是否营业"> <FormModelItem class="base_form_item my-2" label="是否营业" style="position: relative;left: 1.5rem;">
<a-switch <a-switch
default-checked default-checked
v-model="formData.isOpen" v-model="formData.isOpen"
...@@ -197,17 +199,17 @@ ...@@ -197,17 +199,17 @@
un-checked-children="否" un-checked-children="否"
/> />
</FormModelItem> </FormModelItem>
<div class="flex"> <div class="flex" style="position: relative;left: 1.75rem;">
<FormModelItem class="base_form_item my-2" label="经度" prop="lo"> <FormModelItem class="base_form_item my-2 mr-2" label="经纬度" prop="lo">
<a-input class="w-32" placeholder="经度" v-model="formData.lo" /> <a-input class="w-32" placeholder="经度" v-model="formData.lo" />
</FormModelItem> </FormModelItem>
<FormModelItem class="base_form_item my-2" prop="la"> <FormModelItem class="base_form_item my-2" prop="la" >
<a-input class="w-32" placeholder="纬度" v-model="formData.la" /> <a-input class="w-32 mr-2" placeholder="纬度" v-model="formData.la" />
<a-button type="primary" @click="getLalo">自动获取</a-button> <a-button type="primary" @click="getLalo">自动获取</a-button>
</FormModelItem> </FormModelItem>
</div> </div>
<div class="flex"> <div class="flex" style="position: relative;left: -12rem;">
<div> <div class="flex">
<FormModelItem class="base_form_item my-2" label="营业时间"> <FormModelItem class="base_form_item my-2" label="营业时间">
<CheckBoxGroup v-model="formData.openDays"> <CheckBoxGroup v-model="formData.openDays">
<Checkbox <Checkbox
...@@ -218,21 +220,24 @@ ...@@ -218,21 +220,24 @@
>{{ item.label }}</Checkbox >{{ item.label }}</Checkbox
> >
</CheckBoxGroup> </CheckBoxGroup>
<div class="flex">
<FormModelItem prop="startTime" class="flex justify-center mr-2">
<TimePicker
v-model="formData.startTime"
format="HH:mm"
placeholder="开始时间"
></TimePicker>
</FormModelItem>
<FormModelItem prop="endTime" class="flex justify-center">
<TimePicker
v-model="formData.endTime"
format="HH:mm"
placeholder="结束时间"
></TimePicker>
</FormModelItem>
</div>
</FormModelItem> </FormModelItem>
<FormModelItem prop="startTime">
<TimePicker
v-model="formData.startTime"
format="HH:mm"
placeholder="开始时间"
></TimePicker>
</FormModelItem>
<FormModelItem prop="endTime">
<TimePicker
v-model="formData.endTime"
format="HH:mm"
placeholder="结束时间"
></TimePicker>
</FormModelItem>
</div> </div>
<FormModelItem class="base_form_item my-2" label="备注" prop="remark"> <FormModelItem class="base_form_item my-2" label="备注" prop="remark">
<TextArea <TextArea
...@@ -242,7 +247,7 @@ ...@@ -242,7 +247,7 @@
></TextArea> ></TextArea>
</FormModelItem> </FormModelItem>
</div> </div>
<div class="flex items-center justify-center"> <div class="flex items-center justify-center" style="position: relative;left: -12rem;">
<a-button @click="handleClickCancel">取消</a-button> <a-button @click="handleClickCancel">取消</a-button>
<a-button type="primary" class="ml-10" @click="handleClickConfirm" <a-button type="primary" class="ml-10" @click="handleClickConfirm"
>确认</a-button >确认</a-button
...@@ -385,7 +390,7 @@ export default Vue.extend({ ...@@ -385,7 +390,7 @@ export default Vue.extend({
{ label: "星期四", value: "4", disabled: true }, { label: "星期四", value: "4", disabled: true },
{ label: "星期五", value: "5", disabled: true }, { label: "星期五", value: "5", disabled: true },
{ label: "星期六", value: "6" }, { label: "星期六", value: "6" },
{ label: "星期", value: "7" }, { label: "星期", value: "7" },
], ],
firstBranchOptions: [] as any[], firstBranchOptions: [] as any[],
secondBranchOptions: [] as any[], secondBranchOptions: [] as any[],
...@@ -681,7 +686,7 @@ export default Vue.extend({ ...@@ -681,7 +686,7 @@ export default Vue.extend({
// justify-content: center; // justify-content: center;
display: flex; display: flex;
/deep/ .ant-form-item-label { /deep/ .ant-form-item-label {
margin-right: 30px; padding-right: 30px;
} }
} }
</style> </style>
\ No newline at end of file
...@@ -28,35 +28,54 @@ ...@@ -28,35 +28,54 @@
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="贷款期限(月)"> <a-form-model-item label="贷款期限(月)">
<a-input-number <a-input-number
v-model="form.startTime" :value="form.startTime"
@change="(v) => (form.startTime = Math.floor(v))"
:step="1"
style="width: 20%" style="width: 20%"
:min="0" :min="0"
/> />
—— ——
<a-input-number
<a-input-number v-model="form.endTime" :min="0" style="width: 20%" /> :value="form.endTime"
@change="(v) => (form.endTime = Math.floor(v))"
:step="1"
:min="Math.floor(form.startTime + 1)"
style="width: 20%"
/>
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="参考利率(%)"> <a-form-model-item label="参考利率(%)">
<a-input-number <a-input-number
v-model="form.interstMin" :value="isNaN(form.interstMin)? 0:form.interstMin"
placeholder="最多可输小数点后两位" @change="(v) => ( form.interstMin = Number.parseFloat(v).toFixed(2))"
placeholder="最多可输小数点后两位"
:step="0.01" :step="0.01"
:min="0" :min="0"
style="width: 20%" style="width: 20%"
/> />
—— ——
<a-input-number <a-input-number
v-model="form.interstMax" :value="isNaN(form.interstMax)? +Number.parseFloat(form.interstMin).toFixed(2)+0.01:form.interstMax"
@change="(v) => (form.interstMax = isNaN(v)? 0: Number.parseFloat(v).toFixed(2))"
placeholder="最多可输小数点后两位" placeholder="最多可输小数点后两位"
:step="0.01" :step="0.01"
:min="0" :min="+Number.parseFloat(form.interstMin).toFixed(2)+0.01"
style="width: 20%" style="width: 20%"
/> />
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="贷款额度(万元)"> <a-form-model-item label="贷款额度(万元)">
<a-input-number v-model="form.limitMin" style="width: 20%" :min="0" /> <a-input-number
:value="form.limitMin"
@change="(v) => (form.limitMin = Math.floor(v))"
style="width: 20%"
:min="0"
/>
—— ——
<a-input-number style="width: 20%" v-model="form.limitMax" :min="0" /> <a-input-number
style="width: 20%"
:value="form.limitMax"
@change="(v) => (form.limitMax = Math.floor(v))"
:min="Math.floor(form.limitMin + 1)"
/>
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="担保方式" :wrapper-col="{ span: 5 }"> <a-form-model-item label="担保方式" :wrapper-col="{ span: 5 }">
<a-select <a-select
...@@ -64,7 +83,11 @@ ...@@ -64,7 +83,11 @@
@change="changeGuarantee" @change="changeGuarantee"
v-model="form.guarantee" v-model="form.guarantee"
> >
<a-select-option v-for="(type,i) in guaranteeType" :key="type" :value="i+1"> <a-select-option
v-for="(type, i) in guaranteeType"
:key="type"
:value="i + 1"
>
{{ type }} {{ type }}
</a-select-option> </a-select-option>
</a-select> </a-select>
...@@ -125,7 +148,7 @@ export default Vue.extend({ ...@@ -125,7 +148,7 @@ export default Vue.extend({
}, },
}, },
}, },
async mounted() { async created() {
this.isEditable = this.$route.name == "editLoanProduct" ? true : false; this.isEditable = this.$route.name == "editLoanProduct" ? true : false;
if (this.isEditable) { if (this.isEditable) {
const uuid = this.$route.params.uuid; const uuid = this.$route.params.uuid;
...@@ -157,10 +180,10 @@ export default Vue.extend({ ...@@ -157,10 +180,10 @@ export default Vue.extend({
name: "", name: "",
orgnization: "", orgnization: "",
startTime: 0, startTime: 0,
endTime: 0 , endTime: 0,
interstMax: 0, interstMax: 0,
interstMin: 0, interstMin: 0,
limitMax: 0 as number, limitMax: 0,
limitMin: 0, limitMin: 0,
guarantee: eGuaranteeType.credit, guarantee: eGuaranteeType.credit,
type: eProductType.company, type: eProductType.company,
...@@ -291,9 +314,9 @@ export default Vue.extend({ ...@@ -291,9 +314,9 @@ export default Vue.extend({
} }
}); });
} }
this.productSave({ this.productSave({
page: 1, page: 1,
}); });
} else { } else {
return false; return false;
} }
......
...@@ -62,7 +62,7 @@ ...@@ -62,7 +62,7 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import Vue from "vue" import Vue from "vue"
import { FormModel } from 'ant-design-vue' import { FormModel, message } from 'ant-design-vue'
import { userList } from '@/mock/index' import { userList } from '@/mock/index'
import { user } from '@/types/user' import { user } from '@/types/user'
import { columns } from '@/const/columns/userColumns' import { columns } from '@/const/columns/userColumns'
...@@ -105,7 +105,8 @@ export default Vue.extend({ ...@@ -105,7 +105,8 @@ export default Vue.extend({
current: 1, current: 1,
defaultPageSize: 10, defaultPageSize: 10,
total: 0 total: 0
} },
uuid: ''
} }
}, },
created() { created() {
...@@ -157,18 +158,25 @@ export default Vue.extend({ ...@@ -157,18 +158,25 @@ export default Vue.extend({
this.queryParam.user_name = '' this.queryParam.user_name = ''
this.queryParam.phone = '' this.queryParam.phone = ''
}, },
check(text:user){ check(text:any){
this.visible = true this.visible = true
this.note = text this.note = text
}, },
edit(text:user){ edit(text:any){
this.note = text this.note = text
this.uuid = text.uuid
this.show = true this.show = true
}, },
onSubmit(){ onSubmit(){
(this.$refs.ruleForm as FormModel).validate(valid => { (this.$refs.ruleForm as FormModel).validate(valid => {
if (valid) { if (valid) {
// staff. staff.remarkStaff({uuid: this.uuid, remark: this.form.notes}).then(res => {
if (res.code == 200) {
message.success('编辑成功')
this.reset()
this.getList()
}
})
this.show = false this.show = false
} else { } else {
console.log('error submit!!'); console.log('error submit!!');
......
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
<script lang="ts"> <script lang="ts">
import Vue from 'vue' import Vue from 'vue'
import { Cascader} from 'ant-design-vue' import { Cascader,Icon} from 'ant-design-vue'
import { options } from '@/mock/index' import { options } from '@/mock/index'
import { message } from 'ant-design-vue' import { message } from 'ant-design-vue'
import StaffService from "@/service/StaffService"; import StaffService from "@/service/StaffService";
...@@ -58,7 +58,8 @@ Vue.prototype.$message = message ...@@ -58,7 +58,8 @@ Vue.prototype.$message = message
export default Vue.extend({ export default Vue.extend({
components: { components: {
HeaderSelect HeaderSelect,
Icon
}, },
computed:{ computed:{
options(){ options(){
...@@ -137,8 +138,8 @@ export default Vue.extend({ ...@@ -137,8 +138,8 @@ export default Vue.extend({
break break
} }
} }
if( levelList.length==0){ if( levelList.length==0 && this.search.length == 0 ){
this.$message.info('请通过选择或者输入详细地址搜索') this.$message.info({content:"请通过选择或者输入详细地址搜索",icon:()=>{return this.$createElement('Icon',{style:{color:'#3E4FAF'},props:{type:'exclamation-circle'}})}})
}else{ }else{
const search:string|Array<{value: number, name: string}> = levelList.length==0? this.search:levelList const search:string|Array<{value: number, name: string}> = levelList.length==0? this.search:levelList
console.log(search) console.log(search)
......
<template> <template>
<div> <div>
<a-layout id="components-layout-demo-fixed-sider"> <a-layout id="components-layout-demo-fixed-sider" style="min-height: 100vh" >
<a-layout-sider width="256" style="background: white"> <a-layout-header>
<div class="text-center text-lg my-3">中小企业协会综合服务平台</div> <div class="flex justify-between items-center h-full">
<a-menu <div class="text-center text-lg my-3 flex font-semibold">
style="width: 256px" <img src="../../assets/org_logo.png" class=" w-7 h-7 mr-2">
:open-keys.sync="openKeys" 中小企业协会综合服务平台</div>
mode="inline" <div>
:selectedKeys="selectedKeys" <!-- <a-popover> -->
> <!-- <template slot="content">
<component <p>退出账户</p>
v-for="menu in filteredMenuList" </template> -->
:key="menu.routeName" <div class="flex justify-between items-center">
@click="handleClickMenu" <img class="w-5 h-7 mr-3" src="@/assets/images/avatar.png" alt="头像">
:is="hasChildren(menu) ? 'a-sub-menu' : 'a-menu-item'" {{ phone }}
<span class="inline-block ml-3 cursor-pointer" @click="logout">退出</span>
</div>
<!-- </a-popover> -->
</div>
</div>
</a-layout-header>
<a-layout id="components-layout-demo-fixed-sider" >
<a-layout-sider width="256" style="background: white" :style="{ overflow: 'auto', height: '100vh', position: 'fixed', left: 0 }">
<a-menu
style="width: 256px"
:open-keys.sync="openKeys"
mode="inline"
:selectedKeys="selectedKeys"
> >
{{ hasChildren(menu) ? "" : menu.getName() }} <component
v-for="menu in filteredMenuList"
<span slot="title" v-if="hasChildren(menu)" :key="menu.routeName"
><span>{{ menu.getName() }}</span></span @click="handleClickMenu"
> :is="hasChildren(menu) ? 'a-sub-menu' : 'a-menu-item'"
<a-menu-item
v-for="subItem in getMenuChildren(menu)"
:key="subItem.routeName"
> >
{{ subItem.getName() }} {{ hasChildren(menu) ? "" : menu.getName() }}
</a-menu-item>
</component> <span slot="title" v-if="hasChildren(menu)"
</a-menu> ><span>{{ menu.getName() }}</span></span
</a-layout-sider> >
<a-layout style="min-height: 100vh"> <a-menu-item
v-for="subItem in getMenuChildren(menu)"
:key="subItem.routeName"
>
{{ subItem.getName() }}
</a-menu-item>
</component>
</a-menu>
</a-layout-sider>
<a-layout :style="{ marginLeft: '250px' }">
<a-layout-content <a-layout-content
:style="{ margin: '24px 16px 0', overflow: 'initial' }" :style="{ margin: '24px 16px 0', overflow: 'initial' }"
> >
...@@ -46,6 +65,7 @@ ...@@ -46,6 +65,7 @@
<a-layout-footer :style="{ textAlign: 'center' }"> <a-layout-footer :style="{ textAlign: 'center' }">
普惠金融 ©2021 Created by 33 普惠金融 ©2021 Created by 33
</a-layout-footer> </a-layout-footer>
</a-layout>
</a-layout> </a-layout>
</a-layout> </a-layout>
</div> </div>
...@@ -59,11 +79,14 @@ import { iMenuItem, iMenuList } from "./types"; ...@@ -59,11 +79,14 @@ import { iMenuItem, iMenuList } from "./types";
import { Fragment } from "vue-fragment"; import { Fragment } from "vue-fragment";
import { getUserMsg } from "@/utils/userMsg/userMsg"; import { getUserMsg } from "@/utils/userMsg/userMsg";
import { getOldRoleFromUserMsg } from "@/utils/user"; import { getOldRoleFromUserMsg } from "@/utils/user";
import UserService from '@/service/UserManagementService'
Vue.use(Menu); Vue.use(Menu);
Vue.use(Icon); Vue.use(Icon);
Vue.use(Layout); Vue.use(Layout);
const userService = new UserService()
export default Vue.extend({ export default Vue.extend({
components: { components: {
Fragment, Fragment,
...@@ -93,6 +116,9 @@ export default Vue.extend({ ...@@ -93,6 +116,9 @@ export default Vue.extend({
selectedKeys(): Array<String> { selectedKeys(): Array<String> {
return [(this.$route.meta as { selectedName: string }).selectedName]; return [(this.$route.meta as { selectedName: string }).selectedName];
}, },
phone() {
return JSON.parse(window.localStorage.getItem('USER_MSG') as any).phone
}
}, },
methods: { methods: {
getMenuChildren(menu: iMenuItem) { getMenuChildren(menu: iMenuItem) {
...@@ -121,12 +147,23 @@ export default Vue.extend({ ...@@ -121,12 +147,23 @@ export default Vue.extend({
hasChildren(menu: iMenuItem) { hasChildren(menu: iMenuItem) {
return menu.children && menu.children.length !== 0; return menu.children && menu.children.length !== 0;
}, },
logout() {
userService.logout().then(res => {
if (res.code === 200) {
window.localStorage.clear()
this.$router.push('/login')
}
})
}
}, },
}); });
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
/deep/a { /deep/a {
color: #1890ff; color: #3E4FAF;
}
/deep/ .ant-layout-header {
background: #fff;
} }
</style> </style>
\ No newline at end of file
...@@ -8,9 +8,12 @@ module.exports = { ...@@ -8,9 +8,12 @@ module.exports = {
extend:{ extend:{
colors:{ colors:{
// 主题色 // 主题色
'color-primary':'#1890ff', 'color-primary':'#3E4FAF',
// 登录按钮 // 登录按钮
'btn-login':'#03CDFF' 'btn-login':'#03CDFF'
},
ringWidth: {
'15': '15px',
} }
}, },
screens: { screens: {
......
...@@ -3,6 +3,11 @@ module.exports = { ...@@ -3,6 +3,11 @@ module.exports = {
css: { css: {
loaderOptions: { loaderOptions: {
less: { less: {
modifyVars: {
'primary-color': '#3E4FAF',
// 'link-color': '#1DA57A',
// 'border-radius-base': '2px',
},
javascriptEnabled: true, // 加载LESS 需要把JS设置一下 javascriptEnabled: true, // 加载LESS 需要把JS设置一下
}, },
sass: { sass: {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment