瀏覽代碼

完成执行频率的字典

xiaochan 3 月之前
父節點
當前提交
f3e1690ccd

+ 16 - 20
src/api/orderZdMaintain/index.ts

@@ -1,25 +1,5 @@
 import requestV2 from "@/utils/request-v2";
 
-export interface ZdChargeItemDto {
-  code: string;
-  execUnit: string;
-  name: string;
-  price: number | null; // Using number | null to accommodate potential null values (Double in Java)
-  billItemCode: string;
-  pyCode: string;
-  dCode: string;
-  suppressFlag: string;
-  billItemOut: string;
-  nCode: string;
-  selfFlag: string;
-  separateFlag: string;
-  eCode: string;
-  spec: string; // Map from charge_unit
-  execDeptName: string;
-  serial: string;
-  groupNo: string;
-}
-
 export interface YzOrderItemDTO {
   orderClass: string;
   orderClassName: string;
@@ -146,3 +126,19 @@ export function selectOrderFrequency() {
     method: "get",
   });
 }
+
+export function saveOrderFrequency(data) {
+  return requestV2({
+    url: "/orderZdMaintain/saveOrderFrequency",
+    method: "post",
+    data: data,
+  });
+}
+
+export function deleteOrderFrequency(code, delFlag) {
+  return requestV2({
+    url: "/orderZdMaintain/deleteOrderFrequency",
+    method: "get",
+    params: { code, delFlag },
+  });
+}

+ 13 - 2
src/utils/xe-utils-enhance/vxe-formatter.ts

@@ -80,7 +80,7 @@ const mixin = {
 
     return encryptedValue;
   },
