index.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. <template>
  2. <div>
  3. <el-drawer
  4. :title="title"
  5. :visible.sync="dialogFormVisible"
  6. size="85%"
  7. direction="rtl"
  8. append-to-body
  9. :show-close="false"
  10. @close="onClose">
  11. <div class="drawer__panel" style="margin-bottom: 0!important;">
  12. <div class="inline-16">
  13. <label class="search__label" >部门:</label>
  14. <el-cascader disabled class="inline-16" placement="bottom" ref="selectdep" size="small" v-model="departmentid" :options="deplist" :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}" ></el-cascader>
  15. </div>
  16. <div class="inline-16">
  17. <label class="search__label" >业务员:</label>
  18. <el-select v-model="person" filterable placeholder="请选择" size="small" disabled >
  19. <el-option
  20. v-for="item in personnelList"
  21. :key="item.index"
  22. :label="item.name"
  23. :value="item.userid">
  24. </el-option>
  25. </el-select>
  26. </div>
  27. <slot name="custom"></slot>
  28. <el-input style="width:200px;" placeholder="搜索" :suffix-icon="param.content.where.condition?param.content.where.condition.length > 0?'':'':'el-icon-search'" v-model="param.content.where.condition" @keyup.native.enter="listData(param.content.pageNumber = 1)" @clear="clearSearchValue" size="small" class="input-with-select inline-16 layout_search__panel" clearable>
  29. </el-input>
  30. <table-detail :layout="layout" :data="list" :custom="true" :height="height" :width="true" style="margin-top: 10px">
  31. <template v-slot:customcol="scope">
  32. <div v-if="tableType == '营销费用'">
  33. <div>
  34. {{ scope.column.data[[scope.column.columnname]] || scope.column.columnname === 'operation' ? scope.column.data[[scope.column.columnname]] : '--' }}
  35. </div>
  36. </div>
  37. <div v-else>
  38. <div v-if="scope.column.columnname === 'tag'">
  39. <div v-if="scope.column.data.sys_tag">
  40. <div v-for="item in scope.column.data.sys_tag" :key="item.index" style="float: left;margin-left: 5px;margin-bottom: 5px">
  41. <el-tag color="#3874F6" size="mini" type="primary" effect="dark">
  42. <span>{{item}}</span>
  43. </el-tag>
  44. </div>
  45. <div v-for="item in scope.column.data.tag" :key="item.index" style="float: left;margin-left: 5px;margin-bottom: 5px">
  46. <el-tag color="#FA8C16" size="mini" type="warning" effect="dark">
  47. <span>{{item}}</span>
  48. </el-tag>
  49. </div>
  50. </div>
  51. <div v-else>--</div>
  52. </div>
  53. <div v-else-if="scope.column.columnname == 'status'">
  54. <span style="color:#999999" v-if="scope.column.data[[scope.column.columnname]] == '已过期'">{{scope.column.data[[scope.column.columnname]]}}</span>
  55. <span style="color:#52c41a" v-else-if="scope.column.data[[scope.column.columnname]] == '跟进中'">{{scope.column.data[[scope.column.columnname]]}}</span>
  56. <span style="color:#3874f6" v-else-if="scope.column.data[[scope.column.columnname]] == '待跟进'">{{scope.column.data[[scope.column.columnname]]}}</span>
  57. <span style="color:#333333" v-else-if="scope.column.data[[scope.column.columnname]] == '已无效'">{{scope.column.data[[scope.column.columnname]]}}</span>
  58. <span style="color:#fa8c16" v-else-if="scope.column.data[[scope.column.columnname]] == '已转化'">{{scope.column.data[[scope.column.columnname]]}}</span>
  59. <span style="color:#3874f6" v-else-if="scope.column.data[[scope.column.columnname]] == '潜在'">{{scope.column.data[[scope.column.columnname]]}}</span>
  60. <span style="color:#52c41a" v-else-if="scope.column.data[[scope.column.columnname]] == '合作中'">{{scope.column.data[[scope.column.columnname]]}}</span>
  61. <span style="color:#999999" v-else-if="scope.column.data[[scope.column.columnname]] == '已终止'">{{scope.column.data[[scope.column.columnname]]}}</span>
  62. <span style="color:#fa8c16" v-else-if="scope.column.data[[scope.column.columnname]] == '已成交'">{{scope.column.data[[scope.column.columnname]]}}</span>
  63. <span style="color:#999999" v-else-if="scope.column.data[[scope.column.columnname]] == '已失败'">{{scope.column.data[[scope.column.columnname]]}}</span>
  64. <span style="color:#999999" v-else-if="scope.column.data[[scope.column.columnname]] == '已结案'">{{scope.column.data[[scope.column.columnname]]}}</span>
  65. <span v-else>{{scope.column.data[[scope.column.columnname]]}}</span>
  66. </div>
  67. <div v-else-if="scope.column.columnname === 'reportstatus'">
  68. <span style="color:#3874f6" v-if="scope.column.data[[scope.column.columnname]] == '已报备'">{{scope.column.data[[scope.column.columnname]]}}</span>
  69. <span style="color:#52c41a" v-else-if="scope.column.data[[scope.column.columnname]] == '报备中'">{{scope.column.data[[scope.column.columnname]]}}</span>
  70. <span style="color:#999999" v-else-if="scope.column.data[[scope.column.columnname]] == '未报备'">{{scope.column.data[[scope.column.columnname]]}}</span>
  71. </div>
  72. <div v-else-if="scope.column.columnname === 'projecttype'">
  73. {{scope.column.data.projecttype + '-' + scope.column.data.projecttype_remarks}}
  74. </div>
  75. <div v-else-if="scope.column.columnname === 'tradingstatus'">
  76. <span style="color:#3874f6" v-if="scope.column.data[[scope.column.columnname]] == '未成交'">{{scope.column.data[[scope.column.columnname]]}}</span>
  77. <span style="color:#fa8c16" v-else-if="scope.column.data[[scope.column.columnname]] == '已成交'">{{scope.column.data[[scope.column.columnname]]}}</span>
  78. <span style="color:#333333" v-else-if="scope.column.data[[scope.column.columnname]] == '多次成交'">{{scope.column.data[[scope.column.columnname]]}}</span>
  79. </div>
  80. <div v-else-if="scope.column.columnname === 'leader'">
  81. <span>{{scope.column.data['leader'][0]?scope.column.data['leader'][0].name:'--'}}</span>
  82. </div>
  83. <div v-else-if="scope.column.columnname === 'depname'">
  84. <span>{{scope.column.data['leader'][0]?scope.column.data['leader'][0].depname:'--'}}</span>
  85. </div>
  86. <div v-else-if="scope.column.columnname === 'address'">
  87. <span>{{scope.column.data.province?scope.column.data.province + scope.column.data.city + scope.column.data.county + scope.column.data.address:'--'}}</span>
  88. </div>
  89. <div v-else-if="scope.column.columnname == 'signamount_due'">
  90. <span>{{scope.column.data[[scope.column.columnname]] ?tool.formatAmount(scope.column.data[[scope.column.columnname]],2):'--'}}</span>
  91. </div>
  92. <div v-else-if="scope.column.columnname == 'dealamount'">
  93. <span>{{scope.column.data[[scope.column.columnname]] ?tool.formatAmount(scope.column.data[[scope.column.columnname]],2):'--'}}</span>
  94. </div>
  95. <div v-else-if="scope.column.columnname == 'scale'">
  96. <span>{{scope.column.data[[scope.column.columnname]]?scope.column.data[[scope.column.columnname]] + scope.column.data.unitname:'--'}}</span>
  97. </div>
  98. <div v-else>
  99. {{ scope.column.data[[scope.column.columnname]] || scope.column.columnname === 'operation' ? scope.column.data[[scope.column.columnname]] : '--' }}
  100. </div>
  101. </div>
  102. </template>
  103. </table-detail>
  104. <div class="container normal-panel" style="text-align:right">
  105. <el-pagination
  106. background
  107. @size-change="handleSizeChange"
  108. @current-change="handleCurrentChange"
  109. :current-page="currentPage"
  110. :page-sizes="[100, 150, 200, 250]"
  111. :page-size="100"
  112. layout="total,sizes, prev, pager, next, jumper"
  113. :total="total">
  114. </el-pagination>
  115. </div>
  116. </div>
  117. </el-drawer>
  118. </div>
  119. </template>
  120. <script>
  121. export default {
  122. name: "index",
  123. props:["title","layout","param","person","departmentid","isleave","height",'tableType'],
  124. data(){
  125. return {
  126. dialogFormVisible:false,
  127. list:[],
  128. total:0,
  129. currentPage:0,
  130. deplist:[],
  131. personnelList:[],
  132. nowPerson:'',
  133. nowDep:'',
  134. depmentParam:{
  135. "id": 20230620102004,
  136. "content": {
  137. "isleave":1
  138. }
  139. },
  140. }
  141. },
  142. methods:{
  143. onShow(){
  144. this.dialogFormVisible = true
  145. this.departmentrtment()
  146. this.param.content.pageNumber = 1
  147. this.listData()
  148. },
  149. async listData(){
  150. const res = await this.$api.requested(this.param)
  151. this.list = res.data
  152. this.total = res.total
  153. this.currentPage = res.pageNumber
  154. },
  155. handleSizeChange(val) {
  156. // console.log(`每页 ${val} 条`);
  157. this.param.content.pageSize = val
  158. this.listData()
  159. },
  160. handleCurrentChange(val) {
  161. // console.log(`当前页: ${val}`);
  162. this.param.content.pageNumber = val
  163. this.listData()
  164. },
  165. clearSearchValue () {
  166. this.$store.dispatch('clearSearchValue')
  167. this.listData(this.param.content.pageNumber = 1)
  168. },
  169. onClose(){
  170. this.dialogFormVisible = false
  171. },
  172. async departmentrtment() {
  173. const res = await this.$api.requested(this.depmentParam)
  174. this.deplist = this.createMenu(res.data.dep)
  175. this.personnelList = res.data.hr
  176. },
  177. createMenu (array) {
  178. var that = this
  179. let arr = []
  180. function convertToElementTree(node) {
  181. // 新节点
  182. if (node.subdep.length === 0){
  183. var elNode = {
  184. label: node["depname"],
  185. parentid:node['parentid'],
  186. parentname:node['parentname'],
  187. departmentid:node["departmentid"],
  188. value:node["departmentid"],
  189. remarks:node["remarks"],
  190. isused:node["isused"],
  191. changedate:node['changedate'],
  192. changeby:node['changeby'],
  193. createdate:node['createdate'],
  194. createby:node['createby'],
  195. depno:node['depno'],
  196. disabled:that.pageOnlyRead,
  197. }
  198. }else {
  199. var elNode = {
  200. label: node["depname"],
  201. parentid:node['parentid'],
  202. parentname:node['parentname'],
  203. departmentid:node["departmentid"],
  204. value:node["departmentid"],
  205. remarks:node["remarks"],
  206. isused:node["isused"],
  207. changedate:node['changedate'],
  208. changeby:node['changeby'],
  209. createdate:node['createdate'],
  210. createby:node['createby'],
  211. depno:node['depno'],
  212. disabled:that.pageOnlyRead,
  213. children: []
  214. }
  215. }
  216. if (node.subdep && node.subdep.length > 0) {
  217. // 如果存在子节点
  218. for (var index = 0; index < node.subdep.length; index++) {
  219. // 遍历子节点, 把每个子节点看做一颗独立的树, 传入递归构造子树, 并把结果放回到新node的children中
  220. elNode.children.push(convertToElementTree(node.subdep[index]));
  221. }
  222. }
  223. return elNode;
  224. }
  225. array.forEach((element) => {
  226. arr.push(convertToElementTree(element))
  227. });
  228. return arr
  229. },
  230. }
  231. }
  232. </script>
  233. <style scoped>
  234. </style>