Browse Source

first commit

master
孙家正 1 month ago
parent
commit
8c4eaa5ae1
  1. 2
      .env
  2. 2
      .env.dev
  3. 24
      .gitignore
  4. 2
      .npmrc
  5. 17
      .project
  6. 7
      .settings/.jsdtscope
  7. 1
      .settings/org.eclipse.wst.jsdt.ui.superType.container
  8. 1
      .settings/org.eclipse.wst.jsdt.ui.superType.name
  9. 3
      .vscode/extensions.json
  10. 19
      animalStudy.html
  11. 19
      index.html
  12. 42
      package.json
  13. 4074
      pnpm-lock.yaml
  14. BIN
      public/favicon.ico
  15. 59
      src/App.vue
  16. 99
      src/animalStudy/breed/abort.vue
  17. 168
      src/animalStudy/breed/base.vue
  18. 141
      src/animalStudy/breed/calving.vue
  19. 91
      src/animalStudy/breed/checkInfo.vue
  20. 180
      src/animalStudy/breed/detailList.vue
  21. 94
      src/animalStudy/breed/estrus.vue
  22. 99
      src/animalStudy/breed/file.vue
  23. 196
      src/animalStudy/breed/growDevelop.vue
  24. 90
      src/animalStudy/breed/liveTest.vue
  25. 160
      src/animalStudy/breed/mana/detail.vue
  26. 93
      src/animalStudy/breed/mana/index.vue
  27. 238
      src/animalStudy/breed/mana/list.vue
  28. 81
      src/animalStudy/breed/pregnancy.vue
  29. 74
      src/animalStudy/breed/relation.vue
  30. 103
      src/animalStudy/breed/slaughter.vue
  31. 66
      src/animalStudy/dialog.vue
  32. 72
      src/animalStudy/fold.vue
  33. 221
      src/animalStudy/index.vue
  34. 19
      src/animalStudy/main.js
  35. BIN
      src/assets/img/bg_home.png
  36. BIN
      src/assets/img/checkcode.jpg
  37. BIN
      src/assets/img/company_banner.png
  38. BIN
      src/assets/img/complaint_1.png
  39. BIN
      src/assets/img/complaint_bg.png
  40. BIN
      src/assets/img/consult_bg.png
  41. 24
      src/assets/img/consult_bg.svg
  42. BIN
      src/assets/img/dkds.png
  43. BIN
      src/assets/img/famousCompany.png
  44. BIN
      src/assets/img/introduce_1.png
  45. BIN
      src/assets/img/introduce_2.png
  46. BIN
      src/assets/img/introduce_3.png
  47. BIN
      src/assets/img/introduce_bg.png
  48. BIN
      src/assets/img/load_1.gif
  49. BIN
      src/assets/img/login_bg.png
  50. BIN
      src/assets/img/login_bg_1.png
  51. BIN
      src/assets/img/logo.png
  52. BIN
      src/assets/img/noData.png
  53. BIN
      src/assets/img/prodShow_banner.png
  54. BIN
      src/assets/img/ship.png
  55. BIN
      src/assets/img/userHead.png
  56. BIN
      src/assets/img/video_bg.png
  57. BIN
      src/assets/phoneImg/animal_head_title.png
  58. BIN
      src/assets/phoneImg/dialog_head copy.png
  59. BIN
      src/assets/phoneImg/dialog_head.png
  60. BIN
      src/assets/phoneImg/head_banner.png
  61. BIN
      src/assets/phoneImg/head_title.png
  62. BIN
      src/assets/phoneImg/logo.png
  63. BIN
      src/assets/phoneImg/security_bg.png
  64. BIN
      src/assets/phoneImg/weather_1.png
  65. BIN
      src/assets/phoneImg/weather_2.png
  66. BIN
      src/assets/phoneImg/weather_3.png
  67. BIN
      src/assets/phoneImg/weather_4.png
  68. BIN
      src/assets/phoneImg/weather_5.png
  69. BIN
      src/assets/phoneImg/weather_6.png
  70. 24
      src/assets/style/base.less
  71. 153
      src/assets/style/index.less
  72. 191
      src/assets/style/phone.less
  73. 22
      src/assets/style/variables.less
  74. 1
      src/assets/svg/add.svg
  75. 1
      src/assets/svg/address.svg
  76. 3
      src/assets/svg/appointment.svg
  77. 3
      src/assets/svg/area.svg
  78. 9
      src/assets/svg/arrow.svg
  79. 1
      src/assets/svg/base.svg
  80. 3
      src/assets/svg/baseInfo.svg
  81. 1
      src/assets/svg/binding.svg
  82. 7
      src/assets/svg/breedBase.svg
  83. 1
      src/assets/svg/camera.svg
  84. 1
      src/assets/svg/chanpin.svg
  85. 1
      src/assets/svg/company.svg
  86. 1
      src/assets/svg/consumption.svg
  87. 1
      src/assets/svg/cowshed.svg
  88. 1
      src/assets/svg/cub.svg
  89. 1
      src/assets/svg/delete.svg
  90. 4
      src/assets/svg/disabled.svg
  91. 4
      src/assets/svg/echart.svg
  92. 6
      src/assets/svg/echart_bar.svg
  93. 6
      src/assets/svg/editor.svg
  94. 1
      src/assets/svg/email.svg
  95. 3
      src/assets/svg/enable.svg
  96. 1
      src/assets/svg/enviMonitoring.svg
  97. 7
      src/assets/svg/factory.svg
  98. 1
      src/assets/svg/fax.svg
  99. 1
      src/assets/svg/gejizhengfu.svg
  100. 1
      src/assets/svg/mail.svg

2
.env

@ -0,0 +1,2 @@
//必须使用VITE_开头的配置信息 否则无法获取
VITE_AMAP_KEY=6a195b0300203aeb704993f1ffaf3592

2
.env.dev

@ -0,0 +1,2 @@
//必须使用VITE_开头的配置信息 否则无法获取
VITE_AMAP_KEY=6a195b0300203aeb704993f1ffaf3592

24
.gitignore

@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

2
.npmrc

@ -0,0 +1,2 @@
auto-install-peers=true
strict-peer-dependencies=false

17
.project

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>plant_mange_view</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
</natures>
</projectDescription>

7
.settings/.jsdtscope

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary"/>
<classpathentry kind="src" path=""/>
<classpathentry kind="output" path=""/>
</classpath>

1
.settings/org.eclipse.wst.jsdt.ui.superType.container

@ -0,0 +1 @@
org.eclipse.wst.jsdt.launching.JRE_CONTAINER

1
.settings/org.eclipse.wst.jsdt.ui.superType.name

@ -0,0 +1 @@
Global

3
.vscode/extensions.json

@ -0,0 +1,3 @@
{
"recommendations": ["johnsoncodehk.volar"]
}

19
animalStudy.html

@ -0,0 +1,19 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=6a195b0300203aeb704993f1ffaf3592"></script>
<script>// code
window._AMapSecurityConfig = {
securityJsCode: '50fb940b038d86d58d4febb60b3137ab'
}
</script>
<title>国家重要产品追溯体系</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/animalStudy/main.js"></script>
</body>
</html>

19
index.html

@ -0,0 +1,19 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=6a195b0300203aeb704993f1ffaf3592"></script>
<script>// code
window._AMapSecurityConfig = {
securityJsCode: '50fb940b038d86d58d4febb60b3137ab'
}
</script>
<title>Vite App</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>

42
package.json

@ -0,0 +1,42 @@
{
"name": "vue3-vite-demo",
"private": true,
"version": "0.0.0",
"scripts": {
"初始化": "pnpm i",
"serve": "vite --mode dev",
"build": "vite build"
},
"dependencies": {
"@amap/amap-jsapi-loader": "^1.0.1",
"@rollup/plugin-commonjs": "^25.0.4",
"@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^5.1.12",
"axios": "^1.4.0",
"china-area-data": "^5.0.1",
"echarts": "^5.4.2",
"element-plus": "^2.3.7",
"highlight.js": "^11.8.0",
"jquery": "^3.7.1",
"qrcode.vue": "3.4.1",
"vant": "^4.9.6",
"vite-plugin-html": "^3.2.2",
"vite-plugin-require-transform": "^1.0.4",
"vue": "^3.3.4",
"vue-echarts": "^6.6.0",
"vue-router": "^4.2.4",
"vue3-video-play": "^1.3.1-beta.6",
"vuex": "^4.1.0",
"xlsx-js-style": "^1.2.0"
},
"devDependencies": {
"@vitejs/plugin-vue": "^2.3.3",
"@vitejs/plugin-vue-jsx": "^1.3.10",
"black-knight": "1.3.33",
"less": "^4.1.3",
"less-loader": "~7.3.0",
"sass-resources-loader": "^2.2.5",
"vite": "^4.4.9",
"vite-plugin-vue-devtools": "^1.0.0-rc.3"
}
}

4074
pnpm-lock.yaml

File diff suppressed because it is too large

BIN
public/favicon.ico

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

59
src/App.vue

@ -0,0 +1,59 @@
<template>
<router-view :key="$route.fullPath"/>
</template>
<script setup>
import { computed, inject, onMounted, provide, shallowRef, watch, ref } from 'vue'
import {useRoute, useRouter} from "vue-router"
import request,{host} from "@/config/request"
import rePassword from '@/view/accountMana/rePassword.vue'
let {getters, commit, dispatch} =inject("store")
var router = useRouter()
provide("route", useRoute())//
provide("router", router)
var msg=inject('msg')
//
watch(()=>!!getters['data/token']&&!!getters['data/userInfo'].companyId, async (n)=>{
if(n){
dispatch('data/getCompany')//
dispatch('data/getLegalInfo')//
}
},{immediate:true})
//
async function getDevice(){
var res=await request("/suyuan/device/queryDeviceInfo")
if(res.statu){
commit('data/setDevice',res.data)
if(!getters['data/token']){
if(res.data.showTable==1){
router.push({path:'/home'})
}else{
router.push({path:'/login'})
}
}
document.querySelector('link[rel="icon"]').href=`${host('imgurl')}/${res.data.logo}`
document.title=res.data.systemName||document.title
}else{
msg.error(res.msg,'获取站点信息失败!')
}
}
//
watch(()=>getters['data/token'], n=>{
if(n){
dispatch('data/getMenu', true)
}
},{immediate:true})
onMounted(()=>{
commit("data/setRouter",router)
getDevice()
})
window.onbeforeunload=e=>{
sessionStorage.setItem('userInfo',JSON.stringify(getters['data/userInfo']))
sessionStorage.setItem('token',getters['data/token']||'')
}
</script>

99
src/animalStudy/breed/abort.vue

