Commit aaac800bc268d193fecd79ac4a5fc7398d1a0269

Authored by 2c2c2c
1 parent fb390ddb

与客户沟通对接,装修垃圾投放点新增页面需要修改:

1、社区录入改成字典下拉格式(客户回去统计字典数据)
2、增加小区字段,放在社区下面,小区隶属社区为必填项(非下拉)
3、投放点编号规则修改:原有基础上拼接社区代码
4、“投放点形式”改为“是否为实行物业管理的区域(小区)”为下拉格式
5、把管理单位一栏改为非必填
6、“管理人”改为“管理员”
7、投放时间格式更改:改为时间段格式(HH:mm~HH:mm)
trash-ui/src/api/dict.js
@@ -215,3 +215,10 @@ export function getAreaList() { @@ -215,3 +215,10 @@ export function getAreaList() {
215 method: 'get' 215 method: 'get'
216 }); 216 });
217 } 217 }
  218 +
  219 +export function getAreasList() {
  220 + return requestRemote({
  221 + url: '/api/gisservice/v2/jurisdictions/areas?dict=1',
  222 + method: 'get'
  223 + });
  224 +}
trash-ui/src/views/unit/dropPointInfo/index.vue
@@ -19,11 +19,11 @@ @@ -19,11 +19,11 @@
19 @keyup.enter.native="handleQuery" 19 @keyup.enter.native="handleQuery"
20 /> 20 />
21 </el-form-item> 21 </el-form-item>
22 - <el-form-item label="投放点形式" prop="type">  
23 - <el-select v-model="queryParams.type" placeholder="请选择投放点形式" clearable size="small"> 22 + <el-form-item label="是否为实行物业管理的区域(小区)" prop="type">
  23 + <el-select v-model="queryParams.type" placeholder="请选择是否为实行物业管理的区域(小区)" clearable size="small">
24 <el-option label="全部" value=""/> 24 <el-option label="全部" value=""/>
25 - <el-option label="固定" value="固定"/>  
26 - <el-option label="临时" value="临时"/> 25 + <el-option label="是" value="是"/>
  26 + <el-option label="否" value="否"/>
27 </el-select> 27 </el-select>
28 </el-form-item> 28 </el-form-item>
29 <el-form-item> 29 <el-form-item>
@@ -94,12 +94,13 @@ @@ -94,12 +94,13 @@
94 </template> 94 </template>
95 </el-table-column> 95 </el-table-column>
96 <el-table-column label="社区" align="center" prop="community"/> 96 <el-table-column label="社区" align="center" prop="community"/>
  97 + <el-table-column label="小区" align="center" prop="plot"/>
97 <el-table-column label="详细地址" align="center" prop="address"/> 98 <el-table-column label="详细地址" align="center" prop="address"/>
98 <el-table-column label="投放点形式" align="center" prop="type"/> 99 <el-table-column label="投放点形式" align="center" prop="type"/>
99 <el-table-column label="投放点面积(m²)" align="center" prop="area"/> 100 <el-table-column label="投放点面积(m²)" align="center" prop="area"/>
100 <el-table-column label="投放点容量(m³)" align="center" prop="capacity"/> 101 <el-table-column label="投放点容量(m³)" align="center" prop="capacity"/>
101 <el-table-column label="管理单位" align="center" prop="managementUnit"/> 102 <el-table-column label="管理单位" align="center" prop="managementUnit"/>
102 - <el-table-column label="管理" align="center" prop="custodian"/> 103 + <el-table-column label="管理" align="center" prop="custodian"/>
103 <el-table-column label="管理员电话" align="center" prop="custodianPhone"/> 104 <el-table-column label="管理员电话" align="center" prop="custodianPhone"/>
104 <el-table-column label="投放时间" align="center" prop="dropTime" width="180"/> 105 <el-table-column label="投放时间" align="center" prop="dropTime" width="180"/>
105 <el-table-column label="投放点编号" align="center" prop="dropPointNo"/> 106 <el-table-column label="投放点编号" align="center" prop="dropPointNo"/>
@@ -112,7 +113,7 @@ @@ -112,7 +113,7 @@
112 </el-table-column> 113 </el-table-column>
113 <el-table-column label="创建时间" align="center" prop="createTime" width="180"> 114 <el-table-column label="创建时间" align="center" prop="createTime" width="180">
114 <template slot-scope="scope"> 115 <template slot-scope="scope">
115 - <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d} {h}-{i}-{s}') }}</span> 116 + <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
116 </template> 117 </template>
117 </el-table-column> 118 </el-table-column>
118 <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> 119 <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
@@ -164,24 +165,29 @@ @@ -164,24 +165,29 @@
164 </el-form-item> 165 </el-form-item>
165 166
166 <el-form-item label="所属街道" prop="street"> 167 <el-form-item label="所属街道" prop="street">
167 - <el-select v-model="form.street" placeholder="请输入所属街道" style="width: 100%" clearable>  
168 - <el-option v-for="(area,index) in streets" :label="area.name" :value="area.code" :key="area.code" @click.native="createDropPointNo(area)"/> 168 + <el-select v-model="form.street" placeholder="请输入所属街道" style="width: 100%" clearable @change="getCommunitys">
  169 + <el-option v-for="(area,index) in streets" :label="area.name" :value="area.code" :key="area.code"/>
