|
@@ -0,0 +1,407 @@
|
|
|
+<template>
|
|
|
+ <div id="detail-1">
|
|
|
+ <van-row>
|
|
|
+ <van-col span="24" class="main">
|
|
|
+ <van-form>
|
|
|
+ <van-col :span="24" class="remark">用户申请专利如需所在学校机构进行审核,请选择是;如不需要请选择否;</van-col>
|
|
|
+ <van-field name="is_mech" label="是否需要机构" :rules="[{ required: false, message: '请选择' }]">
|
|
|
+ <template #input>
|
|
|
+ <van-radio-group v-model="form.is_mech" direction="horizontal">
|
|
|
+ <van-radio name="1">是</van-radio>
|
|
|
+ <van-radio name="0">否</van-radio>
|
|
|
+ </van-radio-group>
|
|
|
+ </template>
|
|
|
+ </van-field>
|
|
|
+ <van-field
|
|
|
+ v-if="form.is_mech == '1'"
|
|
|
+ readonly
|
|
|
+ clickable
|
|
|
+ name="mechanism_name"
|
|
|
+ :value="form.mechanism_name"
|
|
|
+ label="选择机构"
|
|
|
+ placeholder="点击选择"
|
|
|
+ @click="showPicker = true"
|
|
|
+ />
|
|
|
+ <van-popup v-model="showPicker" position="bottom">
|
|
|
+ <van-picker show-toolbar :columns="mechanismList" value-key="deptname" @confirm="mechanismCon" @cancel="showPicker = false" />
|
|
|
+ </van-popup>
|
|
|
+ <!-- <van-field v-model="form.water_number" name="专利用户码" label="专利用户码" readonly /> -->
|
|
|
+ <van-field v-model="form.name" name="专利名称" label="专利名称" placeholder="专利名称" :rules="[{ required: false, message: '专利名称' }]" />
|
|
|
+ <van-field v-model="form.apply_name" name="申请人" label="申请人" placeholder="申请人" :rules="[{ required: false, message: '申请人' }]" />
|
|
|
+ <van-field readonly clickable name="type" :value="form.type" label="选择类型" placeholder="点击选择" @click="typePicker = true" />
|
|
|
+ <van-popup v-model="typePicker" position="bottom">
|
|
|
+ <van-picker show-toolbar :columns="typeList" @confirm="typeCon" @cancel="typePicker = false" />
|
|
|
+ </van-popup>
|
|
|
+ <van-col span="24" class="inventor">
|
|
|
+ <van-col span="24" class="inventor_btn">
|
|
|
+ <van-button size="mini" type="info" @click="selectinventor('inventor')">选择发明人</van-button>
|
|
|
+ <van-button size="mini" type="info" @click="addinventor('inventor')">添加发明人</van-button>
|
|
|
+ </van-col>
|
|
|
+ <van-col span="24" class="inventor_list">
|
|
|
+ <span>发明人:</span>
|
|
|
+ <span v-for="(item, index) in form.inventor" :key="index">
|
|
|
+ {{ index + 1 }}-{{ item.name }}- <span style="color: #ff0000" @click="delInv(item)">删除</span>;
|
|
|
+ </span>
|
|
|
+ </van-col>
|
|
|
+ </van-col>
|
|
|
+ <van-col span="24" class="inventor">
|
|
|
+ <van-col span="24" class="inventor_btn">
|
|
|
+ <van-button size="mini" type="info" @click="selectinventor('contact')">选择技术联系人</van-button>
|
|
|
+ <van-button size="mini" type="info" @click="addinventor('contact')">添加技术联系人</van-button>
|
|
|
+ </van-col>
|
|
|
+ <van-col span="24" class="inventor_list">
|
|
|
+ <span>技术联系人:</span>
|
|
|
+ <span v-for="(item, index) in form.contact" :key="index">
|
|
|
+ {{ index + 1 }}-{{ item.name }}- <span style="color: #ff0000" @click="delCon(item)">删除</span>;
|
|
|
+ </span>
|
|
|
+ </van-col>
|
|
|
+ </van-col>
|
|
|
+ <van-field v-model="form.phone" name="联系人电话" label="联系人电话" placeholder="联系人电话" :rules="[{ required: false, message: '联系人电话' }]" />
|
|
|
+ <van-field v-model="form.email" name="联系人邮箱" label="联系人邮箱" placeholder="联系人邮箱" :rules="[{ required: false, message: '联系人邮箱' }]" />
|
|
|
+ <van-field
|
|
|
+ v-model="form.questions.q8"
|
|
|
+ type="textarea"
|
|
|
+ rows="1"
|
|
|
+ autosize
|
|
|
+ name="特殊情况说明"
|
|
|
+ label="特殊情况说明"
|
|
|
+ placeholder="特殊情况说明"
|
|
|
+ :rules="[{ required: false, message: '特殊情况说明' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="form.questions.q1"
|
|
|
+ type="textarea"
|
|
|
+ rows="1"
|
|
|
+ autosize
|
|
|
+ name="本发明的技术领域"
|
|
|
+ label="本发明的技术领域"
|
|
|
+ placeholder="本发明的技术领域"
|
|
|
+ :rules="[{ required: false, message: '本发明的技术领域' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="form.questions.q2"
|
|
|
+ type="textarea"
|
|
|
+ rows="1"
|
|
|
+ autosize
|
|
|
+ name="与本发明相关的背景技术"
|
|
|
+ label="与本发明相关的背景技术"
|
|
|
+ placeholder="与本发明相关的背景技术"
|
|
|
+ :rules="[{ required: false, message: '与本发明相关的背景技术' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="form.questions.q3"
|
|
|
+ type="textarea"
|
|
|
+ rows="1"
|
|
|
+ autosize
|
|
|
+ name="现有技术的缺点及本发明所要解决的技术问题"
|
|
|
+ label="现有技术的缺点及本发明所要解决的技术问题"
|
|
|
+ placeholder="现有技术的缺点及本发明所要解决的技术问题"
|
|
|
+ :rules="[{ required: false, message: '现有技术的缺点及本发明所要解决的技术问题' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="form.questions.q4"
|
|
|
+ type="textarea"
|
|
|
+ rows="1"
|
|
|
+ autosize
|
|
|
+ name="本发明技术方案的详细阐述"
|
|
|
+ label="本发明技术方案的详细阐述"
|
|
|
+ placeholder="本发明技术方案的详细阐述"
|
|
|
+ :rules="[{ required: false, message: '本发明技术方案的详细阐述' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="form.questions.q5"
|
|
|
+ type="textarea"
|
|
|
+ rows="1"
|
|
|
+ autosize
|
|
|
+ name="本申请的关键点和欲保护点"
|
|
|
+ label="本申请的关键点和欲保护点"
|
|
|
+ placeholder="本申请的关键点和欲保护点"
|
|
|
+ :rules="[{ required: false, message: '本申请的关键点和欲保护点' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="form.questions.q6"
|
|
|
+ type="textarea"
|
|
|
+ rows="1"
|
|
|
+ autosize
|
|
|
+ name="与本发明最相似,相近的实现技术,方案相比,本发明有何优点"
|
|
|
+ label="与本发明最相似,相近的实现技术,方案相比,本发明有何优点"
|
|
|
+ placeholder="与本发明最相似,相近的实现技术,方案相比,本发明有何优点"
|
|
|
+ :rules="[{ required: false, message: '与本发明最相似,相近的实现技术,方案相比,本发明有何优点' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="form.questions.q7"
|
|
|
+ type="textarea"
|
|
|
+ rows="1"
|
|
|
+ autosize
|
|
|
+ name="针对本发明技术方案,是否还有别的替代方案"
|
|
|
+ label="针对本发明技术方案,是否还有别的替代方案"
|
|
|
+ placeholder="针对本发明技术方案,是否还有别的替代方案"
|
|
|
+ :rules="[{ required: false, message: '针对本发明技术方案,是否还有别的替代方案' }]"
|
|
|
+ />
|
|
|
+ <van-field name="check_url" label="审查文件">
|
|
|
+ <template #input>
|
|
|
+ <van-uploader
|
|
|
+ :fileList="form.check_url"
|
|
|
+ :max-count="1"
|
|
|
+ :after-read="(file) => toUpload(file, 'check_url')"
|
|
|
+ @delete="(file) => toDelete(file, 'check_url')"
|
|
|
+ accept="file"
|
|
|
+ />
|
|
|
+ </template>
|
|
|
+ </van-field>
|
|
|
+ <div style="margin: 16px">
|
|
|
+ <van-button round block type="info" @click="onSubmit">提交</van-button>
|
|
|
+ </div>
|
|
|
+ </van-form>
|
|
|
+ </van-col>
|
|
|
+ </van-row>
|
|
|
+ <van-dialog class="dialog" v-model="show" title="查询用户" :show-cancel-button="false" :show-confirm-button="false" :closeOnClickOverlay="true">
|
|
|
+ <van-col span="24" class="two">
|
|
|
+ <van-col span="24" class="two_1">
|
|
|
+ <van-search v-model="searchName" show-action placeholder="请输入联系电话" @search="searchUser">
|
|
|
+ <template #action>
|
|
|
+ <div @click="searchUser">搜索</div>
|
|
|
+ </template>
|
|
|
+ </van-search>
|
|
|
+ </van-col>
|
|
|
+ <van-col span="24" class="two_2">
|
|
|
+ <van-col span="24" class="list" v-for="(item, index) in list" :key="index">
|
|
|
+ <van-col span="24" class="name"> {{ item.name }} </van-col>
|
|
|
+ <van-col span="24" class="other">
|
|
|
+ <van-col span="24" class="otherInfo">
|
|
|
+ 联系电话:<span>{{ item.phone }}</span>
|
|
|
+ </van-col>
|
|
|
+ </van-col>
|
|
|
+ <van-col span="24" class="btn">
|
|
|
+ <van-button type="info" size="mini" @click="conFirm(item)">确认选择</van-button>
|
|
|
+ </van-col>
|
|
|
+ </van-col>
|
|
|
+ <van-col span="24" class="page">
|
|
|
+ <page @search="searchUser" :limit="limit" :total="total"></page>
|
|
|
+ </van-col>
|
|
|
+ </van-col>
|
|
|
+ </van-col>
|
|
|
+ </van-dialog>
|
|
|
+ <van-dialog class="adddialog" v-model="addShow" title="添加用户" :show-cancel-button="false" :show-confirm-button="false" :closeOnClickOverlay="true">
|
|
|
+ <van-form>
|
|
|
+ <van-field v-model="addForm.name" name="name" label="姓名" placeholder="姓名" />
|
|
|
+ <van-field v-model="addForm.phone" name="phone" label="联系电话" placeholder="联系电话" />
|
|
|
+ <van-col span="24" class="btn">
|
|
|
+ <van-button type="danger" size="small" @click="resetAdd">取消添加</van-button>
|
|
|
+ <van-button type="info" size="small" @click="submitAdd">确认添加</van-button>
|
|
|
+ </van-col>
|
|
|
+ </van-form>
|
|
|
+ </van-dialog>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import { mapState, createNamespacedHelpers } from 'vuex';
|
|
|
+const { mapActions: adminLogin } = createNamespacedHelpers('adminLogin');
|
|
|
+const { mapActions: personal } = createNamespacedHelpers('personal');
|
|
|
+const { mapActions: upload } = createNamespacedHelpers('upload');
|
|
|
+export default {
|
|
|
+ name: 'detail-1',
|
|
|
+ props: {
|
|
|
+ form: { type: Object },
|
|
|
+ },
|
|
|
+ components: {},
|
|
|
+ data: function () {
|
|
|
+ return {
|
|
|
+ // 管理员信息
|
|
|
+ adminInfo: {},
|
|
|
+ // 选择机构
|
|
|
+ showPicker: false,
|
|
|
+ mechanismList: [],
|
|
|
+ // 申请类型
|
|
|
+ typePicker: false,
|
|
|
+ typeList: ['发明', '实用新型', '其他'],
|
|
|
+ // 选择发明人&&技术联系人
|
|
|
+ // 查询专利
|
|
|
+ show: false,
|
|
|
+ type: '',
|
|
|
+ // 属于手机号查询用户
|
|
|
+ searchName: '',
|
|
|
+ list: [],
|
|
|
+ limit: 4,
|
|
|
+ total: 0,
|
|
|
+ // 添加发明人&&技术联系人
|
|
|
+ addShow: false,
|
|
|
+ addForm: {},
|
|
|
+ };
|
|
|
+ },
|
|
|
+ created() {
|
|
|
+ this.searchUser();
|
|
|
+ this.search();
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ ...upload(['upload']),
|
|
|
+ ...adminLogin(['query']),
|
|
|
+ ...personal({ perQuery: 'query' }),
|
|
|
+
|
|
|
+ async search() {
|
|
|
+ let res = await this.query();
|
|
|
+ if (this.$checkRes(res)) {
|
|
|
+ let admin = res.data.find((i) => i.code == 'JLKJQY');
|
|
|
+ if (admin) {
|
|
|
+ this.$set(this, `adminInfo`, admin);
|
|
|
+ this.$set(this.form, `admin_id`, admin._id);
|
|
|
+ let arr = await this.query({ role: '2', pid: admin.id, code: 'JLKJQYCGD' });
|
|
|
+ if (this.$checkRes(res)) {
|
|
|
+ this.$set(this, `mechanismList`, arr.data);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ onSubmit() {
|
|
|
+ this.$emit('onSubmit', { data: this.form });
|
|
|
+ },
|
|
|
+ // 选择机构
|
|
|
+ mechanismCon(value) {
|
|
|
+ this.$set(this.form, `mechanism_name`, value.name);
|
|
|
+ this.$set(this.form, `mechanism_id`, value._id);
|
|
|
+ this.showPicker = false;
|
|
|
+ },
|
|
|
+ // 选择类型
|
|
|
+ typeCon(value) {
|
|
|
+ this.$set(this.form, `type`, value);
|
|
|
+ this.typePicker = false;
|
|
|
+ },
|
|
|
+ // 选择发明人&&技术联系人
|
|
|
+ selectinventor(type) {
|
|
|
+ this.$set(this, `type`, type);
|
|
|
+ this.show = true;
|
|
|
+ },
|
|
|
+ // 确认选择
|
|
|
+ conFirm(data) {
|
|
|
+ let user = { user_id: data.id, name: data.name };
|
|
|
+ if (this.type == 'inventor') this.form.inventor.push(user);
|
|
|
+ else if (this.type == 'contact') this.form.contact.push(user);
|
|
|
+ this.show = false;
|
|
|
+ },
|
|
|
+ // 查询用户
|
|
|
+ async searchUser({ skip = 0, limit = 5, ...info } = {}) {
|
|
|
+ info.code = this.user.code;
|
|
|
+ if (this.searchName) info.phone = this.searchName;
|
|
|
+ let res = await this.perQuery({ skip, limit, ...info });
|
|
|
+ if (this.$checkRes(res)) {
|
|
|
+ this.$set(this, `list`, res.data);
|
|
|
+ this.$set(this, `total`, res.total);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 添加发明人&&技术联系人
|
|
|
+ addinventor(type) {
|
|
|
+ this.$set(this, `type`, type);
|
|
|
+ this.addShow = true;
|
|
|
+ },
|
|
|
+ // 取消添加
|
|
|
+ resetAdd() {
|
|
|
+ this.addForm = {};
|
|
|
+ this.addShow = false;
|
|
|
+ },
|
|
|
+ // 确认添加
|
|
|
+ submitAdd() {
|
|
|
+ let data = this.addForm;
|
|
|
+ if (this.type == 'inventor') this.form.inventor.push(data);
|
|
|
+ else if (this.type == 'contact') this.form.contact.push(data);
|
|
|
+ this.addShow = false;
|
|
|
+ },
|
|
|
+ // 删除发明用户
|
|
|
+ delInv(data) {
|
|
|
+ this.form.inventor.splice(this.form.inventor.indexOf(data), 1);
|
|
|
+ },
|
|
|
+ // 删除技术联系人
|
|
|
+ delCon(data) {
|
|
|
+ this.form.contact.splice(this.form.contact.indexOf(data), 1);
|
|
|
+ },
|
|
|
+ async toUpload({ file }, model) {
|
|
|
+ // 上传,赋值
|
|
|
+ const res = await this.upload({ file, dir: 'file' });
|
|
|
+ if (this.$checkRes(res)) {
|
|
|
+ this.$set(this.form, model, [{ name: res.name, url: res.uri }]);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ toDelete(file, model) {
|
|
|
+ const index = this.form[model].findIndex((f) => _.isEqual(f, file));
|
|
|
+ this.form[model].splice(index, 1);
|
|
|
+ },
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ ...mapState(['user']),
|
|
|
+ },
|
|
|
+ metaInfo() {
|
|
|
+ return { title: this.$route.meta.title };
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ test: {
|
|
|
+ deep: true,
|
|
|
+ immediate: true,
|
|
|
+ handler(val) {},
|
|
|
+ },
|
|
|
+ },
|
|
|
+};
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="less" scoped>
|
|
|
+.dialog {
|
|
|
+ /deep/.van-dialog__content {
|
|
|
+ height: 400px;
|
|
|
+ overflow-y: auto;
|
|
|
+ }
|
|
|
+ .two {
|
|
|
+ .list {
|
|
|
+ border-bottom: 1px dashed #ccc;
|
|
|
+ margin: 0 0 8px 0;
|
|
|
+ padding: 8px;
|
|
|
+ .name {
|
|
|
+ font-size: 16px;
|
|
|
+ margin: 0 0 5px 0;
|
|
|
+ }
|
|
|
+ .other {
|
|
|
+ margin: 0 0 5px 0;
|
|
|
+ .otherInfo {
|
|
|
+ font-size: 14px;
|
|
|
+ color: #666;
|
|
|
+ span {
|
|
|
+ color: #000;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .btn {
|
|
|
+ text-align: center;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+/deep/.van-dialog {
|
|
|
+ width: 95%;
|
|
|
+}
|
|
|
+.inventor {
|
|
|
+ padding: 8px 18px;
|
|
|
+ background-color: #fff;
|
|
|
+ .inventor_btn {
|
|
|
+ text-align: center;
|
|
|
+ margin: 0 0 5px 0;
|
|
|
+ }
|
|
|
+ .inventor_list {
|
|
|
+ font-size: 15px;
|
|
|
+ color: #666;
|
|
|
+ }
|
|
|
+}
|
|
|
+.adddialog {
|
|
|
+ .btn {
|
|
|
+ margin: 8px 0;
|
|
|
+ text-align: center;
|
|
|
+ .van-button {
|
|
|
+ margin: 0 10px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+// 提醒信息
|
|
|
+.remark {
|
|
|
+ background-color: #ffffff;
|
|
|
+ padding: 8px;
|
|
|
+ font-size: 14px;
|
|
|
+ color: #ff0000;
|
|
|
+}
|
|
|
+</style>
|