张雄 3 years ago
parent ad46e424dc
commit 0e4bd62bb0

@ -0,0 +1,102 @@
import httpService from "@/request"
//分类
// 查询所有的设施/设备分类
export function getFacilitiesList(params) {
return httpService({
url: `/user/facilitiesCategory/list`,
method: 'get',
params: params,
})
}
// 添加设施/设备分类信息
export function addFacility(params) {
return httpService({
url: `/user/facilitiesCategory/insert`,
method: 'post',
data: params,
})
}
// 批量删除设施/设备分类
export function delFacility(params) {
return httpService({
url: `/user/facilitiesCategory/delete`,
method: 'post',
data: params,
})
}
// 根据设施/设备分类主键id查询设施/设备分类信息
export function findFacility(params) {
return httpService({
url: `/user/facilitiesCategory/findById`,
method: 'get',
params: params,
})
}
// 修改设施分类信息(不允许修改设施分类类型)
export function updateFacility(params) {
return httpService({
url: `/user/facilitiesCategory/update`,
method: 'post',
data: params,
})
}
//管理
// 查询所有的设施/设备管理
export function facilityInfoList(params) {
return httpService({
url: `/user/facilitiesManage/list`,
method: 'get',
params: params,
})
}
// 添加设施/设备信息
export function addFacilityInfo(params) {
return httpService({
url: `/user/facilitiesManage/insert`,
method: 'post',
data: params,
})
}
// 根据设施/设备主键id查询设施/设备信息
export function findFacilityInfo(params) {
return httpService({
url: `/user/facilitiesManage/findById`,
method: 'get',
params: params,
})
}
// 根据设施/设备主键id查询设施/设备情况list记录
export function findRecordList(params) {
return httpService({
url: `/user/facilitiesManage/situationList`,
method: 'get',
params: params,
})
}
// 修改设施/设备信息
export function updateFacilityInfo(params) {
return httpService({
url: `/user/facilitiesManage/update`,
method: 'post',
data: params,
})
}
// 批量删除设施/设备信息
export function delFacilityInfo(params) {
return httpService({
url: `/user/facilitiesManage/delete`,
method: 'post',
data: params,
})
}

@ -62,3 +62,39 @@ export function delPhone(params) {
data: params,
})
}
// 查询所有的便民电话类型
export function getPhontTypeList(params) {
return httpService({
url: `/user/conveniencePhoneType/list`,
method: 'get',
params: params,
})
}
// 添加便民电话类型
export function addPhontType(params) {
return httpService({
url: `/user/conveniencePhoneType/insert`,
method: 'post',
data: params,
})
}
// 修改便民电话类型
export function updatePhontType(params) {
return httpService({
url: `/user/conveniencePhoneType/update`,
method: 'post',
data: params,
})
}
// 删除便民电话类型
export function delPhontType(params) {
return httpService({
url: `/user/conveniencePhoneType/delete`,
method: 'get',
params: params,
})
}

@ -216,4 +216,32 @@ export default [
component: resolve => require(['@/views/Operation/CommunityIntro'], resolve),
meta: {title: '社区介绍'},
},
{
path: '/Facility',
name: "Facility",
title: "设施设备",
icon: 'solution',
hide: false,
component: resolve => require(['@/views/Operation/Facility'], resolve),
redirect: '/Facility/FacilityType',
meta: {title: '设施设备'},
children: [
{
path: '/Facility/FacilityType',
name: "FacilityType",
title: "设施设备分类",
hide: false,
component: resolve => require(['@/views/Operation/Facility/_facilityType'], resolve),
meta: {title: '设施设备分类'},
},
{
path: '/Facility/FacilityInfo',
name: "FacilityInfo",
title: "设施设备管理",
hide: false,
component: resolve => require(['@/views/Operation/Facility/_facilityInfo'], resolve),
meta: {title: '设施设备管理'},
}
]
},
]

@ -70,8 +70,22 @@ export const form = {
name: '',
buildingInfoImgUrls:[]
}
const handleConfirm = (rule,value,callback) => {
if(!value){
callback();
}else{
// 正则判断失败抛出错误否则直接callback()
if(/[\u4E00-\u9FA5]/g.test(value)) {
callback(new Error("不能输入中文!"));
}else{
callback();
}
}
}
export const rules = {
name:[{required:true,message:'请输入楼栋',trigger:'blur'}],
name:[{required:true,message:'请输入楼栋',trigger:'blur'},{validator: (rule,value,callback) => handleConfirm(rule,value,callback)}],
}
export const unitColumns = [

@ -138,6 +138,18 @@ function getBase64(file) {
reader.onerror = (error) => reject(error);
});
}
const handleConfirm = (rule,value,callback) => {
if(!value){
callback();
}else{
// callback()
if(/[\u4E00-\u9FA5]/g.test(value)) {
callback(new Error("不能输入中文!"));
}else{
callback();
}
}
}
export default {
props: {
show: Boolean,
@ -168,11 +180,12 @@ export default {
publicFloor:null,
manageBuildingId:null
},
rules:{
name:[{required:true,message:'请输入单元名称',trigger:'blur'}],
floor:[{required:true,message:'请输入楼层数',trigger:'blur'}],
name:[{required:true,message:'请输入单元名称',trigger:'blur'},{validator: (rule,value,callback) => handleConfirm(rule,value,callback)}],
floor:[{required:true,message:'请输入楼层数',trigger:'blur'},{validator: (rule,value,callback) => handleConfirm(rule,value,callback)}],
elevator:[{required:true,message:'是否有电梯',trigger:'change'}],
publicFloor:[{required:true,message:'公共楼层数',trigger:'blur'}],
publicFloor:[{required:true,message:'公共楼层数',trigger:'blur'},{validator: (rule,value,callback) => handleConfirm(rule,value,callback)}],
}
}
};

@ -53,7 +53,7 @@
</span>
<span slot="ids" slot-scope="text, row">
<a-tag v-for="(item,index) in row.residentListEstateVoList" :key="index">
{{item.identity==3?'租户':1?'业主':2?'业主亲属':'租户亲属'}}
{{item.identity==3?'租户':item.identity==1?'业主':item.identity==2?'业主亲属':'租户亲属'}}
</a-tag>
</span>
<span slot="type" slot-scope="text, row">

