feat:工单处理权重修改为处理优先级
Some checks failed
/ Explore-Gitea-Actions (push) Failing after 5m21s

This commit is contained in:
2025-08-21 17:11:47 +08:00
parent ee9b7017f4
commit a43cb1b390
15 changed files with 130 additions and 57 deletions

View File

@@ -10,6 +10,7 @@ export interface FeedbacksVO {
* 反馈类型(0保修1保洁2会议) * 反馈类型(0保修1保洁2会议)
*/ */
feedbackType: string; feedbackType: string;
feedbackTypeName: string;
/** /**
* 反馈人 * 反馈人
@@ -21,6 +22,11 @@ export interface FeedbacksVO {
*/ */
feedbackPersionPhone: string; feedbackPersionPhone: string;
/**
* 反馈人名称
*/
feedbackPersionName: string;
/** /**
* 反馈内容 * 反馈内容
*/ */
@@ -50,6 +56,10 @@ export interface FeedbacksVO {
* 客服电话 * 客服电话
*/ */
serviceName: string; serviceName: string;
/**
* 工单id
*/
orderId: string;
} }

View File

@@ -61,5 +61,5 @@ export function meetRemove(id: ID | IDS) {
} }
export function notlist(params?: MeetBo) { export function notlist(params?: MeetBo) {
return requestClient.get<PageResult<MeetVO>>('/property/meet/notlist', { params }); return requestClient.get<MeetVO[]>('/property/meet/notlist', { params });
} }

View File

