owner_serach.vue 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. <template>
  2. <div class="flex flex-center padding white-bg ">
  3. <el-form v-model="form" class="lab mt-20 full-width" label-width="120px">
  4. <div class="flex">
  5. <div class="flex flex-col mr-15">
  6. <el-form-item class="full-width" label="项目名称">
  7. <el-input
  8. v-model="form.projectName"
  9. clearable
  10. placeholder="输入项目关键字"
  11. prefix-icon="Search"
  12. />
  13. </el-form-item>
  14. <div class="flex flex-center">
  15. <el-form-item class="full-width" label="是否开工">
  16. <el-select
  17. v-model="form.isStart"
  18. clearable
  19. placeholder="选择项目分类"
  20. style="width: 100%">
  21. <el-option
  22. v-for="item in start"
  23. :key="item.value"
  24. :label="item.label"
  25. :value="item.value"
  26. />
  27. </el-select>
  28. </el-form-item>
  29. <el-form-item class="full-width" label="是否入库">
  30. <el-select
  31. v-model="form.isStorage"
  32. clearable
  33. placeholder="选择项目分类"
  34. style="width: 100%">
  35. <el-option
  36. v-for="item in storage"
  37. :key="item.value"
  38. :label="item.label"
  39. :value="item.value"
  40. />
  41. </el-select>
  42. </el-form-item>
  43. </div>
  44. </div>
  45. <div class="flex flex-col ml-20 mr-15">
  46. <el-form-item class="full-width" label="分类筛选">
  47. <el-select
  48. v-model="form.typeId"
  49. clearable
  50. placeholder="选择项目分类"
  51. style="width: 100%">
  52. <el-option
  53. v-for="item in typeList"
  54. :key="item.id"
  55. :label="item.name"
  56. :value="item.id"
  57. />
  58. </el-select>
  59. </el-form-item>
  60. <div class="flex flex-center">
  61. <el-form-item class="full-width" label="总投资额">
  62. <el-select
  63. v-model="form.amount"
  64. clearable
  65. @change="changeAmount"
  66. placeholder="选择投资额度"
  67. style="width: 100%">
  68. <el-option
  69. v-for="item in totalAmount"
  70. :key="item.value"
  71. :label="item.name"
  72. :value="item.value"
  73. />
  74. </el-select>
  75. </el-form-item>
  76. <el-form-item class="full-width" label="机构选择">
  77. <div class="grey-9 pointer chose-box" @click="getOrg">
  78. 选择机构
  79. </div>
  80. </el-form-item>
  81. </div>
  82. <div class="flex flex-center flex-justify-end"
  83. style="width: 70%;margin-left: 120px">
  84. </div>
  85. </div>
  86. <div class="flex flex-col">
  87. <div class="flex flex-center ">
  88. <el-form-item class="full-width" label="省重点">
  89. <el-select
  90. v-model="form.isImportant"
  91. clearable
  92. placeholder="选择项目分类"
  93. style="width: 100%">
  94. <el-option
  95. v-for="item in isimport"
  96. :key="item.value"
  97. :label="item.label"
  98. :value="item.value"
  99. />
  100. </el-select>
  101. </el-form-item>
  102. <el-form-item class="full-width" label="省集中开工">
  103. <el-select
  104. v-model="form.isFocusStart"
  105. clearable
  106. placeholder="选择项目分类"
  107. style="width: 100%">
  108. <el-option
  109. v-for="item in isfocus"
  110. :key="item.value"
  111. :label="item.label"
  112. :value="item.value"
  113. />
  114. </el-select>
  115. </el-form-item>
  116. </div>
  117. <div class="flex flex-align-center flex-justify-end ">
  118. <base-button class="pointer " icon="Delete" title="清空" type="0" width="130" @click="clear"/>
  119. <base-button class="pointer ml-20" width="130" @click="sure"/>
  120. </div>
  121. </div>
  122. </div>
  123. </el-form>
  124. <!----机构选择----->
  125. <el-dialog v-model='showOrg'
  126. append-to-body
  127. center
  128. title="机构选择"
  129. width="45%">
  130. <div class="flex flex-col">
  131. <el-input
  132. v-model="keyWords"
  133. clearable
  134. placeholder="机构快速搜索"
  135. prefix-icon="Search"
  136. />
  137. </div>
  138. <el-divider/>
  139. <div class="hide-scrollbar full-width" style="height: 20vh;overflow-x: scroll">
  140. <!-- <div v-if='attaches.length === 0' class='full-width flex flex-center '>-->
  141. <!-- <el-empty image-size='100'/>-->
  142. <!-- </div>-->
  143. <div class="flex flex-justify-between flex-center">
  144. <span class="bold font-15 grey ml-5 ">部门</span>
  145. </div>
  146. <div class="grid radius mt-15 padding" style="border: 1px solid #DDDFE6">
  147. <div v-for="(item,index) in deptList" :key='item.id' class="flex flex-center pointer padding"
  148. :class="item.checked ? 'org-s' : 'org'" @click='changeChecked(index)'>
  149. <div :class="item.checked ? 'dot-checked' : 'dot'"></div>
  150. <div class='ml-5 full-width' :class="item.checked ? 'white' : ''">{{ item.deptName }}</div>
  151. </div>
  152. </div>
  153. </div>
  154. <div class="flex flex-center mt-20 mb-5">
  155. <base-button title="重置" type="0" icon="Refresh"/>
  156. <base-button class="ml-20" title="确定" icon="Check" @click='orgCheck'/>
  157. </div>
  158. </el-dialog>
  159. </div>
  160. </template>
  161. <script>
  162. import baseButton from '../../../components/base-button.vue'
  163. import { useStore } from '@/store/user.js'
  164. export default {
  165. name: 'owner_serach',
  166. components: { baseButton },
  167. setup () {
  168. const user = useStore()
  169. return { user }
  170. },
  171. data () {
  172. return {
  173. deptList: [],
  174. form: {
  175. projectName: '', // 项目名称/关键字
  176. typeId: '', // 项目分类
  177. isStart: '', // 是否开工
  178. isStorage: '', // 是否入库
  179. amount: '',
  180. isImportant: '', // 是否省重点
  181. isFocusStart: '', // 是否集中开工
  182. dictKey: '',
  183. deptId: '' // 机构id,多选
  184. },
  185. totalAmount: [
  186. {
  187. name: '5000万以下',
  188. value: '5000,0' // 0 max 1 min
  189. },
  190. {
  191. name: '5000万以上',
  192. value: '50001,""'
  193. }
  194. ],
  195. start: [
  196. {
  197. label: '否',
  198. value: 0
  199. },
  200. {
  201. label: '是',
  202. value: 1
  203. }
  204. ],
  205. storage: [
  206. {
  207. label: '否',
  208. value: 0
  209. },
  210. {
  211. label: '是',
  212. value: 1
  213. }
  214. ],
  215. isimport: [
  216. {
  217. label: '否',
  218. value: 0
  219. },
  220. {
  221. label: '是',
  222. value: 1
  223. }
  224. ],
  225. isfocus: [
  226. {
  227. label: '否',
  228. value: 0
  229. },
  230. {
  231. label: '是',
  232. value: 1
  233. }
  234. ],
  235. typeList: [],
  236. showOrg: false,
  237. keyWords: '',
  238. checked: false
  239. }
  240. },
  241. created () {
  242. this.getTypeList()
  243. },
  244. methods: {
  245. getTypeList () {
  246. this.$api.project.typeList().then(res => {
  247. this.typeList = res.data.records
  248. })
  249. },
  250. sure () {
  251. this.$bus.emit('serach', this.form)
  252. },
  253. clear () {
  254. this.form.projectName = ''
  255. this.form.typeId = ''
  256. this.form.isStorage = ''
  257. this.form.isStart = ''
  258. this.form.amount = ''
  259. this.form.isFocusStart = ''
  260. this.form.isImportant = ''
  261. this.form.dictKey = ''
  262. this.form.deptId = ''
  263. this.$bus.emit('serach', this.form)
  264. },
  265. changeAmount () {
  266. const tmps = this.form.amount.split(',')
  267. this.form.totalAmountMax = tmps[0]
  268. this.form.totalAmountMin = tmps[1]
  269. },
  270. getOrg () {
  271. const parentId = [1, 2].includes(this.user.info.viewStage) ? this.user.info.parentDeptId : this.user.info.deptId
  272. this.$api.system.getDeptLazy({ parentId }).then(res => {
  273. if (res.code === 200) {
  274. this.showOrg = true
  275. this.deptList = res.data.map(e => {
  276. e.checked = false
  277. return e
  278. })
  279. } else {
  280. this.$message.error(res.msg)
  281. }
  282. })
  283. },
  284. changeChecked (index) {
  285. this.deptList[index].checked = !this.deptList[index].checked
  286. },
  287. orgCheck () {
  288. const checked = this.deptList.filter(sub => sub.checked)
  289. this.form.deptId = checked.map(sub => sub.id).join(',')
  290. this.showOrg = false
  291. }
  292. }
  293. }
  294. </script>
  295. <style lang="scss" scoped>
  296. .lab {
  297. :deep(.el-form-item__label) {
  298. color: #707070;
  299. font-size: 15px;
  300. font-weight: 500;
  301. }
  302. }
  303. .chose-box {
  304. width: 195px;
  305. border: 1px solid #DDDFE6;
  306. border-radius: 5px
  307. }
  308. .grid {
  309. display: grid;
  310. grid-template-columns: auto auto auto auto;
  311. }
  312. .org {
  313. border-radius: 8px;
  314. width: 150px;
  315. margin: 10px;
  316. }
  317. .dot {
  318. width: 10px;
  319. height: 10px;
  320. border-radius: 10px;
  321. border: 4px solid #eeeeee;
  322. }
  323. .dot-checked {
  324. width: 10px;
  325. height: 10px;
  326. border-radius: 10px;
  327. border: 4px solid #ECAB56;
  328. .title {
  329. color: white;
  330. }
  331. }
  332. .org-s {
  333. border-radius: 8px;
  334. background: #4E637F;
  335. width: 150px;
  336. margin: 10px;
  337. :deep(.el-checkbox) {
  338. color: white;
  339. }
  340. :deep(.el-checkbox__label) {
  341. color: white;
  342. }
  343. }
  344. </style>