{"version":3,"sources":["webpack:///./src/views/approvalMGT/index.vue?358a","webpack:///./src/views/approvalMGT/index.vue?4e03","webpack:///./src/utils/templateConfig.js","webpack:///src/views/approvalMGT/index.vue","webpack:///./src/views/approvalMGT/index.vue?1445","webpack:///./src/views/approvalMGT/index.vue","webpack:///./src/api/approvalMgt.js","webpack:///./src/utils/mixins/crmListParameterInfo.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","field","alias","getItemValue","handleApprove","hasMore","staticRenderFns","customerComplaint","fields","creditApplicationApproval002","tcSalesApproval03","tcSalesApproval02","tcSalesApproval01","mixins","components","searchComp","moreSearch","data","templateConfig","tit","value","type","titleList","listPage","page","pageSize","observer","mounted","console","beforeDestroy","methods","initIntersectionObserver","threshold","placeholder","conditions","resetPage","_info","getList","getpagePendingApproval","then","total","records","catch","getList2","getpageApproval","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"],"mappings":"kHAAA,W,2CCAA,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,GAAGrB,EAAI4B,iBAAiBd,EAAKe,YAAYC,cAAgB,aAAc9B,EAAI4B,iBAAiBd,EAAKe,YAAazB,EAAG,MAAM,CAACG,YAAY,mBAAmB,CAACP,EAAIa,GAAIb,EAAI4B,iBAAiBd,EAAKe,YAAkB,QAAE,SAASE,GAAO,OAAO3B,EAAG,MAAM,CAACW,IAAIgB,EAAMhB,IAAIR,YAAY,iBAAiB,CAACH,EAAG,MAAM,CAACG,YAAY,YAAY,CAACH,EAAG,OAAO,CAACG,YAAY,YAAY,CAACP,EAAIoB,GAAGpB,EAAIqB,GAAGU,EAAMC,YAAY5B,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,EAAIiC,aAAanB,EAAMiB,EAAMhB,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,EAAIkC,cAAcpB,MAAS,CAACd,EAAIoB,GAAG,UAAUpB,EAAI0B,MAAM,IAAI,GAAGtB,EAAG,MAAM,CAACG,YAAY,yBAAyB,CAACH,EAAG,IAAI,CAACJ,EAAIoB,GAAG,qBAAqBpB,EAAIyB,aAAezB,EAAIuB,kBAAkBC,OAAS,EAAGpB,EAAG,MAAM,CAACG,YAAY,eAAe,CAACH,EAAG,IAAI,CAACJ,EAAIoB,GAAG,cAAcpB,EAAI0B,MAAO1B,EAAImC,SAAWnC,EAAIuB,kBAAkBC,OAAS,EAAGpB,EAAG,MAAM,CAACG,YAAY,eAAe,CAACH,EAAG,IAAI,CAACJ,EAAIoB,GAAG,eAAepB,EAAI0B,MAAM,MAC73CU,EAAkB,G,oGCFP,GACbC,kBAAmB,CACjBP,aAAc,OACdQ,OAAQ,CACN,CAAEvB,IAAK,cAAeiB,MAAO,QAC7B,CAAEjB,IAAK,WAAYiB,MAAO,OAC1B,CAAEjB,IAAK,WAAYiB,MAAO,QAC1B,CAAEjB,IAAK,aAAciB,MAAO,QAC5B,CAAEjB,IAAK,aAAciB,MAAO,UAGhCO,6BAA8B,CAC5BT,aAAc,OACdQ,OAAQ,CACN,CAAEvB,IAAK,cAAeiB,MAAO,QAC7B,CAAEjB,IAAK,WAAYiB,MAAO,QAC1B,CAAEjB,IAAK,aAAciB,MAAO,UAIhCQ,kBAAmB,CACjBV,aAAc,SACdQ,OAAQ,CACL,CAAEvB,IAAK,mBAAoBiB,MAAO,MACnC,CAAEjB,IAAK,wBAAyBiB,MAAO,QACvC,CAAEjB,IAAK,wBAAyBiB,MAAO,OACvC,CAAEjB,IAAK,2BAA4BiB,MAAO,QAC1C,CAAEjB,IAAK,mBAAoBiB,MAAO,MAClC,CAAEjB,IAAK,wBAAyBiB,MAAO,SAI3CS,kBAAmB,CACjBX,aAAc,SACdQ,OAAQ,CACJ,CAAEvB,IAAK,mBAAoBiB,MAAO,MACpC,CAAEjB,IAAK,wBAAyBiB,MAAO,QACvC,CAAEjB,IAAK,wBAAyBiB,MAAO,OACvC,CAAEjB,IAAK,2BAA4BiB,MAAO,QAC1C,CAAEjB,IAAK,mBAAoBiB,MAAO,MAClC,CAAEjB,IAAK,wBAAyBiB,MAAO,SAI3CU,kBAAmB,CACjBZ,aAAc,SACdQ,OAAQ,CAIN,CAAEvB,IAAK,mBAAoBiB,MAAO,MAClC,CAAEjB,IAAK,wBAAyBiB,MAAO,QACvC,CAAEjB,IAAK,wBAAyBiB,MAAO,OACvC,CAAEjB,IAAK,2BAA4BiB,MAAO,QAC1C,CAAEjB,IAAK,mBAAoBiB,MAAO,MAClC,CAAEjB,IAAK,wBAAyBiB,MAAO,UC8D9B,GACfV,mBACAqB,gBACAC,YAAAC,wBAAAC,yBACAC,KAJA,WAKA,OACAC,iBACAvC,cAAAwC,WAAAC,oBAAAC,eACAC,WACA,CAAA9B,WAAAP,gBACA,CAAAO,WAAAP,cAEAE,kBACAP,QACAa,qBACAE,eACA4B,WACAC,MAAAC,YAAAD,QACAnB,WACAqB,gBAGAC,QAtBA,WAuBAC,sCACA,aACA,iCAEAC,cA3BA,WA6BA,eACA,4BAGAC,SAEAC,yBAFA,WAEA,WAEA,wCACA,YACA,WAEA,8CACA,eACA,kDAGA,CAAAC,eAIA,oCACAC,2BACA,wCACA,0BAIAnC,iBAxBA,SAwBAC,GAAA,MACA,+DAIAjB,OA7BA,SA6BAoD,GACA,iBACA,iBACA,sBACA,gBAIA7C,WArCA,SAqCAL,GACA,iBACA,0BACA,kBACA,uCACA,sBACA,mBACA,kBACA,eAEA,iBAKAmD,UApDA,WAqDA,WAAAV,YAAAD,QACA,gBACA,iBAIAY,MA3DA,WA2DA,WACAR,qBACA,sBACA,mBACA,kDAIAS,QAnEA,WAmEA,WAEA,iBAEA,4CACA,oBACAC,kBACAC,MAAA,YACA,iBACA,iBAAAC,QAAAC,YAAI,EAAJ,QAAI,EAAJ,UACA,wCAGA,gBACA,sBAEA,kDAIA,iCAEA,gBACA,iBAEAC,OAAA,WACA,iBACA,cACA,kBAKAC,SApGA,WAoGA,WAEA,iBAEA,4CACA,oBACAC,kBACAL,MAAA,YACA,iBACA,iBAAAC,QAAAC,YAAI,EAAJ,QAAI,EAAJ,UACA,wCAGA,gBACA,sBAEA,kDAIA,iCAEA,gBACA,iBAEAC,OAAA,WACA,iBACA,cACA,kBAGAvC,aAnIA,SAmIAnB,EAAAC,GACA,6BACA,YAIA,IACA,8BACA,6BACA,YACA,SACA,cAIAmB,cAlJA,SAkJApB,GAEA,mBACA6D,mBACAC,OACAC,QACAC,gBACAC,wBACAC,8BACAjE,qBAMAkE,YAjKA,aAkKAC,YAlKA,aAmKAC,UAnKA,aAoKAC,eApKA,eCvJ8V,I,wBCQ1VC,EAAY,eACd,EACAtF,EACAqC,GACA,EACA,KACA,WACA,MAIa,aAAAiD,E,oECnBf,kUAEMC,EAAQC,QAGP,SAASnB,EAAuBrB,GACrC,OAAOyC,eAAQ,CACbC,IAAK,GAAF,OAAKH,EAAL,0CACHI,OAAQ,OACR3C,SAIG,SAAS2B,EAAgB3B,GAC9B,OAAOyC,eAAQ,CACbC,IAAK,GAAF,OAAKH,EAAL,kCACHI,OAAQ,OACR3C,SAIG,SAAS4C,EAAYC,GAC1B,OAAOJ,eAAQ,CACbC,IAAK,GAAF,OAAKH,EAAL,wBACHI,OAAQ,MACRE,WAIG,SAASC,EAAqB9C,GACnC,OAAOyC,eAAQ,CACbC,IAAK,GAAF,OAAKH,EAAL,qCACHI,OAAQ,OACR3C,SAIG,SAAS+C,EAAgB/C,GAC9B,OAAOyC,eAAQ,CACbC,IAAK,GAAF,OAAKH,EAAL,kCACHI,OAAQ,OACR3C,SAIG,SAASgD,EAAQhD,GACtB,OAAOyC,eAAQ,CACbC,IAAK,GAAF,OAAKH,EAAL,4BACHI,OAAQ,OACR3C,SAIG,SAASiD,EAAUjD,GACxB,OAAOyC,eAAQ,CACbC,IAAK,GAAF,OAAKH,EAAL,8BACHI,OAAQ,OACR3C,SAGG,SAASkD,EAA6BlD,GAC3C,OAAOyC,eAAQ,CACbC,IAAK,GAAF,OAAKH,EAAL,4CACHI,OAAQ,OACR3C,SAIG,SAASmD,EAAsBnD,GACpC,OAAOyC,eAAQ,CACbC,IAAK,GAAF,OAAKH,EAAL,sCACHI,OAAQ,OACR3C,W,kCCxEW,QACXA,KADW,WAEP,MAAO,CACHoD,KAAM,GACN7C,KAAM,CACFC,SAAU,GACV6C,QAAS,GAEbC,gBAAgB,EAChB5E,aAAa,EACb6E,UAAU,EACVjD,SAAU,IAGlBO,QAAS,CAILwB,eAJK,WAKDnF,KAAKqD,KAAK8C,QAAU,EACpBnG,KAAKkG,KAAO,IAMhBhB,UAZK,WAaDlF,KAAKwB,aAAc,EACnBxB,KAAKoG,gBAAiB,EAClBpG,KAAKqD,KAAK8C,SAAWnG,KAAKoD,SAC1BpD,KAAKqG,UAAW,EAEhBrG,KAAKqG,UAAW,EAEpBrG,KAAKqD,KAAK8C,SAAW","file":"js/chunk-69433ce4.v0.1.2.1793675441333.js?hash=v0.1.2.1793675441333","sourcesContent":["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=2bec1040&lang=scss&scoped=true&\"","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 || \"未知模板\"))])]),(_vm.getTemplateByKey(item.processKey))?_c('div',{staticClass:\"key-value-table\"},[_vm._l((_vm.getTemplateByKey(item.processKey).fields),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):_c('div',{staticClass:\"empty-box inner-empty\"},[_c('p',[_vm._v(\"暂无可用模板配置\")])])])}),(_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 }","// 模板配置抽离文件\r\nexport default {\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};","<template>\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        <!-- 有模板的情况 -->\r\n        <div v-if=\"getTemplateByKey(item.processKey)\" class=\"key-value-table\">\r\n          <div\r\n            v-for=\"field in getTemplateByKey(item.processKey).fields\"\r\n            :key=\"field.key\"\r\n            class=\"key-value-row\"\r\n          >\r\n            <!-- 左侧key -->\r\n            <div class=\"key-cell\">\r\n              <span class=\"key-text\">{{ field.alias }}</span>\r\n            </div>\r\n            <!-- 分隔符 -->\r\n            <div class=\"separator-cell\">：</div>\r\n            <!-- 右侧value（核心修复：通过class控制无数据样式） -->\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\r\n        <!-- 无模板的情况 -->\r\n        <div v-else class=\"empty-box inner-empty\">\r\n          <p>暂无可用模板配置</p>\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 \"../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: \"approvalMGT\",\r\n  mixins: [listParameterInfo],\r\n  components: { searchComp, moreSearch },\r\n  data() {\r\n    return {\r\n      templateConfig,\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    };\r\n  },\r\n  mounted() {\r\n    console.log(\"BillManagement mounted\");\r\n    this._info();\r\n    this.initIntersectionObserver(); // 初始化懒加载监听\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      // 创建观察器，监听滚动到底部\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 = \"lazyLoadPlaceholder\";\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    // 搜索（重置分页和数据）\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      console.log(\"_info\");\r\n      this.parametersInfo();\r\n      this.showLoading();\r\n      this.$nextTick(() => this.getList());\r\n    },\r\n\r\n    // 获取待审批列表数据\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\r\n          // 第一页替换数据，后续页拼接数据\r\n          if (this.page.page === 1) {\r\n            this.interfaceDataList = records;\r\n          } else {\r\n            this.interfaceDataList = this.interfaceDataList.concat(records);\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        });\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\r\n          // 第一页替换数据，后续页拼接数据\r\n          if (this.page.page === 1) {\r\n            this.interfaceDataList = records;\r\n          } else {\r\n            this.interfaceDataList = this.interfaceDataList.concat(records);\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        });\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    // 点击审批跳转详情\r\n    handleApprove(item) {\r\n      // approve: 0;\r\n      this.$router.push({\r\n        path: \"approveInfo\",\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  // 最后一行去掉分隔线\r\n  &:last-child {\r\n    border-bottom: none;\r\n  }\r\n\r\n  // 左侧key单元格（固定宽度+对齐）\r\n  .key-cell {\r\n    width: 120px; // 固定宽度，保证所有key对齐\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  // 分隔符单元格（单独控制，避免偏移）\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单元格（对齐+长度控制）\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      // 修复后的无数据样式（通过class控制）\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  // 卡片内部的空状态\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=2bec1040&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=2bec1040&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  \"2bec1040\",\n  null\n  \n)\n\nexport default component.exports","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}"],"sourceRoot":""}