This commit is contained in:
@@ -10,6 +10,7 @@ export interface FeedbacksVO {
|
||||
* 反馈类型(0保修1保洁2会议)
|
||||
*/
|
||||
feedbackType: string;
|
||||
feedbackTypeName: string;
|
||||
|
||||
/**
|
||||
* 反馈人
|
||||
@@ -21,6 +22,11 @@ export interface FeedbacksVO {
|
||||
*/
|
||||
feedbackPersionPhone: string;
|
||||
|
||||
/**
|
||||
* 反馈人名称
|
||||
*/
|
||||
feedbackPersionName: string;
|
||||
|
||||
/**
|
||||
* 反馈内容
|
||||
*/
|
||||
@@ -50,6 +56,10 @@ export interface FeedbacksVO {
|
||||
* 客服电话
|
||||
*/
|
||||
serviceName: string;
|
||||
/**
|
||||
* 工单id
|
||||
*/
|
||||
orderId: string;
|
||||
|
||||
}
|
||||
|
||||
|
@@ -61,5 +61,5 @@ export function meetRemove(id: ID | IDS) {
|
||||
}
|
||||
|
||||
export function notlist(params?: MeetBo) {
|
||||
return requestClient.get<PageResult<MeetVO>>('/property/meet/notlist', { params });
|
||||
return requestClient.get<MeetVO[]>('/property/meet/notlist', { params });
|
||||
}
|
||||
|
@@ -67,6 +67,14 @@ export interface MeetVO {
|
||||
* 图片
|
||||
*/
|
||||
picture: string;
|
||||
/**
|
||||
* 开放时段开始时间
|
||||
*/
|
||||
openStartHours: string;
|
||||
/**
|
||||
* 开放时段结束时间
|
||||
*/
|
||||
openEndHours: string;
|
||||
}
|
||||
|
||||
export interface MeetForm extends BaseEntity {
|
||||
@@ -153,6 +161,15 @@ export interface MeetForm extends BaseEntity {
|
||||
*/
|
||||
picture: string;
|
||||
|
||||
/**
|
||||
* 开放时段开始时间
|
||||
*/
|
||||
openStartHours: string;
|
||||
/**
|
||||
* 开放时段结束时间
|
||||
*/
|
||||
openEndHours: string;
|
||||
|
||||
}
|
||||
|
||||
export interface MeetQuery extends PageQuery {
|
||||
@@ -240,7 +257,7 @@ export interface MeetQuery extends PageQuery {
|
||||
picture: string;
|
||||
}
|
||||
|
||||
export interface conferenceSettingsDetail extends BaseEntity {
|
||||
export interface ConferenceSettingsDetail{
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
@@ -329,6 +346,16 @@ export interface conferenceSettingsDetail extends BaseEntity {
|
||||
* 图片
|
||||
*/
|
||||
picture: string;
|
||||
|
||||
/**
|
||||
* 开放时段开始时间
|
||||
*/
|
||||
openStartHours: string;
|
||||
/**
|
||||
* 开放时段结束时间
|
||||
*/
|
||||
openEndHours: string;
|
||||
|
||||
}
|
||||
|
||||
export interface MeetBo{
|
||||
|
@@ -30,7 +30,7 @@ export const querySchema: FormSchemaGetter = () => [
|
||||
options: getDictOptions('pro_processing_weight'),
|
||||
},
|
||||
fieldName: 'processingWeight',
|
||||
label: '处理权重',
|
||||
label: '处理优先级',
|
||||
},
|
||||
];
|
||||
|
||||
@@ -82,7 +82,7 @@ export const columns: VxeGridProps['columns'] = [
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
title: '处理权重',
|
||||
title: '处理优先级',
|
||||
field: 'processingWeight',
|
||||
slots: {
|
||||
default: ({row}) => {
|
||||
@@ -166,7 +166,7 @@ export const modalSchema: FormSchemaGetter = () => [
|
||||
rules: 'selectRequired',
|
||||
},
|
||||
{
|
||||
label: '处理权重',
|
||||
label: '处理优先级',
|
||||
fieldName: 'processingWeight',
|
||||
component: 'Select',
|
||||
componentProps: {
|
||||
|
@@ -57,7 +57,7 @@ async function handleOpenChange(open: boolean) {
|
||||
:is="renderDict(orderDetail.reportingType,'wy_gdsblx')"
|
||||
/>
|
||||
</DescriptionsItem>
|
||||
<DescriptionsItem label="处理权重">
|
||||
<DescriptionsItem label="处理优先级">
|
||||
<component
|
||||
:is="renderDict(orderDetail.processingWeight,'pro_processing_weight')"
|
||||
/>
|
||||
|
@@ -140,7 +140,7 @@ const { hasAccessByCodes } = useAccess();
|
||||
unCheckedValue="0"
|
||||
v-model:value="row.state"
|
||||
:api="() => costItemSettingUpdate(row)"
|
||||
:disabled=" !hasAccessByCodes(['property:unit:edit'])"
|
||||
:disabled=" !hasAccessByCodes(['property:costItemSetting:edit'])"
|
||||
@reload="() => tableApi.query()"
|
||||
/>
|
||||
</template>
|
||||
|
@@ -90,7 +90,7 @@ export const modalSchema: FormSchemaGetter = () => [
|
||||
{
|
||||
label: '反馈类型',
|
||||
fieldName: 'feedbackType',
|
||||
component: 'Select',
|
||||
component: 'TreeSelect',
|
||||
rules: 'selectRequired',
|
||||
},
|
||||
{
|
||||
@@ -160,7 +160,15 @@ export const modalSchema: FormSchemaGetter = () => [
|
||||
},
|
||||
rules:'selectRequired'
|
||||
},
|
||||
|
||||
{
|
||||
label: '工单id',
|
||||
fieldName: 'orderId',
|
||||
component: 'Input',
|
||||
dependencies: {
|
||||
show: () => false,
|
||||
triggerFields: [''],
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '转至工单',//转至工单
|
||||
fieldName: 'isWorkOrder',
|
||||
@@ -170,7 +178,11 @@ export const modalSchema: FormSchemaGetter = () => [
|
||||
options: getDictOptions('wy_sf'),
|
||||
optionType: 'button',
|
||||
},
|
||||
defaultValue:'0',
|
||||
rules:'selectRequired'
|
||||
defaultValue:'1',
|
||||
rules:'selectRequired',
|
||||
dependencies: {
|
||||
show: (formValue) => !formValue.orderId,
|
||||
triggerFields: ['orderId'],
|
||||
},
|
||||
},
|
||||
];
|
||||
|
@@ -37,10 +37,12 @@ async function handleOpenChange(open: boolean) {
|
||||
<Descriptions v-if="feedbacksDetail" size="small" :column="2" bordered
|
||||
:labelStyle="{width:'120px'}">
|
||||
<DescriptionsItem label="反馈类型">
|
||||
{{ feedbacksDetail.feedbackType }}
|
||||
{{ feedbacksDetail.feedbackTypeName }}
|
||||
</DescriptionsItem>
|
||||
<DescriptionsItem label="反馈人">
|
||||
{{ feedbacksDetail.feedbackPersion+'-'+feedbacksDetail.feedbackPersionPhone }}
|
||||
<span>
|
||||
{{ feedbacksDetail.feedbackPersionName||''+'-'+feedbacksDetail.feedbackPersionPhone }}
|
||||
</span>
|
||||
</DescriptionsItem>
|
||||
<DescriptionsItem label="反馈内容" :span="2">
|
||||
{{ feedbacksDetail.feedbackContent }}
|
||||
|
@@ -15,7 +15,9 @@ import {defaultFormValueGetter, useBeforeCloseDiff} from '#/utils/popup';
|
||||
|
||||
import {modalSchema} from './data';
|
||||
import type {FeedbacksVO} from "#/api/property/customerService/feedbacks/model";
|
||||
import {workOrdersTypeList} from "#/api/property/businessManagement/workOrdersType";
|
||||
import {
|
||||
workOrdersTypeTree
|
||||
} from "#/api/property/businessManagement/workOrdersType";
|
||||
|
||||
const emit = defineEmits<{ reload: [] }>();
|
||||
|
||||
@@ -101,28 +103,38 @@ async function handleClosed() {
|
||||
}
|
||||
|
||||
async function initWorkOrderTypeOption() {
|
||||
let params = {
|
||||
pageSize: 1000,
|
||||
pageNum: 1
|
||||
}
|
||||
const res = await workOrdersTypeList(params)
|
||||
formApi.updateSchema([{
|
||||
componentProps: () => ({
|
||||
options: res.rows,
|
||||
showSearch: true,
|
||||
optionFilterProp: 'orderTypeName',
|
||||
fieldNames: {label: 'orderTypeName', value: 'id'},
|
||||
}),
|
||||
fieldName: 'feedbackType',
|
||||
}])
|
||||
const options = await workOrdersTypeTree()
|
||||
formApi.updateSchema([
|
||||
{
|
||||
componentProps: () => ({
|
||||
class: 'w-full',
|
||||
fieldNames: {
|
||||
key: 'id',
|
||||
label: 'orderTypeName',
|
||||
value: 'id',
|
||||
children: 'children',
|
||||
},
|
||||
placeholder: '请选择反馈类型',
|
||||
showSearch: true,
|
||||
treeData: options,
|
||||
treeDefaultExpandAll: true,
|
||||
treeLine: { showLeafIcon: false },
|
||||
treeNodeFilterProp: 'orderTypeName',
|
||||
treeNodeLabelProp: 'orderTypeName',
|
||||
}),
|
||||
fieldName: 'feedbackType',
|
||||
},
|
||||
]);
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<BasicModal :title="title">
|
||||
<BasicForm>
|
||||
<template #person>
|
||||
<span v-if="detail">{{ detail.feedbackPersion + '-' + detail.feedbackPersionPhone }}</span>
|
||||
<span v-if="detail">
|
||||
{{ detail.feedbackPersionName||'' + '-' + detail.feedbackPersionPhone }}</span>
|
||||
</template>
|
||||
</BasicForm>
|
||||
</BasicModal>
|
||||
|
@@ -175,7 +175,7 @@ async function handleDelete(row: Required<QuestionnaireForm>) {
|
||||
</ghost-button>
|
||||
</Popconfirm>
|
||||
<ghost-button
|
||||
v-access:code="['property:questionnaire:info']"
|
||||
v-access:code="['property:questionnaire:statistics']"
|
||||
@click.stop="handleEdit(row)"
|
||||
>
|
||||
统计分析
|
||||
|
@@ -6,7 +6,7 @@ import {attachListAll} from '#/api/property/roomBooking/conferenceAddServices';
|
||||
import {meetInfo} from '#/api/property/roomBooking/conferenceSettings';
|
||||
import {defaultFormValueGetter, useBeforeCloseDiff} from '#/utils/popup';
|
||||
import {modalSchema} from './data';
|
||||
import type {conferenceSettingsDetail} from "#/api/property/roomBooking/conferenceSettings/model";
|
||||
import type {ConferenceSettingsDetail} from "#/api/property/roomBooking/conferenceSettings/model";
|
||||
import type {AttachVO} from "#/api/property/roomBooking/conferenceAddServices/model";
|
||||
import {addServiceColumns} from "./data";
|
||||
import {Table, InputNumber, TimeRangePicker} from "ant-design-vue";
|
||||
@@ -17,7 +17,7 @@ import {reservationAdd} from "#/api/property/roomBooking/conferenceReservations"
|
||||
import {ref} from "vue";
|
||||
|
||||
const emit = defineEmits<{ reload: [] }>();
|
||||
const conferenceSettingDetail = ref<conferenceSettingsDetail>()
|
||||
const conferenceSettingDetail = ref<ConferenceSettingsDetail>()
|
||||
const addServiceList = ref<AttachVO[]>([])
|
||||
const totalAmount = ref<number>(0)
|
||||
const [BasicForm, formApi] = useVbenForm({
|
||||
@@ -188,7 +188,7 @@ async function changeProjectNum() {
|
||||
conferenceSettingDetail.expenseType == '2' ? conferenceSettingDetail.basePrice + '元' :
|
||||
renderDictValue(conferenceSettingDetail.expenseType, 'wy_fyms')
|
||||
}}</span>
|
||||
<span>开放时段:{{ conferenceSettingDetail.openHours }}</span>
|
||||
<span>开放时段:{{ conferenceSettingDetail.openStartHours+'-'+conferenceSettingDetail.openEndHours }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<BasicForm>
|
||||
|
@@ -53,7 +53,7 @@
|
||||
item.expenseType == '2' ? (item.basePrice+"元") : renderDictValue(item.expenseType, 'wy_fyms')
|
||||
}}
|
||||
</div>
|
||||
<div>开放时段: {{ item.openHours }}</div>
|
||||
<div>开放时段: {{ item.openStartHours+'-'+item.openEndHours }}</div>
|
||||
<div>配套设备: {{ item.baseService }}</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -102,14 +102,18 @@ const simpleImage = Empty.PRESENTED_IMAGE_SIMPLE;
|
||||
|
||||
const meetingList = ref<MeetVO[]>([])
|
||||
async function handleSearch() {
|
||||
let hours = '';
|
||||
let openStartHours = '';
|
||||
let openEndHours = '';
|
||||
if (formState.openHours && formState.openHours.length) {
|
||||
hours = formState.openHours[0]?.format("HH:mm") + '-' + formState.openHours[1]?.format("HH:mm");
|
||||
openStartHours=formState.openHours[0]?.format("HH:mm");
|
||||
openEndHours=formState.openHours[1]?.format("HH:mm");
|
||||
}
|
||||
const obj = {
|
||||
openHours: hours??undefined,
|
||||
personNumber: formState.personNumber,
|
||||
appointmentTime:formState.appointmentTime?formState.appointmentTime.format('YYYY-MM-DD'):undefined
|
||||
openStartHours: openStartHours??undefined,
|
||||
openEndHours:openEndHours??undefined,
|
||||
appointmentTime:formState.appointmentTime?formState.appointmentTime.format('YYYY-MM-DD'):undefined,
|
||||
meetingRoomType:formState.meetingRoomType
|
||||
}
|
||||
meetingList.value =await notlist(obj);
|
||||
}
|
||||
|
@@ -1,5 +1,7 @@
|
||||
<script setup lang="ts">
|
||||
import type {conferenceSettingsDetail} from '#/api/property/roomBooking/conferenceSettings/model';
|
||||
import type {
|
||||
ConferenceSettingsDetail,
|
||||
} from '#/api/property/roomBooking/conferenceSettings/model';
|
||||
import {shallowRef} from 'vue';
|
||||
import {useVbenModal} from '@vben/common-ui';
|
||||
import {Descriptions, DescriptionsItem} from 'ant-design-vue';
|
||||
@@ -19,7 +21,7 @@ const [BasicModal, modalApi] = useVbenModal({
|
||||
},
|
||||
});
|
||||
|
||||
const conferenceSettingsDetail = shallowRef<null | conferenceSettingsDetail>(null);
|
||||
const conferenceSettingsDetail = shallowRef<null | ConferenceSettingsDetail>(null);
|
||||
|
||||
async function handleOpenChange(open: boolean) {
|
||||
if (!open) {
|
||||
@@ -73,7 +75,7 @@ async function handleOpenChange(open: boolean) {
|
||||
/>
|
||||
</DescriptionsItem>
|
||||
<DescriptionsItem label="开放时段" :span="2">
|
||||
{{ conferenceSettingsDetail.openHours }}
|
||||
{{ conferenceSettingsDetail.openStartHours+'-'+ conferenceSettingsDetail.openEndHours}}
|
||||
</DescriptionsItem>
|
||||
<DescriptionsItem label="会议室描述" :span="2">
|
||||
{{ conferenceSettingsDetail.descs }}
|
||||
|
@@ -16,9 +16,10 @@ import { defaultFormValueGetter, useBeforeCloseDiff } from '#/utils/popup';
|
||||
import { modalSchema } from './data';
|
||||
import { TimeRangePicker } from 'ant-design-vue';
|
||||
import { renderDictValue } from '#/utils/render';
|
||||
import { personList } from '#/api/property/resident/person';
|
||||
import { communityTree } from '#/api/property/community';
|
||||
import dayjs from 'dayjs';
|
||||
import {userList} from "#/api/system/user";
|
||||
import {getDictOptions} from "#/utils/dict";
|
||||
const emit = defineEmits<{ reload: [] }>();
|
||||
|
||||
const isUpdate = ref(false);
|
||||
@@ -67,15 +68,15 @@ const [BasicModal, modalApi] = useVbenModal({
|
||||
});
|
||||
const { id } = modalApi.getData() as { id?: number | string };
|
||||
isUpdate.value = !!id;
|
||||
getDictOptions('sys_user_sex')
|
||||
await queryPerson();
|
||||
await initLocationOptions();
|
||||
if (isUpdate.value && id) {
|
||||
const record = await meetInfo(id);
|
||||
record.expenseType = record.expenseType.toString();
|
||||
record.isCheck = record.isCheck.toString();
|
||||
let hour = record.openHours.split('-');
|
||||
if (hour.length > 1) {
|
||||
record.openHours = [dayjs(hour[0], 'HH:mm'), dayjs(hour[1], 'HH:mm')];
|
||||
if (record.openStartHours&&record.openEndHours) {
|
||||
record.openHours = [dayjs(record.openStartHours, 'HH:mm'), dayjs(record.openEndHours, 'HH:mm')];
|
||||
}
|
||||
await formApi.setValues(record);
|
||||
}
|
||||
@@ -95,10 +96,8 @@ async function handleConfirm() {
|
||||
// getValues获取为一个readonly的对象 需要修改必须先深拷贝一次
|
||||
const data = cloneDeep(await formApi.getValues());
|
||||
if (data.openHours) {
|
||||
data.openHours =
|
||||
data.openHours[0]?.format('HH:mm') +
|
||||
'-' +
|
||||
data.openHours[1]?.format('HH:mm');
|
||||
data.openStartHours=data.openHours[0]?.format('HH:mm');
|
||||
data.openEndHours=data.openHours[1]?.format('HH:mm');
|
||||
}
|
||||
await (isUpdate.value ? meetUpdate(data) : meetAdd(data));
|
||||
resetInitialized();
|
||||
@@ -117,19 +116,18 @@ async function handleClosed() {
|
||||
}
|
||||
|
||||
async function queryPerson() {
|
||||
let params = {
|
||||
pageSize: 1000,
|
||||
const res = await userList({
|
||||
pageNum: 1,
|
||||
};
|
||||
const res = await personList(params);
|
||||
pageSize: 1000,
|
||||
});
|
||||
const options = res.rows.map((user) => ({
|
||||
label:
|
||||
user.userName +
|
||||
user.nickName +
|
||||
'-' +
|
||||
renderDictValue(user.gender, 'sys_user_sex') +
|
||||
renderDictValue(user.sex, 'sys_user_sex') +
|
||||
'-' +
|
||||
user.phone,
|
||||
value: user.id,
|
||||
user.phonenumber,
|
||||
value: user.userId,
|
||||
}));
|
||||
formApi.updateSchema([
|
||||
{
|
||||
@@ -143,6 +141,7 @@ async function queryPerson() {
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
const filterOption = (input: string, option: any) => {
|
||||
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0;
|
||||
};
|
||||
|
@@ -76,6 +76,11 @@ export const columns: VxeGridProps['columns'] = [
|
||||
title: '开放时段',
|
||||
field: 'openHours',
|
||||
width:100,
|
||||
slots: {
|
||||
default: ({row}) => {
|
||||
return row.openStartHours+'-'+row.openEndHours;
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '状态',
|
||||
|
Reference in New Issue
Block a user