Browse Source

no message

xiaochan 3 months ago
parent
commit
430bd9d733

+ 15 - 0
src/utils/xe-utils-enhance/vxe-formatter.ts

@@ -3,6 +3,7 @@ import XEUtils from "xe-utils";
 import { treeSearch } from "@/utils/xe-utils-enhance/array-utils";
 import { Ref, unref } from "vue";
 import { JSEncrypt } from "jsencrypt";
+import { stringIsBlank } from "@/utils/blank-utils";
 
 function addVxeTableFormats() {
   VxeUI.formats.add("formatDate", {
@@ -79,6 +80,20 @@ const mixin = {
 
     return encryptedValue;
   },
+  charLength(value: string, length, empty = false) {
+    if (stringIsBlank(value) && empty) {
+      return true;
+    }
+    // 计算实际长度(中文2,英文/数字1)
+    let realLength = 0;
+    for (let i = 0; i < value.length; i++) {
+      const charCode = value.charCodeAt(i);
+      // 中文范围:0x4E00-0x9FA5(扩展中文可调整范围)
+      realLength += charCode >= 0x4e00 && charCode <= 0x9fa5 ? 2 : 1;
+    }
+
+    return realLength <= maxLength;
+  },
 };
 
 class XEUtilsMixinClass {

+ 193 - 0
src/views/dictionary/orderZdMaintain/compoents/order-frequency/EditorDialog.vue

@@ -0,0 +1,193 @@
+<script setup lang="ts">
+import XEUtils from "xe-utils";
+import type { FormRules } from "element-plus";
+
+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"));
+      },
+      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);
+  }
+}
+
+function changeDay(val, name) {
+  if (val) {
+    props.info[name] = 1;
+  } else {
+    props.info[name] = null;
+  }
+}
+
+const days = ["一", "二", "三", "四", "五", "六", "日"];
+
+function changeWeek(val, index) {
+  if (val) {
+    props.info[`week${index}`] = "Y";
+  } else {
+    props.info[`week${index}`] = "N";
+  }
+}
+
+function getWekk(item: number) {
+  item -= 1;
+  return `周${days[item]}`;
+}
+</script>
+
+<template>
+  <el-form
+    inline
+    label-width="120px"
+    size="default"
+    style="height: 100%; overflow: auto"
+    :rules="rules"
+    :model="info"
+  >
+    <el-form-item label="编码:" prop="code">
+      <el-input v-model="info.code" show-word-limit />
+    </el-form-item>
+    <el-form-item label="名称:" prop="comm">
+      <el-input v-model="info.comm" maxlength="10" show-word-limit />
+    </el-form-item>
+    <el-form-item label="打印名称:" prop="printName">
+      <el-input v-model="info.printName" maxlength="5" />
+    </el-form-item>
+    <el-form-item label="每周:">
+      <el-switch
+        v-model="info.weekDay"
+        active-value="Y"
+        inactive-value="N"
+        active-text="是"
+        inactive-text="否"
+      />
+    </el-form-item>
+    <el-form-item label="停用:">
+      <el-switch
+        v-model="props.info.delFlag"
+        active-value="1"
+        inactive-value="0"
+        active-text="是"
+        inactive-text="否"
+      />
+    </el-form-item>
+    <template v-for="item in sort" :key="item">
+      <el-divider v-if="!item.startsWith('day')">
+        {{ item }}
+      </el-divider>
+
+      <el-form-item v-else :label="getLabelName(item)">
+        <el-checkbox
+          :model-value="props.info[item] != null"
+          @update:modelValue="val => changeDay(val, item)"
+        />
+      </el-form-item>
+    </template>
+    <el-divider> 星期</el-divider>
+    <template v-for="value in 7">
+      <el-form-item :label="getWekk(value)">
+        <el-checkbox
+          :model-value="props.info[`week${value}`] === 'Y'"
+          @update:modelValue="val => changeWeek(val, value)"
+        />
+      </el-form-item>
+    </template>
+    <el-divider> 其他</el-divider>
+    <el-form-item label="时间标志:">
+      <el-switch
+        active-text="持续"
+        inactive-text="普通"
+        active-value="1"
+        inactive-value="0"
+        v-model="info.specialFlag"
+      />
+    </el-form-item>
+  </el-form>
+</template>
+
+<style lang="scss"></style>

+ 80 - 0
src/views/dictionary/orderZdMaintain/compoents/order-frequency/index.vue

@@ -0,0 +1,80 @@
+<script setup lang="ts">
+import { selectOrderFrequency } from "@/api/orderZdMaintain";
+import { useDialog } from "@/components/cy/CyDialog/index";
+import EditorDialog from "./EditorDialog.vue";
+
+const store = reactive({
+  data: [],
+  search: "",
+});
+
+function handleSelectOrderFrequency() {
+  selectOrderFrequency().then(res => {
+    store.data = res;
+    console.log(res);
+  });
+}
+
+const tmpData = computed(() => {
+  return store.data;
+});
+
+function changeDelFlag(val, row) {
+  if (val) {
+    row.delFlag = "1";
+  } else {
+    row.delFlag = "0";
+  }
+}
+
+function handleEdit(row) {
+  useDialog(EditorDialog, {
+    dialogProps: {
+      fullscreen: true,
+      title: "频率",
+    },
+    params: {
+      info: row,
+    },
+  });
+}
+
+onMounted(() => {
+  handleSelectOrderFrequency();
+});
+</script>
+
+<template>
+  <div class="layout_container">
+    <header>
+      <el-input v-model="store.search" clearable style="width: 220px" />
+      <el-button @click="handleSelectOrderFrequency">查询</el-button>
+    </header>
+    <div class="layout_main">
+      <vxe-table
+        keep-source
+        height="100%"
+        :data="store.data"
+        :edit-config="{ mode: 'row', trigger: 'manual', autoClear: false }"
+      >
+        <vxe-column field="delFlag" title="停用">
+          <template #default="{ row }">
+            <el-checkbox
+              :model-value="row.delFlag == '1'"
+              @update:modelValue="val => changeDelFlag(val, row)"
+            />
+          </template>
+        </vxe-column>
+        <vxe-column field="code" title="编码"></vxe-column>
+        <vxe-column field="comm" title="名称"></vxe-column>
+        <vxe-column title="操作">
+          <template #default="{ row }">
+            <el-button @click="handleEdit(row)">编辑</el-button>
+          </template>
+        </vxe-column>
+      </vxe-table>
+    </div>
+  </div>
+</template>
+
+<style lang="scss"></style>