diff --git a/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt b/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt
index 863510f1..90d2c841 100644
--- a/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt
+++ b/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt
@@ -63,9 +63,12 @@ class RealmOperateHelper() {
         // 查询realm中对应tile号的数据
         val realm = getRealmDefaultInstance()
         val realmList =
-            getRealmTools(RenderEntity::class.java,false).and().equalTo("table", "OMDB_RD_LINK")
-                .and()
-                .rawPredicate("tileX>=$xStart and tileX<=$xEnd and tileY>=$yStart and tileY<=$yEnd")
+            getRealmTools(RenderEntity::class.java, false)
+                .equalTo("table", "OMDB_RD_LINK")
+                .greaterThanOrEqualTo("tileX", xStart)
+                .lessThanOrEqualTo("tileX", xEnd)
+                .greaterThanOrEqualTo("tileY", yStart)
+                .lessThanOrEqualTo("tileY", yEnd)
                 .findAll()
         // 将获取到的数据和查询的polygon做相交,只返回相交的数据
         val dataList = realm.copyFromRealm(realmList)
@@ -125,10 +128,12 @@ class RealmOperateHelper() {
         val yEnd = tileYSet.stream().max(Comparator.naturalOrder()).orElse(null)
         // 查询realm中对应tile号的数据
         val realm = getRealmDefaultInstance()
-        val realmList = getRealmTools(RenderEntity::class.java, true).and()
+        val realmList = getRealmTools(RenderEntity::class.java, true)
             .equalTo("table", table)
-            .and()
-            .rawPredicate("tileX>=$xStart and tileX<=$xEnd and tileY>=$yStart and tileY<=$yEnd")
+            .greaterThanOrEqualTo("tileX", xStart)
+            .lessThanOrEqualTo("tileX", xEnd)
+            .greaterThanOrEqualTo("tileY", yStart)
+            .lessThanOrEqualTo("tileY", yEnd)
             .findAll()
         // 将获取到的数据和查询的polygon做相交,只返回相交的数据
         val dataList = realm.copyFromRealm(realmList)
@@ -187,8 +192,8 @@ class RealmOperateHelper() {
         var link: RenderEntity? = null
         val realm = getRealmDefaultInstance()
         val realmR =
-            getRealmTools(RenderEntity::class.java, true).and().equalTo("table", "OMDB_RD_LINK")
-                .and().equalTo("properties['${LinkTable.linkPid}']", linkPid).findFirst()
+            getRealmTools(RenderEntity::class.java, true).equalTo("table", "OMDB_RD_LINK")
+                .equalTo("properties['${LinkTable.linkPid}']", linkPid).findFirst()
         if (realmR != null) {
             link = realm.copyFromRealm(realmR)
         }
@@ -202,8 +207,8 @@ class RealmOperateHelper() {
     suspend fun queryQcRecordBean(markId: String): QsRecordBean? {
         var qsRecordBean: QsRecordBean? = null
         val realm = getRealmDefaultInstance()
-        val realmR = getRealmTools(QsRecordBean::class.java, false).and()
-            .equalTo("table", "QsRecordBean").and().equalTo("id", markId).findFirst()
+        val realmR = getRealmTools(QsRecordBean::class.java, false)
+            .equalTo("table", "QsRecordBean").equalTo("id", markId).findFirst()
         if (realmR != null) {
             qsRecordBean = realm.copyFromRealm(realmR)
         }
@@ -215,7 +220,7 @@ class RealmOperateHelper() {
 
         val realm = getRealmDefaultInstance()
 
-        val realmR = getRealmTools(RenderEntity::class.java, true).and()
+        val realmR = getRealmTools(RenderEntity::class.java, true)
             .equalTo("properties['${LinkTable.linkPid}']", linkPid).findAll()
 
         val dataList = realm.copyFromRealm(realmR)
@@ -257,10 +262,12 @@ class RealmOperateHelper() {
         val yEnd = tileYSet.stream().max(Comparator.naturalOrder()).orElse(null)
         val realm = getRealmDefaultInstance()
         // 查询realm中对应tile号的数据
-        val realmList = getRealmTools(RenderEntity::class.java, false).and()
+        val realmList = getRealmTools(RenderEntity::class.java, false)
             .notEqualTo("table", DataCodeEnum.OMDB_RD_LINK.name)
-            .and()
-            .rawPredicate("tileX>=$xStart and tileX<=$xEnd and tileY>=$yStart and tileY<=$yEnd")
+            .greaterThanOrEqualTo("tileX", xStart)
+            .lessThanOrEqualTo("tileX", xEnd)
+            .greaterThanOrEqualTo("tileY", yStart)
+            .lessThanOrEqualTo("tileY", yEnd)
             .findAll()
         // 将获取到的数据和查询的polygon做相交,只返回相交的数据
         val queryResult = realmList?.stream()?.filter {
@@ -287,10 +294,9 @@ class RealmOperateHelper() {
     suspend fun queryLinkByLinkPid(linkPid: String): MutableList<RenderEntity> {
         val result = mutableListOf<RenderEntity>()
         val realm = getRealmDefaultInstance()
-        val realmList = getRealmTools(RenderEntity::class.java, false).and()
+        val realmList = getRealmTools(RenderEntity::class.java, false)
             .notEqualTo("table", DataCodeEnum.OMDB_RD_LINK.name)
-            .and()
-            .equalTo("properties['${LinkTable.linkPid}']", linkPid).and()
+            .equalTo("properties['${LinkTable.linkPid}']", linkPid)
             .findAll()
         result.addAll(realm.copyFromRealm(realmList))
         return result
@@ -383,14 +389,15 @@ class RealmOperateHelper() {
     }
 
     fun getRealmDefaultInstance(): Realm {
-        if(isUpdate){
+        if (isUpdate) {
+            Log.e("jingo", "数据库更新")
             Realm.getDefaultInstance().refresh()
             isUpdate = false;
         }
         return Realm.getDefaultInstance()
     }
 
-    fun updateRealmDefaultInstance(){
+    fun updateRealmDefaultInstance() {
         isUpdate = true
     }
 }
diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt
index 527528b5..e8aa4950 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt
@@ -533,6 +533,7 @@ class MainActivity : BaseActivity() {
         mapController.measureLayerHandler.measureValueLiveData.observe(this) {
             valueView.text = it.valueString
             unitView.text = it.unit
+            ClipboardUtils.copyText("${it.valueString}${it.unit}")
         }
         mapController.measureLayerHandler.tempMeasureValueLiveData.observe(this)
         {
diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskAdapter.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskAdapter.kt
index 1c5d8efa..ca4401d9 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskAdapter.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskAdapter.kt
@@ -13,6 +13,7 @@ import com.navinfo.omqs.ui.other.BaseViewHolder
 interface TaskAdapterCallback {
     fun itemOnClick(bean: HadLinkDvoBean)
     fun editOnClick(position: Int, bean: HadLinkDvoBean)
+    fun scrollPosition(position: Int)
 }
 
 /**
@@ -38,10 +39,12 @@ class TaskAdapter(
         val binding: AdapterTaskBinding =
             holder.viewBinding as AdapterTaskBinding
         val bean = data[position]
-        if(bean.linkStatus==1){
-            binding.taskHead.background = binding.root.context.getDrawable(R.drawable.selector_task_head)
-        }else{
-            binding.taskHead.background = binding.root.context.getDrawable(R.drawable.selector_task_head_add_link)
+        if (bean.linkStatus == 1) {
+            binding.taskHead.background =
+                binding.root.context.getDrawable(R.drawable.selector_task_head)
+        } else {
+            binding.taskHead.background =
+                binding.root.context.getDrawable(R.drawable.selector_task_head_add_link)
         }
         binding.taskLinkPid.text = "PID:${bean.linkPid}"
         binding.taskMesh.text = "mesh:${bean.mesh}"
@@ -58,6 +61,11 @@ class TaskAdapter(
                 callback.itemOnClick(bean)
             }
         }
+        if (bean.reason != "") {
+            binding.taskEdit.setImageDrawable(binding.root.context.getDrawable(R.drawable.baseline_edit_note_48_select_red))
+        } else {
+            binding.taskEdit.setImageDrawable(binding.root.context.getDrawable(R.drawable.selector_task_link_edit_icon))
+        }
         binding.taskEdit.isSelected = bean.reason != ""
         binding.taskEdit.setOnClickListener {
             callback.editOnClick(position, bean)
@@ -68,6 +76,21 @@ class TaskAdapter(
     fun resetSelect() {
         selectPosition = -1
     }
+
+    fun setSelectTag(tag: String) {
+        for (i in data.indices) {
+            if (data[i].linkPid == tag) {
+                if (selectPosition > -1)
+                    notifyItemChanged(selectPosition)
+                selectPosition = i
+                notifyItemChanged(i)
+                if(callback != null){
+                    callback.scrollPosition(i)
+                }
+                break
+            }
+        }
+    }
 }
 
 
diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskFragment.kt
index e053d264..3bac53cc 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskFragment.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskFragment.kt
@@ -48,6 +48,10 @@ class TaskFragment : BaseFragment() {
             override fun editOnClick(position: Int, bean: HadLinkDvoBean) {
                 showLinkEditDialog(position, bean)
             }
+
+            override fun scrollPosition(position: Int) {
+               binding.taskRecyclerview.scrollToPosition(position)
+            }
         })
     }
 
@@ -120,6 +124,9 @@ class TaskFragment : BaseFragment() {
             }
 
         })
+        viewModel.liveDataSelectLink.observe(viewLifecycleOwner){
+            adapter.setSelectTag(it)
+        }
     }
 
 
diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt
index 736b213e..1c21774b 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt
@@ -5,6 +5,7 @@ import android.content.SharedPreferences
 import android.content.SharedPreferences.OnSharedPreferenceChangeListener
 import android.os.Build
 import android.view.View
+import androidx.annotation.RequiresApi
 import androidx.lifecycle.MutableLiveData
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.viewModelScope
@@ -66,6 +67,11 @@ class TaskViewModel @Inject constructor(
      */
     val liveDataToastMessage = MutableLiveData<String>()
 
+    /**
+     * 点击地图选中的link
+     */
+    val liveDataSelectLink = MutableLiveData<String>()
+
     /**
      * 当前选中的任务
      */
@@ -85,6 +91,79 @@ class TaskViewModel @Inject constructor(
 
     init {
         sharedPreferences.registerOnSharedPreferenceChangeListener(this)
+        mapController.mMapView.addOnNIMapClickListener(TAG, object : OnGeoPointClickListener {
+            @RequiresApi(Build.VERSION_CODES.N)
+            override fun onMapClick(tag: String, point: GeoPoint) {
+                if (tag == TAG) {
+                    if (liveDataSelectNewLink.value == true) {
+                        viewModelScope.launch(Dispatchers.Default) {
+                            if (currentSelectTaskBean == null) {
+                                liveDataToastMessage.postValue("还没有开启任何任务")
+                            } else {
+                                val links = realmOperateHelper.queryLink(
+                                    point = point,
+                                )
+                                if (links.isNotEmpty()) {
+                                    val l = links[0]
+                                    for (link in currentSelectTaskBean!!.hadLinkDvoList) {
+                                        if (link.linkPid == l.properties["linkPid"]) {
+                                            return@launch
+                                        }
+                                    }
+                                    val hadLinkDvoBean = HadLinkDvoBean(
+                                        taskId = currentSelectTaskBean!!.id,
+                                        linkPid = l.properties["linkPid"]!!,
+                                        geometry = l.geometry,
+                                        linkStatus = 2
+                                    )
+                                    currentSelectTaskBean!!.hadLinkDvoList.add(
+                                        hadLinkDvoBean
+                                    )
+                                    val realm = Realm.getDefaultInstance()
+                                    realm.executeTransaction { r ->
+                                        r.copyToRealmOrUpdate(hadLinkDvoBean)
+                                        r.copyToRealmOrUpdate(currentSelectTaskBean!!)
+                                    }
+                                    //根据Link数据查询对应数据上要素,对要素进行显示重置
+                                    l.properties["linkPid"]?.let {
+                                        realmOperateHelper.queryLinkToMutableRenderEntityList(it)
+                                            ?.forEach { renderEntity ->
+                                                if (renderEntity.enable != 1) {
+                                                    renderEntity.enable = 1
+                                                    realm.executeTransaction { r ->
+                                                        r.copyToRealmOrUpdate(renderEntity)
+                                                    }
+                                                }
+                                            }
+                                    }
+                                    liveDataTaskLinks.postValue(currentSelectTaskBean!!.hadLinkDvoList)
+                                    mapController.lineHandler.addTaskLink(hadLinkDvoBean)
+                                    mapController.layerManagerHandler.updateOMDBVectorTileLayer()
+                                    mapController.mMapView.vtmMap.updateMap(true)
+                                }
+                            }
+                        }
+                    }else {
+                        viewModelScope.launch(Dispatchers.IO) {
+                            val links = realmOperateHelper.queryLink(
+                                point = point,
+                            )
+                            if (links.isNotEmpty()) {
+                                val l = links[0]
+                                for (link in currentSelectTaskBean!!.hadLinkDvoList) {
+                                    if (link.linkPid == l.properties["linkPid"]) {
+                                        liveDataSelectLink.postValue(link.linkPid)
+                                        mapController.lineHandler.showLine(link.geometry)
+                                        break
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        })
+
     }
 
     /**
@@ -106,10 +185,9 @@ class TaskViewModel @Inject constructor(
         val nowTime: Long = DateTimeUtil.getNowDate().time
         val beginNowTime: Long = nowTime - 90 * 3600 * 24 * 1000L
         val syncUpload: Int = FileManager.Companion.FileUploadStatus.DONE
-        val objects =
-            realm.where(TaskBean::class.java).notEqualTo("syncStatus", syncUpload).or()
-                .between("operationTime", beginNowTime, nowTime)
-                .equalTo("syncStatus", syncUpload).findAll().sort("id")
+        val objects = realm.where(TaskBean::class.java).notEqualTo("syncStatus", syncUpload).or()
+            .between("operationTime", beginNowTime, nowTime).equalTo("syncStatus", syncUpload)
+            .findAll().sort("id")
         val taskList = realm.copyFromRealm(objects)
         for (item in taskList) {
             FileManager.checkOMDBFileInfo(item)
@@ -187,8 +265,7 @@ class TaskViewModel @Inject constructor(
         //重新加载轨迹
         viewModelScope.launch(Dispatchers.IO) {
             val list: List<NiLocation>? = TraceDataBase.getDatabase(
-                mapController.mMapView.context,
-                Constant.USER_DATA_PATH
+                mapController.mMapView.context, Constant.USER_DATA_PATH
             ).niLocationDao.findToTaskIdAll(taskBean.id.toString())
             list!!.forEach {
                 mapController.markerHandle.addNiLocationMarkerItem(it)
@@ -216,6 +293,7 @@ class TaskViewModel @Inject constructor(
     }
 
     override fun onCleared() {
+        mapController.mMapView.removeOnNIMapClickListener(TAG)
         mapController.lineHandler.removeLine()
         sharedPreferences.unregisterOnSharedPreferenceChangeListener(this)
         super.onCleared()
@@ -245,18 +323,12 @@ class TaskViewModel @Inject constructor(
      * 筛选任务列表
      */
     fun filterTaskList(key: String) {
-        if (filterTaskListJob != null)
-            filterTaskListJob!!.cancel()
+        if (filterTaskListJob != null) filterTaskListJob!!.cancel()
         filterTaskListJob = viewModelScope.launch(Dispatchers.IO) {
             delay(500)
             val realm = Realm.getDefaultInstance()
-            val list = realm.where(TaskBean::class.java)
-                .contains("evaluationTaskName", key)
-                .or()
-                .contains("dataVersion", key)
-                .or()
-                .contains("cityName", key)
-                .findAll()
+            val list = realm.where(TaskBean::class.java).contains("evaluationTaskName", key).or()
+                .contains("dataVersion", key).or().contains("cityName", key).findAll()
             liveDataTaskList.postValue(realm.copyFromRealm(list))
         }
     }
@@ -265,17 +337,14 @@ class TaskViewModel @Inject constructor(
      * 筛选link
      */
     fun filterTask(pidKey: String) {
-        if (currentSelectTaskBean == null)
-            return
+        if (currentSelectTaskBean == null) return
 
-        if (filterTaskJob != null)
-            filterTaskJob!!.cancel()
+        if (filterTaskJob != null) filterTaskJob!!.cancel()
         filterTaskJob = viewModelScope.launch(Dispatchers.Default) {
             delay(500)
             val list = mutableListOf<HadLinkDvoBean>()
             for (item in currentSelectTaskBean!!.hadLinkDvoList) {
-                if (item.linkPid.contains(pidKey))
-                    list.add(item)
+                if (item.linkPid.contains(pidKey)) list.add(item)
             }
             liveDataTaskLinks.postValue(list)
         }
@@ -295,8 +364,8 @@ class TaskViewModel @Inject constructor(
             viewModelScope.launch(Dispatchers.IO) {
                 val realm = Realm.getDefaultInstance()
                 realm.executeTransaction {
-                    val objects = it.where(TaskBean::class.java)
-                        .equalTo("id", taskBean.id).findFirst()
+                    val objects =
+                        it.where(TaskBean::class.java).equalTo("id", taskBean.id).findFirst()
                     objects?.deleteFromRealm()
                 }
                 //遍历删除对应的数据
@@ -317,10 +386,10 @@ class TaskViewModel @Inject constructor(
                 val nowTime: Long = DateTimeUtil.getNowDate().time
                 val beginNowTime: Long = nowTime - 90 * 3600 * 24 * 1000L
                 val syncUpload: Int = FileManager.Companion.FileUploadStatus.DONE
-                val objects = realm.where(TaskBean::class.java)
-                    .notEqualTo("syncStatus", syncUpload).or()
-                    .between("operationTime", beginNowTime, nowTime)
-                    .equalTo("syncStatus", syncUpload).findAll()
+                val objects =
+                    realm.where(TaskBean::class.java).notEqualTo("syncStatus", syncUpload).or()
+                        .between("operationTime", beginNowTime, nowTime)
+                        .equalTo("syncStatus", syncUpload).findAll()
                 val taskList = realm.copyFromRealm(objects)
                 for (item in taskList) {
                     FileManager.checkOMDBFileInfo(item)
@@ -342,9 +411,9 @@ class TaskViewModel @Inject constructor(
         viewModelScope.launch(Dispatchers.IO) {
             val realm = Realm.getDefaultInstance()
             taskBean.hadLinkDvoList.forEach { hadLinkDvoBean ->
-                val objects = realm.where(QsRecordBean::class.java)
-                    .equalTo("linkId", hadLinkDvoBean.linkPid).and()
-                    .equalTo("taskId", hadLinkDvoBean.taskId).findAll()
+                val objects =
+                    realm.where(QsRecordBean::class.java).equalTo("linkId", hadLinkDvoBean.linkPid)
+                        .and().equalTo("taskId", hadLinkDvoBean.taskId).findAll()
                 val map: MutableMap<TaskBean, Boolean> = HashMap<TaskBean, Boolean>()
                 if (objects.isEmpty() && hadLinkDvoBean.reason.isEmpty()) {
                     withContext(Dispatchers.Main) {
@@ -388,68 +457,67 @@ class TaskViewModel @Inject constructor(
      */
     fun setSelectLink(selected: Boolean) {
         liveDataSelectNewLink.value = selected
-        //开始捕捉
-        if (selected) {
-            mapController.mMapView.addOnNIMapClickListener(TAG, object : OnGeoPointClickListener {
-                override fun onMapClick(tag: String, point: GeoPoint) {
-                    if (tag == TAG) {
-                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
-                            viewModelScope.launch(Dispatchers.Default) {
-                                if (currentSelectTaskBean == null) {
-                                    liveDataToastMessage.postValue("还没有开启任何任务")
-                                } else {
-                                    val links = realmOperateHelper.queryLink(
-                                        point = point,
-                                    )
-                                    if (links.isNotEmpty()) {
-                                        val l = links[0]
-                                        for (link in currentSelectTaskBean!!.hadLinkDvoList) {
-                                            if (link.linkPid == l.properties["linkPid"]) {
-                                                return@launch
-                                            }
-                                        }
-                                        val hadLinkDvoBean = HadLinkDvoBean(
-                                            taskId = currentSelectTaskBean!!.id,
-                                            linkPid = l.properties["linkPid"]!!,
-                                            geometry = l.geometry,
-                                            linkStatus = 2
-                                        )
-                                        currentSelectTaskBean!!.hadLinkDvoList.add(
-                                            hadLinkDvoBean
-                                        )
-                                        val realm = Realm.getDefaultInstance()
-                                        realm.executeTransaction { r ->
-                                            r.copyToRealmOrUpdate(hadLinkDvoBean)
-                                            r.copyToRealmOrUpdate(currentSelectTaskBean!!)
-                                        }
-                                        //根据Link数据查询对应数据上要素,对要素进行显示重置
-                                        l.properties["linkPid"]?.let {
-                                            realmOperateHelper.queryLinkToMutableRenderEntityList(it)
-                                                ?.forEach { renderEntity ->
-                                                    if(renderEntity.enable!=1){
-                                                        renderEntity.enable = 1
-                                                        realm.executeTransaction { r ->
-                                                            r.copyToRealmOrUpdate(renderEntity)
-                                                        }
-                                                    }
-                                                }
-                                        }
-                                        liveDataTaskLinks.postValue(currentSelectTaskBean!!.hadLinkDvoList)
-                                        mapController.lineHandler.addTaskLink(hadLinkDvoBean)
-                                        mapController.layerManagerHandler.updateOMDBVectorTileLayer()
-                                        mapController.mMapView.vtmMap.updateMap(true)
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-
-            })
-        } else {
-            mapController.mMapView.removeOnNIMapClickListener(TAG)
-            mapController.lineHandler.removeLine()
-        }
+//        //开始捕捉
+//        if (selected) {
+//            mapController.mMapView.addOnNIMapClickListener(TAG, object : OnGeoPointClickListener {
+//                override fun onMapClick(tag: String, point: GeoPoint) {
+//                    if (tag == TAG) {
+//                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+//                            viewModelScope.launch(Dispatchers.Default) {
+//                                if (currentSelectTaskBean == null) {
+//                                    liveDataToastMessage.postValue("还没有开启任何任务")
+//                                } else {
+//                                    val links = realmOperateHelper.queryLink(
+//                                        point = point,
+//                                    )
+//                                    if (links.isNotEmpty()) {
+//                                        val l = links[0]
+//                                        for (link in currentSelectTaskBean!!.hadLinkDvoList) {
+//                                            if (link.linkPid == l.properties["linkPid"]) {
+//                                                return@launch
+//                                            }
+//                                        }
+//                                        val hadLinkDvoBean = HadLinkDvoBean(
+//                                            taskId = currentSelectTaskBean!!.id,
+//                                            linkPid = l.properties["linkPid"]!!,
+//                                            geometry = l.geometry,
+//                                            linkStatus = 2
+//                                        )
+//                                        currentSelectTaskBean!!.hadLinkDvoList.add(
+//                                            hadLinkDvoBean
+//                                        )
+//                                        val realm = Realm.getDefaultInstance()
+//                                        realm.executeTransaction { r ->
+//                                            r.copyToRealmOrUpdate(hadLinkDvoBean)
+//                                            r.copyToRealmOrUpdate(currentSelectTaskBean!!)
+//                                        }
+//                                        //根据Link数据查询对应数据上要素,对要素进行显示重置
+//                                        l.properties["linkPid"]?.let {
+//                                            realmOperateHelper.queryLinkToMutableRenderEntityList(it)
+//                                                ?.forEach { renderEntity ->
+//                                                    if (renderEntity.enable != 1) {
+//                                                        renderEntity.enable = 1
+//                                                        realm.executeTransaction { r ->
+//                                                            r.copyToRealmOrUpdate(renderEntity)
+//                                                        }
+//                                                    }
+//                                                }
+//                                        }
+//                                        liveDataTaskLinks.postValue(currentSelectTaskBean!!.hadLinkDvoList)
+//                                        mapController.lineHandler.addTaskLink(hadLinkDvoBean)
+//                                        mapController.layerManagerHandler.updateOMDBVectorTileLayer()
+//                                        mapController.mMapView.vtmMap.updateMap(true)
+//                                    }
+//                                }
+//                            }
+//                        }
+//                    }
+//                }
+//            })
+//        } else {
+//            mapController.mMapView.removeOnNIMapClickListener(TAG)
+//            mapController.lineHandler.removeLine()
+//        }
     }
 
     /**
@@ -480,10 +548,10 @@ class TaskViewModel @Inject constructor(
                     val realm = Realm.getDefaultInstance()
 
                     //重置数据为隐藏
-                    if(hadLinkDvoBean.linkStatus==2){
+                    if (hadLinkDvoBean.linkStatus == 2) {
                         realmOperateHelper.queryLinkToMutableRenderEntityList(hadLinkDvoBean.linkPid)
                             ?.forEach { renderEntity ->
-                                if(renderEntity.enable==1){
+                                if (renderEntity.enable == 1) {
                                     renderEntity.enable = 0
                                     realm.executeTransaction { r ->
                                         r.copyToRealmOrUpdate(renderEntity)
@@ -505,9 +573,8 @@ class TaskViewModel @Inject constructor(
                             .equalTo("linkPid", hadLinkDvoBean.linkPid).findFirst()
                             ?.deleteFromRealm()
                         val markers = realm.where(QsRecordBean::class.java)
-                            .equalTo("linkId", hadLinkDvoBean.linkPid)
-                            .and().equalTo("taskId", hadLinkDvoBean.taskId)
-                            .findAll()
+                            .equalTo("linkId", hadLinkDvoBean.linkPid).and()
+                            .equalTo("taskId", hadLinkDvoBean.taskId).findAll()
                         if (markers != null) {
                             for (marker in markers) {
                                 mapController.markerHandle.removeQsRecordMark(marker)
diff --git a/app/src/main/java/com/navinfo/omqs/ui/widget/SignUtil.kt b/app/src/main/java/com/navinfo/omqs/ui/widget/SignUtil.kt
index f6d4f88e..4db20a7a 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/widget/SignUtil.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/widget/SignUtil.kt
@@ -832,11 +832,43 @@ class SignUtil {
          */
         fun getElectronicEyeMoreInfo(renderEntity: RenderEntity): List<TwoItemAdapterItem> {
             val list = mutableListOf<TwoItemAdapterItem>()
+
+
+            val dir = when (renderEntity.properties["direct"]) {
+                "2" -> "顺方向"
+                "3" -> "逆方向"
+                else -> ""
+            }
+            if (dir != "") {
+                list.add(
+                    TwoItemAdapterItem(
+                        title = "作用方向",
+                        text = dir
+                    )
+                )
+            }
+
+            val kindUp = when (renderEntity.properties["kindUp"]) {
+                "0" -> "未调查"
+                "1" -> "限速电子眼"
+                "4" -> "区间测速电子眼"
+                "5" -> "交通信号灯电子眼"
+                "6" -> "专用车道电子眼"
+                "7" -> "违章电子眼"
+                "11" -> "路况监控电子眼"
+                "19" -> "交通标线电子眼"
+                "20" -> "专用功能电子眼"
+                else -> ""
+            }
+
+            list.add(TwoItemAdapterItem(title = "电子眼类型大分类", text = kindUp))
+
             val kindCode = renderEntity.properties["kind"]!!.toInt()
-            val kind = TwoItemAdapterItem(
-                title = "电子眼类型", text = getElectronicEyeKindType(kindCode)
+            list.add(
+                TwoItemAdapterItem(
+                    title = "电子眼类型", text = getElectronicEyeKindType(kindCode)
+                )
             )
-            list.add(kind)
             when (kindCode) {
                 1, 2, 3, 4, 5, 6, 20, 21 -> {
                     list.add(
@@ -870,6 +902,9 @@ class SignUtil {
                     )
                 )
             }
+            list.add( TwoItemAdapterItem(
+                title = "照射角度", text = "${renderEntity.properties["angle"]}"
+            ))
             return list
         }
 
@@ -1125,12 +1160,11 @@ class SignUtil {
                     )
                 }
                 DataCodeEnum.OMDB_LINK_SPEEDLIMIT.code -> {
-                    val direction = data.properties["direction"]
-                    var dir = ""
-                    if (direction == "2") {
-                        dir = "顺方向"
-                    } else if (direction == "3") {
-                        dir = "逆方向"
+
+                    val dir = when (data.properties["direction"]) {
+                        "2" -> "顺方向"
+                        "3" -> "逆方向"
+                        else -> ""
                     }
                     if (dir != "") {
                         list.add(
diff --git a/app/src/main/java/com/navinfo/omqs/util/SpeakMode.kt b/app/src/main/java/com/navinfo/omqs/util/SpeakMode.kt
index 9674b77d..0bb08846 100644
--- a/app/src/main/java/com/navinfo/omqs/util/SpeakMode.kt
+++ b/app/src/main/java/com/navinfo/omqs/util/SpeakMode.kt
@@ -55,20 +55,22 @@ class SpeakMode(private val context: Context) : TextToSpeech.OnInitListener {
     fun setData(json: String?) {}
     override fun onInit(status: Int) {
         this.status = status
-        val result = mTextToSpeech.setLanguage(Locale.CHINESE)
-        if (result == TextToSpeech.LANG_MISSING_DATA
-            || result == TextToSpeech.LANG_NOT_SUPPORTED
-        ) {
-            if (context != null) {
-                val firstDialog = FirstDialog(context)
-                firstDialog.setTitle("提示")
-                firstDialog.setMessage("设备不支持语音播报,请先下载语音助手。")
-                firstDialog.setConfirmListener { dialog, _ -> dialog.dismiss() }
-                firstDialog.setNegativeView(View.GONE)
-                firstDialog.show()
+        if(mTextToSpeech != null) {
+            val result = mTextToSpeech.setLanguage(Locale.CHINESE)
+            if (result == TextToSpeech.LANG_MISSING_DATA
+                || result == TextToSpeech.LANG_NOT_SUPPORTED
+            ) {
+                if (context != null) {
+                    val firstDialog = FirstDialog(context)
+                    firstDialog.setTitle("提示")
+                    firstDialog.setMessage("设备不支持语音播报,请先下载语音助手。")
+                    firstDialog.setConfirmListener { dialog, _ -> dialog.dismiss() }
+                    firstDialog.setNegativeView(View.GONE)
+                    firstDialog.show()
+                }
             }
+            Log.i("TextToSpeechDemo", status.toString())
         }
-        Log.i("TextToSpeechDemo", status.toString())
     }
 
     //读语音处理
diff --git a/app/src/main/res/color/selector_black_blue_color.xml b/app/src/main/res/color/selector_black_blue_color.xml
index aa4e0cf4..2331e071 100644
--- a/app/src/main/res/color/selector_black_blue_color.xml
+++ b/app/src/main/res/color/selector_black_blue_color.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_selected="true"  android:color="@color/default_blue_text_color" />
-    <item android:color="@color/black" />
+    <item android:color="#15141F" />
 </selector>
\ No newline at end of file
diff --git a/app/src/main/res/color/selector_gray_blue_color.xml b/app/src/main/res/color/selector_gray_blue_color.xml
new file mode 100644
index 00000000..344e58c1
--- /dev/null
+++ b/app/src/main/res/color/selector_gray_blue_color.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_selected="true"  android:color="#2E38D2" />
+    <item android:color="@color/gray_121" />
+</selector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable-v24/baseline_edit_note_48_select_red.xml b/app/src/main/res/drawable-v24/baseline_edit_note_48_select_red.xml
new file mode 100644
index 00000000..4b4261dd
--- /dev/null
+++ b/app/src/main/res/drawable-v24/baseline_edit_note_48_select_red.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#E91E63"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M3,10h11v2H3V10zM3,8h11V6H3V8zM3,16h7v-2H3V16zM18.01,12.87l0.71,-0.71c0.39,-0.39 1.02,-0.39 1.41,0l0.71,0.71c0.39,0.39 0.39,1.02 0,1.41l-0.71,0.71L18.01,12.87zM17.3,13.58l-5.3,5.3V21h2.12l5.3,-5.3L17.3,13.58z"/>
+</vector>
diff --git a/app/src/main/res/layout/adapter_task.xml b/app/src/main/res/layout/adapter_task.xml
index 6b73fa64..e290cd74 100644
--- a/app/src/main/res/layout/adapter_task.xml
+++ b/app/src/main/res/layout/adapter_task.xml
@@ -27,7 +27,7 @@
         android:layout_marginRight="30dp"
         android:layout_toRightOf="@id/task_head"
         android:text="linkPID"
-        android:textColor="#15141F"
+        android:textColor="@color/selector_black_blue_color"
         android:textSize="14sp" />
 
     <TextView
@@ -39,7 +39,7 @@
         android:layout_alignLeft="@id/task_link_pid"
         android:layout_marginTop="5dp"
         android:text="mesh"
-        android:textColor="@color/gray_121"
+        android:textColor="@color/selector_gray_blue_color"
         android:textSize="13sp" />
 
     <ImageView
diff --git a/app/src/main/res/layout/adapter_task_list.xml b/app/src/main/res/layout/adapter_task_list.xml
index 7754350a..518763c8 100644
--- a/app/src/main/res/layout/adapter_task_list.xml
+++ b/app/src/main/res/layout/adapter_task_list.xml
@@ -33,7 +33,7 @@
             android:layout_height="wrap_content"
             android:layout_toRightOf="@id/task_list_head"
             android:text="任务名称"
-            android:textColor="#15141F"
+            android:textColor="@color/selector_black_blue_color"
             android:textSize="14sp" />
 
 
@@ -47,7 +47,7 @@
             android:layout_marginTop="5dp"
             android:layout_marginBottom="5dp"
             android:text="版本号"
-            android:textColor="@color/gray_121"
+            android:textColor="@color/selector_gray_blue_color"
             android:textSize="13sp" />
 
         <TextView
@@ -58,7 +58,7 @@
             android:layout_below="@id/task_data_version"
             android:layout_alignLeft="@id/task_name"
             android:text="省市名称"
-            android:textColor="@color/gray_121"
+            android:textColor="@color/selector_gray_blue_color"
             android:textSize="13sp" />
 
         <com.navinfo.omqs.ui.widget.TextProgressButtonBar
diff --git a/vtm b/vtm
index bd83adb7..a35893dc 160000
--- a/vtm
+++ b/vtm
@@ -1 +1 @@
-Subproject commit bd83adb7df464686b3f19e8a08aeef2cb49f5c17
+Subproject commit a35893dcb6f2ac2c38eb2cc11643725e2e91f1ff