<template>
|
<view class="client-visit-detail">
|
<PageHeader :title="detailType === 1 ? '新增知识库' : '知识库详情'"
|
@back="goBack" />
|
<u-form ref="formRef"
|
label-width="90">
|
<!-- 客户信息 -->
|
<!-- <u-cell-group title="知识信息"> -->
|
<u-form-item label="申请编号"
|
prop="applicationNum"
|
required
|
border-bottom>
|
<u-input v-model="form.applicationNum"
|
:readonly="readonly"
|
placeholder="请输入申请编号" />
|
</u-form-item>
|
<u-form-item label="申请标题"
|
prop="title"
|
required
|
border-bottom>
|
<u-input v-model="form.title"
|
:readonly="readonly"
|
placeholder="请输入申请标题" />
|
</u-form-item>
|
<u-form-item label="用印类型"
|
prop="sealType"
|
required
|
border-bottom>
|
<u-input v-model="equipmentname"
|
readonly
|
placeholder="请选择用印类型"
|
@click="showEquipmentSheet = true" />
|
<template v-if="!readonly"
|
#right>
|
<up-icon name="arrow-right"
|
@click="openEquipmentSheet"></up-icon>
|
</template>
|
</u-form-item>
|
<u-form-item label="申请原因"
|
prop="reason"
|
border-bottom>
|
<u-textarea v-model="form.reason"
|
type="textarea"
|
rows="4"
|
:disabled="readonly"
|
placeholder="请输入申请原因" />
|
</u-form-item>
|
<u-form-item label="审批人"
|
prop="sealType"
|
required
|
border-bottom>
|
<u-input v-model="statusname"
|
readonly
|
placeholder="请选择审批人"
|
@click="showStatusSheet = true" />
|
<template v-if="!readonly"
|
#right>
|
<up-icon name="arrow-right"
|
@click="showStatusSheet = true"></up-icon>
|
</template>
|
</u-form-item>
|
<u-form-item label="紧急程度"
|
prop="urgency"
|
required
|
border-bottom>
|
<u-radio-group v-model="form.urgency"
|
:disabled="readonly">
|
<u-radio name="normal"
|
label="普通"
|
size="16" />
|
<u-radio name="urgent"
|
label="紧急"
|
size="16" />
|
<u-radio name="very-urgent"
|
label="特急"
|
size="16" />
|
</u-radio-group>
|
</u-form-item>
|
<!-- </u-cell-group> -->
|
<!-- 提交按钮 -->
|
<view v-if="!readonly"
|
class="footer-btns">
|
<u-button class="cancel-btn"
|
@click="goBack">取消</u-button>
|
<u-button class="sign-btn"
|
type="primary"
|
@click="handleSubmit"
|
:loading="loading">保存</u-button>
|
</view>
|
</u-form>
|
<!-- 设备配置选择器 -->
|
<up-action-sheet :show="showEquipmentSheet"
|
:actions="equipmentOptions"
|
@select="handleEquipmentChange"
|
@close="showEquipmentSheet = false" />
|
<!-- 状态选择器 -->
|
<up-action-sheet :show="showStatusSheet"
|
:actions="userList"
|
@select="onStatusSelect"
|
@close="showStatusSheet = false" />
|
</view>
|
</template>
|
|
<script setup>
|
// 替换 toast 方法
|
defineOptions({ name: "meeting-settings-detail" });
|
const showToast = message => {
|
uni.showToast({
|
title: message,
|
icon: "none",
|
});
|
};
|
|
import { ref, onMounted, computed } from "vue";
|
import PageHeader from "@/components/PageHeader.vue";
|
import useUserStore from "@/store/modules/user";
|
import { useDict } from "@/utils/dict";
|
import { onLoad } from "@dcloudio/uni-app";
|
import { userListNoPageByTenantId } from "@/api/system/user";
|
|
import { addSealApplication } from "@/api/managementMeetings/sealManagement";
|
|
const userStore = useUserStore();
|
|
// 表单数据
|
const form = ref({
|
applicationNum: "",
|
title: "",
|
sealType: "",
|
reason: "",
|
approveUserId: "",
|
urgency: "normal",
|
status: "pending",
|
});
|
const { knowledge_type } = useDict("knowledge_type");
|
const knowledgeTypeOptions = computed(() => knowledge_type?.value || []);
|
const equipmentOptions = ref([
|
{ value: "official", name: "公章" },
|
{ value: "contract", name: "合同专用章" },
|
{ value: "finance", name: "财务专用章" },
|
{ value: "legal", name: "法人章" },
|
]);
|
const statusOptions = ref([
|
{ value: "high", name: "显著提升" },
|
{ value: "medium", name: "一般提升" },
|
{ value: "low", name: "轻微提升" },
|
]);
|
//// 页面状态
|
const loading = ref(false);
|
const formRef = ref(null);
|
const showEquipmentSheet = ref(false);
|
const showStatusSheet = ref(false);
|
const openEquipmentSheet = () => {
|
showEquipmentSheet.value = true;
|
};
|
// 返回上一页
|
const goBack = () => {
|
uni.navigateBack();
|
};
|
const statusname = ref("");
|
// 状态选择
|
const onStatusSelect = action => {
|
form.value.approveUserId = action.value;
|
statusname.value = action.name;
|
showStatusSheet.value = false;
|
};
|
const equipmentname = ref("");
|
// 设备配置选择
|
const handleEquipmentChange = val => {
|
form.value.sealType = val.value;
|
equipmentname.value = val.name;
|
showEquipmentSheet.value = false;
|
};
|
// 提交表单
|
const handleSubmit = async () => {
|
if (!form.value.applicationNum) {
|
showToast("请输入申请编号");
|
return;
|
}
|
|
if (!form.value.title) {
|
showToast("请输入标题");
|
return;
|
}
|
|
if (!form.value.sealType) {
|
showToast("请选择用印类型");
|
return;
|
}
|
if (!form.value.reason) {
|
showToast("请输入申请理由");
|
return;
|
}
|
if (!statusname.value) {
|
showToast("请选择审批人");
|
return;
|
}
|
try {
|
loading.value = true;
|
addSealApplication(form.value).then(res => {
|
if (res.code !== 200) {
|
showToast("保存失败,请重试");
|
return;
|
}
|
loading.value = false;
|
showToast("保存成功");
|
setTimeout(() => {
|
goBack();
|
}, 500);
|
});
|
} catch (e) {
|
loading.value = false;
|
console.error("保存失败:", e);
|
showToast("保存失败,请重试");
|
}
|
};
|
|
// 初始化页面数据
|
const readonly = ref(false);
|
const detailType = ref(1);
|
const knowledgeId = ref("");
|
const userList = ref([]);
|
onLoad(options => {
|
detailType.value = Number(options.detailType);
|
knowledgeId.value = options.id || "";
|
|
// 查看模式设置只读
|
if (detailType.value === 3) {
|
readonly.value = true;
|
}
|
userListNoPageByTenantId().then(res => {
|
userList.value = res.data.map(item => ({
|
value: item.userId,
|
name: item.nickName,
|
}));
|
});
|
});
|
|
onMounted(() => {
|
// 从本地存储中获取知识数据
|
const knowledgeBase = uni.getStorageSync("knowledgeBase");
|
if (knowledgeBase) {
|
form.value = JSON.parse(JSON.stringify(knowledgeBase));
|
}
|
|
if (detailType.value === 1) {
|
form.value = {
|
applicationNum: "",
|
title: "",
|
sealType: "",
|
reason: "",
|
approveUserId: "",
|
urgency: "normal",
|
status: "pending",
|
};
|
statusname.value = "";
|
equipmentname.value = "";
|
}
|
console.log(form.value, "userList.value");
|
|
if (detailType.value != 1) {
|
equipmentname.value =
|
equipmentOptions.value.find(item => item.value === form.value.sealType)
|
?.name || "";
|
statusname.value = form.value.approveUserName || "";
|
}
|
});
|
</script>
|
|
<style scoped lang="scss">
|
@import "@/static/scss/form-common.scss";
|
.client-visit {
|
min-height: 100vh;
|
background: #f8f9fa;
|
padding-bottom: 5rem;
|
}
|
|
.footer-btns {
|
position: fixed;
|
left: 0;
|
right: 0;
|
bottom: 0;
|
background: #fff;
|
display: flex;
|
justify-content: space-around;
|
align-items: center;
|
padding: 0.75rem 0;
|
box-shadow: 0 -0.125rem 0.5rem rgba(0, 0, 0, 0.05);
|
z-index: 1000;
|
}
|
|
.cancel-btn {
|
font-weight: 400;
|
font-size: 1rem;
|
color: #666;
|
background: #f5f5f5;
|
border: 1px solid #ddd;
|
width: 45%;
|
height: 2.5rem;
|
border-radius: 2.5rem 2.5rem 2.5rem 2.5rem;
|
}
|
|
.sign-btn {
|
font-weight: 500;
|
font-size: 1rem;
|
color: #fff;
|
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
border: none;
|
width: 45%;
|
height: 2.5rem;
|
border-radius: 2.5rem 2.5rem 2.5rem 2.5rem;
|
}
|
|
.location-icon {
|
color: #1989fa;
|
font-size: 1.2rem;
|
}
|
|
/* 紧急程度单选框样式 */
|
:deep(.u-radio-group) {
|
display: flex;
|
align-items: center;
|
gap: 40rpx;
|
}
|
|
:deep(.u-radio) {
|
display: flex;
|
align-items: center;
|
}
|
</style>
|