dialog.addletter.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348
  1. <template>
  2. <div class="edu-training-edit">
  3. <DialogCom
  4. :title="title"
  5. @close="onHide"
  6. :visible.sync="isShow"
  7. width="1000px"
  8. >
  9. <div class="page-body">
  10. <el-form
  11. ref="form"
  12. :model="formData"
  13. :rules="formDataRules"
  14. label-width="120px"
  15. >
  16. <el-row>
  17. <el-col :span="12">
  18. <el-form-item prop="reasons" label="出入事由">
  19. <el-input
  20. v-model="formData.reasons"
  21. placeholder="请输入出入事由"
  22. maxlength="100"
  23. />
  24. </el-form-item>
  25. </el-col>
  26. <el-col :span="12">
  27. <el-form-item label="接待机构" prop="receptionOrgIds">
  28. <org-tree-select v-model="formData.receptionOrgIds" ref="orgTreeSelect">
  29. </org-tree-select>
  30. </el-form-item>
  31. </el-col>
  32. <el-col :span="12">
  33. <el-form-item label="介绍信编号" prop="letterNo">
  34. <el-input
  35. v-model="formData.letterNo"
  36. placeholder="请输入介绍信编号"
  37. maxlength="10"
  38. />
  39. </el-form-item>
  40. </el-col>
  41. <el-col :span="12">
  42. <el-form-item prop="range" label="介绍信有效期">
  43. <DataRangePicker
  44. v-model="formData.range"
  45. key="daterange"
  46. type="daterange"
  47. />
  48. </el-form-item>
  49. </el-col>
  50. <el-col :span="12">
  51. <el-form-item label="上传介绍信" prop="letterFile">
  52. <K-file-upload
  53. ref="upload"
  54. :limit=2
  55. :defaultValue="formFileListDefualtValue"
  56. v-model="formData.letterFile"
  57. />
  58. </el-form-item>
  59. </el-col>
  60. <el-col :span="12">
  61. <el-form-item label="备注" prop="description">
  62. <el-input
  63. v-model="formData.description"
  64. placeholder="请输入备注"
  65. maxlength="100"
  66. />
  67. </el-form-item>
  68. </el-col>
  69. </el-row>
  70. <el-row :gutter="10" class="mb8">
  71. <el-col :span="1.5">
  72. <el-button
  73. type="primary"
  74. plain
  75. icon="el-icon-plus"
  76. size="mini"
  77. @click="handleAddUser"
  78. >新增人员</el-button
  79. >
  80. </el-col>
  81. </el-row>
  82. <el-table :data="formData.userInfos" style="margin-bottom: 10px;">
  83. <el-table-column label="人员姓名" align="center" prop="userName" />
  84. <el-table-column label="单位" align="center" prop="companyName" />
  85. <el-table-column label="证件号码" align="center" prop="idCard">
  86. </el-table-column>
  87. <el-table-column label="证件照" align="center" prop="imgFile">
  88. <template slot-scope="scope">
  89. <img width="50" height="50" :src="scope.row.imgFile" />
  90. </template> </el-table-column
  91. >
  92. <el-table-column
  93. label="操作"
  94. align="center"
  95. class-name="small-padding fixed-width"
  96. >
  97. <template slot-scope="scope">
  98. <el-button size="mini" type="text" @click="editUser(scope.row)"
  99. >编辑</el-button
  100. >
  101. <el-button size="mini" type="text" @click="remove(scope.row)"
  102. >移除</el-button
  103. >
  104. </template>
  105. </el-table-column>
  106. </el-table>
  107. </el-form>
  108. </div>
  109. <DialogCom
  110. title="添加出入人员"
  111. :visible.sync="open"
  112. width="600px"
  113. append-to-body
  114. @close="onHideUser"
  115. >
  116. <el-form
  117. ref="formUser"
  118. :model="userInfo"
  119. :rules="userInfoRules"
  120. label-width="120px"
  121. >
  122. <el-form-item label="人员姓名" prop="userName">
  123. <el-input v-model="userInfo.userName" maxlength="10" placeholder="请输入姓名" />
  124. </el-form-item>
  125. <el-form-item label="单位" prop="companyName">
  126. <el-input v-model="userInfo.companyName" maxlength="10" placeholder="请输入单位" />
  127. </el-form-item>
  128. <el-form-item label="证件号码" prop="idCard">
  129. <el-input v-model="userInfo.idCard" maxlength="20" placeholder="请输入证件号码" />
  130. </el-form-item>
  131. <el-form-item prop="imgFile" label="上传证件照">
  132. <!-- <ImageListPreview v-model="userInfo.imgFile"></ImageListPreview> -->
  133. <imgUpload ref="uploadimage" type="more" :value="userInfo.imgFile" :limit=2
  134. @input="imageListChanged"></imgUpload>
  135. </el-form-item>
  136. </el-form>
  137. <div slot="footer" class="dialog-footer">
  138. <el-button type="primary" @click="submitUser">确 定</el-button>
  139. <el-button @click="onHideUser">取 消</el-button>
  140. </div>
  141. </DialogCom>
  142. <div slot="footer" class="dialog-footer">
  143. <el-button type="primary" @click="submitForm">确 定</el-button>
  144. <el-button @click="onHide">取 消</el-button>
  145. </div>
  146. </DialogCom>
  147. </div>
  148. </template>
  149. <script>
  150. import { mapState, mapMutations } from "vuex";
  151. import {
  152. listLetter,
  153. getLetter,
  154. delLetter,
  155. addLetter,
  156. updateLetter,
  157. } from "@/api/core/letter";
  158. import OrgTreeSelect from "@/components/orgTreeSelect";
  159. import KFileUpload from "@/components/K-FileUpload/index.vue";
  160. import dayjs from "dayjs";
  161. import imgUpload from "@/components/ImageUpload";
  162. import DataRangePicker from "@/components/dateTime/daterange.picker.vue";
  163. export default {
  164. components: { OrgTreeSelect, KFileUpload, imgUpload,DataRangePicker },
  165. data() {
  166. const params = this.$route.params;
  167. return {
  168. id: params ? params.id : null,
  169. isShow: false,
  170. title: "录入介绍信",
  171. formData: this.reset(),
  172. formDataRules: {
  173. reasons: [{ required: true, message: "请输入出入事由" }],
  174. letterNo: [{ required: true, message: "请输入介绍信编号" }],
  175. receptionOrgIds: [{ required: true, message: "请选择接待机构" }],
  176. range: [{ required: true, message: "请选择介绍信有效期" }],
  177. userInfos: [{ required: true, message: "请添加出入人员" }],
  178. letterFile:[{ required: true, message: "请上传介绍信" }],
  179. },
  180. userInfoRules: {
  181. userName: [{ required: true, message: "请输入姓名" }],
  182. companyName: [{ required: true, message: "请输入单位" }],
  183. idCard: [{ required: true, message: "请输入证件号码" }],
  184. imgFile: [{ required: true, message: "请上传证件照" }],
  185. },
  186. startDatepickerOptions: {
  187. disabledDate: this.endDisabledDate,
  188. },
  189. endDatepickerOptions: {
  190. disabledDate: this.endDisabledDate,
  191. },
  192. formFileListDefualtValue: [],
  193. open: false,
  194. userInfo: this.resetUserInfo(),
  195. imageList: [],
  196. };
  197. },
  198. dicts: ["letter_status"],
  199. props: {},
  200. watch: {},
  201. created() {},
  202. computed: {
  203. ...mapState(["loginUser", "org"]),
  204. },
  205. methods: {
  206. ...mapMutations([]),
  207. reset(other = {}) {
  208. return {
  209. reasons: null,
  210. letterNo:null,
  211. receptionOrgIds: [],
  212. range:[],
  213. description: null,
  214. letterFile: [],
  215. userInfos: [],
  216. type:1,
  217. status:0,
  218. ...other,
  219. };
  220. },
  221. resetUserInfo() {
  222. return {
  223. userName: null,
  224. companyName: null,
  225. idCard: null,
  226. imgFile: null,
  227. };
  228. },
  229. async show(id, other = {}) {
  230. if (id) {
  231. this.title = "修改介绍信";
  232. this.isShow = true;
  233. getLetter(id).then((response) => {
  234. let tempRange=[];
  235. tempRange.push(dayjs(response.data.startTime));
  236. tempRange.push(new Date(response.data.endTime));
  237. response.data.range=tempRange;
  238. this.formData = response.data;
  239. this.formFileListDefualtValue=this.formData.letterFile;
  240. });
  241. }
  242. else
  243. {
  244. this.isShow = true;
  245. this.title = "录入介绍信";
  246. this.formData = this.reset();
  247. }
  248. },
  249. handleAddUser() {
  250. this.open = true;
  251. },
  252. imageListChanged(list) {
  253. this.userInfo.imgFile = list;
  254. },
  255. endDisabledDate(time) {
  256. //小于开始日期禁止选择
  257. let startDate = new Date();
  258. startDate.setTime(startDate.getTime() - 3600 * 1000 * 24);
  259. if (this.formData.trainingStartDateTime) {
  260. startDate = new Date(
  261. dayjs(this.formData.trainingStartDateTime).format("YYYY-MM-DD")
  262. );
  263. startDate.setTime(startDate.getTime() - 3600 * 1000 * 24);
  264. }
  265. return time.getTime() < new Date(startDate).getTime();
  266. },
  267. startDateChanged(time) {
  268. if (
  269. dayjs(this.formData.startTime).isAfter(dayjs(this.formData.endTime))
  270. ) {
  271. this.formData.endTime = this.formData.startTime;
  272. }
  273. },
  274. endDateChanged(time) {
  275. if (
  276. dayjs(this.formData.startTime).isAfter(dayjs(this.formData.endTime))
  277. ) {
  278. this.formData.startTime = this.formData.endTime;
  279. }
  280. },
  281. onHide() {
  282. this.isShow = false;
  283. this.formData = this.reset();
  284. },
  285. onHideUser() {
  286. this.open = false;
  287. this.imageList = [];
  288. this.userInfo = this.resetUserInfo();
  289. },
  290. submitUser() {
  291. this.$refs["formUser"].validate((valid) => {
  292. if (valid) {
  293. this.open = false;
  294. console.log("================", this.userInfo);
  295. this.formData.userInfos.push(this.userInfo);
  296. this.userInfo = this.resetUserInfo();
  297. this.imageList = [];
  298. }
  299. });
  300. },
  301. submitForm() {
  302. this.$refs["form"].validate((valid) => {
  303. if (valid) {
  304. if (this.formData.userInfos.length <= 0) {
  305. this.$message.error("请添加人员");
  306. return;
  307. }
  308. console.log("================", this.formData);
  309. if (this.formData.id != null) {
  310. updateLetter(this.formData).then((response) => {
  311. this.$modal.msgSuccess("修改成功");
  312. this.isShow = false;
  313. this.formData = this.reset();
  314. this.$emit("success", this.formData);
  315. });
  316. } else {
  317. addLetter(this.formData).then((response) => {
  318. this.$modal.msgSuccess("新增成功");
  319. this.isShow = false;
  320. this.formData = this.reset();
  321. this.$emit("success", this.formData);
  322. });
  323. }
  324. }
  325. });
  326. },
  327. editUser(row) {
  328. this.open = true;
  329. this.userInfo = row;
  330. },
  331. remove(row) {
  332. console.log("================", row);
  333. this.formData.userInfos.splice(this.formData.userInfos.indexOf(row), 1);
  334. },
  335. },
  336. mounted() {},
  337. };
  338. </script>