169 </el-select> 170 </el-select>
170 </el-form-item> 171 </el-form-item>
171 172
172 - <el-form-item label="社区" prop="community">  
173 - <el-input v-model="form.community" placeholder="请输入社区"/>  
174 - </el-form-item> 173 + <el-form-item label="社区" prop="community">
  174 + <el-select v-model="form.community" placeholder="请输入所属社区" style="width: 100%" clearable>
  175 + <el-option v-for="(area,index) in communitys" :label="area.name" :value="area.code" :key="area.code" @click.native="createDropPointNo(area,'community')"/>
  176 + </el-select>
  177 + </el-form-item>
175 178
  179 + <el-form-item label="小区" prop="plot">
  180 + <el-input v-model="form.plot" placeholder="请输入小区"/>
  181 + </el-form-item>
176 182
177 <el-form-item label="详细地址" prop="address"> 183 <el-form-item label="详细地址" prop="address">
178 <el-input v-model="form.address" placeholder="请输入详细地址"/> 184 <el-input v-model="form.address" placeholder="请输入详细地址"/>
179 </el-form-item> 185 </el-form-item>
180 186
181 - <el-form-item label="投放点形式" prop="type">  
182 - <el-select v-model="form.type" placeholder="请选择投放点形式" style="width: 100%">  
183 - <el-option label="固定" value="固定"/>  
184 - <el-option label="临时" value="临时"/> 187 + <el-form-item label="是否为实行物业管理的区域(小区)" prop="type">
  188 + <el-select v-model="form.type" placeholder="请选择是否为实行物业管理的区域(小区)" style="width: 100%">
  189 + <el-option label="是" value="是"/>
  190 + <el-option label="否" value="否"/>
185 </el-select> 191 </el-select>
186 </el-form-item> 192 </el-form-item>
187 193
@@ -197,24 +203,35 @@ @@ -197,24 +203,35 @@
197 <el-input v-model="form.managementUnit" placeholder="请输入管理单位"/> 203 <el-input v-model="form.managementUnit" placeholder="请输入管理单位"/>
198 </el-form-item> 204 </el-form-item>
199 205
200 - <el-form-item label="管理人" prop="custodian">  
201 - <el-input v-model="form.custodian" placeholder="请输入管理人"/> 206 + <el-form-item label="管理员" prop="custodian">
  207 + <el-input v-model="form.custodian" placeholder="请输入管理员"/>
202 </el-form-item> 208 </el-form-item>
203 209
204 <el-form-item label="管理员电话" prop="custodianPhone"> 210 <el-form-item label="管理员电话" prop="custodianPhone">
205 <el-input v-model="form.custodianPhone" placeholder="请输入管理员联系电话" :maxlength="11" show-word-limit/> 211 <el-input v-model="form.custodianPhone" placeholder="请输入管理员联系电话" :maxlength="11" show-word-limit/>
206 </el-form-item> 212 </el-form-item>
207 213
208 - <el-form-item label="投放时间" prop="dropTime"> 214 + <el-form-item label="投放时间" prop="dropTime" v-if="dropTime">
209 <el-time-select 215 <el-time-select
  216 + placeholder="起始时间"
