DepartModal.vue 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. <template>
  2. <a-modal
  3. :title="title"
  4. :width="800"
  5. :ok=false
  6. :visible="visible"
  7. :confirmLoading="confirmLoading"
  8. :okButtonProps="{ props: {disabled: disableSubmit} }"
  9. @ok="handleOk"
  10. @cancel="handleCancel"
  11. cancelText="关闭">
  12. <a-spin :spinning="confirmLoading">
  13. <a-form :form="form">
  14. <a-form-item
  15. :labelCol="labelCol"
  16. :wrapperCol="wrapperCol"
  17. label="机构名称"
  18. :hidden="false"
  19. hasFeedback >
  20. <a-input id="departName" placeholder="请输入机构/部门名称" v-decorator="['departName', validatorRules.departName ]"/>
  21. </a-form-item>
  22. <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :hidden="seen" label="上级部门" hasFeedback>
  23. <a-tree-select
  24. style="width:100%"
  25. :dropdownStyle="{maxHeight:'200px',overflow:'auto'}"
  26. :treeData="departTree"
  27. v-model="model.parentId"
  28. placeholder="请选择上级部门"
  29. :disabled="condition">
  30. </a-tree-select>
  31. </a-form-item>
  32. <a-form-item
  33. :labelCol="labelCol"
  34. :wrapperCol="wrapperCol"
  35. label="机构类型">
  36. <template v-if="seen">
  37. <a-radio-group v-decorator="['orgCategory',validatorRules.orgCategory]" placeholder="请选择机构类型">
  38. <a-radio value="1">
  39. 公司
  40. </a-radio>
  41. </a-radio-group>
  42. </template>
  43. <template v-else>
  44. <a-radio-group v-decorator="['orgCategory',validatorRules.orgCategory]" placeholder="请选择机构类型">
  45. <a-radio value="2">
  46. 部门
  47. </a-radio>
  48. <a-radio value="3">
  49. 岗位
  50. </a-radio>
  51. </a-radio-group>
  52. </template>
  53. </a-form-item>
  54. <a-form-item
  55. :labelCol="labelCol"
  56. :wrapperCol="wrapperCol"
  57. label="电话">
  58. <a-input placeholder="请输入电话" v-decorator="['mobile',validatorRules.mobile]" />
  59. </a-form-item>
  60. <a-form-item
  61. :labelCol="labelCol"
  62. :wrapperCol="wrapperCol"
  63. label="传真">
  64. <a-input placeholder="请输入传真" v-decorator="['fax', {}]" />
  65. </a-form-item>
  66. <a-form-item
  67. :labelCol="labelCol"
  68. :wrapperCol="wrapperCol"
  69. label="地址">
  70. <a-input placeholder="请输入地址" v-decorator="['address', {}]" />
  71. </a-form-item>
  72. <a-form-item
  73. :labelCol="labelCol"
  74. :wrapperCol="wrapperCol"
  75. label="排序">
  76. <a-input-number v-decorator="[ 'departOrder',{'initialValue':0}]" />
  77. </a-form-item>
  78. <a-form-item
  79. :labelCol="labelCol"
  80. :wrapperCol="wrapperCol"
  81. label="备注">
  82. <a-textarea placeholder="请输入备注" v-decorator="['memo', {}]" />
  83. </a-form-item>
  84. </a-form>
  85. </a-spin>
  86. </a-modal>
  87. </template>
  88. <script>
  89. import { httpAction } from '@/api/manage'
  90. import { queryIdTree } from '@/api/api'
  91. import pick from 'lodash.pick'
  92. import ATextarea from 'ant-design-vue/es/input/TextArea'
  93. export default {
  94. name: "SysDepartModal",
  95. components: { ATextarea },
  96. data () {
  97. return {
  98. departTree:[],
  99. orgTypeData:[],
  100. phoneWarning:'',
  101. departName:"",
  102. title:"操作",
  103. seen:false,
  104. visible: false,
  105. condition:true,
  106. disableSubmit:false,
  107. model: {},
  108. menuhidden:false,
  109. menuusing:true,
  110. labelCol: {
  111. xs: { span: 24 },
  112. sm: { span: 5 },
  113. },
  114. wrapperCol: {
  115. xs: { span: 24 },
  116. sm: { span: 16 },
  117. },
  118. confirmLoading: false,
  119. form: this.$form.createForm(this),
  120. validatorRules:{
  121. departName:{rules: [{ required: true, message: '请输入机构/部门名称!' }]},
  122. orgCode:{rules: [{ required: true, message: '请输入机构编码!' }]},
  123. mobile:{rules: [{validator:this.validateMobile}]}
  124. },
  125. url: {
  126. add: "/sys/sysDepart/add",
  127. },
  128. dictDisabled:true,
  129. }
  130. },
  131. created () {
  132. },
  133. methods: {
  134. loadTreeData(){
  135. var that = this;
  136. queryIdTree().then((res)=>{
  137. if(res.success){
  138. that.departTree = [];
  139. for (let i = 0; i < res.result.length; i++) {
  140. let temp = res.result[i];
  141. that.departTree.push(temp);
  142. }
  143. }
  144. })
  145. },
  146. add (depart) {
  147. if(depart){
  148. this.seen = false;
  149. this.dictDisabled = false;
  150. }else{
  151. this.seen = true;
  152. this.dictDisabled = true;
  153. }
  154. this.edit(depart);
  155. },
  156. edit (record) {
  157. this.form.resetFields();
  158. this.model = Object.assign({}, {});
  159. this.visible = true;
  160. this.loadTreeData();
  161. this.model.parentId = record!=null?record.toString():null;
  162. if(this.seen){
  163. this.model.orgCategory = '1';
  164. }else{
  165. this.model.orgCategory = '2';
  166. }
  167. this.$nextTick(() => {
  168. this.form.setFieldsValue(pick(this.model,'orgCategory','departName','departNameEn','departNameAbbr','departOrder','description','orgType','orgCode','mobile','fax','address','memo','status','delFlag'))
  169. });
  170. },
  171. close () {
  172. this.$emit('close');
  173. this.disableSubmit = false;
  174. this.visible = false;
  175. },
  176. handleOk () {
  177. const that = this;
  178. // 触发表单验证
  179. this.form.validateFields((err, values) => {
  180. if (!err) {
  181. that.confirmLoading = true;
  182. let formData = Object.assign(this.model, values);
  183. //时间格式化
  184. console.log(formData)
  185. httpAction(this.url.add,formData,"post").then((res)=>{
  186. if(res.success){
  187. that.$message.success(res.message);
  188. that.loadTreeData();
  189. that.$emit('ok');
  190. }else{
  191. that.$message.warning(res.message);
  192. }
  193. }).finally(() => {
  194. that.confirmLoading = false;
  195. that.close();
  196. })
  197. }
  198. })
  199. },
  200. handleCancel () {
  201. this.close()
  202. },
  203. validateMobile(rule,value,callback){
  204. if (!value || new RegExp(/^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$/).test(value)){
  205. callback();
  206. }else{
  207. callback("您的手机号码格式不正确!");
  208. }
  209. }
  210. }
  211. }
  212. </script>
  213. <style scoped>
  214. </style>