-  charLength(value: string, length, empty = false) {
+  charLength(value: string, maxLength, empty = false) {
     if (stringIsBlank(value) && empty) {
       return true;
     }
@@ -91,9 +91,20 @@ const mixin = {
       // 中文范围:0x4E00-0x9FA5(扩展中文可调整范围)
       realLength += charCode >= 0x4e00 && charCode <= 0x9fa5 ? 2 : 1;
     }
-
     return realLength <= maxLength;
   },
+  elRuleCharLength(
+    value: string,
+    callback: () => void,
+    maxLength: number,
+    empty = false
+  ) {
+    if (XEUtils.charLength(value, maxLength, empty)) {
+      return callback();
+    } else {
+      return callback(new Error(`共${maxLength}个字符,中文算两个`));
+    }
+  },
 };
 
 class XEUtilsMixinClass {

+ 67 - 95
src/views/dictionary/orderZdMaintain/compoents/order-frequency/EditorDialog.vue

@@ -1,127 +1,90 @@
 <script setup lang="ts">
 import XEUtils from "xe-utils";
-import type { FormRules } from "element-plus";
+import { ElForm, FormRules } from "element-plus";
+import { useCompShallowRef } from "@/utils/useCompRef";
+import { UseDialogType } from "@/components/cy/CyDialog/index";
+import { BizException, ExceptionEnum } from "@/utils/BizException";
+import { saveOrderFrequency } from "@/api/orderZdMaintain";
+import {
+  frequencySort,
+  frequencyDays,
+  getFrequencyLabelName,
+} from "@/views/dictionary/orderZdMaintain/index";
 
 const props = defineProps<{
   info: any;
 }>();
 
-const sort = [
-  "早上",
-  "day600",
-  "day630",
-  "day700",
-  "day730",
-  "day800",
-  "day830",
-  "day900",
-  "day930",
-  "day1000",
-  "day1030",
-  "day1100",
-  "day1130",
-  "day1200",
-  "day1230",
-  "下午",
-  "day1300",
-  "day1330",
-  "day1400",
-  "day1430",
-  "day1500",
-  "day1530",
-  "day1600",
-  "day1630",
-  "day1700",
-  "day1730",
-  "day1800",
-  "day1830",
-  "day1900",
-  "day1930",
-  "day2000",
-  "day2030",
-  "day2100",
-  "day2130",
-  "day2200",
-  "day2230",
-  "day2300",
-  "day2330",
-  "第二天",
-  "day2400",
-  "day030",
-  "day100",
-  "day130",
-  "day200",
-  "day230",
-  "day300",
-  "day330",
-  "day400",
-  "day430",
-  "day500",
-  "day530",
-];
-
 const rules: FormRules<any> = {
   code: [
     { required: true, trigger: "blur", message: "必填" },
     {
       validator: (rule, value, callback) => {
-        console.log(value);
-        callback(new Error("cw"));
+        XEUtils.elRuleCharLength(value, callback, 10);
+      },
+      trigger: "change",
+    },
+  ],
+  comm: [
+    { required: true, trigger: "blur", message: "必填" },
+    {
+      validator: (rule, value, callback) => {
+        XEUtils.elRuleCharLength(value, callback, 20);
+      },
+      trigger: "change",
+    },
+  ],
+  printName: [
+    { required: true, trigger: "blur", message: "必填" },
+    {
+      validator: (rule, value, callback) => {
+        XEUtils.elRuleCharLength(value, callback, 10);
       },
       trigger: "change",
     },
   ],
-  comm: [{ required: true, trigger: "blur", message: "必填" }],
-  printName: [{ required: true, trigger: "blur", message: "必填" }],
 };
 
-function insertString(originalStr, insertStr, position) {
-  return (
-    originalStr.slice(0, position) + insertStr + originalStr.slice(position)
-  );
-}
-
-function getLabelName(item: string) {
-  const replace = item.replace("day", "");
-  if (replace.length == 4) {
-    const position = 2;
-    const time = XEUtils.toNumber(replace.slice(0, position));
-    const time12 = time - 12;
-    if (time12 >= 0) {
-      return getLabelName(replace.replace(time, time12));
-    }
-    return insertString(replace, ":", position);
-  } else {
-    return insertString(replace, ":", 1);
-  }
-}
+const formRef = useCompShallowRef(ElForm);
 
 function changeDay(val, name) {
   if (val) {
     props.info[name] = 1;
   } else {
-    props.info[name] = null;
+    props.info[name] = 0;
   }
 }
 
-const days = ["一", "二", "三", "四", "五", "六", "日"];
-
 function changeWeek(val, index) {
   if (val) {
-    props.info[`week${index}`] = "Y";
+    props.info[`week${index}`] = 1;
   } else {
-    props.info[`week${index}`] = "N";
+    props.info[`week${index}`] = 0;
   }
 }
 
 function getWekk(item: number) {
   item -= 1;
-  return `周${days[item]}`;
+  return `周${frequencyDays[item]}`;
 }
+
+defineExpose<UseDialogType.Expose>({
+  async confirm() {
+    await formRef.value
+      .validate()
+      .then(() => {
+        saveOrderFrequency(props.info);
+      })
+      .catch(() => {
+        BizException(ExceptionEnum.MESSAGE_ERROR, "请修改有错误的地方");
+      });
+  },
+});
 </script>
 
 <template>
   <el-form
+    ref="formRef"
     inline
     label-width="120px"
     size="default"
@@ -130,21 +93,30 @@ function getWekk(item: number) {
     :model="info"
   >
     <el-form-item label="编码:" prop="code">
-      <el-input v-model="info.code" show-word-limit />
+      <el-input v-model="info.code" />
     </el-form-item>
     <el-form-item label="名称:" prop="comm">
-      <el-input v-model="info.comm" maxlength="10" show-word-limit />
+      <el-input v-model="info.comm" />
     </el-form-item>
     <el-form-item label="打印名称:" prop="printName">
-      <el-input v-model="info.printName" maxlength="5" />
+      <el-input v-model="info.printName" />
     </el-form-item>
-    <el-form-item label="每周:">
+    <el-form-item label="嘱托:">
+      <el-switch
+        v-model="info.selfBuy"
+        active-value="2"
+        inactive-value="0"
+        active-text="是"
+        inactive-text="否"
+      />
+    </el-form-item>
+    <el-form-item label="周/日:">
       <el-switch
         v-model="info.weekDay"
         active-value="Y"
         inactive-value="N"
-        active-text="是"
-        inactive-text="否"
+        active-text=""
+        inactive-text=""
       />
     </el-form-item>
     <el-form-item label="停用:">
@@ -156,14 +128,14 @@ function getWekk(item: number) {
         inactive-text="否"
       />
     </el-form-item>
-    <template v-for="item in sort" :key="item">
+    <template v-for="item in frequencySort" :key="item">
       <el-divider v-if="!item.startsWith('day')">
         {{ item }}
       </el-divider>
 
-      <el-form-item v-else :label="getLabelName(item)">
+      <el-form-item v-else :label="getFrequencyLabelName(item)">
         <el-checkbox
-          :model-value="props.info[item] != null"
+          :model-value="props.info[item] === 1"
           @update:modelValue="val => changeDay(val, item)"
         />
       </el-form-item>
@@ -172,7 +144,7 @@ function getWekk(item: number) {
     <template v-for="value in 7">
       <el-form-item :label="getWekk(value)">
         <el-checkbox
-          :model-value="props.info[`week${value}`] === 'Y'"
+          :model-value="props.info[`week${value}`] === 1"
           @update:modelValue="val => changeWeek(val, value)"
         />
       </el-form-item>

+ 58 - 8
src/views/dictionary/orderZdMaintain/compoents/order-frequency/index.vue

@@ -1,7 +1,15 @@
 <script setup lang="ts">
-import { selectOrderFrequency } from "@/api/orderZdMaintain";
+import {
+  deleteOrderFrequency,
+  selectOrderFrequency,
+} from "@/api/orderZdMaintain";
 import { useDialog } from "@/components/cy/CyDialog/index";
 import EditorDialog from "./EditorDialog.vue";
+import XEUtils from "xe-utils";
+import {
+  frequencySort,
+  getFrequencyLabelName,
+} from "@/views/dictionary/orderZdMaintain/index";
 
 const store = reactive({
   data: [],
@@ -10,6 +18,7 @@ const store = reactive({
 
 function handleSelectOrderFrequency() {
   selectOrderFrequency().then(res => {
+    setDescribe(res);
     store.data = res;
     console.log(res);
   });
@@ -20,11 +29,13 @@ const tmpData = computed(() => {
 });
 
 function changeDelFlag(val, row) {
+  let delFlag = "0";
   if (val) {
-    row.delFlag = "1";
-  } else {
-    row.delFlag = "0";
+    delFlag = "1";
   }
+  deleteOrderFrequency(row.code, delFlag).then(res => {
+    row.delFlag = delFlag;
+  });
 }
 
 function handleEdit(row) {
@@ -39,6 +50,44 @@ function handleEdit(row) {
   });
 }
 
+function setDescribe(res) {
+  if (res.length === 0) {
+    return;
+  }
+
+  XEUtils.each(res, item => {
+    let describeStr = "每日执行:";
+    if (item.weekDay == "Y") {
+      let weekStr = "";
+      for (let i = 0; i < 7; i++) {
+        if (item[`week${i + 1}`] === 1) {
+          weekStr += i + 1 + ",";
+        }
+      }
+      if (weekStr !== "") {
+        weekStr = weekStr.slice(0, -1);
+      }
+
+      describeStr = `每周:【${weekStr}】执行,`;
+    }
+
+    frequencySort.forEach(frequency => {
+      if (frequency.startsWith("day")) {
+        if (item[frequency] === 1) {
+          describeStr += `【${getFrequencyLabelName(frequency)}】`;
+        }
+      } else {
+        describeStr += frequency;
+      }
+    });
+
+    console.log(frequencySort);
+
+    item.describeStr = describeStr;
+    console.log(item);
+  });
+}
+
 onMounted(() => {
   handleSelectOrderFrequency();
 });
@@ -57,7 +106,7 @@ onMounted(() => {
         :data="store.data"
         :edit-config="{ mode: 'row', trigger: 'manual', autoClear: false }"
       >
-        <vxe-column field="delFlag" title="停用">
+        <vxe-column field="delFlag" title="停用" width="50">
           <template #default="{ row }">
             <el-checkbox
               :model-value="row.delFlag == '1'"
@@ -65,9 +114,10 @@ onMounted(() => {
             />
           </template>
         </vxe-column>
-        <vxe-column field="code" title="编码"></vxe-column>
-        <vxe-column field="comm" title="名称"></vxe-column>
-        <vxe-column title="操作">
+        <vxe-column field="code" title="编码" width="120"></vxe-column>
+        <vxe-column field="comm" title="名称" width="220"></vxe-column>
+        <vxe-column title="描述" field="describeStr" />
+        <vxe-column title="操作" width="90" fixed="right">
           <template #default="{ row }">
             <el-button @click="handleEdit(row)">编辑</el-button>
           </template>

+ 77 - 0
src/views/dictionary/orderZdMaintain/index.ts

@@ -1,5 +1,6 @@
 import { reactive } from "vue";
 import { isDev } from "@/utils/public";
+import XEUtils from "xe-utils";
 
 const OrderItem = defineAsyncComponent(
   () => import("./compoents/orderitem/OrderIten.vue")
@@ -13,6 +14,82 @@ const OrderFrequency = defineAsyncComponent(
   () => import("./compoents/order-frequency/index.vue")
 );
 
+export const frequencySort = [
+  "早上",
+  "day600",
+  "day630",
+  "day700",
+  "day730",
+  "day800",
+  "day830",
+  "day900",
+  "day930",
+  "day1000",
+  "day1030",
+  "day1100",
+  "day1130",
+  "day1200",
+  "day1230",
+  "下午",
+  "day1300",
+  "day1330",
+  "day1400",
+  "day1430",
+  "day1500",
+  "day1530",
+  "day1600",
+  "day1630",
+  "day1700",
+  "day1730",
+  "day1800",
+  "day1830",
+  "day1900",
+  "day1930",
+  "day2000",
+  "day2030",
+  "day2100",
+  "day2130",
+  "day2200",
+  "day2230",
+  "day2300",
+  "day2330",
+  "第二天",
+  "day2400",
+  "day030",
+  "day100",
+  "day130",
+  "day200",
+  "day230",
+  "day300",
+  "day330",
+  "day400",
+  "day430",
+  "day500",
+  "day530",
+];
+export const frequencyDays = ["一", "二", "三", "四", "五", "六", "日"];
+
+function insertString(originalStr, insertStr, position) {
+  return (
+    originalStr.slice(0, position) + insertStr + originalStr.slice(position)
+  );
+}
+
+export function getFrequencyLabelName(item: string) {
+  const replace = item.replace("day", "");
+  if (replace.length == 4) {
+    const position = 2;
+    const time = XEUtils.toNumber(replace.slice(0, position));
+    const time12 = time - 12;
+    if (time12 >= 0) {
+      return getFrequencyLabelName(replace.replace(time, time12));
+    }
+    return insertString(replace, ":", position);
+  } else {
+    return insertString(replace, ":", 1);
+  }
+}
+
 export const tabsList = [
   {
     name: "医嘱项目",