- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
网上找的没有满意的,决定从若依前后端分离其前端vue2中的crontab进行转换,先上效果 。
若依:
改后:
。
。
v2转v3没什么难度,其中有大量的将 this.*** 替换为 ***.value,笔者写了个正则替换,希望可以帮助大家 。
this.(\w+) $1.value
。
需要注意的有,在v2中【this.$refs[refName].cycle01 = indexArr[0]】这样写 。
在v3中要转换一下,在子组件中用【defineExpose】抛出一个setData方法,然后【proxy.$refs[refName].setData("cycle01", Number(indexArr[0]))】赋值 。
。
贴出核心Crontab.vue的代码,其子组件就不一一贴了,需要的可以自己下若依代码进行转换 。
<template> <div class="crontab"> <el-tabs type="border-card"> <el-tab-pane label="秒"> <CrontabSecond @update="updateCrontabValue" v-model:check="checkNumber" v-model:cron="crontabValueObj" ref="cronsecond" /> </el-tab-pane> <el-tab-pane label="分钟"> <CrontabMin @update="updateCrontabValue" v-model:check="checkNumber" v-model:cron="crontabValueObj" ref="cronmin" /> </el-tab-pane> <el-tab-pane label="小时"> <CrontabHour @update="updateCrontabValue" v-model:check="checkNumber" v-model:cron="crontabValueObj" ref="cronhour" /> </el-tab-pane> <el-tab-pane label="日"> <CrontabDay @update="updateCrontabValue" v-model:check="checkNumber" v-model:cron="crontabValueObj" ref="cronday" /> </el-tab-pane> <el-tab-pane label="月"> <CrontabMonth @update="updateCrontabValue" v-model:check="checkNumber" v-model:cron="crontabValueObj" ref="cronmonth" /> </el-tab-pane> <el-tab-pane label="周"> <CrontabWeek @update="updateCrontabValue" v-model:check="checkNumber" v-model:cron="crontabValueObj" ref="cronweek" /> </el-tab-pane> <el-tab-pane label="年"> <CrontabYear @update="updateCrontabValue" v-model:check="checkNumber" v-model:cron="crontabValueObj" ref="cronyear" /> </el-tab-pane> </el-tabs> <div class="crontab-main"> <div class="crontab-main-table"> <table> <thead> <th v-for="item of tabTitles" width="40" :key="item">{{item}}</th> <!-- <th>Cron 表达式</th> --> </thead> <tbody> <td> <span>{{crontabValueObj.second}}</span> </td> <td> <span>{{crontabValueObj.min}}</span> </td> <td> <span>{{crontabValueObj.hour}}</span> </td> <td> <span>{{crontabValueObj.day}}</span> </td> <td> <span>{{crontabValueObj.month}}</span> </td> <td> <span>{{crontabValueObj.week}}</span> </td> <td> <span>{{crontabValueObj.year}}</span> </td> <!-- <td> <span>{{crontabValueString}}</span> </td> --> </tbody> </table> <table> <thead> <th>Cron 表达式</th> </thead> <tbody> <td> <span>{{crontabValueString}}</span> </td> </tbody> </table> </div> <div class="crontab-main-result"> <CrontabResult v-model:ex="crontabValueString"></CrontabResult> </div> </div> </div> </template> <script setup name="Crontab"> import CrontabSecond from "./crontab/CrontabSecond.vue"; import CrontabMin from "./crontab/CrontabMin.vue"; import CrontabHour from "./crontab/CrontabHour.vue"; import CrontabDay from "./crontab/CrontabDay.vue"; import CrontabMonth from "./crontab/CrontabMonth.vue"; import CrontabWeek from "./crontab/CrontabWeek.vue"; import CrontabYear from "./crontab/CrontabYear.vue"; import CrontabResult from "./crontab/CrontabResult.vue"; const { proxy } = getCurrentInstance(); const emits = defineEmits(["hide", "fill"]); const props = defineProps({ expression: {type: String, default: ""} }) const tabTitles = ref(["秒", "分钟", "小时", "日", "月", "周", "年"]) const tabActive = ref(0) const crontabValueObj = ref({ second: "*", min: "*", hour: "*", day: "*", month: "*", week: "?", year: "", }) const crontabValueString = computed(() => { let obj = crontabValueObj.value; let str = obj.second + " " + obj.min + " " + obj.hour + " " + obj.day + " " + obj.month + " " + obj.week + (obj.year == "" ? "" : " " + obj.year); return str; }) onMounted(() => { resolveExp(); }) watch(() => props.expression, (v) => { resolveExp(); }); function resolveExp() { // 反解析 表达式 if (props.expression) { let arr = props.expression.split(" "); if (arr.length >= 6) { //6 位以上是合法表达式 let obj = { second: arr[0], min: arr[1], hour: arr[2], day: arr[3], month: arr[4], week: arr[5], year: arr[6] ? arr[6] : "", }; crontabValueObj.value = { ...obj, }; for (let i in obj) { if (obj[i]) changeRadio(i, obj[i]); } } } else { // 没有传入的表达式 则还原 clearCron(); } } // tab切换值 function tabCheck(index) { tabActive.value = index; } // 由子组件触发,更改表达式组成的字段值 function updateCrontabValue(name, value, from) { // "updateCrontabValue", name, value, from; crontabValueObj.value[name] = value; if (from && from !== name) { console.log(`来自组件 ${from} 改变了 ${name} ${value}`); changeRadio(name, value); } } // 赋值到组件 function changeRadio(name, value) { let arr = ["second", "min", "hour", "month"] let refName = "cron" + name let insValue; if (!proxy.$refs[refName]) return; if (arr.includes(name)) { if (value === "*") { insValue = 1; } else if (value.indexOf("-") > -1) { let indexArr = value.split("-"); isNaN(indexArr[0]) ? (proxy.$refs[refName].setData("cycle01", 0)) : (proxy.$refs[refName].setData("cycle01", Number(indexArr[0]))); proxy.$refs[refName].setData("cycle02", Number(indexArr[1])); insValue = 2; } else if (value.indexOf("/") > -1) { let indexArr = value.split("/"); isNaN(indexArr[0]) ? (proxy.$refs[refName].setData("average01", 0)) : (proxy.$refs[refName].setData("average01", Number(indexArr[0]))); proxy.$refs[refName].setData("average02", Number(indexArr[1])); insValue = 3; } else { insValue = 4; let list = value.split(","); for(let item of list){ item = String(item) } proxy.$refs[refName].setData("checkboxList", list); } } else if (name == "day") { if (value === "*") { insValue = 1; } else if (value == "?") { insValue = 2; } else if (value.indexOf("-") > -1) { let indexArr = value.split("-"); isNaN(indexArr[0]) ? (proxy.$refs[refName].setData("cycle01", 0)) : (proxy.$refs[refName].setData("cycle01", Number(indexArr[0]))); proxy.$refs[refName].setData("cycle02", Number(indexArr[1])); insValue = 3; } else if (value.indexOf("/") > -1) { let indexArr = value.split("/"); isNaN(indexArr[0]) ? (proxy.$refs[refName].setData("average01", 0)) : (proxy.$refs[refName].setData("average01", Number(indexArr[0]))); proxy.$refs[refName].setData("average02", Number(indexArr[1])); insValue = 4; } else if (value.indexOf("W") > -1) { let indexArr = value.split("W"); isNaN(indexArr[0]) ? (proxy.$refs[refName].setData("workday", 0)) : (proxy.$refs[refName].setData("workday", Number(indexArr[0]))); insValue = 5; } else if (value === "L") { insValue = 6; } else { let list = value.split(","); for(let item of list){ item = String(item) } proxy.$refs[refName].setData("checkboxList", list); insValue = 7; } } else if (name == "week") { if (value === "*") { insValue = 1; } else if (value == "?") { insValue = 2; } else if (value.indexOf("-") > -1) { let indexArr = value.split("-"); isNaN(indexArr[0]) ? (proxy.$refs[refName].setData("cycle01", "0")) : (proxy.$refs[refName].setData("cycle01", String(indexArr[0]))); proxy.$refs[refName].setData("cycle02", String(indexArr[1])); insValue = 3; } else if (value.indexOf("#") > -1) { let indexArr = value.split("#"); isNaN(indexArr[0]) ? (proxy.$refs[refName].setData("average01", 1)) : (proxy.$refs[refName].setData("average01", Number(indexArr[0]))); proxy.$refs[refName].setData("average02", String(indexArr[1])); insValue = 4; } else if (value.indexOf("L") > -1) { let indexArr = value.split("L"); isNaN(indexArr[0]) ? (proxy.$refs[refName].setData("weekday", "1")) : (proxy.$refs[refName].setData("weekday", String(indexArr[0]))); insValue = 5; } else { let list = value.split(","); for(let item of list){ item = String(item) } proxy.$refs[refName].setData("checkboxList", list); insValue = 6; } } else if (name == "year") { if (value == "") { insValue = 1; } else if (value == "*") { insValue = 2; } else if (value.indexOf("-") > -1) { insValue = 3; } else if (value.indexOf("/") > -1) { insValue = 4; } else { let list = value.split(","); for(let item of list){ item = String(item) } proxy.$refs[refName].setData("checkboxList", list); insValue = 5; } } proxy.$refs[refName].setData("radioValue", insValue); } // 表单选项的子组件校验数字格式(通过-props传递) function checkNumber(value, minLimit, maxLimit) { // 检查必须为整数 value = Math.floor(Number(value)); if (value < minLimit) { value = minLimit; } else if (value > maxLimit) { value = maxLimit; } return value; } // 隐藏弹窗 function hidePopup() { emits("hide"); } // 填充表达式 function submitFill() { emits("fill", crontabValueString); hidePopup(); } function clearCron() { // 还原选择项 ("准备还原"); crontabValueObj.value = { second: "*", min: "*", hour: "*", day: "*", month: "*", week: "?", year: "", }; for (let j in crontabValueObj.value) { changeRadio(j, crontabValueObj.value[j]); } } defineExpose({ submitFill, clearCron }) </script> <style scoped> .crontab{ flex: 1; height: 100%; display: flex; flex-direction: column; } .crontab-main { flex: 1; width: 100%; margin: 10px auto; background: #fff; border-radius: 5px; font-size: 12px; border: 1px solid #ccc; box-sizing: border-box; line-height: 24px; padding: 5px 10px 5px; display: flex; justify-content: space-between; overflow-y: auto; } .crontab-main-table { box-sizing: border-box; line-height: 24px; padding: 5px 10px 5px; width: 50%; display: flex; flex-direction: column; justify-content: space-around; table { text-align: center; width: 100%; margin: 0; span { display: block; width: 100%; font-family: arial; line-height: 30px; height: 30px; white-space: nowrap; overflow: hidden; border: 1px solid #e8e8e8; } } } .crontab-main-result { box-sizing: border-box; padding: 5px 10px 5px; background-color: #f1f1f1; background-size: cover; width: 48%; display: flex; flex-direction: column; .crontab-result-title{ padding: 5px; } :deep(.crontab-result-scroll) { font-size: 12px; line-height: 24px; margin: 0 !important; padding-left: 80px; } } .crontab-footer { text-align: right; height: 25px; padding: 5px 20px; } </style>
。
将原来组件的按钮移到引用存,引用样例 。
<el-dialog title="Cron表达式生成器" v-model="formCrontabOpen" append-to-body destroy-on-close class="nine-tanchuang-001"> <!-- <crontab @change="cronChange" v-model:value="formData.cronExpression" /> --> <Crontab ref="crontabRef" @hide="formCrontabOpen=false" @fill="crontabFill" v-model:expression="formData.cronExpression"></Crontab> <template #footer> <div class="dialog-footer"> <el-button type="primary" @click="formCrontSubmit">确 定</el-button> <el-button type="warning" @click="formCrontReset">重 置</el-button> <el-button @click="formCrontabOpen=false">取 消</el-button> </div> </template> </el-dialog>
。
最后此篇关于基于vue3的Crontab组件的文章就讲到这里了,如果你想了解更多关于基于vue3的Crontab组件的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我在 CentO 上以 root 身份登录。 如果我这样做 crontab -e ,我有一个空文件。 如果我这样做 cat /etc/crontab ,我有一个包含命令的文件。 这怎么可能? 任何的想
我有以下 cron 作业命令: * * * * * /usr/bin/lynx -term=vt100 http://abc.com/dir1/di2/script.php?action=add&co
我最近要在crontab中执行docker-compose命令时遇到问题。 我有一个docker-compose YAML文件,该文件定义了我需要的所有服务,例如“docker-compose.yml
如果您有一个每 5 分钟运行一次的 crontab 作业,您如何确保它永远不会超限?也就是说,您如何确保 crontab 作业的前一次迭代在下一次运行之前完成? 最佳答案 在脚本的开头,在文件系统的某
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
或许还有另一种解决方案。我构建了一个网络应用程序,需要 5-10 个 cron 来保持它的维护和不同的间隔。我想将 crontab checkin 版本控制,以便轻松部署到其他服务器。 我希望能够在/
我有一个带两个参数的命令。 当我手动运行命令时,我是这样做的: cmd -i xyz.dat hit enter enter password in the prompt hit enter conf
我在树莓派上,使用 rasbpian ! 我正在尝试安装一个新的 crontab 来执行基本脚本。这将使用 vlc 从网络摄像头拍摄一张照片。 我想每分钟都这样做,但我无法编辑我的 crontab 用
我想通过在我的服务器中执行此操作来添加一个 crontab 计划: echo "30 * * * */home/my/var/dir/to/script/var/etc/etc/etc/"> cron
将文本通过管道传输到 crontab 与 crontab 之间有什么区别 - (我认为确认它使用标准输入)? 在我的 Linux 机器上,执行 cat "1 0 0 0 0 something" |
我有一个 crontab 设置为 execute the 0th minute of every 3rd hour every day crontab 的语法是: 0 */3 * * * perl t
我使用 GENTOO 发行版。 crontab -e 35 12 * * * root php5 /home/www/cron.php 当我手动运行时: php5 php5 /home/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
假设我有一个 crontab,它每 20 运行一次分钟,我有一个可以变化的小时范围,所以让我们说 a-b ,在一个例子中可能看起来像 */20 5-23 * * * /usr/bin/cool_pro
我在 Win7 中使用的是 cygwin 版本 2.3.1(0.291/5/3),并且已经尝试了几个小时让我的 crontab 计划作业运行。在我看来,可能成为问题的是我的 cron 进程和我的 cr
我想知道如果我将 crontab 添加到 /etc/crontab 或 crontab -e 是否重要? 我有一个 Ubuntu 17 和 Debian 9 VM 正在运行,我不知道哪个是正确的地方。
我尝试了以下命令,crontab 停止运行任何作业:echo "@reboot/bin/echo 'test' >/home/user/test.sh"|定时任务- 在 Linux 中将作业添加到 c
我想寻求有关 python-crontab 模块的帮助。我有一个简单的 shell 脚本,可以使用 curl 命令录制互联网广播流。我想通过在 crontab 中安排录制来提前安排录制。我找到了允许我
我将在这里扩展我的问题: 当包括 root 在内的每个用户都有自己的 crontab 时,系统 crontab 的需求是什么?系统 crontab 的存在似乎重复了功能。系统 crontab 是否更像
我想在我的 Capistrano 部署文件中包含 cron 任务,而不是使用以下命令手动编辑 crontab 文件: crontab -e [username] 是否有我可以在 Capistrano
我是一名优秀的程序员,十分优秀!