210 v-model="form.dropTime" 217 v-model="form.dropTime"
211 - style="width: 100%" 218 + style="width: 50%"
212 :picker-options="{ 219 :picker-options="{
213 - start: '00:00',  
214 - step: '00:30',  
215 - end: '23:30'  
216 - }"  
217 - placeholder="选择时间"> 220 + start: '00:00',
  221 + step: '00:15',
  222 + end: '23:45'
  223 + }">
  224 + </el-time-select>
  225 + <el-time-select
  226 + placeholder="结束时间"
  227 + v-model="endTime"
  228 + style="width: 50%"
  229 + :picker-options="{
  230 + start: '00:15',
  231 + step: '00:15',
  232 + end: '24:00',
  233 + minTime: form.dropTime
  234 + }">
218 </el-time-select> 235 </el-time-select>
219 </el-form-item> 236 </el-form-item>
220 237
@@ -284,7 +301,7 @@ import { @@ -284,7 +301,7 @@ import {
284 updateDropPointInfo, 301 updateDropPointInfo,
285 exportDropPointInfo 302 exportDropPointInfo
286 } from "@/api/unit/dropPointInfo"; 303 } from "@/api/unit/dropPointInfo";
287 -import {getAreaList} from "@/api/dict" 304 +import {getAreaList,getAreasList} from "@/api/dict"
288 import AMapLoader from "@amap/amap-jsapi-loader"; 305 import AMapLoader from "@amap/amap-jsapi-loader";
289 import Treeselect from "@riophae/vue-treeselect"; 306 import Treeselect from "@riophae/vue-treeselect";
290 307
@@ -338,7 +355,10 @@ export default { @@ -338,7 +355,10 @@ export default {
338 {required: true, message: "请输入所属街道", trigger: "blur"} 355 {required: true, message: "请输入所属街道", trigger: "blur"}
339 ], 356 ],
340 community: [ 357 community: [
341 - {required: true, message: "请输入社区", trigger: "blur"} 358 + {required: true, message: "请选择社区", trigger: "blur"}
  359 + ],
  360 + plot: [
  361 + {required: true, message: "请输入小区", trigger: "blur"}
342 ], 362 ],
343 address: [ 363 address: [
344 {required: true, message: "请输入详细地址", trigger: "blur"} 364 {required: true, message: "请输入详细地址", trigger: "blur"}
@@ -360,7 +380,7 @@ export default { @@ -360,7 +380,7 @@ export default {
360 {required: true, message: "请输入管理单位", trigger: "blur"} 380 {required: true, message: "请输入管理单位", trigger: "blur"}
361 ], 381 ],
362 custodian: [ 382 custodian: [
363 - {required: true, message: "请输入管理", trigger: "blur"} 383 + {required: true, message: "请输入管理", trigger: "blur"}
364 ], 384 ],
365 custodianPhone: [ 385 custodianPhone: [
366 {required: true, message: "请输入管理员电话", trigger: "blur"}, 386 {required: true, message: "请输入管理员电话", trigger: "blur"},
@@ -373,9 +393,6 @@ export default { @@ -373,9 +393,6 @@ export default {
373 dropTime: [ 393 dropTime: [
374 {required: true, message: "请选择投放时间", trigger: "change"} 394 {required: true, message: "请选择投放时间", trigger: "change"}
375 ], 395 ],
376 - operatingUnit: [  
377 - {required: true, message: "请输入运营单位", trigger: "blur"}  
378 - ],  
379 transportUnit: [ 396 transportUnit: [
380 {required: true, message: "请输入运输单位", trigger: "blur"} 397 {required: true, message: "请输入运输单位", trigger: "blur"}
381 ], 398 ],
@@ -383,8 +400,12 @@ export default { @@ -383,8 +400,12 @@ export default {
383 {required: true, message: "请点击坐标点按钮选择坐标点", trigger: "blur"} 400 {required: true, message: "请点击坐标点按钮选择坐标点", trigger: "blur"}
384 ] 401 ]
385 }, 402 },
  403 + //区域
386 areas: [], 404 areas: [],
  405 + //街道
387 streets:[], 406 streets:[],
  407 + //社区
  408 + communitys:[],
388 // 地图 409 // 地图
389 map: null, 410 map: null,
390 keywords: "", 411 keywords: "",
@@ -392,27 +413,31 @@ export default { @@ -392,27 +413,31 @@ export default {
392 openMap:false, 413 openMap:false,
393 center: null, 414 center: null,
394 circleMarker: null, 415 circleMarker: null,
  416 + endTime: null,
  417 + dropTime: true
395 }; 418 };
396 }, 419 },
397 created() { 420 created() {
398 - getAreaList().then(response => { 421 + getAreasList().then(response => {
399 if(response==null || response.length===0){ 422 if(response==null || response.length===0){
400 this.$message.error("获取区域列表失败"); 423 this.$message.error("获取区域列表失败");
401 return; 424 return;
402 } 425 }
403 - const data = response;  
404 - for (let dataKey in data) {  
405 - if(data[dataKey].level === '3'){  
406 - this.areas.push({name:data[dataKey].name,code:data[dataKey].id, streets:[]})  
407 - }  
408 - }  
409 - for(let dataKey in data){  
410 - for(let areas1Key in this.areas){  
411 - if(data[dataKey].pid === this.areas[areas1Key].code){  
412 - this.areas[areas1Key].streets.push({code:data[dataKey].id, name:data[dataKey].name})  
413 - }  
414 - }  
415 - } 426 + let data = response.filter(data => data.code === "430100");
  427 + this.areas = data[0].items;
  428 + console.log(this.areas)
  429 + // for (let dataKey in data) {
  430 + // if(data[dataKey].parentCode === '430100'){
  431 + // this.areas.push({name:data[dataKey].name,code:data[dataKey].code, streets:[]})
  432 + // }
  433 + // }
  434 + // for(let dataKey in data){
  435 + // for(let areas1Key in this.areas){
  436 + // if(data[dataKey].parentCode === this.areas[areas1Key].code){
  437 + // this.areas[areas1Key].streets.push({code:data[dataKey].code, name:data[dataKey].name,item:data[dataKey].items})
  438 + // }
  439 + // }
  440 + // }
416 }); 441 });
417 442
418 this.getList(); 443 this.getList();
@@ -573,17 +598,25 @@ export default { @@ -573,17 +598,25 @@ export default {
573 } 598 }
574 }, 599 },
575 createDropPointNo(area){ 600 createDropPointNo(area){
576 - listDropPointInfo({dropPointNo: area.code}).then(response => {  
577 - const total = response.total+1;  
578 - this.form.dropPointNo = area.code+total.toString().padStart(3, '0');  
579 - }); 601 + listDropPointInfo({dropPointNo: area.code}).then(response => {
  602 + const total = response.total+1;
  603 + this.form.dropPointNo = area.code+total.toString().padStart(3, '0');
  604 + });
  605 +
580 }, 606 },
581 getStreets(regionName) { 607 getStreets(regionName) {
582 this.streets = []; 608 this.streets = [];
583 this.form.dropPointNo = null; 609 this.form.dropPointNo = null;
584 this.form.street = null; 610 this.form.street = null;
585 const region = this.areas.find(region => region.code === regionName); 611 const region = this.areas.find(region => region.code === regionName);
586 - this.streets = region.streets; 612 + this.streets = region.items;
  613 + },
  614 + getCommunitys(regionName){
  615 + this.communitys = [];
  616 + this.form.dropPointNo = null;
  617 + this.form.community = null;
  618 + const region = this.streets.find(region => region.code === regionName);
  619 + this.communitys = region.items;
587 }, 620 },
588 /** 下载文件 */ 621 /** 下载文件 */
589 /** 查询投放点信息管理列表 */ 622 /** 查询投放点信息管理列表 */
@@ -624,6 +657,9 @@ export default { @@ -624,6 +657,9 @@ export default {
624 updateTime: null, 657 updateTime: null,
625 updateBy: null 658 updateBy: null
626 }; 659 };
  660 + this.endTime = null;
  661 + this.streets = [];
  662 + this.communitys = [];
627 this.map = null; 663 this.map = null;
628 this.center = null; 664 this.center = null;
629 this.resetForm("form"); 665 this.resetForm("form");
@@ -654,26 +690,42 @@ export default { @@ -654,26 +690,42 @@ export default {
654 handleUpdate(row) { 690 handleUpdate(row) {
655 this.reset(); 691 this.reset();
656 const id = row.id || this.ids 692 const id = row.id || this.ids
  693 + this.dropTime = false;
657 getDropPointInfo(id).then(response => { 694 getDropPointInfo(id).then(response => {
  695 + let dropTime = response.data.dropTime.split("~");
  696 + console.log(dropTime)
658 this.form = response.data; 697 this.form = response.data;
  698 + this.form.dropTime = dropTime[0];
  699 + this.endTime = dropTime[1];
659 this.open = true; 700 this.open = true;
660 this.title = "修改投放点信息管理"; 701 this.title = "修改投放点信息管理";
  702 + this.dropTime = true;
661 }); 703 });
662 }, 704 },
663 /** 提交按钮 */ 705 /** 提交按钮 */
664 submitForm() { 706 submitForm() {
  707 +
665 this.$refs["form"].validate(valid => { 708 this.$refs["form"].validate(valid => {
666 if (valid) { 709 if (valid) {
  710 + let dropTime = this.form.dropTime;
  711 + if(this.endTime!=null){
  712 + this.form.dropTime = this.form.dropTime + "~" + this.endTime;
  713 + }else{
  714 + this.$message.error("请选择投放结束时间");
  715 + return;
  716 + }
667 if (this.form.id != null) { 717 if (this.form.id != null) {
668 updateDropPointInfo(this.form).then(response => { 718 updateDropPointInfo(this.form).then(response => {
669 this.msgSuccess("修改成功"); 719 this.msgSuccess("修改成功");
670 this.open = false; 720 this.open = false;
  721 + this.form.dropTime = dropTime;
671 this.getList(); 722 this.getList();
672 }); 723 });
673 } else { 724 } else {
674 addDropPointInfo(this.form).then(response => { 725 addDropPointInfo(this.form).then(response => {
675 this.msgSuccess("新增成功"); 726 this.msgSuccess("新增成功");
676 this.open = false; 727 this.open = false;
  728 + this.form.dropTime = dropTime;
677 this.getList(); 729 this.getList();
678 }); 730 });
679 } 731 }
trash-unit/src/main/java/com/trash/dropPointInfo/domain/DropPointInfo.java
@@ -39,6 +39,10 @@ public class DropPointInfo extends BaseEntity @@ -39,6 +39,10 @@ public class DropPointInfo extends BaseEntity
39 @Excel(name = "社区") 39 @Excel(name = "社区")
40 private String community; 40 private String community;
41 41
  42 + /** 小区 */
  43 + @Excel(name = "小区")
  44 + private String plot;
  45 +
42 /** 详细地址 */ 46 /** 详细地址 */
43 @Excel(name = "详细地址") 47 @Excel(name = "详细地址")
44 private String address; 48 private String address;
@@ -59,8 +63,8 @@ public class DropPointInfo extends BaseEntity @@ -59,8 +63,8 @@ public class DropPointInfo extends BaseEntity
59 @Excel(name = "管理单位") 63 @Excel(name = "管理单位")
60 private String managementUnit; 64 private String managementUnit;
61 65
62 - /** 管理人 */  
63 - @Excel(name = "管理人") 66 + /** 管理员 */
  67 + @Excel(name = "管理员")
64 private String custodian; 68 private String custodian;
65 69
66 /** 管理员电话 */ 70 /** 管理员电话 */
@@ -101,6 +105,13 @@ public class DropPointInfo extends BaseEntity @@ -101,6 +105,13 @@ public class DropPointInfo extends BaseEntity
101 @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") 105 @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
102 private Date createTime; 106 private Date createTime;
103 107
  108 + public String getPlot() {
  109 + return plot;
  110 + }
  111 +
  112 + public void setPlot(String plot) {
  113 + this.plot = plot;
  114 + }
104 115
105 public String getCoordinatePoint() { 116 public String getCoordinatePoint() {
106 return coordinatePoint; 117 return coordinatePoint;
trash-unit/src/main/resources/mapper/unit/DropPointInfoMapper.xml
@@ -26,6 +26,7 @@ PUBLIC &quot;-//mybatis.org//DTD Mapper 3.0//EN&quot; @@ -26,6 +26,7 @@ PUBLIC &quot;-//mybatis.org//DTD Mapper 3.0//EN&quot;
26 <result property="createBy" column="create_by" /> 26 <result property="createBy" column="create_by" />
27 <result property="updateTime" column="update_time" /> 27 <result property="updateTime" column="update_time" />
28 <result property="updateBy" column="update_by" /> 28 <result property="updateBy" column="update_by" />
  29 + <result property="plot" column="plot" />
29 </resultMap> 30 </resultMap>
30 31
31 <sql id="selectDropPointInfoVo"> 32 <sql id="selectDropPointInfoVo">
@@ -33,7 +34,7 @@ PUBLIC &quot;-//mybatis.org//DTD Mapper 3.0//EN&quot; @@ -33,7 +34,7 @@ PUBLIC &quot;-//mybatis.org//DTD Mapper 3.0//EN&quot;
33 area, capacity, management_unit, custodian, custodian_phone, 34 area, capacity, management_unit, custodian, custodian_phone,
34 drop_time, drop_point_no, operating_unit, 35 drop_time, drop_point_no, operating_unit,
35 transport_unit,coordinate_point, create_time, create_by, update_time, 36 transport_unit,coordinate_point, create_time, create_by, update_time,
36 - update_by from drop_point_info 37 + update_by,plot from drop_point_info
37 </sql> 38 </sql>
38 39
39 <select id="selectDropPointInfoList" parameterType="DropPointInfo" 40 <select id="selectDropPointInfoList" parameterType="DropPointInfo"
@@ -85,6 +86,7 @@ PUBLIC &quot;-//mybatis.org//DTD Mapper 3.0//EN&quot; @@ -85,6 +86,7 @@ PUBLIC &quot;-//mybatis.org//DTD Mapper 3.0//EN&quot;
85 <if test="createBy != null">create_by,</if> 86 <if test="createBy != null">create_by,</if>
86 <if test="updateTime != null">update_time,</if> 87 <if test="updateTime != null">update_time,</if>
87 <if test="updateBy != null">update_by,</if> 88 <if test="updateBy != null">update_by,</if>
  89 + <if test="plot != null">plot,</if>
88 </trim> 90 </trim>
89 <trim prefix="values (" suffix=")" suffixOverrides=","> 91 <trim prefix="values (" suffix=")" suffixOverrides=",">
90 <if test="dropPointName != null">#{dropPointName},</if> 92 <if test="dropPointName != null">#{dropPointName},</if>
@@ -107,6 +109,7 @@ PUBLIC &quot;-//mybatis.org//DTD Mapper 3.0//EN&quot; @@ -107,6 +109,7 @@ PUBLIC &quot;-//mybatis.org//DTD Mapper 3.0//EN&quot;
107 <if test="createBy != null">#{createBy},</if> 109 <if test="createBy != null">#{createBy},</if>
108 <if test="updateTime != null">#{updateTime},</if> 110 <if test="updateTime != null">#{updateTime},</if>
109 <if test="updateBy != null">#{updateBy},</if> 111 <if test="updateBy != null">#{updateBy},</if>
  112 + <if test="plot != null">#{plot},</if>
110 </trim> 113 </trim>
111 </insert> 114 </insert>
112 115
@@ -133,6 +136,7 @@ PUBLIC &quot;-//mybatis.org//DTD Mapper 3.0//EN&quot; @@ -133,6 +136,7 @@ PUBLIC &quot;-//mybatis.org//DTD Mapper 3.0//EN&quot;
133 <if test="createBy != null">create_by = #{createBy},</if> 136 <if test="createBy != null">create_by = #{createBy},</if>
134 <if test="updateTime != null">update_time = #{updateTime},</if> 137 <if test="updateTime != null">update_time = #{updateTime},</if>
135 <if test="updateBy != null">update_by = #{updateBy},</if> 138 <if test="updateBy != null">update_by = #{updateBy},</if>
  139 + <if test="plot != null">plot = #{plot},</if>
136 </trim> 140 </trim>
137 where id = #{id} 141 where id = #{id}
138 </update> 142 </update>