@ -0,0 +1,99 @@
<style lang="less" scoped>
.card{
.content{
position:relative;
&+*{
margin-top:20px;
}
&:not(.last):before{
content:"";
position:absolute;
height:100%;
border-left:1px dashed #546FD6;
left:5px;
top:17px;
}
.date{
margin-top:10px;
padding-left:20px;
position:relative;
&:before{
content:"";
width:15px;
height:15px;
border-radius: 50%;
top:0;
left:0;
position:absolute;
background:radial-gradient(#546FD6 4px,rgba(84, 110, 214, 0.5) 4.3px )
}
}
.item{
margin-left:20px;
.dec{
width:100%;
padding:10px;
background:#F6F8FF;
color:#546FD6;
margin-top:10px;
}
}
}
}
</style>
<template>
<fold sup="流产记录" ref="foldDom" v-if="modelValue?.length>0">
<div class="content" :class="{last:k>=modelValue.length-1}" v-for="(v,k) in (modelValue||[]).slice(0,2)" :key="k">
<div class="date">
{{new Date(v.abortDate).format('yyyy-MM-dd')}}
</div>
<div class="item">
<span>配种日期</span> <span>{{new Date(v.matingDate).format('yyyy-MM-dd')}}</span>
</div>
<div class="item">
<span>妊娠天数</span> <span>{{v.pregnancyDay||comAge(v)}}</span>
</div>
<div class="item block">
<span>流产原因</span> <span class="dec">{{v.abortReason}}</span>
</div>
</div>
<div class="more" v-if="modelValue?.length>=2" @click="detailDom.open()">查看更多>></div>
<van-empty v-if="!modelValue?.length>0" description="暂无数据"/>
</fold>
<detailList
ref="detailDom"
title="流产记录"
type="abort"
:head="['流产日期','配种日期','妊娠天数','流产原因']">
<template #default="{data}">
<td><span>{{new Date(data.abortDate).format('yyyy-MM-dd')}}</span></td>
<td><span>{{new Date(data.matingDate).format('yyyy-MM-dd')}}</span></td>
<td><span>{{data.pregnancyDay||comAge(data)}}</span></td>
<td><span style="width:auto;max-width:150px;">{{data.abortReason||0}}</span></td>
</template>
</detailList>
</template>
<script setup>
import { nextTick, onMounted, ref, watch } from 'vue'
import fold from '../fold.vue'
import detailList from './detailList.vue'
var props=defineProps({
modelValue:{
type:[Array,Object],
default:null,
}
})
var detailDom=ref()
var foldDom=ref()
function comAge(val){
return val.abortDate&&val.matingDate?Math.round((new Date(val.abortDate)-new Date(val.matingDate))/1000/60/60/24):0
}
watch(()=>props.modelValue, n=>{
nextTick(()=>{
foldDom.value?.refresh?.()
})
})
</script>

168
src/animalStudy/breed/base.vue

@ -0,0 +1,168 @@
<style lang="less" scoped>
.card{
.SY-dingweixiao{
margin-top:10px;
color:#5A74D9;
font-size:12px;
font-weight: bold;
&:before{
font-size:16px;
text-shadow: 0px 1px 2px #5A74D9;
margin-right:4px;
font-weight: normal;
}
}
.van-swipe{
margin-top:10px;
img{
width:100%;
height:172px;
border-radius: 6px;
object-fit: cover;
}
}
.map:deep{
margin-top:10px;
height:140px;
.companyName{
font-size:12px;
position:absolute;
transform: translate(-50%, calc(-100% - 10px));
width:max-content;
text-align: center;
max-width: 150px;
min-width: 40px;
background:#5A74D9;
color:#fff;
padding:7px;
border-radius: 8px;
&:before{
content:"";
position:absolute;
border-top:10px solid #5A74D9;
border-right:10px solid transparent;
border-bottom:10px solid transparent;
border-left:10px solid transparent;
top:100%;
left:50%;
transform: translateX(-50%);
}
}
}
}
.imgLine{
display: flex;
align-items: center;
position:relative;
padding-left:20px;
&:before{
content:"";
position:absolute;
width:8px;
height:8px;
transform: rotate(45deg);
background:#5A74D9;
left:0px;
}
&:not(:last-child):after{
content:"";
height:calc(100% + 5px);
border-left:1px dashed #5A74D9;
position:absolute;
left:3px;
top:50%;
}
&+.imgLine{
margin-top:12px;
}
.date{
font-size:12px;
margin-right:22px;
}
.van-image{
width:89px;
height:66px;
}
}
</style>
<template>
<fold title="养殖过程信息" ref="foldDom">
<div class="title">养殖基础信息</div>
<div class="SY-dingweixiao">{{modelValue?.name}}</div>
<van-swipe :autoplay="3000" indicator-color="white">
<van-swipe-item v-for="(v,k) in modelValue?.pic?.split(',')?.filter(v=>v)||[]" :key="k">
<img :src="`${host('imgurl')}/${v}`"/>
</van-swipe-item>
</van-swipe>
<div class="item">
<span>养殖企业:</span> <span class="left">{{modelValue?.companyName}}</span>
</div>
<div class="item">
<span>养殖规模:</span> <span class="left">{{modelValue?.realArea}}</span>
</div>
<div class="item">
<span>养殖区域:</span> <span class="left">{{modelValue?.address}}</span>
</div>
<div class="map" ref="mapDom"/>
<template v-if="modelValue?.partNum">
<div class="title" style="margin-top:15px;">牛舍信息</div>
<div class="item">
<span style="color:#999;">所属分区</span> <span style="color:#EE2746;">{{modelValue?.partNum}}</span>
</div>
</template>
<template #extra>
<slot />
</template>
</fold>
</template>
<script setup>
import { computed, inject, nextTick, onMounted, ref, shallowRef, watch } from 'vue'
import dDialog from '../dialog.vue'
import fold from '../fold.vue'
import AMAPLoader from '@amap/amap-jsapi-loader'
import {host} from '@/config/request'
import {preview} from '@/config/utils'
import {getFarmImg} from '@/config/api'
var dialog=inject('dialog')
var props=defineProps({
modelValue:{
type:Object,
default:null
},
})
var detectImg=computed(()=>props.modelValue?.dormitoryVo?.pic?.split?.(',')?.filter(v=>v)||[])
var mapDom=ref()
var foldDom=ref()
onMounted(()=>{
AMAPLoader.reset()
AMAPLoader.load({
key:"57fe0266af0ce01d64f1567784964340",
version:"2.0",
plugins:["AMap.Geolocation","AMap.PolygonEditor"],
}).then(AMap=>{
var map = new AMap.Map(mapDom.value,{
zoom:14,
zooms:[2,18],
center:[101.8698608, 25.6893628],
})
watch(()=>props.modelValue, n=>{
nextTick(()=>{
foldDom.value.refresh()
})
if(n?.lnglat){
var marker=new AMap.Marker({
position:n.lnglat.split(',').filter(v=>v).map(v=>parseFloat(v)),
content:`<div class="companyName">${n.name}</div>`,
})
map.add(marker)
map.setFitView();
}
},{immediate:true})
})
})
</script>

141
src/animalStudy/breed/calving.vue

@ -0,0 +1,141 @@
<style lang="less" scoped>
// .card{
.content{
position:relative;
&+*{
margin-top:20px;
}
&:not(.last):before{
content:"";
position:absolute;
height:calc(100% + 4px);
border-left:1px dashed #546FD6;
left:7px;
top:15px;
border-bottom:1px solid #eee;
}
.date{
margin-top:10px;
padding-left:20px;
position:relative;
&:before{
content:"";
width:15px;
height:15px;
border-radius: 50%;
top:0;
left:0;
position:absolute;
background:radial-gradient(#546FD6 4px,rgba(84, 110, 214, 0.5) 4.3px )
}
}
.item{
margin-left:20px;
display: flex;
margin-top:15px;
&>span{
font-size:12px;
&:first-child{
color:#999;
margin-right:10px;
flex-shrink: 0;
}
&:nth-child(2){
margin-left:auto;
&.left{
margin-left:0;
}
}
}
}
}
// }
</style>
<template>
<fold sup="产犊记录" ref="foldDom" v-if="modelValue?.length>0">
<div class="content" :class="{last:k>=modelValue.length-1}" v-for="(v,k) in (modelValue||[]).slice(0,2)" :key="k">
<div class="date">
{{new Date(v.calvingDate).format('yyyy-MM-dd')}}
</div>
<div class="item">
<span>配种日期</span> <span>{{v.matingDate||'/'}}</span>
</div>
<div class="item">
<span>妊娠天数</span> <span>{{v.pregnancyDay||comAge(v)}}</span>
</div>
<div class="item">
<span>犊牛健康状态</span> <span :style="{color: v.healthStatus=='健康'?'#64C3A4':'rgb(243, 99, 124)'}">{{v.healthStatus}}</span>
</div>
<template v-if="v.healthStatus=='健康'">
<div class="item">
<span>犊牛品种</span> <span>{{v.varietyName}}</span>
</div>
<div class="item">
<span>犊牛耳号</span> <span>{{v.code}}</span>
</div>
<div class="item">
<span>犊牛性别</span> <span>{{v.sex}}</span>
</div>
</template>
</div>
<div class="more" v-if="modelValue?.length>=2" @click="detailDom.open()">查看更多>></div>
<van-empty v-if="!modelValue?.length>0" description="暂无数据"/>
</fold>
<detailList
ref="detailDom"
title="产犊记录"
type="caving"
:head="['日期','妊娠天数','产犊那难易度','产犊详情']">
<template #content="{data}">
<div class="content" :class="{last:k>=data.length-1}" v-for="(v,k) in (data||[])" :key="k">
<div class="date">
{{new Date(v.calvingDate).format('yyyy-MM-dd')}}
</div>
<div class="item">
<span>配种日期</span> <span>{{v.matingDate||'/'}}</span>
</div>
<div class="item">
<span>妊娠天数</span> <span>{{v.pregnancyDay||comAge(v)}}</span>
</div>
<div class="item">
<span>犊牛健康状态</span> <span :style="{color: v.healthStatus=='健康'?'#64C3A4':'rgb(243, 99, 124)'}">{{v.healthStatus}}</span>
</div>
<template v-if="v.healthStatus=='健康'">
<div class="item">
<span>犊牛品种</span> <span>{{v.varietyName}}</span>
</div>
<div class="item">
<span>犊牛耳号</span> <span>{{v.code}}</span>
</div>
<div class="item">
<span>犊牛性别</span> <span>{{v.sex}}</span>
</div>
</template>
</div>
</template>
</detailList>
</template>
<script setup>
import { nextTick, onMounted, ref, watch } from 'vue'
import fold from '../fold.vue'
import detailList from './detailList.vue'
var props=defineProps({
modelValue:{
type:[Array,Object],
default:null,
}
})
var detailDom=ref()
var foldDom=ref()
function comAge(val){
return val.calvingDate&&val.matingDate?Math.round((new Date(val.calvingDate)-new Date(val.matingDate))/1000/60/60/24):0
}
watch(()=>props.modelValue, n=>{
nextTick(()=>{
foldDom.value?.refresh?.()
})
})
</script>

91
src/animalStudy/breed/checkInfo.vue

@ -0,0 +1,91 @@
<style lang="less" scoped>
.content{
position:relative;
padding-left:15px;
&:before{
content:"";
width:8px;
height:8px;
background:#5a74d9;
position:absolute;
top:3px;
left:0;
transform: rotate(45deg);
}
&:not(:last-child){
padding-bottom:10px;
&:after{
content:"";
position:absolute;
left:4px;
top:5px;
height:100%;
border-left:1px dashed #5a74d9;
}
}
.date{
display: flex;
justify-content: space-between;
align-items: center;
span{
color:#EE2746;
font-size:12px;
}
}
}
</style>
<template>
<fold sup="养殖检验信息" ref="foldEl" v-if="modelValue?.length>0">
<div class="content" v-for="(v,k) in data" :key="k">
<div class="date">
{{new Date(v.detectDate).format('yyyy-MM-dd')}} <span>{{v.detectName}}</span>
</div>
<div class="item">
<span>检验机构</span> <span>{{v.detectPlace}}</span>
</div>
<div class="item">
<span>检测编号</span> <span>{{v.detectCode}}</span>
</div>
<div class="item block">
<span>检测报告</span>
<div class="imgs">
<van-image
v-for="(v1,k1) in v.pic.slice(0,3)" :key="k1"
radius="4"
fit="cover"
@click="preview(k1, v.pic)"
:style="{'--n':k1==2&&v.pic.length>3?`'${v.pic.length-2}'`:''}"
:src="`${host('imgurl')}/${v1}`">
<template v-slot:loading>
<van-loading type="spinner" size="20" />
</template>
</van-image>
</div>
</div>
</div>
<van-empty v-if="data.length==0" description="暂无数据"/>
</fold>
</template>
<script setup>
import { computed, nextTick, ref, shallowRef, watch } from 'vue'
import fold from '../fold.vue'
import {host} from '@/config/request'
import {preview} from '@/config/utils'
var props=defineProps({
modelValue:{
type:Array,
default:()=>[]
}
})
var foldEl=ref()
var data=computed(()=>props.modelValue.map(v=>({...v,pic:v.detectReport?.split(',')?.filter?.(v=>v)||[]})))
watch(data, ()=>{
nextTick(()=>{
foldEl.value?.refresh?.()
})
})
</script>

180
src/animalStudy/breed/detailList.vue

@ -0,0 +1,180 @@
<style lang="less">
.sanqiDialog.grow{
--bg:#fff;
&>.title{
padding-right:40px;
}
&>.content{
background:#ebf0ff;
margin:10px;
border-radius: 8px;
display: flex;
flex-direction: column;
.title{
color:#fff;
height:30px;
border-radius: 20px 20px 0 0;
width:max-content;
margin:0 auto;
background: #546FD6;
line-height: 30px;
padding:0 20px;
position: relative;
&:before,&:after{
content:"";
position:absolute;
border-left:10px solid #546FD6;
border-top:10px solid transparent;
border-right:10px solid transparent;
border-bottom:10px solid transparent;
bottom:-9px;
}
&:before{
transform: rotate(-45deg);
left:4.2px;
}
&:after{
transform: rotate(-135deg);
right:3.7px;
}
}
.list{
flex-grow: 1;
overflow: auto;
margin-top:20px;
position:relative;
table{
min-width:100%;
tr{
&:first-child{
td{
color:#546FD6;
position:sticky;
top:0;
z-index: 10;
&:first-child{
z-index: 50;
}
}
}
&:nth-child(2n+1)>td{
background:#dbe4fd;
}
&:nth-child(2n)>td{
background:#ebf0ff;
}
td{
text-align: center;
padding:8px 7px;
vertical-align: top;
span{
display: inline-block;
width:max-content;
}
&:first-child{
position:sticky;
left:0;
z-index: 10;
}
}
}
}
}
}
}
</style>
<template>
<d-dialog class="grow" ref="dialogDom" :title="title">
<div class="title">详细列表</div>
<div class="list" @scroll="scroll">
<slot name="content" :data="list">
<table>
<tr>
<td v-for="(v,k) in head" :key="k" :style="{zIndex:k?10:50}"><span>{{v}}</span></td>
</tr>
<tr v-for="(v,k) in list" :key="k">
<slot :data='v'/>
</tr>
</table>
</slot>
</div>
</d-dialog>
</template>
<script setup>
import { inject, nextTick, reactive, ref, shallowRef } from "vue";
import dDialog from '../dialog.vue'
import request from '@/config/request'
var props=defineProps({
head:{
type:Array,
default:[]
},
title:{
type:String,
default:"",
},
widths:{
type:Object,
default:()=>({})
},
type:{
type:String,
default:"",
}
})
var dialog=inject('dialog')
var toast=inject('Toast')
var loading=false
var searchVal=reactive({
pageNo:1,
pageSize:15,
type:"process",
produceCode:window.location.search.match(/code=(\w+)/)?.[1],
companyId: window.location.search.match(/id=(\w+)/)?.[1],
})
var list=shallowRef([])
var total=ref(0)
var dialogDom=ref()
async function search(){
if(!loading && (total.value==0||list.value.length<total.value)){
var res=await request("/scancode/breed/queryMoreInfoByCode",{
method:"post",
data:{
...searchVal,
type:props.type,
},
})
if(res.statu){
list.value=list.value.concat(res.data.data)
searchVal.pageNo++
total.value=res.data.total
if(list.value.length==total.value)toast('加载完成!');
}else{
dialog({
title:"提示",
message:res.msg||`获取${props.title}失败!`
})
}
}
}
function scroll(e){
if(e.target.scrollHeight-e.target.scrollTop<=e.target.clientHeight+2){
search()
}
}
defineExpose({
open(){
dialogDom.value.open()
// searchVal.pageNo=1
// total.value=0
// list.value=[]
search()
}
})
</script>

94
src/animalStudy/breed/estrus.vue

@ -0,0 +1,94 @@
<style lang="less" scoped>
.card{
.content{
position:relative;
&+*{
margin-top:20px;
}
&:not(.last):before{
content:"";
position:absolute;
height:100%;
border-left:1px dashed #546FD6;
left:5px;
top:17px;
}
.title{
margin-top:10px;
&:before{
border-radius: 50%!important;
width:10px!important;
height:10px!important;
background-color:transparent!important;
background-image:radial-gradient(#546FD6 3px,rgba(84, 110, 214, 0.3) 3.3px)!important;
}
.name{
color:#EE2746;
font-size:12px;
margin-left: auto;
}
}
.item{
margin-left:20px;
}
}
}
</style>
<template>
<fold sup="发情配种登记" ref="foldDom" v-if="modelValue?.length>0">
<div class="content" :class="{last:k>=modelValue.length-1}" v-for="(v,k) in (modelValue||[]).slice(0,2)" :key="k">
<div class="title">
{{new Date(v.estrusDate).format('yyyy-MM-dd')}}
</div>
<div class="item">
<span>发情表现</span> <span>{{v.estrusPerformance}}-{{v.estrusType}}</span>
</div>
<div class="item">
<span>是否配种</span> <span>{{v.flagMating}}</span>
</div>
<template v-if="v.flagMating=='配种'">
<div class="item">
<span>配种方式</span> <span>{{v.matingWay}}</span>
</div>
<!-- <div class="item">
<span>配种员</span> <span>{{v.matingPeo}}</span>
</div> -->
</template>
</div>
<div class="more" v-if="modelValue?.length>=2" @click="detailDom.open()">查看更多>></div>
<van-empty v-if="!modelValue?.length>0" description="暂无数据"/>
</fold>
<detailList
ref="detailDom"
title="发情配种登记"
type="mating"
:head="['日期','发情表现','发情类别','是否配种','配种方式']">
<template #default="{data}">
<td><span>{{new Date(data.estrusDate).format('yyyy-MM-dd')}}</span></td>
<td><span>{{data.estrusPerformance}}</span></td>
<td><span>{{data.estrusType}}</span></td>
<td><span>{{data.flagMating}}</span></td>
<td><span v-if="data.flagMating=='配种'">{{data.matingWay}}</span></td>
</template>
</detailList>
</template>
<script setup>
import { computed, nextTick, onMounted, ref, watch } from 'vue'
import fold from '../fold.vue'
import detailList from './detailList.vue'
var props=defineProps({
modelValue:{
type:[Array,Object],
default:null,
}
})
var detailDom=ref()
var foldDom=ref()
watch(()=>props.modelValue, n=>{
nextTick(()=>{
foldDom.value?.refresh?.()
})
})
</script>

99
src/animalStudy/breed/file.vue

@ -0,0 +1,99 @@
<style lang="less" scoped>
.card{
.van-swipe{
margin-top:10px;
img{
width:100%;
height:172px;
border-radius: 6px;
object-fit: cover;
}
}
&>.seniority{
margin-bottom:10px;
.btn{
margin-left:auto;
display: flex;
span{
font-size:9px;
color:#999;
background:#E7EDFD;
height:20px;
line-height: 20px;
width:30px;
text-align: center;
&.active{
color:#fff;
background:#546FD6;
}
&:first-child{
border-radius: 20px 0 0 20px;
}
&:nth-child(2){
border-radius:0 20px 20px 0;
}
}
}
}
}
</style>
<template>
<fold title="牛只档案信息" ref="foldDom">
<div style="color:#EE2746;font-weight:bold;font-size:22px;">{{modelValue?.varietyName}}</div>
<div class="item">
<span>编号:</span> <span>{{modelValue?.produceCode}}</span>
</div>
<!-- <div class="item">
<span>肉牛登记号:</span> <span>{{modelValue?.beefCattleCode}}</span>
</div> -->
<div class="line">
<div class="item">
<span> :</span> <span>{{modelValue?.sex}}</span>
</div>
<div class="item">
<span> :</span> <span>{{modelValue?.furColor}}</span>
</div>
</div>
<div class="line">
<div class="item">
<span>出生日期:</span> <span>{{modelValue?.birthDate||'/'}}</span>
</div>
<div class="item">
<span>出生重量:</span> <span>{{modelValue?.weight||'/'}}</span>
</div>
</div>
<div class="title" style="margin:15px 0;">图片</div>
<van-swipe :autoplay="3000" indicator-color="white">
<van-swipe-item v-for="(v,k) in modelValue?.pic?.split?.(',')?.filter?.(v=>v)||[]" :key="k">
<img :src="`${host('imgurl')}/${v}`"/>
</van-swipe-item>
</van-swipe>
<van-empty v-if="!modelValue?.pic" description="暂无图片"/>
<template #extra>
<slot/>
</template>
</fold>
</template>
<script setup>
import fold from '../fold.vue'
import {host} from '@/config/request'
import { computed, nextTick, ref, watch } from 'vue'
var props=defineProps({
modelValue:{
type:Object,
default:null
}
})
var foldDom=ref()
var relation=ref('父辈')
var seniority=computed(()=>props.farther?.find(v=>v.relation==relation.value))
watch(()=>props.modelValue, n=>{
if(n){
nextTick(()=>{
foldDom.value?.refresh?.()
})
}
})
</script>

196
src/animalStudy/breed/growDevelop.vue

@ -0,0 +1,196 @@
<style lang="less" scoped>
.card{
.content{
position:relative;
&+*{
margin-top:20px;
}
&:not(.last):before{
content:"";
position:absolute;
height:100%;
border-left:1px dashed #546FD6;
left:5px;
top:17px;
}
.title{
margin-top:10px;
&:before{
border-radius: 1px!important;
width:10px!important;
height:10px!important;
transform: rotate(45deg);
margin-left:1px;
}
.name{
color:#EE2746;
font-size:12px;
margin-left: auto;
}
}
.items{
display: flex;
flex-wrap: wrap;
margin:10px -9px 0 20px;
span{
width:calc(100%/3 - 9px);
margin:0 9px 15px 0;
height:50px;
background:#F7F9FF;
border-radius: 5px;
display: flex;
align-items: center;
justify-content: center;
font-size:13px;
position:relative;
padding-top:10px;
&:before{
content:attr(data-name);
position:absolute;
top:0;
left:0;
border-radius: 5px 0;
background:#D2DDFF;
color:#546FD6;
font-size:10px;
height:17px;
line-height: 17px;
padding:0 5px;
}
}
}
}
}
.grow{
.title{
color:#fff;
height:30px;
border-radius: 20px 20px 0 0;
width:max-content;
margin:0 auto;
background: #546FD6;
line-height: 30px;
padding:0 20px;
position: relative;
&:before,&:after{
content:"";
position:absolute;
border-left:10px solid #546FD6;
border-top:10px solid transparent;
border-right:10px solid transparent;
border-bottom:10px solid transparent;
bottom:-9px;
}
&:before{
transform: rotate(-45deg);
left:4.2px;
}
&:after{
transform: rotate(-135deg);
right:3.7px;
}
}
.list{
flex-grow: 1;
overflow: auto;
margin-top:20px;
position:relative;
table{
min-width:100%;
tr{
&:first-child{
td{
color:#546FD6;
position:sticky;
top:0;
z-index: 10;
}
}
&:nth-child(2n+1)>td{
background:#dbe4fd;
}
&:nth-child(2n)>td{
background:#ebf0ff;
}
td{
text-align: center;
padding:8px 7px;
span{
display: inline-block;
width:max-content;
}
&:first-child{
position:sticky;
left:0;
z-index: 10;
}
}
}
}
}
}
</style>
<template>
<fold title="生长检测信息" ref="foldDom">
<div class="title">生长发育信息</div>
<div class="content" :class="{last:k>=modelValue.length-1}" v-for="(v,k) in modelValue" :key="k">
<div class="title">
{{new Date(v.detectionTime).format('yyyy-MM-dd')}}
<span class="name">{{v.detectionPeo}}</span>
</div>
<div class="items">
<span data-name="体重">{{v.weight||0}}kg</span>
<span data-name="体高">{{v.height||0}}cm</span>
<span data-name="十字部高">{{v.crossHeight||0}}cm</span>
<span data-name="体斜长">{{v.plagioclase||0}}cm</span>
<span data-name="胸围">{{v.bust||0}}cm</span>
<span data-name="腹围">{{v.abdominalLength}}cm</span>
<span data-name="管围">{{v.cannonCircum}}cm</span>
<span data-name="睾丸围">{{v.testisCircum||0}}cm</span>
</div>
</div>
<div class="more" v-if="modelValue?.length>=2" @click="detailDom.open()">查看更多>></div>
<van-empty v-if="!modelValue?.length>0" description="暂无数据"/>
<template #extra>
<slot />
</template>
</fold>
<detailList
ref="detailDom"
title="生长发育信息"
type="grow"
:head="['日期','体重(kg)','体高(cm)','十字部高(cm)','体斜长(cm)','胸围(cm)','腹围(cm)','管围(cm)','睾丸围(cm)']">
<template #default="{data}">
<td><span>{{new Date(data.detectionTime).format('yyyy-MM-dd')}}</span></td>
<td><span>{{data.weight||0}}</span></td>
<td><span>{{data.height||0}}</span></td>
<td><span>{{data.crossHeight||0}}</span></td>
<td><span>{{data.plagioclase||0}}</span></td>
<td><span>{{data.bust||0}}</span></td>
<td><span>{{data.abdominalLength||0}}</span></td>
<td><span>{{data.cannonCircum||0}}</span></td>
<td><span>{{data.testisCircum||0}}</span></td>
</template>
</detailList>
</template>
<script setup>
import { nextTick, onMounted, ref, watch } from 'vue'
import fold from '../fold.vue'
import detailList from './detailList.vue'
var props=defineProps({
modelValue:{
type:[Array,Object],
default:null
}
})
var detailDom=ref()
var foldDom=ref()
watch(()=>props.modelValue, n=>{
nextTick(()=>{
foldDom.value?.refresh()
})
})
</script>

90
src/animalStudy/breed/liveTest.vue

@ -0,0 +1,90 @@
<style lang="less" scoped>
.card{
.content{
position:relative;
&+*{
margin-top:20px;
}
&:not(.last):before{
content:"";
position:absolute;
height:100%;
border-left:1px dashed #546FD6;
left:5px;
top:17px;
}
.title{
margin-top:10px;
&:before{
border-radius: 1px!important;
width:10px!important;
height:10px!important;
transform: rotate(45deg);
margin-left:1px;
}
.name{
color:#EE2746;
font-size:12px;
margin-left: auto;
}
}
.item{
margin-left:20px;
}
}
}
</style>
<template>
<fold sup="超声波活体检测" ref="foldDom" v-if="modelValue?.length>0">
<div class="content" :class="{last:k>=modelValue.length-1}" v-for="(v,k) in modelValue||[]" :key="k">
<div class="title">
{{new Date(v.detectionTime).format('yyyy-MM-dd')}}
<span class="name">{{v.detectionPeo}}</span>
</div>
<div class="item">
<span>背膘厚</span> <span>{{v.backfatThickness}}mm</span>
</div>
<div class="item">
<span>眼肌面积</span> <span>{{v.eyeMuscleArea}}</span>
</div>
<div class="item">
<span>肌内脂肪含量</span> <span>{{v.fatContent}}</span>
</div>
</div>
<div class="more" v-if="modelValue?.length>=2" @click="detailDom.open()">查看更多>></div>
<van-empty v-if="!modelValue?.length>0" description="暂无数据"/>
</fold>
<detailList
ref="detailDom"
title="超声波活体检测"
type="ultrasonic"
:head="['日期','背膘厚','眼肌面积','肌内脂肪含量']">
<template #default="{data}">
<td><span>{{new Date(data.detectionTime).format('yyyy-MM-dd')}}</span></td>
<td><span>{{data.backfatThickness||0}}</span></td>
<td><span>{{data.eyeMuscleArea||0}}</span></td>
<td><span>{{data.fatContent||0}}</span></td>
</template>
</detailList>
</template>
<script setup>
import { nextTick, onMounted, ref, watch } from 'vue'
import fold from '../fold.vue'
import detailList from './detailList.vue'
var props=defineProps({
modelValue:{
type:[Array,Object],
default:null,
}
})
var detailDom=ref()
var foldDom=ref()
watch(()=>props.modelValue, n=>{
nextTick(()=>{
foldDom.value?.refresh?.()
})
})
</script>

160
src/animalStudy/breed/mana/detail.vue

@ -0,0 +1,160 @@
<style lang="less" scoped>
.van-popup{
.info{
display: flex;
align-items: center;
justify-content: space-between;
span{
font-size:12px;
color:#333;
&:before{
content:attr(data-title)": ";
color:#707070;
}
}
}
.imgs{
display: flex;
align-items: center;
margin:10px -15px 0 0;
.van-image{
height:var(--h,83px);
width:calc(100%/3 - 15px);
margin-right:15px;
border-radius: 5px;
position:relative;
&:before{
content:var(--n);
position:absolute;
top:0;
left:0;
width:100%;
height:100%;
color:#fff;
display: flex;
align-items: center;
justify-content: center;
background:rgba(0, 0, 0, 0.4);
}
}
}
.line{
border-top:1px dashed #ddd;
margin:7.5px 0;
}
.remark{
background:#F6F8FF;
color:#546FD6;
border-radius: 6px;
padding:10px;
font-size:12px;
}
.title{
color:#fff;
height:30px;
border-radius: 20px 20px 0 0;
width:max-content;
margin:auto;
background: #546FD6;
line-height: 30px;
padding:0 20px;
position: relative;
&:before,&:after{
content:"";
position:absolute;
border-left:10px solid #546FD6;
border-top:10px solid transparent;
border-right:10px solid transparent;
border-bottom:10px solid transparent;
bottom:-9px;
}
&:before{
transform: rotate(-45deg);
left:4.2px;
}
&:after{
transform: rotate(-135deg);
right:3.7px;
}
}
table{
width:100%;
margin-top:20px;
tr{
font-size:12px;
&:nth-child(2n-1){
background:#dbe4fd;
}
&:first-child{
font-size:13px;
color:#546FD6;
}
td{
padding:8px 5px;
}
}
}
}
</style>
<template>
<d-dialog ref="dialogDom" title="养殖管理">
<div class="info">
<span data-title="负责人">{{detail.userName}}</span>
<span data-title="投入人力">{{detail.userNum||0}}</span>
<span data-title="工时">{{detail.workTime||0}}</span>
</div>
<template v-if="detail.pic.length > 0">
<div style="font-size:12px;color:#707070;margin:10px 0;">农事图片</div>
<div class="imgs">
<van-image
v-for="(v,k) in detail.pic.slice(0,3)" :key="k"
radius="4"
fit="cover"
@click="preview(k,detail.pic)"
:style="{'--n':k==2&&detail.pic.length>3?`'${detail.pic.length-2}'`:''}"
:src="`${host('imgurl')}/${v}`">
<template v-slot:loading>
<van-loading type="spinner" size="20" />
</template>
</van-image>
</div>
</template>
<template v-if="detail.remark">
<div style="font-size:12px;color:#707070;margin:10px 0;">备注</div>
<div class="remark">{{detail.remark}}</div>
</template>
<template v-if="detail?.inputVos?.length>0">
<div class="line"/>
<div class="title">投入品信息</div>
<table>
<tr>
<td><span style="display:inline-block;min-width:50px;">投入品</span></td>
<td><span style="display:inline-block;min-width:52px;">投入数量</span></td>
<td><span style="display:inline-block;width:63px;">采购日期</span></td>
<td><span>供应商</span></td>
</tr>
<tr v-for="(v,k) in detail?.inputVos" :key="k">
<td>{{v.goodsName}}</td><td>{{v.reducedQuantity}}{{v.unit}}</td><td>{{new Date(v.inventoryDate).format('yyyy-MM-dd')}}</td><td>{{v.supplier}}</td>
</tr>
</table>
</template>
</d-dialog>
</template>
<script setup>
import { ref, shallowRef } from 'vue'
import dDialog from '../../dialog.vue'
import {host} from '@/config/request'
import {preview} from '@/config/utils'
var dialogDom=ref()
var detail=shallowRef({})
defineExpose({
open(val={}){
detail.value={
...val,
images: val?.images?.split(',').filter(v=>v)||[]
}
dialogDom.value.open()
}
})
</script>

93
src/animalStudy/breed/mana/index.vue

@ -0,0 +1,93 @@
<style lang="less" scoped>
.card{
.sup{
margin-top:10px;
span{
color:#EE2746;
font-size:23px;
font-weight: bold;
margin-left:10px;
}
}
.dateLine{
display: flex;
align-items: center;
justify-content: space-between;
margin-top:20px;
padding-left:20px;
position:relative;
&:before{
content:"";
width:12px;
height:12px;
position:absolute;
border-radius: 50%;
background:radial-gradient(#546FD6 4px,rgba(84, 110, 214, 0.3) 4.5px);
left:0;
}
&+.dateLine:after{
content:"";
height:calc(100% + 8px);
position:absolute;
border-left:1px dashed #546FD6;
left:6px;
bottom:12px;
}
span{
font-size:12px;
&.date{
color:#999;
}
&.type{
color:#999;
}
&.btn{
color:#546FD6;
}
}
}
}
</style>
<template>
<fold sup="养殖管理信息" ref="foldDom" v-if="modelValue?.record>0">
<div class="sup">累计操作 <span>{{modelValue?.record||0}}</span></div>
<div class="dateLine" v-for="(v,k) in modelValue?.processVos||[]" :key="k">
<span class="date">{{new Date(v.operationTime).format('yyyy-MM-dd')}}</span>
<span class="type">{{v.type}}</span>
<span class="btn" @click="detailDom.open({...v.detailvo,pic:v.detailvo?.pic?.split(',').filter(v=>v)})">查看详情</span>
</div>
<div class="more" v-if="modelValue?.record>0" @click="listDom.open()">查看更多>></div>
<van-empty v-else description="暂无数据"/>
</fold>
<detail ref="detailDom"/>
<list ref="listDom" :list="modelValue" :cubId="cubId"/>
</template>
<script setup>
import { computed, inject, nextTick, onMounted, ref, shallowRef, watch } from 'vue'
import fold from '../../fold.vue'
import detail from './detail.vue'
import list from './list.vue'
import {getMana} from '@/config/api'
var dialog=inject('dialog')
var props=defineProps({
modelValue:{
type:Array,
default:()=>[],
},
cubId:{
type:String,
default:"",
}
})
var detailDom=ref()
var listDom=ref()
var foldDom=ref()
watch(()=>props.modelValue, n=>{
nextTick(()=>{
foldDom.value?.refresh?.()
})
},{immediate:true})
</script>

238
src/animalStudy/breed/mana/list.vue

@ -0,0 +1,238 @@
<style lang="less" scoped>
.van-popup{
.block{
background:#ebf0ff;
padding:15px;
border-radius: 8px;
&+.block{
margin-top:15px;
}
&>.head{
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom:10px;
span{
font-size:14px;
&:first-child{
margin-right:10px;
}
&:nth-child(2){
color:#EE2746;
}
}
}
&>.info{
display: flex;
align-items: center;
justify-content: space-between;
span{
font-size:12px;
color:#333;
&:before{
content:attr(data-title)": ";
color:#707070;
}
}
}
&>.imgs{
display: flex;
align-items: center;
margin:10px -15px 0 0;
.van-image{
height:var(--h,83px);
width:calc(100%/3 - 15px);
margin-right:15px;
border-radius: 5px;
position:relative;
&:before{
content:var(--n);
position:absolute;
top:0;
left:0;
width:100%;
height:100%;
color:#fff;
display: flex;
align-items: center;
justify-content: center;
background:rgba(0, 0, 0, 0.4);
}
}
}
&>.line{
border-top:1px dashed #ddd;
margin:7.5px 0;
}
.remark{
background:#F6F8FF;
color:#546FD6;
border-radius: 6px;
padding:10px;
font-size:12px;
}
&>.title{
color:#fff;
height:30px;
border-radius: 20px 20px 0 0;
width:max-content;
margin:10px auto;
background: #546FD6;
line-height: 30px;
padding:0 20px;
position: relative;
&:before,&:after{
content:"";
position:absolute;
border-left:10px solid #546FD6;
border-top:10px solid transparent;
border-right:10px solid transparent;
border-bottom:10px solid transparent;
bottom:-9px;
}
&:before{
transform: rotate(-45deg);
left:4.2px;
}
&:after{
transform: rotate(-135deg);
right:3.7px;
}
}
&>table{
width:100%;
margin-top: 20px;
tr{
font-size:12px;
&:nth-child(2n-1){
background:#dbe4fd;
}
&:first-child{
font-size:13px;
color:#546FD6;
}
td{
padding:8px 5px;
}
}
}
}
}
</style>
<template>
<d-dialog ref="dialogDom" title="养殖管理" style="--bg:#fff;--p:15px;" @scroll="search">
<div class="block" v-for="(v,k) in list" :key="k">
<div class="head">
<span>{{new Date(v.operationTime).format('yyyy-MM-dd')}}</span>
<span>{{v.type}}</span>
</div>
<div class="info">
<span data-title="负责人">{{v.userName}}</span>
<span data-title="投入人力">{{v.userNum||0}}</span>
<span data-title="工时">{{v.workTime||0}}</span>
</div>
<template v-if="v.pic.length > 0">
<div style="font-size:12px;color:#707070;margin:10px 0;">农事图片</div>
<div class="imgs">
<van-image
v-for="(v1,k1) in v.pic" :key="k1"
radius="4"
fit="cover"
@click="preview(k1,v.pic)"
:style="{'--n':k1==2&&v.pic.length>3?`'${v.pic.length-2}'`:''}"
:src="`${host('imgurl')}/${v1}`">
<template v-slot:loading>
<van-loading type="spinner" size="20" />
</template>
</van-image>
</div>
</template>
<template v-if="v.remark">
<div style="font-size:12px;color:#707070;margin:10px 0;">备注</div>
<div class="remark">{{v?.remark}}</div>
</template>
<template v-if="v?.inputVos?.length>0">
<div class="line"/>
<div class="title">投入品信息</div>
<table>
<tr>
<td><span style="display:inline-block;min-width:45px;">投入品</span></td>
<td><span style="display:inline-block;min-width:52px;">投入数量</span></td>
<td><span style="display:inline-block;width:63px;">采购日期</span></td>
<td><span>供应商</span></td>
</tr>
<tr v-for="(v1,k1) in v?.inputVos" :key="k1">
<td>{{v1.goodsName}}</td><td>{{v1.reducedQuantity}}{{v1.unit}}</td><td>{{new Date(v1.inventoryDate).format('yyyy-MM-dd')}}</td><td>{{v1.supplier}}</td>
</tr>
</table>
</template>
</div>
</d-dialog>
</template>
<script setup>
import { computed, inject, onMounted, reactive, ref, shallowRef } from 'vue'
import dDialog from '../../dialog.vue'
import request,{host} from '@/config/request'
import {preview} from '@/config/utils'
var props=defineProps({
cubId:{
type:String,
default:"",
}
})
var dialog=inject('dialog')
var toast=inject('Toast')
var dialogDom=ref()
var list=shallowRef([])
var searchVal=reactive({
pageNo:1,
pageSize:4,
type:"process",
produceCode:window.location.search.match(/code=(\w+)/)?.[1],
companyId: window.location.search.match(/id=(\w+)/)?.[1],
})
var total=ref(0)
var loading=false
async function search(){
if(!loading && (total.value==0||list.value.length<total.value)){
loading=true
var res=await request('/scancode/breed/queryMoreInfoByCode',{
method:"post",
data:{
...searchVal,
cubId: props.cubId,
}
})
loading=false
if(res.statu){
list.value=list.value.concat(res.data.data.map(v=>({
...v,
pic:v.pic?.split?.(',')?.filter(v=>v)||[]
})))
searchVal.pageNo++
total.value=res.data.total
if(list.value.length==total.value)toast('加载完成!');
}else{
dialog({
title:"提示",
message:res.msg||"获取种植管理失败!"
})
}
}
}
defineExpose({
open(){
dialogDom.value.open()
searchVal.pageNo=1
list.value=[]
total.value=0
search()
}
})
</script>

81
src/animalStudy/breed/pregnancy.vue

@ -0,0 +1,81 @@
<style lang="less" scoped>
.card{
.content{
position:relative;
&+*{
margin-top:20px;
}
&:not(.last):before{
content:"";
position:absolute;
height:100%;
border-left:1px dashed #546FD6;
left:5px;
top:17px;
}
.title{
margin-top:10px;
.name{
color:#EE2746;
font-size:12px;
margin-left: auto;
}
}
.item{
margin-left:20px;
}
}
}
</style>
<template>
<fold sup="妊娠登记信息" ref="foldDom" v-if="modelValue?.length>0">
<div class="content" :class="{last:k>=modelValue.length-1}" v-for="(v,k) in (modelValue||[]).slice(0,2)" :key="k">
<div class="title">
{{new Date(v.inspectDate).format('yyyy-MM-dd')}}
</div>
<div class="item">
<span>配种日期</span> <span>{{new Date(v.matingDate).format('yyyy-MM-dd')}}</span>
</div>
<div class="item">
<span>配种天数</span> <span>{{v.matingDay||0}}</span>
</div>
<div class="item">
<span>孕检结果</span> <span>{{v.pregnancyResult}}</span>
</div>
</div>
<div class="more" v-if="modelValue?.length>=2" @click="detailDom.open()">查看更多>></div>
<van-empty v-if="!modelValue?.length>0" description="暂无数据"/>
</fold>
<detailList
ref="detailDom"
title="妊娠登记信息"
type="pregnancy"
:head="['登记日期','配种日期','配种天数','孕检结果']">
<template #default="{data}">
<td><span>{{new Date(data.inspectDate).format('yyyy-MM-dd')}}</span></td>
<td><span>{{new Date(data.matingDate).format('yyyy-MM-dd')}}</span></td>
<td><span>{{data.matingDay||0}}</span></td>
<td><span>{{data.pregnancyResult||0}}</span></td>
</template>
</detailList>
</template>
<script setup>
import { nextTick, onMounted, ref, watch } from 'vue'
import fold from '../fold.vue'
import detailList from './detailList.vue'
var props=defineProps({
modelValue:{
type:[Array,Object],
default:null,
}
})
var detailDom=ref()
var foldDom=ref()
watch(()=>props.modelValue, n=>{
nextTick(()=>{
foldDom.value?.refresh()
})
})
</script>

74
src/animalStudy/breed/relation.vue

@ -0,0 +1,74 @@
<style lang="less" scoped>
.btns{
position:absolute;
top:18px;
right:27px;
border-radius: 20px;
overflow: hidden;
background:#E7EDFD;
display: flex;
span{
width:30px;
height:20px;
color:#999;
text-align: center;
line-height: 23px;
font-size:9px;
&.active{
background:#546FD6;
color:#fff;
}
}
}
</style>
<template>
<fold sup="谱系关系" ref="foldEl" :isCollapse="false" v-if="modelValue.length>0">
<div class="btns">
<span :class="{active:type=='mather'}" @click="type='mather'">母辈</span>
<span :class="{active:type=='father'}" @click="type='father'">父辈</span>
</div>
<template v-if="data">
<div style="color:#EE2746;font-weight:bold;font-size:22px;margin-top:10px;">{{data?.varietyName}}</div>
<div class="item">
<span>编号:</span> <span>{{data?.num}}</span>
</div>
<div class="item">
<span>出生日期:</span> <span>{{data?.birthDate||'/'}}</span>
</div>
<div class="line">
<div class="item">
<span>毛色:</span> <span>{{data?.color}}</span>
</div>
<div class="item">
<span>生育时年龄:</span> <span>{{data?.childbearingAge||age}}</span>
</div>
</div>
</template>
<van-empty v-else description="暂无数据"/>
</fold>
</template>
<script setup>
import { computed, nextTick, onMounted, ref, watch } from 'vue'
import fold from '../fold.vue'
var foldEl=ref("")
var type=ref("mather")
var props=defineProps({
modelValue:{
type:Array,
default:()=>[]
},
birth:{
type:String,
default:"",
}
})
var data=computed(()=>props.modelValue.find(v=>v.relation==({father:'父辈',mather:'母辈'})[type.value]))
var age=computed(()=>data.value?.birthDate&&props.birth?new Date(props.birth).year()-new Date(data.value?.birthDate).year():0)
watch(data, ()=>{
nextTick(()=>{
foldEl.value?.refresh?.()
})
},{immediate:true})
</script>

103
src/animalStudy/breed/slaughter.vue

@ -0,0 +1,103 @@
<style lang="less" scoped>
.card{
.item{
position:relative;
flex-direction: column;
padding-left:20px;
&:before{
content:"";
position:absolute;
left:0px;
top:0px;
flex-shrink: 0;
width:15px;
height:15px;
background:radial-gradient(#546FD6 3px,rgba(84, 110, 214, 0.3) 4px,rgba(84, 110, 214, 0.3) 7px,transparent 7.3px);
}
&:not(:last-child){
padding-bottom:8px;
&:after{
content:"";
position:absolute;
left:7px;
top:14px;
height:100%;
border-left:1px dashed #546FD6;
}
}
.date{
color:#EE2746;
font-size:15px;
font-weight: 500;
}
table{
margin-top:9px;
background:#F3F5FF;
border-radius: 8px;
font-size:12px;
text-align: center;
tr{
&:first-child{
td{
color:#546FD6;
padding-top:9px;
}
}
&:last-child td{
padding-bottom:9px;
}
td{
padding:4px;
}
}
}
}
}
</style>
<template>
<fold title="屠宰信息" ref="foldDom">
<div class="item">
<div class="date">2024-09-09 11:23</div>
<table>
<tr>
<td>名称</td> <td>类型</td> <td>重量</td>
</tr>
<tr>
<td>xxxxxx屠宰1234</td> <td>待宰圈出库</td> <td>3000kg</td>
</tr>
</table>
</div>
<div class="item">
<div class="date">2024-09-09 11:23</div>
<table>
<tr>
<td>名称</td> <td>类型</td> <td>重量</td>
</tr>
<tr>
<td>xxxxxx屠宰1234</td> <td>待宰圈出库</td> <td>3000kg</td>
</tr>
</table>
</div>
</fold>
</template>
<script setup>
import fold from '../fold.vue'
import {host} from '@/config/request'
import { computed, nextTick, ref, watch } from 'vue'
var props=defineProps({
modelValue:{
type:Object,
default:null
}
})
var foldDom=ref()
watch(()=>props.modelValue, n=>{
if(n){
nextTick(()=>{
foldDom.value?.refresh?.()
})
}
})
</script>

66
src/animalStudy/dialog.vue

@ -0,0 +1,66 @@
<style lang="less">
.van-popup.sanqiDialog{
width:calc(100% - 40px);
background-color:transparent;
background-image:linear-gradient(transparent 50px,var(--bg,#ebf0ff) 50px);
background-size:100% 100%;
border-radius: 0 0 8px 8px;
min-height: 340px;
max-height: 80%;
display: flex;
flex-direction: column;
&>.title{
flex-shrink: 0;
background-image:url("@/assets/phoneImg/dialog_head.png");
background-size:100% 78px;
background-repeat: no-repeat;
height:78px;
color:#637adc;
display: flex;
align-items: center;
justify-content: center;
font-size:26px;
padding-top:18px;
font-family: system-ui;
font-weight: bold;
text-shadow: 2px 2px 2px rgba(99, 121, 220, 0.6);
}
&>.content{
overflow: auto;
padding:var(--p,15px);
flex-grow: 1;
}
}
</style>
<template>
<teleport to="body">
<van-popup class="sanqiDialog" v-bind="$attrs" v-model:show="show">
<div class="title">{{title}}</div>
<div class="content" @scroll="scroll">
<slot/>
</div>
</van-popup>
</teleport>
</template>
<script setup>
import { ref } from "vue";
var props=defineProps({
title:{
type:String,
default:""
}
})
var emit=defineEmits()
var show=ref(false)
function scroll(e){
if(e.target.scrollHeight-e.target.scrollTop<=e.target.clientHeight+2){
emit('scroll')
}
}
defineExpose({
open(val={}){
show.value=true
}
})
</script>

72
src/animalStudy/fold.vue

@ -0,0 +1,72 @@
<style lang="less" scoped>
.card{
&.sup .collapse{
margin-top:-14px!important;
}
.collapse{
&.show{
&:before{
transform: rotate(-90deg)!important;
}
}
}
&>.frame{
overflow: hidden;
transition: all 0.4s;
&>div{
border:0.1px solid transparent;
padding-bottom:2px;
}
}
}
</style>
<template>
<div class="card" :class="{sup:!!sup}" v-bind="$attrs">
<div :class="!!sup?'title':'tag'">{{title||sup}}</div>
<div v-if="isCollapse" class="collapse SY-youbian" :class="{show}" @click="show=!show">{{show?"折叠":'展开'}}</div>
<div class="frame" :style="{height:`${show?height:minHeight}px`}">
<div ref="frame" :style="bodyStyle">
<slot/>
</div>
</div>
</div>
<template v-if="show">
<slot name="extra"/>
</template>
</template>
<script setup>
import { nextTick, onMounted, ref } from "vue"
var props=defineProps({
title:{
type:String,
default:"",
},
sup:{
type:String,
default:"",
},
minHeight:{
type:Number,
default: 0,
},
bodyStyle:"",
isCollapse:{
type:Boolean,
default:true
}
})
var show=ref(true)
var frame=ref()
var height=ref(0)
onMounted(()=>{
setTimeout(()=>{
height.value=frame.value.clientHeight
},600)
})
defineExpose({
refresh(){
height.value=frame.value.clientHeight
}
})
</script>

221
src/animalStudy/index.vue

@ -0,0 +1,221 @@
<style lang="less" scoped>
.container{
font-size: 15px;
min-height: 100%;
background:radial-gradient(transparent 60px, #c9d3f5 60px, #c9d3f5 160px, transparent 160px),linear-gradient(to bottom,#e7edfd 800px,#798ce8);
background-position:-160px 250px,top center;
background-repeat: no-repeat;
background-size:320px 320px,100% 100%;
border:0.1px solid transparent;
&>.head{
background-image:url('@/assets/phoneImg/head_banner.png');
background-size:100% 100%;
height:235px;
position:relative;
img{
position:absolute;
&.logo{
width:28px;
object-fit: cover;
top:48px;
left:69px;
}
&.title{
object-fit: cover;
width:200px;
top:85px;
left:119px;
}
}
}
&>.content{
margin:25px 13px 20px;
background:#bad1f6;
border-radius: 10px;
border:0.1px solid transparent;
&:deep .card{
border-radius: 8px;
margin:15px 13px;
position:relative;
&>.tag{
min-width:140px;
color:#fff;
font-size:18px;
height:36px;
line-height: 36px;
padding:0 10px 0 20px;
background:#546fd6;
width:max-content;
border-radius: 40px 40px 40px 0;
position:absolute;
top:10px;
left:-15px;
&:before{
content:"";
position:absolute;
border-left:11px solid #546fd6;
border-top:11px solid transparent;
border-right:11px solid transparent;
border-bottom:11px solid transparent;
transform: rotate(-45deg);
top:25.5px;
left:5px;
}
}
&>.collapse{
color:#999;
font-size: 14px;
width:max-content;
display: flex;
align-items: center;
flex-direction: row-reverse;
margin:11px 0 11px auto;
&:before{
transform: rotate(90deg);
}
}
.item{
display: flex;
margin-top:15px;
&>span{
font-size:12px;
&:first-child{
color:#999;
margin-right:10px;
flex-shrink: 0;
}
&:nth-child(2){
margin-left:auto;
&.left{
margin-left:0;
}
}
}
&:not(.block)>span:nth-child(2){
text-align: right;
}
&.block{
flex-wrap: wrap;
}
}
.line{
display: flex;
justify-content: space-between;
align-items: center;
span:nth-child(2){
margin-left:0;
}
}
.title{
display: flex;
align-items: center;
&:before{
content:"";
width:5px;
height:15px;
border-radius: 5px;
background:linear-gradient(to bottom,#4E79B0,#15356D);
margin-right:10px;
}
}
.imgs{
display: flex;
align-items: center;
margin:10px -15px 0 0;
width:100%;
.van-image{
height:var(--h,83px);
width:calc(100%/3 - 15px);
margin-right:15px;
border-radius: 5px;
position:relative;
&:before{
content:var(--n);
position:absolute;
top:0;
left:0;
width:100%;
height:100%;
color:#fff;
display: flex;
align-items: center;
justify-content: center;
background:rgba(0, 0, 0, 0.4);
z-index: 10;
}
}
}
.more{
width:max-content;
color:#999;
font-size:12px;
margin:15px auto 0;
}
}
}
}
</style>
<template>
<div class="container">
<div class="head">
<img class="logo" src="@/assets/phoneImg/logo.png"/>
<img class="title" src="@/assets/phoneImg/animal_head_title.png"/>
</div>
<div class="content">
<file :modelValue="data?.varietyVo" v-if="data?.varietyVo||data?.parentVos?.length">
<relation :modelValue="data?.parentVos" :birth="data?.varietyVo?.birthDate"/>
</file>
<breedBase :modelValue="data?.breedBaseVo" v-if="data?.breedBaseVo||data?.processVo?.record>0||data?.detectVo?.length">
<breedMana :modelValue="data?.processVo" :cubId="data?.cubId"/>
<checkInfo :modelValue="data?.detectVo"/>
</breedBase>
<growDevelop :modelValue="data?.growVos" v-if="data?.growVos?.length||data?.ultrasonicVos?.length||data?.matingVos?.length||data?.pregnancyVos?.length||data?.abortVos?.length||data?.calvingVos?.length">
<test :modelValue="data?.ultrasonicVos"/>
<estrus :modelValue="data?.matingVos"/>
<pregnancy :modelValue="data?.pregnancyVos"/>
<abort :modelValue="data?.abortVos"/>
<calving :modelValue="data?.calvingVos"/>
</growDevelop>
<!-- <slaughter /> -->
</div>
</div>
</template>
<script setup>
import file from './breed/file.vue'
import relation from './breed/relation.vue'
import breedBase from './breed/base.vue'
import breedMana from './breed/mana/index.vue'
import checkInfo from './breed/checkInfo.vue'
import growDevelop from './breed/growDevelop.vue'
import test from './breed/liveTest.vue'
import estrus from './breed/estrus.vue'
import pregnancy from './breed/pregnancy.vue'
import abort from './breed/abort.vue'
import calving from './breed/calving.vue'
import slaughter from './breed/slaughter.vue'
import request from '@/config/request'
import { inject, onMounted, provide, ref, shallowRef } from 'vue'
var dialog=inject('dialog')
var data=shallowRef({})
onMounted(async()=>{
var res=await request('/scancode/breed/queryScanInfoByCode',{
params:{
produceCode: window.location.search.match(/code=(\w+)/)?.[1],
companyId: window.location.search.match(/id=(\w+)/)?.[1],
}
})
if(res.statu){
data.value=res.data
}else{
dialog({
title:"提示",
message:res.msg||"获取数据失败!"
})
}
})
</script>

19
src/animalStudy/main.js

@ -0,0 +1,19 @@
import { createApp } from 'vue'
import App from './index.vue'
import store from '@/store'
import regComponents from '@/components'
import {defineObj} from 'black-knight/lib/config/custom'
import {provise} from 'black-knight/lib/config/tools'
import "@/assets/style/phone.less"
// 全局引入按需引入UI库 vant
import vant from '@/config/vant.js'
var app=createApp(App)
app.use(store)
.use(regComponents)
.use(vant)
.provide('event',new provise())
.provide('defineObj', defineObj)
.mount('#app')

BIN
src/assets/img/bg_home.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 569 KiB

BIN
src/assets/img/checkcode.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
src/assets/img/company_banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 452 KiB

BIN
src/assets/img/complaint_1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

BIN
src/assets/img/complaint_bg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 MiB

BIN
src/assets/img/consult_bg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

24
src/assets/img/consult_bg.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 1.4 MiB

BIN
src/assets/img/dkds.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

BIN
src/assets/img/famousCompany.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

BIN
src/assets/img/introduce_1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 496 KiB

BIN
src/assets/img/introduce_2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 583 KiB

BIN
src/assets/img/introduce_3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 691 KiB

BIN
src/assets/img/introduce_bg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

BIN
src/assets/img/load_1.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

BIN
src/assets/img/login_bg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 366 KiB

BIN
src/assets/img/login_bg_1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
src/assets/img/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

BIN
src/assets/img/noData.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

BIN
src/assets/img/prodShow_banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 724 KiB

BIN
src/assets/img/ship.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
src/assets/img/userHead.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
src/assets/img/video_bg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

BIN
src/assets/phoneImg/animal_head_title.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

BIN
src/assets/phoneImg/dialog_head copy.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
src/assets/phoneImg/dialog_head.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
src/assets/phoneImg/head_banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 405 KiB

BIN
src/assets/phoneImg/head_title.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

BIN
src/assets/phoneImg/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

BIN
src/assets/phoneImg/security_bg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
src/assets/phoneImg/weather_1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

BIN
src/assets/phoneImg/weather_2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

BIN
src/assets/phoneImg/weather_3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

BIN
src/assets/phoneImg/weather_4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

BIN
src/assets/phoneImg/weather_5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

BIN
src/assets/phoneImg/weather_6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

24
src/assets/style/base.less

@ -0,0 +1,24 @@
*,
*:before,
*:after {
box-sizing: border-box;
}
body {
font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, sans-serif;
font-size: 14px;
line-height: 1.15;
color: @--color-text-primary;
background-color: #fff;
}
a {
color: mix(#fff, @--color-primary, 20%);
text-decoration: none;
&:focus,
&:hover {
color: @--color-primary;
text-decoration: underline;
}
}
img {
vertical-align: middle;
}

153
src/assets/style/index.less

@ -0,0 +1,153 @@
@import url("variables.less");
@import url("base.less");
@import url("//at.alicdn.com/t/c/font_4123466_lmg78ig5ndk.css");
[class*=farm-]{
font-family: "farmApp" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
@import url("//at.alicdn.com/t/c/font_4438850_1r4dec40of8.css");
[class*=FG-]{
font-family: "farmGateway" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.over{
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.double-line {
word-break: break-all;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: var(--n,2);
-webkit-box-orient: vertical;
}
.el-image{
div.load,div.imgError{
height:100%;
width:100%;
display: flex;
align-items: center;
justify-content: center;
&:after{
content:"";
display: block;
max-width: 100px;
max-height: 100px;
height:100%;
width:100%;
background-size: contain;
background-repeat: no-repeat;
background-position:center;
}
}
div.load{
background:#f1eaf2;
&:after{
background-image: url("@/assets/img/load_1.gif");
}
}
div.imgError{
&:after{
background-image: url("@/assets/img/dkds.png");
}
}
}
.el-table.suyuan{
flex-grow: 1;
height: 1px;
--el-table-header-bg-color:#F6F9F8;
--el-fill-color-lighter:#F6F9F8;
--el-table-row-hover-bg-color:#8ccab5;
tr:hover>td.el-table__cell{
--hover:var(--c);
color:#fff;
}
}
.el-pagination__rightwrapper{
flex:0;
}
.tab{
color:rgba(var(--c),1);
background:rgba(var(--c),0.1);
height:24px;
line-height: 24px;
padding:0 5px;
margin: 0 10px 10px 0;
display:inline-block;
border-radius: 4px;
}
.customBg{
--el-button-bg-color:#63C2A2;
--el-button-hover-bg-color:rgba(99, 194, 162, 0.7);
--el-button-text-color:#fff;
--el-button-hover-text-color:#fff;
}
.el-form-item.form-inline{
&>.el-form-item__content{
flex-wrap:nowrap;
}
}
.scrollContent{
&>.el-scrollbar__wrap>.el-scrollbar__view{
background:#fff;
padding:15px;
height:100%;
display:flex;
flex-direction: column;
&>.content{
display:flex;
flex-wrap: wrap;
align-items: flex-start;
flex-grow: 1;
height: 1px;
&>div{
height:calc(100%/2 - 20px);
display:flex;
flex-direction: column;
&>.el-image{
flex-grow: 1;
height: 1px;
}
}
}
&>.el-pagination{
justify-content: flex-end;
flex-shrink: 0;
}
}
}
/* 页面切换动画 */
.fade-transform-leave-active,
.fade-transform-enter-active {
transition: all .5s;
}
.fade-transform-enter-from {
opacity: 0;
transform: translateX(-30px);
}
.fade-transform-leave-to {
opacity: 0;
transform: translateX(30px);
}
.el-empty{
margin:auto;
}

191
src/assets/style/phone.less

File diff suppressed because one or more lines are too long

22
src/assets/style/variables.less

@ -0,0 +1,22 @@
/**
* 站点变量
*
* #1 重置element-ui组件, 请查阅_element-ui__variable-lookup.scss官方变量列表进行重置, 必须保证变量名一致才能生效!
* #2 站内变量
*/
// ---------- #1 ----------
@--color-primary: #17b3a3;
@--color-text-primary: #303133;
// ---------- #2 ----------
// Navbar
@navbar--background-color: @--color-primary;
// Sidebar
@sidebar--background-color-dark: #263238;
@sidebar--color-text-dark: #8a979e;
// Content
@content--background-color: #f1f4f5;

1
src/assets/svg/add.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1692260627533" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4020" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M551.1 845.7h-418c-10.5 0-19-8.5-19-19V305.8h120.1c41.4 0 75-33.6 75-75V113.7H826c10.5 0 19 8.5 19 19v353.9c0 13.8 11.2 25 25 25s25-11.2 25-25V132.7c0-38.1-31-69-69-69H259.9L64 259.6v567c0 38.1 31 69 69 69h418.1c13.8 0 25-11.2 25-25 0-13.7-11.2-24.9-25-24.9zM234.2 255.8h-95.6l120.6-120.7v95.7c0 13.8-11.3 25-25 25z" p-id="4021"></path><path d="M934.3 743H792.7V601.4c0-13.8-11.2-25-25-25s-25 11.2-25 25V743H601.1c-13.8 0-25 11.2-25 25s11.2 25 25 25h141.6v141.6c0 13.8 11.2 25 25 25s25-11.2 25-25V793h141.6c13.8 0 25-11.2 25-25s-11.2-25-25-25zM705.4 383.8c0-13.8-11.2-25-25-25h-399c-13.8 0-25 11.2-25 25s11.2 25 25 25h399c13.8 0 25-11.2 25-25zM448.6 531.3c0-13.8-11.2-25-25-25H281.4c-13.8 0-25 11.2-25 25s11.2 25 25 25h142.3c13.7 0 24.9-11.1 24.9-25zM281.4 653.7c-13.8 0-25 11.2-25 25s11.2 25 25 25h267.9c13.8 0 25-11.2 25-25s-11.2-25-25-25H281.4z" p-id="4022"></path></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

1
src/assets/svg/address.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1644203698861" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5526" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M502.400009 1023.99968a32.38397 32.38397 0 0 1-21.50398-56.703947c0.991999-0.895999 99.807906-88.799917 197.119815-201.407811 56.575947-65.503939 101.471905-126.175882 133.599875-180.575831 38.271964-65.023939 57.695946-119.807888 57.695946-163.007847 0-197.119815-160.31985-357.311665-357.311665-357.311665-196.991815 0-357.311665 160.31985-357.311665 357.311665 0 95.99991 90.911915 248.383767 256.12776 429.183598 12.095989 13.215988 11.19999 33.823968-2.111998 45.919957a32.44797 32.44797 0 0 1-45.887957-2.111998c-72.927932-79.807925-132.607876-155.391854-177.503834-224.51179-29.119973-44.799958-51.839951-86.879919-67.519936-125.279882C99.200387 500.160171 89.792396 458.78421 89.792396 422.400244a421.023605 421.023605 0 0 1 123.711884-298.59172A421.023605 421.023605 0 0 1 347.712154 33.280609 417.791608 417.791608 0 0 1 512 0.00064a421.023605 421.023605 0 0 1 298.59172 123.711884 421.023605 421.023605 0 0 1 123.711884 298.55972c0 97.343909-69.791935 227.423787-207.615805 386.623638-100.095906 115.711892-198.495814 203.295809-202.68781 207.007806A32.799969 32.799969 0 0 1 502.400009 1023.99968z" p-id="5527"></path><path d="M512 319.80834c52.89595 0 95.99991 43.10396 95.99991 95.99991s-43.10396 95.99991-95.99991 95.99991-95.99991-43.10396-95.99991-95.99991 43.10396-95.99991 95.99991-95.99991z m0-63.99994c-88.383917 0-159.99985 71.583933-159.99985 159.99985 0 88.383917 71.615933 159.99985 159.99985 159.99985s159.99985-71.615933 159.99985-159.99985c0-88.415917-71.615933-159.99985-159.99985-159.99985z" p-id="5528"></path></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

3
src/assets/svg/appointment.svg

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16.999" height="17" viewBox="0 0 16.999 17">
<path d="M170.144,128a.944.944,0,0,1,.944.944v.944h.944a1.889,1.889,0,0,1,1.889,1.889l0,3.661a6.138,6.138,0,1,0-7.7,9.561h-6.468a1.889,1.889,0,0,1-1.889-1.889V131.778a1.889,1.889,0,0,1,1.889-1.889h.944v-.944a.944.944,0,0,1,1.889,0v.944H169.2v-.944a.944.944,0,0,1,.944-.944Zm0,7.555a4.722,4.722,0,1,1-4.722,4.722A4.722,4.722,0,0,1,170.144,135.555Zm0,1.417a.472.472,0,0,0-.464.387l-.008.085v3.542l.008.085a.472.472,0,0,0,.38.38l.085.008H172.5l.085-.008a.472.472,0,0,0,.38-.38l.008-.085-.008-.085a.472.472,0,0,0-.38-.38l-.085-.008h-1.889v-3.069l-.008-.085a.472.472,0,0,0-.465-.387Zm-7.555,2.6H160.7l-.094.007a.708.708,0,0,0,0,1.4l.094.007h1.889l.1-.007a.708.708,0,0,0-.1-1.41Zm0-3.778H160.7l-.094.007a.708.708,0,0,0,0,1.4l.094.007h1.889l.1-.007a.708.708,0,0,0-.1-1.41Zm0-3.778H160.7l-.094.007a.708.708,0,0,0,0,1.4l.094.007h1.889l.1-.007a.708.708,0,0,0-.1-1.41Zm4.722,0h-1.889l-.094.007a.708.708,0,0,0,0,1.4l.094.007h1.889l.1-.007a.708.708,0,0,0-.1-1.41Z" transform="translate(-157.867 -128)"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

3
src/assets/svg/area.svg

@ -0,0 +1,3 @@
<svg width="30.000008" height="30.004005" viewBox="0 0 30 30.004" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<path id="path" d="M27.971 8.56601C28.5295 8.56573 29.0063 8.36829 29.4016 7.97366C29.7968 7.57905 29.9949 7.10249 29.996 6.54401L29.996 2.022C29.9949 1.46352 29.7968 0.986961 29.4016 0.592339C29.0063 0.197723 28.5295 0.000274658 27.971 0L23.449 0C22.8905 0.000274658 22.4137 0.197716 22.0185 0.592339C21.6233 0.986961 21.4251 1.46352 21.424 2.022L21.424 2.40601L8.562 2.40601L8.562 2.022C8.56173 1.46375 8.36423 0.987259 7.96948 0.592522C7.57475 0.197784 7.09825 0.000274658 6.54 0L2.022 0C1.46375 0.000274658 0.987259 0.197784 0.592522 0.592522C0.197784 0.987259 0.000274658 1.46375 0 2.022L0 6.54401C0.000823975 7.10202 0.198532 7.57832 0.593109 7.9729C0.987686 8.36748 1.46399 8.56519 2.022 8.56601L2.373 8.56601L2.373 21.432L2.022 21.432C1.46352 21.4331 0.986954 21.6313 0.592339 22.0265C0.197716 22.4217 0.000274658 22.8985 0 23.457L0 27.979C0.000823975 28.5373 0.198463 29.0139 0.592926 29.409C0.987381 29.804 1.46375 30.0024 2.022 30.004L6.54401 30.004C7.10249 30.0029 7.57905 29.8047 7.97367 29.4095C8.36829 29.0143 8.56573 28.5375 8.56601 27.979L8.56601 27.421L21.428 27.421L21.428 27.979C21.4291 28.5377 21.6272 29.0146 22.0223 29.4097C22.4174 29.8048 22.8943 30.0029 23.453 30.004L27.975 30.004C28.5337 30.0029 29.0107 29.8048 29.4057 29.4097C29.8008 29.0146 29.9989 28.5377 30 27.979L30 23.457C29.9989 22.8983 29.8008 22.4214 29.4057 22.0263C29.0107 21.6312 28.5337 21.4331 27.975 21.432L27.388 21.432L27.388 8.56601L27.971 8.56601ZM27.1 2.90101L27.1 5.67301L24.328 5.67301L24.328 2.90101L27.1 2.90101ZM5.66901 2.90101L5.66901 5.67301L2.897 5.67301L2.897 2.90101L5.66901 2.90101ZM5.66901 24.332L5.66901 27.101L2.897 27.101L2.897 24.331L5.66901 24.332ZM19.847 11.948L12.014 19.778C11.7307 20.0603 11.389 20.2013 10.989 20.2009C10.5891 20.2006 10.2477 20.059 9.96484 19.7762C9.68202 19.4933 9.54043 19.1519 9.54007 18.752C9.53971 18.352 9.68069 18.0103 9.96301 17.727L17.793 9.897C18.2494 9.43932 18.7763 9.33414 19.3734 9.58147C19.9706 9.82879 20.2688 10.2756 20.268 10.922C20.2697 11.3229 20.1314 11.6655 19.847 11.948ZM27.1 27.101L24.328 27.101L24.328 24.331L27.1 24.331L27.1 27.101Z" fill-rule="nonzero"/>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

9
src/assets/svg/arrow.svg

@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="42px" height="13px" viewBox="0 0 42 13">
<defs>
<linearGradient id="PSgrad_0" x1="0%" x2="95.106%" y1="0%" y2="30.902%">
<stop offset="0%" stop-color="rgb(83,244,191)" stop-opacity="1" />
<stop offset="100%" stop-color="rgb(0,153,102)" stop-opacity="1" />
</linearGradient>
</defs>
<path fill-rule="evenodd" fill="url(#PSgrad_0)" d="M0.018,5.358 L31.111,5.358 C29.613,3.246 28.868,1.869 28.791,-0.008 C32.199,3.228 36.629,4.914 41.982,6.499 C36.629,8.017 32.394,9.869 28.791,13.008 C29.021,10.968 29.642,9.736 31.158,7.490 L0.018,7.490 L0.018,5.358 Z"/>
</svg>

After

Width:  |  Height:  |  Size: 678 B

1
src/assets/svg/base.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1688627237067" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8649" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M511.208 83.152c-133.272 0-241.696 108.424-241.696 241.696 0 111.24 104.2 229.96 187.928 325.352l9.52 10.856a4423.776 4423.776 0 0 1 26.872 30.728 20.72 20.72 0 0 0 15.672 7.24c5.96 0 11.696-2.608 15.728-7.168a5229.428 5229.428 0 0 1 22.416-25.408c5.2-5.88 10.528-11.872 15.944-17.96 84.344-94.848 189.32-212.88 189.32-323.632-0.008-133.28-108.432-241.704-241.704-241.704z m0 324.376c-53.464 0-96.96-43.496-96.96-96.96s43.496-96.96 96.96-96.96 96.96 43.496 96.96 96.96-43.496 96.96-96.96 96.96z" p-id="8650"></path><path d="M846.168 594.68c-123.784-43.68-137.28 4.512-137.28 4.512l33.336 7.056 0.752 0.168c119.688 25.416 206.496 75.504 206.496 119.168 0 43.36-101.056 78.64-225.272 78.64h-92.552c-60.064 0-108.928 18.712-108.928 41.712 0 12.84 15.224 20.984 27.496 27.544l3.944 1.728c9.688 3.488 9.688 5.648 9.688 7.736 0 4.856-18.696 13.832-45.328 13.832h-3.648c-178.28-0.264-339.624-40.688-401.48-100.6C96.08 779.408 87.4 761.904 87.6 744.088v-1.248c0.52-45.8 70.776-94.344 174.408-123.12 0 0 18.44-20.712 29.656-34.504-37.344 0.096-71.208 7.288-100.432 17.448C110.528 636.48 24.504 697.992 24 742.712v1.312c-0.256 22.36 10.384 44.12 31.608 64.672 71.296 69.064 255.808 115.664 459.144 115.96h3.776c60.064 0 108.928-18.72 108.928-41.72 0-15.696-16.688-23.8-28.712-28.288-3.392-1.832-12.408-6.68-12.408-8.72 0-4.848 18.688-13.824 45.32-13.824H724.2c161.992 0 288.888-46.8 288.888-106.528 0-41.92-86.304-101.52-166.92-130.896z" p-id="8651"></path></svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

3
src/assets/svg/baseInfo.svg

@ -0,0 +1,3 @@
<svg width="30.000000" height="30.768999" viewBox="0 0 30 30.769" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<path id="path" d="M0 3.077L0 30.769L20 30.769L20 3.077L15.385 0L0 3.077ZM11.538 27.385L2.308 27.385L2.308 24.615L11.539 24.461L11.538 27.385ZM11.538 21.231L2.307 21.385L2.307 18.615L11.538 18L11.538 21.231ZM11.538 14.616L2.307 15.231L2.307 12.462L11.538 11.385L11.538 14.616ZM11.538 7.847L2.308 9.077L2.308 6.154L11.539 4.308L11.538 7.847ZM26.923 27.692L26.923 3.077L22.308 0L20 0L22.308 1.538L22.308 30.769L30 30.769L30 27.692L26.923 27.692Z" fill-rule="nonzero"/>
</svg>

After

Width:  |  Height:  |  Size: 620 B

1
src/assets/svg/binding.svg

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="14.993" viewBox="0 0 15 14.993"><path d="M-9992.187-15643.708a1.112,1.112,0,0,1-1.111-1.11v-7.814a1.112,1.112,0,0,1,1.111-1.11h7.813a1.112,1.112,0,0,1,1.11,1.11v1.265a.6.6,0,0,1-.6.6.6.6,0,0,1-.6-.6v-1.167h-7.622v7.621h7.622v-2.214a.6.6,0,0,1,.6-.6.6.6,0,0,1,.6.6v2.308a1.113,1.113,0,0,1-1.11,1.112Zm4.966-4.96a1.112,1.112,0,0,1-1.11-1.11v-1.265a.6.6,0,0,1,.6-.6.6.6,0,0,1,.6.6v1.168h7.621v-7.622h-7.621v2.213a.6.6,0,0,1-.6.6.6.6,0,0,1-.6-.6v-2.307a1.112,1.112,0,0,1,1.11-1.11h7.813a1.112,1.112,0,0,1,1.11,1.11v7.813a1.11,1.11,0,0,1-1.11,1.11Z" transform="translate(9993.298 15658.701)"/></svg>

After

Width:  |  Height:  |  Size: 653 B

7
src/assets/svg/breedBase.svg

@ -0,0 +1,7 @@
<svg width="29.999062" height="30.025354" viewBox="0 0 29.9991 30.0254" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<desc>
Created with Pixso.
</desc>
<defs/>
<path id="path" d="M29.999 6.92576C29.9963 5.85235 29.491 5.13102 28.483 4.76175L15.793 0.147757C15.2634 -0.049252 14.7337 -0.049252 14.204 0.147757L1.51505 4.76076C1.05807 4.92628 0.691406 5.20895 0.415039 5.60876C0.135521 6.0029 -0.00280762 6.44157 4.57764e-05 6.92476L4.57764e-05 20.7718C-0.00146484 21.1937 0.107201 21.585 0.326042 21.9458C0.543694 22.3087 0.838356 22.5914 1.21004 22.7938L13.899 29.7148C14.6324 30.1289 15.3657 30.1289 16.099 29.7148L28.789 22.7928C29.1625 22.5922 29.4571 22.3095 29.673 21.9448C29.8924 21.5842 30.001 21.1928 29.999 20.7708L29.999 6.92576ZM14.999 11.4668L2.41904 6.88875L14.999 2.31075L27.579 6.88875L14.999 11.4668ZM27.689 20.7668L16.152 27.0618L16.152 13.5038L27.689 9.30375L27.689 20.7668Z" fill-rule="nonzero" fill="#FDCA0C"/>
</svg>

After

Width:  |  Height:  |  Size: 991 B

1
src/assets/svg/camera.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1708498696546" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4250" xmlns:xlink="http://www.w3.org/1999/xlink" width="100" height="100"><path d="M896 448c0-212-172-384-384-384S128 236 128 448c0 192.8 142.4 352.8 328 380l-4 68H256v64h512v-64H573.6l-4-68C754.4 800 896 640.8 896 448zM512 768c-176.8 0-320-143.2-320-320s143.2-320 320-320 320 143.2 320 320-143.2 320-320 320z m0-560c-132.8 0-240 107.2-240 240s107.2 240 240 240 240-107.2 240-240-107.2-240-240-240z m-96 304c-52.8 0-96-43.2-96-96s43.2-96 96-96 96 43.2 96 96-43.2 96-96 96z" p-id="4251"></path></svg>

After

Width:  |  Height:  |  Size: 749 B

1
src/assets/svg/chanpin.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M505.811442 424.947623c-17.327961 0-33.830782-2.475423-46.207896-7.426269L202.159549 323.455278c-21.453666-7.426269-23.929089-18.978243-23.92909-25.579371 0-5.775987 3.300564-17.327961 23.92909-25.579372l256.618856-94.891217c12.377115-4.950846 28.879936-7.426269 46.207896-7.426269 17.327961 0 33.830782 2.475423 46.207897 7.426269L808.638195 272.296535c21.453666 7.426269 23.929089 18.978243 23.929089 25.579372 0 5.775987-3.300564 17.327961-23.929089 25.579371L552.019339 418.346495c-12.377115 4.125705-28.879936 6.601128-46.207897 6.601128z m-55.284448 428.248187c-5.775987 0-12.377115-0.825141-18.153102-3.300564L207.935536 764.08058c-26.404512-9.901692-46.207897-40.43191-46.207897-70.962127V406.794521c0-25.579371 14.027397-42.082192 35.481064-42.082192 5.775987 0 11.551974 0.825141 17.327961 3.300564L442.275584 453.827558c27.229654 9.901692 49.508461 41.257051 49.508461 70.962128v286.323932c-0.825141 24.75423-18.153102 42.082192-41.257051 42.082192z m115.519743-4.950846h0.825141c-21.453666 0-34.655923-12.377115-34.655923-37.131346V524.789686c0-30.530218 18.978243-61.060435 45.382756-70.962128l224.438356-85.814665c5.775987-2.475423 12.377115-3.300564 18.978243-3.300564 23.103948 0 40.43191 17.327961 40.43191 42.082192V693.118453c0 29.705077-23.103948 61.060435-50.333602 70.962127l-227.73892 83.339243c-4.950846 2.475423-11.551974 0.825141-17.327961 0.825141z" /></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

1
src/assets/svg/company.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1688031407790" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2366" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M959 832.13c-0.58-13-10.57-24-24.05-24h-33.67V387.44a60.13 60.13 0 0 0-60.13-60.13H589.51c0 11.28-0.13 22.55-0.11 33.81q0.14 58.71 0.25 117.42 0.15 67.89 0.29 135.79l0.24 112.72q0.06 23.49 0.1 47c0 13.48-11 23.47-24 24s-24-11.47-24.05-24v-0.81c-0.46-19.09-0.09-38.24-0.13-57.33q-0.12-58.71-0.25-117.42-0.13-67.91-0.28-135.79V227.88a60.13 60.13 0 0 0-60.13-60.13H182.85a60.13 60.13 0 0 0-60.13 60.13v580.2c-10.75 0-21.5-0.16-32.24 0h-1.41c-12.58 0-24.63 11.06-24 24s10.57 24 24 24h811.35c11 0 22.08 0.16 33.1 0h1.41c12.58 0.1 24.63-10.96 24.07-23.95zM687.24 489.64h128.28c13.48 0 23.47 11 24.05 24.05s-11.47 24-24.05 24H687.24c-13.49 0-23.47-11-24-24s11.42-24.05 24-24.05z m0 159.64h128.28c13.48 0 23.47 11 24.05 24.06s-11.47 24-24.05 24H687.24c-13.49 0-23.47-11-24-24s11.42-24.06 24-24.06z m-421-321.56H398c13.63 0 23.73 11.15 24.32 24.32s-11.6 24.32-24.32 24.32H266.25c-13.63 0-23.73-11.14-24.32-24.32s11.6-24.32 24.32-24.32z m0 161.23H398c13.63 0 23.73 11.14 24.32 24.32s-11.6 24.31-24.32 24.31H266.25c-13.63 0-23.73-11.14-24.32-24.31S253.53 489 266.25 489z m0 161.07H398c13.63 0 23.73 11.14 24.32 24.32s-11.6 24.32-24.32 24.32H266.25c-13.63 0-23.73-11.15-24.32-24.32S253.53 650 266.25 650z" p-id="2367"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

1
src/assets/svg/consumption.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M408.511 228.766h206.979c0 0 125.277-32.681 76.255-130.723-38.128-76.255-103.489-27.234-103.489-27.234s5.447-70.809-76.255-70.809-76.255 76.255-76.255 76.255-65.362-49.021-103.489 27.234c-43.574 92.596 76.255 125.277 76.255 125.277zM626.383 256h-228.766c-174.298 76.255-321.362 239.66-321.362 435.745 0 239.66 179.745 332.255 435.745 332.255s435.745-92.596 435.745-332.255c0-196.085-147.064-359.489-321.362-435.745zM664.511 664.511c16.34 0 27.234 10.894 27.234 27.234s-10.894 27.234-27.234 27.234h-125.277v152.511c0 16.34-10.894 27.234-27.234 27.234s-27.234-10.894-27.234-27.234v-152.511h-125.277c-16.34 0-27.234-10.894-27.234-27.234s10.894-27.234 27.234-27.234h130.723v-76.255h-130.723c-16.34 0-27.234-10.894-27.234-27.234 0-16.34 10.894-27.234 27.234-27.234h98.043l-92.596-108.936c-10.894-10.894-10.894-27.234 0-32.681 10.894-10.894 27.234-10.894 38.128 0l108.936 130.723 108.936-130.723c10.894-10.894 27.234-10.894 38.128 0s10.894 27.234 5.447 38.128l-98.043 108.936h98.043c16.34 0 27.234 10.894 27.234 27.234 0 16.34-10.894 27.234-27.234 27.234h-125.277v76.255h125.277z" /></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

1
src/assets/svg/cowshed.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1691635758358" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4043" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M853.8624 603.0336l-76.3904-70.2208-76.416 70.2208v92.8h-37.2224v-92.8l-76.416-70.2208-76.3904 70.2208v92.8h-37.2224v-92.8l-76.416-70.2208-76.3904 70.2208v92.8H281.6v-92.8l-76.3648-70.2208-76.416 70.2208v92.8H72.96v48.3584h55.8592v103.6288H72.96V921.6h836.7872v-73.7792h-55.8848V744.192h55.8848v-48.3584h-55.8848z m-532.864 244.7872H281.6V744.192h39.3728z m190.0288 0h-37.2224V744.192h37.2224z m190.0288 0h-37.2224V744.192h37.2224z" p-id="4044"></path><path d="M959.6928 328.448c-55.9872-67.072-133.12-109.7472-208.8192-38.1184 0 0-5.12 10.8288-21.1712 10.6752-22.7072 0-499.3536-7.68-499.3536-7.68S110.7968 299.52 91.136 435.968c0 0-9.7024 173.6704 10.5984 157.696L150.144 555.52v-109.696s13.696-97.536 98.3552-96.0256h466.0736s48.4096 7.68 77.1584-16.768 63.5648-38.1184 96.8448 7.68 51.456 77.7472 42.368 86.8864-24.2176-1.5104-51.456-1.5104-102.8864-15.36-110.464 80.7936c0 0-1.5104 10.6496 27.2384 15.232s27.2384-13.7216 36.3264-30.4896 42.3168-24.3968 77.1584-7.68 66.56 1.536 77.184-12.1856 28.7488-76.2368-27.2384-143.3088z" p-id="4045"></path><path d="M191.744 268.8l497.408 5.12s32.4096 6.1184 57.7536-15.36 76.8-46.4128 119.4496-27.0336 58.5472 44.4672 69.7088 37.3248 11.4176-56.32-95.9744-136.832-136.7296 28.672-176.256 26.7008S167.424 151.5008 167.424 151.5008 25.6 136.2688 25.6 275.5328v143.36s2.0224 32.6656 21.2736 29.5936S70.656 435.2 72.96 414.72s37.7344-137.7024 118.784-145.92z" p-id="4046"></path></svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

1
src/assets/svg/cub.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1691635824682" class="icon" viewBox="0 0 1026 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5564" xmlns:xlink="http://www.w3.org/1999/xlink" width="200.390625" height="200"><path d="M941.922987 318.102187a141.96736 141.96736 0 0 0 41.110186-51.05664c15.138133-31.75424 19.7632-85.83168 12.393814-144.657067-3.631787-29.013333-15.499947-98.184533-47.213227-113.281707-3.863893-1.856853-8.318293-2.74432-13.63968-2.74432-40.710827 0-165.666133 66.10944-203.99104 129.559894-67.925333-31.757653-140.561067-47.889067-216.128853-47.889067-77.974187 0-152.722773 17.104213-222.38208 50.845013C256.013653 74.56768 127.744 6.365867 86.398293 6.365867c-5.317973 0-9.775787 0.887467-13.66016 2.74432C41.065813 24.20736 29.197653 93.37856 25.5488 122.391893c-7.369387 58.825387-2.72384 112.899413 12.393813 144.657067a140.946773 140.946773 0 0 0 46.431574 54.961493C34.563413 395.08992 2.471253 454.591147 2.471253 558.936747c0 265.202347 210.5344 450.37568 511.98976 450.37568s512.01024-185.173333 512.01024-450.37568c-0.003413-106.58816-33.174187-166.782293-84.548266-240.83456z m-276.770134 18.875733c22.678187 0 41.069227 18.37056 41.069227 41.045333 0 22.657707-18.387627 41.048747-41.069227 41.048747-22.633813 0-41.024853-18.39104-41.024853-41.048747 0-22.674773 18.387627-41.045333 41.024853-41.045333z m-316.214613 0c22.657707 0 41.048747 18.37056 41.048747 41.045333 0 22.657707-18.39104 41.048747-41.048747 41.048747-22.698667 0-41.069227-18.39104-41.069227-41.048747 0.003413-22.674773 18.37056-41.045333 41.069227-41.045333z m-161.334613-87.415467c-21.220693 12.755627-36.717227 18.476373-50.10432 18.476374-23.586133 0-36.5056-17.483093-45.185707-32.70656-17.31584-30.508373-17.629867-118.62016 10.642773-134.731094 3.39968-1.942187 7.369387-2.870613 12.076374-2.870613 23.606613 0 90.391893 29.66528 109.161813 62.68928 24.999253 43.9808-2.829653 68.83328-36.590933 89.142613z m326.853973 642.310827c-152.19712 0-276.032853-99.4304-276.032853-221.620907 0-122.23488 123.835733-221.661867 276.032853-221.661866s276.053333 99.426987 276.053333 221.661866c0 122.190507-123.856213 221.620907-276.053333 221.620907zM928.136533 235.332267c-8.635733 15.223467-21.599573 32.70656-45.165226 32.70656-13.407573 0-28.839253-5.720747-50.06336-18.476374-33.805653-20.312747-61.63456-45.161813-36.631894-89.146026 18.76992-33.024 85.579093-62.68928 109.161814-62.68928 4.73088 0 8.680107 0.928427 12.055893 2.850133 28.317013 16.110933 28.020053 104.246613 10.642773 134.754987z" p-id="5565"></path><path d="M514.4576 508.514987c-119.149227 0-216.108373 72.5504-216.108373 161.7408 0 89.146027 96.959147 161.696427 216.108373 161.696426 119.169707 0 216.108373-72.5504 216.108373-161.696426 0-89.1904-96.938667-161.7408-216.108373-161.7408z m-94.952107 202.615466c-21.346987 0-38.744747-17.3568-38.744746-38.703786 0-21.367467 17.39776-38.744747 38.744746-38.744747 21.346987 0 38.703787 17.37728 38.703787 38.744747-0.003413 21.3504-17.3568 38.703787-38.703787 38.703786z m189.928107 0c-21.346987 0-38.724267-17.3568-38.724267-38.703786 0-21.367467 17.37728-38.744747 38.724267-38.744747 21.326507 0 38.724267 17.37728 38.724267 38.744747-0.003413 21.3504-17.401173 38.703787-38.724267 38.703786z" p-id="5566"></path></svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

1
src/assets/svg/delete.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1688613067355" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2240" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M928 224l-160 0L768 160c0-52.928-42.72-96-95.264-96L352 64C299.072 64 256 107.072 256 160l0 64L96 224C78.304 224 64 238.304 64 256c0 17.696 14.304 32 32 32l832 0c17.696 0 32-14.304 32-32C960 238.304 945.696 224 928 224zM320 160c0-17.632 14.368-32 32-32l320.736 0C690.272 128 704 142.048 704 160l0 64L320 224 320 160z" p-id="2241"></path><path d="M640 736 640 384c0-17.696-14.304-32-32-32-17.696 0-32 14.304-32 32l0 352c0 17.696 14.304 32 32 32C625.696 768 640 753.696 640 736z" p-id="2242"></path><path d="M448 736 448 384c0-17.696-14.304-32-32-32-17.696 0-32 14.304-32 32l0 352c0 17.696 14.304 32 32 32C433.696 768 448 753.696 448 736z" p-id="2243"></path><path d="M800.128 352.832c-17.696 0-32 14.336-32 32L768.128 864c0 17.664-14.336 32-32 32L288.064 896c-17.632 0-32-14.336-32-32L256.064 383.52c0-17.664-14.336-32-32-32s-32 14.336-32 32L192.064 864c0 52.928 43.072 96 96 96l448.064 0c52.928 0 96-43.072 96-96L832.128 384.832C832.128 367.168 817.824 352.832 800.128 352.832z" p-id="2244"></path></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

4
src/assets/svg/disabled.svg

@ -0,0 +1,4 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="132.604309" height="127.021790" viewBox="0 0 132.604 127.022" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<path id="path" d="M103.304 70.5983C87.1256 70.5983 74.0008 83.236 74.0008 98.8091C74.0008 114.384 87.1256 127.022 103.304 127.022C119.175 127.022 132.3 114.384 132.604 98.8091C132.604 83.2363 119.48 70.5983 103.304 70.5983ZM103.376 119.934C91.4057 119.934 81.9413 110.823 81.9413 99.2958C81.9413 96.7576 82.4123 94.3394 83.2737 92.1088L119.914 112.527C116.007 117.07 110.083 119.934 103.376 119.934ZM123.745 105.82L87.3817 85.5593C91.3333 81.3099 97.0679 78.6608 103.375 78.6608C115.068 78.6608 124.809 87.7718 124.809 99.2986C124.809 101.582 124.436 103.777 123.745 105.82ZM64.6959 115.846C59.6889 115.954 15.6467 115.973 11.8497 115.063C7.82169 114.093 9.34625 110.453 10.2144 105.239C11.1012 100.024 20.5357 91.541 24.3072 89.2292C28.088 86.9332 29.2151 87.9129 39.0371 86.5689C48.85 85.2339 52.7512 76.5042 53.841 73.3635C54.9218 70.204 54.2936 62.6033 53.4161 61.7839C52.5385 60.9645 48.8895 54.8788 48.5179 53.8715C48.1301 52.8737 46.4301 49.0933 46.4301 49.0933C40.6356 42.5526 43.7329 39.4649 44.2408 39.1439C44.7397 38.8229 44.8228 36.6333 44.7397 32.435C44.6564 28.2363 44.1486 26.0539 45.7467 17.5663C47.3446 9.086 61.3541 7.14368 61.3541 7.14368L68.0356 7.14368C68.0356 7.14368 82.0426 9.086 83.643 17.5663C85.232 26.056 84.7354 28.2362 84.643 32.435C84.5597 36.6337 84.643 38.8162 85.1509 39.1439C85.6588 39.4649 88.7469 42.5436 82.9615 49.0933C82.9615 49.0933 81.2617 52.8762 80.8831 53.8809C80.5139 54.8788 76.8551 60.9641 75.9869 61.7841C75.0979 62.6017 74.4812 70.2045 75.5598 73.3613C75.7215 73.8323 75.9476 74.4262 76.2436 75.1003C78.4515 72.7375 80.9872 70.666 83.7842 68.9526C83.7058 67.6803 83.7221 66.4561 83.7657 66.1188C83.8672 65.4519 84.729 64.0357 84.729 64.0357C88.2578 60.1467 92.2788 50.6152 92.2788 50.6152C99.496 41.7239 93.1195 36.5551 93.1195 36.5551C93.3668 35.3447 93.914 24.4346 93.4521 21.9241C92.99 19.423 92.6114 14.0925 86.5306 7.17804C80.4423 0.265869 69.3177 0 69.3177 0L64.6965 0.00933838L60.0778 0C60.0778 0 48.9622 0.284363 42.8813 7.18939C36.7913 14.0945 36.4125 19.4251 35.9507 21.9354C35.498 24.4366 36.043 35.3467 36.3017 36.5664C36.3017 36.5664 29.9248 41.7351 37.133 50.6266C37.133 50.6266 41.161 60.1576 44.6828 64.0471C44.6828 64.0471 45.542 65.4626 45.6342 66.1277C45.7264 66.7947 45.6988 70.9709 45.0339 72.063C44.3779 73.1602 40.6923 79.1208 35.5348 79.6451C30.3707 80.1719 23.7356 78.6381 20.1394 81.1949C16.5527 83.731 3.68185 93.8488 1.42548 102.329C-0.847137 110.828 -1.34586 120.286 7.21072 122.574L76.9554 122.574C74.9623 120.56 73.2139 118.318 71.7612 115.893C68.2694 115.888 65.7002 115.87 64.6959 115.846Z" fill-rule="nonzero"/>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

4
src/assets/svg/echart.svg

@ -0,0 +1,4 @@
<svg width="30.082321" height="30.003326" viewBox="0 0 30.0823 30.0033" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<path id="path" d="M19.4555 10.4741C19.5619 10.5047 19.7004 10.5222 19.8111 10.5266C19.8671 10.5303 19.9231 10.5303 19.9791 10.5266C20.066 10.523 20.152 10.512 20.2371 10.4936C20.3143 10.4785 20.3893 10.456 20.4621 10.4261C20.6102 10.3687 20.7762 10.2797 20.9001 10.1802L27.1661 5.02055L30.0733 7.98499L30.0733 0.741058L22.4693 1.09344L25.5775 3.4521L19.8171 8.06747L8.37125 0.270226C8.00417 0.0226898 7.60414 -0.0547867 7.17116 0.0378113C6.80368 0.0723953 6.48915 0.219841 6.22758 0.480148L0.492676 6.23811C-0.146225 6.82802 -0.163727 7.43581 0.44017 8.06147C1.02521 8.5218 1.91177 8.28639 2.69933 7.41071L7.60619 2.48344L19.0295 10.2627C19.1602 10.356 19.3022 10.4264 19.4555 10.4741ZM4.77698 9.91631L1.46474 9.91631C0.546677 9.91432 0.0871429 10.3722 0.0861359 11.2898L0.0861359 28.6237C0.0871124 29.5414 0.546646 29.9992 1.46474 29.9972L4.78297 29.9972C5.70107 29.9992 6.16058 29.5414 6.16158 28.6237L6.16158 11.2898C6.1586 10.3701 5.69707 9.91231 4.77698 9.91631Z" fill-rule="nonzero"/>
<path id="path" d="M13.2226 7.69266L9.99437 7.69266C9.10233 7.69164 8.65527 8.13698 8.65324 9.02868L8.65324 28.6612C8.6553 29.5529 9.10236 29.9982 9.99437 29.9972L13.2226 29.9972C14.1147 29.9982 14.5617 29.5529 14.5638 28.6612L14.5638 9.02868C14.5637 8.135 14.1167 7.68966 13.2226 7.69266ZM21.2317 13.9425L17.5039 13.9425C16.7758 13.9404 16.4113 14.3033 16.4103 15.0311L16.4103 28.9087C16.4113 29.6365 16.7758 29.9994 17.5039 29.9973L21.2287 29.9973C21.9567 29.9993 22.3213 29.6365 22.3223 28.9087L22.3223 15.0311C22.3243 14.3023 21.9608 13.9395 21.2317 13.9425ZM28.8327 9.94188L25.4215 9.94188C24.5885 9.94191 24.1719 10.3583 24.1719 11.1909L24.1719 28.7542C24.1729 29.586 24.5894 30.0023 25.4215 30.0033L28.8327 30.0033C29.6658 30.0033 30.0823 29.587 30.0823 28.7542L30.0823 11.1894C30.0803 10.3587 29.6638 9.94286 28.8327 9.94188Z" fill-rule="nonzero"/>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

6
src/assets/svg/echart_bar.svg

@ -0,0 +1,6 @@
<svg width="29.996185" height="22.310669" viewBox="0 0 29.9962 22.3107" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<path d="M4.69085 2.22367L1.37861 2.22367C0.460541 2.22168 0.00100708 2.67956 0 3.59716L0 20.9311C0.000976562 21.8488 0.46051 22.3066 1.37861 22.3046L4.69684 22.3046C5.61494 22.3066 6.07445 21.8488 6.07545 20.9311L6.07545 3.59716C6.07247 2.67746 5.61094 2.21967 4.69085 2.22367Z" fill-opacity="0.3"/>
<path d="M28.7466 2.24924L25.3354 2.24924C24.5024 2.24927 24.0858 2.66566 24.0858 3.49826L24.0858 21.0616C24.0868 21.8934 24.5033 22.3097 25.3354 22.3107L28.7466 22.3107C29.5797 22.3107 29.9962 21.8944 29.9962 21.0616L29.9962 3.49676C29.9942 2.66606 29.5777 2.25022 28.7466 2.24924Z" fill-opacity="0.3"/>
<path d="M21.1456 6.24986L17.4178 6.24986C16.6897 6.24776 16.3252 6.61066 16.3242 7.33846L16.3242 21.2161C16.3252 21.9439 16.6897 22.3068 17.4178 22.3047L21.1426 22.3047C21.8706 22.3067 22.2352 21.9439 22.2362 21.2161L22.2362 7.33846C22.2382 6.60966 21.8747 6.24686 21.1456 6.24986Z" fill-opacity="0.3"/>
<path d="M13.1365 1.62125e-05L9.90823 1.62125e-05C9.01619 -0.00100422 8.56913 0.444337 8.5671 1.33604L8.5671 20.9686C8.56916 21.8603 9.01622 22.3056 9.90823 22.3046L13.1365 22.3046C14.0286 22.3056 14.4756 21.8603 14.4777 20.9686L14.4777 1.33604C14.4776 0.442357 14.0306 -0.00298405 13.1365 1.62125e-05Z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

6
src/assets/svg/editor.svg

@ -0,0 +1,6 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg viewBox="0 0 1025 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200.1953125" height="200">
<path d="M960 460.8c-19.2 0-38.4 12.8-38.4 32v38.4c0 19.2 19.2 32 38.4 32s38.4-12.8 38.4-32v-38.4c0-19.2-19.2-32-38.4-32zM1011.2 38.4c-12.8-19.2-38.4-19.2-57.6 0l-556.8 556.8c-19.2 12.8-19.2 38.4 0 57.6 12.8 19.2 38.4 19.2 57.6 0l556.8-556.8c19.2-12.8 19.2-38.4 0-57.6z"></path>
<path d="M960 620.8c-25.6 0-38.4 19.2-38.4 38.4v192c0 32-25.6 64-64 64h-684.8c-32 0-64-25.6-64-64v-684.8c0-32 25.6-64 64-64h416c19.2 0 38.4-19.2 38.4-38.4s-19.2-38.4-38.4-38.4h-416c-76.8 0-140.8 64-140.8 140.8v691.2c0 76.8 64 140.8 140.8 140.8h684.8c76.8 0 140.8-64 140.8-140.8v-198.4c0-25.6-19.2-38.4-38.4-38.4z" ></path>
</svg>

After

Width:  |  Height:  |  Size: 902 B

1
src/assets/svg/email.svg

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="13.714" viewBox="0 0 16 13.714"><path d="M79.486,130.743a.623.623,0,0,0-.629-.114v-.914A1.684,1.684,0,0,0,77.143,128H66.857a1.684,1.684,0,0,0-1.714,1.714v.971a.522.522,0,0,0-.629.114A1.556,1.556,0,0,0,64,132v8a1.684,1.684,0,0,0,1.714,1.714H78.286A1.684,1.684,0,0,0,80,140v-8A1.773,1.773,0,0,0,79.486,130.743Zm-8.743,7.086a1.657,1.657,0,0,0,2.4,0l1.029-1.029,3.886,3.714H65.943l3.771-3.771ZM75.029,136l3.829-3.829v7.543Zm-8.171-6.857H77.143a.54.54,0,0,1,.571.571v2L72.4,137.029a.552.552,0,0,1-.8,0L69.714,135.2l-3.429-3.429v-2.057A.54.54,0,0,1,66.857,129.143ZM68.914,136l-3.771,3.771v-7.543Z" transform="translate(-64 -128)"/></svg>

After

Width:  |  Height:  |  Size: 690 B

3
src/assets/svg/enable.svg

@ -0,0 +1,3 @@
<svg width="129.518021" height="122.574341" viewBox="0 0 129.518 122.574" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<path d="M64.6959 115.846C59.6889 115.954 15.6467 115.973 11.8497 115.063C8.47052 114.249 8.99916 111.557 9.76976 107.631C9.91772 106.878 10.0746 106.079 10.2145 105.239C11.1012 100.024 20.5358 91.541 24.3072 89.2292C28.088 86.9332 29.2151 87.9129 39.0371 86.5689C48.8501 85.2339 52.7511 76.5042 53.841 73.3635C54.9218 70.204 54.2936 62.6033 53.4161 61.7839C52.5385 60.9645 48.8895 54.8788 48.5179 53.8715C48.1301 52.8737 46.4301 49.0933 46.4301 49.0933C40.6356 42.5526 43.7329 39.4649 44.2408 39.1439C44.7397 38.8229 44.8228 36.6333 44.7397 32.435C44.7249 31.6933 44.697 31.0145 44.6697 30.3527C44.5427 27.2685 44.4309 24.5545 45.7467 17.5663C47.3446 9.086 61.3541 7.14368 61.3541 7.14368L68.0356 7.14368C68.0356 7.14368 82.0426 9.086 83.643 17.5663C84.9584 24.5941 84.8446 27.2983 84.714 30.403C84.6868 31.0488 84.6589 31.712 84.643 32.435C84.5597 36.6337 84.643 38.8162 85.1509 39.1439C85.6588 39.4649 88.7469 42.5436 82.9615 49.0933C82.9615 49.0933 81.2617 52.8762 80.8831 53.8809C80.5139 54.8788 76.8551 60.9641 75.9869 61.7841C75.0979 62.6017 74.4812 70.2046 75.5598 73.3613C75.7215 73.8323 75.9476 74.4262 76.2436 75.1003C78.4515 72.7375 80.9872 70.666 83.7842 68.9526C83.7059 67.6803 83.7221 66.4561 83.7657 66.1188C83.8672 65.4519 84.729 64.0357 84.729 64.0357C88.2578 60.1467 92.2788 50.6152 92.2788 50.6152C99.496 41.7239 93.1195 36.5551 93.1195 36.5551C93.3668 35.3447 93.914 24.4346 93.4521 21.9241C92.99 19.423 92.6114 14.0925 86.5306 7.17804C80.4423 0.265869 69.3177 0 69.3177 0L64.6965 0.00933838L60.0778 0C60.0778 0 48.9622 0.284363 42.8813 7.18939C36.7913 14.0945 36.4125 19.4251 35.9507 21.9354C35.498 24.4366 36.043 35.3467 36.3017 36.5664C36.3017 36.5664 29.9248 41.7351 37.133 50.6266C37.133 50.6266 41.161 60.1576 44.6828 64.0471C44.6828 64.0471 45.542 65.4626 45.6341 66.1277C45.7265 66.7947 45.6988 70.9709 45.0339 72.063C44.3779 73.1602 40.6923 79.1208 35.5348 79.6451C33.804 79.8217 31.9079 79.7667 30.0164 79.712C26.2643 79.6033 22.5303 79.4951 20.1394 81.1949C16.5527 83.731 3.68185 93.8488 1.42546 102.329C-0.847153 110.828 -1.34586 120.286 7.21072 122.574L76.9553 122.574C74.9623 120.561 73.2139 118.318 71.7612 115.893C68.2694 115.888 65.7002 115.87 64.6959 115.846ZM127.885 82.3091L88.3851 115.309C87.4623 116.08 86.4011 116.426 85.2013 116.346C84.0015 116.266 82.9953 115.783 82.1828 114.896L65.6828 96.8965C63.98 95.0388 64.1016 92.2413 65.9592 90.5385C67.8169 88.8357 70.6144 88.9573 72.3172 90.8149L85.9131 105.647L122.115 75.4023C124.049 73.7866 126.838 74.0366 128.453 75.9706C130.069 77.9045 129.819 80.6934 127.885 82.3091Z" clip-rule="evenodd" fill-rule="evenodd"/>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

1
src/assets/svg/enviMonitoring.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1721615299541" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6160" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M719.872 716.8a142.336 142.336 0 0 0 142.336-142.336 140.8 140.8 0 0 0-74.752-124.928V298.496a67.072 67.072 0 1 0-134.656 0v150.016a140.8 140.8 0 0 0-74.752 124.928 142.336 142.336 0 0 0 141.824 143.36z m-32.256-226.816a25.6 25.6 0 0 0 16.384-24.064V298.496a15.872 15.872 0 1 1 32.256 0v166.4a25.6 25.6 0 0 0 16.384 24.064 91.136 91.136 0 1 1-65.024 0z" p-id="6161"></path><path d="M719.872 566.784m-49.152 0a49.152 49.152 0 1 0 98.304 0 49.152 49.152 0 1 0-98.304 0Z" p-id="6162"></path><path d="M512 0a512 512 0 1 0 512 512A512 512 0 0 0 512 0z m0 972.8a460.8 460.8 0 1 1 460.8-460.8 460.8 460.8 0 0 1-460.8 460.8z" p-id="6163"></path><path d="M428.544 706.56a140.288 140.288 0 0 0 123.904-153.6c0-83.968-123.904-224.256-123.904-224.256s-123.904 141.824-123.904 225.792a140.288 140.288 0 0 0 123.904 152.064z" p-id="6164"></path><path d="M852.48 712.192a141.824 141.824 0 0 0-96.768 37.376 93.696 93.696 0 0 1-130.048 0 143.872 143.872 0 0 0-193.536 0 93.184 93.184 0 0 1-130.048 0 141.312 141.312 0 0 0-97.28-37.376 25.6 25.6 0 0 0 0 51.2 91.648 91.648 0 0 1 65.024 26.624 143.872 143.872 0 0 0 193.536 0 93.184 93.184 0 0 1 130.048 0 143.872 143.872 0 0 0 193.536 0 92.16 92.16 0 0 1 65.024-26.624 25.6 25.6 0 0 0 0-51.2z" p-id="6165"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

7
src/assets/svg/factory.svg

@ -0,0 +1,7 @@
<svg width="29.998550" height="30.002111" viewBox="0 0 29.9986 30.0021" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<desc>
Created with Pixso.
</desc>
<defs/>
<path id="path" d="M25.223 0.000110626L25.601 0.000110626C26.1007 0.00845528 26.5987 0.04179 27.095 0.100111C27.3196 0.119722 27.5362 0.172056 27.745 0.257111C27.9861 0.442051 28.1355 0.683718 28.193 0.982111C28.3164 1.55319 28.3784 2.13086 28.379 2.71511C28.4 3.54211 28.456 4.36711 28.501 5.19311C28.874 11.8511 29.273 18.5071 29.753 25.1581C29.793 25.8491 29.873 26.5371 29.942 27.2251C30.0079 27.7702 30.0162 28.3162 29.967 28.8631C29.942 29.1726 29.8373 29.4523 29.653 29.7021C29.5147 29.8656 29.34 29.9656 29.129 30.0021L0.899994 30.0021C0.477463 29.8246 0.17746 29.5246 0 29.1021L0 14.7721C0.155685 14.4523 0.374008 14.1833 0.654999 13.9651C1.20799 13.5021 1.855 13.1651 2.44299 12.7651C3.543 12.0511 4.625 11.3181 5.731 10.6181C5.94901 10.4791 6.175 10.3511 6.38 10.1931C6.79041 9.84687 7.2444 9.57288 7.742 9.37111C8.1323 9.2304 8.49897 9.27674 8.842 9.51011C9.07973 9.71206 9.22306 9.96705 9.272 10.2751C9.34927 10.7358 9.37128 11.1992 9.338 11.6651C9.2808 12.3998 9.27113 13.1352 9.309 13.8711C9.58976 13.904 9.86243 13.8707 10.127 13.7711C10.6348 13.5278 11.1015 13.2218 11.527 12.8531C12.451 12.2351 13.369 11.6071 14.292 10.9871C14.777 10.6561 15.279 10.3481 15.754 10.0021C16.1566 9.68814 16.5999 9.45015 17.084 9.28811C17.429 9.1806 17.7486 9.2316 18.043 9.44111C18.2777 9.65136 18.4181 9.91236 18.464 10.2241C18.5406 10.6906 18.5626 11.1595 18.53 11.6311C18.4706 12.3563 18.459 13.0823 18.495 13.8091L20.777 13.8091C20.807 15.1611 20.792 16.5141 20.786 17.8671L21.173 17.8671C21.537 13.6321 21.925 9.39911 22.289 5.16711C22.361 4.12711 22.374 3.08211 22.521 2.04911C22.5737 1.56904 22.6944 1.10671 22.883 0.662111C22.966 0.460453 23.1026 0.306454 23.293 0.200111C23.4323 0.148386 23.5756 0.113052 23.723 0.0941105C24.2209 0.0292149 24.7209 -0.00211906 25.223 0.000110626ZM7.097 17.1831C6.78687 17.2531 6.5822 17.4391 6.483 17.7411C6.44588 17.8696 6.43188 18.0006 6.44099 18.1341C6.44099 18.6601 6.44099 19.1851 6.44099 19.7111C6.45233 20.2718 6.73833 20.5464 7.299 20.5351C7.85966 20.5238 8.13433 20.2378 8.123 19.6771C8.123 19.0941 8.128 18.5121 8.123 17.9301C8.10028 17.6776 7.98668 17.4764 7.7822 17.3265C7.57772 17.1766 7.34465 17.1288 7.097 17.1831ZM13.515 17.1831C13.098 17.2779 12.8804 17.5389 12.862 17.9661C12.862 18.5361 12.862 19.1051 12.862 19.6741C12.862 20.2334 13.1417 20.5131 13.701 20.5131C14.2603 20.5131 14.54 20.2334 14.54 19.6741C14.54 19.0921 14.545 18.5101 14.54 17.9271C14.517 17.6745 14.4032 17.4734 14.1985 17.3237C13.9938 17.174 13.7626 17.1285 13.515 17.1831ZM23.178 20.5201C22.7953 20.5695 22.5596 20.7819 22.4706 21.1573C22.3817 21.5327 22.4971 21.8283 22.817 22.0441C23.0306 22.1722 23.261 22.2202 23.508 22.1881L26.013 22.1881C26.5717 22.1768 26.8453 21.8918 26.834 21.3331C26.8227 20.7744 26.5377 20.5008 25.979 20.5121C25.041 20.5121 24.115 20.5021 23.178 20.5201ZM7.097 22.4121C6.68086 22.5065 6.46286 22.7669 6.44299 23.1931C6.44299 23.7631 6.44299 24.3341 6.44299 24.9051C6.43134 25.4651 6.70551 25.7509 7.2655 25.7626C7.8255 25.7743 8.11134 25.5001 8.123 24.9401C8.123 24.3701 8.123 23.7991 8.123 23.2281C8.12339 22.9879 8.03606 22.7856 7.861 22.6211C7.64454 22.4163 7.38787 22.3473 7.097 22.4121ZM13.512 22.4111C13.0955 22.5058 12.8779 22.7664 12.859 23.1931C12.859 23.7751 12.859 24.3561 12.859 24.9381C12.8777 25.4781 13.1572 25.7481 13.6975 25.7481C14.2378 25.7481 14.5173 25.4781 14.536 24.9381C14.536 24.3441 14.542 23.7501 14.536 23.1561C14.5136 22.9031 14.4 22.7016 14.1952 22.5514C13.9904 22.4012 13.76 22.3564 13.512 22.4111ZM22.144 24.0841C21.6585 24.1949 21.443 24.4977 21.4974 24.9927C21.5518 25.4877 21.828 25.7365 22.326 25.7391L26.026 25.7391C26.604 25.7591 26.893 25.4799 26.893 24.9016C26.893 24.3233 26.604 24.0441 26.026 24.0641L22.488 24.0641C22.3702 24.058 22.2602 24.064 22.144 24.0841Z" fill-rule="nonzero" fill="#0073FB"/>
</svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

1
src/assets/svg/fax.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1644203422890" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2998" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M997.901049 458.522739c14.328836 0 25.587206-11.258371 25.587207-25.587207v-102.348825c0-42.474763-34.286857-76.761619-76.761619-76.76162h-98.766617v-177.063468c0-42.474763-34.286857-76.761619-76.761619-76.761619h-518.396802c-42.474763 0-76.761619 34.286857-76.761619 76.761619v177.063468H76.761619c-42.474763 0-76.761619 34.286857-76.761619 76.76162v375.108445c0 42.474763 34.286857 76.761619 76.761619 76.76162h98.766617v164.269865c0 42.474763 34.286857 76.761619 76.761619 76.761619h518.396802c42.474763 0 76.761619-34.286857 76.761619-76.761619v-164.269865H946.726637c42.474763 0 76.761619-34.286857 76.761619-76.76162v-122.81859c0-14.328836-11.258371-25.587206-25.587207-25.587207s-25.587206 11.258371-25.587206 25.587207v122.81859c0 14.328836-11.258371 25.587206-25.587206 25.587207h-98.766617V569.05947c0-42.474763-34.286857-76.761619-76.761619-76.761619h-518.396802c-42.474763 0-76.761619 34.286857-76.761619 76.761619v162.222889H76.761619c-14.328836 0-25.587206-11.258371-25.587206-25.587207v-375.108445c0-14.328836 11.258371-25.587206 25.587206-25.587207h869.965018c14.328836 0 25.587206 11.258371 25.587206 25.587207v102.348825c0 14.328836 11.258371 25.587206 25.587206 25.587207z m-771.1984 111.048475c0-14.328836 11.258371-25.587206 25.587206-25.587206h518.396802c14.328836 0 25.587206 11.258371 25.587206 25.587206v377.667167c0 14.328836-11.258371 25.587206-25.587206 25.587206h-518.396802c-14.328836 0-25.587206-11.258371-25.587206-25.587206v-377.667167z m0-315.746127v-177.063468c0-14.328836 11.258371-25.587206 25.587206-25.587206h518.396802c14.328836 0 25.587206 11.258371 25.587206 25.587206v177.063468h-569.571214z" p-id="2999"></path></svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

1
src/assets/svg/gejizhengfu.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="195.23px" viewBox="0 0 1049 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M498.605609 10.122299c5.826207-3.283862 11.393471-7.403402 18.055357-8.874667 8.674575-1.800828 18.125977-1.024 25.906023 3.460414 161.80377 94.772966 323.654621 189.48708 485.45839 284.248276 9.015908 5.461333 16.37223 13.971126 19.503081 24.128735 4.260782 13.924046 1.494805 30.107954-8.038989 41.277794-7.838897 9.321931-19.973885 14.571402-32.097103 14.618482-21.974805 0.129471-43.949609 0-65.912644 0.058851-0.01177 168.206713-0.01177 336.401655 0 504.608368 8.662805 0.01177 17.325609 0 25.988414 0.01177 10.628414 0.105931 21.46869-0.765057 31.814621 2.259862 22.775172 5.920368 41.442575 25.011494 46.856827 47.916138 2.742437 10.416552 1.659586 21.268598 1.894989 31.908781 0.376644 16.690023-5.873287 33.403586-17.172598 45.691587-12.099678 13.417931-29.931402 21.48046-48.010299 21.53931-304.881287 0.01177-609.750805 0-914.632092 0.01177-16.760644 0.094161-33.403586-6.626575-45.467954-18.243678C9.780966 992.479632 2.201011 974.765609 2.354023 956.922115c0.247172-10.663724-0.870989-21.504 1.624276-31.979402 3.684046-16.478161 14.041747-31.308506 28.189425-40.512736 10.651954-7.038529 23.398989-10.816736 36.157793-10.769655 13.206069-0.02354 26.412138 0.01177 39.618207-0.01177-0.02354-168.206713 0.02354-336.413425-0.02354-504.620138-21.51577-0.01177-43.01977 0.04708-64.52377-0.02354-11.264 0-22.586851-4.366713-30.496368-12.464552-13.676874-13.782805-15.924966-37.264184-5.296552-53.483402 3.848828-5.873287 9.145379-10.746115 15.159908-14.347771C181.377471 195.854713 339.99154 102.988506 498.605609 10.122299m22.857563 213.698207c-5.225931 2.966069-8.651034 8.121379-11.087448 13.476781-14.124138 28.742621-28.377747 57.414621-42.478345 86.169012-32.75623 4.872828-65.54777 9.486713-98.304 14.32423-9.451402 1.200552-17.890575 8.062529-20.821333 17.149057-3.213241 9.157149-0.529655 19.926805 6.508874 26.58869 23.693241 23.104736 47.433563 46.150621 71.126804 69.267126-5.567264 32.544368-11.158069 65.088736-16.713563 97.644874-1.471264 7.485793 0.623816 15.560092 5.590805 21.362758 5.16708 6.226391 13.429701 9.616184 21.492229 8.957058 5.214161-0.258943 9.898667-2.765977 14.394851-5.214161 27.836322-14.665563 55.707954-29.260506 83.544276-43.937839 29.554759 15.465931 59.038897 31.061333 88.581885 46.550805 7.991908 4.11954 18.173057 3.672276 25.64708-1.412414 8.21554-5.273011 12.829425-15.618943 11.158069-25.258667-5.567264-32.885701-11.27577-65.736092-16.878345-98.621793 22.363218-21.798253 44.726437-43.596506 67.089656-65.382989 4.296092-3.990069 8.651034-8.309701 10.416551-14.065287 3.966529-11.016828-0.941609-24.222897-11.016827-30.096184-4.896368-3.08377-10.757885-3.613425-16.34869-4.390253-30.590529-4.437333-61.181057-8.874667-91.771586-13.32377-14.394851-29.154575-28.801471-58.297379-43.149241-87.463724-2.142161-4.637425-5.273011-8.945287-9.604414-11.758345-7.991908-5.473103-19.161747-5.708506-27.377288-0.564965m-263.297471 507.621517c-9.380782 2.330483-16.807724 10.957977-17.502161 20.633011-0.282483 6.19108-0.694437 12.782345 2.165701 18.490851 3.837057 8.286161 12.817655 13.759264 21.939495 13.406161 171.455264-0.01177 342.922299 0 514.377563 0 5.390713-0.03531 11.052138 0.470805 16.113287-1.789057 8.262621-3.307402 14.230069-11.687724 14.477242-20.609472 0.129471-5.661425 0.517885-11.617103-1.953839-16.878345-3.601655-8.380322-12.417471-14.124138-21.551081-13.994666-171.831908-0.03531-343.663816 0-515.483954-0.01177-4.201931 0.01177-8.474483-0.270713-12.582253 0.753287m0.070621 111.922023c-9.369011 2.283402-16.819494 10.852046-17.561012 20.50354-0.329563 6.473563-0.717977 13.429701 2.495265 19.326529 4.013609 7.968368 12.817655 13.053057 21.715862 12.747034 173.773977-0.01177 347.536184 0.03531 521.310161-0.02354 11.369931 0.258943 21.986575-8.851126 23.351908-20.162207 0.859218-8.815816 0.659126-18.891034-6.026299-25.576459-5.461333-6.249931-14.088828-8.20377-22.068966-7.615265-169.454345 0.04708-338.89692 0.01177-508.339494 0.02354-4.966989 0.058851-10.004598-0.376644-14.877425 0.776828z" /></svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

1
src/assets/svg/mail.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1644203493855" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4012" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M204.8 842.6496a108.8 108.8 0 0 1-108.8-108.8V290.1504c0-60.1088 48.6912-108.8 108.8-108.8h614.4c60.1088 0 108.8 48.6912 108.8 108.8v443.6992A108.8 108.8 0 0 1 819.2 842.6496H204.8z m0-64h614.4a44.8 44.8 0 0 0 44.8-44.8V290.1504A44.8 44.8 0 0 0 819.2 245.3504H204.8a44.8 44.8 0 0 0-44.8 44.8v443.6992c0 24.7808 20.0704 44.8 44.8 44.8z" fill="#5A5A68" p-id="4013"></path><path d="M139.5712 387.1744a32 32 0 1 1 28.0576-57.5488l335.9744 163.9936c5.2736 2.56 11.52 2.56 16.7936 0l335.9744-163.9936a32 32 0 1 1 28.0576 57.5488l-335.9232 163.9424c-23.04 11.264-49.9712 11.264-73.0112 0L139.5712 387.1744z" fill="#5A5A68" p-id="4014"></path></svg>

After

Width:  |  Height:  |  Size: 1018 B

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save