@@ -399,4 +435,15 @@ async function handleClosed() {
.font-medium {
font-weight: 500;
}
+/* 使用 :deep() 穿透 scoped 样式,影响子组件 */
+:deep(.ant-input[disabled]),
+:deep(.ant-input-number-disabled .ant-input-number-input),
+:deep(.ant-select-disabled .ant-select-selection-item),
+:deep(.ant-picker-disabled .ant-picker-input > input) {
+ /* 设置一个更深的颜色 */
+ color: rgb(0 0 0 / 65%) !important;
+
+ /* 有些浏览器需要这个来覆盖默认颜色 */
+ -webkit-text-fill-color: rgb(0 0 0 / 65%) !important;
+}
diff --git a/apps/web-antd/src/views/property/clean/cleanOrders/data.ts b/apps/web-antd/src/views/property/clean/cleanOrders/data.ts
index 05e00daa..bf9e993e 100644
--- a/apps/web-antd/src/views/property/clean/cleanOrders/data.ts
+++ b/apps/web-antd/src/views/property/clean/cleanOrders/data.ts
@@ -12,6 +12,13 @@ export const querySchema: FormSchemaGetter = () => [
fieldName: 'location',
label: '服务地址',
},
+ // {
+ // label: '服务地址(房间号)',
+ // component: 'TreeSelect',
+ // defaultValue: undefined,
+ // fieldName: 'location',
+ // rules: 'required',
+ // },
// {
// label: '服务地址(房间号)',
// fieldName: 'location',
@@ -161,14 +168,9 @@ export const modalSchema: FormSchemaGetter = () => [
},
{
label: '服务地址(房间号)',
+ component: 'Input',
+ defaultValue: undefined,
fieldName: 'location',
- componentProps: {
- placeholder: '请选择房间',
- },
- slots: {
- default: 'location',
- },
- formItemClass: 'col-span-2',
rules: 'required',
},
// {
diff --git a/apps/web-antd/src/views/property/clean/cleanSettings/data.ts b/apps/web-antd/src/views/property/clean/cleanSettings/data.ts
index 110c5ba6..8c95647a 100644
--- a/apps/web-antd/src/views/property/clean/cleanSettings/data.ts
+++ b/apps/web-antd/src/views/property/clean/cleanSettings/data.ts
@@ -95,7 +95,6 @@ export const columns: VxeGridProps['columns'] = [
fixed: 'right',
slots: { default: 'action' },
title: '操作',
- width: 'auto',
},
];
diff --git a/apps/web-antd/src/views/property/greenPlantRentalManagement/leasePogramManagement/data.ts b/apps/web-antd/src/views/property/greenPlantRentalManagement/leasePogramManagement/data.ts
index 59275f1d..9453c88a 100644
--- a/apps/web-antd/src/views/property/greenPlantRentalManagement/leasePogramManagement/data.ts
+++ b/apps/web-antd/src/views/property/greenPlantRentalManagement/leasePogramManagement/data.ts
@@ -9,11 +9,13 @@ export const querySchema: FormSchemaGetter = () => [
component: 'Input',
fieldName: 'planName',
label: '方案名称',
+ labelWidth: 120
},
{
component: 'Select',
fieldName: 'rentalPeriod',
label: '租赁周期',
+ labelWidth: 120,
componentProps: {
options:[
{ label: '月', value: 0 },
@@ -121,7 +123,7 @@ export const modalSchema: FormSchemaGetter = () => [
{
label: '基础服务项',
fieldName: 'price',
- component: 'Select',
+ component: 'Input',
},
{
label: '优惠活动',
diff --git a/apps/web-antd/src/views/property/greenPlantRentalManagement/leasePogramManagement/rentalPlan-detial-modal.vue b/apps/web-antd/src/views/property/greenPlantRentalManagement/leasePogramManagement/rentalPlan-detial-modal.vue
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/web-antd/src/views/property/greenPlantRentalManagement/leasePogramManagement/rentalPlan-modal.vue b/apps/web-antd/src/views/property/greenPlantRentalManagement/leasePogramManagement/rentalPlan-modal.vue
index 18c8f072..756a1ab2 100644
--- a/apps/web-antd/src/views/property/greenPlantRentalManagement/leasePogramManagement/rentalPlan-modal.vue
+++ b/apps/web-antd/src/views/property/greenPlantRentalManagement/leasePogramManagement/rentalPlan-modal.vue
@@ -21,9 +21,9 @@ const title = computed(() => {
const [BasicForm, formApi] = useVbenForm({
commonConfig: {
// 默认占满两列
- formItemClass: 'col-span-2',
+ formItemClass: 'col-span-1',
// 默认label宽度 px
- labelWidth: 80,
+ labelWidth: 120,
// 通用配置项 会影响到所有表单项
componentProps: {
class: 'w-full',
@@ -43,7 +43,7 @@ const { onBeforeClose, markInitialized, resetInitialized } = useBeforeCloseDiff(
const [BasicModal, modalApi] = useVbenModal({
// 在这里更改宽度
- class: 'w-[550px]',
+ class: 'w-[70%]',
fullscreenButton: false,
onBeforeClose,
onClosed: handleClosed,
@@ -91,11 +91,67 @@ async function handleClosed() {
await formApi.resetForm();
resetInitialized();
}
+const detailColumns = [
+ { title: '序号', key: 'index' },
+ { title: '产品编号', dataIndex: 'plantCode', key: 'plantCode' },
+ { title: '产品名称', dataIndex: 'plantName', key: 'plantName' },
+ { title: '产品分类', dataIndex: 'plantType', key: 'plantType' },
+ {
+ title: '图片',
+ dataIndex: 'imgPath',
+ key: 'imgPath',
+ },
+ {
+ title: '规格',
+ dataIndex: 'specification',
+ key: 'specification',
+ },
+ { title: '租金', dataIndex: 'rent', key: 'rent' },
+ { title: '备注', dataIndex: 'remark', key: 'remark' },
+ {
+ title: '状态',
+ dataIndex: 'state',
+ key: 'state',
+ customRender: ({ value }: { value: number }) =>
+ value === 1 ? '上架' : '下架',
+ },
+ {
+ title: '操作',
+ key: 'action',
+ fixed: 'right' as const,
+ },
+];
+
+
+
+
添加保洁订单详情
+
+ {{ $t('pages.common.add') }}
+
+
+
+
+
+ {{ index + 1 }}
+
+
+
+
+
+
+
费用合计:{{ totalSumPeices }}元
+
diff --git a/apps/web-antd/src/views/property/greenPlantRentalManagement/orderManagement/data.ts b/apps/web-antd/src/views/property/greenPlantRentalManagement/orderManagement/data.ts
index da4b1c13..7f6e4517 100644
--- a/apps/web-antd/src/views/property/greenPlantRentalManagement/orderManagement/data.ts
+++ b/apps/web-antd/src/views/property/greenPlantRentalManagement/orderManagement/data.ts
@@ -7,7 +7,7 @@ export const querySchema: FormSchemaGetter = () => [
{
component: 'Input',
fieldName: 'orderNo',
- label: '订单编号',
+ label: '订单号',
},
{
component: 'Input',
@@ -17,6 +17,7 @@ export const querySchema: FormSchemaGetter = () => [
{
component: 'Select',
componentProps: {
+ options:getDictOptions('wy_khlx')
},
fieldName: 'customerType',
label: '客户类型',
@@ -42,76 +43,84 @@ export const querySchema: FormSchemaGetter = () => [
export const columns: VxeGridProps['columns'] = [
{ type: 'checkbox', width: 60 },
- {
- title: '订单号',
- field: 'id',
- },
{
title: '订单号',
field: 'orderNo',
+ width:100
},
{
title: '客户名称',
field: 'customerName',
+ width:100
},
{
title: '客户类型',
field: 'customerType',
+ slots: {default: 'customerType'},
+ width:100
},
{
title: '租赁周期',
field: 'rentalPeriod',
+ slots: {default: 'rentalPeriod'},
+ width:100
},
{
title: '租赁开始时间',
field: 'startTime',
+ width:120
},
{
title: '租赁结束时间',
field: 'endTime',
+ width:120
},
{
title: '应付总额',
field: 'totalAmount',
+ width:100
},
{
title: '租赁方式',
field: 'rentalType',
+ slots: {default: 'rentalType'},
+ width:100
},
{
- title: '租赁方案id',
+ title: '租赁商品',
field: 'planId',
- },
- {
- title: '绿植产品id',
- field: 'productId',
- },
- {
- title: '租赁产品数量',
- field: 'productNum',
+ slots: {default: 'planId'},
+ width:100
},
{
title: '支付状态',
field: 'paymentStatus',
+ slots: {default: 'paymentStatus'},
+ width:100
},
{
title: '是否续租',
field: 'isRelet',
+ slots: {default: 'isRelet'},
+ width:100
},
{
title: '合同状态',
field: 'contractStatus',
+ slots: {default: 'contractStatus'},
+ width:100
},
{
title: '签署时间',
field: 'signTime',
+ width:100
},
{
field: 'action',
fixed: 'right',
slots: { default: 'action' },
title: '操作',
- width: 180,
+ minWidth: 180,
},
];
@@ -142,6 +151,7 @@ export const modalSchema: FormSchemaGetter = () => [
fieldName: 'customerType',
component: 'Select',
componentProps: {
+ options:getDictOptions('wy_khlx')
},
rules: 'selectRequired',
},
@@ -150,30 +160,20 @@ export const modalSchema: FormSchemaGetter = () => [
fieldName: 'rentalPeriod',
component: 'Select',
componentProps: {
+ options:getDictOptions('wy_time_unit')
},
rules: 'selectRequired',
},
{
- label: '租赁开始时间',
- fieldName: 'startTime',
- component: 'DatePicker',
+ label: '租赁时间',
+ fieldName: 'rentalTime',
+ component: 'RangePicker',
componentProps: {
showTime: true,
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
},
- rules: 'required',
- },
- {
- label: '租赁结束时间',
- fieldName: 'endTime',
- component: 'DatePicker',
- componentProps: {
- showTime: true,
- format: 'YYYY-MM-DD HH:mm:ss',
- valueFormat: 'YYYY-MM-DD HH:mm:ss',
- },
- rules: 'required',
+ rules: 'selectRequired',
},
{
label: '应付总额',
@@ -186,6 +186,7 @@ export const modalSchema: FormSchemaGetter = () => [
fieldName: 'rentalType',
component: 'Select',
componentProps: {
+ options:getDictOptions('wy_sf')
},
rules: 'selectRequired',
},
@@ -193,16 +194,34 @@ export const modalSchema: FormSchemaGetter = () => [
label: '租赁方案id',
fieldName: 'planId',
component: 'Input',
+ dependencies: {
+ // 仅当 租赁方式 为 2(套餐) 时显示
+ show: (formValues) => formValues.rentalType === '2',
+ triggerFields: ['rentalType'],
+ },
+ rules: 'required',
},
{
label: '绿植产品id',
fieldName: 'productId',
component: 'Input',
+ dependencies: {
+ // 仅当 租赁方式 为 1(单点) 时显示
+ show: (formValues) => formValues.rentalType === '1',
+ triggerFields: ['rentalType'],
+ },
+ rules: 'required',
},
{
label: '租赁产品数量',
fieldName: 'productNum',
component: 'Input',
+ dependencies: {
+ // 仅当 租赁方式 为 1(单点) 时显示
+ show: (formValues) => formValues.rentalType === '1',
+ triggerFields: ['rentalType'],
+ },
+ rules: 'required',
},
{
label: '支付状态',
@@ -219,6 +238,7 @@ export const modalSchema: FormSchemaGetter = () => [
componentProps: {
buttonStyle: 'solid',
optionType: 'button',
+ options: getDictOptions('wy_sf'),
},
},
{
diff --git a/apps/web-antd/src/views/property/greenPlantRentalManagement/orderManagement/index.vue b/apps/web-antd/src/views/property/greenPlantRentalManagement/orderManagement/index.vue
index bf9bf429..b895b77f 100644
--- a/apps/web-antd/src/views/property/greenPlantRentalManagement/orderManagement/index.vue
+++ b/apps/web-antd/src/views/property/greenPlantRentalManagement/orderManagement/index.vue
@@ -122,7 +122,7 @@ function handleDownloadExcel() {
-
+
{
const [BasicForm, formApi] = useVbenForm({
commonConfig: {
// 默认占满两列
- formItemClass: 'col-span-2',
+ formItemClass: 'col-span-1',
// 默认label宽度 px
labelWidth: 80,
// 通用配置项 会影响到所有表单项
@@ -43,7 +43,7 @@ const { onBeforeClose, markInitialized, resetInitialized } = useBeforeCloseDiff(
const [BasicModal, modalApi] = useVbenModal({
// 在这里更改宽度
- class: 'w-[550px]',
+ class: 'w-[70%]',
fullscreenButton: false,
onBeforeClose,
onClosed: handleClosed,
diff --git a/apps/web-antd/src/views/property/greenPlantRentalManagement/reportStatistics/index.vue b/apps/web-antd/src/views/property/greenPlantRentalManagement/reportStatistics/index.vue
index cac1c875..7e65cb3b 100644
--- a/apps/web-antd/src/views/property/greenPlantRentalManagement/reportStatistics/index.vue
+++ b/apps/web-antd/src/views/property/greenPlantRentalManagement/reportStatistics/index.vue
@@ -214,7 +214,16 @@ onMounted(() => {
-
+
{
flex: 1;
height: 100%;
padding: 10px;
- background-color: #962020;
-
.row {
display: flex;
justify-content: space-between;
+ .box{
+ width: 300px;
+ height: 120px;
+ background-color: #fff;
+ border-radius: 8px;
+ margin: 40px 0px;
+ padding: 10px;
+ .title{
+ font-size: 20px;
+ }
+ .number{
+ font-size: 25px;
+ font-weight: bold;
+ }
+ .percent{
+ font-size: 15px; }
+ }
}
.row-first {
diff --git a/apps/web-antd/src/views/property/resident/person/data.ts b/apps/web-antd/src/views/property/resident/person/data.ts
index 0fcbf63d..f41cb2a1 100644
--- a/apps/web-antd/src/views/property/resident/person/data.ts
+++ b/apps/web-antd/src/views/property/resident/person/data.ts
@@ -6,11 +6,6 @@ import {resident_unitList} from "#/api/property/resident/unit";
export const querySchema: FormSchemaGetter = () => [
- {
- component: 'Input',
- fieldName: 'unitId',
- label: '所属单位',
- },
{
component: 'ApiSelect',
fieldName: 'unitId',
@@ -24,8 +19,8 @@ export const querySchema: FormSchemaGetter = () => [
debounceTime: 500,
allowClear: true,
placeholder: '请选择所属单位',
+ filterOption:true
},
- rules: 'required',
},
{
component: 'Input',
@@ -56,23 +51,27 @@ export const columns: VxeGridProps['columns'] = [
{
title: '员工编号',
field: 'userId',
+ width: 100
},
{
title: '员工名称',
field: 'userName',
+ width: 100
},
{
title: '联系电话',
field: 'phone',
+ width: 100
},
{
title: '性别',
field: 'gender',
slots:{
default: ({row})=>{
- return renderDict(row.gender,'wy_rzryzt')
+ return renderDict(row.gender,'sys_user_sex')
}
- }
+ },
+ width: 100
},
{
field: 'img',
@@ -83,18 +82,21 @@ export const columns: VxeGridProps['columns'] = [
{
title: '所属单位',
field: 'unitName',
+ width: 100
},
- {
- title: '入驻位置',
- field: 'locathon',
- },
+ // {
+ // title: '入驻位置',
+ // field: 'locathon',
+ // },
{
title: '入驻时间',
field: 'time',
+ width: 100
},
{
title: '车牌号码',
field: 'carNumber',
+ width: 100
},
{
title: '状态',
@@ -103,18 +105,20 @@ export const columns: VxeGridProps['columns'] = [
default: ({row})=>{
return renderDict(row.state,'wy_rzryzt')
}
- }
+ },
+ width: 100
},
{
title: '备注',
field: 'remark',
+ width: 100
},
{
field: 'action',
fixed: 'right',
slots: { default: 'action' },
title: '操作',
- width: 180,
+ minWidth: 180,
},
];
@@ -168,6 +172,7 @@ export const modalSchema: FormSchemaGetter = () => [
format: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
},
+ rules:"required"
},
{
label: '车牌号码',
@@ -181,6 +186,7 @@ export const modalSchema: FormSchemaGetter = () => [
componentProps: {
options: getDictOptions('wy_rzryzt'),
},
+ rules:'selectRequired'
},
{
label: '备注',
@@ -280,8 +286,8 @@ export async function getUnitList(): Promise<{ value: number; label: string }[]>
res.rows.forEach((r: any) => {
data.push({
- value: r.name,
- label: r.id,
+ value: r.id,
+ label: r.name,
});
});
return data;
diff --git a/apps/web-antd/src/views/property/resident/person/person-detail.vue b/apps/web-antd/src/views/property/resident/person/person-detail.vue
index 19af66ee..d9ffdc81 100644
--- a/apps/web-antd/src/views/property/resident/person/person-detail.vue
+++ b/apps/web-antd/src/views/property/resident/person/person-detail.vue
@@ -49,15 +49,14 @@ async function handleOpenChange(open: boolean) {
- {{ personDetail.userName+'-'+personDetail.phone}}
-
+ {{ personDetail.userName+'-'+renderDictValue(personDetail.gender,'sys_user_sex')+'-'+personDetail.phone}}
{{personDetail.unitName+'-'+personDetail.unitId }}
-
- {{ personDetail.locathon }}
-
+
+
+
{{ personDetail.img }}
diff --git a/apps/web-antd/src/views/property/resident/person/person-modal.vue b/apps/web-antd/src/views/property/resident/person/person-modal.vue
index 4df69f83..86d75db3 100644
--- a/apps/web-antd/src/views/property/resident/person/person-modal.vue
+++ b/apps/web-antd/src/views/property/resident/person/person-modal.vue
@@ -27,7 +27,7 @@ let userInfo = reactive({
});
let unitName = ref('');
const userId = ref(0);
-const unitId = ref(0);
+const unitId = ref('');
const [BasicForm, formApi] = useVbenForm({
commonConfig: {
// 默认占满两列
@@ -70,7 +70,8 @@ const [BasicModal, modalApi] = useVbenModal({
if (isUpdate.value && id) {
const record = await personInfo(id);
userId.value = record.userId;
- unitId.value = record.unitId;
+ unitId.value = record.unitId.toString();
+ record.state=record.state?.toString()
await formApi.setValues(record);
}
await markInitialized();
diff --git a/apps/web-antd/src/views/property/resident/person/query-unit-list.vue b/apps/web-antd/src/views/property/resident/person/query-unit-list.vue
index f2eb02b6..d0f6220f 100644
--- a/apps/web-antd/src/views/property/resident/person/query-unit-list.vue
+++ b/apps/web-antd/src/views/property/resident/person/query-unit-list.vue
@@ -9,12 +9,12 @@ const props= withDefaults(defineProps<{
disabled?: boolean;
placeholder?: string;
isUpdate?:boolean;
- unitId?:number;
+ unitId?:string;
}>(), {
disabled: false,
placeholder: '可根据单位名称进行搜索...',
isUpdate:false,
- unitId:0,
+ unitId:'',
});
async function queryUnit(value: string, callback: any) {
@@ -46,7 +46,7 @@ const handleChange = (val: string) => {
emit('update:unitInfo', unitInfo);
};
-async function getUnitInfo(val:number) {
+async function getUnitInfo(val:string) {
const unit = await resident_unitInfo(val)
if (unit) {
data.value = [{
@@ -60,7 +60,7 @@ async function getUnitInfo(val:number) {
watch(() => props.unitId,
(newX) => {
- if (props.isUpdate) {
+ if (props.isUpdate&&newX) {
getUnitInfo(newX)
}
}, {immediate: true})
diff --git a/apps/web-antd/src/views/property/resident/unit/data.ts b/apps/web-antd/src/views/property/resident/unit/data.ts
index ce8c2055..dca07a0c 100644
--- a/apps/web-antd/src/views/property/resident/unit/data.ts
+++ b/apps/web-antd/src/views/property/resident/unit/data.ts
@@ -35,6 +35,7 @@ export const columns: VxeGridProps['columns'] = [
return (rowIndex + 1).toString();
},
},
+ width: 60
},
{
title: '单位编号',
@@ -42,11 +43,13 @@ export const columns: VxeGridProps['columns'] = [
slots:{
default: ({ row }) => {
return row.id;
- }}
+ }},
+ width: 100
},
{
title: '单位名称',
field: 'name',
+ width: 100
},
{
title: '单位类型',
@@ -56,46 +59,55 @@ export const columns: VxeGridProps['columns'] = [
return renderDict(row.type, 'wy_qylx');
},
},
+ width: 100
},
{
title: '联系人',
field: 'contactPerson',
+ width: 100
},
{
title: '联系电话',
field: 'phone',
+ width: 100
},
{
title: '入驻位置',
field: 'location',
+ width: 100,
},
{
title: '入驻时间',
field: 'time',
+ width: 100,
},
{
title: '状态',
field: 'state',
- slots: {default: 'state'}
+ slots: {default: 'state'},
+ width: 100,
},
{
title: '员工数量',
field: 'number',
+ width: 100,
},
{
title: '备注',
field: 'remark',
+ width: 100,
},
{
title: '创建时间',
field: 'createTime',
+ width: 100,
},
{
field: 'action',
fixed: 'right',
slots: {default: 'action'},
title: '操作',
- width: 180,
+ minWidth: 180,
},
];
@@ -137,15 +149,11 @@ export const modalSchema: FormSchemaGetter = () => [
component: 'Input',
rules: z.string().regex(/^1[3-9]\d{9}$/, { message: '格式错误' }),
},
-
{
label: '入驻位置',
fieldName: 'location',
- component: 'Select',
- slots:{
- default:'location'
- },
- rules: 'required',
+ component: 'TreeSelect',
+ rules: 'selectRequired',
formItemClass: 'col-span-2'
},
{
diff --git a/apps/web-antd/src/views/property/resident/unit/unit-modal.vue b/apps/web-antd/src/views/property/resident/unit/unit-modal.vue
index d06ccf1e..ad8b4401 100644
--- a/apps/web-antd/src/views/property/resident/unit/unit-modal.vue
+++ b/apps/web-antd/src/views/property/resident/unit/unit-modal.vue
@@ -3,7 +3,7 @@ import { computed, ref } from 'vue';
import { useVbenModal } from '@vben/common-ui';
import { $t } from '@vben/locales';
-import { cloneDeep } from '@vben/utils';
+import {cloneDeep, getPopupContainer, handleNode} from '@vben/utils';
import { useVbenForm } from '#/adapter/form';
import { resident_unitAdd, resident_unitInfo, resident_unitUpdate } from '#/api/property/resident/unit';
@@ -11,6 +11,7 @@ import { defaultFormValueGetter, useBeforeCloseDiff } from '#/utils/popup';
import { modalSchema } from './data';
import RoomSelect from "#/views/property/room/room-select.vue";
+import {communityTree} from "#/api/property/community";
const emit = defineEmits<{ reload: [] }>();
@@ -57,7 +58,7 @@ const [BasicModal, modalApi] = useVbenModal({
const { id } = modalApi.getData() as { id?: number | string };
isUpdate.value = !!id;
-
+ initLocationOptions()
if (isUpdate.value && id) {
const record = await resident_unitInfo(id);
await formApi.setValues(record);
@@ -87,6 +88,42 @@ async function handleConfirm() {
modalApi.lock(false);
}
}
+/**
+ * 入驻位置数据
+ */
+async function initLocationOptions() {
+ const locationList = await communityTree(5);
+ const splitStr = '/';
+ handleNode(locationList, 'label', splitStr, function (node: any) {
+ if (node.level != 5) {
+ node.disabled = true;
+ }
+ });
+ formApi.updateSchema([
+ {
+ componentProps: () => ({
+ class: 'w-full',
+ fieldNames: {
+ key: 'id',
+ label: 'label',
+ value: 'code',
+ children: 'children',
+ },
+ getPopupContainer,
+ placeholder: '请选择入驻位置',
+ showSearch: true,
+ treeData: locationList,
+ treeDefaultExpandAll: true,
+ treeLine: { showLeafIcon: false },
+ // 筛选的字段
+ treeNodeFilterProp: 'label',
+ // 选中后显示在输入框的值
+ treeNodeLabelProp: 'fullName',
+ }),
+ fieldName: 'location',
+ },
+ ]);
+}
async function handleClosed() {
await formApi.resetForm();
@@ -97,9 +134,9 @@ async function handleClosed() {
-
-
-
+
+
+