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会议)
*/
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;
}

View File

@@ -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 });
}

View File

@@ -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{

View File

@@ -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: {

View File

@@ -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')"
/>

View File

@@ -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>

View File

@@ -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'],
},
},
];

View File

@@ -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 }}

View File

@@ -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>

View File

@@ -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)"
>
统计分析

View File

@@ -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>

View File

@@ -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);
}

View File

@@ -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 }}

View File

@@ -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;
};

View File

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