c.html 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport"
  6. content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" />
  7. <script>
  8. if (!String.prototype.replaceAll) {
  9. String.prototype.replaceAll = function(search, replacement) {
  10. var target = String(this)
  11. if (search instanceof RegExp) {
  12. return target.replace(search, replacement)
  13. }
  14. return target.split(search).join(replacement)
  15. }
  16. }
  17. </script>
  18. <link rel="stylesheet" href="./resource/vantIndex.css" />
  19. <link rel="stylesheet" href="./vue-form-making/index.css">
  20. </head>
  21. <body>
  22. <style>
  23. :root:root {
  24. --van-nav-bar-background: rgb(21, 122, 44);
  25. --van-nav-bar-title-text-color: rgb(255, 255, 255);
  26. --van-nav-bar-icon-color: rgb(255, 255, 255);
  27. }
  28. .blank_adopzrdd {
  29. display: flex;
  30. align-items: center;
  31. margin-bottom: 10px;
  32. }
  33. .blank_adopzrdd >span {
  34. display: inline-block;
  35. width: 80px;
  36. }
  37. .van-nav-bar--fixed {
  38. top: 44px;
  39. }
  40. .seal-card { background: #fff; border-radius: 8px; margin-bottom: 10px; overflow: hidden; box-shadow: 0 1px 4px rgba(0,0,0,.08); }
  41. .seal-card-header { display: flex; align-items: center; padding: 10px 12px; background: #f7f8fa; border-bottom: 1px solid #ebedf0; }
  42. .seal-card-index { font-size: 14px; font-weight: bold; color: #157A2C; margin-right: 8px; }
  43. .seal-card-type { flex: 1; font-size: 15px; font-weight: bold; color: #323233; }
  44. .seal-card-actions { display: flex; gap: 6px; flex-shrink: 0; }
  45. .seal-card-body { padding: 8px 12px; }
  46. .seal-card-row { display: flex; padding: 6px 0; font-size: 13px; }
  47. .seal-card-label { width: 42px; color: #969799; flex-shrink: 0; }
  48. .seal-card-value { flex: 1; color: #323233; word-break: break-all; }
  49. </style>
  50. <div id="app">
  51. <van-nav-bar height='100rpx' @click-left="onClickLeft"
  52. style="background-color: rgb(21, 122, 44);color: rgb(255, 255, 255);" :title="title" left-arrow
  53. :safe-area-inset-top='true' :placeholder='true' :fixed='true'></van-nav-bar>
  54. <fm-generate-vant-form style='height: 75vh !important;overflow: auto;margin-top:44px' v-if='isFlag'
  55. :data="jsonData" :value="form.valueJson" ref="generateForm" :edit='false' @on-upload-local="handleUploadLocal">
  56. <template v-slot:blank_adopzrdd="scope">
  57. <div style="width: 100%;">
  58. <div v-for="(item, index) in scope.model.blank_adopzrdd" :key="index" style="width: 100%;">
  59. <div class="blank_adopzrdd">
  60. <span>{{ index + 1 }}报销事项:</span>
  61. <van-field rows="1" v-model="scope.model.blank_adopzrdd[index].remark" type="textarea"
  62. autosize style="width: calc(100% - 80px)"></van-field>
  63. </div>
  64. <div class="blank_adopzrdd">
  65. <span>
  66. 金额:</span>
  67. <van-field v-model="scope.model.blank_adopzrdd[index].price" type="number"
  68. style="width: calc(100% - 80px)"></van-field>
  69. </div>
  70. <div class="blank_adopzrdd">
  71. <span>
  72. <van-icon @click="delNewRow('blank_adopzrdd', index)" name="delete"
  73. style="color: #f56c6c;"></van-icon>
  74. 附件:</span>
  75. <template v-if="item.files && item.files.length">
  76. <van-badge :content="item.files.length">
  77. <van-button type="primary" size="mini" @click="handleUploadLocal('blank_adopzrdd', index)">查看附件</van-button>
  78. </van-badge>
  79. </template>
  80. <!-- <van-button v-else type="primary" size="mini" @click="handleUploadLocal('blank_adopzrdd', index)">上传附件</van-button> -->
  81. </div>
  82. </div>
  83. </div>
  84. </template>
  85. <template v-slot:blank_use_seal="scope">
  86. <div style="width: 100%;">
  87. <!-- 列表项 -->
  88. <view v-for="(item, index) in scope.model.blank_use_seal" :key="index" class="seal-card">
  89. <div class="seal-card-header">
  90. <span class="seal-card-index">{{ index + 1 }}.</span>
  91. <span class="seal-card-type">{{ item.useSealType || '未选择类型' }}</span>
  92. <!-- <div class="seal-card-actions">
  93. <van-button size="mini" type="primary" plain @click="openSealEditDialog(scope, 'edit', index)">编辑</van-button>
  94. <van-button size="mini" type="danger" plain @click="delNewRow('blank_use_seal', index)">删除</van-button>
  95. </div> -->
  96. </div>
  97. <div class="seal-card-body">
  98. <div class="seal-card-row">
  99. <span class="seal-card-label">事由</span>
  100. <span class="seal-card-value">{{ item.useSealRemark || '未填写' }}</span>
  101. </div>
  102. <div class="seal-card-row">
  103. <span class="seal-card-label">印章</span>
  104. <span class="seal-card-value">{{ item.useSealName || '未选择' }}</span>
  105. </div>
  106. </div>
  107. </view>
  108. <!-- <van-button type="primary" size="small" block @click="openSealEditDialog(scope, 'add', scope.model.blank_use_seal?scope.model.blank_use_seal.length:0)" style="margin-bottom:10px">+ 添加印章使用</van-button> -->
  109. </div>
  110. </template>
  111. <template v-slot:blank_use_qualification="scope">
  112. <div style="width: 100%;">
  113. <view v-for="(item, index) in scope.model.blank_use_qualification" :key="index" class="seal-card">
  114. <div class="seal-card-header">
  115. <span class="seal-card-index">{{ index + 1 }}.</span>
  116. <span class="seal-card-type">{{ item.useQualificationType || '未选择类型' }}</span>
  117. <!-- <div class="seal-card-actions">
  118. <van-button size="mini" type="primary" plain @click="openQualEditDialog(scope, 'edit', index)">编辑</van-button>
  119. <van-button size="mini" type="danger" plain @click="delNewRow('blank_use_qualification', index)">删除</van-button>
  120. </div> -->
  121. </div>
  122. <div class="seal-card-body">
  123. <div class="seal-card-row">
  124. <span class="seal-card-label">事由</span>
  125. <span class="seal-card-value">{{ item.useQualificationRemark || '未填写' }}</span>
  126. </div>
  127. <div class="seal-card-row">
  128. <span class="seal-card-label">名称</span>
  129. <span class="seal-card-value">{{ item.useQualificationName || '未选择' }}</span>
  130. </div>
  131. </div>
  132. </view>
  133. <!-- <van-button type="primary" size="small" block @click="openQualEditDialog(scope, 'add', scope.model.blank_use_qualification?scope.model.blank_use_qualification.length:0)" style="margin-bottom:10px">+ 添加资质使用</van-button> -->
  134. </div>
  135. </template>
  136. <template v-slot:blank_application_component="scope">
  137. <div style="width: 100%;">
  138. <view v-for="(item, index) in scope.model.blank_application_component" :key="index" class="seal-card">
  139. <div class="seal-card-header">
  140. <span class="seal-card-index">{{ index + 1 }}.</span>
  141. <span class="seal-card-type">{{ item.productName || '未选择产品' }}</span>
  142. <!-- <div class="seal-card-actions">
  143. <van-button size="mini" type="primary" plain @click="openAppEditDialog(scope, 'edit', index)">编辑</van-button>
  144. <van-button size="mini" type="danger" plain @click="delNewRow('blank_application_component', index)">删除</van-button>
  145. </div> -->
  146. </div>
  147. <div class="seal-card-body">
  148. <div class="seal-card-row">
  149. <span class="seal-card-label">数量</span>
  150. <span class="seal-card-value">{{ item.quantity || '未填写' }}</span>
  151. </div>
  152. <div class="seal-card-row">
  153. <span class="seal-card-label">规格</span>
  154. <span class="seal-card-value">{{ item.specification || '未填写' }}</span>
  155. </div>
  156. </div>
  157. </view>
  158. <!-- <van-button type="primary" size="small" block @click="openAppEditDialog(scope, 'add', scope.model.blank_application_component?scope.model.blank_application_component.length:0)" style="margin-bottom:10px">+ 添加产品</van-button> -->
  159. </div>
  160. </template>
  161. <template v-slot:blank_business_trip="scope">
  162. <div style="width: 100%;">
  163. <view v-for="(item, index) in scope.model.blank_business_trip" :key="index" class="seal-card">
  164. <div class="seal-card-header">
  165. <span class="seal-card-index">{{ index + 1 }}.</span>
  166. <span class="seal-card-type">{{ item.transportation || '未知交通' }} {{ item.departureCity || '?' }}→{{ item.destinationCity || '?' }}</span>
  167. <!-- <div class="seal-card-actions">
  168. <van-button size="mini" type="primary" plain @click="openTripEditDialog(scope, 'edit', index)">编辑</van-button>
  169. <van-button size="mini" type="danger" plain @click="delNewRow('blank_business_trip', index);calcTripTotal(scope)">删除</van-button>
  170. </div> -->
  171. </div>
  172. <div class="seal-card-body">
  173. <div class="seal-card-row">
  174. <span class="seal-card-label">往返</span>
  175. <span class="seal-card-value">{{ item.isRoundTrip || '未填写' }}</span>
  176. </div>
  177. <div class="seal-card-row">
  178. <span class="seal-card-label">时间</span>
  179. <span class="seal-card-value">{{ item.startTime || '-' }} ~ {{ item.endTime || '-' }}</span>
  180. </div>
  181. <div class="seal-card-row">
  182. <span class="seal-card-label">时长</span>
  183. <span class="seal-card-value">{{ item.duration || '-' }}</span>
  184. </div>
  185. </div>
  186. </view>
  187. <!-- <van-button type="primary" size="small" block @click="openTripEditDialog(scope, 'add', scope.model.blank_business_trip?scope.model.blank_business_trip.length:0)" style="margin-bottom:10px">+ 添加行程</van-button> -->
  188. </div>
  189. </template>
  190. <template v-slot:blank_purchase_requisition="scope">
  191. <div style="width: 100%;">
  192. <view v-for="(item, index) in scope.model.blank_purchase_requisition" :key="index" class="seal-card">
  193. <div class="seal-card-header">
  194. <span class="seal-card-index">{{ index + 1 }}.</span>
  195. <span class="seal-card-type">{{ item.materialName || '未填写物料' }} ×{{ item.quantity||0 }}{{ item.unit||'' }}</span>
  196. <!-- <div class="seal-card-actions">
  197. <van-button size="mini" type="primary" plain @click="openPrEditDialog(scope, 'edit', index)">编辑</van-button>
  198. <van-button size="mini" type="danger" plain @click="delNewRow('blank_purchase_requisition', index)">删除</van-button>
  199. </div> -->
  200. </div>
  201. <div class="seal-card-body">
  202. <div class="seal-card-row">
  203. <span class="seal-card-label">规格</span>
  204. <span class="seal-card-value">{{ item.specification || '-' }}</span>
  205. </div>
  206. <div class="seal-card-row">
  207. <span class="seal-card-label">用途</span>
  208. <span class="seal-card-value">{{ item.purpose || '-' }}</span>
  209. </div>
  210. <div class="seal-card-row">
  211. <span class="seal-card-label">交付</span>
  212. <span class="seal-card-value">{{ item.expectedDeliveryDate || '-' }}</span>
  213. </div>
  214. <div class="seal-card-row" v-if="item.remark">
  215. <span class="seal-card-label">备注</span>
  216. <span class="seal-card-value">{{ item.remark }}</span>
  217. </div>
  218. </div>
  219. </view>
  220. <!-- <van-button type="primary" size="small" block @click="openPrEditDialog(scope, 'add', scope.model.blank_purchase_requisition?scope.model.blank_purchase_requisition.length:0)" style="margin-bottom:10px">+ 添加物料</van-button> -->
  221. </div>
  222. </template>
  223. <template v-slot:blank_business_component="scope">
  224. <div style="width: 100%;">
  225. <view v-for="(item, index) in scope.model.blank_business_component" :key="index" class="seal-card">
  226. <div class="seal-card-header">
  227. <span class="seal-card-index">{{ index + 1 }}.</span>
  228. <span class="seal-card-type">{{ item.transportationWay || '未知交通' }} {{ item.startPlace || '?' }}→{{ item.endPlace || '?' }}</span>
  229. <!-- <div class="seal-card-actions">
  230. <van-button size="mini" type="primary" plain @click="openBusinessEditDialog(scope, 'edit', index)">编辑</van-button>
  231. <van-button size="mini" type="danger" plain @click="delNewRow('blank_business_component', index);calcBizTotal(scope)">删除</van-button>
  232. </div> -->
  233. </div>
  234. <div class="seal-card-body">
  235. <div class="seal-card-row">
  236. <span class="seal-card-label">出发</span>
  237. <span class="seal-card-value">{{ item.startDate || '-' }}</span>
  238. </div>
  239. <div class="seal-card-row">
  240. <span class="seal-card-label">到达</span>
  241. <span class="seal-card-value">{{ item.endDate || '-' }}</span>
  242. </div>
  243. <div class="seal-card-row">
  244. <span class="seal-card-label">出发地</span>
  245. <span class="seal-card-value">{{ item.startPlace || '-' }}</span>
  246. </div>
  247. <div class="seal-card-row">
  248. <span class="seal-card-label">到达地</span>
  249. <span class="seal-card-value">{{ item.endPlace || '-' }}</span>
  250. </div>
  251. <div class="seal-card-row">
  252. <span class="seal-card-label">交通</span>
  253. <span class="seal-card-value">{{ item.transportationWay || '-' }}</span>
  254. </div>
  255. <div class="seal-card-row">
  256. <span class="seal-card-label">费用</span>
  257. <span class="seal-card-value">¥{{ item.price || '0' }}</span>
  258. </div>
  259. </div>
  260. </view>
  261. <!-- <van-button type="primary" size="small" block @click="openBusinessEditDialog(scope, 'add', scope.model.blank_business_component?scope.model.blank_business_component.length:0)" style="margin-bottom:10px">+ 添加交通费用</van-button> -->
  262. </div>
  263. </template>
  264. <template v-slot:blank_product_specification="scope">
  265. <div style="width: 100%;">
  266. <view v-for="(item, index) in scope.model.blank_product_specification" :key="index" class="seal-card">
  267. <div class="seal-card-header">
  268. <span class="seal-card-index">{{ index + 1 }}.</span>
  269. <span class="seal-card-type">{{ item.specification || '未填写规格' }}</span>
  270. <!-- <div class="seal-card-actions">
  271. <van-button size="mini" type="primary" plain @click="openSpecEditDialog(scope, 'edit', index)">编辑</van-button>
  272. <van-button size="mini" type="danger" plain @click="delNewRow('blank_product_specification', index)">删除</van-button>
  273. </div> -->
  274. </div>
  275. <div class="seal-card-body">
  276. <div class="seal-card-row">
  277. <span class="seal-card-label">规格</span>
  278. <span class="seal-card-value">{{ item.specification || '-' }}</span>
  279. </div>
  280. <div class="seal-card-row">
  281. <span class="seal-card-label">数量</span>
  282. <span class="seal-card-value">{{ item.num || '-' }}</span>
  283. </div>
  284. <div class="seal-card-row">
  285. <span class="seal-card-label">批号</span>
  286. <span class="seal-card-value">{{ item.batchNo || '-' }}</span>
  287. </div>
  288. </div>
  289. </view>
  290. <!-- <van-button type="primary" size="small" block @click="openSpecEditDialog(scope, 'add', scope.model.blank_product_specification?scope.model.blank_product_specification.length:0)" style="margin-bottom:10px">+ 添加产品规格</van-button> -->
  291. </div>
  292. </template>
  293. <template v-slot:blank_event_component="scope">
  294. <div style="width: 100%;">
  295. <view v-for="(item, index) in scope.model.blank_event_component" :key="index" class="seal-card">
  296. <div class="seal-card-header">
  297. <span class="seal-card-index">{{ index + 1 }}.</span>
  298. <span class="seal-card-type">{{ item.eventHospital || '未填写医院' }}</span>
  299. <!-- <div class="seal-card-actions">
  300. <van-button size="mini" type="primary" plain @click="openEventEditDialog(scope, 'edit', index)">编辑</van-button>
  301. <van-button size="mini" type="danger" plain @click="delNewRow('blank_event_component', index)">删除</van-button>
  302. </div> -->
  303. </div>
  304. <div class="seal-card-body">
  305. <div class="seal-card-row">
  306. <span class="seal-card-label">时间</span>
  307. <span class="seal-card-value">{{ item.eventTime || '-' }}</span>
  308. </div>
  309. <div class="seal-card-row">
  310. <span class="seal-card-label">描述</span>
  311. <span class="seal-card-value">{{ item.eventDesc || '-' }}</span>
  312. </div>
  313. <div class="seal-card-row">
  314. <span class="seal-card-label">附件</span>
  315. <div style="flex:1">
  316. <van-badge v-if="item.files && item.files.length" :content="item.files.length">
  317. <van-button size="small" type="primary" @click="handleUploadLocal('blank_event_component', index)">查看附件</van-button>
  318. </van-badge>
  319. <van-button v-else size="small" type="primary" @click="handleUploadLocal('blank_event_component', index)">查看附件</van-button>
  320. </div>
  321. </div>
  322. <div class="seal-card-row">
  323. <span class="seal-card-label">意见</span>
  324. <span class="seal-card-value">{{ item.eventOpinion || '-' }}</span>
  325. </div>
  326. </div>
  327. </view>
  328. <!-- <van-button type="primary" size="small" block @click="openEventEditDialog(scope, 'add', scope.model.blank_event_component?scope.model.blank_event_component.length:0)" style="margin-bottom:10px">+ 添加事件</van-button> -->
  329. </div>
  330. </template>
  331. <template v-slot:blank_reissue_component="scope">
  332. <div style="width: 100%;">
  333. <view v-for="(item, index) in scope.model.blank_reissue_component" :key="index" class="seal-card">
  334. <div class="seal-card-header">
  335. <span class="seal-card-index">{{ index + 1 }}.</span>
  336. <span class="seal-card-type">{{ item.reissueType || '未填写类型' }}</span>
  337. <!-- <div class="seal-card-actions">
  338. <van-button size="mini" type="primary" plain @click="openReissueEditDialog(scope, 'edit', index)">编辑</van-button>
  339. <van-button size="mini" type="danger" plain @click="delNewRow('blank_reissue_component', index)">删除</van-button>
  340. </div> -->
  341. </div>
  342. <div class="seal-card-body">
  343. <div class="seal-card-row">
  344. <span class="seal-card-label">规格</span>
  345. <span class="seal-card-value">{{ item.reissueOtherType || '-' }}</span>
  346. </div>
  347. <div class="seal-card-row">
  348. <span class="seal-card-label">收件</span>
  349. <span class="seal-card-value">{{ item.reissueContact || '-' }}</span>
  350. </div>
  351. <div class="seal-card-row">
  352. <span class="seal-card-label">要求</span>
  353. <span class="seal-card-value">{{ item.reissueOtherReq || '-' }}</span>
  354. </div>
  355. </div>
  356. </view>
  357. <!-- <van-button type="primary" size="small" block @click="openReissueEditDialog(scope, 'add', scope.model.blank_reissue_component?scope.model.blank_reissue_component.length:0)" style="margin-bottom:10px">+ 添加补发</van-button> -->
  358. </div>
  359. </template>
  360. </fm-generate-vant-form>
  361. <div v-if="type!='view'" style='position: fixed; bottom: 0;background: #f9fafb;width:100%;height:20%'>
  362. <van-form label-width='30px'>
  363. <van-cell-group inset>
  364. <van-field style="background: #f9fafb;" type="textarea" v-model="form.reason" label="意见"
  365. placeholder="" rows="2" :autosize='{maxHeight: 50}' show-word-limit />
  366. </van-cell-group>
  367. </van-form>
  368. <div
  369. style="display: flex;justify-content: space-between; padding: 0px 30px; width: 100%; height: 80px;">
  370. <van-button style="width:48%" type="primary" :loading="loading" @click="handleAudit(1)">通过
  371. </van-button>
  372. <van-button style="width:48%" type="danger" :loading="loading" @click="handleAudit(0)">驳回
  373. </van-button>
  374. </div>
  375. </div>
  376. </div>
  377. <script src="./resource/vue.global.prod.js"></script>
  378. <script src="./resource/vant.min.js"></script>
  379. <script src="./resource/axios.min.js"></script>
  380. <script src="./resource/uni.webview.js"></script>
  381. <script src="./vue-form-making/form-making-v3.umd.js"></script>
  382. <script>
  383. let EnvObj = {}
  384. uni.getEnv(function(res) {
  385. EnvObj = res;
  386. console.log('当前环境:' + JSON.stringify(res));
  387. });
  388. Vue.createApp({
  389. data() {
  390. return {
  391. isFlag: false,
  392. isEdit: true,
  393. type: '',
  394. jsonData: {},
  395. editData: {},
  396. form: {},
  397. headers: {},
  398. APIUrl: '',
  399. title: '',
  400. type: 'view',
  401. selectFilesField: null,
  402. selectFilesRowIndex: null,
  403. }
  404. },
  405. created() {
  406. let _this = this
  407. window.x_selectFiles = async (e) => {
  408. let data = JSON.parse(e)
  409. if (_this.$refs.generateForm) {
  410. if (_this.selectFilesRowIndex != null && _this.selectFilesField) {
  411. let formData = await _this.$refs.generateForm.getData(false);
  412. var arr = formData[_this.selectFilesField] || []
  413. var row = arr[_this.selectFilesRowIndex]
  414. if (row) {
  415. row.files = data.files || []
  416. _this.$refs.generateForm.setData({ [_this.selectFilesField]: arr })
  417. }
  418. _this.selectFilesRowIndex = null
  419. } else {
  420. _this.$refs.generateForm.setData({ [data.field]: data.files })
  421. }
  422. }
  423. }
  424. this.headers = this.getQueryParams('headers');
  425. let params = this.getQueryParams('params');
  426. this.APIUrl = this.headers.serverInfo || 'http://192.168.1.105:18086'
  427. this.title = params.type == 'view' ? '查看' : '审核'
  428. this.type = params.type || 'view'
  429. axios({
  430. method: 'get',
  431. url: this.APIUrl + `/bpm/process-instance/get?id=${params.processInstanceId}`,
  432. headers: this.headers,
  433. }).then((res) => {
  434. console.log(res)
  435. if (res.data.code != '-1') {
  436. this.form = res.data.data
  437. this.form.submitId = params.id
  438. this.jsonData = JSON.parse(res.data.data.formJson.makingJson);
  439. this.jsonData.list.forEach(item => {
  440. item.options.headers = [{
  441. key: 'Authorization',
  442. value: this.headers.Authorization
  443. }]
  444. if (item.type == "deptAndUserCascader") {
  445. item.type = 'cascader'
  446. }
  447. if (item.type == "deptCascader") {
  448. item.type = 'cascader'
  449. }
  450. if (item.type == "userSelect") {
  451. item.type = 'select'
  452. }
  453. if (item.type == "imgupload") {
  454. this.form.valueJson[item.model].length && this.form.valueJson[item
  455. .model].forEach(
  456. item => {
  457. //item.objectUrl = this.APIUrl +'/kd-aiot' + item.storePath
  458. item.objectUrl = item.url
  459. })
  460. }
  461. })
  462. this.jsonData.config.dataSource && this.jsonData.config.dataSource.forEach(item => {
  463. item.headers = {
  464. Authorization: this.headers.Authorization
  465. }
  466. item.url = item.url && item.url.replace('/api', this.APIUrl)
  467. })
  468. this.isFlag = true
  469. }
  470. });
  471. },
  472. methods: {
  473. async handleUploadLocal (model, rowIndex) {
  474. console.log('上传本地文件按钮被点击,字段模型:', model, '行索引:', rowIndex)
  475. let data = await this.$refs.generateForm.getData(false);
  476. let files = rowIndex != null && data[model] && data[model][rowIndex] ? (data[model][rowIndex].files || []) : (data[model] || [])
  477. this.selectFilesField = model
  478. this.selectFilesRowIndex = rowIndex != null ? rowIndex : null
  479. uni.postMessage({
  480. data: {
  481. type: 'selectFiles',
  482. field: model,
  483. files: files,
  484. isEdit: 'view'
  485. }
  486. });
  487. },
  488. getQueryParams(queryName) {
  489. const urlSearchParams = new URLSearchParams(window.location.search);
  490. const query = urlSearchParams.get(queryName);
  491. return JSON.parse(query);
  492. },
  493. async handleAudit(status) {
  494. await this._approveTaskWithVariables(status);
  495. },
  496. async _approveTaskWithVariables(status) {
  497. this.loading = true;
  498. let variables = {
  499. pass: !!status,
  500. ...this.form.formVariables
  501. };
  502. if (!this.form.reason) this.form.reason = !!status ? '通过' : '驳回'
  503. let API = !!status ? this.APIUrl + '/bpm/task/approveTaskWithVariables' :
  504. this.APIUrl + '/bpm/task/reject'
  505. axios({
  506. method: 'put',
  507. url: API,
  508. headers: this.headers,
  509. data: {
  510. id: this.form.submitId,
  511. reason: this.form.reason,
  512. variables
  513. }
  514. }).then((res) => {
  515. this.loading = false;
  516. if (res.data.code != '-1') {
  517. let params = {
  518. status,
  519. title: status === 0 ? '驳回' : ''
  520. }
  521. vant.showNotify({
  522. type: 'success',
  523. message: `审批${params.title}成功!`,
  524. duration: 1000,
  525. });
  526. setTimeout(() => {
  527. this.onClickLeft()
  528. }, 1000)
  529. }
  530. }).catch(() => {
  531. this.loading = false;
  532. });
  533. },
  534. onClickLeft() {
  535. uni.navigateBack({
  536. delta: 1
  537. });
  538. }
  539. }
  540. }).use(vant).use(FormMakingV3).mount('#app')
  541. </script>
  542. </body>
  543. </html>