SearchFormItem.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348
  1. <template>
  2. <a-form-item v-if="item.view === DateTypeEnum.Date" :labelCol="labelCol" :class="'jeecg-online-search'">
  3. <template #label>
  4. <span :title="item.label" class="label-text">{{ item.label }}</span>
  5. </template>
  6. <template v-if="single_mode === item.mode">
  7. <a-date-picker :showTime="false" valueFormat="YYYY-MM-DD" :placeholder="'请选择' + item.label" v-model:value="queryParam[item.field]" />
  8. </template>
  9. <template v-else>
  10. <a-date-picker
  11. :showTime="false"
  12. valueFormat="YYYY-MM-DD"
  13. placeholder="开始日期"
  14. v-model:value="queryParam[item.field + '_begin']"
  15. style="width: calc(50% - 15px)"
  16. />
  17. <span class="group-query-strig">~</span>
  18. <a-date-picker
  19. :showTime="false"
  20. valueFormat="YYYY-MM-DD"
  21. placeholder="结束日期"
  22. v-model:value="queryParam[item.field + '_end']"
  23. style="width: calc(50% - 15px)"
  24. />
  25. </template>
  26. </a-form-item>
  27. <a-form-item v-else-if="item.view === DateTypeEnum.Datetime" :labelCol="labelCol" :class="'jeecg-online-search'">
  28. <template #label :title="item.label">
  29. <span :title="item.label" class="label-text">{{ item.label }}</span>
  30. </template>
  31. <template v-if="single_mode === item.mode">
  32. <a-date-picker
  33. :placeholder="'请选择' + item.label"
  34. :show-time="true"
  35. valueFormat="YYYY-MM-DD HH:mm:ss"
  36. v-model:value="queryParam[item.field]"
  37. />
  38. </template>
  39. <template v-else>
  40. <a-date-picker
  41. placeholder="选择开始时间"
  42. :show-time="true"
  43. valueFormat="YYYY-MM-DD HH:mm:ss"
  44. v-model:value="queryParam[item.field + '_begin']"
  45. style="width: calc(50% - 9px); min-width: 60px"
  46. />
  47. <span class="group-query-strig" style="width: auto; padding: 0 4px">~</span>
  48. <a-date-picker
  49. placeholder="选择结束时间"
  50. :show-time="true"
  51. valueFormat="YYYY-MM-DD HH:mm:ss"
  52. v-model:value="queryParam[item.field + '_end']"
  53. style="width: calc(50% - 9px); min-width: 60px"
  54. />
  55. </template>
  56. </a-form-item>
  57. <a-form-item v-else-if="item.view === DateTypeEnum.Time" :labelCol="labelCol" :class="'jeecg-online-search'">
  58. <template #label>
  59. <span :title="item.label" class="label-text">{{ item.label }}</span>
  60. </template>
  61. <template v-if="single_mode === item.mode">
  62. <a-date-picker :placeholder="'请选择' + item.label" mode="time" valueFormat="HH:mm:ss" v-model:value="queryParam[item.field]" />
  63. </template>
  64. <template v-else>
  65. <a-date-picker
  66. placeholder="请选择开始时间"
  67. mode="time"
  68. valueFormat="HH:mm:ss"
  69. v-model:value="queryParam[item.field + '_begin']"
  70. style="width: calc(50% - 15px)"
  71. />
  72. <span class="group-query-strig">~</span>
  73. <a-date-picker
  74. placeholder="请选择结束时间"
  75. mode="time"
  76. valueFormat="HH:mm:ss"
  77. v-model:value="queryParam[item.field + '_end']"
  78. style="width: calc(50% - 15px)"
  79. />
  80. </template>
  81. </a-form-item>
  82. <a-form-item
  83. v-else-if="item.view === CompTypeEnum.List || item.view === CompTypeEnum.Radio || item.view === CompTypeEnum.Switch"
  84. :labelCol="labelCol"
  85. :class="'jeecg-online-search'"
  86. >
  87. <template #label>
  88. <span :title="item.label" class="label-text">{{ item.label }}</span>
  89. </template>
  90. <JDictSelectTag v-if="item.config === '1'" :placeholder="'请选择' + item.label" v-model="queryParam[item.field]" :dictCode="getDictCode(item)" />
  91. <a-select v-else :placeholder="'请选择' + item.label" v-model:value="queryParam[item.field]">
  92. <template v-for="(obj, index) in dictOptions[getDictOptionKey(item)]" :key="index">
  93. <a-select-option :value="obj.value"> {{ obj.text }}</a-select-option>
  94. </template>
  95. </a-select>
  96. </a-form-item>
  97. <a-form-item v-else-if="item.view === CompTypeEnum.SelTree" :labelCol="labelCol" :class="'jeecg-online-search'">
  98. <template #label>
  99. <span :title="item.label" class="label-text">{{ item.label }}</span>
  100. </template>
  101. <JTreeSelect
  102. :placeholder="'请选择' + item.label"
  103. v-model:value="queryParam[item.field]"
  104. :dict="item.dict"
  105. :pidField="item.pidField"
  106. :pidValue="item.pidValue"
  107. :hasChildField="item.hasChildField"
  108. load-triggle-change
  109. />
  110. <MTreeSelect :placeholder="'请选择' + item.label" v-model:value="queryParam[item.field]" load-triggle-change />
  111. </a-form-item>
  112. <a-form-item v-else-if="item.view === CompTypeEnum.CatTree" :labelCol="labelCol" :class="'jeecg-online-search'">
  113. <template #label>
  114. <span :title="item.label" class="label-text">{{ item.label }}</span>
  115. </template>
  116. <JCategorySelect :pcode="item.pcode" v-model:value="queryParam[item.field]" :placeholder="'请选择' + item.label" />
  117. </a-form-item>
  118. <a-form-item v-else-if="item.view === CompTypeEnum.SelSearch" :labelCol="labelCol" :class="'jeecg-online-search'">
  119. <template #label>
  120. <span :title="item.label" class="label-text">{{ item.label }}</span>
  121. </template>
  122. <JDictSelectTag
  123. v-if="item.config === '1'"
  124. v-model:value="queryParam[item.field]"
  125. :placeholder="'请选择' + item.label"
  126. :dict="getDictCode(item)"
  127. />
  128. <!--TODO 新需要的组件-->
  129. <!-- <j-online-search-select
  130. v-else
  131. :ref="item.field+'_search'"
  132. v-model="queryParam[item.field]"
  133. :placeholder=" '请选择'+item.label "
  134. :sql="getSqlByDictCode(item)">
  135. </j-online-search-select>-->
  136. <JOnlineSearchSelect v-model:value="queryParam[item.field]" :placeholder="'请选择' + item.label" :sql="item.sql" />
  137. </a-form-item>
  138. <a-form-item v-else-if="item.view === CompTypeEnum.SelUser" :labelCol="labelCol" :class="'jeecg-online-search'">
  139. <template #label>
  140. <span :title="item.label" class="label-text">{{ item.label }}</span>
  141. </template>
  142. <JSelectUserByDept v-model:value="queryParam[item.field]" :placeholder="'请选择' + item.label" />
  143. </a-form-item>
  144. <a-form-item v-else-if="item.view == CompTypeEnum.SelDepart" :labelCol="labelCol" :class="'jeecg-online-search'">
  145. <template #label>
  146. <span :title="item.label" class="label-text">{{ item.label }}</span>
  147. </template>
  148. <JSelectDept v-model:value="queryParam[item.field]" :placeholder="'请选择' + item.label" />
  149. </a-form-item>
  150. <a-form-item v-else-if="item.view === CompTypeEnum.Popup" :labelCol="labelCol" :class="'jeecg-online-search'">
  151. <template #label>
  152. <span :title="item.label" class="label-text">{{ item.label }}</span>
  153. </template>
  154. <JPopup
  155. :placeholder="'请选择' + item.label"
  156. v-model:value="queryParam[item.field]"
  157. :formElRef="formElRef"
  158. :code="item.dictTable"
  159. :field-config="item.dictCode"
  160. :multi="true"
  161. />
  162. </a-form-item>
  163. <a-form-item v-else-if="item.view === CompTypeEnum.Pca" :labelCol="labelCol" :class="'jeecg-online-search'">
  164. <template #label>
  165. <span :title="item.label" class="label-text">{{ item.label }}</span>
  166. </template>
  167. <JAreaLinkage :placeholder="'请选择' + item.label" v-model:value="queryParam[item.field]" />
  168. </a-form-item>
  169. <!--TODO 缺少的组件-->
  170. <a-form-item
  171. v-else-if="item.view === CompTypeEnum.Checkbox || item.view === CompTypeEnum.ListMulti"
  172. :labelCol="labelCol"
  173. :label="item.label"
  174. :class="'jeecg-online-search'"
  175. >
  176. <!-- <j-select-multiple
  177. v-if="item.config==='1'"
  178. :placeholder=" '请选择'+item.label "
  179. v-model="queryParam[item.field]"
  180. :dictCode="getDictCode(item)">
  181. </j-select-multiple>
  182. <j-select-multiple
  183. v-else
  184. :placeholder=" '请选择'+item.label "
  185. :options="dictOptions[item.dbField]"
  186. v-model="queryParam[item.field]">
  187. </j-select-multiple>-->
  188. </a-form-item>
  189. <a-form-item v-else :labelCol="labelCol" :class="'jeecg-online-search'">
  190. <template #label>
  191. <span :title="item.label" class="label-text">{{ item.label }}</span>
  192. </template>
  193. <template v-if="single_mode === item.mode && 'string' == item.view">
  194. <j-input :placeholder="'请输入' + item.label" v-model:value="queryParam[item.field]" />
  195. </template>
  196. <template v-else-if="single_mode === item.mode">
  197. <a-input :placeholder="'请输入' + item.label" v-model:value="queryParam[item.field]" />
  198. </template>
  199. <template v-else>
  200. <a-input :placeholder="'请输入开始' + item.label" v-model:value="queryParam[item.field + '_begin']" style="width: calc(50% - 15px)" />
  201. <span class="group-query-strig">~</span>
  202. <a-input :placeholder="'请输入结束' + item.label" v-model:value="queryParam[item.field + '_end']" style="width: calc(50% - 15px)" />
  203. </template>
  204. </a-form-item>
  205. </template>
  206. <script lang="ts">
  207. //import JOnlineSearchSelect from '@/components/online/autoform/comp/JOnlineSearchSelect'
  208. import { defineComponent, ref } from 'vue';
  209. import { DateTypeEnum } from '/@/enums/DateTypeEnum.ts';
  210. import { CompTypeEnum } from '/@/enums/CompTypeEnum.ts';
  211. import {
  212. JDictSelectTag,
  213. JTreeSelect,
  214. JCategorySelect,
  215. JSelectUserByDept,
  216. JSelectDept,
  217. JPopup,
  218. JAreaLinkage,
  219. JInput,
  220. JSearchSelect,
  221. MTreeSelect,
  222. } from '/@/components/Form';
  223. export default defineComponent({
  224. name: 'JPopupOnlReport',
  225. components: {
  226. //JOnlineSearchSelect
  227. JDictSelectTag,
  228. JTreeSelect,
  229. MTreeSelect,
  230. JCategorySelect,
  231. JSelectUserByDept,
  232. JSelectDept,
  233. JPopup,
  234. JAreaLinkage,
  235. JInput,
  236. JSearchSelect,
  237. },
  238. props: {
  239. formElRef: {
  240. type: Object,
  241. default: () => {},
  242. },
  243. item: {
  244. type: Object,
  245. default: () => {},
  246. required: true,
  247. },
  248. dictOptions: {
  249. type: Object,
  250. default: () => {},
  251. required: true,
  252. },
  253. queryParam: {
  254. type: Object,
  255. default: () => {},
  256. required: true,
  257. },
  258. },
  259. setup(props) {
  260. const single_mode = ref('single');
  261. console.log('dictOptions===>', props.dictOptions);
  262. function getDictCode(item) {
  263. if (item.dictTable && item.dictTable.length > 0) {
  264. return item.dictTable + ',' + item.dictText + ',' + item.dictCode;
  265. } else {
  266. return item.dictCode;
  267. }
  268. }
  269. function getSqlByDictCode(item) {
  270. let { dictTable, dictCode, dictText } = item;
  271. let temp = dictTable.toLowerCase();
  272. let arr = temp.split('where');
  273. let condition = '';
  274. if (arr.length > 1) {
  275. condition = ' where' + arr[1];
  276. }
  277. let sql = 'select ' + dictCode + " as 'value', " + dictText + " as 'text' from " + arr[0] + condition;
  278. console.log('sql', sql);
  279. return sql;
  280. }
  281. function getDictOptionKey(item) {
  282. if (item.dbField) {
  283. return item.dbField;
  284. } else {
  285. return item.field;
  286. }
  287. }
  288. // 定义查询条件 文本label的最大宽度 比起单纯的控制字体个数更好
  289. const labelTextMaxWidth = '120px';
  290. const labelCol = {
  291. style: {
  292. 'max-width': labelTextMaxWidth,
  293. },
  294. };
  295. return {
  296. labelTextMaxWidth,
  297. labelCol,
  298. single_mode,
  299. getDictOptionKey,
  300. getDictCode,
  301. getSqlByDictCode,
  302. DateTypeEnum,
  303. CompTypeEnum,
  304. };
  305. },
  306. });
  307. </script>
  308. <style lang="less" scoped>
  309. .group-query-strig {
  310. width: 30px;
  311. text-align: center;
  312. display: inline-block;
  313. }
  314. /* 查询条件左对齐样式设置 */
  315. .jeecg-online-search :deep(.ant-form-item-label) {
  316. flex: 0 0 auto !important;
  317. width: auto;
  318. }
  319. .jeecg-online-search :deep(.ant-form-item-control) {
  320. max-width: 100%;
  321. }
  322. /* label显示宽度 超出显示... */
  323. .jeecg-online-search :deep(.label-text) {
  324. max-width: v-bind(labelTextMaxWidth);
  325. overflow: hidden;
  326. white-space: nowrap;
  327. text-overflow: ellipsis;
  328. overflow-wrap: break-word;
  329. }
  330. </style>