personInfo-detail.vue 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. <style scoped>
  2. .user-panel {
  3. margin: 10px auto;
  4. }
  5. </style>
  6. <template>
  7. <el-dialog
  8. :visible.sync="showDialog"
  9. :title="title"
  10. :modal-append-to-body="false"
  11. style="text-align:left;"
  12. @close="closeDialog"
  13. >
  14. <div class="user-panel" v-loading="loading">
  15. <el-form ref="form" :model="formModel" :rules="ruleValidate" :label-width="'100px'">
  16. <el-form-item label="企业编号" prop="companyId">
  17. <el-select v-model="formModel.companyId" filterable placeholder="请选择" style="width:300px">
  18. <el-option
  19. v-for="company in companyResult"
  20. :key="company.id"
  21. :label="company.name"
  22. :value="company.id"
  23. ></el-option>
  24. </el-select>
  25. </el-form-item>
  26. <el-form-item label="姓名" prop="name">
  27. <el-input v-model="formModel.name" placeholder="请输入姓名" style="width:300px"></el-input>
  28. </el-form-item>
  29. <el-form-item label="手机号" prop="phone">
  30. <el-input v-model="formModel.phone" placeholder="请输入手机号" style="width:300px"></el-input>
  31. </el-form-item>
  32. <el-form-item label="身份证" prop="idCard">
  33. <el-input v-model="formModel.idCard" placeholder="请输入身份证" style="width:300px"></el-input>
  34. </el-form-item>
  35. <el-form-item label="照片" prop="faceImageUrl">
  36. <el-upload
  37. class="avatar-uploader"
  38. name="photoFile"
  39. :action="uploadUrl"
  40. :show-file-list="false"
  41. :headers="headers"
  42. :data="uploadData"
  43. :on-success="handleAvatarSuccess"
  44. :before-upload="beforeAvatarUpload"
  45. >
  46. <img v-if="fileUrl" :src="fileUrl" class="avatar" />
  47. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  48. </el-upload>
  49. </el-form-item>
  50. <el-form-item label="开放权限">
  51. <el-checkbox v-model="formModel.faceEnabled">人脸识别</el-checkbox>
  52. <el-checkbox v-model="formModel.cardEnabled">门禁卡</el-checkbox>
  53. <el-checkbox v-model="formModel.appEnabled">手机开锁</el-checkbox>
  54. <el-checkbox v-model="formModel.guestEnabled">访客权限</el-checkbox>
  55. </el-form-item>
  56. <el-form-item :label="companyPosition1" prop="position1">
  57. <el-input v-model="formModel.position1" placeholder="请输入一级位置" style="width:300px"></el-input>
  58. </el-form-item>
  59. <el-form-item :label="companyPosition2" prop="position2">
  60. <el-input v-model="formModel.position2" placeholder="请输入二级位置" style="width:300px"></el-input>
  61. </el-form-item>
  62. <el-form-item :label="companyPosition3" prop="position3">
  63. <el-input v-model="formModel.position3" placeholder="请输入三级位置" style="width:300px"></el-input>
  64. </el-form-item>
  65. <el-form-item :label="companyPosition4" prop="position4">
  66. <el-input v-model="formModel.position4" placeholder="请输入四级位置" style="width:300px"></el-input>
  67. </el-form-item>
  68. <el-form-item :label="companyPosition5" prop="position5">
  69. <el-input v-model="formModel.position5" placeholder="请输入五级位置" style="width:300px"></el-input>
  70. </el-form-item>
  71. </el-form>
  72. </div>
  73. <span slot="footer" class="dialog-footer">
  74. <el-button @click="closeDialog">取 消</el-button>
  75. <el-button type="primary" @click="handleSubmit" :loading="submitting">确 定</el-button>
  76. </span>
  77. </el-dialog>
  78. </template>
  79. <script>
  80. import Constant from "@/constant";
  81. import personInfoApi from "@/api/base/personInfo";
  82. import { getToken } from "@/utils/auth"; // get token from cookie
  83. export default {
  84. props: [
  85. "businessKey",
  86. "title",
  87. "companyResult",
  88. "companyPosition1",
  89. "companyPosition2",
  90. "companyPosition3",
  91. "companyPosition4",
  92. "companyPosition5"
  93. ],
  94. data() {
  95. let checkIdCard = (rule, value, callback) => {
  96. var identNumber = value;
  97. if (!/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(identNumber)) {
  98. return callback(new Error("格式错误"));
  99. } else if (!/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(identNumber)) {
  100. //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。
  101. return callback(new Error("格式错误"));
  102. } else {
  103. return callback();
  104. }
  105. };
  106. return {
  107. formModel: {},
  108. ruleValidate: {
  109. companyId: [
  110. { required: true, message: "企业不能为空", trigger: "blur" }
  111. ],
  112. name: [{ required: true, message: "姓名不能为空", trigger: "blur" }],
  113. phone: [{ required: true, message: "手机号不能为空", trigger: "blur" }],
  114. idCard: [
  115. { required: true, message: "身份证不能为空", trigger: "blur" },
  116. {
  117. validator: checkIdCard,
  118. trigger: "blur"
  119. }
  120. ]
  121. },
  122. showDialog: true,
  123. loading: false,
  124. submitting: false,
  125. checkList: [],
  126. //上传地址
  127. uploadUrl: Constant.serverUrl + "/uploadPicture",
  128. uploadData: {
  129. subFolder: "personInfo"
  130. },
  131. fileUrl: "",
  132. headers: {
  133. Authorization: getToken()
  134. }
  135. };
  136. },
  137. methods: {
  138. closeDialog() {
  139. this.$emit("close", false);
  140. },
  141. handleSubmit() {
  142. var self = this;
  143. this.$refs["form"].validate(valid => {
  144. if (valid) {
  145. (function() {
  146. var id = self.formModel.id;
  147. if (id == null || id.length == 0) {
  148. return personInfoApi.add(self.formModel);
  149. } else {
  150. return personInfoApi.update(self.formModel);
  151. }
  152. })().then(function(response) {
  153. var jsonData = response.data;
  154. if (jsonData.result) {
  155. self.$message({
  156. message: "保存成功!",
  157. type: "success"
  158. });
  159. self.$emit("close", true);
  160. } else {
  161. self.$message({
  162. message: jsonData.message + "",
  163. type: "warning"
  164. });
  165. self.$emit("close", false);
  166. }
  167. });
  168. }
  169. });
  170. },
  171. handleAvatarSuccess(res, file) {
  172. var self = this;
  173. self.formModel.faceImageUrl = res.data;
  174. self.fileUrl =
  175. res.data + "?x-oss-process=image/resize,m_lfit,h_400,w_400";
  176. },
  177. beforeAvatarUpload(file) {
  178. const isJPG = file.type === "image/jpeg";
  179. const isLt2M = file.size / 1024 / 1024 < 2;
  180. if (!isJPG) {
  181. this.$message.error("上传头像图片只能是 JPG 格式!");
  182. }
  183. if (!isLt2M) {
  184. this.$message.error("上传头像图片大小不能超过 2MB!");
  185. }
  186. return isJPG && isLt2M;
  187. }
  188. },
  189. mounted: function() {
  190. var self = this;
  191. (function() {
  192. if (self.businessKey.length == 0) {
  193. return personInfoApi.create();
  194. } else {
  195. return personInfoApi.edit(self.businessKey);
  196. }
  197. })()
  198. .then(response => {
  199. var jsonData = response.data;
  200. self.loading = false;
  201. if (jsonData.result) {
  202. self.formModel = jsonData.data;
  203. let faceImageUrl = self.formModel.faceImageUrl;
  204. if (faceImageUrl != null) {
  205. self.fileUrl =
  206. faceImageUrl + "?x-oss-process=image/resize,m_lfit,h_400,w_400";
  207. }
  208. } else {
  209. self.$message.error(jsonData.message + "");
  210. }
  211. })
  212. .catch(error => {
  213. self.$message.error(error + "");
  214. });
  215. }
  216. };
  217. </script>