baseForm.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  1. <template>
  2. <div class="base-form">
  3. <div class="form">
  4. <Form :label-width="86" :rules="rules" :model="form" ref="form">
  5. <Row :gutter="90">
  6. <i-col :span="12" class="">
  7. <FormItem label="公司名称" prop="companyName">
  8. <Input type="text" size="large" v-model="form.companyName" :disabled="isDetail" />
  9. </FormItem>
  10. </i-col>
  11. <i-col :span="12" class="">
  12. <FormItem label="所属行业" prop="companyType">
  13. <i-select size="large" v-model="form.companyType" @on-change="changeCompanyType" :disabled="isDetail">
  14. <i-option v-for="item in industryList" :key="item.id" :value="item.name">{{ item.name }}</i-option>
  15. </i-select>
  16. <!-- <Input type="text" size="large" v-model="form.companyType" :disabled="isDetail" /> -->
  17. </FormItem>
  18. </i-col>
  19. <i-col :span="12" class="">
  20. <FormItem label="成立时间" prop="companyRegisterTime">
  21. <Date-picker :value="form.companyRegisterTime" type="year" size="large" placeholder="" :disabled="isDetail" @on-change="changeDate"></Date-picker>
  22. </FormItem>
  23. </i-col>
  24. <i-col :span="12" class="">
  25. <FormItem label="员工人数" prop="staffNum">
  26. <Input type="text" size="large" v-model="form.staffNum" :disabled="isDetail" />
  27. </FormItem>
  28. </i-col>
  29. <i-col :span="12" class="">
  30. <FormItem label="注册资金" prop="registerFund">
  31. <Input type="text" size="large" v-model="form.registerFund" :disabled="isDetail"/>
  32. </FormItem>
  33. </i-col>
  34. <i-col :span="12" class="">
  35. <FormItem label="主要产品" prop="mainProductDesc">
  36. <Input type="text" size="large" v-model="form.mainProductDesc" :disabled="isDetail" />
  37. </FormItem>
  38. </i-col>
  39. <i-col :span="12" class="">
  40. <FormItem label="公司网址">
  41. <Input type="text" size="large" v-model="form.companyWebsite" :disabled="isDetail" />
  42. </FormItem>
  43. </i-col>
  44. <i-col :span="24" class="">
  45. <FormItem label="公司地址">
  46. <template>
  47. <Input size="large" v-model="form.companyAddress" :disabled="isDetail" />
  48. <Button size="large" type="primary" style="margin-left:15px" @click="searchAddress" v-if="!isDetail">查找</Button>
  49. <qqMap ref="map" city="珠海" :latitude="form.latitude" :longitude="form.longitude" @clickMap="clickMap" v-if="!isDetail" />
  50. </template>
  51. </FormItem>
  52. </i-col>
  53. <i-col :span="24" class="">
  54. <FormItem label="公司简介" class="textarea-w">
  55. <Input type="textarea" size="large" v-model="form.companyDesc" :disabled="isDetail" maxlength="200" :show-word-limit="!isDetail" />
  56. </FormItem>
  57. </i-col>
  58. <i-col :span="24" class="">
  59. <FormItem label="公司logo">
  60. <picUpload ref="logoUpload" tips="只能上传jpg/png文件,且不超过500kb" :multiple="false" :limit="1" :preUploads="preLogoUploads" :hasUploads="hasLogoUploads" v-if="!isDetail" />
  61. <img style="width: 100px;height:100px;" :src="form.companyLogo" v-else>
  62. </FormItem>
  63. </i-col>
  64. <!-- <i-col :span="12" class="">
  65. <FormItem label="资质认证">
  66. <picUpload tips="只能上传jpg/png文件,且不超过500kb" :multiple="false" :limit="1" />
  67. </FormItem>
  68. </i-col> -->
  69. <i-col :span="24" class="">
  70. <FormItem label="场景地址">
  71. <template>
  72. <Input type="text" size="large" v-model="form.vrLink" :disabled="isDetail" />
  73. <Button type="primary" size="large" class="input-btn" @click="modalShow=true" v-if="!isDetail">选择场景</Button>
  74. <Button type="primary" size="large" class="input-btn">编辑场景</Button>
  75. </template>
  76. </FormItem>
  77. </i-col>
  78. <i-col :span="24" class="">
  79. <FormItem label="讲解人员">
  80. <template>
  81. <div class="guide-info">
  82. <p class="guide-name">{{select_guide.name}}</p>
  83. <p class="guide-id">{{select_guide.viewerId}}</p>
  84. <p class="guide-phone">{{select_guide.phoneNum}}</p>
  85. <img v-if="select_guide.avatar" :src="select_guide.avatar" alt="" class="guide-avatar">
  86. </div>
  87. <Button type="primary" size="large" @click="guideModalShow=true" v-if="!isDetail">选择/更换</Button>
  88. </template>
  89. </FormItem>
  90. </i-col>
  91. </Row>
  92. </Form>
  93. </div>
  94. <cModal :show="modalShow" class="scene-modal" :width="960" title="添加/选择场景" @close="modalShow=false" @submit="changeScene">
  95. <template>
  96. <tables
  97. :data-api="dataApi"
  98. :columns="tableColumns"
  99. placeholder="场景名称"
  100. />
  101. <div style="height:20px"></div>
  102. </template>
  103. </cModal>
  104. <cModal :show="guideModalShow" class="scene-modal" :width="960" title="选择讲解员" @close="guideModalShow=false" @submit="changeGuide">
  105. <template>
  106. <tables
  107. :data-api="getGuideList"
  108. :columns="guideTableColumns"
  109. placeholder="经纪人"
  110. ref="guideTable"
  111. />
  112. <div style="height:20px"></div>
  113. </template>
  114. </cModal>
  115. </div>
  116. </template>
  117. <script>
  118. import picUpload from '@/components/upload'
  119. import cModal from '@/components/Modal'
  120. import tables from 'components/tables'
  121. import * as CompanyApi from '@/api/company'
  122. import { getGuideList } from '@/api/guide'
  123. import { searchPlaceByKeyword } from '@/api/qqmap'
  124. import qqMap from '@/components/map'
  125. export default {
  126. props: {
  127. form: Object,
  128. isDetail: Boolean
  129. },
  130. data () {
  131. return {
  132. preLogoUploads: [],
  133. hasLogoUploads: [],
  134. select_scene_num: '',
  135. select_guide_id: '',
  136. select_guide: {},
  137. rules: {
  138. name: [{ required: true, message: '请填写公司名', trigger: 'blur' }],
  139. companyType: [{ required: true, message: '请选择所属行业', trigger: 'change'}],
  140. companyRegisterTime: [{ required: true, message: '请填写成立时间', trigger: 'change'}],
  141. staffNum: [{ required: true, message: '请填写员工人数', trigger: 'blur' }],
  142. registerFund: [{ required: true, message: '请填写注册资金', trigger: 'blur' }],
  143. mainProductDesc: [{ required: true, message: '请填写主要产品描述', trigger: 'blur' }],
  144. },
  145. tableColumns: [
  146. {
  147. align: 'center',
  148. width: 80,
  149. render: (h, params ) => h('Checkbox', {
  150. props: {
  151. trueValue: params.row.num,
  152. falseValue: false,
  153. value: params.row.num === this.select_scene_num ? params.row.num : false
  154. },
  155. on: {
  156. 'on-change': (val) => {
  157. this.select_scene_num = val
  158. }
  159. }
  160. })
  161. },
  162. {
  163. type: 'index',
  164. title: '序号',
  165. align: 'center',
  166. width: 80
  167. },
  168. {
  169. title: '场景名称',
  170. key: 'sceneName',
  171. align: 'center'
  172. },
  173. {
  174. title: '分类',
  175. key: 'title',
  176. align: 'center',
  177. render: h => h('div', '其它')
  178. },
  179. {
  180. title: '拍摄时间',
  181. key: 'createTime',
  182. align: 'center'
  183. }
  184. ],
  185. guideTableColumns: [
  186. {
  187. align: 'center',
  188. width: 80,
  189. render: (h, params ) => h('Checkbox', {
  190. props: {
  191. trueValue: params.row.viewerId,
  192. falseValue: false,
  193. value: params.row.viewerId === this.select_guide_id ? params.row.viewerId : false
  194. },
  195. on: {
  196. 'on-change': (val) => {
  197. this.select_guide_id = val
  198. }
  199. }
  200. })
  201. },
  202. {
  203. type: 'index',
  204. title: '序号',
  205. align: 'center',
  206. width: 80
  207. },
  208. {
  209. title: '头像',
  210. key: 'avatar',
  211. align: 'center',
  212. render: (h, params) => h('img', {
  213. attrs: {
  214. style: "width: 40px;height:40px;border-radius: 50%;",
  215. src: params.row.avatar
  216. }
  217. })
  218. },
  219. {
  220. title: '名称',
  221. key: 'name',
  222. align: 'center'
  223. },
  224. {
  225. title: '联系方式',
  226. key: 'phoneNum',
  227. align: 'center'
  228. }
  229. ],
  230. industryList: [],
  231. dataApi: CompanyApi.fetchAllScene,
  232. getGuideList,
  233. modalShow: false,
  234. guideModalShow: false,
  235. addressList: []
  236. }
  237. },
  238. components: {
  239. picUpload,
  240. cModal,
  241. tables,
  242. qqMap
  243. },
  244. mounted () {
  245. this.getIndustryList()
  246. this.$watch('form.companyLogo', function (newVal) {
  247. if (this.isDetail) {
  248. this.hasLogoUploads = [{img: newVal}]
  249. }
  250. }, {
  251. immediate: true
  252. })
  253. },
  254. methods: {
  255. async validate () {
  256. const valid = await this.$refs['form'].validate()
  257. if (!valid) {
  258. this.$Message.error('请完善表单')
  259. }
  260. return valid
  261. },
  262. async submit () {
  263. let res = await this.$refs['logoUpload'].uploadfiles()
  264. this.form.companyLogo = res[0]
  265. },
  266. changeScene () {
  267. this.vrLink = this.select_scene_num ? `${process.env.VUE_APP_4DKANKAN_URL}/vrHouse.html?m=${this.select_scene_num}&appname=vrhouse` : ''
  268. this.form.vrLink = this.select_scene_num ? encodeURIComponent(`${process.env.VUE_APP_4DKANKAN_URL}/vrHouse.html?m=${this.select_scene_num}&appname=vrhouse`) : ''
  269. this.form.sceneNum = this.select_scene_num || ''
  270. this.modalShow = false
  271. },
  272. changeGuide () {
  273. this.select_guide = this.$refs['guideTable'].tableData.find(item => item.viewerId === this.select_guide_id)
  274. },
  275. getIndustryList () {
  276. CompanyApi.getIndustry({pageSize: 9999}).then(res => {
  277. this.industryList = res.data.list
  278. })
  279. },
  280. changeCompanyType (value) {
  281. this.form.companyType = value
  282. },
  283. searchAddress () {
  284. searchPlaceByKeyword({keyword: this.form.companyAddress}).then(res => {
  285. this.addressList = res.data
  286. if (res.data[0]) {
  287. this.$refs['map'].search(res.data[0].location)
  288. }
  289. })
  290. },
  291. clickMap (value) {
  292. this.form.companyAddress = value.address
  293. this.form.latitude = value.location.latitude
  294. this.form.longitude = value.location.longitude
  295. },
  296. changeDate (date) {
  297. console.log(date)
  298. this.form.companyRegisterTime = date
  299. }
  300. }
  301. }
  302. </script>
  303. <style lang="less">
  304. .base-form {
  305. .address-detail {
  306. font-size: 12px;
  307. color: #909090;
  308. }
  309. .ivu-select .ivu-select-dropdown {
  310. width: 337px;
  311. overflow: auto;
  312. overflow-x: hidden;
  313. }
  314. }
  315. .guide-info {
  316. width: 380px;
  317. padding: 12px 15px 16px;
  318. font-size: 14px;
  319. background: #161A1A;
  320. border:1px solid rgba(255,255,255,0.4);
  321. position: relative;
  322. line-height: 19px;
  323. display: inline-block;
  324. margin-right: 15px;
  325. min-height: 104px;
  326. vertical-align: top;
  327. p {
  328. margin-bottom: 10px;
  329. }
  330. .guide-phone {
  331. margin-bottom: 0;
  332. }
  333. .guide-avatar {
  334. position: absolute;
  335. right: 15px;
  336. top: 15px;
  337. width: 60px;
  338. height: 60px;
  339. border-radius: 50%;
  340. }
  341. }
  342. </style>