ClassificationQueryPanel.vue 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335
  1. <template>
  2. <div class="data-filter-wrap">
  3. <el-button
  4. type="primary"
  5. class="inline-large-button mb10"
  6. icon="el-icon-plus"
  7. size="mini"
  8. @click="addCondition"
  9. >
  10. 添加按钮
  11. </el-button>
  12. <el-table :data="tableData" style="width: 100%">
  13. <!-- <el-table-column align="center" label="序号" type="index" width="50">
  14. </el-table-column> -->
  15. <el-table-column align="center" prop="conditionNotes" label="按钮名称">
  16. <template slot-scope="scope">
  17. <el-input
  18. v-model="scope.row.conditionNotes"
  19. size="normal"
  20. clearable
  21. ></el-input>
  22. </template>
  23. </el-table-column>
  24. <el-table-column
  25. align="center"
  26. prop="conditionField"
  27. label="条件字段"
  28. width="100"
  29. >
  30. <template slot-scope="scope">
  31. <el-select
  32. v-model="scope.row.conditionField"
  33. placeholder="请选择条件字段"
  34. clearable
  35. filterable
  36. >
  37. <el-option
  38. v-for="item in fieldList"
  39. :key="item.fieldName"
  40. :label="item.fieldDescription"
  41. :value="item.tableName + '.' + item.fieldName"
  42. >
  43. <span class="discribe" style="float: left">{{
  44. item.fieldDescription
  45. }}</span>
  46. <span style="float: right; color: #8492a6; font-size: 13px">{{
  47. item.fieldName
  48. }}</span>
  49. </el-option>
  50. </el-select>
  51. </template>
  52. </el-table-column>
  53. <!-- <el-table-column align="center" prop="condition" label="条件">
  54. <template slot-scope="scope">
  55. <el-select v-model="scope.row.condition" placeholder="请选择">
  56. <el-option
  57. v-for="item in conditionList"
  58. :key="item.label"
  59. :label="item.label"
  60. :value="item.label"
  61. >
  62. </el-option>
  63. </el-select>
  64. </template>
  65. </el-table-column> -->
  66. <!-- <el-table-column align="center" prop="conditionType" label="类型">
  67. <template slot-scope="scope">
  68. <el-select v-model="scope.row.conditionType" clearable filterable>
  69. <el-option
  70. v-for="item in conditionTypeOptions"
  71. :key="item.value"
  72. :label="item.label"
  73. :value="item.value"
  74. >
  75. </el-option>
  76. </el-select>
  77. </template>
  78. </el-table-column> -->
  79. <el-table-column align="center" prop="componentType" label="按钮类型">
  80. <template slot-scope="scope">
  81. <el-select v-model="scope.row.componentType" clearable filterable>
  82. <el-option
  83. v-for="item in componentTypeOptions"
  84. :key="item.value"
  85. :label="item.label"
  86. :value="item.value"
  87. >
  88. </el-option>
  89. </el-select>
  90. </template>
  91. </el-table-column>
  92. <el-table-column align="center" prop="componentSize" label="按钮尺寸">
  93. <template slot-scope="scope">
  94. <el-select v-model="scope.row.componentSize" clearable filterable>
  95. <el-option
  96. v-for="item in componentSizeOptions"
  97. :key="item.value"
  98. :label="item.label"
  99. :value="item.value"
  100. >
  101. </el-option>
  102. </el-select>
  103. </template>
  104. </el-table-column>
  105. <el-table-column align="center" prop="componentIcon" label="按钮图标">
  106. <template slot-scope="scope">
  107. <el-popover
  108. placement="bottom-start"
  109. width="460"
  110. trigger="click"
  111. @show="$refs['iconSelect'].reset()"
  112. >
  113. <IconSelect
  114. ref="iconSelect"
  115. @selected="
  116. (name) => {
  117. selected(name, scope.row);
  118. }
  119. "
  120. :active-icon="scope.row.componentIcon"
  121. />
  122. <el-input
  123. slot="reference"
  124. v-model="scope.row.componentIcon"
  125. placeholder="点击选择图标"
  126. readonly
  127. >
  128. <svg-icon
  129. v-if="scope.row.componentIcon"
  130. slot="prefix"
  131. :icon-class="scope.row.componentIcon"
  132. style="width: 25px"
  133. />
  134. <i v-else slot="prefix" class="el-icon-search el-input__icon" />
  135. </el-input>
  136. </el-popover>
  137. </template>
  138. </el-table-column>
  139. <el-table-column
  140. align="center"
  141. prop="conditionDefaultValue"
  142. label="按钮值"
  143. >
  144. <template slot-scope="scope">
  145. <el-input v-model="scope.row.conditionDefaultValue"></el-input>
  146. </template>
  147. </el-table-column>
  148. <el-table-column align="center" prop="sort" label="排序">
  149. <template slot-scope="scope">
  150. <el-input v-model="scope.row.sort"></el-input>
  151. </template>
  152. </el-table-column>
  153. <el-table-column label="操作">
  154. <template slot-scope="scope">
  155. <el-button
  156. size="mini"
  157. type="text"
  158. icon="el-icon-delete"
  159. @click="delHandler(scope.$index)"
  160. >删除
  161. </el-button>
  162. </template>
  163. </el-table-column>
  164. </el-table>
  165. </div>
  166. </template>
  167. <script>
  168. import IconSelect from "@/components/IconSelect";
  169. export default {
  170. name: "ClassificationQueryPanel",
  171. props: ["tableFieldList", "classificationDataEcho"],
  172. components: { IconSelect },
  173. data() {
  174. return {
  175. tableData: [],
  176. fieldList: [],
  177. conditionList: [
  178. {
  179. value: 1,
  180. label: ">",
  181. },
  182. {
  183. value: 2,
  184. label: "<",
  185. },
  186. {
  187. value: 3,
  188. label: "=",
  189. },
  190. {
  191. value: 4,
  192. label: ">=",
  193. },
  194. {
  195. value: 5,
  196. label: "<=",
  197. },
  198. ],
  199. conditionTypeOptions: [
  200. {
  201. label: "按钮",
  202. value: "button",
  203. },
  204. ],
  205. componentTypeOptions: [
  206. {
  207. value: "primary",
  208. label: "primary",
  209. },
  210. {
  211. value: "success",
  212. label: "success",
  213. },
  214. {
  215. value: "warning",
  216. label: "warning",
  217. },
  218. {
  219. value: "danger",
  220. label: "danger",
  221. },
  222. {
  223. value: "info",
  224. label: "info",
  225. },
  226. {
  227. value: "text",
  228. label: "text",
  229. },
  230. ],
  231. componentSizeOptions: [
  232. { value: "small", label: "small" },
  233. { value: "default", label: "default" },
  234. { value: "large", label: "large" },
  235. ],
  236. };
  237. },
  238. watch: {
  239. myTableFieldList: {
  240. handler(nval) {
  241. this.fieldList = nval;
  242. console.log(this.fieldList);
  243. // 初始化删除逻辑条件
  244. // let is_has_del_flag = nval.find((item) => {
  245. // return item.fieldName == "del_flag";
  246. // });
  247. // console.log(is_has_del_flag);
  248. // if (is_has_del_flag) {
  249. // let { fieldName, tableName } = is_has_del_flag;
  250. // this.tableData = [];
  251. // this.tableData.push({
  252. // fieldName: tableName + "." + fieldName,
  253. // condition: "=",
  254. // refValue: 0,
  255. // });
  256. // } else {
  257. // this.tableData = [];
  258. // }
  259. },
  260. deep: true,
  261. immediate: true,
  262. },
  263. myFilterDataEcho: {
  264. handler(val) {
  265. if (val) {
  266. console.log(val);
  267. this.tableData = val;
  268. }
  269. },
  270. deep: true,
  271. immediate: true,
  272. },
  273. },
  274. computed: {
  275. myTableFieldList() {
  276. console.log(this.tableFieldList);
  277. return this.tableFieldList;
  278. },
  279. myFilterDataEcho() {
  280. return this.classificationDataEcho;
  281. },
  282. },
  283. methods: {
  284. // 选择图标
  285. selected(name, row) {
  286. console.log(name, row);
  287. row.componentIcon = name;
  288. // this.btnGroupFormData.btnIcon = name;
  289. },
  290. // 新增条件回调
  291. addCondition() {
  292. this.tableData.push({
  293. conditionNotes: "", //按钮名称
  294. conditionName: "",
  295. conditionField: "", //条件字段
  296. // condition: "",
  297. conditionType: "button", //类型
  298. conditionDefaultValue: "", //按钮值
  299. sort: "", //排序
  300. componentType: "", //按钮类型
  301. componentsSize: "", //按钮大小
  302. componentIcon: "", //按钮图标
  303. });
  304. },
  305. // 编辑条件回调
  306. editHandler() {},
  307. // 删除条件回调
  308. delHandler(index) {
  309. this.tableData.splice(index, 1);
  310. },
  311. // 获取数据筛选条件
  312. getConditions() {
  313. return this.tableData;
  314. },
  315. // 获取回显数据
  316. getEchoData() {
  317. return JSON.stringify(this.tableData);
  318. },
  319. },
  320. mounted() {},
  321. };
  322. </script>
  323. <style scoped lang="scss">
  324. .discribe {
  325. display: block;
  326. max-width: 200px;
  327. white-space: nowrap;
  328. overflow: hidden;
  329. text-overflow: ellipsis;
  330. }
  331. </style>