ProcessReportStatic.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410
  1. <template>
  2. <div>
  3. <Navbar
  4. :title="processReportDto.name"
  5. :is-go-back="processReportDto.goback"
  6. />
  7. <div>
  8. <h5>{{ processReportDto.description }}</h5>
  9. </div>
  10. <div class="form-inline">
  11. <div
  12. v-for="item in processReportDtos.processReportParameters"
  13. v-if="processReportDtos != undefined && processReportDtos.processReportParameters != undefined"
  14. class="form-group"
  15. >
  16. <label
  17. v-if="item.displayType != 'ListBoxEnumEditor'"
  18. class="m-label"
  19. :for="'editor_' + item.id"
  20. >{{ item.displayName }}</label>
  21. <span
  22. v-show="!item.mandatory"
  23. style="color: red;"
  24. >该项为必填项字段</span>
  25. <div class="input-group">
  26. <input
  27. v-if="item.displayType =='TextEditor'"
  28. :id="'editor_' + item.id"
  29. v-model="item.fieldValue.displayValue[0]"
  30. type="text"
  31. class="form-control"
  32. placeholder="请输入内容"
  33. @change="valueChanged(item)"
  34. />
  35. <textarea
  36. v-if="item.displayType =='TextAreaEditor'"
  37. :id="'editor_' + item.id"
  38. v-model="item.fieldValue.displayValue[0]"
  39. rows="5"
  40. type="text"
  41. class="form-control"
  42. placeholder="请输入内容"
  43. @change="valueChanged(item)"
  44. />
  45. <input
  46. v-if="item.displayType =='NumberEditor'"
  47. :id="'editor_' + item.id"
  48. v-model="item.fieldValue.displayValue[0]"
  49. type="number"
  50. class="form-control"
  51. placeholder="请输入数字"
  52. @change="valueChanged(item)"
  53. />
  54. <Switches
  55. v-if="item.displayType =='CheckBoxEditor'"
  56. v-model="item.fieldValue.displayValue[0]"
  57. color="green"
  58. type-bold="true"
  59. @change="valueChanged(item)"
  60. />
  61. <DateTime
  62. v-if="item.displayType =='DateTimeBoxEditor'"
  63. :id="'editor_' + item.id"
  64. :date-value="item.fieldValue.displayValue[0]"
  65. class="form-control"
  66. name="datetime"
  67. @on-value-change="changeValue(item, $event)"
  68. />
  69. <EnumSelectWidget
  70. v-if="item.displayType =='ListBoxEnumEditor'"
  71. :key-values="item.keyValues"
  72. :enum-value="item.fieldValue.displayValue[0]"
  73. @valueChanged="changeValue(item, $event)"
  74. />
  75. <MultiSearchWidget
  76. v-if="item.displayType =='MultiSearchBoxEditor'"
  77. :info-window-no="item.infoWindowNo"
  78. :field="item"
  79. :field-value="item.fieldValue"
  80. @valueChanged="tabValueChanged($event, item)"
  81. />
  82. <SearchWidget
  83. v-if="item.displayType =='SearchBoxEditor'"
  84. :where-clause="item.whereClause"
  85. :info-window-no="item.infoWindowNo"
  86. :field="item"
  87. :field-value="item.fieldValue"
  88. :display-name="item.listDisplayFieldNames"
  89. :model-data="modelData"
  90. @valueChanged="tabValueChanged($event, item)"
  91. />
  92. <VueMonthlyPicker
  93. v-if="item.displayType =='YearMonthEditor'"
  94. :value="item.fieldValue.displayValue[0]"
  95. :allow-change-value="false"
  96. date-format="YYYY-MM"
  97. class="vue-monthly-picker m-date-fieldEditView"
  98. @selected="changeValue(item, $event)"
  99. />
  100. <YearPicker
  101. v-if="item.displayType =='YearEditor'"
  102. :date-value="item.fieldValue.displayValue[0]"
  103. @selected="changeValue(item, $event)"
  104. />
  105. </div>
  106. </div>
  107. </div>
  108. <div>
  109. <div class="form-group">
  110. <button
  111. v-if="processReportDtos.htmlHelpUrl != null && processReportDtos.htmlHelpUrl != ''"
  112. class="btn btn-default"
  113. @click="openHtmlHelp(processReportDtos.htmlHelpUrl)"
  114. >
  115. <span class="glyphicon glyphicon-question-sign" />
  116. </button>
  117. <input
  118. type="button"
  119. class="btn btn-primary"
  120. style="margin-top: 15px;"
  121. value="确定"
  122. @click="subDatas()"
  123. />
  124. </div>
  125. <ProcessReportResultPreview
  126. :process-report-result="processReportResult"
  127. :pdf-only="processReportDto.pdfOnly"
  128. :excel-only="processReportDto.excelOnly"
  129. />
  130. </div>
  131. <Loading ref="loading" />
  132. </div>
  133. </template>
  134. <script>
  135. var Common = require('../../common/Common.js')
  136. var DateTime = require('../../datetime/src/DateTime.vue').default
  137. var YearPicker = require('../../year-picker/src/YearPicker.vue').default
  138. var MultiSearchWidget = require('./MultiSearchWidget.vue').default
  139. var Loading = require('../../loading/src/Loading.vue').default
  140. var ProcessReportResultPreview = require('./ProcessReportResultPreview.vue').default
  141. var SearchWidget = require('../../info/src/SearchWidget.vue').default
  142. var Switches = require('../../switches/src/Switches.vue').default
  143. var Navbar = require('../../navbar/src/Navbar.vue').default
  144. var VueMonthlyPicker = require('../../vue-monthly-picker/src/VueMonthlyPicker.vue').default
  145. var EnumSelectWidget = require('./EnumSelectWidget.vue').default
  146. export default {
  147. components: {
  148. DateTime,
  149. MultiSearchWidget,
  150. Loading,
  151. ProcessReportResultPreview,
  152. SearchWidget,
  153. Switches,
  154. Navbar,
  155. VueMonthlyPicker,
  156. YearPicker,
  157. EnumSelectWidget,
  158. },
  159. props: ['processReportDto'],
  160. data: function () {
  161. return {
  162. processReportId: '',
  163. processReportDtos: '',
  164. processResultData: '',
  165. processReportResult: {},
  166. complete: true, //参数是否全部填写
  167. modelData: {
  168. data: {
  169. },
  170. },
  171. }
  172. },
  173. //监控processReportDto,当dto变化时重新渲染界面
  174. watch: {
  175. 'processReportDto': function (to, from) {
  176. this.processReportResult.reportResults = undefined
  177. this.initData(this.processReportDto)
  178. },
  179. 'processReportDto.processReportParameters': function () {
  180. this.initData(this.processReportDto)
  181. },
  182. $route: function () {
  183. this.processReportResult = {}
  184. },
  185. },
  186. mounted: function () {
  187. this.initData(this.processReportDto)
  188. },
  189. methods: {
  190. /**
  191. * 打开帮助页面
  192. */
  193. openHtmlHelp: function (htmlHelpUrl) {
  194. window.open(htmlHelpUrl)
  195. },
  196. /**
  197. * 初始化数据
  198. * @param {Object} data 流程报表数据
  199. * @return {void}
  200. */
  201. initData: function (data) {
  202. var _self = this
  203. if (data == undefined) {
  204. return
  205. }
  206. _self.processReportDtos = ''
  207. if (data.processReportParameters) {
  208. data.processReportParameters.forEach(function (item) {
  209. if (item.mandatory == undefined) {
  210. item.mandatory = true
  211. }
  212. if (item.listDisplayFieldName == undefined) {
  213. item.listDisplayFieldName = item.listDisplayFieldNames
  214. }
  215. if (item.fieldValue == undefined) {
  216. item.fieldValue = {
  217. id: '',
  218. displayValue: [],
  219. fieldType: 'String',
  220. }
  221. }
  222. if (item.displayType == 'YearMonthEditor') {
  223. item.fieldValue.displayValue[0] = moment().format('YYYY-MM')
  224. }
  225. _self.modelData.data[item.fieldName] = item.fieldValue
  226. })
  227. }
  228. _self.processReportDtos = data
  229. },
  230. /**
  231. * 判断参数是否填写
  232. */
  233. judgeDataFull: function () {
  234. var _self = this
  235. _self.complete = true
  236. if (
  237. _self.processReportDtos &&
  238. _self.processReportDtos.processReportParameters
  239. ) {
  240. _self.processReportDtos.processReportParameters.forEach(
  241. function (item, index) {
  242. item.mandatory = true
  243. if (item.fieldValue.displayValue.length <= 0) {
  244. item.mandatory = false
  245. }
  246. _self.complete = _self.complete && item.mandatory
  247. },
  248. )
  249. }
  250. },
  251. /**
  252. * 执行流程
  253. * @return {void}
  254. */
  255. subDatas: function () {
  256. var _self = this
  257. _self.judgeDataFull()
  258. _self.processResultData = {
  259. processReportNo: _self.processReportDto.no,
  260. modelData: {
  261. data: {},
  262. },
  263. }
  264. if (
  265. _self.processReportDtos &&
  266. _self.processReportDtos.processReportParameters
  267. ) {
  268. _self.processReportDtos.processReportParameters.forEach(
  269. function (item, index) {
  270. var fieldName = item.fieldName
  271. _self.processResultData.modelData.data[fieldName] =
  272. item.fieldValue
  273. },
  274. )
  275. }
  276. _self.processReportResult = {}
  277. if (!_self.complete) {
  278. return
  279. }
  280. _self.$refs.loading.show()
  281. $.ajax({
  282. url: Common.getApiURL('ProcessReportResource/runProcess'),
  283. type: 'post',
  284. dataType: 'json',
  285. beforeSend: function (request) {
  286. Common.addTokenToRequest(request)
  287. },
  288. contentType: 'application/json',
  289. data: JSON.stringify(_self.processResultData),
  290. success: function (data) {
  291. _self.$refs.loading.hide()
  292. _self.processReportResult = data
  293. if (
  294. _self.processReportResult.reportResults != undefined &&
  295. _self.processReportResult.reportResults.length > 0
  296. ) {
  297. _self.processReportResult.reportResults.forEach(
  298. function (item, index) {
  299. _self.$set(item, 'previewIndex', 2)
  300. if (index == 0) {
  301. _self.$set(item, 'showPreview', true)
  302. } else {
  303. _self.$set(item, 'showPreview', false)
  304. }
  305. },
  306. )
  307. }
  308. },
  309. error: function (XMLHttpRequest, textStatus, errorThrown) {
  310. _self.$refs.loading.hide()
  311. Common.processException(
  312. XMLHttpRequest,
  313. textStatus,
  314. errorThrown,
  315. )
  316. },
  317. })
  318. },
  319. /**
  320. * 时间选择框数据发生改变
  321. * @param {Object} item 当前field
  322. * @param {String} newValue 改变后的值
  323. * @return {void}
  324. */
  325. changeValue: function (item, newValue) {
  326. this.$set(item.fieldValue.displayValue, 0, newValue)
  327. this.valueChanged(item)
  328. },
  329. /**
  330. * 搜索框值发生改变
  331. * @param {Object} newFieldValue 改变后的值
  332. * @param {Object} item 当前field
  333. * @return {void}
  334. */
  335. tabValueChanged: function (newFieldValue, item) {
  336. //item.fieldValue = newFieldValue;
  337. //this.$set(item, "fieldValue", newFieldValue);
  338. this.$set(
  339. item.fieldValue,
  340. 'displayValue',
  341. newFieldValue.displayValue,
  342. )
  343. this.$set(item.fieldValue, 'id', newFieldValue.id)
  344. this.$set(item.fieldValue, 'fieldType', newFieldValue.fieldType)
  345. this.valueChanged(item)
  346. },
  347. // 值改变事件
  348. valueChanged: function (processReportParameter) {
  349. // this.fieldValue = newFieldValue;
  350. this.$emit('valueChanged', processReportParameter)
  351. this.modelData.data[processReportParameter.fieldName] = processReportParameter.fieldValue
  352. },
  353. },
  354. }
  355. </script>
  356. <style scoped>
  357. .control-label {
  358. font-size: 15px;
  359. }
  360. .processResult-textarea {
  361. width: 100%;
  362. height: 200px;
  363. }
  364. .m-label {
  365. width: 5em;
  366. margin-left: 1em;
  367. }
  368. </style>
  369. <style>
  370. .m-date-fieldEditView > div:first-child {
  371. width: 100%;
  372. }
  373. </style>