提交 f8118d52 authored 作者: 宋雄's avatar 宋雄

新增page

上级 c99bf859
NODE_ENV=development
VUE_APP_API_BASE_URL=http://localhost:8080/jeecg-boot
# VUE_APP_API_BASE_URL='http://192.168.0.118:9999/property-central'
VUE_APP_API_BASE_URL='http://220.203.25.212:9999/property-central'
VUE_APP_CAS_BASE_URL=http://cas.example.org:8443/cas
VUE_APP_ONLINE_BASE_URL=http://fileview.jeecg.com/onlinePreview
......
......@@ -249,12 +249,10 @@
<div id="loader"></div>
<div class="loader-section section-left"></div>
<div class="loader-section section-right"></div>
<div class="load_title">正在加载 JeecgBoot 低代码平台,请耐心等待
</div>
<div class="load_title">加载中,请稍等</div>
</div>
</div>
<script type="text/javascript" src="//api.map.baidu.com/api?type=webgl&v=1.0&ak=CHUN0HYsI6BBdicixQPL6dFLOFICXDkm"></script>
</body>
</html>
\ No newline at end of file
public/logo.png

8.7 KB | W: | H:

public/logo.png

33.3 KB | W: | H:

public/logo.png
public/logo.png
public/logo.png
public/logo.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -56,6 +56,17 @@ const queryMyDepartTreeList = (params)=>getAction("/sys/sysDepart/queryMyDeptTre
const deleteLog = (params)=>deleteAction("/sys/log/delete",params);
const deleteLogList = (params)=>deleteAction("/sys/log/deleteBatch",params);
//入驻管理
const getPropertyListApi = (params)=>getAction("/property/propertySettled/list",params);
const getPropertyDetailApi = (params)=>getAction("/property/propertySettled/queryById",params);
const AddUpdatePropertyApi = (params)=>postAction("/property/propertySettled/add",params);
//费用管理
const getCostListApi = (params)=>getAction("/property/propertyChargrule/list",params);
const getCostDetailApi = (params)=>getAction("/property/propertyChargrule/queryById",params);
const AddUpdateCostApi = (params)=>postAction("/property/propertyChargrule/add",params);
const AuditUpdateCostApi = (params)=>postAction("/property/propertyChargrule/audit",params);
//数据字典
const addDict = (params)=>postAction("/sys/dict/add",params);
const editDict = (params)=>putAction("/sys/dict/edit",params);
......@@ -154,7 +165,15 @@ export {
saveDeptRolePermission,
queryMyDepartTreeList,
getUserNoticeInfo,
getDictItemsFromCache
getDictItemsFromCache,
getPropertyListApi,
getPropertyDetailApi,
AddUpdatePropertyApi,
getCostListApi,
getCostDetailApi,
AddUpdateCostApi,
AuditUpdateCostApi
}
......
src/assets/logo.png

8.7 KB | W: | H:

src/assets/logo.png

33.3 KB | W: | H:

src/assets/logo.png
src/assets/logo.png
src/assets/logo.png
src/assets/logo.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -11,6 +11,7 @@
:beforeUpload="beforeUpload"
:disabled="disabled"
:isMultiple="isMultiple"
:accept="accept"
@change="handleChange"
@preview="handlePreview"
......@@ -88,6 +89,11 @@
type:Number,
required:false,
default:0
},
accept:{
type:[String,null],
required:false,
default:null
}
//update-end-author:wangshuai date:20201021 for:LOWCOD-969 新增number属性,用于判断上传数量
},
......
......@@ -4,18 +4,19 @@
<div class="top">
<div class="header">
<a href="/">
<img src="~@/assets/logo.svg" class="logo" alt="logo">
<span class="title">Jeecg Boot</span>
<!-- <img src="~@/assets/logo.svg" class="logo" alt="logo"> -->
<img src="~@/assets/logo.png" class="logo" alt="logo">
<span class="title">欢迎登陆</span>
</a>
</div>
<div class="desc">
Jeecg Boot 是中国最具影响力的 企业级 低代码平台
湖北汉江之星科技有限公司
</div>
</div>
<route-view></route-view>
<div class="footer">
<!-- <div class="footer">
<div class="links">
<a href="http://doc.jeecg.com" target="_blank">帮助</a>
<a href="https://github.com/zhangdaiscott/jeecg-boot" target="_blank">隐私</a>
......@@ -24,7 +25,7 @@
<div class="copyright">
Copyright &copy; 2019 <a href="http://www.jeecg.com" target="_blank">JEECG开源社区</a> 出品
</div>
</div>
</div> -->
</div>
</div>
</template>
......
<template>
<div class="footer">
<div class="links">
<!-- <div class="links">
<a href="http://www.jeecg.com" target="_blank">JEECG 首页</a>
<a href="https://github.com/zhangdaiscott/jeecg-boot" target="_blank">
<a-icon type="github"/>
......@@ -12,7 +12,8 @@
Copyright
<a-icon type="copyright"/>
2019 <span>JEECG开源社区 出品</span>
</div>
</div> -->
<div>湖北汉江之星科技有限公司</div>
</div>
</template>
......
......@@ -17,7 +17,7 @@
:type="collapsed ? 'menu-unfold' : 'menu-fold'"
@click="toggle"/>
<span v-if="device === 'desktop'">欢迎进入 Jeecg-Boot 企业级低代码平台</span>
<span v-if="device === 'desktop'">欢迎进入 湖北汉江之星科技有限公司 企业平台</span>
<span v-else>Jeecg-Boot</span>
<user-menu :theme="theme"/>
......
......@@ -180,7 +180,7 @@
return {
visible: false,
colorList,
dataFixSiderbar: false
dataFixSiderbar: true
}
},
mounted () {
......
......@@ -4,7 +4,7 @@
<!-- update-begin- author:sunjianlei --- date:20190814 --- for: logo颜色根据主题颜色变化 -->
<img v-if="navTheme === 'dark'" src="~@/assets/logo-white.png" alt="logo">
<img v-else src="~@/assets/logo.svg" alt="logo">
<img v-else src="~@/assets/logo.png" alt="logo">
<!-- update-begin- author:sunjianlei --- date:20190814 --- for: logo颜色根据主题颜色变化 -->
<h1 v-if="showTitle">{{ title }}</h1>
......@@ -21,7 +21,7 @@
props: {
title: {
type: String,
default: 'Jeecg-Boot Pro',
default: '汉江之星',
required: false
},
showTitle: {
......
......@@ -31,7 +31,7 @@
<a-icon type="question-circle-o"></a-icon>
</a>
</span>
<header-notice class="action"/>
<!-- <header-notice class="action"/> -->
<a-dropdown>
<span class="action action-full ant-dropdown-link user-dropdown-menu">
<a-avatar class="avatar" size="small" :src="getAvatar()"/>
......
......@@ -347,21 +347,6 @@ export const constantRouterMap = [
// ]
// },
{
// OAuth2 APP页面路由
path: '/oauth2-app',
component: BlankLayout,
redirect: '/oauth2-app/login',
children: [
{
// OAuth2 登录路由
path: 'login',
name: 'oauth2-app-login',
component: () => import(/* webpackChunkName: "oauth2-app.login" */ '@/views/user/oauth2/OAuth2Login')
},
]
},
{
path: '/test',
component: BlankLayout,
......
......@@ -18,8 +18,8 @@ export default {
navTheme: 'light', // theme for nav menu
layout: 'sidemenu', // nav menu position: sidemenu or topmenu
contentWidth: 'Fixed', // layout of content: Fluid or Fixed, only works when layout is topmenu
fixedHeader: false, // sticky header
fixSiderbar: false, // sticky siderbar
fixedHeader: true, // sticky header
fixSiderbar: true, // sticky siderbar
autoHideHeader: false, // auto hide header
colorWeak: false,
multipage: true, //默认多页签模式
......
......@@ -55,8 +55,6 @@ export const JeecgListMixin = {
if(!this.disableMixinCreated){
console.log(' -- mixin created -- ')
this.loadData();
//初始化字典配置 在自己页面定义
this.initDictConfig();
}
},
computed: {
......@@ -100,9 +98,6 @@ export const JeecgListMixin = {
this.loading = false
})
},
initDictConfig(){
console.log("--这是一个假的方法!")
},
handleSuperQuery(params, matchType) {
//高级查询方法
if(!params){
......@@ -130,7 +125,7 @@ export const JeecgListMixin = {
},
getQueryField() {
//TODO 字段权限控制
var str = "id,";
var str = "id";
this.columns.forEach(function (value) {
str += "," + value.dataIndex;
});
......@@ -368,7 +363,7 @@ export const JeecgListMixin = {
}
let url = getFileAccessHttpUrl(text)
window.open(url);
},
}
}
}
\ No newline at end of file
......@@ -22,8 +22,8 @@ const app = {
theme: '',
layout: '',
contentWidth: '',
fixedHeader: false,
fixSiderbar: false,
fixedHeader: true,
fixSiderbar: true,
autoHideHeader: false,
color: null,
weak: false,
......
......@@ -17,7 +17,7 @@ let apiBaseUrl = window._CONFIG['domianURL'] || "/jeecg-boot";
const service = axios.create({
//baseURL: '/jeecg-boot',
baseURL: apiBaseUrl, // api base_url
timeout: 9000 // 请求超时时间
timeout: 15000 // 请求超时时间
})
const err = (error) => {
......@@ -143,8 +143,8 @@ service.interceptors.request.use(config => {
// response interceptor
service.interceptors.response.use((response) => {
return response.data
}, err)
return response.data
}, err)
const installer = {
vm: {},
......
<template>
<a-card :bordered="false">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<a-col :md="6" :sm="8">
<a-form-item label="广告名称">
<a-input placeholder="请输入广告名称" v-model="queryParam.advName"></a-input>
</a-form-item>
</a-col>
<span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
<a-col :md="6" :sm="24">
<a-button type="primary" @click="searchQuery">查询</a-button>
<a-button style="margin-left: 8px" @click="searchReset">重置</a-button>
</a-col>
</span>
</a-row>
</a-form>
</div>
<!-- 查询区域-END -->
<!-- 操作按钮区域 -->
<div class="table-operator">
<a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
<a-button type="primary" icon="download" @click="handleExportXls('t_property_adv')">导出</a-button>
<a-dropdown v-if="selectedRowKeys.length > 0">
<a-menu slot="overlay">
<a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
</a-menu>
<a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
</a-dropdown>
</div>
<!-- table区域-begin -->
<div>
<div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
<i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>
<a style="margin-left: 24px" v-if="selectedRowKeys.length > 0" @click="onClearSelected">清空</a>
</div>
<a-table
ref="table"
size="middle"
:scroll="{x:true}"
bordered
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
class="j-table-force-nowrap"
@change="handleTableChange">
<template slot="htmlSlot" slot-scope="text">
<div v-html="text"></div>
</template>
<span slot="action" slot-scope="text, record">
<a @click="handleEdit(record)">编辑</a>
<a-divider type="vertical" />
<a-dropdown>
<a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
<a-menu slot="overlay">
<a-menu-item>
<a @click="handleDetail(record)">详情</a>
</a-menu-item>
<a-menu-item>
<a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
<a>删除</a>
</a-popconfirm>
</a-menu-item>
</a-menu>
</a-dropdown>
</span>
</a-table>
</div>
<property-adv-modal ref="modalForm" @ok="modalFormOk"></property-adv-modal>
</a-card>
</template>
<script>
import '@/assets/less/TableExpand.less'
import { mixinDevice } from '@/utils/mixin'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import PropertyAdvModal from './modules/PropertyAdvModal'
import {filterDictTextByCache} from '@/components/dict/JDictSelectUtil'
export default {
name: 'PropertyAdvList',
mixins:[JeecgListMixin, mixinDevice],
components: {
PropertyAdvModal
},
data () {
return {
description: 't_property_adv管理页面',
// 表头
columns: [
// {
// title: '#',
// dataIndex: '',
// key:'rowIndex',
// width:60,
// align:"center",
// customRender:function (t,r,index) {
// return parseInt(index)+1;
// }
// },
{
title:'广告编号',
align:"center",
dataIndex: 'id'
},
{
title:'广告名称',
align:"center",
dataIndex: 'advName'
},
{
title:'广告位置',
align:"center",
dataIndex: 'advPosition',
customRender: function(text) {
return filterDictTextByCache('advPosition', text);
}
},
{
title:'有效时间',
align:"center",
dataIndex: 'advStartDate',
customRender:function (text, rocord) {
return text ? (text + '至' + rocord.advEndDate) : ''
}
},
{
title:'广告链接',
align:"center",
dataIndex: 'advUrl'
},
{
title:'发布日期',
align:"center",
dataIndex: 'createTime',
// customRender:function (text) {
// return !text?"":(text.length>10?text.substr(0,10):text)
// }
},
{
title:'状态',
align:"center",
dataIndex: 'status'
},
{
title: '操作',
dataIndex: 'action',
align:"center",
fixed:"right",
width:147,
scopedSlots: { customRender: 'action' }
}
],
url: {
list: "/property/propertyAdv/list",
delete: "/property/propertyAdv/delete",
deleteBatch: "/property/propertyAdv/deleteBatch",
exportXlsUrl: "/property/propertyAdv/exportXls"
},
dictOptions:{}
}
},
methods: {
initDictConfig(){
}
}
}
</script>
<style scoped>
@import '~@assets/less/common.less';
</style>
\ No newline at end of file
<template>
<a-spin :spinning="confirmLoading">
<j-form-container :disabled="formDisabled">
<a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
<a-row>
<a-col :span="24">
<a-form-model-item label="广告名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="advName">
<a-input v-model="model.advName" placeholder="请输入广告名称" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="广告位置" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="advPosition">
<j-dict-select-tag v-model="model.advPosition" dictCode="advPosition" placeholder="请选择广告位置" disabled />
<!-- <a-select v-model="model.advPosition" style="width: 100%" placeholder="请选择广告位置" disabled>
<a-select-option value="home">业主小程序banner图</a-select-option>
</a-select> -->
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="广告有效时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="advDate">
<a-range-picker valueFormat="YYYY-MM-DD" :placeholder="['广告有效开始时间', '请选择广告有效结束时间']" v-model="model.advDate" style="width: 100%" />
</a-form-model-item>
</a-col>
<!-- <a-col :span="24">
<a-form-model-item label="广告有效结束时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="advEndDate">
<j-date placeholder="请选择广告有效结束时间" v-model="model.advEndDate" style="width: 100%" />
</a-form-model-item>
</a-col> -->
<a-col :span="24">
<a-form-model-item label="广告链接" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="advUrl">
<a-input v-model="model.advUrl" placeholder="请输入广告链接"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<!-- <a-form-model-item label="banner图" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="advImageUrl">
<j-upload v-model="model.advImageUrl"></j-upload>
</a-form-model-item> -->
<a-form-model-item label="banner图" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="advImageUrl">
<j-image-upload bizPath="scott/pic" accept="image/png, image/jpeg" v-model="model.advImageUrl"></j-image-upload>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="是否定时发布" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="isScheduledRelease">
<!-- <j-dict-select-tag type="radio" v-model="model.isScheduledRelease" dictCode="release" placeholder="请选择是否定时发布" /> -->
<a-radio-group name="radioGroup" v-model="model.isScheduledRelease">
<a-radio :value="1"></a-radio>
<a-radio :value="0"></a-radio>
</a-radio-group>
</a-form-model-item>
</a-col>
<a-col :span="24" v-if="model.isScheduledRelease === 1">
<a-form-model-item label="发布日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="releaseTime">
<j-date placeholder="请选择发布日期" v-model="model.releaseTime" style="width: 100%" />
</a-form-model-item>
</a-col>
</a-row>
</a-form-model>
</j-form-container>
</a-spin>
</template>
<script>
import { httpAction, getAction } from '@/api/manage'
import { validateDuplicateValue } from '@/utils/util'
export default {
name: 'PropertyAdvForm',
components: {
},
props: {
//表单禁用
disabled: {
type: Boolean,
default: false,
required: false
}
},
data () {
return {
model:{
advName: '',
advPosition: 'home',
advDate: [],
advUrl: '',
advImageUrl: '',
isScheduledRelease: 0,
releaseTime: ''
},
labelCol: {
xs: { span: 24 },
sm: { span: 5 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 },
},
confirmLoading: false,
validatorRules: {
advName: [{ required: true, message: '请输入广告名称', trigger: 'blur' }],
advImageUrl: [{ required: true, message: '请上传banner图', trigger: 'change' }],
releaseTime: [{ required: true, message: '请选择发布日期', trigger: 'change' }]
},
url: {
add: "/property/propertyAdv/add",
edit: "/property/propertyAdv/edit",
queryById: "/property/propertyAdv/queryById"
}
}
},
computed: {
formDisabled(){
return this.disabled
},
},
created () {
//备份model原始值
this.modelDefault = JSON.parse(JSON.stringify(this.model));
},
methods: {
add () {
this.edit(this.modelDefault);
},
edit (record) {
this.model = Object.assign({}, record, {advDate: [record.advStartDate, record.advEndDate]});
this.visible = true;
},
submitForm () {
const that = this;
// 触发表单验证
this.$refs.form.validate(valid => {
if (valid) {
that.confirmLoading = true;
let httpurl = '';
let method = '';
if(!this.model.id){
httpurl+=this.url.add;
method = 'post';
}else{
httpurl+=this.url.edit;
method = 'put';
}
this.model['advStartDate'] = this.model['advDate'][0]
this.model['advEndDate'] = this.model['advDate'][1]
httpAction(httpurl,this.model,method).then((res)=>{
if(res.success){
that.$message.success(res.message);
that.$emit('ok');
}else{
that.$message.warning(res.message);
}
}).finally(() => {
that.confirmLoading = false;
})
}
})
},
}
}
</script>
\ No newline at end of file
<template>
<j-modal
:title="title"
:width="width"
:visible="visible"
switchFullscreen
@ok="handleOk"
:okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
@cancel="handleCancel"
cancelText="关闭">
<property-adv-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></property-adv-form>
</j-modal>
</template>
<script>
import PropertyAdvForm from './PropertyAdvForm'
export default {
name: 'PropertyAdvModal',
components: {
PropertyAdvForm
},
data () {
return {
title:'',
width:800,
visible: false,
disableSubmit: false
}
},
methods: {
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
})
},
edit (record) {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.edit(record);
})
},
close () {
this.$emit('close');
this.visible = false;
},
handleOk () {
this.$refs.realForm.submitForm();
},
submitCallback(){
this.$emit('ok');
this.visible = false;
},
handleCancel () {
this.close()
}
}
}
</script>
\ No newline at end of file
<template>
<a-spin :spinning="confirmLoading">
<j-form-container :disabled="formDisabled">
<a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
<a-row>
<a-col :span="24">
<a-form-model-item label="物业公司名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="propertyName">
<a-input v-model="model.propertyName" placeholder="请输入物业公司名称" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="统一信用代码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="creditCode">
<a-input v-model="model.creditCode" placeholder="请输入统一信用代码" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="法人姓名" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="legalName">
<a-input v-model="model.legalName" placeholder="请输入法人姓名" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="注册资本" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="registCapital">
<a-input-number v-model="model.registCapital" placeholder="请输入注册资本" style="width: 100%" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="联系人" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="contactName">
<a-input v-model="model.contactName" placeholder="请输入联系人" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="联系电话" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="contactPhone">
<a-input v-model="model.contactPhone" placeholder="请输入联系电话" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="注册地址" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="registAdress">
<j-area-linkage type="cascader" v-model="model.registAdress" placeholder="请输入省市区" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="详细地址" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="adressInfo">
<a-input v-model="model.adressInfo" placeholder="请输入详细地址" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="集团logo" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="logoUrl">
<a-input v-model="model.logoUrl" placeholder="请输入集团logo" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="集团介绍" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="groupInfo">
<a-textarea v-model="model.groupInfo" rows="4" placeholder="请输入集团介绍" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="授权开始日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="empowerBeginDate">
<j-date placeholder="请选择授权开始日期" v-model="model.empowerBeginDate" style="width: 100%" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="授权结束日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="empowerEndDate">
<j-date placeholder="请选择授权结束日期" v-model="model.empowerEndDate" style="width: 100%" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="收费标准id" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="chargingStandardId">
<j-dict-select-tag type="list" v-model="model.chargingStandardId" dictCode="" placeholder="请选择收费标准id" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="合同附件" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="contractUrl">
<j-upload v-model="model.contractUrl" ></j-upload>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="删除状态(0-正常,1-已删除)" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="delFlag">
<a-input-number v-model="model.delFlag" placeholder="请输入删除状态(0-正常,1-已删除)" style="width: 100%" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="试用小区数量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="ontrialCommunityNum">
<a-input-number v-model="model.ontrialCommunityNum" placeholder="请输入试用小区数量" style="width: 100%" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="试用开始日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="ontrialBeginDate">
<j-date placeholder="请选择试用开始日期" v-model="model.ontrialBeginDate" style="width: 100%" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="试用结束日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="ontrialEndDate">
<j-date placeholder="请选择试用结束日期" v-model="model.ontrialEndDate" style="width: 100%" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="管理员登录账号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="adminLoginName">
<a-input v-model="model.adminLoginName" placeholder="请输入管理员登录账号" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="管理员登录密码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="adminPassword">
<a-input-password v-model="model.adminPassword" placeholder="请输入管理员登录密码" />
</a-form-model-item>
</a-col>
</a-row>
</a-form-model>
</j-form-container>
</a-spin>
</template>
<script>
import { httpAction, getAction } from '@/api/manage'
import { validateDuplicateValue } from '@/utils/util'
export default {
name: 'PropertySettledForm',
components: {
},
props: {
//表单禁用
disabled: {
type: Boolean,
default: false,
required: false
}
},
data () {
return {
model:{
},
labelCol: {
xs: { span: 24 },
sm: { span: 5 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 },
},
confirmLoading: false,
validatorRules: {
adminLoginName: [
{ required: false},
{ validator: (rule, value, callback) => validateDuplicateValue('property_settled', 'admin_login_name', value, this.model.id, callback)},
],
},
url: {
add: "/property/propertySettled/add",
edit: "/property/propertySettled/edit",
queryById: "/property/propertySettled/queryById"
}
}
},
computed: {
formDisabled(){
return this.disabled
},
},
created () {
//备份model原始值
this.modelDefault = JSON.parse(JSON.stringify(this.model));
},
methods: {
add () {
this.edit(this.modelDefault);
},
edit (record) {
this.model = Object.assign({}, record);
this.visible = true;
},
submitForm () {
const that = this;
// 触发表单验证
this.$refs.form.validate(valid => {
if (valid) {
that.confirmLoading = true;
let httpurl = '';
let method = '';
if(!this.model.id){
httpurl+=this.url.add;
method = 'post';
}else{
httpurl+=this.url.edit;
method = 'put';
}
httpAction(httpurl,this.model,method).then((res)=>{
if(res.success){
that.$message.success(res.message);
that.$emit('ok');
}else{
that.$message.warning(res.message);
}
}).finally(() => {
that.confirmLoading = false;
})
}
})
},
}
}
</script>
\ No newline at end of file
<template>
<a-drawer
:title="title"
:width="width"
placement="right"
:closable="false"
@close="close"
destroyOnClose
:visible="visible">
<property-settled-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></property-settled-form>
<div class="drawer-footer">
<a-button @click="handleCancel" style="margin-bottom: 0;">关闭</a-button>
<a-button v-if="!disableSubmit" @click="handleOk" type="primary" style="margin-bottom: 0;">提交</a-button>
</div>
</a-drawer>
</template>
<script>
import PropertySettledForm from './PropertySettledForm'
export default {
name: 'PropertySettledModal',
components: {
PropertySettledForm
},
data () {
return {
title:"操作",
width:800,
visible: false,
disableSubmit: false
}
},
methods: {
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
})
},
edit (record) {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.edit(record);
});
},
close () {
this.$emit('close');
this.visible = false;
},
submitCallback(){
this.$emit('ok');
this.visible = false;
},
handleOk () {
this.$refs.realForm.submitForm();
},
handleCancel () {
this.close()
}
}
}
</script>
<style lang="less" scoped>
/** Button按钮间距 */
.ant-btn {
margin-left: 30px;
margin-bottom: 30px;
float: right;
}
.drawer-footer{
position: absolute;
bottom: -8px;
width: 100%;
border-top: 1px solid #e8e8e8;
padding: 10px 16px;
text-align: right;
left: 0;
background: #fff;
border-radius: 0 0 2px 2px;
}
</style>
\ No newline at end of file
<template>
<j-modal
:title="title"
:width="width"
:visible="visible"
switchFullscreen
@ok="handleOk"
:okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
@cancel="handleCancel"
cancelText="关闭">
<property-settled-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></property-settled-form>
</j-modal>
</template>
<script>
import PropertySettledForm from './PropertySettledForm'
export default {
name: 'PropertySettledModal',
components: {
PropertySettledForm
},
data () {
return {
title:'',
width:800,
visible: false,
disableSubmit: false
}
},
methods: {
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
})
},
edit (record) {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.edit(record);
})
},
close () {
this.$emit('close');
this.visible = false;
},
handleOk () {
this.$refs.realForm.submitForm();
},
submitCallback(){
this.$emit('ok');
this.visible = false;
},
handleCancel () {
this.close()
}
}
}
</script>
\ No newline at end of file
<template>
<a-card :bordered="false">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<a-col :md="6" :sm="8">
<a-form-item label="收费名称">
<a-input placeholder="请输入收费名称" v-model="queryParam.chargingName"></a-input>
</a-form-item>
</a-col>
<span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
<a-col :md="6" :sm="24">
<a-button type="primary" @click="searchQuery">查询</a-button>
<a-button style="margin-left: 8px" @click="searchReset">重置</a-button>
</a-col>
</span>
</a-row>
</a-form>
</div>
<!-- 查询区域-END -->
<!-- <div style="text-align:right;margin-bottom:10px;">
<a-button type="primary" @click="visible = true">新增就收费标准</a-button>
</div> -->
<!-- 操作按钮区域 -->
<div class="table-operator">
<a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
<a-button type="primary" icon="download" @click="handleExportXls('t_property_chargrule')">导出</a-button>
<a-dropdown v-if="selectedRowKeys.length > 0">
<a-menu slot="overlay">
<a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
</a-menu>
<a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
</a-dropdown>
</div>
<!-- table区域-begin -->
<div>
<div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
<i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>
<a style="margin-left: 24px" v-if="selectedRowKeys.length > 0" @click="onClearSelected">清空</a>
</div>
<a-table
ref="table"
size="middle"
:scroll="{x:true}"
bordered
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="pagination"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
class="j-table-force-nowrap"
@change="handleTableChange"
>
<span slot="action" slot-scope="text, record">
<a @click="handleEdit(record)">编辑</a>
<a-divider type="vertical"/>
<a-dropdown>
<a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
<a-menu slot="overlay">
<a-menu-item>
<a @click="handleDetail(record)">详情</a>
</a-menu-item>
<a-menu-item>
<a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
<a>删除</a>
</a-popconfirm>
</a-menu-item>
<a-menu-item v-if="record.auditStatus === 'waitAudit'">
<a-popconfirm title="确定审核吗?" ok-text="通过" cancel-text="驳回" @cancel="() => handleVerify(record.id, 'notPass')" @confirm="() => handleVerify(record.id, 'auditPass')">
<a>审核</a>
</a-popconfirm>
</a-menu-item>
</a-menu>
</a-dropdown>
</span>
</a-table>
</div>
<!-- table区域-end -->
<property-chargrule-modal ref="modalForm" @ok="modalFormOk"></property-chargrule-modal>
</a-card>
</template>
<script>
import {AuditUpdateCostApi} from '@/api/api'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import {filterDictTextByCache} from '@/components/dict/JDictSelectUtil'
import PropertyChargruleModal from './modules/PropertyChargruleModal'
const columns = [
{
title: '收费名称',
dataIndex: 'chargingName',
key: 'chargingName'
}, {
title: '收费方式',
dataIndex: 'chargingCycle',
key: 'chargingCycle',
customRender: function(text) {
return filterDictTextByCache('chargingCycle', text);
}
},{
title: '授权物业数量',
dataIndex: 'empowerNum',
key: 'empowerNum'
},{
title: '添加人',
dataIndex: 'createBy',
key: 'createBy'
},{
title: '收费金额(元)',
dataIndex: 'chargingMoney',
key: 'chargingMoney'
},
{
title: '创建时间',
dataIndex: 'createTime',
key: 'createTime'
},
{
title: '审核状态',
dataIndex: 'auditStatus',
key: 'auditStatus',
customRender: function(text) {
return filterDictTextByCache('auditStatus', text);
}
},
{
title: '操作',
dataIndex: 'action',
scopedSlots: { customRender: 'action' },
align: 'center',
width: 150
}
]
export default {
name: 'costListAsync',
components: {
PropertyChargruleModal
},
mixins: [JeecgListMixin],
data() {
return {
// 表头
columns: columns,
loading: false,
pagination: {
total: 0,
current: 1,
pageSize: 10,
showSizeChanger: true
},
url: {
list: "/property/propertyChargrule/list",
delete: '/property/propertyChargrule/delete',
deleteBatch: '/property/propertyChargrule/deleteBatch',
exportXlsUrl: "/property/propertyChargrule/exportXls"
},
dictOptions: [],
}
},
methods: {
handleVerify(id, auditStatus) {
AuditUpdateCostApi({
id,
auditStatus
}).then(()=> {
this.$message.success(`${auditStatus === 'auditPass' ? '审核成功' : '驳回成功'}`);
this.loadData();
})
}
}
}
</script>
<style scoped>
@import '~@assets/less/common.less';
</style>
\ No newline at end of file
<template>
<a-spin :spinning="confirmLoading">
<j-form-container :disabled="formDisabled">
<a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
<a-row>
<a-col :span="24">
<a-form-model-item label="收费名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="chargingName">
<a-input v-model="model.chargingName" placeholder="请输入收费名称"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="收费方式" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="chargingCycle">
<a-select style="width: 100%" v-model="model.chargingCycle" placeholder="请选择收费方式">
<a-select-option v-for="item in dictOptions" :key="item.value" :value="item.value">{{item.label}}</a-select-option>
</a-select>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="授权天数" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="empowerDays">
<a-input :disabled="model.chargingCycle !== '4'" v-model="model.empowerDays" @blur="ruleNumberInput" placeholder="请输入授权天数">
<div slot="addonAfter"></div>
</a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="授权小区数量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="empowerNum">
<a-input-number v-model="model.empowerNum" :min="1" :precision="0" placeholder="请输入授权小区数量" style="width: 100%" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="收费金额" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="chargingMoney">
<a-input-number v-model="model.chargingMoney" :min="0.01" :precision="2" placeholder="请输入收费金额" style="width: 100%" />
</a-form-model-item>
</a-col>
</a-row>
</a-form-model>
</j-form-container>
</a-spin>
</template>
<script>
import { httpAction, getAction } from '@/api/manage'
import { validateDuplicateValue } from '@/utils/util'
import {ajaxGetDictItems,getDictItemsFromCache} from '@/api/api'
export default {
name: 'PropertyChargruleForm',
components: {
},
props: {
//表单禁用
disabled: {
type: Boolean,
default: false,
required: false
}
},
data () {
return {
model:{
chargingName: '',
chargingMoney: '',
chargingCycle: '',
empowerNum: '',
empowerDays: ''
},
labelCol: {
xs: { span: 24 },
sm: { span: 5 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 },
},
confirmLoading: false,
validatorRules: {
chargingName: [{ required: true, message: '请输入收费名称', trigger: 'blur' }],
chargingCycle: [{ required: true, message: '请选择收费方式', trigger: 'change' }],
empowerDays: [{ required: true, message: '请输入授权日期', trigger: 'blur' }],
empowerNum: [{ required: true, message: '请输入授权小区数量', trigger: 'blur' }],
chargingMoney: [{ required: true, message: '请输入收费金额', trigger: 'blur' }]
},
url: {
add: "/property/propertyChargrule/add",
edit: "/property/propertyChargrule/edit",
queryById: "/property/propertyChargrule/queryById"
},
dictOptions: []
}
},
watch: {
'model.chargingCycle': {
handler(newV, oldV) {
switch(newV) {
case '1':
this.model.empowerDays = '30'
break
case '2':
this.model.empowerDays = '90'
break
case '3':
this.model.empowerDays = '365'
break
default:
if(oldV) {
this.model.empowerDays = ''
}
}
}
}
},
computed: {
formDisabled(){
return this.disabled
},
},
created () {
//备份model原始值
this.modelDefault = JSON.parse(JSON.stringify(this.model));
this.initDictData()
},
methods: {
initDictData() {
//优先从缓存中读取字典配置
if(getDictItemsFromCache('chargingCycle')){
this.dictOptions = getDictItemsFromCache('chargingCycle');
return
}
// //根据字典Code, 初始化字典数组
ajaxGetDictItems('chargingCycle', null).then((res) => {
if (res.success) {
this.dictOptions = res.result;
}
})
},
ruleNumberInput(event) {
let rateValue = event.target.value.replace(/[^\d]/g,"");//清除"数字"和"."和"-"以外的字符
this.model['empowerDays'] = rateValue
},
add () {
this.edit(this.modelDefault);
},
edit (record) {
console.log(record)
this.model = Object.assign({}, record);
this.visible = true;
},
submitForm () {
const that = this;
// 触发表单验证
this.$refs.form.validate(valid => {
if (valid) {
that.confirmLoading = true;
let httpurl = '';
let method = '';
if(!this.model.id){
httpurl+=this.url.add;
method = 'post';
}else{
httpurl+=this.url.edit;
method = 'put';
}
httpAction(httpurl,this.model,method).then((res)=>{
if(res.success){
that.$message.success(res.message);
that.$emit('ok');
}else{
that.$message.warning(res.message);
}
}).finally(() => {
that.confirmLoading = false;
})
}
})
},
}
}
</script>
\ No newline at end of file
<template>
<j-modal
:title="title"
:width="width"
:visible="visible"
switchFullscreen
@ok="handleOk"
:okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
@cancel="handleCancel"
cancelText="关闭">
<property-chargrule-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></property-chargrule-form>
</j-modal>
</template>
<script>
import PropertyChargruleForm from './PropertyChargruleForm'
export default {
name: 'PropertyChargruleModal',
components: {
PropertyChargruleForm
},
data () {
return {
title:'',
width:800,
visible: false,
disableSubmit: false
}
},
methods: {
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
})
},
edit (record) {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.edit(record);
})
},
close () {
this.$emit('close');
this.visible = false;
},
handleOk () {
this.$refs.realForm.submitForm();
},
submitCallback(){
this.$emit('ok');
this.visible = false;
},
handleCancel () {
this.close()
}
}
}
</script>
\ No newline at end of file
<template>
<a-card :bordered="false">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<a-col :md="6" :sm="8">
<a-form-item label="表名">
<a-input placeholder="请输入表名" v-model="queryParam.dataTable"></a-input>
</a-form-item>
</a-col>
<a-col :md="6" :sm="8">
<a-form-item label="数据ID">
<a-input placeholder="请输入ID" v-model="queryParam.dataId"></a-input>
</a-form-item>
</a-col>
<span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
<a-col :md="6" :sm="24">
<a-button type="primary" @click="searchQuery">查询</a-button>
<a-button style="margin-left: 8px" @click="searchReset">重置</a-button>
</a-col>
</span>
</a-row>
</a-form>
</div>
<!-- 操作按钮区域 -->
<div class="table-operator">
<a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
<a-button
@click="batchDel"
v-if="selectedRowKeys.length > 0"
ghost
type="primary"
icon="delete">批量删除
</a-button>
</div>
<!-- table区域-begin -->
<div>
<div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
<i class="anticon anticon-info-circle ant-alert-icon"></i>已选择&nbsp;<a style="font-weight: 600">{{
selectedRowKeys.length }}</a>&nbsp;&nbsp;
<a style="margin-left: 24px" @click="onClearSelected">清空</a>
</div>
<a-table
:columns="columns"
size="middle"
:dataSource="dataSource"
:loading="loading"
:pagination="pagination"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
>
<span slot="action" slot-scope="text, record">
<a @click="handleEdit(record)">编辑</a>
<a-divider type="vertical"/>
<a-dropdown>
<a class="ant-dropdown-link">
更多 <a-icon type="down"/>
</a>
<a-menu slot="overlay">
<a-menu-item>
<a href="javascript:;" @click="handleDetail(record)">详情</a>
</a-menu-item>
<a-menu-item>
<a href="javascript:;" @click="handleAddSub(record)">添加下级</a>
</a-menu-item>
<a-menu-item>
<a href="javascript:;" @click="handleDataRule(record)">数据规则</a>
</a-menu-item>
<a-menu-item>
<a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)" placement="topLeft">
<a>删除</a>
</a-popconfirm>
</a-menu-item>
</a-menu>
</a-dropdown>
</span>
<!-- 字符串超长截取省略号显示 -->
<span slot="url" slot-scope="text">
<j-ellipsis :value="text" :length="25"/>
</span>
<!-- 字符串超长截取省略号显示-->
<span slot="component" slot-scope="text">
<j-ellipsis :value="text"/>
</span>
</a-table>
</div>
<!-- table区域-end -->
<!-- <permission-modal ref="modalForm" @ok="modalFormOk"></permission-modal> -->
<!-- <permission-data-rule-list ref="PermissionDataRuleList" @ok="modalFormOk"></permission-data-rule-list> -->
</a-card>
</template>
<script>
// import PermissionModal from './modules/PermissionModal'
import { getPropertyListApi, getSystemSubmenu, getSystemSubmenuBatch } from '@/api/api'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
// import PermissionDataRuleList from './PermissionDataRuleList'
import JEllipsis from '@/components/jeecg/JEllipsis'
const columns = [
{
title: '菜单名称111',
dataIndex: 'name',
key: 'name'
}, {
title: '菜单类型',
dataIndex: 'menuType',
key: 'menuType',
customRender: function(text) {
if (text == 0) {
return '菜单'
} else if (text == 1) {
return '菜单'
} else if (text == 2) {
return '按钮/权限'
} else {
return text
}
}
},/*{
title: '权限编码',
dataIndex: 'perms',
key: 'permissionCode',
},*/{
title: 'icon',
dataIndex: 'icon',
key: 'icon'
},
{
title: '组件',
dataIndex: 'component',
key: 'component',
scopedSlots: { customRender: 'component' }
},
{
title: '路径',
dataIndex: 'url',
key: 'url',
scopedSlots: { customRender: 'url' }
},
{
title: '排序',
dataIndex: 'sortNo',
key: 'sortNo'
},
{
title: '操作',
dataIndex: 'action',
scopedSlots: { customRender: 'action' },
align: 'center',
width: 150
}
]
export default {
name: 'PermissionListAsync',
mixins: [JeecgListMixin],
components: {
// PermissionDataRuleList,
// PermissionModal,
JEllipsis
},
data() {
return {
description: '这是菜单管理页面',
// 表头
columns: columns,
loading: false,
pagination: {},
url: {
list: '/property/propertySettled/list',
delete: '/sys/permission/delete',
deleteBatch: '/sys/permission/deleteBatch'
}
}
},
methods: {
loadData() {
this.loading = true
getPropertyListApi({
pageNo: 1,
pageSize: 10
}).then((res) => {
if (res.success) {
const pagination = { ...this.pagination };
pagination.total = res.result.total
this.dataSource = res.result.records
}
}).finally(()=>{
this.loading = false
})
},
// 打开数据规则编辑
handleDataRule(record) {
this.$refs.PermissionDataRuleList.edit(record)
},
handleAddSub(record) {
this.$refs.modalForm.title = "添加子菜单";
this.$refs.modalForm.disableSubmit = false;
this.$refs.modalForm.edit({status:'1',permsType:'1',route:true,'parentId':record.id,menuType:1});
}
}
}
</script>
<style scoped>
@import '~@assets/less/common.less';
</style>
\ No newline at end of file
差异被折叠。
<template>
<j-modal
:title="title"
:width="width"
:visible="visible"
switchFullscreen
@ok="handleOk"
:okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
@cancel="handleCancel"
cancelText="关闭">
<property-settled-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></property-settled-form>
</j-modal>
</template>
<script>
import PropertySettledForm from './PropertySettledForm'
export default {
name: 'PropertySettledModal',
components: {
PropertySettledForm
},
data () {
return {
title:'',
width: '70%',
visible: false,
disableSubmit: false
}
},
methods: {
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
})
},
edit (record) {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.edit(record);
})
},
close () {
this.$emit('close');
this.visible = false;
},
handleOk () {
this.$refs.realForm.submitForm();
},
submitCallback(){
this.$emit('ok');
this.visible = false;
},
handleCancel () {
this.close()
}
}
}
</script>
\ No newline at end of file
......@@ -6,19 +6,19 @@
<login-account ref="alogin" @validateFail="validateFail" @success="requestSuccess" @fail="requestFailed"></login-account>
</a-tab-pane>
<a-tab-pane key="tab2" tab="手机号登录">
<!-- <a-tab-pane key="tab2" tab="手机号登录">
<login-phone ref="plogin" @validateFail="validateFail" @success="requestSuccess" @fail="requestFailed"></login-phone>
</a-tab-pane>
</a-tab-pane> -->
</a-tabs>
<a-form-model-item>
<a-checkbox @change="handleRememberMeChange" default-checked>自动登录</a-checkbox>
<router-link :to="{ name: 'alteration'}" class="forge-password" style="float: right;">
<!-- <router-link :to="{ name: 'alteration'}" class="forge-password" style="float: right;">
忘记密码
</router-link>
<router-link :to="{ name: 'register'}" class="forge-password" style="float: right;margin-right: 10px" >
注册账户
</router-link>
</router-link> -->
</a-form-model-item>
<a-form-item style="margin-top:24px">
......@@ -28,18 +28,14 @@
</a-form-model>
<two-step-captcha v-if="requiredTwoStepCaptcha" :visible="stepCaptchaVisible" @success="stepCaptchaSuccess" @cancel="stepCaptchaCancel"></two-step-captcha>
<login-select-tenant ref="loginSelect" @success="loginSelectOk"></login-select-tenant>
<third-login ref="thirdLogin"></third-login>
</div>
</template>
<script>
import Vue from 'vue'
import { ACCESS_TOKEN, ENCRYPTED_STRING } from '@/store/mutation-types'
import ThirdLogin from './third/ThirdLogin'
import LoginSelectTenant from './LoginSelectTenant'
import TwoStepCaptcha from '@/components/tools/TwoStepCaptcha'
import { getEncryptedString } from '@/utils/encryption/aesEncrypt'
import { timeFix } from '@/utils/util'
......@@ -49,8 +45,6 @@ import LoginPhone from './LoginPhone'
export default {
components: {
LoginSelectTenant,
TwoStepCaptcha,
ThirdLogin,
LoginAccount,
LoginPhone
},
......@@ -59,7 +53,6 @@ export default {
customActiveKey: 'tab1',
rememberMe: true,
loginBtn: false,
requiredTwoStepCaptcha: false,
stepCaptchaVisible: false,
encryptedString:{
key:"",
......
<template>
<div>
<div id="loader-wrapper">
<div id="loader"></div>
<div class="loader-section section-left"></div>
<div class="loader-section section-right"></div>
<div class="load_title">正在登录 JeecgBoot 低代码平台,请耐心等待</div>
</div>
</div>
</template>
<script>
import { mapActions } from 'vuex'
import { isOAuth2AppEnv, timeFix } from '@/utils/util'
import { INDEX_MAIN_PAGE_PATH } from '@/store/mutation-types'
export default {
name: 'OAuth2Login',
data() {
return {
env: {
thirdApp: false,
wxWork: false,
dingtalk: false,
},
}
},
beforeCreate() {
// 如果当前 不是 OAuth2APP环境,就重定向到 /user/login 页面
if (!isOAuth2AppEnv()) {
this.$router.replace({path: '/user/login'})
}
},
created() {
this.checkEnv()
this.doOAuth2Login()
},
methods: {
...mapActions(['ThirdLogin']),
/** 检测当前的环境 */
checkEnv() {
// 判断当时是否是企业微信环境
if (/wxwork/i.test(navigator.userAgent)) {
this.env.thirdApp = true
this.env.wxWork = true
}
// 判断当时是否是钉钉环境
if (/dingtalk/i.test(navigator.userAgent)) {
this.env.thirdApp = true
this.env.dingtalk = true
}
},
/** 进行OAuth2登录操作 */
doOAuth2Login() {
if (this.env.thirdApp) {
// 判断是否携带了Token,是就说明登录成功
if (this.$route.query.oauth2LoginToken) {
this.thirdType = this.$route.query.thirdType
let token = this.$route.query.oauth2LoginToken
this.doThirdLogin(token)
} else if (this.env.wxWork) {
this.doWechatEnterpriseOAuth2Login()
} else if (this.env.dingtalk) {
this.doDingTalkOAuth2Login()
}
}
},
// 根据token执行登录
doThirdLogin(token) {
let param = {}
param.thirdType = this.thirdType
param.token = token
this.ThirdLogin(param).then(res => {
if (res.success) {
this.loginSuccess()
} else {
this.requestFailed(res)
}
})
},
loginSuccess() {
// 登陆成功,重定向到主页
this.$router.replace({path: INDEX_MAIN_PAGE_PATH})
// TODO 这个提示是否还需要?
this.$notification.success({
message: '欢迎',
description: `${timeFix()},欢迎回来`,
})
},
requestFailed(err) {
this.$error({
title: '登录失败',
content: ((err.response || {}).data || {}).message || err.message || '请求出现错误,请稍后再试',
okText: '重新登陆',
onOk() {
window.location.reload()
},
onCancel() {
window.location.reload()
},
})
},
/** 企业微信OAuth2登录 */
doWechatEnterpriseOAuth2Login() {
this.sysOAuth2Login('wechat_enterprise')
},
/** 钉钉OAuth2登录 */
doDingTalkOAuth2Login() {
this.sysOAuth2Login('dingtalk')
},
/** 后台构造oauth2登录地址 */
sysOAuth2Login(source) {
let url = `${window._CONFIG['domianURL']}/sys/thirdLogin/oauth2/${source}/login`
url += `?state=${encodeURIComponent(window.location.origin)}`
window.location.href = url
},
},
}
</script>
<style scoped>
</style>
\ No newline at end of file
......@@ -895,10 +895,10 @@
cssnano-preset-default "^4.0.0"
postcss "^7.0.0"
"@jeecg/antd-online-mini@3.1.0-beta":
version "3.1.0-beta"
resolved "https://registry.npmmirror.com/@jeecg/antd-online-mini/-/antd-online-mini-3.1.0-beta.tgz#cf3e254259503405a5e83ffa6775ac9fa02fe74c"
integrity sha512-pW0zWzExnxjlC3e7DzGYjQibLU22K/7N0kp1ddJrGgX33Ia/wq7ELOcwn6bLzITD89RcvX1JUW/om+IJ1PxOSw==
"@jeecg/antd-online-mini@3.4.3-beta2":
version "3.4.3-beta2"
resolved "https://registry.yarnpkg.com/@jeecg/antd-online-mini/-/antd-online-mini-3.4.3-beta2.tgz#5903547f48a7d51f2df9773b85d25d28807e57ae"
integrity sha512-uZLjtQG/vAcBsCEysE1HceUyzwiHwU+JlNzvHxNnenNDHeaawZa9CfILUImNFJ5JQVqE5J11QpQNb6i5Boo3Gw==
"@mrmlnc/readdir-enhanced@^2.2.1":
version "2.2.1"
......@@ -11459,6 +11459,13 @@ vue-photo-preview@^1.1.3:
webpack "^3.6.0"
webpack-dev-server "^2.9.1"
vue-print-nb-jeecg@^1.0.12:
version "1.0.12"
resolved "https://registry.yarnpkg.com/vue-print-nb-jeecg/-/vue-print-nb-jeecg-1.0.12.tgz#975e1dac3da8c9736ac81b82a2b099cafe1bb3df"
integrity sha512-jHyWm6/TxB1iU2nHL7upQdHVdxb1SJQ9n3XKeYTaruFdbSphLo1vDtTunS2qVCjupk8lui7FlF5rxxSNr0zjZg==
dependencies:
babel-plugin-transform-runtime "^6.23.0"
vue-ref@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/vue-ref/-/vue-ref-2.0.0.tgz#483084d732abed11da796778a8266a3af0ea1a9c"
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论