@@ -36,6 +36,7 @@ import FieldList from '../business-comp/step3/field-list';
3636import ReportLogSlider from '../business-comp/step3/report-log-slider' ;
3737import InfoTips from '../common-comp/info-tips' ;
3838import { useSpaceSelector } from '../../../hooks/use-space-selector' ;
39+ import * as authorityMap from '@/common/authority-map' ;
3940import $http from '@/api' ;
4041
4142import type { ISelectItem } from '../../type' ;
@@ -162,6 +163,12 @@ export default defineComponent({
162163
163164 const visibleBkBiz = ref ( [ ] ) ;
164165 const cacheVisibleList = ref ( [ ] ) ;
166+ /**
167+ * 采集项下拉选项
168+ */
169+ const cleanCollectorList = ref ( [ ] ) ;
170+ const cleanCollectorId = ref ( ) ;
171+ const indexSetSelectLoading = ref ( false ) ;
165172
166173 const builtInFieldsList = ref ( [ ] ) ;
167174 const defaultParticipleStr = ref ( '@&()=\'",;:<>[]{}/ \\n\\t\\r\\\\' ) ;
@@ -240,11 +247,15 @@ export default defineComponent({
240247
241248 const isClean = computed ( ( ) => cleaningMode . value !== 'bk_log_text' ) ;
242249
250+ const isEditCleanItem = computed ( ( ) => route . name === 'clean-edit' ) ;
251+
243252 onMounted ( ( ) => {
244- console . log ( props . isTempField , 'isTempField' , isEditTemp . value , route . name ) ;
245253 // 清洗列表进入
246254 if ( props . isCleanField ) {
247- // this.initCleanItem();
255+ if ( isEditCleanItem . value ) {
256+ cleanCollectorId . value = Number ( route . params . collectorId ) ;
257+ }
258+ initCleanItem ( ) ;
248259 return ;
249260 }
250261 // 清洗模板进入
@@ -253,9 +264,32 @@ export default defineComponent({
253264 isEditTemp . value && initCleanTemp ( ) ;
254265 return ;
255266 }
256- setDetail ( ) ;
267+ const id = isUpdate . value ? route . params . collectorId : route . query . collectorId ;
268+ setDetail ( id ) ;
257269 getTemplate ( ) ;
258270 } ) ;
271+ /**
272+ * 当为清洗列表 - 创建/编辑清洗的时候,获取采集项下拉框内容
273+ */
274+ const initCleanItem = ( ) => {
275+ // 初始化清洗项
276+ indexSetSelectLoading . value = true ;
277+ const query = {
278+ bk_biz_id : bkBizId . value ,
279+ have_data_id : 1 ,
280+ } ;
281+ // 获取采集项列表
282+ $http
283+ . request ( 'collect/getAllCollectors' , { query } )
284+ . then ( res => {
285+ indexSetSelectLoading . value = false ;
286+ const { data } = res ;
287+ cleanCollectorList . value = data || [ ] ;
288+ } )
289+ . catch ( ( ) => {
290+ indexSetSelectLoading . value = false ;
291+ } ) ;
292+ } ;
259293
260294 const setTempDetail = data => {
261295 formData . value = {
@@ -266,7 +300,6 @@ export default defineComponent({
266300 templateName . value = data . name ;
267301 cleaningMode . value = data . clean_type ;
268302 visibleBkBiz . value = data . visible_bk_biz_id ;
269- console . log ( data , 'res.data====' ) ;
270303 } ;
271304
272305 const initCleanTemp = ( ) => {
@@ -345,7 +378,7 @@ export default defineComponent({
345378 } ;
346379
347380 // 新建、编辑采集项时获取更新详情
348- const setDetail = ( ) => {
381+ const setDetail = id => {
349382 /**
350383 * 初始化导入的配置
351384 */
@@ -356,7 +389,7 @@ export default defineComponent({
356389 ...props . configData ,
357390 etl_fields : eltField ,
358391 } ;
359- const id = isUpdate . value ? route . params . collectorId : route . query . collectorId ;
392+
360393 if ( ! id ) {
361394 return ;
362395 }
@@ -369,7 +402,7 @@ export default defineComponent({
369402 if ( res . data ) {
370403 store . commit ( 'collect/setCurCollect' , res . data ) ;
371404 builtInFieldsList . value = curCollect . value . fields . filter ( item => item . is_built_in ) ;
372- if ( props . isEdit || props . isClone ) {
405+ if ( props . isEdit || props . isClone || props . isCleanField ) {
373406 getDataLog ( 'init' ) ;
374407 await getCleanStash ( id ) ;
375408 }
@@ -756,14 +789,102 @@ export default defineComponent({
756789 } ) ;
757790 return result ;
758791 } ;
792+ /**
793+ * 在清洗列表进入的时候,选择采集项之后的操作
794+ * @param id
795+ * @returns
796+ */
797+ const handleCollectorChange = async ( id : number ) => {
798+ cleanCollectorId . value = id ;
799+ // 先校验有无采集项管理权限
800+ const paramData = {
801+ action_ids : [ authorityMap . MANAGE_COLLECTION_AUTH ] ,
802+ resources : [
803+ {
804+ type : 'collection' ,
805+ id,
806+ } ,
807+ ] ,
808+ } ;
809+ const res = await store . dispatch ( 'checkAndGetData' , paramData ) ;
810+ if ( res . isAllowed === false ) {
811+ return ;
812+ }
813+ setDetail ( id ) ;
814+ } ;
815+ // 采集项列表点击申请采集项目管理权限
816+ const applyProjectAccess = async item => {
817+ try {
818+ const res = await store . dispatch ( 'getApplyData' , {
819+ action_ids : [ authorityMap . MANAGE_COLLECTION_AUTH ] ,
820+ resources : [
821+ {
822+ type : 'collection' ,
823+ id : item . collector_config_id ,
824+ } ,
825+ ] ,
826+ } ) ;
827+ window . open ( res . data . apply_url ) ;
828+ } catch ( err ) {
829+ console . warn ( err ) ;
830+ }
831+ } ;
759832 /** 清洗设置 */
760833 const renderSetting = ( ) => (
761834 < div class = 'clean-setting' >
762- < bk-alert
763- class = 'clean-alert'
764- title = { t ( '通过字段清洗,可以格式化日志内容方便检索、告警和分析。' ) }
765- type = 'info'
766- />
835+ { ! props . isCleanField && ! props . isTempField && (
836+ < bk-alert
837+ class = 'clean-alert'
838+ title = { t ( '通过字段清洗,可以格式化日志内容方便检索、告警和分析。' ) }
839+ type = 'info'
840+ />
841+ ) }
842+ { props . isCleanField && (
843+ < div class = 'label-form-box' >
844+ < span class = 'label-title' > { t ( '采集项' ) } </ span >
845+ < div class = 'form-box mt-5' >
846+ < bk-select
847+ class = 'index-set-select'
848+ searchable
849+ disabled = { isEditCleanItem . value }
850+ loading = { indexSetSelectLoading . value }
851+ value = { cleanCollectorId . value }
852+ on-change = { handleCollectorChange }
853+ >
854+ { cleanCollectorList . value . map ( option => (
855+ < bk-option
856+ id = { option . collector_config_id }
857+ key = { option . collector_config_id }
858+ name = { option . collector_config_name }
859+ >
860+ { ! option . permission ?. [ authorityMap . MANAGE_COLLECTION_AUTH ] ? (
861+ < div class = 'option-slot-container no-authority' >
862+ < span class = 'text' >
863+ < span > { option . collector_config_name } </ span >
864+ < span style = 'color: #979ba5' > ({ `#${ option . collector_config_id } ` } )</ span >
865+ </ span >
866+ < span
867+ class = 'apply-text'
868+ on-click = { ( ) => applyProjectAccess ( option ) }
869+ >
870+ { t ( '申请权限' ) }
871+ </ span >
872+ </ div >
873+ ) : (
874+ < div
875+ class = 'option-slot-container'
876+ v-bk-overflow-tips
877+ >
878+ < span > { option . collector_config_name } </ span >
879+ < span style = 'color: #979ba5' > ({ `#${ option . collector_config_id } ` } )</ span >
880+ </ div >
881+ ) }
882+ </ bk-option >
883+ ) ) }
884+ </ bk-select >
885+ </ div >
886+ </ div >
887+ ) }
767888 < div class = 'label-form-box' >
768889 < span class = 'label-title' > { t ( '原始日志' ) } </ span >
769890 < div class = 'form-box' >
@@ -1246,7 +1367,7 @@ export default defineComponent({
12461367 * 编辑/创建清洗
12471368 * 未完成的情况下,调用创建清洗配置接口 (storage_cluster_id = -1 或者为空,都代表未完成)
12481369 */
1249- const isNeedCreate = isUpdate . value && ! ! storage_cluster_id ;
1370+ const isNeedCreate = ( isUpdate . value && ! ! storage_cluster_id ) || props . isCleanField ;
12501371 const url = isNeedCreate ? 'collect/fieldCollection' : 'clean/updateCleanStash' ;
12511372 const data = {
12521373 bk_biz_id : bkBizId . value ,
@@ -1282,6 +1403,9 @@ export default defineComponent({
12821403 if ( res ?. result ) {
12831404 const data = isNeedCreate ? { ...formData . value , ...curCollect . value } : formData . value ;
12841405 emit ( 'next' , data ) ;
1406+ if ( props . isCleanField ) {
1407+ emit ( 'change-submit' , true ) ;
1408+ }
12851409 }
12861410 } )
12871411 . catch ( ( ) => {
0 commit comments