index.vue 71 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217
  1. <template>
  2. <div class="data-fill-list-box">
  3. <el-collapse v-model="ActiveKey" accordion @change="CollapseChange">
  4. <el-collapse-item
  5. v-for="(item, index) in listDatas"
  6. :id="`item-${index}-${item?.pkeyId}`"
  7. :key="item?.pkeyId"
  8. :disabled="item.isBussShow === 2"
  9. :name="`item-${index}-${item?.pkeyId}`"
  10. >
  11. <template #title>
  12. <div class="hc-collapse-item-header">
  13. <div class="real-fill-rate">
  14. <!-- <div
  15. class="tag"
  16. :class="item.realFillRate >= 80 ? 'yes' : ''"
  17. >
  18. 已填{{ item.realFillRate ?? 0 }}%
  19. </div> -->
  20. <HcTooltip
  21. v-if="isStatus !== 3 && item.isBussShow !== 2"
  22. keys="wbs_preview_table"
  23. >
  24. <el-link
  25. v-if="
  26. item.isBussShow === 2
  27. || item.isTabPdf === 1
  28. || item.pdfUrl === ''
  29. || item.pdfUrl === null
  30. "
  31. type="primary"
  32. disabled
  33. >
  34. <el-tooltip
  35. v-if="item.dateIsComplete === 2"
  36. class="box-item"
  37. effect="light"
  38. content="表单日期未完善"
  39. placement="top"
  40. >
  41. <HcIcon name="error-warning" ui=" text-red" />
  42. </el-tooltip>
  43. 本 表 预 览
  44. </el-link>
  45. <el-link
  46. v-else
  47. type="primary"
  48. :disabled="tableFormPreviewLoading"
  49. @click.stop="previewClick(item)"
  50. >
  51. <el-tooltip
  52. v-if="item.dateIsComplete === 2"
  53. class="box-item"
  54. effect="light"
  55. content="表单日期未完善"
  56. placement="top"
  57. >
  58. <HcIcon name="error-warning" ui=" text-red" />
  59. </el-tooltip>
  60. 本 表 预 览
  61. </el-link>
  62. </HcTooltip>
  63. </div>
  64. <div
  65. v-if="
  66. item.isBussShow === 1
  67. || item.isBussShow === null
  68. "
  69. class="item-title truncate text-lg"
  70. >
  71. {{ item.nodeName }}
  72. </div>
  73. <div
  74. v-else
  75. class="item-title truncate text-lg"
  76. style="color: #a395d6"
  77. >
  78. {{ item.nodeName }}
  79. </div>
  80. <div class="hc-extra-text-box">
  81. <HcTooltip
  82. v-if="
  83. item.isCopeTab === 2 || item.isCopeTab === 3
  84. "
  85. keys="wbs_del_table"
  86. >
  87. <el-link
  88. type="danger"
  89. :disabled="
  90. item.isBussShow === 2
  91. || tableFormDelLoading
  92. "
  93. @click.stop="delClick(item, index)"
  94. >
  95. 删除本表
  96. </el-link>
  97. </HcTooltip>
  98. <el-link
  99. v-if="
  100. treenodeDataInfo?.majorDataType === 8
  101. || treenodeDataInfo?.majorDataType === 9
  102. "
  103. :disabled="evaluateLoaing"
  104. type="primary"
  105. @click="evaluate(item)"
  106. >
  107. 评定汇总
  108. </el-link>
  109. <el-link
  110. v-if="isTemplateType"
  111. type="primary"
  112. @click="autoClick(item)"
  113. >
  114. 自动获取数据
  115. </el-link>
  116. <HcTooltip keys="wbs_copy_table">
  117. <el-link
  118. v-if="
  119. item.isLinkTable === 1
  120. || item.isBussShow === 2
  121. "
  122. type="primary"
  123. disabled
  124. >
  125. 复制本表
  126. </el-link>
  127. <el-link
  128. v-else
  129. type="primary"
  130. :disabled="copyClickLoading"
  131. @click.stop="copyClick(item, index)"
  132. >
  133. 复制本表
  134. </el-link>
  135. </HcTooltip>
  136. <HcTooltip keys="wbs_upload_table">
  137. <el-link
  138. :type="
  139. item.tabFileType === 2
  140. ? 'success'
  141. : 'primary'
  142. "
  143. :disabled="isStatus == '3'"
  144. @click.stop="uploadClick(item, index)"
  145. >
  146. <template v-if="item.tabFileType === 2">
  147. 已上传
  148. </template>
  149. <template v-else>附件上传</template>
  150. </el-link>
  151. </HcTooltip>
  152. <HcTooltip keys="wbs_hide_table">
  153. <el-link
  154. v-loading="item?.tableFormHideLoading"
  155. type="primary"
  156. :disabled="item?.tableFormHideLoading"
  157. @click.stop="hideClick(item, index)"
  158. >
  159. <template
  160. v-if="
  161. item.isBussShow === 1
  162. || item.isBussShow === null
  163. "
  164. >
  165. 隐藏本表
  166. </template>
  167. <template v-else>显示本表</template>
  168. </el-link>
  169. </HcTooltip>
  170. </div>
  171. </div>
  172. </template>
  173. <div
  174. :style="`height: calc(100vh - ${
  175. draw_type ? '555px' : '222px'
  176. });`"
  177. class="data-fill-list-item-content"
  178. >
  179. <div
  180. v-if="item?.isWindow"
  181. class="data-fill-table-form-box is-window"
  182. >
  183. <div class="hc-window-tip">
  184. <div class="table-form-no">
  185. <img :src="NoDataSvg" alt="">
  186. <div class="desc">
  187. 当前表单处于窗口模式,关闭相关窗口后恢复
  188. </div>
  189. </div>
  190. </div>
  191. </div>
  192. <div v-else class="data-fill-table-form-box">
  193. <TableFormItem
  194. v-if="item.isTableRender"
  195. :ref="(el) => setItemRefs(el, item)"
  196. :classify="classifys"
  197. :datas="changeFormDatas(item?.pkeyId, 'collapse')"
  198. :kid="item?.pkeyId"
  199. :node-name="item.nodeName"
  200. :pid="`table-form-${item?.pkeyId}`"
  201. :tid="treeId"
  202. @excel-body-tap="excelTableFormClick($event)"
  203. @render="tableFormRender($event, item, index)"
  204. @right-tap="tableFormRightTap($event, index)"
  205. />
  206. <el-tooltip
  207. :content="
  208. item.isWindow
  209. ? '关闭窗口并恢复'
  210. : '当前表单窗口化'
  211. "
  212. :hide-after="0"
  213. placement="top"
  214. >
  215. <div
  216. class="form-window-icon"
  217. @click.stop="windowClick(item, index)"
  218. >
  219. <template v-if="item.isWindow">
  220. <HcIcon name="fullscreen-exit" />
  221. </template>
  222. <template v-else>
  223. <HcIcon name="fullscreen" />
  224. </template>
  225. </div>
  226. </el-tooltip>
  227. </div>
  228. <div class="data-fill-table-action">
  229. <div
  230. class="tip-action text-orange"
  231. @click="actionTipModal = true"
  232. >
  233. <hc-icon fill name="information" ui="text-2xl" />
  234. </div>
  235. <div v-loading="downloadLoading" class="link-action">
  236. <HcTooltip keys="wbs_download_table">
  237. <el-link
  238. type="primary"
  239. :disabled="downloadLoading"
  240. @click="downModal(item)"
  241. >
  242. 下载导入模板
  243. </el-link>
  244. </HcTooltip>
  245. <HcTooltip keys="wbs_import_table">
  246. <el-link
  247. type="primary"
  248. @click="uploadFileClick(item)"
  249. >
  250. 导入表格数据
  251. </el-link>
  252. </HcTooltip>
  253. </div>
  254. <div class="btn-action">
  255. <el-button
  256. v-if="isEnableBulk"
  257. type="warning"
  258. size="small"
  259. @click="enableBulkReplication"
  260. >
  261. 关闭批量复制
  262. </el-button>
  263. <el-button
  264. v-else
  265. type="warning"
  266. size="small"
  267. @click="enableBulkReplication"
  268. >
  269. 开启批量复制
  270. </el-button>
  271. <HcTooltip keys="wbs_save_table">
  272. <el-button
  273. :disabled="!item?.isTableForm"
  274. :loading="tableFormSaveLoading"
  275. color="#3794FF"
  276. size="small"
  277. style="color: white"
  278. @click="tableFormSaveClick(item)"
  279. >
  280. 仅保存本表数据
  281. </el-button>
  282. </HcTooltip>
  283. </div>
  284. </div>
  285. </div>
  286. </el-collapse-item>
  287. </el-collapse>
  288. </div>
  289. <!-- 右键菜单 -->
  290. <HcContextMenu
  291. ref="contextMenuRef"
  292. :datas="tableFormMenu"
  293. @item-click="handleMenuSelect"
  294. />
  295. <!-- 上传文件 -->
  296. <hc-new-dialog
  297. v-model="uploadModal"
  298. :footer="false"
  299. title="上传文件"
  300. widths="38rem"
  301. @close="uploadModalClose"
  302. >
  303. <!-- isStatus == 3 -->
  304. <HcUpload
  305. :datas="uploadData"
  306. :file-list="fileListData"
  307. :is-canupload="false"
  308. :auto-upload="false"
  309. :is-list-file="true"
  310. @change="uploadChange"
  311. @close="uploadModalClose"
  312. />
  313. </hc-new-dialog>
  314. <!-- 操作提示 -->
  315. <hc-new-dialog
  316. v-model="actionTipModal"
  317. :footer="false"
  318. title="操作提示"
  319. widths="38rem"
  320. @close="actionTipModalClose"
  321. >
  322. <div class="data-fill-table-tip-box">
  323. <div class="tip-item text-gray-400">
  324. 1、灰色框代表可通过系统识别计算,公式自动引用,可通过公式计算少量数据,(表头数据及简单),也可只填写白色框数据
  325. </div>
  326. <div class="tip-item text-gray-400">
  327. 2、系统支持键盘中,shift +
  328. tab键向上一个填报框切换,tab向下一个填报框切换。Shift + 上 ( ↑
  329. )、下 ( ↓ )、左 ( ← )、右 ( → )键,切换填报输入框焦点。
  330. </div>
  331. <div class="tip-item text-gray-400">
  332. 3、先点击一下表单任一区域,再键盘按住 ⌘/ctrl +
  333. 点击,选择输入框,变为绿色边框,选中成功。选择完毕后,键盘按
  334. ⌘/ctrl + c 复制所选中的数据, 再其它表内,或同一张表内,再次按住
  335. ⌘/ctrl + 点击,选择输入框。键盘按 ⌘/ctrl + v
  336. 依次粘贴所选的数据。(目前仅支持输入框和文本框的操作)
  337. </div>
  338. <div class="tip-item text-orange-500">
  339. 4、完善资料填写后记得一定要保存哦
  340. </div>
  341. </div>
  342. </hc-new-dialog>
  343. <!-- 插入设计值/频率 -->
  344. <hc-new-dialog
  345. v-model="designModal"
  346. :loading="designModalLoading"
  347. save-text="确认插入"
  348. title="插入设计值/频率"
  349. widths="600px"
  350. @close="closeDesignModal"
  351. @save="designModalSave"
  352. >
  353. <el-alert
  354. :closable="false"
  355. title="填写完设计值和频率,系统自动计算实测值"
  356. type="warning"
  357. />
  358. <el-form
  359. ref="formDesignRef"
  360. :model="formDesignModel"
  361. label-width="auto"
  362. size="large"
  363. >
  364. <div class="form-item-div mb-3 text-center">
  365. <el-radio-group v-model="formDesignModel.type" size="large">
  366. <el-radio :value="1">公路工程</el-radio>
  367. <el-radio :value="2" class="ml-4">水利水电</el-radio>
  368. </el-radio-group>
  369. </div>
  370. <el-form-item label="设计值">
  371. <!-- onkeyup="value = value.replace(/^\D*(\d*(?:\.\d{0,2})?).*$/g,'$1')" -->
  372. <el-input
  373. v-model="formDesignModel.design"
  374. placeholder="如果设计值存在两个,则使用 '/' 连接,例如12/23"
  375. />
  376. </el-form-item>
  377. <el-form-item v-if="formDesignModel.type === 1" label="频率">
  378. <!-- onkeyup="value = value.replace(/^(0+)|[^\d]+/g,'')" -->
  379. <el-input
  380. v-model="formDesignModel.size"
  381. placeholder="如果设计值使用 '/' 连接,则频率也是用 '/' 连接,例如5/10"
  382. />
  383. </el-form-item>
  384. <el-form-item v-if="formDesignModel.type === 2" label="容量">
  385. <!-- onkeyup="value = value.replace(/^(0+)|[^\d]+/g,'')" -->
  386. <el-input
  387. v-model="formDesignModel.capacity"
  388. placeholder="如果容量存在两个,则使用 '*',或者 '/' 连接例如2*4,5/7"
  389. />
  390. </el-form-item>
  391. <el-form-item label="合格点数">
  392. <el-input
  393. v-model="formDesignModel.pass"
  394. placeholder="如果设计值使用 '/' 连接,则合格点数也是用 '/' 连接,例如2/5"
  395. />
  396. </el-form-item>
  397. <el-form-item label="偏差范围">
  398. <el-input
  399. v-model="formDesignModel.dev"
  400. placeholder="如果设计值使用 '/' 连接,则偏差范围也是用 '/' 连接,例如±2/±3"
  401. />
  402. </el-form-item>
  403. <el-form-item label="方向">
  404. <el-radio-group
  405. v-model="formDesignModel.direction"
  406. size="large"
  407. >
  408. <el-radio :label="1">横向</el-radio>
  409. <el-radio :label="2" class="ml-4">纵向</el-radio>
  410. </el-radio-group>
  411. </el-form-item>
  412. </el-form>
  413. </hc-new-dialog>
  414. <!-- 插入特殊字符 -->
  415. <hc-new-dialog
  416. v-model="specialModal"
  417. :loading="specialModalLoading"
  418. save-text="确认插入"
  419. title="插入特殊字符"
  420. widths="600px"
  421. @close="specialModalClose"
  422. @save="specialNodeClick"
  423. >
  424. <HcSpecialDiaolg
  425. v-if="specialModal"
  426. ref="specialRef"
  427. @change="specialDiaolgChange"
  428. />
  429. </hc-new-dialog>
  430. <!-- 关联试验数据 -->
  431. <hc-new-dialog
  432. v-model="testModal"
  433. :footer="false"
  434. :loading="testModalLoading"
  435. is-table
  436. title="关联试验数据"
  437. widths="84%"
  438. @close="testModalClose"
  439. >
  440. <HcTestDiaolg
  441. v-if="testModal"
  442. :contract-id="contract_id"
  443. :project-id="projectId"
  444. :tenant-id="tenant_id"
  445. :wbs-id="wbsTemp_id"
  446. :wbs-type="wbs_type"
  447. @change="testTableRowName"
  448. />
  449. </hc-new-dialog>
  450. <!-- 选择要插入的数据 -->
  451. <hc-new-dialog
  452. v-model="insertDataShow"
  453. :loading="insertDataLoading"
  454. is-table
  455. save-text="保存"
  456. title="选择需要插入的数据"
  457. widths="84%"
  458. @close="cancelinsertData"
  459. @save="submitinsertData"
  460. >
  461. <HcTestData
  462. v-if="insertDataShow"
  463. ref="insertDataRef"
  464. :contract-id="contract_id"
  465. :project-id="projectId"
  466. :table-id="itinsertTableId"
  467. :tree-id="itinsertTreeId"
  468. />
  469. </hc-new-dialog>
  470. <!-- 关联试验文件 -->
  471. <hc-new-dialog
  472. v-model="fileModal"
  473. :loading="fileModalLoading"
  474. is-table
  475. save-text="保存"
  476. title="关联试验文件"
  477. widths="84%"
  478. @close="fileModalClose"
  479. @save="savefileModal"
  480. >
  481. <HcTestFile
  482. v-if="fileModal"
  483. ref="testFileRefs"
  484. :contract-id="contract_id"
  485. :project-id="projectId"
  486. :tenant-id="tenant_id"
  487. :tree-id="treeId"
  488. :wbs-id="wbsTemp_id"
  489. :wbs-type="wbs_type"
  490. />
  491. </hc-new-dialog>
  492. <!-- 公式参数配置 -->
  493. <hc-new-dialog
  494. v-model="formulaModal"
  495. :loading="formulaModalLoading"
  496. save-text="保存"
  497. title="公式参数配置"
  498. widths="340px"
  499. @close="formulaModalClose"
  500. @save="formulaSaveClick"
  501. >
  502. <HcFormula
  503. v-if="formulaModal"
  504. ref="formulaRefs"
  505. :key-name="tableFormItemNode.KeyName"
  506. :contract-id="contractInfo"
  507. :formparent-id="formparentId"
  508. :pkey-id="tableFormItemNode.pkeyId"
  509. :project-id="projectId"
  510. />
  511. </hc-new-dialog>
  512. <!-- 查看表单 -->
  513. <template v-for="(item, index) in DragModalTableForm" :key="index">
  514. <HcDragModal
  515. :close-icon-arr="closeIconArr"
  516. :eid="item.pkeyId"
  517. :height="DragModalHeight"
  518. :is-show="item.isShow"
  519. :loading="item.loading"
  520. :loading-text="item.loadingText"
  521. :title="item.title"
  522. is-sort-top
  523. @close="TableFormClose(item, index)"
  524. @close-icon-tap="closeIconTap($event, item, index)"
  525. >
  526. <HcDragNode
  527. :more-menu="dragNodeMoreMenu"
  528. @menu-tap="dragNodeMoreMenuTap($event, item)"
  529. >
  530. <TableFormItem
  531. :ref="(el) => setItemRefs(el, item)"
  532. :classify="item.classify"
  533. :datas="changeFormDatas(item?.pkeyId, 'window')"
  534. :height="item.height"
  535. :kid="item.pkeyId"
  536. :node-name="item.title"
  537. :pid="`table-form-${item?.pkeyId}`"
  538. :scroll="false"
  539. :tid="item.treeId"
  540. :width="item.width"
  541. @excel-body-tap="excelTableFormClick($event)"
  542. @render="tableFormRender($event, item.item, item.index)"
  543. @right-tap="tableFormRightTap($event, item.index)"
  544. />
  545. </HcDragNode>
  546. </HcDragModal>
  547. </template>
  548. <!-- 复制本表 -->
  549. <hc-new-dialog
  550. v-model="showcopyModal"
  551. :loading="copyClickModalLoading"
  552. save-text="确认复制"
  553. title="复制本表"
  554. widths="84%"
  555. @close="copyModalClose"
  556. @save="copySaveClick"
  557. >
  558. <HcCopy
  559. v-if="showcopyModal"
  560. ref="copyRefs"
  561. :contract-id="contract_id"
  562. :project-id="projectId"
  563. :classify="classifys"
  564. :tree_AutoExpandKeys="tree_AutoExpandKeys"
  565. :treenode-data-info="treenodeDataInfo"
  566. :copy-items="copyItems"
  567. :copy-modal-type="CopyModalType"
  568. />
  569. <template #footer>
  570. <div class="lr-dialog-footer">
  571. <div class="left flex items-center">
  572. <div class="mr-4">复制方式:</div>
  573. <el-radio-group v-model="CopyModalType">
  574. <el-radio label="1">跨节点复制</el-radio>
  575. <el-radio class="ml-4" label="2">本节点复制</el-radio>
  576. </el-radio-group>
  577. </div>
  578. <div class="right">
  579. <el-button size="large" @click="showcopyModal = false">
  580. 取消
  581. </el-button>
  582. <el-button
  583. :loading="copyClickModalLoading"
  584. hc-btn
  585. type="primary"
  586. @click="copySaveClick"
  587. >
  588. 确认复制
  589. </el-button>
  590. </div>
  591. </div>
  592. </template>
  593. </hc-new-dialog>
  594. <!-- 含水率 -->
  595. <hc-new-dialog
  596. v-model="waterModal"
  597. title="含水率"
  598. @close="waterModalClose"
  599. @save="waterSaveClick"
  600. >
  601. <HcWater
  602. v-if="waterModal"
  603. ref="waterRefs"
  604. :key-name="tableFormItemNode.KeyName"
  605. :contract-id="contract_id"
  606. :design-strength="designStrength"
  607. :p-key-id="tableFormItemNode.pkeyId"
  608. />
  609. </hc-new-dialog>
  610. <!-- 设置自动获取数据 -->
  611. <hc-dialog v-model="autoModalDialog" title="设置自动获取" @save="autoSaveClick">
  612. <el-form
  613. :model="autoModal"
  614. label-width="auto"
  615. size="large"
  616. label-position="left"
  617. >
  618. <el-form-item label="数据类型" prop="nodeType">
  619. <el-select v-model="autoModal.type" multiple block @change="autoChangeType">
  620. <el-option
  621. v-for="item in dataType"
  622. :key="item.dictKey"
  623. :label="item.dictValue"
  624. :value="item.dictKey"
  625. />
  626. </el-select>
  627. <template v-if="isShowNum">
  628. <el-input v-model="autoModal.customValue" block placeholder="高程偏差/顶面高差" class="mt-1" />
  629. </template>
  630. </el-form-item>
  631. </el-form>
  632. </hc-dialog>
  633. </template>
  634. <script setup>
  635. import {
  636. nextTick,
  637. onActivated,
  638. onDeactivated,
  639. onMounted,
  640. onUnmounted,
  641. ref,
  642. watch,
  643. } from 'vue'
  644. import HTableForm from '~src/plugins/HTableForm'
  645. import { useAppStore } from '~src/store'
  646. import wbsApi from '~api/data-fill/wbs'
  647. import HcUpload from '../components/HcUpload.vue'
  648. import TableFormItem from './table-form-item.vue'
  649. import HcSpecialDiaolg from './special-diaolg.vue'
  650. import HcTestDiaolg from './test-diaolg.vue'
  651. import HcTestData from './test-data.vue'
  652. import HcTestFile from './test-file.vue'
  653. import HcFormula from './formula.vue'
  654. import HcCopy from './test-copy.vue'
  655. import NoDataSvg from '~src/assets/view/no-data.svg'
  656. import HcWater from './water.vue'
  657. import { getDictionary } from '~api/other'
  658. import {
  659. arrIndex,
  660. deepClone,
  661. downloadBlob,
  662. getArrValue,
  663. getObjVal,
  664. getObjValue,
  665. isNullES,
  666. setPosRange,
  667. } from 'js-fast-way'
  668. import { getStoreValue, setStoreValue } from '~src/utils/storage'
  669. import { HcDelMsg, HcUploadFileApi } from 'hc-vue3-ui'
  670. import { toPdfPage } from '~uti/btn-auth'
  671. import nodeBaseApi from '~api/data-fill/nodebaseinfo'
  672. //参数
  673. const props = defineProps({
  674. datas: {
  675. type: Array,
  676. default: () => [],
  677. },
  678. classify: {
  679. type: [String, Number],
  680. default: '',
  681. },
  682. status: {
  683. type: [String, Number],
  684. default: '',
  685. },
  686. primaryKeyId: {
  687. type: [String, Number],
  688. default: '',
  689. },
  690. contractId: {
  691. type: [String, Number],
  692. default: '',
  693. },
  694. drawType: {
  695. type: Boolean,
  696. default: false,
  697. },
  698. wbsTempId: {
  699. type: [String, Number],
  700. default: '',
  701. },
  702. tenantId: {
  703. type: [String, Number],
  704. default: '',
  705. },
  706. wbsType: {
  707. type: [String, Number],
  708. default: '',
  709. },
  710. treeAutoExpandKeys: {
  711. type: [Array],
  712. default: () => [],
  713. },
  714. treenodeDataInfo: {
  715. type: [Object],
  716. default: () => ({}),
  717. },
  718. newlistdata: {
  719. type: [Array],
  720. default: () => [],
  721. },
  722. contractInfo:{
  723. type: [String, Number],
  724. default: '',
  725. },
  726. })
  727. //事件
  728. const emit = defineEmits(['renew', 'offsetTop', 'getList'])
  729. //初始变量
  730. const useAppState = useAppStore()
  731. //全局变量
  732. const projectId = ref(useAppState.projectId)
  733. const contract_id = ref(props.contractId)
  734. const treeId = ref(props.primaryKeyId)
  735. const classifys = ref(props.classify)
  736. const wbsTemp_id = ref(props.wbsTempId)
  737. const tenant_id = ref(props.tenantId)
  738. const wbs_type = ref(props.wbsType)
  739. const isStatus = ref(parseInt(props.status))
  740. const listDatas = ref([])
  741. const draw_type = ref(props.drawType)
  742. const tree_AutoExpandKeys = ref(props.treeAutoExpandKeys)
  743. const treenodeDataInfo = ref(props.treenodeDataInfo)
  744. const newlistdata = ref(props.newlistdata)
  745. const isEnableBulk = ref(true)
  746. // const isEnableBulk = ref(false)
  747. const contractInfo = ref(props.contractInfo)
  748. const isTemplateType = ref(useAppState.contractInfo?.templateType === 2)
  749. //表单变量
  750. const formDataList = ref([])
  751. const formKeyIds = ref('')
  752. const formparentId = ref('')
  753. //处理ref
  754. const itemRefs = ref([])
  755. const setItemRefs = (el, { pkeyId }) => {
  756. if (el) {
  757. let index = arrIndex(itemRefs.value, 'pkeyId', pkeyId)
  758. if (index !== -1) {
  759. itemRefs.value[index].ref = el
  760. } else {
  761. itemRefs.value.push({
  762. pkeyId: pkeyId,
  763. ref: el,
  764. })
  765. }
  766. }
  767. }
  768. //处理表单的ref
  769. const setSpliceItemRefs = async ({ pkeyId }) => {
  770. const refs = itemRefs.value
  771. let index = arrIndex(refs, 'pkeyId', pkeyId)
  772. if (index !== -1) {
  773. refs.splice(index, 1)
  774. itemRefs.value = refs
  775. }
  776. }
  777. const closeIconArr = [
  778. {
  779. key: 'reduction',
  780. icon: 'picture-in-picture-2',
  781. name: '还原到面板内,并自动展开面板',
  782. },
  783. ]
  784. //组件参数变量
  785. const apis = ref({
  786. dataInfo: wbsApi.getBussDataInfo,
  787. bussCols: wbsApi.getHtmlBussCols,
  788. excelHtml: wbsApi.getExcelHtml,
  789. })
  790. //深度监听数据
  791. watch(
  792. () => props.datas,
  793. (datas) => {
  794. setFormDataNum(datas)
  795. },
  796. { deep: true },
  797. )
  798. //监听变量值
  799. watch(
  800. () => [
  801. useAppState.projectId,
  802. props.contractId,
  803. props.wbsTempId,
  804. props.tenantId,
  805. props.wbsType,
  806. props.status,
  807. props.classify,
  808. props.primaryKeyId,
  809. props.newlistdata,
  810. props.treenodeDataInfo,
  811. props.contractInfo,
  812. ],
  813. ([
  814. pid,
  815. cid,
  816. temp_id,
  817. tid,
  818. type,
  819. status,
  820. class_id,
  821. tree_id,
  822. Newlistdata,
  823. TreenodeDataInfo,
  824. cinfo,
  825. ]) => {
  826. projectId.value = pid
  827. contract_id.value = cid
  828. wbsTemp_id.value = temp_id
  829. tenant_id.value = tid
  830. wbs_type.value = type
  831. isStatus.value = parseInt(status)
  832. classifys.value = class_id
  833. treeId.value = tree_id
  834. newlistdata.value = Newlistdata
  835. treenodeDataInfo.value = TreenodeDataInfo
  836. contractInfo.value = cinfo
  837. },
  838. )
  839. //渲染完成
  840. onMounted(() => {
  841. setFormDataNum(props.datas)
  842. setTableFormMenu(useAppState.projectInfo)
  843. const { offsetHeight } = document.body
  844. DragModalHeight.value = offsetHeight - 200
  845. const isBulk = getStoreValue('isEnableBulk')
  846. isEnableBulk.value = isBulk ?? true
  847. HTableForm.setEnableBulk(isBulk)
  848. if (isBulk) setMountOnEventKey()
  849. })
  850. //处理变动的数据
  851. const changeFormData = ref({
  852. window: [],
  853. collapse: [],
  854. })
  855. const changeFormDatas = (pkeyId, type) => {
  856. const changeData = changeFormData.value[type]
  857. const index = arrIndex(changeData, 'pkeyId', pkeyId)
  858. if (index !== -1) {
  859. return changeData[index]
  860. } else {
  861. return {}
  862. }
  863. }
  864. //设置变动的数据
  865. const setChangeFormDatas = async (pkeyId, type) => {
  866. const refs = await getFormRef(pkeyId)
  867. const formData = refs?.getFormData()
  868. const changeData = changeFormData.value[type]
  869. const index = arrIndex(changeData, 'pkeyId', pkeyId)
  870. if (index !== -1) {
  871. changeData[index] = formData
  872. } else {
  873. changeData.push(formData)
  874. }
  875. changeFormData.value[type] = changeData
  876. }
  877. //展开事件
  878. const ActiveKey = ref('')
  879. const CollapseChange = (name) => {
  880. ActiveKey.value = name
  881. let index = getCollapseItemIndex(name)
  882. if (index > -1) {
  883. getOffsetTop(name)
  884. const item = listDatas.value[index]
  885. formKeyIds.value = setToString(item.pkeyId)
  886. formparentId.value = setToString(item.parentId)
  887. nextTick(() => {
  888. if (!item.isTableRender) {
  889. item.isTableRender = true
  890. }
  891. })
  892. } else {
  893. getOffsetTop()
  894. formKeyIds.value = ''
  895. formparentId.value = ''
  896. }
  897. }
  898. const setCollapseKey = (key) => {
  899. CollapseChange(key)
  900. }
  901. //初始设置
  902. const setFormDataNum = (datas) => {
  903. itemRefs.value = []
  904. //ActiveKey.value = ''
  905. let newArr = []
  906. for (let i = 0; i < datas.length; i++) {
  907. newArr.push({ isCollapseLoad: false })
  908. }
  909. formDataList.value = newArr
  910. listDatas.value = deepClone(datas)
  911. }
  912. //渲染完成
  913. const tableFormRender = (form, item, index) => {
  914. formDataList.value[index] = form
  915. formDataList.value[index].isCollapseLoad = form.isRenderForm
  916. item.isTableForm = form.isRenderForm
  917. }
  918. //菜单数据
  919. const contextMenuRef = ref(null)
  920. const tableFormMenu = ref([])
  921. const tableFormItemNode = ref({}) //临时信息
  922. //设置菜单权限数据
  923. const setTableFormMenu = (info) => {
  924. let newArr = [],
  925. infos = getObjValue(info)
  926. // 从infos对象中获取isOpenRandomNumber属性值,如果该属性不存在则返回0
  927. // 用于控制是否开启随机数功能的开关
  928. const isOpen = infos['isOpenRandomNumber'] ?? 0
  929. if (isTemplateType.value) {
  930. newArr.push({ label: '设置自动获取数据', key: 'auto' })
  931. }
  932. if (isOpen === 1 && isStatus.value !== 3) {
  933. newArr.push({ label: '插入设计值/频率', key: 'design' })
  934. }
  935. newArr.push({ label: '插入特殊字符', key: 'special' })
  936. newArr.push({ label: '关联试验数据', key: 'test' })
  937. newArr.push({ label: '关联试验文件', key: 'file' })
  938. newArr.push({ label: '公式参数', key: 'formula' })
  939. newArr.push({ label: '含水率', key: 'water' })
  940. if (isStatus.value !== 3) {
  941. newArr.push({ label: '清除所有数据', key: 'clear' }),
  942. newArr.push({ label: '清除字段数据', key: 'clearcur' })
  943. }
  944. console.log(treenodeDataInfo.value, 'treenodeDataInfo')
  945. tableFormMenu.value = newArr
  946. }
  947. //鼠标右键事件
  948. const tableFormRightTap = (
  949. { event, KeyName, startPos, endPos, pkeyId },
  950. index,
  951. ) => {
  952. //存储临时信息
  953. tableFormItemNode.value = { KeyName, index, startPos, endPos, pkeyId }
  954. contextMenuRef.value?.showMenu(event, false) //展开菜单
  955. }
  956. //鼠标右键菜单被点击
  957. const handleMenuSelect = async ({ key }) => {
  958. if (key === 'design') {
  959. setInitDesignForm()
  960. designModalLoading.value = false
  961. designModal.value = true
  962. } else if (key === 'special') {
  963. specialModalShow()
  964. } else if (key === 'test') {
  965. testModalLoading.value = false
  966. testModal.value = true
  967. } else if (key === 'file') {
  968. fileModalLoading.value = false
  969. fileModal.value = true
  970. } else if (key === 'formula') {
  971. formulaModalLoading.value = false
  972. formulaModal.value = true
  973. } else if (key === 'clear') {
  974. const { pkeyId, index } = tableFormItemNode.value
  975. const refs = await getFormRef(pkeyId)
  976. await HcDelMsg(async (resolve) => {
  977. const { error, code, msg } = await wbsApi.rmTabdataInfo({
  978. pkeyId: pkeyId,
  979. })
  980. if (!error && code === 200) {
  981. listDatas.value[index].isTableRender = false
  982. if (DragModalTableForm.value.length > 0) {
  983. let draindex = arrIndex(
  984. DragModalTableForm.value,
  985. 'pkeyId',
  986. pkeyId,
  987. )
  988. DragModalTableForm.value[draindex].isTableRender = false
  989. }
  990. await refs?.getTableFormInfo(pkeyId)
  991. await nextTick()
  992. listDatas.value[index].isTableRender = true
  993. listDatas.value[index].isTableForm = true
  994. if (DragModalTableForm.value.length > 0) {
  995. let draindex = arrIndex(
  996. DragModalTableForm.value,
  997. 'pkeyId',
  998. pkeyId,
  999. )
  1000. DragModalTableForm.value[draindex].isTableForm = true
  1001. DragModalTableForm.value[draindex].isTableRender = true
  1002. listDatas.value[index].isWindow = false
  1003. DragModalTableForm.value.splice(draindex, 1)
  1004. await refs?.getTableFormInfo(pkeyId)
  1005. windowClick(listDatas.value[index], index)
  1006. }
  1007. window.$message.success(msg)
  1008. } else {
  1009. window.$message.error(msg)
  1010. }
  1011. resolve() //关闭弹窗的回调
  1012. })
  1013. } else if (key === 'water') {
  1014. console.log('含水率')
  1015. const { pkeyId } = tableFormItemNode.value
  1016. const refs = await getFormRef(pkeyId)
  1017. const formData = refs?.getFormData()
  1018. const strengthKeys = getStoreValue('strengthKeys') //获取设计强度值
  1019. designStrength.value = formData[strengthKeys]
  1020. if (designStrength.value) {
  1021. waterModal.value = true
  1022. } else {
  1023. window.$message.warning('请先选择设计强度')
  1024. }
  1025. } else if (key === 'clearcur') {
  1026. const { pkeyId } = tableFormItemNode.value
  1027. const refs = await getFormRef(pkeyId)
  1028. const curFormData = refs.getFormData()
  1029. const curKeyName = tableFormItemNode.value.KeyName.split('_')[1]
  1030. // 遍历对象的属性
  1031. for (let key in curFormData) {
  1032. // 检查是否是目标元素
  1033. if (key.split('_')[1] === curKeyName) {
  1034. // 替换值
  1035. curFormData[key] = ''
  1036. }
  1037. }
  1038. refs?.setFormData(curFormData)
  1039. } else if (key === 'auto') {
  1040. console.log('自动获取数据')
  1041. autoModalDialog.value = true
  1042. isShowNum.value = false
  1043. autoModal.value = {
  1044. }
  1045. getMajorDataTypeOptions()
  1046. }
  1047. }
  1048. //插入设计值
  1049. const designModal = ref(false)
  1050. const formDesignRef = ref(null)
  1051. const formDesignModel = ref()
  1052. //初始设计值/频率表单
  1053. const setInitDesignForm = () => {
  1054. formDesignModel.value = {
  1055. type: 1,
  1056. design: '',
  1057. size: '',
  1058. dev: '',
  1059. key: '',
  1060. capacity: '',
  1061. pass: '',
  1062. pkId: '',
  1063. direction: 1,
  1064. }
  1065. }
  1066. //设计值频率计算
  1067. const designModalLoading = ref(false)
  1068. const designModalSave = async () => {
  1069. const { pkeyId, KeyName } = tableFormItemNode.value
  1070. if (pkeyId) {
  1071. designModalLoading.value = true
  1072. //const {design, size} = formDesignModel.value
  1073. const { error, code, data } = await wbsApi.queryFormulaRange({
  1074. ...formDesignModel.value,
  1075. // dev: (!design && !size) ? '±5': '',
  1076. key: KeyName,
  1077. pkId: pkeyId,
  1078. })
  1079. //处理数据
  1080. const res = getObjVal(data)
  1081. if (!error && code === 200 && res) {
  1082. try {
  1083. const refs = await getFormRef(pkeyId)
  1084. const itemFormData = refs?.getFormData()
  1085. Object.keys(data).forEach((key) => {
  1086. itemFormData[key] = data[key]
  1087. })
  1088. refs?.setFormData(itemFormData)
  1089. //执行保存
  1090. await tableFormSaveClick(itemFormData)
  1091. //关闭弹窗
  1092. designModalLoading.value = false
  1093. designModal.value = false
  1094. } catch {
  1095. designModalLoading.value = false
  1096. window?.$message?.warning('插入失败,请刷新重试')
  1097. }
  1098. } else {
  1099. designModalLoading.value = false
  1100. window?.$message?.warning('插入失败')
  1101. }
  1102. } else {
  1103. window?.$message?.warning('pkeyId为空')
  1104. }
  1105. }
  1106. //关闭设计值/频率弹窗
  1107. const closeDesignModal = () => {
  1108. designModal.value = false
  1109. setInitDesignForm()
  1110. }
  1111. //插入特殊字符
  1112. const specialModal = ref(false)
  1113. const specialModalLoading = ref(false)
  1114. const specialModalShow = () => {
  1115. specialFormValue.value = ''
  1116. specialModalLoading.value = false
  1117. specialModal.value = true
  1118. }
  1119. //监听特殊符号输入框的内容
  1120. const specialFormValue = ref('')
  1121. const specialDiaolgChange = (val) => {
  1122. specialFormValue.value = val
  1123. }
  1124. //确认插入
  1125. const specialRef = ref(null)
  1126. const specialNodeClick = async () => {
  1127. specialModalLoading.value = true
  1128. const itemNode = tableFormItemNode.value
  1129. const { KeyName, pkeyId } = itemNode
  1130. try {
  1131. const refs = await getFormRef(pkeyId)
  1132. const itemFormData = refs?.getFormData()
  1133. // eslint-disable-next-line no-unsafe-optional-chaining
  1134. const { code, val, posVal } = await specialRef.value?.getSpecialNode(
  1135. itemNode,
  1136. itemFormData[KeyName],
  1137. )
  1138. if (code === 200 && val) {
  1139. itemFormData[KeyName] = val
  1140. refs?.setFormData(itemFormData)
  1141. specialModalLoading.value = false
  1142. specialModal.value = false
  1143. await nextTick(() => {
  1144. setPosRange(KeyName, posVal)
  1145. })
  1146. } else {
  1147. specialModalLoading.value = false
  1148. }
  1149. } catch (e) {
  1150. specialModalLoading.value = false
  1151. }
  1152. }
  1153. //关闭插入特殊字符
  1154. const specialModalClose = () => {
  1155. specialModalLoading.value = false
  1156. specialModal.value = false
  1157. }
  1158. //关联试验数据
  1159. const testModal = ref(false)
  1160. const testModalLoading = ref(false)
  1161. //关联试验数据被点击
  1162. const itinsertTableId = ref('')
  1163. const itinsertTreeId = ref('')
  1164. const testTableRowName = ({ row, treeId }) => {
  1165. itinsertTableId.value = row.id
  1166. itinsertTreeId.value = treeId
  1167. insertDataLoading.value = false
  1168. insertDataShow.value = true
  1169. }
  1170. //关闭弹窗
  1171. const testModalClose = () => {
  1172. testModal.value = false
  1173. testModalLoading.value = false
  1174. }
  1175. //选择要插入的实验数据
  1176. const insertDataShow = ref(false)
  1177. const insertDataLoading = ref(false)
  1178. //确定关联试验数据数据
  1179. const insertDataRef = ref(null)
  1180. const submitinsertData = async () => {
  1181. insertDataLoading.value = true
  1182. const itemNode = tableFormItemNode.value
  1183. const { KeyName, pkeyId } = itemNode
  1184. try {
  1185. const refs = await getFormRef(pkeyId)
  1186. const itemFormData = refs?.getFormData()
  1187. // eslint-disable-next-line no-unsafe-optional-chaining
  1188. const { code, val, posVal }
  1189. = await insertDataRef.value?.submitinsertData(
  1190. itemNode,
  1191. itemFormData[KeyName],
  1192. )
  1193. if (code === 200 && val) {
  1194. itemFormData[KeyName] = val
  1195. refs?.setFormData(itemFormData)
  1196. insertDataLoading.value = false
  1197. insertDataShow.value = false
  1198. testModal.value = false
  1199. await nextTick(() => {
  1200. setPosRange(KeyName, posVal)
  1201. })
  1202. }
  1203. } catch {
  1204. insertDataLoading.value = false
  1205. }
  1206. }
  1207. //取消关联数据
  1208. const cancelinsertData = async () => {
  1209. insertDataShow.value = false
  1210. insertDataLoading.value = false
  1211. }
  1212. //关联试验文件
  1213. const fileModal = ref(false)
  1214. const testFileRefs = ref(null)
  1215. //确认关联文件
  1216. const fileModalLoading = ref(false)
  1217. const savefileModal = async () => {
  1218. fileModalLoading.value = true
  1219. await testFileRefs.value?.savefileSubmit()
  1220. fileModalLoading.value = false
  1221. fileModal.value = false
  1222. }
  1223. //关闭弹窗
  1224. const fileModalClose = () => {
  1225. fileModal.value = false
  1226. fileModalLoading.value = false
  1227. }
  1228. //公式参数配置
  1229. const formulaModal = ref(false)
  1230. const formulaRefs = ref(null)
  1231. //保存
  1232. const formulaModalLoading = ref(false)
  1233. const formulaSaveClick = async () => {
  1234. formulaModalLoading.value = true
  1235. await formulaRefs.value?.panelSave()
  1236. formulaModalLoading.value = false
  1237. formulaModal.value = false
  1238. }
  1239. //关闭
  1240. const formulaModalClose = () => {
  1241. formulaModal.value = false
  1242. formulaModalLoading.value = false
  1243. }
  1244. //窗口化
  1245. const DragModalTableForm = ref([])
  1246. const DragModalHeight = ref(600)
  1247. const windowClick = async (item, indexs) => {
  1248. const list = deepClone(DragModalTableForm.value)
  1249. let index = arrIndex(list, 'pkeyId', item.pkeyId)
  1250. if (!item.isWindow) {
  1251. const formSize = getTableFormSize(item?.pkeyId)
  1252. const newTableForm = {
  1253. ...setInitDragModalTableForm(item, indexs),
  1254. ...formSize,
  1255. }
  1256. await setChangeFormDatas(item?.pkeyId, 'window')
  1257. item.isWindow = true
  1258. //处理表单的ref
  1259. await setSpliceItemRefs(item)
  1260. //弹窗表单的排序
  1261. if (index === -1) {
  1262. list.push(newTableForm)
  1263. } else if (index !== list.length - 1) {
  1264. //检查是否在最上层,不在则置顶,可以解决多次点击时,频繁更改全局状态的问题
  1265. list.splice(index, 1)
  1266. list.push(newTableForm)
  1267. }
  1268. DragModalTableForm.value = list
  1269. ActiveKey.value = ''
  1270. } else {
  1271. await setChangeFormDatas(item?.pkeyId, 'collapse')
  1272. //处理表单的ref
  1273. await setSpliceItemRefs(item)
  1274. if (index !== -1) {
  1275. list.splice(index, 1)
  1276. DragModalTableForm.value = list
  1277. }
  1278. item.isWindow = false
  1279. }
  1280. }
  1281. //初始拖动表单的内容
  1282. const setInitDragModalTableForm = (item, index) => {
  1283. return {
  1284. projectId: projectId.value,
  1285. contractId: contract_id.value,
  1286. wbsTempId: wbsTemp_id.value,
  1287. tenantId: tenant_id.value,
  1288. wbsType: wbs_type.value,
  1289. classify: classifys.value,
  1290. treeId: treeId.value,
  1291. pkeyId: item.pkeyId,
  1292. height: '100%',
  1293. width: '100%',
  1294. title: item.nodeName,
  1295. isShow: true,
  1296. index: index,
  1297. item: item,
  1298. }
  1299. }
  1300. //关闭窗口
  1301. const TableFormClose = async ({ pkeyId, index }, indexs) => {
  1302. const list = deepClone(DragModalTableForm.value)
  1303. //取表单的数据
  1304. await setChangeFormDatas(pkeyId, 'collapse')
  1305. //关闭窗口
  1306. list.splice(indexs, 1)
  1307. DragModalTableForm.value = list
  1308. listDatas.value[index].isWindow = false
  1309. }
  1310. const dragNodeMoreMenu = [
  1311. { key: 'save', icon: 'save-2', name: '保存' },
  1312. { key: 'preview', icon: 'eye', name: '预览' },
  1313. ]
  1314. //还原窗口
  1315. const closeIconTap = async (event, item, indexs) => {
  1316. const { index, pkeyId } = item
  1317. let KeyId = `item-${index}-${pkeyId}`
  1318. await TableFormClose(item, indexs)
  1319. ActiveKey.value = KeyId
  1320. }
  1321. //菜单被点击
  1322. const dragNodeMoreMenuTap = ({ key }, items) => {
  1323. const { item } = items
  1324. if (key === 'save') {
  1325. if (item?.isTableForm) {
  1326. tableFormSaveClick(item, items)
  1327. } else {
  1328. window.$message.warning('此表单暂无数据和文件')
  1329. }
  1330. } else if (key === 'preview') {
  1331. if (
  1332. item['isBussShow'] === 2
  1333. || item['isTabPdf'] === 1
  1334. || item['pdfUrl'] === ''
  1335. || item['pdfUrl'] === null
  1336. ) {
  1337. window.$message.warning('此表单暂无可预览文件')
  1338. } else {
  1339. previewClick(item, items)
  1340. }
  1341. }
  1342. }
  1343. //删除本表
  1344. const tableFormDelLoading = ref(false)
  1345. const delClick = async ({ pkeyId }, index) => {
  1346. HcDelMsg(async (resolve) => {
  1347. if (pkeyId) {
  1348. if (isStatus.value !== 3) {
  1349. tableFormDelLoading.value = true
  1350. const { error, code, msg } = await wbsApi.removeBussTabInfo({
  1351. pkeyid: pkeyId,
  1352. classify: classifys.value,
  1353. })
  1354. tableFormDelLoading.value = false
  1355. if (!error && code === 200) {
  1356. window?.$message?.success('操作成功')
  1357. //判断是否存在窗口,如果存在,就删除窗口
  1358. delWindowRefs(pkeyId)
  1359. // renewData()
  1360. listDatas.value.splice(index, 1)
  1361. } else {
  1362. window?.$message?.error(msg || '操作失败')
  1363. }
  1364. } else {
  1365. window?.$message?.warning('已上报的资料,不允许删除')
  1366. }
  1367. } else {
  1368. window?.$message?.warning('pkeyId为空')
  1369. }
  1370. resolve() //关闭弹窗的回调
  1371. })
  1372. }
  1373. //复制本表相关
  1374. const showcopyModal = ref(false)
  1375. const copyRefs = ref(null)
  1376. const copyModalClose = () => {
  1377. // copyModal.value=false
  1378. }
  1379. const CopyModalType = ref('1')
  1380. const copySaveClick = async () => {
  1381. //本节点复制
  1382. if (CopyModalType.value === '2') {
  1383. const { pkeyId, isTableRender, isTableForm } = copyItems.value
  1384. if (pkeyId) {
  1385. if (isStatus.value !== 3) {
  1386. if (!isTableRender) {
  1387. await copeBussTab(pkeyId)
  1388. } else if (!isTableForm) {
  1389. window?.$message?.warning('暂无表单数据')
  1390. } else if (isTableRender) {
  1391. copyClickLoading.value = true
  1392. const isSave = await saveExcelBussData(items, null, false)
  1393. if (isSave) {
  1394. await copeBussTab(pkeyId)
  1395. } else {
  1396. copyClickLoading.value = false
  1397. window?.$message?.warning('复制本表操作失败')
  1398. }
  1399. } else {
  1400. window?.$message?.warning(
  1401. `数据异常了, isRenderTableForm: ${isTableRender}, isTableForm: ${isTableForm}, pkeyIds:${pkeyId}`,
  1402. )
  1403. }
  1404. } else {
  1405. window?.$message?.warning('已上报的资料,不允许复制')
  1406. }
  1407. } else {
  1408. window?.$message?.warning('pkeyId为空')
  1409. }
  1410. } else {
  1411. window?.$message?.warning('暂无相关接口')
  1412. }
  1413. }
  1414. //复制本表
  1415. const copyClickModalLoading = ref(false)
  1416. const copyClickLoading = ref(false)
  1417. const copyClick = async (items) => {
  1418. const { pkeyId, isTableRender, isTableForm } = items
  1419. if (pkeyId) {
  1420. if (isStatus.value !== 3) {
  1421. if (!isTableRender) {
  1422. await copeBussTab(pkeyId)
  1423. } else if (!isTableForm) {
  1424. window?.$message?.warning('暂无表单数据')
  1425. } else if (isTableRender) {
  1426. copyClickLoading.value = true
  1427. const isSave = await saveExcelBussData(items, null, false)
  1428. if (isSave) {
  1429. await copeBussTab(pkeyId)
  1430. } else {
  1431. copyClickLoading.value = false
  1432. window?.$message?.warning('复制本表操作失败')
  1433. }
  1434. } else {
  1435. window?.$message?.warning(
  1436. `数据异常了, isRenderTableForm: ${isTableRender}, isTableForm: ${isTableForm}, pkeyIds:${pkeyId}`,
  1437. )
  1438. }
  1439. } else {
  1440. window?.$message?.warning('已上报的资料,不允许复制')
  1441. }
  1442. } else {
  1443. window?.$message?.warning('pkeyId为空')
  1444. }
  1445. }
  1446. const copyItems = ref([])
  1447. //跨节点复制弹窗
  1448. // const copyClick = (items) => {
  1449. // showcopyModal.value=true
  1450. // copyItems.value=items
  1451. // }
  1452. //复制表的请求
  1453. const copeBussTab = async (pkeyId) => {
  1454. copyClickLoading.value = true
  1455. const { error, code, msg } = await wbsApi.copeBussTab({
  1456. pkeyId: pkeyId,
  1457. })
  1458. copyClickLoading.value = false
  1459. if (!error && code === 200) {
  1460. window?.$message?.success('操作成功')
  1461. // renewData()
  1462. getNewList()
  1463. } else {
  1464. window?.$message?.error(msg || '操作失败')
  1465. }
  1466. }
  1467. //获取表单列表
  1468. const getNewList = () => {
  1469. emit('getList')
  1470. setTimeout(() => {
  1471. let newObj = newlistdata.value
  1472. let oldObj = listDatas.value
  1473. const addedObject = newObj.find(
  1474. (obj) => !oldObj.some((oldObj) => oldObj.pkeyId === obj.pkeyId),
  1475. )
  1476. let index = arrIndex(listDatas.value, 'id', addedObject.id) // 1
  1477. listDatas.value.splice(index + 1, 0, addedObject)
  1478. }, 1000)
  1479. }
  1480. //隐藏本表
  1481. const tableFormHideLoading = ref(false)
  1482. const hideClick = async (item, index) => {
  1483. const { pkeyId, isBussShow } = item
  1484. if (pkeyId) {
  1485. if (isStatus.value !== 3) {
  1486. item.tableFormHideLoading = true
  1487. const bussShow = isBussShow === 2 ? 1 : 2 //状态(1显示 2隐藏)
  1488. const { error, code, msg } = await wbsApi.showBussTab({
  1489. pkeyId: pkeyId,
  1490. status: bussShow,
  1491. classify: classifys.value,
  1492. nodeId: treeId.value,
  1493. })
  1494. item.tableFormHideLoading = false
  1495. if (!error && code === 200) {
  1496. window?.$message?.success('操作成功')
  1497. if (isBussShow === 2) {
  1498. listDatas.value[index].isBussShow = 1
  1499. } else {
  1500. listDatas.value[index].isBussShow = 2
  1501. setActiveKey('')
  1502. }
  1503. if (bussShow === 2) {
  1504. //判断是否存在窗口,如果存在,就删除窗口
  1505. delWindowRefs(pkeyId)
  1506. }
  1507. // renewData()
  1508. } else {
  1509. window?.$message?.error(msg || '操作失败')
  1510. }
  1511. } else {
  1512. window?.$message?.warning('已上报的资料,不允许隐藏')
  1513. }
  1514. } else {
  1515. window?.$message?.warning('pkeyId为空')
  1516. }
  1517. }
  1518. //预览本表
  1519. const tableFormPreviewLoading = ref(false)
  1520. const previewClick = async (item, dragItem = null) => {
  1521. tableFormPreviewLoading.value = true
  1522. await getBussPdfInfo(item, dragItem)
  1523. tableFormPreviewLoading.value = false
  1524. }
  1525. //上传变量
  1526. const uploadModal = ref(false)
  1527. const fileListData = ref([])
  1528. const uploadData = ref({})
  1529. //上传附件
  1530. const uploadClick = (items, index) => {
  1531. const { pkeyId, isTableForm, isTableRender, isBussShow } = items
  1532. const keyName = `item-${index}-${pkeyId}`
  1533. if (pkeyId) {
  1534. if (isTableForm) {
  1535. uploadModal.value = true
  1536. uploadData.value = {
  1537. projectId: projectId.value,
  1538. contractId: contract_id.value,
  1539. classify: classifys.value,
  1540. pkeyId: pkeyId,
  1541. nodeId: treeId.value,
  1542. }
  1543. //获取文件列表
  1544. getBussFileList(pkeyId)
  1545. } else if (!isTableRender) {
  1546. if (isBussShow !== 2) {
  1547. CollapseChange(keyName)
  1548. window?.$message?.warning('请再次点击上传')
  1549. } else {
  1550. console.log('隐藏表点击')
  1551. uploadModal.value = true
  1552. uploadData.value = {
  1553. projectId: projectId.value,
  1554. contractId: contract_id.value,
  1555. classify: classifys.value,
  1556. pkeyId: pkeyId,
  1557. nodeId: treeId.value,
  1558. }
  1559. //获取文件列表
  1560. getBussFileList(pkeyId)
  1561. }
  1562. } else if (!isTableForm) {
  1563. window?.$message?.warning('暂无表单数据')
  1564. }
  1565. // else {
  1566. // window?.$message?.warning('已上报的资料,不允许上传')
  1567. // }
  1568. } else {
  1569. window?.$message?.warning('pkeyId为空')
  1570. }
  1571. }
  1572. //获取文件列表
  1573. const getBussFileList = async (pkeyId) => {
  1574. const { error, code, data } = await wbsApi.getBussFileList({
  1575. pkeyid: pkeyId,
  1576. classify: classifys.value,
  1577. })
  1578. if (!error && code === 200) {
  1579. fileListData.value = getArrValue(data)
  1580. } else {
  1581. fileListData.value = []
  1582. }
  1583. }
  1584. //上传文件
  1585. const uploadChange = async ({ type }) => {
  1586. if (type === 'success') {
  1587. uploadModal.value = false
  1588. renewData()
  1589. } else if (type === 'del') {
  1590. renewData()
  1591. }
  1592. }
  1593. //关闭上传附件窗口
  1594. const uploadModalClose = () => {
  1595. uploadModal.value = false
  1596. }
  1597. //单个保存
  1598. const tableFormSaveLoading = ref(false)
  1599. const tableFormSaveClick = async (item, dragItem = null) => {
  1600. if (isStatus.value !== 3) {
  1601. tableFormSaveLoading.value = true
  1602. const isSave = await saveExcelBussData(item, dragItem)
  1603. if (isSave) {
  1604. // await getBussPdfInfo(item, dragItem)
  1605. tableFormSaveLoading.value = false
  1606. renewData()
  1607. } else {
  1608. tableFormSaveLoading.value = false
  1609. }
  1610. } else {
  1611. window?.$message?.warning('已上报的资料,不允许保存。')
  1612. }
  1613. }
  1614. //保存表单数据
  1615. const inputTitle = ref('')
  1616. const saveExcelBussData = async (
  1617. { pkeyId },
  1618. dragItem = null,
  1619. showTip = true,
  1620. ) => {
  1621. setDragModalLoading(dragItem, '保存中...', true)
  1622. const refs = await getFormRef(pkeyId)
  1623. const isRegExp = await refs?.isFormRegExp()
  1624. if (isRegExp) {
  1625. const formData = refs?.getFormData()
  1626. const { error, code, msg, data } = await wbsApi.saveExcelBussData(formData)
  1627. setDragModalLoading(dragItem)
  1628. if (!error && code === 200) {
  1629. if (showTip) {
  1630. inputTitle.value = data || ''
  1631. window?.$message?.success('保存成功')
  1632. }
  1633. return true
  1634. } else {
  1635. inputTitle.value = ''
  1636. window.$message.error(msg || '操作失败')
  1637. return false
  1638. }
  1639. } else {
  1640. setDragModalLoading(dragItem)
  1641. return false
  1642. }
  1643. }
  1644. //预览PDF
  1645. const getBussPdfInfo = async ({ pkeyId }, dragItem = null, showTip = true) => {
  1646. setDragModalLoading(dragItem, '获取pdf中...', true)
  1647. const { error, code, data } = await wbsApi.getBussPdfInfo(
  1648. {
  1649. pkeyId: pkeyId,
  1650. },
  1651. false,
  1652. )
  1653. setDragModalLoading(dragItem)
  1654. if (!error && code === 200) {
  1655. if (data) {
  1656. toPdfPage(data)
  1657. //window.open(data, '_blank')
  1658. } else if (showTip) {
  1659. window?.$message?.warning('PDF错误')
  1660. }
  1661. } else {
  1662. if (showTip) {
  1663. window?.$message?.warning(data.msg || '获取PDF失败')
  1664. }
  1665. }
  1666. }
  1667. //通知数据更新
  1668. const renewData = () => {
  1669. emit('renew', ActiveKey.value)
  1670. ActiveKey.value = ''
  1671. }
  1672. //设置表单的加载状态
  1673. const setDragModalLoading = (dragItem, text = '保存中...', show = false) => {
  1674. if (dragItem && show) {
  1675. dragItem.loading = true
  1676. dragItem.loadingText = text
  1677. }
  1678. if (dragItem && !show) {
  1679. dragItem.loading = false
  1680. }
  1681. }
  1682. //获取表单的ref
  1683. const getFormRef = async (pkeyId) => {
  1684. const itemRef = getArrValue(itemRefs.value)
  1685. if (itemRef.length <= 0) return ''
  1686. const index = arrIndex(itemRef, 'pkeyId', pkeyId)
  1687. if (index === -1) return ''
  1688. const obj = getObjValue(itemRef[index])
  1689. return obj?.ref
  1690. }
  1691. //删除打开的窗口
  1692. const delWindowRefs = (pkeyId) => {
  1693. //判断是否存在窗口,如果存在,就删除窗口
  1694. const list = DragModalTableForm.value
  1695. const index = arrIndex(list, 'pkeyId', pkeyId)
  1696. if (index !== -1) {
  1697. list.splice(index, 1)
  1698. DragModalTableForm.value = list
  1699. }
  1700. }
  1701. //计算展开高度和滚动位置
  1702. const getOffsetTop = (key = '') => {
  1703. if (key) {
  1704. const dom = document.getElementById(key)
  1705. if (!draw_type.value) {
  1706. if (dom?.offsetTop >= 583 && key) {
  1707. emit('offsetTop', dom?.offsetTop - 583)
  1708. } else {
  1709. emit('offsetTop', dom?.offsetTop)
  1710. }
  1711. } else {
  1712. if (dom.offsetTop >= 424 && key) {
  1713. emit('offsetTop', dom?.offsetTop - 424)
  1714. } else {
  1715. emit('offsetTop', dom?.offsetTop)
  1716. }
  1717. }
  1718. } else {
  1719. emit('offsetTop', 0)
  1720. }
  1721. ActiveKey.value = key
  1722. }
  1723. //获取折叠面板的索引
  1724. const getCollapseItemIndex = (name) => {
  1725. const keys = name.split('-')
  1726. if (keys.length > 0) {
  1727. return keys[1]
  1728. } else {
  1729. return -1
  1730. }
  1731. }
  1732. //获取表单的大小
  1733. const getTableFormSize = (pkeyId) => {
  1734. let formId = `table-form-${pkeyId}`
  1735. try {
  1736. const { clientWidth, clientHeight }
  1737. = document.getElementById(formId).children[0]
  1738. return {
  1739. width: clientWidth + 40 + 'px',
  1740. height: clientHeight + 80 + 'px',
  1741. }
  1742. } catch {
  1743. return {
  1744. width: '100%',
  1745. height: '100%',
  1746. }
  1747. }
  1748. }
  1749. //转字符串
  1750. const setToString = (val) => {
  1751. return val ? val + '' : ''
  1752. }
  1753. //表单被点击
  1754. const presentId = ref('')
  1755. const excelTableFormClick = (key) => {
  1756. presentId.value = key
  1757. }
  1758. //缓存被激活时
  1759. onActivated(() => {
  1760. if (isEnableBulk.value) {
  1761. setMountOnEventKey()
  1762. }
  1763. })
  1764. //开启/关闭 批量复制
  1765. const enableBulkReplication = async () => {
  1766. const res = !isEnableBulk.value
  1767. HTableForm.setEnableBulk(res)
  1768. if (res) {
  1769. setMountOnEventKey()
  1770. } else {
  1771. HTableForm.unmountEventKey()
  1772. const refs = await setOnFuncFormRef()
  1773. refs?.setIsCtrlKey(false)
  1774. }
  1775. isEnableBulk.value = res
  1776. setStoreValue('isEnableBulk', res)
  1777. }
  1778. //缓存时被移除
  1779. onDeactivated(() => {
  1780. HTableForm.unmountEventKey()
  1781. })
  1782. //页面被卸载
  1783. onUnmounted(() => {
  1784. HTableForm.unmountEventKey()
  1785. })
  1786. const setMountOnEventKey = () => {
  1787. HTableForm.setOnEventKey({
  1788. vEnableBulk: isEnableBulk.value,
  1789. //按下ctrl键 或 control 键
  1790. onCtrlDown: async () => {
  1791. //window.$HcLog('全局按键', '按下ctrl键 或 control 键')
  1792. const refs = await setOnFuncFormRef()
  1793. refs?.setIsCtrlKey(true)
  1794. },
  1795. //按下复制快捷键
  1796. onCtrlDownC: async (event) => {
  1797. //window.$HcLog('全局按键', '按下复制快捷键')
  1798. const refs = await setOnFuncFormRef()
  1799. refs?.setCopyKeyList(event)
  1800. },
  1801. //按下粘贴快捷键
  1802. onCtrlDownV: async (event) => {
  1803. //window.$HcLog('全局按键', '按下粘贴快捷键')
  1804. const refs = await setOnFuncFormRef()
  1805. await refs?.setPasteKeyList(event)
  1806. },
  1807. //放开ctrl键 或 control 键
  1808. onCtrlUp: async () => {
  1809. //window.$HcLog('全局按键', '放开ctrl键 或 control 键')
  1810. const refs = await setOnFuncFormRef()
  1811. refs?.setIsCtrlKey(false)
  1812. },
  1813. })
  1814. }
  1815. //获取表单的ref
  1816. const setOnFuncFormRef = async () => {
  1817. const pkeyId = presentId.value
  1818. if (!isNullES(pkeyId)) {
  1819. return await getFormRef(pkeyId)
  1820. } else {
  1821. return
  1822. }
  1823. }
  1824. //获取已渲染的表单
  1825. const getFilterFormData = async () => {
  1826. const formArr = formDataList.value
  1827. return formArr.filter((item) => {
  1828. return (item.pkeyId ?? '') !== '' && item.isCollapseLoad
  1829. })
  1830. }
  1831. //获取表单数据
  1832. const getFormData = async () => {
  1833. const formArr = await getFilterFormData()
  1834. //获取表单数据
  1835. let newArr = []
  1836. for (let i = 0; i < formArr.length; i++) {
  1837. const pkeyId = formArr[i].pkeyId
  1838. const refs = await getFormRef(pkeyId)
  1839. const form = refs?.getFormData()
  1840. newArr.push({ ...form })
  1841. }
  1842. console.log('表单数据', newArr)
  1843. return newArr
  1844. }
  1845. //获取表单效验数据
  1846. const getFormRegExpJson = async () => {
  1847. const formArr = await getFilterFormData()
  1848. const list = listDatas.value
  1849. //获取表单数据
  1850. let formRegExpJson = {}
  1851. for (let i = 0; i < formArr.length; i++) {
  1852. const pkeyId = formArr[i].pkeyId
  1853. const refs = await getFormRef(pkeyId)
  1854. const regExp = refs?.getRegExpJson()
  1855. const nodeName = refs?.getNodeName()
  1856. if (getObjVal(regExp)) {
  1857. const index = arrIndex(list, 'pkeyId', pkeyId)
  1858. formRegExpJson[pkeyId] = {
  1859. ...regExp,
  1860. itemId: `item-${index}-${pkeyId}`,
  1861. nodeName: nodeName,
  1862. }
  1863. }
  1864. }
  1865. return formRegExpJson
  1866. }
  1867. //获取当前展开项
  1868. const getActiveKey = () => {
  1869. return ActiveKey.value
  1870. }
  1871. //设置当前展开项
  1872. const setActiveKey = (key) => {
  1873. return (ActiveKey.value = key)
  1874. }
  1875. //导入模板
  1876. const checkItem = ref({})
  1877. //打开文件选择框
  1878. const uploadFileClick = (item) => {
  1879. checkItem.value = item
  1880. HcUploadFileApi({
  1881. url: '/api/blade-manager/wbsTreeContract/import-excel',
  1882. accept: '.png,.jpg,jpeg,.xls,.xlsx,.pdf,.doc,.docx',
  1883. accept_tip: '图片(png、jpg、jpeg)<br/>Excel(xls、xlsx)<br/>PDF<br/>Word(doc、docx)',
  1884. size: 80,
  1885. multiple: false,
  1886. params: { pKeyId: item.pkeyId },
  1887. success: async (file, res) => {
  1888. const refs = await getFormRef(item.pkeyId)
  1889. refs?.setFormData(res.data)
  1890. window.$message.success('文件上传成功')
  1891. },
  1892. error: () => {
  1893. window.$message.error('文件上传失败')
  1894. },
  1895. })
  1896. }
  1897. const downloadLoading = ref(false)
  1898. const getdownloadExcel = async (pKeyId) => {
  1899. downloadLoading.value = true
  1900. const { error, disposition, res } = await wbsApi.downloadExcel({
  1901. pKeyId: pKeyId,
  1902. })
  1903. //处理数据
  1904. downloadLoading.value = false
  1905. if (!error) {
  1906. if (disposition) {
  1907. downloadBlob(res, disposition)
  1908. } else {
  1909. window.$message?.error('数据异常')
  1910. }
  1911. }
  1912. }
  1913. //下载模板
  1914. const downModal = (item) => {
  1915. const { pkeyId } = item
  1916. // if (isStatus.value === 3) {
  1917. // window?.$messageBox?.alert('是否选择把数据一起导出?', '下载模板', {
  1918. // showCancelButton: true,
  1919. // confirmButtonText: '是',
  1920. // cancelButtonText: '否',
  1921. // callback: (action) => {
  1922. // if (action === 'confirm') {
  1923. // console.log('数据')
  1924. // } else if ( action === 'cancel') {
  1925. // console.log('清表')
  1926. // getdownloadExcel(pkeyId)
  1927. // }
  1928. // },
  1929. // })
  1930. // } else {
  1931. // console.log('清表')
  1932. // getdownloadExcel(pkeyId)
  1933. // }
  1934. getdownloadExcel(pkeyId)
  1935. }
  1936. //含水率弹窗
  1937. const waterModal = ref(false)
  1938. const waterModalClose = () => {
  1939. waterModal.value = false
  1940. }
  1941. const waterRefs = ref(null)
  1942. const designStrength = ref('') //设计强度值
  1943. const waterSaveClick = async () => {
  1944. let resdata = await waterRefs.value?.waterSave()
  1945. const { pkeyId } = tableFormItemNode.value
  1946. const refs = await getFormRef(pkeyId)
  1947. refs?.setFormData(resdata)
  1948. waterModal.value = false
  1949. }
  1950. //操作提示
  1951. const actionTipModal = ref(false)
  1952. const actionTipModalClose = () => {
  1953. actionTipModal.value = false
  1954. }
  1955. //评定汇总---未测
  1956. const evaluateLoaing = ref(false)
  1957. const evaluate = async (item) => {
  1958. const { projectId } = item
  1959. evaluateLoaing.value = true
  1960. const { error, code, msg, data } = await wbsApi.evaluateIsWater({
  1961. projectId: projectId,
  1962. })
  1963. if (!error && code === 200) {
  1964. getEvaluteData(data, item)
  1965. } else {
  1966. window?.$message?.error(msg || '操作失败')
  1967. }
  1968. }
  1969. const getEvaluteData = async (isRes, item) => {
  1970. const { pkeyId } = item
  1971. if (isRes) {
  1972. const { error, code, msg } = await wbsApi.evaluateTotalNew({
  1973. tablePkeyId: pkeyId,
  1974. })
  1975. evaluateLoaing.value = false
  1976. if (!error && code === 200) {
  1977. window?.$message?.success('操作成功')
  1978. renewData()
  1979. } else {
  1980. window?.$message?.error(msg || '操作失败')
  1981. }
  1982. } else {
  1983. const { error, code, msg } = await wbsApi.evaluateTotal({
  1984. tablePkeyId: pkeyId,
  1985. })
  1986. evaluateLoaing.value = false
  1987. if (!error && code === 200) {
  1988. window?.$message?.success('操作成功')
  1989. renewData()
  1990. } else {
  1991. window?.$message?.error(msg || '操作失败')
  1992. }
  1993. }
  1994. }
  1995. //设置自动获取
  1996. const autoModalDialog = ref(false)
  1997. const autoModal = ref({
  1998. type:'',
  1999. })
  2000. const dataType = ref([])
  2001. const getMajorDataTypeOptions = async () => {
  2002. const { data } = await getDictionary({ code:'auto_retrieve' })
  2003. dataType.value = data
  2004. }
  2005. const isShowNum = ref(false)
  2006. const autoChangeType = (val)=>{
  2007. isShowNum.value = String(val).includes('8')
  2008. }
  2009. const autoSaveClick = async ()=>{
  2010. const { KeyName, pkeyId } = tableFormItemNode.value
  2011. const refs = await getFormRef(pkeyId)
  2012. const itemFormData = refs?.getFormData()
  2013. let max
  2014. let min
  2015. if (isShowNum.value && !autoModal.value.customValue ) {
  2016. window.$message?.error('高程偏差/顶面偏差')
  2017. return
  2018. }
  2019. if (isShowNum.value && autoModal.value?.customValue.length > 0) {
  2020. const values = autoModal.value.customValue.split('/')
  2021. // 检查格式是否为 数字/数字
  2022. if (values.length !== 2) {
  2023. window.$message?.error('请输入正确格式的高程偏差/顶面高差')
  2024. return
  2025. }
  2026. // 检查两个值是否都是合法数字
  2027. const isValidNumber = (num) => !isNaN(num) && num.toString().trim().length > 0
  2028. if (!isValidNumber(values[0]) || !isValidNumber(values[1])) {
  2029. window.$message?.error('请输入正确的数字格式')
  2030. return
  2031. }
  2032. min = values[0]
  2033. max = values[1]
  2034. min = autoModal.value.customValue.split('/')[0]
  2035. max = autoModal.value.customValue.split('/')[1]
  2036. }
  2037. const { error, code, msg, data } = await nodeBaseApi.getNodeBaseInfoByPkeyId(
  2038. {
  2039. nodeId: treeId.value,
  2040. pkeyId: pkeyId,
  2041. autoType:autoModal.value.type.join(','),
  2042. max:max,
  2043. min:min,
  2044. paramName:KeyName,
  2045. },
  2046. )
  2047. if (!error && code === 200) {
  2048. console.log(data, 'data')
  2049. itemFormData[KeyName] = data
  2050. refs?.setFormData(itemFormData)
  2051. window.$message?.success(msg || '操作成功')
  2052. autoModalDialog.value = false
  2053. }
  2054. }
  2055. const autoClick = async (item)=>{
  2056. console.log(item, 'item')
  2057. const { pkeyId } = item
  2058. // Close collapse panel
  2059. ActiveKey.value = ''
  2060. await nextTick()
  2061. setTimeout(async () => {
  2062. const refs = await getFormRef(pkeyId)
  2063. const { error, code, msg, data } = await nodeBaseApi.getAllNodeBaseInfoByPkeyId(
  2064. {
  2065. nodeId: treeId.value,
  2066. pkeyId: pkeyId,
  2067. },
  2068. )
  2069. if (!error && code === 200) {
  2070. console.log(data, 'data')
  2071. refs?.setFormData(data)
  2072. }
  2073. }, 1000)
  2074. }
  2075. // 暴露出去
  2076. defineExpose({
  2077. getFormData,
  2078. getFormRegExpJson,
  2079. getActiveKey,
  2080. setActiveKey,
  2081. setCollapseKey,
  2082. })
  2083. </script>
  2084. <style lang="scss" scoped>
  2085. @import "./index.scss";
  2086. </style>
  2087. <style lang="scss">
  2088. @import "./style.scss";
  2089. </style>