add-dialog.vue 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. <template>
  2. <!-- 上传 -->
  3. <el-dialog :title="title" :visible.sync="dialogVisible" width="60%">
  4. <el-form ref="form" :model="form" :rules="rules" label-width="82px">
  5. <el-row :gutter="15">
  6. <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
  7. <el-form-item prop="type" label="证件类型">
  8. <DictSelection v-model="form.type" dictName="证件类型"></DictSelection>
  9. </el-form-item>
  10. </el-col>
  11. <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
  12. <el-form-item prop="code" label="证照编号">
  13. <el-input placeholder="请输入" v-model="form.code"></el-input>
  14. </el-form-item>
  15. </el-col>
  16. <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
  17. <el-form-item label="等级:" prop="level">
  18. <el-select style="width: 100%" v-model="form.level" filterable>
  19. <el-option :label="item.label" :value="item.value" v-for="(item, index) in levelOptions" :key="index">
  20. </el-option>
  21. </el-select>
  22. </el-form-item>
  23. </el-col>
  24. <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
  25. <el-form-item prop="status" label="状态">
  26. <DictSelection v-model="form.status" dictName="规则状态"></DictSelection>
  27. </el-form-item>
  28. </el-col>
  29. <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
  30. <el-form-item prop="holder" label="持证人">
  31. <el-input v-model="form.holder" clearable readonly placeholder="请选择"
  32. @click.native="openStaffSelection"></el-input>
  33. </el-form-item>
  34. </el-col>
  35. <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
  36. <el-form-item label="颁发时间">
  37. <el-date-picker style="width: 100%" v-model="form.enactorTime" type="date"
  38. value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期">
  39. </el-date-picker>
  40. </el-form-item>
  41. </el-col>
  42. <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
  43. <el-form-item prop="date" label="有效期至">
  44. <el-date-picker style="width: 100%" v-model="form.date" type="daterange" range-separator="至"
  45. start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd HH:mm:ss"
  46. :default-time="['00:00:00', '23:59:59']">
  47. </el-date-picker>
  48. </el-form-item>
  49. </el-col>
  50. <el-col v-bind="styleResponsive ? { sm: 24 } : { span: 24 }">
  51. <el-form-item prop="fileObj" label="证照图片">
  52. <fileUpload v-model="form.fileObj" module="main" :showLib="true" :limit="5" />
  53. </el-form-item>
  54. </el-col>
  55. <el-col v-bind="styleResponsive ? { sm: 24 } : { span: 24 }">
  56. <el-form-item prop="remark" label="备注">
  57. <el-input placeholder="请输入" v-model="form.remark" type="textarea" :rows="3" :resize="`none`"></el-input>
  58. </el-form-item>
  59. </el-col>
  60. </el-row>
  61. </el-form>
  62. <staffSelection ref="staffSelection" @confirm="confirmStaffSelection"></staffSelection>
  63. <!-- <headerTitle title="关联产品" v-show="!isUpdate"></headerTitle> -->
  64. <!-- <ele-pro-table ref="table" :needPage="false" :columns="columns" :datasource="form.datasource" class="time-form"
  65. :toolkit="[]"> -->
  66. <!-- 表头工具栏 -->
  67. <!-- <template v-slot:toolbar>
  68. <el-button
  69. size="small"
  70. type="primary"
  71. icon="el-icon-plus"
  72. class="ele-btn-icon"
  73. @click="handParent('', -1)"
  74. v-if="!isContractId"
  75. >
  76. 新增
  77. </el-button>
  78. </template> -->
  79. <!-- 操作列 -->
  80. <!-- <template v-slot:action="scope">
  81. <el-popconfirm v-if="!isContractId" class="ele-action" title="确定要删除吗?" @confirm="remove(scope.$index)">
  82. <template v-slot:reference>
  83. <el-link type="danger" :underline="false" icon="el-icon-delete">
  84. 删除
  85. </el-link>
  86. </template>
  87. </el-popconfirm>
  88. </template>
  89. </ele-pro-table>
  90. <product-list
  91. ref="productListRef"
  92. classType="1"
  93. :is-get-inventory-total="true"
  94. @changeParent="changeParent"
  95. ></product-list> -->
  96. <div slot="footer" class="dialog-footer">
  97. <el-button size="small" @click="submit" type="primary">提 交</el-button>
  98. <el-button size="small" @click="close">关 闭</el-button>
  99. </div>
  100. </el-dialog>
  101. </template>
  102. <script>
  103. import staffSelection from './staffSelection.vue';
  104. import { saveOrEdit, getPhotoInfo } from '@/api/documentManagement';
  105. import fileUpload from '@/components/upload/fileUpload';
  106. import imgUpload from '@/components/upload/imgUpload';
  107. import { getCode } from '@/api/ruleManagement/matter';
  108. import productList from './product-list.vue';
  109. export default {
  110. components: {
  111. fileUpload,
  112. imgUpload,
  113. staffSelection,
  114. productList
  115. },
  116. //注册组件
  117. data() {
  118. const defaultForm = {
  119. code: '',
  120. holder: '',
  121. holderId: '',
  122. date: [],
  123. fileObj: []
  124. };
  125. return {
  126. dialogVisible: false,
  127. levelOptions: [
  128. {
  129. label: '初级',
  130. value: '1'
  131. },
  132. {
  133. label: '中级',
  134. value: '2'
  135. },
  136. {
  137. label: '高级',
  138. value: '3'
  139. }
  140. ],
  141. rules: {
  142. code: [
  143. { required: true, trigger: 'blur', message: '请输入证照编号' }
  144. ],
  145. // level: [{ required: true, trigger: 'change', message: '选择等级' }],
  146. type: [
  147. { required: true, trigger: 'change', message: '请选择证件类型' }
  148. ],
  149. date: [
  150. { required: true, trigger: 'change', message: '请选择有效期' }
  151. ],
  152. holder: [
  153. { required: true, trigger: 'change', message: '请输入持证人' }
  154. ],
  155. status: [
  156. { required: true, trigger: 'change', message: '请选择状态' }
  157. ],
  158. fileObj: [
  159. { required: true, trigger: 'change', message: '请选择证照图片' }
  160. ]
  161. },
  162. form: { ...defaultForm },
  163. title: '新增',
  164. columns: [{
  165. width: 45,
  166. type: 'index',
  167. columnKey: 'index',
  168. align: 'center',
  169. fixed: 'left'
  170. },
  171. {
  172. prop: 'productName',
  173. label: '名称',
  174. slot: 'productName',
  175. headerSlot: 'headerProductName',
  176. align: 'center',
  177. fixed: 'left'
  178. },
  179. {
  180. prop: 'productCode',
  181. label: '编码',
  182. slot: 'productCode',
  183. align: 'center'
  184. },
  185. {
  186. prop: 'productCategoryName',
  187. label: '类型',
  188. slot: 'productCategoryName',
  189. align: 'center'
  190. },
  191. {
  192. prop: 'specification',
  193. label: '规格',
  194. slot: 'specification',
  195. align: 'center'
  196. },
  197. {
  198. columnKey: 'action',
  199. label: '操作',
  200. width: 80,
  201. align: 'left',
  202. resizable: false,
  203. slot: 'action',
  204. showOverflowTooltip: true
  205. }]
  206. };
  207. },
  208. computed: {
  209. // 是否开启响应式布局
  210. styleResponsive() {
  211. return this.$store.state.theme.styleResponsive;
  212. }
  213. },
  214. created() {},
  215. methods: {
  216. //选择负责人
  217. confirmStaffSelection(data) {
  218. console.log(data);
  219. this.form.holderId = data.map((item) => item.id).join(',');
  220. this.form.holder = data.map((item) => item.name).join(',');
  221. this.$forceUpdate();
  222. console.log(this.form);
  223. },
  224. openStaffSelection() {
  225. this.$refs.staffSelection.open([]);
  226. },
  227. open(row) {
  228. this.$refs.form && this.$refs.form.clearValidate();
  229. this.dialogVisible = true;
  230. if (row) {
  231. this.title = '修改';
  232. this.getInfo(row.id);
  233. } else {
  234. this.title = '新增';
  235. this.$refs.form.resetFields();
  236. this.form = { ...this.defaultForm };
  237. this.getOrderCode();
  238. }
  239. },
  240. async getOrderCode() {
  241. const data = await getCode('license_code');
  242. this.$set(this.form, 'code', data);
  243. },
  244. async getInfo(id) {
  245. const data = await getPhotoInfo(id);
  246. this.form = {
  247. ...data,
  248. date: [data.validityStartTime, data.validityEndTime]
  249. };
  250. },
  251. close() {
  252. this.dialogVisible = false;
  253. // this.$refs.form.resetFields()
  254. },
  255. submit() {
  256. this.$refs.form.validate((valid) => {
  257. if (!valid) {
  258. return false;
  259. }
  260. this.loading = true;
  261. if (this.form.date?.length) {
  262. this.form.validityStartTime = this.form.date[0];
  263. this.form.validityEndTime = this.form.date[1];
  264. }
  265. // if (this.form.fileObj.length) {
  266. // this.form.fileObj = this.form.fileObj[0];
  267. // }
  268. const data = {
  269. ...this.form,
  270. };
  271. delete data.date;
  272. saveOrEdit(data)
  273. .then((msg) => {
  274. this.loading = false;
  275. this.$message.success(msg);
  276. this.dialogVisible = false;
  277. this.$emit('success');
  278. })
  279. .catch((e) => {
  280. this.loading = false;
  281. });
  282. });
  283. },
  284. handParent() {
  285. this.$refs.productListRef.open(-1);
  286. },
  287. }
  288. };
  289. </script>
  290. <style lang="scss">
  291. .el-form-item {
  292. margin-bottom: 20px !important;
  293. }
  294. </style>