You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

356 lines
9.9 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. <template>
  2. <section>
  3. <el-row v-if="fields.length>0">
  4. <!--新增界面 FormData 表单数据表-->
  5. <el-form :model="editForm" :label-width="labelWidthCpd" :label-position="labelPosition" :show-message="true" :rules="editFormRules" ref="editForm">
  6. <el-col :span="spanCalc(item)" v-for="(item,index) in fields" :key="index">
  7. <mdp-form-data-item v-model="editForm" :field="item"></mdp-form-data-item>
  8. </el-col>
  9. </el-form>
  10. </el-row>
  11. <slot>
  12. <el-row class="footer">
  13. <el-button @click.native="handleCancel">关闭</el-button>
  14. <el-button type="primary" @click.native="editSubmit" :loading="editLoading">提交</el-button>
  15. </el-row>
  16. </slot>
  17. <mdp-dialog ref="imageDialog" title="选择图片" width="80%" :modal="false">
  18. <template v-slot="{visible,data,dialog}">
  19. <mdp-select-image v-if="visible" :visible="visible" @select="(imgs)=>{
  20. if(data.item.isMultiple=='1'){
  21. data.formData[data.item.fieldIdCamel]=imgs&&imgs.length>0?imgs.map(i=>i.url).join(','):null
  22. }else{
  23. data.formData[data.item.fieldIdCamel]=imgs&&imgs.length>0?imgs[0].url:null
  24. }
  25. dialog.close();
  26. }"></mdp-select-image>
  27. </template>
  28. </mdp-dialog>
  29. <mdp-dialog ref="attDialog" title="选择文件" width="80%" :modal="false">
  30. <template v-slot="{visible,data,dialog}">
  31. <mdp-select-att v-if="visible" :visible="visible" :multiple="data.item.isMultiple=='1'" @select="(imgs)=>{
  32. if(data.item.isMultiple=='1'){
  33. data.formData[data.item.fieldIdCamel]=imgs&&imgs.length>0?imgs.map(i=>i.url).join(','):null
  34. }else{
  35. data.formData[data.item.fieldIdCamel]= (imgs?imgs.url:null)
  36. }
  37. dialog.close();
  38. }" split=","></mdp-select-att>
  39. </template>
  40. </mdp-dialog>
  41. </section>
  42. </template>
  43. <script>
  44. import { mapGetters } from 'vuex'
  45. import MdpFormDataItem from './FormDataItem.vue'
  46. import treeTool from '@/components/mdp-ui/js/treeTool.js'
  47. /**
  48. * 表单数据填单
  49. */
  50. export default {
  51. computed: {
  52. ...mapGetters([
  53. 'userInfo','roles','myDepts'
  54. ]),
  55. labelWidthCpd:function(){
  56. if(this.labelWidth){
  57. return this.labelWidth
  58. }
  59. return this.labelWidthCalc();
  60. },
  61. fieldsCpd:function(){
  62. var formFields=this.formFields?this.formFields:[]
  63. formFields.forEach(k=>{ //权限控制
  64. this.initFieldQx(k)
  65. })
  66. return formFields
  67. }
  68. },
  69. props:{
  70. visible:{type:Boolean,default:false},
  71. value:{type:Object,default:null},
  72. formDef:{type:Object,default:null},
  73. formFields:{type:Array,default:null},
  74. labelWidth:{type:String,default:null},
  75. labelPosition:{type:String,default:null},
  76. },
  77. watch: {
  78. value:function(){
  79. this.initData()
  80. },
  81. 'formFields':function(formFields) {
  82. this.initByFormFields()
  83. },
  84. },
  85. data() {
  86. return {
  87. filters:{
  88. users:[]
  89. },
  90. pickerOptions: this.$mdp.getPickerOptions(),
  91. editLoading: false,
  92. editFormRules: {
  93. },
  94. //新增界面数据 表单数据表
  95. editForm: {
  96. },
  97. //最原始的数据,用于与最新的editForm比较,获得修改日志
  98. editFormBak:null,
  99. fields:[],
  100. /**end 在上面加自定义属性**/
  101. }//end return
  102. },//end data
  103. methods: {
  104. // 取消按钮点击 父组件监听@cancel="editFormVisible=false" 监听
  105. handleCancel:function(){
  106. this.$emit('cancel');
  107. },
  108. labelWidthCalc:function(){
  109. if (screen.width <=375){
  110. return "80px"
  111. }else if (screen.width <= 500){
  112. return "80px"
  113. }else if (screen.width<=1024){
  114. return "100px"
  115. }else {
  116. return "120px"
  117. }
  118. } ,
  119. spanCalc:function(item){
  120. var span=screen.width>500?12:24
  121. if(item.fieldType=="textarea"){
  122. span=24;
  123. }
  124. return span;
  125. },
  126. //新增提交FormData 表单数据表 父组件监听@submit="afterAddSubmit"
  127. editSubmit: function () {
  128. this.$refs.editForm.validate((valid) => {
  129. if (valid) {
  130. this.editLoading = true;
  131. let params = Object.assign({}, this.editForm);
  132. var extInfosKeys=Object.keys(params).filter(k=>k.indexOf(".")>0)
  133. if(extInfosKeys && extInfosKeys.length>0){
  134. var extInfos=[]
  135. extInfosKeys.forEach(k=>{
  136. var key=k.split(".")[1]
  137. extInfos[key]=params[k]
  138. var extInfo={id:key,value:params[k]}
  139. extInfos.push(extInfo)
  140. delete params[k]
  141. })
  142. params['extInfos']=JSON.stringify(extInfos)
  143. }
  144. if(params.formId==null || params.formId==''){
  145. params.formId=this.formDef.id
  146. }
  147. params.userid=this.userInfo.userid
  148. if(!params.branchId){
  149. params.branchId=this.userInfo.branchId
  150. }
  151. if(!params.cuserid){
  152. params.cuserid=this.userInfo.userid
  153. }
  154. if(!params.cusername){
  155. params.cusername=this.userInfo.username
  156. }
  157. if(!params.deptid){
  158. params.deptid=this.userInfo.deptid
  159. }
  160. if(!params.deptName){
  161. params.deptName=this.userInfo.deptName
  162. }
  163. this.$emit('input',params)
  164. this.$emit('submit',params);// @submit="afterAddSubmit"
  165. }
  166. });
  167. },
  168. /**end 在上面加自定义方法**/
  169. onFieldChange(val,field){
  170. if(!this.editFormBak){
  171. this.editFormBak={...this.value}
  172. }
  173. this.$nextTick(()=>{
  174. this.$refs.editForm.validateField([field.fieldIdCamel])
  175. })
  176. this.$nextTick(()=>{
  177. this.$emit('input',this.editForm)
  178. this.$emit('change',this.editForm,this.getChangeLogs())
  179. })
  180. },
  181. initByFormFields(){
  182. this.initData();
  183. this.formFields.forEach(item=>{
  184. if(item.isRequired=='1' ){
  185. this.editFormRules[item.fieldIdCamel]=[{ required: true, message: item.fieldTitle+'不能为空', trigger: 'blur' }]
  186. }
  187. this.initFieldQx(item)
  188. });
  189. this.fields=treeTool.translateDataToTree(this.formFields,'pid','id')
  190. this.$nextTick(()=>{
  191. this.$refs['editForm'].clearValidate();
  192. })
  193. },
  194. initFieldQx(item){
  195. var myUserid=this.userInfo.userid
  196. var myDeptids=this.myDepts?this.myDepts.map(d=>d.deptid):[]
  197. var myRoleids=this.roles?this.roles.map(r=>r.roleid):[]
  198. var myDataLvl=this.userInfo.maxDataLvl
  199. if(item.fieldQx){
  200. item.nr=false
  201. item.ne=false
  202. var fieldQx=JSON.parse(item.fieldQx)
  203. if(!fieldQx.othQuery){
  204. item.nr=false
  205. }else if(fieldQx.othQuery=='0'){
  206. item.nr=true
  207. item.ne=true
  208. }else if(fieldQx.othQuery=='1'){
  209. if(item.qryMinLvl && myDataLvl<item.qryMinLvl){
  210. item.nr=true
  211. item.ne=true
  212. }else{
  213. var qryUserids=fieldQx.qryUserids?fieldQx.qryUserids.split(","):[]
  214. var qryDeptids=fieldQx.qryDeptids?fieldQx.qryDeptids.split(","):[]
  215. var qryRoleids=fieldQx.qryRoleids?fieldQx.qryRoleids.split(","):[]
  216. if(qryUserids.some(u=>u==myUserid)){
  217. item.nr=false
  218. }
  219. if(qryDeptids.some(u=>u==myDeptids.some(d=>d==u))){
  220. item.nr=false
  221. }
  222. if(qryRoleids.some(r=>myRoleids.some(mr=>mr==r))){
  223. item.nr=false
  224. }
  225. var nqUserids=fieldQx.nqUserids?fieldQx.nqUserids.split(","):[]
  226. var nqDeptids=fieldQx.nqDeptids?fieldQx.nqDeptids.split(","):[]
  227. var nqRoleids=fieldQx.nqRoleids?fieldQx.nqRoleids.split(","):[]
  228. if(nqUserids.some(u=>u==myUserid)){
  229. item.nr=true
  230. item.ne=true
  231. }else if(nqDeptids.some(d=>myDeptids.some(k=>k==d))){
  232. item.nr=true
  233. item.ne=true
  234. }else if(nqRoleids.some(r=>myRoleids.some(mr=>mr==r))){
  235. item.nr=true
  236. item.ne=true
  237. }
  238. }
  239. }
  240. if(item.editMinLvl && myDataLvl<item.editMinLvl){
  241. item.ne=true
  242. }else{
  243. if(!fieldQx.othEdit){
  244. item.ne=false
  245. }else if(fieldQx.othEdit=='0'){
  246. item.ne=true
  247. }else if(fieldQx.othEdit=='1'){
  248. var editUserids=fieldQx.editUserids?fieldQx.editUserids.split(","):[]
  249. var editDeptids=fieldQx.editDeptids?fieldQx.editDeptids.split(","):[]
  250. var editRoleids=fieldQx.editRoleids?fieldQx.editRoleids.split(","):[]
  251. if(editUserids.some(u=>u==myUserid)){
  252. item.ne=false
  253. }
  254. if(editDeptids.some(d=>myDeptids.some(k=>k==d))){
  255. item.ne=false
  256. }
  257. if(editRoleids.some(r=>myRoleids.some(mr=>mr==r))){
  258. item.ne=false
  259. }
  260. var neUserids=fieldQx.neUserids?fieldQx.neUserids.split(","):[]
  261. var neDeptids=fieldQx.neDeptids?fieldQx.neDeptids.split(","):[]
  262. var neRoleids=fieldQx.neRoleids?fieldQx.neRoleids.split(","):[]
  263. if(neUserids.some(u=>u==myUserid)){
  264. item.ne=true
  265. }else if(neDeptids.some(d=>myDeptids.some(k=>k==d))){
  266. item.ne=true
  267. }else if(neRoleids.some(r=>myRoleids.some(mr=>mr==r))){
  268. item.ne=true
  269. }
  270. }
  271. }
  272. }else{
  273. item.nr=false
  274. item.ne=false
  275. }
  276. this.$set(item,'nr',item.nr)
  277. this.$set(item,'ne',item.ne)
  278. },
  279. //[log1,log2],其中log1={fieldId:'字段编号',oldVal:'原值',currVal:'修改后的值',fieldTitle:'字段名称'}
  280. getChangeLogs(){
  281. if(this.editFormBak==null){
  282. return null
  283. }else{
  284. var keys=Object.keys(this.editForm)
  285. var changeLogs=[]
  286. keys.forEach(key=>{
  287. var field=this.formFields.find(k=>k.fieldIdCamel==key)
  288. if(field){
  289. var oldVal=this.editFormBak[key]
  290. var currVal=this.editForm[key]
  291. var log={}
  292. if((currVal!=oldVal && ( currVal || oldVal ))){
  293. if(!oldVal && currVal=='0'){
  294. }else{
  295. log={fieldId:field.fieldIdCamel,fieldTitle:field.fieldTitle,oldVal:oldVal,currVal:currVal}
  296. changeLogs.push(log)
  297. }
  298. }
  299. }
  300. })
  301. return changeLogs;
  302. }
  303. },
  304. initData(){
  305. if(this.value){
  306. this.editForm=Object.assign({},this.value)
  307. }else{
  308. this.editForm={}
  309. }
  310. }
  311. },//end method
  312. components: {
  313. MdpFormDataItem,
  314. },
  315. mounted() {
  316. this.initData();
  317. this.$nextTick(()=>{
  318. this.initByFormFields();
  319. })
  320. }//end mounted
  321. }
  322. </script>
  323. <style scoped>
  324. </style>