index.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449
  1. <template>
  2. <div>
  3. <basicLayout
  4. ref="basicLayout"
  5. formPath="publicCustomer"
  6. tableName="publicCustomerTable"
  7. idName="sa_customersid"
  8. :apiId="{query:20221011133602,del:''}"
  9. :options="options"
  10. :autoQuery="false"
  11. @checkboxCallBack="checkboxCallBack"
  12. :detailPath="{
  13. path:'/PublicCustomerDetail'
  14. }"
  15. >
  16. <template #titleLight>
  17. <el-button :type="selectCustomer.length === 0?'':'primary'" :disabled="selectCustomer.length === 0" size="small" v-if="tool.checkAuth($route.name,'deletePublic')" @click="deleteData" class="inline-16">删 除</el-button>
  18. </template>
  19. <template #titleRight>
  20. <importCustomer style="margin-left:10px" @onSuccess="onSuccess" v-if="tool.checkAuth($route.name,'import')"></importCustomer>
  21. </template>
  22. <template #custom>
  23. <div class="mt-10">
  24. <label class="search__label">公海池:</label>
  25. <el-select class="inline-16" v-model="selectParam.sa_customerpoolid" size="small" placeholder="请选择公海池" @change="selectChange" clearable>
  26. <el-option
  27. v-for="item in option.poolList"
  28. :key="item.sa_customerpoolid"
  29. :label="item.poolname"
  30. :value="item.sa_customerpoolid">
  31. </el-option>
  32. </el-select>
  33. </div>
  34. <div class="mt-10">
  35. <label class="search__label">客户类型:</label>
  36. <el-select class="inline-16" v-model="selectParam.type" size="small" placeholder="请选择" @change="selectChange" clearable>
  37. <el-option
  38. v-for="item in option.typeData"
  39. :key="item.value"
  40. :label="item.value"
  41. :value="item.value">
  42. </el-option>
  43. </el-select>
  44. </div>
  45. <div class="mt-10">
  46. <label class="search__label">客户分类:</label>
  47. <el-select class="inline-16" v-model="selectParam.customergrade" size="small" placeholder="请选择" @change="selectChange" clearable>
  48. <el-option
  49. v-for="item in option.customerClassification"
  50. :key="item.value"
  51. :label="item.value"
  52. :value="item.value">
  53. </el-option>
  54. </el-select>
  55. </div>
  56. <div class="mt-10">
  57. <label class="search__label">客户等级:</label>
  58. <el-select class="inline-16" v-model="selectParam.grade" size="small" placeholder="请选择" @change="selectChange" clearable>
  59. <el-option
  60. v-for="item in option.customerGrade"
  61. :key="item.value"
  62. :label="item.value"
  63. :value="item.value">
  64. </el-option>
  65. </el-select>
  66. </div>
  67. <div class="mt-10">
  68. <label class="search__label">客户行业:</label>
  69. <el-select class="inline-16" v-model="selectParam.industry" size="small" placeholder="请选择" @change="selectChange" clearable>
  70. <el-option
  71. v-for="item in option.industryData"
  72. :key="item.value"
  73. :label="item.value"
  74. :value="item.value">
  75. </el-option>
  76. </el-select>
  77. </div>
  78. <div class="mt-10">
  79. <label class="search__label">合作状态:</label>
  80. <el-select class="inline-16" v-model="selectParam.status" size="small" placeholder="请选择" @change="selectChange" clearable>
  81. <el-option
  82. v-for="item in option.status"
  83. :key="item.value"
  84. :label="item.value"
  85. :value="item.value">
  86. </el-option>
  87. </el-select>
  88. </div>
  89. <div class="mt-10">
  90. <label class="search__label">成交状态:</label>
  91. <el-select class="inline-16" v-model="selectParam.tradingstatus" size="small" placeholder="请选择" @change="selectChange" clearable>
  92. <el-option
  93. v-for="item in option.tradingstatus"
  94. :key="item.value"
  95. :label="item.value"
  96. :value="item.value">
  97. </el-option>
  98. </el-select>
  99. </div>
  100. <div class="mt-10">
  101. <label class="search__label">创建时间:</label>
  102. <el-date-picker
  103. style="margin-right: 24px !important;"
  104. size="small"
  105. @change="selectChange"
  106. value-format="yyyy-MM-dd"
  107. v-model="dateSelect"
  108. type="daterange"
  109. range-separator="至"
  110. start-placeholder="开始日期"
  111. end-placeholder="结束日期"
  112. clearable>
  113. </el-date-picker>
  114. </div>
  115. </template>
  116. <template v-slot:tbList="scope">
  117. <div v-if="scope.data.column.columnname === 'isleader'">
  118. <span style="color:#333333" v-if="scope.data.column.data['leader'].length !== 0">已分配</span>
  119. <span style="color:#3874f6" v-else>待分配</span>
  120. </div>
  121. <div v-else-if="scope.data.column.columnname === 'tag'">
  122. <div v-for="item in scope.data.column.data.tag_sys" :key="item.index" style="float: left;margin-left: 5px;margin-bottom: 5px">
  123. <el-tag color="#3874F6" size="mini" type="primary" effect="dark">
  124. <span>{{item}}</span>
  125. </el-tag>
  126. </div>
  127. <div v-for="item in scope.data.column.data.tag" :key="item.index" style="float: left;margin-left: 5px;margin-bottom: 5px">
  128. <el-tag color="#FA8C16" size="mini" type="warning" effect="dark">
  129. <span>{{item}}</span>
  130. </el-tag>
  131. </div>
  132. </div>
  133. <div v-else-if="scope.data.column.columnname === 'industry'">
  134. <span v-if="JSON.stringify(scope.data.column.data.industry) !== '[]' && scope.data.column.data.industry">
  135. <div v-for="item in scope.data.column.data.industry" :key="item.index" style="float: left;margin-left: 5px;margin-bottom: 5px">
  136. <el-tag size="mini" effect="dark">
  137. <span>{{item}}</span>
  138. </el-tag>
  139. </div>
  140. </span>
  141. <div v-else>
  142. {{'--'}}
  143. </div>
  144. </div>
  145. <div v-else-if="scope.data.column.columnname === 'contact'">
  146. <span>{{scope.data.column.data['leader'][0]?scope.data.column.data['leader'][0].name:'--'}}</span>
  147. </div>
  148. <div v-else-if="scope.data.column.columnname === 'tradingstatus'">
  149. <span style="color:#3874f6" v-if="scope.data.column.data[[scope.data.column.columnname]] == '未成交'">{{scope.data.column.data[[scope.data.column.columnname]]}}</span>
  150. <span style="color:#fa8c16" v-else-if="scope.data.column.data[[scope.data.column.columnname]] == '已成交'">{{scope.data.column.data[[scope.data.column.columnname]]}}</span>
  151. <span style="color:#333333" v-else-if="scope.data.column.data[[scope.data.column.columnname]] == '多次成交'">{{scope.data.column.data[[scope.data.column.columnname]]}}</span>
  152. </div>
  153. <div v-else-if="scope.data.column.columnname === 'status'">
  154. <span style="color:#3874f6" v-if="scope.data.column.data[[scope.data.column.columnname]] == '潜在'">{{scope.data.column.data[[scope.data.column.columnname]]}}</span>
  155. <span style="color:#52c41a" v-else-if="scope.data.column.data[[scope.data.column.columnname]] == '合作中'">{{scope.data.column.data[[scope.data.column.columnname]]}}</span>
  156. <span style="color:#999999" v-else-if="scope.data.column.data[[scope.data.column.columnname]] == '已终止'">{{scope.data.column.data[[scope.data.column.columnname]]}}</span>
  157. </div>
  158. <div v-else>
  159. {{scope.data.column.data[[scope.data.column.columnname]]?scope.data.column.data[[scope.data.column.columnname]]:'--'}}
  160. </div>
  161. </template>
  162. </basicLayout>
  163. </div>
  164. </template>
  165. <script>
  166. import statusChange from './components/statusChange'
  167. import importCustomer from './modules/importCustomer'
  168. export default {
  169. data () {
  170. return {
  171. options:[],
  172. customerType:'',
  173. customerLead:'',
  174. publicList:'',
  175. arealist:[],
  176. poolValue:'全部',
  177. tabIndex:"",
  178. option:{
  179. poolList:[],
  180. customerClassification:[],
  181. customerGrade:[],
  182. typeData:[],
  183. gradeData:[],
  184. industryData:[],
  185. status:[
  186. {
  187. value:'潜在'
  188. },
  189. {
  190. value:'合作中'
  191. },
  192. {
  193. value:'已终止'
  194. }
  195. ],
  196. tradingstatus:[
  197. {
  198. value:'未成交'
  199. },
  200. {
  201. value:'已成交'
  202. },
  203. {
  204. value:'多次成交'
  205. }
  206. ]
  207. },
  208. selectParam: {
  209. sa_customerpoolid:'',
  210. status:'',
  211. type:'',
  212. customergrade:'',
  213. grade:'',
  214. industry:'',
  215. startdate: "",
  216. enddate: "",
  217. tradingstatus:''
  218. },
  219. dateSelect:'',
  220. selectCustomer:[]
  221. }
  222. },
  223. provide () {
  224. return {
  225. customerType:() => this.customerType,
  226. customerLead:() => this.customerLead,
  227. arealist:() => this.arealist,
  228. publicList:() => this.publicList
  229. }
  230. },
  231. components:{statusChange,importCustomer},
  232. methods:{
  233. /* 获取系统选项数据 */
  234. async getSysOption() {
  235. /* 获取客户类型 */
  236. let res = await this.$store.dispatch('optiontypeselect','customertypemx')
  237. this.customerType = res.data
  238. /* 获取客户等级 */
  239. let res2 = await this.$store.dispatch('optiontypeselect','customergrade')
  240. this.customerLead = res2.data
  241. },
  242. /* 获取公海数据 */
  243. async getPublicList() {
  244. const res = await this.$api.requested({
  245. "id": 20221009100702,
  246. "content": {
  247. "pageNumber": 1,
  248. "pageSize": 999999,
  249. "where": {
  250. }
  251. },
  252. })
  253. this.publicList = res.data
  254. },
  255. /* 获取省市县 */
  256. async query_arealist() {
  257. const res = await this.$api.requested({
  258. "classname": "system.tools",
  259. "method": "query_arealist",
  260. "content": {
  261. }
  262. })
  263. this.arealist = this.tool.createMenu(res.data)
  264. },
  265. /*/!*获取公海列表*!/
  266. async queryPool(){
  267. const res = await this.$api.requested({
  268. "id": 20221009100702,
  269. "content": {
  270. "pageNumber": 1,
  271. "pageSize": 99,
  272. "where": {
  273. "condition": "",
  274. "startdate": "",
  275. "enddate": ""
  276. }
  277. },
  278. })
  279. this.option.poolList = res.data
  280. },*/
  281. handleCommand(command){
  282. this.tabIndex = command.sa_customerpoolid
  283. this.poolValue = command.poolname
  284. this.$refs['basicLayout'].param.content.where.sa_customerpoolid = command.sa_customerpoolid
  285. this.$refs['basicLayout'].listData()
  286. },
  287. /*客户类型列表*/
  288. async typeList(){
  289. const siteid = JSON.parse(sessionStorage.getItem('active_account')).siteid
  290. const res = await this.$api.requested({
  291. "classname": "sysmanage.develop.optiontype.optiontype",
  292. "method": "optiontypeselect",
  293. "content": {
  294. "pageNumber": 1,
  295. "pageSize": 20,
  296. "typename": "customertypemx",
  297. "parameter": {
  298. "siteid": siteid
  299. }
  300. }
  301. })
  302. this.option.typeData = res.data
  303. },
  304. /*客户分类*/
  305. async gradeList(){
  306. const siteid = JSON.parse(sessionStorage.getItem('active_account')).siteid
  307. const res = await this.$api.requested({
  308. "classname": "sysmanage.develop.optiontype.optiontype",
  309. "method": "optiontypeselect",
  310. "content": {
  311. "pageNumber": 1,
  312. "pageSize": 20,
  313. "typename": "customergrade",
  314. "parameter": {
  315. "siteid": siteid
  316. }
  317. }
  318. })
  319. console.log("客户等级",res.data)
  320. /*for (var i=0;i<res.data.length; i++){
  321. if (res.data[i].remarks !== ''){
  322. this.options.gradeData[i] = res.data[i].value + "——" + res.data[i].remarks
  323. }else{
  324. this.options.gradeData[i] = res.data[i].value
  325. }
  326. }*/
  327. this.option.customerClassification = res.data
  328. console.log("处理后客户等级",this.options.customerClassification)
  329. },
  330. /*客户等级*/
  331. queryCustomerGrade(){
  332. this.$store.dispatch('optiontypeselect','agentgrade').then(res=>{
  333. this.option.customerGrade = res.data
  334. })
  335. },
  336. /*行业列表*/
  337. async industryList(){
  338. const siteid = JSON.parse(sessionStorage.getItem('active_account')).siteid
  339. const res = await this.$api.requested({
  340. "classname": "sysmanage.develop.optiontype.optiontype",
  341. "method": "optiontypeselect",
  342. "content": {
  343. "pageNumber": 1,
  344. "pageSize": 20,
  345. "typename": "industry",
  346. "parameter": {
  347. "siteid": siteid
  348. }
  349. }
  350. })
  351. this.option.industryData = res.data
  352. },
  353. selectChange(){
  354. if (this.dateSelect !== '' && this.dateSelect !== null){
  355. this.selectParam.startdate = this.dateSelect[0]
  356. this.selectParam.enddate = this.dateSelect[1]
  357. }else {
  358. this.selectParam.startdate = ''
  359. this.selectParam.enddate = ''
  360. }
  361. this.$refs.basicLayout.param.content.where = this.selectParam
  362. this.$refs.basicLayout.listData()
  363. },
  364. onSuccess(){
  365. this.$refs.basicLayout.listData()
  366. },
  367. /*选择的客户*/
  368. checkboxCallBack(val){
  369. this.selectCustomer = []
  370. val.forEach((item,index)=>{
  371. this.selectCustomer[index] = item.sa_customersid
  372. })
  373. },
  374. /*删除客户*/
  375. deleteData(){
  376. this.$confirm('是否确认彻底删除数据,一旦删除,无法恢复?', '提示', {
  377. confirmButtonText: '确定',
  378. cancelButtonText: '取消',
  379. closeOnClickModal:false,
  380. type: 'warning'
  381. }).then(async() => {
  382. const res = await this.$api.requested({
  383. "id": 20230103131204,
  384. "content": {
  385. "sys_object": 2,//1-线索,2-客户,3-合同,4-项目商机,5-报价单
  386. "ownerids": this.selectCustomer
  387. }
  388. })
  389. this.tool.showMessage(res,()=>{
  390. this.$refs.basicLayout.listData()
  391. })
  392. }).catch(() => {
  393. this.$message({
  394. type: 'info',
  395. message: '已取消删除'
  396. });
  397. });
  398. },
  399. /*获取公海池*/
  400. queryPublicPool(){
  401. this.$store.dispatch('optiontypeselect','customerpoolname').then(res=>{
  402. console.log(res,'公海池')
  403. this.option.poolList = res.data
  404. /* this.selectParam.sa_customerpoolid = res.data[0].sa_customerpoolid*/
  405. this.$refs.basicLayout.param.content.where = this.selectParam
  406. this.$refs.basicLayout.listData()
  407. })
  408. }
  409. },
  410. created() {
  411. this.getSysOption()
  412. this.getPublicList()
  413. this.query_arealist()
  414. this.typeList()
  415. this.gradeList()
  416. this.industryList()
  417. this.queryPublicPool()
  418. this.queryCustomerGrade()
  419. },
  420. mounted() {
  421. }
  422. }
  423. </script>
  424. <style scoped>
  425. /* /deep/.el-table__cell .cell {
  426. display: flex;
  427. justify-content: s;
  428. } */
  429. .el-dropdown-link {
  430. cursor: pointer;
  431. color: #151515;
  432. font-size: 16px;
  433. }
  434. .el-divider--vertical{
  435. margin: 0 16px;
  436. }
  437. .el-icon-arrow-down {
  438. font-size: 16px;
  439. }
  440. .s_panel{
  441. margin-bottom: 10px;
  442. }
  443. </style>