123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- <template>
- <div id="index">
- <el-row>
- <el-col :span="24" class="main">
- <span v-if="display == 'list'">
- <el-col :span="24" class="btn">
- <el-button type="primary" size="mini" @click="add">添加信息</el-button>
- </el-col>
- <el-col :span="24" class="list">
- <data-table
- :fields="fields"
- :data="list"
- :total="total"
- @query="search"
- :opera="opera"
- @view="toView"
- @edit="toEdit"
- @delete="toDelete"
- ></data-table>
- </el-col>
- </span>
- <span v-else-if="display == 'detail'">
- <el-col :span="24" class="btn">
- <el-button type="primary" size="mini" @click="back">返回列表</el-button>
- </el-col>
- <el-col :span="24" class="detail">
- <data-form :data="form" :fields="formFields" @save="toSave">
- <template #custom="{item, form}">
- <template v-if="item.model === 'img_path'">
- <upload :limit="1" :data="form.img_path" type="img_path" :url="'/files/img_path/upload'" @upload="uploadSuccess"></upload>
- </template>
- <template v-if="item.model === 'file_path'">
- <uploadfile
- :limit="1"
- :data="form.file_path"
- type="file_path"
- listType=""
- :url="'/files/file_path/upload'"
- @upload="sucfile"
- @delete="delfile"
- ></uploadfile>
- </template>
- </template>
- </data-form>
- </el-col>
- </span>
- <span v-else-if="display == 'projectList'">
- <el-col :span="24" class="btn">
- <el-button type="primary" size="mini" @click="back">返回列表</el-button>
- </el-col>
- <el-col :span="24" class="projectList">
- <data-table :fields="profields" :opera="proopera" :data="prolist" :total="prototal" @query="prosearch" @view="proFetch"></data-table>
- </el-col>
- </span>
- <span v-else-if="display == 'projectDetail'">
- <el-col :span="24" class="btn">
- <el-button type="primary" size="mini" @click="back">返回列表</el-button>
- </el-col>
- <el-col :span="24" class="projectDetail">
- <projectInfo :info="projectDetail"></projectInfo>
- </el-col>
- </span>
- </el-col>
- </el-row>
- </div>
- </template>
- <script>
- import dataTable from '@/components/data-table.vue';
- import dataForm from '@/components/form.vue';
- import upload from '@/components/uploadone.vue';
- import uploadfile from '@/components/uploaddock.vue';
- import projectInfo from './parts/projectInfo.vue';
- import { mapState, createNamespacedHelpers } from 'vuex';
- const { mapActions: question } = createNamespacedHelpers('question');
- const { mapActions: projectsolic } = createNamespacedHelpers('projectsolic');
- export default {
- metaInfo() {
- return { title: this.$route.meta.title };
- },
- name: 'index',
- props: {},
- components: {
- dataTable,
- dataForm,
- upload,
- uploadfile,
- projectInfo,
- },
- data: function() {
- return {
- // 显示
- display: 'projectDetail',
- opera: [
- {
- label: '查看项目征集',
- method: 'view',
- },
- {
- label: '编辑',
- method: 'edit',
- },
- {
- label: '删除',
- method: 'delete',
- },
- ],
- fields: [
- { label: '信息标题', prop: 'title' },
- { label: '信息来源', prop: 'origin' },
- { label: '发布时间', prop: 'create_date' },
- ],
- list: [],
- total: 0,
- // 添加数据
- form: {},
- formFields: [
- { label: '信息标题', model: 'title' },
- { label: '发布时间', model: 'create_date', type: 'date' },
- { label: '信息来源', model: 'origin' },
- { label: '图片', model: 'img_path', custom: true },
- { label: '附件', model: 'file_path', custom: true },
- { label: '信息内容', model: 'content', type: 'editor' },
- ],
- // 项目征集列表
- proid: '',
- proopera: [
- {
- label: '详情',
- method: 'view',
- },
- ],
- profields: [
- { label: '项目名称', prop: 'name', showTip: true },
- { label: '项目负责人', prop: 'pro_user', showTip: true },
- { label: '联系电话', prop: 'pro_phone', showTip: true },
- ],
- prolist: [],
- prototal: 0,
- projectDetail: {
- content: '研究内容',
- coopera_company: '合作单位',
- coopera_phone: '合作单位联系电话',
- coopera_user: '合作单位联系人',
- create_time: '2021-02-08 15:01:33',
- field: '电子信息技术',
- id: '6020e30dea6754a4a83c18df',
- influence: '经济效益',
- meta: Object,
- name: '测试项目',
- pro_phone: '17096670503',
- pro_user: '测试单位',
- project_back: '项目背景',
- proposal_company: '建议单位',
- proposal_phone: '建议单位联系电话',
- proposal_user: '建议单位联系人',
- question_id: Object,
- quota: '核心指标',
- route: '技术路线',
- scale: '100',
- sign: '立项意义',
- techol_level: '国际领先',
- techol_stage: '理论研究',
- user_id: '601fa4ed1a45febbf084f439',
- work_basics: '前期基础',
- },
- };
- },
- async created() {
- await this.search();
- },
- methods: {
- ...question(['query', 'create', 'update', 'delete']),
- ...projectsolic({ solicQuery: 'query', solicFetch: 'fetch' }),
- async search({ skip = 0, limit = 10, ...info } = {}) {
- const res = await this.query({ skip, limit, ...info });
- if (this.$checkRes(res)) {
- this.$set(this, `list`, res.data);
- this.$set(this, `total`, res.total);
- }
- },
- // 修改
- toEdit({ data }) {
- this.$set(this, 'form', _.cloneDeep(data));
- this.display = 'detail';
- },
- // 删除
- async toDelete({ data }) {
- const res = await this.delete(data.id);
- if (this.$checkRes(res, '删除成功', '删除失败' || res.errmsg)) {
- this.search();
- }
- },
- // 添加数据
- add() {
- this.display = 'detail';
- },
- // 添加,修改
- async toSave({ data }) {
- const dup = _.cloneDeep(data);
- let res;
- if (dup.id) {
- res = await this.update(dup);
- } else {
- res = await this.create(dup);
- }
- if (this.$checkRes(res, '保存成功', res.errmsg || '保存失败')) {
- this.search();
- this.back();
- }
- },
- // 查看项目征集
- toView({ data }) {
- this.display = 'projectList';
- this.$set(this, `proid`, data._id);
- this.prosearch();
- },
- // 查看项目征集详情
- proFetch({ data }) {
- console.log(data);
- this.$set(this, `projectDetail`, data);
- this.display = 'projectDetail';
- },
- // 查看调研调查中的项目征集数据
- async prosearch({ skip = 0, limit = 10, ...info } = {}) {
- const res = await this.solicQuery({ skip, limit, question_id: this.proid });
- if (this.$checkRes(res)) {
- this.$set(this, `prolist`, res.data);
- this.$set(this, `prototal`, res.total);
- }
- },
- // 返回列表
- back() {
- this.form = {};
- this.display = 'list';
- this.search();
- },
- // 图片上传
- uploadSuccess({ type, data }) {
- this.$set(this.form, `${type}`, data.uri);
- },
- // 视频文件
- sucfile({ type, data }) {
- this.$set(this.form, `${type}`, data.uri);
- },
- delfile(index) {
- this.$set(this.form, `file_path`, '');
- },
- },
- computed: {
- ...mapState(['user']),
- },
- watch: {},
- };
- </script>
- <style lang="less" scoped>
- .main {
- padding: 0 15px 0 0;
- .btn {
- text-align: right;
- margin: 0 0 10px 0;
- }
- }
- </style>
|