123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- <script setup lang="ts">
- import { ref, reactive, onMounted } from "vue";
- import { ElMessage, ElMessageBox } from "element-plus";
- import type { DrawerProps, FormProps } from "element-plus";
- import { getQuotaPageList } from "@/api/indexDefine";
- import { editListApi } from "@/api/indexData";
- import { postListTree } from "@/api/department";
- import { postOrganizationUserPage } from "@/api/userSetting";
- import dayjs from "dayjs";
- const emit = defineEmits(["updateDialog"]);
- const formRef = ref();
- const drawer = ref(false);
- const disabledShow = ref<any>(true);
- const direction = ref<DrawerProps["direction"]>("rtl");
- // 表单
- const formLabelAlign = reactive({
- id: "",
- sourceValue: "",
- deptCode: "",
- deptId: "",
- deptName: "",
- userId: "",
- userName: "",
- numerator: "",
- denominator: "",
- dataValue: "",
- specificTime: ""
- });
- const rules = reactive<FormProps["rules"]>({
- sourceValue: [{ required: true, message: "请输入指标名称", trigger: "blur" }],
- define: { required: true, message: "请输入指标定义", trigger: "blur" },
- caliber: { required: true, message: "请输入指标口径", trigger: "blur" },
- statue: { required: true, message: "请选择指标状态", trigger: "blur" }
- });
- // 抽屉逻辑
- const open = row => {
- getQuotaPageListApi();
- getIndustryListApi();
- Object.assign(formLabelAlign, row);
- if (row.deptCode) {
- handleDept(row.deptCode);
- }
- drawer.value = true;
- };
- defineExpose({
- open
- });
- const handleClose = (done: () => void) => {
- if (disabledShow.value) {
- disabledShow.value = true;
- drawer.value = false;
- } else {
- ElMessageBox.confirm("配置项未保存,确认关闭", {
- type: "warning"
- }).then(() => {
- formRef.value.clearValidate(); // 清除验证错误
- formRef.value.resetFields(); // 重置表单字段
- disabledShow.value = true;
- drawer.value = false;
- });
- }
- };
- const cancelClick = () => {
- formRef.value.validate(valid => {
- if (valid) {
- disabledShow.value = true;
- }
- });
- };
- const editClick = () => {
- disabledShow.value = false;
- };
- // 确认
- const confirmClick = () => {
- formRef.value.validate(async valid => {
- if (valid) {
- if (formLabelAlign.specificTime) {
- formLabelAlign.specificTime = dayjs(formLabelAlign.specificTime).format(
- "YYYY-MM-DD"
- );
- }
- const { code, msg } = await editListApi(formLabelAlign);
- if (code === 200) {
- ElMessage({
- message: "修改成功",
- type: "success"
- });
- disabledShow.value = true;
- drawer.value = false;
- emit("updateDialog");
- } else {
- ElMessage.error(msg);
- }
- }
- });
- };
- // 指标名称
- const restaurants = ref([]);
- const querySearch = (queryString: string, cb: any) => {
- const results = queryString
- ? restaurants.value.filter(createFilter(queryString))
- : restaurants.value;
- cb(results);
- };
- const createFilter = (queryString: string) => {
- return restaurant => {
- return restaurant.name.indexOf(queryString) === 0;
- };
- };
- const getQuotaPageListApi = async () => {
- const { code, data, msg } = await getQuotaPageList({
- pageNumber: 1,
- pageSize: 99999,
- orderField: "updateTime",
- param: null,
- categoryName: null,
- statue: null,
- orderType: null
- });
- if (code == 200) {
- if (data.records && data.records.length) {
- restaurants.value = data.records;
- } else {
- restaurants.value = [];
- }
- } else {
- ElMessage.error(msg);
- }
- };
- // 部门名称
- const defaultProps = {
- children: "childrenRes",
- label: "deptName",
- value: "deptCode"
- };
- const deptSelect = ref([]);
- const getIndustryListApi = async () => {
- const { code, data } = await postListTree();
- if (code == 200) {
- deptSelect.value = data || [];
- }
- };
- const handleNodeDeptClick = data => {
- formLabelAlign.deptId = data.hospitalCode;
- formLabelAlign.deptName = data.deptName;
- };
- // 员工名称
- const userSelect = ref([]);
- const handleDept = async val => {
- const { code, data, msg } = await postOrganizationUserPage({
- pageNumber: 1,
- pageSize: 99999,
- organizationCode: val,
- organizationType: "dept",
- realName: ""
- });
- if (code == 200) {
- userSelect.value = data.records;
- } else {
- ElMessage.error(msg);
- }
- };
- const handleUser = val => {
- userSelect.value.forEach(item => {
- if (item.hospitalCode === val) {
- formLabelAlign.userName = item.realName;
- }
- });
- };
- </script>
- <template>
- <div>
- <el-drawer
- v-model="drawer"
- :direction="direction"
- :before-close="handleClose"
- >
- <template #header>
- <h4>数据详情</h4>
- </template>
- <template #default>
- <div>
- <el-form
- ref="formRef"
- label-position="top"
- label-width="auto"
- :rules="rules"
- :model="formLabelAlign"
- >
- <el-form-item
- label="指标名称"
- label-position="top"
- prop="sourceValue"
- >
- <el-autocomplete
- v-model="formLabelAlign.sourceValue"
- value-key="name"
- :fetch-suggestions="querySearch"
- :trigger-on-focus="false"
- clearable
- placeholder="请输入"
- :disabled="disabledShow"
- style="width: 100%"
- />
- </el-form-item>
- <el-form-item label="部门名称" label-position="top" prop="deptCode">
- <el-tree-select
- v-model="formLabelAlign.deptCode"
- :disabled="disabledShow"
- :data="deptSelect"
- :props="defaultProps"
- default-expand-all
- check-strictly
- :render-after-expand="false"
- @change="handleDept"
- @node-click="handleNodeDeptClick"
- />
- </el-form-item>
- <el-form-item label="员工名称" label-position="top">
- <el-select
- v-model="formLabelAlign.userId"
- :disabled="disabledShow"
- filterable
- placeholder="请选择"
- @change="handleUser"
- >
- <el-option
- v-for="(item, index) in userSelect"
- :key="index"
- :label="item.realName"
- :value="item.hospitalCode"
- />
- </el-select>
- </el-form-item>
- <el-form-item label="分子" label-position="top">
- <el-input
- v-model="formLabelAlign.numerator"
- :disabled="disabledShow"
- autocomplete="off"
- placeholder="请输入"
- />
- </el-form-item>
- <el-form-item label="分母" label-position="top">
- <el-input
- v-model="formLabelAlign.denominator"
- :disabled="disabledShow"
- autocomplete="off"
- placeholder="请输入"
- />
- </el-form-item>
- <el-form-item label="值" label-position="top">
- <el-input
- v-model="formLabelAlign.dataValue"
- :disabled="disabledShow"
- autocomplete="off"
- placeholder="请输入"
- />
- </el-form-item>
- <el-form-item
- label="数据时间"
- prop="specificTime"
- label-position="top"
- >
- <el-date-picker
- v-model="formLabelAlign.specificTime"
- :disabled="disabledShow"
- type="date"
- placeholder="请选择日期"
- />
- </el-form-item>
- </el-form>
- </div>
- </template>
- <template #footer>
- <el-button v-if="disabledShow" type="warning" @click="editClick"
- >编辑</el-button
- >
- <div v-else>
- <el-button @click="cancelClick">取消</el-button>
- <el-button type="primary" @click="confirmClick">确认</el-button>
- </div>
- </template>
- </el-drawer>
- </div>
- </template>
|