张雄 3 years ago
parent e356554695
commit 5bebf8966b

@ -16,6 +16,14 @@ export function loginTel(params) {
data: params, data: params,
}) })
} }
// 密码登录
export function loginPWD(params) {
return httpService({
url: `/loginPWD`,
method: 'post',
data: params,
})
}
// 退出登录 // 退出登录
export function quit(params) { export function quit(params) {
return httpService({ return httpService({

@ -59,8 +59,8 @@ export default {
initWebSocket: function() { initWebSocket: function() {
let communityCode = store.getters.getCommunityCode; let communityCode = store.getters.getCommunityCode;
let nickName = store.getters.getUserInfo.userName; let nickName = store.getters.getUserInfo.userName;
let url = 'wss://saas.kaidalai.cn/websocket/manage/'+ communityCode +'/'+ nickName; let userId = store.getters.getUserInfo.id;
let url = 'wss://saas.kaidalai.cn/websocket/manage/'+ communityCode +'/'+ nickName + '/' + userId;
this.websock = new WebSocket(url) this.websock = new WebSocket(url)
this.websock.onopen = this.websocketOnopen this.websock.onopen = this.websocketOnopen
this.websock.onerror = this.websocketOnerror this.websock.onerror = this.websocketOnerror

@ -3,7 +3,7 @@ import "nprogress/nprogress.css"
import router from "@/router" import router from "@/router"
import store from '@/store' import store from '@/store'
const whitePath = [ '/login','/rule','/yszc'] const whitePath = [ '/login','/rule','/yszc','/fromPlatform']
// 判断登录 // 判断登录
router.beforeEach((to, from, next) => { router.beforeEach((to, from, next) => {
NProgress.start() NProgress.start()

@ -97,6 +97,12 @@ const router = [
title: "隐私政策", title: "隐私政策",
component: resolve => require(['@/views/Yszc'], resolve) component: resolve => require(['@/views/Yszc'], resolve)
}, },
{
path: "/fromPlatform",
name: "fromPlatform",
title: "跳转登录",
component: resolve => require(['@/views/FromPlatform'], resolve)
},
{ {
path: "/login", path: "/login",
name: "Login", name: "Login",

@ -8,6 +8,12 @@ export default {
Vue.prototype.qs = qs Vue.prototype.qs = qs
// 上传 // 上传
Vue.prototype.$upload = process.env.VUE_APP_URL + store.getters.getCommunityCode + '/manage/user/upload/uploadImg' Vue.prototype.$upload = process.env.VUE_APP_URL + store.getters.getCommunityCode + '/manage/user/upload/uploadImg'
// 上传员工/房屋/住户/单元/楼栋EXCEL
Vue.prototype.$excelUpload = process.env.VUE_APP_URL + store.getters.getCommunityCode + '/manage/user/importExcel/importManageUserExcel'
Vue.prototype.$houseUpload = process.env.VUE_APP_URL + store.getters.getCommunityCode + '/manage/user/importExcel/importEstateExcel'
Vue.prototype.$residentUpload = process.env.VUE_APP_URL + store.getters.getCommunityCode + '/manage/user/importExcel/importResidentExcel'
Vue.prototype.$unitUpload = process.env.VUE_APP_URL + store.getters.getCommunityCode + '/manage/user/importExcel/importUnitExcel'
Vue.prototype.$buildingUpload = process.env.VUE_APP_URL + store.getters.getCommunityCode + '/manage/user/importExcel/importBuildingExcel'
// 静态地址 // 静态地址
Vue.prototype.$ImgUrl = (src) => { Vue.prototype.$ImgUrl = (src) => {
return process.env.VUE_APP_STATIC + store.getters.getCommunityCode + '/' + src return process.env.VUE_APP_STATIC + store.getters.getCommunityCode + '/' + src

@ -61,6 +61,11 @@
<a-button class='add-btn' :loading="loading" @click="addStaff()"> <a-button class='add-btn' :loading="loading" @click="addStaff()">
新增员工 新增员工
</a-button> </a-button>
<a-upload name="file" :action="`${$excelUpload}`"
accept=".xls,.XLS,.xlsx,.XLSX"
:headers="uploadHeaders" @change="changeFile">
<a-button><a-icon type="upload" /> 批量导入</a-button>
</a-upload>
<a-button :disabled="!hasSelected" :loading="loading"> <a-button :disabled="!hasSelected" :loading="loading">
批量操作 批量操作
</a-button> </a-button>
@ -202,6 +207,7 @@
</div> </div>
</template> </template>
<script> <script>
import store from "@/store";
import { columns, pagination, searchForm } from "./depend/config.js"; import { columns, pagination, searchForm } from "./depend/config.js";
import vueForm from "./depend/form.vue"; import vueForm from "./depend/form.vue";
import { import {
@ -273,6 +279,10 @@ export default {
loading: false, loading: false,
selectedRowKeys: [], selectedRowKeys: [],
type: "add", type: "add",
//
uploadHeaders: {
"manage-login-token": store.getters.getToken,
}
}; };
}, },
mounted() { mounted() {
@ -555,6 +565,13 @@ export default {
} }
} }
}, },
//
changeFile() {
},
beforeUpload() {
}
}, },
computed: { computed: {
hasSelected() { hasSelected() {

@ -3,10 +3,15 @@
* 表格列 * 表格列
*/ */
export const columns = [ export const columns = [
{
title: "导入编号",
dataIndex: "id",
width: "8%",
},
{ {
title: "楼栋名称", title: "楼栋名称",
dataIndex: "name", dataIndex: "name",
width: "20%", width: "15%",
customRender:function(name){ customRender:function(name){
return name + '栋' return name + '栋'
} }
@ -14,17 +19,17 @@ export const columns = [
{ {
title: "房屋总数", title: "房屋总数",
dataIndex: "estateTotals", dataIndex: "estateTotals",
width: "20%", width: "15%",
}, },
{ {
title: "租赁房屋数", title: "租赁房屋数",
dataIndex: "leaseEstateNums", dataIndex: "leaseEstateNums",
width: "20%" width: "15%"
}, },
{ {
title: "租赁率", title: "租赁率",
dataIndex: "leaseRate", dataIndex: "leaseRate",
width: "20%", width: "15%",
customRender:function(leaseRate){ customRender:function(leaseRate){
return ( leaseRate*100 ).toFixed(2)+'%' return ( leaseRate*100 ).toFixed(2)+'%'
} }
@ -89,15 +94,20 @@ export const rules = {
} }
export const unitColumns = [ export const unitColumns = [
{
title: "导入编号",
dataIndex: "id",
width: "15%",
},
{ {
title: "单元号", title: "单元号",
dataIndex: "name", dataIndex: "name",
width: "15%", width: "12%",
}, },
{ {
title: "楼层数", title: "楼层数",
dataIndex: "floor", dataIndex: "floor",
width: "15%", width: "12%",
}, },
{ {
title: "公共楼层数", title: "公共楼层数",

@ -74,6 +74,11 @@
单元信息 单元信息
<a-divider></a-divider> <a-divider></a-divider>
<a-button class='add-btn' @click='addUnit' style="margin-bottom:5px">新增单元</a-button> <a-button class='add-btn' @click='addUnit' style="margin-bottom:5px">新增单元</a-button>
<a-upload name="file" :action="`${$unitUpload}`"
accept=".xls,.XLS,.xlsx,.XLSX" :showUploadList="false"
:headers="uploadHeaders" @change="changeFile">
<a-button>批量导入</a-button>
</a-upload>
<a-table :columns="unitColumns" :data-source="unitData" :row-key="record => record.id"> <a-table :columns="unitColumns" :data-source="unitData" :row-key="record => record.id">
<span slot="action" slot-scope="text, row"> <span slot="action" slot-scope="text, row">
<a-space><a @click="addUnit(text, row)">编辑</a> <a-space><a @click="addUnit(text, row)">编辑</a>
@ -128,6 +133,7 @@
</template> </template>
<script> <script>
import store from "@/store";
import { form, rules, unitColumns,uploadHeaders } from "./config"; import { form, rules, unitColumns,uploadHeaders } from "./config";
import { buildInsert,buildUpdate, buildInfo, unitAdd, unitUpdate, unitDel } from '@/api/basic/estate' import { buildInsert,buildUpdate, buildInfo, unitAdd, unitUpdate, unitDel } from '@/api/basic/estate'
function getBase64(file) { function getBase64(file) {
@ -187,7 +193,7 @@ export default {
elevator:[{required:true,message:'是否有电梯',trigger:'change'}], elevator:[{required:true,message:'是否有电梯',trigger:'change'}],
publicFloor:[{required:true,message:'公共楼层数',trigger:'blur'},{validator: (rule,value,callback) => handleConfirm(rule,value,callback)}], publicFloor:[{required:true,message:'公共楼层数',trigger:'blur'},{validator: (rule,value,callback) => handleConfirm(rule,value,callback)}],
} }
} },
}; };
}, },
methods: { methods: {
@ -336,6 +342,12 @@ export default {
fileChange(info) { fileChange(info) {
this.fileList = info.fileList this.fileList = info.fileList
}, },
changeFile(data) {
if(data.file.status == "done") {
this.$message.success('操作成功');
this.getInfo();
}
},
}, },
watch: { watch: {
type: { type: {

@ -14,6 +14,11 @@
</div> </div>
<div class="search-box"> <div class="search-box">
<a-button class="add-btn" @click="addBuilding"></a-button> <a-button class="add-btn" @click="addBuilding"></a-button>
<a-upload name="file" :action="`${$buildingUpload}`"
accept=".xls,.XLS,.xlsx,.XLSX" :showUploadList="false"
:headers="uploadHeaders" @change="changeFile">
<a-button><a-icon type="upload" /> 批量导入</a-button>
</a-upload>
</div> </div>
<a-table <a-table
:columns="columns" :columns="columns"
@ -52,6 +57,7 @@
</template> </template>
<script> <script>
import store from "@/store";
import { columns,searchForm,ActionsList} from "./depend/config" import { columns,searchForm,ActionsList} from "./depend/config"
import { buildingList,buildingDel } from "@/api/basic/estate" import { buildingList,buildingDel } from "@/api/basic/estate"
import curdForm from './depend/form.vue' import curdForm from './depend/form.vue'
@ -80,6 +86,10 @@ export default {
// //
tableData: [], tableData: [],
editId:undefined, editId:undefined,
//
uploadHeaders: {
"manage-login-token": store.getters.getToken,
}
}; };
}, },
created() { created() {
@ -152,6 +162,13 @@ export default {
selectionChoosed(data) { selectionChoosed(data) {
this.tableChoosed = data; this.tableChoosed = data;
}, },
//
changeFile(data) {
if(data.file.status == "done") {
this.$message.success('操作成功');
this.getData();
}
},
}, },
}; };
</script> </script>

@ -3,6 +3,11 @@
* 表格列 * 表格列
*/ */
export const columns = [ export const columns = [
{
title: "导入编号",
dataIndex: "id",
width: 100
},
{ {
title: "住户姓名", title: "住户姓名",
dataIndex: "name", dataIndex: "name",

@ -27,6 +27,11 @@
</div> </div>
<div class="search-box"> <div class="search-box">
<a-button class="add-btn" @click="show.add = true">添加住户</a-button> <a-button class="add-btn" @click="show.add = true">添加住户</a-button>
<a-upload name="file" :action="`${$residentUpload}`"
accept=".xls,.XLS,.xlsx,.XLSX" :showUploadList="false"
:headers="uploadHeaders" @change="changeFile">
<a-button><a-icon type="upload" /> 批量导入</a-button>
</a-upload>
</div> </div>
<div class="main"> <div class="main">
<!-- 表格 --> <!-- 表格 -->
@ -238,6 +243,7 @@
</template> </template>
<script> <script>
import store from "@/store";
import { import {
columns, columns,
pagination, pagination,
@ -301,6 +307,10 @@ export default {
], ],
tenant: [], tenant: [],
}, },
//
uploadHeaders: {
"manage-login-token": store.getters.getToken,
}
}; };
}, },
mounted() { mounted() {
@ -446,8 +456,15 @@ export default {
}, },
// //
handlerBuilding(index) { handlerBuilding(index) {
},
//
changeFile(data) {
if(data.file.status == "done") {
this.$message.success('操作成功');
this.getData();
} }
}, },
},
computed: { computed: {
// selection // selection
hasSelected() { hasSelected() {

@ -3,21 +3,26 @@
* 表格列 * 表格列
*/ */
export const columns = [ export const columns = [
{
title: "导入编号",
dataIndex: "id",
width: "8%",
},
{ {
title: "房屋名称", title: "房屋名称",
dataIndex: "manageBuildingName", dataIndex: "manageBuildingName",
scopedSlots: { customRender: "name" }, scopedSlots: { customRender: "name" },
width: "20%", width: "15%",
}, },
{ {
title: "室内面积", title: "室内面积",
dataIndex: "indoorArea", dataIndex: "indoorArea",
width: "15%", width: "12%",
}, },
{ {
title: "建筑面积", title: "建筑面积",
dataIndex: "constructionArea", dataIndex: "constructionArea",
width: "15%", width: "12%",
}, },
{ {
title: "房屋类型", title: "房屋类型",

@ -19,9 +19,16 @@
</a-row> </a-row>
</div> </div>
<div class="search-box"> <div class="search-box">
<div style="display: flex">
<a-button class="add-btn" @click="drawerConfig.addShow = true">添加房屋</a-button> <a-button class="add-btn" @click="drawerConfig.addShow = true">添加房屋</a-button>
<a-upload name="file" :action="`${$houseUpload}`"
accept=".xls,.XLS,.xlsx,.XLSX" :showUploadList="false"
:headers="uploadHeaders" @change="changeFile">
<a-button><a-icon type="upload" /> 批量导入</a-button>
</a-upload>
<a-button @click="drawerConfig.houseType = true">房屋配置</a-button> <a-button @click="drawerConfig.houseType = true">房屋配置</a-button>
</div> </div>
</div>
<div class="main"> <div class="main">
<div style="margin-bottom: 16px"> <div style="margin-bottom: 16px">
<!-- 批量操作 --> <!-- 批量操作 -->
@ -142,7 +149,7 @@
<a-tag <a-tag
v-else-if="item.show==false" closable @close.prevent="delType(item.id)" v-else-if="item.show==false" closable @close.prevent="delType(item.id)"
@click="editInput(item,index)" > @click="editInput(item,index)" >
{{item.name}} {{item.id+': '}}{{item.name}}
</a-tag> </a-tag>
</span> </span>
<!-- addTag --> <!-- addTag -->
@ -173,6 +180,7 @@
</template> </template>
<script> <script>
import store from "@/store";
import { columns, pagination, searchForm, ActionsList } from "./depend/config"; import { columns, pagination, searchForm, ActionsList } from "./depend/config";
import { houseList, houseDel, isEnableLease, estateType, estateTypeInsert, estateTypeDel, estateTypeUpdate } from "@/api/basic/estate"; import { houseList, houseDel, isEnableLease, estateType, estateTypeInsert, estateTypeDel, estateTypeUpdate } from "@/api/basic/estate";
import vueForm from "./depend/form.vue"; import vueForm from "./depend/form.vue";
@ -223,7 +231,12 @@ export default {
name:'关闭' name:'关闭'
}, },
], ],
} },
//
uploadHeaders: {
"manage-login-token": store.getters.getToken,
},
fileList: []
}; };
}, },
created() { created() {
@ -385,6 +398,13 @@ export default {
onSelectChange(selectedRowKeys) { onSelectChange(selectedRowKeys) {
this.selectedRowKeys = selectedRowKeys; this.selectedRowKeys = selectedRowKeys;
}, },
//
changeFile(data) {
if(data.file.status == "done") {
this.$message.success('操作成功');
this.getData();
}
},
}, },
computed: { computed: {
// selection // selection

@ -12,15 +12,40 @@
<!-- <a-col :span="1" class="box-cen"></a-col> --> <!-- <a-col :span="1" class="box-cen"></a-col> -->
<!-- 登录 --> <!-- 登录 -->
<a-col class="box-b" v-if="status === 1"> <a-col class="box-b" v-if="status === 1">
<a-tabs v-model="activeName" @change="tabsSwitch"> <a-tabs v-model="activeName">
<!-- <a-tab-pane key="1" tab="密码登录"></a-tab-pane> --> <a-tab-pane key="1" tab="密码登录"></a-tab-pane>
<a-tab-pane key="2" tab="验证码登录"> </a-tab-pane> <a-tab-pane key="2" tab="验证码登录"> </a-tab-pane>
</a-tabs> </a-tabs>
<div class="login-input" v-if="activeName === '1'"> <div class="login-input" v-if="activeName === '1'">
<div style="margin-top:18px"></div> <a-cascader
:options="cityList"
placeholder="请选择城市"
v-model="cityvalue"
:show-search="{ filter }"
@change="onChange"
:field-names="{
label: 'name',
value: 'id',
children: 'cityList',
}"
/>
<span class="form"> <span class="form">
<a-input placeholder="请输入手机号码"></a-input> <a-select
<a-input type="password" placeholder="请输入密码"></a-input> v-model="communityCode"
notFoundContent="该城市无可选择小区"
:disabled="cityvalue.length === 0"
placeholder="请选择小区"
@change="communityChange"
>
<a-select-option
v-for="(item) in communityList"
:key="item.id"
:value="item.code"
>{{ item.name }}</a-select-option
>
</a-select>
<a-input v-model="pwdLogin.username" placeholder="请输入手机号码"></a-input>
<a-input v-model="pwdLogin.password" type="password" placeholder="请输入密码"></a-input>
<!-- <a-row> <!-- <a-row>
<a-col :span="12" style="margin-left: 23px" <a-col :span="12" style="margin-left: 23px"
><a-checkbox></a-checkbox>&nbsp;&nbsp;</a-col ><a-checkbox></a-checkbox>&nbsp;&nbsp;</a-col
@ -29,7 +54,7 @@
</span> </span>
<a-button <a-button
type="primary" type="primary"
@click="login" @click="passwordLogin"
style=" style="
width: 90%; width: 90%;
margin-left: 30px; margin-left: 30px;
@ -42,7 +67,7 @@
</a-button> </a-button>
<a-row style="margin-top: 20px; margin-left: 23px"> <a-row style="margin-top: 20px; margin-left: 23px">
<a-col :span="24"> <a-col :span="24">
<a-checkbox></a-checkbox>&nbsp;&nbsp; <a-checkbox v-model="isChecked"></a-checkbox>&nbsp;&nbsp;我已同
<a href="/#/rule" target="tar">用户协议</a> <a href="/#/rule" target="tar">用户协议</a>
<a href="/#/yszc" target="tar">隐私政策</a> <a href="/#/yszc" target="tar">隐私政策</a>
</a-col> </a-col>
@ -77,6 +102,7 @@
notFoundContent="该城市无可选择小区" notFoundContent="该城市无可选择小区"
:disabled="cityvalue.length === 0" :disabled="cityvalue.length === 0"
placeholder="请选择小区" placeholder="请选择小区"
@change="communityChange"
> >
<a-select-option <a-select-option
v-for="item in communityList" v-for="item in communityList"
@ -239,7 +265,7 @@
</template> </template>
<script> <script>
import { loginTel, sendTelCode, userInfo } from "../../api/public/login"; import { loginTel, loginPWD, sendTelCode, userInfo } from "../../api/public/login";
export default { export default {
name: "Login", name: "Login",
data() { data() {
@ -250,7 +276,12 @@ export default {
tel: "", tel: "",
code: "", code: "",
}, },
pwdLogin: {
username: '',
password: '',
},
isChecked: false, isChecked: false,
communityId: undefined,
communityCode: undefined, communityCode: undefined,
rules: { rules: {
tel: [ tel: [
@ -288,6 +319,14 @@ export default {
}; };
}, },
created() { created() {
if(this.$route.query.token && this.$route.query.code) {
this.setToken(this.$route.query.token);
this.setCommunityCode(this.$route.query.code);
userInfo().then(result => {
this.setUserInfo(result.data);
this.$router.push("/");
})
}
this.keyupEnter(); this.keyupEnter();
this.getAllCity(); this.getAllCity();
}, },
@ -371,6 +410,30 @@ export default {
} }
}); });
}, },
passwordLogin() {
if (this.communityCode === undefined) {
this.$message.error("先选择小区");
return;
};
if (this.isChecked == false) {
this.$message.error("请阅读并同意《用户协议》");
return;
};
let obj = Object.assign(this.pwdLogin, {communityId: this.communityId})
loginPWD(obj).then((res) => {
if (res.code === 200) {
this.$message.success(res.msg);
// token
this.setToken(res.data);
userInfo().then(result => {
this.setUserInfo(result.data);
this.$router.push("/");
})
} else {
this.$message.error(res.msg);
}
});
},
// //
getCode() { getCode() {
if (this.communityCode === undefined) { if (this.communityCode === undefined) {
@ -408,9 +471,10 @@ export default {
resetForm() { resetForm() {
this.$refs.ruleForm.resetFields(); this.$refs.ruleForm.resetFields();
}, },
tabsSwitch() { //id
console.log(this.activeName); communityChange(value, option) {
}, this.communityId = option.key
}
}, },
}; };
</script> </script>

@ -15,7 +15,7 @@ export const searchForm = {
export const columns = [ export const columns = [
{ {
title: "任务单号", title: "任务单号",
width: "12%", width: "14%",
dataIndex: "code", dataIndex: "code",
}, },
{ {
@ -67,7 +67,7 @@ export const columns = [
}, },
{ {
title: "备注", title: "备注",
width: "8%", width: "10%",
dataIndex: "remarks", dataIndex: "remarks",
}, },
{ {
@ -130,7 +130,7 @@ export const columns = [
title: "操作", title: "操作",
dataIndex: "action", dataIndex: "action",
key: "action", key: "action",
width: "300", width: "180",
fixed: "right", fixed: "right",
scopedSlots: { customRender: "action" }, scopedSlots: { customRender: "action" },
}, },

@ -7,6 +7,44 @@ export const formItem = [
placeholder:'请选择账单类型' placeholder:'请选择账单类型'
}, },
] ]
export const billColumns = [
{
title: "操作人",
dataIndex: "createName"
},
{
title: "身份类型",
dataIndex: "identity",
customRender: function (identity) {
switch (identity) {
case 1: return '物业'
case 2: return '业主'
case 3: return '租户'
case 4: return '业主亲属'
case 5: return '租户亲属'
default:
break;
}
}
},
{
title: "实缴金额",
dataIndex: "payAmount"
},
{
title: "支付类型",
dataIndex: "payType",
customRender:function(payType){
switch (payType) {
case 1: return '自动扣费'
case 2: return '线下支付'
case 3: return '支付宝支付'
default:
break;
}
}
},
];
export const columns = [ export const columns = [
{ {
title: "账单名称", title: "账单名称",

@ -23,6 +23,19 @@
<a-cascader v-model="casVal" @change="chooseHouse" :field-names="{label: 'name', value: 'id', children: 'childList' }" :options="houseInfo" style="width: 200px" placeholder="请选择"> <a-cascader v-model="casVal" @change="chooseHouse" :field-names="{label: 'name', value: 'id', children: 'childList' }" :options="houseInfo" style="width: 200px" placeholder="请选择">
</a-cascader> </a-cascader>
</a-form-model-item> </a-form-model-item>
<a-form-model-item style="margin-left: 32px" label="楼栋" >
<a-select @change="changeBuilding" v-model="form.buildingId" style="width: 100px">
<a-select-option v-for="(item) in builidingList" :key="item.id" :value="item.id">{{item.name+''}}</a-select-option>
</a-select>
</a-form-model-item>
<a-form-model-item style="margin-left: 32px" label="单元" >
<a-select :disabled="form.buildingId == undefined" v-model="form.unitId" style="width: 100px">
<a-select-option v-for="item in unitList" :key="item.id" :value="item.id">{{item.name+''}}</a-select-option>
</a-select>
</a-form-model-item>
<a-form-model-item style="margin-left: 32px" label="楼层" >
<a-input-number v-model="form.floorNum" style="width: 100px"></a-input-number>
</a-form-model-item>
<a-form-model-item style="margin-left: 32px" label="收费标准"> <a-form-model-item style="margin-left: 32px" label="收费标准">
<a-select v-model="chargesVal" style="width: 150px" @change="chargeChoose"> <a-select v-model="chargesVal" style="width: 150px" @change="chargeChoose">
<a-select-option v-for="(item) in chargeInfo" :key="item.id" :value="item.id"> <a-select-option v-for="(item) in chargeInfo" :key="item.id" :value="item.id">
@ -31,8 +44,10 @@
</a-select> </a-select>
</a-form-model-item> </a-form-model-item>
</a-form-model> </a-form-model>
<div class="btn-box"><a-button type="primary" @click="search"> </a-button> <div class="btn-box">
<a-button style="margin-left: 10px" @click="resetForm"> </a-button></div> <a-button type="primary" @click="search"> </a-button>
<a-button style="margin-left: 10px" @click="resetForm"> </a-button>
</div>
</div> </div>
<!-- <searchForm :formItem="formItem" @getSearch="search($event)"></searchForm> --> <!-- <searchForm :formItem="formItem" @getSearch="search($event)"></searchForm> -->
<a-table :columns="columns" :data-source="tableData" :pagination="pagination" :scroll="{x: 1900}" @change="handlerPage"> <a-table :columns="columns" :data-source="tableData" :pagination="pagination" :scroll="{x: 1900}" @change="handlerPage">
@ -116,10 +131,11 @@
</template> </template>
<script> <script>
import { formItem, columns, pagination } from "./depend/config" import { formItem, columns, pagination, billColumns } from "./depend/config"
import { getBillList, abolition, recover, findBillOrderList, offlinePayments } from "@/api/payment/billManagement" import { getBillList, abolition, recover, findBillOrderList, offlinePayments } from "@/api/payment/billManagement"
import { findEstateCascade } from "@/api/basic/estate" import { findEstateCascade } from "@/api/basic/estate"
import { chargesList } from "@/api/payment/chargeStandardManage" import { chargesList } from "@/api/payment/chargeStandardManage"
import { allBuilding, findByBuildingId } from "@/api/basic/estate"
export default { export default {
name: 'payInfo', name: 'payInfo',
data() { data() {
@ -128,10 +144,15 @@ export default {
type: undefined, type: undefined,
estateId: undefined, estateId: undefined,
chargesIds: [], chargesIds: [],
buildingId: undefined,
unitId: undefined,
floorNum: undefined,
status: undefined, status: undefined,
}, },
casVal: [], casVal: [],
chargesVal: undefined, chargesVal: undefined,
builidingList: [],
unitList: [],
///// /////
tableData:[], tableData:[],
formItem, formItem,
@ -139,44 +160,7 @@ export default {
pagination, pagination,
billShow: false, billShow: false,
offShow: false, offShow: false,
billColumns: [ billColumns: billColumns,
{
title: "操作人",
dataIndex: "createName"
},
{
title: "身份类型",
dataIndex: "identity",
customRender:function(identity){
switch (identity) {
case 1: return '物业'
case 2: return '业主'
case 3: return '租户'
case 4: return '业主亲属'
case 5: return '租户亲属'
default:
break;
}
}
},
{
title: "实缴金额",
dataIndex: "payAmount"
},
{
title: "支付类型",
dataIndex: "payType",
customRender:function(payType){
switch (payType) {
case 1: return '自动扣费'
case 2: return '线下支付'
case 3: return '支付宝支付'
default:
break;
}
}
},
],
// //
currentId: undefined, currentId: undefined,
billDetail: [], billDetail: [],
@ -203,6 +187,10 @@ export default {
let data = res.data; let data = res.data;
this.chargeInfo = data.rows this.chargeInfo = data.rows
}) })
allBuilding().then(res => {
let data = res.data;
this.builidingList = data;
})
}, },
getData() { getData() {
let obj = Object.assign({pageNum: this.pagination.current, size: this.pagination.pageSize},this.form) let obj = Object.assign({pageNum: this.pagination.current, size: this.pagination.pageSize},this.form)
@ -242,6 +230,13 @@ export default {
changeStatus() { changeStatus() {
this.getData(); this.getData();
}, },
//
changeBuilding(val) {
findByBuildingId({buildingId: val}).then(res => {
let data = res.data;
this.unitList = data;
})
},
// //
billPay(record) { billPay(record) {
this.currentId = record.id this.currentId = record.id

@ -30,11 +30,14 @@
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="生效日期"> <a-form-model-item label="生效日期">
<a-radio-group v-model="form.isLongTermEffective" :options="[{label:'长期生效',value:1},{label:'选择日期',value:2}]"></a-radio-group> <a-radio-group v-model="form.isLongTermEffective" :options="[{label:'选择日期',value:2},{label:'长期生效',value:1}]"></a-radio-group>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item prop="selTime" label="选择计划日期"> <a-form-model-item v-if="form.isLongTermEffective == 1" prop="autoEffectiveDateStart" label="选择计划日期">
<a-date-picker v-model="form.autoEffectiveDateStart" value-format="YYYY-MM-DD HH:mm:ss"></a-date-picker>
</a-form-model-item>
<a-form-model-item v-else prop="selTime" label="选择计划日期">
<a-range-picker v-model="form.selTime" @change="timeChange" value-format="YYYY-MM-DD HH:mm:ss"></a-range-picker> <a-range-picker v-model="form.selTime" @change="timeChange" value-format="YYYY-MM-DD HH:mm:ss"></a-range-picker>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
@ -110,9 +113,9 @@ export default {
estateIds: [], estateIds: [],
chargesIds: [], chargesIds: [],
name: '', name: '',
isLongTermEffective: 1, isLongTermEffective: 2,
autoEffectiveDateStart: '-', autoEffectiveDateStart: '',
autoEffectiveDateEnd: '-', autoEffectiveDateEnd: '',
billDateStart: 1, billDateStart: 1,
billDateType: 1, billDateType: 1,
billDateNum: 0, billDateNum: 0,
@ -121,6 +124,7 @@ export default {
rules: { rules: {
name: [{ required: true, message: "请输入名称", trigger: "blur" }], name: [{ required: true, message: "请输入名称", trigger: "blur" }],
selTime: [{ required: true, message: "请选择时间", trigger: "blur" }], selTime: [{ required: true, message: "请选择时间", trigger: "blur" }],
autoEffectiveDateStart: [{ required: true, message: "请选择时间", trigger: "change" }],
}, },
isVisibleDrawer: false, isVisibleDrawer: false,
roomTreeData: [], roomTreeData: [],

@ -30,11 +30,17 @@
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="生效日期"> <a-form-model-item label="生效日期">
<a-radio-group v-model="form.isLongTermEffective" :options="[{label:'长期生效',value:1},{label:'选择日期',value:2}]"></a-radio-group> <a-radio-group v-model="form.isLongTermEffective" :options="[{label:'选择日期',value:2},{label:'长期生效',value:1}]"></a-radio-group>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item prop="selTime" label="选择计划日期"> <!-- <a-form-model-item prop="selTime" label="选择计划日期">
<a-range-picker v-model="form.selTime" @change="timeChange" value-format="YYYY-MM-DD HH:mm:ss"></a-range-picker>
</a-form-model-item> -->
<a-form-model-item v-if="form.isLongTermEffective == 1" prop="autoEffectiveDateStart" label="选择计划日期">
<a-date-picker v-model="form.autoEffectiveDateStart" value-format="YYYY-MM-DD HH:mm:ss"></a-date-picker>
</a-form-model-item>
<a-form-model-item v-else prop="selTime" label="选择计划日期">
<a-range-picker v-model="form.selTime" @change="timeChange" value-format="YYYY-MM-DD HH:mm:ss"></a-range-picker> <a-range-picker v-model="form.selTime" @change="timeChange" value-format="YYYY-MM-DD HH:mm:ss"></a-range-picker>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
@ -110,7 +116,7 @@ export default {
estateIds: [], estateIds: [],
chargesIds: [], chargesIds: [],
name: '', name: '',
isLongTermEffective: 1, isLongTermEffective: 2,
autoEffectiveDateStart: '', autoEffectiveDateStart: '',
autoEffectiveDateEnd: '', autoEffectiveDateEnd: '',
billDateStart: 1, billDateStart: 1,
@ -121,6 +127,7 @@ export default {
rules: { rules: {
name: [{ required: true, message: "请输入名称", trigger: "blur" }], name: [{ required: true, message: "请输入名称", trigger: "blur" }],
selTime: [{ required: true, message: "请选择时间", trigger: "blur" }], selTime: [{ required: true, message: "请选择时间", trigger: "blur" }],
autoEffectiveDateStart: [{ required: true, message: "请选择时间", trigger: "change" }],
}, },
isVisibleDrawer: false, isVisibleDrawer: false,
roomTreeData: [], roomTreeData: [],

@ -128,8 +128,9 @@ export const formItem = [
export const pagination = { export const pagination = {
current: 1, current: 1,
total: 0, total: 0,
pageSize: 5, pageSize: 100,
showTotal: (total) => `${total}`, showTotal: (total) => `${total}`,
pageSizeOptions: ['10','50','100','200'],
showSizeChanger: true, showSizeChanger: true,
showQuickJumper: true, showQuickJumper: true,
} }

@ -3,13 +3,37 @@
<div class="cardTitle"> <div class="cardTitle">
<span>商品管理</span> <span>商品管理</span>
</div> </div>
<searchForm :formItem="formItem" @getSearch="search($event)"></searchForm> <!-- <searchForm :formItem="formItem" @getSearch="search($event)"></searchForm> -->
<div class="search-box">
<a-row>
<a-col :span="20">
<a-space size="large">
<a-form-model layout="inline">
<a-form-model-item label="sku编码" >
<a-input v-model="searchForm.skuId" placeholder="请输入" style="width: 200px" ></a-input>
</a-form-model-item>
<a-form-model-item label="商品名称">
<a-input v-model="searchForm.skuName" style="width: 200px" placeholder="请输入"></a-input>
</a-form-model-item>
<a-form-model-item label="分类">
<a-cascader v-model="casVal" :options="typeData" @change="typeChange" placeholder="请选择"
:field-names="{ label: 'name', value: 'id', children: 'shopCategoryVoList' }">
</a-cascader>
</a-form-model-item>
</a-form-model>
<a-button type="primary" @click='getData'> </a-button>
<a-button @click='reset'> </a-button>
</a-space>
</a-col>
</a-row>
</div>
<a-table <a-table
:columns="columns" :columns="columns"
:data-source="tableData" :data-source="tableData"
:pagination="pagination" :pagination="pagination"
:scroll="{ x: 2400 }" :scroll="{ x: 2400 }"
@change="handleTableChange" @change="handleTableChange"
:loading="loading"
:row-selection="{ :row-selection="{
selectedRowKeys: selectedRowKeys, selectedRowKeys: selectedRowKeys,
onChange: selectionChoosed, onChange: selectionChoosed,
@ -63,6 +87,7 @@
</template> </template>
<script> <script>
import { cateList } from "@/api/shop/goods/cate.js";
import { columns, pagination, formItem } from "./depend/config.js"; import { columns, pagination, formItem } from "./depend/config.js";
import { shopPushList,offShelf,onShelf, isEnableRedeem} from "@/api/shop/goods/index.js"; import { shopPushList,offShelf,onShelf, isEnableRedeem} from "@/api/shop/goods/index.js";
import addForm from "./depend/form.vue"; import addForm from "./depend/form.vue";
@ -78,8 +103,13 @@ export default {
searchForm: { searchForm: {
skuId: undefined, skuId: undefined,
skuName: undefined, skuName: undefined,
status: undefined categoryFirstId: undefined,
categorySecondId: undefined,
categoryThirdId: undefined,
}, },
loading: false,
typeData: [],
casVal: [],
columns, columns,
goodsId:null, goodsId:null,
pagination, pagination,
@ -89,10 +119,18 @@ export default {
}; };
}, },
mounted() { mounted() {
this.getApi();
this.getData(); this.getData();
}, },
methods: { methods: {
getApi() {
cateList().then(res => {
let data = res.data;
this.typeData = data;
})
},
getData() { getData() {
this.loading = true;
shopPushList({ shopPushList({
...this.searchForm, ...this.searchForm,
pageNum: this.pagination.current, pageNum: this.pagination.current,
@ -100,10 +138,18 @@ export default {
}).then((res) => { }).then((res) => {
this.tableData = res.data.rows; this.tableData = res.data.rows;
this.pagination.total = res.data.total; this.pagination.total = res.data.total;
this.loading = false;
}); });
}, },
search(data){ reset() {
this.searchForm = data; this.searchForm = {
skuId: undefined,
skuName: undefined,
categoryFirstId: undefined,
categorySecondId: undefined,
categoryThirdId: undefined,
};
this.casVal = [];
this.getData() this.getData()
}, },
selectionChoosed(data) { selectionChoosed(data) {
@ -114,6 +160,7 @@ export default {
pager.current = pagination.current; pager.current = pagination.current;
pager.pageSize = pagination.pageSize; pager.pageSize = pagination.pageSize;
this.pagination = pager; this.pagination = pager;
this.selectedRowKeys = [];
this.getData(); this.getData();
}, },
edit(id) { edit(id) {
@ -174,6 +221,11 @@ export default {
this.$message.error(res.msg); this.$message.error(res.msg);
} }
}) })
},
typeChange(value) {
this.searchForm.categoryFirstId = value[0];
this.searchForm.categorySecondId = value[1];
this.searchForm.categoryThirdId = value[2];
} }
}, },
computed: { computed: {

@ -143,8 +143,9 @@ export const formItem = [
export const pagination = { export const pagination = {
current: 1, current: 1,
total: 0, total: 0,
pageSize: 10, pageSize: 200,
showTotal: (total) => `${total}`, showTotal: (total) => `${total}`,
pageSizeOptions: ['10','50','100','200'],
showSizeChanger: true, showSizeChanger: true,
showQuickJumper: true, showQuickJumper: true,
} }

@ -1,13 +1,55 @@
<template> <template>
<div> <div>
<div class="cardTitle">jcook商品库</div> <div class="cardTitle">jcook商品库</div>
<searchForm :formItem="formItem" @getSearch="search($event)" ></searchForm> <div class="search-box">
<a-row>
<a-col :span="20">
<a-space size="large">
<a-form-model layout="inline">
<a-form-model-item label="sku编码" >
<a-input v-model="searchForm.jcookSkuId" placeholder="请输入" style="width: 200px" ></a-input>
</a-form-model-item>
<a-form-model-item label="上架状态" >
<a-select v-model="searchForm.status" style="width: 200px">
<a-select-option :value="0">下架</a-select-option>
<a-select-option :value="1">上架</a-select-option>
</a-select>
</a-form-model-item>
<a-form-model-item label="商品名称">
<a-input v-model="searchForm.skuName" style="width: 200px" placeholder="请输入"></a-input>
</a-form-model-item>
<a-form-model-item label="店铺名称">
<a-input v-model="searchForm.shopName" style="width: 200px" placeholder="请输入"></a-input>
</a-form-model-item>
<a-form-model-item label="供应商名称">
<a-input v-model="searchForm.vendorName" style="width: 200px" placeholder="请输入"></a-input>
</a-form-model-item>
<a-form-model-item label="品牌名称">
<a-input v-model="searchForm.brandName" style="width: 200px" placeholder="请输入"></a-input>
</a-form-model-item>
<a-form-model-item label="分类">
<a-cascader v-model="casVal" :options="typeData" @change="typeChange" placeholder="请选择"
:field-names="{ label: 'name', value: 'name', children: 'shopCategoryVoList' }">
</a-cascader>
</a-form-model-item>
<a-form-model-item>
<a-button type="primary" @click='getData'> </a-button>
</a-form-model-item>
<a-form-model-item>
<a-button @click='reset'> </a-button>
</a-form-model-item>
</a-form-model>
</a-space>
</a-col>
</a-row>
</div>
<a-table <a-table
:columns="columns" :columns="columns"
:data-source="tableData" :data-source="tableData"
:pagination="pagination" :pagination="pagination"
:scroll="{ x: 2600 }" :scroll="{ x: 2600 }"
@change="handleTableChange" @change="handleTableChange"
:loading="loading"
:row-selection="{ :row-selection="{
selectedRowKeys: selectedRowKeys, selectedRowKeys: selectedRowKeys,
onChange: selectionChoosed, onChange: selectionChoosed,
@ -17,11 +59,7 @@
} }
}) })
}" }"
:row-key=" :row-key=" (record, index) => { return record.id; } "
(record, index) => {
return record.id;
}
"
> >
<span slot="action" slot-scope="text, row"> <span slot="action" slot-scope="text, row">
<a-space> <a-space>
@ -59,8 +97,9 @@
</template> </template>
<script> <script>
import { cateList } from "@/api/shop/goods/cate.js";
import { jcookGoodsList,jcookGoodsBatchPush } from "@/api/shop/goods"; import { jcookGoodsList,jcookGoodsBatchPush } from "@/api/shop/goods";
import { formItem, columns, pagination } from "./depend/config"; import { columns, pagination } from "./depend/config";
import addForm from "./depend/form.vue"; import addForm from "./depend/form.vue";
export default { export default {
components: { components: {
@ -79,9 +118,14 @@ export default {
shopName:'', shopName:'',
vendorName:'', vendorName:'',
brandName:'', brandName:'',
status:undefined status:undefined,
}, categoryFirstName: undefined,
formItem, categorySecondName: undefined,
categoryThirdName: undefined,
},
typeData:[],
casVal:[],
loading: false,
columns, columns,
pagination, pagination,
// index // index
@ -89,14 +133,18 @@ export default {
}; };
}, },
mounted() { mounted() {
this.getApi();
this.getData(); this.getData();
}, },
methods: { methods: {
search(data){ getApi() {
this.searchForm = data; cateList().then(res => {
this.getData() let data = res.data;
this.typeData = data;
})
}, },
async getData() { async getData() {
this.loading = true
let res = await jcookGoodsList({ let res = await jcookGoodsList({
pageNum: this.pagination.current, pageNum: this.pagination.current,
size: this.pagination.pageSize, size: this.pagination.pageSize,
@ -104,7 +152,23 @@ export default {
}); });
this.tableData = res.data.rows; this.tableData = res.data.rows;
this.pagination.total = res.data.total; this.pagination.total = res.data.total;
this.selectedRowKeys=[] this.selectedRowKeys = [];
this.loading = false;
},
reset() {
this.searchForm= {
jcookSkuId:'',
skuName:'',
shopName:'',
vendorName:'',
brandName:'',
status:undefined,
categoryFirstId: undefined,
categorySecondId: undefined,
categoryThirdId: undefined,
};
this.casVal = [];
this.getData()
}, },
push(id) { push(id) {
this.goodsId = id; this.goodsId = id;
@ -147,6 +211,11 @@ export default {
success() { success() {
this.getData(); this.getData();
}, },
typeChange(value) {
this.searchForm.categoryFirstName = value[0];
this.searchForm.categorySecondName = value[1];
this.searchForm.categoryThirdName = value[2];
}
}, },
computed: { computed: {
hasSelected() { hasSelected() {

Binary file not shown.
Loading…
Cancel
Save