@ -20,6 +20,20 @@ export const form = {
estateImgUrls:[],
remarks:undefined,
}
const handleConfirm = (rule,value,callback) => {
if(!value){
callback();
}else{
// 正则判断失败抛出错误否则直接callback()
if(/[\u4E00-\u9FA5]/g.test(value)) {
callback(new Error("不能输入中文!"));
}else{
callback();
}
}
}
// 校验
export const rules = {
manageBuildingId:[
@ -33,6 +47,7 @@ export const rules = {
],
name: [
{ required: true, message: "请输入房屋名称", trigger: "blur" },
{validator: (rule,value,callback) => handleConfirm(rule,value,callback)}
],
manageEstateTypeId: [
{ required: true, message: "请选择房屋类型", trigger: "change" },

@ -355,6 +355,12 @@ export default {
//
//
columns: [
{
title: "创建时间",
key: "createDate",
dataIndex: "createDate",
width: 215,
},
{
title: "工单状态",
key: "tags",

@ -82,7 +82,7 @@
</a-col>
<a-col :span="24">
<a-form-model-item label="内容" prop="content">
<a-textarea style="width: 560px" :autosize="{minRows: 8}" placeholder="请输入内容" v-model="addForm.content"></a-textarea>
<a-textarea style="width: 560px" :autosize="{minRows: 8}" placeholder="可输入不超过1024个字符的内容" v-model="addForm.content"></a-textarea>
</a-form-model-item>
</a-col>
<a-col :span="24">
@ -161,7 +161,9 @@ export default {
this.getData()
},
handlerChange() {
this.pagination.current = val.current;
this.pagination.pageSize = val.pageSize;
this.getData()
},
detailClose() {
this.addForm = {

@ -0,0 +1,141 @@
export const form= {
type: 1,
name: '',
facilitiesCategoryId: undefined,
code: '',
status: undefined,
createStartDate: undefined,
createEndDate: undefined,
}
export const addForm = {
name: '',
address: '',
facilitiesCategoryId: undefined,
brand: '',
procurementCosts: '',
purchasingManufacturer: '',
manufacturerPhone: '',
warrantyPeriodYears: 0,
warrantyPeriodMonths: 0,
validityStart: '',
validityEnd: '',
openStartDate: '',
openEndDate: '',
remakes: '',
docUrls: [],
}
export const columns = [
{
title: "设施编号",
width: "10%",
dataIndex: "code",
},
{
title: "设施分类名称",
width: "8%",
dataIndex: "facilitiesCategoryName",
},
{
title: "设施名称",
width: "9%",
dataIndex: "name",
},
{
title: "添加人",
width: "8%",
dataIndex: "createName",
},
{
title: "设施状态",
width: "8%",
dataIndex: "status",
customRender: function(status) {
switch(status) {
case 1: return '空置中'
case 2: return '使用中'
case 3: return '已停用'
}
}
},
{
title: "设施品牌",
width: "8%",
dataIndex: "brand",
},
{
title: "采购费用(元)",
width: "8%",
dataIndex: "procurementCosts",
},
{
title: "采购厂家",
width: "8%",
dataIndex: "purchasingManufacturer",
},
{
title: "厂家电话",
width: "8%",
dataIndex: "manufacturerPhone",
},
{
title: "质保期限",
width: "6%",
dataIndex: "warrantyPeriodYears",
scopedSlots: { customRender: "quality" },
},
{
title: "设备有效期",
width: "16%",
dataIndex: "validityStart",
scopedSlots: { customRender: "time" },
},
// {
// title: "设备有效期开始",
// width: "8%",
// dataIndex: "validityStart",
// },
// {
// title: "设备有效期结束",
// width: "8%",
// dataIndex: "validityEnd",
// },
{
title: "文件",
width: "12%",
dataIndex: "docList",
scopedSlots: { customRender: "document" },
},
{
title: "备注",
width: "8%",
dataIndex: "remakes",
},
{
title: "添加时间",
width: "16%",
dataIndex: "createDate",
},
{
title: "操作",
dataIndex: "action",
key: "action",
width: "180",
fixed: "right",
scopedSlots: { customRender: "action" },
},
]
export const rules = {
name: [{ required: true, message: "请输入名称", trigger: "blur" }],
content: [{ required: true, message: "请输入内容", trigger: "blur" }],
}
export function doStr(str, number) {
if(str.length >= number) {
return str.substr(0,number-1) + '...'
} else {
return str
}
}

@ -0,0 +1,134 @@
<template>
<div>
<a-drawer title="详情" :width="720" :visible="show" :body-style="{ paddingBottom: '80px' }" @close="detailClose">
<div class="drawer-content" style="padding: 16px">
<div class="order-detail-title">{{detailInfo.name}}</div>
<div class="order-detail-subtitle">分类{{detailInfo.facilitiesCategoryName}}
<a-tag style="margin-left: 16px:float: right">{{detailInfo.status==1?'空置中':detailInfo.status==2?'使用中':'已停用'}}</a-tag>
</div>
<a-divider></a-divider>
<a-descriptions layout="vertical" style="margin-left: 6px">
<a-descriptions-item label="开放时间">{{detailInfo.openStartDate}} - {{detailInfo.openEndDate}}</a-descriptions-item>
<a-descriptions-item label="设施位置">{{detailInfo.address}}</a-descriptions-item>
<a-descriptions-item label="创建时间">{{detailInfo.createDate}}</a-descriptions-item>
<a-descriptions-item label="备注" :span="2">{{detailInfo.remakes}}</a-descriptions-item>
<a-descriptions-item label="是否开启">{{detailInfo.status==2?'是':'否'}}</a-descriptions-item>
<a-descriptions-item label="上传文件" :span="3">
<div v-for="(item,index) in detailInfo.docList" :key="index">
<a :href="$ImgUrl(item.url)" target="tar">{{item.url}}</a>
</div>
</a-descriptions-item>
</a-descriptions>
<div class="order-detail-title" style="margin-top: 16px">设备启停记录</div>
<a-divider></a-divider>
<a-table :columns="columns" :data-source="tableData" :pagination="pagination" @change="handlerChange">
</a-table>
</div>
</a-drawer>
</div>
</template>
<script>
import {findFacilityInfo,findRecordList} from "@/api/operation/facility"
export default {
props: {
show: {
type: Boolean,
default: false,
},
detailId: Number,
},
data() {
return {
detailInfo: {},
activeId: undefined,
pagination: {
current: 1,
total: 0,
pageSize: 10,
showTotal: (total) => `${total}`,
showSizeChanger: true,
showQuickJumper: true,
},
columns: [
{
title: "操作时间",
width: "25%",
dataIndex: "stopDate",
},
{
title: "执行操作",
width: "25%",
dataIndex: "type",
customRender: function(type) {
if(type == 1) {return '启用'}
else {return '停用'}
}
},
{
title: "操作原因",
width: "50%",
dataIndex: "stopReason",
},
],
tableData: [],
}
},
methods: {
detailClose() {
this.$emit("detailClose");
},
handlerChange(val) {
let obj = {
facilitiesManageId: this.activeId,
pageNum: val.current,
size: val.pageSize
};
findRecordList(obj).then(res => {
this.tableData = res.data.rows
this.pagination.total = res.data.total
})
}
},
watch: {
detailId: {
handler(val) {
if (val != null) {
this.activeId = val;
findFacilityInfo({facilitiesManageId: val}).then(res => {
let data = res.data;
this.detailInfo = data;
});
let obj = {
facilitiesManageId: val,
pageNum: this.pagination.current,
size:this.pagination.pageSize
}
findRecordList(obj).then(res => {
this.tableData = res.data.rows
this.pagination.total = res.data.total
})
}
},
immediate: true,
},
},
}
</script>
<style lang="less">
.order-detail-title {
padding: 8px;
font-weight: 500;
font-size: 18px;
line-height: 25px;
}
.order-detail-subtitle {
padding: 8px;
font-weight: 400;
font-size: 14px;
line-height: 20px;
color: rgba(0, 0, 0, 0.65);
}
</style>

@ -0,0 +1,452 @@
<template>
<div>
<div class="cardTitle">
<a-space size="large">
<!-- <span>{{form.type == 1?'设施管理':'设备管理'}}</span> -->
<a-radio-group
v-model="form.type"
button-style="solid"
@change="typeChange"
>
<a-radio-button :value="1"> 设施管理 </a-radio-button>
<a-radio-button :value="2"> 设备管理 </a-radio-button>
</a-radio-group>
</a-space>
</div>
<div class="search-box">
<a-row>
<a-col :span="20">
<a-space size="large">
<a-input v-model="form.name" style="width: 200px" :placeholder="form.type == 1 ?'设施名称':'设备名称'"></a-input>
<a-select v-model="form.facilitiesCategoryId" style="width: 200px" :placeholder="form.type == 1 ?'设施分类':'设备分类'">
<a-select-option v-for="(item) in faList" :value="item.id" :key="item.id">
{{item.name}}
</a-select-option>
</a-select>
<a-input v-model="form.code" style="width: 200px" :placeholder="form.type == 1 ?'设施编号':'设备编号'"></a-input>
<a-select v-model="form.status" style="width: 200px" :placeholder="form.type == 1 ?'设施状态':'设备状态'">
<a-select-option :value="1">空置中</a-select-option>
<a-select-option :value="2">使用中</a-select-option>
<a-select-option :value="3">已停用</a-select-option>
</a-select>
<a-range-picker @change="handlerTime" v-model="selTime" style="width: 240px" value-format="YYYY-MM-DD HH:mm:ss" :placeholder="['添加开始时间','添加结束时间']"></a-range-picker>
<a-button type="primary" @click='getData'> </a-button>
<a-button @click='reset'> </a-button>
</a-space>
</a-col>
</a-row>
</div>
<a-button style="margin: 10px" class="add-btn" @click="addShow = true;mode = 1">{{form.type == 1 ?'添加设施':'添加设备'}}</a-button>
<div class="main">
<a-table :columns="columns" :data-source="tableData" :pagination="pagination" @change="handlerChange" :scroll="{ x: 3200 }"
:row-selection="{
selectedRowKeys: selectedRowKeys,
onChange: selectionChoosed,
}"
:row-key="
(record, index) => {
return record.id;
}">
<template slot="quality" slot-scope="text,row">
{{row.warrantyPeriodYears}} {{row.warrantyPeriodMonths}} 个月
</template>
<template slot="time" slot-scope="text,row">
{{row.validityStart}} {{row.validityEnd}}
</template>
<template slot="document" slot-scope="text,row">
<div v-for="(item,index) in row.docList" :key="index">
<a :href="$ImgUrl(item.url)" target="tar">{{item.url}}</a>
</div>
</template>
<template slot="action" slot-scope="text,row">
<span><a @click=edit(row)>编辑</a></span>
<span><a style="margin-left: 8px" @click=detail(row)>详情</a></span>
<span><a style="margin-left: 8px;color:red" @click=del(row)>删除</a></span>
</template>
</a-table>
<div class="action">
<a-dropdown :disabled="!hasSelected">
<a-menu slot="overlay" @click="handleMenuClick">
<a-menu-item key="del"> 批量删除 </a-menu-item>
</a-menu>
<a-button> 批量操作 <a-icon type="down" /> </a-button>
</a-dropdown>
<span style="margin-left: 8px">
<template v-if="hasSelected">
{{ `已选择 ${selectedRowKeys.length}` }}
</template>
</span>
</div>
</div>
<a-drawer :title="form.type==1&&mode==1?'添加设施分类':form.type==2&&mode==1?'添加设备分类':form.type==1&&mode==2?'编辑设施分类':'编辑设备分类'"
:width="720" :visible="addShow" :body-style="{ paddingBottom: '60px' }" @close="addClose">
<div class="drawer-content">
<a-row>
<a-form-model :model="addForm" :rules="rules">
<a-col :span="12">
<a-form-model-item :label="form.type == 1 ?'设施名称':'设备名称'" prop="name">
<a-input style="width: 300px" placeholder="请输入名称" v-model="addForm.name"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item :label="form.type == 1 ?'设施位置':'设备位置'" prop="address">
<a-input style="width: 300px" placeholder="请输入位置" v-model="addForm.address"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item :label="form.type == 1 ?'设施分类':'设备分类'" prop="facilitiesCategoryId">
<a-select style="width: 300px" placeholder="请选择分类" v-model="addForm.facilitiesCategoryId">
<a-select-option v-for="(item) in faList" :value="item.id" :key="item.id">
{{item.name}}
</a-select-option>
</a-select>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item :label="form.type == 1 ?'设施品牌':'设备品牌'" prop="brand">
<a-input style="width: 300px" placeholder="请输入品牌" v-model="addForm.brand"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="采购费用" prop="brand">
¥ <a-input-number :min="0" :step="0.01" style="width: 150px;margin-left:8px" placeholder="请输入" v-model="addForm.procurementCosts"></a-input-number>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="采购厂家" prop="brand">
<a-input style="width: 300px" placeholder="请输入" v-model="addForm.purchasingManufacturer"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="厂家电话" prop="brand">
<a-input style="width: 300px" placeholder="请输入" v-model="addForm.manufacturerPhone"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="质保期限" prop="brand">
<a-input-number :min="0" style="width: 120px" placeholder="请输入" v-model="addForm.warrantyPeriodYears"></a-input-number>
<a-input-number :min="0" :max="12" style="width: 120px" placeholder="请输入" v-model="addForm.warrantyPeriodMonths"></a-input-number> 个月
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="有效期" prop="brand">
<a-range-picker @change="changeAT" v-model="actTime" style="width: 300px" value-format="YYYY-MM-DD HH:mm:ss" :placeholder="['有效期开始','有效期结束']"></a-range-picker>
</a-form-model-item>
</a-col>
<a-col :span="12">
<a-form-model-item label="开放时间" prop="brand">
<a-range-picker @change="changeOT" v-model="openTime" :mode="['time','time']" show-time format="HH:mm:ss" value-format="HH:mm" style="width: 300px" :placeholder="['开放时间开始','开放时间结束']"></a-range-picker>
</a-form-model-item>
</a-col>
<a-col :span="22">
<a-form-model-item label="上传文件" prop="brand">
<a-upload
name="file"
:multiple="true"
:action="`${$upload}`"
:file-list="documentList"
accept=".doc,.DOC,.xls,.XLS,.xlsx,.XLSX,.pdf,.PDF"
:headers="uploadHeaders"
@change="changeFile"
:beforeUpload='beforeUpload'
>
<a-button> <a-icon type="upload" /> 上传附件</a-button>
</a-upload>
</a-form-model-item>
</a-col>
<a-col :span="22">
<a-form-model-item label="备注" prop="brand">
<a-textarea :autosize="{minRows:8}" v-model="addForm.remakes" placeholder="请输入备注"></a-textarea>
</a-form-model-item>
</a-col>
</a-form-model>
</a-row>
</div>
<div class="drawer-footer" style="float: left">
<a-button @click="addConfirm" type="primary" :style="{ marginRight: '8px' }">确认</a-button>
<a-button @click="addClose"> </a-button>
</div>
</a-drawer>
<detailForm :show="detailShow" @detailClose="detailClose" :detailId="detailId"></detailForm>
</div>
</template>
<script>
import store from "@/store";
import detailForm from "./depend/detail.vue";
import {getFacilitiesList} from "@/api/operation/facility"
import {facilityInfoList,addFacilityInfo,updateFacilityInfo,findFacilityInfo,delFacilityInfo} from "@/api/operation/facility"
import { form ,addForm, rules, columns } from "./depend/config";
export default {
components: {
detailForm,
},
data() {
return {
form:form,
columns: columns,
rules: rules,
faList: [],
tableData: [],
selTime: [],
pagination: {
current: 1,
total: 0,
pageSize: 10,
showTotal: (total) => `${total}`,
showSizeChanger: true,
showQuickJumper: true,
},
selectedRowKeys: [],
//
addForm: addForm,
actTime: [],
openTime: [],
addShow: false,
mode: 1,
activeId: undefined,
fileList: [],
//
documentList: [],
uploadHeaders: {
"manage-login-token": store.getters.getToken,
},
//
detailShow: false,
detailId: undefined
}
},
created() {
this.getApi()
this.getData()
},
methods: {
getApi() {
let obj = {
pageNum: 1,size: 1000,type: this.form.type
}
getFacilitiesList(obj).then(res => {
let data = res.data.rows;
this.faList = data;
})
},
getData() {
let obj = Object.assign(this.form, {pageNum:this.pagination.current,size:this.pagination.pageSize})
facilityInfoList(obj).then(res => {
this.tableData = res.data.rows;
this.pagination.total = res.data.total
})
},
reset() {
this.form.name = '';
this.form.facilitiesCategoryId = undefined;
this.form.code = '';
this.form.status = undefined;
this.form.createStartDate = '';
this.form.createEndDate = '';
this.getData()
},
handlerTime() {
this.form.createStartDate = val[0];
this.form.createEndDate = val[1];
},
changeAT(val) {
this.addForm.validityStart = val[0];
this.addForm.validityEnd = val[1];
},
changeOT(val) {
this.addForm.openStartDate = val[0];
this.addForm.openEndDate = val[1];
},
typeChange() {
this.getApi()
this.getData()
},
handlerChange(val) {
this.pagination.current = val.current;
this.pagination.pageSize = val.pageSize;
this.getData()
},
//
selectionChoosed(val) {
this.selectedRowKeys = val
},
handleMenuClick(data) {
if (data.key === "del") {
this.$confirm({
title: "是否删除选中的模版?",
icon:'delete',
onOk:async()=>{
let res = await delFacilityInfo({facilitiesManageIds: this.selectedRowKeys})
if(res.code === 200){
this.$message.success(res.msg);
this.selectedRowKeys = [];
this.getData()
} else {
this.$message.error(res.msg);
}
},
})
}
},
del(val) {
this.$confirm({
title: "是否删除该信息?",
icon:'delete',
onOk:async()=>{
let res = await delFacilityInfo({facilitiesManageIds: [val.id]})
if(res.code === 200){
this.$message.success(res.msg);
this.getData()
} else {
this.$message.error(res.msg);
}
},
})
},
//
edit(val) {
this.activeId = val.id
findFacilityInfo({facilitiesManageId: val.id}).then(res => {
let data = res.data
this.addForm = {
name: data.name,
address: data.address,
facilitiesCategoryId: data.facilitiesCategoryId,
brand: data.brand,
procurementCosts: data.procurementCosts,
purchasingManufacturer: data.purchasingManufacturer,
manufacturerPhone: data.manufacturerPhone,
warrantyPeriodYears: data.warrantyPeriodYears,
warrantyPeriodMonths: data.warrantyPeriodMonths,
validityStart: data.validityStart,
validityEnd: data.validityEnd,
openStartDate: data.openStartDate.substr(0,5),
openEndDate: data.openEndDate.substr(0,5),
remakes: data.remakes,
docUrls: [],
};
this.actTime = [data.validityStart,data.validityEnd];
this.openTime = [data.openStartDate,data.openEndDate];
if (res.data.docList.length > 0) {
const file = [];
for (let item of res.data.docList) {
let obj = {
name: item.url.split("_")[0] + "." + item.url.split(".")[1],
url: this.$ImgUrl(item.url),
uid: item.url.split("_")[1],
status: "done",
thumbUrl: this.$ImgUrl(item.url),
};
file.push(obj);
}
this.documentList = file;
} else {
this.addForm.docUrls = [];
this.documentList= [];
};
this.addShow = true;
})
this.mode = 2;
},
addConfirm() {
//
let arr = [];
for (let k of this.documentList) {
if (k.response) {
arr.push(k.response.data);
} else {
arr.push(k.url.split("/")[k.url.split("/").length - 1]);
}
}
this.addForm.docUrls = arr;
if(this.mode == 1) {
let obj = Object.assign(this.addForm,{type: this.form.type})
addFacilityInfo(obj).then(res => {
if(res.code === 200){
this.$message.success(res.msg);
this.addClose()
this.getData()
} else {
this.$message.error(res.msg);
}
})
} else if (this.mode == 2) {
let obj = Object.assign(this.addForm,{id: this.activeId,type: this.form.type})
updateFacilityInfo(obj).then(res => {
if(res.code === 200){
this.$message.success(res.msg);
this.addClose()
this.getData()
} else {
this.$message.error(res.msg);
}
})
}
},
addClose() {
this.addForm = {
name: '',
address: '',
facilitiesCategoryId: undefined,
brand: '',
procurementCosts: '',
purchasingManufacturer: '',
manufacturerPhone: '',
warrantyPeriodYears: 0,
warrantyPeriodMonths: 0,
validityStart: '',
validityEnd: '',
openStartDate: '',
openEndDate: '',
remakes: '',
docUrls: [],
};
this.openTime = [];
this.actTime = [];
this.documentList = [];
this.addShow = false;
},
//
detail(val) {
this.detailId = val.id;
this.detailShow = true;
},
detailClose() {
this.detailShow = false;
this.detailId = null;
},
//
changeFile(info) {
this.documentList = info.fileList;
if (info.file.status !== "uploading") {
console.log(info.file, info.fileList);
}
if (info.file.status === "done") {
this.$message.success(`${info.file.name} 上传成功`);
// this.form.annexUrls.push(info.file.response.data);
} else if (info.file.status === "error") {
this.$message.error(`${info.file.name} 上传失败`);
}
},
beforeUpload(f, l) {
const isLt50M = f.size / 1024 / 1024 < 50;
if (!isLt50M) {
this.$message.error(f.name + "文件大小超出限制,请修改后重新上传");
return false;
} else {
return true;
}
},
},
computed: {
hasSelected() {
return this.selectedRowKeys.length > 0;
},
},
}
</script>
<style lang="less">
</style>

@ -0,0 +1,66 @@
export const form= {
type: 1,
name: '',
code: '',
createStartDate: undefined,
createEndDate: undefined,
}
export const addForm = {
name: '',
imgUrls: [],
}
export const columns = [
{
title: "分类编号",
width: "18%",
dataIndex: "code",
},
{
title: "分类名称",
width: "12%",
dataIndex: "name",
},
// {
// title: "分类类型",
// width: "9%",
// dataIndex: "type",
// },
{
title: "添加人名称",
width: "15%",
dataIndex: "createName",
},
{
title: "设施数量",
width: "12%",
dataIndex: "num",
},
{
title: "添加时间",
width: "16%",
dataIndex: "createDate",
},
{
title: "操作",
dataIndex: "action",
key: "action",
width: "240",
fixed: "right",
scopedSlots: { customRender: "action" },
},
]
export const rules = {
name: [{ required: true, message: "请输入名称", trigger: "blur" }],
content: [{ required: true, message: "请输入内容", trigger: "blur" }],
}
export function doStr(str, number) {
if(str.length >= number) {
return str.substr(0,number-1) + '...'
} else {
return str
}
}

@ -0,0 +1,263 @@
<template>
<div>
<div class="cardTitle">
<a-space size="large">
<!-- <span>{{form.type == 1?'设施管理':'设备管理'}}</span> -->
<a-radio-group
v-model="form.type"
button-style="solid"
@change="typeChange"
>
<a-radio-button :value="1"> 设施管理 </a-radio-button>
<a-radio-button :value="2"> 设备管理 </a-radio-button>
</a-radio-group>
</a-space>
</div>
<div class="search-box">
<a-row>
<a-col :span="20">
<a-space size="large">
<a-input v-model="form.name" style="width: 200px" :placeholder="form.type == 1 ?'设施分类名称':'设备分类名称'"></a-input>
<a-input v-model="form.code" style="width: 200px" :placeholder="form.type == 1 ?'设施编号':'设备编号'"></a-input>
<a-range-picker @change="handlerTime" v-model="selTime" style="width: 240px" value-format="YYYY-MM-DD HH:mm:ss" :placeholder="['添加开始时间','添加结束时间']"></a-range-picker>
<a-button type="primary" @click='getData'> </a-button>
<a-button @click='reset'> </a-button>
</a-space>
</a-col>
</a-row>
</div>
<a-button style="margin: 10px" class="add-btn" @click="detailShow = true;mode = 1">添加分类</a-button>
<div class="main">
<a-table :columns="columns" :data-source="tableData"
:pagination="pagination" @change="handlerChange" :scroll="{ x: 1400 }"
:row-selection="{
selectedRowKeys: selectedRowKeys,
onChange: selectionChoosed,
}"
:row-key="
(record, index) => {
return record.id;
}">
<template slot="action" slot-scope="text,record">
<span><a @click=edit(record)>编辑</a></span>
<span><a style="margin-left: 8px;color:red" @click=del(record)>删除</a></span>
</template>
</a-table>
<div class="action">
<a-dropdown :disabled="!hasSelected">
<a-menu slot="overlay" @click="handleMenuClick">
<a-menu-item key="del"> 批量删除 </a-menu-item>
</a-menu>
<a-button> 批量操作 <a-icon type="down" /> </a-button>
</a-dropdown>
<span style="margin-left: 8px">
<template v-if="hasSelected">
{{ `已选择 ${selectedRowKeys.length}` }}
</template>
</span>
</div>
</div>
<a-drawer :title="form.type==1&&mode==1?'添加设施分类':form.type==2&&mode==1?'添加设备分类':form.type==1&&mode==2?'编辑设施分类':'编辑设备分类'"
:width="540" :visible="detailShow" :body-style="{ paddingBottom: '60px' }" @close="detailClose">
<div class="drawer-content">
<a-row>
<a-form-model :model="addForm" :rules="rules">
<a-col :span="24">
<a-form-model-item label="设施名称" prop="name">
<a-input style="width: 300px" placeholder="请输入模版名称" v-model="addForm.name"></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="设施图片">
<commonUpload :fileList='fileList' @handleChange="handleChange" />
</a-form-model-item>
</a-col>
</a-form-model>
</a-row>
</div>
<div class="drawer-footer" style="float: left">
<a-button @click="addConfirm" type="primary" :style="{ marginRight: '8px' }">
确认
</a-button>
<a-button @click="detailClose"> </a-button>
</div>
</a-drawer>
</div>
</template>
<script>
import {getFacilitiesList,addFacility,updateFacility,delFacility,findFacility} from "@/api/operation/facility"
import { form ,addForm, rules, columns } from "./depend/config";
export default {
data() {
return {
form:form,
columns: columns,
rules: rules,
tableData: [],
selTime: [],
pagination: {
current: 1,
total: 0,
pageSize: 10,
showTotal: (total) => `${total}`,
showSizeChanger: true,
showQuickJumper: true,
},
selectedRowKeys: [],
//
addForm: addForm,
detailShow: false,
mode: 1,
activeId: undefined,
fileList: [],
}
},
created() {
this.getData()
},
methods: {
getData() {
let obj = Object.assign(this.form, {pageNum:this.pagination.current,size:this.pagination.pageSize})
getFacilitiesList(obj).then(res => {
this.tableData = res.data.rows;
this.pagination.total = res.data.total
})
},
reset() {
this.form.name = ''
this.form.code = ''
this.form.createStartDate = undefined
this.form.createEndDate = undefined
this.selTime = []
this.getData()
},
handlerTime(val) {
this.form.createStartDate = val[0];
this.form.createEndDate = val[1];
},
typeChange() {
this.getData()
},
handlerChange() {
this.pagination.current = val.current;
this.pagination.pageSize = val.pageSize;
this.getData()
},
//
selectionChoosed(val) {
this.selectedRowKeys = val
},
handleMenuClick(data) {
if (data.key === "del") {
this.$confirm({
title: "是否删除选中的分类?",
icon:'delete',
onOk:async()=>{
let res = await delFacility({facilitiesCategoryIds: this.selectedRowKeys})
if(res.code === 200){
this.$message.success(res.msg);
this.selectedRowKeys = [];
this.getData()
} else {
this.$message.error(res.msg);
}
},
})
}
},
del(val) {
this.$confirm({
title: "是否删除该分类?",
icon:'delete',
onOk:async()=>{
let res = await delFacility({facilitiesCategoryIds: [val.id]})
if(res.code === 200){
this.$message.success(res.msg);
this.getData()
} else {
this.$message.error(res.msg);
}
},
})
},
//
edit(val) {
this.mode = 2;
findFacility({facilitiesCategoryId: val.id}).then(res => {
let data = res.data;
this.addForm.name = data.name;
if(data.imgList.length>0){
const pic = []
this.addForm.imgUrls.push(data.imgList[0].url)
for(let item of data.imgList){
let obj = {
name:item.url.split('_')[0] +'.'+ item.url.split('.')[1],
url: this.$ImgUrl(item.url),
uid:item.url.split('_')[1],
status:'done',
thumbUrl: this.$ImgUrl(item.url),
}
pic.push(obj)
}
this.fileList = pic
}
this.activeId = data.id
})
this.detailShow = true;
},
addConfirm() {
if(this.mode == 1) {
let obj = Object.assign(this.addForm,{type: this.form.type})
addFacility(obj).then(res => {
if(res.code === 200){
this.$message.success(res.msg);
this.detailClose()
this.getData()
} else {
this.$message.error(res.msg);
}
})
} else if (this.mode == 2) {
let obj = Object.assign(this.addForm,{id: this.activeId})
updateFacility(obj).then(res => {
if(res.code === 200){
this.$message.success(res.msg);
this.detailClose()
this.getData()
} else {
this.$message.error(res.msg);
}
})
}
},
detailClose() {
this.addForm = {
name: '',
imgUrls: [],
};
this.fileList = [];
this.detailShow = false;
},
//
handleChange(data) {
this.fileList = data;
this.addForm.imgUrls = [];
data.forEach(ele => {
if(ele.status == 'done') {
this.addForm.imgUrls.push(ele.response.data)
}
})
}
},
computed: {
hasSelected() {
return this.selectedRowKeys.length > 0;
},
},
}
</script>
<style lang="less">
</style>

@ -0,0 +1,13 @@
<template>
<router-view></router-view>
</template>
<script>
export default {
}
</script>
<style>
</style>

@ -211,8 +211,10 @@ export default {
this.selTime = [];
this.getData();
},
handlerChange() {
handlerChange(val) {
this.pagination.current = val.current;
this.pagination.pageSize = val.pageSize;
this.getData()
},
detailClose() {
this.adviceInfo = {};

@ -0,0 +1,160 @@
<template>
<div>
<a-drawer title="电话类型" :width="540" :visible="show" :body-style="{ paddingBottom: '80px' }" @close="addClose">
<div class="drawer-content" style="padding: 16px">
电话类型
<a-divider></a-divider>
<!-- tags -->
<span v-for="item,index in typeList" :key="item.id">
<a-input
v-if="item.show==true"
ref="input"
v-focus
type="text"
size="small"
:style="{ width: '78px','padding-bottom':'3px','margin-right':'7px' }"
v-model="item.name"
@blur="editType(item)"
@keyup.enter="editType(item)"
/>
<a-tag
v-else-if="item.show==false" closable @close.prevent="delType(item.id)"
@click="editInput(item,index)" >
{{item.name}}
</a-tag>
</span>
<!-- addTag -->
<span>
<a-input
v-if="inputVisible"
ref="addInput"
type="text"
size="small"
:style="{ width: '78px','padding-bottom':'3px'}"
:value="typeForm.name"
@change="handleInputChange"
@blur="handleInputConfirm"
@keyup.enter="handleInputConfirm"
/>
<a-tag v-else style="background: #fff; borderStyle: dashed;" @click="addShow">
<a-icon type="plus" /> 新增类型
</a-tag>
</span>
</div>
<div class="drawer-footer">
<a-button :style="{ marginRight: '8px' }" @click="addClose">
关闭
</a-button>
</div>
</a-drawer>
</div>
</template>
<script>
import {getPhontTypeList, addPhontType, delPhontType,updatePhontType} from "@/api/operation/suggestion"
export default {
props: {
show: {
type: Boolean,
default: false,
},
},
data() {
return {
typeForm: {
name: ''
},
typeList: [],
inputVisible: false
}
},
created() {
this.getData()
},
methods: {
async getData() {
this.typeList = []
const res = await getPhontTypeList();
const arr = res.data;
arr.forEach(ele => {
ele.show = false;
})
this.typeList = arr;
this.$emit("refresh");
},
//
editInput(obj, i) {
this.$set(this.typeList[i],'show',true)
this.$forceUpdate()
},
//
addShow(){
this.inputVisible = true;
this.$nextTick(function() {
this.$refs.addInput.focus();
});
},
//
async editType(item){
let res = await updatePhontType({
id: item.id,
name: item.name
})
if(res.code === 200){
item.show = false
this.$forceUpdate()
this.$message.success(res.msg)
}else{
this.$message.error(res.msg)
}
},
handleInputChange(e) {
this.typeForm.name = e.target.value;
},
//
async handleInputConfirm() {
if(this.typeForm.name === ''){
this.inputVisible = false;
return
}
let res = await addPhontType({
name:this.typeForm.name,
})
if(res.code === 200){
this.$message.success(res.msg);
this.inputVisible = false;
this.typeForm.name = '';
this.getData()
}else{
this.$message.error(res.msg);
}
},
//
delType(id){
this.$confirm({
title: "是否删除",
icon:'delete',
onOk:async()=>{
let res = await delPhontType({conveniencePhoneTypeId: id})
if(res.code=== 200){
this.$message.success(res.msg);
this.getData()
}else{
this.$message.error(res.msg);
}
},
})
},
addClose() {
this.$emit("addClose");
},
},
watch: {
},
}
</script>
<style lang="less">
</style>

@ -12,15 +12,7 @@ export const columns = [
{
title: "类型",
width: "12%",
dataIndex: "type",
customRender: function (type) {
switch (type) {
case 1: return '业委会'
case 2: return '绿化'
case 3: return '快递'
case 4: return '搬家'
}
}
dataIndex: "typeName",
},
{
title: "状态",

@ -18,6 +18,7 @@
</a-row>
</div>
<a-button style="margin: 10px" class="add-btn" @click="detailShow = true;mode = 1">新增电话</a-button>
<a-button style="margin: 10px" @click="addType" type="primary" >新增电话类型</a-button>
<a-button style="margin: 10px" @click="check" type="primary" ghost>定时检查</a-button>
<div class="main">
<a-table :columns="columns" :data-source="tableData"
@ -68,10 +69,9 @@
<a-col :span="12">
<a-form-model-item label="类型" prop="type">
<a-select style="width: 240px" v-model="addForm.type">
<a-select-option :value="1">业委会</a-select-option>
<a-select-option :value="2">绿化</a-select-option>
<a-select-option :value="3">快递</a-select-option>
<a-select-option :value="4">搬家</a-select-option>
<a-select-option v-for="item in typeList" :value="item.id" :key="item.id">
{{item.name}}
</a-select-option>
</a-select>
</a-form-model-item>
</a-col>
@ -128,13 +128,19 @@
<a-button @click="checkClose"> </a-button>
</div>
</a-drawer>
<addType :show="addShow" @addClose="addShow = false" @refresh="getApi"></addType>
</div>
</template>
<script>
import {getPhontTypeList} from "@/api/operation/suggestion"
import {getPhoneList,addPhone, findPhone, updatePhone, delPhone,reminderInfo,updateReminder} from "@/api/operation/suggestion"
import { rules, columns } from "./depend/config";
import addType from "./depend/addType.vue";
export default {
components: {
addType,
},
data() {
return {
form: {
@ -172,12 +178,22 @@ export default {
checkShow: false,
//
selectedRowKeys: [],
//
addShow: false,
typeList: []
}
},
created() {
this.getApi()
this.getData()
},
methods: {
getApi() {
getPhontTypeList().then(res => {
let data = res.data;
this.typeList = data;
})
},
getData() {
let obj = Object.assign(this.form, {pageNum: this.pagination.current,size: this.pagination.pageSize})
getPhoneList(obj).then(res => {
@ -193,7 +209,9 @@ export default {
this.getData()
},
handlerChange() {
this.pagination.current = val.current;
this.pagination.pageSize = val.pageSize;
this.getData()
},
detailClose() {
this.addForm = {
@ -310,6 +328,10 @@ export default {
},
})
}
},
//
addType() {
this.addShow = true
}
},
computed: {

@ -1,36 +1,43 @@
<template>
<div class="content-text">
<h3>小蜜蜂用户协议</h3>
<p>更新时间2022年03月29日
生效时间2022年03月30日</p>
<p>更新时间2022年03月29日 生效时间2022年03月30日</p>
<h4>导语</h4>
<p>
() 审慎阅读你在申请注册流程中点击同意本协议之前应当认真阅读本协议请你务必审慎阅读充分理解各条款内容特别是免除或者限制责任的条款法律适用和争议解决条款免除或者限制责任的条款将以粗体下划线标识你应重点阅读如你对协议有任何疑问可向小蜜蜂客服咨询
()
审慎阅读你在申请注册流程中点击同意本协议之前应当认真阅读本协议请你务必审慎阅读充分理解各条款内容特别是免除或者限制责任的条款法律适用和争议解决条款免除或者限制责任的条款将以粗体下划线标识你应重点阅读如你对协议有任何疑问可向小蜜蜂客服咨询
()  签约动作当你按照注册页面提示填写信息阅读并同意本协议且完成全部注册程序后或以其他方式选择接受本协议或直接使用了本协议相关服务即表示你已充分阅读理解并接受本协议的全部内容并与小蜜蜂达成一致成为小蜜蜂用户阅读本协议的过程中如果你不同意本协议或其中任何条款约定你应立即停止注册程序
</p>
<h4>定义</h4>
<p>()  小蜜蜂小蜜蜂指研发并提供小蜜蜂产品和服务的深圳市凯达来科技有限公司以及其现在或未来设立的相关关联公司的单称或合称以下称为小蜜蜂我们
() 小蜜蜂软件服务小蜜蜂软件服务指SaaS软件服务包括小蜜蜂开发和服务的小蜜蜂后台小蜜蜂平台小蜜蜂app小蜜蜂管家端app等全面帮助物业管理运营小区日常业务工作的SaaS软件产品作为第三方服务集成在小蜜蜂关联公司或其他第三方软件和/或智能硬件而提供的服务
() 小蜜蜂关联经营主体小蜜蜂关联经营主体是指和小蜜蜂一起共同提供服务的各法律主体小蜜蜂可能根据业务调整而变更经营主体变更后的经营主体与你共同履行本协议并向你提供产品或服务经营主体的变更不会影响你本协议项下的权益为了更好的为你提供服务小蜜蜂可能会依据市场变化或经营便利自主安排或指定其关联公司控股公司或小蜜蜂认可的第三方公司提供部分或全部的相关服务如订单查询功能你可在小蜜蜂精选查询你在小蜜蜂发生的所有订单记录如你享受上述服务你将另行与第三方签署相应的协议
<p>
()  小蜜蜂小蜜蜂指研发并提供小蜜蜂产品和服务的深圳市凯达来科技有限公司以及其现在或未来设立的相关关联公司的单称或合称以下称为小蜜蜂我们
()
小蜜蜂软件服务小蜜蜂软件服务指SaaS软件服务包括小蜜蜂开发和服务的小蜜蜂后台小蜜蜂平台小蜜蜂app小蜜蜂管家端app等全面帮助物业管理运营小区日常业务工作的SaaS软件产品作为第三方服务集成在小蜜蜂关联公司或其他第三方软件和/或智能硬件而提供的服务
()
小蜜蜂关联经营主体小蜜蜂关联经营主体是指和小蜜蜂一起共同提供服务的各法律主体小蜜蜂可能根据业务调整而变更经营主体变更后的经营主体与你共同履行本协议并向你提供产品或服务经营主体的变更不会影响你本协议项下的权益为了更好的为你提供服务小蜜蜂可能会依据市场变化或经营便利自主安排或指定其关联公司控股公司或小蜜蜂认可的第三方公司提供部分或全部的相关服务如订单查询功能你可在小蜜蜂精选查询你在小蜜蜂发生的所有订单记录如你享受上述服务你将另行与第三方签署相应的协议
()  用户以下或称为用户包括物业和小区住户商家是指在小蜜申请通过后有店铺的公司个人以及其他合法组织
 </p>
<h4>
协议范围</h4>
<p>()  平等主体本协议由你与小蜜蜂共同缔结本协议对你与小蜜蜂均具有合同效力
 
</p>
<h4>协议范围</h4>
<p>
() 
平等主体本协议由你与小蜜蜂共同缔结本协议对你与小蜜蜂均具有合同效力
()  协议变更小蜜蜂对本协议内容进行变更的会按照法定程序在小蜜蜂控制台物业后台的消息通知中进行公示若你在本协议内容公示生效后继续使用本服务的表示你已充分阅读理解并接受变更后的协议内容也将遵循变更后的协议内容继续使用小蜜蜂服务若你不同意变更后的协议内容你应立即停止使用本服务如您对协议有任何疑问可向小蜜蜂客服咨询
() 补充协议由于互联网高速发展你与小蜜蜂签署的本协议列明的条款并不能完整罗列并覆盖你与小蜜蜂所有权利与义务现有的约定也不能保证完全符合未来发展的需求因此小蜜蜂saas系统公示的隐私政策等相关协议以及规则/规范均为本协议的补充协议与本协议不可分割且具有同等法律效力若你使用本服务视为你同意上述补充协议
 </p>
<h4>
帐号注册与使用规范</h4>
()
补充协议由于互联网高速发展你与小蜜蜂签署的本协议列明的条款并不能完整罗列并覆盖你与小蜜蜂所有权利与义务现有的约定也不能保证完全符合未来发展的需求因此小蜜蜂saas系统公示的隐私政策等相关协议以及规则/规范均为本协议的补充协议与本协议不可分割且具有同等法律效力若你使用本服务视为你同意上述补充协议
 
</p>
<h4>帐号注册与使用规范</h4>
<p>
() 用户资格你确认在你注册小蜜蜂帐号并使用小蜜蜂产品或服务前你是具有法律规定的完全民事权利能力和民事行为能力能够独立承担民事责任的自然人法人或其他组织如果你因年龄智力等因素而不具有相应的民事行为能力请在法定监护人的陪同下阅读和判断是否同意本协议如果你是非中国大陆地区的用户你订立或履行本协议以及使用本服务的行为还需要同时遵守你所属和/或所处国家或地区的法律
()  帐号注册
1.帐号获得你可通过下述方式获得你的小蜜蜂帐号
()
用户资格你确认在你注册小蜜蜂帐号并使用小蜜蜂产品或服务前你是具有法律规定的完全民事权利能力和民事行为能力能够独立承担民事责任的自然人法人或其他组织如果你因年龄智力等因素而不具有相应的民事行为能力请在法定监护人的陪同下阅读和判断是否同意本协议如果你是非中国大陆地区的用户你订立或履行本协议以及使用本服务的行为还需要同时遵守你所属和/或所处国家或地区的法律
()  帐号注册 1.帐号获得你可通过下述方式获得你的小蜜蜂帐号
1)当你按照注册页面提示填写信息阅读并同意本协议且完成全部注册程序后你可获得小蜜蜂帐号并成为小蜜蜂用户
2)当你通过第三方授权登录程序进入小蜜蜂你授权小蜜蜂收集你的第三方帐号昵称及头像等标识化的个人信息授权完成后你可获得小蜜蜂帐号并成为小蜜蜂用户
2.帐号使用为方便用户登录你可通过你的帐号登陆小蜜蜂域名下的其他服务如有特殊情况具体以实际登陆情况为准
3.同一用户使用同一身份认证信息同一手机号或经小蜜蜂排查认定多个小蜜蜂帐号的实际控制人为同一人的均视为同一用户
4.信息真实你应当通过真实身份信息认证注册帐号且你提交的帐号名称头像 简介等注册信息中不得出现违法和不良信息如存在上述情况小蜜蜂将不予注册同时在注册后如发现你以虚假信息骗取帐号名称注册或其帐号头像简介等注册信息存在违法/不良信息的或侵犯他人合法权益的小蜜蜂可采取限期改正暂停使用注销登记收回等措施
4.信息真实你应当通过真实身份信息认证注册帐号且你提交的帐号名称头像
简介等注册信息中不得出现违法和不良信息如存在上述情况小蜜蜂将不予注册同时在注册后如发现你以虚假信息骗取帐号名称注册或其帐号头像简介等注册信息存在违法/不良信息的或侵犯他人合法权益的小蜜蜂可采取限期改正暂停使用注销登记收回等措施
() 帐号安全
1.安全保管义务你有权使用手机号或第三方账号授权登录小蜜蜂获得账号并自行设置符合安全要求的密码你的帐号由你自行保管小蜜蜂任何时候均不会主动要求你提供你的帐号密码因此请你务必保管好你的帐号并确保你在每个上网时段结束时退出登录并以正确步骤离开小蜜蜂帐号因你主动泄露或因你遭受他人攻击诈骗等行为导致的损失及后果小蜜蜂并不承担责任你应通过司法行政等救济途径向侵权行为人追偿
2.帐号行为责任自负由于您的小蜜蜂账号关联您的个人信息及商业信息请确保您小蜜蜂账号仅限您本人使用以保证账号的安全性和私密性你应对你帐号项下的所有行为结果包括但不限于在线签署各类协议发布信息购买商品/服务及披露信息等负责但除小蜜蜂存在过错的除外
@ -42,21 +49,20 @@
1.你申请注销的是你本人的帐号并依照小蜜蜂的相关流程提交相应的资料进行注销
2.你应对你在注销帐号前的使用行为承担相应责任
3.注销成功后你的帐号信息个人身份信息交易记录会员权益等将无法恢复你应自行备份存储在本软件和/或本服务中的数据信息或与本软件和/或本服务相关的数据信息
 </p>
<h4>
小蜜蜂服务内容及使用规范</h4>
 
</p>
<h4>小蜜蜂服务内容及使用规范</h4>
<p>
()服务概况你可以用户身份通过小蜜蜂提供的软件服务在小蜜蜂系统上享受商品及/或服务的浏览发布购买与评价申请审核争议处理信息交流等服务也可通过小蜜蜂提供的软件服务发布任务以住户身份提交工单并与物业服务人员沟通但具体的交易及是否确认支付行为由你自行决定
()商品/服务的购买当你购买小蜜蜂商家所上架的商品及/或服务时请你务必仔细确认所购商品的品名价格数量型号规格尺寸或服务的时间内容限制性要求等重要事项并在下单时核实你的联系地址电话收货人等信息如你填写的收货人非你本人则该收货人的行为和意思表示产生的法律后果均由你承担
你的购买行为应当基于真实的消费需求不得存在对商品及/或服务实施恶意购买恶意维权等扰乱小蜜蜂正常交易秩序的行为基于维护交易秩序及交易安全的需要小蜜蜂发现上述情形时可主动执行关闭订单限制购买锁定/冻结帐号等操作
()商品/服务的评价小蜜蜂为用户提供了评价系统你可对与你达成交易的商品及/服务进行评价你的评价行为应遵守的中华人民共和国网络安全法等相关法律规定包括但不限于评价内容应当合法客观真实与交易的商品/服务具有关联性不应包含任何污言秽语色情低俗广告信息及法律法规与本协议列明的其他禁止性信息且不应以不正当方式帮助他人提升信用或利用评价权利对其他用户实施威胁敲诈勒索等否则小蜜蜂可根据相关规定通知监管部门对你实施上述行为采取相应的处置措施
()收货后结算服务即第三方代收代付功能在资金支付完成前交易相对方不可撤销地授权小蜜蜂支付或小蜜蜂支付的协议银行进行资金的代为收取支付存放划转该服务无法提供给即时到账储值卡充值等未经小蜜蜂支付结算资金的业务在使用该功能时买家点击确认收货或根据买卖双方的约定视为确认收货后小蜜蜂支付将代为收取的买家支付的款项代为支付给卖家
 </p>
<h4>
用户的违约及处理</h4>
 
</p>
<h4>用户的违约及处理</h4>
<p>
() 违约的认定
1.使用小蜜蜂服务时违反有关法律法规规定的
() 违约的认定 1.使用小蜜蜂服务时违反有关法律法规规定的
2.违反本协议或小蜜蜂规则即本协议第二条约定的
3.为适应小区服务电子商务发展为广大用户提供高效优质服务你理解并同意其他情节影响严重小蜜蜂有合理理由认定你违约的如你不能提供充分举证和合理解释则视为你违约
()禁止性信息你在使用小蜜蜂服务时须遵守法律法规不得制作复制发布传播含有下列内容的商品服务或从事相关行为也不得为制作复制发布传播含有下列内容的信息或从事相关行为提供便利
@ -70,18 +76,18 @@
()违反约定如你的行为使小蜜蜂及其关联公司遭受损失包括直接经济损失商誉损失及对外支付的赔偿金和解款律师费诉讼费等间接经济损失你应赔偿小蜜蜂及其关联公司的上述全部损失如你的行为使小蜜蜂及其关联公司遭受第三人主张权利小蜜蜂及其关联公司可在对第三人承担金钱给付等义务后就全部损失向你追偿如你违反本协议或小蜜蜂规则约定的小蜜蜂有权经综合评估后视你的行为性质采取包括但不限于删除你发布的商品或服务暂停使用许可终止服务限制使用回收帐号追究法律责任等措施
()服务终止你需要对自己在服务使用过程中的行为负责即使你已经终止使用该服务或完成了相应的交易或删除你所拥有的店铺你仍应对你的之前的行为负责你承担责任的形式包括但不限于对受到侵害者进行赔偿以及小蜜蜂承担了因你的行为导致的行政处罚或侵权损害赔偿责任后你应给予小蜜蜂等额的赔偿如有
()关联处理如因你严重违约导致小蜜蜂终止本协议时出于维护小蜜蜂秩序及保护消费者权益的目的小蜜蜂及/或其关联公司可对与你在其他协议项下的合作采取中止甚或终止协议的措施并以本协议第十一条约定的方式通知你如小蜜蜂与你签署的其他协议及小蜜蜂及/或其关联公司支付公司与你签署的协议中明确约定了对你在本协议项下合作进行关联处理的情形则小蜜蜂出于维护小蜜蜂秩序的目的可在收到指令时中止甚至终止协议并以本协议第十一条约定的方式通知你
 </p>
<h4>
交易争议处理</h4>
 
</p>
<h4>交易争议处理</h4>
<p>
()小蜜蜂介入小蜜蜂可根据实际情况介入处理你与其他用户之间的纠纷
1)你在交易过程中与其他用户发生争议的你或其他用户中任何一方可以自行协商解决也可以通过小蜜蜂介入处理若你觉得以上的方式均无法达到你要的结果你可以寻求司法机关或其他机关的协助
2)你选择小蜜蜂介入的方式处理相关问题那么你需要遵守和执行小蜜蜂的处理结果若你对小蜜蜂的处理结果不满意你仍有权采取其他争议处理途径解决争议但通过其他争议处理途径未取得终局决定前你仍应先履行小蜜蜂的处理结果
3)调处决定你理解并同意小蜜蜂进行交易争议介入的小蜜蜂的客服及维权人员并非专业人士仅能以普通人的认知对用户提交的凭证进行判断因此除小蜜蜂存在故意或重大过失外小蜜蜂对争议调处决定免责
()赔偿限制如根据小蜜蜂客服介入后判定小蜜蜂商家承担责任的小蜜蜂商家的因各种理由导致无法赔付的由你自行和小蜜蜂商家协商或其他途径解决
 </p>
<h4>
免责声明</h4>
 
</p>
<h4>免责声明</h4>
<p>
()小蜜蜂依照法律规定履行基础保障义务但对于下述原因导致的合同履行障碍履行瑕疵履行延后或履行内容变更等情形小蜜蜂无需为此承担任何责任
1.小蜜蜂需要定期或不定期地对提供网络服务的平台或相关的设备进行检修或者维护在小蜜蜂已尽善意管理的情况下因常规或紧急的设备与系统维护设备与系统故障网络信息与数据安全等因素
@ -92,9 +98,9 @@
6.因病毒木马恶意程序攻击网络拥堵系统不稳定系统或设备故障通讯故障电力故障银行原因第三方服务瑕疵或政府行为等原因
7.尽管有前款约定小蜜蜂将采取合理行动积极促使服务恢复正常
()海量信息小蜜蜂根据本协议向你提供小蜜蜂软件服务你了解小蜜蜂saas系统以及商品信息系商家或用户自行发布且可能存在风险和瑕疵小蜜蜂将通过依法建立相关检查监控制度尽可能保障你的合法权益及良好体验同时鉴于网络服务具备存在海量信息及信息网络环境下信息与实物相分离的特点小蜜蜂无法逐一审查商品/服务的信息无法逐一审查交易所涉及的商品/服务的质量安全以及合法性真实性准确性对此你应谨慎判断
 </p>
<h4>
服务终止</h4>
 
</p>
<h4>服务终止</h4>
<p>
()终止的情形本服务可能会因为下述情形终止
1.小蜜蜂变更本服务内容而你明示不愿接受变更事项的
@ -107,39 +113,35 @@
1.继续保存你留存于小蜜蜂域内根据法律法规的要求应当保存的信息
2.对于你过往的违约行为小蜜蜂仍可依据本协议向你追究违约责任
()交易争议处理本协议终止后对于你在本协议存续期间因提供的各项服务而产生的交易订单小蜜蜂可通知交易相对方并根据交易相对方的意愿决定是否关闭该等交易订单如交易相对方要求继续履行的则你应当就该等交易订单继续履行本协议及交易订单的约定并承担因此产生的任何损失或增加的任何费用
 </p>
<h4>
知识产权</h4>
 
</p>
<h4>知识产权</h4>
<p>
()小蜜蜂或其关联方拥有使用许可控制的或者小蜜蜂或其关联方对之享有其他权利的所有知识产权工业产权和专有权利如你需要使用可按照官网公示的途径向小蜜蜂申请非经小蜜蜂或其关联公司书面同意任何人不得擅自使用修改复制公开传播改变散布发行或公开发表在小蜜蜂网站上的程序或内容你不得恶意申请和注册与小蜜蜂及小蜜蜂关联方相同或近似的商标名称标识标志微信公众号域名网页等用于开展与小蜜蜂及小蜜蜂关联方实质相同或近似的业务
()如你需使用著作权非小蜜蜂所有的内容的你应获得具体内容的著作权所有者的合法授权才能使用如因你私自使用非自己所有的且未经他人合法授权的著作图片档案资讯资料等内容的由你自行承担责任包括但不限于你自行对其侵权行为产生的纠纷进行处理并对其侵权行为承担法律责任且就由此给乙方造成的损失包括但不限于乙方声誉的影响乙方由此承担的连带责任如有进行赔偿
 </p>
<h4>
十一通知与送达</h4>
 
</p>
<h4>十一通知与送达</h4>
<p>
()通知实时关注小蜜蜂根据你提供的任一联系方式送达各类通知而此类通知的内容可能对你的权利义务产生重大的有利或不利影响请你务必及时关注
()法律文书送达对于在小蜜蜂saas系统内因交易活动引起的任何纠纷你同意司法机关及监管部门包括但不限于人民法院市场监督管理局可以通过你在小蜜蜂享受各项服务时提供的手机号码电子邮箱联系方式以及在注册小蜜蜂用户时生成的帐号进行送达司法机关向上述联系方式发出法律文书即视为送达你指定的邮寄地址为你的法定身份证地址注册地址或你提供的有效联系地址
()联系方式实时更新你应当保证所提供的联系方式是准确有效的并进行实时更新如果因提供的联系方式不正确或不及时告知变更后的联系方式使法律文书无法送达或未及时送达由你自行承担由此可能产生的法律后果
 </p>
<h4>
十二法律适用管辖与其他</h4>
 
</p>
<h4>十二法律适用管辖与其他</h4>
<p>
()法律适用本协议之效力解释变更执行与争议解决均适用中华人民共和国法律没有相关法律规定的参照通用国际商业惯例和行业惯例
()管辖法院你因使用小蜜蜂服务所产生及与小蜜蜂服务有关的争议由小蜜蜂与你协商解决协商不成时任何一方均可向深圳互联网法院提起诉讼
()条款独立性如本协议的任何条款被视作无效或无法执行则上述条款可被分离其余条款则仍具有法律效力
()权利放弃本协议任何一方于另一方过失或违约时放弃本协议规定的权利的不得视为其对一方的其他或以后同类之过失或违约行为弃权小蜜蜂未行使或执行本服务协议任何权利或规定不构成对前述权利或权利之放弃
</p>
</div>
</template>
<script>
export default {
name: 'admin'
}
name: "admin",
};
</script>
<style lang="less">

@ -1,23 +1,16 @@
<template>
<div class="content-text">
<h3>小蜜蜂隐私声明</h3>
<p>
更新时间2022年03月29日
生效时间2022年03月30日</p>
<h4>
引言</h4>
<p>更新时间2022年03月29日 生效时间2022年03月30日</p>
<h4>引言</h4>
<p>
欢迎你使用我们的产品和服务我们深知个人信息对你的重要性你的信任对我们非常重要我们将根据法律法规要求并参照行业最佳实践为你的个人信息安全提供充分保障鉴于此小蜜蜂制定本隐私声明下称本声明/本隐私权声明以帮助你充分了解在你使用我们的产品与/或服务时我们如何收集使用保存共享和转让这些信息以及我们为你提供的访问更新删除和保护这些信息的方式
本隐私声明将帮助你了解以下内容
我们如何收集和使用你的个人信息
本隐私声明将帮助你了解以下内容 我们如何收集和使用你的个人信息
我们如何使用Cookies和同类技术
我们如何共享转让公开披露你的个人信息
我们如何保护和保存你的个人信息
你如何管理个人信息
未成年人的个人信息保护
通知和修订
如何联系我们</p>
我们如何保护和保存你的个人信息 你如何管理个人信息
未成年人的个人信息保护 通知和修订 如何联系我们
</p>
<h4>
本声明适用于小蜜蜂提供的所有产品和服务如小蜜蜂及关联公司范围详见定义部分的产品或服务中使用了小蜜蜂提供的产品或服务例如使用小蜜蜂帐号登录但未设独立隐私权声明的则本声明同样适用于该部分产品或服务我们及关联公司就其向你提供的产品或服务单独设立有隐私权声明的则相应产品或服务适用相应隐私声明
需要特别说明的是本隐私声明不适用于其他第三方通过前述网页或客户端或者小程序或公众号等向你提供的服务例如你通过小蜜蜂使用第三方应用如支付宝微信或者服务或第三方服务和产品依托小蜜蜂产品向你提供服务时你向第三方提供的信息不适用本声明
@ -28,155 +21,109 @@
请注意部分认可的商业伙伴如被授权商或社交媒体也可以决定为何如何使用你的个人信息他们有各自的隐私和cookies政策故请谨记他们使用你提供给他们的任何个人信息的方式应适用他们的规定而不适用我们的规定
如你作为消费者你授权给商家的个人信息我们仅作为商家的个人信息受托者
为了解我们的角色请注意我们为何如何收集和使用你的个人信息来决定处理你个人信息的目的和方式我们的个人信息受托者则是由我们指示为何如何可以代替我们处理你个人信息的机构
 </h4>
<h3>
第一部分 定义</h3>
 
</h4>
<h3>第一部分 定义</h3>
<p>
小蜜蜂小蜜蜂指研发并提供小蜜蜂产品和服务的深圳市凯达来科技有限公司注册地址深圳市龙岗区横岗街道沙荷路40-11及现在或未来设立的相关关联公司的单称或合称
关联公司关联公司指深圳市凯达来科技有限公司开发的应用中涉及到其他小蜜蜂服务提供者的关联公司
小蜜蜂服务小蜜蜂软件服务指SaaS软件服务包括小蜜蜂开发和服务的小蜜蜂后台小蜜蜂平台小蜜蜂app小蜜蜂管家端app等全面帮助物业管理运营小区日常业务工作的SaaS软件产品作为第三方服务集成在小蜜蜂关联公司或其他第三方软件和/或智能硬件而提供的服务
个人信息删除个人信息删除指在实现日常业务功能所涉及的系统中去除个人信息的行为使其保持不可被检索访问的状态
 </p>
<h3>
第二部分 隐私声明</h3>
<h4>
我们如何收集和使用你的个人信息</h4>
<p>个人信息是指以电子或者其他方式记录的能够单独或者与其他信息结合识别特定自然人身份或者反映特定自然人活动情况的各种信息个人敏感信息是指一旦泄露非法提供或滥用可能危害人身和财产安全极易导致个人名誉身心健康受到损害或歧视性待遇的个人信息本隐私声明中涉及的个人信息包括基本信息包括个人姓名生日性别住址个人电话号码电子邮箱个人身份信息包括身份证军官证护照驾驶证等个人生物识别信息包括声纹面部识别特征等网络身份标识信息包括个人信息主体帐号IP地址个人数字证书等个人财产信息包括交易和消费记录零钱余额优惠券权益卡游戏或充值兑换卡等虚拟财产信息个人通讯信息通讯录个人上网记录包括网页浏览记录软件使用记录点击记录个人常用设备信息包括硬件型号设备MAC地址操作系统类型设备设置软件安装列表已经安装包名列表硬件序列号唯一设备识别码如IMEI/android ID/IDFA/OPENUDID/GUIDSIM卡IMSI信息等在内的描述个人常用设备基本情况的信息个人位置信息包粗略定位信息精准定位信息等其中字体加粗部分为涉及的个人敏感信息
 
</p>
<h3>第二部分 隐私声明</h3>
<h4>我们如何收集和使用你的个人信息</h4>
<p>
个人信息是指以电子或者其他方式记录的能够单独或者与其他信息结合识别特定自然人身份或者反映特定自然人活动情况的各种信息个人敏感信息是指一旦泄露非法提供或滥用可能危害人身和财产安全极易导致个人名誉身心健康受到损害或歧视性待遇的个人信息本隐私声明中涉及的个人信息包括基本信息包括个人姓名生日性别住址个人电话号码电子邮箱个人身份信息包括身份证军官证护照驾驶证等个人生物识别信息包括声纹面部识别特征等网络身份标识信息包括个人信息主体帐号IP地址个人数字证书等个人财产信息包括交易和消费记录零钱余额优惠券权益卡游戏或充值兑换卡等虚拟财产信息个人通讯信息通讯录个人上网记录包括网页浏览记录软件使用记录点击记录个人常用设备信息包括硬件型号设备MAC地址操作系统类型设备设置软件安装列表已经安装包名列表硬件序列号唯一设备识别码如IMEI/android
ID/IDFA/OPENUDID/GUIDSIM卡IMSI信息等在内的描述个人常用设备基本情况的信息个人位置信息包粗略定位信息精准定位信息等其中字体加粗部分为涉及的个人敏感信息
我们会通过如下三种渠道获取你的个人信息
你直接提供给我们及我们收集的个人信息
请你注意如果你提供的是他人个人信息请你确保已取得相关主体的授权
1.消费者角色
在你未创建店铺或在商家店铺进行网上交易时你的用户角色为消费者
我们收集的个人信息 使用目的 收集场景 法律依据
帐号注册信息及联系方式
包括小蜜蜂帐号名密码本人的手机号码以及你在某活动中主动向我们提供的任何信息 提供新用户注册
提供老用户登录 注册/登录 履行合同
支付信息
包括小蜜蜂订单号交易金额信息银行卡号有效期在内的支付必要信息 确认支付指令并完成支付
开通小蜜蜂钱包 商品付款小蜜蜂钱包充值 履行合同
履行法定职责或法定义务
交易信息
包括你在小蜜蜂精选所生成的消费历史记录订单信息收货地址会员信息以及你的其他个人信息 提供小蜜蜂精选订单展示
提供小蜜蜂精选商品处理
提供小蜜蜂精选权益保护 小蜜蜂精选下单 履行合同
履行法定职责或法定义务
身份信息
包括居民身份证号生日区域 提供个性化体验 小区用户资料填写身份申请登记 履行合同
评论信息
我们收集的个人信息 使用目的 收集场景 法律依据 帐号注册信息及联系方式
包括小蜜蜂帐号名密码本人的手机号码以及你在某活动中主动向我们提供的任何信息
提供新用户注册 提供老用户登录 注册/登录 履行合同 支付信息
包括小蜜蜂订单号交易金额信息银行卡号有效期在内的支付必要信息
确认支付指令并完成支付 开通小蜜蜂钱包 商品付款小蜜蜂钱包充值 履行合同
履行法定职责或法定义务 交易信息
包括你在小蜜蜂精选所生成的消费历史记录订单信息收货地址会员信息以及你的其他个人信息
提供小蜜蜂精选订单展示 提供小蜜蜂精选商品处理 提供小蜜蜂精选权益保护
小蜜蜂精选下单 履行合同 履行法定职责或法定义务 身份信息
包括居民身份证号生日区域 提供个性化体验
小区用户资料填写身份申请登记 履行合同 评论信息
包括文字照片视频及其他你可能提交给我们的信息
若你公开发布的信息中涉及儿童个人信息的你需在发布前征得对应儿童监护人的同意 为第三方宣传 商品评价 取得个人的同意
反馈信息
若你公开发布的信息中涉及儿童个人信息的你需在发布前征得对应儿童监护人的同意
为第三方宣传 商品评价 取得个人的同意 反馈信息
包括你通过电子邮件电话以及其他形式调查提交给我们的信息 提升用户体验
解决交易纠纷
保障消费者个人权益 联系客服 取得个人的同意
设备信息和标识符
包括设备名称唯一设备识别码如IMEI/Android ID/IDFA/OPENUDID/GUIDSIM卡IMSI信息等在内的描述个人常用设备基本情况的信息设备型号设备MAC地址操作系统类型设备设置硬件序列号应用程序版本语言设置分辨率服务提供商网络IDPLMN网络标识信息个人信息主体帐号IP地址网络类型个人数字证书 提升用户体验
保障帐号安全性
优化产品页面展示
解决交易纠纷 保障消费者个人权益 联系客服 取得个人的同意 设备信息和标识符
包括设备名称唯一设备识别码如IMEI/Android
ID/IDFA/OPENUDID/GUIDSIM卡IMSI信息等在内的描述个人常用设备基本情况的信息设备型号设备MAC地址操作系统类型设备设置硬件序列号应用程序版本语言设置分辨率服务提供商网络IDPLMN网络标识信息个人信息主体帐号IP地址网络类型个人数字证书
提升用户体验 保障帐号安全性 优化产品页面展示
协助第三方商家追踪广告点击情况 产品使用商品浏览商品下单 取得个人的同意
履行法定职责或法定义务
 
连接和使用信息
履行法定职责或法定义务   连接和使用信息
包括网页浏览记录域名软件使用记录点击记录浏览活动滚动和按键活动已查看的广告收藏添加至购物车交易售后关注分享信息发布信息搜索关键词你查看的内容和持续时间服务质量及你与内容的交互行为日志以及其他类似信息
如前述事件发生时你处于脱机状态相关信息将被记录并在你下次连接至网络时传输给我们 提升用户体验
保障帐号安全性
提供多业务和多设备的无缝体验
  产品使用商品浏览商品下单 取得个人的同意
履行法定职责或法定义务
软件安装列表
包括已经安装包名列表或收集运行服务列表信息 提升用户体验
推送最新消息
避免重复下载 使用App 取得个人的同意
位置信息
如前述事件发生时你处于脱机状态相关信息将被记录并在你下次连接至网络时传输给我们
提升用户体验 保障帐号安全性 提供多业务和多设备的无缝体验  
产品使用商品浏览商品下单 取得个人的同意 履行法定职责或法定义务
软件安装列表 包括已经安装包名列表或收集运行服务列表信息 提升用户体验
推送最新消息 避免重复下载 使用App 取得个人的同意 位置信息
包括与你的IP地址关联的或通过Wi-Fi三角测量定位得到的城市省和邮政编码
在通过你移动设备上基于GPS的功能使用你的精确位置之前我们将请求你的授权 保障帐号安全性
完成商品交付 登录\注册
输入收货地址 取得个人的同意
履行法定职责或法定义务
2.商家角色
在通过你移动设备上基于GPS的功能使用你的精确位置之前我们将请求你的授权
保障帐号安全性 完成商品交付 登录\注册 输入收货地址 取得个人的同意
履行法定职责或法定义务 2.商家角色
当你在使用小蜜蜂的产品如小蜜蜂商城店铺后台等进行经营活动时你的用户角色为商家
我们收集的个人信息 使用目的 收集场景 法律依据
帐号注册信息及联系方式
包括小蜜蜂帐号名密码本人的手机号码以及你在某活动中主动向我们提供的任何信息 提供新用户注册
提供老用户登录
与你取得联系
建立业务合作管理
发送营销信息 App注册/登录
小蜜蜂官网在线咨询预约演示领取开店资料包
  履行合同
我们收集的个人信息 使用目的 收集场景 法律依据 帐号注册信息及联系方式
包括小蜜蜂帐号名密码本人的手机号码以及你在某活动中主动向我们提供的任何信息
提供新用户注册 提供老用户登录 与你取得联系 建立业务合作管理 发送营销信息
App注册/登录 小蜜蜂官网在线咨询预约演示领取开店资料包   履行合同
店铺认证信息
包括店铺法人姓名手机号码身份证号身份证手持正反面照片营业执照以及其他工商要求信息 完成店铺认证 网页及App店铺认证 履行合同
履行法定职责或法定义务
店铺联系信息
包括经营地址店铺联系电话电子邮箱 与你取得联系
建立业务合作管理
建立与消费者之间的沟通渠道 网页及App创建店铺 履行合同
履行法定职责或法定义务
支付信息
包括小蜜蜂订单号交易金额信息银行卡号有效期在内的支付必要信息 确认支付指令并完成支付
  商品付款小蜜蜂钱包充值 履行合同
履行法定职责或法定义务
金融信息
包括身份证信息银行卡信息 提供保险等金融产品/服务 保险服务开通 履行合同
履行法定职责或法定义务
包括店铺法人姓名手机号码身份证号身份证手持正反面照片营业执照以及其他工商要求信息
完成店铺认证 网页及App店铺认证 履行合同 履行法定职责或法定义务
店铺联系信息 包括经营地址店铺联系电话电子邮箱 与你取得联系
建立业务合作管理 建立与消费者之间的沟通渠道 网页及App创建店铺 履行合同
履行法定职责或法定义务 支付信息
包括小蜜蜂订单号交易金额信息银行卡号有效期在内的支付必要信息
确认支付指令并完成支付   商品付款小蜜蜂钱包充值 履行合同
履行法定职责或法定义务 金融信息 包括身份证信息银行卡信息
提供保险等金融产品/服务 保险服务开通 履行合同 履行法定职责或法定义务
交易信息
包括你在小蜜蜂供货商市场所生成的消费历史记录订单信息收货地址会员信息以及你的其他个人信息 提供小蜜蜂供货商市场商品交付
提供供货商市场权益保护 小蜜蜂供货商市场样品下单 履行合同
反馈信息
包括你在小蜜蜂供货商市场所生成的消费历史记录订单信息收货地址会员信息以及你的其他个人信息
提供小蜜蜂供货商市场商品交付 提供供货商市场权益保护
小蜜蜂供货商市场样品下单 履行合同 反馈信息
包括你通过电子邮件电话以及其他形式调查提交给我们的信息 提升用户体验
解决交易纠纷 联系小蜜蜂客服 取得个人的同意
设备信息和标识符
包括设备名称唯一设备识别码如IMEI/Android ID/IDFA/OPENUDID/GUIDSIM卡IMSI信息等在内的描述个人常用设备基本情况的信息设备型号设备MAC地址操作系统类型设备设置硬件序列号应用程序版本语言设置分辨率服务提供商网络IDPLMN网络标识信息个人信息主体帐号IP地址网络类型个人数字证书 提升用户体验
保障帐号安全性
优化产品页面展示 网页及App使用 取得个人的同意履行合同
履行法定职责或法定义务
连接和使用信息
解决交易纠纷 联系小蜜蜂客服 取得个人的同意 设备信息和标识符
包括设备名称唯一设备识别码如IMEI/Android
ID/IDFA/OPENUDID/GUIDSIM卡IMSI信息等在内的描述个人常用设备基本情况的信息设备型号设备MAC地址操作系统类型设备设置硬件序列号应用程序版本语言设置分辨率服务提供商网络IDPLMN网络标识信息个人信息主体帐号IP地址网络类型个人数字证书
提升用户体验 保障帐号安全性 优化产品页面展示 网页及App使用
取得个人的同意履行合同 履行法定职责或法定义务 连接和使用信息
包括网页浏览记录域名软件使用记录点击记录浏览活动滚动和按键活动已查看的广告收藏添加至购物车交易售后关注分享信息发布信息搜索关键词你查看的内容和持续时间服务质量及你与内容的交互行为日志以及其他类似信息
如前述事件发生时你处于脱机状态相关信息将被记录并在你下次连接至网络时传输给我们 提升用户体验
保障帐号安全性
提供多业务和多设备的无缝体验
  网页及App使用 取得个人的同意
软件安装列表
包括已经安装包名列表或收集运行服务列表信息 提升用户体验
推送最新消息
避免重复下载 使用App 取得个人的同意
位置信息
如前述事件发生时你处于脱机状态相关信息将被记录并在你下次连接至网络时传输给我们
提升用户体验 保障帐号安全性 提供多业务和多设备的无缝体验   网页及App使用
取得个人的同意 软件安装列表 包括已经安装包名列表或收集运行服务列表信息
提升用户体验 推送最新消息 避免重复下载 使用App 取得个人的同意 位置信息
包括与你的IP地址关联的或通过Wi-Fi三角测量定位得到的城市省和邮政编码
在通过你移动设备上基于GPS的功能使用你的精确位置之前我们将请求你的授权 保障帐号安全性
完成店铺定位 登录\注册
店铺定位 取得个人的同意
 
我们从第三方收集的信息
1.消费者角色
我们收集的个人信息 使用目的 信息来源 法律依据
第三方帐号信息
包括微信头像昵称地区性别快手头像昵称AppleStoreAppleID邮箱 提供第三方帐号登录 第三方合作方
  履行合同
取得个人的同意
从公开和商业渠道获得的信息
包括第三方提供的消费数据 为第三方营销和宣传 你授权的个人信息处理者的主体 履行合同
取得个人的同意
社交媒体
包括你通过社交媒体服务或者登录你使用的社交媒体帐号与我们互动我们会从该社交媒体平台获取你的信息头像昵称手机号地区 为第三方营销和宣传 社会媒体网络
社会媒体网络的合作伙伴 依法处理在合理范围内处理个人自行公开或其他已经公开的个人信息
2.商家角色
我们收集的个人信息 使用目的 信息来源 法律依据
第三方帐号信息
包括微信头像昵称地区性别快手头像昵称AppleStoreAppleID邮箱 提供第三方帐号登录 第三方合作方
  履行合同
取得个人的同意
在通过你移动设备上基于GPS的功能使用你的精确位置之前我们将请求你的授权
保障帐号安全性 完成店铺定位 登录\注册 店铺定位 取得个人的同意  
我们从第三方收集的信息 1.消费者角色 我们收集的个人信息 使用目的
信息来源 法律依据 第三方帐号信息
包括微信头像昵称地区性别快手头像昵称AppleStoreAppleID邮箱
提供第三方帐号登录 第三方合作方   履行合同 取得个人的同意
从公开和商业渠道获得的信息 包括第三方提供的消费数据 为第三方营销和宣传
你授权的个人信息处理者的主体 履行合同 取得个人的同意 社交媒体
包括你通过社交媒体服务或者登录你使用的社交媒体帐号与我们互动我们会从该社交媒体平台获取你的信息头像昵称手机号地区
为第三方营销和宣传 社会媒体网络 社会媒体网络的合作伙伴
依法处理在合理范围内处理个人自行公开或其他已经公开的个人信息 2.商家角色
我们收集的个人信息 使用目的 信息来源 法律依据 第三方帐号信息
包括微信头像昵称地区性别快手头像昵称AppleStoreAppleID邮箱
提供第三方帐号登录 第三方合作方   履行合同 取得个人的同意
从公开和商业渠道获得的信息
包括第三方渠道公开信息业务分析报告关于你购买倾向的推断信息 与你取得联系
建立业务合作管理 营销人员
广告供应商
合作伙伴
关联公司 履行合同
取得个人的同意
社交媒体
包括你通过社交媒体服务或者登录你使用的社交媒体帐号与我们互动我们会从该社交媒体平台获取你的信息头像昵称手机号地区 为第三方营销和宣传 社会媒体网络
社会媒体网络的合作伙伴 取得个人的同意
包括第三方渠道公开信息业务分析报告关于你购买倾向的推断信息
与你取得联系 建立业务合作管理 营销人员 广告供应商 合作伙伴 关联公司
履行合同 取得个人的同意 社交媒体
包括你通过社交媒体服务或者登录你使用的社交媒体帐号与我们互动我们会从该社交媒体平台获取你的信息头像昵称手机号地区
为第三方营销和宣传 社会媒体网络 社会媒体网络的合作伙伴 取得个人的同意
依法处理在合理范围内处理个人自行公开或其他已经公开的个人信息
你可以选择授权提供个人信息的场景
为向你提供更优质的服务我们为你提供移动应用程序你可以选择使用我们提供的拓展功能为确保相关业务功能的正常实现我们需要根据具体的使用场景调用对应的必要权限并在调用前向你弹窗询问具体的权限调用说明请查看对应产品隐私声明中所说明的权限使用列表
征得同意的例外
@ -191,8 +138,7 @@
8. 用于维护所提供的产品与/或服务的安全稳定运行所必需的例如发现处置产品与/或服务的故障
9. 为合法的新闻报道所必需的
10. 学术研究机构基于公共利益开展统计或学术研究所必要且对外提供学术研究或描述的结果时对结果中所包含的个人信息进行去标识化处理的
11. 法律法规规定的其他情形
个人信息使用规则
11. 法律法规规定的其他情形 个人信息使用规则
1.我们会根据本隐私声明的约定为实现我们的产品与/或服务功能而对所收集的个人信息进行使用
2.我们会基于商家的授权通过短信服务商为商家发送营销短信给你如你想退订某一商家的短信可以根据短信内容所提示的退订方式退订
3.在收集你的个人信息后我们将通过技术手段对信息进行去标识化处理去标识化处理的信息将无法识别主体请你了解并同意在此情况下我们有权使用已经去标识化的信息并在不透露你个人信息的前提下我们有权对用户数据库进行分析并予以商业化的利用
@ -200,23 +146,29 @@
5.我们会将业务中收集的个人信息用于技术改造网络维护故障排除内部政策与流程制定生成内部报告将已经去标识化无法识别你身份且不能复原的信息用于建立数据库并进行商业化利用但这些统计信息不包含你的任何身份识别信息
6.当我们展示你的个人信息时我们会采用包括内容替换泛化处理方式对你的信息进行脱敏以保护你的信息安全
7.当我们要将你的个人信息用于本隐私声明未载明的其它用途时或基于特定目的收集而来的个人信息用于其他目的时会事先征求你的明示同意请你理解我们向你提供的产品与/或服务将不断更新变化如果你选择使用本隐私声明中尚未列明的其他产品与/或服务时我们会在收集你的个人信息前通过协议页面提示等方式向你详细说明信息收集的目的方式范围并征求你的同意若你不同意提供前述信息你将无法使用该项产品与/或服务但不影响你使用现有产品与/或服务
 </p>
<h4>
我们如何使用Cookies和同类技术</h4>
 
</p>
<h4>我们如何使用Cookies和同类技术</h4>
<p>
对于小蜜蜂提供的服务我们与广告合作伙伴和供应商一起使用各种技术来了解人们如何使用相关服务
Cookies的使用
为确保网站正常高效运转使你获得更轻松的访问体验我们会在你的设备终端/系统上存储名为 Cookies的小数据文件包括HTTP Cookiesflash CookiesHTML5和Flash本地存储网络信标/GIF嵌入式脚本电子标签/缓存浏览器和软件开发工具包SDK指定给你的Cookiess 是唯一的它只能被将Cookiess发布给你的域中的Web服务器读取Cookies会帮助你在后续访问我们网站时调用你的信息简化你重复登录或重新填写信息的步骤为你提供安全购物的设置帮助你优化对广告的选择与互动保护你的数据安全等
我们不会将 Cookies用于本隐私政策所述目的之外的任何用途你可根据自己的管理或删除 Cookies你可以清除计算机或移动设备上保存的所有 Cookies你有权接受或拒绝Cookies
为确保网站正常高效运转使你获得更轻松的访问体验我们会在你的设备终端/系统上存储名为
Cookies的小数据文件包括HTTP Cookiesflash
CookiesHTML5和Flash本地存储网络信标/GIF嵌入式脚本电子标签/缓存浏览器和软件开发工具包SDK指定给你的Cookiess
是唯一的它只能被将Cookiess发布给你的域中的Web服务器读取Cookies会帮助你在后续访问我们网站时调用你的信息简化你重复登录或重新填写信息的步骤为你提供安全购物的设置帮助你优化对广告的选择与互动保护你的数据安全等
我们不会将
Cookies用于本隐私政策所述目的之外的任何用途你可根据自己的管理或删除
Cookies你可以清除计算机或移动设备上保存的所有
Cookies你有权接受或拒绝Cookies
大多数浏览器会自动接受Cookies但你通常可根据自己的需要来修改浏览器的设置以拒绝Cookies另外你也可以清除软件内保存的所有Cookies但你将因此无法完全体验我们某些便捷性和安全性的服务功能
网络Beacon和同类技术的使用
除Cookies外我们网页上常会包含一些电子图象(称为"单像素"GIF文件或"网络Beacon")等其他同类技术它们可以帮助网站计算浏览网页的用户或访问某些Cookies我们使用网络Beacon的方式有:
1.我们通过在我们网站上使用网络Beacon计算用户访问数量并通过访问Cookies辨认注册用户
2.我们通过得到的Cookies信息可以提供更优质的服务
 </p>
<h4>
我们如何共享转让公开披露你的个人信息</h4>
<p>共享
2.我们通过得到的Cookies信息可以提供更优质的服务  
</p>
<h4>我们如何共享转让公开披露你的个人信息</h4>
<p>
共享
我们不会与小蜜蜂服务提供者以外的公司组织和个人共享你的个人信息但以下情况除外
1.在你主动选择情况下共享若你主动签署第三方商家隐私声明我们会根据你的选择将你的个人信息订单信息及交易有关的必要信息与相关商品和服务的提供者共享来实现你向其购买商品或服务的需求并促使其可以完成后续的售后服务你可以在相关商品和服务的提供者从事经营活动的主页面查询其营业执照登载的信息以辨别你的交易对象身份
2.在获取明确同意情况下共享获得你的明确同意后我们会与其他方共享你的个人信息例如如果我们委托第三方向你提供产品或服务时我们会在征得你同意后将上述信息共享给第三方如果你拒绝提供此类信息我们将无法完成相关交付服务
@ -236,8 +188,7 @@
2.根据适用的法律法规法律程序的要求强制性的行政或司法要求所必须的情况进行提供
3.符合与你签署的相关协议包括在线签署的电子协议以及相应的平台规则或其他的法律文件约定所提供
4.随着我们业务的发展我们及我们的关联方有可能进行合并收购资产转让或类似的交易如涉及个人信息的转让我们会要求受让你个人信息的公司组织继续接受本隐私声明的约束否则,我们将要求该公司组织重新征求你的授权同意
公开披露
我们仅会在以下情况下公开披露你的个人信息
公开披露 我们仅会在以下情况下公开披露你的个人信息
1.获得你明确同意或基于你的主动选择我们会公开披露你的个人信息
2.根据法律法规的要求强制性的行政执法或司法要求所必须提供你个人信息的情况下我们会依据所要求的个人信息类型和披露方式公开披露你的个人信息在符合法律法规的前提下当我们收到上述披露信息的请求时我们会要求必须出具与之相应的法律文件如传票或调查函并且我们披露的文件均是加密后提供
3.当你为商家角色时如果我们确定你出现违反法律法规或严重违反小蜜蜂相关协议规则的情况或为保护小蜜蜂及其关联公司用户或公众的人身财产安全免遭侵害我们会依据法律法规或小蜜蜂相关协议规则通过短信通知或者弹窗等方式征得你同意的情况下披露关于你的个人信息包括相关违规行为以及小蜜蜂已对你采取的措施例如若你销售假货而严重违反小蜜蜂规则我们将会公开披露你的店铺主体信息与处罚情况
@ -246,14 +197,13 @@
1.与我们履行法律法规规定的义务相关的
2.根据法律法规的规定或行政司法机构国家部门等有权机关的要求依法提供的
3.出于维护你或其他个人的生命财产等重大合法权益但又很难得到本人同意的
4.你自行向社会公众公开的个人信息
5.与国家安全国防安全直接相关的
4.你自行向社会公众公开的个人信息 5.与国家安全国防安全直接相关的
6.从合法公开披露的信息中收集个人信息的如合法的新闻报道政府信息公开等渠道
根据法律规定共享转让经去标识化处理的个人信息且确保数据接收方无法复原
并重新识别个人信息主体的不属于个人信息的对外共享转让及公开披露行为对此类数据的保存及处理将无需另行向你通知并征得你的同意
 </p>
<h4>
我们如何保护和保存你的个人信息</h4>
 
</p>
<h4>我们如何保护和保存你的个人信息</h4>
<p>
我们保护你个人信息的技术与措施
我们非常重视个人信息安全并采取一切合理可行的措施保护小蜜蜂消费者商家及商家消费者的个人信息
@ -275,8 +225,7 @@
1.存储地点你的个人信息将存储于中华人民共和国境内
2.存储期限我们只会在达成本声明所述目的所需的期限内保留你的个人信息除非法律有强制的存留要求例如中华人民共和国电子商务法要求商品和服务信息交易信息保存时间自交易完成之日起不少于三年而我们判断前述期限的标准包括
1完成与你相关的交易目的维护相应交易及业务记录应对你可能的查询或投诉
2保证我们为你提供服务的安全和质量
3你是否同意更长的留存期间
2保证我们为你提供服务的安全和质量 3你是否同意更长的留存期间
4是否存在保留期限的其他特别约定
在你的个人信息超出保留期间后我们会根据适用法律的要求删除你的个人信息或使其匿名化处理
请你注意当你成功注销小蜜蜂帐号后我们将对你的个人信息进行删除或匿名化处理
@ -284,21 +233,20 @@
若你为商家角色我们将根据与你另行签订的合同处理
因为适用的法律和安全技术限制我们无法立即从备份系统中删除相应的信息我们将安全地存储你的个人信息并限制对其的任何进一步的处理直到备份可以删除或实现匿名化
如果我们终止服务或运营我们会至少提前三十日向你通知并在终止服务或运营后对你的个人信息进行删除或匿名化处理
 </p>
<h4>
你如何管理个人信息</h4>
 
</p>
<h4>你如何管理个人信息</h4>
<p>
查询更正和补充你的个人信息
你有权查询或补充你的信息你可以通过以下方式自行进行
1.用户角色
你有权查询或补充你的信息你可以通过以下方式自行进行 1.用户角色
1进入商家店铺选择我的-个人信息后对个人资料个人帐号相关信息进行查询更正或补充
2进入小蜜蜂小程序或App选择我的-头像-个人信息后进行查询更正或补充
2.商家角色
1登录小蜜蜂官网进入首页选择个人帐号进行查询更正或补充
2根据使用的App选择进入我的-个人信息进行查询更正或补充
其他你无法查看或更正的信息请电话联系小蜜蜂客服0571-8685 7988或向线上客服寻求帮助协助你查询更正或补充你的信息
删除你的个人信息
在以下情形中你可以向我们提出删除个人信息的请求
其他你无法查看或更正的信息请电话联系小蜜蜂客服0571-8685
7988或向线上客服寻求帮助协助你查询更正或补充你的信息
删除你的个人信息 在以下情形中你可以向我们提出删除个人信息的请求
1.如果我们处理个人信息的行为违反法律法规
2.如果我们收集使用你的个人信息却未征得你的明确同意
3.如果我们处理个人信息的行为严重违反了与你的约定
@ -309,8 +257,7 @@
改变你授权同意的范围或撤回你的授权
每个业务功能需要一些基本的个人信息才能得以完成见本隐私权声明第一部分除此之外你可以在个人信息页面中设置或与客服联系等方式给予或收回你的授权同意
请你理解每个业务功能需要一些基本的个人信息才能得以完成当你撤回同意或授权后我们无法继续为你提供撤回同意或授权所对应的服务也不再处理你相应的个人信息但你撤回同意或授权的决定不会影响此前基于你的授权而开展的个人信息处理
注销帐号
你可以在发送邮件至邮箱kaidail@sohu.com直接申请注销帐号
注销帐号 你可以在发送邮件至邮箱kaidail@sohu.com直接申请注销帐号
你注销帐号后我们将停止为你提供产品与/或服务并依据你的要求除法律法规另有规定外我们将删除你的个人信息
拒绝自动化决策
在某些业务功能中我们会依据信息系统算法等在内的非人工自动决策机制做出决定如果这些决定显著影响你的合法权益你有权要求我们做出解释我们也将在不侵害小蜜蜂商业秘密或其他用户权益社会公共利益的前提下提供申诉方法
@ -324,21 +271,20 @@
客服邮箱kaidail@sohu.com
对于你合理的请求我们原则上不收取费用但对多次重复超出合理限度的请求我们将酌情收取一定费用对于与你的身份不直接关联的信息无端重复信息或者需要过多技术手段例如需要开发新系统或从根本上改变现行惯例给他人合法权益带来风险或者不切实际的请求我们可能会予以拒绝
在以下情形中按照法律法规要求我们将无法响应你的请求
1.与我们履行法律法规规定的义务相关的
2.与国家安全国防安全有关的
1.与我们履行法律法规规定的义务相关的 2.与国家安全国防安全有关的
3.与公共安全公共卫生重大公共利益有关的
4.与犯罪侦查起诉审判和执行判决等有关的
5.有充分证据表明个人信息主体存在主观恶意或滥用权利的
6.响应你的请求将导致你或其他个人组织的合法权益受到严重损害的
7.涉及商业秘密的</p>
<h4>
未成年人的个人信息保护</h4>
7.涉及商业秘密的
</p>
<h4>未成年人的个人信息保护</h4>
<p>
本声明所指的儿童是指不满14周岁的个人如果没有父母或监护人的同意儿童不得创建自己的用户帐号如你为未成年人的建议你请你的父母或监护人仔细阅读本隐私声明与儿童个人信息保护规则及监护人须知并在征得你的父母或监护人同意的前提下使用我们的服务或向我们提供信息
对于经父母或监护人同意使用我们的产品或服务而收集未成年人个人信息的情况我们只会在法律法规允许父母或监护人明确同意或者保护未成年人所必要的情况下使用共享转让或披露此信息如果我们发现自己在未事先获得可证实的父母同意的情况下收集了儿童的个人信息则会设法尽快删除相关数据
 </p>
<h4>
通知和修订</h4>
 
</p>
<h4>通知和修订</h4>
<p>
我们的隐私权声明可能变更
未经你明确同意我们不会限制你按照本隐私权声明所应享有的权利我们会在小蜜蜂规则中心专门页面上发布对隐私权声明所做的任何变更
@ -350,24 +296,21 @@
3.个人信息共享转让或公开披露的主要对象发生变化
4.你参与个人信息处理方面的权利及其行使方式发生重大变化
5.我们负责处理个人信息安全的责任部门联络方式及投诉渠道发生变化
6.个人信息安全影响评估报告表明存在高风险
 </p>
6.个人信息安全影响评估报告表明存在高风险  
</p>
<h4>
如何联系我们</h4>
<h4>如何联系我们</h4>
<p>
我们设立了个人信息保护部门如对本声明内容有任何疑问意见或建议或发现你的个人信息可能被泄露或你觉得需要撤回更正删除你的个人信息授权你可以发邮件到kaidail@sohu.com与我们联系我们将在15天内回复你的请求你也可以向我们邮寄你的投诉或举报材料我们的邮寄地址是深圳市龙岗区横岗街道沙荷路40-11法务收
如果你对我们的回复不满意特别是你认为我们的个人信息处理行为损害了你的合法权益你还可以通过被告住所地有管辖权的法院提起诉讼来寻求解决方案
</p>
</div>
</template>
<script>
export default {
name: 'admin'
}
name: "admin",
};
</script>
<style lang="less">

Binary file not shown.
Loading…
Cancel
Save