服务指令-所有功能涉及0/1转Y/N代码调整
This commit is contained in:
parent
63e26ddd76
commit
abdaf8fe1a
|
|
@ -54,7 +54,7 @@
|
|||
</template>
|
||||
<template #title>
|
||||
<span @mouseenter="item.showContent = true" @mouseleave="item.showContent = false">{{ item?.title }}
|
||||
<span v-if="item?.izEnabled == '1' && item.level != 5" style="color:red;">(已停用)</span>
|
||||
<span v-if="item?.izEnabled == 'N' && item.level != 5" style="color:red;">(已停用)</span>
|
||||
<span v-show="item.showContent">
|
||||
<!-- 下拉菜单 -->
|
||||
<a-dropdown :open="menuState[item?.key]?.open" @openChange="onMenuOpenChange(item.key, $event)">
|
||||
|
|
@ -88,7 +88,7 @@
|
|||
<template #title>
|
||||
<span @mouseenter="child.showContent = true" @mouseleave="child.showContent = false">{{ child?.title
|
||||
}}
|
||||
<span v-if="child?.izEnabled == '1' && child.level != 5" style="color:red;">(已停用)</span>
|
||||
<span v-if="child?.izEnabled == 'N' && child.level != 5" style="color:red;">(已停用)</span>
|
||||
<span v-show="child.showContent">
|
||||
<!-- 下拉菜单 -->
|
||||
<a-dropdown :open="menuState[child?.key]?.open"
|
||||
|
|
@ -120,7 +120,7 @@
|
|||
<template #title>
|
||||
<span @mouseenter="childThree.showContent = true"
|
||||
@mouseleave="childThree.showContent = false">{{ childThree?.title }}
|
||||
<span v-if="childThree?.izEnabled == '1' && childThree.level != 5"
|
||||
<span v-if="childThree?.izEnabled == 'N' && childThree.level != 5"
|
||||
style="color:red;">(已停用)</span>
|
||||
<span v-show="childThree.showContent">
|
||||
<!-- 下拉菜单 -->
|
||||
|
|
@ -149,7 +149,7 @@
|
|||
@click="handleTreeSelect([], { node: childFour })">
|
||||
<span @mouseenter="childFour.showContent = true" @mouseleave="childFour.showContent = false"
|
||||
class="auto-wrap">{{ childFour?.title + '(' + childFour?.cycleTypeName + ')' }}
|
||||
<span v-if="childFour?.izEnabled == '1' && childFour.level != 5"
|
||||
<span v-if="childFour?.izEnabled == 'N' && childFour.level != 5"
|
||||
style="color:red;">(已停用)</span>
|
||||
<span v-show="childFour.showContent">
|
||||
<!-- 下拉菜单 -->
|
||||
|
|
@ -181,7 +181,7 @@
|
|||
</template> -->
|
||||
<span @mouseenter="childThree.showContent = true" @mouseleave="childThree.showContent = false">{{
|
||||
childThree?.title }}
|
||||
<span v-if="childThree?.izEnabled == '1' && childThree.level != 5"
|
||||
<span v-if="childThree?.izEnabled == 'N' && childThree.level != 5"
|
||||
style="color:red;">(已停用)</span>
|
||||
<span v-show="childThree.showContent">
|
||||
<!-- 下拉菜单 -->
|
||||
|
|
@ -214,7 +214,7 @@
|
|||
</template> -->
|
||||
<span @mouseenter="child.showContent = true" @mouseleave="child.showContent = false">{{ child?.title
|
||||
}}
|
||||
<span v-if="child?.izEnabled == '1' && child.level != 5" style="color:red;">(已停用)</span>
|
||||
<span v-if="child?.izEnabled == 'N' && child.level != 5" style="color:red;">(已停用)</span>
|
||||
<span v-show="child.showContent">
|
||||
<!-- 下拉菜单 -->
|
||||
<a-dropdown :open="menuState[child?.key]?.open" @openChange="onMenuOpenChange(child.key, $event)">
|
||||
|
|
@ -244,7 +244,7 @@
|
|||
<Icon icon="ant-design:appstore-add-outlined" :size="20" v-else />
|
||||
</template>
|
||||
<span @mouseenter="item.showContent = true" @mouseleave="item.showContent = false">{{ item?.title }}
|
||||
<span v-if="item?.izEnabled == '1' && item.level != 5" style="color:red;">(已停用)</span>
|
||||
<span v-if="item?.izEnabled == 'N' && item.level != 5" style="color:red;">(已停用)</span>
|
||||
<span v-show="item.showContent">
|
||||
<!-- 下拉菜单 -->
|
||||
<a-dropdown :open="menuState[item?.key]?.open" @openChange="onMenuOpenChange(item.key, $event)">
|
||||
|
|
@ -282,7 +282,7 @@
|
|||
<Icon icon="ant-design:appstore-add-outlined" :size="20" v-if="data.level == 1" style="margin-right: 5px;"/>
|
||||
<span v-if="data.level == 4">{{ data?.title + '(' + data?.cycleTypeName + ')' }}</span>
|
||||
<span v-else>{{ data?.title }}</span>
|
||||
<span v-if="data?.izEnabled == '1' && data.level != 5" style="color:red;">(已停用)</span>
|
||||
<span v-if="data?.izEnabled == 'N' && data.level != 5" style="color:red;">(已停用)</span>
|
||||
|
||||
<a-dropdown :open="menuState[data?.key]?.open" @openChange="onMenuOpenChange(data.key, $event)">
|
||||
<template #overlay>
|
||||
|
|
@ -551,7 +551,7 @@ const queryParam = reactive<any>({
|
|||
instructionTagId: '',
|
||||
categoryId: '',
|
||||
typeId: '',
|
||||
izEnabled: '0',
|
||||
izEnabled: 'Y',
|
||||
});
|
||||
watch(
|
||||
() => queryParam.instructionTagId,
|
||||
|
|
@ -779,7 +779,7 @@ function searchQuery(reloadTree = true, resetId = true) {
|
|||
queryParam.id = ''
|
||||
}
|
||||
if (filterIzEnabled.value == 'enabled') {
|
||||
queryParam.izEnabled = '0'
|
||||
queryParam.izEnabled = 'Y'
|
||||
} else {
|
||||
queryParam.izEnabled = ''
|
||||
}
|
||||
|
|
@ -1081,10 +1081,10 @@ function usingInstruction(data) {
|
|||
okText: '启用',
|
||||
cancelText: '取消',
|
||||
onOk: () => {
|
||||
insRegisterModal.value.usingOrStop(data.instructionId, '0', false)
|
||||
catRegisterModal.value.usingOrStopByCascade(data.instructionId, '0', false)
|
||||
typRegisterModal.value.usingOrStopByCascade(data.instructionId, '', '0', false)
|
||||
registerModal.value.usingOrStopByCascade(data.instructionId, '', '', '0', true)
|
||||
insRegisterModal.value.usingOrStop(data.instructionId, 'Y', false)
|
||||
catRegisterModal.value.usingOrStopByCascade(data.instructionId, 'Y', false)
|
||||
typRegisterModal.value.usingOrStopByCascade(data.instructionId, '', 'Y', false)
|
||||
registerModal.value.usingOrStopByCascade(data.instructionId, '', '', 'Y', true)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -1097,10 +1097,10 @@ function stopInstruction(data) {
|
|||
okText: '停用',
|
||||
cancelText: '取消',
|
||||
onOk: () => {
|
||||
insRegisterModal.value.usingOrStop(data.instructionId, '1', false)
|
||||
catRegisterModal.value.usingOrStopByCascade(data.instructionId, '1', false)
|
||||
typRegisterModal.value.usingOrStopByCascade(data.instructionId, '', '1', false)
|
||||
registerModal.value.usingOrStopByCascade(data.instructionId, '', '', '1', true)
|
||||
insRegisterModal.value.usingOrStop(data.instructionId, 'N', false)
|
||||
catRegisterModal.value.usingOrStopByCascade(data.instructionId, 'N', false)
|
||||
typRegisterModal.value.usingOrStopByCascade(data.instructionId, '', 'N', false)
|
||||
registerModal.value.usingOrStopByCascade(data.instructionId, '', '', 'N', true)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -1122,9 +1122,9 @@ function usingCategory(data) {
|
|||
okText: '启用',
|
||||
cancelText: '取消',
|
||||
onOk: () => {
|
||||
catRegisterModal.value.usingOrStop(data.categoryId, '0', false)
|
||||
typRegisterModal.value.usingOrStopByCascade('', data.categoryId, '0', false)
|
||||
registerModal.value.usingOrStopByCascade('', data.categoryId, '', '0', true)
|
||||
catRegisterModal.value.usingOrStop(data.categoryId, 'Y', false)
|
||||
typRegisterModal.value.usingOrStopByCascade('', data.categoryId, 'Y', false)
|
||||
registerModal.value.usingOrStopByCascade('', data.categoryId, '', 'Y', true)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -1137,9 +1137,9 @@ function stopCategory(data) {
|
|||
okText: '停用',
|
||||
cancelText: '取消',
|
||||
onOk: () => {
|
||||
catRegisterModal.value.usingOrStop(data.categoryId, '1', false)
|
||||
typRegisterModal.value.usingOrStopByCascade('', data.categoryId, '1', false)
|
||||
registerModal.value.usingOrStopByCascade('', data.categoryId, '', '1', true)
|
||||
catRegisterModal.value.usingOrStop(data.categoryId, 'N', false)
|
||||
typRegisterModal.value.usingOrStopByCascade('', data.categoryId, 'N', false)
|
||||
registerModal.value.usingOrStopByCascade('', data.categoryId, '', 'N', true)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -1162,8 +1162,8 @@ function usingType(data) {
|
|||
okText: '启用',
|
||||
cancelText: '取消',
|
||||
onOk: () => {
|
||||
typRegisterModal.value.usingOrStop(data.typeId, '0', false)
|
||||
registerModal.value.usingOrStopByCascade('', '', data.typeId, '0', true)
|
||||
typRegisterModal.value.usingOrStop(data.typeId, 'Y', false)
|
||||
registerModal.value.usingOrStopByCascade('', '', data.typeId, 'Y', true)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -1176,8 +1176,8 @@ function stopType(data) {
|
|||
okText: '停用',
|
||||
cancelText: '取消',
|
||||
onOk: () => {
|
||||
typRegisterModal.value.usingOrStop(data.typeId, '1', false)
|
||||
registerModal.value.usingOrStopByCascade('', '', data.typeId, '1', true)
|
||||
typRegisterModal.value.usingOrStop(data.typeId, 'N', false)
|
||||
registerModal.value.usingOrStopByCascade('', '', data.typeId, 'N', true)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -1206,11 +1206,11 @@ function editMedia(data) {
|
|||
}
|
||||
//启用服务指令
|
||||
function usingDirective(data) {
|
||||
registerModal.value.usingOrStop(data.key, '0', true);
|
||||
registerModal.value.usingOrStop(data.key, 'Y', true);
|
||||
}
|
||||
//停用服务指令
|
||||
function stopDirective(data) {
|
||||
registerModal.value.usingOrStop(data.key, '1', true);
|
||||
registerModal.value.usingOrStop(data.key, 'N', true);
|
||||
}
|
||||
//查看体型标签
|
||||
function bodyTagsDetail(data) {
|
||||
|
|
@ -1232,9 +1232,9 @@ function menuItems(data) {
|
|||
if (data.canAdd) {
|
||||
items.push({ key: 'addCat', label: '新增服务类别', icon: 'ant-design:plus-outlined', canAdd: data.canAdd, action: addCategory })
|
||||
}
|
||||
if (data.izEnabled === '1') {
|
||||
if (data.izEnabled === 'N') {
|
||||
items.push({ key: 'usingIns', label: '启用分类标签', icon: 'ant-design:check-circle-outlined', canAdd: true, action: usingInstruction })
|
||||
} else if (data.izEnabled === '0') {
|
||||
} else if (data.izEnabled === 'Y') {
|
||||
items.push({ key: 'stopIns', label: '停用分类标签', icon: 'ant-design:stop-outlined', canAdd: true, action: stopInstruction })
|
||||
}
|
||||
items.push({ key: 'editIns', label: '修改图标', icon: 'ant-design:edit-outlined', canAdd: true, action: editInstruction },)
|
||||
|
|
@ -1247,9 +1247,9 @@ function menuItems(data) {
|
|||
if (data.canAdd) {
|
||||
items.push({ key: 'addTyp', label: '新增服务类型', icon: 'ant-design:plus-outlined', canAdd: data.canAdd, action: addType })
|
||||
}
|
||||
if (data.izEnabled === '1') {
|
||||
if (data.izEnabled === 'N') {
|
||||
items.push({ key: 'usingCat', label: '启用服务类别', icon: 'ant-design:check-circle-outlined', canAdd: data.parentLevelEnabled, action: usingCategory })
|
||||
} else if (data.izEnabled === '0') {
|
||||
} else if (data.izEnabled === 'Y') {
|
||||
items.push({ key: 'stopCat', label: '停用服务类别', icon: 'ant-design:stop-outlined', canAdd: data.parentLevelEnabled, action: stopCategory })
|
||||
}
|
||||
|
||||
|
|
@ -1265,9 +1265,9 @@ function menuItems(data) {
|
|||
if (data.canAdd) {
|
||||
items.push({ key: 'addDir', label: '新增服务指令', icon: 'ant-design:plus-outlined', canAdd: data.canAdd, action: addDirective })
|
||||
}
|
||||
if (data.izEnabled === '1') {
|
||||
if (data.izEnabled === 'N') {
|
||||
items.push({ key: 'usingTyp', label: '启用服务类型', icon: 'ant-design:check-circle-outlined', canAdd: data.parentLevelEnabled, action: usingType })
|
||||
} else if (data.izEnabled === '0') {
|
||||
} else if (data.izEnabled === 'Y') {
|
||||
items.push({ key: 'stopTyp', label: '停用服务类型', icon: 'ant-design:stop-outlined', canAdd: data.parentLevelEnabled, action: stopType })
|
||||
}
|
||||
if (!!mainOrgCode.value && mainOrgCode.value == ownOrgCode.value) {
|
||||
|
|
@ -1277,15 +1277,15 @@ function menuItems(data) {
|
|||
}
|
||||
else if (data.level === 4) {
|
||||
const items = [
|
||||
{ key: 'editDir', label: '编辑服务指令', icon: 'ant-design:edit-outlined', canAdd: data.canAdd && data.izEnabled == '0', action: editDirective },
|
||||
{ key: 'editMedia', label: '编辑指令资源', icon: 'ant-design:edit-outlined', canAdd: data.canAdd && data.izEnabled == '0' && mainOrgCode.value == ownOrgCode.value, action: editMedia },
|
||||
{ key: 'editDir', label: '编辑服务指令', icon: 'ant-design:edit-outlined', canAdd: data.canAdd && data.izEnabled == 'Y', action: editDirective },
|
||||
{ key: 'editMedia', label: '编辑指令资源', icon: 'ant-design:edit-outlined', canAdd: data.canAdd && data.izEnabled == 'Y' && mainOrgCode.value == ownOrgCode.value, action: editMedia },
|
||||
]
|
||||
// if (data.canAdd) {
|
||||
// items.push({ key: 'addDir', label: '新增服务指令', icon: 'ant-design:plus-outlined', canAdd: data.canAdd , action: addDirective })
|
||||
// }
|
||||
if (data.izEnabled === '1') {
|
||||
if (data.izEnabled === 'N') {
|
||||
items.push({ key: 'usingDir', label: '启用服务指令', icon: 'ant-design:check-circle-outlined', canAdd: data.canAdd, action: usingDirective })
|
||||
} else if (data.izEnabled === '0') {
|
||||
} else if (data.izEnabled === 'Y') {
|
||||
items.push({ key: 'stopDir', label: '停用服务指令', icon: 'ant-design:stop-outlined', canAdd: data.canAdd, action: stopDirective })
|
||||
}
|
||||
if (data?.bodyTagList?.length > 0) {
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
<a-form-item label="分类标签" v-bind="validateInfos.instructionTagId"
|
||||
id="ConfigServiceDirectiveForm-instructionTagId" name="instructionTagId">
|
||||
<j-dict-select-tag v-model:value="formData.instructionTagId" :orgCode="mainOrgCode"
|
||||
:dictCode="`nu_config_service_instruction_tag,instruction_name,id,del_flag = 0 and iz_enabled = 0 order by sort asc`"
|
||||
:dictCode="`nu_config_service_instruction_tag,instruction_name,id,del_flag = 0 and iz_enabled = 'Y' order by sort asc`"
|
||||
placeholder="请选择分类标签" allowClear @upDictCode="upInstructionDictCode" disabled />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
|
|
@ -44,7 +44,7 @@
|
|||
<a-form-item label="分类标签" v-bind="validateInfos.instructionTagId"
|
||||
id="ConfigServiceDirectiveForm-instructionTagId" name="instructionTagId">
|
||||
<j-dict-select-tag v-model:value="formData.instructionTagId" :orgCode="mainOrgCode"
|
||||
:dictCode="`nu_config_service_instruction_tag,instruction_name,id,del_flag = 0 and iz_enabled = 0 order by sort asc`"
|
||||
:dictCode="`nu_config_service_instruction_tag,instruction_name,id,del_flag = 0 and iz_enabled = 'Y' order by sort asc`"
|
||||
placeholder="请选择分类标签" allowClear @upDictCode="upInstructionDictCode" :disabled="!!formData.id" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
|
|
@ -289,15 +289,15 @@ const formData = reactive<Record<string, any>>({
|
|||
directiveName: '',
|
||||
tollPrice: 0,
|
||||
comPrice: 0,
|
||||
izReimbursement: '0',
|
||||
izPreferential: '0',
|
||||
izReimbursement: 'N',
|
||||
izPreferential: 'N',
|
||||
chargingFrequency: '',
|
||||
cycleType: '',
|
||||
sort: 99,
|
||||
serviceContent: '',
|
||||
serviceDuration: '5',
|
||||
status: '',
|
||||
izEnabled: '0',
|
||||
izEnabled: 'Y',
|
||||
createBy: '',
|
||||
createTime: '',
|
||||
updateBy: '',
|
||||
|
|
@ -461,7 +461,7 @@ watch(
|
|||
if (!newInstructionTagId) {
|
||||
categoryDictCode.value = 'nu_config_service_category,category_name,id,1=2';
|
||||
} else {
|
||||
categoryDictCode.value = `nu_config_service_category,category_name,id,del_flag = 0 and iz_enabled = 0 and instruction_id = '${newInstructionTagId}' order by sort asc`;
|
||||
categoryDictCode.value = `nu_config_service_category,category_name,id,del_flag = 0 and iz_enabled = 'Y' and instruction_id = '${newInstructionTagId}' order by sort asc`;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
|
@ -475,7 +475,7 @@ watch(
|
|||
if (!newCategoryId) {
|
||||
typeDictCode.value = 'nu_config_service_type,type_name,id,1=2';
|
||||
} else {
|
||||
typeDictCode.value = `nu_config_service_type,type_name,id,del_flag = 0 and iz_enabled = 0 and category_id = '${newCategoryId}' order by sort asc`;
|
||||
typeDictCode.value = `nu_config_service_type,type_name,id,del_flag = 0 and iz_enabled = 'Y' and category_id = '${newCategoryId}' order by sort asc`;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
<a-form-item name="instructionTagId">
|
||||
<template #label><span title="分类标签">分类标签</span></template>
|
||||
<j-dict-select-tag v-model:value="queryParam.instructionTagId" :orgCode="mainOrgCode"
|
||||
:dictCode="`nu_config_service_instruction_tag,instruction_name,id,del_flag = 0 and iz_enabled = 0 order by sort asc`"
|
||||
:dictCode="`nu_config_service_instruction_tag,instruction_name,id,del_flag = 0 and iz_enabled = 'Y' order by sort asc`"
|
||||
placeholder="请选择分类标签" allowClear :ignoreDisabled="true" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
|
|
@ -18,7 +18,7 @@
|
|||
<a-form-item name="categoryId">
|
||||
<template #label><span title="服务类别">服务类别</span></template>
|
||||
<j-dict-select-tag type="list" v-model:value="queryParam.categoryId" :orgCode="mainOrgCode"
|
||||
:dictCode="`nu_config_service_category,category_name,id,del_flag = 0 and iz_enabled = 0 and instruction_id = '${queryParam.instructionTagId || ''}' order by sort asc`"
|
||||
:dictCode="`nu_config_service_category,category_name,id,del_flag = 0 and iz_enabled = 'Y' and instruction_id = '${queryParam.instructionTagId || ''}' order by sort asc`"
|
||||
placeholder="请选择服务类别" allowClear :ignoreDisabled="true" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
|
|
@ -27,7 +27,7 @@
|
|||
<a-form-item name="typeId">
|
||||
<template #label><span title="服务类型">服务类型</span></template>
|
||||
<j-dict-select-tag type="list" v-model:value="queryParam.typeId" :orgCode="mainOrgCode"
|
||||
:dictCode="`nu_config_service_type,type_name,id,del_flag = 0 and iz_enabled = 0 and category_id = '${queryParam.categoryId || ''}' order by sort asc`"
|
||||
:dictCode="`nu_config_service_type,type_name,id,del_flag = 0 and iz_enabled = 'Y' and category_id = '${queryParam.categoryId || ''}' order by sort asc`"
|
||||
placeholder="请选择服务类型" allowClear :ignoreDisabled="true" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
|
|
@ -41,7 +41,7 @@
|
|||
<a-form-item name="bodyTags">
|
||||
<template #label><span title="体型标签">体型标签</span></template>
|
||||
<j-dict-select-tag type='list' v-model:value="queryParam.bodyTags" :orgCode="mainOrgCode"
|
||||
:dictCode="`nu_config_body_tag,tag_name,id,del_flag = '0' and iz_enabled = 0 order by sort asc`"
|
||||
:dictCode="`nu_config_body_tag,tag_name,id,del_flag = '0' and iz_enabled = 'Y' order by sort asc`"
|
||||
:ignoreDisabled="true" placeholder="请选择体型标签" allowClear />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
|
|
@ -49,7 +49,7 @@
|
|||
<a-form-item name="emotionTags">
|
||||
<template #label><span title="情绪标签">情绪标签</span></template>
|
||||
<j-dict-select-tag type="list" v-model:value="queryParam.emotionTags" :orgCode="mainOrgCode"
|
||||
:dictCode="`nu_config_emotion_tag,tag_name,id,del_flag = '0' and iz_enabled = 0 order by sort asc`"
|
||||
:dictCode="`nu_config_emotion_tag,tag_name,id,del_flag = '0' and iz_enabled = 'Y' order by sort asc`"
|
||||
:ignoreDisabled="true" placeholder="请选择情绪标签" allowClear />
|
||||
</a-form-item>
|
||||
</a-col> -->
|
||||
|
|
@ -115,7 +115,7 @@ const queryParam = reactive<any>({
|
|||
instructionTagId: '',
|
||||
categoryId: '',
|
||||
typeId: '',
|
||||
izEnabled: '0',
|
||||
izEnabled: 'Y',
|
||||
});
|
||||
watch(
|
||||
() => queryParam.instructionTagId,
|
||||
|
|
@ -159,8 +159,8 @@ const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
|
|||
if (excludeIds.value.length) {
|
||||
params.excludeIds = excludeIds.value.join(',')
|
||||
}
|
||||
params.izEnabled = '0'
|
||||
rangerQuery.izEnabled = '0'
|
||||
params.izEnabled = 'Y'
|
||||
rangerQuery.izEnabled = 'Y'
|
||||
return Object.assign(params, rangerQuery);
|
||||
},
|
||||
},
|
||||
|
|
|
|||
Loading…
Reference in New Issue