vue3 两份json数据对比不同的页面给于颜色标识

两份数据对比,新的跟旧的数据不一样页面就给于颜色标识

1. 给每个表单控件添加动态样式标识 :class="hasChanged(字段名称)"

javascript 复制代码
 <div class="container">
    <el-row>
      <el-col :span="12">
        <el-form :model="form" label-width="auto" style="max-width: 600px">
          <el-form-item label="Activity name">
            <el-input v-model="form.name" :class="hasChanged('name')"/>
          </el-form-item>
          <el-form-item label="Activity zone">
            <el-select v-model="form.region" placeholder="please select your zone" :class="hasChanged('region')">
              <el-option label="Zone one" value="shanghai" />
              <el-option label="Zone two" value="beijing" />
            </el-select>
          </el-form-item>
          <el-form-item label="Activity">
            <el-input v-model="form.activity" :class="hasChanged('activity')"/>
          </el-form-item>
          <el-form-item label="Instant delivery">
            <el-switch v-model="form.delivery" :class="hasChanged('delivery')"/>
          </el-form-item>
          <el-form-item label="Resources">
            <el-radio-group v-model="form.resource" :class="hasChanged('resource')">
              <el-radio value="Sponsor">Sponsor</el-radio>
              <el-radio value="Venue">Venue</el-radio>
            </el-radio-group>
          </el-form-item>
          <el-form-item label="Activity form">
            <el-input v-model="form.desc" type="textarea" :class="hasChanged('desc')" />
          </el-form-item>
        </el-form>
      </el-col>
      <!-- 第二个 -->
      <el-col :span="12">
        <el-form :model="form2" label-width="auto" style="max-width: 600px">
          <el-form-item label="Activity name">
            <el-input v-model="form2.name"/>
          </el-form-item>
          <el-form-item label="Activity zone">
            <el-select v-model="form2.region" placeholder="please select your zone">
              <el-option label="Zone one" value="shanghai" />
              <el-option label="Zone two" value="beijing" />
            </el-select>
          </el-form-item>
          <el-form-item label="Activity">
            <el-input v-model="form2.activity"/>
          </el-form-item>
          <el-form-item label="Instant delivery">
            <el-switch v-model="form2.delivery" />
          </el-form-item>
          <el-form-item label="Resources">
            <el-radio-group v-model="form2.resource">
              <el-radio value="Sponsor">Sponsor</el-radio>
              <el-radio value="Venue">Venue</el-radio>
            </el-radio-group>
          </el-form-item>
          <el-form-item label="Activity form">
            <el-input v-model="form2.desc" type="textarea" />
          </el-form-item>
        </el-form>
      </el-col>
    </el-row>
  </div>

2. 两份数据进行对比 如果想同的话 以字段名为key 添加 markData字段名 = { status: 'hasChanged' } 不相同的话 添加 markData字段名 = { status: 'noChanged' }

javascript 复制代码
// 新的
const form = ref({
  name: '',
  region: '',
  activity: '',
  delivery: false,
  resource: '',
  desc: '',
})
// 老的
const form2 = ref({
  name: '',
  region: '',
  activity: '',
  delivery: false,
  resource: '',
  desc: '',
})
// 新的数据
 const newData = {
   name: 'test',
   region: 'test',
   activity: 'testst',
   delivery: false,
   resource: 'Sponsor',
   desc: 'asddasdasd',
 }
// 老的数据
 const oldData = {
   name: 'test1',
   region: 'test',
   activity: 'testst',
   delivery: true,
   resource: 'Sponsor',
   desc: 'asddasdasd11',
 }

3. 对比方法

javascript 复制代码
// 对比后生成新的数据
const compareData = ref({})
// 对比方法
const compareFun = (newData, oldData) => {
  const dataA = { ...newData }
  const dataB = { ...oldData }
  const markData = {}
  Object.keys(dataA).forEach((key) => {
    markData[key] = {}
    if (dataA[key] !== dataB[key]) {
      markData[key] = { status: 'hasChanged'}
    } else {
      markData[key] = { status: 'noChanged'}
    }
  })
  compareData.value = markData
}

4. 使用计算属性给每个表单控件添加对应的class

javascript 复制代码
const hasChanged = computed(() => (key) => {
  if (!compareData.value[key]) return ''
  return compareData.value[key].status
})

5. 对比差异的数据给于颜色标识样式

javascript 复制代码
.hasChanged {
  :deep(.el-input__wrapper) {
    background-color: #f2ac51;
  }
  :deep(.el-input__inner) {
    color: #d9001b;
  }
  :deep(.el-select__wrapper) {
    background-color: #f2ac51;
  }
  :deep(.el-select__placeholder) {
    color: #d9001b;
  }
  :deep(.el-textarea__inner) {
    background-color: #f2ac51;
    color: #d9001b;
  }
  :deep(.el-switch__core) {
    background-color: #f2ac51;
  }
  :deep(.el-radio) {
    background-color: #f2ac51;
  }
}
相关推荐
cjy0001119 分钟前
2026AI 产品如何从一次性 Demo 变成可重复使用的业务工具?
前端·人工智能·fde
IT_陈寒15 分钟前
React的状态更新坑得我差点加班到天亮
前端·人工智能·后端
风骏时光牛马26 分钟前
深挖底层逻辑:XX源码深度拆解分析
前端
电商API_1800790524742 分钟前
电商商品价格监控工具淘宝京东商品价格抓取API项目实操分享
java·大数据·开发语言·前端·数据挖掘
sxmas1 小时前
用状态机与DAG建模四阶段业务流程:以MIND模型为例
前端
2601_962066931 小时前
短视频批量制作怎么做?2026年用 huasheng-cli 的 --json 与退出码,一张选题表批量出片
json·音视频
倔强的石头1062 小时前
【Linux指南】动静态库系列(七):符号表与重定位:链接器如何把函数调用接起来
linux·前端·javascript
a1117763 小时前
3D 脑图谱 / Bilingual 3D Brain Atlas 项目
前端
T1mzhou3 小时前
ARM64 Linux 6.10内核启动流程2-rootfs 怎么挂上
linux·服务器·前端
小小尚@4 小时前
WebGIS/ECharts 地图开发|MapLand 在线行政区划边界一键下载 GeoJSON 工具
前端·javascript·echarts