@@ -67,6 +67,14 @@ export interface MeetVO {
* 图片 * 图片
*/ */
picture: string; picture: string;
/**
* 开放时段开始时间
*/
openStartHours: string;
/**
* 开放时段结束时间
*/
openEndHours: string;
} }
export interface MeetForm extends BaseEntity { export interface MeetForm extends BaseEntity {
@@ -153,6 +161,15 @@ export interface MeetForm extends BaseEntity {
*/ */
picture: string; picture: string;
/**
* 开放时段开始时间
*/
openStartHours: string;
/**
* 开放时段结束时间
*/
openEndHours: string;
} }
export interface MeetQuery extends PageQuery { export interface MeetQuery extends PageQuery {
@@ -240,7 +257,7 @@ export interface MeetQuery extends PageQuery {
picture: string; picture: string;
} }
export interface conferenceSettingsDetail extends BaseEntity { export interface ConferenceSettingsDetail{
/** /**
* 主键 * 主键
*/ */
@@ -329,6 +346,16 @@ export interface conferenceSettingsDetail extends BaseEntity {
* 图片 * 图片
*/ */
picture: string; picture: string;
/**
* 开放时段开始时间
*/
openStartHours: string;
/**
* 开放时段结束时间
*/
openEndHours: string;
} }
export interface MeetBo{ export interface MeetBo{

View File

@@ -30,7 +30,7 @@ export const querySchema: FormSchemaGetter = () => [
options: getDictOptions('pro_processing_weight'), options: getDictOptions('pro_processing_weight'),
}, },
fieldName: 'processingWeight', fieldName: 'processingWeight',
label: '处理权重', label: '处理优先级',
}, },
]; ];
@@ -82,7 +82,7 @@ export const columns: VxeGridProps['columns'] = [
width: 100, width: 100,
}, },
{ {
title: '处理权重', title: '处理优先级',
field: 'processingWeight', field: 'processingWeight',
slots: { slots: {
default: ({row}) => { default: ({row}) => {
@@ -166,7 +166,7 @@ export const modalSchema: FormSchemaGetter = () => [
rules: 'selectRequired', rules: 'selectRequired',
}, },
{ {
label: '处理权重', label: '处理优先级',
fieldName: 'processingWeight', fieldName: 'processingWeight',
component: 'Select', component: 'Select',
componentProps: { componentProps: {

View File

@@ -57,7 +57,7 @@ async function handleOpenChange(open: boolean) {
:is="renderDict(orderDetail.reportingType,'wy_gdsblx')" :is="renderDict(orderDetail.reportingType,'wy_gdsblx')"
/> />
</DescriptionsItem> </DescriptionsItem>
<DescriptionsItem label="处理权重"> <DescriptionsItem label="处理优先级">
<component <component
:is="renderDict(orderDetail.processingWeight,'pro_processing_weight')" :is="renderDict(orderDetail.processingWeight,'pro_processing_weight')"
/> />

View File

@@ -140,7 +140,7 @@ const { hasAccessByCodes } = useAccess();
unCheckedValue="0" unCheckedValue="0"
v-model:value="row.state" v-model:value="row.state"
:api="() => costItemSettingUpdate(row)" :api="() => costItemSettingUpdate(row)"
:disabled=" !hasAccessByCodes(['property:unit:edit'])" :disabled=" !hasAccessByCodes(['property:costItemSetting:edit'])"
@reload="() => tableApi.query()" @reload="() => tableApi.query()"
/> />
</template> </template>

View File

@@ -90,7 +90,7 @@ export const modalSchema: FormSchemaGetter = () => [
{ {
label: '反馈类型', label: '反馈类型',
fieldName: 'feedbackType', fieldName: 'feedbackType',
component: 'Select', component: 'TreeSelect',
rules: 'selectRequired', rules: 'selectRequired',
}, },
{ {
@@ -160,7 +160,15 @@ export const modalSchema: FormSchemaGetter = () => [
}, },
rules:'selectRequired' rules:'selectRequired'
}, },
{
label: '工单id',
fieldName: 'orderId',
component: 'Input',
dependencies: {
show: () => false,
triggerFields: [''],
},
},
{ {
label: '转至工单',//转至工单 label: '转至工单',//转至工单
fieldName: 'isWorkOrder', fieldName: 'isWorkOrder',
@@ -170,7 +178,11 @@ export const modalSchema: FormSchemaGetter = () => [
options: getDictOptions('wy_sf'), options: getDictOptions('wy_sf'),
optionType: 'button', optionType: 'button',
}, },
defaultValue:'0', defaultValue:'1',
rules:'selectRequired' rules:'selectRequired',
dependencies: {
show: (formValue) => !formValue.orderId,
triggerFields: ['orderId'],
},
}, },
]; ];

View File

@@ -37,10 +37,12 @@ async function handleOpenChange(open: boolean) {
<Descriptions v-if="feedbacksDetail" size="small" :column="2" bordered <Descriptions v-if="feedbacksDetail" size="small" :column="2" bordered
:labelStyle="{width:'120px'}"> :labelStyle="{width:'120px'}">
<DescriptionsItem label="反馈类型"> <DescriptionsItem label="反馈类型">
{{ feedbacksDetail.feedbackType }} {{ feedbacksDetail.feedbackTypeName }}
</DescriptionsItem> </DescriptionsItem>
<DescriptionsItem label="反馈人"> <DescriptionsItem label="反馈人">
{{ feedbacksDetail.feedbackPersion+'-'+feedbacksDetail.feedbackPersionPhone }} <span>
{{ feedbacksDetail.feedbackPersionName||''+'-'+feedbacksDetail.feedbackPersionPhone }}
</span>
</DescriptionsItem> </DescriptionsItem>
<DescriptionsItem label="反馈内容" :span="2"> <DescriptionsItem label="反馈内容" :span="2">
{{ feedbacksDetail.feedbackContent }} {{ feedbacksDetail.feedbackContent }}

View File

@@ -15,7 +15,9 @@ import {defaultFormValueGetter, useBeforeCloseDiff} from '#/utils/popup';
import {modalSchema} from './data'; import {modalSchema} from './data';
import type {FeedbacksVO} from "#/api/property/customerService/feedbacks/model"; 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: [] }>(); const emit = defineEmits<{ reload: [] }>();
@@ -101,28 +103,38 @@ async function handleClosed() {
} }
async function initWorkOrderTypeOption() { async function initWorkOrderTypeOption() {
let params = { const options = await workOrdersTypeTree()
pageSize: 1000, formApi.updateSchema([
pageNum: 1 {
} componentProps: () => ({
const res = await workOrdersTypeList(params) class: 'w-full',
formApi.updateSchema([{ fieldNames: {
componentProps: () => ({ key: 'id',
options: res.rows, label: 'orderTypeName',
showSearch: true, value: 'id',
optionFilterProp: 'orderTypeName', children: 'children',
fieldNames: {label: 'orderTypeName', value: 'id'}, },
}), placeholder: '请选择反馈类型',
fieldName: 'feedbackType', showSearch: true,
}]) treeData: options,
treeDefaultExpandAll: true,
treeLine: { showLeafIcon: false },
treeNodeFilterProp: 'orderTypeName',
treeNodeLabelProp: 'orderTypeName',
}),
fieldName: 'feedbackType',
},
]);
} }
</script> </script>
<template> <template>
<BasicModal :title="title"> <BasicModal :title="title">
<BasicForm> <BasicForm>
<template #person> <template #person>
<span v-if="detail">{{ detail.feedbackPersion + '-' + detail.feedbackPersionPhone }}</span> <span v-if="detail">
{{ detail.feedbackPersionName||'' + '-' + detail.feedbackPersionPhone }}</span>
</template> </template>
</BasicForm> </BasicForm>
</BasicModal> </BasicModal>

View File

@@ -175,7 +175,7 @@ async function handleDelete(row: Required<QuestionnaireForm>) {
</ghost-button> </ghost-button>
</Popconfirm> </Popconfirm>
<ghost-button <ghost-button
v-access:code="['property:questionnaire:info']" v-access:code="['property:questionnaire:statistics']"
@click.stop="handleEdit(row)" @click.stop="handleEdit(row)"
> >
统计分析 统计分析

View File

@@ -6,7 +6,7 @@ import {attachListAll} from '#/api/property/roomBooking/conferenceAddServices';
import {meetInfo} from '#/api/property/roomBooking/conferenceSettings'; import {meetInfo} from '#/api/property/roomBooking/conferenceSettings';
import {defaultFormValueGetter, useBeforeCloseDiff} from '#/utils/popup'; import {defaultFormValueGetter, useBeforeCloseDiff} from '#/utils/popup';
import {modalSchema} from './data'; 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 type {AttachVO} from "#/api/property/roomBooking/conferenceAddServices/model";
import {addServiceColumns} from "./data"; import {addServiceColumns} from "./data";
import {Table, InputNumber, TimeRangePicker} from "ant-design-vue"; import {Table, InputNumber, TimeRangePicker} from "ant-design-vue";
@@ -17,7 +17,7 @@ import {reservationAdd} from "#/api/property/roomBooking/conferenceReservations"
import {ref} from "vue"; import {ref} from "vue";
const emit = defineEmits<{ reload: [] }>(); const emit = defineEmits<{ reload: [] }>();
const conferenceSettingDetail = ref<conferenceSettingsDetail>() const conferenceSettingDetail = ref<ConferenceSettingsDetail>()
const addServiceList = ref<AttachVO[]>([]) const addServiceList = ref<AttachVO[]>([])
const totalAmount = ref<number>(0) const totalAmount = ref<number>(0)
const [BasicForm, formApi] = useVbenForm({ const [BasicForm, formApi] = useVbenForm({
@@ -188,7 +188,7 @@ async function changeProjectNum() {
conferenceSettingDetail.expenseType == '2' ? conferenceSettingDetail.basePrice + '元' : conferenceSettingDetail.expenseType == '2' ? conferenceSettingDetail.basePrice + '元' :
renderDictValue(conferenceSettingDetail.expenseType, 'wy_fyms') renderDictValue(conferenceSettingDetail.expenseType, 'wy_fyms')
}}</span> }}</span>
<span>开放时段{{ conferenceSettingDetail.openHours }}</span> <span>开放时段{{ conferenceSettingDetail.openStartHours+'-'+conferenceSettingDetail.openEndHours }}</span>
</div> </div>
</div> </div>
<BasicForm> <BasicForm>

View File

@@ -53,7 +53,7 @@
item.expenseType == '2' ? (item.basePrice+"元") : renderDictValue(item.expenseType, 'wy_fyms') item.expenseType == '2' ? (item.basePrice+"元") : renderDictValue(item.expenseType, 'wy_fyms')
}} }}
</div> </div>
<div>开放时段: {{ item.openHours }}</div> <div>开放时段: {{ item.openStartHours+'-'+item.openEndHours }}</div>
<div>配套设备: {{ item.baseService }}</div> <div>配套设备: {{ item.baseService }}</div>
</div> </div>
</div> </div>
@@ -102,14 +102,18 @@ const simpleImage = Empty.PRESENTED_IMAGE_SIMPLE;
const meetingList = ref<MeetVO[]>([]) const meetingList = ref<MeetVO[]>([])
async function handleSearch() { async function handleSearch() {
let hours = ''; let openStartHours = '';
let openEndHours = '';
if (formState.openHours && formState.openHours.length) { 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 = { const obj = {
openHours: hours??undefined,
personNumber: formState.personNumber, 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); meetingList.value =await notlist(obj);
} }

View File

@@ -1,5 +1,7 @@
<script setup lang="ts"> <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 {shallowRef} from 'vue';
import {useVbenModal} from '@vben/common-ui'; import {useVbenModal} from '@vben/common-ui';
import {Descriptions, DescriptionsItem} from 'ant-design-vue'; 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) { async function handleOpenChange(open: boolean) {
if (!open) { if (!open) {
@@ -73,7 +75,7 @@ async function handleOpenChange(open: boolean) {
/> />
</DescriptionsItem> </DescriptionsItem>
<DescriptionsItem label="开放时段" :span="2"> <DescriptionsItem label="开放时段" :span="2">
{{ conferenceSettingsDetail.openHours }} {{ conferenceSettingsDetail.openStartHours+'-'+ conferenceSettingsDetail.openEndHours}}
</DescriptionsItem> </DescriptionsItem>
<DescriptionsItem label="会议室描述" :span="2"> <DescriptionsItem label="会议室描述" :span="2">
{{ conferenceSettingsDetail.descs }} {{ conferenceSettingsDetail.descs }}

View File

@@ -16,9 +16,10 @@ import { defaultFormValueGetter, useBeforeCloseDiff } from '#/utils/popup';
import { modalSchema } from './data'; import { modalSchema } from './data';
import { TimeRangePicker } from 'ant-design-vue'; import { TimeRangePicker } from 'ant-design-vue';
import { renderDictValue } from '#/utils/render'; import { renderDictValue } from '#/utils/render';
import { personList } from '#/api/property/resident/person';
import { communityTree } from '#/api/property/community'; import { communityTree } from '#/api/property/community';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import {userList} from "#/api/system/user";
import {getDictOptions} from "#/utils/dict";
const emit = defineEmits<{ reload: [] }>(); const emit = defineEmits<{ reload: [] }>();
const isUpdate = ref(false); const isUpdate = ref(false);
@@ -67,15 +68,15 @@ const [BasicModal, modalApi] = useVbenModal({
}); });
const { id } = modalApi.getData() as { id?: number | string }; const { id } = modalApi.getData() as { id?: number | string };
isUpdate.value = !!id; isUpdate.value = !!id;
getDictOptions('sys_user_sex')
await queryPerson(); await queryPerson();
await initLocationOptions(); await initLocationOptions();
if (isUpdate.value && id) { if (isUpdate.value && id) {
const record = await meetInfo(id); const record = await meetInfo(id);
record.expenseType = record.expenseType.toString(); record.expenseType = record.expenseType.toString();
record.isCheck = record.isCheck.toString(); record.isCheck = record.isCheck.toString();
let hour = record.openHours.split('-'); if (record.openStartHours&&record.openEndHours) {
if (hour.length > 1) { record.openHours = [dayjs(record.openStartHours, 'HH:mm'), dayjs(record.openEndHours, 'HH:mm')];
record.openHours = [dayjs(hour[0], 'HH:mm'), dayjs(hour[1], 'HH:mm')];
} }
await formApi.setValues(record); await formApi.setValues(record);
} }
@@ -95,10 +96,8 @@ async function handleConfirm() {
// getValues获取为一个readonly的对象 需要修改必须先深拷贝一次 // getValues获取为一个readonly的对象 需要修改必须先深拷贝一次
const data = cloneDeep(await formApi.getValues()); const data = cloneDeep(await formApi.getValues());
if (data.openHours) { if (data.openHours) {
data.openHours = data.openStartHours=data.openHours[0]?.format('HH:mm');
data.openHours[0]?.format('HH:mm') + data.openEndHours=data.openHours[1]?.format('HH:mm');
'-' +
data.openHours[1]?.format('HH:mm');
} }
await (isUpdate.value ? meetUpdate(data) : meetAdd(data)); await (isUpdate.value ? meetUpdate(data) : meetAdd(data));
resetInitialized(); resetInitialized();
@@ -117,19 +116,18 @@ async function handleClosed() {
} }
async function queryPerson() { async function queryPerson() {
let params = { const res = await userList({
pageSize: 1000,
pageNum: 1, pageNum: 1,
}; pageSize: 1000,
const res = await personList(params); });
const options = res.rows.map((user) => ({ const options = res.rows.map((user) => ({
label: label:
user.userName + user.nickName +
'-' + '-' +
renderDictValue(user.gender, 'sys_user_sex') + renderDictValue(user.sex, 'sys_user_sex') +
'-' + '-' +
user.phone, user.phonenumber,
value: user.id, value: user.userId,
})); }));
formApi.updateSchema([ formApi.updateSchema([
{ {
@@ -143,6 +141,7 @@ async function queryPerson() {
]); ]);
} }
const filterOption = (input: string, option: any) => { const filterOption = (input: string, option: any) => {
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0; return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0;
}; };

View File

@@ -76,6 +76,11 @@ export const columns: VxeGridProps['columns'] = [
title: '开放时段', title: '开放时段',
field: 'openHours', field: 'openHours',
width:100, width:100,
slots: {
default: ({row}) => {
return row.openStartHours+'-'+row.openEndHours;
},
},
}, },
{ {
title: '状态', title: '状态',