IncidentTicketModal.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  1. <template>
  2. <a-modal
  3. title="编辑"
  4. width="85%"
  5. :visible="visible"
  6. :maskClosable="false"
  7. :confirmLoading="confirmLoading"
  8. @ok="handleOk"
  9. @cancel="handleCancel">
  10. <a-spin :spinning="confirmLoading">
  11. <!-- 主表单区域 -->
  12. <div class="table-page-search-wrapper">
  13. <!-- 子表单区域 -->
  14. <!-- <a-button type="primary" @click="addList" style="margin-bottom: 1%;">增行</a-button> -->
  15. <a-table
  16. bordered
  17. :columns="incidentTicketChildrenTable.columns"
  18. :data-source="incidentTicketChildrenTable.dataSource"
  19. :loading="incidentTicketChildrenTable.loading"
  20. :scroll="{x: 2000,y:300 }"
  21. :pagination="false"
  22. >
  23. <!-- 汇率 -->
  24. <span slot="exchangeRate" slot-scope="text, record, index">
  25. <a-input placeholder="请输入" v-model="record.exchangeRate" />
  26. </span>
  27. <!-- 实际事故金额 -->
  28. <span slot="practicalSum" slot-scope="text, record, index">
  29. <a-input placeholder="请输入" v-model="record.practicalSum" />
  30. </span>
  31. <!-- U8生成运费发票号 -->
  32. <span slot="u8Invoice" slot-scope="text, record, index">
  33. <a-input placeholder="请输入" v-model="record.u8Invoice" />
  34. </span>
  35. <!-- 账套号 -->
  36. <span slot="zhanghaoId" slot-scope="text, record, index">
  37. <a-input placeholder="请输入" v-model="record.zhanghaoId" />
  38. </span>
  39. <!-- 备注 -->
  40. <span slot="remark" slot-scope="text, record, index">
  41. <a-input placeholder="请输入" v-model="record.remark" />
  42. </span>
  43. </a-table>
  44. <a-form-model layout="inline" ref="form" :model="formState" :rules="validatorRules">
  45. <a-row :gutter="24">
  46. <a-col :span="24" style="height: 110px;">
  47. <a-form-model-item label="财务备注" prop="financeRemark" class="nresume">
  48. <a-input v-model="formState.financeRemark" type="textarea" placeholder="请输入"></a-input>
  49. </a-form-model-item>
  50. </a-col>
  51. </a-row>
  52. <a-row :gutter="24">
  53. <a-col :span="8">
  54. <a-form-model-item label="添加附件" prop="accessory2">
  55. <j-upload v-model="formState.accessory2" ></j-upload>
  56. <!-- <a-input v-model="formState.accessory2" placeholder="请输入"></a-input> -->
  57. </a-form-model-item>
  58. </a-col>
  59. <a-col :span="8">
  60. <a-form-model-item label="通知人" prop="Noticer">
  61. <a-input v-model="formState.Noticer" placeholder="请输入"></a-input>
  62. </a-form-model-item>
  63. </a-col>
  64. </a-row>
  65. </a-form-model>
  66. <!-- <j-editable-table
  67. :ref="refKeys[0]"
  68. :loading="incidentTicketChildrenTable.loading"
  69. :columns="incidentTicketChildrenTable.columns"
  70. :dataSource="incidentTicketChildrenTable.dataSource"
  71. :maxHeight="300"
  72. :rowNumber="true"
  73. :rowSelection="true"
  74. :actionButton="true"/> -->
  75. <!-- <div class="table-page-search-wrapper">
  76. <a-form-model layout="inline" ref="form" :model="formState" :rules="validatorRules">
  77. <a-row :gutter="24">
  78. <a-col :md="24" :sm="8">
  79. <a-form-model-item label="财务备注" class="nresume" style="height:100px !important">
  80. <a-input type="textarea" placeholder="请输入" v-model="formState.demo"/>
  81. </a-form-model-item>
  82. </a-col>
  83. </a-row>
  84. </a-form-model>
  85. </div> -->
  86. <!-- </a-tab-pane> -->
  87. </div>
  88. </a-spin>
  89. </a-modal>
  90. </template>
  91. <script>
  92. import pick from 'lodash.pick'
  93. import { FormTypes,getRefPromise } from '@/utils/JEditableTableUtil'
  94. import { JEditableTableMixin } from '@/mixins/JEditableTableMixin'
  95. import { validateDuplicateValue } from '@/utils/util'
  96. import JDictSelectTag from "@/components/dict/JDictSelectTag"
  97. import JUpload from '@/components/jeecg/JUpload'
  98. import { putAction,getAction } from '@/api/manage'
  99. export default {
  100. name: 'IncidentTicketModal',
  101. mixins: [JEditableTableMixin],
  102. components: {
  103. JDictSelectTag,
  104. JUpload
  105. },
  106. data() {
  107. return {
  108. labelCol: {
  109. span: 8
  110. },
  111. wrapperCol: {
  112. span: 16
  113. },
  114. labelCol2: {
  115. span: 3
  116. },
  117. wrapperCol2: {
  118. span: 20
  119. },
  120. formState:{},
  121. // 新增时子表默认添加几行空数据
  122. addDefaultRowNum: 1,
  123. validatorRules: {
  124. accidentData: {rules: [
  125. ]},
  126. accidentTheme: {rules: [
  127. ]},
  128. accidentPersonLiable: {rules: [
  129. ]},
  130. supplier: {rules: [
  131. ]},
  132. personLiable: {rules: [
  133. ]},
  134. accidentNumber: {rules: [
  135. ]},
  136. customer: {rules: [
  137. ]},
  138. factory: {rules: [
  139. ]},
  140. responsibilityPerson1: {rules: [
  141. ]},
  142. responsibilityPerson2: {rules: [
  143. ]},
  144. responsibilityPerson3: {rules: [
  145. ]},
  146. responsibilityPerson4: {rules: [
  147. ]},
  148. responsibilityPerson5: {rules: [
  149. ]},
  150. sum1: {rules: [
  151. ]},
  152. sum2: {rules: [
  153. ]},
  154. sum3: {rules: [
  155. ]},
  156. sum4: {rules: [
  157. ]},
  158. sum5: {rules: [
  159. ]},
  160. responsibilityCompany: {rules: [
  161. ]},
  162. moneyType: {rules: [
  163. ]},
  164. totalMoney: {rules: [
  165. ]},
  166. businessType: {rules: [
  167. ]},
  168. garmentSalesOrder: {rules: [
  169. ]},
  170. styleNumber: {rules: [
  171. ]},
  172. material: {rules: [
  173. ]},
  174. planPersonnel: {rules: [
  175. ]},
  176. businessPeople: {rules: [
  177. ]},
  178. qualityControl: {rules: [
  179. ]},
  180. planNumber: {rules: [
  181. ]},
  182. accidentType: {rules: [
  183. ]},
  184. accidentSum: {rules: [
  185. ]},
  186. presentationCondition: {rules: [
  187. ]},
  188. accessory: {rules: [
  189. ]},
  190. informant: {rules: [
  191. ]},
  192. factorySignature: {rules: [
  193. ]},
  194. financeRemark: {rules: [
  195. ]},
  196. accessory2: {rules: [
  197. ]},
  198. isLeaders: {rules: [
  199. ]},
  200. incidentTicketId: {rules: [
  201. ]},
  202. tableNameChildren: {rules: [
  203. ]},
  204. },
  205. refKeys: ['incidentTicketChildren', ],
  206. tableKeys:['incidentTicketChildren', ],
  207. activeKey: 'incidentTicketChildren',
  208. accessory2:'',
  209. // 森_工厂质量事故单-子表
  210. incidentTicketChildrenTable: {
  211. loading: false,
  212. dataSource: [],
  213. columns: [
  214. {
  215. title: '计划单号',
  216. align: "center",
  217. dataIndex: 'planNumber',
  218. width: 140,
  219. // scopedSlots: { customRender: 'planNumber' },
  220. },
  221. {
  222. title: '事故类型',
  223. align: "center",
  224. dataIndex: 'accidentType',
  225. width: 140,
  226. // scopedSlots: { customRender: 'accidentType' },
  227. },
  228. {
  229. title: '事故金额',
  230. align: "center",
  231. dataIndex: 'accidentSum',
  232. width: 140,
  233. // scopedSlots: { customRender: 'accidentSum' },
  234. },
  235. {
  236. title: '汇率',
  237. align: "center",
  238. dataIndex: 'exchangeRate',
  239. width: 140,
  240. scopedSlots: { customRender: 'exchangeRate' },
  241. },
  242. {
  243. title: '实际事故金额',
  244. align: "center",
  245. dataIndex: 'practicalSum',
  246. width: 140,
  247. scopedSlots: { customRender: 'practicalSum' },
  248. },
  249. {
  250. title: 'U8生成运费发票号',
  251. align: "center",
  252. dataIndex: 'u8Invoice',
  253. width: 140,
  254. scopedSlots: { customRender: 'u8Invoice' },
  255. },
  256. {
  257. title: '账套号',
  258. align: "center",
  259. dataIndex: 'zhanghaoId',
  260. width: 140,
  261. scopedSlots: { customRender: 'zhanghaoId' },
  262. },
  263. {
  264. title: '备注',
  265. align: "center",
  266. dataIndex: 'remark',
  267. width: 140,
  268. scopedSlots: { customRender: 'remark' },
  269. },
  270. ]
  271. },
  272. url: {
  273. add: "/oa/incidentTicket/add",
  274. edit: "/oa/incidentTicket/edit",
  275. incidentTicketChildren: {
  276. list: '/oa/incidentTicket/queryIncidentTicketChildrenByMainId'
  277. },
  278. }
  279. }
  280. },
  281. methods: {
  282. getHeaderList(id){
  283. getAction('/oa/incidentTicket/queryById', {id:id}).then((res) => {
  284. if(res.success){
  285. var zhuId = '' //主表id
  286. this.formState=res.result //详情
  287. this.formState.accessory2 = JSON.parse(this.formState.accessory2)
  288. this.formState.accessory2=this.formState.accessory2[0].name
  289. zhuId = res.result.id
  290. this.getTable(zhuId)
  291. this.getNotifier(zhuId)
  292. }else{
  293. this.$message.warning(res.message)
  294. }
  295. })
  296. },
  297. getTable(id){
  298. getAction('/oa/incidentTicket/queryIncidentTicketChildrenByMainId', {id:id}).then((res) => {
  299. if(res.success){
  300. this.incidentTicketChildrenTable.dataSource = res.result
  301. }else{
  302. this.$message.warning(res.message)
  303. }
  304. })
  305. },
  306. getNotifier(id){
  307. getAction('/oa/incidentTicketMsg/queryByMainId', {id:id}).then((res) => {
  308. if(res.success){
  309. var noticeList =[]
  310. res.result.map(item=>{
  311. noticeList.push(item.userName)
  312. })
  313. this.formState.Noticer = noticeList.toString()
  314. console.log(this.formState.Noticer)
  315. this.$forceUpdate()
  316. }
  317. })
  318. },
  319. handleOk(){
  320. this.$refs.form.validate(async valid => {
  321. if(valid){
  322. this.formState.accessory2 = [{"type":"file","name":this.formState.accessory2,"status":"done","uid":1673507319016,"url":"http://220.191.168.86:18087/jeecg-boot/sys/common/static/"+this.formState.accessory2}]
  323. this.formState.accessory2 = JSON.stringify(this.formState.accessory2)
  324. var obj = this.formState
  325. obj.incidentTicketChildrenList = this.incidentTicketChildrenTable.dataSource
  326. putAction('/oa/incidentTicket/edit', obj).then((res) => {
  327. if(res.success){
  328. this.$message.success('编辑成功')
  329. this.handleCancel()
  330. this.$emit('close')
  331. }else{
  332. this.$message.warning(res.message)
  333. }
  334. })
  335. }
  336. })
  337. },
  338. //关闭
  339. handleCancel(){
  340. this.incidentTicketChildrenTable.dataSource =[]
  341. this.formState = {}
  342. this.visible = false
  343. this.$emit('close')
  344. },
  345. // getAllTable() {
  346. // let values = this.tableKeys.map(key => getRefPromise(this, key))
  347. // return Promise.all(values)
  348. // },
  349. /** 调用完edit()方法之后会自动调用此方法 */
  350. // editAfter() {
  351. // let fieldval = pick(this.model,'accidentData','accidentTheme','accidentPersonLiable','supplier','personLiable','accidentNumber','customer','factory','responsibilityPerson1','responsibilityPerson2','responsibilityPerson3','responsibilityPerson4','responsibilityPerson5','sum1','sum2','sum3','sum4','sum5','responsibilityCompany','moneyType','totalMoney','businessType','garmentSalesOrder','styleNumber','material','planPersonnel','businessPeople','qualityControl','planNumber','accidentType','accidentSum','presentationCondition','accessory','informant','factorySignature','financeRemark','accessory2','isLeaders','incidentTicketId','tableNameChildren')
  352. // this.$nextTick(() => {
  353. // this.form.setFieldsValue(fieldval)
  354. // })
  355. // // 加载子表数据
  356. // if (this.model.id) {
  357. // let params = { id: this.model.id }
  358. // this.requestSubTableData(this.url.incidentTicketChildren.list, params, this.incidentTicketChildrenTable)
  359. // }
  360. // },
  361. /** 整理成formData */
  362. classifyIntoFormData(allValues) {
  363. let main = Object.assign(this.model, allValues.formValue)
  364. return {
  365. ...main, // 展开
  366. incidentTicketChildrenList: allValues.tablesValue[0].values,
  367. }
  368. },
  369. validateError(msg){
  370. this.$message.error(msg)
  371. },
  372. popupCallback(row){
  373. this.form.setFieldsValue(pick(row,'accidentData','accidentTheme','accidentPersonLiable','supplier','personLiable','accidentNumber','customer','factory','responsibilityPerson1','responsibilityPerson2','responsibilityPerson3','responsibilityPerson4','responsibilityPerson5','sum1','sum2','sum3','sum4','sum5','responsibilityCompany','moneyType','totalMoney','businessType','garmentSalesOrder','styleNumber','material','planPersonnel','businessPeople','qualityControl','planNumber','accidentType','accidentSum','presentationCondition','accessory','informant','factorySignature','financeRemark','accessory2','isLeaders','incidentTicketId','tableNameChildren'))
  374. },
  375. }
  376. }
  377. </script>
  378. <style lang="less" scoped>
  379. /deep/ .ant-table-wrapper{
  380. margin-bottom: 2%;
  381. }
  382. /deep/ .nresume .ant-input{
  383. height: 100px !important;
  384. }
  385. </style>