retrievalForm.vue 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. <template>
  2. <el-form
  3. ref="form"
  4. :model="formData"
  5. :inline="true"
  6. :label-width="labelWidth"
  7. size="small"
  8. >
  9. <el-row>
  10. <el-col
  11. :span="6"
  12. v-for="field in formFields"
  13. :key="field.label"
  14. v-show="field.Retained !== false"
  15. >
  16. <el-form-item :label="field.label">
  17. <template v-if="field.type === 'input'">
  18. <el-input
  19. v-model="formData[field.name]"
  20. :placeholder="'请输入' + field.label"
  21. clearable
  22. ></el-input>
  23. </template>
  24. <template v-else-if="field.type === 'select'">
  25. <el-select
  26. v-model="formData[field.name]"
  27. filterable
  28. clearable
  29. :placeholder="'请选择' + field.label"
  30. @change="selectChange($event, field.name)"
  31. >
  32. <el-option
  33. v-for="(option, index) in field.options"
  34. :key="index"
  35. :label="
  36. field.optionsIabel ? option[field.optionsIabel] : option.name
  37. "
  38. :value="
  39. field.optionsValue ? option[field.optionsValue] : option.id
  40. "
  41. ></el-option>
  42. </el-select>
  43. </template>
  44. <template v-else-if="field.type === 'date'">
  45. <el-date-picker
  46. :type="field.list == 'payList' ? 'datetimerange' : 'daterange'"
  47. :format="field.list == 'payList' ? 'yyyy-MM-dd HH:mm:ss' : 'yyyy-MM-dd'"
  48. :value-format="field.list == 'payList' ? 'yyyy-MM-dd HH:mm:ss' : 'yyyy-MM-dd'"
  49. range-separator="至"
  50. start-placeholder="开始日期"
  51. end-placeholder="结束日期"
  52. v-model="formData[field.list]"
  53. style="width: 100%"
  54. @change="dateChange($event, field.name)"
  55. ></el-date-picker>
  56. </template>
  57. <template v-else-if="field.type === 'switch'">
  58. <el-switch v-model="formData[field.name]"></el-switch>
  59. </template>
  60. <template v-else-if="field.type === 'checkbox'">
  61. <el-checkbox-group v-model="formData[field.name]">
  62. <el-checkbox
  63. v-for="(option, index) in field.options"
  64. :key="index"
  65. :label="option.label"
  66. :name="field.name"
  67. ></el-checkbox>
  68. </el-checkbox-group>
  69. </template>
  70. <template v-else-if="field.type === 'radio'">
  71. <el-radio-group v-model="formData[field.name]">
  72. <el-radio
  73. v-for="(option, index) in field.options"
  74. :key="index"
  75. :label="option.label"
  76. ></el-radio>
  77. </el-radio-group>
  78. </template>
  79. <template v-else-if="field.type === 'textarea'">
  80. <el-input type="textarea" v-model="formData[field.name]"></el-input>
  81. </template>
  82. </el-form-item>
  83. </el-col>
  84. <el-col :span="2" :offset="1" style="margin-top: 10px" class="fold">
  85. <span @click="toggleCollapse">折叠筛选信息</span>
  86. <img
  87. src="../../../src/icon/Arrow.png"
  88. alt
  89. :style="{
  90. weith: '10px',
  91. height: '10px',
  92. transform: `rotate(${isCollapsed ? 0 : 180}deg)`,
  93. }"
  94. />
  95. </el-col>
  96. <el-col :span="2" style="text-align: right">
  97. <el-button v-if="isExport" size="small" type="primary" @click="exportFileSubmit"
  98. >导出</el-button
  99. >
  100. <el-button size="small" type="primary" @click="handleSubmit"
  101. >查询</el-button
  102. >
  103. </el-col>
  104. </el-row>
  105. </el-form>
  106. </template>
  107. <script>
  108. export default {
  109. props: {
  110. fields: {
  111. type: Array,
  112. required: true,
  113. },
  114. labelWidth: {
  115. type: String,
  116. default: "120px",
  117. },
  118. dateType :{
  119. type: String,
  120. default: "0",
  121. },
  122. isExport:{
  123. type:Boolean,
  124. default:false,
  125. }
  126. },
  127. data() {
  128. return {
  129. formFields: [], // 动态表单字段配置
  130. formData: {}, // 表单数据对象
  131. isCollapsed: true,
  132. };
  133. },
  134. computed: {
  135. currentDate() {
  136. const today = new Date();
  137. const year = today.getFullYear();
  138. const month = String(today.getMonth() + 1).padStart(2, "0");
  139. const day = String(today.getDate()).padStart(2, "0");
  140. return `${year}-${month}-${day}`;
  141. },
  142. },
  143. created() {
  144. this.fields.forEach((field) => {
  145. if(this.dateType=="1"){
  146. if (field.label === "报价时间" && !this.formData[field.list]) {
  147. this.$set(this.formData, field.list, [
  148. this.currentDate,
  149. this.currentDate,
  150. ]);
  151. this.$set(this.formData, field.name[0], this.currentDate);
  152. this.$set(this.formData, field.name[1], this.currentDate);
  153. }
  154. if (field.label === "签单时间" && !this.formData[field.list]) {
  155. this.$set(this.formData, field.list, [
  156. '',
  157. '',
  158. ]);
  159. this.$set(this.formData, field.name[0], '');
  160. this.$set(this.formData, field.name[1], '');
  161. }
  162. }else if(this.dateType=="3"){
  163. if (field.label === "报价时间" && !this.formData[field.list]) {
  164. this.$set(this.formData, field.list, [
  165. '',
  166. '',
  167. ]);
  168. this.$set(this.formData, field.name[0], '');
  169. this.$set(this.formData, field.name[1], '');
  170. }
  171. if (field.label === "签单时间" && !this.formData[field.list]) {
  172. this.$set(this.formData, field.list, [
  173. this.currentDate,
  174. this.currentDate,
  175. ]);
  176. this.$set(this.formData, field.name[0], this.currentDate);
  177. this.$set(this.formData, field.name[1], this.currentDate);
  178. }
  179. }
  180. });
  181. this.formFields = this.fields;
  182. this.resetForm();
  183. this.defaultTime = this.currentDate;
  184. },
  185. methods: {
  186. selectChange(id, filed) {
  187. switch (filed) {
  188. case "provinceId":
  189. console.log(this.formData);
  190. break;
  191. case "cityId":
  192. break;
  193. case "countyId":
  194. break;
  195. default:
  196. break;
  197. }
  198. if (id) {
  199. this.$emit("areaSelectChange", { id, filed });
  200. }
  201. },
  202. dateChange(event, filed) {
  203. if (event) {
  204. this.formData[filed[0]] = event[0];
  205. this.formData[filed[1]] = event[1];
  206. } else {
  207. this.formData[filed[0]] = "";
  208. this.formData[filed[1]] = "";
  209. }
  210. },
  211. toggleCollapse() {
  212. this.isCollapsed = !this.isCollapsed; // 切换折叠状态
  213. this.$emit("toggleCollapse", this.isCollapsed);
  214. },
  215. //导出
  216. exportFileSubmit(){
  217. this.$refs.form.validate((valid) => {
  218. if (valid) {
  219. this.$emit("exportSubmit", this.formData);
  220. } else {
  221. // 表单验证失败,做相应处理
  222. }
  223. });
  224. },
  225. //查询
  226. handleSubmit() {
  227. this.$refs.form.validate((valid) => {
  228. if (valid) {
  229. this.$emit("submit", this.formData);
  230. } else {
  231. // 表单验证失败,做相应处理
  232. }
  233. });
  234. },
  235. resetForm() {},
  236. },
  237. };
  238. </script>
  239. <style scoped lang="scss">
  240. .el-row {
  241. display: flex;
  242. flex-wrap: wrap;
  243. align-content: flex-start;
  244. }
  245. .el-form-item >>> .el-input {
  246. width: 250px;
  247. }
  248. .el-form-item >>> .el-form-item__content {
  249. width: 250px;
  250. }
  251. .fold {
  252. font-size: 14px;
  253. color: #d42426;
  254. cursor: pointer;
  255. }
  256. >>> .el-form-item--mini.el-form-item,
  257. .el-form-item--small.el-form-item {
  258. margin-bottom: 10px;
  259. }
  260. </style>