todoDetail.vue 155 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366
  1. <template>
  2. <div class="app-container">
  3. <!-- <div class="title-container">
  4. <breadcrumb id="breadcrumb-container" class="breadcrumb-container"/>
  5. </div> -->
  6. <el-collapse v-model="activeName" @change="handleChange">
  7. <el-collapse-item>
  8. <template slot="title">
  9. <span style="font-size:20px; color:RGB(42,143,277)">
  10. <i class="el-icon-star-on"></i>
  11. <span> {{currentNode==null ?'???':currentNode.nodeName?currentNode.nodeName:'结束'}}</span>
  12. <span style="margin-left:30px" v-if="reportNo || statementNo">已取号:<span style="font-style:italic;" v-if="statementNo">{{statementNo}}</span>
  13. <span style="font-style:italic;margin-left:30px" v-if="reportNo">{{reportNo}}</span></span>
  14. </span>
  15. <span style="font-size:15px; margin-left:15px;letter-spacing:2px; color:RGB(42,143,277)">
  16. 点击展开查看实时流程图
  17. </span>
  18. </template>
  19. <WorkflowBoard ref='board' @workflowCommitVerify="workflowCommitVerify" :nodeBusinessInfo="nodeBusinessInfo"
  20. @getPreviousNode="getPreviousNode" />
  21. </el-collapse-item>
  22. </el-collapse>
  23. <div class="button-area">
  24. <el-button v-if="nodeBusinessInfo.currentNodePermission.commit" class="y-save" type="success" round
  25. @click="commit('PASS')" :disabled="!nodeBusinessInfo.doWorkflow">提交</el-button>
  26. <el-button v-if="nodeBusinessInfo.currentNodePermission.reversible" class="y-save" type="warning" round
  27. @click="commit('REVERSE')" :disabled="!nodeBusinessInfo.doWorkflow">退回</el-button>
  28. <el-button v-if="nodeBusinessInfo.currentNodePermission.skippable" class="y-save" type="warning" round
  29. @click="commit('SKIP')" :disabled="!nodeBusinessInfo.doWorkflow">跳过</el-button>
  30. <el-button v-if="nodeBusinessInfo.currentNodePermission.terminable" class="y-save" type="danger" round
  31. @click="commit('TERMINATE')" :disabled="!nodeBusinessInfo.doWorkflow">终止</el-button>
  32. <el-button v-if="nodeBusinessInfo.currentNodePermission.restartable" class="y-save" type="danger" round
  33. @click="commit('RESTART')" :disabled="!nodeBusinessInfo.doWorkflow">重置</el-button>
  34. <el-button class="y-save" round type="info" @click="goBack">返回</el-button>
  35. </div>
  36. <el-tabs v-model="activeTagName" @tab-click="handleClick" type="border-card">
  37. <el-tab-pane name="order" class="pane-class" :lazy=true>
  38. <span slot="label"><i class="el-icon-document"></i> 市场订单</span>
  39. <y-detail-page-layout @save="handleCreate" :edit-status="couldEdit">
  40. <div>
  41. <el-form ref="majorForm" :model="major" class="form-container">
  42. <div class="createMajor-main-container">
  43. <div class="postInfo-container">
  44. <div>
  45. <el-divider content-position="left">
  46. <h3 class="title">
  47. <div class="avatar-wrapper icon-title">订单</div>
  48. <div class="icon-info">大中型订单</div>
  49. </h3>
  50. </el-divider>
  51. </div>
  52. <el-row class="row-style">
  53. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  54. <el-form-item label="客户经理:" prop="clientManager"
  55. :rules="{ required: true, message: '客户经理不能为空', trigger: 'blur' }" label-width="120px"
  56. class="postInfo-container-item">
  57. <el-input :value="major.clientManager" class="filter-item" readonly disabled />
  58. </el-form-item>
  59. </el-col>
  60. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  61. <el-form-item label="订单属性:" prop="financial"
  62. :rules="{ required: true, message: '订单属性不能为空', trigger: 'blur' }" label-width="120px"
  63. class="postInfo-container-item">
  64. <el-select v-model="major.financial" placeholder="请选择" readonly disabled style=" width: 100%">
  65. <el-option label="金融" :value="true">金融</el-option>
  66. <el-option label="非金融" :value="false">非金融</el-option>
  67. </el-select>
  68. </el-form-item>
  69. </el-col>
  70. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  71. <el-form-item label="派单方式:" prop="allotType"
  72. :rules="{ required: true, message: '派单方式不能为空', trigger: 'blur' }" label-width="120px"
  73. class="postInfo-container-item">
  74. <el-select v-model="major.allotType" placeholder="请选择" readonly disabled style=" width: 100%">
  75. <el-option label="部门轮单" value="轮单"></el-option>
  76. <el-option label="部门指派" value="指派"></el-option>
  77. </el-select>
  78. </el-form-item>
  79. </el-col>
  80. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  81. <el-form-item label="接单部门:" prop="departmentId" label-width="120px" class="postInfo-container-item">
  82. <el-select v-model="major.departmentId" placeholder="请选择" readonly disabled style=" width: 100%">
  83. <el-option v-for="(d, id) in allotDepartment" :label="d.name" :value="d.id"></el-option>
  84. </el-select>
  85. </el-form-item>
  86. </el-col>
  87. </el-row>
  88. <el-row class="row-style">
  89. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  90. <el-form-item label="项目负责人:" prop="principalId" label-width="120px"
  91. :class="['postInfo-container-item', currentNode.nodeCode === 'DEPARTMENT_ALLOCATION' ? 'task-class' : '']"
  92. :rules="{ required: true, message: '项目负责人不能为空', trigger: 'blur' }">
  93. <el-select v-model="major.principalId" placeholder="请选择" style=" width: 100%"
  94. :filterable="currentNode.nodeCode === 'DEPARTMENT_ALLOCATION'"
  95. :clearable="currentNode.nodeCode === 'DEPARTMENT_ALLOCATION'"
  96. :readonly="currentNode.nodeCode != 'DEPARTMENT_ALLOCATION'"
  97. :disabled="currentNode.nodeCode != 'DEPARTMENT_ALLOCATION'">
  98. <el-option v-for="(p, id) in principals" :label="p.name" :value="p.id"></el-option>
  99. </el-select>
  100. </el-form-item>
  101. </el-col>
  102. <el-col :xs="24" :sm="12" :lg="12" :span="6">
  103. <el-form-item label="项目成员:" prop="membersId" label-width="120px"
  104. :class="['postInfo-container-item', currentNode.nodeCode === 'DEPARTMENT_ALLOCATION' ? 'task-class' : '']"
  105. :rules="{ required: true, message: '项目成员不能为空', trigger: 'blur' }">
  106. <el-select v-model="major.membersId" placeholder="请选择" multiple
  107. :filterable="currentNode.nodeCode === 'DEPARTMENT_ALLOCATION'"
  108. :clearable="currentNode.nodeCode === 'DEPARTMENT_ALLOCATION'"
  109. :readonly="currentNode.nodeCode != 'DEPARTMENT_ALLOCATION'"
  110. :disabled="currentNode.nodeCode != 'DEPARTMENT_ALLOCATION'" style=" width: 100%">
  111. <el-option v-for="(u, id) in allUsers" :label="u.name" :value="u.id"></el-option>
  112. </el-select>
  113. </el-form-item>
  114. </el-col>
  115. </el-row>
  116. <el-row class="row-style">
  117. <el-col :xs="12" :sm="12" :lg="18" :span="6">
  118. <el-form-item label="订单名称:" prop="name"
  119. :rules="{ required: true, message: '订单名称不能为空', trigger: 'blur' }" label-width="120px"
  120. class="postInfo-container-item">
  121. <el-input v-model="major.name" class="filter-item" readonly disabled />
  122. </el-form-item>
  123. </el-col>
  124. </el-row>
  125. <el-row class="row-style">
  126. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  127. <el-form-item label="对象类型:" prop="businessObjectType"
  128. :rules="{ required: true, message: '评估对象类型不能为空', trigger: 'blur' }" label-width="120px"
  129. class="postInfo-container-item">
  130. <el-select v-model="major.businessObjectType" placeholder="请选择" readonly disabled style=" width: 100%">
  131. <el-option label="土地" value="土地"></el-option>
  132. <el-option label="房地产" value="房地产"></el-option>
  133. </el-select>
  134. </el-form-item>
  135. </el-col>
  136. <el-col :xs="24" :sm="12" :lg="6" :span="6" v-if="major.businessObjectType === '房地产'">
  137. <el-form-item label="特殊类型:" prop="specialType" label-width="120px" class="postInfo-container-item">
  138. <el-select v-model="major.specialType" placeholder="请选择" readonly disabled style=" width: 100%">
  139. <el-option label="在建工程" value="在建工程"></el-option>
  140. <el-option label="加油加气站" value="加油加气站"></el-option>
  141. <el-option label="电站" value="电站"></el-option>
  142. <el-option label="客运站" value="客运站"></el-option>
  143. </el-select>
  144. </el-form-item>
  145. </el-col>
  146. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  147. <el-form-item label="业务类型:" prop="businessGener" label-width="120px"
  148. class="postInfo-container-item">
  149. <el-select v-model="major.businessGener" placeholder="请选择" readonly disabled style=" width: 100%">
  150. <el-option label="部门轮单" value="轮单"></el-option>
  151. <el-option label="部门指派" value="指派"></el-option>
  152. </el-select>
  153. </el-form-item>
  154. </el-col>
  155. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  156. <el-form-item label="评估目的:" prop="evaluateAim"
  157. :rules="{ required: true, message: '评估目的不能为空', trigger: 'blur' }" label-width="120px"
  158. class="postInfo-container-item">
  159. <el-select v-model="major.evaluateAim" placeholder="请选择" readonly disabled style=" width: 100%">
  160. <el-option label="抵押" value="抵押"></el-option>
  161. <el-option label="咨询" value="咨询"></el-option>
  162. <el-option label="融资" value="融资"></el-option>
  163. <el-option label="可行性研究" value="可行性研究"></el-option>
  164. <el-option label="不良资产价值评估" value="不良资产价值评估"></el-option>
  165. <el-option label="其他" value="其他"></el-option>
  166. </el-select>
  167. </el-form-item>
  168. </el-col>
  169. </el-row>
  170. <el-row class="row-style">
  171. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  172. <el-form-item label="再次委托:" prop="entrustAgain"
  173. :rules="{ required: true, message: '再次委托不能为空', trigger: 'blur' }" label-width="120px"
  174. class="postInfo-container-item">
  175. <el-radio v-model="major.entrustAgain" :label="false" size="medium"
  176. readonly disabled>否</el-radio>
  177. <el-radio v-model="major.entrustAgain" :label="true" size="medium"
  178. readonly disabled>是</el-radio>
  179. </el-form-item>
  180. </el-col>
  181. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  182. <el-form-item label="分户搬迁:" prop="multipleRemoval"
  183. :rules="{ required: true, message: '分户搬迁不能为空', trigger: 'blur' }" label-width="120px"
  184. class="postInfo-container-item">
  185. <el-radio v-model="major.multipleRemoval" :label="false" size="medium"
  186. readonly disabled>否</el-radio>
  187. <el-radio v-model="major.multipleRemoval" :label="true" size="medium"
  188. readonly disabled>是</el-radio>
  189. </el-form-item>
  190. </el-col>
  191. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  192. <el-form-item label="是否口估:" prop="informalEvaluate"
  193. :rules="{ required: true, message: '是否口估不能为空', trigger: 'blur' }" label-width="120px"
  194. class="postInfo-container-item">
  195. <el-radio v-model="major.informalEvaluate" :label="false" size="medium"
  196. readonly disabled>否</el-radio>
  197. <el-radio v-model="major.informalEvaluate" :label="true" size="medium"
  198. readonly disabled>是</el-radio>
  199. </el-form-item>
  200. </el-col>
  201. </el-row>
  202. <el-row class="row-style">
  203. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  204. <el-form-item label="客户类型:" prop="clienteleType"
  205. :rules="{ required: true, message: '客户类型不能为空', trigger: 'blur' }" label-width="120px"
  206. class="postInfo-container-item">
  207. <el-select v-model="major.clienteleType" placeholder="请选择" readonly disabled style=" width: 100%">
  208. <el-option label="企业" value="企业"></el-option>
  209. <el-option label="个人" value="个人"></el-option>
  210. </el-select>
  211. </el-form-item>
  212. </el-col>
  213. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  214. <el-form-item label="客户名称:" prop="clienteleId" label-width="120px" class="postInfo-container-item">
  215. <el-input :value="major.cclienteleName" class="filter-item" readonly
  216. disabled />
  217. </el-form-item>
  218. </el-col>
  219. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  220. <el-form-item label="业务来源:" prop="clienteleId" label-width="120px" class="postInfo-container-item">
  221. <el-input :value="major.cclienteleSubName" class="filter-item" readonly
  222. disabled />
  223. </el-form-item>
  224. </el-col>
  225. </el-row>
  226. <el-row class="row-style">
  227. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  228. <el-form-item label="客户联系人:" prop="clienteleContactId"
  229. :rules="{ required: true, message: '客户联系人不能为空', trigger: 'blur' }" label-width="120px"
  230. class="postInfo-container-item">
  231. <el-input :value="major.cclienteleContactName" class="filter-item" readonly
  232. disabled />
  233. </el-form-item>
  234. </el-col>
  235. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  236. <el-form-item label="联系人电话:" prop="clienteleContactId" label-width="120px"
  237. class="postInfo-container-item">
  238. <el-input :value="major.cmobile" class="filter-item" readonly disabled />
  239. </el-form-item>
  240. </el-col>
  241. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  242. <el-form-item label="联系人部门:" prop="clienteleContactId" label-width="120px"
  243. class="postInfo-container-item">
  244. <el-input :value="major.cdepartment" class="filter-item" readonly
  245. disabled />
  246. </el-form-item>
  247. </el-col>
  248. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  249. <el-form-item label="联系人职务:" prop="clienteleContactId" label-width="120px"
  250. class="postInfo-container-item">
  251. <el-input :value="major.cduty" class="filter-item" readonly disabled />
  252. </el-form-item>
  253. </el-col>
  254. </el-row>
  255. <el-row class="row-style">
  256. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  257. <el-form-item label="分配产值:" prop="dispenseBenefit"
  258. :rules="{ required: true, message: '分配产值不能为空', trigger: 'blur' }" label-width="120px"
  259. class="postInfo-container-item">
  260. <el-radio v-model="major.dispenseBenefit" :label="false" size="medium"
  261. readonly disabled>否</el-radio>
  262. <el-radio v-model="major.dispenseBenefit" :label="true" size="medium"
  263. readonly disabled>是</el-radio>
  264. </el-form-item>
  265. </el-col>
  266. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  267. <el-form-item label="是否异地:" prop="nonnative"
  268. :rules="{ required: true, message: '是否异地不能为空', trigger: 'blur' }" label-width="120px"
  269. class="postInfo-container-item">
  270. <el-radio v-model="major.nonnative" :label="false" size="medium"
  271. readonly disabled>否</el-radio>
  272. <el-radio v-model="major.nonnative" :label="true" size="medium"
  273. readonly disabled>是</el-radio>
  274. </el-form-item>
  275. </el-col>
  276. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  277. <el-form-item label="是否续贷:" prop="refinance"
  278. :rules="{ required: true, message: '是否续贷不能为空', trigger: 'blur' }" label-width="120px"
  279. class="postInfo-container-item">
  280. <el-radio v-model="major.refinance" :label="false" size="medium"
  281. readonly disabled>否</el-radio>
  282. <el-radio v-model="major.refinance" :label="true" size="medium"
  283. readonly disabled>是</el-radio>
  284. </el-form-item>
  285. </el-col>
  286. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  287. <el-form-item label="贷款到期:" prop="loanExpire" label-width="120px" class="postInfo-container-item">
  288. <el-radio v-model="major.loanExpire" :label="false" size="medium"
  289. readonly disabled>否</el-radio>
  290. <el-radio v-model="major.loanExpire" :label="true" size="medium"
  291. readonly disabled>是</el-radio>
  292. </el-form-item>
  293. </el-col>
  294. </el-row>
  295. <el-row class="row-style">
  296. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  297. <el-form-item label="贷款额度:" prop="loanLimit" label-width="120px" class="postInfo-container-item">
  298. <el-input v-model="major.loanLimit" class="filter-item" readonly disabled>
  299. <template slot="append">万元</template>
  300. </el-input>
  301. </el-form-item>
  302. </el-col>
  303. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  304. <el-form-item label="贷款期限:" prop="loanPeriod" label-width="120px" class="postInfo-container-item">
  305. <el-input v-model="major.loanPeriod" class="filter-item" readonly disabled>
  306. <template slot="append">年</template>
  307. </el-input>
  308. </el-form-item>
  309. </el-col>
  310. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  311. <el-form-item label="贷款性质:" prop="loanNature" label-width="120px" class="postInfo-container-item">
  312. <el-input v-model="major.loanNature" class="filter-item" readonly
  313. disabled />
  314. </el-form-item>
  315. </el-col>
  316. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  317. <el-form-item label="贷款用途:" prop="loanAim" label-width="120px" class="postInfo-container-item">
  318. <el-input v-model="major.loanAim" class="filter-item" readonly disabled />
  319. </el-form-item>
  320. </el-col>
  321. </el-row>
  322. <el-row class="row-style">
  323. <el-col :xs="24" :sm="12" :lg="12" :span="6">
  324. <el-form-item label="委托人:" prop="bailor"
  325. :rules="{ required: true, message: '委托人不能为空', trigger: 'blur' }" label-width="120px"
  326. class="postInfo-container-item">
  327. <el-input v-model="major.bailor" class="filter-item" readonly disabled />
  328. </el-form-item>
  329. </el-col>
  330. <el-col :xs="24" :sm="12" :lg="12" :span="6">
  331. <el-form-item label="委托人地址:" prop="bailorAddress" label-width="120px"
  332. class="postInfo-container-item">
  333. <el-input v-model="major.bailorAddress" class="filter-item" readonly
  334. disabled />
  335. </el-form-item>
  336. </el-col>
  337. </el-row>
  338. <el-row class="row-style">
  339. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  340. <el-form-item label="委托联系人:" prop="bailorContactName"
  341. :rules="{ required: true, message: '委托联系人不能为空', trigger: 'blur' }" label-width="120px"
  342. class="postInfo-container-item">
  343. <el-input v-model="major.bailorContactName" class="filter-item" readonly
  344. disabled />
  345. </el-form-item>
  346. </el-col>
  347. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  348. <el-form-item label="委托电话:" prop="bailorContactTel"
  349. :rules="{ required: true, message: '委托联系人电话不能为空', trigger: 'blur' }" label-width="120px"
  350. class="postInfo-container-item">
  351. <el-input v-model="major.bailorContactTel" class="filter-item" readonly
  352. disabled />
  353. </el-form-item>
  354. </el-col>
  355. </el-row>
  356. <el-row class="row-style">
  357. <el-col :xs="24" :sm="12" :lg="12" :span="6">
  358. <el-form-item label="产权人:" prop="owner" label-width="120px" class="postInfo-container-item">
  359. <el-input v-model="major.owner" class="filter-item" readonly disabled />
  360. </el-form-item>
  361. </el-col>
  362. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  363. <el-form-item label="产权人电话:" prop="ownerTel" label-width="120px" class="postInfo-container-item">
  364. <el-input v-model="major.ownerTel" class="filter-item" readonly disabled />
  365. </el-form-item>
  366. </el-col>
  367. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  368. <el-form-item label="是否加急:" prop="urgent"
  369. :rules="{ required: true, message: '是否加急不能为空', trigger: 'blur' }" label-width="120px"
  370. class="postInfo-container-item">
  371. <el-radio v-model="major.urgent" :label="false" size="medium" readonly
  372. disabled>否</el-radio>
  373. <el-radio v-model="major.urgent" :label="true" size="medium" readonly
  374. disabled>是</el-radio>
  375. </el-form-item>
  376. </el-col>
  377. </el-row>
  378. <el-row class="row-style">
  379. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  380. <el-form-item label="终端客户类型:" prop="terminalClienteleType"
  381. label-width="140px"
  382. class="postInfo-container-item">
  383. <el-select v-model="major.terminalClienteleType" placeholder="请选择" readonly disabled style=" width: 100%">
  384. <el-option label="企业" value="企业"></el-option>
  385. <el-option label="个人" value="个人"></el-option>
  386. </el-select>
  387. </el-form-item>
  388. </el-col>
  389. <el-col :xs="24" :sm="12" :lg="12" :span="6" v-if="major.terminalClienteleType!=''">
  390. <el-form-item label="终端客户名称:" prop="terminalClienteleId" label-width="140px"
  391. :rules="{ required: true, message: '终端客户名称不能为空', trigger: 'blur' }" class="postInfo-container-item">
  392. <el-input :value="major.tterminalClienteleName" class="filter-item" readonly
  393. disabled />
  394. </el-form-item>
  395. </el-col>
  396. <el-col :xs="24" :sm="12" :lg="6" :span="6" v-if="major.terminalClienteleType=='企业'">
  397. <el-form-item label="终端联系人:" prop="terminalClienteleContactId" label-width="120px"
  398. :rules="{ required: true, message: '终端联系人不能为空', trigger: 'blur' }" class="postInfo-container-item">
  399. <el-input :value="major.tterminalClienteleContactName" class="filter-item"
  400. readonly disabled />
  401. </el-form-item>
  402. </el-col>
  403. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  404. <el-form-item label="终端联系电话:" prop="clienteleType" label-width="130px"
  405. class="postInfo-container-item">
  406. <el-input :value="major.tmobile" class="filter-item" readonly disabled />
  407. </el-form-item>
  408. </el-col>
  409. </el-row>
  410. <el-row class="row-style">
  411. <el-col :xs="24" :sm="12" :lg="18" :span="12">
  412. <el-form-item label="订单备注:" prop="remark" label-width="120px" class="postInfo-container-item">
  413. <el-input v-model="major.remark" :autosize="{ minRows: 1, maxRows: 1 }" class="filter-item"
  414. type="textarea" readonly disabled />
  415. </el-form-item>
  416. </el-col>
  417. </el-row>
  418. </div>
  419. </div>
  420. </el-form>
  421. </div>
  422. </y-detail-page-layout>
  423. </el-tab-pane>
  424. <el-tab-pane name="evaluate" class="pane-class" :lazy=true>
  425. <span slot="label"><i class="el-icon-office-building"></i> 估价对象</span>
  426. <div class="createMajor-main-container">
  427. <div class="postInfo-container">
  428. <div>
  429. <el-divider content-position="left">
  430. <h3 class="title">
  431. <div class="avatar-wrapper icon-title">对象</div>
  432. <div class="icon-info">{{ major.businessObjectType }}</div>
  433. </h3>
  434. </el-divider>
  435. </div>
  436. </div>
  437. </div>
  438. <div class="evaluate-table" v-if="major.businessObjectType === '土地'">
  439. <div>
  440. <el-row>
  441. <el-col :span="2">
  442. <div>
  443. <el-statistic group-separator="," :precision="4" :value="totalEvaluateValue" title="估价对象总价(万)">
  444. <template slot="prefix">
  445. <i class="el-icon-coin"></i>
  446. </template>
  447. </el-statistic>
  448. </div>
  449. </el-col>
  450. <el-col :span="2">
  451. <div>
  452. <el-statistic group-separator="," :precision="2" :value="totalAcreage" title="估价对象总面积(㎡)">
  453. <template slot="prefix">
  454. <i class="el-icon-house"></i>
  455. </template>
  456. </el-statistic>
  457. </div>
  458. </el-col>
  459. <el-col :span="2">
  460. <el-button v-if="currentNode.nodeCode === 'SPOT_RECONNAISSANCE'" type="danger" round
  461. @click="openLandDialog(major.businessObjectType)">添加估价对象</el-button>
  462. </el-col>
  463. <el-col :span="2" v-if="currentNode.nodeCode === 'WRITE_STATEMENT'">
  464. <el-tooltip v-if="ifTakeNumber" class="item" effect="dark" content="全选取主号,多次取号(主号-子号)" placement="right">
  465. <el-button type="success" :disabled="!takeNumberItems.length > 0" round
  466. @click="takeStatementNoOrLettertNo('STATEMENT')">取价值意见书号</el-button>
  467. </el-tooltip>
  468. <!-- <el-button v-if="ifCreatePorduction" type="danger" round @click="createProduction(reportNo)">创建产品</el-button> -->
  469. </el-col>
  470. <el-col :span="2" v-if="currentNode.nodeCode === 'WRITE_REPORT'">
  471. <el-tooltip v-if="ifTakeNumber" class="item" effect="dark" content="全选取主号,多次取号(主号-子号)" placement="right">
  472. <el-button type="danger" :disabled="!takeNumberItems.length > 0" round
  473. @click="takeNumberDialog = true">取报告号</el-button>
  474. </el-tooltip>
  475. <!-- <el-button v-if="ifCreatePorduction" type="danger" round @click="createProduction(reportNo)">创建产品</el-button> -->
  476. </el-col>
  477. <el-col :span="2" v-if="currentNode.nodeCode === 'WRITE_LETTER'">
  478. <el-tooltip v-if="ifTakeNumber" class="item" effect="dark" content="全选取主号,多次取号(主号-子号)" placement="right">
  479. <el-button :disabled="!takeNumberItems.length > 0" round
  480. @click="takeStatementNoOrLettertNo('LETTER')">取复评函号</el-button>
  481. </el-tooltip>
  482. <!-- <el-button v-if="ifCreatePorduction" type="danger" round @click="createProduction(reportNo)">创建产品</el-button> -->
  483. </el-col>
  484. </el-row>
  485. </div>
  486. <el-table ref="multipleTable" :data="evaluateLandData" stripe
  487. :header-row-style="{ color: '#333333', 'font-size': '14px' }" border takeNumberItems
  488. style="width: 100%; margin-top:20px;font-size: 14px;" @selection-change="handleSelectionChange">
  489. <el-table-column v-if="ifTakeNumber" type="selection" width="100" :selectable="selectable" align="center">
  490. </el-table-column>
  491. <el-table-column type="index" label="序号" width="50" align="center">
  492. </el-table-column>
  493. <el-table-column prop="located" label="坐落" align="center" show-overflow-tooltip>
  494. </el-table-column>
  495. <el-table-column prop="landType" label="土地类型" width="80" align="center">
  496. </el-table-column>
  497. <el-table-column prop="landUse" label="用途" width="80" align="center">
  498. </el-table-column>
  499. <el-table-column prop="rightToUser" label="所有权人" align="center" show-overflow-tooltip>
  500. </el-table-column>
  501. <el-table-column prop="landCertificateNo" label="国土证号" align="center" show-overflow-tooltip>
  502. </el-table-column>
  503. <el-table-column prop="plotRatio" label="容积率" width="80" align="center">
  504. </el-table-column>
  505. <el-table-column prop="useAcreage" label="使用权面积(㎡)" width="80" align="center">
  506. </el-table-column>
  507. <el-table-column prop="evaluateValue" label="初步定价(万)" width="80" align="center">
  508. </el-table-column>
  509. <el-table-column prop="checked" label="审核定价(万)" width="80" align="center">
  510. <template slot-scope="scope">
  511. {{ scope.row.checkValue == null ? '待审核' : scope.row.checkValue }}
  512. </template>
  513. </el-table-column>
  514. <el-table-column prop="statementNo" label="价值意见书号" align="center" width="250">
  515. <template slot-scope="scope">
  516. <el-tag :type='scope.row.statementNo == null ? "danger": "success" '>
  517. {{ scope.row.statementNo == null ? '未取号' : scope.row.statementNo }}</el-tag>
  518. </template>``
  519. </el-table-column>
  520. <el-table-column prop="reportNo" label="报告号" align="center" width="250">
  521. <template slot-scope="scope">
  522. <el-tag :type='scope.row.reportNo == null ? "danger": "success" '>
  523. {{ scope.row.reportNo == null ? '未取号' : scope.row.reportNo }}</el-tag>
  524. </template>
  525. </el-table-column>
  526. <el-table-column prop="letterNo" label="复评函号" align="center" width=250 >
  527. <template slot-scope="scope">
  528. <el-tag :type='scope.row.letterNo == null ? "danger": "success" '>
  529. {{ scope.row.letterNo == null ? '未取号' : scope.row.letterNo }}</el-tag>
  530. </template>
  531. </el-table-column>
  532. <el-table-column label="操作" align="center" width="100" fixed="right">
  533. <template slot-scope="scope">
  534. <el-button @click="landTargetEdit(scope.row)" type="text" size="small">
  535. {{ hanlderType() }}
  536. </el-button>
  537. <el-button v-if="currentNode.nodeCode === 'SPOT_RECONNAISSANCE'" @click="landTargetRemove(scope.row.id)"
  538. type="text" size="small">删除</el-button>
  539. </template>
  540. </el-table-column>
  541. </el-table>
  542. </div>
  543. <div class="evaluate-table" v-if="major.businessObjectType === '房地产'">
  544. <div>
  545. <el-row>
  546. <el-col :span="2">
  547. <div>
  548. <el-statistic group-separator="," :precision="4" :value="totalEvaluateValue" title="估价对象总价(万)">
  549. <template slot="prefix">
  550. <i class="el-icon-coin"></i>
  551. </template>
  552. </el-statistic>
  553. </div>
  554. </el-col>
  555. <el-col :span="2" style="margin-left:20px">
  556. <div>
  557. <el-statistic group-separator="," :precision="2" :value="totalAcreage" title="估价对象总面积(㎡)">
  558. <template slot="prefix">
  559. <i class="el-icon-house"></i>
  560. </template>
  561. </el-statistic>
  562. </div>
  563. </el-col>
  564. <el-col :span="2">
  565. <el-button v-if="currentNode.nodeCode === 'SPOT_RECONNAISSANCE'" type="danger" round
  566. @click="openLandDialog(major.businessObjectType)">添加估价对象</el-button>
  567. </el-col>
  568. <el-col :span="2" v-if="currentNode.nodeCode === 'WRITE_STATEMENT'">
  569. <el-tooltip v-if="ifTakeNumber" class="item" effect="dark" content="全选取主号,多次取号(主号-子号)" placement="right">
  570. <el-button type="success" :disabled="!takeNumberItems.length > 0" round
  571. @click="takeStatementNoOrLettertNo('STATEMENT')">取价值意见书号</el-button>
  572. </el-tooltip>
  573. <!-- <el-button v-if="ifCreatePorduction" type="danger" round @click="createProduction(reportNo)">创建产品</el-button> -->
  574. </el-col>
  575. <el-col :span="2" v-if="currentNode.nodeCode === 'WRITE_REPORT'">
  576. <el-tooltip v-if="ifTakeNumber" class="item" effect="dark" content="全选取主号,多次取号(主号-子号)" placement="right">
  577. <el-button type="danger" :disabled="!takeNumberItems.length > 0" round
  578. @click="takeNumberDialog = true">取报告号</el-button>
  579. </el-tooltip>
  580. <!-- <el-button v-if="ifCreatePorduction" type="danger" round @click="createProduction(reportNo)">创建产品</el-button> -->
  581. </el-col>
  582. <el-col :span="2" v-if="currentNode.nodeCode === 'WRITE_LETTER'">
  583. <el-tooltip v-if="ifTakeNumber" class="item" effect="dark" content="全选取主号,多次取号(主号-子号)" placement="right">
  584. <el-button :disabled="!takeNumberItems.length > 0" round
  585. @click="takeStatementNoOrLettertNo('LETTER')">取复评函号</el-button>
  586. </el-tooltip>
  587. <!-- <el-button v-if="ifCreatePorduction" type="danger" round @click="createProduction(reportNo)">创建产品</el-button> -->
  588. </el-col>
  589. </el-row>
  590. </div>
  591. <el-table ref="multipleTable" :data="evaluateLandData" stripe
  592. :header-row-style="{ color: '#333333', 'font-size': '14px' }" border takeNumberItems
  593. style="width: 100%; margin-top:20px;font-size: 14px;" @selection-change="handleSelectionChange">
  594. <el-table-column v-if="ifTakeNumber" type="selection" width="100" :selectable="selectable" align="center">
  595. </el-table-column>
  596. <el-table-column type="index" label="序号" width="50" align="center">
  597. </el-table-column>
  598. <el-table-column prop="housePurpose" label="用途" width="80" align="center" show-overflow-tooltip>
  599. <template slot-scope="scope">
  600. <span v-for="(u, index) in JSON.parse(scope.row.housePurpose)">
  601. {{ u }} {{ index == ((JSON.parse(scope.row.housePurpose)).length - 1) ? '' : ',' }}
  602. </span>
  603. </template>
  604. </el-table-column>
  605. <el-table-column prop="owner" label="权利人" width="120" show-overflow-tooltip align="center">
  606. </el-table-column>
  607. <el-table-column prop="located" label="坐落" align="center" show-overflow-tooltip>
  608. </el-table-column>
  609. <el-table-column prop="buildAcreage" label="建筑面积(㎡)" width="80" align="center" show-overflow-tooltip>
  610. </el-table-column>
  611. <el-table-column prop="landAcreage" label="土地面积(㎡)" width="80" align="center">
  612. </el-table-column>
  613. <el-table-column prop="evaluateValue" label="初步定价(万)" width="80" align="center">
  614. </el-table-column>
  615. <el-table-column prop="checked" label="审核定价(万)" width="80" align="center">
  616. <template slot-scope="scope">
  617. {{ scope.row.checkValue == null ? '待审核' : scope.row.checkValue }}
  618. </template>
  619. </el-table-column>
  620. <el-table-column prop="statementNo" label="价值意见书号" align="center" width="250">
  621. <template slot-scope="scope">
  622. <el-tag :type='scope.row.statementNo == null ? "danger": "success" '>
  623. {{ scope.row.statementNo == null ? '未取号' : scope.row.statementNo }}</el-tag>
  624. </template>
  625. </el-table-column>
  626. <el-table-column prop="reportNo" label="报告号" align="center" width="250">
  627. <template slot-scope="scope">
  628. <el-tag :type='scope.row.reportNo == null ? "danger": "success" '>
  629. {{ scope.row.reportNo == null ? '未取号' : scope.row.reportNo }}</el-tag>
  630. </template>
  631. </el-table-column>
  632. <el-table-column prop="letterNo" label="复评函号" align="center" width=250>
  633. <template slot-scope="scope">
  634. <el-tag :type='scope.row.letterNo == null ? "danger": "success" '>
  635. {{ scope.row.letterNo == null ? '未取号' : scope.row.letterNo }}</el-tag>
  636. </template>
  637. </el-table-column>
  638. <el-table-column label="操作" width="100" align="center">
  639. <template slot-scope="scope">
  640. <el-button @click="landTargetEdit(scope.row)" type="text" size="small">
  641. {{ hanlderType() }}
  642. </el-button>
  643. <el-button v-if="currentNode.nodeCode === 'SPOT_RECONNAISSANCE'" @click="landTargetRemove(scope.row.id)"
  644. type="text" size="small">删除</el-button>
  645. </template>
  646. </el-table-column>
  647. </el-table>
  648. </div>
  649. <div class="createMajor-main-container" style="margin-top:50px"
  650. v-if="currentNode.nodeCode === 'STATEMENT_FEEDBACK' || currentNode.nodeCode === 'QUOTATION_FEEDBACK'">
  651. <div class="postInfo-container">
  652. <div>
  653. <el-divider content-position="left">
  654. <h3 class="title">
  655. <div class="avatar-wrapper icon-title">反馈</div>
  656. <div class="icon-info">客户反馈</div>
  657. </h3>
  658. </el-divider>
  659. </div>
  660. </div>
  661. <el-form ref="feedbackFrom" :model="feedback" class="form-container" style="margin-top:50px" :rules="rules">
  662. <el-row>
  663. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  664. <el-form-item label="出具产品类型:" prop="production" label-width="160px" class="postInfo-container-item">
  665. <el-checkbox-group v-model="feedback.production" style="width:300px">
  666. <el-tooltip :disabled="!feedback.production.includes('STATEMENT')" class="item" effect="dark" content="若意见书已送达,无法取消此类型产品!" placement="top-start">
  667. <el-checkbox-button label="STATEMENT" name="production">价值意见书</el-checkbox-button>
  668. </el-tooltip>
  669. <el-checkbox-button label="REPORT" name="production">报告</el-checkbox-button>
  670. <el-checkbox-button label="LETTER" name="production">复评函</el-checkbox-button>
  671. <el-tooltip class="item" effect="dark" content="只出具价值意见书,不再出具其他产品。" placement="top-start">
  672. <el-checkbox-button v-if="currentNode.nodeCode === 'STATEMENT_FEEDBACK'" label="NONE"
  673. name="production">不再出具</el-checkbox-button>
  674. </el-tooltip>
  675. </el-checkbox-group>
  676. </el-form-item>
  677. </el-col>
  678. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  679. <el-form-item label="打印份数:" prop="printing" label-width="120px" class="postInfo-container-item"
  680. style="margin-left:100px">
  681. <el-input-number :precision="0" :min="1" :value-on-clear="1" v-model.number="feedback.printing"
  682. type="number" class="filter-item" />
  683. </el-form-item>
  684. </el-col>
  685. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  686. <el-form-item label="打印备注:" label-width="120px" class="postInfo-container-item">
  687. <el-select v-model="feedback.printingRemark">
  688. <el-option label="一本不装订" value="一本不装订"></el-option>
  689. <el-option label="一本带技术" value="一本带技术"></el-option>
  690. <el-option label="一本带技术不装订" value="一本带技术不装订"></el-option>
  691. </el-select>
  692. </el-form-item>
  693. </el-col>
  694. <el-col :xs="24" :sm="12" :lg="6" :span="6"
  695. v-if="currentNode.nodeCode === 'QUOTATION_FEEDBACK' || currentNode.nodeCode === 'STATEMENT_FEEDBACK'">
  696. <div style="text-align:left;margin-right:30px">
  697. <el-button type="success" round @click="saveFeedback()" :disabled="validFeed">保存反馈</el-button>
  698. </div>
  699. </el-col>
  700. </el-row>
  701. </el-form>
  702. </div>
  703. </el-tab-pane>
  704. <el-tab-pane name="producution" class="pane-class" :lazy=true>
  705. <span slot="label"><i class="el-icon-document-checked"></i> 产品信息</span>
  706. <!-- <el-alert
  707. title="提示:若要提交流程,请选择一个产品后才可提交。"
  708. show-icon
  709. :closable="false"
  710. type="info">
  711. </el-alert> -->
  712. <div class="createMajor-main-container" style="margin-top:40px">
  713. <div class="postInfo-container">
  714. <div>
  715. <el-divider content-position="left">
  716. <h3 class="title">
  717. <div class="avatar-wrapper icon-title">产品</div>
  718. <div class="icon-info">产品信息</div>
  719. </h3>
  720. </el-divider>
  721. </div>
  722. </div>
  723. </div>
  724. <el-table :data="productions" stripe ref="pTable" :header-row-style="{ color: '#333333', 'font-size': '16px' }"
  725. @selection-change="selectioProductionChange" @row-dblclick="expandRow" border
  726. style="width: 99%; margin-top:20px; font-size: 16px;">
  727. <el-table-column type="expand" style="background-color: red">
  728. <template slot-scope="props">
  729. <el-form label-position="left" :model="props.row" class="form-container" :ref="'productionFrom'+props.row.id"
  730. :rules="rules">
  731. <div>
  732. <el-row class="row-style">
  733. <el-col :xs="24" :sm="12" :lg="12" :span="6">
  734. <el-form-item prop="name" :rules="{ required: true, message: '项目不能为空', trigger: 'blur' }"
  735. label-width="120px" class="postInfo-container-item" label="项目名称:">
  736. <el-input v-model="props.row.name" class="filter-item" />
  737. </el-form-item>
  738. </el-col>
  739. <el-col :xs="24" :sm="12" :lg="12" :span="6">
  740. <el-form-item prop="clientName" :rules="{ required: true, message: '委托方不能为空', trigger: 'blur' }"
  741. label-width="120px" class="postInfo-container-item" label="委托方:">
  742. <el-input v-model="props.row.clientName" class="filter-item" />
  743. </el-form-item>
  744. </el-col>
  745. </el-row>
  746. <el-row class="row-style">
  747. <el-col :xs="24" :sm="12" :lg="12" :span="6">
  748. <el-form-item prop="clientAddress" :rules="{ required: true, message: '委托方地址不能为空', trigger: 'blur' }"
  749. label-width="140px" class="postInfo-container-item" label="委托方地址:">
  750. <el-input v-model="props.row.clientAddress" class="filter-item" />
  751. </el-form-item>
  752. </el-col>
  753. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  754. <el-form-item prop="clientTel" label-width="140px" class="postInfo-container-item" label="委托方电话:">
  755. <el-input v-model="props.row.clientTel" class="filter-item" />
  756. </el-form-item>
  757. </el-col>
  758. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  759. <el-form-item prop="qrCode" label-width="140px" class="postInfo-container-item" label="二维码:">
  760. </el-form-item>
  761. <img style="width:200px;height:200px; display:flex ;position:absolute;top:0;right:0"
  762. :src="props.row.qrCode" alt="NULL" />
  763. </el-col>
  764. </el-row>
  765. <el-row class="row-style">
  766. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  767. <el-form-item prop="evaluateAmount" label-width="120px" class="postInfo-container-item"
  768. label="评估总价:">
  769. <el-input v-model="props.row.evaluateAmount" style="width:100%" class="filter-item">
  770. <template slot="append">
  771. <span>元</span>
  772. </template>
  773. </el-input>
  774. </el-form-item>
  775. </el-col>
  776. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  777. <el-form-item prop="evaluateAcreage" label-width="120px" class="postInfo-container-item"
  778. label="评估面积:">
  779. <el-input v-model="props.row.evaluateAcreage" style="width:100%" class="filter-item">
  780. <template slot="append">
  781. <span>平方</span>
  782. </template>
  783. </el-input>
  784. </el-form-item>
  785. </el-col>
  786. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  787. <el-form-item prop="evaluatePrice" label-width="120px" class="postInfo-container-item"
  788. label="评估单价:">
  789. <el-input v-model="props.row.evaluatePrice" style="width:100%" readonly disabled
  790. class="filter-item">
  791. <template slot="append">
  792. <span>元</span>
  793. </template>
  794. </el-input>
  795. </el-form-item>
  796. </el-col>
  797. </el-row>
  798. <el-row class="row-style">
  799. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  800. <el-form-item prop="owner" :rules="{ required: true, message: '产权人不能为空', trigger: 'blur' }"
  801. label-width="120px" class="postInfo-container-item" label="产权人:">
  802. <el-input v-model="props.row.owner" class="filter-item" />
  803. </el-form-item>
  804. </el-col>
  805. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  806. <el-form-item prop="valueTiming" :rules="{ required: true, message: '价值时点不能为空', trigger: 'blur' }"
  807. label-width="120px" class="postInfo-container-item" label="价值时点:">
  808. <el-date-picker v-model="props.row.valueTiming" type="date" placeholder="选择日期" style="width:100%">
  809. </el-date-picker>
  810. </el-form-item>
  811. </el-col>
  812. <el-col :xs="24" :sm="12" :lg="6" :span="6" v-if="props.row.production === 'REPORT'">
  813. <el-form-item prop="signatoryId" :rules="{ required: true, message: '签字人不能为空', trigger: 'blur' }"
  814. label-width="120px" class="postInfo-container-item" label="签字人:">
  815. <el-select v-model="props.row.signatoryId" placeholder="产品类型为报告,签字人必填" multiple clearable
  816. style=" width: 100%">
  817. <el-option v-for="(u, id) in allUsers" :label="u.name" :value="u.id"></el-option>
  818. </el-select>
  819. </el-form-item>
  820. </el-col>
  821. <el-col :xs="24" :sm="12" :lg="6" :span="6" v-else>
  822. <el-form-item prop="signatoryId" label-width="120px" class="postInfo-container-item">
  823. </el-form-item>
  824. </el-col>
  825. </el-row>
  826. <el-row class="row-style">
  827. <el-col :xs="24" :sm="12" :lg="18" :span="6">
  828. <el-form-item prop="comment" label-width="120px" class="postInfo-container-item" label="特殊情况说明:">
  829. <el-input v-model.trim="props.row.comment" class="filter-item" />
  830. </el-form-item>
  831. </el-col>
  832. </el-row>
  833. <el-row class="row-style" v-if="doUpload">
  834. <el-col :xs="24" :sm="12" :lg="8" :span="6">
  835. <el-form-item label="产品初稿:" label-width="120px" class="postInfo-container-item">
  836. <el-upload action="/api/upload" :limit="3" :on-success="changeres" :on-exceed="handleExceed"
  837. :on-preview="handleAttachmentPreview" :file-list="props.row.filePathList"
  838. :before-remove="beforeRemove">
  839. <el-button plain type="info" round style="width: 100%">上传<i
  840. class="el-icon-upload el-icon--right"></i></el-button>
  841. </el-upload>
  842. </el-form-item>
  843. </el-col>
  844. <el-col :xs="24" :sm="12" :lg="8" :span="6">
  845. <el-form-item label="产品审核稿:" label-width="140px" class="postInfo-container-item">
  846. <el-upload action="/api/upload" :limit="3" :on-success="changeres1" :on-exceed="handleExceed"
  847. :on-preview="handleAttachmentPreview" :file-list="props.row.filePathList1"
  848. :before-remove="beforeRemove1">
  849. <el-button plain type="info" round style="width: 100%">上传<i
  850. class="el-icon-upload el-icon--right"></i></el-button>
  851. </el-upload>
  852. </el-form-item>
  853. </el-col>
  854. </el-row>
  855. </div>
  856. <div>
  857. <!-- <el-tag effect="plain" size="medium" disable-transitions><span style="font-size:16px">库存状态</span></el-tag> -->
  858. <el-row class="row-style" v-if="doWare">
  859. <el-col :xs="24" :sm="12" :lg="4" :span="6">
  860. <el-form-item label="出入库操作:" label-width="120px" class="postInfo-container-item">
  861. <el-button plain type="info" round style="width: 100%"
  862. @click="openWareHouseDialog(props.row)">{{ currentNode.nodeName }}<i
  863. class="el-icon-s-home el-icon--right"></i></el-button>
  864. </el-form-item>
  865. </el-col>
  866. </el-row>
  867. <!-- <el-steps :active="props.row.repertoryState==null?0:(props.row.repertoryState?2:1)"
  868. process-status="success" finish-status="success" simple style="margin: 10px 1% 20px 40px">
  869. <el-step title="未入库" ></el-step>
  870. <el-step title="已入库" ></el-step>
  871. <el-step title="已出库" ></el-step>
  872. </el-steps> -->
  873. </div>
  874. </el-form>
  875. </template>
  876. </el-table-column>
  877. <el-table-column
  878. v-if="(this.currentNode.nodeCode === 'WRITE_STATEMENT' || this.currentNode.nodeCode === 'WRITE_REPORT' || this.currentNode.nodeCode === 'WRITE_LETTER')"
  879. type="selection" width="100" align="center">
  880. </el-table-column>
  881. <el-table-column label="产品号" prop="reportNo" align="center">
  882. <template slot-scope="props">
  883. <span style="color:rgb(131,201,94); font-weight:bold">{{ props.row.reportNo }}</span>
  884. </template>
  885. </el-table-column>
  886. <el-table-column label="项目名称" prop="name" align="center">
  887. <template slot-scope="props">
  888. {{ props.row.name }}
  889. </template>
  890. </el-table-column>
  891. <el-table-column label="产品类型" prop="production" align="center">
  892. <template slot-scope="props">
  893. {{ aliasProductionType(props.row.production) }}
  894. </template>
  895. </el-table-column>
  896. <el-table-column label="操作" align="center">
  897. <template slot-scope="props">
  898. <el-button round type="danger" @click="saveProduction(props.row)">更新产品信息</el-button>
  899. </template>
  900. </el-table-column>
  901. </el-table>
  902. </el-tab-pane>
  903. <el-tab-pane name="quality" v-if="checkLoop" class="pane-class" :lazy=true>
  904. <span slot="label"><i class="el-icon-pie-chart"></i> 产品质检</span>
  905. <el-form ref="performanceForm" :model="performance" class="form-container">
  906. <div class="createMajor-main-container">
  907. <div class="postInfo-container">
  908. <div>
  909. <el-divider content-position="left">
  910. <h3 class="title">
  911. <div class="avatar-wrapper icon-title">质检</div>
  912. <div class="icon-info">产品质检</div>
  913. </h3>
  914. </el-divider>
  915. </div>
  916. <div style="margin-top:50px">
  917. <el-row class="row-style" style="margin-top:30px;">
  918. <el-col :xs="24" :sm="12" :lg="7" :span="6">
  919. <el-form-item prop="productionNo" label-width="120px" class="postInfo-container-item" label="产品号:">
  920. <el-input style="width:100%;" disabled readonly :value="performance.productionNo"
  921. class="filter-item" />
  922. </el-form-item>
  923. </el-col>
  924. <el-col :xs="24" :sm="12" :lg="4" :span="6">
  925. <el-form-item prop="productionType" label-width="120px" class="postInfo-container-item" label="产品类型:">
  926. <el-input style="width:100%;" disabled readonly :value="performance.productionType"
  927. class="filter-item" />
  928. </el-form-item>
  929. </el-col>
  930. <el-col :xs="24" :sm="12" :lg="5" :span="6">
  931. <el-form-item prop="productionName" label-width="120px" class="postInfo-container-item" label="项目名称:">
  932. <el-input style="width:100%;" disabled readonly :value="performance.productionName"
  933. class="filter-item" />
  934. </el-form-item>
  935. </el-col>
  936. <el-col :xs="24" :sm="12" :lg="4" :span="6">
  937. <el-form-item prop="productionName" label-width="120px" class="postInfo-container-item" label="负责人:">
  938. <el-input style="width:100%;" disabled readonly :value="performance.principal"
  939. class="filter-item" />
  940. </el-form-item>
  941. </el-col>
  942. </el-row>
  943. <el-card shadow="hover" style="width:80%;margin-left:3%" v-for="(p, id) in performance.info" :index="id">
  944. <el-divider content-position="left">
  945. <h3 class="title">
  946. {{ p.checkLoop }}
  947. </h3>
  948. </el-divider>
  949. <el-row class="row-style">
  950. <el-col :xs="24" :sm="12" :lg="8" :span="6">
  951. <el-form-item prop="normalMistake" label-width="120px" class="postInfo-container-item"
  952. label="一般错误个数:">
  953. <el-input-number :min="0" style="width:100%;" type="number" v-model="p.normalMistake"
  954. class="filter-item" />
  955. </el-form-item>
  956. </el-col>
  957. <el-col :xs="24" :sm="12" :lg="8" :span="6">
  958. <el-form-item prop="hardMistake" label-width="120px" class="postInfo-container-item"
  959. label="较大错误个数:">
  960. <el-input-number :min="0" style="width:100%;" type="number" v-model="p.hardMistake"
  961. class="filter-item" />
  962. </el-form-item>
  963. </el-col>
  964. <el-col :xs="24" :sm="12" :lg="8" :span="6">
  965. <el-form-item prop="fatalMistake" label-width="120px" class="postInfo-container-item"
  966. label="重大错误个数:">
  967. <el-input-number :min="0" style="width:100%;" type="number" v-model="p.fatalMistake"
  968. class="filter-item" />
  969. </el-form-item>
  970. </el-col>
  971. </el-row>
  972. <el-row class="row-style">
  973. <el-col :xs="24" :sm="12" :lg="24" :span="6">
  974. <el-form-item label-width="120px" class="postInfo-container-item" label="错误类型:">
  975. <el-tag class="error-type" effect="plain" type="info"
  976. @click="addErrorType(p, '委托书界定事项和报告描述不符')">委托书界定事项和报告描述不符</el-tag>
  977. <el-tag class="error-type" effect="plain" type="info"
  978. @click="addErrorType(p, '委托方函重要数据出错')">委托方函重要数据出错</el-tag>
  979. <el-tag class="error-type" effect="plain" type="info"
  980. @click="addErrorType(p, '假设限制条件错漏')">假设限制条件错漏</el-tag>
  981. <el-tag class="error-type" effect="plain" type="info"
  982. @click="addErrorType(p, '地价定义表述有误或不完整')">地价定义表述有误或不完整</el-tag>
  983. <el-tag class="error-type" effect="plain" type="info"
  984. @click="addErrorType(p, '大小写有误')">大小写有误</el-tag>
  985. <el-tag class="error-type" effect="plain" type="info"
  986. @click="addErrorType(p, '面积有误')">面积有误</el-tag>
  987. <el-tag class="error-type" effect="plain" type="info"
  988. @click="addErrorType(p, '报告章节缺漏')">报告章节缺漏</el-tag>
  989. <el-tag class="error-type" effect="plain" type="info"
  990. @click="addErrorType(p, '技术路线错误')">技术路线错误</el-tag>
  991. <el-tag class="error-type" effect="plain" type="info"
  992. @click="addErrorType(p, '测算参数取值错误')">测算参数取值错误</el-tag>
  993. <el-tag class="error-type" effect="plain" type="info"
  994. @click="addErrorType(p, '实景图方位图错误')">实景图方位图错误</el-tag>
  995. <el-tag class="error-type" effect="plain" type="info"
  996. @click="addErrorType(p, '报告出具日期错误')">报告出具日期错误</el-tag>
  997. <el-tag class="error-type" effect="plain" type="info"
  998. @click="addErrorType(p, '报告有效期错误')">报告有效期错误</el-tag>
  999. <el-tag class="error-type" effect="plain" type="info"
  1000. @click="addErrorType(p, '估价依据适用不当')">估价依据适用不当</el-tag>
  1001. <el-tag class="error-type" effect="plain" type="info"
  1002. @click="addErrorType(p, '委托人名称出错')">委托人名称出错</el-tag>
  1003. <el-tag class="error-type" effect="plain" type="info"
  1004. @click="addErrorType(p, '价值时点出错')">价值时点出错</el-tag>
  1005. </el-form-item>
  1006. </el-col>
  1007. </el-row>
  1008. <el-row class="row-style">
  1009. <el-col :xs="24" :sm="12" :lg="24" :span="6">
  1010. <el-form-item prop="reason" label-width="120px" class="postInfo-container-item" label="扣分原因:">
  1011. <el-input v-model.trim="p.reason" class="filter-item" type="textarea" />
  1012. </el-form-item>
  1013. </el-col>
  1014. </el-row>
  1015. <el-button type="primary" style="margin-left:50%" @click="saveQuality(p)">保存</el-button>
  1016. </el-card>
  1017. </div>
  1018. </div>
  1019. </div>
  1020. </el-form>
  1021. </el-tab-pane>
  1022. <el-tab-pane name="workflowLog" class="pane-class" :lazy=true>
  1023. <span slot="label"><i class="el-icon-date"></i> 流程日志</span>
  1024. <div class="createMajor-main-container">
  1025. <div class="postInfo-container">
  1026. <div>
  1027. <el-divider content-position="left">
  1028. <h3 class="title">
  1029. <div class="avatar-wrapper icon-title">日志</div>
  1030. <div class="icon-info">流程审批日志</div>
  1031. </h3>
  1032. </el-divider>
  1033. </div>
  1034. </div>
  1035. </div>
  1036. <el-table :data="workflowLogs" stripe :header-row-style="{ color: '#333333' }" border
  1037. style="width: 100%; margin-top:20px">
  1038. <el-table-column prop="nodeName" label="节点名称" align="center">
  1039. </el-table-column>
  1040. <el-table-column prop="state" label="处理结果" align="center">
  1041. </el-table-column>
  1042. <el-table-column prop="handlerName" label="处理人" align="center">
  1043. </el-table-column>
  1044. <el-table-column prop="longTime" label="处理时长" align="center">
  1045. </el-table-column>
  1046. <el-table-column prop="created" label="处理时间" align="center">
  1047. </el-table-column>
  1048. <el-table-column prop="comments" label="处理意见" align="center" show-overflow-tooltip>
  1049. </el-table-column>
  1050. </el-table>
  1051. </el-tab-pane>
  1052. </el-tabs>
  1053. <el-dialog :visible.sync="landDialogVisible" custom-class="doWarehouseClass">
  1054. <div>
  1055. <el-form ref="landFrom" :model="landTarget" style="margin-top:20px" :rules="rules">
  1056. <el-divider content-position="left">【土地】基本信息</el-divider>
  1057. <el-row>
  1058. <el-col :xs="24" :sm="12" :lg="12" :span="6">
  1059. <el-form-item label="土地类型:" prop="landType" :rules="{ required: true, message: '土地类型不能为空', trigger: 'blur' }"
  1060. label-width="120px" class="postInfo-container-item">
  1061. <el-radio v-model="landTarget.landType" label="国有" size="mini"
  1062. :readonly="currentNode.nodeCode != 'SPOT_RECONNAISSANCE'"
  1063. :disabled="currentNode.nodeCode != 'SPOT_RECONNAISSANCE'">国有</el-radio>
  1064. <el-radio v-model="landTarget.landType" label="集体" size="mini"
  1065. :readonly="currentNode.nodeCode != 'SPOT_RECONNAISSANCE'"
  1066. :disabled="currentNode.nodeCode != 'SPOT_RECONNAISSANCE'">集体</el-radio>
  1067. </el-form-item>
  1068. </el-col>
  1069. <el-col :xs="24" :sm="12" :lg="12" :span="6">
  1070. <el-form-item label="使用权面积:" prop="useAcreage" label-width="120px" class="postInfo-container-item">
  1071. <el-input v-model="landTarget.useAcreage" class="filter-item"
  1072. :readonly="currentNode.nodeCode != 'SPOT_RECONNAISSANCE'"
  1073. :disabled="currentNode.nodeCode != 'SPOT_RECONNAISSANCE'">
  1074. <template slot="append">平方</template>
  1075. </el-input>
  1076. </el-form-item>
  1077. </el-col>
  1078. </el-row>
  1079. <el-row>
  1080. <el-col :xs="24" :sm="12" :lg="12" :span="6">
  1081. <el-form-item label="使用权类型:" prop="rightType"
  1082. :rules="{ required: true, message: '使用权类型不能为空', trigger: 'blur' }" label-width="120px"
  1083. class="postInfo-container-item">
  1084. <el-radio v-model="landTarget.rightType" label="出让" size="mini"
  1085. :readonly="currentNode.nodeCode != 'SPOT_RECONNAISSANCE'"
  1086. :disabled="currentNode.nodeCode != 'SPOT_RECONNAISSANCE'">出让</el-radio>
  1087. <el-radio v-model="landTarget.rightType" label="划拨" size="mini"
  1088. @click.native="cleanResidueYears(landTarget)" :readonly="currentNode.nodeCode != 'SPOT_RECONNAISSANCE'"
  1089. :disabled="currentNode.nodeCode != 'SPOT_RECONNAISSANCE'">划拨</el-radio>
  1090. </el-form-item>
  1091. </el-col>
  1092. <el-col :xs="24" :sm="12" :lg="12" :span="8">
  1093. <el-form-item label="使用权人:" prop="rightToUser"
  1094. :rules="{ required: true, message: '土地使用权人不能为空', trigger: 'blur' }" label-width="120px"
  1095. class="postInfo-container-item">
  1096. <el-input v-model.trim="landTarget.rightToUser" class="filter-item"
  1097. :readonly="currentNode.nodeCode != 'SPOT_RECONNAISSANCE'"
  1098. :disabled="currentNode.nodeCode != 'SPOT_RECONNAISSANCE'" />
  1099. </el-form-item>
  1100. </el-col>
  1101. </el-row>
  1102. <el-row>
  1103. <el-col :xs="24" :sm="12" :lg="12" :span="8">
  1104. <el-form-item label="国土证号:" prop="landCertificateNo" label-width="120px" class="postInfo-container-item">
  1105. <el-input v-model.trim="landTarget.landCertificateNo" class="filter-item"
  1106. :readonly="currentNode.nodeCode != 'SPOT_RECONNAISSANCE'"
  1107. :disabled="currentNode.nodeCode != 'SPOT_RECONNAISSANCE'" />
  1108. </el-form-item>
  1109. </el-col>
  1110. <el-col :xs="24" :sm="12" :lg="12" :span="8">
  1111. <el-form-item label="坐落:" prop="located" :rules="{ required: true, message: '坐落不能为空', trigger: 'blur' }"
  1112. label-width="120px" class="postInfo-container-item">
  1113. <el-input v-model.trim="landTarget.located" class="filter-item"
  1114. :readonly="currentNode.nodeCode != 'SPOT_RECONNAISSANCE'"
  1115. :disabled="currentNode.nodeCode != 'SPOT_RECONNAISSANCE'" />
  1116. </el-form-item>
  1117. </el-col>
  1118. </el-row>
  1119. <el-row>
  1120. <el-col :xs="24" :sm="12" :lg="12" :span="6">
  1121. <el-form-item label="剩余年限:" prop="residueYears" label-width="120px" class="postInfo-container-item">
  1122. <el-input v-model="landTarget.residueYears" class="filter-item"
  1123. :readonly="currentNode.nodeCode != 'SPOT_RECONNAISSANCE' || landTarget.rightType === '划拨'"
  1124. :disabled="currentNode.nodeCode != 'SPOT_RECONNAISSANCE' || landTarget.rightType === '划拨'">
  1125. <template slot="append">年</template>
  1126. </el-input>
  1127. </el-form-item>
  1128. </el-col>
  1129. <el-col :xs="24" :sm="12" :lg="12" :span="6">
  1130. <el-form-item label="容积率:" prop="plotRatio" label-width="120px" class="postInfo-container-item">
  1131. <el-input v-model="landTarget.plotRatio" class="filter-item"
  1132. :readonly="currentNode.nodeCode != 'SPOT_RECONNAISSANCE'"
  1133. :disabled="currentNode.nodeCode != 'SPOT_RECONNAISSANCE'">
  1134. </el-input>
  1135. </el-form-item>
  1136. </el-col>
  1137. </el-row>
  1138. <el-row>
  1139. <el-col :xs="24" :sm="12" :lg="12" :span="6">
  1140. <el-form-item label="用途(地类):" prop="landUse" label-width="120px"
  1141. :rules="{ required: true, message: '用途(地类)不能为空', trigger: 'blur' }" class="postInfo-container-item">
  1142. <el-input v-model.trim="landTarget.landUse" class="filter-item"
  1143. :readonly="currentNode.nodeCode != 'SPOT_RECONNAISSANCE'"
  1144. :disabled="currentNode.nodeCode != 'SPOT_RECONNAISSANCE'" />
  1145. </el-form-item>
  1146. </el-col>
  1147. <el-col :xs="24" :sm="12" :lg="12" :span="8">
  1148. <el-form-item label="估价期日:" prop="evaluateDate"
  1149. :rules="{ required: true, message: '估价期日不能为空', trigger: 'blur' }" label-width="120px"
  1150. class="postInfo-container-item">
  1151. <el-date-picker v-model="landTarget.evaluateDate" type="date" placeholder="选择日期" style="width:100%"
  1152. :readonly="currentNode.nodeCode != 'SPOT_RECONNAISSANCE'"
  1153. :disabled="currentNode.nodeCode != 'SPOT_RECONNAISSANCE'">
  1154. </el-date-picker>
  1155. </el-form-item>
  1156. </el-col>
  1157. </el-row>
  1158. <el-row>
  1159. <el-col :xs="24" :sm="12" :lg="12" :span="8">
  1160. <el-form-item label="负责人:" prop="principalId"
  1161. :rules="{ required: true, message: '项目负责人不能为空', trigger: 'blur' }" label-width="120px"
  1162. class="postInfo-container-item">
  1163. <el-select :value="landTarget.principalId" readonly disabled style="width:100%">
  1164. <el-option v-for="(p, id) in principals" :label="p.name" :value="p.id"></el-option>
  1165. </el-select>
  1166. </el-form-item>
  1167. </el-col>
  1168. <el-col :xs="24" :sm="12" :lg="12" :span="8">
  1169. <el-form-item label="实勘人:" prop="sites" :rules="{ required: true, message: '实勘人不能为空', trigger: 'blur' }"
  1170. label-width="120px" class="postInfo-container-item">
  1171. <el-select v-model="landTarget.sites" placeholder="请选择" multiple filterable clearable style="width:350px"
  1172. @change="sitesChange()" :readonly="currentNode.nodeCode != 'SPOT_RECONNAISSANCE'"
  1173. :disabled="currentNode.nodeCode != 'SPOT_RECONNAISSANCE'">
  1174. <el-option v-for="(u, id) in allUsers" :label="u.name" :value="u.id" :key="u.id"></el-option>
  1175. </el-select>
  1176. </el-form-item>
  1177. </el-col>
  1178. </el-row>
  1179. <el-row>
  1180. <el-col :xs="24" :sm="12" :lg="24" :span="12">
  1181. <el-form-item label="备注:" prop="remark" label-width="120px" class="postInfo-container-item">
  1182. <el-input v-model.trim="landTarget.remark" class="filter-item" type="textarea" style="width:100%;"
  1183. :readonly="currentNode.nodeCode != 'SPOT_RECONNAISSANCE'"
  1184. :disabled="currentNode.nodeCode != 'SPOT_RECONNAISSANCE'" />
  1185. </el-form-item>
  1186. </el-col>
  1187. </el-row>
  1188. <div
  1189. v-if="currentNode.nodeCode === 'INITIAL_PRICE' || currentNode.nodeCode === 'REVIEW_QUOTATION' || hanlderType() === '查看'">
  1190. <el-divider content-position="left">【土地】定价信息</el-divider>
  1191. <el-row>
  1192. <el-col :xs="24" :sm="12" :lg="24" :span="6">
  1193. <el-form-item label="评估方法:" prop="eMethods"
  1194. :rules="{ required: true, message: '评估方法不能为空', trigger: 'blur' }" label-width="160px"
  1195. :class="['postInfo-container-item', 'task-class']">
  1196. <el-checkbox-group v-model="eMethods">
  1197. <el-checkbox-button label="市场比较法" key="市场比较法">市场比较法</el-checkbox-button>
  1198. <el-checkbox-button label="收益还原法" key="收益还原法">收益还原法</el-checkbox-button>
  1199. <el-checkbox-button label="成本逼近法" key="成本逼近法">成本逼近法</el-checkbox-button>
  1200. <el-checkbox-button label="剩余法" key="剩余法">剩余法</el-checkbox-button>
  1201. <el-checkbox-button label="基准地价系数修正法" key="基准地价系数修正法">基准地价系数修正法</el-checkbox-button>
  1202. <el-checkbox-button label="其他" key="其他">其他</el-checkbox-button>
  1203. </el-checkbox-group>
  1204. </el-form-item>
  1205. </el-col>
  1206. </el-row>
  1207. <el-row>
  1208. <el-col :xs="24" :sm="12" :lg="12" :span="6">
  1209. <el-form-item label="初步定价:" prop="evaluateValue" label-width="160px"
  1210. :class="['postInfo-container-item', 'task-class']">
  1211. <el-input v-model="landTarget.evaluateValue" class="filter-item">
  1212. <template slot="append">万</template>
  1213. </el-input>
  1214. </el-form-item>
  1215. </el-col>
  1216. <el-col :xs="24" :sm="12" :lg="12" :span="6" v-if="currentNode.nodeCode === 'REVIEW_QUOTATION'">
  1217. <el-form-item label="审核定价:" prop="checkValue" label-width="160px"
  1218. :class="['postInfo-container-item', 'task-class']">
  1219. <span slot="label">审核定价
  1220. <el-tooltip class="item" effect="dark" content="默认为‘初步定价’可修改。" placement="top-start">
  1221. <i class="el-icon-question" /></el-tooltip>
  1222. </span>
  1223. <el-input v-model="landTarget.checkValue" :placeholder="landTarget.evaluateValue" class="filter-item">
  1224. <template slot="append">万</template>
  1225. </el-input>
  1226. </el-form-item>
  1227. </el-col>
  1228. </el-row>
  1229. </div>
  1230. <el-row v-if="hanlderType() != '查看'">
  1231. <el-button v-if="currentNode.nodeCode === 'SPOT_RECONNAISSANCE'" type="success"
  1232. @click="saveLandTarget(major.businessObjectType)" style="width:100%;">保存</el-button>
  1233. <el-button v-else type="success" @click="doTask(currentNode.nodeCode)" style="width:100%;">保存</el-button>
  1234. </el-row>
  1235. </el-form>
  1236. </div>
  1237. </el-dialog>
  1238. <el-dialog :visible.sync="houseDialogVisible" custom-class="doWarehouseClass">
  1239. <div>
  1240. <el-form ref="houseFrom" :model="landTarget" style="margin-top:20px" :rules="rules">
  1241. <el-divider content-position="left">【房地产】基本信息</el-divider>
  1242. <el-row>
  1243. <el-col :xs="24" :sm="12" :lg="12" :span="6">
  1244. <el-form-item label="房屋用途:" prop="houseToUse" label-width="120px" :class="['postInfo-container-item']">
  1245. <el-checkbox-group v-model="houseToUse">
  1246. <el-checkbox-button label="住宅" key="住宅">住宅</el-checkbox-button>
  1247. <el-checkbox-button label="商业" key="商业">商业</el-checkbox-button>
  1248. <el-checkbox-button label="办公" key="办公">办公</el-checkbox-button>
  1249. <el-checkbox-button label="工业" key="工业">工业</el-checkbox-button>
  1250. <el-checkbox-button label="其他" key="其他">其他</el-checkbox-button>
  1251. </el-checkbox-group>
  1252. </el-form-item>
  1253. </el-col>
  1254. <el-col :xs="24" :sm="12" :lg="12" :span="6">
  1255. <el-form-item label="土地使用权人:" prop="rightToUser" label-width="140px" class="postInfo-container-item">
  1256. <el-input v-model.trim="landTarget.rightToUser" class="filter-item" />
  1257. </el-form-item>
  1258. </el-col>
  1259. </el-row>
  1260. <el-row>
  1261. <el-col :xs="24" :sm="12" :lg="12" :span="6">
  1262. <el-form-item label="权利人:" prop="owner" :rules="{ required: true, message: '权利人不能为空', trigger: 'blur' }"
  1263. label-width="120px" class="postInfo-container-item">
  1264. <el-input v-model.trim="landTarget.owner" class="filter-item" />
  1265. </el-form-item>
  1266. </el-col>
  1267. <el-col :xs="24" :sm="12" :lg="12" :span="6">
  1268. <el-form-item label="权证号:" prop="ownerNo" label-width="120px" class="postInfo-container-item">
  1269. <el-input v-model.trim="landTarget.ownerNo" class="filter-item" />
  1270. </el-form-item>
  1271. </el-col>
  1272. </el-row>
  1273. <el-row>
  1274. <el-col :xs="24" :sm="12" :lg="12" :span="6">
  1275. <el-form-item label="土地证号:" prop="landCertificateNo" label-width="120px" class="postInfo-container-item">
  1276. <el-input v-model.trim="landTarget.landCertificateNo" class="filter-item" />
  1277. </el-form-item>
  1278. </el-col>
  1279. <el-col :xs="24" :sm="12" :lg="12" :span="6">
  1280. <el-form-item label="坐落:" prop="located" label-width="120px"
  1281. :rules="{ required: true, message: '坐落不能为空', trigger: 'blur' }" class="postInfo-container-item">
  1282. <el-input v-model.trim="landTarget.located" class="filter-item" />
  1283. </el-form-item>
  1284. </el-col>
  1285. </el-row>
  1286. <el-row>
  1287. <el-col :xs="24" :sm="12" :lg="12" :span="6">
  1288. <el-form-item label="使用权类型:" :rules="{ required: true, message: '使用权类型不能为空', trigger: 'blur' }"
  1289. prop="useRightType" label-width="140px" class="postInfo-container-item">
  1290. <el-input v-model.trim="landTarget.useRightType" class="filter-item" />
  1291. </el-form-item>
  1292. </el-col>
  1293. <el-col :xs="24" :sm="12" :lg="12" :span="8">
  1294. <el-form-item label="项目名称:" prop="targetName" label-width="120px" class="postInfo-container-item">
  1295. <el-input v-model.trim="landTarget.targetName" />
  1296. </el-form-item>
  1297. </el-col>
  1298. </el-row>
  1299. <el-row>
  1300. <el-col :xs="24" :sm="12" :lg="12" :span="8">
  1301. <el-form-item label="竣工年代:" prop="buildDoneYear" label-width="120px" class="postInfo-container-item">
  1302. <el-input v-model.trim="landTarget.buildDoneYear" class="filter-item" />
  1303. </el-form-item>
  1304. </el-col>
  1305. <el-col :xs="24" :sm="12" :lg="12" :span="8">
  1306. <el-form-item label="建筑面积:" prop="buildAcreage" label-width="120px" class="postInfo-container-item">
  1307. <el-input v-model="landTarget.buildAcreage" style="width:100%" class="filter-item">
  1308. <template slot="append">平方</template>
  1309. </el-input>
  1310. </el-form-item>
  1311. </el-col>
  1312. </el-row>
  1313. <el-row>
  1314. <el-col :xs="24" :sm="12" :lg="12" :span="8">
  1315. <el-form-item label="土地面积:" prop="landAcreage" label-width="120px" class="postInfo-container-item">
  1316. <el-input v-model="landTarget.landAcreage" style="width:100%" class="filter-item">
  1317. <template slot="append">平方</template>
  1318. </el-input>
  1319. </el-form-item>
  1320. </el-col>
  1321. <el-col :xs="24" :sm="12" :lg="12" :span="6">
  1322. <el-form-item label="规划用途:" :rules="{ required: true, message: '规划用途不能为空', trigger: 'blur' }"
  1323. prop="planPurpose" label-width="120px" class="postInfo-container-item">
  1324. <el-input v-model.trim="landTarget.planPurpose" class="filter-item" />
  1325. </el-form-item>
  1326. </el-col>
  1327. </el-row>
  1328. <el-row>
  1329. <el-col :xs="24" :sm="12" :lg="12" :span="6">
  1330. <el-form-item label="实勘地址:" :rules="{ required: true, message: '实勘地址不能为空', trigger: 'blur' }"
  1331. prop="siteLocated" label-width="120px" class="postInfo-container-item">
  1332. <el-input v-model.trim="landTarget.siteLocated" class="filter-item" />
  1333. </el-form-item>
  1334. </el-col>
  1335. <el-col :xs="24" :sm="12" :lg="12" :span="6">
  1336. <el-form-item label="实际用途:" :rules="{ required: true, message: '实际用途不能为空', trigger: 'blur' }"
  1337. prop="realPurpose" label-width="120px" class="postInfo-container-item">
  1338. <el-input v-model.trim="landTarget.realPurpose" class="filter-item" />
  1339. </el-form-item>
  1340. </el-col>
  1341. </el-row>
  1342. <el-row>
  1343. <el-col :xs="24" :sm="12" :lg="8" :span="8">
  1344. <el-form-item label="负责人:" prop="principalId"
  1345. :rules="{ required: true, message: '项目负责人不能为空', trigger: 'blur' }" label-width="120px"
  1346. class="postInfo-container-item">
  1347. <el-select :value="landTarget.principalId" readonly disabled>
  1348. <el-option v-for="(p, id) in principals" :label="p.name" :value="p.id"></el-option>
  1349. </el-select>
  1350. </el-form-item>
  1351. </el-col>
  1352. <el-col :xs="24" :sm="12" :lg="16" :span="8">
  1353. <el-form-item label="实勘人:" prop="sites" :rules="{ required: true, message: '实勘人不能为空', trigger: 'blur' }"
  1354. label-width="120px" class="postInfo-container-item">
  1355. <el-select v-model="landTarget.sites" placeholder="请选择" multiple filterable clearable style="width:100%"
  1356. @change="sitesChange()">
  1357. <el-option v-for="(u, id) in allUsers" :label="u.name" :value="u.id" :key="u.id"></el-option>
  1358. </el-select>
  1359. </el-form-item>
  1360. </el-col>
  1361. </el-row>
  1362. <el-row>
  1363. <el-col :xs="24" :sm="12" :lg="24" :span="12">
  1364. <el-form-item label="备注:" prop="remark" label-width="120px" class="postInfo-container-item">
  1365. <el-input v-model.trim="landTarget.remark" class="filter-item" type="textarea" />
  1366. </el-form-item>
  1367. </el-col>
  1368. </el-row>
  1369. <div
  1370. v-if="currentNode.nodeCode === 'INITIAL_PRICE' || currentNode.nodeCode === 'REVIEW_QUOTATION' || hanlderType() === '查看'">
  1371. <el-divider content-position="left">【房地产】定价信息</el-divider>
  1372. <el-row>
  1373. <el-col :xs="24" :sm="12" :lg="24" :span="6">
  1374. <el-form-item label="评估方法:" prop="eMethods"
  1375. :rules="{ required: true, message: '评估方法不能为空', trigger: 'blur' }" label-width="160px"
  1376. :class="['postInfo-container-item', 'task-class']">
  1377. <el-checkbox-group v-model="eMethods">
  1378. <el-checkbox-button label="比较法" key="比较法">比较法</el-checkbox-button>
  1379. <el-checkbox-button label="收益法" key="收益法">收益法</el-checkbox-button>
  1380. <el-checkbox-button label="成本法" key="成本法">成本法</el-checkbox-button>
  1381. <el-checkbox-button label="假设开发法" key="假设开发法">假设开发法</el-checkbox-button>
  1382. <el-checkbox-button label="基准地价修正法" key="基准地价修正法">基准地价修正法</el-checkbox-button>
  1383. </el-checkbox-group>
  1384. </el-form-item>
  1385. </el-col>
  1386. </el-row>
  1387. <el-row>
  1388. <el-col :xs="24" :sm="12" :lg="12" :span="6">
  1389. <el-form-item label="初步定价:" prop="evaluateValue" label-width="160px"
  1390. :class="['postInfo-container-item', 'task-class']">
  1391. <el-input v-model="landTarget.evaluateValue" style="width:100%"
  1392. :disabled="currentNode.nodeCode === 'REVIEW_QUOTATION'"
  1393. :readonly="currentNode.nodeCode === 'REVIEW_QUOTATION'" class="filter-item">
  1394. <template slot="append">万</template>
  1395. </el-input>
  1396. </el-form-item>
  1397. </el-col>
  1398. <el-col :xs="24" :sm="12" :lg="12" :span="6" v-if="currentNode.nodeCode === 'REVIEW_QUOTATION'">
  1399. <el-form-item label="审核定价:" prop="checkValue" label-width="180px"
  1400. :class="['postInfo-container-item', 'task-class']">
  1401. <span slot="label">审核定价
  1402. <el-tooltip class="item" effect="dark" content="默认为‘初步定价’若价格无误,可直接点击保存按钮,否则可修改。"
  1403. placement="top-start">
  1404. <i class="el-icon-question" /></el-tooltip>
  1405. </span>
  1406. <el-input v-model="landTarget.checkValue" :placeholder="landTarget.evaluateValue" style="width:100%"
  1407. class="filter-item">
  1408. <template slot="append">万</template>
  1409. </el-input>
  1410. </el-form-item>
  1411. </el-col>
  1412. </el-row>
  1413. </div>
  1414. <el-row v-if="hanlderType() != '查看'">
  1415. <el-button v-if="currentNode.nodeCode === 'SPOT_RECONNAISSANCE'" type="success"
  1416. @click="saveLandTarget(major.businessObjectType)" style="width:100%;">保存</el-button>
  1417. <el-button v-else type="success" @click="doTask(currentNode.nodeCode)" style="width:100%;">保存</el-button>
  1418. </el-row>
  1419. </el-form>
  1420. </div>
  1421. </el-dialog>
  1422. <el-dialog :visible.sync="takeNumberDialog" width="20%" title="请选择取号年份">
  1423. <el-card shadow="always">
  1424. <div>
  1425. <el-date-picker v-model="year" type="year" placeholder="请选择取号年份" :picker-options="pickerOptions" format="yyyy年"
  1426. value-format="yyyy">
  1427. </el-date-picker>
  1428. <el-button slot="append" @click="takeNumber">确认取号</el-button>
  1429. </div>
  1430. </el-card>
  1431. </el-dialog>
  1432. <el-dialog :visible.sync="warehouseDialog" width="25%" center top="35vh" custom-class="doWarehouseClass"
  1433. @closed="cleanWareHouseProductionType()">
  1434. <ScanEntry ref="scanEntry" @scanEntryFun="handleScanEntry" label="请扫描二维码或输入报告号" />
  1435. <span slot="footer" class="dialog-footer">
  1436. <el-button @click="warehouseDialog = false">取 消</el-button>
  1437. <el-button type="primary" @click="doWareHouse()">确 定</el-button>
  1438. </span>
  1439. </el-dialog>
  1440. <el-dialog :visible.sync="checkFundDialog" width="25%" center top="35vh" custom-class="doWarehouseClass">
  1441. <el-row>
  1442. <el-col :xs="24" :sm="12" :lg="3" :span="6">
  1443. <i style="font-size:30px;" class="el-icon-warning-outline"></i>
  1444. </el-col>
  1445. <el-col :xs="24" :sm="12" :lg="21" :span="6">
  1446. <span >系统检测到意见书</span><span style="color:rgb(131,201,94);font-style: italic;">【{{statementNo}}】</span><span >当前没有对应的实收款记录,</span>
  1447. <span >后期是否需要收款?
  1448. <el-tooltip class="item" effect="dark" content="收款:继续流程需归档;不收款:终止流程无需归档;" placement="bottom-start">
  1449. <span><i style="font-size:15px" class="el-icon-question"></i></span>
  1450. </el-tooltip>
  1451. </span>
  1452. </el-col>
  1453. </el-row>
  1454. <span slot="footer" class="dialog-footer">
  1455. <el-button @click="doSaveFeedBack(false)">不收款</el-button>
  1456. <el-button type="primary" @click="doSaveFeedBack(true)">收款</el-button>
  1457. </span>
  1458. </el-dialog>
  1459. <el-dialog :visible.sync="chooseSecondCheckerDialog" width="25%" center top="35vh" custom-class="doWarehouseClass"
  1460. @closed="cleanSecondCheck()">
  1461. <div>
  1462. <i class="el-icon-warning" style="color:RGB(230,162,60);font-size:22px;margin-right:10px;"></i>
  1463. <span style="position:absolute;top:58px">请确定复审人:</span>
  1464. </div>
  1465. <div style="margin-top:30px;margin-left:20px">
  1466. <el-radio-group v-model="secondCheckUserId">
  1467. <el-radio v-for="(checker, index) in secondCheckUsers" :label="checker.remark">{{ checker.name }}</el-radio>
  1468. </el-radio-group>
  1469. </div>
  1470. <span slot="footer" class="dialog-footer">
  1471. <el-button @click="chooseSecondCheckerDialog = false">取消</el-button>
  1472. <el-button type="primary" @click="commit('PASS')" :disabled="!secondCheckUserId">确定</el-button>
  1473. </span>
  1474. </el-dialog>
  1475. </div>
  1476. </template>
  1477. <script>
  1478. import Breadcrumb from '@/components/Breadcrumb'
  1479. import YDetailPageLayout from '@/components/YDetailPageLayout/index_detail'
  1480. import WorkflowBoard from '@/components/workflowBoard'
  1481. import ScanEntry from '@/components/ScanEntry'
  1482. import { isNumber, phoneNumber, postiveInteger, isIdNumber } from '@/utils/validate'
  1483. export default {
  1484. name: 'majorTodoDetail',
  1485. components: {
  1486. Breadcrumb,
  1487. YDetailPageLayout,
  1488. WorkflowBoard,
  1489. ScanEntry
  1490. },
  1491. watch: {
  1492. evaluateLandData(newValue, oldValue) {
  1493. this.totalEvaluateValue = 0;
  1494. this.totalAcreage = 0;
  1495. let totalValues = newValue.map(item => item.evaluateValue);
  1496. let totalAcreages = [];
  1497. if (this.major.businessObjectType === '土地') {
  1498. totalAcreages = this.evaluateLandData.map(item => item.useAcreage);
  1499. } else {
  1500. totalAcreages = this.evaluateLandData.map(item => item.buildAcreage);
  1501. }
  1502. for (let i in totalValues) {
  1503. if (totalValues[i] != null && typeof (totalValues[i]) != 'undefined') {
  1504. this.totalEvaluateValue += totalValues[i];
  1505. }
  1506. }
  1507. for (let j in totalAcreages) {
  1508. if (totalAcreages[j] != null && typeof (totalAcreages[j]) != 'undefined') {
  1509. this.totalAcreage += totalAcreages[j];
  1510. }
  1511. }
  1512. },
  1513. feedback: {
  1514. handler(newValue, oldVal) {
  1515. let ps = newValue.production;
  1516. if (this.currentNode.nodeCode === 'QUOTATION_FEEDBACK' || this.currentNode.nodeCode === 'STATEMENT_FEEDBACK') {
  1517. if (ps.length > 1 && this.currentNode.nodeCode != 'STATEMENT_FEEDBACK' && ps.includes("STATEMENT")) {
  1518. this.$message({
  1519. message: '一次只能选择一种产品类型',
  1520. type: 'error'
  1521. });
  1522. this.validFeed = true;
  1523. }
  1524. else if (this.currentNode.nodeCode === 'STATEMENT_FEEDBACK' && !ps.includes("STATEMENT")) {
  1525. this.feedback.production.push("STATEMENT");
  1526. this.validFeed = true;
  1527. }
  1528. else if (ps.includes("REPORT") && ps.includes("LETTER")) {
  1529. this.$message({
  1530. message: '报告和复评函只能选其一。',
  1531. type: 'error'
  1532. });
  1533. this.validFeed = true;
  1534. } else if ((ps.includes("REPORT") && ps.includes("NONE")) || (ps.includes("LETTER") && ps.includes("NONE"))) {
  1535. this.$message({
  1536. message: '产品类型选择有误',
  1537. type: 'error'
  1538. });
  1539. this.validFeed = true;
  1540. }
  1541. else {
  1542. this.validFeed = false;
  1543. }
  1544. }
  1545. },
  1546. deep: true
  1547. },
  1548. productions: {
  1549. handler(newValue, oldVal) {
  1550. for (let d in newValue) {
  1551. newValue[d].evaluatePrice = ((newValue[d].evaluateAmount) / (newValue[d].evaluateAcreage)).toFixed(0);
  1552. }
  1553. },
  1554. deep: true
  1555. }
  1556. },
  1557. computed: {
  1558. couldEdit() {
  1559. let currentNodeCode = this.$route.query.currentNodeCode;
  1560. if (currentNodeCode === 'DEPARTMENT_ALLOCATION') {
  1561. return true;
  1562. }
  1563. return false;
  1564. },
  1565. ifTakeNumber: function () {
  1566. let tk = this.currentNode.tasks.map(item => item.taskType).includes("WRITE");
  1567. let tn = this.evaluateLandData.map(item => item.reportNo).includes(null)
  1568. return (tk && tn)
  1569. },
  1570. checkLoop: function () {
  1571. const curNode = this.currentNode.nodeCode;
  1572. if (curNode === 'CHECK_STATEMENT' || curNode === 'CHECK_REPORT' || curNode === 'CHECK_LETTER') {
  1573. return "初审";
  1574. }
  1575. if (curNode === 'RECHECK_STATEMENT' || curNode === 'RECHECK_REPORT' || curNode === 'RECHECK_LETTER') {
  1576. return "复审";
  1577. }
  1578. if (curNode === 'THIRD_CHECK_STATEMENT' || curNode === 'THIRD_CHECK_REPORT' || curNode === 'THIRD_CHECK_LETTER') {
  1579. return "三审";
  1580. }
  1581. return null;
  1582. },
  1583. activeTagName: {
  1584. get() {
  1585. const orderTag = ['DEPARTMENT_ALLOCATION', 'CONTACT_DEVELOP_PLAN', 'OPENING_ORDER'];
  1586. const evaluate = ['SPOT_RECONNAISSANCE', 'INITIAL_PRICE', 'REVIEW_QUOTATION', 'FORMAL_QUOTATION', 'QUOTATION_FEEDBACK', 'STATEMENT_FEEDBACK', 'WRITE_STATEMENT', 'WRITE_REPORT', 'WRITE_LETTER'];
  1587. const check = ['CHECK_STATEMENT', 'RECHECK_STATEMENT', 'THIRD_CHECK_STATEMENT', 'CHECK_REPORT', 'RECHECK_REPORT', 'THIRD_CHECK_REPORT', 'CHECK_LETTER', 'RECHECK_LETTER', 'THIRD_CHECK_LETTER'];
  1588. const nodeCode = this.$route.query.currentNodeCode;
  1589. if (orderTag.includes(nodeCode)) {
  1590. return 'order';
  1591. }
  1592. if (evaluate.includes(nodeCode)) {
  1593. return 'evaluate'
  1594. }
  1595. // if (check.includes(nodeCode)){
  1596. // return 'quality'
  1597. // }
  1598. return 'producution'
  1599. },
  1600. set() { }
  1601. }
  1602. },
  1603. data() {
  1604. return {
  1605. rules: {
  1606. buildAcreage: [{ required: true, message: "建筑面积不能为空", trigger: 'blur' }, { validator: isNumber, trigger: 'blur' }],
  1607. landAcreage: [{ required: false, validator: isNumber, trigger: 'blur' }],
  1608. evaluateValue: [{ required: true, message: "评估价格不能为空", trigger: 'blur' }, { validator: isNumber, trigger: 'blur' }],
  1609. checkValue: [{ required: true, message: "审核价格不能为空", trigger: 'blur' }, { validator: isNumber, trigger: 'blur' }],
  1610. production: [{ required: true, message: "产品类型不能为空", trigger: 'blur' }],
  1611. printing: [{ required: true, message: "打印份数不能为空", trigger: 'blur' }],
  1612. useAcreage: [{ required: true, message: "使用权面积不能为空", trigger: 'blur' }, { validator: isNumber, trigger: 'blur' }],
  1613. residueYears: [{ required: false, validator: isNumber, trigger: 'blur' }],
  1614. plotRatio: [{ required: false, validator: isNumber, trigger: 'blur' }],
  1615. clientTel: [{ required: true, message: "委托方电话不能为空", trigger: 'blur' }, { validator: phoneNumber, trigger: 'blur' }],
  1616. evaluateAmount: [{ required: true, message: "评估总价不能为空", trigger: 'blur' }, { validator: isNumber, trigger: 'blur' }],
  1617. evaluateAcreage: [{ required: true, message: "评估面积不能为空", trigger: 'blur' }, { validator: isNumber, trigger: 'blur' }],
  1618. },
  1619. activeName: 'workflowInfo',
  1620. nodeBusinessInfo: {
  1621. currentNodePermission: {
  1622. commit: true,
  1623. reversible: true,
  1624. restartable: true,
  1625. terminable: true,
  1626. skippable: true,
  1627. },
  1628. mainBusiness: "MAJOR_BUSINESS",
  1629. doWorkflow: false,
  1630. businessSubId: null,
  1631. businessMinId: null,
  1632. businessId: null,
  1633. currentNodeInstanceId: null,
  1634. production: [],
  1635. reportNos: [],
  1636. currentNodeInstanceCode: null,
  1637. ifCheckTask: true,
  1638. ifPay: null
  1639. },
  1640. major: {
  1641. id: null,
  1642. name: null,
  1643. financial: false,
  1644. allotType: "轮单",
  1645. clientManagerId: null,
  1646. principalId: null,
  1647. departmentId: null,
  1648. businessObjectType: "土地",
  1649. specialType: null,
  1650. businessGener: null,
  1651. evaluateAim: "抵押",
  1652. entrustAgain: false,
  1653. multipleRemoval: false,
  1654. informalEvaluate: false,
  1655. clienteleType: "企业",
  1656. clienteleId: null,
  1657. clienteleContactId: null,
  1658. dispenseBenefit: false,
  1659. nonnative: false,
  1660. refinance: false,
  1661. loanLimit: null,
  1662. loanPeriod: null,
  1663. loanNature: null,
  1664. loanAim: null,
  1665. loanExpire: false,
  1666. bailor: null,
  1667. bailorAddress: null,
  1668. bailorContactName: null,
  1669. bailorContactTel: null,
  1670. owner: null,
  1671. ownerTel: null,
  1672. urgent: false,
  1673. terminalClienteleId: null,
  1674. terminalClienteleType: "个人",
  1675. terminalClienteleContactId: null,
  1676. remark: null,
  1677. membersName: null,
  1678. clientManager: null,
  1679. members: [],
  1680. printing: null,
  1681. printingRemark: null,
  1682. cmobile: null,
  1683. cdepartment: null,
  1684. cduty: null,
  1685. cclienteleName: null,
  1686. cclienteleSubName: null,
  1687. cclienteleContactName: null,
  1688. tmobile: null,
  1689. tterminalClienteleContactName: null,
  1690. tterminalClienteleName: null
  1691. },
  1692. currentNode: {
  1693. flowId: null,
  1694. pnodeId: null,
  1695. nodeId: null,
  1696. flowCode: null,
  1697. nodeName: "",
  1698. nodeCode: null,
  1699. state: "",
  1700. instanceId: null,
  1701. sequence: null,
  1702. restartable: null,
  1703. reversible: null,
  1704. skippable: null,
  1705. terminable: null,
  1706. tasks: []
  1707. },
  1708. majorId: null,
  1709. allotDepartment: [],
  1710. principals: [],
  1711. allUsers: [],
  1712. taskRecordDTO: {
  1713. recordId: null,
  1714. taskData: {}
  1715. },
  1716. evaluateLandData: [],
  1717. takeNumberItems: [],
  1718. landDialogVisible: false,
  1719. houseDialogVisible: false,
  1720. landTarget: {
  1721. id: null,
  1722. majorId: null,
  1723. targetType: null,
  1724. landType: null,
  1725. useAcreage: null,
  1726. rightToUser: null,
  1727. landCertificateNo: null,
  1728. located: null,
  1729. residueYears: null,
  1730. plotRatio: null,
  1731. landUse: null,
  1732. principalId: null,
  1733. sites: [],
  1734. evaluateDate: null,
  1735. remark: null,
  1736. evaluateValue: null,
  1737. checkValue: null,
  1738. evaluateMethods: [],
  1739. housePurpose: [],
  1740. owner: null,
  1741. ownerNo: null,
  1742. targetName: null,
  1743. buildDoneYear: null,
  1744. buildAcreage: null,
  1745. landAcreage: null,
  1746. planPurpose: null,
  1747. realPurpose: null,
  1748. siteLocated: null,
  1749. useRightType: null
  1750. },
  1751. houseToUse: [],
  1752. eMethods: [],
  1753. totalEvaluateValue: 0,
  1754. totalAcreage: 0,
  1755. feedback: {
  1756. majorId: null,
  1757. production: [],
  1758. printing: null,
  1759. printingRemark: null
  1760. },
  1761. workflowLogs: [],
  1762. takeNumberDialog: false,
  1763. year: '2024',
  1764. productions: [],
  1765. waitingUpload: [],
  1766. performance: {
  1767. productionNo: null,
  1768. productionType: null,
  1769. principal: null,
  1770. productionName: null,
  1771. info: []
  1772. },
  1773. savePerformanceBtn: null,
  1774. saveOrderBtn: null,
  1775. customerCompany: [],
  1776. subCustomerCompany: [],
  1777. customerContract: [],
  1778. tCustomerCompany: [],
  1779. tSubCustomerCompany: [],
  1780. tCustomerContract: [],
  1781. warehouseDialog: false,
  1782. scanEntryData: null,
  1783. wareHouseProductionType: null,
  1784. doWare: false,
  1785. doUpload: false,
  1786. wareHouseproductionId: null,
  1787. validFeed: false,
  1788. pickerOptions: {
  1789. disabledDate: (time) => {
  1790. var currentDate = new Date();
  1791. return time.getTime() > currentDate || time.getTime() < currentDate.setFullYear(currentDate.getFullYear() - 3)
  1792. },
  1793. },
  1794. checkFundDialog: false,
  1795. pNode: null,
  1796. chooseSecondCheckerDialog: false,
  1797. secondCheckUserId: null,
  1798. secondCheckUsers: []
  1799. }
  1800. },
  1801. created() {
  1802. this.nodeBusinessInfo.doWorkflow = this.$route.query.doWorkflow === 'true';
  1803. this.businessMinId = this.$route.query.reportNo;
  1804. this.businessSubId = this.$route.query.statementNo;
  1805. this.majorId = this.$route.query.id;
  1806. this.reportNo = this.$route.query.reportNo;
  1807. this.statementNo = this.$route.query.statementNo;
  1808. this.currentNode.nodeCode = this.$route.query.currentNodeCode;
  1809. this.nodeBusinessInfo.businessId = this.$route.query.id;
  1810. this.nodeBusinessInfo.currentNodeInstanceId = this.$route.query.currentNodeId;
  1811. this.nodeBusinessInfo.businessMinId = this.$route.query.reportNo;
  1812. this.nodeBusinessInfo.businessSubId = this.$route.query.statementNo;
  1813. this.getCurrentNodeInfo();
  1814. this.getMajorDetail();
  1815. if (this.activeTagName === 'order') {
  1816. this.getAllotDepartment();
  1817. }
  1818. if (this.activeTagName === 'evaluate') {
  1819. if (this.major.businessObjectType === '土地') {
  1820. this.getLandTargetList();
  1821. }
  1822. setTimeout(() => {
  1823. this.getProductions(this.majorId, (this.reportNo == null ? this.statementNo : this.reportNo));
  1824. },1000)
  1825. }
  1826. if (this.activeTagName === 'workflowLog') {
  1827. this.getWorkflowLogs();
  1828. }
  1829. if (this.activeTagName === 'producution') {
  1830. this.getProductions(this.majorId, (this.reportNo == null ? this.statementNo : this.reportNo));
  1831. }
  1832. if (this.activeTagName === 'quality') {
  1833. if (this.productions.length == 0) {
  1834. this.getProductions(this.majorId, (this.reportNo == null ? this.statementNo : this.reportNo));
  1835. }
  1836. this.getPerformance(this.majorId, (this.reportNo == null ? this.statementNo : this.reportNo));
  1837. }
  1838. },
  1839. methods: {
  1840. handleClick(tab) {
  1841. if (tab.name === 'order' && this.allotDepartment.length == 0) {
  1842. this.getAllotDepartment();
  1843. }
  1844. if (tab.name === 'evaluate') {
  1845. if (this.evaluateLandData.length == 0) {
  1846. this.getLandTargetList();
  1847. }
  1848. }
  1849. if (tab.name === 'workflowLog') {
  1850. if (this.workflowLogs.length == 0) {
  1851. this.getWorkflowLogs();
  1852. }
  1853. }
  1854. if (tab.name === 'producution') {
  1855. if (this.productions.length == 0) {
  1856. this.getProductions(this.majorId, (this.reportNo == null ? this.statementNo : this.reportNo));
  1857. }
  1858. }
  1859. if (tab.name === 'quality') {
  1860. if (this.productions.length == 0) {
  1861. this.getProductions(this.majorId, (this.reportNo == null ? this.statementNo : this.reportNo));
  1862. }
  1863. this.getPerformance(this.majorId, (this.reportNo == null ? this.statementNo : this.reportNo));
  1864. }
  1865. },
  1866. getMajorDetail() {
  1867. if (this.majorId) {
  1868. let majorId = this.majorId;
  1869. let reportNo = this.statementNo;
  1870. this.$api.major.detail(this.majorId).then(res => {
  1871. if (res.code === 200) {
  1872. this.major = res.data;
  1873. this.major.membersId = JSON.parse(this.major.members);
  1874. if (this.major.feedbackInfo) {
  1875. let feedbacks = JSON.parse(this.major.feedbackInfo);
  1876. if (reportNo) {
  1877. this.feedback = feedbacks.filter(function (e, index, array) {
  1878. return e.reportNo === reportNo;
  1879. })[0]
  1880. if (!this.feedback) {
  1881. this.feedback = feedbacks.filter(function (e, index, array) {
  1882. return e.majorId == majorId;
  1883. })[0];
  1884. }
  1885. } else {
  1886. this.feedback = feedbacks.filter(function (e, index, array) {
  1887. return e.majorId == majorId;
  1888. })[0];
  1889. }
  1890. this.nodeBusinessInfo.production = this.feedback.production;
  1891. this.nodeBusinessInfo.ifPay = this.feedback.isPay;
  1892. }
  1893. this.getPrincipalByAllotDepartment();
  1894. this.getAllUser();
  1895. this.$refs.board.getInstanceQueue();
  1896. }
  1897. })
  1898. }
  1899. },
  1900. handleChange() {
  1901. let isPay = this.feedback.isPay;
  1902. if (this.currentNode.nodeCode === 'STATEMENT_FEEDBACK' && isPay != undefined && !isPay) {
  1903. this.nodeBusinessInfo.currentNodePermission.terminable = true;
  1904. this.nodeBusinessInfo.currentNodePermission.commit = false;
  1905. this.$forceUpdate();
  1906. }
  1907. },
  1908. getCurrentNodeInfo() {
  1909. if (this.majorId) {
  1910. this.$api.workNodeInstance.currentNode({ "mainBusiness": "MAJOR_BUSINESS", "businessId": this.majorId, "businessSubId": this.businessSubId, "businessMinId": this.businessMinId }).then(res => {
  1911. if (res.code === 200) {
  1912. if (res.data) {
  1913. this.currentNode = res.data;
  1914. this.nodeBusinessInfo.currentInstanceNodeId = res.data.instanceId;
  1915. this.nodeBusinessInfo.currentNodeInstanceCode = res.data.nodeCode;
  1916. this.nodeBusinessInfo.currentNodePermission.restartable = res.data.restartable;
  1917. this.nodeBusinessInfo.currentNodePermission.reversible = res.data.reversible;
  1918. this.nodeBusinessInfo.currentNodePermission.skippable = res.data.skippable;
  1919. this.nodeBusinessInfo.currentNodePermission.terminable = res.data.terminable;
  1920. }
  1921. }
  1922. })
  1923. }
  1924. },
  1925. getAllotDepartment() {
  1926. this.$api.department.allot().then(res => {
  1927. if (res.code === 200) {
  1928. this.allotDepartment = res.data;
  1929. }
  1930. })
  1931. },
  1932. getPrincipalByAllotDepartment() {
  1933. let departmentId = this.major.departmentId;
  1934. if (departmentId) {
  1935. this.$api.user.usersByDepartmentId(departmentId).then(res => {
  1936. if (res.code === 200) {
  1937. this.principals = res.data;
  1938. }
  1939. })
  1940. }
  1941. },
  1942. getAllUser() {
  1943. this.$api.user.simpleAll().then(res => {
  1944. if (res.code === 200) {
  1945. this.allUsers = this.principals;
  1946. for (let i in res.data) {
  1947. this.allUsers.push(res.data[i]);
  1948. }
  1949. }
  1950. })
  1951. },
  1952. handleCreate() {
  1953. this.$refs.majorForm.validate(valid => {
  1954. if (valid) {
  1955. if (this.major.id) {
  1956. this.taskRecordDTO.recordId = this.currentNode.tasks[0].recordId;
  1957. this.taskRecordDTO.taskData = this.major;
  1958. this.$api.major.allocation(this.taskRecordDTO).then(res => {
  1959. if (res.code === 200 && res.data) {
  1960. this.$notify({
  1961. title: '成功',
  1962. message: '保存成功,请提交节点继续流程。',
  1963. type: 'success',
  1964. duration: 1000,
  1965. offset: 100
  1966. });
  1967. }
  1968. })
  1969. }
  1970. }
  1971. })
  1972. },
  1973. handleSelectionChange(val) {
  1974. let pickeds = [];
  1975. for (let i in val) {
  1976. let picked = new Object();
  1977. picked.id = val[i].id;
  1978. picked.amount = val[i].checkValue;
  1979. picked.name = val[i].statementNo;
  1980. if (this.major.businessObjectType === '土地') {
  1981. picked.acreage = val[i].useAcreage;
  1982. } else {
  1983. picked.acreage = val[i].buildAcreage;
  1984. }
  1985. pickeds.push(picked);
  1986. }
  1987. this.takeNumberItems = pickeds;
  1988. },
  1989. getLandTargetList() {
  1990. if (this.majorId) {
  1991. const obj = new Object();
  1992. obj.majorId = this.majorId;
  1993. obj.statementNo = this.statementNo;
  1994. if (this.feedback.production.includes("REPORT")) {
  1995. obj.reportNo = this.reportNo;
  1996. } else {
  1997. obj.letterNo = this.reportNo;
  1998. }
  1999. this.$api.majorTarget.list(obj).then(res => {
  2000. if (res.code === 200) {
  2001. this.evaluateLandData = res.data;
  2002. let totalAcreages = [];
  2003. let totalValues = this.evaluateLandData.map(item => item.evaluateValue);
  2004. if (this.major.businessObjectType === '土地') {
  2005. totalAcreages = this.evaluateLandData.map(item => item.useAcreage);
  2006. } else {
  2007. totalAcreages = this.evaluateLandData.map(item => item.buildAcreage);
  2008. }
  2009. for (let i in totalValues) {
  2010. if (totalValues[i] != null && typeof (totalValues[i]) != 'undefined') {
  2011. this.totalEvaluateValue += totalValues[i];
  2012. }
  2013. }
  2014. for (let j in totalAcreages) {
  2015. if (totalAcreages[j] != null && typeof (totalAcreages[j]) != 'undefined') {
  2016. this.totalAcreage += totalAcreages[j];
  2017. }
  2018. }
  2019. }
  2020. })
  2021. }
  2022. },
  2023. openLandDialog(targetType) {
  2024. if (targetType === '土地') {
  2025. this.landDialogVisible = true;
  2026. } else {
  2027. this.houseDialogVisible = true;
  2028. }
  2029. this.landTarget.majorId = this.major.id;
  2030. this.landTarget.principalId = this.major.principalId;
  2031. this.landTarget.sites = this.major.membersId;
  2032. this.landTarget.owner = this.major.owner;
  2033. },
  2034. saveLandTarget(targetType) {
  2035. let isOk = true;
  2036. if (targetType === '土地') {
  2037. this.$refs.landFrom.validate(valid => {
  2038. if (!valid) {
  2039. isOk = false;
  2040. }
  2041. this.landTarget.targetType = '土地';
  2042. })
  2043. }
  2044. if (targetType === '房地产') {
  2045. this.$refs.houseFrom.validate(valid => {
  2046. if (!valid) {
  2047. isOk = false;
  2048. }
  2049. this.landTarget.targetType = '房地产';
  2050. })
  2051. }
  2052. if (isOk) {
  2053. if (this.landTarget.majorId) {
  2054. if (!this.landTarget.id) {
  2055. this.landTarget.housePurpose = JSON.stringify(this.houseToUse);
  2056. this.landTarget.evaluateMethods = JSON.stringify(this.eMethods);
  2057. this.taskRecordDTO.recordId = this.currentNode.tasks[0].recordId;
  2058. this.taskRecordDTO.taskData = this.landTarget;
  2059. this.$api.majorTarget.add(this.taskRecordDTO).then(res => {
  2060. if (res.code === 200 && res.data) {
  2061. this.$notify({
  2062. title: '成功',
  2063. message: '若还有估价对象请继续添加,没有则请提交节点继续流程。',
  2064. type: 'success',
  2065. duration: 2000,
  2066. offset: 100
  2067. });
  2068. this.getLandTargetList();
  2069. this.landDialogVisible = false;
  2070. this.houseDialogVisible = false;
  2071. this.taskRecordDTO = {};
  2072. }
  2073. else {
  2074. this.$notify({
  2075. title: '失败',
  2076. message: '估价对象添加失败。',
  2077. type: 'error',
  2078. duration: 1000,
  2079. offset: 100
  2080. });
  2081. }
  2082. })
  2083. }
  2084. else {
  2085. this.editLandTarget();
  2086. }
  2087. } else {
  2088. this.$notify({
  2089. title: '提示',
  2090. message: '项目id不存在,请联系技术管理员。',
  2091. type: 'info',
  2092. duration: 1000,
  2093. offset: 100
  2094. });
  2095. }
  2096. }
  2097. },
  2098. landTargetEdit(row) {
  2099. if (row.targetType === '土地') {
  2100. this.landDialogVisible = true;
  2101. } else {
  2102. this.houseDialogVisible = true;
  2103. }
  2104. this.landTarget = row;
  2105. this.landTarget.sites = JSON.parse(this.landTarget.siteIds);
  2106. this.eMethods = [];
  2107. if (JSON.parse(this.landTarget.evaluateMethods)) {
  2108. this.eMethods = JSON.parse(this.landTarget.evaluateMethods);
  2109. }
  2110. if (this.landTarget.housePurpose) {
  2111. this.houseToUse = JSON.parse(this.landTarget.housePurpose);
  2112. }
  2113. },
  2114. landTargetRemove(id) {
  2115. this.taskRecordDTO.recordId = this.currentNode.tasks[0].recordId;
  2116. this.taskRecordDTO.taskData = id;
  2117. if (id) {
  2118. this.$confirm('确认删除当前估价对象吗', '警告', {
  2119. confirmButtonText: '确认',
  2120. cancelButtonText: '取消',
  2121. type: 'warning',
  2122. }).then(async () =>
  2123. this.$api.majorTarget.delete(this.taskRecordDTO)
  2124. .then(res => {
  2125. if (res.code === 200 && res.data) {
  2126. this.$notify({
  2127. title: '提示',
  2128. message: '估价对象删除成功',
  2129. type: 'success',
  2130. duration: 1000,
  2131. offset: 100
  2132. });
  2133. this.getLandTargetList();
  2134. } else {
  2135. this.$notify({
  2136. title: '失败',
  2137. message: '估价对象删除失败。',
  2138. type: 'error',
  2139. duration: 1000,
  2140. offset: 100
  2141. });
  2142. }
  2143. })
  2144. )
  2145. }
  2146. },
  2147. doTask(currentNodeCode) {
  2148. if (currentNodeCode === 'INITIAL_PRICE') {
  2149. let values = this.evaluateLandData.map(item => item.evaluateValue)
  2150. if (this.eMethods.length == 0) {
  2151. this.$notify({
  2152. title: '失败',
  2153. message: '评估方法不能为空',
  2154. type: 'info',
  2155. duration: 1000,
  2156. offset: 100
  2157. });
  2158. return;
  2159. }
  2160. if (this.major.businessObjectType === '房地产' && this.houseToUse.length == 0) {
  2161. this.$notify({
  2162. title: '失败',
  2163. message: '房屋用途不能为空',
  2164. type: 'info',
  2165. duration: 1000,
  2166. offset: 100
  2167. });
  2168. return;
  2169. }
  2170. this.landTarget.evaluateMethods = JSON.stringify(this.eMethods);
  2171. this.landTarget.housePurpose = JSON.stringify(this.houseToUse);
  2172. if (values.includes(null)) {
  2173. this.editLandTarget();
  2174. return;
  2175. } else {
  2176. this.doTaskLandCommon();
  2177. return;
  2178. }
  2179. }
  2180. if (currentNodeCode === 'REVIEW_QUOTATION') {
  2181. let checkeds = this.evaluateLandData.map(item => item.checked);
  2182. if (this.eMethods.length == 0) {
  2183. this.$notify({
  2184. title: '失败',
  2185. message: '评估方法不能为空',
  2186. type: 'info',
  2187. duration: 1000,
  2188. offset: 100
  2189. });
  2190. return;
  2191. }
  2192. this.landTarget.evaluateMethods = JSON.stringify(this.eMethods);
  2193. if (checkeds.includes(null)) {
  2194. this.editLandTarget();
  2195. return;
  2196. } else {
  2197. this.doTaskLandCommon();
  2198. return;
  2199. }
  2200. }
  2201. },
  2202. editLandTarget() {
  2203. if (this.currentNode.nodeCode === 'REVIEW_QUOTATION' && !this.landTarget.checkValue) {
  2204. this.landTarget.checkValue = this.landTarget.evaluateValue;
  2205. }
  2206. this.taskRecordDTO.recordId = this.currentNode.tasks[0].recordId;
  2207. this.taskRecordDTO.taskData = this.landTarget;
  2208. this.$api.majorTarget.edit(this.taskRecordDTO).then(res => {
  2209. if (res.code === 200 && res.data) {
  2210. this.$notify({
  2211. title: '成功',
  2212. message: '估价对象修改编辑成功。',
  2213. type: 'success',
  2214. duration: 1000,
  2215. offset: 100
  2216. });
  2217. this.getLandTargetList();
  2218. this.landDialogVisible = false;
  2219. this.houseDialogVisible = false;
  2220. this.taskRecordDTO = {};
  2221. }
  2222. else {
  2223. this.$notify({
  2224. title: '失败',
  2225. message: '估价对象编辑失败。',
  2226. type: 'error',
  2227. duration: 1000,
  2228. offset: 100
  2229. });
  2230. }
  2231. })
  2232. },
  2233. hanlderType() {
  2234. if (this.currentNode) {
  2235. if (this.currentNode.nodeCode === 'SPOT_RECONNAISSANCE') {
  2236. return "编辑";
  2237. }
  2238. if (this.currentNode.nodeCode === 'INITIAL_PRICE') {
  2239. return "定价";
  2240. }
  2241. if (this.currentNode.nodeCode === 'REVIEW_QUOTATION') {
  2242. return "审核定价";
  2243. }
  2244. return "查看";
  2245. }
  2246. },
  2247. doTaskLandCommon() {
  2248. this.taskRecordDTO.recordId = this.currentNode.tasks[0].recordId;
  2249. this.taskRecordDTO.taskData = this.landTarget;
  2250. this.$api.majorTarget.doTask(this.taskRecordDTO).then(res => {
  2251. if (res.code === 200 && res.data) {
  2252. this.$notify({
  2253. title: '成功',
  2254. message: '估价对象操作成功,请提交节点继续流程。',
  2255. type: 'success',
  2256. duration: 2000,
  2257. offset: 100
  2258. });
  2259. this.getLandTargetList();
  2260. this.landDialogVisible = false;
  2261. this.houseDialogVisible = false;
  2262. this.taskRecordDTO = {};
  2263. }
  2264. else {
  2265. this.$notify({
  2266. title: '失败',
  2267. message: '估价对象操作失败。',
  2268. type: 'error',
  2269. duration: 1000,
  2270. offset: 100
  2271. });
  2272. }
  2273. })
  2274. },
  2275. saveFeedback() {
  2276. let majorId = this.major.id;
  2277. if (majorId) {
  2278. this.feedback.majorId = majorId;
  2279. this.$refs.feedbackFrom.validate(valid => {
  2280. if (valid) {
  2281. //如果已取号,并且在价值意见书送达反馈节点。 保存 的意见反馈产品信息,需另存
  2282. if (this.currentNode.nodeCode === 'STATEMENT_FEEDBACK') {
  2283. this.feedback.reportNo = this.statementNo;
  2284. if (this.feedback.production.length === 1) {
  2285. this.$message({
  2286. message: '警告,请更新客户反馈信息(后续需出具的产品类型。若不出具,请选择“不再出具”)',
  2287. type: 'error'
  2288. });
  2289. return;
  2290. }
  2291. //如果选择不再出具,则检查该产品是否认领实收款
  2292. if (this.feedback.production.includes("NONE")) {
  2293. const pro = new Object();
  2294. pro.businessId = majorId;
  2295. pro.productionNo = this.feedback.reportNo;
  2296. pro.businessType = "MAJOR_BUSINESS";
  2297. pro.productionType = "STATEMENT"
  2298. this.$api.productionFund.checkFund(pro).then(res => {
  2299. if (res.code === 200 && res.data.realAmount === 0) {
  2300. this.checkFundDialog = true;
  2301. } else {
  2302. this.doSaveFeedBack(true);
  2303. }
  2304. })
  2305. } else {
  2306. this.doSaveFeedBack();
  2307. }
  2308. } else {
  2309. this.doSaveFeedBack();
  2310. }
  2311. }
  2312. })
  2313. }
  2314. },
  2315. doSaveFeedBack(isPay) {
  2316. this.feedback.isPay = isPay;
  2317. if (isPay === undefined) {
  2318. this.nodeBusinessInfo.currentNodePermission.terminable = false;
  2319. this.nodeBusinessInfo.currentNodePermission.commit = true;
  2320. }
  2321. if (isPay != undefined && !isPay) {
  2322. this.nodeBusinessInfo.currentNodePermission.terminable = true;
  2323. this.nodeBusinessInfo.currentNodePermission.commit = false;
  2324. }
  2325. if (isPay != undefined && isPay) {
  2326. this.nodeBusinessInfo.currentNodePermission.terminable = false;
  2327. this.nodeBusinessInfo.currentNodePermission.commit = true;
  2328. }
  2329. this.taskRecordDTO.recordId = this.currentNode.tasks[0].recordId;
  2330. this.taskRecordDTO.taskData = this.feedback;
  2331. this.$api.major.feedback(this.taskRecordDTO).then(res => {
  2332. if (res.code === 200 && res.data) {
  2333. this.$notify({
  2334. title: '成功',
  2335. message: '保存客户反馈信息成功,请提交节点继续流程',
  2336. type: 'success',
  2337. duration: 1000,
  2338. offset: 100
  2339. });
  2340. this.checkFundDialog = false;
  2341. this.nodeBusinessInfo.production = this.feedback.production;
  2342. this.nodeBusinessInfo.ifPay = this.feedback.isPay;
  2343. this.$refs.board.getInstanceQueue();
  2344. this.taskRecordDTO = {};
  2345. } else {
  2346. this.$notify({
  2347. title: '失败',
  2348. message: '保存客户反馈信息失败,请联系系统管理员',
  2349. type: 'error',
  2350. duration: 1000,
  2351. offset: 100
  2352. });
  2353. }
  2354. })
  2355. },
  2356. getWorkflowLogs() {
  2357. let param = {
  2358. businessId: this.majorId,
  2359. businessSubId: this.statementNo,
  2360. businessMinId: this.reportNo,
  2361. businessType: 'MAJOR_BUSINESS'
  2362. }
  2363. this.$api.workflowLog.list(param).then(res => {
  2364. if (res.code === 200) {
  2365. this.workflowLogs = res.data;
  2366. }
  2367. })
  2368. },
  2369. takeNumber() {
  2370. if (!this.year) {
  2371. this.$notify({
  2372. title: '警告',
  2373. message: '取号年份未选择,请选择再取号。',
  2374. type: 'warning',
  2375. duration: 1000,
  2376. offset: 100
  2377. });
  2378. return;
  2379. }
  2380. let takeNumberDTO = {
  2381. businessId: this.majorId,
  2382. businessType: "MAJOR_BUSINESS",
  2383. takeType: this.major.businessObjectType === '土地' ? 'LAND_NUMBER' : 'REALTY_NUMBER',
  2384. targets: this.takeNumberItems,
  2385. year: this.year,
  2386. productionType: "REPORT"
  2387. }
  2388. this.$api.majorTarget.takeNumber(takeNumberDTO).then(res => {
  2389. if (res.code === 200 && res.data != null) {
  2390. this.$notify({
  2391. title: '成功',
  2392. message: '取号成功。',
  2393. type: 'success',
  2394. duration: 1000,
  2395. offset: 100
  2396. });
  2397. this.getLandTargetList();
  2398. this.createProduction(res.data);
  2399. this.taskRecordDTO = {};
  2400. this.takeNumberDialog = false;
  2401. } else {
  2402. this.$notify({
  2403. title: '失败',
  2404. message: '取号失败。',
  2405. type: 'error',
  2406. duration: 1000,
  2407. offset: 100
  2408. });
  2409. }
  2410. })
  2411. },
  2412. createProduction(productionNo) {
  2413. let productionType = 'STATEMENT';
  2414. if (this.currentNode.nodeCode === 'WRITE_REPORT') {
  2415. productionType = 'REPORT';
  2416. }
  2417. if (this.currentNode.nodeCode === 'WRITE_LETTER') {
  2418. productionType = 'LETTER';
  2419. }
  2420. if (productionNo) {
  2421. let totalAcreage = 0;
  2422. let totalAmount = 0;
  2423. this.takeNumberItems.map(item => item.acreage).map(function (e) {
  2424. totalAcreage += e;
  2425. });
  2426. this.takeNumberItems.map(item => item.amount).map(function (e) {
  2427. totalAmount += e;
  2428. })
  2429. let production = new Object();
  2430. production.majorId = this.majorId;
  2431. production.reportNo = productionNo;
  2432. production.production = productionType;
  2433. production.evaluateAcreage = totalAcreage;
  2434. production.evaluateAmount = totalAmount * 10000;
  2435. production.clientName = this.major.bailor;
  2436. production.clientTel = this.major.bailorContactTel;
  2437. production.clientAddress = this.major.bailorAddress;
  2438. production.owner = this.major.owner;
  2439. production.name = this.major.name;
  2440. production.statementNo = this.takeNumberItems[0].name;
  2441. if (totalAcreage != 0) {
  2442. production.evaluatePrice = (totalAmount * 10000 / totalAcreage).toFixed(0);
  2443. } else {
  2444. production.evaluatePrice = 0;
  2445. }
  2446. this.$api.majorProduction.add(production).then(res => {
  2447. if (res.code === 200 && res.data) {
  2448. this.$notify({
  2449. title: '成功',
  2450. message: '产品创建成功,请完善产品信息。',
  2451. type: 'success',
  2452. duration: 2000,
  2453. offset: 100
  2454. });
  2455. this.takeNumberItems = []
  2456. this.getProductions(this.majorId, null);
  2457. this.nodeBusinessInfo.reportNos.push(productionNo);
  2458. } else {
  2459. this.$notify({
  2460. title: '失败',
  2461. message: '产品创建失败,请联系系统管理员。',
  2462. type: 'error',
  2463. duration: 2000,
  2464. offset: 100
  2465. });
  2466. }
  2467. })
  2468. } else {
  2469. console.log("reportNo is null")
  2470. }
  2471. },
  2472. getProductions(majorId, reportNo) {
  2473. let productionType = 'STATEMENT';
  2474. let currentNodeCode = this.currentNode.nodeCode;
  2475. if (currentNodeCode.includes("REPORT")) {
  2476. productionType = 'REPORT';
  2477. }
  2478. if (currentNodeCode.includes("LETTER")) {
  2479. productionType = 'LETTER';
  2480. }
  2481. if (currentNodeCode === 'CHECK_ARCHIVING' || currentNodeCode === 'RECHECK_ARCHIVING') {
  2482. let productionTypes = this.feedback.production.filter(function (e) {
  2483. return e != 'STATEMENT';
  2484. })
  2485. productionType = productionTypes[0];
  2486. }
  2487. let afterProduction = null;
  2488. if (this.feedback.production.length > 1 && (currentNodeCode === 'WRITE_REPORT' || currentNodeCode === 'WRITE_LETTER')) {
  2489. afterProduction = this.feedback.production[(this.feedback.production.length) - 1]
  2490. }
  2491. if (majorId) {
  2492. let pro = {
  2493. majorId: majorId,
  2494. reportNo: reportNo,
  2495. sequence: this.currentNode.sequence,
  2496. production: productionType,
  2497. afterProduction: afterProduction
  2498. }
  2499. this.$api.majorProduction.list(pro).then(res => {
  2500. if (res.code === 200) {
  2501. this.productions = res.data;
  2502. if (this.productions.length > 0){
  2503. this.nodeBusinessInfo.doSecondCheck = this.productions[0].secondCheck;
  2504. this.nodeBusinessInfo.doThirdCheck = this.productions[0].thirdCheck;
  2505. }
  2506. //回显上传的文档
  2507. for (let p in this.productions) {
  2508. let d = JSON.parse(this.productions[p].filePath);
  2509. let c = JSON.parse(this.productions[p].checkedFilePath);
  2510. for (let q in d) {
  2511. this.productions[p].filePathList.push({ name: d[q].name, url: d[q].url, index: p });
  2512. }
  2513. for (let cc in c) {
  2514. this.productions[p].filePathList1.push({ name: c[cc].name, url: c[cc].url, index: p });
  2515. }
  2516. }
  2517. //显示出入库操作按钮
  2518. let wareHoseNodes = ['STATEMENT_IN', 'STATEMENT_OUT', 'REPORT_IN', 'REPORT_OUT', 'LETTER_IN', 'LETTER_OUT']
  2519. if (wareHoseNodes.includes(currentNodeCode)) {
  2520. this.doWare = true;
  2521. }
  2522. //显示上传附件按钮
  2523. let writeNodes = ['WRITE_STATEMENT', 'WRITE_REPORT', 'WRITE_LETTER', 'CHECK_STATEMENT', 'CHECK_REPORT', 'CHECK_LETTER'
  2524. , 'RECHECK_STATEMENT', 'THIRD_CHECK_STATEMENT', 'RECHECK_REPORT', 'THIRD_CHECK_REPORT', 'RECHECK_LETTER', 'THIRD_CHECK_LETTER']
  2525. if (writeNodes.includes(currentNodeCode)) {
  2526. this.doUpload = true;
  2527. }
  2528. //默认展开第一行
  2529. // setTimeout(() => {
  2530. // this.defaultExpandOpen();
  2531. // }, 500);
  2532. }
  2533. })
  2534. }
  2535. },
  2536. saveProduction(production) {
  2537. //判断当前节点,确定调用后端接口
  2538. let nodeCode = this.currentNode.nodeCode;
  2539. switch (nodeCode) {
  2540. case 'WRITE_STATEMENT':
  2541. case 'WRITE_REPORT':
  2542. case 'WRITE_LETTER':
  2543. case 'CHECK_STATEMENT':
  2544. case 'CHECK_REPORT':
  2545. case 'CHECK_LETTER':
  2546. case 'RECHECK_STATEMENT':
  2547. case 'RECHECK_REPORT':
  2548. case 'RECHECK_LETTER':
  2549. case 'THIRD_CHECK_STATEMENT':
  2550. case 'THIRD_CHECK_REPORT':
  2551. case 'THIRD_CHECK_LETTER':
  2552. this.caseEditProduction(production);
  2553. break;
  2554. case 'CHECK_ARCHIVING':
  2555. this.caseCheckArchiving(production);
  2556. break;
  2557. case 'RECHECK_ARCHIVING':
  2558. this.caseRecheckArchiving(production);
  2559. break;
  2560. }
  2561. },
  2562. aliasProductionType(code) {
  2563. let name = '价值意见书';
  2564. if (code === 'REPORT') {
  2565. name = '报告';
  2566. }
  2567. if (code === 'LETTER') {
  2568. name = '复评函';
  2569. }
  2570. return name;
  2571. },
  2572. changeres(res, file, fileList) {
  2573. let index = fileList[0].index;
  2574. if (typeof (index) === 'undefined') {
  2575. index = (this.productions.length) - 1;
  2576. }
  2577. if (res.code === 200) {
  2578. this.productions[index].filePathList = [];
  2579. for (let i in fileList) {
  2580. if (fileList[i].response) {
  2581. this.productions[index].filePathList.push({ name: fileList[i].name, url: fileList[i].response.data.url });
  2582. } else {
  2583. this.productions[index].filePathList.push({ name: fileList[i].name, url: fileList[i].url });
  2584. }
  2585. }
  2586. this.productions[index].filePath = JSON.stringify(this.productions[index].filePathList);
  2587. } else {
  2588. this.$notify({
  2589. title: '错误',
  2590. message: '产品上传失败',
  2591. type: 'error',
  2592. duration: 2000,
  2593. offset: 100
  2594. });
  2595. fileList.pop();
  2596. }
  2597. },
  2598. changeres1(res, file, fileList) {
  2599. let index = fileList[0].index;
  2600. if (typeof (index) === 'undefined') {
  2601. index = (this.productions.length) - 1;
  2602. }
  2603. if (res.code === 200) {
  2604. this.productions[index].filePathList1 = [];
  2605. for (let i in fileList) {
  2606. if (fileList[i].response) {
  2607. this.productions[index].filePathList1.push({ name: fileList[i].name, url: fileList[i].response.data.url });
  2608. } else {
  2609. this.productions[index].filePathList1.push({ name: fileList[i].name, url: fileList[i].url });
  2610. }
  2611. }
  2612. this.productions[index].checkedFilePath = JSON.stringify(this.productions[index].filePathList1);
  2613. } else {
  2614. this.$notify({
  2615. title: '错误',
  2616. message: '产品上传失败',
  2617. type: 'error',
  2618. duration: 2000,
  2619. offset: 100
  2620. });
  2621. fileList.pop();
  2622. }
  2623. },
  2624. handleExceed(files, fileList) {
  2625. this.$message.warning(`当前限制选择 3个文件,本次选择了 ${files.length} 个文件`);
  2626. },
  2627. handleAttachmentPreview(file) {
  2628. window.open(file.url)
  2629. },
  2630. beforeRemove(file, fileList) {
  2631. let index = fileList[0].index;
  2632. if (typeof (index) === 'undefined') {
  2633. index = (this.productions.length) - 1;
  2634. }
  2635. let paths = JSON.parse(this.productions[index].filePath);
  2636. let xPaths = paths.filter(item => item.url !== file.url);
  2637. this.productions[index].filePath = JSON.stringify(xPaths);
  2638. },
  2639. beforeRemove1(file, fileList) {
  2640. let index = fileList[0].index;
  2641. if (typeof (index) === 'undefined') {
  2642. index = (this.productions.length) - 1;
  2643. }
  2644. let paths = JSON.parse(this.productions[index].checkedFilePath);
  2645. let xPaths = paths.filter(item => item.url !== file.url);
  2646. this.productions[index].checkedFilePath = JSON.stringify(xPaths);
  2647. },
  2648. caseEditProduction(production) {
  2649. const prodFrom = eval('this.$refs.productionFrom'+production.id);
  2650. if (prodFrom) {
  2651. prodFrom.validate(valid => {
  2652. if (valid) {
  2653. if (production.id) {
  2654. this.taskRecordDTO.recordId = this.currentNode.tasks[0].recordId;
  2655. this.taskRecordDTO.taskData = production;
  2656. this.$api.majorProduction.edit(this.taskRecordDTO).then(res => {
  2657. if (res.code === 200 && res.data) {
  2658. this.$notify({
  2659. title: '成功',
  2660. message: '产品信息更新成功',
  2661. type: 'success',
  2662. duration: 1000,
  2663. offset: 100
  2664. });
  2665. this.taskRecordDTO = {};
  2666. this.getProductions(this.majorId, (this.reportNo == null ? this.statementNo : this.reportNo));
  2667. } else {
  2668. this.$notify({
  2669. title: '失败',
  2670. message: '产品信息完善失败',
  2671. type: 'error',
  2672. duration: 1000,
  2673. offset: 100
  2674. });
  2675. }
  2676. })
  2677. }
  2678. }
  2679. })
  2680. }
  2681. },
  2682. caseFirstCheck(production) {
  2683. if (production.id) {
  2684. this.taskRecordDTO.recordId = this.currentNode.tasks[0].recordId;
  2685. let checker = new Object();
  2686. checker.id = production.id;
  2687. checker.result = production.firstCheck;
  2688. this.taskRecordDTO.taskData = checker;
  2689. this.$api.majorProduction.firstCheck(this.taskRecordDTO).then(res => {
  2690. if (res.code === 200 && res.data) {
  2691. this.$notify({
  2692. title: '成功',
  2693. message: '初审状态已更新,请点击提交按钮继续流程。',
  2694. type: 'success',
  2695. duration: 2000,
  2696. offset: 100
  2697. });
  2698. }
  2699. })
  2700. }
  2701. },
  2702. caseSecondCheck(production) {
  2703. if (production.id) {
  2704. this.taskRecordDTO.recordId = this.currentNode.tasks[0].recordId;
  2705. let checker = new Object();
  2706. checker.id = production.id;
  2707. checker.result = production.secondCheck;
  2708. this.taskRecordDTO.taskData = checker;
  2709. this.$api.majorProduction.secondCheck(this.taskRecordDTO).then(res => {
  2710. if (res.code === 200 && res.data) {
  2711. this.$notify({
  2712. title: '成功',
  2713. message: '复审状态已更新,请点击提交按钮继续流程。',
  2714. type: 'success',
  2715. duration: 2000,
  2716. offset: 100
  2717. });
  2718. }
  2719. })
  2720. }
  2721. },
  2722. caseThirdCheck(production) {
  2723. if (production.id) {
  2724. this.taskRecordDTO.recordId = this.currentNode.tasks[0].recordId;
  2725. let checker = new Object();
  2726. checker.id = production.id;
  2727. checker.result = production.thirdCheck;
  2728. this.taskRecordDTO.taskData = checker;
  2729. this.$api.majorProduction.thirdCheck(this.taskRecordDTO).then(res => {
  2730. if (res.code === 200 && res.data) {
  2731. this.$notify({
  2732. title: '成功',
  2733. message: '三审状态已更新,请点击提交按钮继续流程。',
  2734. type: 'success',
  2735. duration: 2000,
  2736. offset: 100
  2737. });
  2738. }
  2739. })
  2740. }
  2741. },
  2742. caseCheckArchiving(production) {
  2743. if (production.id) {
  2744. this.taskRecordDTO.recordId = this.currentNode.tasks[0].recordId;
  2745. let checker = new Object();
  2746. checker.id = production.id;
  2747. checker.check = production.saveFileCheck;
  2748. this.taskRecordDTO.taskData = checker;
  2749. this.$api.majorProduction.saveFileCheck(this.taskRecordDTO).then(res => {
  2750. if (res.code === 200 && res.data) {
  2751. this.$notify({
  2752. title: '成功',
  2753. message: '归档状态已更新,请点击提交按钮继续流程。',
  2754. type: 'success',
  2755. duration: 2000,
  2756. offset: 100
  2757. });
  2758. }
  2759. })
  2760. }
  2761. },
  2762. caseRecheckArchiving(production) {
  2763. if (production.id) {
  2764. this.taskRecordDTO.recordId = this.currentNode.tasks[0].recordId;
  2765. let checker = new Object();
  2766. checker.id = production.id;
  2767. checker.check = production.saveFileSecondCheck;
  2768. this.taskRecordDTO.taskData = checker;
  2769. this.$api.majorProduction.saveFileSecondCheck(this.taskRecordDTO).then(res => {
  2770. if (res.code === 200 && res.data) {
  2771. this.$notify({
  2772. title: '成功',
  2773. message: '复审部归档状态已更新,请点击提交按钮继续流程。',
  2774. type: 'success',
  2775. duration: 2000,
  2776. offset: 100
  2777. });
  2778. }
  2779. })
  2780. }
  2781. },
  2782. selectioProductionChange(val) {
  2783. let selected = null;
  2784. if (val.length > 1) {
  2785. this.$refs.pTable.clearSelection();
  2786. this.$refs.pTable.toggleRowSelection(val[val.length - 1])
  2787. selected = val[val.length - 1];
  2788. } else {
  2789. if (typeof val[0] != 'undefined') {
  2790. selected = val[0];
  2791. }
  2792. }
  2793. if (selected) {
  2794. let po = this.productions.filter(function (i) {
  2795. return i.id != selected.id;
  2796. }).filter(function (e) {
  2797. return e.nextInstanceNodeId == null
  2798. })
  2799. if (po.length != 0) {
  2800. this.nodeBusinessInfo.ifCheckTask = false;
  2801. } else {
  2802. this.nodeBusinessInfo.ifCheckTask = true;
  2803. }
  2804. if (this.currentNode.nodeCode === 'WRITE_STATEMENT') {
  2805. this.nodeBusinessInfo.businessSubId = selected.reportNo;
  2806. }
  2807. if (this.currentNode.nodeCode === 'WRITE_REPORT' || this.currentNode.nodeCode === 'WRITE_LETTER') {
  2808. this.nodeBusinessInfo.businessSubId = this.businessSubId;
  2809. this.nodeBusinessInfo.businessMinId = selected.reportNo;
  2810. }
  2811. this.nodeBusinessInfo.reportNos = [selected.reportNo]
  2812. } else {
  2813. this.nodeBusinessInfo.ifCheckTask = true;
  2814. this.nodeBusinessInfo.businessSubId = null;
  2815. this.nodeBusinessInfo.businessMinId = null;
  2816. this.nodeBusinessInfo.reportNos = [];
  2817. }
  2818. },
  2819. workflowCommitVerify(val, callback) {
  2820. let commit = val.commit;
  2821. let verify = new Object();
  2822. verify.state = true;
  2823. verify.nextHandlerId = this.secondCheckUserId;
  2824. let nodeCode = this.currentNode.nodeCode;
  2825. if (commit.state === 'PASS') {
  2826. this.getProductions(this.majorId, (this.reportNo == null ? this.statementNo : this.reportNo));
  2827. switch (nodeCode) {
  2828. case 'WRITE_STATEMENT':
  2829. let notTakeNumberTargets = this.evaluateLandData.filter(function (e) {
  2830. return e.statementNo == null;
  2831. })
  2832. if (notTakeNumberTargets.length > 0) {
  2833. this.$notify({
  2834. title: '提示',
  2835. message: '还有价值意见书号未取的估价对象,请先完成取号操作。',
  2836. type: 'error',
  2837. duration: 3000,
  2838. offset: 100
  2839. });
  2840. verify.state = false;
  2841. callback(verify);
  2842. return;
  2843. }
  2844. if (typeof (commit.businessSubId) == 'undefined' || commit.businessSubId == null || commit.ifCheckTask == null) {
  2845. this.$notify({
  2846. title: '提示',
  2847. message: '请选择一个产品后,再进行流程提交。',
  2848. type: 'error',
  2849. duration: 3000,
  2850. offset: 100
  2851. });
  2852. verify.state = false;
  2853. callback(verify);
  2854. return;
  2855. }
  2856. let selected = this.productions.filter(function (e) {
  2857. return e.reportNo === commit.businessSubId
  2858. })
  2859. if (!selected[0].name || !selected[0].clientName || !selected[0].clientTel || !selected[0].clientAddress || !selected[0].evaluateAmount || !selected[0].evaluateAcreage
  2860. || !selected[0].owner || !selected[0].valueTiming) {
  2861. this.$notify({
  2862. title: '提示',
  2863. message: '请完成所选产品的基本信息后,再进行流程提交。',
  2864. type: 'error',
  2865. duration: 3000,
  2866. offset: 100
  2867. });
  2868. verify.state = false;
  2869. callback(verify);
  2870. return;
  2871. }
  2872. break;
  2873. case 'WRITE_REPORT':
  2874. let notTakeReportNoTargets = this.evaluateLandData.filter(function (e) {
  2875. return e.reportNo == null;
  2876. })
  2877. if (notTakeReportNoTargets.length > 0) {
  2878. this.$notify({
  2879. title: '提示',
  2880. message: '还有报告号未取的估价对象,请先完成取号操作。',
  2881. type: 'error',
  2882. duration: 3000
  2883. });
  2884. verify.state = false;
  2885. callback(verify);
  2886. return;
  2887. }
  2888. if (typeof (commit.businessMinId) == 'undefined' || commit.businessMinId == null || commit.ifCheckTask == null) {
  2889. this.$notify({
  2890. title: '提示',
  2891. message: '请选择一个产品后,再进行流程提交。',
  2892. type: 'error',
  2893. duration: 3000,
  2894. offset: 100
  2895. });
  2896. verify.state = false;
  2897. callback(verify);
  2898. return;
  2899. }
  2900. let selected1 = this.productions.filter(function (e) {
  2901. return e.reportNo === commit.businessMinId
  2902. })
  2903. if (!selected1[0].name || !selected1[0].clientName || !selected1[0].clientTel || !selected1[0].clientAddress || !selected1[0].evaluateAmount || !selected1[0].evaluateAcreage
  2904. || !selected1[0].owner || !selected1[0].valueTiming || !selected1[0].signatory) {
  2905. this.$notify({
  2906. title: '提示',
  2907. message: '请完成所选产品的基本信息后,再进行流程提交。',
  2908. type: 'error',
  2909. duration: 3000,
  2910. offset: 100
  2911. });
  2912. verify.state = false;
  2913. callback(verify);
  2914. return;
  2915. }
  2916. break;
  2917. case 'WRITE_LETTER':
  2918. let notTakeLetterNumberTargets = this.evaluateLandData.filter(function (e) {
  2919. return e.letterNo == null;
  2920. })
  2921. if (notTakeLetterNumberTargets.length > 0) {
  2922. this.$notify({
  2923. title: '提示',
  2924. message: '还有复评函号未取的估价对象,请先完成取号操作。',
  2925. type: 'error',
  2926. duration: 3000,
  2927. offset: 100
  2928. });
  2929. verify.state = false;
  2930. callback(verify);
  2931. return;
  2932. }
  2933. if (typeof (commit.businessMinId) == 'undefined' || commit.businessMinId == null || commit.ifCheckTask == null) {
  2934. this.$notify({
  2935. title: '提示',
  2936. message: '请选择一个产品后,再进行流程提交。',
  2937. type: 'error',
  2938. duration: 3000,
  2939. offset: 100
  2940. });
  2941. verify.state = false;
  2942. callback(verify);
  2943. return;
  2944. }
  2945. let selected2 = this.productions.filter(function (e) {
  2946. return e.reportNo === commit.businessMinId
  2947. })
  2948. if (!selected2[0].name || !selected2[0].clientName || !selected2[0].clientTel || !selected2[0].clientAddress || !selected2[0].evaluateAmount || !selected2[0].evaluateAcreage
  2949. || !selected2[0].owner || !selected2[0].valueTiming) {
  2950. this.$notify({
  2951. title: '提示',
  2952. message: '请完成所选产品的基本信息后,再进行流程提交。',
  2953. type: 'error',
  2954. duration: 3000,
  2955. offset: 100
  2956. });
  2957. verify.state = false;
  2958. callback(verify);
  2959. return;
  2960. }
  2961. break;
  2962. case "CHECK_STATEMENT":
  2963. case "CHECK_REPORT":
  2964. case "CHECK_LETTER":
  2965. if (commit.doSecondCheck != '不审' && !verify.nextHandlerId) {
  2966. verify.state = false;
  2967. callback(verify);
  2968. this.chooseSecondCheckerDialog = true
  2969. this.$api.dictData.remark("MAJOR_SECOND_CHECK_USERS").then(res => {
  2970. if (res.code === 200) {
  2971. this.secondCheckUsers = res.data;
  2972. //默认复审人
  2973. this.secondCheckUserId = res.data[0].remark;
  2974. }
  2975. })
  2976. return;
  2977. }
  2978. break;
  2979. case "INITIAL_PRICE":
  2980. let notEvaluateValueTargets = this.evaluateLandData.filter(function (e) {
  2981. return e.evaluateValue == null;
  2982. })
  2983. if (notEvaluateValueTargets.length > 0) {
  2984. this.$notify({
  2985. title: '提示',
  2986. message: '还有有估价对象价格未确定。',
  2987. type: 'error',
  2988. duration: 2000,
  2989. offset: 100
  2990. });
  2991. verify.state = false;
  2992. callback(verify);
  2993. return;
  2994. }
  2995. break;
  2996. case "REVIEW_QUOTATION":
  2997. let notCheckValueTargets = this.evaluateLandData.filter(function (e) {
  2998. return e.checkValue == null;
  2999. })
  3000. if (notCheckValueTargets.length > 0) {
  3001. this.$notify({
  3002. title: '提示',
  3003. message: '还有有估价对象价格未审核。',
  3004. type: 'error',
  3005. duration: 2000,
  3006. offset: 100
  3007. });
  3008. verify.state = false;
  3009. callback(verify);
  3010. return;
  3011. }
  3012. break;
  3013. }
  3014. callback(verify);
  3015. }
  3016. if (commit.state === 'REVERSE') {
  3017. this.$refs.board.getPreviousNode();
  3018. switch (nodeCode){
  3019. case "WRITE_STATEMENT":
  3020. case "WRITE_REPORT":
  3021. case "WRITE_LETTER":
  3022. if(this.productions.length>0){
  3023. if (!this.productions[0].ifReverse && this.pNode.nodeCode === "QUOTATION_FEEDBACK") {
  3024. // 需要验证兄弟流程节点信息
  3025. this.$notify({
  3026. title: '提示',
  3027. message: '已有其他子号流程正在进行中,不能退回到上一节点。',
  3028. type: 'info',
  3029. duration: 2000,
  3030. offset: 100
  3031. });
  3032. verify.state = false;
  3033. callback(verify);
  3034. return
  3035. }else{
  3036. verify.state = true;
  3037. verify.cleanReport = true;
  3038. callback(verify);
  3039. return;
  3040. }
  3041. }
  3042. }
  3043. callback(verify);
  3044. }
  3045. },
  3046. createPerformance(info) {
  3047. let allots = this.performance.allots;
  3048. let total = 0;
  3049. for (let i in allots) {
  3050. total += allots[i].ratio;
  3051. }
  3052. if (total != 100) {
  3053. this.$notify({
  3054. title: '提示',
  3055. message: '人员绩效比例之和需等于100%',
  3056. type: 'info',
  3057. duration: 1000,
  3058. offset: 100
  3059. });
  3060. return;
  3061. }
  3062. info = JSON.stringify(allots);
  3063. if (info.id) {
  3064. this.$api.businessProductionPerformance.edit(info).then(res => {
  3065. if (res.code === 200 && res.data) {
  3066. this.$notify({
  3067. title: '成功',
  3068. message: '人员绩效比信息更新成功',
  3069. type: 'success',
  3070. duration: 1000,
  3071. offset: 100
  3072. });
  3073. this.getPerformance(this.majorId, (this.reportNo == null ? this.statementNo : this.reportNo));
  3074. }
  3075. })
  3076. } else {
  3077. info.operation = true;
  3078. info.businessType = 'MAJOR_BUSINESS';
  3079. this.$api.businessProductionPerformance.add(info).then(res => {
  3080. if (res.code === 200 && res.data) {
  3081. this.$notify({
  3082. title: '成功',
  3083. message: '人员绩效比信息保存成功',
  3084. type: 'success',
  3085. duration: 3000,
  3086. offset: 100
  3087. });
  3088. this.getPerformance(this.majorId, (this.reportNo == null ? this.statementNo : this.reportNo));
  3089. }
  3090. })
  3091. }
  3092. },
  3093. getPerformance(majorId, productionNo) {
  3094. if (majorId && productionNo) {
  3095. const obj = new Object();
  3096. obj.businessType = 'MAJOR_BUSINESS';
  3097. obj.majorId = majorId;
  3098. obj.productionNo = productionNo;
  3099. obj.checkLoop = this.checkLoop;
  3100. this.$api.businessProductionPerformance.detail(obj).then(res => {
  3101. if (res.code === 200) {
  3102. this.performance = res.data;
  3103. }
  3104. })
  3105. }
  3106. },
  3107. doWareHouse() {
  3108. let reportNo = this.scanEntryData
  3109. let wareHoaseDto = new Object();
  3110. if (reportNo) {
  3111. wareHoaseDto.reportNo = reportNo;
  3112. } else {
  3113. wareHoaseDto.reportNo = this.$refs.scanEntry.scanEntryData;
  3114. }
  3115. if (this.currentNode.nodeName.includes("入库")) {
  3116. wareHoaseDto.repertoryState = 0;
  3117. } else {
  3118. wareHoaseDto.repertoryState = 1;
  3119. }
  3120. wareHoaseDto.productionType = this.wareHouseProductionType;
  3121. wareHoaseDto.productionId = this.wareHouseproductionId;
  3122. this.taskRecordDTO.recordId = this.currentNode.tasks[0].recordId;
  3123. this.taskRecordDTO.taskData = wareHoaseDto;
  3124. this.$api.majorProduction.warehouse(this.taskRecordDTO).then(res => {
  3125. if (res.code === 200 && res.data) {
  3126. this.$notify({
  3127. title: '成功',
  3128. message: '库存操作成功',
  3129. type: 'success',
  3130. duration: 1000,
  3131. offset: 100
  3132. });
  3133. this.warehouseDialog = false;
  3134. this.getProductions(this.majorId, wareHoaseDto.reportNo);
  3135. }
  3136. else {
  3137. this.$message({
  3138. type: 'info',
  3139. message: '取消操作'
  3140. });
  3141. }
  3142. })
  3143. },
  3144. handleScanEntry(scanData) {
  3145. this.scanEntryData = scanData;
  3146. },
  3147. openWareHouseDialog(row) {
  3148. this.warehouseDialog = true;
  3149. this.wareHouseProductionType = row.production;
  3150. this.wareHouseproductionId = row.id
  3151. },
  3152. cleanWareHouseProductionType() {
  3153. this.wareHouseProductionType = null;
  3154. this.wareHouseproductionId = null;
  3155. },
  3156. sitesChange() {
  3157. this.$forceUpdate()
  3158. },
  3159. expandRow(row) {
  3160. row.expand = !row.expand
  3161. this.$refs.pTable.toggleRowExpansion(row, row.expend);
  3162. },
  3163. getPreviousNode(pNode) {
  3164. this.pNode = pNode;
  3165. },
  3166. //默认展开第一行
  3167. defaultExpandOpen() {
  3168. var els = document.getElementsByClassName('el-table__expand-icon')
  3169. if (els[0]) {
  3170. els[0].click();
  3171. }
  3172. },
  3173. takeStatementNoOrLettertNo(productionType) {
  3174. this.$confirm('请确认所选估价对象是否正确?', '提示', {
  3175. confirmButtonText: '确认',
  3176. cancelButtonText: '取消',
  3177. type: 'info',
  3178. }).then(() => {
  3179. let takeNumberDTO = {
  3180. businessId: this.majorId,
  3181. businessType: "MAJOR_BUSINESS",
  3182. takeType: this.major.businessObjectType === '土地' ? 'LAND_NUMBER' : 'REALTY_NUMBER',
  3183. targets: this.takeNumberItems,
  3184. orderId: this.major.orderId,
  3185. productionType: productionType
  3186. }
  3187. this.$api.majorTarget.takeNumber(takeNumberDTO).then(res => {
  3188. if (res.code === 200 && res.data != null) {
  3189. this.$notify({
  3190. title: '成功',
  3191. message: '取号成功。',
  3192. type: 'success',
  3193. duration: 1000,
  3194. offset: 100
  3195. });
  3196. this.getLandTargetList();
  3197. this.createProduction(res.data);
  3198. this.taskRecordDTO = {};
  3199. } else {
  3200. this.$notify({
  3201. title: '失败',
  3202. message: '取号失败。',
  3203. type: 'error',
  3204. duration: 1000
  3205. });
  3206. }
  3207. })
  3208. }
  3209. )
  3210. },
  3211. saveQuality(p) {
  3212. this.taskRecordDTO.recordId = this.currentNode.tasks[0].recordId;
  3213. this.taskRecordDTO.taskData = p;
  3214. p.businessType = 'MAJOR_BUSINESS';
  3215. if (p.id) {
  3216. this.$api.businessProductionPerformance.edit(this.taskRecordDTO).then(res => {
  3217. if (res.code === 200 && res.data) {
  3218. this.$notify({
  3219. title: '成功',
  3220. message: '质检信息更新成功',
  3221. type: 'success',
  3222. duration: 1000,
  3223. offset: 100
  3224. });
  3225. this.getPerformance(this.majorId, (this.reportNo == null ? this.statementNo : this.reportNo));
  3226. }
  3227. })
  3228. } else {
  3229. this.$api.businessProductionPerformance.add(this.taskRecordDTO).then(res => {
  3230. if (res.code === 200 && res.data) {
  3231. this.$notify({
  3232. title: '成功',
  3233. message: '质检信息保存成功',
  3234. type: 'success',
  3235. duration: 1000,
  3236. offset: 100
  3237. });
  3238. this.getPerformance(this.majorId, (this.reportNo == null ? this.statementNo : this.reportNo));
  3239. }
  3240. })
  3241. }
  3242. },
  3243. commit(state) {
  3244. this.$refs.board.commit(state);
  3245. },
  3246. goBack() {
  3247. const back = this.$route.query.back
  3248. if (back) {
  3249. this.$router.push(back)
  3250. }
  3251. },
  3252. cleanResidueYears(target) {
  3253. target.residueYears = null;
  3254. },
  3255. selectable(row, index) {
  3256. let nodeCode = this.currentNode.nodeCode;
  3257. if (nodeCode === 'WRITE_STATEMENT' && row.statementNo != null) {
  3258. return false;
  3259. } else if (nodeCode === 'WRITE_REPORT' && row.reportNo != null) {
  3260. return false;
  3261. } else if (nodeCode === 'WRITE_LETTER' && row.letterNo != null) {
  3262. return false;
  3263. } else {
  3264. return true;
  3265. }
  3266. },
  3267. addErrorType(p, errorType) {
  3268. if (p.reason) {
  3269. p.reason = p.reason + errorType + "; ";
  3270. } else {
  3271. p.reason = errorType + "; ";
  3272. }
  3273. },
  3274. cleanSecondCheck() {
  3275. this.secondCheckUserId = null;
  3276. }
  3277. },
  3278. }
  3279. </script>
  3280. <style lang="scss" scoped>
  3281. .row-style {
  3282. margin-left: 40px;
  3283. margin-right: 1%;
  3284. }
  3285. .task-class {
  3286. /deep/ .el-form-item__label {
  3287. color: red;
  3288. }
  3289. }
  3290. .evaluate-table {
  3291. margin-left: 40px;
  3292. margin-top: 35px;
  3293. }
  3294. .pane-class {
  3295. width: 100%;
  3296. overflow-y: scroll;
  3297. }
  3298. /deep/ .cell-class {
  3299. font-size: 13px;
  3300. color: black;
  3301. }
  3302. .table {
  3303. /deep/ thead {
  3304. .el-table-column--selection {
  3305. .cell {
  3306. display: none;
  3307. }
  3308. }
  3309. }
  3310. }
  3311. /deep/.doWarehouseClass {
  3312. border-radius: 10px;
  3313. }
  3314. .button-area {
  3315. position: absolute;
  3316. top: 20px;
  3317. right: 50px;
  3318. }
  3319. .error-type {
  3320. margin-right: 5px;
  3321. }
  3322. .error-type:hover {
  3323. cursor: pointer;
  3324. }
  3325. </style>