|
|
@@ -0,0 +1,192 @@
|
|
|
+<template>
|
|
|
+ <el-table
|
|
|
+ :data="data"
|
|
|
+ border
|
|
|
+ class="scheme-table"
|
|
|
+ :header-cell-style="headerCellStyle"
|
|
|
+ :cell-style="{ verticalAlign: 'top' }"
|
|
|
+ >
|
|
|
+ <el-table-column prop="code" label="农事编码" min-width="100" fixed header-align="center">
|
|
|
+ <template #default="{ row }">{{ row.code || "编码" }}</template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="name" label="农事名称" min-width="110" header-align="center" />
|
|
|
+ <el-table-column prop="trigger" label="触发条件" min-width="180" header-align="center" />
|
|
|
+ <el-table-column label="农事研判" min-width="140" header-align="center">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <div class="plain-text">{{ formatJudgment(row) }}</div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="农事处方" min-width="200" header-align="center">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <div class="plain-text">{{ formatPrescription(row) }}</div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="执行参数" min-width="160" header-align="center">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <div class="plain-text">{{ formatExecuteParams(row) }}</div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="注意事项" min-width="160" header-align="center">
|
|
|
+ <template #default="{ row }">{{ row.execute?.notes || row.notes || "注意事项" }}</template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="执行反馈要求" min-width="130" prop="feedback" header-align="center">
|
|
|
+ <template #default="{ row }">{{ row.feedback || "内容" }}</template>
|
|
|
+ </el-table-column>
|
|
|
+
|
|
|
+ <el-table-column label="土壤应对情况" align="center" header-align="center">
|
|
|
+ <el-table-column label="土壤偏酸" min-width="90" align="center" header-align="center">
|
|
|
+ <template #default="{ row }">{{ cellContent(row, "soil", "acid") }}</template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="土壤偏碱" min-width="90" align="center" header-align="center">
|
|
|
+ <template #default="{ row }">{{ cellContent(row, "soil", "alkaline") }}</template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="沙土/偏沙" min-width="100" align="center" header-align="center">
|
|
|
+ <template #default="{ row }">{{ cellContent(row, "soil", "sand") }}</template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="壤土" min-width="80" align="center" header-align="center">
|
|
|
+ <template #default="{ row }">{{ cellContent(row, "soil", "loam") }}</template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="壤偏黏/黏土" min-width="110" align="center" header-align="center">
|
|
|
+ <template #default="{ row }">{{ cellContent(row, "soil", "clay") }}</template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table-column>
|
|
|
+
|
|
|
+ <el-table-column label="长势应对情况" align="center" header-align="center">
|
|
|
+ <el-table-column label="长势偏旺" min-width="90" align="center" header-align="center">
|
|
|
+ <template #default="{ row }">{{ cellContent(row, "growth", "strong") }}</template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="长势偏弱" min-width="90" align="center" header-align="center">
|
|
|
+ <template #default="{ row }">{{ cellContent(row, "growth", "weak") }}</template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table-column>
|
|
|
+
|
|
|
+ <el-table-column label="气象应对情况" align="center" header-align="center">
|
|
|
+ <el-table-column label="高温" min-width="80" align="center" header-align="center">
|
|
|
+ <template #default="{ row }">{{ cellContent(row, "weather", "hot") }}</template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="降雨" min-width="80" align="center" header-align="center">
|
|
|
+ <template #default="{ row }">{{ cellContent(row, "weather", "rain") }}</template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="低温" min-width="80" align="center" header-align="center">
|
|
|
+ <template #default="{ row }">{{ cellContent(row, "weather", "cold") }}</template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="大风" min-width="80" align="center" header-align="center">
|
|
|
+ <template #default="{ row }">{{ cellContent(row, "weather", "wind") }}</template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table-column>
|
|
|
+
|
|
|
+ <el-table-column v-if="showOps" label="操作" width="190" fixed="right" align="center" header-align="center">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <div class="row-ops">
|
|
|
+ <el-button class="row-ops__btn" @click="$emit('edit', row)">编辑</el-button>
|
|
|
+ <el-button class="row-ops__btn" @click="$emit('detail', row)">详情</el-button>
|
|
|
+ <el-button class="row-ops__btn row-ops__btn--danger" type="danger" @click="$emit('delete', row)">
|
|
|
+ 删除
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup>
|
|
|
+defineProps({
|
|
|
+ data: {
|
|
|
+ type: Array,
|
|
|
+ default: () => [],
|
|
|
+ },
|
|
|
+ showOps: {
|
|
|
+ type: Boolean,
|
|
|
+ default: false,
|
|
|
+ },
|
|
|
+});
|
|
|
+
|
|
|
+defineEmits(["edit", "detail", "delete"]);
|
|
|
+
|
|
|
+const headerCellStyle = {
|
|
|
+ background: "#F5F5F5",
|
|
|
+ color: "#535353",
|
|
|
+ fontWeight: 400,
|
|
|
+};
|
|
|
+
|
|
|
+const formatJudgment = (row) => {
|
|
|
+ if (row.types?.length) return row.types.join("\n");
|
|
|
+ return row.judgment || "具体处方";
|
|
|
+};
|
|
|
+
|
|
|
+const formatPrescription = (row) => {
|
|
|
+ const item = row.prescription;
|
|
|
+ if (!item) return "处方";
|
|
|
+ const lines = [];
|
|
|
+ if (item.category) lines.push(item.category);
|
|
|
+ if (item.lines?.length) lines.push(...item.lines);
|
|
|
+ if (item.desc) lines.push(item.desc);
|
|
|
+ if (item.freq) lines.push(item.freq);
|
|
|
+ return lines.join("\n") || "处方";
|
|
|
+};
|
|
|
+
|
|
|
+const formatExecuteParams = (row) => {
|
|
|
+ const execute = row.execute;
|
|
|
+ if (!execute) return "参数";
|
|
|
+ const lines = [];
|
|
|
+ if (execute.window) lines.push(execute.window);
|
|
|
+ if (execute.devices?.length) lines.push(...execute.devices);
|
|
|
+ if (execute.primaryDevices?.length) {
|
|
|
+ lines.push(`主要设备: ${execute.primaryDevices.join("、")}`);
|
|
|
+ }
|
|
|
+ if (execute.backupDevices?.length) {
|
|
|
+ lines.push(`备用设备: ${execute.backupDevices.join("、")}`);
|
|
|
+ }
|
|
|
+ return lines.join("\n") || "参数";
|
|
|
+};
|
|
|
+
|
|
|
+const cellContent = (row, group, key) => row?.[group]?.[key] || "内容";
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+$primary: $warning-color;
|
|
|
+
|
|
|
+.scheme-table {
|
|
|
+ color: #000;
|
|
|
+
|
|
|
+ .plain-text {
|
|
|
+ white-space: pre-line;
|
|
|
+ line-height: 1.6;
|
|
|
+ }
|
|
|
+
|
|
|
+ .row-ops {
|
|
|
+ display: flex;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ gap: 8px;
|
|
|
+
|
|
|
+ &__btn {
|
|
|
+ margin: 0;
|
|
|
+ height: 28px;
|
|
|
+ padding: 0 10px;
|
|
|
+ font-size: 13px;
|
|
|
+ color: #4c4c4c;
|
|
|
+ background: #fff;
|
|
|
+ border: 1px solid #d2d2d2;
|
|
|
+ border-radius: 2px;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ color: $primary;
|
|
|
+ border-color: rgba($primary, 0.45);
|
|
|
+ background: rgba($primary, 0.06);
|
|
|
+ }
|
|
|
+
|
|
|
+ &--danger {
|
|
|
+ color: #fff;
|
|
|
+ background: #f56b6b;
|
|
|
+ border-color: #f56b6b;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ color: #fff;
|
|
|
+ background: #f78989;
|
|
|
+ border-color: #f78989;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|