{"version":3,"sources":["webpack:///./src/views/CustomerCc/CustomerCcListApproval/index.vue?163d","webpack:///src/views/CustomerCc/CustomerCcListApproval/index.vue","webpack:///./src/views/CustomerCc/CustomerCcListApproval/index.vue?7567","webpack:///./src/views/CustomerCc/CustomerCcListApproval/index.vue","webpack:///./src/views/CustomerCc/CustomerCcListApproval/index.vue?2869","webpack:///./src/api/approvalMgt.js","webpack:///./src/utils/mixins/crmListParameterInfo.js","webpack:///./src/utils/templateConfig.js"],"names":["render","_vm","this","_h","$createElement","_c","_self","ref","staticClass","attrs","searchInput","form","on","search","_l","item","key","class","active","$event","changeItem","_v","_s","name","interfaceDataList","length","listLoading","_e","index","getTemplateByKey","processKey","templateName","cardFields","field","alias","getItemValue","handleApprove","hasMore","staticRenderFns","mixins","components","searchComp","moreSearch","data","templateConfig","tit","value","type","titleList","listPage","page","pageSize","observer","defaultFields","mounted","beforeRouteEnter","to","from","next","vm","beforeDestroy","methods","initIntersectionObserver","threshold","placeholder","conditions","resetPage","_info","getList","getpagePendingApproval","then","total","records","console","catch","getList2","getpageApproval","isCcsFlow","path","query","id","taskId","instanceId","instanceState","showLoading","hideLoading","closeLoad","parametersInfo","component","cloud","process","request","url","method","getbusiness","params","startCrmOrderProcess","getApprovalInfo","consent","rejection","secondaryApprovalSendMessage","revokeCrmOrderProcess","list","pageNum","refreshLoading","finished","compensation","fields","customerComplaint","creditApplicationApproval002","tcSalesApproval03","tcSalesApproval02","tcSalesApproval01"],"mappings":"kJAAA,IAAIA,EAAS,WAAa,IAAIC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,IAAI,gBAAgBC,YAAY,kBAAkB,CAACH,EAAG,MAAM,CAACG,YAAY,kBAAkB,CAACH,EAAG,MAAM,CAACG,YAAY,cAAc,CAACH,EAAG,aAAa,CAACI,MAAM,CAAC,eAAiBR,EAAIS,YAAY,WAAaT,EAAIU,MAAMC,GAAG,CAAC,OAASX,EAAIY,UAAUR,EAAG,aAAa,CAACE,IAAI,aAAaE,MAAM,CAAC,OAASR,EAAIY,OAAO,YAAcZ,EAAIU,SAAS,GAAGN,EAAG,MAAM,CAACG,YAAY,iBAAiBP,EAAIa,GAAIb,EAAa,WAAE,SAASc,GAAM,OAAOV,EAAG,MAAM,CAACW,IAAID,EAAKC,IAAIC,MAAM,CAAC,WAAY,CAAEC,OAAQjB,EAAIiB,SAAWH,EAAKC,MAAOJ,GAAG,CAAC,MAAQ,SAASO,GAAQ,OAAOlB,EAAImB,WAAWL,MAAS,CAACd,EAAIoB,GAAG,IAAIpB,EAAIqB,GAAGP,EAAKQ,MAAM,UAAS,KAAKlB,EAAG,MAAM,CAACE,IAAI,gBAAgBC,YAAY,kBAAkB,EAC/uBP,EAAIuB,mBAAuD,IAAjCvB,EAAIuB,kBAAkBC,SAAiBxB,EAAIyB,YACtErB,EAAG,MAAM,CAACG,YAAY,aAAa,CAACH,EAAG,IAAI,CAACJ,EAAIoB,GAAG,YAAYpB,EAAI0B,KAAK1B,EAAIa,GAAIb,EAAqB,mBAAE,SAASc,EAAKa,GAAO,OAAOvB,EAAG,MAAM,CAACW,IAAIY,EAAMpB,YAAY,aAAa,CAACH,EAAG,MAAM,CAACG,YAAY,oBAAoB,CAACH,EAAG,OAAO,CAACJ,EAAIoB,GAAGpB,EAAIqB,IAAIrB,EAAI4B,iBAAiBd,EAAKe,aAAe,IAAIC,cAAgB,eAAe1B,EAAG,MAAM,CAACG,YAAY,mBAAmB,CAACP,EAAIa,GAAIb,EAAI+B,WAAWjB,EAAKe,aAAa,SAASG,GAAO,OAAO5B,EAAG,MAAM,CAACW,IAAIiB,EAAMjB,IAAIR,YAAY,iBAAiB,CAACH,EAAG,MAAM,CAACG,YAAY,YAAY,CAACH,EAAG,OAAO,CAACG,YAAY,YAAY,CAACP,EAAIoB,GAAGpB,EAAIqB,GAAGW,EAAMC,YAAY7B,EAAG,MAAM,CAACG,YAAY,kBAAkB,CAACP,EAAIoB,GAAG,OAAOhB,EAAG,MAAM,CAACG,YAAY,cAAc,CAACH,EAAG,OAAO,CAACG,YAAY,cAAc,CAACP,EAAIoB,GAAG,IAAIpB,EAAIqB,GAAGrB,EAAIkC,aAAapB,EAAMkB,EAAMjB,MAAQ,OAAO,cAAaX,EAAG,MAAM,CAACG,YAAY,oBAAoB,CAAiB,aAAfP,EAAIiB,OAAuBb,EAAG,aAAa,CAACI,MAAM,CAAC,KAAO,UAAU,KAAO,SAASG,GAAG,CAAC,MAAQ,SAASO,GAAQ,OAAOlB,EAAImC,cAAcrB,MAAS,CAACd,EAAIoB,GAAG,UAAUpB,EAAI0B,MAAM,IAAI,QAAQ1B,EAAIyB,aAAezB,EAAIuB,kBAAkBC,OAAS,EAAGpB,EAAG,MAAM,CAACG,YAAY,eAAe,CAACH,EAAG,IAAI,CAACJ,EAAIoB,GAAG,cAAcpB,EAAI0B,MAAO1B,EAAIoC,SAAWpC,EAAIuB,kBAAkBC,OAAS,EAAGpB,EAAG,MAAM,CAACG,YAAY,eAAe,CAACH,EAAG,IAAI,CAACJ,EAAIoB,GAAG,eAAepB,EAAI0B,MAAM,MACnwCW,EAAkB,G,oIC4GP,GACff,8BACAgB,gBACAC,YAAAC,wBAAAC,yBACAC,KAJA,WAKA,OACAC,sBAEAd,0BACApB,cAAAmC,WAAAC,oBAAAC,eACAC,WACA,CAAAzB,WAAAP,gBACA,CAAAO,WAAAP,cAEAE,kBACAP,QACAa,qBACAE,eACAuB,WACAC,MAAAC,YAAAD,QACAb,WACAe,cAEAC,eACA,CAAArC,4BAAAkB,cACA,CAAAlB,4BAAAkB,cACA,CAAAlB,6BAAAkB,cACA,CAAAlB,4BAAAkB,cACA,CAAAlB,yBAAAkB,gBAMAoB,QAlCA,WAmCA,aACA,iCAGAC,iBAvCA,SAuCAC,EAAAC,EAAAC,GACAA,eACAC,wBAEA,kBACA,kEACAA,cACAA,uBACAA,oBAKAC,cApDA,WAsDA,eACA,4BAGAC,SAEAC,yBAFA,WAEA,WACA,wCACA,YACA,WAEA,8CACA,eACA,kDAGA,CAAAC,eAIA,oCACAC,sCACA,wCACA,0BAIAnC,iBAvBA,SAuBAC,GAAA,MACA,+DAIAE,WA5BA,SA4BAF,GACA,+BACA,wCAIAjB,OAlCA,SAkCAoD,GACA,iBACA,iBACA,sBACA,gBAIA7C,WA1CA,SA0CAL,GACA,iBACA,0BACA,kBACA,uCACA,sBACA,mBACA,kBACA,eAEA,iBAKAmD,UAzDA,WA0DA,WAAAf,YAAAD,QACA,gBACA,iBAIAiB,MAhEA,WAgEA,WACA,sBACA,mBACA,kDAKAC,QAxEA,WAwEA,WAEA,iBAEA,4CACA,oBACAC,kBACAC,MAAA,YACA,iBACA,iBAAAC,QAAAC,YAAI,EAAJ,QAAI,EAAJ,UACA,wCACAC,sDAGA,qDAGA,gBACA,sBAEA,kDAIA,iCAEA,gBACA,iBAEAC,OAAA,WACA,iBACA,cACA,aACA,gCAKAC,SA9GA,WA8GA,WAEA,iBAEA,4CACA,oBACAC,kBACAN,MAAA,YACA,iBACA,iBAAAC,QAAAC,YAAI,EAAJ,QAAI,EAAJ,UACA,wCACAC,sDAGA,qDAGA,gBACA,sBAEA,kDAIA,iCAEA,gBACA,iBAEAC,OAAA,WACA,iBACA,cACA,aACA,gCAKAG,UApJA,SAoJA9D,GACA,YACA,iCACA,wCAEAoB,aAzJA,SAyJApB,EAAAC,GACA,6BACA,YAIA,IACA,8BACA,6BACA,YACA,SACA,cAKAoB,cAzKA,SAyKArB,GACA,mBACA+D,4BACAC,OACAC,QACAC,gBACAC,wBACAC,8BACAnE,qBAMAoE,YAvLA,aAwLAC,YAxLA,aAyLAC,UAzLA,aA0LAC,eA1LA,eCzK6W,I,wBCQzWC,EAAY,eACd,EACAxF,EACAsC,GACA,EACA,KACA,WACA,MAIa,aAAAkD,E,2CCnBf,W,kCCAA,kUAEMC,EAAQC,QAGP,SAASrB,EAAuB1B,GACrC,OAAOgD,eAAQ,CACbC,IAAK,GAAF,OAAKH,EAAL,0CACHI,OAAQ,OACRlD,SAIG,SAASiC,EAAgBjC,GAC9B,OAAOgD,eAAQ,CACbC,IAAK,GAAF,OAAKH,EAAL,kCACHI,OAAQ,OACRlD,SAIG,SAASmD,EAAYC,GAC1B,OAAOJ,eAAQ,CACbC,IAAK,GAAF,OAAKH,EAAL,wBACHI,OAAQ,MACRE,WAIG,SAASC,EAAqBrD,GACnC,OAAOgD,eAAQ,CACbC,IAAK,GAAF,OAAKH,EAAL,qCACHI,OAAQ,OACRlD,SAIG,SAASsD,EAAgBtD,GAC9B,OAAOgD,eAAQ,CACbC,IAAK,GAAF,OAAKH,EAAL,kCACHI,OAAQ,OACRlD,SAIG,SAASuD,EAAQvD,GACtB,OAAOgD,eAAQ,CACbC,IAAK,GAAF,OAAKH,EAAL,4BACHI,OAAQ,OACRlD,SAIG,SAASwD,EAAUxD,GACxB,OAAOgD,eAAQ,CACbC,IAAK,GAAF,OAAKH,EAAL,8BACHI,OAAQ,OACRlD,SAGG,SAASyD,EAA6BzD,GAC3C,OAAOgD,eAAQ,CACbC,IAAK,GAAF,OAAKH,EAAL,4CACHI,OAAQ,OACRlD,SAIG,SAAS0D,EAAsB1D,GACpC,OAAOgD,eAAQ,CACbC,IAAK,GAAF,OAAKH,EAAL,sCACHI,OAAQ,OACRlD,W,kCCxEW,QACXA,KADW,WAEP,MAAO,CACH2D,KAAM,GACNpD,KAAM,CACFC,SAAU,GACVoD,QAAS,GAEbC,gBAAgB,EAChB9E,aAAa,EACb+E,UAAU,EACVxD,SAAU,IAGlBY,QAAS,CAIL0B,eAJK,WAKDrF,KAAKgD,KAAKqD,QAAU,EACpBrG,KAAKoG,KAAO,IAMhBhB,UAZK,WAaDpF,KAAKwB,aAAc,EACnBxB,KAAKsG,gBAAiB,EAClBtG,KAAKgD,KAAKqD,SAAWrG,KAAK+C,SAC1B/C,KAAKuG,UAAW,EAEhBvG,KAAKuG,UAAW,EAEpBvG,KAAKgD,KAAKqD,SAAW,M,kCCjClB,QAEbG,aAAc,CACZ3E,aAAc,SACd4E,OAAQ,CACN,CAAE3F,IAAK,wBAAyBkB,MAAO,QACvC,CAAElB,IAAK,wBAAyBkB,MAAO,QACvC,CAAElB,IAAK,yBAA0BkB,MAAO,QACxC,CAAElB,IAAK,wBAAyBkB,MAAO,SACvC,CAAElB,IAAK,qBAAsBkB,MAAO,SAKxC0E,kBAAmB,CACjB7E,aAAc,OACd4E,OAAQ,CACN,CAAE3F,IAAK,cAAekB,MAAO,QAC7B,CAAElB,IAAK,WAAYkB,MAAO,OAC1B,CAAElB,IAAK,WAAYkB,MAAO,QAC1B,CAAElB,IAAK,aAAckB,MAAO,QAC5B,CAAElB,IAAK,aAAckB,MAAO,UAGhC2E,6BAA8B,CAC5B9E,aAAc,OACd4E,OAAQ,CACN,CAAE3F,IAAK,cAAekB,MAAO,QAC7B,CAAElB,IAAK,WAAYkB,MAAO,QAC1B,CAAElB,IAAK,aAAckB,MAAO,UAIhC4E,kBAAmB,CACjB/E,aAAc,SACd4E,OAAQ,CACL,CAAE3F,IAAK,mBAAoBkB,MAAO,MACnC,CAAElB,IAAK,wBAAyBkB,MAAO,QACvC,CAAElB,IAAK,wBAAyBkB,MAAO,OACvC,CAAElB,IAAK,2BAA4BkB,MAAO,QAC1C,CAAElB,IAAK,mBAAoBkB,MAAO,MAClC,CAAElB,IAAK,wBAAyBkB,MAAO,SAI3C6E,kBAAmB,CACjBhF,aAAc,SACd4E,OAAQ,CACJ,CAAE3F,IAAK,mBAAoBkB,MAAO,MACpC,CAAElB,IAAK,wBAAyBkB,MAAO,QACvC,CAAElB,IAAK,wBAAyBkB,MAAO,OACvC,CAAElB,IAAK,2BAA4BkB,MAAO,QAC1C,CAAElB,IAAK,mBAAoBkB,MAAO,MAClC,CAAElB,IAAK,wBAAyBkB,MAAO,SAI3C8E,kBAAmB,CACjBjF,aAAc,SACd4E,OAAQ,CAIN,CAAE3F,IAAK,mBAAoBkB,MAAO,MAClC,CAAElB,IAAK,wBAAyBkB,MAAO,QACvC,CAAElB,IAAK,wBAAyBkB,MAAO,OACvC,CAAElB,IAAK,2BAA4BkB,MAAO,QAC1C,CAAElB,IAAK,mBAAoBkB,MAAO,MAClC,CAAElB,IAAK,wBAAyBkB,MAAO","file":"js/chunk-13920ef4.v0.1.2.1793788280683.js?hash=v0.1.2.1793788280683","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"billContainer\",staticClass:\"billManagement\"},[_c('div',{staticClass:\"search-tab-box\"},[_c('div',{staticClass:\"search-box\"},[_c('moreSearch',{attrs:{\"searchItemList\":_vm.searchInput,\"searchData\":_vm.form},on:{\"search\":_vm.search}}),_c('searchComp',{ref:\"searchComp\",attrs:{\"search\":_vm.search,\"defaultForm\":_vm.form}})],1),_c('div',{staticClass:\"tab-container\"},_vm._l((_vm.titleList),function(item){return _c('div',{key:item.key,class:['tab-item', { active: _vm.active === item.key }],on:{\"click\":function($event){return _vm.changeItem(item)}}},[_vm._v(\" \"+_vm._s(item.name)+\" \")])}),0)]),_c('div',{ref:\"listContainer\",staticClass:\"data-container\"},[(\n        !_vm.interfaceDataList || (_vm.interfaceDataList.length === 0 && !_vm.listLoading)\n      )?_c('div',{staticClass:\"empty-box\"},[_c('p',[_vm._v(\"暂无数据\")])]):_vm._e(),_vm._l((_vm.interfaceDataList),function(item,index){return _c('div',{key:index,staticClass:\"data-card\"},[_c('div',{staticClass:\"data-card__title\"},[_c('span',[_vm._v(_vm._s((_vm.getTemplateByKey(item.processKey) || {}).templateName || \"客诉赔偿审批\"))])]),_c('div',{staticClass:\"key-value-table\"},[_vm._l((_vm.cardFields(item.processKey)),function(field){return _c('div',{key:field.key,staticClass:\"key-value-row\"},[_c('div',{staticClass:\"key-cell\"},[_c('span',{staticClass:\"key-text\"},[_vm._v(_vm._s(field.alias))])]),_c('div',{staticClass:\"separator-cell\"},[_vm._v(\"：\")]),_c('div',{staticClass:\"value-cell\"},[_c('span',{staticClass:\"value-text\"},[_vm._v(\" \"+_vm._s(_vm.getItemValue(item, field.key) || \"无数据\")+\" \")])])])}),_c('div',{staticClass:\"approval-actions\"},[(_vm.active === 'contract')?_c('van-button',{attrs:{\"type\":\"primary\",\"size\":\"small\"},on:{\"click\":function($event){return _vm.handleApprove(item)}}},[_vm._v(\" 审批 \")]):_vm._e()],1)],2)])}),(_vm.listLoading && _vm.interfaceDataList.length > 0)?_c('div',{staticClass:\"loading-box\"},[_c('p',[_vm._v(\"加载中...\")])]):_vm._e(),(!_vm.hasMore && _vm.interfaceDataList.length > 0)?_c('div',{staticClass:\"no-more-box\"},[_c('p',[_vm._v(\"已加载全部数据\")])]):_vm._e()],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n  <!-- 客诉赔偿审批列表（模仿审批管理 approvalMGT/index.vue 构建）：待审批/已审批 Tab + 键值对卡片 + 懒加载 -->\r\n  <div class=\"billManagement\" ref=\"billContainer\">\r\n    <!-- 搜索+Tab区域 -->\r\n    <div class=\"search-tab-box\">\r\n      <!-- 搜索条件 -->\r\n      <div class=\"search-box\">\r\n        <moreSearch\r\n          :searchItemList=\"searchInput\"\r\n          :searchData=\"form\"\r\n          @search=\"search\"\r\n        />\r\n        <searchComp\r\n          :search=\"search\"\r\n          :defaultForm=\"form\"\r\n          ref=\"searchComp\"\r\n        ></searchComp>\r\n      </div>\r\n\r\n      <!-- Tab切换 -->\r\n      <div class=\"tab-container\">\r\n        <div\r\n          v-for=\"item in titleList\"\r\n          :key=\"item.key\"\r\n          :class=\"['tab-item', { active: active === item.key }]\"\r\n          @click=\"changeItem(item)\"\r\n        >\r\n          {{ item.name }}\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n    <!-- 数据列表 -->\r\n    <div class=\"data-container\" ref=\"listContainer\">\r\n      <!-- 空状态 -->\r\n      <div\r\n        v-if=\"\r\n          !interfaceDataList || (interfaceDataList.length === 0 && !listLoading)\r\n        \"\r\n        class=\"empty-box\"\r\n      >\r\n        <p>暂无数据</p>\r\n      </div>\r\n\r\n      <!-- 数据项 -->\r\n      <div\r\n        v-for=\"(item, index) in interfaceDataList\"\r\n        :key=\"index\"\r\n        class=\"data-card\"\r\n      >\r\n        <!-- 数据卡片标题 -->\r\n        <div class=\"data-card__title\">\r\n          <span>{{\r\n            (getTemplateByKey(item.processKey) || {}).templateName || \"客诉赔偿审批\"\r\n          }}</span>\r\n        </div>\r\n\r\n        <!-- 键值对表格：模板字段取 templateConfig，缺省用客诉赔偿的默认字段 -->\r\n        <div class=\"key-value-table\">\r\n          <div\r\n            v-for=\"field in cardFields(item.processKey)\"\r\n            :key=\"field.key\"\r\n            class=\"key-value-row\"\r\n          >\r\n            <div class=\"key-cell\">\r\n              <span class=\"key-text\">{{ field.alias }}</span>\r\n            </div>\r\n            <div class=\"separator-cell\">：</div>\r\n            <div class=\"value-cell\">\r\n              <span class=\"value-text\">\r\n                {{ getItemValue(item, field.key) || \"无数据\" }}\r\n              </span>\r\n            </div>\r\n          </div>\r\n          <!-- 审批按钮 -->\r\n          <div class=\"approval-actions\">\r\n            <van-button\r\n              type=\"primary\"\r\n              size=\"small\"\r\n              @click=\"handleApprove(item)\"\r\n              v-if=\"active === 'contract'\"\r\n            >\r\n              审批\r\n            </van-button>\r\n          </div>\r\n        </div>\r\n      </div>\r\n\r\n      <!-- 加载中提示 -->\r\n      <div\r\n        v-if=\"listLoading && interfaceDataList.length > 0\"\r\n        class=\"loading-box\"\r\n      >\r\n        <p>加载中...</p>\r\n      </div>\r\n\r\n      <!-- 没有更多数据提示 -->\r\n      <div v-if=\"!hasMore && interfaceDataList.length > 0\" class=\"no-more-box\">\r\n        <p>已加载全部数据</p>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport searchComp from \"@/components/searchComp\";\r\nimport moreSearch from \"@/views/crm/components/searchComp/moreSearch.vue\";\r\nimport listParameterInfo from \"@/utils/mixins/crmListParameterInfo\";\r\nimport { getpagePendingApproval, getpageApproval } from \"@/api/approvalMgt\";\r\nimport templateConfig from \"@/utils/templateConfig.js\";\r\n\r\nexport default {\r\n  name: \"CustomerCcListApproval\",\r\n  mixins: [listParameterInfo],\r\n  components: { searchComp, moreSearch },\r\n  data() {\r\n    return {\r\n      templateConfig,\r\n      // 客诉赔偿审批流 key：列表按此过滤（服务端支持 processKey 参数则服务端过滤，返回里也按此兜底过滤）\r\n      processKey: \"compensation\",\r\n      searchInput: [{ tit: \"流程名称\", value: \"processName\", type: \"input\" }],\r\n      titleList: [\r\n        { name: \"待审批\", key: \"contract\" },\r\n        { name: \"已审批\", key: \"order\" },\r\n      ],\r\n      active: \"contract\",\r\n      form: {},\r\n      interfaceDataList: [],\r\n      listLoading: false,\r\n      listPage: 1,\r\n      page: { pageSize: 10, page: 1 },\r\n      hasMore: true, // 是否还有更多数据\r\n      observer: null, // 滚动观察器实例\r\n      // 兜底字段模板（templateConfig 里没有该流程时用）：业务字段来自 fieldJson（与原药销售审批卡片同款）\r\n      defaultFields: [\r\n        { key: \"fieldJson.orderNumber\", alias: \"订单编码\" },\r\n        { key: \"fieldJson.productName\", alias: \"产品名称\" },\r\n        { key: \"fieldJson.customerName\", alias: \"客户名称\" },\r\n        { key: \"fieldJson.totalAmount\", alias: \"合计金额\" },\r\n        { key: \"fieldJson.createBy\", alias: \"申请人\" },\r\n        // { key: \"taskName\", alias: \"当前节点\" },\r\n        // { key: \"launchTime\", alias: \"提交时间\" },\r\n      ],\r\n    };\r\n  },\r\n  mounted() {\r\n    this._info();\r\n    this.initIntersectionObserver(); // 初始化懒加载监听\r\n  },\r\n  // 从审批详情页返回时刷新待审批列表\r\n  beforeRouteEnter(to, from, next) {\r\n    next(vm => {\r\n      vm.$nextTick(() => {\r\n        // 从审批详情页（通用 approveInfo 或本模块 approve.vue）返回时刷新待审批列表\r\n        const _p = from.path || \"\";\r\n        if (_p.indexOf(\"approveInfo\") > -1 || _p.indexOf(\"CustomerCcApprove\") > -1) {\r\n          vm.resetPage();\r\n          vm.interfaceDataList = [];\r\n          vm.getList();\r\n        }\r\n      });\r\n    });\r\n  },\r\n  beforeDestroy() {\r\n    // 销毁时清理，防止内存泄漏\r\n    if (this.observer) {\r\n      this.observer.disconnect();\r\n    }\r\n  },\r\n  methods: {\r\n    // 初始化交叉观察器（懒加载核心）\r\n    initIntersectionObserver() {\r\n      this.observer = new IntersectionObserver(\r\n        (entries) => {\r\n          const entry = entries[0];\r\n          // 当底部占位元素进入视口，且当前没有加载中，还有更多数据时加载下一页\r\n          if (entry.isIntersecting && !this.listLoading && this.hasMore) {\r\n            this.page.page += 1; // 页码+1\r\n            this.active === \"contract\" ? this.getList() : this.getList2();\r\n          }\r\n        },\r\n        { threshold: 0.1 }, // 元素10%进入视口时触发\r\n      );\r\n\r\n      // 创建底部占位元素并监听\r\n      const placeholder = document.createElement(\"div\");\r\n      placeholder.id = \"ccsApprovalLazyLoadPlaceholder\";\r\n      this.$refs.listContainer.appendChild(placeholder);\r\n      this.observer.observe(placeholder);\r\n    },\r\n\r\n    // 根据key匹配模板（防止报错）\r\n    getTemplateByKey(processKey) {\r\n      return this.templateConfig?.[processKey];\r\n    },\r\n\r\n    // 卡片字段：优先 templateConfig 模板，没有则用兜底字段\r\n    cardFields(processKey) {\r\n      const tpl = this.getTemplateByKey(processKey);\r\n      return (tpl && tpl.fields) || this.defaultFields;\r\n    },\r\n\r\n    // 搜索（重置分页和数据）\r\n    search(conditions) {\r\n      this.form.data = conditions;\r\n      this.resetPage(); // 重置分页\r\n      this.parametersInfo();\r\n      this.getList();\r\n    },\r\n\r\n    // Tab切换（重置分页和数据）\r\n    changeItem(item) {\r\n      this.resetPage(); // 重置分页\r\n      this.interfaceDataList = [];\r\n      this.active = item.key;\r\n      this.form.status = item.key == \"contract\" ? 0 : 1;\r\n      this.parametersInfo();\r\n      this.showLoading();\r\n      if (item.key == \"contract\") {\r\n        this.getList();\r\n      } else {\r\n        this.getList2();\r\n      }\r\n    },\r\n\r\n    // 重置分页参数\r\n    resetPage() {\r\n      this.page = { pageSize: 10, page: 1 };\r\n      this.hasMore = true;\r\n      this.listPage = 1;\r\n    },\r\n\r\n    // 初始化查询\r\n    _info() {\r\n      this.parametersInfo();\r\n      this.showLoading();\r\n      this.$nextTick(() => this.getList());\r\n    },\r\n\r\n    // 获取待审批列表数据（查询参数与审批管理 approvalMGT 完全一致，不带业务过滤参数；\r\n    // 客诉赔偿流程在前端按 processKey / 流程名宽容匹配过滤）\r\n    getList() {\r\n      // 如果没有更多数据，直接返回\r\n      if (!this.hasMore) return;\r\n\r\n      const _query = Object.assign({}, this.form, this.page);\r\n      this.listLoading = true;\r\n      getpagePendingApproval(_query)\r\n        .then((res) => {\r\n          this.listLoading = false;\r\n          const { total, records } = res.result || { total: 0, records: [] };\r\n          this.listPage = Math.ceil(total / this.page.pageSize);\r\n          console.log(\"[客诉赔偿审批] 待审批原始返回 total:\", total, \"records:\", records);\r\n\r\n          // 只留客诉赔偿流程：processKey 匹配，或流程名包含“客诉赔偿”（防字段值不一致筛掉数据）\r\n          const ccsRecords = records.filter(item => this.isCcsFlow(item));\r\n\r\n          // 第一页替换数据，后续页拼接数据\r\n          if (this.page.page === 1) {\r\n            this.interfaceDataList = ccsRecords;\r\n          } else {\r\n            this.interfaceDataList = this.interfaceDataList.concat(ccsRecords);\r\n          }\r\n\r\n          // 判断是否还有更多数据\r\n          this.hasMore = this.page.page < this.listPage;\r\n\r\n          this.hideLoading();\r\n          this.closeLoad();\r\n        })\r\n        .catch(() => {\r\n          this.listLoading = false;\r\n          this.closeLoad();\r\n          this.hasMore = false; // 加载失败时停止加载\r\n          this.$toast.fail(\"待审批列表获取失败\");\r\n        });\r\n    },\r\n\r\n    // 获取已审批列表数据\r\n    getList2() {\r\n      // 如果没有更多数据，直接返回\r\n      if (!this.hasMore) return;\r\n\r\n      const _query = Object.assign({}, this.form, this.page);\r\n      this.listLoading = true;\r\n      getpageApproval(_query)\r\n        .then((res) => {\r\n          this.listLoading = false;\r\n          const { total, records } = res.result || { total: 0, records: [] };\r\n          this.listPage = Math.ceil(total / this.page.pageSize);\r\n          console.log(\"[客诉赔偿审批] 已审批原始返回 total:\", total, \"records:\", records);\r\n\r\n          // 只留客诉赔偿流程：processKey 匹配，或流程名包含“客诉赔偿”（防字段值不一致筛掉数据）\r\n          const ccsRecords = records.filter(item => this.isCcsFlow(item));\r\n\r\n          // 第一页替换数据，后续页拼接数据\r\n          if (this.page.page === 1) {\r\n            this.interfaceDataList = ccsRecords;\r\n          } else {\r\n            this.interfaceDataList = this.interfaceDataList.concat(ccsRecords);\r\n          }\r\n\r\n          // 判断是否还有更多数据\r\n          this.hasMore = this.page.page < this.listPage;\r\n\r\n          this.hideLoading();\r\n          this.closeLoad();\r\n        })\r\n        .catch(() => {\r\n          this.listLoading = false;\r\n          this.closeLoad();\r\n          this.hasMore = false; // 加载失败时停止加载\r\n          this.$toast.fail(\"已审批列表获取失败\");\r\n        });\r\n    },\r\n\r\n    // 是否客诉赔偿流程：processKey 精确匹配，或流程名包含“客诉赔偿”\r\n    isCcsFlow(item) {\r\n      if (!item) return false;\r\n      if (item.processKey === this.processKey) return true;\r\n      return (item.processName || \"\").indexOf(\"客诉赔偿\") > -1;\r\n    },\r\n    getItemValue(item, key) {\r\n      if (!key.includes(\"fieldJson.\")) {\r\n        return item[key];\r\n      }\r\n\r\n      // 解析 fieldJson（发起审批时传的业务摘要）\r\n      try {\r\n        const json = JSON.parse(item.fieldJson);\r\n        const k = key.replace(\"fieldJson.\", \"\");\r\n        return json[k];\r\n      } catch (e) {\r\n        return null;\r\n      }\r\n    },\r\n    // 点击审批跳转通用审批详情页 approveInfo（模仿原药 approvalMGT 同款跳转），\r\n    // 客诉赔偿表单由流程配置 formTemplate.appUrl 指到 components/approve/CustomerCcApproval.vue 动态加载\r\n    handleApprove(item) {\r\n      this.$router.push({\r\n        path: \"/CustomerCcApprovals\",\r\n        query: {\r\n          id: item.id,\r\n          taskId: item.taskId,\r\n          instanceId: item.instanceId,\r\n          instanceState: item.instanceState,\r\n          key: item.processKey,\r\n        },\r\n      });\r\n    },\r\n\r\n    // 占位方法（根据实际项目实现）\r\n    showLoading() {},\r\n    hideLoading() {},\r\n    closeLoad() {},\r\n    parametersInfo() {},\r\n  },\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n// 基础样式\r\n.billManagement {\r\n  padding: 20px;\r\n  background: #f5f7fa;\r\n  min-height: 100vh;\r\n}\r\n\r\n// 搜索+Tab容器\r\n.search-tab-box {\r\n  background: #fff;\r\n  padding: 20px;\r\n  border-radius: 8px;\r\n  margin-bottom: 20px;\r\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n// 搜索区域\r\n.search-box {\r\n  margin-bottom: 15px;\r\n}\r\n\r\n// Tab容器\r\n.tab-container {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center; // Tab居中显示\r\n  border-bottom: 1px solid #e6e6e6;\r\n  padding-bottom: 5px;\r\n\r\n  .tab-item {\r\n    padding: 8px 25px;\r\n    margin: 0 10px;\r\n    cursor: pointer;\r\n    font-size: 16px;\r\n    color: #666;\r\n    border-bottom: 2px solid transparent;\r\n    transition: all 0.2s;\r\n\r\n    // 激活状态\r\n    &.active {\r\n      color: #1890ff;\r\n      border-bottom-color: #1890ff;\r\n      font-weight: 500;\r\n    }\r\n\r\n    // hover效果\r\n    &:hover {\r\n      color: #1890ff;\r\n    }\r\n  }\r\n}\r\n\r\n// 数据容器\r\n.data-container {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 15px;\r\n}\r\n\r\n// 数据卡片\r\n.data-card {\r\n  background: #fff;\r\n  border: 1px solid #e6e6e6;\r\n  border-radius: 8px;\r\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\r\n  overflow: hidden;\r\n\r\n  // 卡片标题\r\n  .data-card__title {\r\n    padding: 12px 20px;\r\n    background: #f8f8f8;\r\n    border-bottom: 1px solid #e6e6e6;\r\n    margin: 0;\r\n\r\n    span {\r\n      font-size: 16px;\r\n      color: #333;\r\n      font-weight: 600;\r\n    }\r\n  }\r\n\r\n  // 键值对表格\r\n  .key-value-table {\r\n    padding: 15px 20px;\r\n    // 审批操作区域\r\n    .approval-actions {\r\n      margin-top: 15px;\r\n      padding-top: 15px;\r\n      border-top: 1px solid #e6e6e6;\r\n      text-align: right;\r\n      border-radius: 5px;\r\n    }\r\n  }\r\n}\r\n\r\n// 单个键值行\r\n.key-value-row {\r\n  display: flex;\r\n  align-items: center;\r\n  height: 40px;\r\n  border-bottom: 1px solid #f5f5f5;\r\n\r\n  &:last-child {\r\n    border-bottom: none;\r\n  }\r\n\r\n  .key-cell {\r\n    width: 120px;\r\n    flex-shrink: 0;\r\n    text-align: right;\r\n    padding-right: 10px;\r\n\r\n    .key-text {\r\n      font-size: 14px;\r\n      color: #666;\r\n      font-weight: 500;\r\n    }\r\n  }\r\n\r\n  .separator-cell {\r\n    width: 10px;\r\n    flex-shrink: 0;\r\n    color: #999;\r\n    font-size: 14px;\r\n  }\r\n\r\n  .value-cell {\r\n    flex: 1;\r\n    padding-left: 10px;\r\n    overflow: hidden;\r\n    text-overflow: ellipsis;\r\n    white-space: nowrap;\r\n\r\n    .value-text {\r\n      font-size: 14px;\r\n      color: #333;\r\n\r\n      &.empty-value {\r\n        color: #999;\r\n        font-style: italic;\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n// 空状态\r\n.empty-box {\r\n  text-align: center;\r\n  padding: 40px 0;\r\n  color: #999;\r\n  font-size: 14px;\r\n\r\n  &.inner-empty {\r\n    padding: 30px 0;\r\n  }\r\n}\r\n\r\n// 加载中提示\r\n.loading-box {\r\n  text-align: center;\r\n  padding: 20px 0;\r\n  color: #666;\r\n  font-size: 14px;\r\n}\r\n\r\n// 没有更多数据提示\r\n.no-more-box {\r\n  text-align: center;\r\n  padding: 15px 0;\r\n  color: #999;\r\n  font-size: 14px;\r\n}\r\n\r\n// 响应式适配\r\n@media (max-width: 768px) {\r\n  .billManagement {\r\n    padding: 10px;\r\n  }\r\n\r\n  .search-tab-box {\r\n    padding: 15px;\r\n  }\r\n\r\n  .tab-container .tab-item {\r\n    padding: 8px 15px;\r\n    margin: 0 5px;\r\n    font-size: 14px;\r\n  }\r\n\r\n  .data-card {\r\n    .data-card__title {\r\n      padding: 10px 15px;\r\n\r\n      span {\r\n        font-size: 14px;\r\n      }\r\n    }\r\n\r\n    .key-value-row {\r\n      height: 36px;\r\n\r\n      .key-cell {\r\n        width: 80px;\r\n        padding-right: 8px;\r\n\r\n        .key-text {\r\n          font-size: 13px;\r\n        }\r\n      }\r\n\r\n      .separator-cell {\r\n        font-size: 13px;\r\n      }\r\n\r\n      .value-cell {\r\n        padding-left: 8px;\r\n\r\n        .value-text {\r\n          font-size: 13px;\r\n\r\n          &.empty-value {\r\n            font-size: 12px;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=5f43fb46&scoped=true&\"\nimport script from \"./index.vue?vue&type=script&lang=js&\"\nexport * from \"./index.vue?vue&type=script&lang=js&\"\nimport style0 from \"./index.vue?vue&type=style&index=0&id=5f43fb46&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"5f43fb46\",\n  null\n  \n)\n\nexport default component.exports","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=style&index=0&id=5f43fb46&lang=scss&scoped=true&\"","import request from '@/utils/request'\r\nconst service = process.env.VUE_APP_CRM_URL;\r\nconst cloud = process.env.VUE_APP_CLOUD_URL;\r\n\r\n// 未审批查询\r\nexport function getpagePendingApproval(data) {\r\n  return request({\r\n    url: `${cloud}/v1/process-task/page-pending-approval`,\r\n    method: 'post',\r\n    data\r\n  })\r\n}\r\n\r\nexport function getpageApproval(data) {\r\n  return request({\r\n    url: `${cloud}/v1/process-task/page-approved`,\r\n    method: 'post',\r\n    data\r\n  })\r\n}\r\n// 通过key查询审批流\r\nexport function getbusiness(params) {\r\n  return request({\r\n    url: `${cloud}/v1/process/business`,\r\n    method: 'get',\r\n    params\r\n  })\r\n}\r\n// 提交\r\nexport function startCrmOrderProcess(data) {\r\n  return request({\r\n    url: `${cloud}/v1/business/startCrmOrderProcess`,\r\n    method: 'post',\r\n    data\r\n  })\r\n}\r\n// 获取该条审批数据详情\r\nexport function getApprovalInfo(data) {\r\n  return request({\r\n    url: `${cloud}/v1/process-task/approval-info`,\r\n    method: 'post',\r\n    data\r\n  })\r\n}\r\n// 审批同意\r\nexport function consent(data) {\r\n  return request({\r\n    url: `${cloud}/v1/process-task/consent`,\r\n    method: 'post',\r\n    data\r\n  })\r\n}\r\n// 审批驳回\r\nexport function rejection(data) {\r\n  return request({\r\n    url: `${cloud}/v1/process-task/rejection`,\r\n    method: 'post',\r\n    data\r\n  })\r\n}\r\nexport function secondaryApprovalSendMessage(data) {\r\n  return request({\r\n    url: `${cloud}/appCrm/api/secondaryApprovalSendMessage`,\r\n    method: 'post',\r\n    data\r\n  })\r\n}\r\n// 撤回\r\nexport function revokeCrmOrderProcess(data) {\r\n  return request({\r\n    url: `${cloud}/v1/business/revokeCrmOrderProcess`,\r\n    method: 'post',\r\n    data\r\n  })\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n// 新增原药销售订单\r\n// export function addOrUpdateMaterialSalesOrder(data) {\r\n//   return request({\r\n//     url: `${cloud}/jeecg-crm/appCrm/api/addOrUpdateMaterialSalesOrder`,\r\n//     method: 'post',\r\n//     data\r\n//   })\r\n// }","export default {\r\n    data() {\r\n        return {\r\n            list: [],\r\n            page: {\r\n                pageSize: 10,\r\n                pageNum: 1,\r\n            },\r\n            refreshLoading: false, // 下拉刷新\r\n            listLoading: false, // 是否处于加载状态\r\n            finished: false, // 是否已加载完成\r\n            listPage: 0, // 列表的总页数\r\n        }\r\n    },\r\n    methods: {\r\n        /**\r\n         * 初始化页数参数\r\n         */\r\n        parametersInfo() {\r\n            this.page.pageNum = 1;\r\n            this.list = [];\r\n\r\n        },\r\n        /**\r\n         * 关闭加载\r\n         */\r\n        closeLoad() {\r\n            this.listLoading = false;\r\n            this.refreshLoading = false;\r\n            if (this.page.pageNum >= this.listPage) {\r\n                this.finished = true;\r\n            } else {\r\n                this.finished = false;\r\n            }\r\n            this.page.pageNum += 1;\r\n        }\r\n    }\r\n}","// 模板配置抽离文件\r\nexport default {\r\n  // 客诉赔偿审批（流程 key：compensation）。业务字段来自发起审批时传的 fieldJson（后台已落库并随待办返回）\r\n  compensation: {\r\n    templateName: \"客诉赔偿审批\",\r\n    fields: [\r\n      { key: 'fieldJson.orderNumber', alias: '订单编码' },\r\n      { key: 'fieldJson.productName', alias: '产品名称' },\r\n      { key: 'fieldJson.customerName', alias: '客户名称' },\r\n      { key: 'fieldJson.totalAmount', alias: '赔偿总金额' },\r\n      { key: 'fieldJson.createBy', alias: '申请人' },\r\n      // { key: \"taskName\", alias: \"当前节点\" },\r\n      // { key: \"launchTime\", alias: \"提交时间\" },\r\n    ]\r\n  },\r\n  customerComplaint: {\r\n    templateName: \"客诉审批\",\r\n    fields: [\r\n      { key: \"processName\", alias: \"流程名称\" },\r\n      { key: \"launchBy\", alias: \"创建人\" },\r\n      { key: \"taskName\", alias: \"当前节点\" },\r\n      { key: \"createTime\", alias: \"创建时间\" },\r\n      { key: \"launchTime\", alias: \"提交时间\" },\r\n    ]\r\n  },\r\n  creditApplicationApproval002: {\r\n    templateName: \"授信审批\",\r\n    fields: [\r\n      { key: \"processName\", alias: \"流程名称\" },\r\n      { key: \"taskName\", alias: \"当前节点\" },\r\n      { key: \"createTime\", alias: \"创建时间\" },\r\n\r\n    ]\r\n  },\r\n  tcSalesApproval03: {\r\n    templateName: \"原药销售审批\",\r\n    fields: [\r\n       { key: 'fieldJson.number', alias: '编号' },\r\n      { key: 'fieldJson.productName', alias: '产品名称' },\r\n      { key: 'fieldJson.companyName', alias: '采购方' },\r\n      { key: 'fieldJson.contractAmount', alias: '合同金额' },\r\n      { key: 'fieldJson.profit', alias: '利润' },\r\n      { key: 'fieldJson.Salesperson', alias: '销售员' }\r\n\r\n    ]\r\n  },\r\n  tcSalesApproval02: {\r\n    templateName: \"原药销售审批\",\r\n    fields: [\r\n        { key: 'fieldJson.number', alias: '编号' },\r\n      { key: 'fieldJson.productName', alias: '产品名称' },\r\n      { key: 'fieldJson.companyName', alias: '采购方' },\r\n      { key: 'fieldJson.contractAmount', alias: '合同金额' },\r\n      { key: 'fieldJson.profit', alias: '利润' },\r\n      { key: 'fieldJson.Salesperson', alias: '销售员' }\r\n\r\n    ]\r\n  },\r\n  tcSalesApproval01: {\r\n    templateName: \"原药销售审批\",\r\n    fields: [\r\n      // { key: \"processName\", alias: \"流程名称\" },\r\n      // { key: \"taskName\", alias: \"当前节点\" },\r\n      // { key: \"createTime\", alias: \"创建时间\" },\r\n      { key: 'fieldJson.number', alias: '编号' },\r\n      { key: 'fieldJson.productName', alias: '产品名称' },\r\n      { key: 'fieldJson.companyName', alias: '采购方' },\r\n      { key: 'fieldJson.contractAmount', alias: '合同金额' },\r\n      { key: 'fieldJson.profit', alias: '利润' },\r\n      { key: 'fieldJson.Salesperson', alias: '销售员' }\r\n\r\n    ]\r\n  },\r\n  // 其他模板...\r\n};"],"sourceRoot":""}