123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308 |
- <template>
- <div class="app-container">
- <el-form
- ref="formLabelAlign"
- label-width="120px"
- :model="formLabelAlign"
- :rules="rules"
- >
- <el-form-item label="服务商名称:" prop="name">
- <el-input v-model="formLabelAlign.name" placeholder="请输入服务商名称" />
- </el-form-item>
- <el-form-item label="服务商级别:" prop="serviceLevel">
- <el-select v-model="formLabelAlign.serviceLevel" placeholder="请选择服务商级别">
- <el-option
- v-for="i in serviceLevel"
- :key="i.id"
- :label="i.value"
- :value="i.id"
- />
- </el-select>
- </el-form-item>
- <el-form-item label="服务商地区:" prop="area">
- <el-cascader
- ref="cascader"
- :key="areaKey"
- v-model="formLabelAlign.area"
- :class="{ display: cascaderDisplay }"
- clearable
- :props="cascaderProps"
- style="width: 100%"
- :placeholder="cascaderPlaceholder"
- @change="handleChange"
- />
- </el-form-item>
- <el-form-item label="服务商类型:" prop="serviceCategory">
- <el-select v-model="formLabelAlign.serviceCategory" placeholder="服务商类型">
- <el-option
- v-for="i in serviceCategoryList"
- :key="i.id"
- :label="i.value"
- :value="i.id"
- />
- </el-select>
- </el-form-item>
- <el-form-item label="联系人:" prop="linkMan">
- <el-input v-model="formLabelAlign.linkMan" placeholder="请输入联系人" />
- </el-form-item>
- <el-form-item label="联系电话:" prop="mobile">
- <el-input
- v-model="formLabelAlign.mobile"
- placeholder="请输入联系电话"
- :maxlength="11"
- oninput="value=value.replace(/[^\d]/g, '')"
- />
- </el-form-item>
- <el-form-item label="简介图:" prop="textRelateds">
- <image-upload
- :limit="6"
- :image-list="textRelateds"
- @success="handleImageSuccess($event, 'textRelateds')"
- @remove="handleImageRemove($event, 'textRelateds')"
- />
- </el-form-item>
- <el-form-item label="简介:" prop="text">
- <el-input
- v-model="formLabelAlign.text"
- type="textarea"
- :autosize="{ minRows: 8, maxRows: 10 }"
- placeholder="请输入内容"
- />
- </el-form-item>
- <el-form-item v-if="id" label="资格证书:">
- <el-image style="width: 200px;" :src="qualificationImage" :preview-src-list="[qualificationImage]" />
- </el-form-item>
- <el-form-item label="资料上传:" prop="infoRelateds">
- <file-upload
- :list="infoList"
- :limit="20"
- :tip="'支持上传pdf、docx、 pptx文件格式'"
- :before-upload="beforeUpload"
- :is-check="false"
- @success="uploadSuccess($event, 'infoRelateds')"
- @change="uploadChange($event, 'infoRelateds')"
- @remove="handleRemove($event, 'infoRelateds')"
- />
- </el-form-item>
- <div v-if="!id">
- <el-form-item label="合同:">
- (由于是添加新服务商,必须添加合同,后续可去合同列表编辑及添加)
- </el-form-item>
- <el-form-item label="合同编号:" prop="contract.contractId">
- <el-input v-model="formLabelAlign.contract.contractId" />
- </el-form-item>
- <el-form-item label="合同起始日期:" prop="contract.contractStartDate">
- <el-date-picker
- v-model="formLabelAlign.contract.contractStartDate"
- type="date"
- value-format="yyyy-MM-dd"
- placeholder="选择日期"
- />
- </el-form-item>
- <el-form-item label="合同截止日期:" prop="contract.contractEndDate">
- <el-date-picker
- v-model="formLabelAlign.contract.contractEndDate"
- type="date"
- placeholder="选择日期"
- value-format="yyyy-MM-dd"
- />
- </el-form-item>
- <el-form-item label="上传合同:" prop="contract.contractRelateds">
- <file-upload
- :limit="20"
- :is-check="false"
- :file-list="contractList"
- :tip="'支持上传pdf、docx、 pptx文件格式'"
- @success="contractUploadSuccess($event)"
- @remove="contractHandleRemove($event)"
- />
- </el-form-item>
- </div>
- <el-form-item>
- <el-button type="primary" @click="submitForm('formLabelAlign')">保存</el-button>
- <el-button @click="$router.back()">返回</el-button>
- </el-form-item>
- </el-form>
- </div>
- </template>
- <script>
- import ImageUpload from '@/components/UploadImage/index.vue'
- import FileUpload from '../components/UploadFile.vue'
- import {
- getAddress,
- addProvider,
- getProviderDetail
- } from '@/api/serviceSettlement/service'
- import serviceMixin from '../mixin/index'
- import { mapGetters } from 'vuex'
- export default {
- components: {
- ImageUpload,
- FileUpload
- },
- mixins: [serviceMixin],
- data() {
- return {
- formLabelAlign: {
- address: '',
- infoRelateds: [],
- area: [],
- textRelateds: [],
- contract: {
- contractRelateds: []
- }
- },
- qualificationImage: '',
- infoList: [],
- contractList: [],
- textRelateds: [],
- areaKey: 0,
- rules: {
- name: [
- { required: true, message: '请输入服务商名称', trigger: 'blur' },
- { max: 50, message: '长度最多50个汉字', trigger: 'blur' }
- ],
- area: [{ required: true, message: '请选择地址', trigger: 'change' }],
- serviceLevel: [
- { required: true, message: '请选择服务商级别', trigger: 'change' }
- ],
- mobile: [{ required: true, message: '请输入联系电话', trigger: 'blur' }],
- linkMan: [{ required: true, message: '请输入联系人', trigger: 'blur' }],
- text: [{ required: true, message: '请输入简介', trigger: 'blur' }],
- serviceCategory: [
- { required: true, message: '请选择服务商类型', trigger: 'change' }
- ],
- textRelateds: [{ required: true, message: '请上传简介图', trigger: 'change' }],
- contract: {
- contractId: [{ required: true, message: '请输入合同编号', trigger: 'blur' }],
- contractStartDate: [
- { required: true, message: '请选择合同起始时间', trigger: 'change' }
- ],
- contractEndDate: [
- { required: true, message: '请选择合同结束时间', trigger: 'change' }
- ],
- contractRelateds: [
- { required: true, message: '请上传合同文件', trigger: 'change' }
- ]
- },
- infoRelateds: [
- { required: true, message: '请上传资料文件', trigger: 'change' }
- ]
- }
- }
- },
- computed: {
- ...mapGetters(['userId', 'username', 'fullName', 'phone']),
- id() {
- return this.$route.query.id || false
- },
- cascaderPlaceholder() {
- return this.cascaderDisplay ? this.formLabelAlign.address : '请选择所在区域'
- },
- cascaderDisplay() {
- return this.formLabelAlign.area.length > 0
- },
- // 级联选择器
- cascaderProps() {
- return {
- lazy: true,
- lazyLoad: async(node, resolve) => {
- const { level, data } = node
- console.log(node)
- const result = await getAddress({ parentId: data?.vId || 0, type: level })
- const nodes = result.data.map((item) => ({
- value: item.name,
- label: item.name,
- leaf: level >= 1,
- vId: item.id
- }))
- resolve(nodes)
- }
- }
- }
- },
- mounted() {
- if (this.id) {
- this.getInfo()
- }
- },
- methods: {
- async getInfo() {
- const { data } = await getProviderDetail({ providersId: this.id })
- this.formLabelAlign = data
- this.infoList = data.infoRelateds.map((e, i) => ({ name: e.fileName, response: { data: e.image }}))
- this.textRelateds = data.textRelateds.map((e, i) => ({ uid: i, url: e.image }))
- this.formLabelAlign.area = data.address.split('/').map(e => e.trim())
- this.qualificationImage = data.qualificationImage
- setTimeout(() => {
- this.areaKey = Math.random() * 1000
- }, 500)
- },
- // 地区选择
- handleChange($event) {
- console.log($event)
- this.formLabelAlign.address = $event.join(' / ')
- },
- // 合同上传
- contractUploadSuccess($event) {
- this.formLabelAlign.contract.contractRelateds = $event.fileList.map(e => ({ image: e.response?.data || '', fileName: e.name }))
- },
- contractHandleRemove($event) {
- this.formLabelAlign.contract.contractRelateds = $event.fileList.map(e => ({ image: e.response?.data || '', fileName: e.name }))
- },
- submitForm(form) {
- console.log(this.formLabelAlign)
- this.$refs[form].validate(async(valid) => {
- if (valid) {
- try {
- delete this.formLabelAlign.area
- const form = Object.assign(this.formLabelAlign, { createBy: this.fullName })
- await addProvider(form)
- this.$message({ type: 'success', message: '添加成功' })
- this.$router.back()
- } catch (e) {
- console.warn(e)
- }
- }
- })
- },
- beforeUpload(file) {
- console.log(file)
- if (file.size / 1024 / 1024 < 50) {
- return true
- } else {
- this.$message({
- type: 'error',
- message: '文件大小限制在50M以内'
- })
- return false
- }
- },
- handleImageRemove($event, name) {
- console.log($event, name)
- this.formLabelAlign[name] = $event.fileList.map(e => ({
- image: e.url
- }))
- },
- handleImageSuccess($event, name) {
- console.log($event)
- this.formLabelAlign[name] = $event.fileList.map(e => ({
- image: e.response ? e.response.data : e.url
- }))
- }
- }
- }
- </script>
- <style lang="scss" scoped>
- ::v-deep .el-input,
- ::v-deep .el-textarea__inner {
- width: 500px;
- }
- ::v-deep .el-form {
- width: 650px;
- margin: 0 auto;
- }
- </style>
|