driverMsg-add-or-update.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472
  1. <template>
  2. <el-dialog
  3. v-dialogDrag
  4. :fullscreen="dialogFull"
  5. :close-on-click-modal="false"
  6. :visible.sync="visible"
  7. width="70%"
  8. >
  9. <template slot="title">
  10. <div class="avue-crud__dialog__header">
  11. <span class="el-dialog__title">
  12. <span
  13. style="
  14. display: inline-block;
  15. width: 3px;
  16. height: 20px;
  17. margin-right: 5px;
  18. float: left;
  19. margin-top: 2px;
  20. "
  21. ></span>
  22. {{ !dataForm.id ? "新增" : this.hide ? "查看" : "修改" }}
  23. </span>
  24. <div class="avue-crud__dialog__menu enlarge" @click="full">
  25. <i
  26. style="
  27. cursor: pointer;
  28. display: block;
  29. width: 12px;
  30. height: 12px;
  31. border: 1px solid #909399;
  32. border-top: 3px solid #909399;
  33. margin-top: -3px;
  34. "
  35. ></i>
  36. </div>
  37. </div>
  38. </template>
  39. <el-form
  40. :model="dataFormD"
  41. :rules="dataRule"
  42. ref="dataForm"
  43. @keyup.enter.native="dataFormSubmit()"
  44. label-width="200px"
  45. >
  46. <el-form-item label="驾驶员所属公司" prop="fPid">
  47. <el-select
  48. v-model="dataFormD.fPid"
  49. :disabled="doNot"
  50. placeholder="请选择"
  51. >
  52. <el-option
  53. v-for="item in optionsProjectTypeItem"
  54. :key="item.fId"
  55. :label="item.fName"
  56. :value="item.fId"
  57. >
  58. </el-option>
  59. </el-select>
  60. </el-form-item>
  61. <el-form-item label="驾驶员姓名" prop="fName">
  62. <el-input
  63. v-model="dataFormD.fName"
  64. :disabled="doNot"
  65. placeholder="驾驶员姓名"
  66. ></el-input>
  67. </el-form-item>
  68. <el-form-item label="性别" prop="fFax">
  69. <!-- <el-input v-model="dataForm.fFax" placeholder="性别(0男/1女)"></el-input>-->
  70. <el-radio-group
  71. style="margin-left: 20px"
  72. :disabled="doNot"
  73. v-model="dataFormD.fFax"
  74. >
  75. <el-radio :label="0">男</el-radio>
  76. <el-radio :label="1">女</el-radio>
  77. </el-radio-group>
  78. </el-form-item>
  79. <el-form-item label="出生日期" prop="fContractb">
  80. <!-- <el-input v-model="dataForm.fContractb" placeholder="出生日期"></el-input>-->
  81. <el-date-picker
  82. style="width: 100%"
  83. value-format="yyyy-MM-dd"
  84. v-model="dataFormD.fContractb"
  85. type="date"
  86. :disabled="doNot"
  87. placeholder="出生日期"
  88. >
  89. </el-date-picker>
  90. </el-form-item>
  91. <el-form-item label="准驾车型" prop="fEaddr">
  92. <el-input
  93. v-model="dataFormD.fEaddr"
  94. :disabled="doNot"
  95. placeholder="准驾车型"
  96. ></el-input>
  97. </el-form-item>
  98. <el-form-item label="初次领证日期" prop="fContracte">
  99. <!-- <el-input v-model="dataForm.fContracte" placeholder="初次领证日期"></el-input>-->
  100. <el-date-picker
  101. style="width: 100%"
  102. value-format="yyyy-MM-dd"
  103. v-model="dataFormD.fContracte"
  104. type="date"
  105. :disabled="doNot"
  106. placeholder="初次领证日期"
  107. >
  108. </el-date-picker>
  109. </el-form-item>
  110. <el-form-item label="身份证号" prop="fScale">
  111. <el-input
  112. v-model="dataFormD.fScale"
  113. :disabled="doNot"
  114. placeholder="身份证号"
  115. ></el-input>
  116. </el-form-item>
  117. <el-form-item label="联系电话" prop="fTel">
  118. <el-input
  119. v-model="dataFormD.fTel"
  120. :disabled="doNot"
  121. placeholder="联系电话"
  122. maxlength="11"
  123. ></el-input>
  124. </el-form-item>
  125. <el-form-item label="家庭住址" prop="fAddr">
  126. <el-input
  127. v-model="dataFormD.fAddr"
  128. :disabled="doNot"
  129. placeholder="家庭住址"
  130. ></el-input>
  131. </el-form-item>
  132. <br />
  133. <el-form-item label="个人照片" prop="registerdAddress">
  134. <el-upload
  135. style="width: 300px"
  136. :action="uploadImgUrl"
  137. :before-remove="beforeRemove"
  138. :on-remove="
  139. (res, file) => {
  140. handleRemove(2, res, file);
  141. }
  142. "
  143. :on-success="
  144. (res, file) => {
  145. handleSuccess(1, res, file);
  146. }
  147. "
  148. multiple
  149. :disabled="doNot"
  150. :limit="1"
  151. :headers="headers"
  152. :on-exceed="handleExceed"
  153. >
  154. <el-button size="small" type="primary" :disabled="doNot"
  155. >点击上传</el-button
  156. >
  157. <el-button
  158. size="small"
  159. type="primary"
  160. :disabled="doNot"
  161. v-if="dataFormD.registerdAddress"
  162. @click="preview(1)"
  163. >预览</el-button
  164. >
  165. </el-upload>
  166. </el-form-item>
  167. <el-form-item label="驾驶证照片" prop="manageScope">
  168. <el-upload
  169. style="width: 300px"
  170. :action="uploadImgUrl"
  171. :before-remove="beforeRemove"
  172. :on-remove="
  173. (res, file) => {
  174. handleRemove(2, res, file);
  175. }
  176. "
  177. :on-success="
  178. (res, file) => {
  179. handleSuccess(2, res, file);
  180. }
  181. "
  182. multiple
  183. :disabled="doNot"
  184. :limit="1"
  185. :headers="headers"
  186. :on-exceed="handleExceed"
  187. >
  188. <el-button size="small" :disabled="doNot" type="primary"
  189. >点击上传</el-button
  190. >
  191. <el-button
  192. size="small"
  193. :disabled="doNot"
  194. type="primary"
  195. v-if="dataFormD.manageScope"
  196. @click="preview(2)"
  197. >预览</el-button
  198. >
  199. </el-upload>
  200. </el-form-item>
  201. </el-form>
  202. <span slot="footer" class="dialog-footer">
  203. <el-button type="info" @click="handleUpdata" v-if="hide">修改</el-button>
  204. <el-button @click="visible = false">取消</el-button>
  205. <el-button type="primary" :disabled="doNot" @click="dataFormSubmit()"
  206. >确定</el-button
  207. >
  208. </span>
  209. </el-dialog>
  210. </template>
  211. <script>
  212. import { company, lookOver, preservation } from "@/api/fleet/driverMsg";
  213. import { getToken } from "@/utils/auth";
  214. import Vue from "vue";
  215. Vue.directive("dialogDrag", {
  216. bind(el, binding, vnode, oldVnode) {
  217. const dialogHeaderEl = el.querySelector(".el-dialog__header");
  218. const dragDom = el.querySelector(".el-dialog");
  219. const enlarge = el.querySelector(".enlarge");
  220. dialogHeaderEl.style.cursor = "move";
  221. // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
  222. const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null);
  223. if (enlarge) {
  224. enlarge.onclick = (e) => {
  225. dragDom.style.top = "0px";
  226. dragDom.style.left = "0px";
  227. };
  228. }
  229. dialogHeaderEl.onmousedown = (e) => {
  230. // 鼠标按下,计算当前元素距离可视区的距离
  231. const disX = e.clientX - dialogHeaderEl.offsetLeft;
  232. const disY = e.clientY - dialogHeaderEl.offsetTop;
  233. // 获取到的值带px 正则匹配替换
  234. let styL, styT;
  235. // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px
  236. if (sty.left.includes("%")) {
  237. styL =
  238. +document.body.clientWidth * (+sty.left.replace(/\%/g, "") / 100);
  239. styT =
  240. +document.body.clientHeight * (+sty.top.replace(/\%/g, "") / 100);
  241. } else {
  242. styL = +sty.left.replace(/\px/g, "");
  243. styT = +sty.top.replace(/\px/g, "");
  244. }
  245. document.onmousemove = function (e) {
  246. // 通过事件委托,计算移动的距离
  247. const l = e.clientX - disX;
  248. const t = e.clientY - disY;
  249. // 移动当前元素
  250. if (t + styT >= 0) {
  251. dragDom.style.top = `${t + styT}px`;
  252. }
  253. dragDom.style.left = `${l + styL}px`;
  254. // 将此时的位置传出去
  255. // binding.value({x:e.pageX,y:e.pageY})
  256. };
  257. document.onmouseup = function (e) {
  258. document.onmousemove = null;
  259. document.onmouseup = null;
  260. };
  261. };
  262. },
  263. });
  264. export default {
  265. props: {
  266. dataForm: {
  267. type: Object,
  268. require: false,
  269. },
  270. },
  271. data() {
  272. return {
  273. dialogFull: false,
  274. hide: false,
  275. doNot: true,
  276. visible: false,
  277. dataFormD: {},
  278. uploadImgUrl: process.env.VUE_APP_BASE_API + "/common/upload", // 上传的图片服务器地址
  279. headers: {
  280. Authorization: "Bearer " + getToken(),
  281. },
  282. dataRule: {
  283. fPid: [
  284. {
  285. required: true,
  286. message: "请选择驾驶员所属公司id",
  287. trigger: "blur",
  288. },
  289. ],
  290. fName: [
  291. { required: true, message: "请输入驾驶员姓名", trigger: "blur" },
  292. ],
  293. fScale: [
  294. { required: true, message: "请输入身份证号", trigger: "blur" },
  295. ],
  296. fTel: [
  297. { required: true, message: "请输入联系电话", trigger: "blur" },
  298. {
  299. pattern: /^((0\d{2,3}-\d{7,8})|(1[0123456789]\d{9}))$/,
  300. message: "请正确输入手机号",
  301. trigger: "blur",
  302. },
  303. ],
  304. },
  305. optionsProjectTypeItem: [],
  306. fileList: [],
  307. uploadHeaders: {
  308. // localStorage.setItem('token', data.token)
  309. token: localStorage.getItem("token"),
  310. },
  311. uploadURL:
  312. "http://test.echepei.com/api/admin/fleet/carManage/uplodaImgForDrivingLicense",
  313. };
  314. },
  315. methods: {
  316. full() {
  317. this.dialogFull = !this.dialogFull;
  318. },
  319. handleUpdata() {
  320. this.hide = false;
  321. this.doNot = false;
  322. },
  323. preview(actid) {
  324. if (actid === 1) {
  325. window.open(this.dataFormD.registerdAddress);
  326. } else {
  327. window.open(this.dataFormD.manageScope);
  328. }
  329. },
  330. handlePreview(file) {
  331. this.$message.success("如需预览请点击预览");
  332. },
  333. handleExceed(files, fileList) {
  334. this.$message.warning(`当前限制选择 1 个文件件`);
  335. },
  336. beforeRemove(file, fileList) {
  337. return this.$confirm(`确定移除 ${file.fName}?`);
  338. },
  339. init() {
  340. this.hide = true;
  341. this.visible = true;
  342. this.needCondition();
  343. console.log(this.dataForm);
  344. if (this.dataForm.id) {
  345. lookOver(this.dataForm.id).then((data) => {
  346. this.doNot = true;
  347. this.dataFormD = data.data;
  348. this.dataFormD.fFax = Number(data.data.fFax);
  349. this.fTmsorderbillsattachs = data.data.fTmsorderbillsattachs;
  350. this.optionsProjectTypeItem = data.data.fleetCompanyMsg;
  351. if (data.data.fleetCompanyMsg) {
  352. this.handleSelect();
  353. }
  354. });
  355. } else {
  356. this.dataFormD = {
  357. fPid: "",
  358. fName: "",
  359. fFax: "",
  360. fContractb: "",
  361. fEaddr: "",
  362. fContracte: "",
  363. fScale: "",
  364. fTel: "",
  365. fAddr: "",
  366. registerdAddress: "",
  367. manageScope: "",
  368. };
  369. this.hide = false;
  370. this.doNot = false;
  371. }
  372. },
  373. // 获取下拉选项
  374. needCondition() {
  375. company().then((data) => {
  376. console.log(data);
  377. if (data && data.code === 200) {
  378. this.optionsProjectTypeItem = data.rows;
  379. } else {
  380. this.$message.error(data.msg);
  381. }
  382. });
  383. },
  384. // 图片上传回调
  385. handleSuccess(response, res, file) {
  386. console.log(response);
  387. if (response === 2) {
  388. console.log("22222");
  389. this.dataFormD.manageScope = res.url;
  390. console.log(this.dataFormD.manageScope);
  391. } else {
  392. console.log("11111");
  393. this.dataFormD.registerdAddress = res.url;
  394. }
  395. },
  396. // 文件列表移除文件时的钩子
  397. handleRemove(actid, file, fileList) {
  398. if (actid === 1) {
  399. this.dataForm.registerdAddress = "";
  400. } else {
  401. this.dataForm.manageScope = "";
  402. }
  403. },
  404. // 表单提交
  405. dataFormSubmit() {
  406. console.log(this.dataFormD);
  407. this.$refs["dataForm"].validate((valid) => {
  408. if (valid) {
  409. preservation(this.dataFormD).then((data) => {
  410. if (data && data.code === 200) {
  411. this.$message({
  412. message: "操作成功",
  413. type: "success",
  414. duration: 1500,
  415. onClose: () => {
  416. this.visible = false;
  417. this.$emit("refreshDataList");
  418. },
  419. });
  420. } else {
  421. this.$message.error(data.msg);
  422. }
  423. });
  424. }
  425. });
  426. },
  427. },
  428. };
  429. </script>
  430. <style scoped>
  431. .el-form-item {
  432. width: 49%;
  433. margin-bottom: 20px;
  434. display: inline-block;
  435. }
  436. .el-select {
  437. display: block;
  438. }
  439. .upload-demo {
  440. margin-left: 50px;
  441. }
  442. .avue-crud__dialog__header {
  443. display: -webkit-box;
  444. display: -ms-flexbox;
  445. display: flex;
  446. -webkit-box-align: center;
  447. -ms-flex-align: center;
  448. align-items: center;
  449. -webkit-box-pack: justify;
  450. -ms-flex-pack: justify;
  451. justify-content: space-between;
  452. }
  453. .el-dialog__title {
  454. color: rgba(0, 0, 0, 0.85);
  455. font-weight: 500;
  456. word-wrap: break-word;
  457. }
  458. .avue-crud__dialog__menu {
  459. padding-right: 20px;
  460. float: left;
  461. }
  462. </style>