dialog.sign.vue 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. <template>
  2. <div class="rule-type">
  3. <DialogCom
  4. :title="id ? '编辑' : '新增'"
  5. :visible.sync="isShow"
  6. @close="onHide"
  7. width="600px"
  8. >
  9. <div class="page-body">
  10. <el-form
  11. :model="formData"
  12. :rules="formDataRules"
  13. size="small"
  14. ref="form"
  15. label-position="right"
  16. label-width="130px"
  17. label-prefix=":"
  18. >
  19. <el-form-item prop="partyA" label="甲方:">
  20. <div>
  21. <el-input
  22. v-model="formData.partyA"
  23. placeholder="请输入甲方:"
  24. ></el-input>
  25. </div>
  26. </el-form-item>
  27. <el-form-item prop="partyAOrg" label="甲方机构:">
  28. <div>
  29. <el-input
  30. v-model="formData.partyAOrg"
  31. placeholder="请输入甲方机构:"
  32. ></el-input>
  33. </div>
  34. </el-form-item>
  35. <el-form-item prop="partyB" label="乙方:">
  36. <div>
  37. <el-input
  38. v-model="formData.partyB"
  39. placeholder="请输入乙方:"
  40. ></el-input>
  41. </div>
  42. </el-form-item>
  43. <el-form-item prop="partyBOrg" label="乙方机构:">
  44. <div>
  45. <el-input
  46. v-model="formData.partyBOrg"
  47. placeholder="请输入乙方机构:"
  48. ></el-input>
  49. </div>
  50. </el-form-item>
  51. <!-- <el-form-item prop="userIds" label="签署人:">
  52. <div>
  53. <el-input
  54. :readonly="true"
  55. v-model="joinedStringArray"
  56. placeholder="点击选择"
  57. ></el-input>
  58. <el-button @click="selectUser">选择</el-button>
  59. </div>
  60. </el-form-item> -->
  61. <el-form-item prop="time" label="签署时间:">
  62. <el-date-picker
  63. v-model="formData.time"
  64. :clearable="true"
  65. type="date"
  66. placeholder="选择时间"
  67. value-format="yyyy-MM-dd hh:mm:ss"
  68. >
  69. </el-date-picker>
  70. </el-form-item>
  71. <el-col :xs="24" :sm="24" :md="24" :lg="24">
  72. <el-form-item label="上传文件" prop="files">
  73. <!-- <imgs-upload
  74. :limit="10"
  75. v-model="formData.files"
  76. :fileSize="2"
  77. ></imgs-upload> -->
  78. <W-file-upload
  79. ref="upload"
  80. :defaultValue="formFileListDefualtValue"
  81. v-model="formData.files"
  82. />
  83. </el-form-item>
  84. </el-col>
  85. </el-form>
  86. </div>
  87. <div slot="footer" class="dialog-footer">
  88. <el-button @click="isShow = false">取消</el-button>
  89. <el-button type="primary" @click="onSubmit">确定</el-button>
  90. </div>
  91. </DialogCom>
  92. <UserSelector
  93. ref="UserSelector"
  94. @select="onUserSelect"
  95. :clearSelectOnClose="false"
  96. ></UserSelector>
  97. </div>
  98. </template>
  99. <script>
  100. import { mapState, mapMutations } from "vuex";
  101. import ImgsUpload from "@/components/ImgsUpload";
  102. import UserSelector from "@/components/userSelector/index.vue";
  103. import imgUpload from "@/components/ImageUpload/index.vue";
  104. import WFileUpload from "@/components/W-FileUpload/index.vue";
  105. export default {
  106. data() {
  107. return {
  108. formFileListDefualtValue: [],
  109. tem: null,
  110. id: null,
  111. isShow: false,
  112. formData: this.reset(),
  113. formDataRules: {
  114. partyA: [{ required: true, message: "请输入甲方" }],
  115. partyAOrg: [{ required: true, message: "请输入甲方机构" }],
  116. partyB: [{ required: true, message: "请输入乙方" }],
  117. partyBOrg: [{ required: true, message: "请输入乙方机构" }],
  118. userIds: [{ required: true, message: "请选择用户" }],
  119. time: [{ required: true, message: "请选择时间" }],
  120. files: [{ required: true, message: "请上传责任书" }],
  121. },
  122. };
  123. },
  124. watch: {},
  125. computed: {
  126. joinedStringArray: {
  127. get() {
  128. return this.formData.names.join(", ");
  129. },
  130. set(value) {
  131. this.formData.names = value.split(", ");
  132. },
  133. },
  134. ...mapState([]),
  135. },
  136. methods: {
  137. ...mapMutations([]),
  138. imageListChanged(list) {
  139. this.formData.files = list;
  140. console.log("files", this.formData.files);
  141. },
  142. //选择用户回调
  143. onUserSelect(data) {
  144. var ids = data.map((obj) => obj.id);
  145. var names = data.map((obj) => obj.name);
  146. this.formData.userIds = ids;
  147. this.formData.names = names;
  148. // console.log(this.formData.userIds, "this.formData.userIds");
  149. },
  150. //用户选择
  151. selectUser(event) {
  152. console.log("ww");
  153. // event.preventDefault();
  154. this.$refs.UserSelector.show();
  155. },
  156. reset() {
  157. return {
  158. id: null,
  159. userIds: [],
  160. time: null,
  161. files: [],
  162. names: [],
  163. partyA:null,
  164. partyAOrg:null,
  165. partyB:null,
  166. partyBOrg:null,
  167. };
  168. },
  169. async show(row) {
  170. this.tem = row;
  171. this.formFileListDefualtValue = [];
  172. // console.log(row);
  173. if (row != undefined && row != null) {
  174. this.id = row.id;
  175. this.formData = row;
  176. this.formFileListDefualtValue = row.files;
  177. } else {
  178. this.formData = this.reset();
  179. }
  180. // this.id = id;
  181. this.isShow = true;
  182. },
  183. // 事件
  184. onHide() {
  185. // this.formData = this.reset();
  186. // this.$refs.form.resetFields();
  187. },
  188. onSubmit() {
  189. this.$refs.form.validate(async (isValidate) => {
  190. if (!isValidate) return;
  191. this.$refs["UserSelector"].clearSelected();
  192. this.$emit("success", this.formData, this.tem);
  193. this.isShow = false;
  194. });
  195. },
  196. // 事件
  197. //apimark//
  198. },
  199. mounted() {},
  200. components: { ImgsUpload, UserSelector, imgUpload, WFileUpload },
  201. };
  202. </script>
  203. <style lang="scss" scoped>
  204. .brand_info {
  205. .el-form {
  206. width: 600px;
  207. padding-top: 40px;
  208. }
  209. }
  210. </style>